@@ -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
0 commit comments