Skip to content

Commit 0783a07

Browse files
author
sreeder
committed
initial commit for sampling feature dataset query
1 parent 73e0a46 commit 0783a07

File tree

3 files changed

+69
-3
lines changed

3 files changed

+69
-3
lines changed

Examples/Sample.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,18 @@
1717
#connect to database
1818
# createconnection (dbtype, servername, dbname, username, password)
1919
# session_factory = dbconnection.createConnection('connection type: sqlite|mysql|mssql|postgresql', '/your/path/to/db/goes/here', 2.0)#sqlite
20-
session_factory = dbconnection.createConnection('postgresql', 'localhost', 'odm2', 'ODM', 'odm')
20+
# session_factory = dbconnection.createConnection('postgresql', 'localhost', 'odm2', 'ODM', 'odm')
2121
# session_factory = dbconnection.createConnection('mysql', 'localhost', 'odm2', 'ODM', 'odm')#mysql
2222

2323
# session_factory= dbconnection.createConnection('mssql', "(local)", "ODM2", "ODM", "odm")#win MSSQL
2424

25+
2526
# session_factory= dbconnection.createConnection('mssql', "arroyoodm2", "", "ODM", "odm")#mac/linux MSSQL
2627
# session_factory = dbconnection.createConnection('sqlite', '/Users/stephanie/DEV/YODA-Tools/tests/test_files/XL_specimen.sqlite', 2.0)
2728

2829

30+
session_factory = dbconnection.createConnection('postgresql', 'odm2wofpy1.uwrl.usu.edu', 'odm2', 'dbadmin', 'pinkbananastastegross')
31+
2932

3033

3134

@@ -39,6 +42,9 @@
3942
create = CreateODM2(session_factory)
4043

4144

45+
ds= read.getSamplingFeatureDatasets(ids = [1])
46+
47+
4248
# Run some basic sample queries.
4349
# ------------------------------
4450
# Get all of the variables from the database and print their names to the console

odm2api/ODM2/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ class DataSets(Base):
316316
DataSetTitle = Column('datasettitle', String(255), nullable=False)
317317
DataSetAbstract = Column('datasetabstract', String(500), nullable=False)
318318

319+
# DatasetsResultsObj = relationship(DataSetsResults, primaryjoin='DatasetsResults.DatasetID == DataSets.ActionID')
319320

320321
class ProcessingLevels(Base):
321322
"""

odm2api/ODM2/services/readService.py

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
CalibrationActions, CalibrationReferenceEquipment, CalibrationStandards,
1313
CategoricalResultValueAnnotations, CategoricalResultValues, CitationExtensionPropertyValues,
1414
CitationExternalIdentifiers, DataLoggerFileColumns, DataLoggerFiles, DataLoggerProgramFiles,
15-
DataQuality, DataSetCitations, DataSets, DerivationEquations, Directives, Equipment,
15+
DataQuality, DataSetCitations, DataSets, DataSetsResults, DerivationEquations, Directives, Equipment,
1616
EquipmentActions, EquipmentAnnotations, EquipmentModels, EquipmentUsed, ExtensionProperties,
1717
ExternalIdentifierSystems, FeatureActions, InstrumentOutputVariables, MaintenanceActions,
1818
MeasurementResultValueAnnotations, MeasurementResultValues, MethodAnnotations,
@@ -462,6 +462,8 @@ def getRelatedSamplingFeatures(self, sfid=None, rfid=None, relationshiptype=None
462462
print('Error running Query: {}'.format(e))
463463
return None
464464

465+
466+
465467
# Action
466468
def getActions(self, ids=None, type=None, sfid=None):
467469
"""
@@ -694,13 +696,70 @@ def getDataSets(self, codes=None, uuids=None):
694696
if codes:
695697
q = q.filter(DataSets.DataSetCode.in_(codes))
696698
if uuids:
697-
q.q.filter(DataSets.DataSetUUID.in_(uuids))
699+
q.filter(DataSets.DataSetUUID.in_(uuids))
698700
try:
699701
return q.all()
700702
except Exception as e:
701703
print('Error running Query {}'.format(e))
702704
return None
703705

706+
def getSamplingFeatureDatasets(self, ids=None, codes=None, uuids=None, type=None):
707+
"""Retrieve a list of Sampling Feature objects.
708+
Retrieve a list of Datasets associated with the given sampling feature data.
709+
710+
Must specify either samplingFeatureID OR samplingFeatureUUID OR samplingFeatureCode)
711+
712+
Args:
713+
ids (list, optional): List of SamplingFeatureIDs.
714+
codes (list, optional): List of SamplingFeature Codes.
715+
uuids (list, optional): List of UUIDs string.
716+
type (str, optional): Type of Dataset from
717+
`controlled vocabulary name <http://vocabulary.odm2.org/samplingfeaturetype/>`_.
718+
719+
720+
Returns:
721+
list: List of sampling feature objects along with their associated datasets
722+
723+
Examples:
724+
>>> READ = ReadODM2(SESSION_FACTORY)
725+
>>> READ.getSamplingFeatureDatasets(ids=[39, 40])
726+
>>> READ.getSamplingFeatureDatasets(codes=['HOME', 'FIELD'])
727+
>>> READ.getSamplingFeatureDatasets(uuids=['a6f114f1-5416-4606-ae10-23be32dbc202',
728+
... '5396fdf3-ceb3-46b6-aaf9-454a37278bb4'])
729+
>>> READ.getSamplingFeatureDatasets(type='singleTimeSeries')
730+
731+
"""
732+
733+
734+
# make sure one of the three arguments has been sent in
735+
if all(v is None for v in [ids, codes, uuids]):
736+
raise ValueError('Expected samplingFeatureID OR samplingFeatureUUID OR samplingFeatureCode argument')
737+
738+
sf_query = self._session.query(SamplingFeatures.SamplingFeatureID)
739+
740+
if ids:
741+
sf_query = sf_query.filter(SamplingFeatures.SamplingFeatureID.in_(ids))
742+
if codes:
743+
sf_query = sf_query.filter(SamplingFeatures.SamplingFeatureCode.in_(codes))
744+
if uuids:
745+
sf_query = sf_query.filter(SamplingFeatures.SamplingFeatureUUID.in_(uuids))
746+
sf_list = sf_query.all()
747+
748+
# , DataSetsResults)\
749+
q = self._session.query(DataSetsResults)\
750+
.join(Results)\
751+
.join(FeatureActions)\
752+
.filter(FeatureActions.SamplingFeatureID.in_(sf_list))
753+
754+
if type:
755+
q = q.filter_by(DatasetTypeCV=type)
756+
757+
try:
758+
return q.all()
759+
except Exception as e:
760+
print('Error running Query: {}'.format(e))
761+
return None
762+
704763
# Data Quality
705764
def getDataQuality(self):
706765
"""

0 commit comments

Comments
 (0)