wxdata 2.2__tar.gz → 2.3__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 (163) hide show
  1. {wxdata-2.2 → wxdata-2.3}/PKG-INFO +182 -81
  2. wxdata-2.2/src/wxdata.egg-info/PKG-INFO → wxdata-2.3/README.md +180 -111
  3. {wxdata-2.2 → wxdata-2.3}/pyproject.toml +2 -2
  4. {wxdata-2.2 → wxdata-2.3}/src/wxdata/__init__.py +133 -58
  5. wxdata-2.3/src/wxdata/api/airnow_api/__init__.py +1 -0
  6. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/airnow_api/observations.py +1 -1
  7. wxdata-2.3/src/wxdata/api/open_meteo_api/air_quality/__init__.py +1 -0
  8. wxdata-2.3/src/wxdata/api/open_meteo_api/climate/__init__.py +1 -0
  9. wxdata-2.3/src/wxdata/api/open_meteo_api/marine_forecasts/__init__.py +4 -0
  10. wxdata-2.3/src/wxdata/api/open_meteo_api/seasonal_forecasts/__init__.py +3 -0
  11. wxdata-2.3/src/wxdata/api/open_meteo_api/solar_radiation/__init__.py +1 -0
  12. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/solar_radiation/solar_radiation.py +1 -1
  13. wxdata-2.3/src/wxdata/api/open_meteo_api/weather_forecasts/__init__.py +9 -0
  14. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/fuels_data}/fems/__init__.py +2 -2
  15. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/fuels_data}/fems/observations.py +1 -1
  16. {wxdata-2.2/src/wxdata/noaa → wxdata-2.3/src/wxdata/gridded_forecasts/noaa/nws}/__init__.py +1 -1
  17. wxdata-2.3/src/wxdata/model_data/cmc/cansips/forecast/__init__.py +1 -0
  18. wxdata-2.3/src/wxdata/model_data/cmc/cansips/forecast/cansips_forecast.py +281 -0
  19. wxdata-2.3/src/wxdata/model_data/cmc/cansips/forecast/url_scanner.py +435 -0
  20. wxdata-2.3/src/wxdata/model_data/cmc/cansips/hindcast/__init__.py +1 -0
  21. wxdata-2.3/src/wxdata/model_data/cmc/cansips/hindcast/cansips_hindcast.py +225 -0
  22. wxdata-2.3/src/wxdata/model_data/cmc/cansips/hindcast/file_sorter.py +91 -0
  23. wxdata-2.3/src/wxdata/model_data/cmc/cansips/hindcast/url_scanner.py +297 -0
  24. wxdata-2.3/src/wxdata/model_data/cmc/gdps/__init__.py +1 -0
  25. wxdata-2.3/src/wxdata/model_data/cmc/gdps/gdps.py +1216 -0
  26. wxdata-2.3/src/wxdata/model_data/cmc/gdps/url_scanner.py +559 -0
  27. wxdata-2.3/src/wxdata/model_data/cmc/geps/__init__.py +1 -0
  28. wxdata-2.3/src/wxdata/model_data/cmc/geps/geps.py +662 -0
  29. wxdata-2.3/src/wxdata/model_data/cmc/geps/url_scanner.py +476 -0
  30. wxdata-2.3/src/wxdata/model_data/cmc/hrdps/__init__.py +1 -0
  31. wxdata-2.3/src/wxdata/model_data/cmc/hrdps/hrdps.py +1244 -0
  32. wxdata-2.3/src/wxdata/model_data/cmc/hrdps/url_scanner.py +673 -0
  33. wxdata-2.3/src/wxdata/model_data/cmc/rdps/__init__.py +1 -0
  34. wxdata-2.3/src/wxdata/model_data/cmc/rdps/rdps.py +1259 -0
  35. wxdata-2.3/src/wxdata/model_data/cmc/rdps/url_scanner.py +709 -0
  36. wxdata-2.3/src/wxdata/model_data/cmc/utils/_exceptions.py +100 -0
  37. wxdata-2.3/src/wxdata/model_data/cmc/utils/cmc_keys.py +608 -0
  38. wxdata-2.3/src/wxdata/model_data/cmc/utils/file_scanner.py +67 -0
  39. wxdata-2.3/src/wxdata/model_data/cmc/utils/filenames.py +35 -0
  40. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/__init__.py +1 -1
  41. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/ecmwf.py +5 -5
  42. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigefs/__init__.py +1 -1
  43. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigefs/aigefs.py +2 -2
  44. wxdata-2.3/src/wxdata/model_data/noaa/aigfs/__init__.py +3 -0
  45. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigfs/aigfs.py +2 -2
  46. wxdata-2.3/src/wxdata/model_data/noaa/cfs/__init__.py +4 -0
  47. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/cfs/cfs.py +2 -2
  48. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/__init__.py +1 -1
  49. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/gefs.py +2 -2
  50. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/url_scanners.py +1 -1
  51. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/__init__.py +1 -1
  52. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/gfs.py +2 -2
  53. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/url_scanners.py +1 -1
  54. wxdata-2.3/src/wxdata/model_data/noaa/hgefs/__init__.py +1 -0
  55. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/hgefs/hgefs.py +2 -2
  56. wxdata-2.3/src/wxdata/model_data/noaa/rtma/__init__.py +4 -0
  57. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/rtma.py +3 -3
  58. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/url_scanners.py +1 -1
  59. wxdata-2.3/src/wxdata/observational_data/metars/__init__.py +3 -0
  60. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/metars/metar_obs.py +1 -1
  61. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/radar/__init__.py +1 -1
  62. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/radar/nexrad2.py +1 -1
  63. wxdata-2.3/src/wxdata/observational_data/soundings/__init__.py +3 -0
  64. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/soundings/wyoming_soundings.py +1 -1
  65. {wxdata-2.2 → wxdata-2.3}/src/wxdata/post_processors/__init__.py +1 -0
  66. wxdata-2.3/src/wxdata/post_processors/cmc_post_processing.py +523 -0
  67. wxdata-2.2/README.md → wxdata-2.3/src/wxdata.egg-info/PKG-INFO +212 -79
  68. wxdata-2.3/src/wxdata.egg-info/SOURCES.txt +147 -0
  69. wxdata-2.2/src/wxdata/aigfs/__init__.py +0 -3
  70. wxdata-2.2/src/wxdata/airnow_api/__init__.py +0 -1
  71. wxdata-2.2/src/wxdata/cfs/__init__.py +0 -4
  72. wxdata-2.2/src/wxdata/hgefs/__init__.py +0 -1
  73. wxdata-2.2/src/wxdata/metars/__init__.py +0 -3
  74. wxdata-2.2/src/wxdata/open_meteo_api/air_quality/__init__.py +0 -1
  75. wxdata-2.2/src/wxdata/open_meteo_api/climate/__init__.py +0 -1
  76. wxdata-2.2/src/wxdata/open_meteo_api/marine_forecasts/__init__.py +0 -4
  77. wxdata-2.2/src/wxdata/open_meteo_api/seasonal_forecasts/__init__.py +0 -3
  78. wxdata-2.2/src/wxdata/open_meteo_api/solar_radiation/__init__.py +0 -1
  79. wxdata-2.2/src/wxdata/open_meteo_api/weather_forecasts/__init__.py +0 -9
  80. wxdata-2.2/src/wxdata/rtma/__init__.py +0 -4
  81. wxdata-2.2/src/wxdata/soundings/__init__.py +0 -3
  82. wxdata-2.2/src/wxdata.egg-info/SOURCES.txt +0 -123
  83. {wxdata-2.2 → wxdata-2.3}/LICENSE +0 -0
  84. {wxdata-2.2 → wxdata-2.3}/setup.cfg +0 -0
  85. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/airnow_api/_errors.py +0 -0
  86. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/air_quality/cams.py +0 -0
  87. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/climate/climate_data.py +0 -0
  88. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/marine_forecasts/dwd.py +0 -0
  89. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/marine_forecasts/ecmwf.py +0 -0
  90. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/marine_forecasts/meteo_france.py +0 -0
  91. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/marine_forecasts/noaa.py +0 -0
  92. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/seasonal_forecasts/ecmwf_daily.py +0 -0
  93. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/seasonal_forecasts/ecmwf_monthly.py +0 -0
  94. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/seasonal_forecasts/ecmwf_weekly.py +0 -0
  95. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/solar_radiation/models.py +0 -0
  96. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/cmc.py +0 -0
  97. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/current_weather.py +0 -0
  98. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/dwd.py +0 -0
  99. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/ecmwf.py +0 -0
  100. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/google.py +0 -0
  101. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/jma.py +0 -0
  102. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/meteo_france.py +0 -0
  103. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/noaa.py +0 -0
  104. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/ukmo.py +0 -0
  105. {wxdata-2.2 → wxdata-2.3}/src/wxdata/calc/__init__.py +0 -0
  106. {wxdata-2.2 → wxdata-2.3}/src/wxdata/calc/derived_fields.py +0 -0
  107. {wxdata-2.2 → wxdata-2.3}/src/wxdata/calc/kinematics.py +0 -0
  108. {wxdata-2.2 → wxdata-2.3}/src/wxdata/calc/thermodynamics.py +0 -0
  109. {wxdata-2.2 → wxdata-2.3}/src/wxdata/calc/unit_conversion.py +0 -0
  110. {wxdata-2.2 → wxdata-2.3}/src/wxdata/client/__init__.py +0 -0
  111. {wxdata-2.2 → wxdata-2.3}/src/wxdata/client/byte_range.py +0 -0
  112. {wxdata-2.2 → wxdata-2.3}/src/wxdata/client/client.py +0 -0
  113. {wxdata-2.2 → wxdata-2.3}/src/wxdata/client/level_coords.py +0 -0
  114. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/fuels_data}/fems/meta_data.py +0 -0
  115. {wxdata-2.2/src/wxdata/noaa → wxdata-2.3/src/wxdata/gridded_forecasts/noaa/nws}/nws.py +0 -0
  116. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/file_funcs.py +0 -0
  117. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/keys.py +0 -0
  118. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/parsers.py +0 -0
  119. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/paths.py +0 -0
  120. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/url_scanners.py +0 -0
  121. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigefs/paths.py +0 -0
  122. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigefs/url_scanners.py +0 -0
  123. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigfs/paths.py +0 -0
  124. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigfs/url_scanners.py +0 -0
  125. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/cfs/file_scanner.py +0 -0
  126. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/cfs/url_scanners.py +0 -0
  127. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/exception_messages.py +0 -0
  128. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/file_funcs.py +0 -0
  129. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/paths.py +0 -0
  130. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/exception_messages.py +0 -0
  131. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/paths.py +0 -0
  132. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/hgefs/paths.py +0 -0
  133. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/hgefs/url_scanner.py +0 -0
  134. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/file_funcs.py +0 -0
  135. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/file_scanner.py +0 -0
  136. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/keys.py +0 -0
  137. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/metars/_clean_data.py +0 -0
  138. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/radar/url_scanner.py +0 -0
  139. {wxdata-2.2/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/soundings/_exceptions.py +0 -0
  140. {wxdata-2.2 → wxdata-2.3}/src/wxdata/post_processors/aigefs_post_processing.py +0 -0
  141. {wxdata-2.2 → wxdata-2.3}/src/wxdata/post_processors/aigfs_post_processing.py +0 -0
  142. {wxdata-2.2 → wxdata-2.3}/src/wxdata/post_processors/cfs_post_processing.py +0 -0
  143. {wxdata-2.2 → wxdata-2.3}/src/wxdata/post_processors/ecmwf_post_processing.py +0 -0
  144. {wxdata-2.2 → wxdata-2.3}/src/wxdata/post_processors/gefs_post_processing.py +0 -0
  145. {wxdata-2.2 → wxdata-2.3}/src/wxdata/post_processors/gfs_post_processing.py +0 -0
  146. {wxdata-2.2 → wxdata-2.3}/src/wxdata/post_processors/hgefs_post_processing.py +0 -0
  147. {wxdata-2.2 → wxdata-2.3}/src/wxdata/post_processors/rtma_post_processing.py +0 -0
  148. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/__init__.py +0 -0
  149. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/api.py +0 -0
  150. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/coords.py +0 -0
  151. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/exceptions.py +0 -0
  152. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/file_funcs.py +0 -0
  153. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/file_scanner.py +0 -0
  154. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/nomads_gribfilter.py +0 -0
  155. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/progress_bar.py +0 -0
  156. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/recycle_bin.py +0 -0
  157. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/scripts.py +0 -0
  158. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/tools.py +0 -0
  159. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/warnings.py +0 -0
  160. {wxdata-2.2 → wxdata-2.3}/src/wxdata/utils/xmacis2_cleanup.py +0 -0
  161. {wxdata-2.2 → wxdata-2.3}/src/wxdata.egg-info/dependency_links.txt +0 -0
  162. {wxdata-2.2 → wxdata-2.3}/src/wxdata.egg-info/requires.txt +0 -0
  163. {wxdata-2.2 → wxdata-2.3}/src/wxdata.egg-info/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wxdata
3
- Version: 2.2
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.
3
+ Version: 2.3
4
+ Summary: A Python package of end-to-end weather data clients & raw data clients with VPN/Proxy Server 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/wiki
7
7
  Project-URL: Repository, https://github.com/edrewitz/wxdata/tree/main
@@ -61,23 +61,23 @@ A Python package consisting of the following:
61
61
 
62
62
  # Table of Contents
63
63
 
64
- 1) [Installation Instructions](https://edrewitz.github.io/WxData/#installation-instructions)
64
+ 1) [Installation Instructions](https://github.com/edrewitz/WxData/wiki#installation-instructions)
65
65
 
66
- 2) [Server List (For End-To-End Clients That Can Rotate Between Servers)](https://edrewitz.github.io/WxData/#server-list)
66
+ 2) [Server List (For End-To-End Clients That Can Rotate Between Servers)](https://github.com/edrewitz/WxData/wiki#server-list)
67
67
 
68
- 3) [Proxy Server Configuration](https://edrewitz.github.io/WxData/#proxy-server-configuration)
68
+ 3) [Proxy Server Configuration](https://github.com/edrewitz/WxData/wiki#proxy-server-configuration)
69
69
 
70
- 4) [What makes WxData unique among various meteorological Python packages?](https://edrewitz.github.io/WxData/#what-makes-wxdata-unique-among-various-meteorological-python-packages)
70
+ 4) [What makes WxData unique among various meteorological Python packages?](https://github.com/edrewitz/WxData/wiki#what-makes-wxdata-unique-among-various-meteorological-python-packages)
71
71
 
72
- 5) [WxData Tutorials](https://edrewitz.github.io/WxData/#wxdata-tutorials)
72
+ 5) [WxData Tutorials](https://github.com/edrewitz/WxData/wiki#wxdata-tutorials)
73
73
 
74
- 6) [WxData Documentation](https://edrewitz.github.io/WxData/#wxdata-documentation)
74
+ 6) [WxData Documentation](https://github.com/edrewitz/WxData/wiki#wxdata-documentation)
75
75
 
76
- 7) [Importing Functions from WxData](https://edrewitz.github.io/WxData/#importing-functions-from-wxdata)
76
+ 7) [Importing Functions from WxData](https://github.com/edrewitz/WxData/wiki#importing-functions-from-wxdata)
77
77
 
78
- 8) [Citations](https://edrewitz.github.io/WxData/#citations)
78
+ 8) [Citations](https://github.com/edrewitz/WxData/wiki#citations)
79
79
 
80
- 9) [Data Sources]()
80
+ 9) [Data Sources](https://github.com/edrewitz/WxData/wiki#data-sources)
81
81
 
82
82
 
83
83
  ## Installation Instructions
@@ -210,7 +210,7 @@ proxies=None ---> proxies="http://your-proxy-address:port" ---> ds = ecmwf_ifs(p
210
210
  ```
211
211
  ```python
212
212
  # Here is our program
213
- from wxdata import get_observed_sounding_data
213
+ from wxdata import ecmwf_ifs
214
214
 
215
215
  proxies="https://your-proxy-address:port"
216
216
 
@@ -298,6 +298,16 @@ For more information on configuring proxies: https://requests.readthedocs.io/en/
298
298
 
299
299
  24) [Download Latest Fine Particulates (PM2.5) and Ozone (O3) Observations Using Air Now API](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/air_now_api.ipynb)
300
300
 
301
+ 25) [Download and plot the first 24 hours of the GDPS 500mb Geopotential Height, Relative Vorticity and Wind Forecast across CONUS & Southern Canada](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/gdps.ipynb)
302
+
303
+ 26) [Download and plot the first 24 hours of the RDPS 2-Meter Temperature & 10-Meter Wind Forecast across CONUS & Southern Canada](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/rdps.ipynb)
304
+
305
+ 27) [Download and plot the first 12 hours of the HRDPS 0-10cm Soil Temperature across British Columbia & Alberta](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/hrdps.ipynb)
306
+
307
+ 28) [Download the first 24 hours of the GEPS 850mb Temperature Forecast, find the ensemble mean and plot the GEPS Ensemble Mean 850mb Temperature Forecast](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/geps.ipynb)
308
+
309
+ 29) [Use the `cansips_forecast()` and `cansips_hindcast()` clients to download and plot the monthly 500mb Geopotential Height & 850mb Temperature Forecasts & Forecast Anomalies](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/cansips.ipynb)
310
+
301
311
  ### Advanced Users
302
312
 
303
313
  1) [Using the `client` module to download the latest HadCRUT5 Analysis netCDF file and open this dataset in xarray](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/hadcrut5.ipynb)
@@ -347,6 +357,13 @@ For more information on configuring proxies: https://requests.readthedocs.io/en/
347
357
  2. [AIGEFS Members (Surface Parameters)](https://edrewitz.github.io/WxData/aigefs_surface_members)
348
358
  3. [AIGEFS Ensemble Mean & Ensemble Spread](https://edrewitz.github.io/WxData/aigefs_single)
349
359
 
360
+ ##### ***Canadian Meteorological Centre***
361
+ 1. [GDPS](https://edrewitz.github.io/WxData/gdps)
362
+ 2. [RDPS](https://edrewitz.github.io/WxData/rdps)
363
+ 3. [HRDPS](https://edrewitz.github.io/WxData/hrdps)
364
+ 4. [GEPS](https://edrewitz.github.io/WxData/geps)
365
+ 5. [CanSIPS](https://edrewitz.github.io/WxData/cansips)
366
+
350
367
  ##### ***ECMWF Open Data***
351
368
  1. [ECMWF IFS](https://edrewitz.github.io/WxData/ECMWF_IFS)
352
369
  2. [ECMWF IFS Ensemble](https://edrewitz.github.io/WxData/ECMWF%20IFS%20Ensemble)
@@ -394,26 +411,26 @@ For more information on configuring proxies: https://requests.readthedocs.io/en/
394
411
  #### Post-Processors
395
412
 
396
413
  ##### ***GFS Post-Processing***
397
- 1. [Primary GFS Post-Processing](https://edrewitz.github.io/WxData/Primary%20GFS%20Post%20Processing)
398
- 2. [Secondary GFS Post-Processing](https://edrewitz.github.io/WxData/Secondary%20GFS%20Post%20Processing)
414
+ 1. [Primary GFS](https://edrewitz.github.io/WxData/Primary%20GFS%20Post%20Processing)
415
+ 2. [Secondary GFS](https://edrewitz.github.io/WxData/Secondary%20GFS%20Post%20Processing)
399
416
 
400
417
  ##### ***AIGFS Post-Processing***
401
- 1. [AIGFS Post-Processing](https://edrewitz.github.io/WxData/aigfs_post_processing)
418
+ 1. [AIGFS](https://edrewitz.github.io/WxData/aigfs_post_processing)
402
419
 
403
420
  ##### ***CFS Post-Processing***
404
- 1. [CFS Pressure Post-Processing](https://edrewitz.github.io/WxData/cfs_pressure_post_processing)
405
- 2. [CFS Flux Post-Processing](https://edrewitz.github.io/WxData/cfs_flux_post_processing)
421
+ 1. [CFS Pressure](https://edrewitz.github.io/WxData/cfs_pressure_post_processing)
422
+ 2. [CFS Flux](https://edrewitz.github.io/WxData/cfs_flux_post_processing)
406
423
 
407
424
  ##### ***GEFS Post-Processing***
408
- 1. [Primary GEFS Post-Processing](https://edrewitz.github.io/WxData/Primary%20GEFS%20Post-Processing)
409
- 2. [Secondary GEFS Post-Processing](https://edrewitz.github.io/WxData/Secondary%20GEFS%20Post%20Processing)
425
+ 1. [Primary GEFS](https://edrewitz.github.io/WxData/Primary%20GEFS%20Post-Processing)
426
+ 2. [Secondary GEFS](https://edrewitz.github.io/WxData/Secondary%20GEFS%20Post%20Processing)
410
427
 
411
428
  ##### ***AIGEFS Post-Processing***
412
- 1. [AIGEFS Members Post-Processing](https://edrewitz.github.io/WxData/aigefs_members_post_processing)
413
- 2. [AIGEFS Single Post-Processing](https://edrewitz.github.io/WxData/aigefs_single_post_processing)
429
+ 1. [AIGEFS Members](https://edrewitz.github.io/WxData/aigefs_members_post_processing)
430
+ 2. [AIGEFS Single](https://edrewitz.github.io/WxData/aigefs_single_post_processing)
414
431
 
415
432
  ##### ***HGEFS Post-Processing***
416
- 1. [HGEFS Post-Processing](https://edrewitz.github.io/WxData/hgefs_post_processing)
433
+ 1. [HGEFS](https://edrewitz.github.io/WxData/hgefs_post_processing)
417
434
 
418
435
  ##### ***ECMWF Post-Processing***
419
436
  1. [ECMWF IFS and IFS Ensemble](https://edrewitz.github.io/WxData/ECMWF%20IFS%20Post%20Processing)
@@ -423,6 +440,13 @@ For more information on configuring proxies: https://requests.readthedocs.io/en/
423
440
  ##### ***Real-Time Mesoscale Analysis Post-Processing***
424
441
  1. [RTMA](https://edrewitz.github.io/WxData/RTMA%20Post%20Processing)
425
442
 
443
+ ##### ***CMC Post Processing***
444
+ 1. [GDPS](https://edrewitz.github.io/WxData/gdps%20processing)
445
+ 2. [RDPS](https://edrewitz.github.io/WxData/rdps%20processing)
446
+ 3. [HRDPS](https://edrewitz.github.io/WxData/hrdps%20processing)
447
+ 4. [GEPS](https://edrewitz.github.io/WxData/geps%20processing)
448
+ 5. [CanSIPS](https://edrewitz.github.io/WxData/cansips%20processing)
449
+
426
450
  -----------------------------------------------
427
451
 
428
452
  #### Raw Data Clients
@@ -581,7 +605,7 @@ For more information on configuring proxies: https://requests.readthedocs.io/en/
581
605
 
582
606
  ## Importing Functions from WxData
583
607
 
584
- ```Python
608
+ ```python
585
609
  """
586
610
  This file hosts all of the functions in the WxData Python library that directly interact with the user.
587
611
 
@@ -623,27 +647,40 @@ These functions do the following:
623
647
  - When clear_recycle_bin=True, the user's recycle bin is also cleared.
624
648
  """
625
649
 
650
+ """
651
+ ********************************************************************************
652
+
653
+
654
+ ************ This section hosts the Model Data Clients. ***********************
655
+
656
+
657
+ ********************************************************************************
658
+ """
659
+
660
+ ##############
661
+ #### NOAA ####
662
+ ##############
626
663
  # Global Forecast System (GFS)
627
664
  # - GFS 0.25x0.25 Degree Primary Parameters
628
665
  # - GFS 0.25x0.25 Degree Secondary Parameters
629
666
  # - GFS 0.5x0.5 Degree
630
- from wxdata.gfs.gfs import(
667
+ from wxdata.model_data.noaa.gfs.gfs import(
631
668
  gfs_0p25,
632
669
  gfs_0p25_secondary_parameters,
633
670
  gfs_0p50
634
671
  )
635
672
 
636
673
  # AI Global Forecast System (AIGFS)
637
- from wxdata.aigfs.aigfs import aigfs
674
+ from wxdata.model_data.noaa.aigfs.aigfs import aigfs
638
675
 
639
676
  # Hybrid Global Ensemble Forecast System (HGEFS)
640
- from wxdata.hgefs.hgefs import hgefs_mean_spread
677
+ from wxdata.model_data.noaa.hgefs.hgefs import hgefs_mean_spread
641
678
 
642
679
  # Global Ensemble Forecast System (GEFS)
643
680
  # - GEFS 0.5x0.5 Degree Primary Parameters
644
681
  # - GEFS 0.5x0.5 Degree Secondary Parameters
645
682
  # - GEFS 0.25x0.25 Degree
646
- from wxdata.gefs.gefs import(
683
+ from wxdata.model_data.noaa.gefs.gefs import(
647
684
  gefs_0p50,
648
685
  gefs_0p50_secondary_parameters,
649
686
  gefs_0p25
@@ -652,7 +689,7 @@ from wxdata.gefs.gefs import(
652
689
  # Climate Forecast System (CFS)
653
690
  # - CFS Flux Products
654
691
  # - CFS Pressure Products
655
- from wxdata.cfs.cfs import(
692
+ from wxdata.model_data.noaa.cfs.cfs import(
656
693
  cfs_flux,
657
694
  cfs_pressure
658
695
  )
@@ -661,20 +698,30 @@ from wxdata.cfs.cfs import(
661
698
  # - AIGEFS Pressure Members (Pressure Level Variables)
662
699
  # - AIGEFS Surface Members (Surface Level Variables)
663
700
  # - AIGEFS Single (AIGEFS Ensemble Mean & AIGEFS Ensemble Spread)
664
- from wxdata.aigefs.aigefs import(
701
+ from wxdata.model_data.noaa.aigefs.aigefs import(
665
702
  aigefs_pressure_members,
666
703
  aigefs_surface_members,
667
704
  aigefs_single
668
705
  )
669
706
 
670
- # European Centre for Medium-Range Weather Forecasts (ECMWF)
707
+ # Real-Time Mesoscale Analysis (RTMA)
708
+ # - RTMA Latest
709
+ # - RTMA Comparison Between Two Times
710
+ from wxdata.model_data.noaa.rtma.rtma import(
711
+ rtma,
712
+ rtma_comparison
713
+ )
714
+
715
+ ##############################################################
716
+ # European Centre for Medium-Range Weather Forecasts (ECMWF) #
717
+ ##############################################################
671
718
  # - ECMWF IFS
672
719
  # - ECMWF IFS Ensemble
673
720
  # - ECMWF AIFS
674
721
  # - ECMWF AIFS Ensemble
675
722
  # - ECMWF IFS Wave
676
723
  # - ECMWF IFS Wave Ensemble
677
- from wxdata.ecmwf.ecmwf import(
724
+ from wxdata.model_data.ecmwf.ecmwf import(
678
725
  ecmwf_ifs,
679
726
  ecmwf_ifs_ens,
680
727
  ecmwf_aifs,
@@ -683,6 +730,34 @@ from wxdata.ecmwf.ecmwf import(
683
730
  ecmwf_ifs_wave_ens
684
731
  )
685
732
 
733
+ ##################################
734
+ # Canadian Meteorological Center #
735
+ ##################################
736
+ # - Canadian Global Deterministic Prediction System (GDPS)
737
+ # - Canadian Regional Deterministic Prediction System (RDPS)
738
+ # - Canadian High Resolution Deterministic Prediction System (HRDPS)
739
+ # - Canadian Global Ensemble Prediction System (GEPS)
740
+ # - Canadian Seasonal to Inter-annual Prediction System (CanSIPS) Forecasts
741
+ # - Canadian Seasonal to Inter-annual Prediction System (CanSIPS) Hindcasts
742
+ from wxdata.model_data.cmc.gdps.gdps import gdps
743
+ from wxdata.model_data.cmc.rdps.rdps import rdps
744
+ from wxdata.model_data.cmc.hrdps.hrdps import hrdps
745
+ from wxdata.model_data.cmc.geps.geps import geps
746
+ from wxdata.model_data.cmc.cansips.forecast.cansips_forecast import cansips_forecast
747
+ from wxdata.model_data.cmc.cansips.hindcast.cansips_hindcast import cansips_hindcast
748
+
749
+
750
+
751
+ """
752
+ ********************************************************************************
753
+
754
+
755
+ ************ This section hosts the Fuels Data Clients. **********************
756
+
757
+
758
+ ********************************************************************************
759
+ """
760
+
686
761
  # FEMS RAWS Network
687
762
  # - Single Station Weather Observations
688
763
  # - Single Station Fuels Observations
@@ -696,7 +771,7 @@ from wxdata.ecmwf.ecmwf import(
696
771
  # - Multi Station NFDRS Forecast
697
772
  # - Single Station Weather Forecast
698
773
  # - Multi Station Weather Forecast
699
- from wxdata.fems.observations import(
774
+ from wxdata.fuels_data.fems.observations import(
700
775
  get_single_raws_station_weather_observations,
701
776
  get_single_raws_station_fuels_observations,
702
777
  get_multi_raws_station_weather_observations,
@@ -714,50 +789,64 @@ from wxdata.fems.observations import(
714
789
  # FEMS RAWS Network
715
790
  # - Single Station Meta Data
716
791
  # - Multi Station Meta Data
717
- from wxdata.fems.meta_data import(
792
+ from wxdata.fuels_data.fems.meta_data import(
718
793
  get_single_raws_station_meta_data,
719
794
  get_multi_raws_station_meta_data
720
795
  )
721
796
 
722
- # Real-Time Mesoscale Analysis (RTMA)
723
- # - RTMA Latest
724
- # - RTMA Comparison Between Two Times
725
- from wxdata.rtma.rtma import(
726
- rtma,
727
- rtma_comparison
728
- )
797
+
798
+ """
799
+ ********************************************************************************
800
+
801
+
802
+ ************ This section hosts the Gridded Forecast Data Clients. ***********
803
+
804
+
805
+ ********************************************************************************
806
+ """
729
807
 
730
808
  # NOAA
731
809
  # - Storm Prediction Center Outlooks
732
810
  # - Climate Prediction Center Outlooks
733
811
  # - National Weather Service Forecasts
734
- from wxdata.noaa.nws import(
812
+ from wxdata.gridded_forecasts.noaa.nws.nws import(
735
813
  get_ndfd_grids,
736
814
  get_cpc_outlook
737
815
  )
738
816
 
817
+ """
818
+ *****************************************************************************
819
+
820
+
821
+ ************ This section hosts the Observational Data Clients. ************
822
+
823
+
824
+ *****************************************************************************
825
+ """
826
+
739
827
  # Observed Upper-Air Soundings
740
828
  # (University of Wyoming Database)
741
- from wxdata.soundings.wyoming_soundings import get_observed_sounding_data
829
+ from wxdata.observational_data.soundings.wyoming_soundings import get_observed_sounding_data
742
830
 
743
831
  # METAR Observational Data (From NOAA)
744
- from wxdata.metars.metar_obs import download_metar_data
832
+ from wxdata.observational_data.metars.metar_obs import download_metar_data
745
833
 
746
834
  # NEXRAD2 Radar Data
747
835
  # - NEXRAD2 Radar Single Station
748
836
  # - NEXRAD2 Radar Multi Station
749
- from wxdata.radar.nexrad2 import(
837
+ from wxdata.observational_data.radar.nexrad2 import(
750
838
  download_current_single_station_nexrad2_radar_data,
751
839
  download_current_multi_station_nexrad2_radar_data
752
840
  )
753
841
 
754
842
  """
755
- This section hosts all the functions and modules that involve post-processing the data.
756
- These are the functions and modules that:
843
+ *********************************************************************************
844
+
845
+
846
+ ************ This section hosts the Model Data Processors. *********************
757
847
 
758
- 1) Re-map the GRIB2 Variable Keys into Plain Language Keys
759
- 2) Build the xarray.array of the various datasets.
760
848
 
849
+ *********************************************************************************
761
850
  """
762
851
 
763
852
 
@@ -782,23 +871,29 @@ import wxdata.post_processors.ecmwf_post_processing as ecmwf_post_processing
782
871
  # Climate Forecast System (CFS)
783
872
  import wxdata.post_processors.cfs_post_processing as cfs_post_processing
784
873
 
874
+ # Canadian Meteorological Center Gridded Models
875
+ # - Canadian Global Deterministic Prediction System (GDPS)
876
+ # - Canadian Regional Deterministic Prediction System (RDPS)
877
+ # - Canadian High Resolution Deterministic Prediction System (HRDPS)
878
+ # - Canadian Global Ensemble Prediction System (GEPS)
879
+ # - Canadian Seasonal to Inter-annual Prediction System (CanSIPS) Forecast
880
+ # - Canadian Seasonal to Inter-annual Prediction System (CanSIPS) Hindcast
881
+ import wxdata.post_processors.cmc_post_processing as cmc_post_processing
882
+
785
883
  # Real-Time Mesoscale Analysis (RTMA)
786
884
  from wxdata.post_processors.rtma_post_processing import process_rtma_data
787
885
 
788
886
 
789
887
  """
790
- This section hosts the utility functions accessable to the user.
888
+ ****************************************************************************************************************
791
889
 
792
- These functions provide helpful utilities when analyzing weather data.
793
890
 
794
- Utility functions are geared towards the following types of users:
891
+ ************ This section hosts the Data Querying/Transforming Tools & Automation Tools. **********************
795
892
 
796
- 1) Users who want to use their own scripts to download the data however, they
797
- would like to use the wxdata post-processing capabilities.
798
-
799
- 2) Users who want to make hemispheric graphics or any graphics where cyclic points
800
- resolve missing data along the prime meridian or international dateline.
893
+
894
+ ****************************************************************************************************************
801
895
  """
896
+
802
897
  # WxData function using cartopy to make cyclic points
803
898
  # This is for users who wish to make graphics that cross the -180/180 degree longitude line
804
899
  # This is commonly used for Hemispheric graphics
@@ -821,9 +916,13 @@ from wxdata.utils.tools import(
821
916
  from wxdata.utils.scripts import run_external_scripts
822
917
 
823
918
  """
824
- This section hosts the various data clients that retrieve various types of data.
919
+ ***************************************************************************
920
+
921
+
922
+ ************ This section hosts the Raw Data Clients. ********************
923
+
825
924
 
826
- These clients can be easily configured to work on VPN/PROXY connections.
925
+ ***************************************************************************
827
926
  """
828
927
 
829
928
  # These are the wxdata HTTPS Clients with full VPN/PROXY Support
@@ -837,13 +936,13 @@ These clients can be easily configured to work on VPN/PROXY connections.
837
936
  import wxdata.client.client as client
838
937
 
839
938
  """
840
- ***************************************************************************
939
+ ***********************************************************************************
841
940
 
842
941
 
843
- ************ This section hosts the different API Interfaces. ***********
942
+ ************ This section hosts the API Interface Clients. ***********************
844
943
 
845
944
 
846
- ***************************************************************************
945
+ ***********************************************************************************
847
946
  """
848
947
  #######################
849
948
  ### Open-Meteo API ###
@@ -862,43 +961,43 @@ import wxdata.client.client as client
862
961
  # - UK Met Office (UKMO)
863
962
  # - Current Weather (Model Mosaic)
864
963
  # - Google (Weather Next 2 Ensemble)
865
- import wxdata.open_meteo_api.weather_forecasts.noaa as open_meteo_api_noaa
866
- import wxdata.open_meteo_api.weather_forecasts.ecmwf as open_meteo_api_ecmwf
867
- import wxdata.open_meteo_api.weather_forecasts.dwd as open_meteo_api_dwd
868
- import wxdata.open_meteo_api.weather_forecasts.meteo_france as open_meteo_api_meteo_france
869
- import wxdata.open_meteo_api.weather_forecasts.cmc as open_meteo_api_cmc
870
- import wxdata.open_meteo_api.weather_forecasts.jma as open_meteo_api_jma
871
- import wxdata.open_meteo_api.weather_forecasts.ukmo as open_meteo_api_ukmo
872
- import wxdata.open_meteo_api.weather_forecasts.current_weather as open_meteo_api_current_weather
873
- import wxdata.open_meteo_api.weather_forecasts.google as open_meteo_api_google
964
+ import wxdata.api.open_meteo_api.weather_forecasts.noaa as open_meteo_api_noaa
965
+ import wxdata.api.open_meteo_api.weather_forecasts.ecmwf as open_meteo_api_ecmwf
966
+ import wxdata.api.open_meteo_api.weather_forecasts.dwd as open_meteo_api_dwd
967
+ import wxdata.api.open_meteo_api.weather_forecasts.meteo_france as open_meteo_api_meteo_france
968
+ import wxdata.api.open_meteo_api.weather_forecasts.cmc as open_meteo_api_cmc
969
+ import wxdata.api.open_meteo_api.weather_forecasts.jma as open_meteo_api_jma
970
+ import wxdata.api.open_meteo_api.weather_forecasts.ukmo as open_meteo_api_ukmo
971
+ import wxdata.api.open_meteo_api.weather_forecasts.current_weather as open_meteo_api_current_weather
972
+ import wxdata.api.open_meteo_api.weather_forecasts.google as open_meteo_api_google
874
973
 
875
974
  ### Seasonal Forecasts (ECMWF EC46 & SEAS5) ###
876
975
 
877
976
  # - Daily Data (EC46 & SEAS5)
878
977
  # - Weekly Data (EC46)
879
978
  # - Monthly Data (SEAS5)
880
- import wxdata.open_meteo_api.seasonal_forecasts.ecmwf_daily as open_meteo_api_ecmwf_seasonal_forecasts_daily
881
- import wxdata.open_meteo_api.seasonal_forecasts.ecmwf_weekly as open_meteo_api_ecmwf_seasonal_forecasts_weekly
882
- import wxdata.open_meteo_api.seasonal_forecasts.ecmwf_monthly as open_meteo_api_ecmwf_seasonal_forecasts_monthly
979
+ import wxdata.api.open_meteo_api.seasonal_forecasts.ecmwf_daily as open_meteo_api_ecmwf_seasonal_forecasts_daily
980
+ import wxdata.api.open_meteo_api.seasonal_forecasts.ecmwf_weekly as open_meteo_api_ecmwf_seasonal_forecasts_weekly
981
+ import wxdata.api.open_meteo_api.seasonal_forecasts.ecmwf_monthly as open_meteo_api_ecmwf_seasonal_forecasts_monthly
883
982
 
884
983
  ### Climate Data ###
885
- import wxdata.open_meteo_api.climate.climate_data as open_meteo_api_climate_data
984
+ import wxdata.api.open_meteo_api.climate.climate_data as open_meteo_api_climate_data
886
985
 
887
986
  ### Air Quality Information ###
888
- import wxdata.open_meteo_api.air_quality.cams as open_meteo_api_air_quality
987
+ import wxdata.api.open_meteo_api.air_quality.cams as open_meteo_api_air_quality
889
988
 
890
989
  ### Marine Forecasts ###
891
990
  # - Meteo-France
892
991
  # - Deutscher Wetterdienst (DWD)
893
992
  # - ECMWF
894
993
  # - NOAA
895
- import wxdata.open_meteo_api.marine_forecasts.meteo_france as open_meteo_api_meteo_france_marine
896
- import wxdata.open_meteo_api.marine_forecasts.dwd as open_meteo_api_dwd_marine
897
- import wxdata.open_meteo_api.marine_forecasts.ecmwf as open_meteo_api_ecmwf_marine
898
- import wxdata.open_meteo_api.marine_forecasts.noaa as open_meteo_api_noaa_marine
994
+ import wxdata.api.open_meteo_api.marine_forecasts.meteo_france as open_meteo_api_meteo_france_marine
995
+ import wxdata.api.open_meteo_api.marine_forecasts.dwd as open_meteo_api_dwd_marine
996
+ import wxdata.api.open_meteo_api.marine_forecasts.ecmwf as open_meteo_api_ecmwf_marine
997
+ import wxdata.api.open_meteo_api.marine_forecasts.noaa as open_meteo_api_noaa_marine
899
998
 
900
999
  ### Solar Radiation Forecasts ###
901
- import wxdata.open_meteo_api.solar_radiation.solar_radiation as open_meteo_api_solar_radiation
1000
+ import wxdata.api.open_meteo_api.solar_radiation.solar_radiation as open_meteo_api_solar_radiation
902
1001
 
903
1002
  ###################
904
1003
  ### Air-Now API ###
@@ -907,7 +1006,7 @@ import wxdata.open_meteo_api.solar_radiation.solar_radiation as open_meteo_api_s
907
1006
  # Air-Now API: https://docs.airnowapi.org/
908
1007
 
909
1008
  # - Observations
910
- import wxdata.airnow_api.observations as air_now_observations
1009
+ import wxdata.api.airnow_api.observations as air_now_observations
911
1010
 
912
1011
  ```
913
1012
  -------------------------------------------
@@ -973,5 +1072,7 @@ import wxdata.airnow_api.observations as air_now_observations
973
1072
 
974
1073
  11) [Air Now API](https://docs.airnowapi.org/webservices)
975
1074
 
1075
+ 12) [Canadian Meteorological Centre](https://dd.weather.gc.ca/)
1076
+
976
1077
 
977
1078