예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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