Package: threedi-scenario-downloader
threedi-scenario-downloaderThe threedi-scenario-downloader package includes functions in order to
automate most used download actions on the 3Di results.Example methods are:Download raw results.Download logging.Download maximum waterdepth (non-temporal raster).Download waterdepth (temporal raster, supply timestamp for snapshot).Find all scenarios model slug or scenario name.ExamplesStart importing the package:>>> from threedi_scenario_downloader import downloader as dlSet the API key for authentication to the Lizard API (you can get an API key
here: <your portal>.lizard.net/management/#/personal_api_keys):>>> dl.set_api_key("INSERT YOUR API KEY HERE")Find scenarios based on a model slug (unique model identifier) or scenario
name. Returns last 10 matching results unless told otherwise:>>> scenarios = dl.find_scenarios_by_model_slug("enter your model_uuid", limit=10)or:>>> scenarios = dl.find_scenarios_by_name("my_first_scenario", limit=100)or if you have too many similarly-named scenarios, do a case-sensitive exact
search:>>> scenarios = dl.find_scenarios_by_exact_name("my_first_scenario", limit=100)Do you want to download the raw 3Di-results (.nc and .h5 files) of a specific
scenario? Use the following methods:>>> dl.download_raw_results("scenario_uuid")
>>> dl.download_grid_administration("scenario_uuid")or:>>> dl.download_raw_results("scenario_uuid",pathname="save_under_different_name.nc")
>>> dl.download_grid_administration("scenario_uuid",pathname="save_under_different_name.h5")Downloading (temporal) rasters of specific scenarios can be done using the
following methods:>>> dl.download_maximum_waterdepth_raster("scenario_uuid",projection="EPSG:28992",resolution=10)
#download the full extent of the maximum waterdepth of the given scenario_uuid with a 10 meter resolution in the RD New/Amersfoort projection (EPSG:28992)

>>> dl.download_waterdepth_raster("scenario_uuid",projection="EPSG:28992",resolution=10,time="2019-01-01T02:00")
#download the full extend of the waterdepth at the supplied timestamp given scenario_uuid, on 10 meter resolution in the RD New/Amersfoort projection (EPSG:28992)The raster download methods creates a task for the API. Depending on the size
and resolution it takes some time for the raster to be prepared. These methods
will keep on checking if the raster is ready to be downloaded.  When a raster
is ready to be downloaded a message in the Lizard portal is created as
well. If you want to delete these messages (due to bulk downloading for
example), use the following method:>>> dl.clear_inbox()InstallationWe can be installed with:$ pip install threedi-scenario-downloaderDevelopment installation of this project itselfWe’re installed with regular pip and virtualenv. Create a virtualenv and call pip:$ python3 -m venv venv
$ venv/bin/pip install -r requirements.txtIn order to get nicely formatted python files without having to spend
manual work on it, run the following commands periodically:$ venv/bin/ruff check threedi_scenario_downloader --fix
$ venv/bin/ruff format threedi_scenario_downloaderThe first one also reports syntax-like errors that you’ll have to fix.Run the tests regularly. This also checks reports coverage:$ venv/bin/pytestBefore running the tests, create a file (in this directory) calledtest_api_key.txtand add a lizardapi key. Just the key, on
one line. The tests will complain otherwise. In the github action,
this .txt file is filled with theTEST_API_KEYgithub secret.Contact Reinout when you need a new release, there’s no automatic
upload to pypi yet so he has to upload it.If you need a new dependency (likerequests), add it insetup.pyininstall_requires. Afterwards, run install again to actuall install your
dependency:$ venv/bin/pip install -r requirements.txtChangelog of threedi-scenario-downloader1.4 (2024-01-26)Improved test setup: a pytest fixture automatically sets up the api
key. Add one totest_api_key.txt.When downloading files from amazon S3, we don’t send along lizard authentication headers.1.3 (2024-01-17)Several fixes to adjust to changes in lizard’s behaviour.1.2 (2023-06-29)Basic sub-endpoint added.Small fixes.Resolution is now guaranteed.1.1 (2023-06-13)Added support for sub-endpoints “/api/v4/scenarios/{uuid}/results/damage/” and “/api/v4/scenarios/{uuid}/results/arrival/”Now added the use of keyword arguments for “resolution”, “projection”,”bbox” and “time”.Bugfix with width and height1.0 (2023-05-15)Changed functions to support the Lizard API v4 (v3 is not supported with this release)Added error statements for faulty API requests0.16 (2022-09-07)Addedfind_scenarios_by_exact_name()function that doesn’t do a case
insensitive search for namescontainingthe search term (likefind_scenarios_by_name()does), but only does an exact match. Handy if
there are too many similarly-named scenarios.0.15 (2021-08-12)Bump bleach to 3.1.40.14 (2021-08-12)Added download aggregation NetCDF functionAdded download logging functionAdded function descriptionsMinor fixes0.13 (2021-07-22)Added batch functionality to raster downloadAdded resume batch function0.12 (2020-02-18)Adaptation for improved feedback from Lizard API task endpoint0.11 (2019-06-03)Updated find_scenarios method. Use ‘name’ argument for exact searches and ‘name__icontains’ for partial searches0.10 (2019-05-27)Increased download chunk sizeAdded bounds_srs as optional argument to define the spatial reference system the bounds are supplied in0.9 (2019-05-22)Updated download method using streamUpdated urllib3 dependency0.8 (2019-03-14)Bugfix in downloading total damage rasters0.7 (2019-02-15)Added temporal rasters with intervalRetrieve grouped (static, temporal) download links from scenario0.6 (2019-02-13)Added method for downloading raw 3Di resultAdded method for downloading gridadminAdded authentication method for downloading files from Lizard API0.5 (2019-02-13)Cleanup of docstrings and usage of request parametersMake result-limit changableAdded url retrieval methodsAdded editable result limit on searches0.2 (2019-01-24)Added automatic deploys tohttps://pypi.org/project/threedi-scenario-downloader/0.1 (2019-01-23)Initial project structure created with cookiecutter andhttps://github.com/nens/cookiecutter-python-templateInitial working version.