wxdata 2.0__tar.gz → 2.0.1__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 (94) hide show
  1. {wxdata-2.0/src/wxdata.egg-info → wxdata-2.0.1}/PKG-INFO +1 -1
  2. {wxdata-2.0 → wxdata-2.0.1}/pyproject.toml +1 -1
  3. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/client/byte_range.py +29 -1
  4. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/ecmwf/keys.py +1 -0
  5. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/post_processors/ecmwf_post_processing.py +11 -0
  6. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/progress_bar.py +29 -1
  7. {wxdata-2.0 → wxdata-2.0.1/src/wxdata.egg-info}/PKG-INFO +1 -1
  8. {wxdata-2.0 → wxdata-2.0.1}/LICENSE +0 -0
  9. {wxdata-2.0 → wxdata-2.0.1}/README.md +0 -0
  10. {wxdata-2.0 → wxdata-2.0.1}/setup.cfg +0 -0
  11. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/__init__.py +0 -0
  12. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/aigefs/__init__.py +0 -0
  13. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/aigefs/aigefs.py +0 -0
  14. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/aigefs/paths.py +0 -0
  15. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/aigefs/url_scanners.py +0 -0
  16. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/aigfs/__init__.py +0 -0
  17. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/aigfs/aigfs.py +0 -0
  18. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/aigfs/paths.py +0 -0
  19. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/aigfs/url_scanners.py +0 -0
  20. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/calc/__init__.py +0 -0
  21. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/calc/derived_fields.py +0 -0
  22. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/calc/kinematics.py +0 -0
  23. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/calc/thermodynamics.py +0 -0
  24. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/calc/unit_conversion.py +0 -0
  25. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/cfs/__init__.py +0 -0
  26. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/cfs/cfs.py +0 -0
  27. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/cfs/file_scanner.py +0 -0
  28. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/cfs/url_scanners.py +0 -0
  29. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/client/__init__.py +0 -0
  30. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/client/client.py +0 -0
  31. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/client/level_coords.py +0 -0
  32. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/ecmwf/__init__.py +0 -0
  33. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/ecmwf/ecmwf.py +0 -0
  34. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/ecmwf/file_funcs.py +0 -0
  35. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/ecmwf/parsers.py +0 -0
  36. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/ecmwf/paths.py +0 -0
  37. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/ecmwf/url_scanners.py +0 -0
  38. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/fems/__init__.py +0 -0
  39. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/fems/meta_data.py +0 -0
  40. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/fems/observations.py +0 -0
  41. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gefs/__init__.py +0 -0
  42. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gefs/exception_messages.py +0 -0
  43. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gefs/file_funcs.py +0 -0
  44. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gefs/gefs.py +0 -0
  45. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gefs/paths.py +0 -0
  46. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gefs/url_scanners.py +0 -0
  47. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gfs/__init__.py +0 -0
  48. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gfs/exception_messages.py +0 -0
  49. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gfs/gfs.py +0 -0
  50. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gfs/paths.py +0 -0
  51. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/gfs/url_scanners.py +0 -0
  52. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/hgefs/__init__.py +0 -0
  53. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/hgefs/hgefs.py +0 -0
  54. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/hgefs/paths.py +0 -0
  55. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/hgefs/url_scanner.py +0 -0
  56. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/metars/__init__.py +0 -0
  57. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/metars/_clean_data.py +0 -0
  58. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/metars/metar_obs.py +0 -0
  59. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/noaa/__init__.py +0 -0
  60. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/noaa/nws.py +0 -0
  61. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/post_processors/__init__.py +0 -0
  62. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/post_processors/aigefs_post_processing.py +0 -0
  63. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/post_processors/aigfs_post_processing.py +0 -0
  64. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/post_processors/cfs_post_processing.py +0 -0
  65. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/post_processors/gefs_post_processing.py +0 -0
  66. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/post_processors/gfs_post_processing.py +0 -0
  67. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/post_processors/hgefs_post_processing.py +0 -0
  68. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/post_processors/rtma_post_processing.py +0 -0
  69. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/radar/__init__.py +0 -0
  70. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/radar/nexrad2.py +0 -0
  71. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/radar/url_scanner.py +0 -0
  72. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/rtma/__init__.py +0 -0
  73. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/rtma/file_funcs.py +0 -0
  74. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/rtma/file_scanner.py +0 -0
  75. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/rtma/keys.py +0 -0
  76. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/rtma/rtma.py +0 -0
  77. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/rtma/url_scanners.py +0 -0
  78. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/soundings/__init__.py +0 -0
  79. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/soundings/_exceptions.py +0 -0
  80. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/soundings/wyoming_soundings.py +0 -0
  81. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/__init__.py +0 -0
  82. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/coords.py +0 -0
  83. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/exceptions.py +0 -0
  84. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/file_funcs.py +0 -0
  85. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/file_scanner.py +0 -0
  86. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/nomads_gribfilter.py +0 -0
  87. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/recycle_bin.py +0 -0
  88. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/scripts.py +0 -0
  89. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/tools.py +0 -0
  90. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata/utils/xmacis2_cleanup.py +0 -0
  91. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata.egg-info/SOURCES.txt +0 -0
  92. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata.egg-info/dependency_links.txt +0 -0
  93. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata.egg-info/requires.txt +0 -0
  94. {wxdata-2.0 → wxdata-2.0.1}/src/wxdata.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wxdata
3
- Version: 2.0
3
+ Version: 2.0.1
4
4
  Summary: A Python package of end-to-end weather data clients & raw data clients with VPN/PROXY support, data processors that decode variable keys from GRIB format into a plain-language format & various tools for assisting Python automated workflows, querying meteorological datasets and filling gaps in meteorological data.
5
5
  Author: Eric J. Drewitz
6
6
  Project-URL: Documentation, https://github.com/edrewitz/wxdata/blob/main/Documentation/Landing%20Page.md
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "wxdata"
3
- version = "2.0"
3
+ version = "2.0.1"
4
4
  description = "A Python package of end-to-end weather data clients & raw data clients with VPN/PROXY support, data processors that decode variable keys from GRIB format into a plain-language format & various tools for assisting Python automated workflows, querying meteorological datasets and filling gaps in meteorological data."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -6,7 +6,35 @@ This file hosts the function that fetches the byte-range for a variable.
6
6
 
7
7
  import requests
8
8
 
9
- from tqdm.auto import tqdm
9
+ import sys
10
+
11
+ def is_jupyter_notebook() -> bool:
12
+ """
13
+ Checks if the code is running within a Jupyter Notebook environment.
14
+
15
+ Returns:
16
+ --------
17
+ bool
18
+ True if running in a Jupyter Notebook/Lab, False otherwise.
19
+ """
20
+ # 1. Quick check for the ipykernel module in active memory
21
+ if 'ipykernel' not in sys.modules:
22
+ return False
23
+
24
+ # 2. Confirm by checking the active IPython shell type
25
+ try:
26
+ from IPython import get_ipython
27
+ shell = get_ipython().__class__.__name__
28
+ return shell == 'ZMQInteractiveShell'
29
+ except (ImportError, NameError):
30
+ return False # Probably standard Python interpreter
31
+
32
+ NOTEBOOK = is_jupyter_notebook()
33
+
34
+ if NOTEBOOK == False:
35
+ from tqdm.auto import tqdm
36
+ else:
37
+ from tqdm.notebook import tqdm
10
38
 
11
39
 
12
40
  def fetch_range(url,
@@ -238,6 +238,7 @@ def aifs_var_keys(var_list):
238
238
 
239
239
  aifs_keys = {
240
240
  'geopotential':'z',
241
+ 'geopotential height':'gh',
241
242
  'total column water':'tcw',
242
243
  'mean sea level pressure':'msl',
243
244
  'standard deviation of sub-gridscale orography':'sdor',
@@ -1150,6 +1150,13 @@ def ecmwf_aifs_post_processing(path,
1150
1150
  except Exception as e:
1151
1151
  pass
1152
1152
 
1153
+ try:
1154
+ ds1['geopotential_height'] = ds1['gh']
1155
+ ds1 = ds1.drop_vars('gh')
1156
+ ds1_list.append(ds1)
1157
+ except Exception as e:
1158
+ pass
1159
+
1153
1160
  try:
1154
1161
  ds1['specific_humidity'] = ds1['q']
1155
1162
  ds1 = ds1.drop_vars('q')
@@ -1494,6 +1501,10 @@ def ecmwf_aifs_post_processing(path,
1494
1501
  ds = ds.drop_vars('z')
1495
1502
  except Exception as e:
1496
1503
  pass
1504
+ try:
1505
+ ds = ds.drop_vars('gh')
1506
+ except Exception as e:
1507
+ pass
1497
1508
  try:
1498
1509
  ds = ds.drop_vars('skt')
1499
1510
  except Exception as e:
@@ -4,7 +4,35 @@ This file hosts a function that displays a progress bar for downloading a file.
4
4
  (C) Eric J. Drewitz 2025-2026
5
5
  """
6
6
 
7
- from tqdm.auto import tqdm
7
+ import sys
8
+
9
+ def is_jupyter_notebook() -> bool:
10
+ """
11
+ Checks if the code is running within a Jupyter Notebook environment.
12
+
13
+ Returns:
14
+ --------
15
+ bool
16
+ True if running in a Jupyter Notebook/Lab, False otherwise.
17
+ """
18
+ # 1. Quick check for the ipykernel module in active memory
19
+ if 'ipykernel' not in sys.modules:
20
+ return False
21
+
22
+ # 2. Confirm by checking the active IPython shell type
23
+ try:
24
+ from IPython import get_ipython
25
+ shell = get_ipython().__class__.__name__
26
+ return shell == 'ZMQInteractiveShell'
27
+ except (ImportError, NameError):
28
+ return False # Probably standard Python interpreter
29
+
30
+ NOTEBOOK = is_jupyter_notebook()
31
+
32
+ if NOTEBOOK == False:
33
+ from tqdm.auto import tqdm
34
+ else:
35
+ from tqdm.notebook import tqdm
8
36
 
9
37
  def progress_bar(response,
10
38
  path,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wxdata
3
- Version: 2.0
3
+ Version: 2.0.1
4
4
  Summary: A Python package of end-to-end weather data clients & raw data clients with VPN/PROXY support, data processors that decode variable keys from GRIB format into a plain-language format & various tools for assisting Python automated workflows, querying meteorological datasets and filling gaps in meteorological data.
5
5
  Author: Eric J. Drewitz
6
6
  Project-URL: Documentation, https://github.com/edrewitz/wxdata/blob/main/Documentation/Landing%20Page.md
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