Changeset 746

Show
Ignore:
Timestamp:
04/02/07 12:32:14 (2 years ago)
Author:
thomase
Message:

Closes ticket #239. Automatic transliteration of attested names, as well as population of titles for adds/edits through-the-web. Modification of loader code to handle coincident model changes and invoke auto-transliteration as well - UPDATE YOUR EXTERNAL METHODS. Make tests check everything and work properly (Neverpolis is illegal according to Latin name validation rules).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • PleiadesEntity/trunk/Extensions/loader.py

    r740 r746  
    272272            nid = names.invokeFactory("Name", 
    273273                    id=id, 
    274                     title=transliteration.encode('utf-8'), 
     274                    title = transliteration.encode('utf-8'), 
     275                    nameTransliterated=transliteration.encode('utf-8'), 
    275276                    nameAttested=nameAttested.encode('utf-8'), 
    276277                    nameLanguage=nameLanguage.encode('utf-8'), 
     
    287288            nid = names.duplicates.invokeFactory("Name", 
    288289                    id=id, 
    289                     title=transliteration.encode('utf-8'), 
     290                    title = transliteration.encode('utf-8'), 
     291                    nameTransliterated=transliteration.encode('utf-8'), 
    290292                    nameAttested=nameAttested.encode('utf-8'), 
    291293                    nameLanguage=nameLanguage.encode('utf-8'), 
  • PleiadesEntity/trunk/Extensions/ws_grek.py

    r740 r746  
    270270} 
    271271 
     272legal_punctuation = { 
     273    u"(" : "(", 
     274    u")" : ")", 
     275    u"." : "." 
     276} 
     277 
     278 
    272279def validate(value, allow): 
    273280    invalids = [] 
     
    340347                                b = grek_accented_modern_capital[c] 
    341348                            except: 
    342                                 pass 
     349                                try: 
     350                                    b = legal_punctuation[c] 
     351                                except: 
     352                                    pass 
    343353        transliteration += b 
    344354    return transliteration 
  • PleiadesEntity/trunk/Extensions/ws_latn.py

    r740 r746  
    5252} 
    5353 
     54legal_punctuation = { 
     55    u"(" : "(", 
     56    u")" : ")", 
     57    u"." : "." 
     58} 
     59 
    5460 
    5561def validate(value, allow): 
     
    8995                b = latn_capital[c] 
    9096            except: 
    91                 pass 
     97                try: 
     98                    b = legal_punctuation[c] 
     99                except: 
     100                    pass 
    92101        transliteration += b 
    93102    return transliteration 
  • PleiadesEntity/trunk/__init__.py

    r742 r746  
    5151from Globals import package_home 
    5252from Products.CMFCore import utils as cmfutils 
    53 from Products.CMFCore import permissions 
     53from Products.CMFCore import CMFCorePermissions 
    5454from Products.CMFCore import DirectoryView 
    5555from Products.CMFPlone.utils import ToolInit 
  • PleiadesEntity/trunk/config.py

    r742 r746  
    3939# in this file if found. 
    4040 
    41 from Products.CMFCore.permissions import setDefaultRoles 
     41from Products.CMFCore.CMFCorePermissions import setDefaultRoles 
    4242##code-section config-head #fill in your manual code here 
    4343##/code-section config-head 
  • PleiadesEntity/trunk/content/Name.py

    r740 r746  
    3737from Products.CMFCore.permissions import View 
    3838from Products.PleiadesEntity.Extensions.ws_validation import validate_name 
     39from Products.PleiadesEntity.Extensions.ws_transliteration import transliterate_name 
    3940##/code-section module-header 
    4041 
    41 copied_fields = {} 
    42 copied_fields['title'] = BaseSchema['title'].copy() 
    43 copied_fields['title'].widget.label = "Transliterated Name" 
    44 copied_fields['title'].widget.description = "A transliteration into the ASCII character set of the the attested name." 
    4542schema = Schema(( 
    4643 
    47     copied_fields['title'], 
    48         StringField( 
     44    StringField( 
    4945        name='nameAttested', 
    5046        index="ZCTextIndex", 
     
    7167        vocabulary=NamedVocabulary("""ancient-name-languages"""), 
    7268        enforceVocabulary=1 
     69    ), 
     70 
     71    StringField( 
     72        name='nameTransliterated', 
     73        widget=StringWidget( 
     74            label="Transliterated name", 
     75            label_msgid='PleiadesEntity_label_nameTransliterated', 
     76            i18n_domain='PleiadesEntity', 
     77        ) 
    7378    ), 
    7479 
     
    148153 
    149154    ##code-section class-header #fill in your manual code here 
     155    schema["title"].required = 0 
     156    schema["title"].widget.visible = {"edit": "invisible", "view": "invisible"} 
     157    schema["nameTransliterated"].widget.visible = {"edit": "invisible", "view": "visible"} 
    150158    ##/code-section class-header 
    151159 
     
    160168            periods.append(ta.getId) 
    161169        return periods 
     170 
     171    security.declarePublic('setNameTransliterated') 
     172    def setNameTransliterated(self,value): 
     173        """ 
     174        """ 
     175        if len(value) == 0: 
     176            REQUEST = self.REQUEST 
     177            tNameLanguage = REQUEST.get('nameLanguage', None) 
     178            tNameAttested = REQUEST.get('nameAttested', None) 
     179            if tNameLanguage and tNameAttested: 
     180                t = transliterate_name(tNameLanguage, tNameAttested) 
     181            else: 
     182                t = '' 
     183        else: 
     184            t = value 
     185        self.getField('nameTransliterated').set(self, t) 
     186        self.getField('title').set(self, t) 
     187 
     188    security.declarePublic('setNameAttested') 
     189    def setNameAttested(self,value): 
     190        """ 
     191        """ 
     192        self.getField('nameAttested').set(self, value) 
     193        self.setNameTransliterated('') 
     194 
     195    # Manually created methods 
    162196 
    163197    security.declareProtected(View, 'post_validate') 
     
    170204 
    171205 
     206 
    172207registerType(Name, PROJECTNAME) 
    173208# end of class Name 
  • PleiadesEntity/trunk/i18n/generated.pot

    r685 r746  
    279279msgstr "" 
    280280 
     281#. Default: "Transliterated name" 
     282#: content\Name.py 
     283msgid "PleiadesEntity_label_nameTransliterated" 
     284msgstr "" 
     285 
    281286#. Default: "Name Type" 
    282287#: content\Name.py 
  • PleiadesEntity/trunk/tests/Entities.txt

    r686 r746  
    3636    Entities 
    3737 
    38     >>> _ = names.invokeFactory('Name', id='neverpolis', title='Neverpolis', nameType='geographic') 
     38    >>> _ = names.invokeFactory('Name', id='civitasnon', title='Civitas Non', nameTransliterated='Civitas Non', nameAttested='Civitas Non', nameLanguage='la', nameType='geographic') 
    3939    >>> lid = locations.invokeFactory('Location') 
    4040    >>> pid = places.invokeFactory('Place') 
    4141    >>> p = getattr(folder.places, pid) 
    42     >>> aid = p.invokeFactory('PlacefulAssociation', id="neverpolis-%s" % lid) 
     42    >>> aid = p.invokeFactory('PlacefulAssociation', id="civitasnon-%s" % lid) 
    4343 
    4444    Add References 
    4545 
    46     >>> n = getattr(names, 'neverpolis') 
     46    >>> n = getattr(names, 'civitasnon') 
    4747    >>> x = getattr(locations, lid) 
    4848    >>> a = getattr(p, aid) 
     
    6464    >>> g.isGeoreferenced() 
    6565    True 
    66     >>> info = {'srs': 'EPSG:4326', 'geometryType': 'point', 'description': '', 'spatialCoordinates': '34.7697222222 -86.4808333333 0.0', 'url': 'http://nohost/plone/Members/test_user_1_/places/%s/%s' % (pid, aid), 'title': 'Neverpolis', 'id': aid} 
     66    >>> info = {'srs': 'EPSG:4326', 'geometryType': 'point', 'description': '', 'spatialCoordinates': '34.7697222222 -86.4808333333 0.0', 'url': 'http://nohost/plone/Members/test_user_1_/places/%s/%s' % (pid, aid), 'title': 'Civitas Non', 'id': aid} 
    6767    >>> g.getInfo() == info 
    6868    True 
     
    7373    >>> g.isGeoreferenced() 
    7474    True 
    75     >>> info = {'srs': 'EPSG:4326', 'geometryType': 'point', 'description': '', 'spatialCoordinates': '34.7697222222 -86.4808333333 0.0', 'url': 'http://nohost/plone/Members/test_user_1_/places/%s' % pid, 'title': 'Neverpolis', 'id': pid} 
     75    >>> info = {'srs': 'EPSG:4326', 'geometryType': 'point', 'description': '', 'spatialCoordinates': '34.7697222222 -86.4808333333 0.0', 'url': 'http://nohost/plone/Members/test_user_1_/places/%s' % pid, 'title': 'Civitas Non', 'id': pid} 
    7676    >>> g.getInfo() == info 
    7777    True 
    7878 
    7979    >>> c = IGeoCollectionSimple(places) 
    80     >>> c.getItemsInfo() == [{'srs': 'EPSG:4326', 'geometryType': 'point', 'description': '', 'spatialCoordinates': '34.7697222222 -86.4808333333 0.0', 'url': 'http://nohost/plone/Members/test_user_1_/places/%s' % pid, 'title': 'Neverpolis', 'id': pid}] 
     80    >>> c.getItemsInfo() == [{'srs': 'EPSG:4326', 'geometryType': 'point', 'description': '', 'spatialCoordinates': '34.7697222222 -86.4808333333 0.0', 'url': 'http://nohost/plone/Members/test_user_1_/places/%s' % pid, 'title': 'Civitas Non', 'id': pid}] 
    8181    True 
    8282 
  • PleiadesEntity/trunk/tests/LoadEntity.txt

    r734 r746  
    6464 
    6565    >>> n0 = getattr(folder.names, 'aphrodisias') 
    66     >>> n0.title 
     66    >>> n0.nameTransliterated 
    6767    u'Aphrodisias' 
    6868    >>> n0.Title() 
    6969    'Aphrodisias' 
     70    >>> n0.title 
     71    u'Aphrodisias' 
    7072    >>> n0.nameAttested 
    7173    u'\u1f08\u03c6\u03c1\u03bf\u03b4\u03b9\u03c3\u03b9\u1f71\u03c2' 
  • PleiadesEntity/trunk/tests/NameViews.txt

    r740 r746  
    5555     
    5656    >>> browser.contents 
     57    '...Transliterated name...' 
     58     
     59    >>> browser.contents 
    5760    '...Language and Writing System...' 
    5861     
     
    8790    >>> control = browser.getControl(name='nameLanguage') 
    8891    >>> control.value = ['la'] 
    89     >>> control = browser.getControl(name='title') 
    90     >>> control.value = 'Innoxium Municipium' 
    9192    >>> browser.getControl(name='form_submit').click() 
    9293    >>> browser.contents 
     
    101102    >>> control = browser.getControl(name='nameLanguage') 
    102103    >>> control.value = ['grc'] 
    103     >>> control = browser.getControl(name='title') 
    104     >>> control.value = 'Municipium Noxium Maximum' 
    105104    >>> browser.getControl(name='form_submit').click() 
    106105    >>> browser.contents 
  • PleiadesEntity/trunk/version.txt

    r740 r746  
    1 0.1 build 260 
     10.1 build 274