- Timestamp:
- 06/07/12 15:57:19 (9 years ago)
- Location:
- mauRepo/MolesManager/trunk
- Files:
-
- 2 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
mauRepo/MolesManager/trunk/resources/requirements.txt
r8430 r8445 11 11 # --extra-index-url http://ciprod1.cems.rl.ac.uk/pip 12 12 # to your pip install 13 ceda-moles-model==0.1. 113 ceda-moles-model==0.1.4 -
mauRepo/MolesManager/trunk/src/MolesManager/moles3epb.py
r8434 r8445 49 49 from ea_model.moles3_4.utilities.ceda_rolevalue import CEDA_RoleValue 50 50 from MolesManager.codelist import MM_RoleValue, getCLValue 51 from libs.migration.processor.commons import fromPhenomenonTimeToString 52 from datetime import datetime 53 from ascore.utils import synchAttributes 51 54 52 55 class Moles3EPBFactory(EPB): … … 159 162 else: 160 163 setattr(coll, k, val) 164 synchAttributes(coll) 161 165 self._controlledCommit() 162 166 return coll … … 174 178 return unifyGeometriesAsBBox(bboxes, self) 175 179 180 def getUnifyObservationCollectionPhenomenonTime(self, collection): 181 """ 182 Returns the time period of the collections.member'a phenomenonTime(s) 183 @param collection: an CEDA_ObservationColleciton instance 184 @return: a tuple (startDate, endDate) 185 """ 186 ptStart = [] 187 ptEnd = [] 188 for member in collection.member: 189 for pt in member.phenomenonTime: 190 ptString = fromPhenomenonTimeToString(pt) 191 if ptString[0] is not None: 192 ptStart.append(datetime.strptime(ptString[0], '%Y-%m-%d')) 193 if ptString[1] is not None: 194 ptEnd.append(datetime.strptime(ptString[1], '%Y-%m-%d')) 195 ptStart.sort() 196 ptEnd.sort() 197 start = None 198 end = None 199 #takes the earlier date 200 if len(ptStart) > 0: 201 start = ptStart[0] 202 #takes the latest date 203 if len(ptEnd) > 0: 204 end = ptEnd[len(ptEnd) - 1] 205 return start, end 206 207 208 209 #return unifyGeometriesAsBBox(bboxes, self) 210 176 211 177 212 def retrieveGUIDFromInstance(self, instance): … … 335 370 ge.eastBoundLongitude, ge.northBoundLatitude) 336 371 return None 372 373 def getUnifyObservationCollectionPhenomenonTime(collection): 374 """ 375 Returns the time period of the collections.member'a phenomenonTime(s) 376 @param collection: an CEDA_ObservationColleciton instance 377 @return: a tuple (startDate, endDate) strings 378 """ 379 dateFormat = '%Y-%m-%d' 380 ptStart = [] 381 ptEnd = [] 382 for member in collection.member: 383 if member.phenomenonTime is None: 384 continue 385 386 pt = member.phenomenonTime 387 ptString = fromPhenomenonTimeToString(pt) 388 if ptString[0] is not None: 389 ptStart.append(datetime.strptime(ptString[0], dateFormat)) 390 if ptString[1] is not None: 391 ptEnd.append(datetime.strptime(ptString[1], dateFormat)) 392 ptStart.sort() 393 ptEnd.sort() 394 start = None 395 end = None 396 #takes the earlier date 397 if len(ptStart) > 0: 398 start = ptStart[0].strftime(dateFormat) 399 #takes the latest date 400 if len(ptEnd) > 0: 401 end = ptEnd[len(ptEnd) - 1].strftime(dateFormat) 402 return start, end -
mauRepo/MolesManager/trunk/src/MolesManager/static/js/cedaSearch.js
r8289 r8445 1 ''' 2 Created on 1 Nov 2011 1 define(['dojo'], function(dojo){ 2 console.log("loads cedaSearch.js") 3 // function <nameOfFunction>(parameter, parameter2..etc coming in){ 4 // write operations to prepare value to return 5 // 6 // return(<value>); 7 // } 3 8 4 @author: mnagni 5 ''' 6 from django.shortcuts import render_to_response, redirect 7 from django.core.context_processors import csrf 8 from MolesManager.views import cedaObservationView 9 from MolesManager.ceda_guid import CedaGUID 10 from MolesManager.moles3epb import Moles3EPB 9 require(['dojo/ready', 'dojo/parser', 'dijit/registry', 'dojo/_base/json', 'dojo/store/Memory', 10 'dijit/Tree', 'dijit/form/Button'], function(ready, parser, registry, Tree){ 11 ready(function () { 12 13 //---------------------------------------------- 14 //----- Initializes the necessary widgets ------ 15 //---------------------------------------------- 16 //var obs_id = new dijit.form.TextBox({ 17 // value: '' /* no or empty value! */ 18 //}, 'obs_id'); 19 //obs_id.startup(); 20 21 var button = new dijit.form.Button({ 22 type: "submit", 23 label: "Search", 24 // onClick: function(){ console.log("First button was clicked!"); } 25 }, "search_obs"); 26 button.startup(); 27 28 var records_dataLineage = new dijit.form.Textarea({ 29 value: "" 30 }, "records_dataLineage"); 31 records_dataLineage.startup(); 11 32 12 13 """ 14 def __getResponseByGuid(request, guid): 15 ceda_guid = Moles3EPB.search(CedaGUID, guid, request.moles_session) 16 if ceda_guid and ceda_guid.ceda_observation: 17 return redirect(cedaObservationView.coView, ceda_guid.ceda_observation) 18 """ 19 20 def __doSearch(request, keywords): 21 ''' 22 @param request: an HttpRequest 23 @param keywords: an list of strings 24 @return: the first Observation or None 25 ''' 26 obsevations = Moles3EPB.extractObservationByTitleKeywords(keywords, request.moles_session) 27 titles = [] 28 for o in obsevations: 29 titles.append(o.identifier[0].authority.title) 30 #return obsevations.first() 31 return titles 32 33 34 def coSearch(request): 35 c = {} 36 if 'searchTerm' in request.POST: 37 c['searchResults'] = __doSearch(request, request.POST['searchTerm']) 38 39 c.update(csrf(request)) 40 if c == {} : 41 print "AAA" 42 return render_to_response('cedaObservation.html', c) 43 else : 44 print "BBB" 45 found = False 46 try: 47 a = c['searchResults'] 48 found = True 49 except Exception, ex: 50 pass 51 #for a in c: 52 # b=c[a] 53 # print "b=", b, "a=", a 54 # if a != "csrf_token": 55 # print b.result 56 # #if b.hasattr("__key__"): 57 # # print b.__key__ 58 if not found: 59 return render_to_response('cedaSearch.html', c) 60 return render_to_response('cedaSearchResults.html', c) 33 //---------------------------------------------- 34 //---------- Loads the widgets values ---------- 35 //---------------------------------------------- 36 37 var json = dojo.byTitle('coSearch_id').value; 38 var coObs = dojo.fromJson(json); 39 dojo.attr("title_id", 'value', ''); 40 }); 41 }); 42 }); -
mauRepo/MolesManager/trunk/src/MolesManager/urls.py
r8433 r8445 21 21 urlpatterns += patterns('MolesManager.views.cedaObservationView', 22 22 23 (r'cov/(\ w+)$', 'coView'),23 (r'cov/(\d+)$', 'objView'), 24 24 ) 25 26 urlpatterns += patterns('MolesManager.views.cedaObservationCollectionView', 27 28 (r'cov2/(\d+)$', 'objView'), 29 ) 30 31 urlpatterns += patterns('MolesManager.views.cedaSearch', 32 (r'guid/(\w+)$', 'getResponseByGuid'), 33 ) 34 35 25 36 26 37 urlpatterns += patterns('MolesManager.views.cedaBrowse', -
mauRepo/MolesManager/trunk/src/MolesManager/views/cedaObservationView.py
r8435 r8445 34 34 from django.core.context_processors import csrf 35 35 from MolesManager.djencoder import encodeToJSON 36 #from django.utils.safestring import mark_safe37 36 from ea_model.ceda_metadatamodel.ceda_observation.ceda_observation import CEDA_Observation 38 37 39 38 40 39 41 def coView(request, obs_id_str):40 def objView(request, req_id_str): 42 41 record = None 43 42 try: 44 obs_id = int(obs_id_str)45 record = _getCedaObservation(request, obs_id)43 req_id = int(req_id_str) 44 record = _getCedaObservation(request, req_id) 46 45 except ValueError: 47 46 pass … … 68 67 'inSupportOf.abstract', 'dataLineage'] 69 68 return request.moles3EPB.searchSelectiveLoad(CEDA_Observation, obs_id, eagerloadthese) 70 #return Moles3EPB.searchEager(CEDA_Observation, obs_id) -
mauRepo/MolesManager/trunk/src/MolesManager/views/cedaSearch.py
r8434 r8445 5 5 ''' 6 6 from django.core.context_processors import csrf 7 from django.shortcuts import render_to_response 7 from django.shortcuts import render_to_response, redirect 8 from MolesManager.ceda_guid import CedaGUID 9 import cedaObservationView 10 import cedaObservationCollectionView 8 11 9 """ 10 def __getResponseByGuid(request, guid): 11 ceda_guid = Moles3EPB.search(CedaGUID, guid, request.moles_session) 12 def getResponseByGuid(request, guid): 13 ceda_guid = request.moles3EPB.search(CedaGUID, guid) 12 14 if ceda_guid and ceda_guid.ceda_observation: 13 return redirect(cedaObservationView.coView, ceda_guid.ceda_observation) 14 """ 15 return cedaObservationView.objView(request, ceda_guid.ceda_observation) 16 if ceda_guid and ceda_guid.ceda_observationcollection: 17 return cedaObservationCollectionView.objView(request, ceda_guid.ceda_observationcollection) 15 18 16 19 def __doSearch(request, keywords): -
mauRepo/MolesManager/trunk/src/MolesManager/views/cedacat.py
r8339 r8445 13 13 ceda_guid = request.moles3EPB.search(CedaGUID, guid) 14 14 if ceda_guid and ceda_guid.ceda_observation: 15 return redirect(cedaObservationView. coView, ceda_guid.ceda_observation)15 return redirect(cedaObservationView.objView, ceda_guid.ceda_observation) 16 16 17 17 if ceda_guid and ceda_guid.ceda_observationcollection: -
mauRepo/MolesManager/trunk/src/libs/epb.py
r8435 r8445 191 191 @classmethod 192 192 def _drillALLData(cls, obj): 193 if obj is None: 194 return 193 195 if isinstance(obj, list): 194 196 for element in obj: -
mauRepo/MolesManager/trunk/src/libs/migration/processor/commons.py
r8433 r8445 70 70 from ea_model.ceda_metadatamodel.ceda_computation.ceda_processing import CEDA_Processing 71 71 from ea_model.ceda_metadatamodel.ceda_result.ceda_result import CEDA_Result 72 import datetime 72 73 73 74 base = '/exist/rest/atoms' … … 935 936 ceda_project.projectResource = project_resource 936 937 return ceda_project 938 939 def fromDateStringToPhenomenonTime(doc_phenomenon_time): 940 """ 941 Transforms a date string like '2002-07-22' (startDate) in a TM_Instant instance or 942 '2002-07-22/2011-08-06' (start/endDate) in a TM_Period instance 943 @param doc_phenomenon_time: a date string in the expected format 944 """ 945 if doc_phenomenon_time: 946 pt = None 947 if '/' in doc_phenomenon_time: 948 period = doc_phenomenon_time.split('/') 949 begin_date = createDate(isoDateStringToTimeDate(period[0])) 950 begin_position = createTM_Position(date8601 = begin_date) 951 begin_tm_instant = createTM_Instant(begin_position) 952 953 end_date = createDate(isoDateStringToTimeDate(period[1])) 954 end_position = createTM_Position(date8601 = end_date) 955 end_tm_instant = createTM_Instant(end_position) 956 957 pt = createTM_Period(begin_tm_instant, end_tm_instant) 958 else: 959 tm_position = createTM_Position(date8601 = createDate(isoDateStringToTimeDate(doc_phenomenon_time))) 960 pt = createTM_Instant(tm_position) 961 return pt 962 963 def fromPhenomenonTimeToString(phenomenonTime): 964 """ 965 Transforms a TM_Instant instance in a date string like '2002-07-22' (startDate) or 966 a TM_Period instance in a string like '2002-07-22/2011-08-06' (start/endDate) 967 @param phenomenonTime: a aTM_Instace or a TM_Period instance 968 @return a pair startDate, endDate. If endDate does not exists return startDate, None 969 """ 970 if phenomenonTime is None: 971 return None 972 startDate =None 973 endDate = None 974 if isinstance(phenomenonTime, TM_Instant): 975 startDate = _tm_InstantToString(phenomenonTime) 976 elif isinstance(phenomenonTime, TM_Period): 977 startDate = _tm_InstantToString(phenomenonTime.begin) 978 endDate = _tm_InstantToString(phenomenonTime.end) 979 return startDate, endDate 980 981 def comparePhenomenonTimes(p1, p2): 982 s1 = fromPhenomenonTimeToString(p1) 983 s2 = fromPhenomenonTimeToString(p2) 984 return s1[0] == s2[0] and s1[1] == s2[1] 985 986 def _tm_InstantToString(tm_instant): 987 idate = tm_instant.position.date8601 988 return str(datetime.date(int(idate.year), int(idate.month), int(idate.day))) 989 990 def fromGeographicBoundingBoxToString(geographicBoundingBox): 991 if geographicBoundingBox is None: 992 return None 993 return ('%f %f,%f %f') % (geographicBoundingBox.eastBoundLongitude, geographicBoundingBox.northBoundLatitude, \ 994 geographicBoundingBox.westBoundLongitude, geographicBoundingBox.southBoundLatitude) 937 995 996 def compareGeographicBoundingBoxes(gb1, gb2): 997 return fromGeographicBoundingBoxToString(gb1) == fromGeographicBoundingBoxToString(gb2) -
mauRepo/MolesManager/trunk/src/libs/migration/processor/dataEntity.py
r8433 r8445 40 40 calculateHash, findDOIInMigrationDocument,\ 41 41 hasMOBeenProcessed, getAtomDocumentHashByMO, extractTitle, extractSummary,\ 42 createEX_GeographicBoundingBox 42 createEX_GeographicBoundingBox, fromDateStringToPhenomenonTime,\ 43 comparePhenomenonTimes, compareGeographicBoundingBoxes 43 44 from libs.migration.processor.deployment import DeploymentProcessor 44 45 from logging import StreamHandler … … 49 50 getCLValue 50 51 from ea_model.ceda_metadatamodel.ceda_observationcollection.ceda_observationcollection import CEDA_ObservationCollection 52 from MolesManager.moles3epb import getUnifyObservationCollectionPhenomenonTime 51 53 CEDA_TITLE = 'ceda_title' 52 54 … … 80 82 geographicExtent = createEX_GeographicBoundingBox(float(east), float(north), \ 81 83 float(west), float(south)) 82 if self._dataEntityHasBeenProcessed: 83 DataEntityProcessor.log.warn('The _assignGeographicExtent update is skipped because not implemented') 84 return 85 86 self.epbRepo.moles3EPB.updateCedaObject(ceda_observationCollection, {'geographicExtent': geographicExtent}) 84 85 if len(ceda_observationCollection.geographicExtent) == 0 or \ 86 (len(ceda_observationCollection.geographicExtent) > 0 and \ 87 not compareGeographicBoundingBoxes(geographicExtent, \ 88 ceda_observationCollection.geographicExtent[0])): 89 self.epbRepo.moles3EPB.updateCedaObject(ceda_observationCollection, \ 90 {'geographicExtent': geographicExtent}) 87 91 else: 88 92 self._report.append(NoGeographicalExtensionException(self._dataEntityMigration)) 89 93 94 def _assignPhenomenonTime(self, ceda_observationCollection): 95 start, end = getUnifyObservationCollectionPhenomenonTime(ceda_observationCollection) 96 dateString = start 97 if end is not None: 98 dateString = '%s/%s' % (start, end) 99 pt = fromDateStringToPhenomenonTime(dateString) 100 101 if ceda_observationCollection.phenomenonTime is not None \ 102 and (len(ceda_observationCollection.phenomenonTime) == 0 \ 103 or (len(ceda_observationCollection.phenomenonTime) == 1 and \ 104 not comparePhenomenonTimes(ceda_observationCollection.phenomenonTime[0], pt))): 105 self.epbRepo.moles3EPB.updateCedaObject(ceda_observationCollection, {'phenomenonTime': pt}) 90 106 91 107 def _assignDescription(self, ceda_observationCollection): … … 243 259 except Exception as ex: 244 260 self._report.append(ex) 261 245 262 self._assignGeographicExtent(obsColl) 263 self._assignPhenomenonTime(obsColl) 246 264 247 265 return self._report -
mauRepo/MolesManager/trunk/src/libs/migration/processor/deployment.py
r8435 r8445 50 50 createCI_ResponsibleParty, extractUpdateFrequency,\ 51 51 findLinksInMigrationDocument, findSubTypeInDPT, extractMolesPublishedDate,\ 52 createMD_Keywords, hasMOBeenProcessed, createMO_Individual 52 createMD_Keywords, hasMOBeenProcessed, createMO_Individual,\ 53 fromDateStringToPhenomenonTime, fromPhenomenonTimeToString,\ 54 comparePhenomenonTimes 53 55 from libs.epb import EPB 54 56 from libs.migration.processor.deployment_data import DeploymentDataProcessor … … 439 441 #Still have to update observation.geographicExtent 440 442 441 def _assignPhenomenonTime(self, observation): 443 def _assignPhenomenonTime(self, observation): 442 444 if self._deploymentHasSameHash and getattr(observation, 'phenomenonTime') != None: 443 445 return 444 446 445 doc_phenomenon_time = extractMolesTemporalRange(self._deploymentMigration) 446 if doc_phenomenon_time: 447 pt = None 448 if '/' in doc_phenomenon_time: 449 period = doc_phenomenon_time.split('/') 450 begin_date = createDate(isoDateStringToTimeDate(period[0])) 451 begin_position = createTM_Position(date8601 = begin_date) 452 begin_tm_instant = createTM_Instant(begin_position) 453 454 end_date = createDate(isoDateStringToTimeDate(period[1])) 455 end_position = createTM_Position(date8601 = end_date) 456 end_tm_instant = createTM_Instant(end_position) 457 458 pt = createTM_Period(begin_tm_instant, end_tm_instant) 459 else: 460 tm_position = createTM_Position(date8601 = createDate(isoDateStringToTimeDate(doc_phenomenon_time))) 461 pt = createTM_Instant(tm_position) 462 463 if not self._deploymentHasBeenProcessed: 464 observation.phenomenonTime = pt 465 #Still have to update observation.phenomenonTime 447 doc_phenomenon_time = extractMolesTemporalRange(self._deploymentMigration) 448 pt = fromDateStringToPhenomenonTime(doc_phenomenon_time) 449 450 if not self._deploymentHasBeenProcessed or not comparePhenomenonTimes(pt,observation.phenomenonTime): 451 self.epbRepo.moles3EPB.updateCedaObject(observation, {'phenomenonTime': pt}) 452 #Now update phenomenonTime but has to remove the previous phenomenonTime 466 453 467 454 def _assignPermission(self, observation): -
mauRepo/MolesManager/trunk/src/libs/migration/tests/commontest.py
r8186 r8445 5 5 ''' 6 6 from unittest import TestCase 7 from libs.migration.processor.commons import isoDateTimeStringToTimeDate 7 from libs.migration.processor.commons import isoDateTimeStringToTimeDate,\ 8 fromDateStringToPhenomenonTime, fromPhenomenonTimeToString,\ 9 comparePhenomenonTimes 8 10 9 11 … … 21 23 self.assertRaises(ValueError, isoDateTimeStringToTimeDate, time1) 22 24 25 def testFromDateStringToPhenomenonTime(self): 26 temporalRange = '2002-07-22/2011-08-06' 27 pt = fromDateStringToPhenomenonTime(temporalRange) 28 print pt 23 29 24 30 def testFromPhenomenonTimeToString(self): 31 temporalRange = '2002-07-22/2011-08-06' 32 pt = fromDateStringToPhenomenonTime(temporalRange) 33 ptString = fromPhenomenonTimeToString(pt) 34 startDate, endDate = temporalRange.split('/') 35 self.assertTrue(startDate == ptString[0], "Error") 36 self.assertTrue(endDate == ptString[1], "Error") 25 37 38 temporalRange = '2002-07-22' 39 pt = fromDateStringToPhenomenonTime(temporalRange) 40 ptString = fromPhenomenonTimeToString(pt) 41 startDate, endDate = temporalRange, None 42 self.assertTrue(startDate == ptString[0], "Error") 43 self.assertTrue(endDate == ptString[1], "Error") 26 44 45 def testComparePhenomenonTimes(self): 46 p1 = fromDateStringToPhenomenonTime('2002-07-22/2011-08-06') 47 p2 = fromDateStringToPhenomenonTime('2002-07-22/2011-08-06') 48 self.assertTrue(comparePhenomenonTimes(p1,p2), "Error") 27 49 50 p2 = fromDateStringToPhenomenonTime('2002-07-22/2011-08-05') 51 self.assertFalse(comparePhenomenonTimes(p1,p2), "Error") 52 53 p2 = fromDateStringToPhenomenonTime('2002-07-22') 54 self.assertFalse(comparePhenomenonTimes(p1,p2), "Error") 55
Note: See TracChangeset
for help on using the changeset viewer.