weatherdb 1.2.0__tar.gz → 1.2.1__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {weatherdb-1.2.0 → weatherdb-1.2.1}/.gitlab-ci.yml +21 -6
- {weatherdb-1.2.0 → weatherdb-1.2.1}/CHANGES.md +16 -1
- {weatherdb-1.2.0 → weatherdb-1.2.1}/PKG-INFO +1 -1
- weatherdb-1.2.1/docs/source/api/weatherdb.broker.rst +7 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/weatherdb.db.rst +10 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/weatherdb.rst +0 -1
- weatherdb-1.2.1/docs/source/api/weatherdb.station.GroupStation.rst +5 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.station.StationBases.rst +18 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.station.StationET.rst +5 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.station.StationP.rst +5 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.station.StationPD.rst +6 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.station.StationT.rst +5 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.station.rst +17 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsBase.rst +15 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsET.rst +6 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsP.rst +6 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsPD.rst +7 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsT.rst +7 -0
- weatherdb-1.2.1/docs/source/api/weatherdb.stations.rst +15 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/weatherdb.utils.rst +2 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/conf.py +3 -0
- weatherdb-1.2.1/weatherdb/_version.py +1 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/broker.py +12 -2
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/cli.py +20 -5
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/config/config_default.ini +19 -3
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationBases.py +32 -23
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsBase.py +16 -3
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/get_data.py +7 -6
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/PKG-INFO +1 -1
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/SOURCES.txt +12 -1
- weatherdb-1.2.0/docs/source/api/weatherDB.broker.rst +0 -10
- weatherdb-1.2.0/docs/source/api/weatherdb.station.rst +0 -56
- weatherdb-1.2.0/docs/source/api/weatherdb.stations.rst +0 -46
- weatherdb-1.2.0/weatherdb/_version.py +0 -1
- {weatherdb-1.2.0 → weatherdb-1.2.1}/.dockerignore +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/.github/workflows/cleanup-cache.yml +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/.github/workflows/python-publish.yml +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/.github/workflows/python-test.yml +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/.gitignore +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/.gitlab/merge_request_templates/new_version.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/.readthedocs.yaml +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/LICENSE +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/MANIFEST.in +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/README.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docker/Dockerfile +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docker/docker-compose.yaml +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docker/docker-compose_test.yaml +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docker/start-docker-test.sh +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/requirements.txt +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/Changelog.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/License.rst +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/Methode.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/_static/custom.css +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/_static/favicon.ico +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/_static/logo.png +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/api.rst +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/cli.rst +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/weatherdb.config.rst +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/index.rst +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/Configuration.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/Hosting.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/Install.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/Quickstart.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/setup.rst +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/pyproject.toml +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/setup.cfg +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/DEM/COP-DEM_GLO-30-DGED__2023_1_clipped.tif +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/DEM/README.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/DEM/eula_F.pdf +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/regionalisation/DWD-grid_ma_1991_2020_DGM25_clipped.tif +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/regionalisation/HYRAS_ma_1991_2020_DGM25_clipped.tif +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/regionalisation/README.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/test-data-config.ini +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/__init__.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/README.md +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/alembic.ini +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/config.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/env.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/script.py.mako +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/versions/V1.0.0_initial_database_creation.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/versions/V1.0.2_more_charachters_for_settings+term_station_ma_raster.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/versions/V1.0.5_fix-ma-raster-values.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/versions/V1.0.6_update-views.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/config/ConfigParser.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/config/__init__.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/__init__.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/connections.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/fixtures/RichterParameters.json +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/models.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/queries/get_quotient.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/views.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/GroupStation.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationET.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationP.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationPD.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationT.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/__init__.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/constants.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/GroupStations.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsBaseTET.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsET.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsP.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsPD.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsT.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/__init__.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/TimestampPeriod.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/__init__.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/dwd.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/geometry.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/logging.py +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/dependency_links.txt +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/entry_points.txt +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/requires.txt +0 -0
- {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/top_level.txt +0 -0
@@ -3,7 +3,7 @@ stages:
|
|
3
3
|
- test_matrix
|
4
4
|
- test_manual
|
5
5
|
- build
|
6
|
-
-
|
6
|
+
- release
|
7
7
|
|
8
8
|
workflow:
|
9
9
|
auto_cancel:
|
@@ -97,11 +97,11 @@ test_download_rasters:
|
|
97
97
|
- PY_VERSION: ["3.9","3.10","3.11","3.12","3.13"]
|
98
98
|
|
99
99
|
build:
|
100
|
+
stage: build
|
100
101
|
rules:
|
101
|
-
- if: $CI_COMMIT_TAG =~ /^[Vv]
|
102
|
+
- if: $CI_COMMIT_TAG =~ /^[Vv]*\d+\.\d+\.\d+$/
|
102
103
|
dependencies:
|
103
104
|
- test_matrix
|
104
|
-
stage: build
|
105
105
|
image: python:3.11
|
106
106
|
script:
|
107
107
|
- python -m pip install --upgrade pip --root-user-action=ignore
|
@@ -115,12 +115,12 @@ build:
|
|
115
115
|
tags:
|
116
116
|
- docker
|
117
117
|
|
118
|
-
|
118
|
+
release_pypi:
|
119
|
+
stage: release
|
119
120
|
rules:
|
120
121
|
- !reference [build, rules]
|
121
122
|
dependencies:
|
122
123
|
- build
|
123
|
-
stage: deploy
|
124
124
|
image: python:3.11
|
125
125
|
script:
|
126
126
|
- python -m pip install --upgrade pip --root-user-action=ignore
|
@@ -131,4 +131,19 @@ deploy:
|
|
131
131
|
TWINE_PASSWORD: $TWINE_PASSWORD
|
132
132
|
tags:
|
133
133
|
- docker
|
134
|
-
interruptible: false
|
134
|
+
interruptible: false
|
135
|
+
|
136
|
+
release_gitlab:
|
137
|
+
stage: release
|
138
|
+
rules:
|
139
|
+
- !reference [build, rules]
|
140
|
+
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
141
|
+
dependencies:
|
142
|
+
- build
|
143
|
+
- release_pypi
|
144
|
+
script:
|
145
|
+
- echo "running release_gitlab"
|
146
|
+
release:
|
147
|
+
name: '$CI_COMMIT_TAG'
|
148
|
+
tag_name: '$CI_COMMIT_TAG'
|
149
|
+
description: '$CI_COMMIT_TAG_MESSAGE'
|
@@ -1,7 +1,19 @@
|
|
1
1
|
# Change-log
|
2
2
|
|
3
|
+
## Version 1.2.1
|
4
|
+
|
5
|
+
- fix: filllup linear regression did not take configuration value and therefor did never work
|
6
|
+
- config: change LINEAR_INTERPOLATION_LIMIT to be a category
|
7
|
+
- cli: add version parameter
|
8
|
+
- multiprocessing: make process count configurable through user configuration
|
9
|
+
- broker: prevent broker inactivation by other broker
|
10
|
+
- broker: add force deactivate all method to forcefully change the database flag of active brokers
|
11
|
+
|
3
12
|
## Version 1.2.0
|
4
13
|
|
14
|
+
> [!WARNING]
|
15
|
+
> This versions update did have an error and the lienear regression doesn't work at all. PLease use version 1.2.1
|
16
|
+
|
5
17
|
- tests: add test rasters and make downloading the rasters a manual job on GitLab as there were many problems
|
6
18
|
- fillup: add method to linearly interpolate residual missing values
|
7
19
|
|
@@ -17,7 +29,10 @@
|
|
17
29
|
|
18
30
|
## Version 1.1.0
|
19
31
|
|
20
|
-
|
32
|
+
> [!NOTE]
|
33
|
+
> **major change:** The module got renamed to `weatherdb`, you need to adapt this in your import and cli statements
|
34
|
+
|
35
|
+
- rename module from weatherDB to weatherdb to be compliant with PEP 8
|
21
36
|
So you need to import the module now with `import weatherdb`
|
22
37
|
- fix some missing stationN variables to stationsP
|
23
38
|
- fix: TimestampPeriod._check_period
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: weatherdb
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.1
|
4
4
|
Summary: This is a package to work with and to create the Weather Database which handles, checks, fills and corrects DWD Weather Station data.
|
5
5
|
Author-email: Max Schmit <max.schmit@hydrology.uni-freiburg.de>
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
@@ -0,0 +1,18 @@
|
|
1
|
+
StationBases
|
2
|
+
============
|
3
|
+
|
4
|
+
Those are the base station classes on which the real station classes above depend on.
|
5
|
+
None of them is working on its own, because the class variables are not yet set correctly.
|
6
|
+
|
7
|
+
.. py:module:: weatherdb.station.StationBases
|
8
|
+
|
9
|
+
.. autoclass:: weatherdb.station.StationBases.StationBase
|
10
|
+
|
11
|
+
|
12
|
+
.. autoclass:: weatherdb.station.StationBases.StationPBase
|
13
|
+
|
14
|
+
|
15
|
+
.. autoclass:: weatherdb.station.StationBases.StationCanVirtualBase
|
16
|
+
|
17
|
+
|
18
|
+
.. autoclass:: weatherdb.station.StationBases.StationTETBase
|
@@ -0,0 +1,17 @@
|
|
1
|
+
station
|
2
|
+
--------
|
3
|
+
|
4
|
+
.. py:module:: weatherdb.station
|
5
|
+
|
6
|
+
.. toctree::
|
7
|
+
:maxdepth: 1
|
8
|
+
:titlesonly:
|
9
|
+
|
10
|
+
weatherdb.station.StationP
|
11
|
+
weatherdb.station.StationT
|
12
|
+
weatherdb.station.StationET
|
13
|
+
weatherdb.station.StationPD
|
14
|
+
weatherdb.station.GroupStation
|
15
|
+
weatherdb.station.StationBases
|
16
|
+
|
17
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
StationsBase
|
2
|
+
============
|
3
|
+
|
4
|
+
Those are the base stations classes on which the real stations classes above depend on.
|
5
|
+
None of them is working on its own, because the class variables are not yet set correctly.
|
6
|
+
|
7
|
+
.. py:module:: weatherdb.stations.StationsBase
|
8
|
+
|
9
|
+
.. autoclass:: weatherdb.stations.StationsBase.StationsBase
|
10
|
+
|
11
|
+
.. autoclasstoc::
|
12
|
+
|
13
|
+
.. autoclass:: weatherdb.stations.StationsBaseTET.StationsBaseTET
|
14
|
+
|
15
|
+
.. autoclasstoc::
|
@@ -0,0 +1,15 @@
|
|
1
|
+
stations
|
2
|
+
--------
|
3
|
+
|
4
|
+
.. py:module:: weatherdb.stations
|
5
|
+
|
6
|
+
.. toctree::
|
7
|
+
:maxdepth: 1
|
8
|
+
:titlesonly:
|
9
|
+
|
10
|
+
weatherdb.stations.StationsP
|
11
|
+
weatherdb.stations.StationsT
|
12
|
+
weatherdb.stations.StationsET
|
13
|
+
weatherdb.stations.StationsPD
|
14
|
+
weatherdb.stations.GroupStations
|
15
|
+
weatherdb.stations.StationsBase
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "1.2.1"
|
@@ -647,8 +647,9 @@ class Broker(object):
|
|
647
647
|
is_active : bool
|
648
648
|
Whether the broker is active.
|
649
649
|
"""
|
650
|
+
if self._is_active != is_active:
|
651
|
+
self.set_setting("broker_active", str(is_active))
|
650
652
|
self._is_active = is_active
|
651
|
-
self.set_setting("broker_active", str(is_active))
|
652
653
|
|
653
654
|
def _deactivate(self):
|
654
655
|
self.is_active = False
|
@@ -664,4 +665,13 @@ class Broker(object):
|
|
664
665
|
yield self
|
665
666
|
finally:
|
666
667
|
self._deactivate()
|
667
|
-
atexit.unregister(self._deactivate)
|
668
|
+
atexit.unregister(self._deactivate)
|
669
|
+
|
670
|
+
def force_deactivate_all(self):
|
671
|
+
"""Forcefully set the active broker flag in the database to deactivated.
|
672
|
+
|
673
|
+
This is useful if the broker got exited before it could deactivate itself.
|
674
|
+
"""
|
675
|
+
if self.is_active:
|
676
|
+
self._deactivate()
|
677
|
+
self.set_setting("broker_active", "False")
|
@@ -16,6 +16,7 @@ import weatherdb
|
|
16
16
|
show_default=True
|
17
17
|
)
|
18
18
|
)
|
19
|
+
@click.version_option(weatherdb.__version__)
|
19
20
|
@click.option('--do-logging/--no-logging',
|
20
21
|
is_flag=True, default=True, show_default=True,
|
21
22
|
help="Should the logging be done to the console?")
|
@@ -98,8 +99,11 @@ def create_user_config(file, on_exists):
|
|
98
99
|
def download_ma_rasters(which, overwrite, update_user_config):
|
99
100
|
"""Get the multi annual rasters on which bases the regionalisation is done.
|
100
101
|
|
101
|
-
The refined multi annual datasets, that are downloaded are published on Zenodo
|
102
|
-
|
102
|
+
The refined multi annual datasets, that are downloaded are published on Zenodo. [1]_
|
103
|
+
|
104
|
+
References:
|
105
|
+
-----------
|
106
|
+
.. [1] Schmit, M.; Weiler, M. (2023). German weather services (DWD) multi annual meteorological rasters for the climate period 1991-2020 refined to 25m grid (1.0.0) [Data set]. Zenodo. `DOI:10.5281/zenodo.10066045 <https://doi.org/10.5281/zenodo.10066045>`_
|
103
107
|
"""
|
104
108
|
click.echo("starting downloading multi annual raster data")
|
105
109
|
from weatherdb.utils.get_data import download_ma_rasters
|
@@ -127,7 +131,7 @@ def download_ma_rasters(which, overwrite, update_user_config):
|
|
127
131
|
help="The service to use to download the DEM. Options are 'prism' or 'openTopography'. " +\
|
128
132
|
"You can use this option muultiple times to test both in the given order until the file could be downloaded.")
|
129
133
|
def download_dem(out_dir, overwrite, extent, update_user_config, service="prism"):
|
130
|
-
"""Download the newest DEM data from the Copernicus Sentinel dataset.
|
134
|
+
"""Download the newest DEM data from the Copernicus Sentinel dataset. [1]_
|
131
135
|
|
132
136
|
Only the GLO-30 DEM, wich has a 30m resolution, is downloaded as it is freely available.
|
133
137
|
If you register as a scientific researcher also the EEA-10, with 10 m resolution, is available.
|
@@ -136,8 +140,9 @@ def download_dem(out_dir, overwrite, extent, update_user_config, service="prism"
|
|
136
140
|
After downloading the data, the files are merged and saved as a single tif file in the data directory in a subfolder called 'dems'.
|
137
141
|
To use the DEM data in the WeatherDB, you will have to define the path to the tif file in the configuration file.
|
138
142
|
|
139
|
-
|
140
|
-
|
143
|
+
References:
|
144
|
+
-----------
|
145
|
+
.. [1] Copernicus DEM - Global and European Digital Elevation Model. Digital Surface Model (DSM) provided in 3 different resolutions (90m, 30m, 10m) with varying geographical extent (EEA: European and GLO: global) and varying format (INSPIRE, DGED, DTED). `DOI:10.5270/ESA-c5d3d65 <https://doi.org/10.5270/ESA-c5d3d65>`_
|
141
146
|
"""
|
142
147
|
click.echo("Starting downloading digital elevation model from Copernicus")
|
143
148
|
from weatherdb.utils.get_data import download_dem
|
@@ -221,6 +226,16 @@ def set_db_version():
|
|
221
226
|
else:
|
222
227
|
click.echo("aborting setting db version")
|
223
228
|
|
229
|
+
@cli.command(short_help="Forcefully set the active broker flag in the database to deactivated. This is useful if the broker got exited before it could deactivate itself. (!!!Only use this if you're sure that the database did all the necessary updates!!!)")
|
230
|
+
def force_deactivate_all_broker():
|
231
|
+
click.echo(dedent("""
|
232
|
+
Are you sure that there is no more broker running? This could lead to problems as multiple brokers could run at the same time contradicting themself."""))
|
233
|
+
if click.confirm("Are you sure you want to set the activation flag in the database to deactivated?"):
|
234
|
+
click.echo("deactivating the brokers flag")
|
235
|
+
broker = weatherdb.broker.Broker()
|
236
|
+
broker.force_deactivate_all()
|
237
|
+
else:
|
238
|
+
click.echo("aborting the deactivation of the brokers flag")
|
224
239
|
|
225
240
|
# cli
|
226
241
|
# ---------------------------------------
|
@@ -143,6 +143,7 @@ RASTER_BUFFER_CRS = ${weatherdb:HORIZON_CRS}
|
|
143
143
|
; The default is 1999-01-01
|
144
144
|
MIN_DATE = 1999-01-01
|
145
145
|
|
146
|
+
[weatherdb:LINEAR_INTERPOLATION_LIMIT]
|
146
147
|
; When there are still NAs after filling with neighboring stations, the module can use linear interpolation to fill the gaps
|
147
148
|
; The limit defines the maximum interval that is allowed to fill with linear interpolation
|
148
149
|
; The value is given with a unit, e.g. 3 days, 30 minutes, 1 hour
|
@@ -150,11 +151,11 @@ MIN_DATE = 1999-01-01
|
|
150
151
|
; for precipitation, where the timeseries resolution is 10 minutes, 30 minutes means 3 missing values are interpolated, but not more.
|
151
152
|
; If there shouldn't be any linear interpolation, set the limit to 0
|
152
153
|
; For precipitation, the default is 1 hour
|
153
|
-
|
154
|
+
P = 1 hour
|
154
155
|
; For temperature, the default is 2 days
|
155
|
-
|
156
|
+
T = 2 days
|
156
157
|
; For Evapotranspiration, the default is 2 days
|
157
|
-
|
158
|
+
ET = 2 days
|
158
159
|
|
159
160
|
|
160
161
|
[weatherdb:max_fillup_distance]
|
@@ -167,6 +168,21 @@ T = 150000
|
|
167
168
|
; Evapotranspiration (ET)
|
168
169
|
ET = 150000
|
169
170
|
|
171
|
+
|
172
|
+
[system:parallel_processes]
|
173
|
+
; You can configure how many processes are getting started in parrallel when tghe database is updated.
|
174
|
+
; depending on your system, the database can handle more or less processes
|
175
|
+
; There are 2 possible ways to configure this.
|
176
|
+
; either define the absolute number of processes:
|
177
|
+
; ABSOLUTE =
|
178
|
+
|
179
|
+
; or define the number of processes in relation to the number of CPUs,
|
180
|
+
; by defining how many CPUs should be used less than the maximum available CPUs
|
181
|
+
; if the absolute number is defined, the relative number is ignored
|
182
|
+
; This is the default setting of cpu count -1
|
183
|
+
CPU_COUNT_MINUS = 1
|
184
|
+
|
185
|
+
|
170
186
|
; for developpers:
|
171
187
|
; ----------------
|
172
188
|
;
|
@@ -1493,8 +1493,8 @@ class StationBase:
|
|
1493
1493
|
|
1494
1494
|
# linear interpolation for the last missing values
|
1495
1495
|
lr_limit = config.get(
|
1496
|
-
"weatherdb",
|
1497
|
-
|
1496
|
+
"weatherdb:linear_interpolation_limit",
|
1497
|
+
self._para_base,
|
1498
1498
|
fallback="0")
|
1499
1499
|
if lr_limit != "0":
|
1500
1500
|
sql_format_dict.update(dict(
|
@@ -1507,8 +1507,9 @@ class StationBase:
|
|
1507
1507
|
WITH empty_periods AS (
|
1508
1508
|
SELECT *
|
1509
1509
|
FROM ( SELECT
|
1510
|
-
CASE WHEN dist_next>'{self._interval}'::interval
|
1511
|
-
THEN timestamp
|
1510
|
+
CASE WHEN dist_next::interval>'{self._interval}'::interval
|
1511
|
+
THEN timestamp
|
1512
|
+
ELSE NULL
|
1512
1513
|
END AS start,
|
1513
1514
|
CASE WHEN dist_next>'{self._interval}'::interval
|
1514
1515
|
THEN LEAD(timestamp) OVER (ORDER BY timestamp)
|
@@ -1516,8 +1517,12 @@ class StationBase:
|
|
1516
1517
|
END AS end
|
1517
1518
|
FROM (
|
1518
1519
|
SELECT *,
|
1519
|
-
|
1520
|
-
|
1520
|
+
(timestamp::timestamp
|
1521
|
+
- lag(timestamp::timestamp, 1) OVER ( ORDER BY timestamp)
|
1522
|
+
)::interval AS dist_prev,
|
1523
|
+
(lead(timestamp::timestamp, 1) OVER ( ORDER BY timestamp)
|
1524
|
+
- timestamp::timestamp
|
1525
|
+
)::interval AS dist_next
|
1521
1526
|
FROM new_filled_{self.id}_{self._para}
|
1522
1527
|
WHERE filled IS NOT NULL) t
|
1523
1528
|
WHERE t.dist_prev > '{self._interval}'::interval
|
@@ -1529,18 +1534,20 @@ class StationBase:
|
|
1529
1534
|
ttss.filled AS value_start,
|
1530
1535
|
ep.end AS timestamp_end,
|
1531
1536
|
ttse.filled AS value_end,
|
1532
|
-
(ttse.filled - ttss.filled)::numeric/(EXTRACT(EPOCH FROM (ep.end - ep.start))/EXTRACT(EPOCH FROM '{self._interval}'::interval))::numeric as slope
|
1537
|
+
(ttse.filled - ttss.filled)::numeric/(EXTRACT(EPOCH FROM (ep.end::timestamp - ep.start::timestamp))/EXTRACT(EPOCH FROM '{self._interval}'::interval))::numeric as slope
|
1533
1538
|
FROM empty_periods ep
|
1534
|
-
LEFT JOIN new_filled_{self.id}_{self._para} ttss ON ep.start = ttss.timestamp
|
1535
|
-
LEFT JOIN new_filled_{self.id}_{self._para} ttse ON ep.end = ttse.timestamp
|
1536
|
-
|
1539
|
+
LEFT JOIN new_filled_{self.id}_{self._para} ttss ON ep.start::timestamp = ttss.timestamp::timestamp
|
1540
|
+
LEFT JOIN new_filled_{self.id}_{self._para} ttse ON ep.end::timestamp = ttse.timestamp::timestamp
|
1541
|
+
WHERE (ep.end::timestamp - ep.start::timestamp - '{self._interval}'::interval) <= '{lr_limit}'::interval
|
1537
1542
|
loop
|
1538
1543
|
execute FORMAT(
|
1539
1544
|
$$
|
1540
1545
|
UPDATE new_filled_{self.id}_{self._para} ts
|
1541
|
-
SET filled=%2$L + (
|
1542
|
-
|
1543
|
-
|
1546
|
+
SET filled=%2$L::numeric + (%5$L::numeric *
|
1547
|
+
EXTRACT(EPOCH FROM ts.timestamp::timestamp - %1$L::timestamp)::numeric
|
1548
|
+
/EXTRACT(EPOCH FROM '{self._interval}'::interval)::numeric),
|
1549
|
+
filled_by={"ARRAY[-1]::smallint[]" if self._filled_by_n>1 else "-1::smallint"}
|
1550
|
+
WHERE ts.timestamp > %1$L AND ts.timestamp < %3$L;
|
1544
1551
|
$$,
|
1545
1552
|
reg_borders.timestamp_start,
|
1546
1553
|
reg_borders.value_start,
|
@@ -1880,8 +1887,8 @@ class StationBase:
|
|
1880
1887
|
The timeseries kinds of the denominator or the multi annual raster key.
|
1881
1888
|
If the denominator is a multi annual raster key, then the result is the quotient of the timeserie and the raster value.
|
1882
1889
|
Possible values are:
|
1883
|
-
|
1884
|
-
|
1890
|
+
- for timeserie kinds: 'raw', 'qc', 'filled' or for precipitation also "corr".
|
1891
|
+
- for raster keys: 'hyras', 'dwd' or 'regnie', depending on your defined raster files.
|
1885
1892
|
return_as : str, optional
|
1886
1893
|
The format of the return value.
|
1887
1894
|
If "df" then a pandas DataFrame is returned.
|
@@ -2219,7 +2226,6 @@ class StationBase:
|
|
2219
2226
|
The elevation difference is considered with the formula from LARSIM (equation 3-18 & 3-19 from the LARSIM manual [1]_ ):
|
2220
2227
|
|
2221
2228
|
.. math::
|
2222
|
-
|
2223
2229
|
L_{weighted} = L_{horizontal} * (1 + (\\frac{|\\delta H|}{P_1})^{P_2})
|
2224
2230
|
If None, then the height difference is not considered and only the nearest stations are returned.
|
2225
2231
|
The default is None.
|
@@ -2916,18 +2922,21 @@ class StationTETBase(StationCanVirtualBase):
|
|
2916
2922
|
Parameters
|
2917
2923
|
----------
|
2918
2924
|
p_elev : tuple, optional
|
2919
|
-
In Larsim those parameters are defined as $P_1 = 500$ and $P_2 = 1$.
|
2920
|
-
Stoelzle et al. (2016) found that $P_1 = 100$ and $P_2 = 4$ is better for Baden-Würtemberg to consider the quick changes in topographie.
|
2925
|
+
In Larsim [3]_ those parameters are defined as $P_1 = 500$ and $P_2 = 1$.
|
2926
|
+
Stoelzle et al. (2016) [2]_ found that $P_1 = 100$ and $P_2 = 4$ is better for Baden-Würtemberg to consider the quick changes in topographie.
|
2921
2927
|
For all of germany, those parameter values are giving too much weight to the elevation difference, which can result in getting neighboor stations from the border of the Tschec Republic for the Feldberg station. Therefor the values $P_1 = 250$ and $P_2 = 1.5$ are used as default values.
|
2922
|
-
literature:
|
2923
|
-
- Stoelzle, Michael & Weiler, Markus & Steinbrich, Andreas. (2016) Starkregengefährdung in Baden-Württemberg – von der Methodenentwicklung zur Starkregenkartierung. Tag der Hydrologie.
|
2924
|
-
- LARSIM Dokumentation, Stand 06.04.2023, online unter https://www.larsim.info/dokumentation/LARSIM-Dokumentation.pdf
|
2925
2928
|
The default is (250, 1.5).
|
2926
2929
|
|
2930
|
+
References
|
2931
|
+
----------
|
2932
|
+
.. [2] Stoelzle, Michael & Weiler, Markus & Steinbrich, Andreas. (2016) Starkregengefährdung in Baden-Württemberg – von der Methodenentwicklung zur Starkregenkartierung. Tag der Hydrologie.
|
2933
|
+
.. [3] LARSIM Dokumentation, Stand 06.04.2023, online unter `LARSIM-Dokumentation <https://www.larsim.info/dokumentation/LARSIM-Dokumentation.pdf>`_
|
2934
|
+
|
2927
2935
|
Returns
|
2928
2936
|
-------
|
2929
|
-
|
2930
|
-
|
2937
|
+
list of int
|
2938
|
+
A list of station Ids in order of distance.
|
2939
|
+
The closest station is the first in the list.
|
2931
2940
|
"""
|
2932
2941
|
# define the P1 and P2 default values for T and ET
|
2933
2942
|
return super().get_neighboor_stids(p_elev=p_elev, **kwargs)
|
@@ -20,6 +20,7 @@ from ..utils.dwd import get_dwd_meta, get_cdc_file_list
|
|
20
20
|
from ..station.StationBases import StationBase
|
21
21
|
from ..db import models
|
22
22
|
from ..db.queries.get_quotient import _get_quotient
|
23
|
+
from ..config import config
|
23
24
|
|
24
25
|
# set settings
|
25
26
|
# ############
|
@@ -430,8 +431,8 @@ class StationsBase:
|
|
430
431
|
The timeseries kinds of the denominator or the multi annual raster key.
|
431
432
|
If the denominator is a multi annual raster key, then the result is the quotient of the timeserie and the raster value.
|
432
433
|
Possible values are:
|
433
|
-
|
434
|
-
|
434
|
+
- for timeserie kinds: 'raw', 'qc', 'filled' or for precipitation also "corr".
|
435
|
+
- for raster keys: 'hyras', 'dwd' or 'regnie', depending on your defined raster files.
|
435
436
|
stids : list of Integer
|
436
437
|
The stations IDs for which to compute the quotient.
|
437
438
|
return_as : str, optional
|
@@ -567,7 +568,16 @@ class StationsBase:
|
|
567
568
|
return pbar
|
568
569
|
|
569
570
|
def _run_method(self, stations, method, name, kwds=dict(),
|
570
|
-
do_mp=True,
|
571
|
+
do_mp=True,
|
572
|
+
processes=config.getint(
|
573
|
+
"system:parallel_processes",
|
574
|
+
"absolute",
|
575
|
+
fallback=mp.cpu_count() - \
|
576
|
+
config.getint(
|
577
|
+
"system:parallel_processes",
|
578
|
+
"cpu_count_minus",
|
579
|
+
fallback=1)),
|
580
|
+
**kwargs):
|
571
581
|
"""Run methods of the given stations objects in multiprocessing/threading mode.
|
572
582
|
|
573
583
|
Parameters
|
@@ -589,6 +599,9 @@ class StationsBase:
|
|
589
599
|
processes : int, optional
|
590
600
|
The number of processes that should get started simultaneously.
|
591
601
|
If 1 or less, then the process is computed as a simple loop, so there is no multiprocessing or threading done.
|
602
|
+
There are two possible configuration values in the config file to set the number of processes:
|
603
|
+
- system:parallel_processes:absolute: The absolute number of processes to start.
|
604
|
+
- system:parallel_processes:cpu_count_minus: The number of CPU kernels are substracted by this number, to get the number of processes to start.
|
592
605
|
The default is the cpu count -1.
|
593
606
|
"""
|
594
607
|
log.info(
|
@@ -22,11 +22,11 @@ log = logging.getLogger(__name__)
|
|
22
22
|
def download_ma_rasters(which="all", overwrite=None, update_user_config=False):
|
23
23
|
"""Get the multi annual rasters on which bases the regionalisation is done.
|
24
24
|
|
25
|
-
The refined multi annual datasets, that are downloaded are published on Zenodo [1]_
|
25
|
+
The refined multi annual datasets, that are downloaded are published on Zenodo. [1]_
|
26
26
|
|
27
27
|
References
|
28
28
|
----------
|
29
|
-
.. [1] Schmit, M.; Weiler, M. (2023). German weather services (DWD) multi annual meteorological rasters for the climate period 1991-2020 refined to 25m grid (1.0.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.10066045
|
29
|
+
.. [1] Schmit, M.; Weiler, M. (2023). German weather services (DWD) multi annual meteorological rasters for the climate period 1991-2020 refined to 25m grid (1.0.0) [Data set]. Zenodo. `DOI:10.5281/zenodo.10066045 <https://doi.org/10.5281/zenodo.10066045>`_
|
30
30
|
|
31
31
|
Parameters
|
32
32
|
----------
|
@@ -360,14 +360,14 @@ def _download_dem_opentopo(
|
|
360
360
|
log.info(f"Downloaded DEM data from OpenTopography to '{out_fp}'.")
|
361
361
|
return out_fp
|
362
362
|
|
363
|
-
log.error(f"Request to openTopography API with url {r.url.replace(api_key,
|
363
|
+
log.error(f"Request to openTopography API with url {r.url.replace(api_key, '[MASKED]')} returned status code {r.status_code}")
|
364
364
|
|
365
365
|
def download_dem(out_dir=None,
|
366
366
|
overwrite=None,
|
367
367
|
extent=(5.3, 46.1, 15.6, 55.4),
|
368
368
|
update_user_config=False,
|
369
369
|
service=["prism", "openTopography"], **kwargs):
|
370
|
-
"""Download the newest DEM data from the Copernicus Sentinel dataset.
|
370
|
+
"""Download the newest DEM data from the Copernicus Sentinel dataset. [2]_
|
371
371
|
|
372
372
|
Only the GLO-30 DEM, which has a 30m resolution, is downloaded as it is freely available.
|
373
373
|
If you register as a scientific researcher also the EEA-10, with 10 m resolution, is available.
|
@@ -376,8 +376,9 @@ def download_dem(out_dir=None,
|
|
376
376
|
After downloading the data, the files are merged and saved as a single tif file in the data directory in a subfolder called 'DEM'.
|
377
377
|
To use the DEM data in the WeatherDB, you will have to define the path to the tif file in the configuration file.
|
378
378
|
|
379
|
-
|
380
|
-
|
379
|
+
References
|
380
|
+
----------
|
381
|
+
.. [2] Copernicus DEM - Global and European Digital Elevation Model. Digital Surface Model (DSM) provided in 3 different resolutions (90m, 30m, 10m) with varying geographical extent (EEA: European and GLO: global) and varying format (INSPIRE, DGED, DTED). `DOI:10.5270/ESA-c5d3d65 <https://doi.org/10.5270/ESA-c5d3d65>`_ .
|
381
382
|
|
382
383
|
Parameters
|
383
384
|
----------
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: weatherdb
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.1
|
4
4
|
Summary: This is a package to work with and to create the Weather Database which handles, checks, fills and corrects DWD Weather Station data.
|
5
5
|
Author-email: Max Schmit <max.schmit@hydrology.uni-freiburg.de>
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
@@ -26,11 +26,22 @@ docs/source/_static/favicon.ico
|
|
26
26
|
docs/source/_static/logo.png
|
27
27
|
docs/source/api/api.rst
|
28
28
|
docs/source/api/cli.rst
|
29
|
-
docs/source/api/
|
29
|
+
docs/source/api/weatherdb.broker.rst
|
30
30
|
docs/source/api/weatherdb.config.rst
|
31
31
|
docs/source/api/weatherdb.db.rst
|
32
32
|
docs/source/api/weatherdb.rst
|
33
|
+
docs/source/api/weatherdb.station.GroupStation.rst
|
34
|
+
docs/source/api/weatherdb.station.StationBases.rst
|
35
|
+
docs/source/api/weatherdb.station.StationET.rst
|
36
|
+
docs/source/api/weatherdb.station.StationP.rst
|
37
|
+
docs/source/api/weatherdb.station.StationPD.rst
|
38
|
+
docs/source/api/weatherdb.station.StationT.rst
|
33
39
|
docs/source/api/weatherdb.station.rst
|
40
|
+
docs/source/api/weatherdb.stations.StationsBase.rst
|
41
|
+
docs/source/api/weatherdb.stations.StationsET.rst
|
42
|
+
docs/source/api/weatherdb.stations.StationsP.rst
|
43
|
+
docs/source/api/weatherdb.stations.StationsPD.rst
|
44
|
+
docs/source/api/weatherdb.stations.StationsT.rst
|
34
45
|
docs/source/api/weatherdb.stations.rst
|
35
46
|
docs/source/api/weatherdb.utils.rst
|
36
47
|
docs/source/setup/Configuration.md
|
@@ -1,56 +0,0 @@
|
|
1
|
-
station
|
2
|
-
-------
|
3
|
-
.. module:: weatherdb.station
|
4
|
-
|
5
|
-
StationP
|
6
|
-
^^^^^^^^
|
7
|
-
.. autoclass:: weatherdb.station.StationP
|
8
|
-
|
9
|
-
.. autoclasstoc::
|
10
|
-
|
11
|
-
StationT
|
12
|
-
^^^^^^^^
|
13
|
-
.. autoclass:: weatherdb.station.StationT
|
14
|
-
|
15
|
-
.. autoclasstoc::
|
16
|
-
|
17
|
-
StationET
|
18
|
-
^^^^^^^^^
|
19
|
-
|
20
|
-
.. autoclass:: weatherdb.station.StationET
|
21
|
-
|
22
|
-
.. autoclasstoc::
|
23
|
-
|
24
|
-
StationPD
|
25
|
-
^^^^^^^^^
|
26
|
-
.. autoclass:: weatherdb.station.StationPD
|
27
|
-
:exclude-members: quality_check, last_imp_quality_check, get_corr, get_adj, get_qc
|
28
|
-
|
29
|
-
.. autoclasstoc::
|
30
|
-
|
31
|
-
GroupStation
|
32
|
-
^^^^^^^^^^^^
|
33
|
-
.. autoclass:: weatherdb.station.GroupStation
|
34
|
-
|
35
|
-
.. autoclasstoc::
|
36
|
-
|
37
|
-
StationBase...
|
38
|
-
^^^^^^^^^^^^^^
|
39
|
-
Those are the base station classes on which the real station classes above depend on.
|
40
|
-
None of them is working on its own, because the class variables are not yet set correctly.
|
41
|
-
|
42
|
-
.. autoclass:: weatherdb.station.StationBases.StationBase
|
43
|
-
|
44
|
-
.. autoclasstoc::
|
45
|
-
|
46
|
-
.. autoclass:: weatherdb.station.StationBases.StationPBase
|
47
|
-
|
48
|
-
.. autoclasstoc::
|
49
|
-
|
50
|
-
.. autoclass:: weatherdb.station.StationBases.StationCanVirtualBase
|
51
|
-
|
52
|
-
.. autoclasstoc::
|
53
|
-
|
54
|
-
.. autoclass:: weatherdb.station.StationBases.StationTETBase
|
55
|
-
|
56
|
-
.. autoclasstoc::
|
@@ -1,46 +0,0 @@
|
|
1
|
-
stations
|
2
|
-
--------
|
3
|
-
.. module:: weatherdb.stations
|
4
|
-
|
5
|
-
StationsP
|
6
|
-
^^^^^^^^^
|
7
|
-
.. autoclass:: weatherdb.stations.StationsP
|
8
|
-
|
9
|
-
.. autoclasstoc::
|
10
|
-
|
11
|
-
StationsT
|
12
|
-
^^^^^^^^^
|
13
|
-
.. autoclass:: weatherdb.stations.StationsT
|
14
|
-
|
15
|
-
.. autoclasstoc::
|
16
|
-
|
17
|
-
StationsET
|
18
|
-
^^^^^^^^^^
|
19
|
-
.. autoclass:: weatherdb.stations.StationsET
|
20
|
-
|
21
|
-
.. autoclasstoc::
|
22
|
-
|
23
|
-
StationsPD
|
24
|
-
^^^^^^^^^^
|
25
|
-
.. autoclass:: weatherdb.stations.StationsPD
|
26
|
-
|
27
|
-
.. autoclasstoc::
|
28
|
-
|
29
|
-
GroupStations
|
30
|
-
^^^^^^^^^^^^^
|
31
|
-
.. autoclass:: weatherdb.stations.GroupStations
|
32
|
-
|
33
|
-
.. autoclasstoc::
|
34
|
-
|
35
|
-
StationsBase...
|
36
|
-
^^^^^^^^^^^^^^^
|
37
|
-
Those are the base stations classes on which the real stations classes above depend on.
|
38
|
-
None of them is working on its own, because the class variables are not yet set correctly.
|
39
|
-
|
40
|
-
.. autoclass:: weatherdb.stations.StationsBase.StationsBase
|
41
|
-
|
42
|
-
.. autoclasstoc::
|
43
|
-
|
44
|
-
.. autoclass:: weatherdb.stations.StationsBaseTET.StationsBaseTET
|
45
|
-
|
46
|
-
.. autoclasstoc::
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "1.2.0"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/DEM/COP-DEM_GLO-30-DGED__2023_1_clipped.tif
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/versions/V1.0.0_initial_database_creation.py
RENAMED
File without changes
|
File without changes
|
{weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/versions/V1.0.5_fix-ma-raster-values.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|