From 68f0cc0417f9e648e1e057944506dc5b6424960a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Brunner?= Date: Fri, 22 Sep 2023 19:16:40 +0200 Subject: [PATCH] Fix documentation issues --- Makefile | 3 +- ci/extract-documentation | 4 - doc/Dockerfile | 12 +- doc/build.sh | 13 - doc/conf.py | 6 +- doc/import_ngeo_config.py | 6 +- doc/integrator/authentication.rst | 34 +- doc/integrator/c2cwsgiutils.rst | 2 +- doc/integrator/docker.rst | 1 + doc/integrator/extend_application.rst | 2 +- doc/integrator/fulltext_search.rst | 9 +- doc/integrator/headers.rst | 2 +- doc/integrator/https.rst | 9 +- doc/integrator/ngeo.rst | 8 +- doc/integrator/ngeo_config_ref.rst | 74 ++- doc/integrator/tilegeneration.rst | 166 +------ doc/integrator/tilegeneration_doc.rst | 150 ++++++ doc/integrator/tilegeneration_ref.rst | 10 + doc/integrator/tilegeneration_usage.rst | 8 + doc/integrator/vector_tiles.rst | 4 +- doc/poetry.lock | 428 +++++++++++++++++- doc/pyproject.toml | 11 +- .../scripts/manage_users.py | 4 +- 23 files changed, 721 insertions(+), 245 deletions(-) delete mode 100755 doc/build.sh create mode 100644 doc/integrator/tilegeneration_doc.rst create mode 100644 doc/integrator/tilegeneration_ref.rst create mode 100644 doc/integrator/tilegeneration_usage.rst diff --git a/Makefile b/Makefile index dede5f86bf..82efe1160c 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ MAJOR_VERSION ?= $(shell scripts/get-version --major) MAJOR_MINOR_VERSION ?= $(shell scripts/get-version --major-minor) VERSION ?= $(shell scripts/get-version --full) DOCKER_TAG ?= latest +MAIN_BRANCH ?= fake-local-branch export MAJOR_VERSION export DOCKER_BUILDKIT=1 @@ -148,7 +149,7 @@ doc: build-tools ## Generate the documentation --build-arg=MAJOR_VERSION=$(MAJOR_VERSION) \ --build-arg=MAIN_BRANCH=$(MAIN_BRANCH) \ doc - MAJOR_VERSION=$(MAJOR_VERSION) MAIN_BRANCH=$(MAIN_BRANCH) ci/extract-documentation artifacts/documentations/ + ci/extract-documentation artifacts/documentations/ .PHONY: transifex diff --git a/ci/extract-documentation b/ci/extract-documentation index 87838f814e..c50bc4bd14 100755 --- a/ci/extract-documentation +++ b/ci/extract-documentation @@ -1,10 +1,6 @@ #!/bin/bash -eux mkdir --parent "${1}" -DOCKER_BUILDKIT=1 docker build --tag=camptocamp/geomapfish-doc \ - --build-arg="MAJOR_VERSION=${MAJOR_VERSION}" \ - --build-arg="MAIN_BRANCH=${MAIN_BRANCH}" \ - doc docker run --rm --name=doc --detach camptocamp/geomapfish-doc tail -f /dev/null docker cp doc:/doc/_build/html/ "${1}/" docker stop doc diff --git a/doc/Dockerfile b/doc/Dockerfile index 90733ce52e..8f52a5c067 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -49,9 +49,11 @@ WORKDIR /doc ARG MAJOR_VERSION ARG MAIN_BRANCH -RUN ./import_ngeo_config.py --type Configuration integrator/ngeo_configuration.rst \ - --type APIConfig integrator/ngeo_api_configuration.rst \ - node_modules/ngeo/dist/typedoc.json integrator/ngeo_other_configuration.rst \ + +RUN ./import_ngeo_config.py \ + --type Configuration /ngeo_configuration.rst \ + --type APIConfig /ngeo_api_configuration.rst \ + node_modules/ngeo/dist/typedoc.json /ngeo_other_configuration.rst \ + && mv integrator/ngeo_config_ref.rst / \ && mkdir --parent _build/html \ - && sphinx-build -b html -d _build/doctrees . _build/html \ - && ./build.sh + && sphinx-build -W -b html -d _build/doctrees . _build/html diff --git a/doc/build.sh b/doc/build.sh deleted file mode 100755 index 31aaaa8c75..0000000000 --- a/doc/build.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -eu - -cd "$(dirname "${0}")" -exec 3>&1 -error=$({ sphinx-build -b html -d _build/doctrees . _build/html 1>&3; } 2>&1) -exec 3>&- -cd - > /dev/null -if [ "${error}" != "" ]; then - echo "Documentation Error:" - echo "${error}" - exit 1 -fi -echo Documentation Success diff --git a/doc/conf.py b/doc/conf.py index 1bab9357dc..af4c64449c 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -125,7 +125,11 @@ # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -html_theme_options = {"github_user": "camptocamp", "github_repo": "c2cgeoportal", "github_banner": True} +html_theme_options = { + "github_user": "camptocamp", + "github_repo": "c2cgeoportal", + "github_banner": False, +} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] diff --git a/doc/import_ngeo_config.py b/doc/import_ngeo_config.py index cb1ebc13bc..ffb417e34b 100755 --- a/doc/import_ngeo_config.py +++ b/doc/import_ngeo_config.py @@ -87,7 +87,11 @@ def main() -> None: """Convert the ngeo config to ReStructuredText.""" parser = argparse.ArgumentParser("Convert the config from the JSON from typedoc to ReStructuredText") parser.add_argument( - "--type", help="create a separate file for a type", nargs=2, action="append", default=[] + "--type", + help="create a separate file for a type", + nargs=2, + action="append", + default=[], ) parser.add_argument("input", help="the JSON file from typedoc") parser.add_argument("other", help="filename for other types") diff --git a/doc/integrator/authentication.rst b/doc/integrator/authentication.rst index 65b2dca4f1..c92456e999 100644 --- a/doc/integrator/authentication.rst +++ b/doc/integrator/authentication.rst @@ -22,16 +22,14 @@ application's main ``__init__.py`` file. In the file ``env.project``, you can configure the policy with the following variables: -.. code:: - - AUTHTKT_TIMEOUT # Default to one day. - AUTHTKT_REISSUE_TIME # Default to 2h30, recommended to be 10 times smaller than AUTHTKT_TIMEOUT. - AUTHTKT_MAXAGE # Default to one day, good to have the same value as AUTHTKT_TIMEOUT. - AUTHTKT_SECRET # Should be defined - AUTHTKT_COOKIENAME - AUTHTKT_HTTP_ONLY # Default to true. - AUTHTKT_SECURE # Default to true. - AUTHTKT_SAMESITE # Default to Lax. +``AUTHTKT_TIMEOUT``: Default to one day. +``AUTHTKT_REISSUE_TIME``: Default to 2h30, recommended to be 10 times smaller than ``AUTHTKT_TIMEOUT``. +``AUTHTKT_MAXAGE``: Default to one day, good to have the same value as ``AUTHTKT_TIMEOUT``. +``AUTHTKT_SECRET``: Should be defined +``AUTHTKT_COOKIENAME``: Should be defined +``AUTHTKT_HTTP_ONLY``: Default to ``true``. +``AUTHTKT_SECURE``: Default to ``true``. +``AUTHTKT_SAMESITE``: Default to ``Lax``. .. note:: @@ -158,23 +156,23 @@ Some service of GeoMapFish has some host restriction if you mix the domain. Application authentication ~~~~~~~~~~~~~~~~~~~~~~~~~~ -To be considered as authenticated we should have the correct `Cookie` header, -we also check the `Referrer` header to be sure that the user is coming from the same domain. -If he is equals to the `Host` header, we consider that the user is coming from the same domain. +To be considered as authenticated we should have the correct ``Cookie`` header, +we also check the ``Referer`` header to be sure that the user is coming from the same domain. +If he is equals to the ``Host`` header, we consider that the user is coming from the same domain. If your server and client application are not on the same domain, to make the login working, -you should add the client application domain name (with port) in the vars in `vars/authorized_referers`. +you should add the client application domain name (with port) in the vars in ``vars/authorized_referers``. -This check is also done on the `came_from` parameter during the login process. +This check is also done on the ``came_from`` parameter during the login process. Shortener ~~~~~~~~~ If you use the shortener service to create link on application on another domain name, you should add -this domain name in the vars in `vars/shortener/allowed_hosts`. +this domain name in the vars in ``vars/shortener/allowed_hosts``. Admin ~~~~~ We provide a view for the admin interface, to be able to clear the cache per OGC server. -If for an unknown reason you have not the same host in the `Host` header and `came_from` parameter, you should -add the domain of the `came_from` parameter in the vars in `vars/admin_interface/allowed_hosts`. +If for an unknown reason you have not the same host in the ``Host`` header and ``came_from`` parameter, you should +add the domain of the ``came_from`` parameter in the vars in ``vars/admin_interface/allowed_hosts``. diff --git a/doc/integrator/c2cwsgiutils.rst b/doc/integrator/c2cwsgiutils.rst index 4702769198..15857a6814 100644 --- a/doc/integrator/c2cwsgiutils.rst +++ b/doc/integrator/c2cwsgiutils.rst @@ -3,7 +3,7 @@ C2C WSGI Utils ============== - ``c2cwsgiutils`` is a framework assisting in development, integration and administration of WSGI applications. +``c2cwsgiutils`` is a framework assisting in development, integration and administration of WSGI applications. ``c2cgeoportal`` uses ``c2cwsgiutils``. See its `documentation `__. diff --git a/doc/integrator/docker.rst b/doc/integrator/docker.rst index 20d05d0eff..3258cb575a 100644 --- a/doc/integrator/docker.rst +++ b/doc/integrator/docker.rst @@ -56,6 +56,7 @@ For OpenShift projects: tinyows -.-> postgres; classDef data fill:#5ba6ff,color:black; + For standalone projects: .. mermaid:: diff --git a/doc/integrator/extend_application.rst b/doc/integrator/extend_application.rst index 74fea6cbbc..267aca1ea2 100644 --- a/doc/integrator/extend_application.rst +++ b/doc/integrator/extend_application.rst @@ -353,7 +353,7 @@ For that you will need to create a new folder named ``geoportal_custom``. An this folder, add a file named ``authentication.py`` with the content you need, the original content is: -.. code:: python: +.. code:: python from pyramid.config import Configurator diff --git a/doc/integrator/fulltext_search.rst b/doc/integrator/fulltext_search.rst index 876f8929b2..032e9e1d04 100644 --- a/doc/integrator/fulltext_search.rst +++ b/doc/integrator/fulltext_search.rst @@ -89,10 +89,11 @@ Note that some tree items' metadata are used by the ``theme2fts`` script: that is to say that considered tree item will match when searching for the search aliases. * ``searchLabelPattern``: Template string for the label of tree items in the search results, for example: ``{name} ({theme})``. The supported parameters are: - * name: name of the tree item - * parent: parent of the item (may be a group, a block or a theme) - * block: name of the block to which the item belongs - * theme: name of the theme to which the item belongs + + * ``name``: name of the tree item + * ``parent``: parent of the item (may be a group, a block or a theme) + * ``block``: name of the block to which the item belongs + * ``theme``: name of the theme to which the item belongs Security diff --git a/doc/integrator/headers.rst b/doc/integrator/headers.rst index 98d7bcd3e3..c797feed30 100644 --- a/doc/integrator/headers.rst +++ b/doc/integrator/headers.rst @@ -18,7 +18,7 @@ You may wish to override the values being written. All this is done in the confi cache_control_max_age: 600 # 10 minutes access_control_max_age: 600 # 10 minutes access_control_allow_origin: [] # list oh hosts (e.g. https://example.com) or '*' - headers: {} @ list of additional headers + headers: {} # list of additional headers Where ```` can be: ``dynamic``, ``index``, ``api``, ``apihelp``, ``profile``, ``raster``, ``error``, ``themes``, ``config``, ``print``, ``fulltextsearch``, ``mapserver``, ``tinyows``, ``layers``, diff --git a/doc/integrator/https.rst b/doc/integrator/https.rst index a74605c5ca..d319de40d6 100644 --- a/doc/integrator/https.rst +++ b/doc/integrator/https.rst @@ -1,3 +1,4 @@ +----- HTTPS ----- @@ -12,7 +13,7 @@ There are two ways to manage this: * application and SSL certificate on the same server Application behind a proxy -~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------------------- If the application is placed behind some proxy that removes the SSL encryption (plain HTTP is used between the proxy and the server), then some specific @@ -35,7 +36,7 @@ value of ``request.scheme``. For example:: }; Application and SSL certificate on the same server -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------------------------------------------- If the SSL certificate and the application are located on the same server, all requests will be redirected to https. So you should change the scheme to https @@ -52,7 +53,7 @@ In case you load http external resources into your application, you should use the resourceproxy service as described below. Loading non https external resources -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------------------ If you want to load non https external resources in your https application, you should use the ``resourceproxy`` service and add the list of hosts you want to access in your project @@ -74,7 +75,7 @@ For example: ``https://geoportail.camptocamp.com/main/resourceproxy?target=rfinfo&values=(175,2633)`` Local certificate checks -~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------ Certain c2cgeoportal features open a http session to your c2cgeoportal services, for example the ``checker`` or the ``lingua_extractor``. diff --git a/doc/integrator/ngeo.rst b/doc/integrator/ngeo.rst index c10b01a4a1..ef35cf8926 100644 --- a/doc/integrator/ngeo.rst +++ b/doc/integrator/ngeo.rst @@ -135,18 +135,18 @@ The dynamic values names are: Ngeo configuration options ~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. include:: ngeo_configuration.rst +.. include:: //ngeo_configuration.rst Ngeo API configuration options ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. include:: ngeo_api_configuration.rst +.. include:: //ngeo_api_configuration.rst Ngeo internal object configuration options ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. include:: ngeo_config_ref.rst -.. include:: ngeo_other_configuration.rst +.. include:: //ngeo_config_ref.rst +.. include:: //ngeo_other_configuration.rst CSS style diff --git a/doc/integrator/ngeo_config_ref.rst b/doc/integrator/ngeo_config_ref.rst index 560f55655e..6e612bd5f6 100644 --- a/doc/integrator/ngeo_config_ref.rst +++ b/doc/integrator/ngeo_config_ref.rst @@ -4,54 +4,48 @@ Define additional types used in the config .. _integrator_guide_ngeo_properties_GeoJSON.FeatureCollection: -~~~~~~~~~~~~~~~~~ FeatureCollection -~~~~~~~~~~~~~~~~~ +----------------- See `FeatureCollection `_. .. _integrator_guide_ngeo_properties_OlFeature: -~~~~~~~~~~ ol.Feature -~~~~~~~~~~ +---------- See `ol.Feature `_. .. _integrator_guide_ngeo_properties_OlGeomGeometry: -~~~~~~~~~~~~~~~~ ol.geom.Geometry -~~~~~~~~~~~~~~~~ +---------------- See `ol.geom.Geometry `_. .. _integrator_guide_ngeo_properties_OlControlControl: -~~~~~~~~~~~~~~~~~~ ol.control.Control -~~~~~~~~~~~~~~~~~~ +------------------ See `ol.control.Control `_. .. _integrator_guide_ngeo_properties_OlInteractionInteraction: -~~~~~~~~~~~~~~~~~~~~~~~~~~ ol.interaction.interaction -~~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------------------- -See `ol.control.Control `_. +See `ol.interaction.interaction `_. .. _integrator_guide_ngeo_properties_Bloodhound.BloodhoundOptions: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bloodhound.BloodhoundOptions -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +---------------------------- See `Bloodhound Usage `_. @@ -59,8 +53,58 @@ See `Bloodhound Usage `_. + +.. _integrator_guide_ngeo_properties_zextractorfunction: + +ZExtractorFunction +------------------ + +.. code: javascript + + (point: number[]) => number; + +.. _integrator_guide_ngeo_properties_regexp: + +RegExp +------ + +See `RegExp `_. + +.. _integrator_guide_ngeo_properties_canvaslinecap: + +lineCap +------- + +See `lineCap `_. + +.. _integrator_guide_ngeo_properties_canvaslinejoin: + +lineJoin +-------- + +See `lineJoin `_. + +.. _integrator_guide_ngeo_properties_olcontrolzoomoptions: + +ol.control.ZoomOptions +---------------------- + +See `ol.control.ZoomOptions `_. + +.. _integrator_guide_ngeo_properties_olinteractiondefaultsoptions: + +ol.interaction.DefaultsOptions +------------------------------ + +See `ol.interaction.DefaultsOptions `_. + +.. _integrator_guide_ngeo_properties_initoptions: + +i18next.InitOptions +------------------- + +See `i18next.InitOptions `_. diff --git a/doc/integrator/tilegeneration.rst b/doc/integrator/tilegeneration.rst index c39cad388a..1331211a9c 100644 --- a/doc/integrator/tilegeneration.rst +++ b/doc/integrator/tilegeneration.rst @@ -1,161 +1,13 @@ -.. _administrator_tilegeneration: +.. _integrator_tilegeneration: -TileGeneration -============== +Configuration Guide for advanced settings +----------------------------------------- -Introduction ------------- +This chapter describes advanced configuration settings. -With this solution, we solve the following issues: +.. toctree:: + :maxdepth: 1 -* Managing millions of files on the file system is difficult. -* We should be able to update all the generated tiles. -* We should not have thousands of expired files. - -To do so, we need need a tool that can generate the tiles, -update some of them contained in given geometries and delete empty tiles. - -On-the-fly tiles generation introduces some issues such as having a growing -number of tiles that may become unmanageable. For example, when updating the -data, it is not possible to figure out what tiles should be updated. - -For high usage websites, we want to put the tiles on S3 with the same tool. - -One issue we have if we want to generate all the tiles is that the generation time can grow to more than one -month, especially if we have a high resolution (low if in m/px) on the last zoom level. -Therefore for the last zoom level we should generate the tiles on the fly -with a low expiry (4 hours for example). -We should use metatiles to reduce the number of requests to postgres. -And the tiles should be deleted after the expiry time. - -The chosen solution is a combination of two tools: - -* `TileCloud-Chain `_ for the tile generation. - - -TileCloud-chain ---------------- - -TileCloud-chain is a TileCloud-based tool that offers a build chain for -generating tiles from WMS of Mapnik on a local storage or S3 using a -WMTS layout. - -It supports the following AWS services for generating tiles: -EC2, SQS, SNS. - -See the `readme `_. - - -Configuration -~~~~~~~~~~~~~ - -The configuration is done in the file ``tilegeneration/config.yaml.tmpl``. - -The main thing to do is to: - -* Set the resolutions we want to generate in the ``grids``. - If we want to generate different resolutions per layer, we should create different grids. - Sub-level of ``grids`` is the grid name. - -* Configure the ``caches`` and set the ``generation``/``default_cache``. - Sub-level of ``caches`` is the cache name. - -* Configure the ``layer_default``, the ``layers``, and the ``generation``/``default_layers``. - Sub-level of ``layers`` is the layer name. - -* We can drop the empty tiles with a hash comparison, tilecloud-chain has a tool to help us: - - .. prompt:: bash - - docker-compose exec tilecloudchain generate-tiles \ - --get-hash /0/0 --layer - - We consider that the first tile of the max zoom is empty. - Then copy-paste the result in the layer config. - -If you generate the tiles locally, you do not need all the configuration variables, because many of them -in the ``generation`` part are for AWS generation. - - -.. note:: - - Points to check with TileCloud chain: - - * Disabling metatiles should be avoided. - * Make sure that ``empty_metatile_detection`` and ``empty_tile_detection`` are configured correctly. - * Make sure to not generate tiles with a resolution higher than the one in the raster sources. - -Tile Generation and management -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This package offers two tools, one to generate the tiles locally, see help: - -.. prompt:: bash - - docker-compose exec tilecloudchain generate-tiles --help - -one to generate the tiles using AWS, see help: - -.. prompt:: bash - - docker-compose exec tilecloudchain generate_controller --help - -Before starting a tile generation on S3, measure the cost: - -.. prompt:: bash - - docker-compose exec tilecloudchain generate_controller --cost - -If you setup all the default options, you can generate the tiles by using the command: - -.. prompt:: bash - - docker-compose exec tilecloudchain generate-tiles - - -AWS credentials -~~~~~~~~~~~~~~~ - -To be able to connect to the S3 service, you should define the following variables in the ``env.project`` -file: - -code:: - - AWS_ACCESS_KEY_ID= - AWS_SECRET_ACCESS_KEY= - -If you do not want to commit these credentials you can add them in your ``~/.bashrc`` file: - -code:: - - export AWS_ACCESS_KEY_ID= - export AWS_SECRET_ACCESS_KEY= - - -Web Interface -~~~~~~~~~~~~~ - -It is possible to run tile generation commands through a web interface located at URL -``/tiles/admin/``. This interface require an authentication -see :ref:`integrator_c2cwsgiutils_auth` for more information. - -Predefined commands may be set in parameter ``server > predefined_commands`` in the -``tilegeneration/config.yaml.tmpl`` file. - - -See also -~~~~~~~~ - -* :ref:`integrator_api` -* :ref:`administrator_mapfile_perepare_raster` - -Upstream documentation -~~~~~~~~~~~~~~~~~~~~~~ - -.. include:: //usr/local/lib/python3.8/dist-packages/tilecloud_chain/USAGE.rst - -.. jsonschema:: /usr/local/lib/python3.8/dist-packages/tilecloud_chain/schema.json - :lift_description: - :lift_definitions: - :auto_target: - :auto_reference: + tilegeneration_doc + tilegeneration_usage + tilegeneration_ref diff --git a/doc/integrator/tilegeneration_doc.rst b/doc/integrator/tilegeneration_doc.rst new file mode 100644 index 0000000000..35c411227e --- /dev/null +++ b/doc/integrator/tilegeneration_doc.rst @@ -0,0 +1,150 @@ +.. _integrator_tilegeneration_doc: + +TileGeneration +============== + +Introduction +------------ + +With this solution, we solve the following issues: + +* Managing millions of files on the file system is difficult. +* We should be able to update all the generated tiles. +* We should not have thousands of expired files. + +To do so, we need need a tool that can generate the tiles, +update some of them contained in given geometries and delete empty tiles. + +On-the-fly tiles generation introduces some issues such as having a growing +number of tiles that may become unmanageable. For example, when updating the +data, it is not possible to figure out what tiles should be updated. + +For high usage websites, we want to put the tiles on S3 with the same tool. + +One issue we have if we want to generate all the tiles is that the generation time can grow to more than one +month, especially if we have a high resolution (low if in m/px) on the last zoom level. +Therefore for the last zoom level we should generate the tiles on the fly +with a low expiry (4 hours for example). +We should use metatiles to reduce the number of requests to postgres. +And the tiles should be deleted after the expiry time. + +The chosen solution is a combination of two tools: + +* `TileCloud-Chain `_ for the tile generation. + + +TileCloud-chain +--------------- + +TileCloud-chain is a TileCloud-based tool that offers a build chain for +generating tiles from WMS of Mapnik on a local storage or S3 using a +WMTS layout. + +It supports the following AWS services for generating tiles: +EC2, SQS, SNS. + +See the `readme `_. + + +Configuration +~~~~~~~~~~~~~ + +The configuration is done in the file ``tilegeneration/config.yaml.tmpl``. + +The main thing to do is to: + +* Set the resolutions we want to generate in the ``grids``. + If we want to generate different resolutions per layer, we should create different grids. + Sub-level of ``grids`` is the grid name. + +* Configure the ``caches`` and set the ``generation``/``default_cache``. + Sub-level of ``caches`` is the cache name. + +* Configure the ``layer_default``, the ``layers``, and the ``generation``/``default_layers``. + Sub-level of ``layers`` is the layer name. + +* We can drop the empty tiles with a hash comparison, tilecloud-chain has a tool to help us: + + .. prompt:: bash + + docker-compose exec tilecloudchain generate-tiles \ + --get-hash /0/0 --layer + + We consider that the first tile of the max zoom is empty. + Then copy-paste the result in the layer config. + +If you generate the tiles locally, you do not need all the configuration variables, because many of them +in the ``generation`` part are for AWS generation. + + +.. note:: + + Points to check with TileCloud chain: + + * Disabling metatiles should be avoided. + * Make sure that ``empty_metatile_detection`` and ``empty_tile_detection`` are configured correctly. + * Make sure to not generate tiles with a resolution higher than the one in the raster sources. + +Tile Generation and management +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This package offers two tools, one to generate the tiles locally, see help: + +.. prompt:: bash + + docker-compose exec tilecloudchain generate-tiles --help + +one to generate the tiles using AWS, see help: + +.. prompt:: bash + + docker-compose exec tilecloudchain generate_controller --help + +Before starting a tile generation on S3, measure the cost: + +.. prompt:: bash + + docker-compose exec tilecloudchain generate_controller --cost + +If you setup all the default options, you can generate the tiles by using the command: + +.. prompt:: bash + + docker-compose exec tilecloudchain generate-tiles + + +AWS credentials +~~~~~~~~~~~~~~~ + +To be able to connect to the S3 service, you should define the following variables in the ``env.project`` +file: + +.. code:: + + AWS_ACCESS_KEY_ID= + AWS_SECRET_ACCESS_KEY= + +If you do not want to commit these credentials you can add them in your ``~/.bashrc`` file: + +.. code:: + + export AWS_ACCESS_KEY_ID= + export AWS_SECRET_ACCESS_KEY= + + +Web Interface +~~~~~~~~~~~~~ + +It is possible to run tile generation commands through a web interface located at URL +``/tiles/admin/``. This interface require an authentication +see :ref:`integrator_c2cwsgiutils_auth` for more information. + +Predefined commands may be set in parameter ``server > predefined_commands`` in the +``tilegeneration/config.yaml.tmpl`` file. + + +See also +~~~~~~~~ + +* :ref:`integrator_api` +* :ref:`administrator_mapfile_perepare_raster` diff --git a/doc/integrator/tilegeneration_ref.rst b/doc/integrator/tilegeneration_ref.rst new file mode 100644 index 0000000000..852534b4dc --- /dev/null +++ b/doc/integrator/tilegeneration_ref.rst @@ -0,0 +1,10 @@ +.. _integrator_tilegeneration_ref: + +TileGeneration Configuration Reference +====================================== + +.. jsonschema:: /usr/local/lib/python3.10/dist-packages/tilecloud_chain/schema.json + :lift_description: + :lift_definitions: + :auto_target: + :auto_reference: diff --git a/doc/integrator/tilegeneration_usage.rst b/doc/integrator/tilegeneration_usage.rst new file mode 100644 index 0000000000..5d318d4a3e --- /dev/null +++ b/doc/integrator/tilegeneration_usage.rst @@ -0,0 +1,8 @@ +.. _integrator_tilegeneration_usage: + +TileCloud-chain Usage +===================== + +Upstream documentation: + +.. include:: //usr/local/lib/python3.10/dist-packages/tilecloud_chain/USAGE.rst diff --git a/doc/integrator/vector_tiles.rst b/doc/integrator/vector_tiles.rst index 2a695c2078..ac4949091f 100644 --- a/doc/integrator/vector_tiles.rst +++ b/doc/integrator/vector_tiles.rst @@ -61,9 +61,9 @@ Here is an example SQL query template: osm_id, name, type, - ST_AsMVTGeom("geom", {envelope}) as geom + ST_AsMVTGeom("geom", ) as geom FROM geodata.osm_landuse - WHERE ST_Intersects("geom", {envelope}) + WHERE ST_Intersects("geom", ) ) AS q Then your vector tiles will be accessible, for example in local development mode, through: diff --git a/doc/poetry.lock b/doc/poetry.lock index 8d6072dacf..66eba7ac30 100644 --- a/doc/poetry.lock +++ b/doc/poetry.lock @@ -53,27 +53,55 @@ files = [ [[package]] name = "c2cwsgiutils" -version = "5.2.2" +version = "6.0.0.dev169" description = "Common utilities for Camptocamp WSGI applications" optional = false -python-versions = ">=3.8,<4.0" +python-versions = ">=3.9,<4.0" files = [ - {file = "c2cwsgiutils-5.2.2-py3-none-any.whl", hash = "sha256:19c1c10cac135b822f732d3df3de3162cdc4636ba485f1aa8ad05564b973fa9b"}, - {file = "c2cwsgiutils-5.2.2.tar.gz", hash = "sha256:9ca220f920e96c3405d7908b57e419b9b3033aaf2c254c3c55ebd0dead0c0fc0"}, + {file = "c2cwsgiutils-6.0.0.dev169-py3-none-any.whl", hash = "sha256:c7452173f63d72dd1e7f238032096fd22977bef33ee0ebd809872c4eb4c2a890"}, + {file = "c2cwsgiutils-6.0.0.dev169.tar.gz", hash = "sha256:1cf1ca839e38fd8fd44e7915640a98b458cbd58e4eb6aadc6a250ff32c1695ba"}, ] [package.dependencies] +cee_syslog_handler = "*" certifi = "*" +cornice = "*" +prometheus-client = "*" +psycopg2 = "*" +pyramid = "*" +pyramid_mako = "*" +pyramid-tm = "*" pyyaml = "*" requests = "*" +SQLAlchemy = ">=1.4.0,<3.0.0" +SQLAlchemy-Utils = "*" +ujson = "*" +"zope.interface" = "*" +"zope.sqlalchemy" = "*" [package.extras] -all = ["SQLAlchemy (>=1.4.0,<3.0.0)", "SQLAlchemy-Utils", "alembic", "boltons", "cee_syslog_handler", "cornice", "gunicorn", "lxml", "netifaces", "objgraph", "psycopg2", "pyjwt", "pyramid", "pyramid-tm", "redis", "requests-oauthlib", "sentry-sdk", "ujson", "waitress", "zope.interface", "zope.sqlalchemy"] +alembic = ["alembic"] +all = ["alembic", "boltons", "gunicorn", "lxml", "objgraph", "pyjwt", "redis", "requests-oauthlib", "sentry-sdk", "waitress"] broadcast = ["redis"] +debug = ["objgraph"] dev = ["waitress"] oauth2 = ["pyjwt", "requests-oauthlib"] -standard = ["SQLAlchemy (>=1.4.0,<3.0.0)", "SQLAlchemy-Utils", "alembic", "boltons", "cee_syslog_handler", "cornice", "gunicorn", "lxml", "netifaces", "objgraph", "psycopg2", "pyramid", "pyramid-tm", "redis", "sentry-sdk", "ujson", "zope.interface", "zope.sqlalchemy"] +sentry = ["sentry-sdk"] +standard = ["alembic", "gunicorn", "pyjwt", "redis", "requests-oauthlib", "sentry-sdk"] test-images = ["scikit-image"] +tests = ["boltons", "lxml"] +webserver = ["gunicorn"] + +[[package]] +name = "cee-syslog-handler" +version = "0.6.0" +description = "Python Syslog Logging Handler with CEE Support" +optional = false +python-versions = "*" +files = [ + {file = "cee_syslog_handler-0.6.0-py3-none-any.whl", hash = "sha256:13b60f5b4f9f04e2868316d88bf63d51b4b4b273ba7df12af6f21ee10e223ca3"}, + {file = "cee_syslog_handler-0.6.0.tar.gz", hash = "sha256:babeb63d70a2d8deba734fff5ad3723fed6d053a01621a19937f900315813e0b"}, +] [[package]] name = "certifi" @@ -181,6 +209,21 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "cornice" +version = "6.0.1" +description = "Define Web Services in Pyramid." +optional = false +python-versions = ">=3.5" +files = [ + {file = "cornice-6.0.1-py2.py3-none-any.whl", hash = "sha256:7530ee9d824fe58c851f28b505e697541f6b05e098fe6dac14d9d26091d6fbda"}, + {file = "cornice-6.0.1.tar.gz", hash = "sha256:6edf6f206ff1c3d108d7a7b9ae640a2f4737cfc04f0914ccc4eefe511d3a8985"}, +] + +[package.dependencies] +pyramid = ">=1.7,<3" +venusian = "*" + [[package]] name = "docutils" version = "0.20.1" @@ -192,6 +235,83 @@ files = [ {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, ] +[[package]] +name = "greenlet" +version = "2.0.2" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +files = [ + {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, + {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, + {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, + {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, + {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, + {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d967650d3f56af314b72df7089d96cda1083a7fc2da05b375d2bc48c82ab3f3c"}, + {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, + {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, + {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, + {file = "greenlet-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d4606a527e30548153be1a9f155f4e283d109ffba663a15856089fb55f933e47"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, + {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, + {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, + {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, + {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, + {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, + {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, + {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, + {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, + {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, + {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, + {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, + {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, + {file = "greenlet-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1087300cf9700bbf455b1b97e24db18f2f77b55302a68272c56209d5587c12d1"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, + {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, + {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, + {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8512a0c38cfd4e66a858ddd1b17705587900dd760c6003998e9472b77b56d417"}, + {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, + {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, + {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, + {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, +] + +[package.extras] +docs = ["Sphinx", "docutils (<0.18)"] +test = ["objgraph", "psutil"] + [[package]] name = "hupper" version = "1.12" @@ -533,6 +653,40 @@ plaster = ">=0.5" [package.extras] testing = ["pytest", "pytest-cov"] +[[package]] +name = "prometheus-client" +version = "0.17.1" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "psycopg2" +version = "2.9.7" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "psycopg2-2.9.7-cp310-cp310-win32.whl", hash = "sha256:1a6a2d609bce44f78af4556bea0c62a5e7f05c23e5ea9c599e07678995609084"}, + {file = "psycopg2-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:b22ed9c66da2589a664e0f1ca2465c29b75aaab36fa209d4fb916025fb9119e5"}, + {file = "psycopg2-2.9.7-cp311-cp311-win32.whl", hash = "sha256:44d93a0109dfdf22fe399b419bcd7fa589d86895d3931b01fb321d74dadc68f1"}, + {file = "psycopg2-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:91e81a8333a0037babfc9fe6d11e997a9d4dac0f38c43074886b0d9dead94fe9"}, + {file = "psycopg2-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:d1210fcf99aae6f728812d1d2240afc1dc44b9e6cba526a06fb8134f969957c2"}, + {file = "psycopg2-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:e9b04cbef584310a1ac0f0d55bb623ca3244c87c51187645432e342de9ae81a8"}, + {file = "psycopg2-2.9.7-cp38-cp38-win32.whl", hash = "sha256:d5c5297e2fbc8068d4255f1e606bfc9291f06f91ec31b2a0d4c536210ac5c0a2"}, + {file = "psycopg2-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:8275abf628c6dc7ec834ea63f6f3846bf33518907a2b9b693d41fd063767a866"}, + {file = "psycopg2-2.9.7-cp39-cp39-win32.whl", hash = "sha256:c7949770cafbd2f12cecc97dea410c514368908a103acf519f2a346134caa4d5"}, + {file = "psycopg2-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:b6bd7d9d3a7a63faae6edf365f0ed0e9b0a1aaf1da3ca146e6b043fb3eb5d723"}, + {file = "psycopg2-2.9.7.tar.gz", hash = "sha256:f00cc35bd7119f1fed17b85bd1007855194dde2cbd8de01ab8ebb17487440ad8"}, +] + [[package]] name = "pygments" version = "2.15.1" @@ -629,6 +783,25 @@ pyramid = "*" docs = ["Sphinx (>=1.8.1)", "docutils", "pylons-sphinx-themes (>=1.0.8)", "repoze.sphinx.autointerface"] testing = ["WebTest (>=1.3.1)", "coverage", "nose"] +[[package]] +name = "pyramid-tm" +version = "2.5" +description = "A package which allows Pyramid requests to join the active transaction" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyramid_tm-2.5-py2.py3-none-any.whl", hash = "sha256:6638721946e809de8b4bf3f405bd2daaaa76d58442cbdf46be30ebc259f1a354"}, + {file = "pyramid_tm-2.5.tar.gz", hash = "sha256:5c81dcecd33770f5e3596687d2be35ffc4f8ce5eda00a31acb00ae35a51430d0"}, +] + +[package.dependencies] +pyramid = ">=1.5" +transaction = ">=2.0" + +[package.extras] +docs = ["Sphinx (>=1.8.1)", "pylons-sphinx-themes (>=1.0.9)"] +testing = ["WebTest", "coverage (>=5.0)", "pytest", "pytest-cov"] + [[package]] name = "pyyaml" version = "6.0.1" @@ -641,6 +814,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -648,8 +822,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -666,6 +847,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -673,6 +855,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1104,6 +1287,112 @@ files = [ lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] +[[package]] +name = "sqlalchemy" +version = "2.0.21" +description = "Database Abstraction Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.21-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e7dc99b23e33c71d720c4ae37ebb095bebebbd31a24b7d99dfc4753d2803ede"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7f0c4ee579acfe6c994637527c386d1c22eb60bc1c1d36d940d8477e482095d4"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f7d57a7e140efe69ce2d7b057c3f9a595f98d0bbdfc23fd055efdfbaa46e3a5"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca38746eac23dd7c20bec9278d2058c7ad662b2f1576e4c3dbfcd7c00cc48fa"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3cf229704074bce31f7f47d12883afee3b0a02bb233a0ba45ddbfe542939cca4"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fb87f763b5d04a82ae84ccff25554ffd903baafba6698e18ebaf32561f2fe4aa"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-win32.whl", hash = "sha256:89e274604abb1a7fd5c14867a412c9d49c08ccf6ce3e1e04fffc068b5b6499d4"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-win_amd64.whl", hash = "sha256:e36339a68126ffb708dc6d1948161cea2a9e85d7d7b0c54f6999853d70d44430"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bf8eebccc66829010f06fbd2b80095d7872991bfe8415098b9fe47deaaa58063"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b977bfce15afa53d9cf6a632482d7968477625f030d86a109f7bdfe8ce3c064a"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ff3dc2f60dbf82c9e599c2915db1526d65415be323464f84de8db3e361ba5b9"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44ac5c89b6896f4740e7091f4a0ff2e62881da80c239dd9408f84f75a293dae9"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:87bf91ebf15258c4701d71dcdd9c4ba39521fb6a37379ea68088ce8cd869b446"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b69f1f754d92eb1cc6b50938359dead36b96a1dcf11a8670bff65fd9b21a4b09"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-win32.whl", hash = "sha256:af520a730d523eab77d754f5cf44cc7dd7ad2d54907adeb3233177eeb22f271b"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-win_amd64.whl", hash = "sha256:141675dae56522126986fa4ca713739d00ed3a6f08f3c2eb92c39c6dfec463ce"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7614f1eab4336df7dd6bee05bc974f2b02c38d3d0c78060c5faa4cd1ca2af3b8"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d59cb9e20d79686aa473e0302e4a82882d7118744d30bb1dfb62d3c47141b3ec"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a95aa0672e3065d43c8aa80080cdd5cc40fe92dc873749e6c1cf23914c4b83af"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8c323813963b2503e54d0944813cd479c10c636e3ee223bcbd7bd478bf53c178"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:419b1276b55925b5ac9b4c7044e999f1787c69761a3c9756dec6e5c225ceca01"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-win32.whl", hash = "sha256:4615623a490e46be85fbaa6335f35cf80e61df0783240afe7d4f544778c315a9"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-win_amd64.whl", hash = "sha256:cca720d05389ab1a5877ff05af96551e58ba65e8dc65582d849ac83ddde3e231"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b4eae01faee9f2b17f08885e3f047153ae0416648f8e8c8bd9bc677c5ce64be9"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3eb7c03fe1cd3255811cd4e74db1ab8dca22074d50cd8937edf4ef62d758cdf4"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2d494b6a2a2d05fb99f01b84cc9af9f5f93bf3e1e5dbdafe4bed0c2823584c1"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b19ae41ef26c01a987e49e37c77b9ad060c59f94d3b3efdfdbf4f3daaca7b5fe"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fc6b15465fabccc94bf7e38777d665b6a4f95efd1725049d6184b3a39fd54880"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:014794b60d2021cc8ae0f91d4d0331fe92691ae5467a00841f7130fe877b678e"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-win32.whl", hash = "sha256:0268256a34806e5d1c8f7ee93277d7ea8cc8ae391f487213139018b6805aeaf6"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-win_amd64.whl", hash = "sha256:73c079e21d10ff2be54a4699f55865d4b275fd6c8bd5d90c5b1ef78ae0197301"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:785e2f2c1cb50d0a44e2cdeea5fd36b5bf2d79c481c10f3a88a8be4cfa2c4615"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c111cd40910ffcb615b33605fc8f8e22146aeb7933d06569ac90f219818345ef"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9cba4e7369de663611ce7460a34be48e999e0bbb1feb9130070f0685e9a6b66"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a69067af86ec7f11a8e50ba85544657b1477aabf64fa447fd3736b5a0a4f67"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ccb99c3138c9bde118b51a289d90096a3791658da9aea1754667302ed6564f6e"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:513fd5b6513d37e985eb5b7ed89da5fd9e72354e3523980ef00d439bc549c9e9"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-win32.whl", hash = "sha256:f9fefd6298433b6e9188252f3bff53b9ff0443c8fde27298b8a2b19f6617eeb9"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-win_amd64.whl", hash = "sha256:2e617727fe4091cedb3e4409b39368f424934c7faa78171749f704b49b4bb4ce"}, + {file = "SQLAlchemy-2.0.21-py3-none-any.whl", hash = "sha256:ea7da25ee458d8f404b93eb073116156fd7d8c2a776d8311534851f28277b4ce"}, + {file = "SQLAlchemy-2.0.21.tar.gz", hash = "sha256:05b971ab1ac2994a14c56b35eaaa91f86ba080e9ad481b20d99d77f381bb6258"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\""} +typing-extensions = ">=4.2.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx-oracle (>=7)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3-binary"] + +[[package]] +name = "sqlalchemy-utils" +version = "0.41.1" +description = "Various utility functions for SQLAlchemy." +optional = false +python-versions = ">=3.6" +files = [ + {file = "SQLAlchemy-Utils-0.41.1.tar.gz", hash = "sha256:a2181bff01eeb84479e38571d2c0718eb52042f9afd8c194d0d02877e84b7d74"}, + {file = "SQLAlchemy_Utils-0.41.1-py3-none-any.whl", hash = "sha256:6c96b0768ea3f15c0dc56b363d386138c562752b84f647fb8d31a2223aaab801"}, +] + +[package.dependencies] +SQLAlchemy = ">=1.3" + +[package.extras] +arrow = ["arrow (>=0.3.4)"] +babel = ["Babel (>=1.3)"] +color = ["colour (>=0.0.4)"] +encrypted = ["cryptography (>=0.6)"] +intervals = ["intervals (>=0.7.1)"] +password = ["passlib (>=1.6,<2.0)"] +pendulum = ["pendulum (>=2.0.5)"] +phone = ["phonenumbers (>=5.9.2)"] +test = ["Jinja2 (>=2.3)", "Pygments (>=1.2)", "backports.zoneinfo", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "isort (>=4.2.2)", "pg8000 (>=1.12.4)", "psycopg (>=3.1.8)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (>=2.7.1)", "python-dateutil (>=2.6)", "pytz (>=2014.2)"] +test-all = ["Babel (>=1.3)", "Jinja2 (>=2.3)", "Pygments (>=1.2)", "arrow (>=0.3.4)", "backports.zoneinfo", "colour (>=0.0.4)", "cryptography (>=0.6)", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "furl (>=0.4.1)", "intervals (>=0.7.1)", "isort (>=4.2.2)", "passlib (>=1.6,<2.0)", "pendulum (>=2.0.5)", "pg8000 (>=1.12.4)", "phonenumbers (>=5.9.2)", "psycopg (>=3.1.8)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (>=2.7.1)", "python-dateutil", "python-dateutil (>=2.6)", "pytz (>=2014.2)"] +timezone = ["python-dateutil"] +url = ["furl (>=0.4.1)"] + [[package]] name = "tilecloud" version = "1.10.0" @@ -1131,12 +1420,12 @@ wsgi = ["pyramid"] [[package]] name = "tilecloud-chain" -version = "1.17.0" +version = "1.17.4" description = "Tools to generate tiles from WMS or Mapnik, to S3, Berkeley DB, MBTiles, or local filesystem in WMTS layout using Amazon cloud services." optional = false python-versions = "*" files = [ - {file = "tilecloud_chain-1.17.0-py3-none-any.whl", hash = "sha256:98985fc827c5d9f2447d5121da30925f98d294e1ae7f494f8c80002adce901d8"}, + {file = "tilecloud_chain-1.17.4-py3-none-any.whl", hash = "sha256:5a418c81e839daee74bcdd0970d9447ee31c4bc04b6fb28f410d6d993ebe96ca"}, ] [package.dependencies] @@ -1148,6 +1437,25 @@ PyYAML = "*" Shapely = "*" tilecloud = ">=1.3.0" +[[package]] +name = "transaction" +version = "3.1.0" +description = "Transaction management for Python" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +files = [ + {file = "transaction-3.1.0-py2.py3-none-any.whl", hash = "sha256:8376a959aa71821df1bdd7d066858a3f9f34b7f5f1c0a0e1efbd11d626895449"}, + {file = "transaction-3.1.0.tar.gz", hash = "sha256:65d0b1ea92dbe7c4e3b237fb6bd8b41dea23d7459e7bdd8c3880bffdaf912fa4"}, +] + +[package.dependencies] +"zope.interface" = "*" + +[package.extras] +docs = ["Sphinx", "repoze.sphinx.autointerface"] +test = ["mock"] +testing = ["coverage", "mock", "nose"] + [[package]] name = "translationstring" version = "1.4" @@ -1162,6 +1470,87 @@ files = [ [package.extras] docs = ["Sphinx (>=1.3.1)", "docutils", "pylons-sphinx-themes"] +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "ujson" +version = "5.8.0" +description = "Ultra fast JSON encoder and decoder for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, + {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, + {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"}, + {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"}, + {file = "ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"}, + {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"}, + {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"}, + {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"}, + {file = "ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"}, + {file = "ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"}, + {file = "ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"}, + {file = "ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"}, + {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"}, + {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"}, + {file = "ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"}, + {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"}, + {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"}, + {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"}, + {file = "ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"}, + {file = "ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"}, + {file = "ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"}, + {file = "ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"}, + {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"}, + {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"}, + {file = "ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"}, + {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"}, + {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"}, + {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"}, + {file = "ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"}, + {file = "ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"}, + {file = "ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"}, + {file = "ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"}, + {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"}, + {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"}, + {file = "ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"}, + {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"}, + {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"}, + {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"}, + {file = "ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"}, + {file = "ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"}, + {file = "ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"}, + {file = "ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"}, + {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"}, + {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"}, + {file = "ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"}, + {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"}, + {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"}, + {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"}, + {file = "ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"}, + {file = "ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"}, + {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"}, +] + [[package]] name = "urllib3" version = "2.0.4" @@ -1274,7 +1663,28 @@ docs = ["Sphinx", "repoze.sphinx.autointerface"] test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] +[[package]] +name = "zope-sqlalchemy" +version = "3.1" +description = "Minimal Zope/SQLAlchemy transaction integration" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zope.sqlalchemy-3.1-py3-none-any.whl", hash = "sha256:fdc7d65d8da335a34b90fb993e8217ef12808bad3025d2e3a6720db4138e4985"}, + {file = "zope.sqlalchemy-3.1.tar.gz", hash = "sha256:d9c2c3be695c213c5e22b7f7c6a4a214fa8eb5940b033465ba1c10a9d8b346db"}, +] + +[package.dependencies] +packaging = "*" +setuptools = "*" +SQLAlchemy = ">=1.1,<1.4.0 || >1.4.0,<1.4.1 || >1.4.1,<1.4.2 || >1.4.2,<1.4.3 || >1.4.3,<1.4.4 || >1.4.4,<1.4.5 || >1.4.5,<1.4.6 || >1.4.6" +transaction = ">=1.6.0" +"zope.interface" = ">=3.6.0" + +[package.extras] +test = ["zope.testing"] + [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.11" -content-hash = "af13e62d16a47ef122ccea25d212e6255e42eaaa528318b9d1996f9c5afba5f9" +content-hash = "a928a431739473ce18bc5f8f833b1ce24a716c260e89fd16c7e1b18b7dde89cf" diff --git a/doc/pyproject.toml b/doc/pyproject.toml index f90767c6dd..42372df30b 100644 --- a/doc/pyproject.toml +++ b/doc/pyproject.toml @@ -1,3 +1,11 @@ +[tool.black] +line-length = 110 +target-version = ['py39'] + +[tool.isort] +profile = "black" +line_length = 110 + [tool.poetry] name = 'c2cgeoportal' version = '0.0.0' @@ -14,4 +22,5 @@ sphinx-jsonschema = "1.19.1" sphinx-argparse = "0.4.0" Sphinx-Substitution-Extensions = { extras = ["prompt"], version = "2022.2.16" } sphinxcontrib-mermaid = "0.9.2" -tilecloud-chain = "1.17.0" +c2cwsgiutils = ">=6.0.0.dev148" +tilecloud-chain = "1.17.4" diff --git a/geoportal/c2cgeoportal_geoportal/scripts/manage_users.py b/geoportal/c2cgeoportal_geoportal/scripts/manage_users.py index 82f617a3f7..752ee23f48 100644 --- a/geoportal/c2cgeoportal_geoportal/scripts/manage_users.py +++ b/geoportal/c2cgeoportal_geoportal/scripts/manage_users.py @@ -38,9 +38,7 @@ def get_argparser() -> argparse.ArgumentParser: """Get the argument parser for this script.""" - usage = """Usage: %prog [options] USERNAME - -Reset a user password. + usage = """Reset a user password. The username is used as password if the password is not provided with the corresponding option. User can be created if it does not exist yet."""