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
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) )
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
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
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
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
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) )
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) )
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, [])] )
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
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
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
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
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
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
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
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
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)) )
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
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
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, [])] )
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) )
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)) )
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
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
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) )
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) )
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
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
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), )