Changeset 8477 for mauRepo/MolesManager


Ignore:
Timestamp:
31/07/12 15:35:45 (7 years ago)
Author:
mnagni
Message:

Implemented adapters for TM_Instant, TM_Period and partially for CEDA_Observation

Added a Sphinx documentation folder

Location:
mauRepo/MolesManager/trunk
Files:
23 added
1 deleted
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • mauRepo/MolesManager/trunk/src/MolesManager/views/cedaObservationView.py

    r8445 r8477  
    3535from MolesManager.djencoder import encodeToJSON 
    3636from ea_model.ceda_metadatamodel.ceda_observation.ceda_observation import CEDA_Observation 
     37from MolesManager.views.moles2gui import encodeCedaMoles2Json 
    3738 
    3839 
     
    5253    if record: 
    5354        c['coObs'] = encodeToJSON(record) 
     55         
     56        #c['new_coObs'] = encodeCedaMoles2Json(record) 
     57         
    5458        guid = request.moles3EPB.retrieveGUIDFromInstance(record) 
    5559        if guid: 
  • mauRepo/MolesManager/trunk/src/MolesManager/views/moles2gui/__init__.py

    r8476 r8477  
    88from MolesManager.djencoder import escapeForJSON 
    99import operator 
     10import inspect 
    1011 
    1112""" 
     
    1516""" 
    1617 
    17 _encodeMapper = {'ea_model.moles3_4.utilities.mo_organisation.MO_Organisation': ('MolesManager.views.moles2gui.relatedParty', 'Party'), 
    18                  'ea_model.moles3_4.utilities.mo_individual.MO_Individual': ('MolesManager.views.moles2gui.relatedParty', 'Party'), 
    19                  'ea_model.moles3_4.utilities.mo_responsiblepartyinfo.MO_ResponsiblePartyInfo': ('MolesManager.views.moles2gui.relatedParty', 'RelatedParty') 
     18_encodeMapper = {'ea_model.iso_19108_2006_temporal_schema.temporal_objects.tm_instant.TM_Instant':  
     19                    ('MolesManager.views.moles2gui.om.instant', 'Instant'), 
     20                 'ea_model.iso_19108_2006_temporal_schema.temporal_objects.tm_period.TM_Period':  
     21                    ('MolesManager.views.moles2gui.om.period', 'Period'),                     
     22                 'ea_model.moles3_4.utilities.mo_organisation.MO_Organisation':  
     23                    ('MolesManager.views.moles2gui.mo.party', 'Party'), 
     24                 'ea_model.moles3_4.utilities.mo_individual.MO_Individual':  
     25                    ('MolesManager.views.moles2gui.mo.party', 'Party'), 
     26                 'ea_model.moles3_4.utilities.mo_responsiblepartyinfo.MO_ResponsiblePartyInfo':  
     27                    ('MolesManager.views.moles2gui.mo.responsiblePartyInfo', 'ResponsiblePartyInfo'), 
     28                 'ea_model.ceda_metadatamodel.ceda_observation.ceda_observation.CEDA_Observation':  
     29                    ('MolesManager.views.moles2gui.ceda.observation', 'Observation')                     
    2030                 } 
    2131 
     
    8191 
    8292    @classmethod 
    83     def _cedaObjToAdapterMapping(cls, instance, cedaObj): 
    84         if type(cedaObj) in cls.acceptedTypes:        
     93    def _cedaObjToAdapterMapping(cls, instance, cedaObject): 
     94        if type(cedaObject) in cls.acceptedTypes:        
    8595            for item in cls.mapper.items(): 
    86                 setattr(instance, item[0], getData(cedaObj, item[1])) 
    87  
    88     def postCedaObjToAdapterMapping(self, cedaObj): 
     96                setattr(instance, item[0], getData(cedaObject, item[1])) 
     97 
     98    @classmethod 
     99    def _adapterToCedaObjMapping(cls, instance, cedaObj): 
     100        for item in cls.mapper.items():             
     101            _setData(cedaObj, item[1], getattr(instance, item[0])) 
     102 
     103    def postCedaObjToAdapterMapping(self, cedaObject): 
    89104        """ 
    90105        Refines the mapping done using the internal `mapper`. 
     
    95110        """ 
    96111        pass 
     112     
     113    def postAdapterToCedaObjMapping(self, cedaObject): 
     114        """ 
     115        Refines the mapping done using the internal `mapper`. 
     116        If some mapping are possible only at a later moment override this method 
     117         
     118        **Parameters** 
     119                * cedaObject: the Ceda object instance which has to be mapped from the adapter 
     120        """ 
     121    pass 
    97122 
    98123    @classmethod 
    99     def cedaObjToAdapter(cls, cedaObj): 
     124    def cedaObjToAdapter(cls, cedaObject): 
    100125        """ 
    101126        Injects a new attribute in a CedaMolesGuiAdapter. Using the 2 component `attributeMap` tuple, 
     
    105130            
    106131        **Parameters** 
    107             * cedaObj: a Ceda object instance  
     132            * cedaObject: a Ceda object instance  
    108133        """ 
    109134        adapter = cls() 
    110         if type(cedaObj) not in cls.acceptedTypes: 
     135        if type(cedaObject) not in cls.acceptedTypes: 
    111136            raise Exception ("Not accepted type mapping") 
    112137         
    113         if cedaObj is not None: 
     138        if cedaObject is not None: 
    114139            setattr(adapter, 'id', None) 
    115             if hasattr(cedaObj, 'id'): 
    116                 setattr(adapter, 'id', cedaObj.id) 
     140            if hasattr(cedaObject, 'id'): 
     141                setattr(adapter, 'id', cedaObject.id) 
    117142                 
    118             setattr(adapter, '_module', cedaObj.__module__)         
    119             setattr(adapter, '_clazz', cedaObj.__class__.__name__)         
     143            setattr(adapter, '_module', cedaObject.__module__)         
     144            setattr(adapter, '_clazz', cedaObject.__class__.__name__)         
    120145        setattr(adapter, '_adapter_module', adapter.__module__)         
    121146        setattr(adapter, '_adapter_clazz', adapter.__class__.__name__) 
    122147             
    123         cls._cedaObjToAdapterMapping(adapter, cedaObj) 
    124         adapter.postCedaObjToAdapterMapping(cedaObj) 
     148        cls._cedaObjToAdapterMapping(adapter, cedaObject) 
     149        adapter.postCedaObjToAdapterMapping(cedaObject) 
    125150         
    126151        return adapter 
    127152 
    128     def decode(self, cedaObj):        
    129         if type(cedaObj) not in self.acceptedTypes: 
     153    def decode(self, cedaObject):        
     154        if type(cedaObject) not in self.acceptedTypes: 
    130155            raise Exception ("Not accepted type mapping") 
    131156 
    132         for item in self.mapper.items():             
    133             _setData(cedaObj, item[1], getattr(self, item[0])) 
     157        self._adapterToCedaObjMapping(self, cedaObject) 
     158        self.postAdapterToCedaObjMapping(cedaObject) 
    134159 
    135160class _Moles2guiEncoder(JSONEncoder): 
     
    282307        return _encodeCedaMoles2Adapter(newobj)             
    283308     
     309def _isPrimitive(obj): 
     310    # Is a simple primitive? 
     311    return obj is None \ 
     312            or isinstance(obj, str) \ 
     313            or isinstance(obj, int) \ 
     314            or isinstance(obj, unicode) 
     315     
     316     
    284317def _encodeCedaMoles2Adapter(cedaObj): 
    285     # Is a simple primitive? 
    286     if cedaObj is None \ 
    287             or isinstance(cedaObj, str) \ 
    288             or isinstance(cedaObj, unicode): 
     318    if _isPrimitive(cedaObj): 
    289319        return cedaObj 
    290320     
     
    301331def _decodeJson2Adapter(json): 
    302332    decJson = json 
     333     
     334    if _isPrimitive(decJson) and not isinstance(decJson, str): 
     335        return decJson  
     336     
    303337    if not isinstance(json, dict): 
    304338        try: 
     
    316350        _setDataToAdapter(adapter, item[0], decJson[item[0]]) 
    317351    return adapter 
     352 
     353def unicodeToString(text): 
     354    if isinstance(text, unicode): 
     355        return str(text) 
     356    return text 
     357 
     358def hasAttrNotNone(obj, name): 
     359    return hasattr(obj, name) and getattr(obj, name) is not None 
  • mauRepo/MolesManager/trunk/src/libs/migration/processor/commons.py

    r8460 r8477  
    230230        @param timestring: a time string formatted as '%Y-%m-%dT%H:%M:%SZ' 
    231231    ''' 
    232     return datetime.datetime.strptime(timestring, datetime_format) 
     232    try: 
     233        return datetime.datetime.strptime(timestring, datetime_format) 
     234    except: 
     235        pass 
    233236 
    234237def _getDocument(source): 
     
    564567        @param datetime: a datetime.datetime instance         
    565568    ''' 
     569    if datetime is None: 
     570        return 
    566571    dateTime = DateTime() 
    567572    dateTime.century = (datetime.year / 100) + 1 
  • mauRepo/MolesManager/trunk/tests/moles2gui/creationFactory.py

    r8476 r8477  
    3333from libs.migration.processor.commons import createCI_OnlineResource,\ 
    3434    createCI_Address, createCI_Telephone, createCI_Contact,\ 
    35     createMO_Organization, createMO_Individual, createMO_ResponsiblePartyInfo 
     35    createMO_Organization, createMO_Individual, createMO_ResponsiblePartyInfo,\ 
     36    isoDateTimeStringToTimeDate, createDateTime, createTM_Position,\ 
     37    createTM_Instant, fromDateStringToPhenomenonTime 
    3638from MolesManager.codelist import getCLValue, MM_RoleValue 
     39from ea_model.ceda_metadatamodel.ceda_observation.ceda_observation import CEDA_Observation 
    3740 
    3841def assembleMO_Individual(name = 'CedaTest', iid = 1): 
     
    6063    rp.id =iid 
    6164    return rp 
     65 
     66def assembleTM_Instant(timestring = '2012-01-01T01:01:01Z'): 
     67    """ 
     68    Returns a TM_Instant instance 
     69         
     70    **Parameters** 
     71        * timestring: a time string formatted as '%Y-%m-%dT%H:%M:%SZ' 
     72    """ 
     73    py_datetime = isoDateTimeStringToTimeDate(timestring) 
     74    date_time = createDateTime(py_datetime)     
     75    tm_position = createTM_Position(dateTime8601 = date_time) 
     76    return createTM_Instant(tm_position) 
     77 
     78def assembleObservation(phenomenonTime = '2002-07-22/2011-08-06'): 
     79    ceda_observation = CEDA_Observation() 
     80    ceda_observation.relatedParty = assembleMO_ResponsiblePartyInfo() 
     81    ceda_observation.resultTime = assembleTM_Instant() 
     82    ceda_observation.phenomenonTime = fromDateStringToPhenomenonTime(phenomenonTime) 
     83    return ceda_observation 
  • mauRepo/MolesManager/trunk/tests/moles2gui/mo/party.py

    r8476 r8477  
    3232''' 
    3333import unittest 
    34 from moles2gui.creationFactory import assembleMO_Organization, assembleMO_Individual,\ 
    35     assembleMO_ResponsiblePartyInfo 
     34from moles2gui.creationFactory import assembleMO_Organization, assembleMO_Individual 
    3635from json import loads, dumps 
    3736from MolesManager.views.moles2gui import encodeCedaMoles2Json,\ 
    38     decodeJson2CedaMoles, dictByID, getData, _encodeCedaMoles2Adapter 
    39 from MolesManager.codelist import getCLValue, MM_RoleValue 
     37    decodeJson2CedaMoles, getData 
    4038 
    4139 
     
    5048 
    5149    def tearDown(self): 
    52         pass 
     50        pass             
    5351 
    54     def testGUIs(self): 
    55         self.validateMO_Individual1() 
    56         self.validateMO_Individual2()   
    57         self.validateMO_Organization1()    
    58         self.validateMO_Organization2()         
    59         self.validatResponsibleParty1() 
    60         self.validatResponsibleParty2() 
    61         self.validatResponsibleParty3()         
    62  
    63     def validateMO_Individual1(self):        
     52    def testValidateMO_Individual1(self):        
    6453        party = assembleMO_Individual() 
    65         jparty = encodeCedaMoles2Json(party) 
     54        json = encodeCedaMoles2Json(party) 
    6655        #----------------------- test ------------------------ 
    67         decJson = loads(jparty) 
     56        decJson = loads(json) 
    6857        self.assertEqual(decJson['name'], party.name, "Error") 
    6958        #----------------------------------------------------- 
    7059         
    7160        #----------------------- test ------------------------ 
    72         nparty = decodeJson2CedaMoles(json = jparty, cedaMoleObj = party) 
     61        nparty = decodeJson2CedaMoles(json = json, cedaMoleObj = party) 
    7362        self.assertEqual(nparty.name, party.name, "decodeJson2CedaMoles Error") 
    7463        #----------------------------------------------------- 
    7564 
    76     def validateMO_Individual2(self):        
     65    def testValidateMO_Individual2(self):        
    7766        party = assembleMO_Individual() 
    7867        jparty = encodeCedaMoles2Json(party) 
     
    8675        #--------------------------------------------------------- 
    8776 
    88     def validateMO_Organization1(self):        
     77    def testValidateMO_Organization1(self):        
    8978        party = assembleMO_Organization() 
    9079        jparty = encodeCedaMoles2Json(party) 
     
    9988        #----------------------------------------------------- 
    10089 
    101     def validateMO_Organization2(self):        
     90    def testValidateMO_Organization2(self):        
    10291        party = assembleMO_Organization() 
    10392        jparty = encodeCedaMoles2Json(party) 
     
    11099        self.assertEqual(decJson['helpEmail'], getData(nparty, 'contactInfo[0].address.electronicMailAddress'), "decodeJson2CedaMoles Error") 
    111100        #----------------------------------------------------- 
    112  
    113     def validatResponsibleParty1(self): 
    114         rp = assembleMO_ResponsiblePartyInfo() 
    115         jrp = encodeCedaMoles2Json(rp) 
    116          
    117         #----------------------- test ------------------------ 
    118         ordParty = dictByID(rp.party) 
    119         decJson = loads(jrp) 
    120         for party in decJson['party']: 
    121             self.assertEqual(party['name'], ordParty[party['id']].name, "Error") 
    122         #----------------------------------------------------- 
    123         decodeJson2CedaMoles(jrp, cedaMoleObj = rp) 
    124  
    125     def validatResponsibleParty2(self): 
    126         # Creates a MO_ResponsibleParty and modifies 
    127         newrp = assembleMO_ResponsiblePartyInfo()  
    128         if len(newrp.party[0].contactInfo) > 0: 
    129             newrp.party[0].contactInfo[0].address.electronicMailAddress.append('mau@mau.net') 
    130         else: 
    131             newrp.party[1].contactInfo[0].address.electronicMailAddress.append('mau@mau.net') 
    132              
    133         # Converts to json to simulate a modified incoming json from the page 
    134         jrp = encodeCedaMoles2Json(newrp) 
    135          
    136         # Creates a MO_Responsible party to simulate the original responsibleParty 
    137         oldrp = assembleMO_ResponsiblePartyInfo() 
    138                  
    139         #----------------------- test ------------------------ 
    140         # Updates the "original" using the modified json  
    141         decodeJson2CedaMoles(jrp, cedaMoleObj = oldrp) 
    142         # Now the oldrp should look equal to newrp 
    143         for newparty in newrp.party: 
    144             for oldparty in  oldrp.party: 
    145                 if oldparty.id == newparty.id: 
    146                     self.assertTrue(len(oldparty.contactInfo) ==  len(newparty.contactInfo), "Error") 
    147                     if len(oldparty.contactInfo) == 0: 
    148                         continue 
    149                     for email in oldparty.contactInfo[0].address.electronicMailAddress: 
    150                         self.assertTrue(email in newparty.contactInfo[0].address.electronicMailAddress, "Error") 
    151         #----------------------------------------------------- 
    152  
    153     def validatResponsibleParty3(self): 
    154         rp = assembleMO_ResponsiblePartyInfo(role = getCLValue(MM_RoleValue.cl_pointofcontact)) 
    155         adapter = _encodeCedaMoles2Adapter(rp) 
    156          
    157         #----------------------- test ------------------------ 
    158         for party in adapter.party: 
    159             self.assertTrue(len(party.helpString) > 0, "Error") 
    160         #----------------------------------------------------- 
    161          
    162         jrp = encodeCedaMoles2Json(rp) 
    163         decodeJson2CedaMoles(jrp, cedaMoleObj = rp) 
    164  
    165 if __name__ == "__main__": 
    166     #import sys;sys.argv = ['', 'Test.testName'] 
    167     unittest.main() 
Note: See TracChangeset for help on using the changeset viewer.