@hestia-earth/data-validation 0.37.7 → 0.37.9

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 (411) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +17 -0
  3. package/dist/validations.d.ts +10 -0
  4. package/dist/validations.js +10 -0
  5. package/package.json +4 -3
  6. package/search-results.json +1 -1
  7. package/src/version.ts +1 -1
  8. package/validation.json +639 -0
  9. package/.coveragerc +0 -14
  10. package/.dockerignore +0 -19
  11. package/.eslintignore +0 -17
  12. package/.eslintrc.js +0 -11
  13. package/.flake8 +0 -5
  14. package/.gitlab/issue_templates/new validation.md +0 -82
  15. package/.gitlab-ci.yml +0 -216
  16. package/.readthedocs.yml +0 -24
  17. package/CODEOWNERS +0 -11
  18. package/Dockerfile +0 -13
  19. package/MANIFEST.in +0 -2
  20. package/bin/hestia-validate-data +0 -80
  21. package/build_mocking.py +0 -14
  22. package/commitlint.config.js +0 -1
  23. package/docs/Makefile +0 -20
  24. package/docs/_static/styles.css +0 -4
  25. package/docs/_templates/custom-class-template.rst +0 -34
  26. package/docs/_templates/custom-module-template.rst +0 -66
  27. package/docs/_templates/layout.html +0 -4
  28. package/docs/conf.py +0 -74
  29. package/docs/index.rst +0 -42
  30. package/docs/make.bat +0 -35
  31. package/docs/requirements.txt +0 -13
  32. package/envs/.develop.env +0 -1
  33. package/envs/.master.env +0 -1
  34. package/guide-assets/.gitkeep +0 -0
  35. package/hestia_earth/validation/README.md +0 -5
  36. package/hestia_earth/validation/__init__.py +0 -32
  37. package/hestia_earth/validation/distribution.py +0 -22
  38. package/hestia_earth/validation/gee.py +0 -162
  39. package/hestia_earth/validation/log.py +0 -44
  40. package/hestia_earth/validation/models.py +0 -141
  41. package/hestia_earth/validation/preload_requests.py +0 -61
  42. package/hestia_earth/validation/terms.py +0 -88
  43. package/hestia_earth/validation/utils.py +0 -444
  44. package/hestia_earth/validation/validators/__init__.py +0 -141
  45. package/hestia_earth/validation/validators/aggregated_cycle.py +0 -32
  46. package/hestia_earth/validation/validators/aggregated_shared.py +0 -37
  47. package/hestia_earth/validation/validators/animal.py +0 -88
  48. package/hestia_earth/validation/validators/completeness.py +0 -252
  49. package/hestia_earth/validation/validators/cycle.py +0 -1123
  50. package/hestia_earth/validation/validators/distribution.py +0 -86
  51. package/hestia_earth/validation/validators/emission.py +0 -109
  52. package/hestia_earth/validation/validators/impact_assessment.py +0 -138
  53. package/hestia_earth/validation/validators/indicator.py +0 -154
  54. package/hestia_earth/validation/validators/infrastructure.py +0 -25
  55. package/hestia_earth/validation/validators/input.py +0 -268
  56. package/hestia_earth/validation/validators/management.py +0 -131
  57. package/hestia_earth/validation/validators/measurement.py +0 -368
  58. package/hestia_earth/validation/validators/organisation.py +0 -43
  59. package/hestia_earth/validation/validators/practice.py +0 -590
  60. package/hestia_earth/validation/validators/product.py +0 -263
  61. package/hestia_earth/validation/validators/property.py +0 -266
  62. package/hestia_earth/validation/validators/shared.py +0 -940
  63. package/hestia_earth/validation/validators/site.py +0 -312
  64. package/hestia_earth/validation/validators/source.py +0 -20
  65. package/hestia_earth/validation/validators/transformation.py +0 -250
  66. package/hestia_earth/validation/version.py +0 -1
  67. package/layer/build.sh +0 -34
  68. package/layer/deploy.sh +0 -18
  69. package/release.sh +0 -11
  70. package/requirements-ci.txt +0 -6
  71. package/requirements-test.txt +0 -4
  72. package/requirements.txt +0 -2
  73. package/run-docker-test.sh +0 -7
  74. package/run-docker.sh +0 -9
  75. package/run.py +0 -99
  76. package/scripts/build_docs.py +0 -283
  77. package/scripts/build_validation_list.py +0 -160
  78. package/scripts/guide-create-branch.sh +0 -15
  79. package/scripts/update-package-version.js +0 -28
  80. package/setup.py +0 -35
  81. package/tests/Dockerfile +0 -13
  82. package/tests/__init__.py +0 -3
  83. package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/invalid-no-impactAssessment.json +0 -64
  84. package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/invalid-world.json +0 -69
  85. package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/valid.json +0 -69
  86. package/tests/fixtures/animal/duplicated-input-cycle/invalid.json +0 -98
  87. package/tests/fixtures/animal/duplicated-input-cycle/valid.json +0 -91
  88. package/tests/fixtures/animal/pregnancyRateTotal/invalid.json +0 -49
  89. package/tests/fixtures/animal/pregnancyRateTotal/valid.json +0 -60
  90. package/tests/fixtures/animal/required/invalid.json +0 -59
  91. package/tests/fixtures/animal/required/valid.json +0 -72
  92. package/tests/fixtures/completeness/all-values/warning.json +0 -22
  93. package/tests/fixtures/completeness/animalPopulation/invalid.json +0 -58
  94. package/tests/fixtures/completeness/animalPopulation/valid-animals.json +0 -71
  95. package/tests/fixtures/completeness/animalPopulation/valid-incomplete.json +0 -58
  96. package/tests/fixtures/completeness/animalPopulation/valid-no-liveAnimals.json +0 -37
  97. package/tests/fixtures/completeness/blank-nodes/agri-food processor-invalid.json +0 -52
  98. package/tests/fixtures/completeness/blank-nodes/invalid.json +0 -124
  99. package/tests/fixtures/completeness/blank-nodes/valid.json +0 -128
  100. package/tests/fixtures/completeness/cropland/site.json +0 -16
  101. package/tests/fixtures/completeness/cropland/valid.json +0 -22
  102. package/tests/fixtures/completeness/cropland/warning.json +0 -22
  103. package/tests/fixtures/completeness/freshForage/error-animals.json +0 -63
  104. package/tests/fixtures/completeness/freshForage/error-products.json +0 -65
  105. package/tests/fixtures/completeness/freshForage/valid-animal-inputs.json +0 -63
  106. package/tests/fixtures/completeness/freshForage/valid-animals.json +0 -63
  107. package/tests/fixtures/completeness/freshForage/valid-not-grazing-liveAnimal.json +0 -55
  108. package/tests/fixtures/completeness/freshForage/valid-not-liveAnimal.json +0 -47
  109. package/tests/fixtures/completeness/freshForage/valid-products.json +0 -68
  110. package/tests/fixtures/completeness/ingredient/invalid-agri-food-processor.json +0 -37
  111. package/tests/fixtures/completeness/ingredient/invalid.json +0 -49
  112. package/tests/fixtures/completeness/ingredient/valid-agri-food-processor-complete.json +0 -49
  113. package/tests/fixtures/completeness/ingredient/valid-agri-food-processor-incomplete.json +0 -37
  114. package/tests/fixtures/completeness/ingredient/valid.json +0 -49
  115. package/tests/fixtures/completeness/material/error.json +0 -49
  116. package/tests/fixtures/completeness/material/valid-fuel-material.json +0 -60
  117. package/tests/fixtures/completeness/material/valid-incomplete.json +0 -36
  118. package/tests/fixtures/completeness/material/valid-no-fuel.json +0 -36
  119. package/tests/fixtures/completeness/valid.json +0 -22
  120. package/tests/fixtures/cycle/aboveGroundCropResidue/invalid.json +0 -76
  121. package/tests/fixtures/cycle/aboveGroundCropResidue/valid.json +0 -76
  122. package/tests/fixtures/cycle/aggregated-valid.json +0 -102
  123. package/tests/fixtures/cycle/coverCrop/invalid.json +0 -64
  124. package/tests/fixtures/cycle/coverCrop/valid-not-coverCrop.json +0 -54
  125. package/tests/fixtures/cycle/coverCrop/valid.json +0 -64
  126. package/tests/fixtures/cycle/cropResidue/complete/invalid.json +0 -56
  127. package/tests/fixtures/cycle/cropResidue/complete/valid.json +0 -82
  128. package/tests/fixtures/cycle/cropResidue/incomplete/invalid.json +0 -42
  129. package/tests/fixtures/cycle/cropResidue/incomplete/valid.json +0 -56
  130. package/tests/fixtures/cycle/dates/invalid-emissions.json +0 -70
  131. package/tests/fixtures/cycle/liveAnimal-animalProduct-mapping/invalid.json +0 -63
  132. package/tests/fixtures/cycle/liveAnimal-animalProduct-mapping/valid.json +0 -63
  133. package/tests/fixtures/cycle/maximumCycleDuration/invalid-dates-year-only.json +0 -48
  134. package/tests/fixtures/cycle/maximumCycleDuration/invalid-dates.json +0 -48
  135. package/tests/fixtures/cycle/maximumCycleDuration/invalid.json +0 -48
  136. package/tests/fixtures/cycle/maximumCycleDuration/valid-dates-year-only.json +0 -48
  137. package/tests/fixtures/cycle/maximumCycleDuration/valid-dates.json +0 -48
  138. package/tests/fixtures/cycle/maximumCycleDuration/valid.json +0 -48
  139. package/tests/fixtures/cycle/otherSites/cycleDuration/invalid.json +0 -52
  140. package/tests/fixtures/cycle/otherSites/cycleDuration/valid-no-siteDuration.json +0 -40
  141. package/tests/fixtures/cycle/otherSites/cycleDuration/valid.json +0 -52
  142. package/tests/fixtures/cycle/practices/stockingDensityPermanentPastureAverage/invalid.json +0 -56
  143. package/tests/fixtures/cycle/practices/stockingDensityPermanentPastureAverage/valid.json +0 -65
  144. package/tests/fixtures/cycle/primary-product-as-input/invalid.json +0 -59
  145. package/tests/fixtures/cycle/primary-product-as-input/valid.json +0 -48
  146. package/tests/fixtures/cycle/product-linked-ia/cycle.json +0 -66
  147. package/tests/fixtures/cycle/product-linked-ia/invalid-multiple.json +0 -58
  148. package/tests/fixtures/cycle/product-linked-ia/valid.json +0 -57
  149. package/tests/fixtures/cycle/products/animals/invalid.json +0 -69
  150. package/tests/fixtures/cycle/products/animals/valid.json +0 -58
  151. package/tests/fixtures/cycle/riceGrainInHuskFlooded-minimumCycleDuration/invalid.json +0 -53
  152. package/tests/fixtures/cycle/riceGrainInHuskFlooded-minimumCycleDuration/valid.json +0 -53
  153. package/tests/fixtures/cycle/siteDuration/crop/invalid.json +0 -53
  154. package/tests/fixtures/cycle/siteDuration/crop/valid-different-duration.json +0 -53
  155. package/tests/fixtures/cycle/siteDuration/crop/valid-same-duration.json +0 -53
  156. package/tests/fixtures/cycle/siteDuration/invalid.json +0 -41
  157. package/tests/fixtures/cycle/siteDuration/valid-no-siteDuration.json +0 -40
  158. package/tests/fixtures/cycle/siteDuration/valid-otherSites.json +0 -48
  159. package/tests/fixtures/cycle/siteDuration/valid.json +0 -45
  160. package/tests/fixtures/cycle/substrate/required/invalid.json +0 -50
  161. package/tests/fixtures/cycle/substrate/required/valid.json +0 -60
  162. package/tests/fixtures/cycle/valid.json +0 -343
  163. package/tests/fixtures/emission/linked-terms/inputs/invalid.json +0 -78
  164. package/tests/fixtures/emission/linked-terms/inputs/valid.json +0 -106
  165. package/tests/fixtures/emission/linked-terms/transformation/error.json +0 -104
  166. package/tests/fixtures/emission/linked-terms/transformation/valid.json +0 -107
  167. package/tests/fixtures/emission/linked-terms/transformation/warning.json +0 -76
  168. package/tests/fixtures/emission/methodTier-background/invalid.json +0 -60
  169. package/tests/fixtures/emission/methodTier-background/valid.json +0 -60
  170. package/tests/fixtures/emission/not-relevant/invalid.json +0 -71
  171. package/tests/fixtures/emission/not-relevant/valid.json +0 -95
  172. package/tests/fixtures/emission/not-relevant-methodTier/invalid.json +0 -70
  173. package/tests/fixtures/emission/not-relevant-methodTier/valid.json +0 -95
  174. package/tests/fixtures/impactAssessment/aggregated-valid.json +0 -43
  175. package/tests/fixtures/impactAssessment/cycle-contains-product/invalid.json +0 -34
  176. package/tests/fixtures/impactAssessment/cycle-contains-product/valid.json +0 -34
  177. package/tests/fixtures/impactAssessment/cycle-endDate/invalid.json +0 -26
  178. package/tests/fixtures/impactAssessment/cycle-endDate/valid.json +0 -26
  179. package/tests/fixtures/impactAssessment/valid.json +0 -93
  180. package/tests/fixtures/indicator/characterisedIndicator-methodModel/invalid.json +0 -52
  181. package/tests/fixtures/indicator/characterisedIndicator-methodModel/valid.json +0 -52
  182. package/tests/fixtures/indicator/ionisingCompounds/invalid.json +0 -23
  183. package/tests/fixtures/indicator/ionisingCompounds/valid.json +0 -23
  184. package/tests/fixtures/indicator/landTransformation/invalid-grouped.json +0 -257
  185. package/tests/fixtures/indicator/landTransformation/invalid.json +0 -100
  186. package/tests/fixtures/indicator/landTransformation/valid-grouped-full.json +0 -507
  187. package/tests/fixtures/indicator/landTransformation/valid-grouped.json +0 -507
  188. package/tests/fixtures/indicator/landTransformation/valid.json +0 -100
  189. package/tests/fixtures/infrastructure/lifespan/invalid.json +0 -26
  190. package/tests/fixtures/infrastructure/lifespan/valid.json +0 -45
  191. package/tests/fixtures/input/animalFeed-fate/invalid.json +0 -103
  192. package/tests/fixtures/input/animalFeed-fate/valid.json +0 -90
  193. package/tests/fixtures/input/country/invalid.json +0 -64
  194. package/tests/fixtures/input/country/valid.json +0 -64
  195. package/tests/fixtures/input/distribution/animalHousing.json +0 -103
  196. package/tests/fixtures/input/distribution/complete/invalid.json +0 -177
  197. package/tests/fixtures/input/distribution/complete/valid.json +0 -163
  198. package/tests/fixtures/input/distribution/incomplete/valid.json +0 -139
  199. package/tests/fixtures/input/impactAssessment/invalid.json +0 -99
  200. package/tests/fixtures/input/impactAssessment/valid.json +0 -89
  201. package/tests/fixtures/input/input-as-product/invalid.json +0 -57
  202. package/tests/fixtures/input/input-as-product/valid.json +0 -59
  203. package/tests/fixtures/input/mustIncludeId/invalid.json +0 -13
  204. package/tests/fixtures/input/mustIncludeId/valid-multiple-ids.json +0 -31
  205. package/tests/fixtures/input/mustIncludeId/valid.json +0 -22
  206. package/tests/fixtures/input/saplings/invalid.json +0 -58
  207. package/tests/fixtures/input/saplings/valid-no-saplings.json +0 -58
  208. package/tests/fixtures/input/saplings/valid-not-plantation.json +0 -58
  209. package/tests/fixtures/input/saplings/valid.json +0 -58
  210. package/tests/fixtures/integration/distribution/product-yield-invalid.json +0 -54
  211. package/tests/fixtures/management/cycle-overlap/cycles.json +0 -39
  212. package/tests/fixtures/management/cycle-overlap/invalid.json +0 -26
  213. package/tests/fixtures/management/cycle-overlap/valid.json +0 -26
  214. package/tests/fixtures/management/exists/invalid.json +0 -13
  215. package/tests/fixtures/management/exists/valid.json +0 -25
  216. package/tests/fixtures/management/fallow-dates/invalid.json +0 -24
  217. package/tests/fixtures/management/fallow-dates/valid.json +0 -24
  218. package/tests/fixtures/management/termType/invalid-cropland.json +0 -35
  219. package/tests/fixtures/management/termType/invalid-permanent-pasture.json +0 -25
  220. package/tests/fixtures/management/termType/valid-cropland.json +0 -55
  221. package/tests/fixtures/management/termType/valid-no-management.json +0 -13
  222. package/tests/fixtures/management/termType/valid-permanent-pasture.json +0 -35
  223. package/tests/fixtures/measurement/depths/invalid.json +0 -44
  224. package/tests/fixtures/measurement/depths/valid.json +0 -50
  225. package/tests/fixtures/measurement/models/valid.json +0 -33
  226. package/tests/fixtures/measurement/models/warning-no-value.json +0 -30
  227. package/tests/fixtures/measurement/models/warning.json +0 -33
  228. package/tests/fixtures/measurement/pond-measurements/invalid.json +0 -11
  229. package/tests/fixtures/measurement/pond-measurements/valid.json +0 -23
  230. package/tests/fixtures/measurement/required-depths/error.json +0 -71
  231. package/tests/fixtures/measurement/required-depths/valid.json +0 -126
  232. package/tests/fixtures/measurement/required-depths/warning.json +0 -29
  233. package/tests/fixtures/measurement/soilTexture/missing-texture-value.json +0 -227
  234. package/tests/fixtures/measurement/soilTexture/percent-invalid.json +0 -110
  235. package/tests/fixtures/measurement/soilTexture/percent-missing-value.json +0 -43
  236. package/tests/fixtures/measurement/soilTexture/percent-valid.json +0 -110
  237. package/tests/fixtures/measurement/startDate-endDate-required/invalid.json +0 -32
  238. package/tests/fixtures/measurement/startDate-endDate-required/valid.json +0 -46
  239. package/tests/fixtures/measurement/unique/invalid.json +0 -28
  240. package/tests/fixtures/measurement/unique/valid.json +0 -16
  241. package/tests/fixtures/measurement/value-length/invalid.json +0 -46
  242. package/tests/fixtures/measurement/value-length/valid.json +0 -44
  243. package/tests/fixtures/measurement/water-salinity/invalid.json +0 -33
  244. package/tests/fixtures/measurement/water-salinity/valid-brakish.json +0 -40
  245. package/tests/fixtures/measurement/water-salinity/valid.json +0 -33
  246. package/tests/fixtures/organisation/valid.json +0 -26
  247. package/tests/fixtures/practice/croppingDuration/riceGrainInHuskFlooded/invalid.json +0 -63
  248. package/tests/fixtures/practice/croppingDuration/riceGrainInHuskFlooded/valid.json +0 -63
  249. package/tests/fixtures/practice/defaultValue/invalid.json +0 -12
  250. package/tests/fixtures/practice/defaultValue/valid.json +0 -15
  251. package/tests/fixtures/practice/excretaManagement/invalid.json +0 -50
  252. package/tests/fixtures/practice/excretaManagement/valid.json +0 -60
  253. package/tests/fixtures/practice/irrigated-complete/invalid.json +0 -47
  254. package/tests/fixtures/practice/irrigated-complete/valid-incomplete.json +0 -47
  255. package/tests/fixtures/practice/irrigated-complete/valid.json +0 -60
  256. package/tests/fixtures/practice/landCover-products/invalid.json +0 -58
  257. package/tests/fixtures/practice/landCover-products/valid-coverCrop.json +0 -69
  258. package/tests/fixtures/practice/landCover-products/valid.json +0 -58
  259. package/tests/fixtures/practice/liveAnimal-system/invalid.json +0 -58
  260. package/tests/fixtures/practice/liveAnimal-system/valid.json +0 -69
  261. package/tests/fixtures/practice/longFallowDuration/invalid.json +0 -20
  262. package/tests/fixtures/practice/longFallowDuration/valid.json +0 -20
  263. package/tests/fixtures/practice/noTillage/invalid.json +0 -23
  264. package/tests/fixtures/practice/noTillage/valid-value-not-100.json +0 -23
  265. package/tests/fixtures/practice/noTillage/valid.json +0 -21
  266. package/tests/fixtures/practice/pastureGrass/key-termType/invalid.json +0 -16
  267. package/tests/fixtures/practice/pastureGrass/key-termType/valid.json +0 -16
  268. package/tests/fixtures/practice/pastureGrass/key-value/invalid-numbers.json +0 -67
  269. package/tests/fixtures/practice/pastureGrass/key-value/invalid.json +0 -67
  270. package/tests/fixtures/practice/pastureGrass/key-value/valid.json +0 -67
  271. package/tests/fixtures/practice/pastureGrass/permanent-pasture/invalid.json +0 -37
  272. package/tests/fixtures/practice/pastureGrass/permanent-pasture/valid.json +0 -47
  273. package/tests/fixtures/practice/primaryPercent/invalid.json +0 -49
  274. package/tests/fixtures/practice/primaryPercent/valid.json +0 -49
  275. package/tests/fixtures/practice/processingOperation/invalid-no-primary.json +0 -48
  276. package/tests/fixtures/practice/processingOperation/invalid.json +0 -49
  277. package/tests/fixtures/practice/processingOperation/valid-cropland.json +0 -37
  278. package/tests/fixtures/practice/processingOperation/valid.json +0 -49
  279. package/tests/fixtures/practice/productivePhasePermanentCrops/invalid.json +0 -48
  280. package/tests/fixtures/practice/productivePhasePermanentCrops/valid-0-value.json +0 -58
  281. package/tests/fixtures/practice/productivePhasePermanentCrops/valid-no-value.json +0 -47
  282. package/tests/fixtures/practice/productivePhasePermanentCrops/valid.json +0 -48
  283. package/tests/fixtures/practice/site-management/invalid.json +0 -75
  284. package/tests/fixtures/practice/site-management/valid.json +0 -75
  285. package/tests/fixtures/practice/tillage-siteType/valid.json +0 -51
  286. package/tests/fixtures/practice/tillage-siteType/warning.json +0 -42
  287. package/tests/fixtures/practice/tillage-values/invalid-fullTillage.json +0 -61
  288. package/tests/fixtures/practice/tillage-values/invalid-noTillage.json +0 -61
  289. package/tests/fixtures/practice/tillage-values/valid.json +0 -61
  290. package/tests/fixtures/practice/waterRegime/rice/invalid.json +0 -59
  291. package/tests/fixtures/practice/waterRegime/rice/valid-0-value.json +0 -59
  292. package/tests/fixtures/practice/waterRegime/rice/valid.json +0 -58
  293. package/tests/fixtures/product/economicValueShare/invalid.json +0 -31
  294. package/tests/fixtures/product/economicValueShare/valid.json +0 -22
  295. package/tests/fixtures/product/excreta/invalid.json +0 -62
  296. package/tests/fixtures/product/excreta/valid.json +0 -62
  297. package/tests/fixtures/product/excreta/warning.json +0 -53
  298. package/tests/fixtures/product/excreta/with-system/invalid.json +0 -79
  299. package/tests/fixtures/product/excreta/with-system/valid.json +0 -88
  300. package/tests/fixtures/product/excreta/with-system/warning.json +0 -70
  301. package/tests/fixtures/product/fu_ha/invalid.json +0 -49
  302. package/tests/fixtures/product/fu_ha/valid.json +0 -49
  303. package/tests/fixtures/product/primary/invalid.json +0 -22
  304. package/tests/fixtures/product/primary/valid.json +0 -22
  305. package/tests/fixtures/product/value/valid.json +0 -26
  306. package/tests/fixtures/product/value/value-0/error.json +0 -40
  307. package/tests/fixtures/product/value/value-empty/warning.json +0 -23
  308. package/tests/fixtures/product/yield/invalid.json +0 -54
  309. package/tests/fixtures/product/yield/no-value.json +0 -75
  310. package/tests/fixtures/product/yield/valid.json +0 -54
  311. package/tests/fixtures/property/default-value/valid-allowed-exception.json +0 -61
  312. package/tests/fixtures/property/default-value/valid.json +0 -61
  313. package/tests/fixtures/property/default-value/warning.json +0 -61
  314. package/tests/fixtures/property/termType/invalid.json +0 -60
  315. package/tests/fixtures/property/termType/valid.json +0 -60
  316. package/tests/fixtures/property/value-min-max/invalid.json +0 -77
  317. package/tests/fixtures/property/value-min-max/valid-skip-maximum.json +0 -57
  318. package/tests/fixtures/property/value-min-max/valid.json +0 -78
  319. package/tests/fixtures/property/valueType/invalid.json +0 -79
  320. package/tests/fixtures/property/valueType/valid.json +0 -79
  321. package/tests/fixtures/property/volatileSolidsContent/invalid.json +0 -99
  322. package/tests/fixtures/property/volatileSolidsContent/valid.json +0 -99
  323. package/tests/fixtures/shared/coordinates/invalid.json +0 -18
  324. package/tests/fixtures/shared/coordinates/valid.json +0 -18
  325. package/tests/fixtures/shared/data-duplicates/valid.json +0 -113
  326. package/tests/fixtures/shared/data-duplicates/warning.json +0 -172
  327. package/tests/fixtures/shared/duplicated-term-units/invalid-animalProduct.json +0 -61
  328. package/tests/fixtures/shared/duplicated-term-units/invalid-organicFertiliser.json +0 -61
  329. package/tests/fixtures/shared/duplicated-term-units/valid.json +0 -49
  330. package/tests/fixtures/shared/list-country-region/invalid.json +0 -54
  331. package/tests/fixtures/shared/list-country-region/valid.json +0 -54
  332. package/tests/fixtures/shared/list-percent-value/invalid.json +0 -49
  333. package/tests/fixtures/shared/list-percent-value/valid.json +0 -52
  334. package/tests/fixtures/shared/list-valueType/invalid.json +0 -49
  335. package/tests/fixtures/shared/list-valueType/valid.json +0 -49
  336. package/tests/fixtures/shared/list-values-sum-100/management/with-properties/valid.json +0 -91
  337. package/tests/fixtures/shared/list-values-sum-100/measurements/missing-soil.json +0 -46
  338. package/tests/fixtures/shared/list-values-sum-100/measurements/no-depth-high-value.json +0 -63
  339. package/tests/fixtures/shared/list-values-sum-100/measurements/no-depth-valid.json +0 -40
  340. package/tests/fixtures/shared/list-values-sum-100/measurements/with-depth-high-value.json +0 -71
  341. package/tests/fixtures/shared/list-values-sum-100/practices/total-100.json +0 -61
  342. package/tests/fixtures/shared/list-values-sum-100/practices/total-110.json +0 -61
  343. package/tests/fixtures/shared/list-values-sum-100/practices/total-90.json +0 -61
  344. package/tests/fixtures/shared/min-max/value-above.json +0 -31
  345. package/tests/fixtures/shared/min-max/value-below.json +0 -31
  346. package/tests/fixtures/shared/min-max/value-valid.json +0 -45
  347. package/tests/fixtures/shared/model/emissions/invalid.json +0 -102
  348. package/tests/fixtures/shared/model/emissions/valid-variable-tolerance.json +0 -180
  349. package/tests/fixtures/shared/model/emissions/valid.json +0 -102
  350. package/tests/fixtures/shared/model/impacts/invalid.json +0 -75
  351. package/tests/fixtures/shared/model/impacts/valid.json +0 -75
  352. package/tests/fixtures/shared/model/inputs/valid-no-value.json +0 -84
  353. package/tests/fixtures/shared/model/inputs/valid.json +0 -87
  354. package/tests/fixtures/shared/model/inputs/warning.json +0 -87
  355. package/tests/fixtures/shared/model/products/valid-no-value.json +0 -88
  356. package/tests/fixtures/shared/model/products/valid.json +0 -91
  357. package/tests/fixtures/shared/model/products/warning.json +0 -91
  358. package/tests/fixtures/shared/otherModel/invalid.json +0 -69
  359. package/tests/fixtures/shared/otherModel/valid.json +0 -70
  360. package/tests/fixtures/shared/properties-duplicate-values/invalid.json +0 -61
  361. package/tests/fixtures/shared/properties-duplicate-values/valid.json +0 -57
  362. package/tests/fixtures/shared/properties-same-length/invalid.json +0 -62
  363. package/tests/fixtures/shared/properties-same-length/valid.json +0 -52
  364. package/tests/fixtures/shared/unit-percent/invalid.json +0 -34
  365. package/tests/fixtures/shared/unit-percent/valid.json +0 -60
  366. package/tests/fixtures/shared/unit-percent/warning.json +0 -52
  367. package/tests/fixtures/site/cycles-linked-ia/invalid.json +0 -129
  368. package/tests/fixtures/site/cycles-linked-ia/valid.json +0 -129
  369. package/tests/fixtures/site/valid.json +0 -138
  370. package/tests/fixtures/source/valid.json +0 -19
  371. package/tests/fixtures/transformation/excretaManagement/invalid.json +0 -47
  372. package/tests/fixtures/transformation/excretaManagement/valid.json +0 -59
  373. package/tests/fixtures/transformation/inputs-products/invalid.json +0 -43
  374. package/tests/fixtures/transformation/inputs-products/valid.json +0 -43
  375. package/tests/fixtures/transformation/linked-emission/invalid.json +0 -101
  376. package/tests/fixtures/transformation/linked-emission/valid.json +0 -107
  377. package/tests/fixtures/transformation/previousTransformationId/invalid-no-previous.json +0 -127
  378. package/tests/fixtures/transformation/previousTransformationId/invalid-previous-input.json +0 -100
  379. package/tests/fixtures/transformation/previousTransformationId/invalid-product-input.json +0 -106
  380. package/tests/fixtures/transformation/previousTransformationId/invalid-wrong-order.json +0 -136
  381. package/tests/fixtures/transformation/previousTransformationId/valid.json +0 -171
  382. package/tests/integration/__init__.py +0 -0
  383. package/tests/integration/test_product.py +0 -17
  384. package/tests/test_gee.py +0 -10
  385. package/tests/test_utils.py +0 -36
  386. package/tests/test_validation.py +0 -11
  387. package/tests/utils.py +0 -28
  388. package/tests/validators/__init__.py +0 -0
  389. package/tests/validators/test_aggregated_cycle.py +0 -44
  390. package/tests/validators/test_aggregated_shared.py +0 -63
  391. package/tests/validators/test_animal.py +0 -72
  392. package/tests/validators/test_completeness.py +0 -337
  393. package/tests/validators/test_cycle.py +0 -600
  394. package/tests/validators/test_emission.py +0 -170
  395. package/tests/validators/test_impact_assessment.py +0 -80
  396. package/tests/validators/test_indicator.py +0 -120
  397. package/tests/validators/test_infrastructure.py +0 -26
  398. package/tests/validators/test_input.py +0 -434
  399. package/tests/validators/test_management.py +0 -177
  400. package/tests/validators/test_measurement.py +0 -317
  401. package/tests/validators/test_organisation.py +0 -32
  402. package/tests/validators/test_practice.py +0 -490
  403. package/tests/validators/test_product.py +0 -291
  404. package/tests/validators/test_property.py +0 -143
  405. package/tests/validators/test_shared.py +0 -1139
  406. package/tests/validators/test_site.py +0 -151
  407. package/tests/validators/test_source.py +0 -15
  408. package/tests/validators/test_transformation.py +0 -151
  409. package/tests/validators/test_validators.py +0 -74
  410. package/tsconfig.dist.json +0 -9
  411. package/tsconfig.json +0 -25
package/docs/index.rst DELETED
@@ -1,42 +0,0 @@
1
- Welcome to HESTIA Data Validation's documentation!
2
- ========================================
3
-
4
- This package contains the Data Validation module developed by HESTIA.
5
-
6
- Installation
7
- ------------
8
-
9
- Install from `PyPI <https://pypi.python.org/pypi>`_ using `pip <http://www.pip-installer.org/en/latest/>`_, a
10
- package manager for Python.
11
-
12
- .. code-block:: bash
13
-
14
- pip install hestia_earth.validation
15
-
16
-
17
- Requirements
18
- ============
19
-
20
- - `hestia_earth.schema <https://pypi.org/project/hestia-earth.schema/>`_
21
- - `requests <https://pypi.org/project/requests/>`_
22
- - `python-dateutil <https://pypi.org/project/python-dateutil/>`_
23
- - `area <https://pypi.org/project/area/>`_
24
-
25
- Contents
26
- --------
27
-
28
- .. autosummary::
29
- :toctree: _autosummary
30
- :caption: API Reference
31
- :template: custom-module-template.rst
32
- :recursive:
33
-
34
- hestia_earth.validation
35
-
36
-
37
- Indices and tables
38
- ==================
39
-
40
- * :ref:`genindex`
41
- * :ref:`modindex`
42
- * :ref:`search`
package/docs/make.bat DELETED
@@ -1,35 +0,0 @@
1
- @ECHO OFF
2
-
3
- pushd %~dp0
4
-
5
- REM Command file for Sphinx documentation
6
-
7
- if "%SPHINXBUILD%" == "" (
8
- set SPHINXBUILD=sphinx-build
9
- )
10
- set SOURCEDIR=.
11
- set BUILDDIR=_build
12
-
13
- if "%1" == "" goto help
14
-
15
- %SPHINXBUILD% >NUL 2>NUL
16
- if errorlevel 9009 (
17
- echo.
18
- echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
19
- echo.installed, then set the SPHINXBUILD environment variable to point
20
- echo.to the full path of the 'sphinx-build' executable. Alternatively you
21
- echo.may add the Sphinx directory to PATH.
22
- echo.
23
- echo.If you don't have Sphinx installed, grab it from
24
- echo.http://sphinx-doc.org/
25
- exit /b 1
26
- )
27
-
28
- %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29
- goto end
30
-
31
- :help
32
- %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33
-
34
- :end
35
- popd
@@ -1,13 +0,0 @@
1
- hestia_earth.validation
2
- docutils==0.17.1
3
- Jinja2==3.0.3
4
- alabaster==0.7.13
5
- sphinx-rtd-theme==0.5.0
6
- sphinxcontrib-applehelp==1.0.4
7
- sphinxcontrib-devhelp==1.0.2
8
- sphinxcontrib-qthelp==1.0.3
9
- sphinxcontrib-htmlhelp==2.0.1
10
- sphinxcontrib-serializinghtml==1.1.5
11
- sphinx-autodoc-typehints==1.12.0
12
- sphinx==3.3.1
13
- recommonmark
package/envs/.develop.env DELETED
@@ -1 +0,0 @@
1
- export STAGE='dev'
package/envs/.master.env DELETED
@@ -1 +0,0 @@
1
- export STAGE='prod'
File without changes
@@ -1,5 +0,0 @@
1
- # HESTIA Data Validation
2
-
3
- See the complete list of validations available on the HESTIA format.
4
-
5
- Each validation is divided by node type: `Cycle`, `Site`, `ImpactAssessment`, and `Organisation`.
@@ -1,32 +0,0 @@
1
- from typing import List
2
- from concurrent.futures import ThreadPoolExecutor
3
- from hestia_earth.utils.tools import current_time_ms
4
-
5
- from .log import logger
6
- from .validators import validate_node
7
- from .utils import _group_nodes, _hash_nodes
8
- from .gee import init_gee_by_nodes
9
-
10
-
11
- def validate(nodes: List[dict]):
12
- """
13
- Validates a list of HESTIA JSON-Nodes against a list of rules.
14
-
15
- Parameters
16
- ----------
17
- nodes : List[dict]
18
- The list of JSON-Nodes to validate.
19
-
20
- Returns
21
- -------
22
- List
23
- The list of errors for each node, which can be empty if no errors detected.
24
- """
25
- now = current_time_ms()
26
- nodes = init_gee_by_nodes(nodes)
27
- nodes_by_type = _group_nodes(nodes)
28
- nodes_by_hash = _hash_nodes(nodes)
29
- with ThreadPoolExecutor() as executor:
30
- results = list(executor.map(validate_node(nodes_by_type, nodes_by_hash), nodes))
31
- logger.info("time=%s, unit=ms", current_time_ms() - now)
32
- return results
@@ -1,22 +0,0 @@
1
- import os
2
- from functools import lru_cache
3
-
4
- from .log import logger
5
-
6
- ENABLED = os.getenv("VALIDATE_DISTRIBUTION", "true") == "true"
7
-
8
-
9
- @lru_cache()
10
- def is_enabled():
11
- if ENABLED:
12
- try:
13
- from hestia_earth.distribution.version import VERSION
14
-
15
- logger.debug("Using distribution version %s", VERSION)
16
- return True
17
- except ImportError:
18
- logger.error(
19
- "Run `pip install hestia-earth-validation[distribution]` to use distribution validation"
20
- )
21
-
22
- return False
@@ -1,162 +0,0 @@
1
- import os
2
- from hestia_earth.utils.tools import current_time_ms
3
- from hestia_earth.schema import NodeType
4
-
5
- from .log import logger
6
-
7
- _ENABLED = os.getenv("VALIDATE_SPATIAL", "true") == "true"
8
- _ENABLE_TYPES = [NodeType.SITE.value, NodeType.ORGANISATION.value]
9
- MAX_AREA_SIZE = int(os.getenv("MAX_AREA_SIZE", "5000"))
10
- _CACHE_BATCH_SIZE = int(os.getenv("CACHE_SITES_BATCH_SIZE", "5000"))
11
-
12
- _caching = {}
13
- _RASTERS = [
14
- {
15
- "name": "siteType",
16
- "collection": "MODIS/006/MCD12Q1",
17
- "band_name": "LC_Prop2",
18
- "year": "2019",
19
- }
20
- ]
21
- _VECTORS = [
22
- {
23
- "name": f"region-{level}",
24
- "collection": f"users/hestiaplatform/gadm36_{level}",
25
- "fields": f"GID_{level}",
26
- }
27
- for level in range(0, 6)
28
- ]
29
-
30
-
31
- def _caching_key(func_name: str, args: dict):
32
- return "-".join([func_name, str(args)])
33
-
34
-
35
- def _run_with_cache(func_name: str, args: dict, func):
36
- global _caching # noqa: F824
37
- key = _caching_key(func_name, args)
38
- _caching[key] = _caching.get(key, func())
39
- return _caching[key]
40
-
41
-
42
- def _should_cache_node(node: dict):
43
- return all(
44
- [
45
- node.get("@type", node.get("type")) in _ENABLE_TYPES,
46
- not node.get("aggregated", False),
47
- "latitude" in node and "longitude" in node,
48
- ]
49
- )
50
-
51
-
52
- def _node_key(node: dict):
53
- return "/".join(
54
- [node.get("type", node.get("@type")), node.get("id", node.get("@id"))]
55
- )
56
-
57
-
58
- def _pop_items(values: list, nb_items: int):
59
- if len(values) < nb_items:
60
- removed_items = values[:] # Get a copy of the entire array
61
- values.clear() # Remove all items from the original array
62
- else:
63
- removed_items = values[:nb_items] # Get the first N items
64
- del values[:nb_items] # Remove the first N items from the original array
65
-
66
- return removed_items
67
-
68
-
69
- def _cache_nodes(nodes: list, batch_size: int):
70
- from hestia_earth.models.cache_sites import ParamType, _run_values
71
-
72
- now = current_time_ms()
73
-
74
- nodes_mapping = {_node_key(n): n for n in nodes}
75
-
76
- cache_nodes = list(filter(_should_cache_node, nodes))
77
- while len(cache_nodes) > 0:
78
- batch_values = _pop_items(cache_nodes, batch_size)
79
- logger.info(f"Caching {len(batch_values)} nodes. {len(cache_nodes)} remaining.")
80
- results = _run_values(
81
- [(n, 0) for n in batch_values], # expecting tuple with area_size
82
- ParamType.COORDINATES,
83
- _RASTERS,
84
- _VECTORS,
85
- years=[],
86
- )
87
-
88
- for result in results:
89
- nodes_mapping[_node_key(result)] = result
90
-
91
- logger.info("Done caching in %sms", current_time_ms() - now)
92
-
93
- return list(nodes_mapping.values())
94
-
95
-
96
- def _init_gee_by_nodes(nodes: list):
97
- from hestia_earth.earth_engine import init_gee
98
-
99
- init_gee()
100
- try:
101
- return _cache_nodes(nodes, _CACHE_BATCH_SIZE)
102
- except Exception as e:
103
- logger.error(f"An error occured while caching nodes on EE: {str(e)}")
104
- if "User memory limit exceeded" in str(e) or "query aborted" in str(e):
105
- return _cache_nodes(nodes, 100)
106
-
107
-
108
- def init_gee_by_nodes(nodes: list):
109
- # need to validate for non-aggregated Site or Oganisation with coordinates
110
- enabled_nodes = list(filter(_should_cache_node, nodes))
111
- should_init = len(enabled_nodes) > 0
112
- return _init_gee_by_nodes(nodes) if should_init and is_enabled() else nodes
113
-
114
-
115
- def is_enabled():
116
- if _ENABLED:
117
- try:
118
- from hestia_earth.earth_engine.version import VERSION
119
-
120
- return isinstance(VERSION, str)
121
- except ImportError:
122
- logger.error(
123
- "Run `pip install hestia_earth.earth_engine` to use geospatial validation"
124
- )
125
-
126
- return False
127
-
128
-
129
- def id_to_level(id: str):
130
- return id.count(".")
131
-
132
-
133
- def get_cached_data(site: dict, key: str, year: int = None):
134
- from hestia_earth.models.geospatialDatabase.utils import _cached_value
135
-
136
- value = _cached_value(site, key)
137
- return value.get(str(year)) if value and year else value
138
-
139
-
140
- def get_region_id(node: dict):
141
- level = id_to_level(node.get("region", node.get("country")).get("@id"))
142
- id = get_cached_data(node, f"region-{level}")
143
- return None if id is None else f"GADM-{id}"
144
-
145
-
146
- def get_region_distance(gid: str, latitude: float, longitude: float):
147
- def exec_func():
148
- return round(
149
- get_distance_to_coordinates(gid, latitude=latitude, longitude=longitude)
150
- / 1000
151
- )
152
-
153
- try:
154
- from hestia_earth.earth_engine.gadm import get_distance_to_coordinates
155
-
156
- return _run_with_cache(
157
- "get_region_distance",
158
- {"gid": gid, "latitude": latitude, "longitude": longitude},
159
- exec_func,
160
- )
161
- except Exception:
162
- return None
@@ -1,44 +0,0 @@
1
- import os
2
- import logging
3
-
4
-
5
- def _add_handler(
6
- logger: logging.Logger, formatter: logging.Formatter, handler: logging.Handler
7
- ):
8
- handler.setFormatter(formatter)
9
- logger.addHandler(handler)
10
-
11
-
12
- LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")
13
- logger = logging.getLogger("hestia_earth.validation")
14
- logger.setLevel(logging.getLevelName(LOG_LEVEL))
15
-
16
-
17
- def log_to_file(filepath: str):
18
- """
19
- By default, all logs are saved into a file with path stored in the env variable `LOG_FILENAME`.
20
- If you do not set the environment variable `LOG_FILENAME`, you can use this function with the file path.
21
-
22
- Parameters
23
- ----------
24
- filepath : str
25
- Path of the file.
26
- """
27
- formatter = logging.Formatter(
28
- '{"timestamp": "%(asctime)s", "level": "%(levelname)s", "logger": "%(name)s", '
29
- '"filename": "%(filename)s", "message": "%(message)s"}',
30
- "%Y-%m-%dT%H:%M:%S%z",
31
- )
32
- handler = logging.FileHandler(filepath, encoding="utf-8")
33
- handler.setLevel(logging.getLevelName(LOG_LEVEL))
34
- _add_handler(logger, formatter, handler)
35
-
36
-
37
- _formatter = logging.Formatter(
38
- "%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(message)s"
39
- )
40
- _add_handler(logger, _formatter, logging.StreamHandler())
41
-
42
- LOG_FILENAME = os.getenv("LOG_FILENAME")
43
- if LOG_FILENAME is not None:
44
- log_to_file(LOG_FILENAME)
@@ -1,141 +0,0 @@
1
- import importlib
2
- import os
3
- from functools import lru_cache
4
- from hestia_earth.utils.tools import list_sum
5
-
6
- from .log import logger
7
-
8
- ENABLED = os.getenv("VALIDATE_MODELS", "true") == "true"
9
-
10
-
11
- @lru_cache()
12
- def is_enabled():
13
- if ENABLED:
14
- try:
15
- from hestia_earth.models.version import VERSION
16
-
17
- logger.debug("Using models version %s", VERSION)
18
- return True
19
- except ImportError:
20
- logger.error(
21
- "Run `pip install hestia-earth-validation[models]` to use models validation"
22
- )
23
-
24
- return False
25
-
26
-
27
- def _model_value_from_list(results: list, default_value: float):
28
- return (
29
- results[0].get("value", [default_value]) if len(results) > 0 else default_value
30
- )
31
-
32
-
33
- def _model_value(result, default_value=0):
34
- return (
35
- default_value
36
- if result is None
37
- else (
38
- _model_value_from_list(result, default_value)
39
- if isinstance(result, list)
40
- else (
41
- result.get("value", [default_value])
42
- if isinstance(result, dict)
43
- else default_value
44
- )
45
- )
46
- )
47
-
48
-
49
- def value_from_model(result):
50
- value = _model_value(result)
51
- try:
52
- # fix numpy.float64
53
- # TODO: find a better way to handle this
54
- return list_sum(value, float(value))
55
- except Exception:
56
- return list_sum(value, value)
57
-
58
-
59
- def method_tier_from_model(result):
60
- return (
61
- None
62
- if result is None
63
- else (
64
- method_tier_from_model(result[0])
65
- if isinstance(result, list) and len(result) > 0
66
- else (result.get("methodTier") if isinstance(result, dict) else None)
67
- )
68
- )
69
-
70
-
71
- def _import_model(name: str):
72
- return importlib.import_module(f"hestia_earth.models.{name}").run
73
-
74
-
75
- def run_model(model: str, term_id: str, data: dict):
76
- """
77
- Run a HESTIA model from the engine models library.
78
-
79
- Parameters
80
- ----------
81
- model : str
82
- The name of the model to run.
83
- term_id : str
84
- The term to run the model on.
85
- data : dict
86
- The data used to run the model.
87
-
88
- Returns
89
- -------
90
- Any
91
- The result of the model, which can be a single `dict` or a list of `dict`s.
92
- """
93
- return _import_model(model)(term_id, data)
94
-
95
-
96
- def run_model_from_node(node: dict, data: dict):
97
- """
98
- Run a HESTIA model from the engine models library.
99
- To use this function, you need to use a Blank Node that contains a `methodModel` and a `term`,
100
- otherwise you need to use the `run_model` method.
101
-
102
- Parameters
103
- ----------
104
- node : dict
105
- The Blank Node containing a `methodModel` and a `Term`.
106
- data : dict
107
- The data used to run the model.
108
-
109
- Returns
110
- -------
111
- Any
112
- The result of the model, which can be a single `dict` or a list of `dict`s.
113
- """
114
- methodModel = node.get("methodModel", {}).get("@id")
115
- term_id = node.get("term", {}).get("@id")
116
- return run_model(methodModel, term_id, data)
117
-
118
-
119
- def run_models(node: dict, models: list):
120
- """
121
- Run a list of models, using the orchestrator, and return the updated node.
122
-
123
- Parameters
124
- ----------
125
- node : dict
126
- The Blank Node containing a `methodModel` and a `Term`.
127
- models : list
128
- List of models as defined in the orchestrator configurations.
129
-
130
- Returns
131
- -------
132
- Any
133
- The recalculated node after running all models
134
- """
135
- try:
136
- from hestia_earth.orchestrator import run
137
-
138
- return run(node, {"models": models})
139
- except Exception as e:
140
- logger.error(f"Error running models: {str(e)}")
141
- return node
@@ -1,61 +0,0 @@
1
- """
2
- Preload all search requests to avoid making the same searches many times while running models.
3
- """
4
-
5
- import json
6
- import os
7
- from hestia_earth.utils.storage import _load_from_storage
8
-
9
- from .log import logger
10
- from .terms import RESULTS_PATH, get_all_terms, enable_mock
11
-
12
-
13
- def _write_results(filepath: str, data: dict):
14
- with open(filepath, "w") as f:
15
- f.write(json.dumps(data, ensure_ascii=False))
16
-
17
-
18
- def _load_data_from_glossary():
19
- try:
20
- return json.loads(
21
- _load_from_storage(
22
- os.path.join("glossary", "validation-search-results.json"),
23
- glossary=True,
24
- )
25
- )
26
- except Exception:
27
- return None
28
-
29
-
30
- def enable_preload(
31
- filepath: str = RESULTS_PATH,
32
- overwrite_existing: bool = True,
33
- use_glossary: bool = False,
34
- ):
35
- """
36
- Prefetch calls to HESTIA API in a local file.
37
-
38
- Parameters
39
- ----------
40
- filepath : str
41
- The path of the file containing the search results. Defaults to current library folder.
42
- overwrite_existing : bool
43
- Optional - If the file already exists, the file can be used instead of generating it again.
44
- Will overwrite by default.
45
- use_glossary : bool
46
- Optional - Try to fetch search results from the glossary.
47
- Only available with access to HESTIA infrastructure.
48
- """
49
- should_generate = overwrite_existing or not os.path.exists(filepath)
50
-
51
- if should_generate:
52
- logger.debug("Preloading search results and storing in %s", filepath)
53
-
54
- # build the search results
55
- data = (_load_data_from_glossary() if use_glossary else None) or get_all_terms()
56
-
57
- # store in file
58
- _write_results(filepath, data)
59
-
60
- # enable mock search results from file
61
- enable_mock(filepath=filepath)
@@ -1,88 +0,0 @@
1
- import os
2
- import json
3
- from enum import Enum
4
- from hestia_earth.schema import SchemaType, TermTermType
5
- from hestia_earth.utils.api import search
6
-
7
- CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
8
- RESULTS_PATH = os.path.join(CURRENT_DIR, "search-results.json")
9
-
10
- _CACHE = {}
11
-
12
-
13
- def _load_results(filepath: str) -> dict:
14
- with open(filepath) as f:
15
- return json.load(f)
16
-
17
-
18
- class TERMS_QUERY(Enum):
19
- FUEL = TermTermType.FUEL.value
20
- CROP_RESIDUE = TermTermType.CROPRESIDUE.value
21
- MODEL = TermTermType.MODEL.value
22
- FORAGE = TermTermType.FORAGE.value
23
- RICE = "rice"
24
-
25
-
26
- _terms_query = {
27
- TERMS_QUERY.FUEL: {
28
- "should": [
29
- {
30
- "bool": {
31
- "must": [{"match": {"termType": TermTermType.FUEL.value}}],
32
- "should": [
33
- {"match": {"name": "gasoline"}},
34
- {"match": {"name": "petrol"}},
35
- {"match": {"name": "diesel"}},
36
- ],
37
- "minimum_should_match": 1,
38
- }
39
- }
40
- ],
41
- "minimum_should_match": 1,
42
- },
43
- TERMS_QUERY.CROP_RESIDUE: {
44
- "should": [{"match": {"termType": TermTermType.CROPRESIDUE.value}}],
45
- "minimum_should_match": 1,
46
- },
47
- TERMS_QUERY.MODEL: {
48
- "should": [{"match": {"termType": TermTermType.MODEL.value}}],
49
- "minimum_should_match": 1,
50
- },
51
- TERMS_QUERY.FORAGE: {
52
- "should": [
53
- {"match": {"termType.keyword": TermTermType.CROP.value}},
54
- {"match": {"termType.keyword": TermTermType.FORAGE.value}},
55
- {"match": {"name": "forage"}},
56
- ],
57
- "minimum_should_match": 2,
58
- },
59
- TERMS_QUERY.RICE: {
60
- "should": [
61
- {"match": {"termType.keyword": TermTermType.CROP.value}},
62
- {"match": {"name": "rice"}},
63
- ],
64
- "minimum_should_match": 2,
65
- },
66
- }
67
-
68
-
69
- def _exec_query(query: dict) -> list[str]:
70
- terms = search(
71
- {"bool": {"must": [{"match": {"@type": SchemaType.TERM.value}}]} | query},
72
- limit=10000,
73
- )
74
- return list(map(lambda n: n["@id"], terms))
75
-
76
-
77
- def get_terms(query: TERMS_QUERY):
78
- return _CACHE.get(query.value) or _exec_query(_terms_query[query])
79
-
80
-
81
- def get_all_terms():
82
- return {key.value: _exec_query(value) for key, value in _terms_query.items()}
83
-
84
-
85
- def enable_mock(filepath: str):
86
- global _CACHE # noqa: F824
87
- _CACHE = _load_results(filepath)
88
- return _CACHE