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.
Files changed (112) hide show
  1. {weatherdb-1.2.2 → weatherdb-1.2.4}/.gitlab-ci.yml +42 -7
  2. {weatherdb-1.2.2 → weatherdb-1.2.4}/CHANGES.md +16 -1
  3. {weatherdb-1.2.2 → weatherdb-1.2.4}/PKG-INFO +23 -3
  4. {weatherdb-1.2.2 → weatherdb-1.2.4}/docker/docker-compose.yaml +3 -1
  5. weatherdb-1.2.4/weatherdb/_version.py +1 -0
  6. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/config/ConfigParser.py +1 -1
  7. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/GroupStation.py +54 -23
  8. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationBases.py +1 -1
  9. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationP.py +3 -3
  10. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/GroupStations.py +33 -13
  11. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/PKG-INFO +23 -3
  12. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/SOURCES.txt +1 -0
  13. weatherdb-1.2.4/zenodo.json +57 -0
  14. weatherdb-1.2.2/weatherdb/_version.py +0 -1
  15. {weatherdb-1.2.2 → weatherdb-1.2.4}/.dockerignore +0 -0
  16. {weatherdb-1.2.2 → weatherdb-1.2.4}/.github/workflows/cleanup-cache.yml +0 -0
  17. {weatherdb-1.2.2 → weatherdb-1.2.4}/.github/workflows/python-publish.yml +0 -0
  18. {weatherdb-1.2.2 → weatherdb-1.2.4}/.github/workflows/python-test.yml +0 -0
  19. {weatherdb-1.2.2 → weatherdb-1.2.4}/.gitignore +0 -0
  20. {weatherdb-1.2.2 → weatherdb-1.2.4}/.gitlab/merge_request_templates/new_version.md +0 -0
  21. {weatherdb-1.2.2 → weatherdb-1.2.4}/.readthedocs.yaml +0 -0
  22. {weatherdb-1.2.2 → weatherdb-1.2.4}/LICENSE +0 -0
  23. {weatherdb-1.2.2 → weatherdb-1.2.4}/MANIFEST.in +0 -0
  24. {weatherdb-1.2.2 → weatherdb-1.2.4}/README.md +0 -0
  25. {weatherdb-1.2.2 → weatherdb-1.2.4}/docker/Dockerfile +0 -0
  26. {weatherdb-1.2.2 → weatherdb-1.2.4}/docker/docker-compose_test.yaml +0 -0
  27. {weatherdb-1.2.2 → weatherdb-1.2.4}/docker/start-docker-test.sh +0 -0
  28. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/requirements.txt +0 -0
  29. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/Changelog.md +0 -0
  30. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/License.rst +0 -0
  31. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/Methode.md +0 -0
  32. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/_static/custom.css +0 -0
  33. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/_static/favicon.ico +0 -0
  34. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/_static/logo.png +0 -0
  35. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/api.rst +0 -0
  36. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/cli.rst +0 -0
  37. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.broker.rst +0 -0
  38. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.config.rst +0 -0
  39. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.db.rst +0 -0
  40. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.rst +0 -0
  41. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.GroupStation.rst +0 -0
  42. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationBases.rst +0 -0
  43. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationET.rst +0 -0
  44. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationP.rst +0 -0
  45. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationPD.rst +0 -0
  46. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.StationT.rst +0 -0
  47. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.station.rst +0 -0
  48. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsBase.rst +0 -0
  49. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsET.rst +0 -0
  50. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsP.rst +0 -0
  51. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsPD.rst +0 -0
  52. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.StationsT.rst +0 -0
  53. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.stations.rst +0 -0
  54. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/api/weatherdb.utils.rst +0 -0
  55. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/conf.py +0 -0
  56. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/index.rst +0 -0
  57. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/Configuration.md +0 -0
  58. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/Hosting.md +0 -0
  59. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/Install.md +0 -0
  60. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/Quickstart.md +0 -0
  61. {weatherdb-1.2.2 → weatherdb-1.2.4}/docs/source/setup/setup.rst +0 -0
  62. {weatherdb-1.2.2 → weatherdb-1.2.4}/pyproject.toml +0 -0
  63. {weatherdb-1.2.2 → weatherdb-1.2.4}/setup.cfg +0 -0
  64. {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/DEM/COP-DEM_GLO-30-DGED__2023_1_clipped.tif +0 -0
  65. {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/DEM/README.md +0 -0
  66. {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/DEM/eula_F.pdf +0 -0
  67. {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/regionalisation/DWD-grid_ma_1991_2020_DGM25_clipped.tif +0 -0
  68. {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/regionalisation/HYRAS_ma_1991_2020_DGM25_clipped.tif +0 -0
  69. {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/regionalisation/README.md +0 -0
  70. {weatherdb-1.2.2 → weatherdb-1.2.4}/tests/test-data/test-data-config.ini +0 -0
  71. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/__init__.py +0 -0
  72. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/README.md +0 -0
  73. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/alembic.ini +0 -0
  74. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/config.py +0 -0
  75. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/env.py +0 -0
  76. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/script.py.mako +0 -0
  77. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/versions/V1.0.0_initial_database_creation.py +0 -0
  78. {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
  79. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/versions/V1.0.5_fix-ma-raster-values.py +0 -0
  80. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/alembic/versions/V1.0.6_update-views.py +0 -0
  81. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/broker.py +0 -0
  82. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/cli.py +0 -0
  83. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/config/__init__.py +0 -0
  84. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/config/config_default.ini +0 -0
  85. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/__init__.py +0 -0
  86. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/connections.py +0 -0
  87. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/fixtures/RichterParameters.json +0 -0
  88. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/models.py +0 -0
  89. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/queries/get_quotient.py +0 -0
  90. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/db/views.py +0 -0
  91. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationET.py +0 -0
  92. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationPD.py +0 -0
  93. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/StationT.py +0 -0
  94. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/__init__.py +0 -0
  95. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/station/constants.py +0 -0
  96. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsBase.py +0 -0
  97. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsBaseTET.py +0 -0
  98. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsET.py +0 -0
  99. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsP.py +0 -0
  100. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsPD.py +0 -0
  101. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/StationsT.py +0 -0
  102. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/stations/__init__.py +0 -0
  103. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/TimestampPeriod.py +0 -0
  104. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/__init__.py +0 -0
  105. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/dwd.py +0 -0
  106. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/geometry.py +0 -0
  107. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/get_data.py +0 -0
  108. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb/utils/logging.py +0 -0
  109. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/dependency_links.txt +0 -0
  110. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/entry_points.txt +0 -0
  111. {weatherdb-1.2.2 → weatherdb-1.2.4}/weatherdb.egg-info/requires.txt +0 -0
  112. {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: postgis/postgis:16-3.4
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.8
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.9","3.10","3.11","3.12","3.13"]
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.11
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: filllup linear regression did not take configuration value and therefor did never work
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
1
+ Metadata-Version: 2.4
2
2
  Name: weatherdb
3
- Version: 1.2.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: postgis/postgis:16-3.4
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 == "ask":
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, dir, period=(None, None),
348
- kind="best", r_r0=1, add_t_min=False, add_t_max=False,
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, period=period, kinds=kind,
398
- agg_to="10 min", r_r0=r_r0, split_date=True,
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, add_t_max=add_t_max,
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, period=period, kinds=kind,
412
- agg_to="10 min", r_r0=r_r0, split_date=True,
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
- add_t_min=add_t_min, add_t_max=add_t_max,
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, dir, period=(None, None),
418
- kinds="best", paras="all",
419
- agg_to="10 min", r_r0=None, split_date=False,
420
- nas_allowed=True, add_na_share=False,
421
- add_t_min=False, add_t_max=False,
422
- add_meta=True, file_names={}, col_names={},
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 = "_{stid:0>5}.txt".format(stid=self.id)
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: {stid})".format(stid=self.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, kinds=kinds,
548
- paras=[para], agg_to=agg_to,
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, add_t_max=add_t_max,
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 timeserie for Station {stid}.".format(
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 station_ma_timeseries WHERE station_id={self.id} and parameter='{self._para}';
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."{stid}_{para}" (
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
- '''.format(stid=self.id, para=self._para)
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, period=(None, None), kinds="best",
297
- stids="all", agg_to="10 min", r_r0=None, split_date=False,
298
- nas_allowed=True, add_na_share=False,
299
- add_t_min=False, add_t_max=False,
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, period=period, kinds=kind,
502
- agg_to="10 min", r_r0=r_r0, stids=stids,
503
- split_date=True, nas_allowed=False,
504
- add_t_min=add_t_min, add_t_max=add_t_max,
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, period=period, kinds=kind,
516
- agg_to="10 min", r_r0=r_r0, stids=stids,
517
- split_date=True, nas_allowed=False,
518
- add_t_min=add_t_min, add_t_max=add_t_max,
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
1
+ Metadata-Version: 2.4
2
2
  Name: weatherdb
3
- Version: 1.2.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
 
@@ -7,6 +7,7 @@ LICENSE
7
7
  MANIFEST.in
8
8
  README.md
9
9
  pyproject.toml
10
+ zenodo.json
10
11
  .github/workflows/cleanup-cache.yml
11
12
  .github/workflows/python-publish.yml
12
13
  .github/workflows/python-test.yml
@@ -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