@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
@@ -1,86 +0,0 @@
1
- import math
2
- from hestia_earth.distribution.utils.cycle import (
3
- FERTILISER_COLUMNS,
4
- PESTICIDE_COLUMN,
5
- IRRIGATION_COLUMN,
6
- YIELD_COLUMN,
7
- )
8
- from hestia_earth.distribution.posterior_fert import get_post as get_post_fert
9
- from hestia_earth.distribution.prior_fert import get_prior as get_prior_fert
10
- from hestia_earth.distribution.posterior_pest import get_post as get_post_pest
11
- from hestia_earth.distribution.prior_pest import get_prior as get_prior_pest
12
- from hestia_earth.distribution.posterior_irrigation import get_post as get_post_irri
13
- from hestia_earth.distribution.prior_irrigation import get_prior as get_prior_irri
14
- from hestia_earth.distribution.posterior_yield import get_post as get_post_yield
15
- from hestia_earth.distribution.prior_yield import get_prior as get_prior_yield
16
-
17
- UNIVARIATE_DEFAULT_THRESHOLD = 0.95
18
- UNIVARIATE_DEFAULT_ZSCORE = 1.96
19
- UNIVARIATE_CI_TO_ZSCORE = {
20
- 0.9: 1.65,
21
- UNIVARIATE_DEFAULT_THRESHOLD: UNIVARIATE_DEFAULT_ZSCORE,
22
- 0.99: 2.58,
23
- }
24
-
25
-
26
- def _process_fertiliser(country_id: str, product_id: str, input_id: str):
27
- mu, sd = get_post_fert(country_id, product_id, input_id)
28
- return (mu, sd) if mu is not None else get_prior_fert(country_id, input_id)
29
-
30
-
31
- def _process_pesticide(country_id: str, product_id: str, *args):
32
- mu, sd = get_post_pest(country_id, product_id)
33
- return (mu, sd) if mu is not None else get_prior_pest(country_id)
34
-
35
-
36
- def _process_irrigation(country_id: str, product_id: str, *args):
37
- mu, sd = get_post_irri(country_id, product_id)
38
- return (mu, sd) if mu is not None else get_prior_irri(country_id)
39
-
40
-
41
- def _process_yield(country_id: str, product_id: str, *args):
42
- mu, sd = get_post_yield(country_id, product_id)
43
- return (mu, sd) if mu is not None else get_prior_yield(country_id, product_id)
44
-
45
-
46
- _PROCESS_BY_KEY = {
47
- PESTICIDE_COLUMN: _process_pesticide,
48
- IRRIGATION_COLUMN: _process_irrigation,
49
- YIELD_COLUMN: _process_yield,
50
- } | {key: _process_fertiliser for key in FERTILISER_COLUMNS}
51
-
52
-
53
- def get_stats_by_group_key(
54
- key: str, country_id: str, product_id: str, input_id: str = None
55
- ):
56
- return _PROCESS_BY_KEY[key](country_id, product_id, input_id)
57
-
58
-
59
- def cycle_completeness_key(key: str):
60
- return (
61
- "fertiliser"
62
- if key in FERTILISER_COLUMNS
63
- else (
64
- "pesticideVeterinaryDrug"
65
- if key == PESTICIDE_COLUMN
66
- else "water" if key == IRRIGATION_COLUMN else ""
67
- )
68
- )
69
-
70
-
71
- def validate(values: list, threshold: float, get_mu_sd):
72
- def exec():
73
- z = UNIVARIATE_CI_TO_ZSCORE[threshold]
74
- mu, sd = get_mu_sd()
75
- _min = mu - (z * sd) if mu is not None else None
76
- _max = mu + (z * sd) if mu is not None else None
77
- passes = [
78
- _min <= y <= _max if all([mu is not None, not math.isnan(y)]) else True
79
- for y in values
80
- ]
81
- outliers = (
82
- [y for y in values if not _min <= y <= _max] if mu is not None else []
83
- )
84
- return all(passes), outliers, max(_min or 0, 0), _max
85
-
86
- return exec()
@@ -1,109 +0,0 @@
1
- from hestia_earth.schema import EmissionMethodTier
2
- from hestia_earth.utils.tools import flatten
3
- from hestia_earth.utils.model import find_term_match
4
- from hestia_earth.utils.blank_node import get_lookup_value
5
-
6
- from hestia_earth.validation.utils import _filter_list_errors
7
-
8
-
9
- def is_inputs_production(emission: dict):
10
- return get_lookup_value(emission, "inputProductionGroupId") == emission.get(
11
- "term", {}
12
- ).get("@id")
13
-
14
-
15
- def validate_linked_terms(
16
- cycle: dict, list_key: str, linked_key: str, linked_list_key: str, soft_check=False
17
- ):
18
- linked_nodes = cycle.get(linked_list_key, [])
19
-
20
- def validate(values: tuple):
21
- index, emission = values
22
- linked_items = emission.get(linked_key, [])
23
- return (
24
- len(linked_items) == 0
25
- or any(
26
- [
27
- find_term_match(linked_nodes, item.get("@id"))
28
- for item in (
29
- [linked_items]
30
- if isinstance(linked_items, dict)
31
- else linked_items
32
- )
33
- ]
34
- )
35
- or {
36
- "level": "warning" if soft_check else "error",
37
- "dataPath": f".{list_key}[{index}]",
38
- "message": f"{'should' if soft_check else 'must'} add the linked {linked_list_key} to the cycle",
39
- "params": {"term": emission.get("term", {}), "expected": linked_items},
40
- }
41
- )
42
-
43
- return _filter_list_errors(
44
- flatten(map(validate, enumerate(cycle.get(list_key, []))))
45
- )
46
-
47
-
48
- _NOT_RELEVANT_ID = "emissionNotRelevant"
49
-
50
-
51
- def validate_method_not_relevant(cycle: dict, list_key: str):
52
- def validate(values: tuple):
53
- index, emission = values
54
- term_id = emission.get("methodModel", {}).get("@id")
55
- return term_id != _NOT_RELEVANT_ID or {
56
- "level": "warning",
57
- "dataPath": f".{list_key}[{index}].methodModel.@id",
58
- "message": "should not use not relevant model",
59
- "params": {
60
- "term": emission.get("term", {}),
61
- "model": emission.get("methodModel", {}),
62
- },
63
- }
64
-
65
- return _filter_list_errors(
66
- flatten(map(validate, enumerate(cycle.get(list_key, []))))
67
- )
68
-
69
-
70
- def validate_methodTier_not_relevant(cycle: dict, list_key: str):
71
- def validate(values: tuple):
72
- index, emission = values
73
- methodTier = emission.get("methodTier")
74
- return methodTier != EmissionMethodTier.NOT_RELEVANT.value or {
75
- "level": "warning",
76
- "dataPath": f".{list_key}[{index}].methodTier",
77
- "message": "should not use not relevant methodTier",
78
- "params": {"term": emission.get("term", {})},
79
- }
80
-
81
- return _filter_list_errors(
82
- flatten(map(validate, enumerate(cycle.get(list_key, []))))
83
- )
84
-
85
-
86
- def validate_methodTier_background(node: dict, list_key: str):
87
- allowed_values = [
88
- e.value
89
- for e in EmissionMethodTier
90
- if e not in [EmissionMethodTier.BACKGROUND, EmissionMethodTier.NOT_RELEVANT]
91
- ]
92
-
93
- def validate(values: tuple):
94
- index, emission = values
95
- methodTier = emission.get("methodTier")
96
- return (
97
- methodTier != EmissionMethodTier.BACKGROUND.value
98
- or is_inputs_production(emission)
99
- or {
100
- "level": "error",
101
- "dataPath": f".{list_key}[{index}].methodTier",
102
- "message": "should be equal to one of the allowed values",
103
- "params": {"allowedValues": allowed_values},
104
- }
105
- )
106
-
107
- return _filter_list_errors(
108
- flatten(map(validate, enumerate(node.get(list_key, []))))
109
- )
@@ -1,138 +0,0 @@
1
- """
2
- Impact Assessment validation
3
-
4
- Here is the list of validations running on a [Impact Assessment](/schema/ImpactAssessment).
5
- """
6
-
7
- from hestia_earth.utils.tools import flatten
8
-
9
- from hestia_earth.validation.utils import (
10
- find_linked_node,
11
- find_by_product,
12
- find_by_unique_product,
13
- )
14
- from .shared import (
15
- validate_list_min_below_max,
16
- validate_country_region,
17
- validate_list_country_region,
18
- validate_list_term_percent,
19
- validate_linked_source_privacy,
20
- validate_date_lt_today,
21
- validate_list_model,
22
- validate_private_has_source,
23
- validate_list_value_between_min_max,
24
- is_date_equal,
25
- validate_other_model,
26
- validate_nested_existing_node,
27
- )
28
- from .emission import validate_methodTier_background
29
- from .indicator import (
30
- validate_characterisedIndicator_model,
31
- validate_landTransformation,
32
- validate_inonising_compounds_waste,
33
- )
34
-
35
-
36
- def validate_empty(impact_assessment: dict):
37
- return any(
38
- [
39
- impact_assessment.get("cycle"),
40
- impact_assessment.get("emissionsResourceUse", []),
41
- len(impact_assessment.get("impacts", [])) > 0,
42
- len(impact_assessment.get("endpoints", [])) > 0,
43
- ]
44
- ) or {
45
- "level": "error",
46
- "dataPath": "",
47
- "message": "should not be empty",
48
- "params": {"type": "ImpactAssessment"},
49
- }
50
-
51
-
52
- def validate_linked_cycle_product(impact_assessment: dict, cycle: dict):
53
- product = impact_assessment.get("product", {})
54
- cycle_product = find_by_product(cycle, product) or find_by_unique_product(
55
- cycle, product
56
- )
57
- return cycle_product is not None or {
58
- "level": "error",
59
- "dataPath": ".product",
60
- "message": "should be included in the cycle products",
61
- "params": {
62
- "product": product.get("term", {}),
63
- "node": {"type": "Cycle", "id": cycle.get("id", cycle.get("@id"))},
64
- },
65
- }
66
-
67
-
68
- def validate_linked_cycle_endDate(impact_assessment: dict, cycle: dict):
69
- key = "endDate"
70
- return is_date_equal(impact_assessment.get(key), cycle.get(key), True) or {
71
- "level": "error",
72
- "dataPath": f".{key}",
73
- "message": "must be equal to the Cycle endDate",
74
- }
75
-
76
-
77
- def validate_impact_assessment(impact_assessment: dict, node_map: dict = {}):
78
- cycle = find_linked_node(node_map, impact_assessment.get("cycle", {}))
79
- return [
80
- validate_empty(impact_assessment),
81
- validate_date_lt_today(impact_assessment, "startDate"),
82
- validate_date_lt_today(impact_assessment, "endDate"),
83
- validate_linked_source_privacy(impact_assessment, "source", node_map),
84
- validate_private_has_source(impact_assessment, "source"),
85
- validate_country_region(impact_assessment),
86
- validate_linked_cycle_product(impact_assessment, cycle) if cycle else True,
87
- validate_linked_cycle_endDate(impact_assessment, cycle) if cycle else True,
88
- validate_nested_existing_node(impact_assessment, "cycle"),
89
- validate_nested_existing_node(impact_assessment, "site"),
90
- ] + flatten(
91
- (
92
- [
93
- validate_list_country_region(impact_assessment, "emissionsResourceUse"),
94
- validate_list_min_below_max(impact_assessment, "emissionsResourceUse"),
95
- validate_list_value_between_min_max(
96
- impact_assessment, "emissionsResourceUse"
97
- ),
98
- validate_list_term_percent(impact_assessment, "emissionsResourceUse"),
99
- validate_characterisedIndicator_model(
100
- impact_assessment, "emissionsResourceUse"
101
- ),
102
- validate_landTransformation(impact_assessment, "emissionsResourceUse"),
103
- validate_methodTier_background(
104
- impact_assessment, "emissionsResourceUse"
105
- ),
106
- validate_other_model(impact_assessment, "emissionsResourceUse"),
107
- validate_inonising_compounds_waste(
108
- impact_assessment, "emissionsResourceUse"
109
- ),
110
- ]
111
- if len(impact_assessment.get("emissionsResourceUse", [])) > 0
112
- else []
113
- )
114
- + (
115
- [
116
- validate_list_country_region(impact_assessment, "emissionsResourceUse"),
117
- validate_list_min_below_max(impact_assessment, "impacts"),
118
- validate_list_value_between_min_max(impact_assessment, "impacts"),
119
- validate_list_term_percent(impact_assessment, "impacts"),
120
- validate_list_model(impact_assessment, "impacts"),
121
- validate_characterisedIndicator_model(impact_assessment, "impacts"),
122
- validate_other_model(impact_assessment, "emissionsResourceUse"),
123
- ]
124
- if len(impact_assessment.get("impacts", [])) > 0
125
- else []
126
- )
127
- + (
128
- [
129
- validate_list_country_region(impact_assessment, "emissionsResourceUse"),
130
- validate_list_min_below_max(impact_assessment, "endpoints"),
131
- validate_list_value_between_min_max(impact_assessment, "endpoints"),
132
- validate_list_term_percent(impact_assessment, "endpoints"),
133
- validate_other_model(impact_assessment, "emissionsResourceUse"),
134
- ]
135
- if len(impact_assessment.get("endpoints", [])) > 0
136
- else []
137
- )
138
- )
@@ -1,154 +0,0 @@
1
- from functools import reduce
2
- from hestia_earth.schema import TermTermType
3
- from hestia_earth.utils.lookup import download_lookup, get_table_value, lookup_term_ids
4
- from hestia_earth.utils.tools import flatten, non_empty_list
5
-
6
- from hestia_earth.validation.utils import _filter_list_errors
7
- from hestia_earth.validation.terms import TERMS_QUERY, get_terms
8
-
9
- IGNORE_MODELS = [
10
- "aggregatedModels" # used only for aggregations, should not be shown as possible values
11
- ]
12
-
13
-
14
- def _indicator_group_key(indicator: dict, include_term: bool = True):
15
- return "-".join(
16
- non_empty_list(
17
- flatten(
18
- [
19
- indicator.get("term", {}).get("@id") if include_term else "",
20
- indicator.get("country", {}).get("@id"),
21
- indicator.get("landCover", {}).get("@id"),
22
- [i.get("@id") for i in indicator.get("inputs", [])],
23
- ]
24
- )
25
- )
26
- )
27
-
28
-
29
- def _group_indicators(indicators: list, include_term: bool = True):
30
- def group_by(groups: dict, indicator: dict):
31
- group_key = _indicator_group_key(indicator, include_term)
32
- groups[group_key] = groups.get(group_key, []) + [indicator]
33
- return groups
34
-
35
- return reduce(group_by, indicators, {})
36
-
37
-
38
- def _allowed_characterisedIndicator_model(lookup, models: list, term_id: str):
39
- return [
40
- m
41
- for m in models
42
- if m != "term.id"
43
- and get_table_value(lookup, "term.id", term_id, m)
44
- and m not in IGNORE_MODELS
45
- ]
46
-
47
-
48
- def _is_method_allowed(lookup, term_id: str, model: str):
49
- value = get_table_value(lookup, "term.id", term_id, model)
50
- # bug numpy bool not returning `True`
51
- return True if value else False
52
-
53
-
54
- def validate_characterisedIndicator_model(node: dict, list_key: str):
55
- lookup = download_lookup(
56
- "characterisedIndicator-model-mapping.csv", keep_in_memory=False
57
- )
58
- models = get_terms(TERMS_QUERY.MODEL)
59
-
60
- def validate(values: tuple):
61
- index, value = values
62
- term = value.get("term", {})
63
- term_id = term.get("@id")
64
- model = value.get("methodModel", {})
65
- model_id = model.get("@id")
66
- should_validate = term_id in lookup_term_ids(lookup) and model_id is not None
67
- return (
68
- not should_validate
69
- or _is_method_allowed(lookup, term_id, model_id)
70
- or {
71
- "level": "error",
72
- "dataPath": f".{list_key}[{index}].methodModel.@id",
73
- "message": "is not allowed for this characterisedIndicator",
74
- "params": {
75
- "term": term,
76
- "model": model,
77
- "allowedValues": _allowed_characterisedIndicator_model(
78
- lookup, models, term_id
79
- ),
80
- },
81
- }
82
- )
83
-
84
- return _filter_list_errors(list(map(validate, enumerate(node.get(list_key, [])))))
85
-
86
-
87
- def _below_occupation(index: int, value: float, blank_nodes: list, suffix: str):
88
- other_values = list(
89
- filter(lambda b: b.get("term", {}).get("@id").endswith(suffix), blank_nodes)
90
- )
91
- other_values = [other_value.get("value", 0) for other_value in other_values]
92
- return (
93
- len(other_values) == 0
94
- or all([value <= (other_value * 1.05) for other_value in other_values])
95
- or {
96
- "level": "error",
97
- "dataPath": f".emissionsResourceUse[{index}].value",
98
- "message": "must be less than or equal to land occupation",
99
- "params": {"current": value, "max": min(other_values)},
100
- }
101
- )
102
-
103
-
104
- def validate_landTransformation(node: dict, list_key="emissionsResourceUse"):
105
- blank_nodes = node.get(list_key, [])
106
- grouped_land_occupation = _group_indicators(
107
- [
108
- v
109
- for v in blank_nodes
110
- if v.get("term", {}).get("@id", "").startswith("landOccupation")
111
- ],
112
- include_term=False,
113
- )
114
-
115
- def validate(values: tuple):
116
- index, blank_node = values
117
- term_id = blank_node.get("term", {}).get("@id")
118
- value = blank_node.get("value", 0)
119
- group_key = _indicator_group_key(blank_node, include_term=False)
120
- land_occupation_blank_nodes = grouped_land_occupation.get(group_key) or []
121
- return not term_id.startswith("landTransformation") or [
122
- not term_id.endswith("DuringCycle")
123
- or _below_occupation(
124
- index, value, land_occupation_blank_nodes, "DuringCycle"
125
- ),
126
- not term_id.endswith("InputsProduction")
127
- or _below_occupation(
128
- index, value, land_occupation_blank_nodes, "InputsProduction"
129
- ),
130
- ]
131
-
132
- return _filter_list_errors(flatten(map(validate, enumerate(blank_nodes))))
133
-
134
-
135
- def validate_inonising_compounds_waste(node: dict, list_key="emissionsResourceUse"):
136
- blank_nodes = node.get(list_key, [])
137
- allowed_term_types = [None, TermTermType.WASTE.value]
138
-
139
- def validate(values: tuple):
140
- index, blank_node = values
141
- term_id = blank_node.get("term", {}).get("@id")
142
- key_term_type = blank_node.get("key", {}).get("termType")
143
- return (
144
- not term_id.startswith("ionisingCompounds")
145
- or key_term_type in allowed_term_types
146
- or {
147
- "level": "error",
148
- "dataPath": f".{list_key}[{index}].key.termType",
149
- "message": "should be equal to one of the allowed values",
150
- "params": {"allowedValues": non_empty_list(allowed_term_types)},
151
- }
152
- )
153
-
154
- return _filter_list_errors(flatten(map(validate, enumerate(blank_nodes))))
@@ -1,25 +0,0 @@
1
- from hestia_earth.utils.date import diff_in_years
2
-
3
- from hestia_earth.validation.utils import _filter_list_errors
4
-
5
-
6
- def validate_lifespan(infrastructure: list):
7
- def validate(values: tuple):
8
- index, value = values
9
- start_date = value.get("startDate")
10
- end_date = value.get("endDate")
11
- lifespan = value.get("defaultLifespan", -1)
12
- diff = diff_in_years(start_date, end_date) if start_date and end_date else -1
13
- return (
14
- lifespan == -1
15
- or diff == -1
16
- or diff == round(lifespan, 1)
17
- or {
18
- "level": "error",
19
- "dataPath": f".infrastructure[{index}].defaultLifespan",
20
- "message": "must equal to endDate - startDate in decimal years",
21
- "params": {"expected": diff},
22
- }
23
- )
24
-
25
- return _filter_list_errors(map(validate, enumerate(infrastructure)))