Skip to content

Commit 11f5f81

Browse files
author
stephanie
committed
alter wizsave
1 parent 5eac1c7 commit 11f5f81

5 files changed

Lines changed: 140 additions & 72 deletions

File tree

odmtools/controller/pageExisting.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,5 @@ def initTable(self, dbservice, site_id):
8080

8181
self.pnlExisting.olvSeriesList.SetColumns(seriesColumns)
8282
objects = dbservice.get_series_by_site(site_id=site_id)
83+
8384
self.pnlExisting.olvSeriesList.SetObjects(objects)

odmtools/gui/wizSave.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ def _init_ctrls(self, prnt):
226226

227227
def get_metadata(self):
228228
# method = self.currSeries.FeatureActionObj.ActionObj.MethodObj
229-
# processing_level = self.currSeries.quality_control_level
229+
# processing_level = self.currSeriefs.quality_control_level
230230
# variable = self.currSeries.variable
231231
# action =
232232

@@ -453,11 +453,10 @@ def on_wizard_finished(self, event):
453453
'''
454454

455455

456-
TODO: move all of this stuff into the edit_service file
456+
#TODO: move all of this stuff into the edit_service file
457457
# Create action
458-
new_result = self.series_service.createResult(var=variable, meth=method, proc=proc_level)
459-
#TODO create a timeseriesresult
460-
#TODO create a featureaction
458+
new_result = self.series_service.getResult(var=variable, meth=method, proc=proc_level)
459+
461460
# action = self.series_service.create.createAction(action)
462461

463462
affiliation = self.action_page.get_affiliation()
@@ -468,15 +467,20 @@ def on_wizard_finished(self, event):
468467
new_action_by.AffiliationID = affiliation.AffiliationID
469468
new_action_by.AffiliationObj = affiliation
470469

470+
#TODO end
471+
471472
try:
472473
if rbSave:
473474
result = self.record_service.save()
474475
elif rbSaveAsNew:
476+
#TODO send in Action, and Actionby
475477
result = self.record_service.save_as(variable, method, proc_level)
476478
elif rbSaveAsExisting:
477479
if overwrite:
480+
#TODO send in just the result
478481
result = self.record_service.save_existing(variable, method, proc_level)
479482
elif append:
483+
#TODO send in just the result
480484
#def save_appending(self, var = None, method =None, qcl = None, overwrite = False):
481485
#TODO if i require that original or new is selected I can call once with overwrite = original
482486
if original:

odmtools/odmservices/edit_service.py

Lines changed: 57 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -482,71 +482,103 @@ def restore(self):
482482
self.reset_filter()
483483

484484
def save(self, result=None):
485+
values = self.memDB.df
485486
if not result:
486-
result = self.memDB.series_service.get_series(series_id = self.memDB.df['resultid'])[0]
487+
result = self.memDB.series_service.get_series(series_id = values['resultid'][0])
487488
# update result
488489
self.updateResult(result)
489490
# upsert values
490-
self.memDB.series_service.upsert(self.memDB.df)
491+
self.memDB.series_service.upsert(values)
491492
# save new annotations
492493
self.add_annotations(self.memDB.annotation_list)
493494
return result
494495

495-
def saveAppend(self, variable, method, proc_level, overwrite=True):
496+
def saveAppend(self, result, overwrite=True):
497+
values = self.memDB.df
498+
496499
# get save result
497-
result= self.memDB.series_service.get_series_by_id_quint(variable, method, proc_level)
500+
498501
# get value count
502+
vc = result.ValueCount
499503
# set in df
504+
values["resultid"] = result.ResultID
500505
# update result
501506
self.updateResult(result)
502507
# count = overlap calc
508+
count = self.overlapcalc()
503509
# set value count = res.vc+valuecount-count
504510
# insert values
505-
# save series
511+
self.memDB.series_service.upsert_values(values)
506512
# save new annotations
513+
self.add_annotations(self.memDB.annotation_list)
507514
return result
508515

509516

510-
def saveAs(self, variable, method, proc_level):
517+
def saveAs(self, variable, method, proc_level, action, action_by):
518+
values = self.memDB.df
519+
# get all annotations for series
520+
annolist= self.memDB.series_service.get_annotations_by_result(values["resultid"][0])
521+
annolist['valueid']
522+
511523
# create series
512-
result= self.createResult(variable, method, proc_level)
524+
result= self.getResult(variable, method, proc_level)
513525
# update result
514526
self.updateResult(result)
515527
# set in df
528+
values["resultid"] = result.ResultID
516529
# insert values
530+
self.memDB.series_service.insert_values(values)
517531

518-
# save_new_series
519-
# get all annotations for series
520532
# save all annotations
533+
frames = [self.memDB.annotation_list, annolist]
534+
annolist = pd.concat(frames)
535+
self.add_annotations(annolist)
536+
521537

522538
return result
523539

524-
def saveExisting(self, variable, method, proc_level):
540+
def saveExisting(self, result):
541+
values = self.memdB.df
525542
# get save result
526-
result = self.memDB.series_service.get_series_by_id_quint(variable, method, proc_level)
543+
527544
# set in df
528-
# save(values, result)
529-
self.memDB.series_service.
545+
values["resultid"]=result.ResultID
546+
# save(values)
547+
self.memDB.series_service.upsert_values(values)
548+
#insert new annotations
549+
self.add_annotations(self.memDB.annotation_list)
530550
return result
531551

532-
# new series
533-
534-
def createResult(self, var, meth, proc):
535552

536-
#if result does not exist
537-
#create Action : of type "derivation"
538-
#create Actionby
539-
#create FeatureAction( using current sampling feature id
540-
#create TimeSeriesResult- this should also contain all of the stuff for the Result
553+
def getResult(self, var, meth, proc, action, actionby):
541554

542555
# copy old
556+
result = self.memDB.series_service.get_series(self.memDB.df["resultid"][0])
557+
self.memDB.series_service._session.expunge(result)
558+
543559
# change var, meth proc, in df #intend ts, agg stat
544-
Result = None
545560

546-
return self.updateResult(Result)
561+
result.VariableID = var.VariableID
562+
result.VariableObj = var
563+
result.ProcessingLevelID = proc.ProcessingLevelID
564+
result.ProcessingLevelObj = proc
565+
566+
#if result does not exist
567+
568+
if self.memDB.series_service.resultExists(result):
569+
pass
570+
#create Action : of type "derivation"
571+
#create Actionby
572+
#create FeatureAction( using current sampling feature id
573+
#create TimeSeriesResult- this should also contain all of the stuff for the Result
574+
575+
576+
577+
return self.updateResult(result)
547578

548579
def updateResult(self, Result):
549580
# get pd
581+
values = self.memDB.df
550582
# get result
551583
# update count, dates,
552584
return Result
@@ -565,6 +597,8 @@ def add_annotations(self, annolist):
565597

566598

567599

600+
601+
568602
#
569603
# def updateSeries(self, result = None, is_new_series=False, overwrite = True, append = False):
570604
# """

odmtools/odmservices/series_service.py

Lines changed: 70 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,13 @@ def get_used_variables(self):
6666

6767

6868
# Query DetailedResultInfo/series object is for Display purposes
69-
def get_all_series(self):
69+
def get_all_series(self, sitePid = None):
7070
"""
7171
Returns all series as a modelObject
7272
:return: List[Series]
7373
"""
7474
setSchema(self._session_factory.engine)
75+
7576
return self.read.getDetailedResultInfo('Time Series Coverage')
7677

7778
def get_series(self, series_id=None):
@@ -319,7 +320,7 @@ def get_method_by_code(self, method_code):
319320

320321

321322
# Series Catalog methods
322-
def get_series_by_id_quint(self, result):
323+
def resultExists(self, result):
323324
"""
324325
325326
:param site_id:
@@ -329,29 +330,29 @@ def get_series_by_id_quint(self, result):
329330
:param qcl_id:
330331
:return: Series
331332
"""
332-
#unique Result
333-
#FeatureActionID, ResultTypeCV, VariableID, UnitsID, ProcessingLevelID, SampledMediumCV
333+
# unique Result
334+
# FeatureActionID, ResultTypeCV, VariableID, UnitsID, ProcessingLevelID, SampledMediumCV
334335

335336

336337
try:
337338
# return self._edit_session.query(Results).filter_by(
338339
# VariableID=var_id, MethodID=method_id,
339340
# AnnotationID=qcl_id).first()
340-
(ret, ), = self._session.query(exists().
341-
where(Results.FeatureActionID == result.FeatureActionID).
342-
where(Results.ResultTypeCV == result.ResultTypeCV).
341+
res = self._session.query(exists().where(Results.ResultTypeCV == result.ResultTypeCV).
343342
where(Results.VariableID == result.VariableID).
344343
where(Results.UnitsID == result.UnitsID).
345344
where(Results.ProcessingLevelID == result.ProcessingLevelID).
346-
wehre(Results.SampledMediumCV == result.SampledMediumCV)
347-
345+
where(Results.SampledMediumCV == result.SampledMediumCV)
346+
)
347+
# where(Results.FeatureActionID == result.FeatureActionID).
348348

349-
)
350349

351-
return ret
350+
return res
352351
except:
353352
return None
354353

354+
355+
355356
def get_series_from_filter(self):
356357
# Pass in probably a Series object, match it against the database
357358
pass
@@ -402,13 +403,13 @@ def get_all_values_df(self):
402403
query = q.statement.compile(dialect=self._session_factory.engine.dialect)
403404
data = pd.read_sql_query(sql=query, con=self._session_factory.engine,
404405
params=query.params)
405-
columns = list(data)
406+
#columns = list(data)
406407

407408
# columns.insert(0, columns.pop(columns.index("DataValue")))
408409
# columns.insert(1, columns.pop(columns.index("ValueDateTime")))
409410
#columns.insert(2, columns.pop(columns.index("QualifierID")))
410411

411-
data = data.ix[:, columns]
412+
#data = data.ix[:, columns]
412413
return data.set_index(data['ValueDateTime'])
413414
# q = self._edit_session.query(TimeSeriesResultValues).order_by(TimeSeriesResultValues.ValueDateTime)
414415
# query = q.statement.compile(dialect = self._session_factory.engine.dialect)
@@ -596,29 +597,29 @@ def get_current_time_and_utcoffset(self):
596597
# raise Exception("Series does not exist, unable to save. Please select 'Save As'")
597598
#
598599
#
599-
def save_new_series(self, series, dvs):
600-
""" Create as a new catalog entry
601-
:param series:
602-
:param data_values:
603-
:return:
604-
"""
605-
# Save As case
606-
if self.series_exists(series):
607-
msg = "There is already an existing file with this information. Please select 'Save' or 'Save Existing' to overwrite"
608-
logger.info(msg)
609-
raise Exception(msg)
610-
else:
611-
try:
612-
self._edit_session.add(series)
613-
self._edit_session.commit()
614-
self.save_values(dvs)
615-
#self._edit_session.add_all(dvs)
616-
except Exception as e:
617-
self._edit_session.rollback()
618-
raise e
619-
620-
logger.info("A new series was added to the database, series id: "+str(series.id))
621-
return True
600+
# def save_new_series(self, series, dvs):
601+
# """ Create as a new catalog entry
602+
# :param series:
603+
# :param data_values:
604+
# :return:
605+
# """
606+
# # Save As case
607+
# if self.series_exists(series):
608+
# msg = "There is already an existing file with this information. Please select 'Save' or 'Save Existing' to overwrite"
609+
# logger.info(msg)
610+
# raise Exception(msg)
611+
# else:
612+
# try:
613+
# self._edit_session.add(series)
614+
# self._edit_session.commit()
615+
# self.save_values(dvs)
616+
# #self._edit_session.add_all(dvs)
617+
# except Exception as e:
618+
# self._edit_session.rollback()
619+
# raise e
620+
#
621+
# logger.info("A new series was added to the database, series id: "+str(series.id))
622+
# return True
622623

623624

624625
def update_values(self, updates):
@@ -706,7 +707,7 @@ def create_new_series(self, data_values, site_id, variable_id, method_id, source
706707
series.source_id = source_id
707708
series.quality_control_level_id = qcl_id
708709

709-
return self.create_service.createResult(series)
710+
return self.create_service.getResult(series)
710711

711712
def create_method(self, description, link):
712713
"""
@@ -777,6 +778,23 @@ def create_annotation(self, code, text, link=None):
777778

778779
return self.create_annotation_by_anno(annotation)
779780

781+
def add_annotations(self, anno_list):
782+
try:
783+
#tablename = TimeSeriesResultValueAnnotations.__tablename__
784+
#print ("I am TS saving name the table name", tablename)
785+
anno_list.to_sql(name="TimeSeriesResultValueAnnotations",
786+
schema=TimeSeriesResultValueAnnotations.__table_args__['schema'],
787+
if_exists='append',
788+
chunksize=1000,
789+
con=self._session_factory.engine,
790+
index=False)
791+
self._session.commit()
792+
793+
return anno_list
794+
except Exception as e:
795+
print(e)
796+
return None
797+
780798

781799
def get_vertical_datum_cvs(self):
782800
return self.read.getCVs(type="Elevation Datum")
@@ -834,10 +852,21 @@ def get_all_annotations(self):
834852

835853
def get_annotations_by_result(self, resultid):
836854
setSchema(self._session_factory.engine)
837-
ids = [x[0] for x in self.read._session.query(TimeSeriesResultValues.ValueID)\
838-
.filter(TimeSeriesResultValues.ResultID == resultid).all()]
839-
return self.read._session.query(TimeSeriesResultValueAnnotations)\
840-
.filter(TimeSeriesResultValueAnnotations.ValueID.in_(ids)).all()
855+
856+
# ids = [x[0] for x in self.read._session.query(TimeSeriesResultValues.ValueID)\
857+
# .filter(TimeSeriesResultValues.ResultID == resultid).all()]
858+
# q = self.read._session.query(TimeSeriesResultValueAnnotations)\
859+
# .filter(TimeSeriesResultValueAnnotations.ValueID.in_(ids)).all()
860+
861+
q =self.read._session.query(TimeSeriesResultValueAnnotations.AnnotationID, TimeSeriesResultValueAnnotations.ValueID,
862+
TimeSeriesResultValues.ResultID, TimeSeriesResultValues.ValueDateTime)\
863+
.filter(TimeSeriesResultValues.ResultID == resultid)\
864+
.filter(TimeSeriesResultValueAnnotations.ValueID == TimeSeriesResultValues.ValueID)
865+
866+
query = q.statement.compile(dialect=self._session_factory.engine.dialect)
867+
data = pd.read_sql_query(sql=query, con=self._session_factory.engine,
868+
params=query.params)
869+
return data
841870

842871
def get_aggregation_statistic(self):
843872
return self.read.getCVs(type="aggregationstatistic")

tests/test_odmservices/test_series_service.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,11 @@ def test_get_series_by_id(self):
191191
assert series.id == db_series.id
192192

193193
def test_get_series_by_id_quint(self):
194-
assert self.series_service.get_series_by_id_quint(10, 10, 10, 10, 10) == None
194+
assert self.series_service.resultExists(10, 10, 10, 10, 10) == None
195195

196196
series = test_util.add_series(self.session)
197-
db_series = self.series_service.get_series_by_id_quint(series.site_id, series.variable_id, series.method_id,
198-
series.source_id, series.quality_control_level_id)
197+
db_series = self.series_service.resultExists(series.site_id, series.variable_id, series.method_id,
198+
series.source_id, series.quality_control_level_id)
199199

200200
assert series.id == db_series.id
201201

0 commit comments

Comments
 (0)