class DescribeSensor(IoosDescribeSensor): def __init__(self, element): super(DescribeSensor, self).__init__(element=element) """ Common things between all describe sensor requests """ self.ioos_version = "1.0" self.system = SensorML(element).members[0] self.shortName = get_named_by_definition(self.system.get_identifiers_by_name("shortName"), "http://mmisw.org/ont/ioos/definition/shortName") self.longName = get_named_by_definition(self.system.get_identifiers_by_name("longName"), "http://mmisw.org/ont/ioos/definition/longName") self.keywords = map(unicode, self.system.keywords) # Location try: self.location = self.system.location[0] except (TypeError, IndexError): # No location exists self.location = None # Timerange try: timerange = testXMLValue(self.system.get_capabilities_by_name("observationTimeRange")[0].find(".//" + nsp("swe101:TimeRange/swe101:value"))).split(" ") self.starting = parser.parse(timerange[0]) self.ending = parser.parse(timerange[1]) except (AttributeError, TypeError, ValueError): self.starting = None self.ending = None
class DescribeSensor(IoosDescribeSensor): def __init__(self, element): super(DescribeSensor, self).__init__(element=element) """ Common things between all describe sensor requests """ self.ioos_version = "1.0" self.system = SensorML(element).members[0] self.shortName = get_named_by_definition( self.system.get_identifiers_by_name("shortName"), "http://mmisw.org/ont/ioos/definition/shortName" ) self.longName = get_named_by_definition( self.system.get_identifiers_by_name("longName"), "http://mmisw.org/ont/ioos/definition/longName" ) self.keywords = map(unicode, self.system.keywords) # Location try: self.location = self.system.location[0] except (TypeError, IndexError): # No location exists self.location = None # Timerange try: timerange = testXMLValue( self.system.get_capabilities_by_name("observationTimeRange")[0].find( ".//" + nsp("swe101:TimeRange/swe101:value") ) ).split(" ") self.starting = parser.parse(timerange[0]) self.ending = parser.parse(timerange[1]) except (AttributeError, TypeError, ValueError): self.starting = None self.ending = None
class DescribeSensor(IoosDescribeSensor): @classmethod def get_named_by_definition(cls, element_list, string_def): """Attempts to get an IOOS definition from a list of xml elements""" try: return next((st.value for st in element_list if st.definition == string_def)) except: return None def get_ioos_def(self, ident, elem_type, ont): """Gets a definition given an identifier and where to search for it""" if elem_type == 'identifier': getter_fn = self.system.get_identifiers_by_name elif elem_type == 'classifier': getter_fn = self.system.get_classifiers_by_name else: raise ValueError("Unknown element type '{}'".format(elem_type)) return DescribeSensor.get_named_by_definition(getter_fn(ident), urljoin(ont, ident)) def __init__(self, element): """ Common things between all describe sensor requests """ if isinstance(element, str): root = etree.fromstring(element) else: root = element sml_str = ".//{{{0}}}identifier/{{{0}}}Term[@definition='http://mmisw.org/ont/ioos/definition/%s']".format(SML_NS) # TODO: make this cleaner if hasattr(root, 'getroot'): root = root.getroot() self.system = SensorML(element).members[0] self.ioos_version = testXMLValue(root.find(".//{%s}field[@name='ioosTemplateVersion']/{%s}Text/{%s}value" % (SWE_NS, SWE_NS, SWE_NS))) if self.ioos_version != "1.0": warnings.warn("Warning: Unsupported IOOS version (%s). Supported: [1.0]" % self.ioos_version) self.shortName = self.get_ioos_def('shortName', 'identifier', ont) self.longName = self.get_ioos_def('longName', 'identifier', ont) self.keywords = map(unicode, self.system.keywords) # Location try: self.location = self.system.location[0] except (TypeError, IndexError): # No location exists self.location = None # Timerange try: timerange = testXMLValue(self.system.get_capabilities_by_name("observationTimeRange")[0].find(".//" + nsp("swe101:TimeRange/swe101:value"))).split(" ") self.starting = parser.parse(timerange[0]) self.ending = parser.parse(timerange[1]) except (AttributeError, TypeError, ValueError, IndexError): self.starting = None self.ending = None
class DescribeSensor(IoosDescribeSensor): @classmethod def get_named_by_definition(cls, element_list, string_def): """Attempts to get an IOOS definition from a list of xml elements""" try: return next((st.value for st in element_list if st.definition == string_def)) except: return None def get_ioos_def(self, ident, elem_type, ont): """Gets a definition given an identifier and where to search for it""" if elem_type == 'identifier': getter_fn = self.system.get_identifiers_by_name elif elem_type == 'classifier': getter_fn = self.system.get_classifiers_by_name else: raise ValueError("Unknown element type '{}'".format(elem_type)) return DescribeSensor.get_named_by_definition(getter_fn(ident), urljoin(ont, ident)) def __init__(self, element): """ Common things between all describe sensor requests """ if isinstance(element, ElementType): root = element else: root = etree.fromstring(element) sml_str = ".//{{{0}}}identifier/{{{0}}}Term[@definition='http://mmisw.org/ont/ioos/definition/%s']".format(SML_NS) # TODO: make this cleaner if hasattr(root, 'getroot'): root = root.getroot() self.system = SensorML(element).members[0] self.ioos_version = testXMLValue(root.find(".//{%s}field[@name='ioosTemplateVersion']/{%s}Text/{%s}value" % (SWE_NS, SWE_NS, SWE_NS))) if self.ioos_version != "1.0": warnings.warn("Warning: Unsupported IOOS version (%s). Supported: [1.0]" % self.ioos_version) self.shortName = self.get_ioos_def('shortName', 'identifier', ont) self.longName = self.get_ioos_def('longName', 'identifier', ont) self.keywords = list(map(str, self.system.keywords)) # Location try: self.location = self.system.location[0] except (TypeError, IndexError): # No location exists self.location = None # Timerange try: timerange = testXMLValue(self.system.get_capabilities_by_name("observationTimeRange")[0].find(".//" + nsp("swe101:TimeRange/swe101:value"))).split(" ") self.starting = parser.parse(timerange[0]) self.ending = parser.parse(timerange[1]) except (AttributeError, TypeError, ValueError, IndexError): self.starting = None self.ending = None