weatherdb 1.2.2__tar.gz → 1.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {weatherdb-1.2.2 → weatherdb-1.2.4}/.gitlab-ci.yml +42 -7
- {weatherdb-1.2.2 → weatherdb-1.2.4}/CHANGES.md +16 -1
- {weatherdb-1.2.2 → weatherdb-1.2.4}/PKG-INFO +23 -3
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docker/docker-compose.yaml +3 -1
- weatherdb-1.2.4/weatherdb/_version.py +1 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/config/ConfigParser.py +1 -1
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/GroupStation.py +54 -23
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationBases.py +1 -1
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationP.py +3 -3
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/GroupStations.py +33 -13
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/PKG-INFO +23 -3
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/SOURCES.txt +1 -0
- weatherdb-1.2.4/zenodo.json +57 -0
- weatherdb-1.2.2/weatherdb/_version.py +0 -1
- {weatherdb-1.2.2 → weatherdb-1.2.4}/.dockerignore +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/.github/workflows/cleanup-cache.yml +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/.github/workflows/python-publish.yml +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/.github/workflows/python-test.yml +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/.gitignore +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/.gitlab/merge_request_templates/new_version.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/.readthedocs.yaml +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/LICENSE +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/MANIFEST.in +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/README.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docker/Dockerfile +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docker/docker-compose_test.yaml +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docker/start-docker-test.sh +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/requirements.txt +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/Changelog.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/License.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/Methode.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/_static/custom.css +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/_static/favicon.ico +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/_static/logo.png +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/api.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/cli.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.broker.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.config.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.db.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.GroupStation.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationBases.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationET.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationP.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationPD.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationT.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsBase.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsET.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsP.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsPD.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsT.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.utils.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/conf.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/index.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/Configuration.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/Hosting.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/Install.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/Quickstart.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/setup.rst +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/pyproject.toml +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/setup.cfg +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/DEM/COP-DEM_GLO-30-DGED__2023_1_clipped.tif +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/DEM/README.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/DEM/eula_F.pdf +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/regionalisation/DWD-grid_ma_1991_2020_DGM25_clipped.tif +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/regionalisation/HYRAS_ma_1991_2020_DGM25_clipped.tif +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/regionalisation/README.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/test-data-config.ini +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/__init__.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/README.md +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/alembic.ini +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/config.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/env.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/script.py.mako +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/versions/V1.0.0_initial_database_creation.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/versions/V1.0.2_more_charachters_for_settings+term_station_ma_raster.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/versions/V1.0.5_fix-ma-raster-values.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/versions/V1.0.6_update-views.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/broker.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/cli.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/config/__init__.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/config/config_default.ini +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/__init__.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/connections.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/fixtures/RichterParameters.json +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/models.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/queries/get_quotient.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/views.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationET.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationPD.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationT.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/__init__.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/constants.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsBase.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsBaseTET.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsET.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsP.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsPD.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsT.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/__init__.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/TimestampPeriod.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/__init__.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/dwd.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/geometry.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/get_data.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/logging.py +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/dependency_links.txt +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/entry_points.txt +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/requires.txt +0 -0
- {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/top_level.txt +0 -0
@@ -16,7 +16,7 @@ test_single:
|
|
16
16
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
17
17
|
image: "python:$PYTHON_VERSION"
|
18
18
|
services:
|
19
|
-
- name:
|
19
|
+
- name: timescale/timescaledb-ha:pg17
|
20
20
|
alias: postgres
|
21
21
|
command: ["postgres", "-c", "fsync=off"]
|
22
22
|
before_script:
|
@@ -44,7 +44,7 @@ test_single:
|
|
44
44
|
- $WEATHERDB_TEST_ARTIFACT_DIR/*
|
45
45
|
interruptible: true
|
46
46
|
variables:
|
47
|
-
PYTHON_VERSION: 3.
|
47
|
+
PYTHON_VERSION: 3.12
|
48
48
|
PIP_CACHE_DIR: $CI_PROJECT_DIR/.cache/pip
|
49
49
|
POSTGRES_USER: postgres
|
50
50
|
POSTGRES_PASSWORD: postgres
|
@@ -77,7 +77,7 @@ test_matrix:
|
|
77
77
|
extends: test_single
|
78
78
|
parallel:
|
79
79
|
matrix:
|
80
|
-
- PY_VERSION: ["3.
|
80
|
+
- PY_VERSION: ["3.8", "3.9","3.10","3.11","3.13"]
|
81
81
|
variables:
|
82
82
|
PYTHON_VERSION: $PY_VERSION
|
83
83
|
|
@@ -92,8 +92,7 @@ test_download_rasters:
|
|
92
92
|
variables:
|
93
93
|
PYTHON_VERSION: $PY_VERSION
|
94
94
|
parallel:
|
95
|
-
matrix:
|
96
|
-
- PY_VERSION: ["3.9","3.10","3.11","3.12","3.13"]
|
95
|
+
matrix: !reference [test_matrix, parallel, matrix ]
|
97
96
|
|
98
97
|
build:
|
99
98
|
stage: build
|
@@ -101,7 +100,7 @@ build:
|
|
101
100
|
- if: $CI_COMMIT_TAG =~ /^[Vv]*\d+\.\d+\.\d+$/
|
102
101
|
dependencies:
|
103
102
|
- test_matrix
|
104
|
-
image: python:3.
|
103
|
+
image: python:3.12
|
105
104
|
script:
|
106
105
|
- python -m pip install --upgrade pip --root-user-action=ignore
|
107
106
|
- python -m pip install setuptools wheel build setuptools-scm --root-user-action=ignore
|
@@ -145,4 +144,40 @@ release_gitlab:
|
|
145
144
|
release:
|
146
145
|
name: '$CI_COMMIT_TAG'
|
147
146
|
tag_name: '$CI_COMMIT_TAG'
|
148
|
-
description: '$CI_COMMIT_TAG_MESSAGE'
|
147
|
+
description: '$CI_COMMIT_TAG_MESSAGE'
|
148
|
+
|
149
|
+
# deploying to Zenodo
|
150
|
+
include:
|
151
|
+
- remote: 'https://gitlab.com/deploy2zenodo/deploy2zenodo/-/releases/permalink/latest/downloads/deploy2zenodo.yaml'
|
152
|
+
|
153
|
+
deploy2zenodo:
|
154
|
+
stage: release
|
155
|
+
rules:
|
156
|
+
- !reference [build, rules]
|
157
|
+
dependencies:
|
158
|
+
- release_pypi
|
159
|
+
variables:
|
160
|
+
DEPLOY2ZENODO_JSON: zenodo.json
|
161
|
+
DEPLOY2ZENODO_ADD_IsNewVersionOf: yes
|
162
|
+
DEPLOY2ZENODO_GET_METADATA: "result.json"
|
163
|
+
before_script:
|
164
|
+
- apk add --no-cache curl jq git pandoc
|
165
|
+
# pack
|
166
|
+
- TAG=$(echo $CI_COMMIT_TAG | cut -d "v" -f 2)
|
167
|
+
- DEPLOY2ZENODO_UPLOAD=v$TAG.zip
|
168
|
+
- git archive --format zip --output "$DEPLOY2ZENODO_UPLOAD" $CI_COMMIT_SHA
|
169
|
+
# prepare zenodo.json
|
170
|
+
- publication_date=$(echo "$CI_COMMIT_TIMESTAMP" | grep -Eo "^[0-9]{4}-[0-9]{2}-[0-9]{2}")
|
171
|
+
- pandoc -o README.html README.md
|
172
|
+
- tmpjson="$(mktemp)"
|
173
|
+
- |
|
174
|
+
jq . $DEPLOY2ZENODO_JSON | \
|
175
|
+
jq ".metadata.version = \"$TAG\"" | \
|
176
|
+
jq ".metadata.publication_date = \"$publication_date\"" | \
|
177
|
+
jq --rawfile README README.html '.metadata.description = $README' | \
|
178
|
+
jq . | tee "$tmpjson"
|
179
|
+
- mv "$tmpjson" "$DEPLOY2ZENODO_JSON"
|
180
|
+
artifacts:
|
181
|
+
paths:
|
182
|
+
- $DEPLOY2ZENODO_JSON
|
183
|
+
- $DEPLOY2ZENODO_GET_METADATA
|
@@ -1,5 +1,20 @@
|
|
1
1
|
# Change-log
|
2
2
|
|
3
|
+
## Version 1.2.4
|
4
|
+
|
5
|
+
- added Zenodo upload
|
6
|
+
- fix problem with creating user config
|
7
|
+
- add format placeholders for GroupStations.create_ts for file_names parameter
|
8
|
+
- translate Parameter name for Precipitation for create_roger_ts back to german names to work with actual RoGeR version
|
9
|
+
- fix problem when create_ts is invoked with a zip file.
|
10
|
+
Previously the precipitation timeseries did not get expanded to the last complete date and stopped at 00:00 o'clock
|
11
|
+
|
12
|
+
## Version 1.2.3
|
13
|
+
|
14
|
+
- fix: dropping stations
|
15
|
+
- fix: test environment as DWD kicked station 2388
|
16
|
+
- docker: optimize image with timescaledb image instead of postgis
|
17
|
+
|
3
18
|
## Version 1.2.2
|
4
19
|
|
5
20
|
- config: define utf-8 as default encoding for config files
|
@@ -7,7 +22,7 @@
|
|
7
22
|
|
8
23
|
## Version 1.2.1
|
9
24
|
|
10
|
-
- fix:
|
25
|
+
- fix: fillup linear regression did not take configuration value and therefor did never work
|
11
26
|
- config: change LINEAR_INTERPOLATION_LIMIT to be a category
|
12
27
|
- cli: add version parameter
|
13
28
|
- multiprocessing: make process count configurable through user configuration
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: weatherdb
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.4
|
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
|
@@ -693,8 +693,28 @@ Classifier: Intended Audience :: Science/Research
|
|
693
693
|
Classifier: Natural Language :: English
|
694
694
|
Requires-Python: <3.14,>=3.8
|
695
695
|
Description-Content-Type: text/markdown
|
696
|
-
Provides-Extra: optionals
|
697
696
|
License-File: LICENSE
|
697
|
+
Requires-Dist: geopandas
|
698
|
+
Requires-Dist: shapely>=2
|
699
|
+
Requires-Dist: pandas
|
700
|
+
Requires-Dist: numpy
|
701
|
+
Requires-Dist: progressbar2
|
702
|
+
Requires-Dist: rasterio
|
703
|
+
Requires-Dist: sqlalchemy>2.0
|
704
|
+
Requires-Dist: psycopg2-binary
|
705
|
+
Requires-Dist: GeoAlchemy2
|
706
|
+
Requires-Dist: alembic
|
707
|
+
Requires-Dist: requests
|
708
|
+
Requires-Dist: keyring
|
709
|
+
Requires-Dist: keyrings.alt; sys_platform == "linux"
|
710
|
+
Requires-Dist: rasterstats
|
711
|
+
Requires-Dist: click
|
712
|
+
Requires-Dist: setuptools>=61.0
|
713
|
+
Requires-Dist: setuptools_scm
|
714
|
+
Provides-Extra: optionals
|
715
|
+
Requires-Dist: coloredlogs; extra == "optionals"
|
716
|
+
Requires-Dist: colorama; extra == "optionals"
|
717
|
+
Dynamic: license-file
|
698
718
|
|
699
719
|
# WeatherDB - module
|
700
720
|
|
@@ -38,11 +38,13 @@ services:
|
|
38
38
|
target: /src/tests
|
39
39
|
|
40
40
|
db:
|
41
|
-
image:
|
41
|
+
image: timescale/timescaledb-ha:pg17 # about 1 minute faster for tests
|
42
|
+
# image: postgis/postgis:17-3.4
|
42
43
|
environment:
|
43
44
|
POSTGRES_DB: weatherdb
|
44
45
|
POSTGRES_USER: postgres
|
45
46
|
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
|
47
|
+
shm_size: '2g'
|
46
48
|
ports:
|
47
49
|
- 5454:5432
|
48
50
|
volumes:
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "1.2.4"
|
@@ -357,7 +357,7 @@ class ConfigParser(configparser.ConfigParser):
|
|
357
357
|
user_config_file = "ask"
|
358
358
|
|
359
359
|
# ask for the user config file
|
360
|
-
if user_config_file == "
|
360
|
+
if user_config_file.lower().strip()[0] == "a":
|
361
361
|
try:
|
362
362
|
from tkinter import Tk
|
363
363
|
from tkinter import filedialog
|
@@ -344,8 +344,13 @@ class GroupStation(object):
|
|
344
344
|
def get_name(self):
|
345
345
|
return self.station_parts[0].get_name()
|
346
346
|
|
347
|
-
def create_roger_ts(self,
|
348
|
-
|
347
|
+
def create_roger_ts(self,
|
348
|
+
dir,
|
349
|
+
period=(None, None),
|
350
|
+
kind="best",
|
351
|
+
r_r0=1,
|
352
|
+
add_t_min=False,
|
353
|
+
add_t_max=False,
|
349
354
|
do_toolbox_format=False,
|
350
355
|
**kwargs):
|
351
356
|
"""Create the timeserie files for roger as csv.
|
@@ -394,10 +399,15 @@ class GroupStation(object):
|
|
394
399
|
"""
|
395
400
|
if do_toolbox_format:
|
396
401
|
return self.create_ts(
|
397
|
-
dir=dir,
|
398
|
-
|
402
|
+
dir=dir,
|
403
|
+
period=period,
|
404
|
+
kinds=kind,
|
405
|
+
agg_to="10 min",
|
406
|
+
r_r0=r_r0,
|
407
|
+
split_date=True,
|
399
408
|
nas_allowed=False,
|
400
|
-
add_t_min=add_t_min,
|
409
|
+
add_t_min=add_t_min,
|
410
|
+
add_t_max=add_t_max,
|
401
411
|
file_names={"P":"PREC.txt", "T":"TA.txt", "ET":"PET.txt"},
|
402
412
|
col_names={"P":"PREC", "ET":"PET",
|
403
413
|
"T":"TA", "T_min":"TA_min", "T_max":"TA_max",
|
@@ -408,18 +418,34 @@ class GroupStation(object):
|
|
408
418
|
**kwargs)
|
409
419
|
else:
|
410
420
|
return self.create_ts(
|
411
|
-
dir=dir,
|
412
|
-
|
421
|
+
dir=dir,
|
422
|
+
period=period,
|
423
|
+
kinds=kind,
|
424
|
+
agg_to="10 min",
|
425
|
+
r_r0=r_r0,
|
426
|
+
split_date=True,
|
413
427
|
nas_allowed=False,
|
414
|
-
|
428
|
+
file_names={"P":"N_{id:0>5}.txt"},
|
429
|
+
col_names={"P":"N"},
|
430
|
+
add_t_min=add_t_min,
|
431
|
+
add_t_max=add_t_max,
|
415
432
|
**kwargs)
|
416
433
|
|
417
|
-
def create_ts(self,
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
434
|
+
def create_ts(self,
|
435
|
+
dir,
|
436
|
+
period=(None, None),
|
437
|
+
kinds="best",
|
438
|
+
paras="all",
|
439
|
+
agg_to="10 min",
|
440
|
+
r_r0=None,
|
441
|
+
split_date=False,
|
442
|
+
nas_allowed=True,
|
443
|
+
add_na_share=False,
|
444
|
+
add_t_min=False,
|
445
|
+
add_t_max=False,
|
446
|
+
add_meta=True,
|
447
|
+
file_names={},
|
448
|
+
col_names={},
|
423
449
|
keep_date_parts=False,
|
424
450
|
**kwargs):
|
425
451
|
"""Create the timeserie files as csv.
|
@@ -485,6 +511,7 @@ class GroupStation(object):
|
|
485
511
|
file_names : dict, optional
|
486
512
|
A dictionary with the file names for the different parameters.
|
487
513
|
e.g.{"P":"PREC.txt", "T":"TA.txt", "ET":"ET.txt"}
|
514
|
+
Additionally, the station ID ("{id}" as int) and period ({period} as TimestampPeriod) are available as placeholders.
|
488
515
|
If an empty dictionary is given, then the standard names are used.
|
489
516
|
The default is {}.
|
490
517
|
col_names : dict, optional
|
@@ -536,19 +563,22 @@ class GroupStation(object):
|
|
536
563
|
del kwargs["_skip_period_check"]
|
537
564
|
|
538
565
|
# prepare loop
|
539
|
-
name_suffix = "_{
|
566
|
+
name_suffix = "_{id:0>5}.txt".format(id=self.id)
|
540
567
|
x, y = self.get_geom().coords.xy
|
541
|
-
name = self.get_name() + " (ID: {
|
568
|
+
name = self.get_name() + " (ID: {id})".format(id=self.id)
|
542
569
|
do_zip = isinstance(dir, zipfile.ZipFile)
|
543
570
|
|
544
571
|
for para in paras:
|
545
572
|
# get the timeserie
|
546
573
|
df = self.get_df(
|
547
|
-
period=period,
|
548
|
-
|
574
|
+
period=period,
|
575
|
+
kinds=kinds,
|
576
|
+
paras=[para],
|
577
|
+
agg_to=agg_to,
|
549
578
|
nas_allowed=nas_allowed,
|
550
579
|
add_na_share=add_na_share,
|
551
|
-
add_t_min=add_t_min,
|
580
|
+
add_t_min=add_t_min,
|
581
|
+
add_t_max=add_t_max,
|
552
582
|
_skip_period_check=True,
|
553
583
|
**kwargs)
|
554
584
|
|
@@ -573,8 +603,7 @@ class GroupStation(object):
|
|
573
603
|
# check for NAs
|
574
604
|
filled_cols = [col for col in df.columns if "filled_by" in col]
|
575
605
|
if not nas_allowed and df.drop(filled_cols, axis=1).isna().sum().sum() > 0:
|
576
|
-
warnings.warn("There were NAs in the
|
577
|
-
stid=self.id))
|
606
|
+
warnings.warn(f"There were NAs in the timeseries for Station {self.id}.")
|
578
607
|
|
579
608
|
# special operations for et
|
580
609
|
if para == "et" and r_r0 is not None:
|
@@ -609,9 +638,11 @@ class GroupStation(object):
|
|
609
638
|
|
610
639
|
# get file name
|
611
640
|
if para.upper() in file_names:
|
612
|
-
file_name = file_names[para.upper()]
|
641
|
+
file_name = file_names[para.upper()]\
|
642
|
+
.format(id=self.id, period=period)
|
613
643
|
elif para in file_names:
|
614
|
-
file_name = file_names[para]
|
644
|
+
file_name = file_names[para]\
|
645
|
+
.format(id=self.id, period=period)
|
615
646
|
else:
|
616
647
|
file_name = para.upper() + name_suffix
|
617
648
|
|
@@ -595,7 +595,7 @@ class StationBase:
|
|
595
595
|
DROP TABLE IF EXISTS timeseries."{self.id}_{self._para}";
|
596
596
|
DELETE FROM meta_{self._para} WHERE station_id={self.id};
|
597
597
|
DELETE FROM station_ma_raster WHERE station_id={self.id} and parameter='{self._para}';
|
598
|
-
DELETE FROM
|
598
|
+
DELETE FROM station_ma_timeserie WHERE station_id={self.id} and parameter='{self._para}';
|
599
599
|
INSERT INTO dropped_stations(station_id, parameter, why, timestamp)
|
600
600
|
VALUES ('{self.id}', '{self._para}', '{why}', NOW())
|
601
601
|
ON CONFLICT (station_id, parameter)
|
@@ -240,8 +240,8 @@ class StationP(StationPBase):
|
|
240
240
|
@db_engine.deco_create_privilege
|
241
241
|
def _create_timeseries_table(self):
|
242
242
|
"""Create the timeseries table in the DB if it is not yet existing."""
|
243
|
-
sql_add_table = '''
|
244
|
-
CREATE TABLE IF NOT EXISTS timeseries."{
|
243
|
+
sql_add_table = f'''
|
244
|
+
CREATE TABLE IF NOT EXISTS timeseries."{self.id}_{self._para}" (
|
245
245
|
timestamp timestamp PRIMARY KEY,
|
246
246
|
raw int4,
|
247
247
|
qn smallint,
|
@@ -250,7 +250,7 @@ class StationP(StationPBase):
|
|
250
250
|
filled_by int2,
|
251
251
|
corr int4
|
252
252
|
);
|
253
|
-
'''
|
253
|
+
'''
|
254
254
|
with db_engine.connect() as con:
|
255
255
|
con.execute(sqltxt(sql_add_table))
|
256
256
|
con.commit()
|
@@ -293,10 +293,17 @@ class GroupStations(object):
|
|
293
293
|
|
294
294
|
return stations
|
295
295
|
|
296
|
-
def create_ts(self, dir,
|
297
|
-
|
298
|
-
|
299
|
-
|
296
|
+
def create_ts(self, dir,
|
297
|
+
period=(None, None),
|
298
|
+
kinds="best",
|
299
|
+
stids="all",
|
300
|
+
agg_to="10 min",
|
301
|
+
r_r0=None,
|
302
|
+
split_date=False,
|
303
|
+
nas_allowed=True,
|
304
|
+
add_na_share=False,
|
305
|
+
add_t_min=False,
|
306
|
+
add_t_max=False,
|
300
307
|
**kwargs):
|
301
308
|
"""Download and create the weather tables as csv files.
|
302
309
|
|
@@ -393,7 +400,6 @@ class GroupStations(object):
|
|
393
400
|
add_na_share=add_na_share,
|
394
401
|
add_t_min=add_t_min,
|
395
402
|
add_t_max=add_t_max,
|
396
|
-
_skip_period_check=True,
|
397
403
|
**kwargs)
|
398
404
|
pbar.variables["last_station"] = stat.id
|
399
405
|
pbar.update(pbar.value + 1)
|
@@ -498,10 +504,16 @@ class GroupStations(object):
|
|
498
504
|
"""
|
499
505
|
if do_toolbox_format:
|
500
506
|
return self.create_ts(
|
501
|
-
dir=dir,
|
502
|
-
|
503
|
-
|
504
|
-
|
507
|
+
dir=dir,
|
508
|
+
period=period,
|
509
|
+
kinds=kind,
|
510
|
+
agg_to="10 min",
|
511
|
+
r_r0=r_r0,
|
512
|
+
stids=stids,
|
513
|
+
split_date=True,
|
514
|
+
nas_allowed=False,
|
515
|
+
add_t_min=add_t_min,
|
516
|
+
add_t_max=add_t_max,
|
505
517
|
file_names={"P":"PREC.txt", "T":"TA.txt", "ET":"PET.txt"},
|
506
518
|
col_names={"P":"PREC", "ET":"PET",
|
507
519
|
"T":"TA", "T_min":"TA_min", "T_max":"TA_max",
|
@@ -512,8 +524,16 @@ class GroupStations(object):
|
|
512
524
|
**kwargs)
|
513
525
|
else:
|
514
526
|
return self.create_ts(
|
515
|
-
dir=dir,
|
516
|
-
|
517
|
-
|
518
|
-
|
527
|
+
dir=dir,
|
528
|
+
period=period,
|
529
|
+
kinds=kind,
|
530
|
+
agg_to="10 min",
|
531
|
+
r_r0=r_r0,
|
532
|
+
stids=stids,
|
533
|
+
split_date=True,
|
534
|
+
nas_allowed=False,
|
535
|
+
file_names={"P": "N_{id:0>5}.txt"},
|
536
|
+
col_names={"P":"N"},
|
537
|
+
add_t_min=add_t_min,
|
538
|
+
add_t_max=add_t_max,
|
519
539
|
**kwargs)
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: weatherdb
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.4
|
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
|
@@ -693,8 +693,28 @@ Classifier: Intended Audience :: Science/Research
|
|
693
693
|
Classifier: Natural Language :: English
|
694
694
|
Requires-Python: <3.14,>=3.8
|
695
695
|
Description-Content-Type: text/markdown
|
696
|
-
Provides-Extra: optionals
|
697
696
|
License-File: LICENSE
|
697
|
+
Requires-Dist: geopandas
|
698
|
+
Requires-Dist: shapely>=2
|
699
|
+
Requires-Dist: pandas
|
700
|
+
Requires-Dist: numpy
|
701
|
+
Requires-Dist: progressbar2
|
702
|
+
Requires-Dist: rasterio
|
703
|
+
Requires-Dist: sqlalchemy>2.0
|
704
|
+
Requires-Dist: psycopg2-binary
|
705
|
+
Requires-Dist: GeoAlchemy2
|
706
|
+
Requires-Dist: alembic
|
707
|
+
Requires-Dist: requests
|
708
|
+
Requires-Dist: keyring
|
709
|
+
Requires-Dist: keyrings.alt; sys_platform == "linux"
|
710
|
+
Requires-Dist: rasterstats
|
711
|
+
Requires-Dist: click
|
712
|
+
Requires-Dist: setuptools>=61.0
|
713
|
+
Requires-Dist: setuptools_scm
|
714
|
+
Provides-Extra: optionals
|
715
|
+
Requires-Dist: coloredlogs; extra == "optionals"
|
716
|
+
Requires-Dist: colorama; extra == "optionals"
|
717
|
+
Dynamic: license-file
|
698
718
|
|
699
719
|
# WeatherDB - module
|
700
720
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
{
|
2
|
+
"metadata":{
|
3
|
+
"creators":[
|
4
|
+
{
|
5
|
+
"name": "Schmit, Max",
|
6
|
+
"affiliation": "University of Freiburg",
|
7
|
+
"orcid": "0000-0002-0712-4116"
|
8
|
+
}
|
9
|
+
],
|
10
|
+
"contributor":[
|
11
|
+
{
|
12
|
+
"name": "Weiler, Markus",
|
13
|
+
"affiliation": "University of Freiburg",
|
14
|
+
"orcid": "0000-0001-6245-6917",
|
15
|
+
"type": "Supervisor"
|
16
|
+
}
|
17
|
+
],
|
18
|
+
"license": {"id":"GPL-3.0-or-later"},
|
19
|
+
"title": "WeatherDB",
|
20
|
+
"version": "***",
|
21
|
+
"publication_date": "***",
|
22
|
+
"upload_type":"software",
|
23
|
+
"related_identifiers": [
|
24
|
+
{
|
25
|
+
"relation": "cites",
|
26
|
+
"identifier": "10.5281/zenodo.10066044",
|
27
|
+
"resource_type": "Dataset"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"relation": "requires",
|
31
|
+
"identifier": "https://opendata.dwd.de/climate_environment/CDC/",
|
32
|
+
"resource_type": "Dataset"
|
33
|
+
}
|
34
|
+
],
|
35
|
+
"references": [
|
36
|
+
"DWD Climate Data Center (CDC): Historical daily station observations (temperature, pressure, precipitation, sunshine duration, etc.) for Germany, version v21.3, 2021, online available: https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/daily/kl/historical/",
|
37
|
+
"DWD Climate Data Center (CDC): Recent daily station observations (temperature, pressure, precipitation, sunshine duration, etc.) for Germany, quality control not completed yet, version recent, online available: https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/daily/kl/recent/",
|
38
|
+
"DWD Climate Data Center: Berechnete historische Tageswerte von charakteristischen Elementen aus dem Boden und dem Pflanzenbestand, historic values, Version v2, parameter \"VPGFAO\" online available: https://opendata.dwd.de/climate_environment/CDC/derived_germany/soil/daily/historical/",
|
39
|
+
"DWD Climate Data Center: Berechnete historische Tageswerte von charakteristischen Elementen aus dem Boden und dem Pflanzenbestand, recent values, Version v2, parameter \"VPGFAO\", online available: https://opendata.dwd.de/climate_environment/CDC/derived_germany/soil/daily/recent/",
|
40
|
+
"DWD Climate Data Center (CDC): Historical 10-minute station observations of precipitation for Germany, version V1, 2019, online available: https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/precipitation/historical/",
|
41
|
+
"DWD Climate Data Center (CDC): Recent 10-minute station observations of precipitation for Germany,version recent, 2019, online available: https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/precipitation/recent",
|
42
|
+
"DWD Climate Data Center (CDC): Historical daily station observations (temperature, pressure, precipitation, sunshine duration, etc.) for Germany, version v21.3, 2021, online available: https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/daily/kl/historical/",
|
43
|
+
"DWD Climate Data Center (CDC): Recent daily station observations (temperature, pressure, precipitation, sunshine duration, etc.) for Germany, quality control not completed yet, version recent, online available: https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/daily/kl/recent/",
|
44
|
+
"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",
|
45
|
+
"Richter, D. 1995. Ergebnisse methodischer Untersuchungen zur Korrektur des systematischen Meßfehlers des Hellmann-Niederschlagsmessers. Offenbach am Main: Selbstverl. des Dt. Wetterdienstes.",
|
46
|
+
"Copernicus. 2016. European Digital Elevation Model (EU-DEM), version 1.1. online available: https://land.copernicus.eu/imagery-in-situ/eu-dem/eu-dem-v1.1",
|
47
|
+
"Stoelzle, Michael & Weiler, Markus & Steinbrich, Andreas. (2016) Starkregengefährdung in Baden-Württemberg – von der Methodenentwicklung zur Starkregenkartierung. Tag der Hydrologie.",
|
48
|
+
"LARSIM Dokumentation, Stand 06.04.2023, online available: https://www.larsim.info/dokumentation/LARSIM-Dokumentation.pdf"
|
49
|
+
],
|
50
|
+
"subjects": [
|
51
|
+
{"term": "Meteorology", "identifier": "mesh:D055904"},
|
52
|
+
{"term": "Meteorology", "identifier": "euroscivoc:281"},
|
53
|
+
{"term": "Meteorology", "identifier": "gemet:concept/5197"}
|
54
|
+
],
|
55
|
+
"language": "English"
|
56
|
+
}
|
57
|
+
}
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "1.2.2"
|
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
|
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.2 → weatherdb-1.2.4}/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.2 → weatherdb-1.2.4}/weatherdb/alembic/versions/V1.0.0_initial_database_creation.py
RENAMED
File without changes
|
File without changes
|
{weatherdb-1.2.2 → weatherdb-1.2.4}/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
|
File without changes
|