disdrodb 0.0.21__py3-none-any.whl → 0.1.0__py3-none-any.whl

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 (264) hide show
  1. disdrodb/__init__.py +132 -15
  2. disdrodb/_config.py +4 -2
  3. disdrodb/_version.py +9 -4
  4. disdrodb/api/checks.py +264 -237
  5. disdrodb/api/configs.py +4 -8
  6. disdrodb/api/create_directories.py +235 -290
  7. disdrodb/api/info.py +217 -26
  8. disdrodb/api/io.py +295 -269
  9. disdrodb/api/path.py +597 -173
  10. disdrodb/api/search.py +486 -0
  11. disdrodb/{metadata/scripts → cli}/disdrodb_check_metadata_archive.py +12 -7
  12. disdrodb/{utils/pandas.py → cli/disdrodb_data_archive_directory.py} +9 -18
  13. disdrodb/cli/disdrodb_download_archive.py +86 -0
  14. disdrodb/cli/disdrodb_download_metadata_archive.py +53 -0
  15. disdrodb/cli/disdrodb_download_station.py +84 -0
  16. disdrodb/{api/scripts → cli}/disdrodb_initialize_station.py +22 -10
  17. disdrodb/cli/disdrodb_metadata_archive_directory.py +32 -0
  18. disdrodb/{data_transfer/scripts/disdrodb_download_station.py → cli/disdrodb_open_data_archive.py} +22 -22
  19. disdrodb/cli/disdrodb_open_logs_directory.py +69 -0
  20. disdrodb/{data_transfer/scripts/disdrodb_upload_station.py → cli/disdrodb_open_metadata_archive.py} +22 -24
  21. disdrodb/cli/disdrodb_open_metadata_directory.py +71 -0
  22. disdrodb/cli/disdrodb_open_product_directory.py +74 -0
  23. disdrodb/cli/disdrodb_open_readers_directory.py +32 -0
  24. disdrodb/{l0/scripts → cli}/disdrodb_run_l0.py +38 -31
  25. disdrodb/{l0/scripts → cli}/disdrodb_run_l0_station.py +32 -30
  26. disdrodb/{l0/scripts → cli}/disdrodb_run_l0a.py +30 -21
  27. disdrodb/{l0/scripts → cli}/disdrodb_run_l0a_station.py +24 -33
  28. disdrodb/{l0/scripts → cli}/disdrodb_run_l0b.py +30 -21
  29. disdrodb/{l0/scripts → cli}/disdrodb_run_l0b_station.py +25 -34
  30. disdrodb/cli/disdrodb_run_l0c.py +130 -0
  31. disdrodb/cli/disdrodb_run_l0c_station.py +129 -0
  32. disdrodb/cli/disdrodb_run_l1.py +122 -0
  33. disdrodb/cli/disdrodb_run_l1_station.py +121 -0
  34. disdrodb/cli/disdrodb_run_l2e.py +122 -0
  35. disdrodb/cli/disdrodb_run_l2e_station.py +122 -0
  36. disdrodb/cli/disdrodb_run_l2m.py +122 -0
  37. disdrodb/cli/disdrodb_run_l2m_station.py +122 -0
  38. disdrodb/cli/disdrodb_upload_archive.py +105 -0
  39. disdrodb/cli/disdrodb_upload_station.py +98 -0
  40. disdrodb/configs.py +90 -25
  41. disdrodb/data_transfer/__init__.py +22 -0
  42. disdrodb/data_transfer/download_data.py +87 -90
  43. disdrodb/data_transfer/upload_data.py +64 -37
  44. disdrodb/data_transfer/zenodo.py +15 -18
  45. disdrodb/docs.py +1 -1
  46. disdrodb/issue/__init__.py +17 -4
  47. disdrodb/issue/checks.py +10 -23
  48. disdrodb/issue/reader.py +9 -12
  49. disdrodb/issue/writer.py +14 -17
  50. disdrodb/l0/__init__.py +17 -26
  51. disdrodb/l0/check_configs.py +35 -23
  52. disdrodb/l0/check_standards.py +32 -42
  53. disdrodb/l0/configs/{Thies_LPM → LPM}/bins_diameter.yml +44 -44
  54. disdrodb/l0/configs/{Thies_LPM → LPM}/bins_velocity.yml +40 -40
  55. disdrodb/l0/configs/LPM/l0a_encodings.yml +80 -0
  56. disdrodb/l0/configs/{Thies_LPM → LPM}/l0b_cf_attrs.yml +62 -59
  57. disdrodb/l0/configs/{Thies_LPM → LPM}/l0b_encodings.yml +9 -9
  58. disdrodb/l0/configs/{Thies_LPM → LPM}/raw_data_format.yml +245 -245
  59. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/bins_diameter.yml +66 -66
  60. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/bins_velocity.yml +64 -64
  61. disdrodb/l0/configs/PARSIVEL/l0a_encodings.yml +32 -0
  62. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/l0b_cf_attrs.yml +22 -20
  63. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/l0b_encodings.yml +17 -17
  64. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/raw_data_format.yml +77 -77
  65. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/bins_diameter.yml +64 -64
  66. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/bins_velocity.yml +64 -64
  67. disdrodb/l0/configs/PARSIVEL2/l0a_encodings.yml +39 -0
  68. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/l0b_cf_attrs.yml +24 -22
  69. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/l0b_encodings.yml +20 -20
  70. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/raw_data_format.yml +98 -98
  71. disdrodb/l0/configs/{RD_80 → RD80}/bins_diameter.yml +40 -40
  72. disdrodb/l0/configs/RD80/l0a_encodings.yml +16 -0
  73. disdrodb/l0/configs/{RD_80 → RD80}/l0b_cf_attrs.yml +3 -3
  74. disdrodb/l0/configs/RD80/l0b_encodings.yml +135 -0
  75. disdrodb/l0/configs/{RD_80 → RD80}/raw_data_format.yml +48 -48
  76. disdrodb/l0/l0_reader.py +216 -340
  77. disdrodb/l0/l0a_processing.py +237 -208
  78. disdrodb/l0/l0b_nc_processing.py +227 -80
  79. disdrodb/l0/l0b_processing.py +93 -173
  80. disdrodb/l0/l0c_processing.py +627 -0
  81. disdrodb/l0/readers/{ARM → LPM/ARM}/ARM_LPM.py +36 -58
  82. disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +226 -0
  83. disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +185 -0
  84. disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +183 -0
  85. disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +179 -0
  86. disdrodb/l0/readers/{UK → LPM/UK}/DIVEN.py +14 -35
  87. disdrodb/l0/readers/PARSIVEL/AUSTRALIA/MELBOURNE_2007_PARSIVEL.py +157 -0
  88. disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +113 -0
  89. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/ARCTIC_2021.py +40 -57
  90. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/COMMON_2011.py +37 -54
  91. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/DAVOS_2009_2011.py +34 -51
  92. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_2009.py +34 -51
  93. disdrodb/l0/readers/{EPFL/PARADISO_2014.py → PARSIVEL/EPFL/EPFL_ROOF_2008.py} +38 -50
  94. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +105 -0
  95. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_ROOF_2011.py +34 -51
  96. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_ROOF_2012.py +33 -51
  97. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GENEPI_2007.py +25 -44
  98. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GRAND_ST_BERNARD_2007.py +25 -44
  99. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GRAND_ST_BERNARD_2007_2.py +25 -44
  100. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/HPICONET_2010.py +34 -51
  101. disdrodb/l0/readers/{EPFL/EPFL_ROOF_2010.py → PARSIVEL/EPFL/HYMEX_LTE_SOP2.py} +37 -50
  102. disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +111 -0
  103. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/HYMEX_LTE_SOP4.py +36 -54
  104. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/LOCARNO_2018.py +34 -52
  105. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/LOCARNO_2019.py +38 -56
  106. disdrodb/l0/readers/PARSIVEL/EPFL/PARADISO_2014.py +105 -0
  107. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/PARSIVEL_2007.py +27 -45
  108. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/PLATO_2019.py +24 -44
  109. disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +140 -0
  110. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/RACLETS_2019_WJF.py +41 -59
  111. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/RIETHOLZBACH_2011.py +34 -51
  112. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +117 -0
  113. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +137 -0
  114. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/UNIL_2022.py +42 -55
  115. disdrodb/l0/readers/PARSIVEL/GPM/IFLOODS.py +104 -0
  116. disdrodb/l0/readers/{GPM → PARSIVEL/GPM}/LPVEX.py +29 -48
  117. disdrodb/l0/readers/PARSIVEL/GPM/MC3E.py +184 -0
  118. disdrodb/l0/readers/PARSIVEL/NCAR/CCOPE_2015.py +113 -0
  119. disdrodb/l0/readers/{NCAR/VORTEX_SE_2016_P1.py → PARSIVEL/NCAR/OWLES_MIPS.py} +46 -72
  120. disdrodb/l0/readers/PARSIVEL/NCAR/PECAN_MOBILE.py +125 -0
  121. disdrodb/l0/readers/{NCAR/OWLES_MIPS.py → PARSIVEL/NCAR/PLOWS_MIPS.py} +45 -64
  122. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2009.py +114 -0
  123. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +176 -0
  124. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +183 -0
  125. disdrodb/l0/readers/{ARM/ARM_LD.py → PARSIVEL2/ARM/ARM_PARSIVEL2.py} +27 -50
  126. disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +163 -0
  127. disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +163 -0
  128. disdrodb/l0/readers/{DENMARK → PARSIVEL2/DENMARK}/EROSION_nc.py +14 -35
  129. disdrodb/l0/readers/PARSIVEL2/FRANCE/SIRTA_PARSIVEL2.py +119 -0
  130. disdrodb/l0/readers/PARSIVEL2/GPM/GCPEX.py +104 -0
  131. disdrodb/l0/readers/PARSIVEL2/GPM/NSSTC.py +176 -0
  132. disdrodb/l0/readers/PARSIVEL2/ITALY/GID_PARSIVEL2.py +32 -0
  133. disdrodb/l0/readers/PARSIVEL2/MEXICO/OH_IIUNAM_nc.py +56 -0
  134. disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_FP3.py +120 -0
  135. disdrodb/l0/readers/{NCAR → PARSIVEL2/NCAR}/PECAN_MIPS.py +45 -64
  136. disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +181 -0
  137. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +160 -0
  138. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +160 -0
  139. disdrodb/l0/readers/{NCAR/PLOWS_MIPS.py → PARSIVEL2/NCAR/VORTEX_SE_2016_P1.py} +49 -66
  140. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +118 -0
  141. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +152 -0
  142. disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT.py +166 -0
  143. disdrodb/l0/readers/{NCAR/RELAMPAGO_RD80.py → RD80/BRAZIL/CHUVA_RD80.py} +36 -60
  144. disdrodb/l0/readers/{BRAZIL → RD80/BRAZIL}/GOAMAZON_RD80.py +36 -55
  145. disdrodb/l0/readers/{NCAR → RD80/NCAR}/CINDY_2011_RD80.py +35 -54
  146. disdrodb/l0/readers/{BRAZIL/CHUVA_RD80.py → RD80/NCAR/RELAMPAGO_RD80.py} +40 -54
  147. disdrodb/l0/readers/template_reader_raw_netcdf_data.py +62 -0
  148. disdrodb/l0/readers/{reader_template.py → template_reader_raw_text_data.py} +20 -44
  149. disdrodb/l0/routines.py +885 -581
  150. disdrodb/l0/standards.py +72 -236
  151. disdrodb/l0/template_tools.py +104 -109
  152. disdrodb/l1/__init__.py +17 -0
  153. disdrodb/l1/beard_model.py +716 -0
  154. disdrodb/l1/encoding_attrs.py +620 -0
  155. disdrodb/l1/fall_velocity.py +260 -0
  156. disdrodb/l1/filters.py +192 -0
  157. disdrodb/l1/processing.py +200 -0
  158. disdrodb/l1/resampling.py +236 -0
  159. disdrodb/l1/routines.py +357 -0
  160. disdrodb/l1_env/__init__.py +17 -0
  161. disdrodb/l1_env/routines.py +38 -0
  162. disdrodb/l2/__init__.py +17 -0
  163. disdrodb/l2/empirical_dsd.py +1735 -0
  164. disdrodb/l2/event.py +388 -0
  165. disdrodb/l2/processing.py +519 -0
  166. disdrodb/l2/processing_options.py +213 -0
  167. disdrodb/l2/routines.py +868 -0
  168. disdrodb/metadata/__init__.py +9 -2
  169. disdrodb/metadata/checks.py +165 -118
  170. disdrodb/metadata/download.py +81 -0
  171. disdrodb/metadata/geolocation.py +146 -0
  172. disdrodb/metadata/info.py +20 -13
  173. disdrodb/metadata/manipulation.py +1 -1
  174. disdrodb/metadata/reader.py +59 -8
  175. disdrodb/metadata/search.py +77 -144
  176. disdrodb/metadata/standards.py +7 -8
  177. disdrodb/metadata/writer.py +8 -14
  178. disdrodb/psd/__init__.py +38 -0
  179. disdrodb/psd/fitting.py +2146 -0
  180. disdrodb/psd/models.py +774 -0
  181. disdrodb/routines.py +1176 -0
  182. disdrodb/scattering/__init__.py +28 -0
  183. disdrodb/scattering/axis_ratio.py +344 -0
  184. disdrodb/scattering/routines.py +456 -0
  185. disdrodb/utils/__init__.py +17 -0
  186. disdrodb/utils/attrs.py +208 -0
  187. disdrodb/utils/cli.py +269 -0
  188. disdrodb/utils/compression.py +60 -42
  189. disdrodb/utils/dask.py +62 -0
  190. disdrodb/utils/decorators.py +110 -0
  191. disdrodb/utils/directories.py +107 -46
  192. disdrodb/utils/encoding.py +127 -0
  193. disdrodb/utils/list.py +29 -0
  194. disdrodb/utils/logger.py +168 -46
  195. disdrodb/utils/time.py +657 -0
  196. disdrodb/utils/warnings.py +30 -0
  197. disdrodb/utils/writer.py +57 -0
  198. disdrodb/utils/xarray.py +138 -47
  199. disdrodb/utils/yaml.py +0 -1
  200. disdrodb/viz/__init__.py +17 -0
  201. disdrodb/viz/plots.py +17 -0
  202. disdrodb-0.1.0.dist-info/METADATA +321 -0
  203. disdrodb-0.1.0.dist-info/RECORD +216 -0
  204. {disdrodb-0.0.21.dist-info → disdrodb-0.1.0.dist-info}/WHEEL +1 -1
  205. disdrodb-0.1.0.dist-info/entry_points.txt +30 -0
  206. disdrodb/data_transfer/scripts/disdrodb_download_archive.py +0 -53
  207. disdrodb/data_transfer/scripts/disdrodb_upload_archive.py +0 -57
  208. disdrodb/l0/configs/OTT_Parsivel/l0a_encodings.yml +0 -32
  209. disdrodb/l0/configs/OTT_Parsivel2/l0a_encodings.yml +0 -39
  210. disdrodb/l0/configs/RD_80/l0a_encodings.yml +0 -16
  211. disdrodb/l0/configs/RD_80/l0b_encodings.yml +0 -135
  212. disdrodb/l0/configs/Thies_LPM/l0a_encodings.yml +0 -80
  213. disdrodb/l0/io.py +0 -257
  214. disdrodb/l0/l0_processing.py +0 -1091
  215. disdrodb/l0/readers/AUSTRALIA/MELBOURNE_2007_OTT.py +0 -178
  216. disdrodb/l0/readers/AUSTRALIA/MELBOURNE_2007_THIES.py +0 -247
  217. disdrodb/l0/readers/BRAZIL/CHUVA_LPM.py +0 -204
  218. disdrodb/l0/readers/BRAZIL/CHUVA_OTT.py +0 -183
  219. disdrodb/l0/readers/BRAZIL/GOAMAZON_LPM.py +0 -204
  220. disdrodb/l0/readers/BRAZIL/GOAMAZON_OTT.py +0 -183
  221. disdrodb/l0/readers/CHINA/CHONGQING.py +0 -131
  222. disdrodb/l0/readers/EPFL/EPFL_ROOF_2008.py +0 -128
  223. disdrodb/l0/readers/EPFL/HYMEX_LTE_SOP2.py +0 -127
  224. disdrodb/l0/readers/EPFL/HYMEX_LTE_SOP3.py +0 -129
  225. disdrodb/l0/readers/EPFL/RACLETS_2019.py +0 -158
  226. disdrodb/l0/readers/EPFL/SAMOYLOV_2017.py +0 -136
  227. disdrodb/l0/readers/EPFL/SAMOYLOV_2019.py +0 -158
  228. disdrodb/l0/readers/FRANCE/SIRTA_OTT2.py +0 -138
  229. disdrodb/l0/readers/GPM/GCPEX.py +0 -123
  230. disdrodb/l0/readers/GPM/IFLOODS.py +0 -123
  231. disdrodb/l0/readers/GPM/MC3E.py +0 -123
  232. disdrodb/l0/readers/GPM/NSSTC.py +0 -164
  233. disdrodb/l0/readers/ITALY/GID.py +0 -199
  234. disdrodb/l0/readers/MEXICO/OH_IIUNAM_nc.py +0 -92
  235. disdrodb/l0/readers/NCAR/CCOPE_2015.py +0 -133
  236. disdrodb/l0/readers/NCAR/PECAN_FP3.py +0 -137
  237. disdrodb/l0/readers/NCAR/PECAN_MOBILE.py +0 -144
  238. disdrodb/l0/readers/NCAR/RELAMPAGO_OTT.py +0 -195
  239. disdrodb/l0/readers/NCAR/SNOWIE_PJ.py +0 -172
  240. disdrodb/l0/readers/NCAR/SNOWIE_SB.py +0 -179
  241. disdrodb/l0/readers/NCAR/VORTEX2_2009.py +0 -133
  242. disdrodb/l0/readers/NCAR/VORTEX2_2010.py +0 -188
  243. disdrodb/l0/readers/NCAR/VORTEX2_2010_UF.py +0 -191
  244. disdrodb/l0/readers/NCAR/VORTEX_SE_2016_P2.py +0 -135
  245. disdrodb/l0/readers/NCAR/VORTEX_SE_2016_PIPS.py +0 -170
  246. disdrodb/l0/readers/NETHERLANDS/DELFT.py +0 -187
  247. disdrodb/l0/readers/SPAIN/SBEGUERIA.py +0 -179
  248. disdrodb/l0/scripts/disdrodb_run_l0b_concat.py +0 -93
  249. disdrodb/l0/scripts/disdrodb_run_l0b_concat_station.py +0 -85
  250. disdrodb/utils/netcdf.py +0 -452
  251. disdrodb/utils/scripts.py +0 -102
  252. disdrodb-0.0.21.dist-info/AUTHORS.md +0 -18
  253. disdrodb-0.0.21.dist-info/METADATA +0 -186
  254. disdrodb-0.0.21.dist-info/RECORD +0 -168
  255. disdrodb-0.0.21.dist-info/entry_points.txt +0 -15
  256. /disdrodb/l0/configs/{RD_80 → RD80}/bins_velocity.yml +0 -0
  257. /disdrodb/l0/manuals/{Thies_LPM.pdf → LPM.pdf} +0 -0
  258. /disdrodb/l0/manuals/{ODM_470.pdf → ODM470.pdf} +0 -0
  259. /disdrodb/l0/manuals/{OTT_Parsivel.pdf → PARSIVEL.pdf} +0 -0
  260. /disdrodb/l0/manuals/{OTT_Parsivel2.pdf → PARSIVEL2.pdf} +0 -0
  261. /disdrodb/l0/manuals/{PWS_100.pdf → PWS100.pdf} +0 -0
  262. /disdrodb/l0/manuals/{RD_80.pdf → RD80.pdf} +0 -0
  263. {disdrodb-0.0.21.dist-info → disdrodb-0.1.0.dist-info/licenses}/LICENSE +0 -0
  264. {disdrodb-0.0.21.dist-info → disdrodb-0.1.0.dist-info}/top_level.txt +0 -0
@@ -16,354 +16,296 @@
16
16
  # You should have received a copy of the GNU General Public License
17
17
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
18
  # -----------------------------------------------------------------------------.
19
- """Tools to create Raw, L0A and L0B DISDRODB directories."""
19
+ """Tools to create RAW, L0A and L0B DISDRODB directories."""
20
20
 
21
- # L0A and L0B from raw NC: create_l0_directory_structure(raw_dir, processed_dir)
22
- # L0B: create_directory_structure(processed_dir)
21
+ # L0A and L0B from raw NC: create_l0_directory_structure(...)
22
+ # L0B: create_product_directory(...)
23
23
 
24
24
  import logging
25
25
  import os
26
26
  import shutil
27
27
 
28
28
  from disdrodb.api.checks import (
29
+ check_campaign_name,
30
+ check_data_archive_dir,
31
+ check_data_availability,
32
+ check_data_source,
33
+ check_issue_file,
29
34
  check_metadata_file,
30
- check_processed_dir,
31
35
  check_product,
32
- check_raw_dir,
33
- check_station_has_data,
34
- has_available_station_files,
35
- )
36
- from disdrodb.api.info import (
37
- infer_campaign_name_from_path,
38
- infer_data_source_from_path,
39
- infer_disdrodb_tree_path_components,
36
+ has_available_data,
37
+ select_required_product_kwargs,
40
38
  )
41
39
  from disdrodb.api.path import (
42
- define_campaign_dir,
40
+ define_data_dir,
43
41
  define_issue_dir,
44
- define_issue_filepath,
42
+ define_logs_dir,
45
43
  define_metadata_dir,
46
44
  define_metadata_filepath,
47
- define_station_dir,
48
45
  )
49
- from disdrodb.configs import get_base_dir
46
+ from disdrodb.configs import get_data_archive_dir, get_metadata_archive_dir
50
47
  from disdrodb.utils.directories import (
51
- check_directory_exists,
52
- copy_file,
53
- create_required_directory,
48
+ create_directory,
54
49
  remove_if_exists,
55
50
  )
56
51
 
57
52
  logger = logging.getLogger(__name__)
58
53
 
54
+ ####--------------------------------------------------------------------------------.
55
+ #### DISDRODB Products Directories
59
56
 
60
- #### DISDRODB Products directories
61
- def _check_data_source_consistency(raw_dir: str, processed_dir: str) -> str:
62
- """Check that 'raw_dir' and 'processed_dir' have same data_source.
63
-
64
- Parameters
65
- ----------
66
- raw_dir : str
67
- Path of the raw campaign directory
68
- processed_dir : str
69
- Path of the processed campaign directory
70
-
71
- Returns
72
- -------
73
- str
74
- data_source in capital letter.
75
57
 
76
- Raises
77
- ------
78
- ValueError
79
- Error if the data_source of the two directory paths does not match.
80
- """
81
- raw_data_source = infer_data_source_from_path(raw_dir)
82
- processed_data_source = infer_data_source_from_path(processed_dir)
83
- if raw_data_source != processed_data_source:
84
- msg = f"'raw_dir' and 'processed_dir' must ends with same <DATA_SOURCE>: {raw_data_source}"
58
+ def ensure_empty_data_dir(data_dir, force):
59
+ """Remove the content of the data_dir directory."""
60
+ # If force=True, remove all the directory content
61
+ if force:
62
+ shutil.rmtree(data_dir)
63
+ # Recreate the directory
64
+ create_directory(data_dir)
65
+ else:
66
+ msg = f"The product directory {data_dir} already contains files and force=False."
85
67
  logger.error(msg)
86
68
  raise ValueError(msg)
87
- return raw_data_source.upper()
88
69
 
89
70
 
90
- def _check_campaign_name_consistency(raw_dir: str, processed_dir: str) -> str:
91
- """Check that 'raw_dir' and 'processed_dir' have same campaign_name.
92
-
93
- Parameters
94
- ----------
95
- raw_dir : str
96
- Path of the raw campaign directory
97
- processed_dir : str
98
- Path of the processed campaign directory
71
+ def create_l0_directory_structure(
72
+ data_archive_dir,
73
+ metadata_archive_dir,
74
+ data_source,
75
+ campaign_name,
76
+ station_name,
77
+ force,
78
+ product,
79
+ ):
80
+ """Create directory structure for the first L0 DISDRODB product.
99
81
 
100
- Returns
101
- -------
102
- str
103
- Campaign name in capital letter.
82
+ If the input data are raw text files, use ``product = "L0A"``
83
+ If the input data are raw netCDF files, use ``product = "L0B"``
104
84
 
105
- Raises
106
- ------
107
- ValueError
108
- Error if the campaign_name of the two directory paths does not match.
85
+ ``product = "L0A"`` will call ``run_l0a``.
86
+ ``product = "L0B"`` will call ``run_l0b_nc``.
109
87
  """
110
- raw_campaign_name = infer_campaign_name_from_path(raw_dir)
111
- processed_campaign_name = infer_campaign_name_from_path(processed_dir)
112
- if raw_campaign_name != processed_campaign_name:
113
- msg = f"'raw_dir' and 'processed_dir' must ends with same <CAMPAIGN_NAME>: {raw_campaign_name}"
114
- logger.error(msg)
115
- raise ValueError(msg)
116
- return raw_campaign_name.upper()
117
-
88
+ from disdrodb.configs import get_data_archive_dir, get_metadata_archive_dir
118
89
 
119
- def _copy_station_metadata(
120
- data_source: str, campaign_name: str, station_name: str, base_dir: str = None, check_validity: bool = False
121
- ) -> None:
122
- """Copy the station YAML file from the raw_dir/metadata into processed_dir/metadata
90
+ # Retrieve the DISDRODB Metadata Archive directory
91
+ data_archive_dir = get_data_archive_dir(data_archive_dir)
92
+ metadata_archive_dir = get_metadata_archive_dir(metadata_archive_dir)
123
93
 
124
- Parameters
125
- ----------
126
- raw_dir : str
127
- Path of the raw campaign directory
128
- processed_dir : str
129
- Path of the processed campaign directory
94
+ # Check <DATA_SOURCE> and <CAMPAIGN_NAME> are upper case
95
+ check_campaign_name(campaign_name)
96
+ check_data_source(data_source)
130
97
 
131
- Raises
132
- ------
133
- ValueError
134
- Error if the copy fails.
135
- """
136
- # Check the raw metadata YAML file exists
137
- raw_metadata_filepath = check_metadata_file(
98
+ # Check raw station data are available
99
+ check_data_availability(
138
100
  product="RAW",
139
- base_dir=base_dir,
101
+ data_archive_dir=data_archive_dir,
140
102
  data_source=data_source,
141
103
  campaign_name=campaign_name,
142
104
  station_name=station_name,
143
- check_validity=check_validity,
144
105
  )
145
- # Define the destination filepath
146
- processed_metadata_filepath = define_metadata_filepath(
147
- product="L0A",
148
- base_dir=base_dir,
106
+
107
+ # Check there is a valid metadata YAML file
108
+ check_metadata_file(
109
+ metadata_archive_dir=metadata_archive_dir,
149
110
  data_source=data_source,
150
111
  campaign_name=campaign_name,
151
112
  station_name=station_name,
152
113
  )
153
- # Copy the metadata file
154
- copy_file(
155
- src_filepath=raw_metadata_filepath,
156
- dst_filepath=processed_metadata_filepath,
157
- )
158
- return None
159
114
 
115
+ # Check there is valid issue YAML file
116
+ check_issue_file(
117
+ metadata_archive_dir=metadata_archive_dir,
118
+ data_source=data_source,
119
+ campaign_name=campaign_name,
120
+ station_name=station_name,
121
+ )
160
122
 
161
- def _check_pre_existing_station_data(
162
- data_source: str, campaign_name: str, station_name: str, product: str, base_dir=None, force=False
163
- ):
164
- """Check for pre-existing station data.
165
-
166
- - If force=True, remove all data inside the station directory.
167
- - If force=False, raise error.
168
-
169
- NOTE: force=False behaviour could be changed to enable updating of missing files.
170
- This would require also adding code to check whether a downstream file already exist.
171
- """
172
- # Check if there are available data
173
- available_data = has_available_station_files(
123
+ # Define product output data directory
124
+ data_dir = define_data_dir(
174
125
  product=product,
175
- base_dir=base_dir,
126
+ data_archive_dir=data_archive_dir,
176
127
  data_source=data_source,
177
128
  campaign_name=campaign_name,
178
129
  station_name=station_name,
179
130
  )
180
- # Define the station directory path
181
- station_dir = define_station_dir(
131
+
132
+ # Create product output data directory (if it doesn't exist)
133
+ create_directory(data_dir)
134
+
135
+ # Check if product files are already available
136
+ available_data = has_available_data(
182
137
  product=product,
183
- base_dir=base_dir,
138
+ data_archive_dir=data_archive_dir,
184
139
  data_source=data_source,
185
140
  campaign_name=campaign_name,
186
141
  station_name=station_name,
187
142
  )
188
- # If the station data are already present:
189
- # - If force=True, remove all data inside the station directory
190
- # - If force=False, raise error
143
+
144
+ # If product files are already available:
145
+ # - If force=True, remove all data inside the product directory
146
+ # - If force=False, raise an error
191
147
  if available_data:
192
- # Check is a directory
193
- check_directory_exists(station_dir)
194
- # If force=True, remove all the content
195
- if force:
196
- # Remove all station directory content
197
- shutil.rmtree(station_dir)
198
- else:
199
- msg = f"The station directory {station_dir} already exists and force=False."
200
- logger.error(msg)
201
- raise ValueError(msg)
148
+ ensure_empty_data_dir(data_dir, force=force)
202
149
 
150
+ return data_dir
203
151
 
204
- def create_l0_directory_structure(
205
- raw_dir,
206
- processed_dir,
152
+
153
+ def create_product_directory(
154
+ data_source,
155
+ campaign_name,
207
156
  station_name,
208
- force,
209
157
  product,
210
- verbose=False,
158
+ force,
159
+ data_archive_dir=None,
160
+ metadata_archive_dir=None,
161
+ # Product Options
162
+ **product_kwargs,
211
163
  ):
212
- """Create directory structure for the first L0 DISDRODB product.
164
+ """Initialize the directory structure for a DISDRODB product.
213
165
 
214
- If the input data are raw text files --> product = "L0A" (run_l0a)
215
- If the input data are raw netCDF files --> product = "L0B" (run_l0b_nc)
166
+ If product files already exists:
167
+ - If ``force=True``, it remove all existing data inside the product directory.
168
+ - If ``force=False``, it raise an error.
216
169
  """
217
- # Check inputs
218
- raw_dir = check_raw_dir(raw_dir=raw_dir, station_name=station_name)
219
- processed_dir = check_processed_dir(processed_dir=processed_dir)
220
-
221
- # Check consistent data_source and campaign name
222
- _ = _check_data_source_consistency(raw_dir=raw_dir, processed_dir=processed_dir)
223
- _ = _check_campaign_name_consistency(raw_dir=raw_dir, processed_dir=processed_dir)
224
-
225
- # Retrieve components
226
- base_dir, product_type, data_source, campaign_name = infer_disdrodb_tree_path_components(processed_dir)
227
-
228
- # Check station data are available
229
- check_station_has_data(
230
- product="RAW",
231
- base_dir=base_dir,
232
- data_source=data_source,
233
- campaign_name=campaign_name,
234
- station_name=station_name,
235
- )
236
-
237
- # Create required directories (if they don't exist)
238
- create_required_directory(processed_dir, dir_name="metadata")
239
- create_required_directory(processed_dir, dir_name="info")
240
- create_required_directory(processed_dir, dir_name=product)
170
+ # NOTE: ``force=False`` behaviour could be changed to enable updating of missing files.
171
+ # This would require also adding code to check whether a downstream file already exist.
241
172
 
242
- # Copy the station metadata
243
- _copy_station_metadata(
244
- base_dir=base_dir,
245
- data_source=data_source,
246
- campaign_name=campaign_name,
247
- station_name=station_name,
248
- )
249
- # Remove <product>/<station> directory if force=True
250
- _check_pre_existing_station_data(
251
- product=product,
252
- base_dir=base_dir,
253
- data_source=data_source,
254
- campaign_name=campaign_name,
255
- station_name=station_name,
256
- force=force,
257
- )
258
- # Create the <product>/<station> directory
259
- create_required_directory(os.path.join(processed_dir, product), dir_name=station_name)
173
+ from disdrodb.api.search import get_required_product
260
174
 
175
+ # Get DISDRODB base directory
176
+ data_archive_dir = get_data_archive_dir(data_archive_dir)
177
+ metadata_archive_dir = get_metadata_archive_dir(metadata_archive_dir)
261
178
 
262
- def create_directory_structure(processed_dir, product, station_name, force):
263
- """Create directory structure for L0B and higher DISDRODB products."""
264
179
  # Check inputs
265
180
  check_product(product)
266
- processed_dir = check_processed_dir(processed_dir=processed_dir)
267
-
268
- base_dir, product_type, data_source, campaign_name = infer_disdrodb_tree_path_components(processed_dir)
269
181
 
270
182
  # Determine required product
271
- if product == "L0B":
272
- required_product = "L0A"
273
- else:
274
- raise NotImplementedError("product {product} not yet implemented.")
183
+ required_product = get_required_product(product)
275
184
 
276
- # Check station is available in the previous product level
277
- check_station_has_data(
185
+ # Check station data is available in the previous product level
186
+ required_product_kwargs = select_required_product_kwargs(required_product, product_kwargs)
187
+ check_data_availability(
278
188
  product=required_product,
279
- base_dir=base_dir,
189
+ data_archive_dir=data_archive_dir,
280
190
  data_source=data_source,
281
191
  campaign_name=campaign_name,
282
192
  station_name=station_name,
193
+ # Product options
194
+ **required_product_kwargs,
283
195
  )
284
196
 
285
197
  # Check metadata file is available
286
198
  check_metadata_file(
287
- product=required_product,
288
- base_dir=base_dir,
199
+ metadata_archive_dir=metadata_archive_dir,
200
+ data_source=data_source,
201
+ campaign_name=campaign_name,
202
+ station_name=station_name,
203
+ )
204
+
205
+ # Define product output data directory
206
+ data_dir = define_data_dir(
207
+ product=product,
208
+ data_archive_dir=data_archive_dir,
289
209
  data_source=data_source,
290
210
  campaign_name=campaign_name,
291
211
  station_name=station_name,
212
+ # Product options
213
+ **product_kwargs,
292
214
  )
293
215
 
294
- # Create required directory (if it doesn't exist)
295
- create_required_directory(processed_dir, dir_name=product)
216
+ # Create product output data directory (if it doesn't exist)
217
+ create_directory(data_dir)
296
218
 
297
- # Remove <product>/<station_name> directory if force=True
298
- _check_pre_existing_station_data(
219
+ # Check if product files are already available
220
+ available_data = has_available_data(
299
221
  product=product,
300
- base_dir=base_dir,
222
+ data_archive_dir=data_archive_dir,
301
223
  data_source=data_source,
302
224
  campaign_name=campaign_name,
303
225
  station_name=station_name,
304
- force=force,
226
+ # Product options
227
+ **product_kwargs,
305
228
  )
306
229
 
230
+ # If product files are already available:
231
+ # - If force=True, remove all data inside the product directory
232
+ # - If force=False, raise an error
233
+ if available_data:
234
+ ensure_empty_data_dir(data_dir, force=force)
307
235
 
308
- #### DISDRODB Station Initialization
236
+ # Return product directory
237
+ return data_dir
309
238
 
310
239
 
311
- def _create_station_directories(
240
+ def create_logs_directory(
241
+ product,
312
242
  data_source,
313
243
  campaign_name,
314
244
  station_name,
315
- product="RAW",
316
- base_dir=None,
245
+ data_archive_dir=None,
246
+ # Product options
247
+ **product_kwargs,
317
248
  ):
318
- """Create the /metadata, /issue and /data/<station_name> directories of a station."""
319
- # Create directory structure
320
- _ = create_station_directory(
321
- base_dir=base_dir,
249
+ """Initialize the logs directory structure for a DISDRODB product."""
250
+ # Define logs directory
251
+ logs_dir = define_logs_dir(
322
252
  product=product,
253
+ data_archive_dir=data_archive_dir,
323
254
  data_source=data_source,
324
255
  campaign_name=campaign_name,
325
256
  station_name=station_name,
326
- )
327
- _ = create_metadata_directory(
328
- base_dir=base_dir, product=product, data_source=data_source, campaign_name=campaign_name
257
+ # Product options
258
+ **product_kwargs,
329
259
  )
330
260
 
331
- if product.upper() == "RAW":
332
- _ = create_issue_directory(base_dir=base_dir, data_source=data_source, campaign_name=campaign_name)
261
+ # Ensure empty log directory
262
+ if os.path.isdir(logs_dir):
263
+ shutil.rmtree(logs_dir)
333
264
 
265
+ # Create logs directory
266
+ os.makedirs(logs_dir, exist_ok=True)
334
267
 
335
- def create_metadata_directory(base_dir, product, data_source, campaign_name):
336
- """Create metadata directory."""
337
- metadata_dir = define_metadata_dir(
338
- base_dir=base_dir,
268
+ # Return logs directory
269
+ return logs_dir
270
+
271
+
272
+ ####--------------------------------------------------------------------------------.
273
+ #### DISDRODB Station Initialization
274
+
275
+
276
+ def create_data_directory(data_archive_dir, product, data_source, campaign_name, station_name, **product_kwargs):
277
+ """Create station product data directory."""
278
+ data_dir = define_data_dir(
279
+ data_archive_dir=data_archive_dir,
339
280
  product=product,
340
281
  data_source=data_source,
341
282
  campaign_name=campaign_name,
283
+ station_name=station_name,
342
284
  check_exists=False,
285
+ **product_kwargs,
343
286
  )
344
- if not os.path.exists(metadata_dir):
345
- os.makedirs(metadata_dir, exist_ok=True)
346
- return str(metadata_dir)
287
+ if not os.path.exists(data_dir):
288
+ os.makedirs(data_dir, exist_ok=True)
289
+ return str(data_dir)
347
290
 
348
291
 
349
- def create_station_directory(base_dir, product, data_source, campaign_name, station_name):
350
- """Create station data directory."""
351
- station_dir = define_station_dir(
352
- base_dir=base_dir,
353
- product=product,
292
+ def create_metadata_directory(metadata_archive_dir, data_source, campaign_name):
293
+ """Create metadata directory."""
294
+ metadata_dir = define_metadata_dir(
295
+ metadata_archive_dir=metadata_archive_dir,
354
296
  data_source=data_source,
355
297
  campaign_name=campaign_name,
356
- station_name=station_name,
357
298
  check_exists=False,
358
299
  )
359
- if not os.path.exists(station_dir):
360
- os.makedirs(station_dir, exist_ok=True)
361
- return str(station_dir)
300
+ if not os.path.exists(metadata_dir):
301
+ os.makedirs(metadata_dir, exist_ok=True)
302
+ return str(metadata_dir)
362
303
 
363
304
 
364
- def create_issue_directory(base_dir, data_source, campaign_name):
305
+ def create_issue_directory(metadata_archive_dir, data_source, campaign_name):
306
+ """Create issue directory."""
365
307
  issue_dir = define_issue_dir(
366
- base_dir=base_dir,
308
+ metadata_archive_dir=metadata_archive_dir,
367
309
  data_source=data_source,
368
310
  campaign_name=campaign_name,
369
311
  check_exists=False,
@@ -377,107 +319,110 @@ def create_initial_station_structure(
377
319
  data_source,
378
320
  campaign_name,
379
321
  station_name,
380
- base_dir=None,
322
+ data_archive_dir=None,
323
+ metadata_archive_dir=None,
381
324
  ):
382
- """Create the DISDRODB Data Archive structure for a single station."""
325
+ """Create the DISDRODB Data and Metadata Archive structure for a single station."""
383
326
  from disdrodb.issue.writer import create_station_issue
384
327
  from disdrodb.metadata.writer import create_station_metadata
385
328
 
329
+ data_archive_dir = get_data_archive_dir(data_archive_dir)
330
+ metadata_archive_dir = get_metadata_archive_dir(metadata_archive_dir)
331
+
386
332
  # Check if already been defined
387
333
  # - Check presence of metadata file
388
334
  metadata_filepath = define_metadata_filepath(
389
- base_dir=base_dir,
335
+ metadata_archive_dir=metadata_archive_dir,
390
336
  data_source=data_source,
391
337
  campaign_name=campaign_name,
392
338
  station_name=station_name,
393
- product="RAW",
394
- check_exists=False,
395
339
  )
396
340
  if os.path.exists(metadata_filepath):
397
341
  raise ValueError(
398
- f"A metadata file already exists at {metadata_filepath}. "
399
- "The station is already part of the DISDRODB Archive or "
400
- "or you already initialized the directory structure for the station !"
342
+ f"The DISDRODB Metadata Archive has already a metadata file "
343
+ f"for {data_source} {campaign_name} {station_name} at '{metadata_filepath}'. "
344
+ "You might have already initialized the directory structure for such station !",
401
345
  )
402
346
 
403
- # Create directory structure (/metadata, /issue and /data/<station_name>)
404
- _create_station_directories(
405
- base_dir=base_dir,
347
+ # -----------------------.
348
+ # Create station directory in the DISDRODB Data Archive
349
+ data_dir = create_data_directory(
350
+ data_archive_dir=data_archive_dir,
351
+ product="RAW",
406
352
  data_source=data_source,
407
353
  campaign_name=campaign_name,
408
354
  station_name=station_name,
409
- product="RAW",
410
355
  )
411
356
 
412
- # Add default station metadata file
357
+ # -----------------------.
358
+ # Create issue and metadata files in the DISDRODB Metadata Archive
359
+ # - Create /metadata and /issue directories in the DISDRODB Metadata Archive
360
+ _ = create_metadata_directory(
361
+ metadata_archive_dir=metadata_archive_dir,
362
+ data_source=data_source,
363
+ campaign_name=campaign_name,
364
+ )
365
+ _ = create_issue_directory(
366
+ metadata_archive_dir=metadata_archive_dir,
367
+ data_source=data_source,
368
+ campaign_name=campaign_name,
369
+ )
370
+
371
+ # - Add an empty/default metadata file (to be filled by data contributor)
413
372
  create_station_metadata(
414
- base_dir=base_dir,
373
+ metadata_archive_dir=metadata_archive_dir,
415
374
  data_source=data_source,
416
375
  campaign_name=campaign_name,
417
376
  station_name=station_name,
418
377
  )
419
- # Add default station issue file
378
+ # - Add an empty issue file (to be filled by data contributor if necessary)
420
379
  create_station_issue(
421
- base_dir=base_dir,
380
+ metadata_archive_dir=metadata_archive_dir,
422
381
  data_source=data_source,
423
382
  campaign_name=campaign_name,
424
383
  station_name=station_name,
425
384
  )
426
385
 
427
- # Report location of the campaign directory
428
- campaign_dir = define_campaign_dir(
429
- base_dir=base_dir, data_source=data_source, campaign_name=campaign_name, product="RAW"
430
- )
431
- print(f"Initial station directory structure created at: {campaign_dir}")
386
+ # --------------------------------------------------------------------------.
387
+ # Report next steps to contribute data to DISDRODB
388
+ print("The DISDRODB Metadata and Data Archive directories have been initialized.")
389
+ print("To contribute your data to DISDRODB:")
390
+ print(f"1. Place you raw data within the '{data_dir}' directory.")
391
+ print(f"2. Fill the metadata fields of the '{metadata_filepath}' file.")
432
392
 
433
393
 
394
+ ####--------------------------------------------------------------------------------.
434
395
  #### DISDRODB upload/download testing
435
- def create_test_archive(test_base_dir, data_source, campaign_name, station_name, base_dir=None, force=False):
396
+ def create_test_archive(
397
+ test_data_archive_dir,
398
+ data_source,
399
+ campaign_name,
400
+ station_name,
401
+ data_archive_dir=None,
402
+ metadata_archive_dir=None,
403
+ force=False,
404
+ ):
436
405
  """Create test DISDRODB Archive for a single existing station.
437
406
 
438
407
  This function is used to make a copy of metadata and issue files of a stations.
439
408
  This enable to then test data download and DISDRODB processing.
440
409
  """
441
- # Check test_base_dir is not equal to true base_dir
442
- if test_base_dir == get_base_dir(base_dir):
443
- raise ValueError("Provide a test_base_dir directory different from the true DISDRODB base directory !")
410
+ # Check metadata repository is available
411
+ metadata_archive_dir = get_metadata_archive_dir(metadata_archive_dir)
412
+
413
+ # Check test_data_archive_dir is not equal to true data_archive_dir
414
+ test_data_archive_dir = check_data_archive_dir(test_data_archive_dir)
415
+ if test_data_archive_dir == get_data_archive_dir(data_archive_dir):
416
+ raise ValueError(
417
+ "Provide a test_data_archive_dir directory different from the true DISDRODB Data Archive directory !",
418
+ )
444
419
 
445
420
  # Create test DISDRODB base directory
446
- remove_if_exists(test_base_dir, force=force)
447
- os.makedirs(test_base_dir, exist_ok=True)
421
+ remove_if_exists(test_data_archive_dir, force=force)
422
+ os.makedirs(test_data_archive_dir, exist_ok=True)
448
423
 
449
- # Create directories (/metadata, /issue and /data/<station_name>)
450
- _create_station_directories(
451
- base_dir=test_base_dir,
452
- product="RAW",
453
- data_source=data_source,
454
- campaign_name=campaign_name,
455
- station_name=station_name,
456
- )
457
- # Copy metadata and issue files in the test archive
458
- src_metadata_fpath = define_metadata_filepath(
459
- product="RAW",
460
- data_source=data_source,
461
- campaign_name=campaign_name,
462
- station_name=station_name,
463
- base_dir=base_dir,
464
- )
465
- dst_metadata_fpath = define_metadata_filepath(
466
- product="RAW",
467
- data_source=data_source,
468
- campaign_name=campaign_name,
469
- station_name=station_name,
470
- base_dir=test_base_dir,
471
- )
472
- src_issue_fpath = define_issue_filepath(
473
- data_source=data_source,
474
- campaign_name=campaign_name,
475
- station_name=station_name,
476
- base_dir=base_dir,
477
- )
478
- dst_issue_fpath = define_issue_filepath(
479
- data_source=data_source, campaign_name=campaign_name, station_name=station_name, base_dir=test_base_dir
424
+ tree = f"{data_source} {campaign_name} {station_name}"
425
+ print(
426
+ f"The test DISDRODB Data Archive for {tree} has been set up at {test_data_archive_dir} !",
480
427
  )
481
- copy_file(src_issue_fpath, dst_issue_fpath)
482
- copy_file(src_metadata_fpath, dst_metadata_fpath)
483
- print(f"The test DISDRODB archive for {data_source} {campaign_name} {station_name} has been set up !")
428
+ return test_data_archive_dir