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.
Files changed (114) hide show
  1. {weatherdb-1.2.0 → weatherdb-1.2.1}/.gitlab-ci.yml +21 -6
  2. {weatherdb-1.2.0 → weatherdb-1.2.1}/CHANGES.md +16 -1
  3. {weatherdb-1.2.0 → weatherdb-1.2.1}/PKG-INFO +1 -1
  4. weatherdb-1.2.1/docs/source/api/weatherdb.broker.rst +7 -0
  5. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/weatherdb.db.rst +10 -0
  6. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/weatherdb.rst +0 -1
  7. weatherdb-1.2.1/docs/source/api/weatherdb.station.GroupStation.rst +5 -0
  8. weatherdb-1.2.1/docs/source/api/weatherdb.station.StationBases.rst +18 -0
  9. weatherdb-1.2.1/docs/source/api/weatherdb.station.StationET.rst +5 -0
  10. weatherdb-1.2.1/docs/source/api/weatherdb.station.StationP.rst +5 -0
  11. weatherdb-1.2.1/docs/source/api/weatherdb.station.StationPD.rst +6 -0
  12. weatherdb-1.2.1/docs/source/api/weatherdb.station.StationT.rst +5 -0
  13. weatherdb-1.2.1/docs/source/api/weatherdb.station.rst +17 -0
  14. weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsBase.rst +15 -0
  15. weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsET.rst +6 -0
  16. weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsP.rst +6 -0
  17. weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsPD.rst +7 -0
  18. weatherdb-1.2.1/docs/source/api/weatherdb.stations.StationsT.rst +7 -0
  19. weatherdb-1.2.1/docs/source/api/weatherdb.stations.rst +15 -0
  20. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/weatherdb.utils.rst +2 -0
  21. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/conf.py +3 -0
  22. weatherdb-1.2.1/weatherdb/_version.py +1 -0
  23. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/broker.py +12 -2
  24. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/cli.py +20 -5
  25. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/config/config_default.ini +19 -3
  26. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationBases.py +32 -23
  27. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsBase.py +16 -3
  28. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/get_data.py +7 -6
  29. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/PKG-INFO +1 -1
  30. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/SOURCES.txt +12 -1
  31. weatherdb-1.2.0/docs/source/api/weatherDB.broker.rst +0 -10
  32. weatherdb-1.2.0/docs/source/api/weatherdb.station.rst +0 -56
  33. weatherdb-1.2.0/docs/source/api/weatherdb.stations.rst +0 -46
  34. weatherdb-1.2.0/weatherdb/_version.py +0 -1
  35. {weatherdb-1.2.0 → weatherdb-1.2.1}/.dockerignore +0 -0
  36. {weatherdb-1.2.0 → weatherdb-1.2.1}/.github/workflows/cleanup-cache.yml +0 -0
  37. {weatherdb-1.2.0 → weatherdb-1.2.1}/.github/workflows/python-publish.yml +0 -0
  38. {weatherdb-1.2.0 → weatherdb-1.2.1}/.github/workflows/python-test.yml +0 -0
  39. {weatherdb-1.2.0 → weatherdb-1.2.1}/.gitignore +0 -0
  40. {weatherdb-1.2.0 → weatherdb-1.2.1}/.gitlab/merge_request_templates/new_version.md +0 -0
  41. {weatherdb-1.2.0 → weatherdb-1.2.1}/.readthedocs.yaml +0 -0
  42. {weatherdb-1.2.0 → weatherdb-1.2.1}/LICENSE +0 -0
  43. {weatherdb-1.2.0 → weatherdb-1.2.1}/MANIFEST.in +0 -0
  44. {weatherdb-1.2.0 → weatherdb-1.2.1}/README.md +0 -0
  45. {weatherdb-1.2.0 → weatherdb-1.2.1}/docker/Dockerfile +0 -0
  46. {weatherdb-1.2.0 → weatherdb-1.2.1}/docker/docker-compose.yaml +0 -0
  47. {weatherdb-1.2.0 → weatherdb-1.2.1}/docker/docker-compose_test.yaml +0 -0
  48. {weatherdb-1.2.0 → weatherdb-1.2.1}/docker/start-docker-test.sh +0 -0
  49. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/requirements.txt +0 -0
  50. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/Changelog.md +0 -0
  51. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/License.rst +0 -0
  52. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/Methode.md +0 -0
  53. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/_static/custom.css +0 -0
  54. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/_static/favicon.ico +0 -0
  55. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/_static/logo.png +0 -0
  56. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/api.rst +0 -0
  57. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/cli.rst +0 -0
  58. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/api/weatherdb.config.rst +0 -0
  59. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/index.rst +0 -0
  60. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/Configuration.md +0 -0
  61. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/Hosting.md +0 -0
  62. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/Install.md +0 -0
  63. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/Quickstart.md +0 -0
  64. {weatherdb-1.2.0 → weatherdb-1.2.1}/docs/source/setup/setup.rst +0 -0
  65. {weatherdb-1.2.0 → weatherdb-1.2.1}/pyproject.toml +0 -0
  66. {weatherdb-1.2.0 → weatherdb-1.2.1}/setup.cfg +0 -0
  67. {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/DEM/COP-DEM_GLO-30-DGED__2023_1_clipped.tif +0 -0
  68. {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/DEM/README.md +0 -0
  69. {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/DEM/eula_F.pdf +0 -0
  70. {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/regionalisation/DWD-grid_ma_1991_2020_DGM25_clipped.tif +0 -0
  71. {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/regionalisation/HYRAS_ma_1991_2020_DGM25_clipped.tif +0 -0
  72. {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/regionalisation/README.md +0 -0
  73. {weatherdb-1.2.0 → weatherdb-1.2.1}/tests/test-data/test-data-config.ini +0 -0
  74. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/__init__.py +0 -0
  75. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/README.md +0 -0
  76. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/alembic.ini +0 -0
  77. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/config.py +0 -0
  78. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/env.py +0 -0
  79. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/script.py.mako +0 -0
  80. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/versions/V1.0.0_initial_database_creation.py +0 -0
  81. {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
  82. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/versions/V1.0.5_fix-ma-raster-values.py +0 -0
  83. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/alembic/versions/V1.0.6_update-views.py +0 -0
  84. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/config/ConfigParser.py +0 -0
  85. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/config/__init__.py +0 -0
  86. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/__init__.py +0 -0
  87. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/connections.py +0 -0
  88. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/fixtures/RichterParameters.json +0 -0
  89. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/models.py +0 -0
  90. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/queries/get_quotient.py +0 -0
  91. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/db/views.py +0 -0
  92. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/GroupStation.py +0 -0
  93. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationET.py +0 -0
  94. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationP.py +0 -0
  95. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationPD.py +0 -0
  96. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/StationT.py +0 -0
  97. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/__init__.py +0 -0
  98. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/station/constants.py +0 -0
  99. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/GroupStations.py +0 -0
  100. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsBaseTET.py +0 -0
  101. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsET.py +0 -0
  102. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsP.py +0 -0
  103. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsPD.py +0 -0
  104. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/StationsT.py +0 -0
  105. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/stations/__init__.py +0 -0
  106. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/TimestampPeriod.py +0 -0
  107. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/__init__.py +0 -0
  108. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/dwd.py +0 -0
  109. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/geometry.py +0 -0
  110. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb/utils/logging.py +0 -0
  111. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/dependency_links.txt +0 -0
  112. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/entry_points.txt +0 -0
  113. {weatherdb-1.2.0 → weatherdb-1.2.1}/weatherdb.egg-info/requires.txt +0 -0
  114. {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
- - deploy
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]\d+\.\d+\.\d+$/
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
- deploy:
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
- - !!rename module from weatherDB to weatherdb to be compliant with PEP 8!!
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.0
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,7 @@
1
+ broker
2
+ ------
3
+
4
+ .. autoclass:: weatherdb.broker.Broker
5
+
6
+
7
+
@@ -19,5 +19,15 @@ base models
19
19
 
20
20
  .. autoclass:: weatherdb.db.models.MetaBaseQC
21
21
 
22
+ views
23
+ -----
22
24
 
25
+ Those are the database views
26
+
27
+ .. automodule:: weatherdb.db.views
28
+
29
+ connections
30
+ -----------
31
+
32
+ .. automodule:: weatherdb.db.connections
23
33
 
@@ -1,7 +1,6 @@
1
1
  weatherdb
2
2
  =========
3
3
 
4
-
5
4
  .. toctree::
6
5
  :maxdepth: 2
7
6
 
@@ -0,0 +1,5 @@
1
+ GroupStation
2
+ ============
3
+
4
+ .. py:module:: weatherdb.station
5
+ .. autoclass:: weatherdb.station.GroupStation
@@ -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,5 @@
1
+ StationET
2
+ =========
3
+
4
+ .. py:module:: weatherdb.station
5
+ .. autoclass:: weatherdb.station.StationET
@@ -0,0 +1,5 @@
1
+ StationP
2
+ ========
3
+
4
+ .. py:module:: weatherdb.station
5
+ .. autoclass:: weatherdb.station.StationP
@@ -0,0 +1,6 @@
1
+ StationPD
2
+ =========
3
+
4
+ .. py:module:: weatherdb.station
5
+ .. autoclass:: weatherdb.station.StationPD
6
+ :exclude-members: quality_check, last_imp_quality_check, get_corr, get_adj, get_qc
@@ -0,0 +1,5 @@
1
+ StationT
2
+ ========
3
+
4
+ .. py:module:: weatherdb.station
5
+ .. autoclass:: weatherdb.station.StationT
@@ -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,6 @@
1
+ StationsET
2
+ ==========
3
+
4
+ .. py:module:: weatherdb.stations
5
+
6
+ .. autoclass:: weatherdb.stations.StationsET
@@ -0,0 +1,6 @@
1
+ StationsP
2
+ =========
3
+
4
+ .. py:module:: weatherdb.stations
5
+
6
+ .. autoclass:: weatherdb.stations.StationsP
@@ -0,0 +1,7 @@
1
+ StationsPD
2
+ ==========
3
+
4
+ .. py:module:: weatherdb.stations
5
+
6
+ .. autoclass:: weatherdb.stations.StationsP
7
+
@@ -0,0 +1,7 @@
1
+ StationsT
2
+ =========
3
+
4
+ .. py:module:: weatherdb.stations
5
+
6
+ .. autoclass:: weatherdb.stations.StationsT
7
+
@@ -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
@@ -3,6 +3,8 @@ utils
3
3
 
4
4
  In this module there are several utilities used by the WeatherDB package, you shouldn't need to use them directly.
5
5
 
6
+ TimestampPeriod
7
+ ---------------
6
8
  .. autoclass:: weatherdb.utils.TimestampPeriod
7
9
 
8
10
  dwd
@@ -84,6 +84,9 @@ autoclasstoc_sections = [
84
84
  # Autosummary options
85
85
  autosummary_generate = True
86
86
  autosummary_generate_overwrite = True
87
+ suppress_warnings = [
88
+ 'autosummary.import_cycle',
89
+ ]
87
90
 
88
91
  # intersphinx
89
92
  intersphinx_mapping = {
@@ -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
- 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
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
- Source:
140
- 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.
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
- LINEAR_INTERPOLATION_LIMIT_P = 1 hour
154
+ P = 1 hour
154
155
  ; For temperature, the default is 2 days
155
- LINEAR_INTERPOLATION_LIMIT_T = 2 days
156
+ T = 2 days
156
157
  ; For Evapotranspiration, the default is 2 days
157
- LINEAR_INTERPOLATION_LIMIT_ET = 2 days
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
- "LINEAR_INTERPOLATION_LIMIT_{self._para_base}",
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 ELSE NULL
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
- timestamp - lag(timestamp, 1) OVER ( ORDER BY timestamp) AS dist_prev,
1520
- lead(timestamp, 1) OVER ( ORDER BY timestamp) - timestamp AS dist_next
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
- where (ep.end - ep.start - '{self._interval}'::interval) <= '{lr_limit}'::interval
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 + (EXTRACT(EPOCH FROM ts.timestamp - %1$L)::numeric/(EXTRACT(EPOCH FROM '{self._interval}'::interval))::numeric * %5$L),
1542
- filled_by=-1
1543
- WHERE ts.timestamp>%1$L and ts.timestamp<%3$L;
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
- - for timeserie kinds: 'raw', 'qc', 'filled' or for precipitation also "corr".
1884
- - for raster keys: 'hyras', 'dwd' or 'regnie', depending on your defined raster files.
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
- _type_
2930
- _description_
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
- - for timeserie kinds: 'raw', 'qc', 'filled' or for precipitation also "corr".
434
- - for raster keys: 'hyras', 'dwd' or 'regnie', depending on your defined raster files.
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, processes=mp.cpu_count()-1, **kwargs):
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, "[MASKED]")} returned status code {r.status_code}")
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
- Source:
380
- 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.
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.0
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/weatherDB.broker.rst
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,10 +0,0 @@
1
- broker
2
- ------
3
- .. module:: weatherdb.broker
4
-
5
- Broker
6
- ^^^^^^
7
- .. autoclass:: weatherdb.broker.Broker
8
-
9
- .. autoclasstoc::
10
-
@@ -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