Exemple #1
0
def axml_content(d):
    """
    OwcContent dict to Atom XML
    :param d:
    :return:
    """
    #   <owc:content type="image/tiff" href=".."
    if is_empty(d):
        return None
    else:
        try:
            content_elem = etree.Element(ns_elem("owc", "content"), nsmap=ns)

            mimetype = extract_p('type', d, None)
            if mimetype is not None: content_elem.set("type", mimetype)
            url = extract_p('url', d, None)
            if url is not None: content_elem.set("href", url)
            title = extract_p('title', d, None)
            if title is not None: content_elem.set("title", title)

            content = extract_p('content', d, None)
            if content is None: content_elem.text = content
            return content_elem
        except Exception as ex:
            log.warn('could encode content', ex)
            return None
Exemple #2
0
 def from_dict(cls, d):
     return OwcContent(
         mimetype=extract_p('type', d, None),
         content=extract_p('content', d, None),
         url=extract_p('url', d, None),
         title=extract_p('title', d, None)
     )
Exemple #3
0
def axml_offering(d):
    # <owc:offering code="http://www.opengis.net/spec/owc-at...">
    #   <owc:offering code="http://www.opengis.net/spec....l">
    # 			<owc:content type="application/gml+xml">
    if is_empty(d):
        return None
    else:
        try:
            offering_code = extract_p('code', d, None)
            offering = etree.Element(ns_elem("owc", "offering"), attrib={"code": offering_code}, nsmap=ns)

            # use axml_operation here
            operations = [axml_operation(do) for do in
                          extract_p('operations', d, [])]
            [offering.append(el) for el in operations if el is not None]
            # use axml_content here
            contents = [axml_content(do) for do in
                        extract_p('contents', d, [])]
            [offering.append(el) for el in contents if el is not None]
            # use axml_styeset here
            styles = [axml_styleset(do) for do in
                      extract_p('styles', d, [])]
            [offering.append(el) for el in styles if el is not None]
            return offering
        except Exception as ex:
            log.warn('could encode offering', ex)
            return None
Exemple #4
0
def axml_display(d):
    # <owc:display>
    # 		<owc:pixelWidth>
    if is_empty(d):
        return None
    else:
        try:
            creator_display = etree.Element(ns_elem("owc", "display"),
                                            nsmap=ns)
            pixel_width = try_int(extract_p('pixelWidth', d, None))
            if pixel_width is not None:
                etree.SubElement(creator_display,
                                 ns_elem("owc",
                                         "pixelWidth")).text = str(pixel_width)
            pixel_height = try_int(extract_p('pixelHeight', d, None))
            if pixel_height is not None:
                etree.SubElement(creator_display, ns_elem(
                    "owc", "pixelHeight")).text = str(pixel_height)
            mm_per_pixel = try_float(extract_p('mmPerPixel', d, None))
            if mm_per_pixel is not None:
                etree.SubElement(creator_display, ns_elem(
                    "owc", "mmPerPixel")).text = str(mm_per_pixel)
            return creator_display
        except Exception as ex:
            log.warning('could encode creator_display', ex)
            return None
Exemple #5
0
def axml_offering(d):
    # <owc:offering code="http://www.opengis.net/spec/owc-at...">
    #   <owc:offering code="http://www.opengis.net/spec....l">
    # 			<owc:content type="application/gml+xml">
    if is_empty(d):
        return None
    else:
        try:
            offering_code = extract_p('code', d, None)
            offering = etree.Element(ns_elem("owc", "offering"),
                                     attrib={"code": offering_code},
                                     nsmap=ns)

            # use axml_operation here
            operations = [
                axml_operation(do) for do in extract_p('operations', d, [])
            ]
            [offering.append(el) for el in operations if el is not None]
            # use axml_content here
            contents = [
                axml_content(do) for do in extract_p('contents', d, [])
            ]
            [offering.append(el) for el in contents if el is not None]
            # use axml_styeset here
            styles = [axml_styleset(do) for do in extract_p('styles', d, [])]
            [offering.append(el) for el in styles if el is not None]
            return offering
        except Exception as ex:
            log.warning('could encode offering', ex)
            return None
Exemple #6
0
def axml_content(d):
    """
    OwcContent dict to Atom XML
    :param d:
    :return:
    """
    #   <owc:content type="image/tiff" href=".."
    if is_empty(d):
        return None
    else:
        try:
            content_elem = etree.Element(ns_elem("owc", "content"), nsmap=ns)

            mimetype = extract_p('type', d, None)
            if mimetype is not None:
                content_elem.set("type", mimetype)
            url = extract_p('url', d, None)
            if url is not None:
                content_elem.set("href", url)
            title = extract_p('title', d, None)
            if title is not None:
                content_elem.set("title", title)

            content = extract_p('content', d, None)
            if content is None:
                content_elem.text = content
            return content_elem
        except Exception as ex:
            log.warning('could encode content', ex)
            return None
Exemple #7
0
 def from_dict(cls, d):
     return OwcStyleSet(
         name=extract_p('name', d, None),
         title=extract_p('title', d, None),
         subtitle=extract_p('abstract', d, None),
         is_default=extract_p('default', d, None),
         legend_url=extract_p('legendURL', d, None),
         content=build_from_xp('content', d, OwcContent, None)
     )
Exemple #8
0
 def from_dict(cls, d):
     return OwcOperation(
         operations_code=extract_p('code', d, None),
         http_method=extract_p('method', d, None),
         mimetype=extract_p('type', d, None),
         request_url=extract_p('href', d, None),
         request=build_from_xp('request', d, OwcContent, None),
         result=build_from_xp('result', d, OwcContent, None)
     )
Exemple #9
0
 def from_dict(cls, d):
     return OwcOffering(
         offering_code=extract_p('code', d, None),
         operations=[OwcOperation.from_dict(do) for do in
                     extract_p('operations', d, [])],
         contents=[OwcContent.from_dict(do) for do in
                   extract_p('contents', d, [])],
         styles=[OwcStyleSet.from_dict(do) for do in
                 extract_p('styles', d, [])]
     )
Exemple #10
0
def axml_creator_app(d):
    # <generator uri="http://w.." version="1.0">MiraMon</generator>
    if is_empty(d):
        return None
    else:
        try:
            creator_app = etree.Element("generator", nsmap=ns)
            title = extract_p('title', d, None)
            if title is not None: creator_app.text = title
            uri = extract_p('uri', d, None)
            if uri is not None: creator_app.set("uri", uri)
            version = extract_p('version', d, None)
            if version is not None: creator_app.set("version", version)
            return creator_app
        except Exception as ex:
            log.warn('could encode creator_app', ex)
            return None
Exemple #11
0
def axml_category(d):
    # <category term="maps" label="This file contains maps"/>
    if is_empty(d):
        return None
    else:
        try:
            category = etree.Element("category", nsmap=ns)
            term = extract_p('term', d, None)
            if term is not None: category.set("term", term)
            scheme = extract_p('scheme', d, None)
            if scheme is not None: category.set("scheme", scheme)
            label = extract_p('label', d, None)
            if label is not None: category.set("label", label)
            return category
        except Exception as ex:
            log.warn('could encode category', ex)
            return None
Exemple #12
0
def axml_creator_app(d):
    # <generator uri="http://w.." version="1.0">MiraMon</generator>
    if is_empty(d):
        return None
    else:
        try:
            creator_app = etree.Element("generator", nsmap=ns)
            title = extract_p('title', d, None)
            if title is not None: creator_app.text = title
            uri = extract_p('uri', d, None)
            if uri is not None: creator_app.set("uri", uri)
            version = extract_p('version', d, None)
            if version is not None: creator_app.set("version", version)
            return creator_app
        except Exception as ex:
            log.warn('could encode creator_app', ex)
            return None
Exemple #13
0
def test_extract_p():
    t1 = {"date": "2013-11-02T15:24:24.446+12:00"}
    assert isinstance(t1, dict)
    assert t1.items() is not None
    assert t1.get('date') == "2013-11-02T15:24:24.446+12:00"
    t2 = extract_p('date', t1, None)
    assert t2 is not None
    assert t1.get('date') == t2
Exemple #14
0
def axml_category(d):
    # <category term="maps" label="This file contains maps"/>
    if is_empty(d):
        return None
    else:
        try:
            category = etree.Element("category", nsmap=ns)
            term = extract_p('term', d, None)
            if term is not None: category.set("term", term)
            scheme = extract_p('scheme', d, None)
            if scheme is not None: category.set("scheme", scheme)
            label = extract_p('label', d, None)
            if label is not None: category.set("label", label)
            return category
        except Exception as ex:
            log.warn('could encode category', ex)
            return None
Exemple #15
0
def axml_author(d):
    # <author> ..
    # 		<name>
    #       <email>
    if is_empty(d):
        return None
    else:
        try:
            author = etree.Element("author", nsmap=ns)
            name = extract_p('name', d, None)
            if name is not None: etree.SubElement(author, "name").text = name
            email = extract_p('email', d, None)
            if email is not None: etree.SubElement(author, "email").text = email
            uri = extract_p('uri', d, None)
            if uri is not None: etree.SubElement(author, "uri").text = uri
            return author
        except Exception as ex:
            log.warn('could encode author', ex)
            return None
Exemple #16
0
def axml_author(d):
    # <author> ..
    # 		<name>
    #       <email>
    if is_empty(d):
        return None
    else:
        try:
            author = etree.Element("author", nsmap=ns)
            name = extract_p('name', d, None)
            if name is not None: etree.SubElement(author, "name").text = name
            email = extract_p('email', d, None)
            if email is not None:
                etree.SubElement(author, "email").text = email
            uri = extract_p('uri', d, None)
            if uri is not None: etree.SubElement(author, "uri").text = uri
            return author
        except Exception as ex:
            log.warn('could encode author', ex)
            return None
Exemple #17
0
def axml_display(d):
    # <owc:display>
    # 		<owc:pixelWidth>
    if is_empty(d):
        return None
    else:
        try:
            creator_display = etree.Element(ns_elem("owc", "display"), nsmap=ns)
            pixel_width = try_int(extract_p('pixelWidth', d, None))
            if pixel_width is not None: etree.SubElement(creator_display,
                                                         ns_elem("owc", "pixelWidth")).text = str(pixel_width)
            pixel_height = try_int(extract_p('pixelHeight', d, None))
            if pixel_height is not None: etree.SubElement(creator_display,
                                                          ns_elem("owc", "pixelHeight")).text = str(pixel_height)
            mm_per_pixel = try_float(extract_p('mmPerPixel', d, None))
            if mm_per_pixel is not None: etree.SubElement(creator_display,
                                                          ns_elem("owc", "mmPerPixel")).text = str(mm_per_pixel)
            return creator_display
        except Exception as ex:
            log.warn('could encode creator_display', ex)
            return None
Exemple #18
0
def axml_operation(d):
    #   <owc:operation code="GetCapabilities" method="GET"
    #       type="applica..." href="..."
    #       <owc:request type="application/xml"> ..
    # etree.SubElement(entry, ns_elem("owc", "offering"), name="blah").text = "some value1"
    if is_empty(d):
        return None
    else:
        try:
            operation = etree.Element(ns_elem("owc", "operation"), nsmap=ns)

            operations_code = extract_p('code', d, None)
            if operations_code is not None: operation.set("code", operations_code)
            http_method = extract_p('method', d, None)
            if http_method is not None: operation.set("method", http_method)
            mimetype = extract_p('type', d, None)
            if mimetype is not None: operation.set("type", mimetype)
            request_url = extract_p('href', d, None)
            if request_url is not None: operation.set("href", request_url)

            # use axml_content here
            request = extract_p('request', d, None)
            request_enc = None if request is None else axml_content(request)
            if request_enc is not None: operation.append(request_enc)
            # use axml_content here
            result = extract_p('result', d, None)
            result_enc = None if result is None else axml_content(result)
            if result_enc is not None: operation.append(result_enc)
            return operation
        except Exception as ex:
            log.warn('could encode operation', ex)
            return None
Exemple #19
0
def axml_link(d):
    # < link rel = "via" type = "application/xml" href = "..." title = "..."
    if is_empty(d):
        return None
    else:
        try:
            link = etree.Element("link", nsmap=ns)
            href = extract_p('href', d, None)
            if href is not None:
                link.set("href", href)
            rel = extract_p('rel', d, None)
            if rel is not None:
                link.set("rel", rel)
            mimetype = extract_p('type', d, None)
            if mimetype is not None:
                link.set("type", mimetype)
            lang = extract_p('lang', d, None)
            if lang is not None:
                link.set("lang", lang)
            title = extract_p('title', d, None)
            if title is not None:
                link.set("title", title)
            length = try_int(extract_p('length', d, None))
            if length is not None:
                link.set("length", str(length))
            return link
        except Exception as ex:
            log.warning('could not encode link', ex)
            return None
Exemple #20
0
def axml_operation(d):
    #   <owc:operation code="GetCapabilities" method="GET"
    #       type="applica..." href="..."
    #       <owc:request type="application/xml"> ..
    # etree.SubElement(entry, ns_elem("owc", "offering"), name="blah").text = "some value1"
    if is_empty(d):
        return None
    else:
        try:
            operation = etree.Element(ns_elem("owc", "operation"), nsmap=ns)

            operations_code = extract_p('code', d, None)
            if operations_code is not None:
                operation.set("code", operations_code)
            http_method = extract_p('method', d, None)
            if http_method is not None: operation.set("method", http_method)
            mimetype = extract_p('type', d, None)
            if mimetype is not None: operation.set("type", mimetype)
            request_url = extract_p('href', d, None)
            if request_url is not None: operation.set("href", request_url)

            # use axml_content here
            request = extract_p('request', d, None)
            request_enc = None if request is None else axml_content(request)
            if request_enc is not None: operation.append(request_enc)
            # use axml_content here
            result = extract_p('result', d, None)
            result_enc = None if result is None else axml_content(result)
            if result_enc is not None: operation.append(result_enc)
            return operation
        except Exception as ex:
            log.warn('could encode operation', ex)
            return None
Exemple #21
0
def axml_styleset(d):
    #     <owc:styleSet>
    #       <owc:name>raster</owc:name>
    #       <owc:title>Default Raster</owc:title>
    #       <owc:abstract>A sample style that draws a </owc:abstract>
    #       <owc:legendURL href="h...." type="image/png"/>
    #     </owc:styleSet>
    if is_empty(d):
        return None
    else:
        try:
            styleset = etree.Element(ns_elem("owc", "styleSet"), nsmap=ns)

            name = extract_p('name', d, None)
            if name is not None: etree.SubElement(styleset, ns_elem("owc", "name")).text = name
            title = extract_p('title', d, None)
            if title is not None: etree.SubElement(styleset, ns_elem("owc", "title")).text = title
            subtitle = extract_p('abstract', d, None)
            if subtitle is not None: etree.SubElement(styleset, ns_elem("owc", "abstract")).text = subtitle
            is_default = extract_p('default', d, None)
            # TODO no example for default setting on style set
            if is_default is not None: etree.SubElement(styleset, ns_elem("owc", "default")).text = is_default
            legend_url = extract_p('legendURL', d, None)
            if legend_url is not None: etree.SubElement(styleset, ns_elem("owc", "legendURL")).text = legend_url
            # TODO no example for content on style set
            content = extract_p('content', d, None)
            content_enc = None if content is None else axml_content(content)
            if content_enc is not None: styleset.append(content_enc)
            return styleset
        except Exception as ex:
            log.warn('could encode styleset', ex)
            return None
Exemple #22
0
 def from_dict(cls, d):
     return OwcLink(
         href=extract_p('href', d, None),
         rel=extract_p('rel', d, None),
         mimetype=extract_p('type', d, None),
         lang=extract_p('lang', d, None),
         title=extract_p('title', d, None),
         length=try_int(extract_p('length', d, None))
     )
Exemple #23
0
def axml_styleset(d):
    #     <owc:styleSet>
    #       <owc:name>raster</owc:name>
    #       <owc:title>Default Raster</owc:title>
    #       <owc:abstract>A sample style that draws a </owc:abstract>
    #       <owc:legendURL href="h...." type="image/png"/>
    #     </owc:styleSet>
    if is_empty(d):
        return None
    else:
        try:
            styleset = etree.Element(ns_elem("owc", "styleSet"), nsmap=ns)

            name = extract_p('name', d, None)
            if name is not None:
                etree.SubElement(styleset, ns_elem("owc", "name")).text = name
            title = extract_p('title', d, None)
            if title is not None:
                etree.SubElement(styleset, ns_elem("owc",
                                                   "title")).text = title
            subtitle = extract_p('abstract', d, None)
            if subtitle is not None:
                etree.SubElement(styleset, ns_elem("owc",
                                                   "abstract")).text = subtitle
            is_default = extract_p('default', d, None)
            # TODO no example for default setting on style set
            if is_default is not None:
                etree.SubElement(styleset,
                                 ns_elem("owc", "default")).text = is_default
            legend_url = extract_p('legendURL', d, None)
            if legend_url is not None:
                etree.SubElement(styleset,
                                 ns_elem("owc", "legendURL")).text = legend_url
            # TODO no example for content on style set
            content = extract_p('content', d, None)
            content_enc = None if content is None else axml_content(content)
            if content_enc is not None:
                styleset.append(content_enc)
            return styleset
        except Exception as ex:
            log.warning('could encode styleset', ex)
            return None
Exemple #24
0
def axml_link(d):
    # < link rel = "via" type = "application/xml" href = "..." title = "..."
    if is_empty(d):
        return None
    else:
        try:
            link = etree.Element("link", nsmap=ns)
            href = extract_p('href', d, None)
            if href is not None: link.set("href", href)
            rel = extract_p('rel', d, None)
            if rel is not None: link.set("rel", rel)
            mimetype = extract_p('type', d, None)
            if mimetype is not None: link.set("type", mimetype)
            lang = extract_p('lang', d, None)
            if lang is not None: link.set("lang", lang)
            title = extract_p('title', d, None)
            if title is not None: link.set("title", title)
            length = try_int(extract_p('length', d, None))
            if length is not None: link.set("length", str(length))
            return link
        except Exception as ex:
            log.warn('could not encode link', ex)
            return None
Exemple #25
0
 def from_dict(cls, d):
     # TODO parse bbox??
     return OwcContext(
         id=d['id'],
         spec_reference=[OwcLink.from_dict(do) for do in
                         extract_p('properties.links.profiles', d, [])],
         area_of_interest=extract_p('bbox', d, None),
         context_metadata=[OwcLink.from_dict(do) for do in
                           extract_p('properties.links.via', d, [])],
         language=extract_p('properties.lang', d, None),
         title=extract_p('properties.title', d, None),
         subtitle=extract_p('properties.abstract', d, None),
         update_date=extract_p('properties.updated', d, None),
         authors=[OwcAuthor.from_dict(do) for do in
                  extract_p('properties.authors', d, [])],
         publisher=extract_p('properties.publisher', d, None),
         creator_application=build_from_xp(
             'properties.generator', d, OwcCreatorApplication, None),
         creator_display=build_from_xp(
             'properties.display', d, OwcCreatorDisplay, None),
         rights=extract_p('properties.rights', d, None),
         time_interval_of_interest=TimeIntervalFormat.from_string(
             extract_p('properties.date', d, None)),
         keywords=[OwcCategory.from_dict(do) for do in
                   extract_p('properties.categories', d, [])],
         resources=[OwcResource.from_dict(do) for do in
                    extract_p('features', d, [])]
     )
Exemple #26
0
 def from_dict(cls, d):
     return OwcCreatorApplication(
         title=extract_p('title', d, None),
         uri=extract_p('uri', d, None),
         version=extract_p('version', d, None)
     )
Exemple #27
0
 def from_dict(cls, d):
     return OwcCreatorDisplay(
         pixel_width=try_int(extract_p('pixelWidth', d, None)),
         pixel_height=try_int(extract_p('pixelHeight', d, None)),
         mm_per_pixel=try_float(extract_p('mmPerPixel', d, None))
     )
Exemple #28
0
def axml_resource(d):
    """
    encodes an OwcResource as dict into atom xml tree
    :param d:
    :return:
    """
    entry = etree.Element("entry", nsmap=ns)

    etree.SubElement(entry, "id").text = d['id']

    geospatial_extent = extract_p('geometry', d, None)
    if geospatial_extent is not None:
        try:
            gml = etree.fromstring(geospatial_extent)
            georss = etree.SubElement(entry, ns_elem("georss", "where"))
            georss.append(gml)
        except Exception as ex:
            log.warning('could encode geometry into georss:where', ex)
            pass

    title = d['properties']['title']
    if title is not None:
        etree.SubElement(entry, "title").text = title

    subtitle = extract_p('properties.abstract', d, None)
    # <content type = "text" >
    if subtitle is not None:
        etree.SubElement(entry, "content").text = subtitle

    update_date = extract_p('properties.updated', d, None)
    if update_date is not None:
        etree.SubElement(entry, "updated").text = update_date

    authors = [
        axml_author(do) for do in extract_p('properties.authors', d, [])
    ]
    [entry.append(el) for el in authors if el is not None]

    publisher = extract_p('properties.publisher', d, None)
    if update_date is not None:
        etree.SubElement(entry, ns_elem("dc", "publisher")).text = publisher

    rights = extract_p('properties.rights', d, None)
    if update_date is not None:
        etree.SubElement(entry, ns_elem("dc", "rights")).text = rights

    temporal_extent = extract_p('properties.date', d, None)
    if temporal_extent is not None:
        etree.SubElement(entry, "date").text = temporal_extent

    keywords = [
        axml_category(do) for do in extract_p('properties.categories', d, [])
    ]
    [entry.append(el) for el in keywords if el is not None]

    resource_metadata = [
        axml_link(do) for do in extract_p('properties.links.via', d, [])
    ]
    [entry.append(el) for el in resource_metadata if el is not None]

    content_description = [
        axml_content(do)
        for do in extract_p('properties.links.alternates', d, [])
    ]
    [entry.append(el) for el in content_description if el is not None]

    preview = [
        axml_link(do) for do in extract_p('properties.links.preview', d, [])
    ]
    [entry.append(el) for el in preview if el is not None]

    content_by_ref = [
        axml_link(do) for do in extract_p('properties.links.data', d, [])
    ]
    [entry.append(el) for el in content_by_ref if el is not None]

    offerings = [
        axml_offering(do) for do in extract_p('properties.offerings', d, [])
    ]
    [entry.append(el) for el in offerings if el is not None]

    # TODO no examples for active attribute
    active = extract_p('properties.active', d, None)
    if active is not None:
        etree.SubElement(entry, "active").text = active

    min_scale_denominator = try_float(
        extract_p('properties.minscaledenominator', d, None))
    # <owc:minScaleDenominator>2500</owc:minScaleDenominator>
    if min_scale_denominator is not None:
        etree.SubElement(entry, ns_elem(
            "owc", "minScaleDenominator")).text = str(min_scale_denominator)

    max_scale_denominator = try_float(
        extract_p('properties.maxscaledenominator', d, None))
    # <owc:maxScaleDenominator>25000</owc:maxScaleDenominator>
    if max_scale_denominator is not None:
        etree.SubElement(entry, ns_elem(
            "owc", "maxScaleDenominator")).text = str(max_scale_denominator)

    # TODO no examples for folder attribute
    folder = extract_p('properties.folder', d, None)
    if folder is not None:
        etree.SubElement(entry, "folder").text = folder

    # xml.append(entry)
    return entry
Exemple #29
0
def axml_context(d):
    """
    encodes base OwcContext as dict to atom xml tree
    :param d:
    :return:
    """
    xml = etree.Element("feed", nsmap=ns)
    etree.SubElement(xml, "id").text = d['id']

    spec_reference = [
        axml_link(do) for do in extract_p('properties.links.profiles', d, [])
    ]
    [xml.append(el) for el in spec_reference if el is not None]

    area_of_interest = extract_p('bbox', d, None)
    if area_of_interest is not None:
        try:
            gml = etree.fromstring(area_of_interest)
            georss = etree.SubElement(xml, ns_elem("georss", "where"))
            georss.append(gml)
        except Exception as ex:
            log.warning('could encode bbox into georss:where', ex)
            pass

    context_metadata = [
        axml_link(do) for do in extract_p('properties.links.via', d, [])
    ]
    [xml.append(el) for el in context_metadata if el is not None]

    language = extract_p('properties.lang', d, None)
    if language is not None:
        xml.set(ns_elem("xml", "lang"), language)

    title = extract_p('properties.title', d, None)
    if title is not None:
        etree.SubElement(xml, "title").text = title

    # <subtitle type = "html"
    subtitle = extract_p('properties.abstract', d, None)
    if subtitle is not None:
        etree.SubElement(xml, "subtitle").text = subtitle

    update_date = extract_p('properties.updated', d, None)
    if update_date is not None:
        etree.SubElement(xml, "updated").text = update_date

    authors = [
        axml_author(do) for do in extract_p('properties.authors', d, [])
    ]
    [xml.append(el) for el in authors if el is not None]

    publisher = extract_p('properties.publisher', d, None)
    if publisher is not None:
        etree.SubElement(xml, ns_elem("dc", "publisher")).text = publisher

    creator_application = axml_creator_app(
        extract_p('properties.generator', d, None))
    if creator_application is not None and not is_empty(creator_application):
        xml.append(creator_application)

    creator_display = axml_display(extract_p('properties.display', d, None))
    if creator_display is not None:
        xml.append(creator_display)

    rights = extract_p('properties.rights', d, None)
    if rights is not None:
        etree.SubElement(xml, "rights").text = rights

    time_interval_of_interest = extract_p('properties.date', d, None)
    if time_interval_of_interest is not None:
        etree.SubElement(xml, ns_elem("dc",
                                      "date")).text = time_interval_of_interest

    keywords = [
        axml_category(do) for do in extract_p('properties.categories', d, [])
    ]
    [xml.append(el) for el in keywords if el is not None]

    # here we generate single elements and attach them
    resources = [axml_resource(do) for do in extract_p('features', d, [])]
    [xml.append(el) for el in resources if el is not None]

    return xml
Exemple #30
0
 def from_dict(cls, d):
     return OwcCategory(
         term=extract_p('term', d, None),
         scheme=extract_p('scheme', d, None),
         label=extract_p('label', d, None)
     )
Exemple #31
0
 def from_dict(cls, d):
     return OwcAuthor(
         name=extract_p('name', d, None),
         email=extract_p('email', d, None),
         uri=extract_p('uri', d, None)
     )
Exemple #32
0
def axml_context(d):
    """
    encodes base OwcContext as dict to atom xml tree
    :param d:
    :return:
    """
    xml = etree.Element("feed", nsmap=ns)
    etree.SubElement(xml, "id").text = d['id']

    spec_reference = [axml_link(do) for do in
                      extract_p('properties.links.profiles', d, [])]
    [xml.append(el) for el in spec_reference if el is not None]

    area_of_interest = extract_p('bbox', d, None)
    if area_of_interest is not None:
        try:
            gml = etree.fromstring(area_of_interest)
            georss = etree.SubElement(xml, ns_elem("georss", "where"))
            georss.append(gml)
        except Exception as ex:
            log.warn('could encode bbox into georss:where', ex)
            pass

    context_metadata = [axml_link(do) for do in
                        extract_p('properties.links.via', d, [])]
    [xml.append(el) for el in context_metadata if el is not None]

    language = extract_p('properties.lang', d, None)
    if language is not None: xml.set(ns_elem("xml", "lang"), language)

    title = extract_p('properties.title', d, None)
    if title is not None: etree.SubElement(xml, "title").text = title

    # <subtitle type = "html"
    subtitle = extract_p('properties.abstract', d, None)
    if subtitle is not None: etree.SubElement(xml, "subtitle").text = subtitle

    update_date = extract_p('properties.updated', d, None)
    if update_date is not None: etree.SubElement(xml, "updated").text = update_date

    authors = [axml_author(do) for do in extract_p('properties.authors', d, [])]
    [xml.append(el) for el in authors if el is not None]

    publisher = extract_p('properties.publisher', d, None)
    if publisher is not None: etree.SubElement(xml, ns_elem("dc", "publisher")).text = publisher

    creator_application = axml_creator_app(extract_p('properties.generator', d, None))
    if creator_application is not None and not is_empty(creator_application): xml.append(creator_application)

    creator_display = axml_display(extract_p('properties.display', d, None))
    if creator_display is not None: xml.append(creator_display)

    rights = extract_p('properties.rights', d, None)
    if rights is not None: etree.SubElement(xml, "rights").text = rights

    time_interval_of_interest = extract_p('properties.date', d, None)
    if time_interval_of_interest is not None: etree.SubElement(xml,
                                                               ns_elem("dc", "date")).text = time_interval_of_interest

    keywords = [axml_category(do) for do in
                extract_p('properties.categories', d, [])]
    [xml.append(el) for el in keywords if el is not None]

    # here we generate single elements and attach them
    resources = [axml_resource(do) for do in
                 extract_p('features', d, [])]
    [xml.append(el) for el in resources if el is not None]

    return xml
Exemple #33
0
def axml_resource(d):
    """
    encodes an OwcResource as dict into atom xml tree
    :param d:
    :return:
    """
    entry = etree.Element("entry", nsmap=ns)

    etree.SubElement(entry, "id").text = d['id']

    geospatial_extent = extract_p('geometry', d, None)
    if geospatial_extent is not None:
        try:
            gml = etree.fromstring(geospatial_extent)
            georss = etree.SubElement(entry, ns_elem("georss", "where"))
            georss.append(gml)
        except Exception as ex:
            log.warn('could encode geometry into georss:where', ex)
            pass

    title = d['properties']['title']
    if title is not None: etree.SubElement(entry, "title").text = title

    subtitle = extract_p('properties.abstract', d, None)
    # <content type = "text" >
    if subtitle is not None: etree.SubElement(entry, "content").text = subtitle

    update_date = extract_p('properties.updated', d, None)
    if update_date is not None: etree.SubElement(entry, "updated").text = update_date

    authors = [axml_author(do) for do in
               extract_p('properties.authors', d, [])]
    [entry.append(el) for el in authors if el is not None]

    publisher = extract_p('properties.publisher', d, None)
    if update_date is not None: etree.SubElement(entry, ns_elem("dc", "publisher")).text = publisher

    rights = extract_p('properties.rights', d, None)
    if update_date is not None: etree.SubElement(entry, ns_elem("dc", "rights")).text = rights

    temporal_extent = extract_p('properties.date', d, None)
    if temporal_extent is not None: etree.SubElement(entry, "date").text = temporal_extent

    keywords = [axml_category(do) for do in
                extract_p('properties.categories', d, [])]
    [entry.append(el) for el in keywords if el is not None]

    resource_metadata = [axml_link(do) for do in
                         extract_p('properties.links.via', d, [])]
    [entry.append(el) for el in resource_metadata if el is not None]

    content_description = [axml_content(do)
                           for do in extract_p(
            'properties.links.alternates', d, [])]
    [entry.append(el) for el in content_description if el is not None]

    preview = [axml_link(do) for do in
               extract_p('properties.links.preview', d, [])]
    [entry.append(el) for el in preview if el is not None]

    content_by_ref = [axml_link(do) for do in
                      extract_p('properties.links.data', d, [])]
    [entry.append(el) for el in content_by_ref if el is not None]

    offerings = [axml_offering(do) for do in
                 extract_p('properties.offerings', d, [])]
    [entry.append(el) for el in offerings if el is not None]

    # TODO no examples for active attribute
    active = extract_p('properties.active', d, None)
    if active is not None: etree.SubElement(entry, "active").text = active

    min_scale_denominator = try_float(extract_p(
        'properties.minscaledenominator', d, None))
    # <owc:minScaleDenominator>2500</owc:minScaleDenominator>
    if min_scale_denominator is not None: etree.SubElement(entry, ns_elem("owc",
                                                                          "minScaleDenominator")).text = str(min_scale_denominator)

    max_scale_denominator = try_float(extract_p(
        'properties.maxscaledenominator', d, None))
    # <owc:maxScaleDenominator>25000</owc:maxScaleDenominator>
    if max_scale_denominator is not None: etree.SubElement(entry, ns_elem("owc",
                                                                          "maxScaleDenominator")).text = str(max_scale_denominator)

    # TODO no examples for folder attribute
    folder = extract_p('properties.folder', d, None)
    if folder is not None: etree.SubElement(entry, "folder").text = folder

    # xml.append(entry)
    return entry
Exemple #34
0
 def from_dict(cls, d):
     return OwcResource(
         id=d['id'],
         geospatial_extent=extract_p('geometry', d, None),
         title=d['properties']['title'],
         subtitle=extract_p('properties.abstract', d, None),
         update_date=extract_p('properties.updated', d, None),
         authors=[OwcAuthor.from_dict(do) for do in
                  extract_p('properties.authors', d, [])],
         publisher=extract_p('properties.publisher', d, None),
         rights=extract_p('properties.rights', d, None),
         temporal_extent=TimeIntervalFormat.from_string(
             extract_p('properties.date', d, None)),
         keywords=[OwcCategory.from_dict(do) for do in
                   extract_p('properties.categories', d, [])],
         resource_metadata=[OwcLink.from_dict(do) for do in
                            extract_p('properties.links.via', d, [])],
         content_description=[OwcLink.from_dict(do)
                              for do in extract_p('properties.links.alternates', d, [])],
         preview=[OwcLink.from_dict(do) for do in
                  extract_p('properties.links.previews', d, [])],
         content_by_ref=[OwcLink.from_dict(do) for do in
                         extract_p('properties.links.data', d, [])],
         offerings=[OwcOffering.from_dict(do) for do in
                    extract_p('properties.offerings', d, [])],
         active=extract_p('properties.active', d, None),
         min_scale_denominator=try_float(extract_p(
             'properties.minscaledenominator', d, None)),
         max_scale_denominator=try_float(extract_p(
             'properties.maxscaledenominator', d, None)),
         folder=extract_p('properties.folder', d, None),
     )