Skip to content

Commit 4f11a28

Browse files
authored
Merge pull request #121 from ODM2/sfdataset
add getSamplingFeatureDatasets
2 parents 73e0a46 + 4df7799 commit 4f11a28

File tree

2 files changed

+65
-7
lines changed

2 files changed

+65
-7
lines changed

Examples/Sample.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,22 @@
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

2930

3031

3132

32-
33-
34-
35-
36-
3733
#_session = session_factory.getSession()
3834
read = ReadODM2(session_factory)
3935
create = CreateODM2(session_factory)
4036

4137

38+
39+
40+
4241
# Run some basic sample queries.
4342
# ------------------------------
4443
# Get all of the variables from the database and print their names to the console

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, dstype=None):
707+
"""
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+
dstype (str, optional): Type of Dataset from
717+
`controlled vocabulary name <http://vocabulary.odm2.org/datasettype/>`_.
718+
719+
720+
Returns:
721+
list: List of DataSetsResults Objects associated with the given sampling feature
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(dstype='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+
749+
q = self._session.query(DataSetsResults)\
750+
.join(Results)\
751+
.join(FeatureActions)\
752+
.filter(FeatureActions.SamplingFeatureID.in_(sf_list))
753+
754+
if dstype:
755+
q = q.filter_by(DatasetTypeCV=dstype)
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)