Skip to content

Commit 00af92d

Browse files
committed
csv header
1 parent 1d74e2c commit 00af92d

File tree

1 file changed

+181
-21
lines changed

1 file changed

+181
-21
lines changed

odmtools/odmservices/export_data.py

Lines changed: 181 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ def export_series_data(self, series_id, filename, utc=False, site=False, var=Fal
1616
if series is None:
1717
return False
1818

19-
writer = csv.writer(open(filename, 'wb'))
20-
plainWriter = open(filename, 'w')
2119
print "filename: "
2220
print filename
23-
self.write_data_header(plainWriter, series, utc, site, var, offset, qual, src, qcl)
21+
plainWriter = open(filename, 'w')
22+
self.write_text_header(plainWriter, series, utc, site, var, offset, qual, src, qcl)
23+
plainWriter.close()
24+
writer = csv.writer(open(filename, 'a'))
25+
self.write_data_header(writer, utc, site, var, offset, qual, src, qcl)
2426
# for dv in series.data_values:
25-
# self.write_data_row(writer, series, dv, utc, site, var, offset, qual, src, qcl)
27+
# self.write_data_row(writer, series, dv, utc, site, var, offset, qual, src, qcl)
2628

2729
def export_data(self, series_ids, filename):
2830
if series_ids is None:
@@ -37,12 +39,132 @@ def export_data(self, series_ids, filename):
3739
if file_exists:
3840
pass
3941

40-
def write_data_header(self, plainWriter, series, utc, site, var, offset, qual, src, qcl):
42+
def write_data_header(self, writer, utc, site, var, offset, qual, src, qcl):
43+
# Build header list
44+
header = []
45+
header.append("SeriesId")
46+
header.append("ValueId")
47+
header.append("DataValue")
48+
header.append("ValueAccuracy")
49+
header.append("LocalDateTime")
50+
if utc:
51+
header.append("UTCOffset")
52+
header.append("DateTimeUTC")
53+
header.append("SiteCode")
54+
if site:
55+
header.append("SiteName")
56+
header.append("SiteType")
57+
header.append("Latitude")
58+
header.append("Longitude")
59+
header.append("SRSName")
60+
header.append("VariableCode")
61+
if var:
62+
header.append("VariableName")
63+
header.append("Speciation")
64+
header.append("VariableUnitsName")
65+
header.append("VariableUnitsAbbreviation")
66+
header.append("SampleMedium")
67+
header.append("OffsetValue")
68+
header.append("OffsetTypeID")
69+
if offset:
70+
header.append("OffsetDescription")
71+
header.append("OffsetUnitsName")
72+
header.append("CensorCode")
73+
header.append("QualifierID")
74+
if qual:
75+
header.append("QualifierCode")
76+
header.append("QualifierDescription")
77+
if src:
78+
header.append("Organization")
79+
header.append("SourceDescription")
80+
header.append("Citation")
81+
if qcl:
82+
header.append("QualityControlLevelCode")
83+
header.append("Definition")
84+
header.append("Explanation")
85+
header.append("SampleID")
86+
87+
writer.writerow(header)
88+
89+
def write_data_row(self, writer, series, dv, utc, site, var, offset, qual, src, qcl):
90+
data = []
91+
data.append(series.id)
92+
data.append(dv.id)
93+
data.append(dv.data_value)
94+
data.append(dv.value_accuracy)
95+
data.append(dv.local_date_time)
96+
if utc:
97+
data.append(dv.utc_offset)
98+
data.append(dv.date_time_utc)
99+
data.append(series.site_code)
100+
if site:
101+
data.append(series.site_name)
102+
data.append(series.site.type)
103+
data.append(series.site.latitude)
104+
data.append(series.site.longitude)
105+
data.append(series.site.spatial_ref.srs_name)
106+
data.append(series.variable_code)
107+
if var:
108+
data.append(series.variable_name)
109+
data.append(series.speciation)
110+
data.append(series.variable_units_name)
111+
data.append(series.variable.variable_unit.abbreviation)
112+
data.append(series.sample_medium)
113+
data.append(dv.offset_value)
114+
data.append(dv.offset_type_id)
115+
if offset:
116+
if dv.offset_type is not None:
117+
data.append(dv.offset_type.description)
118+
data.append(dv.offset_type.unit.name)
119+
else:
120+
data.append('')
121+
data.append('')
122+
data.append(dv.censor_code)
123+
data.append(dv.qualifier_id)
124+
if qual:
125+
if dv.qualifier is not None:
126+
data.append(dv.qualifier.code)
127+
data.append(dv.qualifier.description)
128+
else:
129+
data.append('')
130+
data.append('')
131+
if src:
132+
data.append(series.organization)
133+
data.append(series.source_description)
134+
data.append(series.citation)
135+
if qcl:
136+
data.append(series.quality_control_level_code)
137+
data.append(series.quality_control_level.definition)
138+
data.append(series.quality_control_level.explanation)
139+
data.append(dv.sample_id)
140+
141+
writer.writerow(data)
142+
143+
def write_text_header(self, plainWriter, series, utc, site, var, offset, qual, src, qcl):
41144
self.write_warning_header(plainWriter)
42145
self.write_site_information(plainWriter, series, site)
43146
self.write_variable_and_method_information(plainWriter, series)
147+
self.write_source_information(plainWriter, series)
148+
self.write_qualifier_information(plainWriter, series)
44149

45150

151+
def write_warning_header(self, plainWriter):
152+
plainWriter.write(
153+
'# ------------------------------------------------------------------------------------------\n')
154+
plainWriter.write('# WARNING: The data are released on the condition that neither iUTAH nor any of its \n')
155+
plainWriter.write('# participants may be held liable for any damages resulting from their use. The following \n')
156+
plainWriter.write('# metadata describe the data in this file:\n')
157+
plainWriter.write(
158+
'# ------------------------------------------------------------------------------------------\n')
159+
plainWriter.write('#\n')
160+
plainWriter.write('# Quality Control Level Information\n')
161+
plainWriter.write('# -----------------------------------------------\n')
162+
plainWriter.write('# These data have passed QA/QC procedures such as sensor calibration and\n')
163+
plainWriter.write('# visual inspection and removal of obvious errors. These data are approved\n')
164+
plainWriter.write('# by Technicians as the best available version of the data. See published\n')
165+
plainWriter.write('# script for correction steps specific to this data series.\n')
166+
plainWriter.write('#\n')
167+
46168
def write_site_information(self, plainWriter, series, site):
47169
plainWriter.write('# Site Information\n')
48170
plainWriter.write('# ----------------------------------\n')
@@ -65,21 +187,59 @@ def write_variable_and_method_information(self, plainWriter, series):
65187
plainWriter.write('# Variable and Method Information\n')
66188
plainWriter.write('# ----------------------------------\n')
67189
plainWriter.write('# VariableCode: ' + str(series.VariableObj.VariableCode) + '\n')
68-
plainWriter.write('# VariableName: ' + str(series.VariableObj.VariableName) + '\n')
190+
plainWriter.write('# VariableName: ' + str(series.VariableObj.VariableNameCV) + '\n')
191+
plainWriter.write('# ValueType: ' + 'TBD' + '\n')
192+
plainWriter.write('# DataType: ' + 'TBD' + '\n')
193+
plainWriter.write('# GeneralCategory: ' + 'TBD' + '\n')
194+
plainWriter.write('# SampleMedium: ' + 'TBD' + '\n')
195+
plainWriter.write('# VariableUnitsName: ' + str(series.UnitsObj.UnitsName) + '\n')
196+
plainWriter.write('# VariableUnitsType: ' + str(series.UnitsObj.UnitsTypeCV) + '\n')
197+
plainWriter.write('# VariableUnitsAbbreviation: ' + str(series.UnitsObj.UnitsAbbreviation) + '\n')
198+
plainWriter.write('# NoDataValue: ' + str(series.VariableObj.NoDataValue) + '\n')
199+
plainWriter.write('# TimeSupport: ' + 'TBD' + '\n')
200+
plainWriter.write('# TimeSupportUnitsAbbreviation: ' + 'TBD' + '\n')
201+
plainWriter.write('# TimeSupportUnitsType: ' + 'TBD' + '\n')
202+
plainWriter.write('# TimeSupportUnitsName: ' + 'TBD' + '\n')
203+
plainWriter.write('# MethodDescription: ' +
204+
str(series.FeatureActionObj.ActionObj.MethodObj.MethodDescription) + '\n')
205+
plainWriter.write('# MethodLink: ' +
206+
str(series.FeatureActionObj.ActionObj.MethodObj.MethodLink) + '\n')
207+
plainWriter.write('#\n')
208+
209+
def write_source_information(self, plainWriter, series):
210+
plainWriter.write('# Source Information\n')
211+
plainWriter.write('# ----------------------------------\n')
212+
if(series.FeatureActionObj.ActionObj.MethodObj.OrganizationObj != None):
213+
plainWriter.write('# Organization: ' +
214+
str(series.FeatureActionObj.ActionObj.MethodObj.OrganizationObj.OrganizationName) + '\n')
215+
plainWriter.write('# SourceDescription: ' +
216+
str(series.FeatureActionObj.ActionObj.MethodObj.OrganizationObj.OrganizationDescription) +
217+
'\n')
218+
plainWriter.write('# SourceLink: ' +
219+
str(series.FeatureActionObj.ActionObj.MethodObj.OrganizationObj.OrganizationLink) + '\n')
220+
plainWriter.write('# ContactName: ' +
221+
str(series.FeatureActionObj.ActionObj.MethodObj.OrganizationObj.
222+
AffiliationObj.PersonObj.PersonFirstName) + ' ' + (
223+
series.FeatureActionObj.ActionObj.MethodObj.OrganizationObj.
224+
AffiliationObj.PersonObj.PersonLastName
225+
) + '\n')
226+
plainWriter.write('# SourceLink: ' +
227+
str(series.FeatureActionObj.ActionObj.MethodObj.OrganizationObj.AffiliationObj.PrimaryPhone) + '\n')
228+
plainWriter.write('# SourceLink: ' +
229+
str(
230+
series.FeatureActionObj.ActionObj.MethodObj.OrganizationObj.AffiliationObj.PrimaryEmail) + '\n')
231+
plainWriter.write('# Citation: ' + 'TBD' + '\n')
69232

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')
78233
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')
234+
235+
def write_qualifier_information(self, plainWriter, series):
236+
plainWriter.write('# Qualifier Information\n')
237+
plainWriter.write('# ----------------------------------\n')
238+
plainWriter.write('# Code Description\n')
239+
plainWriter.write('# LI Linear Interpolation\n')
240+
plainWriter.write('# SM Sensor Malfunction\n')
241+
plainWriter.write('# PF Power Failure\n')
242+
plainWriter.write('# S Suspicious Values\n')
243+
plainWriter.write('# MNT Erroneous or missing data due to maintenance\n')
244+
plainWriter.write('#\n')
245+
plainWriter.write('#\n')

0 commit comments

Comments
 (0)