Skip to content

Commit 1d74e2c

Browse files
author
stephanie
committed
Merge branch 'use_api2' of https://github.com/odm2/ODMToolsPython into use_api2
2 parents 984b0fd + 9637600 commit 1d74e2c

8 files changed

Lines changed: 133 additions & 40 deletions

File tree

odmtools/controller/frmSeriesSelector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ def onRightExData(self, event):
309309
full_path = os.path.join(dlg.GetDirectory(), dlg.GetFilename())
310310

311311
#series_id = self.tableSeries.getColumnText(self.selectedIndex, 1)
312-
series_id = self.tblSeries.GetSelectedObject().id
312+
series_id = self.tblSeries.GetSelectedObject().ResultID
313313
self.export_service.export_series_data(series_id, full_path, True, True, True, True, True, True, True)
314314
self.Close()
315315

odmtools/controller/pageExisting.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ def __init__(self, parent, title, series_service , site):
1919
sizer = wx.BoxSizer(wx.VERTICAL)
2020
self.sizer = sizer
2121
self.SetSizer(sizer)
22+
self.site = site
23+
self.series_service = series_service
2224
#self.series_service = series_service
2325

2426
title = wx.StaticText(self, -1, title)
@@ -66,9 +68,10 @@ def enableButtons(self, isEnabled):
6668
self.pnlExisting.rbOriginal.Enable(isEnabled)
6769
self.pnlExisting.lblOverlap.Enable(isEnabled)
6870

69-
def getSeries(self):
71+
def get_selected_series(self):
7072
selectedObject = self.pnlExisting.olvSeriesList.GetSelectedObject()
71-
return selectedObject.method, selectedObject.quality_control_level, selectedObject.variable
73+
result = self.series_service.get_series(selectedObject.ResultID)
74+
return result.FeatureActionObj.ActionObj.MethodObj, result.ProcessingLevelObj, result.VariableObj
7275

7376
def initTable(self, dbservice, site_id):
7477
"""Set up columns and objects to be used in the objectlistview to be visible in the series_service selector"""

odmtools/gui/frmDataExport.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def __init__(self, parent, series_id):
7979
self._init_ctrls(parent)
8080

8181
sm = ServiceManager()
82-
self.export_service = sm.get_export_service()
82+
self.export_data = sm.get_export_service()
8383

8484

8585
def OnBtnOKButton(self, event):
@@ -96,7 +96,8 @@ def OnBtnOKButton(self, event):
9696
full_path = os.path.join(dlg.GetDirectory(), dlg.GetFilename())
9797
print full_path
9898

99-
self.export_service.export_series_data(self.series_id, full_path, utc, site, var, offset, qual, src, qcl)
99+
#self.export_service.export_series_data(self.series_id, full_path, utc, site, var, offset, qual, src, qcl)
100+
self.export_data.export_series_data(self.series_id, full_path, utc, site, var, offset, qual, src, qcl)
100101
self.Close()
101102

102103
dlg.Destroy()

odmtools/gui/wizSave.py

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ def get_metadata(self):
262262

263263
elif self.pgIntro.pnlIntroduction.rbSaveExisting.GetValue():
264264
# selected an existing series
265-
method, processing_level, variable = self.pgExisting.getSeries()
265+
method, processing_level, variable = self.pgExisting.get_selected_series()
266266

267267
# Create action
268268
action = Actions()
@@ -451,42 +451,34 @@ def on_wizard_finished(self, event):
451451
else:
452452
result = self.record_service.saveAs(Variable, Method, QCL, True)
453453
'''
454-
455-
456-
#TODO: move all of this stuff into the edit_service file
457-
# Create action
458-
new_result = self.series_service.getResult(var=variable, meth=method, proc=proc_level)
459-
460-
# action = self.series_service.create.createAction(action)
461-
462454
affiliation = self.action_page.get_affiliation()
463455

464-
new_action_by = ActionBy()
465-
new_action_by.ActionID = action.ActionID
466-
new_action_by.RoleDescription = self.action_page.action_view.role_description_text_box.GetValue()
467-
new_action_by.AffiliationID = affiliation.AffiliationID
468-
new_action_by.AffiliationObj = affiliation
456+
action_by = ActionBy()
457+
action_by.ActionID = action.ActionID
458+
action_by.RoleDescription = self.action_page.action_view.role_description_text_box.GetValue()
459+
action_by.AffiliationID = affiliation.AffiliationID
460+
action_by.AffiliationObj = affiliation
469461

470-
#TODO end
462+
# result = self.series_service.getResult(var=variable, meth=method, proc=proc_level, action=action, actionby=action_by)
463+
result = self.record_service._edit_service.getResult(var=variable, meth=method, proc=proc_level, action=action, actionby=action_by)
471464

472465
try:
473466
if rbSave:
474467
result = self.record_service.save()
475468
elif rbSaveAsNew:
476-
#TODO send in Action, and Actionby
477-
result = self.record_service.save_as(variable, method, proc_level)
469+
result = self.record_service.saveAs(variable=variable, method=method, proc_level=proc_level,
470+
action=action, action_by=action_by)
478471
elif rbSaveAsExisting:
479472
if overwrite:
480-
#TODO send in just the result
481-
result = self.record_service.save_existing(variable, method, proc_level)
473+
result = self.record_service.saveExisting(result=result)
482474
elif append:
483475
#TODO send in just the result
484476
#def save_appending(self, var = None, method =None, qcl = None, overwrite = False):
485477
#TODO if i require that original or new is selected I can call once with overwrite = original
486478
if original:
487-
result = self.record_service.save_appending(variable, method, proc_level, overwrite = False)
479+
result = self.record_service.saveAppend(result=result, overwrite=False)
488480
elif new:
489-
result = self.record_service.save_appending(variable, method, proc_level, overwrite = True)
481+
result = self.record_service.saveAppend(result=result, overwrite=True)
490482

491483
Publisher.sendMessage("refreshSeries")
492484

odmtools/odmservices/edit_service.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import pandas as pd
1010
import datetime
1111
import numpy as np
12+
from odm2api.ODM2.models import *
1213

1314
import logging
1415
from odmtools.common.logger import LoggerTool
@@ -549,28 +550,38 @@ def saveExisting(self, result):
549550
self.add_annotations(self.memDB.annotation_list)
550551
return result
551552

552-
553553
def getResult(self, var, meth, proc, action, actionby):
554554

555555
# copy old
556556
result = self.memDB.series_service.get_series(self.memDB.df["resultid"][0])
557-
self.memDB.series_service._session.expunge(result)
557+
sampling_feature = result.FeatureActionObj.SamplingFeatureObj
558+
# self.memDB.series_service._session.expunge(result)
558559

559560
# change var, meth proc, in df #intend ts, agg stat
561+
if var:
562+
result.VariableID = var.VariableID
563+
result.VariableObj = var
560564

561-
result.VariableID = var.VariableID
562-
result.VariableObj = var
563-
result.ProcessingLevelID = proc.ProcessingLevelID
564-
result.ProcessingLevelObj = proc
565+
if proc:
566+
result.ProcessingLevelID = proc.ProcessingLevelID
567+
result.ProcessingLevelObj = proc
565568

566-
#if result does not exist
569+
if meth:
570+
result.FeatureActionObj.ActionObj.MethodID = meth.MethodID
571+
result.FeatureActionObj.ActionObj.MethodObj = meth
567572

573+
#if result does not exist
568574
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
575+
action.ActionTypeCV = "derivation"
576+
# create Actionby done
577+
578+
# create FeatureAction (using current sampling feature id)
579+
feature_action = FeatureActions()
580+
feature_action.SamplingFeatureID = sampling_feature.SamplingFeatureID
581+
feature_action.SamplingFeatureObj = sampling_feature
582+
583+
# create TimeSeriesResult - this should also contain all of the stuff for the Result
584+
series = TimeSeriesResults()
574585

575586

576587

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import csv
2+
import xml.etree.cElementTree as ET
3+
import datetime
4+
5+
class ExportData():
6+
7+
def __init__(self, series_service):
8+
self._series_service = series_service
9+
self.dt_format_str = "%m/%d/%Y %I:%M:%S %p"
10+
11+
def export_series_data(self, series_id, filename, utc=False, site=False, var=False, offset=False, qual=False,
12+
src=False, qcl=False):
13+
#series = self._series_service.get_series_by_id(series_id)
14+
series = self._series_service.get_series(series_id)
15+
16+
if series is None:
17+
return False
18+
19+
writer = csv.writer(open(filename, 'wb'))
20+
plainWriter = open(filename, 'w')
21+
print "filename: "
22+
print filename
23+
self.write_data_header(plainWriter, series, utc, site, var, offset, qual, src, qcl)
24+
# for dv in series.data_values:
25+
# self.write_data_row(writer, series, dv, utc, site, var, offset, qual, src, qcl)
26+
27+
def export_data(self, series_ids, filename):
28+
if series_ids is None:
29+
return
30+
31+
try:
32+
with open(filename):
33+
file_exists = True
34+
except IOError:
35+
file_exists = False
36+
37+
if file_exists:
38+
pass
39+
40+
def write_data_header(self, plainWriter, series, utc, site, var, offset, qual, src, qcl):
41+
self.write_warning_header(plainWriter)
42+
self.write_site_information(plainWriter, series, site)
43+
self.write_variable_and_method_information(plainWriter, series)
44+
45+
46+
def write_site_information(self, plainWriter, series, site):
47+
plainWriter.write('# Site Information\n')
48+
plainWriter.write('# ----------------------------------\n')
49+
plainWriter.write('# Network: TBD\n')
50+
plainWriter.write('# SiteCode: '+str(series.FeatureActionObj.SamplingFeatureObj.SamplingFeatureCode)+'\n')
51+
plainWriter.write('# SiteName: ' + str(series.FeatureActionObj.SamplingFeatureObj.SamplingFeatureName) + '\n')
52+
plainWriter.write('# Latitude: ' + str(series.FeatureActionObj.SamplingFeatureObj.Latitude) + '\n')
53+
plainWriter.write('# Longitude: ' + str(series.FeatureActionObj.SamplingFeatureObj.Longitude) + '\n')
54+
plainWriter.write('# LatLonDatum: ' + 'TBD' + '\n') #FIX
55+
plainWriter.write('# Elevation_m: ' + str(series.FeatureActionObj.SamplingFeatureObj.Elevation_m) + '\n')
56+
plainWriter.write('# ElevationDatum: ' + str(series.FeatureActionObj.SamplingFeatureObj.ElevationDatumCV) + '\n')
57+
plainWriter.write('# State: ' + 'TBD' + '\n') # FIX
58+
plainWriter.write('# County: ' + 'TBD' + '\n') # FIX
59+
plainWriter.write('# Comments: ' + 'TBD' + '\n') # FIX
60+
plainWriter.write(
61+
'# SiteType: ' + str(series.FeatureActionObj.SamplingFeatureObj.SiteTypeCV) + '\n')
62+
plainWriter.write('#\n')
63+
64+
def write_variable_and_method_information(self, plainWriter, series):
65+
plainWriter.write('# Variable and Method Information\n')
66+
plainWriter.write('# ----------------------------------\n')
67+
plainWriter.write('# VariableCode: ' + str(series.VariableObj.VariableCode) + '\n')
68+
plainWriter.write('# VariableName: ' + str(series.VariableObj.VariableName) + '\n')
69+
70+
def write_warning_header(self, plainWriter):
71+
plainWriter.write(
72+
'# ------------------------------------------------------------------------------------------\n')
73+
plainWriter.write('# WARNING: The data are released on the condition that neither iUTAH nor any of its \n')
74+
plainWriter.write('# participants may be held liable for any damages resulting from their use. The following \n')
75+
plainWriter.write('# metadata describe the data in this file:\n')
76+
plainWriter.write(
77+
'# ------------------------------------------------------------------------------------------\n')
78+
plainWriter.write('#\n')
79+
plainWriter.write('# Quality Control Level Information\n')
80+
plainWriter.write('# -----------------------------------------------\n')
81+
plainWriter.write('# These data have passed QA/QC procedures such as sensor calibration and\n')
82+
plainWriter.write('# visual inspection and removal of obvious errors. These data are approved\n')
83+
plainWriter.write('# by Technicians as the best available version of the data. See published\n')
84+
plainWriter.write('# script for correction steps specific to this data series.\n')
85+
plainWriter.write('#\n')

odmtools/odmservices/series_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def get_series(self, series_id=None):
8888
# print e
8989
# return None
9090
setSchema(self._session_factory.engine)
91-
return self.read.getResults(ids=[series_id])[0]
91+
return self.read.getResults(ids=[str(series_id)])[0]
9292

9393
# Query result objects for data purposes
9494
def get_result_dates(self, result_id):

odmtools/odmservices/service_manager.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from series_service import SeriesService
1010
from edit_service import EditService
1111
from export_service import ExportService
12+
from export_data import ExportData
1213

1314

1415
from odmtools.controller import EditTools
@@ -165,7 +166,7 @@ def get_record_service(self, script, series_id, connection):
165166

166167

167168
def get_export_service(self):
168-
return ExportService(self.get_series_service())
169+
return ExportData(self.get_series_service())
169170

170171
## ###################
171172
# private variables

0 commit comments

Comments
 (0)