pyvider-components 0.0.0.post1__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.
- pyvider_components-0.0.0.post1/PKG-INFO +16 -0
- pyvider_components-0.0.0.post1/README.md +3 -0
- pyvider_components-0.0.0.post1/pyproject.toml +53 -0
- pyvider_components-0.0.0.post1/setup.cfg +4 -0
- pyvider_components-0.0.0.post1/src/pyvider/__init__.py +10 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/__init__.py +9 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/capabilities/__init__.py +7 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/capabilities/api.py +58 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/capabilities/lens.py +70 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/__init__.py +26 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/env_variables.garnish/docs/env_variables.tmpl.md +15 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/env_variables.garnish/docs/pyvider_env_variables.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/env_variables.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/env_variables.py +138 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/file_info.garnish/docs/file_info.tmpl.md +15 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/file_info.garnish/docs/pyvider_file_info.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/file_info.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/file_info.py +138 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/http_api.garnish/docs/http_api.tmpl.md +15 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/http_api.garnish/docs/pyvider_http_api.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/http_api.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/http_api.py +107 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/docs/lens_jq.tmpl.md +15 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/docs/pyvider_lens_jq.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/advanced_audit.tf +115 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/complex_data.json +111 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/financial_cost_centers.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/master_audit.jq +49 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/master_audit_v3.jq +31 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/materials_properties.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/personnel_records.json +34 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/project_apollo_schematics.json +20 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/security_audits.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/simple_tally.jq +9 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/software_deployment_manifest.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/supply_chain_database.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.garnish/examples/fixtures/test_and_validation_logs.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/lens_jq.py +89 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/mixed_map_test.garnish/examples/example.tf +30 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/docs/pyvider_mixed_map_test.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/docs/pyvider_nested_data_processor.tmpl.md +27 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/docs/pyvider_nested_resource_test.tmpl.md +23 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/docs/pyvider_simple_map_test.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/docs/pyvider_structured_object_test.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/examples/example.tf +10 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/mixed_map_test/docs/mixed_map_test.tmpl.md +15 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/mixed_map_test/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/nested_data_processor/docs/nested_data_processor.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/nested_data_processor/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/nested_resource_test/docs/nested_resource_test.tmpl.md +19 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/nested_resource_test/examples/example.tf +30 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/simple_map_test/docs/simple_map_test.tmpl.md +15 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/simple_map_test/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/structured_object_test/docs/structured_object_test.tmpl.md +15 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.garnish/structured_object_test/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/nested_data_test_suite.py +352 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/provider_config_reader.garnish/docs/provider_config_reader.tmpl.md +15 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/provider_config_reader.garnish/docs/pyvider_provider_config_reader.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/provider_config_reader.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/data_sources/provider_config_reader.py +68 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/__init__.py +6 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/collection_functions.garnish/contains/docs/contains.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/collection_functions.garnish/contains/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/collection_functions.garnish/length/docs/length.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/collection_functions.garnish/length/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/collection_functions.garnish/lookup/docs/lookup.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/collection_functions.garnish/lookup/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/collection_functions.py +44 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/docs/lens_jq.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/advanced_audit.tf +106 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/example.tf +12 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/complex_data.json +111 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/financial_cost_centers.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/master_audit.jq +49 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/master_audit_v3.jq +31 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/materials_properties.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/personnel_records.json +34 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/project_apollo_schematics.json +20 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/security_audits.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/simple_tally.jq +9 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/software_deployment_manifest.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/supply_chain_database.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.garnish/examples/fixtures/test_and_validation_logs.json +1 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/lens_jq.py +65 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/add/docs/add.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/add/examples/example.tf +42 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/divide/docs/divide.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/divide/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/max/docs/max.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/max/examples/example.tf +49 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/min/docs/min.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/min/examples/example.tf +49 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/multiply/docs/multiply.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/multiply/examples/example.tf +51 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/round/docs/round.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/round/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/subtract/docs/subtract.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/subtract/examples/example.tf +51 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/sum/docs/sum.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.garnish/sum/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/numeric_functions.py +102 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/replace.garnish/examples/example.tf +16 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/format/docs/format.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/format/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/join/docs/join.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/join/examples/example.tf +60 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/lower/docs/lower.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/lower/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/replace/docs/replace.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/replace/examples/example.tf +2 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/split/docs/split.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/split/examples/example.tf +60 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/upper/docs/upper.tmpl.md +17 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.garnish/upper/examples/example.tf +49 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/string_manipulation.py +69 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/type_conversion_functions.garnish/docs/tostring.tmpl.md +27 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/type_conversion_functions.garnish/examples/example.tf +10 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/functions/type_conversion_functions.py +19 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/helpers/__init__.py +7 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/__init__.py +26 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/file_content.garnish/docs/file_content.tmpl.md +19 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/file_content.garnish/docs/pyvider_file_content.tmpl.md +23 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/file_content.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/file_content.py +116 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/local_directory.garnish/docs/local_directory.tmpl.md +19 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/local_directory.garnish/docs/pyvider_local_directory.tmpl.md +23 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/local_directory.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/local_directory.py +142 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/private_state_verifier.garnish/docs/private_state_verifier.tmpl.md +21 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/private_state_verifier.garnish/docs/pyvider_private_state_verifier.tmpl.md +23 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/private_state_verifier.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/private_state_verifier.py +76 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/timed_token.garnish/docs/pyvider_timed_token.tmpl.md +23 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/timed_token.garnish/docs/timed_token.tmpl.md +21 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/timed_token.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/timed_token.py +104 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/warning_example.garnish/docs/pyvider_warning_example.tmpl.md +23 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/warning_example.garnish/docs/warning_example.tmpl.md +43 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/warning_example.garnish/examples/example.tf +8 -0
- pyvider_components-0.0.0.post1/src/pyvider/components/resources/warning_example.py +90 -0
- pyvider_components-0.0.0.post1/src/pyvider_components.egg-info/PKG-INFO +16 -0
- pyvider_components-0.0.0.post1/src/pyvider_components.egg-info/SOURCES.txt +149 -0
- pyvider_components-0.0.0.post1/src/pyvider_components.egg-info/dependency_links.txt +1 -0
- pyvider_components-0.0.0.post1/src/pyvider_components.egg-info/requires.txt +6 -0
- pyvider_components-0.0.0.post1/src/pyvider_components.egg-info/top_level.txt +1 -0
- pyvider_components-0.0.0.post1/tests/test_e2e_encryption_lifecycle.py +55 -0
- pyvider_components-0.0.0.post1/tests/test_local_directory_lifecycle.py +71 -0
- pyvider_components-0.0.0.post1/tests/test_resource_lifecycle_contract.py +88 -0
- pyvider_components-0.0.0.post1/tests/test_tdd_function_semantics.py +72 -0
- pyvider_components-0.0.0.post1/tests/test_tdd_stdlib_functions.py +81 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pyvider-components
|
|
3
|
+
Version: 0.0.0.post1
|
|
4
|
+
Summary: Standard Components for the Pyvider Framework
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: pyvider-telemetry
|
|
8
|
+
Requires-Dist: pyvider-rpcplugin
|
|
9
|
+
Requires-Dist: attrs>=25.3.0
|
|
10
|
+
Requires-Dist: httpx>=0.28.1
|
|
11
|
+
Requires-Dist: jq>=1.9.1
|
|
12
|
+
Requires-Dist: jinja2>=3.1.6
|
|
13
|
+
|
|
14
|
+
# Pyvider Provider Components
|
|
15
|
+
|
|
16
|
+
There's always room for improvement.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "pyvider-components"
|
|
3
|
+
version = "0.0.0-1"
|
|
4
|
+
description = "Standard Components for the Pyvider Framework"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.11"
|
|
7
|
+
dependencies = [
|
|
8
|
+
"pyvider-telemetry",
|
|
9
|
+
"pyvider-rpcplugin",
|
|
10
|
+
"attrs>=25.3.0",
|
|
11
|
+
"httpx>=0.28.1",
|
|
12
|
+
"jq>=1.9.1",
|
|
13
|
+
"jinja2>=3.1.6",
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
[build-system]
|
|
17
|
+
requires = ["setuptools>=61.0"]
|
|
18
|
+
build-backend = "setuptools.build_meta"
|
|
19
|
+
|
|
20
|
+
[tool.setuptools]
|
|
21
|
+
package-dir = {"" = "src"}
|
|
22
|
+
|
|
23
|
+
[tool.setuptools.packages.find]
|
|
24
|
+
where = ["src"]
|
|
25
|
+
|
|
26
|
+
[tool.setuptools.package-data]
|
|
27
|
+
"*" = ["*.garnish/**/*"]
|
|
28
|
+
|
|
29
|
+
[tool.pytest.ini_options]
|
|
30
|
+
asyncio_mode = "auto"
|
|
31
|
+
|
|
32
|
+
[dependency-groups]
|
|
33
|
+
dev = [
|
|
34
|
+
"bandit>=1.8.3",
|
|
35
|
+
"grpc-stubs>=1.53.0.6",
|
|
36
|
+
"grpcio-tools>=1.73.0",
|
|
37
|
+
"hypothesis>=6.131.0",
|
|
38
|
+
"mypy>=1.9.0",
|
|
39
|
+
"psutil>=7.0.0",
|
|
40
|
+
"pyright>=1.1.401",
|
|
41
|
+
"pytest>=8.3.0",
|
|
42
|
+
"pytest-asyncio>=0.25.0",
|
|
43
|
+
"pytest-cov>=6.0.0",
|
|
44
|
+
"pytest-mock>=3.14.0",
|
|
45
|
+
"pytest-xdist>=3.6.0",
|
|
46
|
+
"ruff>=0.9.0",
|
|
47
|
+
"twine>=6.0.0",
|
|
48
|
+
"types-protobuf>=6.30.2.20250516",
|
|
49
|
+
"memray>=1.17.2",
|
|
50
|
+
"pytest-benchmark>=5.1.0",
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
[tool.uv.sources]
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#
|
|
2
|
+
# pyvider/components/capabilities/api.py
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
from pyvider.capabilities import BaseCapability, register_capability
|
|
6
|
+
from pyvider.schema import PvsAttribute, a_bool, a_map, a_num, a_str
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AbstractApiCapability(BaseCapability):
|
|
10
|
+
"""
|
|
11
|
+
Provides a standard set of API configuration attributes for a provider.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
@staticmethod
|
|
15
|
+
def get_schema_contribution() -> dict[str, PvsAttribute]:
|
|
16
|
+
return {
|
|
17
|
+
"api_endpoint": a_str(
|
|
18
|
+
optional=True, description="The base URL for the API endpoint."
|
|
19
|
+
),
|
|
20
|
+
"api_token": a_str(
|
|
21
|
+
optional=True,
|
|
22
|
+
sensitive=True,
|
|
23
|
+
description="The authentication token for the API.",
|
|
24
|
+
),
|
|
25
|
+
"api_timeout": a_num(
|
|
26
|
+
optional=True,
|
|
27
|
+
default=30,
|
|
28
|
+
description="Timeout in seconds for API requests.",
|
|
29
|
+
),
|
|
30
|
+
"api_retries": a_num(
|
|
31
|
+
optional=True,
|
|
32
|
+
default=3,
|
|
33
|
+
description="Number of retries for failed API requests.",
|
|
34
|
+
),
|
|
35
|
+
"api_insecure_skip_verify": a_bool(
|
|
36
|
+
optional=True,
|
|
37
|
+
default=False,
|
|
38
|
+
description="If true, TLS certificate verification is skipped.",
|
|
39
|
+
),
|
|
40
|
+
"api_headers": a_map(
|
|
41
|
+
element_type_def=a_str(),
|
|
42
|
+
optional=True,
|
|
43
|
+
description="Custom headers to send with every API request.",
|
|
44
|
+
),
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@register_capability("api")
|
|
49
|
+
class ApiCapability(AbstractApiCapability):
|
|
50
|
+
"""
|
|
51
|
+
The Pyvider API capability.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
def __init__(self, **kwargs):
|
|
55
|
+
super().__init__(**kwargs)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# đđđ ī¸
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#
|
|
2
|
+
# pyvider/components/capabilities/lens.py
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import jq
|
|
8
|
+
|
|
9
|
+
from pyvider.capabilities import BaseCapability, register_capability
|
|
10
|
+
from pyvider.cty import CtyValue
|
|
11
|
+
from pyvider.cty.conversion import infer_cty_type_from_raw
|
|
12
|
+
from pyvider.exceptions import FunctionError
|
|
13
|
+
from pyvider.schema import PvsAttribute, a_bool, a_str
|
|
14
|
+
from pyvider.telemetry import logger
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@register_capability("lens")
|
|
18
|
+
class LensCapability(BaseCapability):
|
|
19
|
+
"""
|
|
20
|
+
Provides schema and services for enabling and configuring lens (jq) components.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def __init__(self, config: Any | None = None) -> None:
|
|
24
|
+
super().__init__(config)
|
|
25
|
+
self._config = config
|
|
26
|
+
|
|
27
|
+
@property
|
|
28
|
+
def is_enabled(self) -> bool:
|
|
29
|
+
if self._config and hasattr(self._config, "lens_enabled"):
|
|
30
|
+
return self._config.lens_enabled
|
|
31
|
+
return True
|
|
32
|
+
|
|
33
|
+
def jq(self, query: str, input_data: Any) -> CtyValue:
|
|
34
|
+
"""
|
|
35
|
+
Executes a JQ query and converts the raw Python result to a CtyValue.
|
|
36
|
+
"""
|
|
37
|
+
logger.debug(
|
|
38
|
+
"âī¸ LENS-JQ â
Applying jq query via LensCapability service", query=query
|
|
39
|
+
)
|
|
40
|
+
try:
|
|
41
|
+
# THE FIX: Use the correct `compile(...).transform(...)` API.
|
|
42
|
+
compiled_query = jq.compile(query)
|
|
43
|
+
final_raw_result = compiled_query.transform(input_data)
|
|
44
|
+
|
|
45
|
+
inferred_type = infer_cty_type_from_raw(final_raw_result)
|
|
46
|
+
return inferred_type.validate(final_raw_result)
|
|
47
|
+
except Exception as e:
|
|
48
|
+
logger.error(
|
|
49
|
+
"âī¸ LENS-JQ â JQ processing failed in capability",
|
|
50
|
+
error=str(e),
|
|
51
|
+
exc_info=True,
|
|
52
|
+
)
|
|
53
|
+
raise FunctionError(f"jq query failed: {e}") from e
|
|
54
|
+
|
|
55
|
+
@staticmethod
|
|
56
|
+
def get_schema_contribution() -> dict[str, PvsAttribute]:
|
|
57
|
+
return {
|
|
58
|
+
"lens_enabled": a_bool(
|
|
59
|
+
optional=True,
|
|
60
|
+
default=True,
|
|
61
|
+
description="Enables or disables all lens (jq) related components.",
|
|
62
|
+
),
|
|
63
|
+
"lens_jq_path": a_str(
|
|
64
|
+
optional=True,
|
|
65
|
+
description="Specifies a custom path to the 'jq' executable.",
|
|
66
|
+
),
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# đđī¸đ ī¸
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#
|
|
2
|
+
# pyvider/components/data_sources/__init__.py
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
# pyvider/components/data_sources/__init__.py
|
|
6
|
+
"""
|
|
7
|
+
Pyvider Data Sources Components
|
|
8
|
+
==============================
|
|
9
|
+
This package contains all data source components that are automatically discovered
|
|
10
|
+
and registered by the Pyvider framework.
|
|
11
|
+
|
|
12
|
+
Components in this package must use the @register_data_source decorator.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# This file intentionally contains no explicit imports.
|
|
16
|
+
# All data source components are discovered automatically by scanning this package.
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
# No explicit exports - autodiscovery handles registration
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
# Metadata for the autodiscovery system
|
|
23
|
+
__component_type__ = "data_source"
|
|
24
|
+
__autodiscovery__ = True
|
|
25
|
+
|
|
26
|
+
# đĻđđ
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
page_title: "DataSource: pyvider_env_variables"
|
|
3
|
+
description: |-
|
|
4
|
+
{{ schema.description or "Provides a pyvider_env_variables DataSource." }}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# pyvider_env_variables (DataSource)
|
|
8
|
+
|
|
9
|
+
{{ schema.description or "Provides a pyvider_env_variables DataSource." }}
|
|
10
|
+
|
|
11
|
+
{{ example("example") }}
|
|
12
|
+
|
|
13
|
+
## Argument Reference
|
|
14
|
+
|
|
15
|
+
{{ schema() }}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
page_title: "Data Source: pyvider_env_variables"
|
|
3
|
+
description: |-
|
|
4
|
+
Terraform data source for pyvider_env_variables
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# pyvider_env_variables (Data Source)
|
|
8
|
+
|
|
9
|
+
Terraform data source for pyvider_env_variables
|
|
10
|
+
|
|
11
|
+
## Example Usage
|
|
12
|
+
|
|
13
|
+
{{ example("example") }}
|
|
14
|
+
|
|
15
|
+
## Argument Reference
|
|
16
|
+
|
|
17
|
+
{{ schema() }}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#
|
|
2
|
+
# pyvider/components/data_sources/env_variables.py
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import re
|
|
7
|
+
from typing import cast
|
|
8
|
+
|
|
9
|
+
import attrs
|
|
10
|
+
|
|
11
|
+
from pyvider.data_sources.base import BaseDataSource
|
|
12
|
+
from pyvider.data_sources.decorators import register_data_source
|
|
13
|
+
from pyvider.exceptions import DataSourceError
|
|
14
|
+
from pyvider.resources.context import ResourceContext
|
|
15
|
+
from pyvider.schema import PvsSchema, a_bool, a_list, a_map, a_str, s_data_source
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@attrs.define(frozen=True)
|
|
19
|
+
class EnvVariablesConfig:
|
|
20
|
+
keys: list[str] | None = None
|
|
21
|
+
prefix: str | None = None
|
|
22
|
+
regex: str | None = None
|
|
23
|
+
exclude_empty: bool | None = None
|
|
24
|
+
transform_keys: str | None = None
|
|
25
|
+
transform_values: str | None = None
|
|
26
|
+
case_sensitive: bool | None = None
|
|
27
|
+
sensitive_keys: list[str] | None = None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@attrs.define(frozen=True)
|
|
31
|
+
class EnvVariablesState:
|
|
32
|
+
values: dict[str, str] = attrs.field(factory=dict)
|
|
33
|
+
sensitive_values: dict[str, str] = attrs.field(factory=dict)
|
|
34
|
+
all_values: dict[str, str] = attrs.field(factory=dict)
|
|
35
|
+
all_environment: dict[str, str] = attrs.field(factory=dict)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@register_data_source("pyvider_env_variables")
|
|
39
|
+
class EnvVariablesDataSource(
|
|
40
|
+
BaseDataSource["pyvider_env_variables", EnvVariablesState, EnvVariablesConfig]
|
|
41
|
+
):
|
|
42
|
+
config_class = EnvVariablesConfig
|
|
43
|
+
state_class = EnvVariablesState
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def get_schema(cls) -> PvsSchema:
|
|
47
|
+
return s_data_source(
|
|
48
|
+
attributes={
|
|
49
|
+
"keys": a_list(a_str(), optional=True),
|
|
50
|
+
"prefix": a_str(optional=True),
|
|
51
|
+
"regex": a_str(optional=True),
|
|
52
|
+
"exclude_empty": a_bool(optional=True, default=True),
|
|
53
|
+
"transform_keys": a_str(optional=True),
|
|
54
|
+
"transform_values": a_str(optional=True),
|
|
55
|
+
"case_sensitive": a_bool(optional=True, default=True),
|
|
56
|
+
"sensitive_keys": a_list(a_str(), optional=True),
|
|
57
|
+
"values": a_map(a_str(), computed=True),
|
|
58
|
+
"sensitive_values": a_map(a_str(), computed=True, sensitive=True),
|
|
59
|
+
"all_values": a_map(a_str(), computed=True),
|
|
60
|
+
"all_environment": a_map(a_str(), computed=True),
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
async def _validate_config(self, config: EnvVariablesConfig) -> list[str]:
|
|
65
|
+
if (
|
|
66
|
+
sum(1 for v in [config.keys, config.prefix, config.regex] if v is not None)
|
|
67
|
+
> 1
|
|
68
|
+
):
|
|
69
|
+
return ["Only one of 'keys', 'prefix', or 'regex' can be specified."]
|
|
70
|
+
return []
|
|
71
|
+
|
|
72
|
+
async def read(self, ctx: ResourceContext) -> EnvVariablesState:
|
|
73
|
+
if not ctx.config:
|
|
74
|
+
raise DataSourceError("Configuration is required.")
|
|
75
|
+
config = cast(EnvVariablesConfig, ctx.config)
|
|
76
|
+
exclude_empty = config.exclude_empty is not False
|
|
77
|
+
case_sensitive = config.case_sensitive is not False
|
|
78
|
+
source_vars = os.environ.copy()
|
|
79
|
+
filtered_vars = {}
|
|
80
|
+
if config.keys is not None:
|
|
81
|
+
for key in config.keys:
|
|
82
|
+
if (value := source_vars.get(key)) is not None:
|
|
83
|
+
if exclude_empty and not value:
|
|
84
|
+
continue
|
|
85
|
+
filtered_vars[key] = value
|
|
86
|
+
elif config.prefix is not None:
|
|
87
|
+
prefix_to_match = config.prefix if case_sensitive else config.prefix.lower()
|
|
88
|
+
for key, value in source_vars.items():
|
|
89
|
+
key_to_check = key if case_sensitive else key.lower()
|
|
90
|
+
if key_to_check.startswith(prefix_to_match):
|
|
91
|
+
if exclude_empty and not value:
|
|
92
|
+
continue
|
|
93
|
+
filtered_vars[key] = value
|
|
94
|
+
elif config.regex is not None:
|
|
95
|
+
flags = 0 if case_sensitive else re.IGNORECASE
|
|
96
|
+
try:
|
|
97
|
+
compiled_regex = re.compile(config.regex, flags)
|
|
98
|
+
for key, value in source_vars.items():
|
|
99
|
+
if compiled_regex.match(key):
|
|
100
|
+
if exclude_empty and not value:
|
|
101
|
+
continue
|
|
102
|
+
filtered_vars[key] = value
|
|
103
|
+
except re.error as e:
|
|
104
|
+
raise DataSourceError(f"Invalid regex provided: {e}") from e
|
|
105
|
+
else:
|
|
106
|
+
for key, value in source_vars.items():
|
|
107
|
+
if exclude_empty and not value:
|
|
108
|
+
continue
|
|
109
|
+
filtered_vars[key] = value
|
|
110
|
+
transformed_vars = {}
|
|
111
|
+
for key, value in filtered_vars.items():
|
|
112
|
+
final_key = (
|
|
113
|
+
key.upper()
|
|
114
|
+
if config.transform_keys == "upper"
|
|
115
|
+
else (key.lower() if config.transform_keys == "lower" else key)
|
|
116
|
+
)
|
|
117
|
+
final_value = (
|
|
118
|
+
value.upper()
|
|
119
|
+
if config.transform_values == "upper"
|
|
120
|
+
else (value.lower() if config.transform_values == "lower" else value)
|
|
121
|
+
)
|
|
122
|
+
transformed_vars[final_key] = final_value
|
|
123
|
+
sensitive_keys_set = set(config.sensitive_keys or [])
|
|
124
|
+
sensitive_vals = {
|
|
125
|
+
k: v for k, v in transformed_vars.items() if k in sensitive_keys_set
|
|
126
|
+
}
|
|
127
|
+
non_sensitive_vals = {
|
|
128
|
+
k: v for k, v in transformed_vars.items() if k not in sensitive_keys_set
|
|
129
|
+
}
|
|
130
|
+
return EnvVariablesState(
|
|
131
|
+
values=non_sensitive_vals,
|
|
132
|
+
sensitive_values=sensitive_vals,
|
|
133
|
+
all_values=transformed_vars,
|
|
134
|
+
all_environment=source_vars,
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
# đđ¤đ
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
page_title: "DataSource: pyvider_file_info"
|
|
3
|
+
description: |-
|
|
4
|
+
{{ schema.description or "Provides a pyvider_file_info DataSource." }}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# pyvider_file_info (DataSource)
|
|
8
|
+
|
|
9
|
+
{{ schema.description or "Provides a pyvider_file_info DataSource." }}
|
|
10
|
+
|
|
11
|
+
{{ example("example") }}
|
|
12
|
+
|
|
13
|
+
## Argument Reference
|
|
14
|
+
|
|
15
|
+
{{ schema() }}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
page_title: "Data Source: pyvider_file_info"
|
|
3
|
+
description: |-
|
|
4
|
+
Terraform data source for pyvider_file_info
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# pyvider_file_info (Data Source)
|
|
8
|
+
|
|
9
|
+
Terraform data source for pyvider_file_info
|
|
10
|
+
|
|
11
|
+
## Example Usage
|
|
12
|
+
|
|
13
|
+
{{ example("example") }}
|
|
14
|
+
|
|
15
|
+
## Argument Reference
|
|
16
|
+
|
|
17
|
+
{{ schema() }}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#
|
|
2
|
+
# pyvider/components/data_sources/file_info.py
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
# components/data_sources/file_info.py
|
|
6
|
+
import datetime
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
import stat
|
|
9
|
+
from typing import cast
|
|
10
|
+
|
|
11
|
+
import attrs
|
|
12
|
+
|
|
13
|
+
from pyvider.data_sources.base import BaseDataSource
|
|
14
|
+
from pyvider.data_sources.decorators import register_data_source
|
|
15
|
+
from pyvider.exceptions import DataSourceError
|
|
16
|
+
from pyvider.resources.context import ResourceContext
|
|
17
|
+
from pyvider.schema import PvsSchema, a_bool, a_num, a_str, s_data_source
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@attrs.define(frozen=True)
|
|
21
|
+
class FileInfoConfig:
|
|
22
|
+
path: str = attrs.field()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@attrs.define(frozen=True)
|
|
26
|
+
class FileInfoState:
|
|
27
|
+
path: str = attrs.field()
|
|
28
|
+
exists: bool = attrs.field(default=False)
|
|
29
|
+
size: int = attrs.field(default=0)
|
|
30
|
+
is_dir: bool = attrs.field(default=False)
|
|
31
|
+
is_file: bool = attrs.field(default=False)
|
|
32
|
+
is_symlink: bool = attrs.field(default=False)
|
|
33
|
+
modified_time: str = attrs.field(default="")
|
|
34
|
+
access_time: str = attrs.field(default="")
|
|
35
|
+
creation_time: str = attrs.field(default="")
|
|
36
|
+
permissions: str = attrs.field(default="")
|
|
37
|
+
owner: str = attrs.field(default="")
|
|
38
|
+
group: str = attrs.field(default="")
|
|
39
|
+
mime_type: str = attrs.field(default="")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@register_data_source("pyvider_file_info")
|
|
43
|
+
class FileInfoDataSource(
|
|
44
|
+
BaseDataSource["pyvider_file_info", FileInfoState, FileInfoConfig]
|
|
45
|
+
):
|
|
46
|
+
config_class = FileInfoConfig
|
|
47
|
+
state_class = FileInfoState
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def get_schema(cls) -> PvsSchema:
|
|
51
|
+
return s_data_source(
|
|
52
|
+
{
|
|
53
|
+
"path": a_str(required=True, description="Path to inspect."),
|
|
54
|
+
"exists": a_bool(computed=True, description="Whether path exists."),
|
|
55
|
+
"size": a_num(computed=True, description="Size in bytes."),
|
|
56
|
+
"is_dir": a_bool(computed=True, description="Is it a directory."),
|
|
57
|
+
"is_file": a_bool(computed=True, description="Is it a regular file."),
|
|
58
|
+
"is_symlink": a_bool(
|
|
59
|
+
computed=True, description="Is it a symbolic link."
|
|
60
|
+
),
|
|
61
|
+
"modified_time": a_str(
|
|
62
|
+
computed=True, description="Last modification time."
|
|
63
|
+
),
|
|
64
|
+
"access_time": a_str(computed=True, description="Last access time."),
|
|
65
|
+
"creation_time": a_str(computed=True, description="Creation time."),
|
|
66
|
+
"permissions": a_str(computed=True, description="File permissions."),
|
|
67
|
+
"owner": a_str(
|
|
68
|
+
computed=True,
|
|
69
|
+
description="Owner username, or numeric UID on non-Unix systems.",
|
|
70
|
+
),
|
|
71
|
+
"group": a_str(
|
|
72
|
+
computed=True,
|
|
73
|
+
description="Group name, or numeric GID on non-Unix systems.",
|
|
74
|
+
),
|
|
75
|
+
"mime_type": a_str(computed=True, description="MIME type."),
|
|
76
|
+
}
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
async def _validate_config(self, config: FileInfoConfig) -> list[str]:
|
|
80
|
+
return []
|
|
81
|
+
|
|
82
|
+
async def read(self, ctx: ResourceContext) -> FileInfoState:
|
|
83
|
+
if not ctx.config:
|
|
84
|
+
raise DataSourceError("Configuration is missing.")
|
|
85
|
+
config = cast(FileInfoConfig, ctx.config)
|
|
86
|
+
path = Path(config.path)
|
|
87
|
+
|
|
88
|
+
if not path.exists():
|
|
89
|
+
return FileInfoState(path=config.path, exists=False)
|
|
90
|
+
|
|
91
|
+
stat_info = path.stat()
|
|
92
|
+
owner, group = str(stat_info.st_uid), str(stat_info.st_gid)
|
|
93
|
+
try:
|
|
94
|
+
import pwd
|
|
95
|
+
|
|
96
|
+
owner = pwd.getpwuid(stat_info.st_uid).pw_name
|
|
97
|
+
except (ImportError, KeyError):
|
|
98
|
+
pass
|
|
99
|
+
try:
|
|
100
|
+
import grp
|
|
101
|
+
|
|
102
|
+
group = grp.getgrgid(stat_info.st_gid).gr_name
|
|
103
|
+
except (ImportError, KeyError):
|
|
104
|
+
pass
|
|
105
|
+
|
|
106
|
+
mime_type = ""
|
|
107
|
+
if path.is_file():
|
|
108
|
+
try:
|
|
109
|
+
import mimetypes
|
|
110
|
+
|
|
111
|
+
mime_type = mimetypes.guess_type(config.path)[0] or ""
|
|
112
|
+
except ImportError:
|
|
113
|
+
pass
|
|
114
|
+
|
|
115
|
+
return FileInfoState(
|
|
116
|
+
path=config.path,
|
|
117
|
+
exists=True,
|
|
118
|
+
size=stat_info.st_size,
|
|
119
|
+
is_dir=path.is_dir(),
|
|
120
|
+
is_file=path.is_file(),
|
|
121
|
+
is_symlink=path.is_symlink(),
|
|
122
|
+
modified_time=datetime.datetime.fromtimestamp(
|
|
123
|
+
stat_info.st_mtime, tz=datetime.UTC
|
|
124
|
+
).isoformat(),
|
|
125
|
+
access_time=datetime.datetime.fromtimestamp(
|
|
126
|
+
stat_info.st_atime, tz=datetime.UTC
|
|
127
|
+
).isoformat(),
|
|
128
|
+
creation_time=datetime.datetime.fromtimestamp(
|
|
129
|
+
stat_info.st_ctime, tz=datetime.UTC
|
|
130
|
+
).isoformat(),
|
|
131
|
+
permissions=oct(stat.S_IMODE(stat_info.st_mode)),
|
|
132
|
+
owner=owner,
|
|
133
|
+
group=group,
|
|
134
|
+
mime_type=mime_type,
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
# đâšī¸đ
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
page_title: "DataSource: pyvider_http_api"
|
|
3
|
+
description: |-
|
|
4
|
+
{{ schema.description or "Provides a pyvider_http_api DataSource." }}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# pyvider_http_api (DataSource)
|
|
8
|
+
|
|
9
|
+
{{ schema.description or "Provides a pyvider_http_api DataSource." }}
|
|
10
|
+
|
|
11
|
+
{{ example("example") }}
|
|
12
|
+
|
|
13
|
+
## Argument Reference
|
|
14
|
+
|
|
15
|
+
{{ schema() }}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
page_title: "Data Source: pyvider_http_api"
|
|
3
|
+
description: |-
|
|
4
|
+
Terraform data source for pyvider_http_api
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# pyvider_http_api (Data Source)
|
|
8
|
+
|
|
9
|
+
Terraform data source for pyvider_http_api
|
|
10
|
+
|
|
11
|
+
## Example Usage
|
|
12
|
+
|
|
13
|
+
{{ example("example") }}
|
|
14
|
+
|
|
15
|
+
## Argument Reference
|
|
16
|
+
|
|
17
|
+
{{ schema() }}
|