@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,268 +0,0 @@
1
- import traceback
2
- from hestia_earth.schema import (
3
- NodeType,
4
- TermTermType,
5
- SiteSiteType,
6
- CycleFunctionalUnit,
7
- )
8
- from hestia_earth.utils.model import find_term_match, find_primary_product
9
- from hestia_earth.utils.tools import non_empty_list, flatten
10
-
11
- from hestia_earth.validation.log import logger
12
- from hestia_earth.validation.utils import (
13
- _filter_list_errors,
14
- update_error_path,
15
- is_live_animal_cycle,
16
- get_lookup_value,
17
- )
18
- from hestia_earth.validation.distribution import is_enabled as distribution_is_enabled
19
- from .shared import validate_country, CROP_SITE_TYPE
20
-
21
- MUST_INCLUDE_ID_TERM_TYPES = [TermTermType.INORGANICFERTILISER.value]
22
- FEED_TERM_TYPES = [
23
- TermTermType.ANIMALPRODUCT.value,
24
- TermTermType.CROP.value,
25
- TermTermType.FEEDFOODADDITIVE.value,
26
- TermTermType.FORAGE.value,
27
- TermTermType.LIVEAQUATICSPECIES.value,
28
- TermTermType.PROCESSEDFOOD.value,
29
- TermTermType.WASTE.value,
30
- ]
31
- FEED_SITE_TYPE = [
32
- SiteSiteType.CROPLAND.value,
33
- SiteSiteType.PERMANENT_PASTURE.value,
34
- SiteSiteType.ANIMAL_HOUSING.value,
35
- ]
36
-
37
-
38
- def validate_must_include_id(inputs: list):
39
- def missingRequiredIds(term: dict):
40
- other_term_ids = (get_lookup_value(term, "complementaryTermIds") or "").split(
41
- ";"
42
- )
43
- return non_empty_list(
44
- [
45
- term_id
46
- for term_id in other_term_ids
47
- if find_term_match(inputs, term_id, None) is None
48
- ]
49
- )
50
-
51
- def validate(values: tuple):
52
- index, input = values
53
- term = input.get("term", {})
54
- should_validate = term.get("termType") in MUST_INCLUDE_ID_TERM_TYPES
55
- missing_ids = missingRequiredIds(term) if should_validate else []
56
- # added gap-filling which makes it non-required anymore
57
- return len(missing_ids) == 0 or {
58
- "level": "warning",
59
- "dataPath": f".inputs[{index}]",
60
- "message": "should add missing inputs",
61
- "params": {"expected": missing_ids},
62
- }
63
-
64
- return _filter_list_errors(map(validate, enumerate(inputs)))
65
-
66
-
67
- def validate_input_country(node: dict, list_key: list = "inputs"):
68
- def validate(values: tuple):
69
- index, input = values
70
- country = input.get("country")
71
- error = country is None or validate_country(input)
72
- return error is True or update_error_path(error, list_key, index)
73
-
74
- return _filter_list_errors(map(validate, enumerate(node.get(list_key, []))))
75
-
76
-
77
- def validate_related_impacts(node: dict, list_key: list, node_map: dict = {}):
78
- related_impacts = node_map.get(NodeType.IMPACTASSESSMENT.value)
79
-
80
- def validate(values: tuple):
81
- index, input = values
82
- impact_id = input.get("impactAssessment", {}).get("id")
83
- impact = related_impacts.get(impact_id) if impact_id else None
84
- related_node_id = (
85
- impact.get(node.get("type").lower(), {}).get("id") if impact else None
86
- )
87
- return (
88
- related_node_id is None
89
- or related_node_id != node.get("id")
90
- or {
91
- "level": "error",
92
- "dataPath": f".inputs[{index}].impactAssessment",
93
- "message": "can not be linked to the same type",
94
- "params": {"current": node.get("type")},
95
- }
96
- )
97
-
98
- return (
99
- _filter_list_errors(map(validate, enumerate(node.get(list_key, []))))
100
- if related_impacts
101
- else True
102
- )
103
-
104
-
105
- def _validate_input_value(cycle: dict, country: dict, list_key: str, threshold: float):
106
- from hestia_earth.distribution.utils.cycle import (
107
- group_cycle_inputs,
108
- get_input_group,
109
- )
110
- from .distribution import (
111
- get_stats_by_group_key,
112
- cycle_completeness_key,
113
- validate as validate_distribution,
114
- )
115
-
116
- groups = group_cycle_inputs(cycle)
117
- completeness = cycle.get("completeness", {})
118
- country_id = country.get("@id")
119
- product = find_primary_product(cycle) or {}
120
- product_id = product.get("term", {}).get("@id")
121
-
122
- def validate(values: tuple):
123
- index, input = values
124
-
125
- input_id = input.get("term", {}).get("@id")
126
- group_key = get_input_group(input)
127
- input_value = groups.get(group_key)
128
-
129
- def _get_mu_sd():
130
- return get_stats_by_group_key(group_key, country_id, product_id, input_id)
131
-
132
- complete = completeness.get(cycle_completeness_key(group_key), False)
133
- valid, outliers, min, max = (
134
- validate_distribution([input_value], threshold, get_mu_sd=_get_mu_sd)
135
- if complete
136
- else (True, None, None, None)
137
- )
138
-
139
- return valid or {
140
- "level": "warning",
141
- "dataPath": f".{list_key}[{index}].value",
142
- "message": "is outside confidence interval",
143
- "params": {
144
- "term": input.get("term", {}),
145
- "group": group_key,
146
- "country": country,
147
- "outliers": outliers,
148
- "threshold": threshold,
149
- "min": min,
150
- "max": max,
151
- },
152
- }
153
-
154
- return validate
155
-
156
-
157
- def validate_input_distribution_value(
158
- cycle: dict, site: dict, list_key: str = "inputs", threshold: float = 0.95
159
- ):
160
- try:
161
- country = site.get("country", {})
162
- inputs = cycle.get(list_key, [])
163
- validate_input = (
164
- _validate_input_value(cycle, country, list_key, threshold)
165
- if distribution_is_enabled()
166
- else None
167
- )
168
- return (
169
- (
170
- site.get("siteType") not in CROP_SITE_TYPE
171
- or _filter_list_errors(map(validate_input, enumerate(inputs)))
172
- )
173
- if distribution_is_enabled()
174
- else True
175
- )
176
- except Exception:
177
- stack = traceback.format_exc()
178
- logger.error(f"Error validating using distribution: '{stack}'")
179
- return True
180
-
181
-
182
- def validate_animalFeed_requires_isAnimalFeed(cycle: dict, site: dict):
183
- site_type = site.get("siteType")
184
- is_liveAnimal = is_live_animal_cycle(cycle)
185
-
186
- def validate(values: tuple):
187
- index, input = values
188
- term_type = input.get("term", {}).get("termType")
189
- return (
190
- term_type not in FEED_TERM_TYPES
191
- or input.get("isAnimalFeed") is not None
192
- or {
193
- "level": "error",
194
- "dataPath": f".inputs[{index}]",
195
- "message": "must specify is it an animal feed",
196
- }
197
- )
198
-
199
- def validate_animal(values: tuple):
200
- index, blank_node = values
201
- errors = list(map(validate, enumerate(blank_node.get("inputs", []))))
202
- return _filter_list_errors(
203
- [
204
- update_error_path(error, "animals", index)
205
- for error in errors
206
- if error is not True
207
- ]
208
- )
209
-
210
- return (
211
- site_type not in FEED_SITE_TYPE
212
- or not is_liveAnimal
213
- or _filter_list_errors(
214
- flatten(
215
- list(map(validate, enumerate(cycle.get("inputs", []))))
216
- + [list(map(validate_animal, enumerate(cycle.get("animals", []))))]
217
- )
218
- )
219
- )
220
-
221
-
222
- def validate_saplings(cycle: dict, list_key: str = "inputs"):
223
- functional_unit = cycle.get("functionalUnit")
224
- product = (find_primary_product(cycle) or {}).get("term", {})
225
- product_term_type = product.get("termType")
226
- product_is_plantation = not not get_lookup_value(product, "isPlantation")
227
-
228
- term_id = "saplings"
229
- inputs = cycle.get(list_key, [])
230
- saplings_indexes = [
231
- i for i in range(len(inputs)) if inputs[i].get("term", {}).get("@id") == term_id
232
- ]
233
-
234
- return (
235
- functional_unit != CycleFunctionalUnit._1_HA.value
236
- or product_term_type != TermTermType.CROP.value
237
- or not product_is_plantation
238
- or len(saplings_indexes) == 0
239
- or _filter_list_errors(
240
- [
241
- {
242
- "level": "error",
243
- "dataPath": f".{list_key}[{index}].term",
244
- "message": "saplings cannot be used as an input here",
245
- "params": {
246
- "current": term_id,
247
- "expected": "saplingsDepreciatedAmountPerCycle",
248
- },
249
- }
250
- ]
251
- for index in saplings_indexes
252
- )
253
- )
254
-
255
-
256
- def validate_input_is_product(node: dict, list_key: str = "inputs"):
257
- def validate(values: tuple):
258
- index, blank_node = values
259
- term = blank_node.get("term", {})
260
- must_be_product = get_lookup_value(term, "mustBeProduct")
261
- return not must_be_product or {
262
- "level": "error",
263
- "dataPath": f".{list_key}[{index}].term",
264
- "message": "must be a product",
265
- "params": {"term": term},
266
- }
267
-
268
- return _filter_list_errors(map(validate, enumerate(node.get(list_key, []))))
@@ -1,131 +0,0 @@
1
- from hestia_earth.schema import TermTermType, SiteSiteType
2
- from hestia_earth.utils.model import filter_list_term_type
3
- from hestia_earth.utils.tools import flatten, safe_parse_date
4
- from hestia_earth.utils.date import diff_in_days
5
-
6
- from hestia_earth.validation.utils import _filter_list_errors, cycle_start_date
7
-
8
- _SITE_TYPE_TO_TERM_TYPES = {
9
- SiteSiteType.CROPLAND.value: [
10
- TermTermType.CROPRESIDUEMANAGEMENT,
11
- TermTermType.LANDUSEMANAGEMENT,
12
- TermTermType.TILLAGE,
13
- TermTermType.WATERREGIME,
14
- ],
15
- SiteSiteType.PERMANENT_PASTURE.value: [
16
- TermTermType.LANDUSEMANAGEMENT,
17
- TermTermType.WATERREGIME,
18
- ],
19
- }
20
-
21
-
22
- def validate_has_termType(site: dict, term_type: TermTermType):
23
- blank_nodes = filter_list_term_type(site.get("management", []), term_type)
24
- return len(blank_nodes) > 0 or {
25
- "level": "warning",
26
- "dataPath": ".management",
27
- "message": "should contain at least one management node",
28
- "params": {"termType": term_type.value},
29
- }
30
-
31
-
32
- def validate_has_termTypes(site: dict):
33
- blank_nodes = site.get("management", [])
34
- term_types = _SITE_TYPE_TO_TERM_TYPES.get(site.get("siteType"), [])
35
- return (
36
- len(term_types) == 0
37
- or len(blank_nodes) == 0
38
- or _filter_list_errors(
39
- [validate_has_termType(site, term_type) for term_type in term_types]
40
- )
41
- )
42
-
43
-
44
- def validate_exists(site: dict):
45
- blank_nodes = site.get("management", [])
46
- term_types = _SITE_TYPE_TO_TERM_TYPES.get(site.get("siteType"), [])
47
- return (
48
- len(term_types) == 0
49
- or len(blank_nodes) > 0
50
- or {
51
- "level": "warning",
52
- "dataPath": ".management",
53
- "message": "should contain at least one management node",
54
- }
55
- )
56
-
57
-
58
- _FALLOW_DATE_VALID_FUNC = {
59
- "less-than-1-year": lambda days: days <= 365,
60
- "between-1-and-5-years": lambda days: 365 < days <= 365.25 * 5,
61
- "less-than-20-years": lambda days: days <= 365.25 * 20,
62
- "": lambda *args: True,
63
- }
64
-
65
-
66
- _FALLOW_DATE_VALID_TERM_TO_KEY = {
67
- "shortFallow": "less-than-1-year",
68
- "shortBareFallow": "less-than-1-year",
69
- "longFallow": "between-1-and-5-years",
70
- "longBareFallow": "between-1-and-5-years",
71
- "setAside": "less-than-20-years",
72
- }
73
-
74
-
75
- def validate_fallow_dates(data: dict, list_key: str = "management"):
76
- def validate(values: tuple):
77
- index, blank_node = values
78
- term = blank_node.get("term", {})
79
- term_id = term.get("@id")
80
- start_date = blank_node.get("startDate")
81
- end_date = blank_node.get("endDate")
82
- days = (
83
- diff_in_days(start_date, end_date) if all([start_date, end_date]) else None
84
- )
85
- validation_key = _FALLOW_DATE_VALID_TERM_TO_KEY.get(term_id, "")
86
- return (
87
- days is None
88
- or _FALLOW_DATE_VALID_FUNC.get(validation_key)(days)
89
- or {
90
- "level": "error",
91
- "dataPath": f".{list_key}[{index}]",
92
- "message": "duration must be in specified interval",
93
- "params": {"term": term, "current": days, "expected": validation_key},
94
- }
95
- )
96
-
97
- return _filter_list_errors(
98
- flatten(map(validate, enumerate(data.get(list_key, []))))
99
- )
100
-
101
-
102
- def validate_cycles_overlap(data: dict, cycles: list, list_key: str = "management"):
103
- """
104
- Prevent overlap between management dates and cycle dates.
105
- """
106
- first_cycle = sorted(cycles, key=lambda v: v.get("endDate"))[0] if cycles else None
107
- earliest_start_date = cycle_start_date(first_cycle) if first_cycle else None
108
- earliest_start_date_str = (
109
- earliest_start_date.strftime("%Y-%m-%d") if earliest_start_date else None
110
- )
111
-
112
- def validate(values: tuple):
113
- index, blank_node = values
114
- end_date = blank_node.get("endDate")
115
- return (
116
- not end_date
117
- or safe_parse_date(end_date) < earliest_start_date
118
- or {
119
- "level": "error",
120
- "dataPath": f".{list_key}[{index}].endDate",
121
- "message": "management date must be before cycle start date",
122
- "params": {
123
- "current": end_date,
124
- "expected": earliest_start_date_str,
125
- },
126
- }
127
- )
128
-
129
- return not earliest_start_date or _filter_list_errors(
130
- flatten(map(validate, enumerate(data.get(list_key, []))))
131
- )