def _encode_operations_metadata(conf): component = ServiceComponent(env) versions = ("1.0.0",) get_handlers = component.query_service_handlers( service="WPS", versions=versions, method="GET" ) post_handlers = component.query_service_handlers( service="WPS", versions=versions, method="POST" ) all_handlers = sorted( set(get_handlers + post_handlers), key=lambda h: h.request ) url = conf.http_service_url return OWS("OperationsMetadata", *[ OWS("Operation", OWS("DCP", OWS("HTTP", # TODO: only select available OWS("Get", **{ns_xlink("href"): url}), OWS("Post", **{ns_xlink("href"): url}), ) ), name=handler.request ) for handler in all_handlers ])
def _encode_operations_metadata(conf): """ Encode OperationsMetadata XML element. """ component = ServiceComponent(env) versions = ("1.0.0", ) get_handlers = component.query_service_handlers(service="WPS", versions=versions, method="GET") post_handlers = component.query_service_handlers(service="WPS", versions=versions, method="POST") all_handlers = sorted(set(get_handlers + post_handlers), key=lambda h: h.request) url = conf.http_service_url return OWS( "OperationsMetadata", *[ OWS("Operation", OWS( "DCP", OWS( "HTTP", OWS("Get", **{ns_xlink("href"): url}), OWS("Post", **{ns_xlink("href"): url}), )), name=handler.request) for handler in all_handlers ])
def encode_operations_metadata(self, request): component = ServiceComponent(env) versions = ("2.0.0", "2.0.1") get_handlers = component.query_service_handlers( service="WCS", versions=versions, method="GET" ) post_handlers = component.query_service_handlers( service="WCS", versions=versions, method="POST" ) all_handlers = sorted( set(get_handlers + post_handlers), key=lambda h: (getattr(h, "index", 10000), h.request) ) http_service_url = get_http_service_url(request) operations = [] for handler in all_handlers: methods = [] if handler in get_handlers: methods.append( self.encode_reference("Get", http_service_url) ) if handler in post_handlers: post = self.encode_reference("Post", http_service_url) post.append( OWS("Constraint", OWS("AllowedValues", OWS("Value", "XML") ), name="PostEncoding" ) ) methods.append(post) operations.append( OWS("Operation", OWS("DCP", OWS("HTTP", *methods) ), # apply default values as constraints *[ OWS("Constraint", OWS("NoValues"), OWS("DefaultValue", str(default)), name=name ) for name, default in getattr(handler, "constraints", {}).items() ], name=handler.request ) ) return OWS("OperationsMetadata", *operations)
def encode_service_identification(self, conf): # get a list of versions in descending order from all active # GetCapabilities handlers. component = ServiceComponent(env) handlers = component.query_service_handlers( service="WCS", request="GetCapabilities" ) versions = sorted( set(chain(*[handler.versions for handler in handlers])), reverse=True ) elem = OWS("ServiceIdentification", OWS("Title", conf.title), OWS("Abstract", conf.abstract), OWS("Keywords", *[ OWS("Keyword", keyword) for keyword in conf.keywords ]), OWS("ServiceType", "OGC WCS", codeSpace="OGC") ) elem.extend( OWS("ServiceTypeVersion", version) for version in versions ) elem.extend( OWS("Profile", "http://www.opengis.net/%s" % profile) for profile in PROFILES ) elem.extend(( OWS("Fees", conf.fees), OWS("AccessConstraints", conf.access_constraints) )) return elem
def encode_service_identification(self, conf): # get a list of versions in descending order from all active # GetCapabilities handlers. component = ServiceComponent(env) handlers = component.query_service_handlers(service="WCS", request="GetCapabilities") versions = sorted(set( chain(*[handler.versions for handler in handlers])), reverse=True) elem = OWS( "ServiceIdentification", OWS("Title", conf.title), OWS("Abstract", conf.abstract), OWS("Keywords", *[OWS("Keyword", keyword) for keyword in conf.keywords]), OWS("ServiceType", "OGC WCS", codeSpace="OGC")) elem.extend(OWS("ServiceTypeVersion", version) for version in versions) elem.extend( OWS("Profile", "http://www.opengis.net/%s" % profile) for profile in PROFILES) elem.extend((OWS("Fees", conf.fees), OWS("AccessConstraints", conf.access_constraints))) return elem
def encode_operations_metadata(self, request): component = ServiceComponent(env) versions = ("2.0.0", "2.0.1") get_handlers = component.query_service_handlers(service="WCS", versions=versions, method="GET") post_handlers = component.query_service_handlers(service="WCS", versions=versions, method="POST") all_handlers = sorted(set(get_handlers + post_handlers), key=lambda h: (getattr(h, "index", 10000), h.request)) http_service_url = get_http_service_url(request) operations = [] for handler in all_handlers: methods = [] if handler in get_handlers: methods.append(self.encode_reference("Get", http_service_url)) if handler in post_handlers: post = self.encode_reference("Post", http_service_url) post.append( OWS("Constraint", OWS("AllowedValues", OWS("Value", "XML")), name="PostEncoding")) methods.append(post) operations.append( OWS( "Operation", OWS("DCP", OWS("HTTP", *methods)), # apply default values as constraints *[ OWS("Constraint", OWS("NoValues"), OWS("DefaultValue", str(default)), name=name) for name, default in getattr( handler, "constraints", {}).items() ], name=handler.request)) return OWS("OperationsMetadata", *operations)
def encode_capabilities(self, sections, coverages_qs=None, dataset_series_qs=None): conf = CapabilitiesConfigReader(get_eoxserver_config()) all_sections = "all" in sections caps = [] if all_sections or "serviceidentification" in sections: caps.append( OWS("ServiceIdentification", OWS("Title", conf.title), OWS("Abstract", conf.abstract), OWS("Keywords", *[ OWS("Keyword", keyword) for keyword in conf.keywords ]), OWS("ServiceType", "OGC WCS", codeSpace="OGC"), OWS("ServiceTypeVersion", "2.0.1"), OWS("Profile", "http://www.opengis.net/spec/WCS_application-profile_earth-observation/1.0/conf/eowcs"), OWS("Profile", "http://www.opengis.net/spec/WCS_application-profile_earth-observation/1.0/conf/eowcs_get-kvp"), OWS("Profile", "http://www.opengis.net/spec/WCS_service-extension_crs/1.0/conf/crs"), OWS("Profile", "http://www.opengis.net/spec/WCS/2.0/conf/core"), OWS("Profile", "http://www.opengis.net/spec/WCS_protocol-binding_get-kvp/1.0/conf/get-kvp"), OWS("Profile", "http://www.opengis.net/spec/WCS_protocol-binding_post-xml/1.0/conf/post-xml"), OWS("Profile", "http://www.opengis.net/spec/GMLCOV/1.0/conf/gml-coverage"), OWS("Profile", "http://www.opengis.net/spec/GMLCOV/1.0/conf/multipart"), OWS("Profile", "http://www.opengis.net/spec/GMLCOV/1.0/conf/special-format"), OWS("Profile", "http://www.opengis.net/spec/GMLCOV_geotiff-coverages/1.0/conf/geotiff-coverage"), OWS("Profile", "http://www.opengis.net/spec/WCS_geotiff-coverages/1.0/conf/geotiff-coverage"), OWS("Profile", "http://www.opengis.net/spec/WCS_service-model_crs-predefined/1.0/conf/crs-predefined"), OWS("Profile", "http://www.opengis.net/spec/WCS_service-model_scaling+interpolation/1.0/conf/scaling+interpolation"), OWS("Profile", "http://www.opengis.net/spec/WCS_service-model_band-subsetting/1.0/conf/band-subsetting"), OWS("Fees", conf.fees), OWS("AccessConstraints", conf.access_constraints) ) ) if all_sections or "serviceprovider" in sections: caps.append( OWS("ServiceProvider", OWS("ProviderName", conf.provider_name), self.encode_reference("ProviderSite", conf.provider_site), OWS("ServiceContact", OWS("IndividualName", conf.individual_name), OWS("PositionName", conf.position_name), OWS("ContactInfo", OWS("Phone", OWS("Voice", conf.phone_voice), OWS("Facsimile", conf.phone_facsimile) ), OWS("Address", OWS("DeliveryPoint", conf.delivery_point), OWS("City", conf.city), OWS("AdministrativeArea", conf.administrative_area), OWS("PostalCode", conf.postal_code), OWS("Country", conf.country), OWS("ElectronicMailAddress", conf.electronic_mail_address) ), self.encode_reference( "OnlineResource", conf.onlineresource ), OWS("HoursOfService", conf.hours_of_service), OWS("ContactInstructions", conf.contact_instructions) ), OWS("Role", conf.role) ) ) ) if all_sections or "operationsmetadata" in sections: component = ServiceComponent(env) versions = ("2.0.0", "2.0.1") get_handlers = component.query_service_handlers( service="WCS", versions=versions, method="GET" ) post_handlers = component.query_service_handlers( service="WCS", versions=versions, method="POST" ) all_handlers = sorted( set(get_handlers + post_handlers), key=lambda h: h.request ) operations = [] for handler in all_handlers: methods = [] if handler in get_handlers: methods.append( self.encode_reference("Get", conf.http_service_url) ) if handler in post_handlers: post = self.encode_reference("Post", conf.http_service_url) post.append( OWS("Constraint", OWS("AllowedValues", OWS("Value", "XML") ), name="PostEncoding" ) ) methods.append(post) operations.append( OWS("Operation", OWS("DCP", OWS("HTTP", *methods) ), # apply default values as constraints *[ OWS("Constraint", OWS("NoValues"), OWS("DefaultValue", str(default)), name=name ) for name, default in getattr(handler, "constraints", {}).items() ], name=handler.request ) ) caps.append(OWS("OperationsMetadata", *operations)) if all_sections or "servicemetadata" in sections: service_metadata = WCS("ServiceMetadata") # get the list of enabled formats from the format registry formats = filter( lambda f: f, getFormatRegistry().getSupportedFormatsWCS() ) service_metadata.extend( map(lambda f: WCS("formatSupported", f.mimeType), formats) ) # get a list of supported CRSs from the CRS registry supported_crss = crss.getSupportedCRS_WCS(format_function=crss.asURL) extension = WCS("Extension") service_metadata.append(extension) extension.extend( map(lambda c: CRS("crsSupported", c), supported_crss) ) caps.append(service_metadata) inc_contents = all_sections or "contents" in sections inc_coverage_summary = inc_contents or "coveragesummary" in sections inc_dataset_series_summary = inc_contents or "datasetseriessummary" in sections inc_contents = inc_contents or inc_coverage_summary or inc_dataset_series_summary if inc_contents: contents = [] if inc_coverage_summary: coverages = [] # reduce data transfer by only selecting required elements # TODO: currently runs into a bug #coverages_qs = coverages_qs.only( # "identifier", "real_content_type" #) for coverage in coverages_qs: coverages.append( WCS("CoverageSummary", WCS("CoverageId", coverage.identifier), WCS("CoverageSubtype", coverage.real_type.__name__) ) ) contents.extend(coverages) if inc_dataset_series_summary: dataset_series_set = [] # reduce data transfer by only selecting required elements # TODO: currently runs into a bug #dataset_series_qs = dataset_series_qs.only( # "identifier", "begin_time", "end_time", "footprint" #) for dataset_series in dataset_series_qs: minx, miny, maxx, maxy = dataset_series.extent_wgs84 dataset_series_set.append( EOWCS("DatasetSeriesSummary", OWS("WGS84BoundingBox", OWS("LowerCorner", "%f %f" % (miny, minx)), OWS("UpperCorner", "%f %f" % (maxy, maxx)), ), EOWCS("DatasetSeriesId", dataset_series.identifier), GML("TimePeriod", GML("beginPosition", isoformat(dataset_series.begin_time)), GML("endPosition", isoformat(dataset_series.end_time)), **{ns_gml("id"): dataset_series.identifier + "_timeperiod"} ) ) ) contents.append(WCS("Extension", *dataset_series_set)) caps.append(WCS("Contents", *contents)) root = WCS("Capabilities", *caps, version="2.0.1", updateSequence=conf.update_sequence) return root