Skip to content

Commit d14b3cf

Browse files
author
Stephanie Reeder
committed
implement polymorphic identity for SF and Results
1 parent dfcb7e3 commit d14b3cf

File tree

2 files changed

+37
-32
lines changed

2 files changed

+37
-32
lines changed

odm2api/ODM2/models.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,11 @@ class SamplingFeatures(Base):
570570
FeatureGeometry = Column('featuregeometry', Geometry) # String(50))#
571571
# FeatureGeometryWKT = Column('featuregeometrywkt', String(50))
572572
# FeatureGeometry = Column('featuregeometry', BLOB) # custom geometry queries
573+
__mapper_args__ = {
574+
'polymorphic_identity':'samplingfeatures',
575+
'polymorphic_on': SamplingFeatureTypeCV,
576+
'with_polymorphic':'*'
577+
}
573578

574579
def shape(self):
575580
"""
@@ -750,6 +755,12 @@ class Results(Base):
750755
UnitsObj = relationship(Units)
751756
VariableObj = relationship(Variables)
752757

758+
__mapper_args__ = {
759+
'polymorphic_on':ResultTypeCV,
760+
'polymorphic_identity':'results',
761+
'with_polymorphic':'*'
762+
}
763+
753764
def __repr__(self):
754765
return "<Results('%s', '%s', '%s', '%s', '%s')>" % (
755766
self.ResultID, self.ResultUUID, self.ResultTypeCV, self.ProcessingLevelID, self.ValueCount)
@@ -1020,6 +1031,9 @@ class Specimens(SamplingFeatures):
10201031
IsFieldSpecimen = Column('isfieldspecimen', Boolean, nullable=False)
10211032

10221033
# SamplingFeatureObj = relationship(SamplingFeatures)
1034+
__mapper_args__ = {
1035+
'polymorphic_identity':'Specimen',
1036+
}
10231037

10241038

10251039
class SpatialOffsets(Base):
@@ -1056,10 +1070,13 @@ class Sites(SamplingFeatures):
10561070
SpatialReferenceObj = relationship(SpatialReferences)
10571071
# SamplingFeatureObj = relationship(SamplingFeatures)
10581072

1073+
__mapper_args__ = {
1074+
'polymorphic_identity':'Site',
1075+
}
10591076
def __repr__(self):
10601077
return "<Sites('%s', '%s', '%s', '%s', '%s', '%s', '%s')>" \
10611078
% (self.SamplingFeatureID, self.SpatialReferenceID, self.SiteTypeCV, self.Latitude, self.Longitude,
1062-
self.SpatialReferenceObj, self.SamplingFeatureObj)
1079+
self.SpatialReferenceObj, self.SamplingFeatureCode)
10631080

10641081

10651082
class RelatedFeatures(Base):
@@ -1780,6 +1797,8 @@ class PointCoverageResults(Results):
17801797
SpatialReferenceObj = relationship(SpatialReferences)
17811798
ZUnitObj = relationship(Units, primaryjoin='PointCoverageResults.ZLocationUnitsID == Units.UnitsID')
17821799
# ResultObj = relationship(Results, primaryjoin='PointCoverageResults.ResultID == Results.ResultID')
1800+
__mapper_args__ = {'polymorphic_identity':'Point coverage'}
1801+
17831802

17841803

17851804
class ProfileResults(Results):
@@ -1805,6 +1824,7 @@ class ProfileResults(Results):
18051824
XUnitObj = relationship(Units, primaryjoin='ProfileResults.XLocationUnitsID == Units.UnitsID')
18061825
YUnitObj = relationship(Units, primaryjoin='ProfileResults.YLocationUnitsID == Units.UnitsID')
18071826
# ResultObj = relationship(Results, primaryjoin='ProfileResults.ResultID == Results.ResultID')
1827+
__mapper_args__ = {'polymorphic_identity':'Profile Coverage'}
18081828

18091829

18101830
class CategoricalResults(Results):
@@ -1823,6 +1843,7 @@ class CategoricalResults(Results):
18231843

18241844
SpatialReferenceObj = relationship(SpatialReferences)
18251845
# ResultObj = relationship(Results, primaryjoin='CategoricalResults.ResultID == Results.ResultID')
1846+
__mapper_args__ = {'polymorphic_identity':'Category coverage'}
18261847

18271848

18281849
class TransectResults(Results):
@@ -1845,6 +1866,7 @@ class TransectResults(Results):
18451866
SpatialReferenceObj = relationship(SpatialReferences)
18461867
ZUnitObj = relationship(Units, primaryjoin='TransectResults.ZLocationUnitsID == Units.UnitsID')
18471868
# ResultObj = relationship(Results, primaryjoin='TransectResults.ResultID == Results.ResultID')
1869+
__mapper_args__ = {'polymorphic_identity':'Transect Coverage'}
18481870

18491871

18501872
class SpectraResults(Results):
@@ -1870,6 +1892,7 @@ class SpectraResults(Results):
18701892
YUnitObj = relationship(Units, primaryjoin='SpectraResults.YLocationUnitsID == Units.UnitsID')
18711893
ZUnitObj = relationship(Units, primaryjoin='SpectraResults.ZLocationUnitsID == Units.UnitsID')
18721894
# ResultObj = relationship(Results, primaryjoin='SpectraResults.ResultID == Results.ResultID')
1895+
__mapper_args__ = {'polymorphic_identity':'Spectra coverage'}
18731896

18741897

18751898
class TimeSeriesResults(Results):
@@ -1897,11 +1920,12 @@ class TimeSeriesResults(Results):
18971920
YLocationUnitsObj = relationship(Units, primaryjoin='TimeSeriesResults.YLocationUnitsID == Units.UnitsID')
18981921
ZLocationUnitsObj = relationship(Units, primaryjoin='TimeSeriesResults.ZLocationUnitsID == Units.UnitsID')
18991922
# ResultObj = relationship(Results, primaryjoin='TimeSeriesResults.ResultID == Results.ResultID')
1923+
__mapper_args__ = {'polymorphic_identity':'Time series coverage'}
19001924

19011925
def __repr__(self):
19021926
return "<TimeSeriesResults('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')>" % \
19031927
(self.ResultID, self.XLocation, self.YLocation, self.XLocation,
1904-
self.ResultObj, self.XLocationUnitsObj, self.SpatialReferenceObj,
1928+
self.ResultTypeCV, self.XLocationUnitsObj, self.SpatialReferenceObj,
19051929
self.IntendedTimeSpacing, self.AggregationStatisticCV)
19061930

19071931

@@ -1914,7 +1938,7 @@ class SectionResults(Results):
19141938
YLocationUnitsID = Column('ylocationunitsid', ForeignKey(Units.UnitsID))
19151939
SpatialReferenceID = Column('spatialreferenceid', ForeignKey(SpatialReferences.SpatialReferenceID))
19161940
IntendedXSpacing = Column('intendedxspacing', Float(53))
1917-
IntendedXSpacingUnitsID = Column('intendedxpacingunitsid', ForeignKey(Units.UnitsID))
1941+
IntendedXSpacingUnitsID = Column('intendedxspacingunitsid', ForeignKey(Units.UnitsID))
19181942
IntendedZSpacing = Column('intendedzspacing', Float(53))
19191943
IntendedZSpacingUnitsID = Column('intendedzspacingunitsid', ForeignKey(Units.UnitsID))
19201944
IntendedTimeSpacing = Column('intendedtimespacing', Float(53))
@@ -1928,6 +1952,7 @@ class SectionResults(Results):
19281952
SpatialReferenceObj = relationship(SpatialReferences)
19291953
YUnitObj = relationship(Units, primaryjoin='SectionResults.YLocationUnitsID == Units.UnitsID')
19301954
# ResultObj = relationship(Results, primaryjoin='SectionResults.ResultID == Results.ResultID')
1955+
__mapper_args__ = {'polymorphic_identity':'Section coverage'}
19311956

19321957

19331958
class TrajectoryResults(Results):
@@ -1948,6 +1973,7 @@ class TrajectoryResults(Results):
19481973
primaryjoin='TrajectoryResults.IntendedTrajectorySpacingUnitsID == Units.UnitsID')
19491974
SpatialReferenceObj = relationship(SpatialReferences)
19501975
# ResultObj = relationship(Results, primaryjoin='TrajectoryResults.ResultID == Results.ResultID')
1976+
__mapper_args__ = {'polymorphic_identity':'Trajectory coverage'}
19511977

19521978

19531979
class MeasurementResults(Results):
@@ -1976,6 +2002,7 @@ class MeasurementResults(Results):
19762002
YLocationUnitsObj = relationship(Units, primaryjoin='MeasurementResults.YLocationUnitsID == Units.UnitsID')
19772003
ZLocationUnitsObj = relationship(Units, primaryjoin='MeasurementResults.ZLocationUnitsID == Units.UnitsID')
19782004
# ResultObj = relationship(Results, primaryjoin='MeasurementResults.ResultID == Results.ResultID')
2005+
__mapper_args__ = {'polymorphic_identity':'Measurement'}
19792006

19802007
def __repr__(self):
19812008
return "<MeasResults('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')>" % \

odm2api/ODM2/services/readService.py

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -258,15 +258,11 @@ def getSamplingFeatures(self, id=None, code=None, uuid=None, type=None, wkt=None
258258
* Pass a SamplingFeatureGeometry(TYPE????) - return a list of sampling feature objects
259259
"""
260260

261-
s = SamplingFeatures
262-
if type.lower() == 'site':
263-
s = Sites
264-
elif type.lower() == 'specimen':
265-
s = Specimens
266261

267-
q = self._session.query(s)
268262

269-
# if type: q = q.filter_by(SamplingFeatureTypeCV=type)
263+
q = self._session.query(SamplingFeatures)
264+
265+
if type: q = q.filter_by(SamplingFeatureTypeCV=type)
270266
if id: q = q.filter_by(SamplingFeatureID=id)
271267
if code: q = q.filter_by(SamplingFeatureCode=code)
272268
if wkt: q = q.filter_by(FeatureGeometryWKT=wkt)
@@ -417,28 +413,10 @@ def getResults(self, id=None, actionid=None, type=None):
417413
:return Return matching Variable object filtered by variableId:
418414
:type Variable:
419415
"""
420-
R = Results
421-
if type is not None:
422-
if type == "categorical":
423-
R = CategoricalResults
424-
elif type == "measurement":
425-
R = MeasurementResults
426-
elif type == "pointcoverage":
427-
R = PointCoverageResults
428-
elif type == "profile":
429-
R = ProfileResults
430-
elif type == "section":
431-
R = SectionResults
432-
elif type == "spectra":
433-
R = SpectraResults
434-
elif type == "timeseries":
435-
R = TimeSeriesResults
436-
elif type == "trajectory":
437-
R = TrajectoryResults
438-
elif type == "transect":
439-
R = TransectResults
440-
441-
query = self._session.query(R)
416+
417+
418+
query = self._session.query(Results)
419+
if type: query = query.filter_by(ResultTypeCV=type)
442420
if actionid: query = query.join(FeatureActions).filter_by(ActionID=actionid)
443421
if id: query = query.filter_by(ResultID=id)
444422

0 commit comments

Comments
 (0)