focus-data-toolkit 0.11.0rc1__py3-none-any.whl

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 (116) hide show
  1. focus_data_toolkit/__init__.py +69 -0
  2. focus_data_toolkit/__main__.py +6 -0
  3. focus_data_toolkit/_version.py +8 -0
  4. focus_data_toolkit/cli.py +968 -0
  5. focus_data_toolkit/context/__init__.py +88 -0
  6. focus_data_toolkit/context/billing.py +54 -0
  7. focus_data_toolkit/context/provider.py +90 -0
  8. focus_data_toolkit/convert/__init__.py +708 -0
  9. focus_data_toolkit/convert/billing_period.py +65 -0
  10. focus_data_toolkit/convert/contract_applied.py +235 -0
  11. focus_data_toolkit/convert/contract_commitment.py +182 -0
  12. focus_data_toolkit/convert/cost_and_usage.py +179 -0
  13. focus_data_toolkit/convert/detect.py +39 -0
  14. focus_data_toolkit/convert/invoice_detail.py +199 -0
  15. focus_data_toolkit/convert/streaming.py +1030 -0
  16. focus_data_toolkit/errors.py +145 -0
  17. focus_data_toolkit/focus_json.py +68 -0
  18. focus_data_toolkit/generators/__init__.py +61 -0
  19. focus_data_toolkit/generators/_shim.py +43 -0
  20. focus_data_toolkit/generators/engine/__init__.py +14 -0
  21. focus_data_toolkit/generators/engine/context.py +12 -0
  22. focus_data_toolkit/generators/engine/determinism.py +117 -0
  23. focus_data_toolkit/generators/engine/json_focus.py +63 -0
  24. focus_data_toolkit/generators/engine/ladder.py +71 -0
  25. focus_data_toolkit/generators/engine/scenarios_core.py +380 -0
  26. focus_data_toolkit/generators/engine/serialize.py +151 -0
  27. focus_data_toolkit/generators/generate_aws_focus_1_2.py +19 -0
  28. focus_data_toolkit/generators/generate_aws_focus_1_3.py +20 -0
  29. focus_data_toolkit/generators/generate_azure_focus_1_2.py +17 -0
  30. focus_data_toolkit/generators/generate_azure_focus_1_3.py +17 -0
  31. focus_data_toolkit/generators/generate_gcp_focus_1_2.py +17 -0
  32. focus_data_toolkit/generators/generate_gcp_focus_1_3.py +17 -0
  33. focus_data_toolkit/generators/providers/__init__.py +29 -0
  34. focus_data_toolkit/generators/providers/aws.py +186 -0
  35. focus_data_toolkit/generators/providers/azure.py +191 -0
  36. focus_data_toolkit/generators/providers/gcp.py +194 -0
  37. focus_data_toolkit/generators/providers/profile.py +123 -0
  38. focus_data_toolkit/generators/scenarios.py +178 -0
  39. focus_data_toolkit/generators/versions/__init__.py +17 -0
  40. focus_data_toolkit/generators/versions/adapter.py +41 -0
  41. focus_data_toolkit/generators/versions/v1_2.py +111 -0
  42. focus_data_toolkit/generators/versions/v1_3.py +154 -0
  43. focus_data_toolkit/io/__init__.py +1 -0
  44. focus_data_toolkit/io/atomic_writer.py +462 -0
  45. focus_data_toolkit/io/csv_io.py +128 -0
  46. focus_data_toolkit/io/parquet_io.py +528 -0
  47. focus_data_toolkit/io/records.py +92 -0
  48. focus_data_toolkit/io/row_source.py +117 -0
  49. focus_data_toolkit/lifecycle.py +342 -0
  50. focus_data_toolkit/manifest.py +114 -0
  51. focus_data_toolkit/model/__init__.py +43 -0
  52. focus_data_toolkit/model/capabilities.py +66 -0
  53. focus_data_toolkit/model/focus_1_4_decimal_scale.json +10 -0
  54. focus_data_toolkit/model/focus_1_4_model.json +1913 -0
  55. focus_data_toolkit/model/focus_1_4_servicesubcategory.json +84 -0
  56. focus_data_toolkit/model/focus_json_keys.py +112 -0
  57. focus_data_toolkit/model/iso_4217_currencies.json +23 -0
  58. focus_data_toolkit/model/json_schema_check.py +205 -0
  59. focus_data_toolkit/model/json_schemas/allocatedmethoddetailsobjectschema.json +82 -0
  60. focus_data_toolkit/model/json_schemas/commitmentprogrameligibilitydetailsobjectschema.json +41 -0
  61. focus_data_toolkit/model/json_schemas/contractappliedobjectschema.json +104 -0
  62. focus_data_toolkit/model/json_schemas/contractcommitmentapplicabilityobjectschema.json +290 -0
  63. focus_data_toolkit/model/json_schemas/json_schemas_provenance.json +38 -0
  64. focus_data_toolkit/model/model_provenance.json +58 -0
  65. focus_data_toolkit/model/validator.py +498 -0
  66. focus_data_toolkit/modes.py +18 -0
  67. focus_data_toolkit/official_validator.py +61 -0
  68. focus_data_toolkit/progress.py +89 -0
  69. focus_data_toolkit/provenance.py +106 -0
  70. focus_data_toolkit/py.typed +1 -0
  71. focus_data_toolkit/runtime.py +243 -0
  72. focus_data_toolkit/schema/__init__.py +17 -0
  73. focus_data_toolkit/schema/detection.py +274 -0
  74. focus_data_toolkit/schema/registry.py +127 -0
  75. focus_data_toolkit/storage/__init__.py +1 -0
  76. focus_data_toolkit/storage/external_index.py +99 -0
  77. focus_data_toolkit/storage/spill.py +150 -0
  78. focus_data_toolkit/studio/__init__.py +19 -0
  79. focus_data_toolkit/studio/app.py +467 -0
  80. focus_data_toolkit/studio/config.py +42 -0
  81. focus_data_toolkit/studio/frontend/app.js +214 -0
  82. focus_data_toolkit/studio/frontend/index.html +101 -0
  83. focus_data_toolkit/studio/frontend/style.css +60 -0
  84. focus_data_toolkit/studio/jobs.py +142 -0
  85. focus_data_toolkit/studio/preview.py +32 -0
  86. focus_data_toolkit/studio/security.py +125 -0
  87. focus_data_toolkit/studio/server.py +71 -0
  88. focus_data_toolkit/supplement/__init__.py +50 -0
  89. focus_data_toolkit/supplement/adapters/__init__.py +21 -0
  90. focus_data_toolkit/supplement/adapters/adapters_provenance.json +39 -0
  91. focus_data_toolkit/supplement/adapters/aws_invoice_summary.json +24 -0
  92. focus_data_toolkit/supplement/adapters/aws_savings_plans.json +31 -0
  93. focus_data_toolkit/supplement/adapters/azure_invoice.json +25 -0
  94. focus_data_toolkit/supplement/adapters/gcp_compute_commitments.json +28 -0
  95. focus_data_toolkit/supplement/adapters/registry.py +215 -0
  96. focus_data_toolkit/supplement/apply.py +318 -0
  97. focus_data_toolkit/supplement/gaps.py +219 -0
  98. focus_data_toolkit/supplement/kinds.py +118 -0
  99. focus_data_toolkit/supplement/loader.py +409 -0
  100. focus_data_toolkit/supplement/spec.py +74 -0
  101. focus_data_toolkit/supplement/validate.py +215 -0
  102. focus_data_toolkit/validate/__init__.py +15 -0
  103. focus_data_toolkit/validate/allocation.py +333 -0
  104. focus_data_toolkit/validate/bundle.py +254 -0
  105. focus_data_toolkit/validate/codes.py +93 -0
  106. focus_data_toolkit/validate/corrections.py +245 -0
  107. focus_data_toolkit/validate/reconciliation.py +98 -0
  108. focus_data_toolkit/validate/referential.py +289 -0
  109. focus_data_toolkit-0.11.0rc1.dist-info/METADATA +519 -0
  110. focus_data_toolkit-0.11.0rc1.dist-info/RECORD +116 -0
  111. focus_data_toolkit-0.11.0rc1.dist-info/WHEEL +5 -0
  112. focus_data_toolkit-0.11.0rc1.dist-info/entry_points.txt +2 -0
  113. focus_data_toolkit-0.11.0rc1.dist-info/licenses/LICENSE +21 -0
  114. focus_data_toolkit-0.11.0rc1.dist-info/licenses/LICENSES/CC-BY-4.0.txt +156 -0
  115. focus_data_toolkit-0.11.0rc1.dist-info/licenses/NOTICE +60 -0
  116. focus_data_toolkit-0.11.0rc1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,69 @@
1
+ """focus-data-toolkit — FOCUS sample-data generation, 1.x -> 1.4 conversion, validation.
2
+
3
+ Public API:
4
+
5
+ - :func:`focus_data_toolkit.convert.convert_to_focus_1_4` — convert FOCUS 1.2/1.3
6
+ rows into the four FOCUS 1.4 datasets (small-volume, in-memory).
7
+ - :func:`focus_data_toolkit.convert.convert_files` — the same conversion, streamed from a
8
+ Cost and Usage file with **bounded memory** (large client data), to CSV or Parquet.
9
+ - :func:`focus_data_toolkit.schema.detect_focus_schema` — identify the FOCUS dataset and
10
+ version of a header row, with a confidence assessment.
11
+ - :func:`validate_dataset_bundle` (alias :func:`validate_bundle`) — cross-dataset
12
+ (referential / reconciliation / split-allocation / lifecycle) validation of a bundle of
13
+ datasets. Distinct from the per-dataset linter below.
14
+ - :func:`focus_data_toolkit.model.validator.lint_focus_1_4_structure` — structurally
15
+ + semantically lint rows against the committed FOCUS 1.4 data model. (A linter, not a full
16
+ FOCUS conformance validator; ``validate_focus_1_4`` is a deprecated alias.)
17
+ - :mod:`focus_data_toolkit.generators` — deterministic, provider-realistic FOCUS 1.2/1.3
18
+ source generators for AWS, Azure and GCP.
19
+ """
20
+
21
+ from focus_data_toolkit._version import __version__
22
+ from focus_data_toolkit.convert import (
23
+ ConversionCancelled,
24
+ ConversionResult,
25
+ convert_files,
26
+ convert_to_focus_1_4,
27
+ )
28
+ from focus_data_toolkit.lifecycle import (
29
+ DatasetInstance,
30
+ check_dataset_instances,
31
+ check_instance_chains,
32
+ check_status_transitions,
33
+ )
34
+ from focus_data_toolkit.model.validator import (
35
+ LintReport,
36
+ ValidationReport,
37
+ Violation,
38
+ lint_focus_1_4_structure,
39
+ validate_focus_1_4,
40
+ )
41
+ from focus_data_toolkit.progress import ProgressEvent
42
+ from focus_data_toolkit.schema import SchemaDetectionResult, detect_focus_schema
43
+ from focus_data_toolkit.validate import BundleReport, validate_dataset_bundle
44
+
45
+ # Alias matching the API name used in the P1 plan / docs.
46
+ validate_bundle = validate_dataset_bundle
47
+
48
+ __all__ = [
49
+ "BundleReport",
50
+ "ConversionCancelled",
51
+ "ConversionResult",
52
+ "DatasetInstance",
53
+ "LintReport",
54
+ "ProgressEvent",
55
+ "SchemaDetectionResult",
56
+ "ValidationReport",
57
+ "Violation",
58
+ "__version__",
59
+ "check_dataset_instances",
60
+ "check_instance_chains",
61
+ "check_status_transitions",
62
+ "convert_files",
63
+ "convert_to_focus_1_4",
64
+ "detect_focus_schema",
65
+ "lint_focus_1_4_structure",
66
+ "validate_bundle",
67
+ "validate_dataset_bundle",
68
+ "validate_focus_1_4",
69
+ ]
@@ -0,0 +1,6 @@
1
+ """``python -m focus_data_toolkit`` — same entry point as the ``focus-toolkit`` script."""
2
+
3
+ from focus_data_toolkit.cli import main
4
+
5
+ if __name__ == "__main__":
6
+ raise SystemExit(main())
@@ -0,0 +1,8 @@
1
+ """Single source of truth for the package version.
2
+
3
+ Kept deliberately import-free so the build backend can read
4
+ ``[tool.setuptools.dynamic] version = {attr = "focus_data_toolkit._version.__version__"}``
5
+ without importing the package (which would pull in optional/runtime modules at build time).
6
+ """
7
+
8
+ __version__ = "0.11.0rc1"