Skip to content

Commit f519169

Browse files
author
stephanie
committed
update caloverlap
1 parent a071d9a commit f519169

7 files changed

Lines changed: 119 additions & 61 deletions

File tree

odmtools/controller/WizardActionController.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ def get_affiliation(self):
4646
return self.affiliations[index]
4747

4848

49+
50+
4951
if __name__ == '__main__':
5052
app = wx.App(False)
5153
controller = WizardActionController(None, None)

odmtools/controller/logicCellEdit.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def fetchCensorCodeChoices(self):
4040
return [NULL]
4141

4242
series_service = self.serviceManager.get_series_service()
43-
return [NULL] + [x.Term for x in series_service.get_censor_code_cvs()]
43+
return [NULL] + [x.Name for x in series_service.get_censor_code_cvs()]
4444

4545
def fetchQualityCodeChoices(self):
4646
"""
@@ -50,7 +50,7 @@ def fetchQualityCodeChoices(self):
5050
return [NULL]
5151

5252
series_service = self.serviceManager.get_series_service()
53-
return [NULL] + [x.Term for x in series_service.get_quality_code()]
53+
return [NULL] + [x.Name for x in series_service.get_quality_code()]
5454

5555
def fetchTimeUnitChoices(self):
5656
if not self.serviceManager:

odmtools/controller/logicEditTools.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ def save(self, var=None, method=None, qcl=None):
257257
Publisher.sendMessage("scroll")
258258
return result
259259

260-
def save_as(self, var=None, method=None, qcl=None, action = None, actionby = None):
260+
def save_as(self, variable=None, method=None, proc_level=None, action = None, action_by = None):
261261
"""
262262
263263
:param var:
@@ -266,10 +266,10 @@ def save_as(self, var=None, method=None, qcl=None, action = None, actionby = Non
266266
:param override:
267267
:return:
268268
"""
269-
result = self._edit_service.save_as(var=var, method=method, qcl=qcl, action = action, actionby = actionby)
269+
result = self._edit_service.save_as(variable=variable, method=method, proc_level=proc_level, action = action, action_by = action_by)
270270
if self._record:
271271
self._script(
272-
"edit_service.save_as(%s, %s, %s, %s, %s)\n" % (self.saveFactory(var, method, qcl, action, actionby)),
272+
"edit_service.save_as(%s, %s, %s, %s, %s)\n" % (self.saveFactory(variable, method, proc_level, action, action_by)),
273273
'black')
274274
#self._script("edit_service.save(%s, %s, %s, saveAs=%s)\n" % (var, method, qcl, isSave), 'black')
275275
Publisher.sendMessage("scroll")

odmtools/gui/wizSave.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ def get_metadata(self):
272272
action.ActionFileLink = self.action_page.action_view.action_file_link_text_box.GetValue()
273273
action.MethodObj.OrganizationObj = affiliation.OrganizationObj
274274
action.BeginDateTime = self.currSeries.ResultDateTime
275+
action.BeginDateTimeUTCOffset = self.currSeries.ResultDateTimeUTCOffset
275276

276277
return site, variable, method, action, processing_level
277278

@@ -454,7 +455,7 @@ def on_wizard_finished(self, event):
454455
affiliation = self.action_page.get_affiliation()
455456

456457
action_by = ActionBy()
457-
action_by.ActionID = action.ActionID
458+
#action_by.ActionID = action.ActionID
458459
action_by.RoleDescription = self.action_page.action_view.role_description_text_box.GetValue()
459460
action_by.AffiliationID = affiliation.AffiliationID
460461
action_by.AffiliationObj = affiliation

odmtools/odmdata/memory_database.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def chunking(self, data):
160160

161161

162162
#break into chunks to get around sqlite's restriction. allowing user to send in only 999 arguments at once
163-
#TODO update to work with odm2
163+
164164

165165
def updateFlag(self, ids, value):
166166

@@ -211,8 +211,9 @@ def addPoints(self, points):
211211
"resultid":self.df["resultid"][0]
212212
# todo: Add annotations
213213
}
214-
if point[8]:
215-
self.updateFlag(point[1], self.series_service.get_annotation_by_id(point[8]).AnnotationID)
214+
if point[8] != 'NULL':
215+
print point[8]
216+
self.updateFlag([point[1]], [point[8]])
216217

217218
setSchema(self.mem_service._session_factory.engine)
218219
self.mem_service._session.execute(stmt, vals)

odmtools/odmservices/edit_service.py

Lines changed: 103 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -499,50 +499,40 @@ def save(self, result=None):
499499
self.add_annotations(self.memDB.annotation_list)
500500
return result
501501

502+
def save_existing(self, result):
503+
result = self.save(result)
504+
return result
505+
502506
def save_appending(self, result, overwrite=True):
503507
values = self.memDB.getDataValuesDF()
504508

505-
# get save result
506-
507509
# get value count
508510
vc = result.ValueCount
509511
# set in df
510512
values["resultid"] = result.ResultID
511513
# update result
512514
self.updateResult(result)
513515
# count = overlap calc
514-
count = self.overlapcalc()
516+
count = self.overlapcalc(result, values, overwrite)
515517
# set value count = res.vc+valuecount-count
516-
result.ValueCount = result.ValueCount+ vc -count
518+
result.ValueCount = result.ValueCount + vc - count
519+
self.memDB.series_service.update.updateResult(result.ResultID, result.ValueCount)
517520
# insert values
518521
self.memDB.series_service.upsert_values(values)
519522
# save new annotations
520523
self.add_annotations(self.memDB.annotation_list)
521-
return result
522-
523-
524-
def save_existing(self, result):
525-
#values = self.memDB.getDataValuesDF()
526-
# get save result
527-
528-
# set in df
529-
#values["resultid"]=result.ResultID
530-
531-
# save(values)
532-
self.save(result)
533524

534525
return result
535526

536527
def save_as(self, variable, method, proc_level, action, action_by):
537528
#save as new series
538529
values = self.memDB.getDataValuesDF()
539530
# get all annotations for series
540-
annolist= self.memDB.series_service.get_annotations_by_result(values["resultid"][0])
541-
annolist['valueid']
531+
annolist= self.memDB.series_service.get_annotations_by_result(str(values["resultid"][0]))
532+
annolist['valueid']=None
542533

543534
# create series
544-
result = self.getResult(variable, method, proc_level)
545-
result.ValueCount = 0
535+
result = self.getResult(variable, method, proc_level, action, action_by)
546536

547537
# set in df
548538
values["resultid"] = result.ResultID
@@ -557,14 +547,15 @@ def save_as(self, variable, method, proc_level, action, action_by):
557547

558548
return result
559549

560-
def getResult(self, var, meth, proc, action, actionby):
550+
def getResult(self, var, meth, proc, action, action_by):
561551
values = self.memDB.getDataValuesDF()
562552
# copy old
563-
result = self.memDB.series_service.get_series(values["resultid"][0])
564-
sampling_feature = result.FeatureActionObj.SamplingFeatureObj
565-
# self.memDB.series_service._session.expunge(result)
553+
result = self.memDB.series_service.get_series(str(values["resultid"][0]))
554+
result.ResultID = None
555+
result.ResultUUID = None
556+
566557

567-
# change var, meth proc, in df #intend ts, agg stat
558+
# change var, meth proc, in df #intend ts, agg sta
568559
if var:
569560
result.VariableID = var.VariableID
570561
result.VariableObj = var
@@ -574,43 +565,98 @@ def getResult(self, var, meth, proc, action, actionby):
574565
result.ProcessingLevelObj = proc
575566

576567
if meth:
568+
action.MethodID = meth.MethodID
577569
result.FeatureActionObj.ActionObj.MethodID = meth.MethodID
578-
result.FeatureActionObj.ActionObj.MethodObj = meth
579570

580571
#if result does not exist
581-
if self.memDB.series_service.resultExists(result):
582-
action.ActionTypeCV = "derivation"
583-
# create Actionby done
584-
585-
# create FeatureAction (using current sampling feature id)
586-
feature_action = FeatureActions()
587-
feature_action.SamplingFeatureID = sampling_feature.SamplingFeatureID
588-
feature_action.SamplingFeatureObj = sampling_feature
589-
590-
# create TimeSeriesResult - this should also contain all of the stuff for the Result (hopefully the result will actually be of type, TimeSeriesResult)
591-
series = TimeSeriesResults()
592-
593-
594-
572+
if not self.memDB.series_service.resultExists(result):
573+
try:
574+
#create Action
575+
action.ActionID = None
576+
#action.MethodObj = None
577+
action.ActionTypeCV = "Derivation"
578+
self.memDB.series_service.read._session.expunge(action.MethodObj.OrganizationObj)
579+
self.memDB.series_service.read._session.expunge(action.MethodObj)
580+
action = self.memDB.series_service.create.create(action)
581+
print action
582+
583+
584+
# create Actionby done
585+
action_by.ActionID = action.ActionID
586+
action_by= self.memDB.series_service.create.createActionby(action_by)
587+
print action_by
588+
589+
590+
# create FeatureAction (using current sampling feature id)
591+
sampling_feature = result.FeatureActionObj.SamplingFeatureObj
592+
self.memDB.series_service.read._session.expunge(result.FeatureActionObj.SamplingFeatureObj)
593+
594+
feature_action = FeatureActions()
595+
feature_action.SamplingFeatureID = sampling_feature.SamplingFeatureID
596+
feature_action.ActionID = action.ActionID
597+
feature_action.ActionObj = action
598+
feature_action.SamplingFeatureObj = sampling_feature
599+
feature_action = self.memDB.series_service.create.createFeatureAction(feature_action)
600+
print feature_action
601+
602+
# create TimeSeriesResult - this should also contain all of the stuff for the Result
603+
time, offset = self.get_current_time_and_utcoffset()
604+
605+
result.ValueCount = 0
606+
result.FeatureActionID = feature_action.FeatureActionID
607+
result.ResultDateTime = time
608+
result.ResultDateTimeUTCOffset = offset
609+
result.FeatureActionObj= feature_action
610+
self.memDB.series_service.read._session.expunge(result.ProcessingLevelObj)
611+
self.memDB.series_service.read._session.expunge(result.VariableObj)
612+
self.memDB.series_service.read._session.expunge(result)
613+
614+
615+
result = self.memDB.series_service.create.createResult(result)
616+
print result
617+
except Exception as ex:
618+
print ex
595619
return self.updateResult(result)
596620

597-
form = "%Y-%m-%d %H:%M:%S"
598-
def updateResult(self, Result):
621+
622+
def updateResult(self, result):
599623
form = "%Y-%m-%d %H:%M:%S"
600624
# get pd
601625
values = self.memDB.getDataValuesDF()
602626

603627
# update count, dates,
604-
Action = Result.FeatureActionObj.ActionObj
605-
Action.BeginDateTime= datetime.datetime.strptime(str(np.min(values['valuedatetime'])), form)
606-
Action.EndDateTime = datetime.datetime.strptime(str(np.max(values["valuedatetime"])), form)
607-
Result.ValueCount = len(values)
608-
return Result
628+
action = result.FeatureActionObj.ActionObj
629+
action.BeginDateTime= datetime.datetime.strptime(str(np.min(values['valuedatetime'])), form)
630+
action.EndDateTime = datetime.datetime.strptime(str(np.max(values["valuedatetime"])), form)
631+
result.ValueCount = len(values)
632+
self.memDB.series_service.update.updateResult(result.ResultID, result.ValueCount)
633+
self.memDB.series_service.update.updateAction(actionID=action.ActionID, begin=action.BeginDateTime, end=action.EndDateTime)
609634

610-
def overlapcalc(self):
611-
pass
635+
return result
636+
637+
def overlapcalc(self, result, values, overwrite):
638+
form = "%Y-%m-%d %H:%M:%S"
639+
640+
#is there any overlap
641+
dbend = result.FeatureActionObj.ActionObj.EndDateTime
642+
dfstart = datetime.datetime.strptime(str(np.min(values["valuedatetime"])), form)
643+
overlap = dbend>= dfstart
644+
#number of overlapping values
645+
overlapdf = values[(values["valuedatetime"]>= dfstart) & (values["valudatetime"]<= dbend)]
646+
count =len(overlapdf)
647+
#if not overwrite. remove any overlapping values from df
648+
if overlap:
649+
if not overwrite:
650+
values = values[values["valuedatetime"] > dbend]
651+
652+
# return the number of overlapping values
653+
return count
612654

613655
def add_annotations(self, annolist):
656+
#match up with existing values and get value id
657+
#get df with only ValueID and AnnotationID
658+
#remove any duplicates
659+
#save df to db
614660
pass
615661

616662

@@ -810,3 +856,11 @@ def reconcile_dates(self, parent_series_id):
810856
pass
811857

812858

859+
def get_current_time_and_utcoffset(self):
860+
current_time = datetime.datetime.now()
861+
utc_time = datetime.datetime.utcnow()
862+
863+
difference_in_timezone = current_time - utc_time
864+
offset_in_hours = difference_in_timezone.total_seconds() / 3600
865+
866+
return current_time, offset_in_hours

odmtools/odmservices/series_service.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ def resultExists(self, result):
340340
# return self._edit_session.query(Results).filter_by(
341341
# VariableID=var_id, MethodID=method_id,
342342
# AnnotationID=qcl_id).first()
343-
res = self._session.query(exists().where(Results.ResultTypeCV == result.ResultTypeCV).
343+
ret = self._session.query(exists().where(Results.ResultTypeCV == result.ResultTypeCV).
344344
where(Results.VariableID == result.VariableID).
345345
where(Results.UnitsID == result.UnitsID).
346346
where(Results.ProcessingLevelID == result.ProcessingLevelID).
@@ -349,7 +349,7 @@ def resultExists(self, result):
349349
# where(Results.FeatureActionID == result.FeatureActionID).
350350

351351

352-
return res
352+
return ret.scalar()
353353
except:
354354
return None
355355

@@ -870,7 +870,7 @@ def get_quality_code(self):
870870

871871
def get_annotation_by_code(self, code):
872872
return self.read.getAnnotations(codes=[code])[0]
873-
def get_annotation_by_id (self, id):
873+
def get_annotation_by_id(self, id):
874874
return self.read.getAnnotations(ids=[id])[0]
875875
def get_all_annotations(self):
876876
return self.read.getAnnotations(type=None)

0 commit comments

Comments
 (0)