Skip to content

Commit e8b43fc

Browse files
author
sreeder
committed
test before accessing anootations
1 parent 1c4552c commit e8b43fc

File tree

4 files changed

+86
-62
lines changed

4 files changed

+86
-62
lines changed

odmtools/controller/olvDataTable.py

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ def init(self, memDB):
5454
def __merge_dataframe_with_annotations(self):
5555
data_list = self.dataframe.values.tolist()
5656
data = data_list
57-
58-
for key, value in self.annotations_grouped.iteritems():
59-
for i in range(0, len(data_list)):
60-
if key in data[i]:
61-
data[i].append(value)
62-
break
57+
if self.annotations_grouped:
58+
for key, value in self.annotations_grouped.iteritems():
59+
for i in range(0, len(data_list)):
60+
if key in data[i]:
61+
data[i].append(value)
62+
break
6363

6464
return data
6565

@@ -68,18 +68,21 @@ def __group_annotations(self):
6868
Ideally, this method should only be called once. Use self.grouped_annotations after calling this method
6969
:return:
7070
"""
71-
anno_list = self.annotations.values.tolist()
72-
73-
anno = {}
74-
for i in range(0, len(anno_list)):
75-
value_id = anno_list[i][1]
76-
annotation_code = anno_list[i][-1]
77-
if value_id in anno:
78-
anno[value_id].append(annotation_code)
79-
else:
80-
anno[value_id] = [annotation_code]
81-
82-
return anno
71+
if (self.annotations):
72+
anno_list = self.annotations.values.tolist()
73+
74+
anno = {}
75+
for i in range(0, len(anno_list)):
76+
value_id = anno_list[i][1]
77+
annotation_code = anno_list[i][-1]
78+
if value_id in anno:
79+
anno[value_id].append(annotation_code)
80+
else:
81+
anno[value_id] = [annotation_code]
82+
83+
return anno
84+
else:
85+
return None
8386

8487
def EnableSorting(self):
8588
self.Bind(wx.EVT_LIST_COL_CLICK, self.on_column_selected)

odmtools/odmdata/memory_database.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def __init__(self, taskserver=None):
4747
def reset_edit(self):
4848
sm = ServiceManager()
4949
self.mem_service = sm.get_series_service(conn_string="sqlite:///:memory:")
50+
self.annotation_list = pd.DataFrame()
5051
setSchema(self.mem_service._session_factory.engine)
5152

5253
def set_series_service(self, service):

odmtools/odmservices/edit_service.py

Lines changed: 59 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -512,58 +512,71 @@ def save(self, result=None):
512512
# upsert values
513513
self.memDB.series_service.upsert_values(values)
514514
# save new annotations
515-
self.add_annotations(self.memDB.annotation_list)
515+
if len(self.memDB.annotation_list >0):
516+
self.add_annotations(self.memDB.annotation_list)
517+
return result
516518
except Exception as e:
517519
logger.error("Exception encountered while saving: {}".format(e))
518-
return result
520+
return None
519521

520522
def save_existing(self, result):
521523
result = self.save(result)
522524
return result
523525

524526
def save_appending(self, result, overwrite=True):
525-
values = self.memDB.getDataValuesDF()
526-
527-
# get value count
528-
vc = result.ValueCount
529-
# set in df
530-
values["resultid"] = result.ResultID
531-
532-
# count = overlap calc
533-
count = self.overlapcalc(result, values, overwrite)
534-
# set value count = res.vc+valuecount-count
535-
valuecount = result.ValueCount + vc - count
536-
# update result
537-
self.updateResult(result, valuecount)
538-
# insert values
539-
self.memDB.series_service.upsert_values(values)
540-
# save new annotations
541-
self.add_annotations(self.memDB.annotation_list)
542-
543-
return result
544-
545-
def save_as(self, variable, method, proc_level, action, action_by):
546-
#save as new series
547-
values = self.memDB.getDataValuesDF()
548-
# get all annotations for series
549-
annolist= self.memDB.series_service.get_annotations_by_result(str(values["resultid"][0]))
550-
annolist['valueid']=None
527+
try:
551528

552-
# create series
553-
result = self.getResult(variable, method, proc_level, action, action_by)
529+
values = self.memDB.getDataValuesDF()
554530

555-
# set in df
556-
values["resultid"] = result.ResultID
557-
# insert values
558-
self.memDB.series_service.insert_values(values)
531+
# get value count
532+
vc = result.ValueCount
533+
# set in df
534+
values["resultid"] = result.ResultID
559535

560-
# save all annotations
561-
frames = [self.memDB.annotation_list, annolist]
562-
annolist = pd.concat(frames)
563-
self.add_annotations(annolist)
536+
# count = overlap calc
537+
count = self.overlapcalc(result, values, overwrite)
538+
# set value count = res.vc+valuecount-count
539+
valuecount = result.ValueCount + vc - count
540+
# update result
541+
self.updateResult(result, valuecount)
542+
# insert values
543+
self.memDB.series_service.upsert_values(values)
544+
# save new annotations
545+
if len(self.memDB.annotation_list >0):
546+
self.add_annotations(self.memDB.annotation_list)
547+
return result
548+
except Exception as e:
549+
logger.error("Exception encountered while performing a save as: {}".format(e))
550+
return None
564551

552+
def save_as(self, variable, method, proc_level, action, action_by):
565553

566-
return result
554+
try:
555+
#save as new series
556+
values = self.memDB.getDataValuesDF()
557+
# get all annotations for series
558+
annolist= self.memDB.series_service.get_annotations_by_result(str(values["resultid"][0]))
559+
annolist['valueid']=None
560+
561+
# create series
562+
result = self.getResult(variable, method, proc_level, action, action_by)
563+
564+
# set in df
565+
values["resultid"] = result.ResultID
566+
# insert values
567+
self.memDB.series_service.insert_values(values)
568+
569+
#combine all of the annotations new annotations with the existing
570+
frames = [self.memDB.annotation_list, annolist]
571+
annolist = pd.concat(frames)
572+
# save all annotations
573+
if len(annolist >0):
574+
self.add_annotations(annolist)
575+
576+
return result
577+
except Exception as e:
578+
logger.error("Exception encountered while performing a save as: {}".format(e))
579+
return None
567580

568581
def getResult(self, var, meth, proc, action, action_by):
569582
values = self.memDB.getDataValuesDF()
@@ -602,17 +615,19 @@ def getResult(self, var, meth, proc, action, action_by):
602615
newaction.MethodID = action.MethodID
603616
newaction.ActionTypeCV = "Derivation"
604617

605-
print newaction
618+
print "creating an action"
606619
newaction = self.memDB.series_service.create.createAction(newaction) # it times out. find out why
607620
print newaction
608621

609622

610623
# create Actionby done
624+
print "creating an actionby"
611625
action_by.ActionID = newaction.ActionID
612626
action_by= self.memDB.series_service.create.createActionby(action_by)
613627
print action_by
614628

615629

630+
print "creating a feature_action"
616631
# create FeatureAction (using current sampling feature id)
617632
sampling_feature = result.FeatureActionObj.SamplingFeatureObj
618633
self.memDB.series_service.read._session.expunge(result.FeatureActionObj.SamplingFeatureObj)
@@ -625,6 +640,7 @@ def getResult(self, var, meth, proc, action, action_by):
625640
feature_action = self.memDB.series_service.create.createFeatureAction(feature_action)
626641
print feature_action
627642

643+
print "creating a result"
628644
# create TimeSeriesResult - this should also contain all of the stuff for the Result
629645
time, offset = self.get_current_time_and_utcoffset()
630646

@@ -674,9 +690,9 @@ def overlapcalc(self, result, values, overwrite):
674690
#is there any overlap
675691
dbend = result.FeatureActionObj.ActionObj.EndDateTime
676692
dfstart = datetime.datetime.strptime(str(np.min(values["valuedatetime"])), form)
677-
overlap = dbend>= dfstart
693+
overlap = dbend >= dfstart
678694
#number of overlapping values
679-
overlapdf = values[(values["valuedatetime"]<= dfstart) & (values["valuedatetime"]>= dbend)]
695+
overlapdf = values[(values["valuedatetime"] <= dfstart) & (values["valuedatetime"] >= dbend)]
680696
count =len(overlapdf)
681697
#if not overwrite. remove any overlapping values from df
682698
if overlap:
@@ -710,6 +726,7 @@ def add_annotations(self, annolist):
710726
mynewdf= newdf[["valueid_y","annotationid"]]
711727
mynewdf.columns = ["ValueID", "AnnotationID"]
712728

729+
713730
# save df to db
714731
self.memDB.series_service.add_annotations(mynewdf)
715732

odmtools/odmservices/series_service.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -611,8 +611,9 @@ def get_current_time_and_utcoffset(self):
611611

612612

613613

614-
def insert_annotations(self, annotations):
615-
annotations.to_sql(name="timeseriesresultvalueannotations", if_exists='append', con=self._session_factory.engine, index=False)
614+
# def insert_annotations(self, annotations):
615+
# setSchema(self._session_factory.engine)
616+
# annotations.to_sql(name="timeseriesresultvalueannotations", if_exists='append', con=self._session_factory.engine, index=False)
616617

617618

618619
def _get_df_query(self, values):
@@ -787,6 +788,7 @@ def create_annotation(self, code, text, link=None):
787788
return self.create_annotation_by_anno(annotation)
788789

789790
def add_annotations(self, anno_list):
791+
setSchema(self._session_factory.engine)
790792
try:
791793
#tablename = TimeSeriesResultValueAnnotations.__tablename__
792794
#print ("I am TS saving name the table name", tablename)
@@ -872,6 +874,7 @@ def get_all_annotations(self):
872874

873875
def get_annotations_by_result(self, resultid):
874876
resultid = int(resultid)
877+
setSchema(self._session_factory.engine)
875878

876879
q = self.read._session.query(TimeSeriesResultValueAnnotations.AnnotationID, TimeSeriesResultValueAnnotations.ValueID,
877880
TimeSeriesResultValues.ResultID, TimeSeriesResultValues.ValueDateTime, Annotations.AnnotationCode)\

0 commit comments

Comments
 (0)