@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.
- package/.coveragerc +14 -0
- package/.dockerignore +19 -0
- package/.eslintignore +17 -0
- package/.eslintrc.js +11 -0
- package/.flake8 +5 -0
- package/.gitlab/issue_templates/new validation.md +82 -0
- package/.gitlab-ci.yml +216 -0
- package/.readthedocs.yml +24 -0
- package/CODEOWNERS +11 -0
- package/Dockerfile +13 -0
- package/LICENSE +21 -0
- package/MANIFEST.in +2 -0
- package/bin/hestia-validate-data +80 -0
- package/build_mocking.py +14 -0
- package/commitlint.config.js +1 -0
- package/docs/Makefile +20 -0
- package/docs/_static/styles.css +4 -0
- package/docs/_templates/custom-class-template.rst +34 -0
- package/docs/_templates/custom-module-template.rst +66 -0
- package/docs/_templates/layout.html +4 -0
- package/docs/conf.py +74 -0
- package/docs/index.rst +42 -0
- package/docs/make.bat +35 -0
- package/docs/requirements.txt +13 -0
- package/envs/.develop.env +1 -0
- package/envs/.master.env +1 -0
- package/guide-assets/.gitkeep +0 -0
- package/hestia_earth/validation/README.md +5 -0
- package/hestia_earth/validation/__init__.py +32 -0
- package/hestia_earth/validation/distribution.py +22 -0
- package/hestia_earth/validation/gee.py +162 -0
- package/hestia_earth/validation/log.py +44 -0
- package/hestia_earth/validation/models.py +141 -0
- package/hestia_earth/validation/preload_requests.py +61 -0
- package/hestia_earth/validation/terms.py +88 -0
- package/hestia_earth/validation/utils.py +444 -0
- package/hestia_earth/validation/validators/__init__.py +141 -0
- package/hestia_earth/validation/validators/aggregated_cycle.py +32 -0
- package/hestia_earth/validation/validators/aggregated_shared.py +37 -0
- package/hestia_earth/validation/validators/animal.py +88 -0
- package/hestia_earth/validation/validators/completeness.py +252 -0
- package/hestia_earth/validation/validators/cycle.py +1123 -0
- package/hestia_earth/validation/validators/distribution.py +86 -0
- package/hestia_earth/validation/validators/emission.py +109 -0
- package/hestia_earth/validation/validators/impact_assessment.py +138 -0
- package/hestia_earth/validation/validators/indicator.py +154 -0
- package/hestia_earth/validation/validators/infrastructure.py +25 -0
- package/hestia_earth/validation/validators/input.py +268 -0
- package/hestia_earth/validation/validators/management.py +131 -0
- package/hestia_earth/validation/validators/measurement.py +368 -0
- package/hestia_earth/validation/validators/organisation.py +43 -0
- package/hestia_earth/validation/validators/practice.py +590 -0
- package/hestia_earth/validation/validators/product.py +263 -0
- package/hestia_earth/validation/validators/property.py +266 -0
- package/hestia_earth/validation/validators/shared.py +940 -0
- package/hestia_earth/validation/validators/site.py +312 -0
- package/hestia_earth/validation/validators/source.py +20 -0
- package/hestia_earth/validation/validators/transformation.py +250 -0
- package/hestia_earth/validation/version.py +1 -0
- package/layer/build.sh +34 -0
- package/layer/deploy.sh +18 -0
- package/package.json +59 -0
- package/release.sh +11 -0
- package/requirements-ci.txt +6 -0
- package/requirements-test.txt +4 -0
- package/requirements.txt +2 -0
- package/run-docker-test.sh +7 -0
- package/run-docker.sh +9 -0
- package/run.py +99 -0
- package/scripts/build_docs.py +283 -0
- package/scripts/build_validation_list.py +160 -0
- package/scripts/guide-create-branch.sh +15 -0
- package/scripts/update-package-version.js +28 -0
- package/search-results.json +384 -0
- package/setup.cfg +2 -0
- package/setup.py +35 -0
- package/src/index.ts +1 -0
- package/src/validations.ts +22 -0
- package/src/version.ts +1 -0
- package/tests/Dockerfile +13 -0
- package/tests/__init__.py +3 -0
- package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/invalid-no-impactAssessment.json +64 -0
- package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/invalid-world.json +69 -0
- package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/valid.json +69 -0
- package/tests/fixtures/animal/duplicated-input-cycle/invalid.json +98 -0
- package/tests/fixtures/animal/duplicated-input-cycle/valid.json +91 -0
- package/tests/fixtures/animal/pregnancyRateTotal/invalid.json +49 -0
- package/tests/fixtures/animal/pregnancyRateTotal/valid.json +60 -0
- package/tests/fixtures/animal/required/invalid.json +59 -0
- package/tests/fixtures/animal/required/valid.json +72 -0
- package/tests/fixtures/completeness/all-values/warning.json +22 -0
- package/tests/fixtures/completeness/animalPopulation/invalid.json +58 -0
- package/tests/fixtures/completeness/animalPopulation/valid-animals.json +71 -0
- package/tests/fixtures/completeness/animalPopulation/valid-incomplete.json +58 -0
- package/tests/fixtures/completeness/animalPopulation/valid-no-liveAnimals.json +37 -0
- package/tests/fixtures/completeness/blank-nodes/agri-food processor-invalid.json +52 -0
- package/tests/fixtures/completeness/blank-nodes/invalid.json +124 -0
- package/tests/fixtures/completeness/blank-nodes/valid.json +128 -0
- package/tests/fixtures/completeness/cropland/site.json +16 -0
- package/tests/fixtures/completeness/cropland/valid.json +22 -0
- package/tests/fixtures/completeness/cropland/warning.json +22 -0
- package/tests/fixtures/completeness/freshForage/error-animals.json +63 -0
- package/tests/fixtures/completeness/freshForage/error-products.json +65 -0
- package/tests/fixtures/completeness/freshForage/valid-animal-inputs.json +63 -0
- package/tests/fixtures/completeness/freshForage/valid-animals.json +63 -0
- package/tests/fixtures/completeness/freshForage/valid-not-grazing-liveAnimal.json +55 -0
- package/tests/fixtures/completeness/freshForage/valid-not-liveAnimal.json +47 -0
- package/tests/fixtures/completeness/freshForage/valid-products.json +68 -0
- package/tests/fixtures/completeness/ingredient/invalid-agri-food-processor.json +37 -0
- package/tests/fixtures/completeness/ingredient/invalid.json +49 -0
- package/tests/fixtures/completeness/ingredient/valid-agri-food-processor-complete.json +49 -0
- package/tests/fixtures/completeness/ingredient/valid-agri-food-processor-incomplete.json +37 -0
- package/tests/fixtures/completeness/ingredient/valid.json +49 -0
- package/tests/fixtures/completeness/material/error.json +49 -0
- package/tests/fixtures/completeness/material/valid-fuel-material.json +60 -0
- package/tests/fixtures/completeness/material/valid-incomplete.json +36 -0
- package/tests/fixtures/completeness/material/valid-no-fuel.json +36 -0
- package/tests/fixtures/completeness/valid.json +22 -0
- package/tests/fixtures/cycle/aboveGroundCropResidue/invalid.json +76 -0
- package/tests/fixtures/cycle/aboveGroundCropResidue/valid.json +76 -0
- package/tests/fixtures/cycle/aggregated-valid.json +102 -0
- package/tests/fixtures/cycle/coverCrop/invalid.json +64 -0
- package/tests/fixtures/cycle/coverCrop/valid-not-coverCrop.json +54 -0
- package/tests/fixtures/cycle/coverCrop/valid.json +64 -0
- package/tests/fixtures/cycle/cropResidue/complete/invalid.json +56 -0
- package/tests/fixtures/cycle/cropResidue/complete/valid.json +82 -0
- package/tests/fixtures/cycle/cropResidue/incomplete/invalid.json +42 -0
- package/tests/fixtures/cycle/cropResidue/incomplete/valid.json +56 -0
- package/tests/fixtures/cycle/dates/invalid-emissions.json +70 -0
- package/tests/fixtures/cycle/liveAnimal-animalProduct-mapping/invalid.json +63 -0
- package/tests/fixtures/cycle/liveAnimal-animalProduct-mapping/valid.json +63 -0
- package/tests/fixtures/cycle/maximumCycleDuration/invalid-dates-year-only.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/invalid-dates.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/invalid.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/valid-dates-year-only.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/valid-dates.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/valid.json +48 -0
- package/tests/fixtures/cycle/otherSites/cycleDuration/invalid.json +52 -0
- package/tests/fixtures/cycle/otherSites/cycleDuration/valid-no-siteDuration.json +40 -0
- package/tests/fixtures/cycle/otherSites/cycleDuration/valid.json +52 -0
- package/tests/fixtures/cycle/practices/stockingDensityPermanentPastureAverage/invalid.json +56 -0
- package/tests/fixtures/cycle/practices/stockingDensityPermanentPastureAverage/valid.json +65 -0
- package/tests/fixtures/cycle/primary-product-as-input/invalid.json +59 -0
- package/tests/fixtures/cycle/primary-product-as-input/valid.json +48 -0
- package/tests/fixtures/cycle/product-linked-ia/cycle.json +66 -0
- package/tests/fixtures/cycle/product-linked-ia/invalid-multiple.json +58 -0
- package/tests/fixtures/cycle/product-linked-ia/valid.json +57 -0
- package/tests/fixtures/cycle/products/animals/invalid.json +69 -0
- package/tests/fixtures/cycle/products/animals/valid.json +58 -0
- package/tests/fixtures/cycle/riceGrainInHuskFlooded-minimumCycleDuration/invalid.json +53 -0
- package/tests/fixtures/cycle/riceGrainInHuskFlooded-minimumCycleDuration/valid.json +53 -0
- package/tests/fixtures/cycle/siteDuration/crop/invalid.json +53 -0
- package/tests/fixtures/cycle/siteDuration/crop/valid-different-duration.json +53 -0
- package/tests/fixtures/cycle/siteDuration/crop/valid-same-duration.json +53 -0
- package/tests/fixtures/cycle/siteDuration/invalid.json +41 -0
- package/tests/fixtures/cycle/siteDuration/valid-no-siteDuration.json +40 -0
- package/tests/fixtures/cycle/siteDuration/valid-otherSites.json +48 -0
- package/tests/fixtures/cycle/siteDuration/valid.json +45 -0
- package/tests/fixtures/cycle/substrate/required/invalid.json +50 -0
- package/tests/fixtures/cycle/substrate/required/valid.json +60 -0
- package/tests/fixtures/cycle/valid.json +343 -0
- package/tests/fixtures/emission/linked-terms/inputs/invalid.json +78 -0
- package/tests/fixtures/emission/linked-terms/inputs/valid.json +106 -0
- package/tests/fixtures/emission/linked-terms/transformation/error.json +104 -0
- package/tests/fixtures/emission/linked-terms/transformation/valid.json +107 -0
- package/tests/fixtures/emission/linked-terms/transformation/warning.json +76 -0
- package/tests/fixtures/emission/methodTier-background/invalid.json +60 -0
- package/tests/fixtures/emission/methodTier-background/valid.json +60 -0
- package/tests/fixtures/emission/not-relevant/invalid.json +71 -0
- package/tests/fixtures/emission/not-relevant/valid.json +95 -0
- package/tests/fixtures/emission/not-relevant-methodTier/invalid.json +70 -0
- package/tests/fixtures/emission/not-relevant-methodTier/valid.json +95 -0
- package/tests/fixtures/impactAssessment/aggregated-valid.json +43 -0
- package/tests/fixtures/impactAssessment/cycle-contains-product/invalid.json +34 -0
- package/tests/fixtures/impactAssessment/cycle-contains-product/valid.json +34 -0
- package/tests/fixtures/impactAssessment/cycle-endDate/invalid.json +26 -0
- package/tests/fixtures/impactAssessment/cycle-endDate/valid.json +26 -0
- package/tests/fixtures/impactAssessment/valid.json +93 -0
- package/tests/fixtures/indicator/characterisedIndicator-methodModel/invalid.json +52 -0
- package/tests/fixtures/indicator/characterisedIndicator-methodModel/valid.json +52 -0
- package/tests/fixtures/indicator/ionisingCompounds/invalid.json +23 -0
- package/tests/fixtures/indicator/ionisingCompounds/valid.json +23 -0
- package/tests/fixtures/indicator/landTransformation/invalid-grouped.json +257 -0
- package/tests/fixtures/indicator/landTransformation/invalid.json +100 -0
- package/tests/fixtures/indicator/landTransformation/valid-grouped-full.json +507 -0
- package/tests/fixtures/indicator/landTransformation/valid-grouped.json +507 -0
- package/tests/fixtures/indicator/landTransformation/valid.json +100 -0
- package/tests/fixtures/infrastructure/lifespan/invalid.json +26 -0
- package/tests/fixtures/infrastructure/lifespan/valid.json +45 -0
- package/tests/fixtures/input/animalFeed-fate/invalid.json +103 -0
- package/tests/fixtures/input/animalFeed-fate/valid.json +90 -0
- package/tests/fixtures/input/country/invalid.json +64 -0
- package/tests/fixtures/input/country/valid.json +64 -0
- package/tests/fixtures/input/distribution/animalHousing.json +103 -0
- package/tests/fixtures/input/distribution/complete/invalid.json +177 -0
- package/tests/fixtures/input/distribution/complete/valid.json +163 -0
- package/tests/fixtures/input/distribution/incomplete/valid.json +139 -0
- package/tests/fixtures/input/impactAssessment/invalid.json +99 -0
- package/tests/fixtures/input/impactAssessment/valid.json +89 -0
- package/tests/fixtures/input/input-as-product/invalid.json +57 -0
- package/tests/fixtures/input/input-as-product/valid.json +59 -0
- package/tests/fixtures/input/mustIncludeId/invalid.json +13 -0
- package/tests/fixtures/input/mustIncludeId/valid-multiple-ids.json +31 -0
- package/tests/fixtures/input/mustIncludeId/valid.json +22 -0
- package/tests/fixtures/input/saplings/invalid.json +58 -0
- package/tests/fixtures/input/saplings/valid-no-saplings.json +58 -0
- package/tests/fixtures/input/saplings/valid-not-plantation.json +58 -0
- package/tests/fixtures/input/saplings/valid.json +58 -0
- package/tests/fixtures/integration/distribution/product-yield-invalid.json +54 -0
- package/tests/fixtures/management/cycle-overlap/cycles.json +39 -0
- package/tests/fixtures/management/cycle-overlap/invalid.json +26 -0
- package/tests/fixtures/management/cycle-overlap/valid.json +26 -0
- package/tests/fixtures/management/exists/invalid.json +13 -0
- package/tests/fixtures/management/exists/valid.json +25 -0
- package/tests/fixtures/management/fallow-dates/invalid.json +24 -0
- package/tests/fixtures/management/fallow-dates/valid.json +24 -0
- package/tests/fixtures/management/termType/invalid-cropland.json +35 -0
- package/tests/fixtures/management/termType/invalid-permanent-pasture.json +25 -0
- package/tests/fixtures/management/termType/valid-cropland.json +55 -0
- package/tests/fixtures/management/termType/valid-no-management.json +13 -0
- package/tests/fixtures/management/termType/valid-permanent-pasture.json +35 -0
- package/tests/fixtures/measurement/depths/invalid.json +44 -0
- package/tests/fixtures/measurement/depths/valid.json +50 -0
- package/tests/fixtures/measurement/models/valid.json +33 -0
- package/tests/fixtures/measurement/models/warning-no-value.json +30 -0
- package/tests/fixtures/measurement/models/warning.json +33 -0
- package/tests/fixtures/measurement/pond-measurements/invalid.json +11 -0
- package/tests/fixtures/measurement/pond-measurements/valid.json +23 -0
- package/tests/fixtures/measurement/required-depths/error.json +71 -0
- package/tests/fixtures/measurement/required-depths/valid.json +126 -0
- package/tests/fixtures/measurement/required-depths/warning.json +29 -0
- package/tests/fixtures/measurement/soilTexture/missing-texture-value.json +227 -0
- package/tests/fixtures/measurement/soilTexture/percent-invalid.json +110 -0
- package/tests/fixtures/measurement/soilTexture/percent-missing-value.json +43 -0
- package/tests/fixtures/measurement/soilTexture/percent-valid.json +110 -0
- package/tests/fixtures/measurement/startDate-endDate-required/invalid.json +32 -0
- package/tests/fixtures/measurement/startDate-endDate-required/valid.json +46 -0
- package/tests/fixtures/measurement/unique/invalid.json +28 -0
- package/tests/fixtures/measurement/unique/valid.json +16 -0
- package/tests/fixtures/measurement/value-length/invalid.json +46 -0
- package/tests/fixtures/measurement/value-length/valid.json +44 -0
- package/tests/fixtures/measurement/water-salinity/invalid.json +33 -0
- package/tests/fixtures/measurement/water-salinity/valid-brakish.json +40 -0
- package/tests/fixtures/measurement/water-salinity/valid.json +33 -0
- package/tests/fixtures/organisation/valid.json +26 -0
- package/tests/fixtures/practice/croppingDuration/riceGrainInHuskFlooded/invalid.json +63 -0
- package/tests/fixtures/practice/croppingDuration/riceGrainInHuskFlooded/valid.json +63 -0
- package/tests/fixtures/practice/defaultValue/invalid.json +12 -0
- package/tests/fixtures/practice/defaultValue/valid.json +15 -0
- package/tests/fixtures/practice/excretaManagement/invalid.json +50 -0
- package/tests/fixtures/practice/excretaManagement/valid.json +60 -0
- package/tests/fixtures/practice/irrigated-complete/invalid.json +47 -0
- package/tests/fixtures/practice/irrigated-complete/valid-incomplete.json +47 -0
- package/tests/fixtures/practice/irrigated-complete/valid.json +60 -0
- package/tests/fixtures/practice/landCover-products/invalid.json +58 -0
- package/tests/fixtures/practice/landCover-products/valid-coverCrop.json +69 -0
- package/tests/fixtures/practice/landCover-products/valid.json +58 -0
- package/tests/fixtures/practice/liveAnimal-system/invalid.json +58 -0
- package/tests/fixtures/practice/liveAnimal-system/valid.json +69 -0
- package/tests/fixtures/practice/longFallowDuration/invalid.json +20 -0
- package/tests/fixtures/practice/longFallowDuration/valid.json +20 -0
- package/tests/fixtures/practice/noTillage/invalid.json +23 -0
- package/tests/fixtures/practice/noTillage/valid-value-not-100.json +23 -0
- package/tests/fixtures/practice/noTillage/valid.json +21 -0
- package/tests/fixtures/practice/pastureGrass/key-termType/invalid.json +16 -0
- package/tests/fixtures/practice/pastureGrass/key-termType/valid.json +16 -0
- package/tests/fixtures/practice/pastureGrass/key-value/invalid-numbers.json +67 -0
- package/tests/fixtures/practice/pastureGrass/key-value/invalid.json +67 -0
- package/tests/fixtures/practice/pastureGrass/key-value/valid.json +67 -0
- package/tests/fixtures/practice/pastureGrass/permanent-pasture/invalid.json +37 -0
- package/tests/fixtures/practice/pastureGrass/permanent-pasture/valid.json +47 -0
- package/tests/fixtures/practice/primaryPercent/invalid.json +49 -0
- package/tests/fixtures/practice/primaryPercent/valid.json +49 -0
- package/tests/fixtures/practice/processingOperation/invalid-no-primary.json +48 -0
- package/tests/fixtures/practice/processingOperation/invalid.json +49 -0
- package/tests/fixtures/practice/processingOperation/valid-cropland.json +37 -0
- package/tests/fixtures/practice/processingOperation/valid.json +49 -0
- package/tests/fixtures/practice/productivePhasePermanentCrops/invalid.json +48 -0
- package/tests/fixtures/practice/productivePhasePermanentCrops/valid-0-value.json +58 -0
- package/tests/fixtures/practice/productivePhasePermanentCrops/valid-no-value.json +47 -0
- package/tests/fixtures/practice/productivePhasePermanentCrops/valid.json +48 -0
- package/tests/fixtures/practice/site-management/invalid.json +75 -0
- package/tests/fixtures/practice/site-management/valid.json +75 -0
- package/tests/fixtures/practice/tillage-siteType/valid.json +51 -0
- package/tests/fixtures/practice/tillage-siteType/warning.json +42 -0
- package/tests/fixtures/practice/tillage-values/invalid-fullTillage.json +61 -0
- package/tests/fixtures/practice/tillage-values/invalid-noTillage.json +61 -0
- package/tests/fixtures/practice/tillage-values/valid.json +61 -0
- package/tests/fixtures/practice/waterRegime/rice/invalid.json +59 -0
- package/tests/fixtures/practice/waterRegime/rice/valid-0-value.json +59 -0
- package/tests/fixtures/practice/waterRegime/rice/valid.json +58 -0
- package/tests/fixtures/product/economicValueShare/invalid.json +31 -0
- package/tests/fixtures/product/economicValueShare/valid.json +22 -0
- package/tests/fixtures/product/excreta/invalid.json +62 -0
- package/tests/fixtures/product/excreta/valid.json +62 -0
- package/tests/fixtures/product/excreta/warning.json +53 -0
- package/tests/fixtures/product/excreta/with-system/invalid.json +79 -0
- package/tests/fixtures/product/excreta/with-system/valid.json +88 -0
- package/tests/fixtures/product/excreta/with-system/warning.json +70 -0
- package/tests/fixtures/product/fu_ha/invalid.json +49 -0
- package/tests/fixtures/product/fu_ha/valid.json +49 -0
- package/tests/fixtures/product/primary/invalid.json +22 -0
- package/tests/fixtures/product/primary/valid.json +22 -0
- package/tests/fixtures/product/value/valid.json +26 -0
- package/tests/fixtures/product/value/value-0/error.json +40 -0
- package/tests/fixtures/product/value/value-empty/warning.json +23 -0
- package/tests/fixtures/product/yield/invalid.json +54 -0
- package/tests/fixtures/product/yield/no-value.json +75 -0
- package/tests/fixtures/product/yield/valid.json +54 -0
- package/tests/fixtures/property/default-value/valid-allowed-exception.json +61 -0
- package/tests/fixtures/property/default-value/valid.json +61 -0
- package/tests/fixtures/property/default-value/warning.json +61 -0
- package/tests/fixtures/property/termType/invalid.json +60 -0
- package/tests/fixtures/property/termType/valid.json +60 -0
- package/tests/fixtures/property/value-min-max/invalid.json +77 -0
- package/tests/fixtures/property/value-min-max/valid-skip-maximum.json +57 -0
- package/tests/fixtures/property/value-min-max/valid.json +78 -0
- package/tests/fixtures/property/valueType/invalid.json +79 -0
- package/tests/fixtures/property/valueType/valid.json +79 -0
- package/tests/fixtures/property/volatileSolidsContent/invalid.json +99 -0
- package/tests/fixtures/property/volatileSolidsContent/valid.json +99 -0
- package/tests/fixtures/shared/coordinates/invalid.json +18 -0
- package/tests/fixtures/shared/coordinates/valid.json +18 -0
- package/tests/fixtures/shared/data-duplicates/valid.json +113 -0
- package/tests/fixtures/shared/data-duplicates/warning.json +172 -0
- package/tests/fixtures/shared/duplicated-term-units/invalid-animalProduct.json +61 -0
- package/tests/fixtures/shared/duplicated-term-units/invalid-organicFertiliser.json +61 -0
- package/tests/fixtures/shared/duplicated-term-units/valid.json +49 -0
- package/tests/fixtures/shared/list-country-region/invalid.json +54 -0
- package/tests/fixtures/shared/list-country-region/valid.json +54 -0
- package/tests/fixtures/shared/list-percent-value/invalid.json +49 -0
- package/tests/fixtures/shared/list-percent-value/valid.json +52 -0
- package/tests/fixtures/shared/list-valueType/invalid.json +49 -0
- package/tests/fixtures/shared/list-valueType/valid.json +49 -0
- package/tests/fixtures/shared/list-values-sum-100/management/with-properties/valid.json +91 -0
- package/tests/fixtures/shared/list-values-sum-100/measurements/missing-soil.json +46 -0
- package/tests/fixtures/shared/list-values-sum-100/measurements/no-depth-high-value.json +63 -0
- package/tests/fixtures/shared/list-values-sum-100/measurements/no-depth-valid.json +40 -0
- package/tests/fixtures/shared/list-values-sum-100/measurements/with-depth-high-value.json +71 -0
- package/tests/fixtures/shared/list-values-sum-100/practices/total-100.json +61 -0
- package/tests/fixtures/shared/list-values-sum-100/practices/total-110.json +61 -0
- package/tests/fixtures/shared/list-values-sum-100/practices/total-90.json +61 -0
- package/tests/fixtures/shared/min-max/value-above.json +31 -0
- package/tests/fixtures/shared/min-max/value-below.json +31 -0
- package/tests/fixtures/shared/min-max/value-valid.json +45 -0
- package/tests/fixtures/shared/model/emissions/invalid.json +102 -0
- package/tests/fixtures/shared/model/emissions/valid-variable-tolerance.json +180 -0
- package/tests/fixtures/shared/model/emissions/valid.json +102 -0
- package/tests/fixtures/shared/model/impacts/invalid.json +75 -0
- package/tests/fixtures/shared/model/impacts/valid.json +75 -0
- package/tests/fixtures/shared/model/inputs/valid-no-value.json +84 -0
- package/tests/fixtures/shared/model/inputs/valid.json +87 -0
- package/tests/fixtures/shared/model/inputs/warning.json +87 -0
- package/tests/fixtures/shared/model/products/valid-no-value.json +88 -0
- package/tests/fixtures/shared/model/products/valid.json +91 -0
- package/tests/fixtures/shared/model/products/warning.json +91 -0
- package/tests/fixtures/shared/otherModel/invalid.json +69 -0
- package/tests/fixtures/shared/otherModel/valid.json +70 -0
- package/tests/fixtures/shared/properties-duplicate-values/invalid.json +61 -0
- package/tests/fixtures/shared/properties-duplicate-values/valid.json +57 -0
- package/tests/fixtures/shared/properties-same-length/invalid.json +62 -0
- package/tests/fixtures/shared/properties-same-length/valid.json +52 -0
- package/tests/fixtures/shared/unit-percent/invalid.json +34 -0
- package/tests/fixtures/shared/unit-percent/valid.json +60 -0
- package/tests/fixtures/shared/unit-percent/warning.json +52 -0
- package/tests/fixtures/site/cycles-linked-ia/invalid.json +129 -0
- package/tests/fixtures/site/cycles-linked-ia/valid.json +129 -0
- package/tests/fixtures/site/valid.json +138 -0
- package/tests/fixtures/source/valid.json +19 -0
- package/tests/fixtures/transformation/excretaManagement/invalid.json +47 -0
- package/tests/fixtures/transformation/excretaManagement/valid.json +59 -0
- package/tests/fixtures/transformation/inputs-products/invalid.json +43 -0
- package/tests/fixtures/transformation/inputs-products/valid.json +43 -0
- package/tests/fixtures/transformation/linked-emission/invalid.json +101 -0
- package/tests/fixtures/transformation/linked-emission/valid.json +107 -0
- package/tests/fixtures/transformation/previousTransformationId/invalid-no-previous.json +127 -0
- package/tests/fixtures/transformation/previousTransformationId/invalid-previous-input.json +100 -0
- package/tests/fixtures/transformation/previousTransformationId/invalid-product-input.json +106 -0
- package/tests/fixtures/transformation/previousTransformationId/invalid-wrong-order.json +136 -0
- package/tests/fixtures/transformation/previousTransformationId/valid.json +171 -0
- package/tests/integration/__init__.py +0 -0
- package/tests/integration/test_product.py +17 -0
- package/tests/test_gee.py +10 -0
- package/tests/test_utils.py +36 -0
- package/tests/test_validation.py +11 -0
- package/tests/utils.py +28 -0
- package/tests/validators/__init__.py +0 -0
- package/tests/validators/test_aggregated_cycle.py +44 -0
- package/tests/validators/test_aggregated_shared.py +63 -0
- package/tests/validators/test_animal.py +72 -0
- package/tests/validators/test_completeness.py +337 -0
- package/tests/validators/test_cycle.py +600 -0
- package/tests/validators/test_emission.py +170 -0
- package/tests/validators/test_impact_assessment.py +80 -0
- package/tests/validators/test_indicator.py +120 -0
- package/tests/validators/test_infrastructure.py +26 -0
- package/tests/validators/test_input.py +434 -0
- package/tests/validators/test_management.py +177 -0
- package/tests/validators/test_measurement.py +317 -0
- package/tests/validators/test_organisation.py +32 -0
- package/tests/validators/test_practice.py +490 -0
- package/tests/validators/test_product.py +291 -0
- package/tests/validators/test_property.py +143 -0
- package/tests/validators/test_shared.py +1139 -0
- package/tests/validators/test_site.py +151 -0
- package/tests/validators/test_source.py +15 -0
- package/tests/validators/test_transformation.py +151 -0
- package/tests/validators/test_validators.py +74 -0
- package/tsconfig.dist.json +9 -0
- package/tsconfig.json +25 -0
package/.coveragerc
ADDED
package/.dockerignore
ADDED
package/.eslintignore
ADDED
package/.eslintrc.js
ADDED
package/.flake8
ADDED
|
@@ -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
|
package/.readthedocs.yml
ADDED
|
@@ -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
package/Dockerfile
ADDED
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,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:]))
|
package/build_mocking.py
ADDED
|
@@ -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,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 %}
|