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.
Files changed (152) hide show
  1. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/PKG-INFO +4 -5
  2. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/README.md +1 -1
  3. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/common.py +5 -0
  4. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/focus_to_pandera_schema_converter.py +1 -1
  5. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/rule.py +31 -27
  6. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/data_loaders/csv_data_loader.py +1 -1
  7. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/main.py +2 -3
  8. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/outputter_unittest.py +3 -4
  9. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/checks.py +2 -5
  10. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/pyproject.toml +3 -8
  11. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/LICENSE +0 -0
  12. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/build.py +0 -0
  13. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/__init__.py +0 -0
  14. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/__init__.py +0 -0
  15. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/config_objects/override.py +0 -0
  16. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/data_loaders/__init__.py +0 -0
  17. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/data_loaders/data_loader.py +0 -0
  18. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/data_loaders/parquet_data_loader.py +0 -0
  19. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/exceptions.py +0 -0
  20. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/__init__.py +0 -0
  21. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/outputter.py +0 -0
  22. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/outputter/outputter_console.py +0 -0
  23. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/.gitignore +0 -0
  24. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/__init__.py +0 -0
  25. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AmortizedCost_IsDecimal.yaml +0 -0
  26. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AmortizedCost_NotNull.yaml +0 -0
  27. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AmortizedCost_Required.yaml +0 -0
  28. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AvailabilityZone_IsString.yaml +0 -0
  29. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/AvailabilityZone_Nullable.yaml +0 -0
  30. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCost_IsDecimal.yaml +0 -0
  31. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCost_NotNull.yaml +0 -0
  32. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCost_Required.yaml +0 -0
  33. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCurrency_IsCurrencyCode.yaml +0 -0
  34. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCurrency_NotNull.yaml +0 -0
  35. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BilledCurrency_Required.yaml +0 -0
  36. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountId_IsString.yaml +0 -0
  37. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountId_NotNull.yaml +0 -0
  38. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountId_Required.yaml +0 -0
  39. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountName_IsString.yaml +0 -0
  40. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountName_Nullable.yaml +0 -0
  41. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingAccountName_Required.yaml +0 -0
  42. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodEnd_IsDateTime.yaml +0 -0
  43. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodEnd_NotNull.yaml +0 -0
  44. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodEnd_Required.yaml +0 -0
  45. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodStart_IsDateTime.yaml +0 -0
  46. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodStart_NotNull.yaml +0 -0
  47. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/BillingPeriodStart_Required.yaml +0 -0
  48. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeDescription_IsString.yaml +0 -0
  49. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeDescription_NotNull.yaml +0 -0
  50. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeDescription_Required.yaml +0 -0
  51. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeFrequency_Enum.yaml +0 -0
  52. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeFrequency_IsString.yaml +0 -0
  53. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeFrequency_NotNull.yaml +0 -0
  54. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeFrequency_Required.yaml +0 -0
  55. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodEnd_IsDateTime.yaml +0 -0
  56. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodEnd_NotNull.yaml +0 -0
  57. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodEnd_Required.yaml +0 -0
  58. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodStart_IsDateTime.yaml +0 -0
  59. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodStart_NotNull.yaml +0 -0
  60. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargePeriodStart_Required.yaml +0 -0
  61. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_Enum.yaml +0 -0
  62. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_IsString.yaml +0 -0
  63. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_NotNull.yaml +0 -0
  64. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeSubcategory_Required.yaml +0 -0
  65. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeType_Enum.yaml +0 -0
  66. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeType_IsString.yaml +0 -0
  67. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeType_NotNull.yaml +0 -0
  68. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ChargeType_Required.yaml +0 -0
  69. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_Enum.yaml +0 -0
  70. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_IsString.yaml +0 -0
  71. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_NotNull.yaml +0 -0
  72. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountCategory_Required.yaml +0 -0
  73. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountId_IsString.yaml +0 -0
  74. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountId_Nullable.yaml +0 -0
  75. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountId_Required.yaml +0 -0
  76. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountName_IsString.yaml +0 -0
  77. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountName_Nullable.yaml +0 -0
  78. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountName_Required.yaml +0 -0
  79. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountType_IsString.yaml +0 -0
  80. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/CommitmentDiscountType_Nullable.yaml +0 -0
  81. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/EffectiveCost_IsDecimal.yaml +0 -0
  82. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/EffectiveCost_NotNull.yaml +0 -0
  83. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/EffectiveCost_Required.yaml +0 -0
  84. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/InvoiceIssuer_IsString.yaml +0 -0
  85. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/InvoiceIssuer_NotNull.yaml +0 -0
  86. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListCost_IsDecimal.yaml +0 -0
  87. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListCost_NotNull.yaml +0 -0
  88. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListCost_Required.yaml +0 -0
  89. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListUnitPrice_IsDecimal.yaml +0 -0
  90. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListUnitPrice_Nullable.yaml +0 -0
  91. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ListUnitPrice_Required.yaml +0 -0
  92. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingCategory_Enum.yaml +0 -0
  93. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingCategory_IsString.yaml +0 -0
  94. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingCategory_Nullable.yaml +0 -0
  95. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingCategory_Required.yaml +0 -0
  96. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingQuantity_IsDecimal.yaml +0 -0
  97. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingQuantity_Nullable.yaml +0 -0
  98. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingQuantity_Required.yaml +0 -0
  99. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingUnit_IsString.yaml +0 -0
  100. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingUnit_Nullable.yaml +0 -0
  101. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/PricingUnit_Required.yaml +0 -0
  102. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Provider_IsString.yaml +0 -0
  103. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Provider_NotNull.yaml +0 -0
  104. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Provider_Required.yaml +0 -0
  105. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Publisher_IsString.yaml +0 -0
  106. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Publisher_NotNull.yaml +0 -0
  107. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Publisher_Required.yaml +0 -0
  108. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Region_IsString.yaml +0 -0
  109. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Region_NotNull.yaml +0 -0
  110. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Region_Required.yaml +0 -0
  111. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceID_IsString.yaml +0 -0
  112. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceID_Nullable.yaml +0 -0
  113. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceName_IsString.yaml +0 -0
  114. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceName_Nullable.yaml +0 -0
  115. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceName_Required.yaml +0 -0
  116. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceType_IsString.yaml +0 -0
  117. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceType_Nullable.yaml +0 -0
  118. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ResourceType_Required.yaml +0 -0
  119. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceCategory_Enum.yaml +0 -0
  120. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceCategory_IsString.yaml +0 -0
  121. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceCategory_NotNull.yaml +0 -0
  122. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceCategory_Required.yaml +0 -0
  123. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceName_IsString.yaml +0 -0
  124. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceName_NotNull.yaml +0 -0
  125. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/ServiceName_Required.yaml +0 -0
  126. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuId_IsString.yaml +0 -0
  127. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuId_Nullable.yaml +0 -0
  128. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuId_Required.yaml +0 -0
  129. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuPriceId_IsString.yaml +0 -0
  130. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuPriceId_Nullable.yaml +0 -0
  131. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SkuPriceId_Required.yaml +0 -0
  132. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountId_IsString.yaml +0 -0
  133. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountId_Nullable.yaml +0 -0
  134. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountId_Required.yaml +0 -0
  135. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountName_IsString.yaml +0 -0
  136. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountName_Nullable.yaml +0 -0
  137. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/SubAccountName_Required.yaml +0 -0
  138. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Tags_IsJSONObject.yaml +0 -0
  139. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Tags_Nullable.yaml +0 -0
  140. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/Tags_Required.yaml +0 -0
  141. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageQuantity_IsDecimal.yaml +0 -0
  142. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageQuantity_Nullable.yaml +0 -0
  143. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageQuantity_Required.yaml +0 -0
  144. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageUnit_IsString.yaml +0 -0
  145. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageUnit_Nullable.yaml +0 -0
  146. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/base_rule_definitions/UsageUnit_Required.yaml +0 -0
  147. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/spec_rules.py +0 -0
  148. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/rules/version_sets.yaml +0 -0
  149. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/utils/__init__.py +0 -0
  150. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/utils/currency_codes.csv +0 -0
  151. {focus_validator-0.5.2.dev3 → focus_validator-0.5.2.dev4}/focus_validator/utils/download_currency_codes.py +0 -0
  152. {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.dev3
3
+ Version: 0.5.2.dev4
4
4
  Summary: FOCUS spec validator.
5
- Requires-Python: >=3.8.3,<4.0.0
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.24,<1.25) ; python_version >= "3.8" and python_version < "3.9"
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.8+
36
+ - Python 3.9+
38
37
  - Poetry (Package & Dependency Manager)
39
38
 
40
39
  ### Installation
@@ -10,7 +10,7 @@ tbd
10
10
 
11
11
  ### Prerequisites
12
12
 
13
- - Python 3.8+
13
+ - Python 3.9+
14
14
  - Poetry (Package & Dependency Manager)
15
15
 
16
16
  ### Installation
@@ -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=False, allow_nulls=check.allow_nulls
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, model_validator
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: Optional[
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: Optional[str] = None
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
- # @root_validator
47
- @model_validator(mode="before")
48
- @classmethod
49
- def root_val(cls, values):
50
- """
51
- Root validator that checks for all options passed in the config and generate missing options.
52
- """
53
- if values is None:
54
- values = {}
55
-
56
- check = values.get("check")
57
- check_friendly_name = values.get("check_friendly_name")
58
- column_id = values.get("column_id")
59
- if check is not None:
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
- values["check_type_friendly_name"] = check_type_friendly_name
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(
@@ -6,4 +6,4 @@ class CSVDataLoader:
6
6
  self.data_filename = data_filename
7
7
 
8
8
  def load(self):
9
- return pd.read_csv(self.data_filename, keep_default_na=False)
9
+ return pd.read_csv(self.data_filename)
@@ -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=os.path.join("focus_validator", "rules", "version_sets"),
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
- r for r in rows if re.match(r"^FV-[D,M][0-9]{3}-[0-9]{4}$", r["check_name"])
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, allow_nulls: bool):
25
- # TODO: works for string type, need to verify for other data types
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-dev3"
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.8.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