focus-validator 0.5.2.dev3__tar.gz → 0.5.2.dev4__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-0.5.2.dev4}/PKG-INFO +4 -5
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/README.md +1 -1
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/common.py +5 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/focus_to_pandera_schema_converter.py +1 -1
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/rule.py +31 -27
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/data_loaders/csv_data_loader.py +1 -1
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/main.py +2 -3
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/outputter_unittest.py +3 -4
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/checks.py +2 -5
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/pyproject.toml +3 -8
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/LICENSE +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/build.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/override.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/data_loaders/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/data_loaders/data_loader.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/data_loaders/parquet_data_loader.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/exceptions.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/outputter.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/outputter_console.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/.gitignore +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AmortizedCost_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AmortizedCost_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AmortizedCost_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AvailabilityZone_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AvailabilityZone_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCost_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCost_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCost_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCurrency_IsCurrencyCode.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCurrency_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCurrency_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountId_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountName_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodEnd_IsDateTime.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodEnd_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodEnd_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodStart_IsDateTime.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodStart_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodStart_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeDescription_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeDescription_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeDescription_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeFrequency_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeFrequency_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeFrequency_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeFrequency_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodEnd_IsDateTime.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodEnd_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodEnd_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodStart_IsDateTime.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodStart_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodStart_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeType_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeType_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeType_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeType_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountId_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountName_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountType_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountType_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/EffectiveCost_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/EffectiveCost_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/EffectiveCost_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/InvoiceIssuer_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/InvoiceIssuer_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListCost_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListCost_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListCost_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListUnitPrice_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListUnitPrice_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListUnitPrice_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingCategory_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingCategory_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingCategory_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingCategory_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingQuantity_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingQuantity_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingQuantity_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingUnit_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingUnit_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingUnit_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Provider_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Provider_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Provider_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Publisher_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Publisher_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Publisher_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Region_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Region_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Region_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceID_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceID_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceName_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceType_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceType_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceType_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceCategory_Enum.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceCategory_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceCategory_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceCategory_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceName_NotNull.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuId_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuPriceId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuPriceId_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuPriceId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountId_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountId_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountId_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountName_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountName_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountName_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Tags_IsJSONObject.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Tags_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Tags_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageQuantity_IsDecimal.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageQuantity_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageQuantity_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageUnit_IsString.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageUnit_Nullable.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageUnit_Required.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/spec_rules.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/version_sets.yaml +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/utils/__init__.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/utils/currency_codes.csv +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/utils/download_currency_codes.py +0 -0
- {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/validator.py +0 -0
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: focus_validator
|
|
3
|
-
Version: 0.5.2.
|
|
3
|
+
Version: 0.5.2.dev4
|
|
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-0.5.2.dev4}/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(
|
{focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/rule.py
RENAMED
|
@@ -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(
|
|
@@ -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
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "focus_validator"
|
|
3
|
-
version = "0.5.2-
|
|
3
|
+
version = "0.5.2-dev4"
|
|
4
4
|
description = "FOCUS spec validator."
|
|
5
5
|
authors = []
|
|
6
6
|
readme = "README.md"
|
|
@@ -19,7 +19,7 @@ generate-setup-file = false
|
|
|
19
19
|
script = "build.py"
|
|
20
20
|
|
|
21
21
|
[tool.poetry.dependencies]
|
|
22
|
-
python = "^3.
|
|
22
|
+
python = "^3.9"
|
|
23
23
|
pandas = "^2"
|
|
24
24
|
tabulate = "*"
|
|
25
25
|
pyarrow = "*"
|
|
@@ -28,12 +28,7 @@ pyyaml = "*"
|
|
|
28
28
|
requests = "*"
|
|
29
29
|
pandera = { version = "^0.17.2" }
|
|
30
30
|
sqlglot = "^18.7.0"
|
|
31
|
-
|
|
32
|
-
# for Python 3.12, force higher version of numpy
|
|
33
|
-
numpy = [
|
|
34
|
-
{ version = "~1.24", python = "~3.8" },
|
|
35
|
-
{ version = "~1.26", python = "~3.12" }
|
|
36
|
-
]
|
|
31
|
+
numpy = { version = "^1.26"}
|
|
37
32
|
pytz = "^2023.3.post1"
|
|
38
33
|
pandasql = "^0.7.3"
|
|
39
34
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/__init__.py
RENAMED
|
File without changes
|
{focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/override.py
RENAMED
|
File without changes
|
{focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/data_loaders/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/__init__.py
RENAMED
|
File without changes
|
{focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/outputter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/spec_rules.py
RENAMED
|
File without changes
|
{focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/version_sets.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/utils/currency_codes.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|