focus-validator 0.5.2.dev3__tar.gz → 1.0.0__tar.gz
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.
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/PKG-INFO +4 -5
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/README.md +1 -1
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/config_objects/common.py +5 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/config_objects/focus_to_pandera_schema_converter.py +1 -1
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/config_objects/rule.py +31 -27
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/data_loaders/csv_data_loader.py +1 -1
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/main.py +2 -3
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/outputter/outputter_unittest.py +3 -4
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/BillingCurrency_IsCurrencyCode.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/BillingCurrency_NotNull.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/BillingCurrency_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ChargeCategory_IsString.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ChargeCategory_NotNull.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ChargeCategory_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ChargeClass_Enum.yaml +4 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ChargeClass_IsString.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ChargeClass_Nullable.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ChargeClass_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ChargeDescription_Nullable.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_Nullable.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/CommitmentDiscountStatus_Enum.yaml +5 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/CommitmentDiscountStatus_IsString.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/CommitmentDiscountStatus_Nullable.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/CommitmentDiscountStatus_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/CommitmentDiscountType_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ConsumedQuantity_IsDecimal.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ConsumedQuantity_Nullable.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ConsumedQuantity_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ConsumedUnit_IsString.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ConsumedUnit_Nullable.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ConsumedUnit_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ContractedCost_IsDecimal.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ContractedCost_NotNull.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ContractedCost_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ContractedUnitPrice_IsDecimal.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ContractedUnitPrice_Nullable.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ContractedUnitPrice_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/InvoiceIssuer_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/PricingCategory_Enum_1.0.yaml +7 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/RegionId_IsString.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/RegionId_Nullable.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/RegionId_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/RegionName_IsString.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/RegionName_Nullable.yaml +3 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/RegionName_Required.yaml +2 -0
- focus_validator-1.0.0/focus_validator/rules/base_rule_definitions/ResourceID_Required.yaml +2 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/checks.py +2 -5
- focus_validator-1.0.0/focus_validator/rules/version_sets.yaml +323 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/pyproject.toml +4 -8
- focus_validator-0.5.2.dev3/focus_validator/rules/version_sets.yaml +0 -188
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/LICENSE +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/build.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/config_objects/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/config_objects/override.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/data_loaders/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/data_loaders/data_loader.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/data_loaders/parquet_data_loader.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/exceptions.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/outputter/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/outputter/outputter.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/outputter/outputter_console.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/.gitignore +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/AmortizedCost_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/AmortizedCost_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/AmortizedCost_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/AvailabilityZone_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/AvailabilityZone_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BilledCost_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BilledCost_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BilledCost_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BilledCurrency_IsCurrencyCode.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BilledCurrency_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BilledCurrency_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingAccountId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingAccountId_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingAccountId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingAccountName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingAccountName_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingAccountName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingPeriodEnd_IsDateTime.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingPeriodEnd_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingPeriodEnd_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingPeriodStart_IsDateTime.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingPeriodStart_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/BillingPeriodStart_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeDescription_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeDescription_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeDescription_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeFrequency_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeFrequency_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeFrequency_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeFrequency_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargePeriodEnd_IsDateTime.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargePeriodEnd_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargePeriodEnd_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargePeriodStart_IsDateTime.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargePeriodStart_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargePeriodStart_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeType_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeType_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeType_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ChargeType_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountId_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountName_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountType_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/CommitmentDiscountType_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/EffectiveCost_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/EffectiveCost_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/EffectiveCost_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/InvoiceIssuer_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/InvoiceIssuer_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ListCost_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ListCost_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ListCost_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ListUnitPrice_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ListUnitPrice_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ListUnitPrice_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingCategory_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingCategory_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingCategory_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingCategory_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingQuantity_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingQuantity_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingQuantity_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingUnit_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingUnit_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/PricingUnit_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Provider_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Provider_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Provider_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Publisher_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Publisher_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Publisher_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Region_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Region_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Region_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ResourceID_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ResourceID_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ResourceName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ResourceName_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ResourceName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ResourceType_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ResourceType_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ResourceType_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ServiceCategory_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ServiceCategory_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ServiceCategory_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ServiceCategory_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ServiceName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ServiceName_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/ServiceName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SkuId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SkuId_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SkuId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SkuPriceId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SkuPriceId_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SkuPriceId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SubAccountId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SubAccountId_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SubAccountId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SubAccountName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SubAccountName_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/SubAccountName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Tags_IsJSONObject.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Tags_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/Tags_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/UsageQuantity_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/UsageQuantity_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/UsageQuantity_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/UsageUnit_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/UsageUnit_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/base_rule_definitions/UsageUnit_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/rules/spec_rules.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/utils/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/utils/currency_codes.csv +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/utils/download_currency_codes.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/validator.py +0 -0
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: focus_validator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: FOCUS spec validator.
|
|
5
|
-
Requires-Python: >=3.
|
|
5
|
+
Requires-Python: >=3.9,<4.0
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
7
7
|
Classifier: Programming Language :: Python :: 3.9
|
|
8
8
|
Classifier: Programming Language :: Python :: 3.10
|
|
9
9
|
Classifier: Programming Language :: Python :: 3.11
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
-
Requires-Dist: numpy (>=1.
|
|
12
|
-
Requires-Dist: numpy (>=1.26,<1.27) ; python_version >= "3.12" and python_version < "3.13"
|
|
11
|
+
Requires-Dist: numpy (>=1.26,<2.0)
|
|
13
12
|
Requires-Dist: pandas (>=2,<3)
|
|
14
13
|
Requires-Dist: pandasql (>=0.7.3,<0.8.0)
|
|
15
14
|
Requires-Dist: pandera (>=0.17.2,<0.18.0)
|
|
@@ -34,7 +33,7 @@ tbd
|
|
|
34
33
|
|
|
35
34
|
### Prerequisites
|
|
36
35
|
|
|
37
|
-
- Python 3.
|
|
36
|
+
- Python 3.9+
|
|
38
37
|
- Poetry (Package & Dependency Manager)
|
|
39
38
|
|
|
40
39
|
### Installation
|
{focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/config_objects/common.py
RENAMED
|
@@ -68,3 +68,8 @@ def generate_check_friendly_name(check, column_id):
|
|
|
68
68
|
return f"{column_id} does not allow null values."
|
|
69
69
|
elif isinstance(check, DataTypeCheck):
|
|
70
70
|
return f"{column_id} requires values of type {check.data_type.value}."
|
|
71
|
+
elif isinstance(check, SQLQueryCheck):
|
|
72
|
+
sql_query = " ".join([word.strip() for word in check.sql_query.split()])
|
|
73
|
+
return f"{column_id} requires values that return true when evaluated by the following SQL query: {sql_query}"
|
|
74
|
+
else:
|
|
75
|
+
raise NotImplementedError(f"Check {check} not implemented.")
|
|
@@ -72,7 +72,7 @@ class FocusToPanderaSchemaConverter:
|
|
|
72
72
|
)
|
|
73
73
|
elif isinstance(check, AllowNullsCheck):
|
|
74
74
|
return pa.Check.check_not_null(
|
|
75
|
-
error=error_string, ignore_na=
|
|
75
|
+
error=error_string, ignore_na=check.allow_nulls
|
|
76
76
|
)
|
|
77
77
|
else:
|
|
78
78
|
raise FocusNotImplementedError(
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from typing import Optional, Union
|
|
2
|
+
from typing import Annotated, Optional, Union
|
|
3
3
|
|
|
4
4
|
import yaml
|
|
5
|
-
from pydantic import BaseModel, ConfigDict,
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
6
|
+
from pydantic_core.core_schema import ValidationInfo
|
|
6
7
|
|
|
7
8
|
from focus_validator.config_objects.common import (
|
|
8
9
|
SIMPLE_CHECKS,
|
|
@@ -33,44 +34,47 @@ class Rule(BaseModel):
|
|
|
33
34
|
SIMPLE_CHECKS, AllowNullsCheck, ValueInCheck, DataTypeCheck, SQLQueryCheck
|
|
34
35
|
]
|
|
35
36
|
|
|
36
|
-
check_friendly_name:
|
|
37
|
-
str
|
|
37
|
+
check_friendly_name: Annotated[
|
|
38
|
+
Optional[str], Field(validate_default=True)
|
|
38
39
|
] = None # auto generated or else can be overwritten
|
|
39
|
-
check_type_friendly_name:
|
|
40
|
+
check_type_friendly_name: Annotated[
|
|
41
|
+
Optional[str], Field(validate_default=True)
|
|
42
|
+
] = None
|
|
40
43
|
|
|
41
44
|
model_config = ConfigDict(
|
|
42
45
|
extra="forbid", # prevents config from containing any undesirable keys
|
|
43
46
|
frozen=True, # prevents any modification to any attribute onces loaded from config
|
|
44
47
|
)
|
|
45
48
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
values
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
49
|
+
@field_validator("check_friendly_name")
|
|
50
|
+
def validate_or_generate_check_friendly_name(
|
|
51
|
+
cls, check_friendly_name, validation_info: ValidationInfo
|
|
52
|
+
):
|
|
53
|
+
values = validation_info.data
|
|
54
|
+
if (
|
|
55
|
+
check_friendly_name is None
|
|
56
|
+
and values.get("check") is not None
|
|
57
|
+
and values.get("column_id") is not None
|
|
58
|
+
):
|
|
59
|
+
check_friendly_name = generate_check_friendly_name(
|
|
60
|
+
check=values["check"], column_id=values["column_id"]
|
|
61
|
+
)
|
|
62
|
+
return check_friendly_name
|
|
63
|
+
|
|
64
|
+
@field_validator("check_type_friendly_name")
|
|
65
|
+
def validate_or_generate_check_type_friendly_name(
|
|
66
|
+
cls, check_type_friendly_name, validation_info: ValidationInfo
|
|
67
|
+
):
|
|
68
|
+
values = validation_info.data
|
|
69
|
+
if values.get("check") is not None and values.get("column_id") is not None:
|
|
70
|
+
check = values.get("check")
|
|
60
71
|
if isinstance(check, str):
|
|
61
72
|
check_type_friendly_name = "".join(
|
|
62
73
|
[word.title() for word in check.split("_")]
|
|
63
74
|
)
|
|
64
75
|
else:
|
|
65
76
|
check_type_friendly_name = check.__class__.__name__
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if check_friendly_name is None and column_id is not None:
|
|
69
|
-
values["check_friendly_name"] = generate_check_friendly_name(
|
|
70
|
-
check=check, column_id=column_id
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
return values
|
|
77
|
+
return check_type_friendly_name
|
|
74
78
|
|
|
75
79
|
@staticmethod
|
|
76
80
|
def load_yaml(
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import argparse
|
|
2
|
-
import os
|
|
3
2
|
import sys
|
|
4
3
|
|
|
5
|
-
from focus_validator.validator import Validator
|
|
4
|
+
from focus_validator.validator import DEFAULT_VERSION_SETS_PATH, Validator
|
|
6
5
|
|
|
7
6
|
|
|
8
7
|
def main():
|
|
@@ -37,7 +36,7 @@ def main():
|
|
|
37
36
|
)
|
|
38
37
|
parser.add_argument(
|
|
39
38
|
"--rule-set-path",
|
|
40
|
-
default=
|
|
39
|
+
default=DEFAULT_VERSION_SETS_PATH,
|
|
41
40
|
help="Path to rules definitions",
|
|
42
41
|
)
|
|
43
42
|
parser.add_argument(
|
{focus_validator-0.5.2.dev3 → focus_validator-1.0.0}/focus_validator/outputter/outputter_unittest.py
RENAMED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
import re
|
|
3
2
|
import sys
|
|
4
3
|
import xml.etree.cElementTree as ET
|
|
5
4
|
from datetime import datetime, timezone
|
|
@@ -146,9 +145,9 @@ class UnittestOutputter:
|
|
|
146
145
|
|
|
147
146
|
# Add the testcases to the testsuites
|
|
148
147
|
added_testsuites = {}
|
|
149
|
-
for testcase in
|
|
150
|
-
|
|
151
|
-
|
|
148
|
+
for testcase in rows:
|
|
149
|
+
if testcase["status"].value == "errored":
|
|
150
|
+
continue
|
|
152
151
|
test_suite_id = testcase["check_name"].rsplit("-", 1)[0]
|
|
153
152
|
if test_suite_id not in added_testsuites:
|
|
154
153
|
formatter.add_testsuite(
|
|
@@ -21,11 +21,8 @@ def is_camel_case(column_name):
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
@extensions.register_check_method()
|
|
24
|
-
def check_not_null(pandas_obj: pd.Series
|
|
25
|
-
|
|
26
|
-
check_values = pandas_obj.isnull() | (pandas_obj == "")
|
|
27
|
-
if not allow_nulls:
|
|
28
|
-
check_values = check_values | (pandas_obj == "NULL")
|
|
24
|
+
def check_not_null(pandas_obj: pd.Series):
|
|
25
|
+
check_values = pandas_obj.isnull()
|
|
29
26
|
return ~check_values
|
|
30
27
|
|
|
31
28
|
|