diff --git a/datacube_ows/ows_configuration.py b/datacube_ows/ows_configuration.py index de393b35..7aa9b825 100644 --- a/datacube_ows/ows_configuration.py +++ b/datacube_ows/ows_configuration.py @@ -1513,13 +1513,18 @@ def parse_layers(self, cfg: list[CFG_DICT]): self.declare_unready("native_product_index") self.root_layer_folder = OWSFolder(cast(CFG_DICT, { "title": "Root Folder (hidden)", - "label": "ows_root_hidden", + "abstract": self.abstract, + "label": "ows_root", "layers": cfg }), global_cfg=self, parent_layer=None) @property def layers(self) -> list[OWSLayer]: - return self.root_layer_folder.child_layers + # Multiple top-level are not consistent with a strict reading of the OWS standard. + # If we have multiple top-level folders, wrap them in an auto-generated top-level folder. + if len(self.root_layer_folder.child_layers) == 1: + return self.root_layer_folder.child_layers + return [self.root_layer_folder] def alias_bboxes(self, bboxes: CFG_DICT) -> CFG_DICT: out: CFG_DICT = {} diff --git a/datacube_ows/wsgi.py b/datacube_ows/wsgi.py index a3034107..5b751402 100644 --- a/datacube_ows/wsgi.py +++ b/datacube_ows/wsgi.py @@ -15,12 +15,19 @@ # The location of the datcube config file. os.environ.setdefault("DATACUBE_CONFIG_PATH", "/opt/odc/.datacube.conf.local") +from datacube_ows import __version__ + from datacube_ows.ogc import app # isort:skip application = app def main(): + if "--version" in sys.argv: + print("Open Data Cube Open Web Services (datacube-ows) version", + __version__ + ) + exit(0) app.run() diff --git a/docs/cfg_layers.rst b/docs/cfg_layers.rst index 0fab4443..39a4e215 100644 --- a/docs/cfg_layers.rst +++ b/docs/cfg_layers.rst @@ -17,6 +17,15 @@ at least one named layer (defined below). The "layers" section is a list of Layer configurations. +> Note: Although many WMS clients support multiple +> top-level layers, a strict reading of the WMS standard requires +> only one. Some WMS clients do not recognise all top level +> layers if more than one is defined. +> +> Therefore, in the interests of WMS standards compliance, if you define multiple top +> level layers, they will be automatically wrapped in a single top-level folder +> using the global metadata. + A layer may be either: * A `named layer <#named-layers>`_ which represents a queryable