@hestia-earth/data-validation 0.37.7

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 (410) hide show
  1. package/.coveragerc +14 -0
  2. package/.dockerignore +19 -0
  3. package/.eslintignore +17 -0
  4. package/.eslintrc.js +11 -0
  5. package/.flake8 +5 -0
  6. package/.gitlab/issue_templates/new validation.md +82 -0
  7. package/.gitlab-ci.yml +216 -0
  8. package/.readthedocs.yml +24 -0
  9. package/CODEOWNERS +11 -0
  10. package/Dockerfile +13 -0
  11. package/LICENSE +21 -0
  12. package/MANIFEST.in +2 -0
  13. package/bin/hestia-validate-data +80 -0
  14. package/build_mocking.py +14 -0
  15. package/commitlint.config.js +1 -0
  16. package/docs/Makefile +20 -0
  17. package/docs/_static/styles.css +4 -0
  18. package/docs/_templates/custom-class-template.rst +34 -0
  19. package/docs/_templates/custom-module-template.rst +66 -0
  20. package/docs/_templates/layout.html +4 -0
  21. package/docs/conf.py +74 -0
  22. package/docs/index.rst +42 -0
  23. package/docs/make.bat +35 -0
  24. package/docs/requirements.txt +13 -0
  25. package/envs/.develop.env +1 -0
  26. package/envs/.master.env +1 -0
  27. package/guide-assets/.gitkeep +0 -0
  28. package/hestia_earth/validation/README.md +5 -0
  29. package/hestia_earth/validation/__init__.py +32 -0
  30. package/hestia_earth/validation/distribution.py +22 -0
  31. package/hestia_earth/validation/gee.py +162 -0
  32. package/hestia_earth/validation/log.py +44 -0
  33. package/hestia_earth/validation/models.py +141 -0
  34. package/hestia_earth/validation/preload_requests.py +61 -0
  35. package/hestia_earth/validation/terms.py +88 -0
  36. package/hestia_earth/validation/utils.py +444 -0
  37. package/hestia_earth/validation/validators/__init__.py +141 -0
  38. package/hestia_earth/validation/validators/aggregated_cycle.py +32 -0
  39. package/hestia_earth/validation/validators/aggregated_shared.py +37 -0
  40. package/hestia_earth/validation/validators/animal.py +88 -0
  41. package/hestia_earth/validation/validators/completeness.py +252 -0
  42. package/hestia_earth/validation/validators/cycle.py +1123 -0
  43. package/hestia_earth/validation/validators/distribution.py +86 -0
  44. package/hestia_earth/validation/validators/emission.py +109 -0
  45. package/hestia_earth/validation/validators/impact_assessment.py +138 -0
  46. package/hestia_earth/validation/validators/indicator.py +154 -0
  47. package/hestia_earth/validation/validators/infrastructure.py +25 -0
  48. package/hestia_earth/validation/validators/input.py +268 -0
  49. package/hestia_earth/validation/validators/management.py +131 -0
  50. package/hestia_earth/validation/validators/measurement.py +368 -0
  51. package/hestia_earth/validation/validators/organisation.py +43 -0
  52. package/hestia_earth/validation/validators/practice.py +590 -0
  53. package/hestia_earth/validation/validators/product.py +263 -0
  54. package/hestia_earth/validation/validators/property.py +266 -0
  55. package/hestia_earth/validation/validators/shared.py +940 -0
  56. package/hestia_earth/validation/validators/site.py +312 -0
  57. package/hestia_earth/validation/validators/source.py +20 -0
  58. package/hestia_earth/validation/validators/transformation.py +250 -0
  59. package/hestia_earth/validation/version.py +1 -0
  60. package/layer/build.sh +34 -0
  61. package/layer/deploy.sh +18 -0
  62. package/package.json +59 -0
  63. package/release.sh +11 -0
  64. package/requirements-ci.txt +6 -0
  65. package/requirements-test.txt +4 -0
  66. package/requirements.txt +2 -0
  67. package/run-docker-test.sh +7 -0
  68. package/run-docker.sh +9 -0
  69. package/run.py +99 -0
  70. package/scripts/build_docs.py +283 -0
  71. package/scripts/build_validation_list.py +160 -0
  72. package/scripts/guide-create-branch.sh +15 -0
  73. package/scripts/update-package-version.js +28 -0
  74. package/search-results.json +384 -0
  75. package/setup.cfg +2 -0
  76. package/setup.py +35 -0
  77. package/src/index.ts +1 -0
  78. package/src/validations.ts +22 -0
  79. package/src/version.ts +1 -0
  80. package/tests/Dockerfile +13 -0
  81. package/tests/__init__.py +3 -0
  82. package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/invalid-no-impactAssessment.json +64 -0
  83. package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/invalid-world.json +69 -0
  84. package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/valid.json +69 -0
  85. package/tests/fixtures/animal/duplicated-input-cycle/invalid.json +98 -0
  86. package/tests/fixtures/animal/duplicated-input-cycle/valid.json +91 -0
  87. package/tests/fixtures/animal/pregnancyRateTotal/invalid.json +49 -0
  88. package/tests/fixtures/animal/pregnancyRateTotal/valid.json +60 -0
  89. package/tests/fixtures/animal/required/invalid.json +59 -0
  90. package/tests/fixtures/animal/required/valid.json +72 -0
  91. package/tests/fixtures/completeness/all-values/warning.json +22 -0
  92. package/tests/fixtures/completeness/animalPopulation/invalid.json +58 -0
  93. package/tests/fixtures/completeness/animalPopulation/valid-animals.json +71 -0
  94. package/tests/fixtures/completeness/animalPopulation/valid-incomplete.json +58 -0
  95. package/tests/fixtures/completeness/animalPopulation/valid-no-liveAnimals.json +37 -0
  96. package/tests/fixtures/completeness/blank-nodes/agri-food processor-invalid.json +52 -0
  97. package/tests/fixtures/completeness/blank-nodes/invalid.json +124 -0
  98. package/tests/fixtures/completeness/blank-nodes/valid.json +128 -0
  99. package/tests/fixtures/completeness/cropland/site.json +16 -0
  100. package/tests/fixtures/completeness/cropland/valid.json +22 -0
  101. package/tests/fixtures/completeness/cropland/warning.json +22 -0
  102. package/tests/fixtures/completeness/freshForage/error-animals.json +63 -0
  103. package/tests/fixtures/completeness/freshForage/error-products.json +65 -0
  104. package/tests/fixtures/completeness/freshForage/valid-animal-inputs.json +63 -0
  105. package/tests/fixtures/completeness/freshForage/valid-animals.json +63 -0
  106. package/tests/fixtures/completeness/freshForage/valid-not-grazing-liveAnimal.json +55 -0
  107. package/tests/fixtures/completeness/freshForage/valid-not-liveAnimal.json +47 -0
  108. package/tests/fixtures/completeness/freshForage/valid-products.json +68 -0
  109. package/tests/fixtures/completeness/ingredient/invalid-agri-food-processor.json +37 -0
  110. package/tests/fixtures/completeness/ingredient/invalid.json +49 -0
  111. package/tests/fixtures/completeness/ingredient/valid-agri-food-processor-complete.json +49 -0
  112. package/tests/fixtures/completeness/ingredient/valid-agri-food-processor-incomplete.json +37 -0
  113. package/tests/fixtures/completeness/ingredient/valid.json +49 -0
  114. package/tests/fixtures/completeness/material/error.json +49 -0
  115. package/tests/fixtures/completeness/material/valid-fuel-material.json +60 -0
  116. package/tests/fixtures/completeness/material/valid-incomplete.json +36 -0
  117. package/tests/fixtures/completeness/material/valid-no-fuel.json +36 -0
  118. package/tests/fixtures/completeness/valid.json +22 -0
  119. package/tests/fixtures/cycle/aboveGroundCropResidue/invalid.json +76 -0
  120. package/tests/fixtures/cycle/aboveGroundCropResidue/valid.json +76 -0
  121. package/tests/fixtures/cycle/aggregated-valid.json +102 -0
  122. package/tests/fixtures/cycle/coverCrop/invalid.json +64 -0
  123. package/tests/fixtures/cycle/coverCrop/valid-not-coverCrop.json +54 -0
  124. package/tests/fixtures/cycle/coverCrop/valid.json +64 -0
  125. package/tests/fixtures/cycle/cropResidue/complete/invalid.json +56 -0
  126. package/tests/fixtures/cycle/cropResidue/complete/valid.json +82 -0
  127. package/tests/fixtures/cycle/cropResidue/incomplete/invalid.json +42 -0
  128. package/tests/fixtures/cycle/cropResidue/incomplete/valid.json +56 -0
  129. package/tests/fixtures/cycle/dates/invalid-emissions.json +70 -0
  130. package/tests/fixtures/cycle/liveAnimal-animalProduct-mapping/invalid.json +63 -0
  131. package/tests/fixtures/cycle/liveAnimal-animalProduct-mapping/valid.json +63 -0
  132. package/tests/fixtures/cycle/maximumCycleDuration/invalid-dates-year-only.json +48 -0
  133. package/tests/fixtures/cycle/maximumCycleDuration/invalid-dates.json +48 -0
  134. package/tests/fixtures/cycle/maximumCycleDuration/invalid.json +48 -0
  135. package/tests/fixtures/cycle/maximumCycleDuration/valid-dates-year-only.json +48 -0
  136. package/tests/fixtures/cycle/maximumCycleDuration/valid-dates.json +48 -0
  137. package/tests/fixtures/cycle/maximumCycleDuration/valid.json +48 -0
  138. package/tests/fixtures/cycle/otherSites/cycleDuration/invalid.json +52 -0
  139. package/tests/fixtures/cycle/otherSites/cycleDuration/valid-no-siteDuration.json +40 -0
  140. package/tests/fixtures/cycle/otherSites/cycleDuration/valid.json +52 -0
  141. package/tests/fixtures/cycle/practices/stockingDensityPermanentPastureAverage/invalid.json +56 -0
  142. package/tests/fixtures/cycle/practices/stockingDensityPermanentPastureAverage/valid.json +65 -0
  143. package/tests/fixtures/cycle/primary-product-as-input/invalid.json +59 -0
  144. package/tests/fixtures/cycle/primary-product-as-input/valid.json +48 -0
  145. package/tests/fixtures/cycle/product-linked-ia/cycle.json +66 -0
  146. package/tests/fixtures/cycle/product-linked-ia/invalid-multiple.json +58 -0
  147. package/tests/fixtures/cycle/product-linked-ia/valid.json +57 -0
  148. package/tests/fixtures/cycle/products/animals/invalid.json +69 -0
  149. package/tests/fixtures/cycle/products/animals/valid.json +58 -0
  150. package/tests/fixtures/cycle/riceGrainInHuskFlooded-minimumCycleDuration/invalid.json +53 -0
  151. package/tests/fixtures/cycle/riceGrainInHuskFlooded-minimumCycleDuration/valid.json +53 -0
  152. package/tests/fixtures/cycle/siteDuration/crop/invalid.json +53 -0
  153. package/tests/fixtures/cycle/siteDuration/crop/valid-different-duration.json +53 -0
  154. package/tests/fixtures/cycle/siteDuration/crop/valid-same-duration.json +53 -0
  155. package/tests/fixtures/cycle/siteDuration/invalid.json +41 -0
  156. package/tests/fixtures/cycle/siteDuration/valid-no-siteDuration.json +40 -0
  157. package/tests/fixtures/cycle/siteDuration/valid-otherSites.json +48 -0
  158. package/tests/fixtures/cycle/siteDuration/valid.json +45 -0
  159. package/tests/fixtures/cycle/substrate/required/invalid.json +50 -0
  160. package/tests/fixtures/cycle/substrate/required/valid.json +60 -0
  161. package/tests/fixtures/cycle/valid.json +343 -0
  162. package/tests/fixtures/emission/linked-terms/inputs/invalid.json +78 -0
  163. package/tests/fixtures/emission/linked-terms/inputs/valid.json +106 -0
  164. package/tests/fixtures/emission/linked-terms/transformation/error.json +104 -0
  165. package/tests/fixtures/emission/linked-terms/transformation/valid.json +107 -0
  166. package/tests/fixtures/emission/linked-terms/transformation/warning.json +76 -0
  167. package/tests/fixtures/emission/methodTier-background/invalid.json +60 -0
  168. package/tests/fixtures/emission/methodTier-background/valid.json +60 -0
  169. package/tests/fixtures/emission/not-relevant/invalid.json +71 -0
  170. package/tests/fixtures/emission/not-relevant/valid.json +95 -0
  171. package/tests/fixtures/emission/not-relevant-methodTier/invalid.json +70 -0
  172. package/tests/fixtures/emission/not-relevant-methodTier/valid.json +95 -0
  173. package/tests/fixtures/impactAssessment/aggregated-valid.json +43 -0
  174. package/tests/fixtures/impactAssessment/cycle-contains-product/invalid.json +34 -0
  175. package/tests/fixtures/impactAssessment/cycle-contains-product/valid.json +34 -0
  176. package/tests/fixtures/impactAssessment/cycle-endDate/invalid.json +26 -0
  177. package/tests/fixtures/impactAssessment/cycle-endDate/valid.json +26 -0
  178. package/tests/fixtures/impactAssessment/valid.json +93 -0
  179. package/tests/fixtures/indicator/characterisedIndicator-methodModel/invalid.json +52 -0
  180. package/tests/fixtures/indicator/characterisedIndicator-methodModel/valid.json +52 -0
  181. package/tests/fixtures/indicator/ionisingCompounds/invalid.json +23 -0
  182. package/tests/fixtures/indicator/ionisingCompounds/valid.json +23 -0
  183. package/tests/fixtures/indicator/landTransformation/invalid-grouped.json +257 -0
  184. package/tests/fixtures/indicator/landTransformation/invalid.json +100 -0
  185. package/tests/fixtures/indicator/landTransformation/valid-grouped-full.json +507 -0
  186. package/tests/fixtures/indicator/landTransformation/valid-grouped.json +507 -0
  187. package/tests/fixtures/indicator/landTransformation/valid.json +100 -0
  188. package/tests/fixtures/infrastructure/lifespan/invalid.json +26 -0
  189. package/tests/fixtures/infrastructure/lifespan/valid.json +45 -0
  190. package/tests/fixtures/input/animalFeed-fate/invalid.json +103 -0
  191. package/tests/fixtures/input/animalFeed-fate/valid.json +90 -0
  192. package/tests/fixtures/input/country/invalid.json +64 -0
  193. package/tests/fixtures/input/country/valid.json +64 -0
  194. package/tests/fixtures/input/distribution/animalHousing.json +103 -0
  195. package/tests/fixtures/input/distribution/complete/invalid.json +177 -0
  196. package/tests/fixtures/input/distribution/complete/valid.json +163 -0
  197. package/tests/fixtures/input/distribution/incomplete/valid.json +139 -0
  198. package/tests/fixtures/input/impactAssessment/invalid.json +99 -0
  199. package/tests/fixtures/input/impactAssessment/valid.json +89 -0
  200. package/tests/fixtures/input/input-as-product/invalid.json +57 -0
  201. package/tests/fixtures/input/input-as-product/valid.json +59 -0
  202. package/tests/fixtures/input/mustIncludeId/invalid.json +13 -0
  203. package/tests/fixtures/input/mustIncludeId/valid-multiple-ids.json +31 -0
  204. package/tests/fixtures/input/mustIncludeId/valid.json +22 -0
  205. package/tests/fixtures/input/saplings/invalid.json +58 -0
  206. package/tests/fixtures/input/saplings/valid-no-saplings.json +58 -0
  207. package/tests/fixtures/input/saplings/valid-not-plantation.json +58 -0
  208. package/tests/fixtures/input/saplings/valid.json +58 -0
  209. package/tests/fixtures/integration/distribution/product-yield-invalid.json +54 -0
  210. package/tests/fixtures/management/cycle-overlap/cycles.json +39 -0
  211. package/tests/fixtures/management/cycle-overlap/invalid.json +26 -0
  212. package/tests/fixtures/management/cycle-overlap/valid.json +26 -0
  213. package/tests/fixtures/management/exists/invalid.json +13 -0
  214. package/tests/fixtures/management/exists/valid.json +25 -0
  215. package/tests/fixtures/management/fallow-dates/invalid.json +24 -0
  216. package/tests/fixtures/management/fallow-dates/valid.json +24 -0
  217. package/tests/fixtures/management/termType/invalid-cropland.json +35 -0
  218. package/tests/fixtures/management/termType/invalid-permanent-pasture.json +25 -0
  219. package/tests/fixtures/management/termType/valid-cropland.json +55 -0
  220. package/tests/fixtures/management/termType/valid-no-management.json +13 -0
  221. package/tests/fixtures/management/termType/valid-permanent-pasture.json +35 -0
  222. package/tests/fixtures/measurement/depths/invalid.json +44 -0
  223. package/tests/fixtures/measurement/depths/valid.json +50 -0
  224. package/tests/fixtures/measurement/models/valid.json +33 -0
  225. package/tests/fixtures/measurement/models/warning-no-value.json +30 -0
  226. package/tests/fixtures/measurement/models/warning.json +33 -0
  227. package/tests/fixtures/measurement/pond-measurements/invalid.json +11 -0
  228. package/tests/fixtures/measurement/pond-measurements/valid.json +23 -0
  229. package/tests/fixtures/measurement/required-depths/error.json +71 -0
  230. package/tests/fixtures/measurement/required-depths/valid.json +126 -0
  231. package/tests/fixtures/measurement/required-depths/warning.json +29 -0
  232. package/tests/fixtures/measurement/soilTexture/missing-texture-value.json +227 -0
  233. package/tests/fixtures/measurement/soilTexture/percent-invalid.json +110 -0
  234. package/tests/fixtures/measurement/soilTexture/percent-missing-value.json +43 -0
  235. package/tests/fixtures/measurement/soilTexture/percent-valid.json +110 -0
  236. package/tests/fixtures/measurement/startDate-endDate-required/invalid.json +32 -0
  237. package/tests/fixtures/measurement/startDate-endDate-required/valid.json +46 -0
  238. package/tests/fixtures/measurement/unique/invalid.json +28 -0
  239. package/tests/fixtures/measurement/unique/valid.json +16 -0
  240. package/tests/fixtures/measurement/value-length/invalid.json +46 -0
  241. package/tests/fixtures/measurement/value-length/valid.json +44 -0
  242. package/tests/fixtures/measurement/water-salinity/invalid.json +33 -0
  243. package/tests/fixtures/measurement/water-salinity/valid-brakish.json +40 -0
  244. package/tests/fixtures/measurement/water-salinity/valid.json +33 -0
  245. package/tests/fixtures/organisation/valid.json +26 -0
  246. package/tests/fixtures/practice/croppingDuration/riceGrainInHuskFlooded/invalid.json +63 -0
  247. package/tests/fixtures/practice/croppingDuration/riceGrainInHuskFlooded/valid.json +63 -0
  248. package/tests/fixtures/practice/defaultValue/invalid.json +12 -0
  249. package/tests/fixtures/practice/defaultValue/valid.json +15 -0
  250. package/tests/fixtures/practice/excretaManagement/invalid.json +50 -0
  251. package/tests/fixtures/practice/excretaManagement/valid.json +60 -0
  252. package/tests/fixtures/practice/irrigated-complete/invalid.json +47 -0
  253. package/tests/fixtures/practice/irrigated-complete/valid-incomplete.json +47 -0
  254. package/tests/fixtures/practice/irrigated-complete/valid.json +60 -0
  255. package/tests/fixtures/practice/landCover-products/invalid.json +58 -0
  256. package/tests/fixtures/practice/landCover-products/valid-coverCrop.json +69 -0
  257. package/tests/fixtures/practice/landCover-products/valid.json +58 -0
  258. package/tests/fixtures/practice/liveAnimal-system/invalid.json +58 -0
  259. package/tests/fixtures/practice/liveAnimal-system/valid.json +69 -0
  260. package/tests/fixtures/practice/longFallowDuration/invalid.json +20 -0
  261. package/tests/fixtures/practice/longFallowDuration/valid.json +20 -0
  262. package/tests/fixtures/practice/noTillage/invalid.json +23 -0
  263. package/tests/fixtures/practice/noTillage/valid-value-not-100.json +23 -0
  264. package/tests/fixtures/practice/noTillage/valid.json +21 -0
  265. package/tests/fixtures/practice/pastureGrass/key-termType/invalid.json +16 -0
  266. package/tests/fixtures/practice/pastureGrass/key-termType/valid.json +16 -0
  267. package/tests/fixtures/practice/pastureGrass/key-value/invalid-numbers.json +67 -0
  268. package/tests/fixtures/practice/pastureGrass/key-value/invalid.json +67 -0
  269. package/tests/fixtures/practice/pastureGrass/key-value/valid.json +67 -0
  270. package/tests/fixtures/practice/pastureGrass/permanent-pasture/invalid.json +37 -0
  271. package/tests/fixtures/practice/pastureGrass/permanent-pasture/valid.json +47 -0
  272. package/tests/fixtures/practice/primaryPercent/invalid.json +49 -0
  273. package/tests/fixtures/practice/primaryPercent/valid.json +49 -0
  274. package/tests/fixtures/practice/processingOperation/invalid-no-primary.json +48 -0
  275. package/tests/fixtures/practice/processingOperation/invalid.json +49 -0
  276. package/tests/fixtures/practice/processingOperation/valid-cropland.json +37 -0
  277. package/tests/fixtures/practice/processingOperation/valid.json +49 -0
  278. package/tests/fixtures/practice/productivePhasePermanentCrops/invalid.json +48 -0
  279. package/tests/fixtures/practice/productivePhasePermanentCrops/valid-0-value.json +58 -0
  280. package/tests/fixtures/practice/productivePhasePermanentCrops/valid-no-value.json +47 -0
  281. package/tests/fixtures/practice/productivePhasePermanentCrops/valid.json +48 -0
  282. package/tests/fixtures/practice/site-management/invalid.json +75 -0
  283. package/tests/fixtures/practice/site-management/valid.json +75 -0
  284. package/tests/fixtures/practice/tillage-siteType/valid.json +51 -0
  285. package/tests/fixtures/practice/tillage-siteType/warning.json +42 -0
  286. package/tests/fixtures/practice/tillage-values/invalid-fullTillage.json +61 -0
  287. package/tests/fixtures/practice/tillage-values/invalid-noTillage.json +61 -0
  288. package/tests/fixtures/practice/tillage-values/valid.json +61 -0
  289. package/tests/fixtures/practice/waterRegime/rice/invalid.json +59 -0
  290. package/tests/fixtures/practice/waterRegime/rice/valid-0-value.json +59 -0
  291. package/tests/fixtures/practice/waterRegime/rice/valid.json +58 -0
  292. package/tests/fixtures/product/economicValueShare/invalid.json +31 -0
  293. package/tests/fixtures/product/economicValueShare/valid.json +22 -0
  294. package/tests/fixtures/product/excreta/invalid.json +62 -0
  295. package/tests/fixtures/product/excreta/valid.json +62 -0
  296. package/tests/fixtures/product/excreta/warning.json +53 -0
  297. package/tests/fixtures/product/excreta/with-system/invalid.json +79 -0
  298. package/tests/fixtures/product/excreta/with-system/valid.json +88 -0
  299. package/tests/fixtures/product/excreta/with-system/warning.json +70 -0
  300. package/tests/fixtures/product/fu_ha/invalid.json +49 -0
  301. package/tests/fixtures/product/fu_ha/valid.json +49 -0
  302. package/tests/fixtures/product/primary/invalid.json +22 -0
  303. package/tests/fixtures/product/primary/valid.json +22 -0
  304. package/tests/fixtures/product/value/valid.json +26 -0
  305. package/tests/fixtures/product/value/value-0/error.json +40 -0
  306. package/tests/fixtures/product/value/value-empty/warning.json +23 -0
  307. package/tests/fixtures/product/yield/invalid.json +54 -0
  308. package/tests/fixtures/product/yield/no-value.json +75 -0
  309. package/tests/fixtures/product/yield/valid.json +54 -0
  310. package/tests/fixtures/property/default-value/valid-allowed-exception.json +61 -0
  311. package/tests/fixtures/property/default-value/valid.json +61 -0
  312. package/tests/fixtures/property/default-value/warning.json +61 -0
  313. package/tests/fixtures/property/termType/invalid.json +60 -0
  314. package/tests/fixtures/property/termType/valid.json +60 -0
  315. package/tests/fixtures/property/value-min-max/invalid.json +77 -0
  316. package/tests/fixtures/property/value-min-max/valid-skip-maximum.json +57 -0
  317. package/tests/fixtures/property/value-min-max/valid.json +78 -0
  318. package/tests/fixtures/property/valueType/invalid.json +79 -0
  319. package/tests/fixtures/property/valueType/valid.json +79 -0
  320. package/tests/fixtures/property/volatileSolidsContent/invalid.json +99 -0
  321. package/tests/fixtures/property/volatileSolidsContent/valid.json +99 -0
  322. package/tests/fixtures/shared/coordinates/invalid.json +18 -0
  323. package/tests/fixtures/shared/coordinates/valid.json +18 -0
  324. package/tests/fixtures/shared/data-duplicates/valid.json +113 -0
  325. package/tests/fixtures/shared/data-duplicates/warning.json +172 -0
  326. package/tests/fixtures/shared/duplicated-term-units/invalid-animalProduct.json +61 -0
  327. package/tests/fixtures/shared/duplicated-term-units/invalid-organicFertiliser.json +61 -0
  328. package/tests/fixtures/shared/duplicated-term-units/valid.json +49 -0
  329. package/tests/fixtures/shared/list-country-region/invalid.json +54 -0
  330. package/tests/fixtures/shared/list-country-region/valid.json +54 -0
  331. package/tests/fixtures/shared/list-percent-value/invalid.json +49 -0
  332. package/tests/fixtures/shared/list-percent-value/valid.json +52 -0
  333. package/tests/fixtures/shared/list-valueType/invalid.json +49 -0
  334. package/tests/fixtures/shared/list-valueType/valid.json +49 -0
  335. package/tests/fixtures/shared/list-values-sum-100/management/with-properties/valid.json +91 -0
  336. package/tests/fixtures/shared/list-values-sum-100/measurements/missing-soil.json +46 -0
  337. package/tests/fixtures/shared/list-values-sum-100/measurements/no-depth-high-value.json +63 -0
  338. package/tests/fixtures/shared/list-values-sum-100/measurements/no-depth-valid.json +40 -0
  339. package/tests/fixtures/shared/list-values-sum-100/measurements/with-depth-high-value.json +71 -0
  340. package/tests/fixtures/shared/list-values-sum-100/practices/total-100.json +61 -0
  341. package/tests/fixtures/shared/list-values-sum-100/practices/total-110.json +61 -0
  342. package/tests/fixtures/shared/list-values-sum-100/practices/total-90.json +61 -0
  343. package/tests/fixtures/shared/min-max/value-above.json +31 -0
  344. package/tests/fixtures/shared/min-max/value-below.json +31 -0
  345. package/tests/fixtures/shared/min-max/value-valid.json +45 -0
  346. package/tests/fixtures/shared/model/emissions/invalid.json +102 -0
  347. package/tests/fixtures/shared/model/emissions/valid-variable-tolerance.json +180 -0
  348. package/tests/fixtures/shared/model/emissions/valid.json +102 -0
  349. package/tests/fixtures/shared/model/impacts/invalid.json +75 -0
  350. package/tests/fixtures/shared/model/impacts/valid.json +75 -0
  351. package/tests/fixtures/shared/model/inputs/valid-no-value.json +84 -0
  352. package/tests/fixtures/shared/model/inputs/valid.json +87 -0
  353. package/tests/fixtures/shared/model/inputs/warning.json +87 -0
  354. package/tests/fixtures/shared/model/products/valid-no-value.json +88 -0
  355. package/tests/fixtures/shared/model/products/valid.json +91 -0
  356. package/tests/fixtures/shared/model/products/warning.json +91 -0
  357. package/tests/fixtures/shared/otherModel/invalid.json +69 -0
  358. package/tests/fixtures/shared/otherModel/valid.json +70 -0
  359. package/tests/fixtures/shared/properties-duplicate-values/invalid.json +61 -0
  360. package/tests/fixtures/shared/properties-duplicate-values/valid.json +57 -0
  361. package/tests/fixtures/shared/properties-same-length/invalid.json +62 -0
  362. package/tests/fixtures/shared/properties-same-length/valid.json +52 -0
  363. package/tests/fixtures/shared/unit-percent/invalid.json +34 -0
  364. package/tests/fixtures/shared/unit-percent/valid.json +60 -0
  365. package/tests/fixtures/shared/unit-percent/warning.json +52 -0
  366. package/tests/fixtures/site/cycles-linked-ia/invalid.json +129 -0
  367. package/tests/fixtures/site/cycles-linked-ia/valid.json +129 -0
  368. package/tests/fixtures/site/valid.json +138 -0
  369. package/tests/fixtures/source/valid.json +19 -0
  370. package/tests/fixtures/transformation/excretaManagement/invalid.json +47 -0
  371. package/tests/fixtures/transformation/excretaManagement/valid.json +59 -0
  372. package/tests/fixtures/transformation/inputs-products/invalid.json +43 -0
  373. package/tests/fixtures/transformation/inputs-products/valid.json +43 -0
  374. package/tests/fixtures/transformation/linked-emission/invalid.json +101 -0
  375. package/tests/fixtures/transformation/linked-emission/valid.json +107 -0
  376. package/tests/fixtures/transformation/previousTransformationId/invalid-no-previous.json +127 -0
  377. package/tests/fixtures/transformation/previousTransformationId/invalid-previous-input.json +100 -0
  378. package/tests/fixtures/transformation/previousTransformationId/invalid-product-input.json +106 -0
  379. package/tests/fixtures/transformation/previousTransformationId/invalid-wrong-order.json +136 -0
  380. package/tests/fixtures/transformation/previousTransformationId/valid.json +171 -0
  381. package/tests/integration/__init__.py +0 -0
  382. package/tests/integration/test_product.py +17 -0
  383. package/tests/test_gee.py +10 -0
  384. package/tests/test_utils.py +36 -0
  385. package/tests/test_validation.py +11 -0
  386. package/tests/utils.py +28 -0
  387. package/tests/validators/__init__.py +0 -0
  388. package/tests/validators/test_aggregated_cycle.py +44 -0
  389. package/tests/validators/test_aggregated_shared.py +63 -0
  390. package/tests/validators/test_animal.py +72 -0
  391. package/tests/validators/test_completeness.py +337 -0
  392. package/tests/validators/test_cycle.py +600 -0
  393. package/tests/validators/test_emission.py +170 -0
  394. package/tests/validators/test_impact_assessment.py +80 -0
  395. package/tests/validators/test_indicator.py +120 -0
  396. package/tests/validators/test_infrastructure.py +26 -0
  397. package/tests/validators/test_input.py +434 -0
  398. package/tests/validators/test_management.py +177 -0
  399. package/tests/validators/test_measurement.py +317 -0
  400. package/tests/validators/test_organisation.py +32 -0
  401. package/tests/validators/test_practice.py +490 -0
  402. package/tests/validators/test_product.py +291 -0
  403. package/tests/validators/test_property.py +143 -0
  404. package/tests/validators/test_shared.py +1139 -0
  405. package/tests/validators/test_site.py +151 -0
  406. package/tests/validators/test_source.py +15 -0
  407. package/tests/validators/test_transformation.py +151 -0
  408. package/tests/validators/test_validators.py +74 -0
  409. package/tsconfig.dist.json +9 -0
  410. package/tsconfig.json +25 -0
package/.coveragerc ADDED
@@ -0,0 +1,14 @@
1
+ [run]
2
+ omit =
3
+ setup.py
4
+ build_mocking.py
5
+ validateData.py
6
+ run.py
7
+ **/version.py
8
+ tests/*
9
+ hestia_earth/validation/log.py
10
+ hestia_earth/validation/gee.py
11
+ hestia_earth/validation/mocking/*
12
+
13
+ [html]
14
+ directory=coverage
package/.dockerignore ADDED
@@ -0,0 +1,19 @@
1
+ bin/
2
+ coverage/
3
+ dist/
4
+ docs/
5
+ node_modules/
6
+ samples/
7
+ scripts/
8
+ tmp/
9
+ envs/
10
+ .coveragerc
11
+ .flake8
12
+ *.json
13
+ *.md
14
+ *.sh
15
+ *.yml
16
+ .git
17
+ .gitlab
18
+ layer/python/
19
+ *.zip
package/.eslintignore ADDED
@@ -0,0 +1,17 @@
1
+ .eslintrc.js
2
+ coverage
3
+ build
4
+ build-lambdas
5
+ commitlint.config.js
6
+ .mocharc.js
7
+ alembic/
8
+ app/
9
+ data/
10
+ dist/
11
+ doc/
12
+ layer/
13
+ load_testing/
14
+ rabbit/
15
+ samples/
16
+ scripts/
17
+ jest.config.js
package/.eslintrc.js ADDED
@@ -0,0 +1,11 @@
1
+ module.exports = {
2
+ env: {
3
+ node: true
4
+ },
5
+ extends: ['@hestia-earth/eslint-config'],
6
+ parser: '@typescript-eslint/parser',
7
+ parserOptions: {
8
+ project: 'tsconfig.json',
9
+ sourceType: 'module'
10
+ }
11
+ };
package/.flake8 ADDED
@@ -0,0 +1,5 @@
1
+ [flake8]
2
+ exclude = layer, scripts, run.py
3
+ ignore = E402, E704, E203, W503, E226
4
+ max-line-length = 120
5
+ max-complexity = 4
@@ -0,0 +1,82 @@
1
+ # New Validation
2
+
3
+ ## Validation
4
+
5
+ <!-- Please describe what the validation does -->
6
+
7
+ ### Validation Conditions
8
+
9
+ <!--
10
+
11
+ Please describe the conditions when the validation will return the error/warning message.
12
+
13
+ Example:
14
+ - If the Cycle `functionalUnit` is equal to `1 ha`
15
+ - If the primary Product `units` is equal to `ha`
16
+ - If the product `value` is equal to `0`
17
+ - Then show error
18
+
19
+ -->
20
+
21
+ ### Validation Level
22
+
23
+ <!-- Please select the validation level by entering an "x" instead of the space in the brackets -->
24
+
25
+ - [ ] Warning: this might be an error, but we will still allow the upload to be validated.
26
+ - [ ] Error: this is an error and must be fixed to validate the upload.
27
+
28
+ ## Example
29
+
30
+ <!--
31
+
32
+ Please provide an example of data to validate and the validation message below.
33
+
34
+ Note: you can write the example in a Excel (export to CSV) or directly a CSV file, and use the [Convert Files tool](https://www.hestia.earth/files/tools) on the platform to convert to JSON.
35
+
36
+ -->
37
+
38
+ ### Input Data
39
+
40
+ <!--
41
+ Example:
42
+
43
+ ```
44
+ {
45
+ "@type": "Cycle",
46
+ "functionalUnit: "1ha",
47
+ "products": [
48
+ {
49
+ "@type": "Product",
50
+ "term": {
51
+ "units": "ha"
52
+ },
53
+ "value": [
54
+ 0
55
+ ]
56
+ }
57
+ ]
58
+ }
59
+ ```
60
+ -->
61
+
62
+
63
+ ### Output error/warning message
64
+
65
+ <!--
66
+ Use the following structure:
67
+ - Describe error.
68
+ - Say why important to fix (especially for warnings where they are optional).
69
+ - Describe how to fix (if not obvious).
70
+
71
+ ```
72
+ The value for the a Product in ha must be above `0` or we can not calculate an impact.
73
+ ```
74
+ -->
75
+
76
+ ## Additional Notes
77
+
78
+ <!-- Add further notes if necessary -->
79
+
80
+ /label ~"Type::feature"
81
+ /label ~"Priority::LOW"
82
+ /label ~"Tracking::Triage"
package/.gitlab-ci.yml ADDED
@@ -0,0 +1,216 @@
1
+ default:
2
+ image: python:3.12
3
+ before_script:
4
+ - pip install -r requirements.txt
5
+
6
+ stages:
7
+ - test
8
+ - build
9
+ - deploy
10
+ - post-deploy
11
+ # needs to happen after deploy version
12
+ - build-layer
13
+ - deploy-layer
14
+
15
+ lint-commit:
16
+ image: node:22
17
+ stage: test
18
+ before_script:
19
+ - npm install
20
+ script:
21
+ # only fetch the last 100 commits on develop to check against
22
+ - git fetch origin develop --depth=100
23
+ - npx commitlint --from=origin/develop
24
+ except:
25
+ - tags
26
+ - develop
27
+ - master
28
+
29
+ lint:
30
+ stage: test
31
+ before_script:
32
+ - pip install flake8 black
33
+ script:
34
+ - flake8
35
+ - black --check .
36
+ except:
37
+ - tags
38
+
39
+ validate-jsonld:
40
+ image: node:22
41
+ stage: test
42
+ before_script:
43
+ - npm install
44
+ script:
45
+ - npm test
46
+ except:
47
+ - tags
48
+
49
+ test:
50
+ stage: test
51
+ variables:
52
+ AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID_RO
53
+ AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY_RO
54
+ before_script:
55
+ - pip install -r requirements-test.txt
56
+ script:
57
+ - pytest -n 5 --cov-config=.coveragerc --cov-report term --cov-report html --cov-report xml --cov=./ --cov-fail-under=95
58
+ coverage: /Total coverage\s*:\s*([^%]+)/
59
+ artifacts:
60
+ paths:
61
+ - coverage/
62
+ reports:
63
+ coverage_report:
64
+ coverage_format: cobertura
65
+ path: coverage.xml
66
+ except:
67
+ - tags
68
+
69
+ build-mocking:
70
+ stage: build
71
+ script:
72
+ - python build_mocking.py search-results.json
73
+ artifacts:
74
+ paths:
75
+ - search-results.json
76
+ only:
77
+ - develop
78
+ - tags
79
+
80
+ build-validation-json:
81
+ stage: build
82
+ script:
83
+ - python scripts/build_validation_list.py --input-folder hestia_earth/validation/validators --output-file validation.json
84
+ artifacts:
85
+ paths:
86
+ - validation.json
87
+ only:
88
+ - develop
89
+ - tags
90
+
91
+ deploy-dev:
92
+ stage: deploy
93
+ script:
94
+ - cp search-results.json hestia_earth/validation/.
95
+ - pip install twine setuptools wheel
96
+ - python setup.py sdist bdist_wheel
97
+ - twine upload -u $PYPI_USERNAME -p $PYPI_TOKEN_TEST --repository-url https://test.pypi.org/legacy/ dist/* || true
98
+ only:
99
+ - develop
100
+
101
+ deploy:
102
+ stage: deploy
103
+ script:
104
+ - cp search-results.json hestia_earth/validation/.
105
+ - pip install twine setuptools wheel
106
+ - python setup.py sdist bdist_wheel
107
+ - twine upload -u $PYPI_USERNAME -p $PYPI_TOKEN --skip-existing dist/*
108
+ only:
109
+ - tags
110
+
111
+ docs-python:
112
+ stage: deploy
113
+ artifacts:
114
+ paths:
115
+ - public/
116
+ before_script:
117
+ - cd docs
118
+ - pip install -r requirements.txt
119
+ script:
120
+ - make html
121
+ - cd ../
122
+ - mv docs/_build/html public
123
+ only:
124
+ - develop
125
+ - tags
126
+
127
+ build-layer:
128
+ image: docker:stable
129
+ stage: build-layer
130
+ services:
131
+ - docker:dind
132
+ artifacts:
133
+ paths:
134
+ - layer/python
135
+ before_script:
136
+ - chmod +x layer/build.sh
137
+ script:
138
+ - ./layer/build.sh
139
+ only:
140
+ - develop
141
+ - master
142
+
143
+ deploy-layer:
144
+ stage: deploy-layer
145
+ before_script:
146
+ - source envs/.${CI_COMMIT_REF_NAME}.env
147
+ - pip install awscli
148
+ - apt-get update && apt-get install -y zip
149
+ - chmod +x layer/deploy.sh
150
+ script:
151
+ - ./layer/deploy.sh $STAGE
152
+ only:
153
+ - develop
154
+ - master
155
+
156
+ deploy-guide:
157
+ stage: deploy
158
+ trigger:
159
+ project: hestia-earth/hestia-guide
160
+ branch: ${CI_COMMIT_REF_NAME}
161
+ only:
162
+ - develop
163
+ - master
164
+
165
+ .delete-guide-dev:
166
+ before_script:
167
+ - BRANCH_NAME=$(echo "hestia-data-validation${CI_COMMIT_BRANCH}" | sed 's/\//-/g')
168
+ - curl --request DELETE --header "PRIVATE-TOKEN:${GITLAB_TOKEN_GUIDE}" "https://gitlab.com/api/v4/projects/${GITLAB_GUIDE_PROJECT_ID}/repository/branches/${BRANCH_NAME}"
169
+
170
+ deploy-guide-dev:
171
+ stage: deploy
172
+ environment:
173
+ name: $CI_COMMIT_BRANCH
174
+ url: https://www-dev.hestia.earth/guide?branch=hestia-data-validation${CI_COMMIT_BRANCH}
175
+ on_stop: remove-guide-dev
176
+ extends:
177
+ - .delete-guide-dev
178
+ script:
179
+ - apt-get update && apt-get install -y jq
180
+ - ./scripts/guide-create-branch.sh "${BRANCH_NAME}" "${GITLAB_TOKEN_GUIDE}"
181
+ only:
182
+ - branches
183
+ except:
184
+ - develop
185
+ - master
186
+
187
+ remove-guide-dev:
188
+ stage: post-deploy
189
+ when: manual
190
+ variables:
191
+ GIT_STRATEGY: none
192
+ environment:
193
+ name: $CI_COMMIT_BRANCH
194
+ action: stop
195
+ extends:
196
+ - .delete-guide-dev
197
+ script:
198
+ - echo "Done"
199
+ only:
200
+ - branches
201
+ except:
202
+ - develop
203
+ - master
204
+
205
+ publish-js:
206
+ image: node:22
207
+ stage: deploy
208
+ before_script:
209
+ - npm install
210
+ script:
211
+ - npm run build:module
212
+ - npm config set //registry.npmjs.org/:_authToken=${NPM_TOKEN}
213
+ - rm *.md
214
+ - npm publish --access public --verbose
215
+ only:
216
+ - tags
@@ -0,0 +1,24 @@
1
+ # .readthedocs.yml
2
+ # Read the Docs configuration file
3
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
4
+
5
+ # Required
6
+ version: 2
7
+
8
+ # Build documentation in the docs/ directory with Sphinx
9
+ sphinx:
10
+ configuration: docs/conf.py
11
+
12
+ # Build documentation with MkDocs
13
+ #mkdocs:
14
+ # configuration: mkdocs.yml
15
+
16
+ # Optionally build your docs in additional formats such as PDF
17
+ #formats:
18
+ # - pdf
19
+
20
+ # Optionally set the version of Python and requirements required to build your docs
21
+ python:
22
+ version: 3.7
23
+ install:
24
+ - requirements: docs/requirements.txt
package/CODEOWNERS ADDED
@@ -0,0 +1,11 @@
1
+ # admins
2
+ CODEOWNERS @mebibou
3
+ /envs/ @mebibou
4
+ .gitlab-ci.yml @mebibou
5
+ setup.py @mebibouu
6
+ layer/* @hestia-earth @mebibou
7
+
8
+ # hestia
9
+ CONTRIBUTING.md @hestia-earth
10
+ LICENSE @hestia-earth
11
+ README.md @hestia-earth
package/Dockerfile ADDED
@@ -0,0 +1,13 @@
1
+ FROM python:3.12
2
+
3
+ WORKDIR /app
4
+
5
+ RUN pip install python-dotenv
6
+
7
+ COPY requirements.txt /app/requirements.txt
8
+ COPY requirements-ci.txt /app/requirements-ci.txt
9
+ RUN pip install -r requirements-ci.txt
10
+
11
+ COPY . /app
12
+
13
+ CMD run.py
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019-2025 Harmonised Environmental Storage and Tracking of the Impacts of Agriculture (HESTIA) Project
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/MANIFEST.in ADDED
@@ -0,0 +1,2 @@
1
+ include README.md
2
+ include hestia_earth/validation/mocking/*.json
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import os
4
+ import sys
5
+ import glob
6
+ import json
7
+ from hestia_earth.utils.tools import flatten
8
+ from hestia_earth.validation.preload_requests import enable_preload
9
+ from hestia_earth.validation import validate
10
+ import numpy as np
11
+
12
+
13
+ # fix error "Object of type int64 is not JSON serializable"
14
+ class NpEncoder(json.JSONEncoder):
15
+ def default(self, obj):
16
+ if isinstance(obj, np.integer):
17
+ return int(obj)
18
+ if isinstance(obj, np.floating):
19
+ return float(obj)
20
+ if isinstance(obj, np.ndarray):
21
+ return obj.tolist()
22
+ return super(NpEncoder, self).default(obj)
23
+
24
+
25
+ # disable GEE_API
26
+ os.environ['VALIDATE_SPATIAL'] = 'false'
27
+ # enable validation on all nodes
28
+ os.environ['VALIDATE_EXISTING_NODES'] = 'true'
29
+ EXTENSIONS = [
30
+ 'jsonld',
31
+ 'json',
32
+ 'hestia'
33
+ ]
34
+
35
+
36
+ def list_files(folder: str):
37
+ return flatten([
38
+ list(glob.iglob(f"{folder}/**/*.{ext}", recursive=True)) for ext in EXTENSIONS
39
+ ])
40
+
41
+
42
+ def filter_by_level(values: list, level: str):
43
+ return list(filter(lambda v: isinstance(v, dict) and v.get('level', 'error') == level, values))
44
+
45
+
46
+ def error_to_string(errors: list, warnings: list):
47
+ return json.dumps({'errors': errors, 'warnings': warnings}, indent=2, cls=NpEncoder)
48
+
49
+
50
+ def validate_file(filepath: str):
51
+ with open(filepath) as f:
52
+ data = json.load(f)
53
+
54
+ print('Validating file', filepath)
55
+ nodes = data if isinstance(data, list) else data.get('nodes', [data])
56
+ results = validate(nodes)
57
+ errors = list(map(lambda v: filter_by_level(v, 'error'), results))
58
+ warnings = list(map(lambda v: filter_by_level(v, 'warning'), results))
59
+ has_errors = next((True for x in errors if len(x) > 0), False)
60
+ return has_errors, errors, warnings
61
+
62
+
63
+ def main(args: list):
64
+ folder, = args
65
+ files = list_files(folder)
66
+ exit_code = ''
67
+
68
+ enable_preload(use_glossary=True)
69
+
70
+ for file in files:
71
+ has_errors, errors, warnings = validate_file(file)
72
+ if has_errors:
73
+ error = error_to_string(errors, warnings)
74
+ exit_code += f"Validation of {file} failed:\n{error}\n"
75
+
76
+ return 0 if exit_code == '' else exit_code
77
+
78
+
79
+ if __name__ == '__main__':
80
+ sys.exit(main(sys.argv[1:]))
@@ -0,0 +1,14 @@
1
+ import sys
2
+ import json
3
+ from hestia_earth.validation.terms import RESULTS_PATH, get_all_terms
4
+
5
+
6
+ def main(args: list):
7
+ filepath = args[0] if len(args) > 0 else RESULTS_PATH
8
+ data = get_all_terms()
9
+ with open(filepath, "w") as f:
10
+ f.write(json.dumps(data, indent=2, ensure_ascii=False))
11
+
12
+
13
+ if __name__ == "__main__":
14
+ main(sys.argv[1:])
@@ -0,0 +1 @@
1
+ module.exports = {extends: ['@commitlint/config-conventional']}
package/docs/Makefile ADDED
@@ -0,0 +1,20 @@
1
+ # Minimal makefile for Sphinx documentation
2
+ #
3
+
4
+ # You can set these variables from the command line, and also
5
+ # from the environment for the first two.
6
+ SPHINXOPTS ?=
7
+ SPHINXBUILD ?= sphinx-build
8
+ SOURCEDIR = .
9
+ BUILDDIR = _build
10
+
11
+ # Put it first so that "make" without argument is like "make help".
12
+ help:
13
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
+
15
+ .PHONY: help Makefile
16
+
17
+ # Catch-all target: route all unknown targets to Sphinx using the new
18
+ # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19
+ %: Makefile
20
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@@ -0,0 +1,4 @@
1
+ .wy-nav-content {
2
+ max-width: none;
3
+ min-height: 100vh;
4
+ }
@@ -0,0 +1,34 @@
1
+ {{ fullname | escape | underline}}
2
+
3
+ .. currentmodule:: {{ module }}
4
+
5
+ .. autoclass:: {{ objname }}
6
+ :members:
7
+ :show-inheritance:
8
+ :inherited-members:
9
+ :special-members: __call__, __add__, __mul__
10
+
11
+ {% block methods %}
12
+ {% if methods %}
13
+ .. rubric:: {{ _('Methods') }}
14
+
15
+ .. autosummary::
16
+ :nosignatures:
17
+ {% for item in methods %}
18
+ {%- if not item.startswith('_') %}
19
+ ~{{ name }}.{{ item }}
20
+ {%- endif -%}
21
+ {%- endfor %}
22
+ {% endif %}
23
+ {% endblock %}
24
+
25
+ {% block attributes %}
26
+ {% if attributes %}
27
+ .. rubric:: {{ _('Attributes') }}
28
+
29
+ .. autosummary::
30
+ {% for item in attributes %}
31
+ ~{{ name }}.{{ item }}
32
+ {%- endfor %}
33
+ {% endif %}
34
+ {% endblock %}
@@ -0,0 +1,66 @@
1
+ {{ fullname | escape | underline}}
2
+
3
+ .. automodule:: {{ fullname }}
4
+
5
+ {% block attributes %}
6
+ {% if attributes %}
7
+ .. rubric:: Module attributes
8
+
9
+ .. autosummary::
10
+ :toctree:
11
+ {% for item in attributes %}
12
+ {{ item }}
13
+ {%- endfor %}
14
+ {% endif %}
15
+ {% endblock %}
16
+
17
+ {% block functions %}
18
+ {% if functions %}
19
+ .. rubric:: {{ _('Functions') }}
20
+
21
+ .. autosummary::
22
+ :toctree:
23
+ :nosignatures:
24
+ {% for item in functions %}
25
+ {{ item }}
26
+ {%- endfor %}
27
+ {% endif %}
28
+ {% endblock %}
29
+
30
+ {% block classes %}
31
+ {% if classes %}
32
+ .. rubric:: {{ _('Classes') }}
33
+
34
+ .. autosummary::
35
+ :toctree:
36
+ :template: custom-class-template.rst
37
+ :nosignatures:
38
+ {% for item in classes %}
39
+ {{ item }}
40
+ {%- endfor %}
41
+ {% endif %}
42
+ {% endblock %}
43
+
44
+ {% block exceptions %}
45
+ {% if exceptions %}
46
+ .. rubric:: {{ _('Exceptions') }}
47
+
48
+ .. autosummary::
49
+ :toctree:
50
+ {% for item in exceptions %}
51
+ {{ item }}
52
+ {%- endfor %}
53
+ {% endif %}
54
+ {% endblock %}
55
+
56
+ {% block modules %}
57
+ {% if modules %}
58
+ .. autosummary::
59
+ :toctree:
60
+ :template: custom-module-template.rst
61
+ :recursive:
62
+ {% for item in modules %}
63
+ {{ item }}
64
+ {%- endfor %}
65
+ {% endif %}
66
+ {% endblock %}
@@ -0,0 +1,4 @@
1
+ {% extends "!layout.html" %}
2
+ {% block extrahead %}
3
+ <link href="{{ pathto("_static/styles.css", True) }}" rel="stylesheet" type="text/css">
4
+ {% endblock %}