satvu 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. satvu-0.2.0/.gitignore +20 -0
  2. satvu-0.2.0/LICENSE +21 -0
  3. satvu-0.2.0/PKG-INFO +107 -0
  4. satvu-0.2.0/README.md +89 -0
  5. satvu-0.2.0/hatch_build.py +23 -0
  6. satvu-0.2.0/pyproject.toml +195 -0
  7. satvu-0.2.0/src/builder/__init__.py +8 -0
  8. satvu-0.2.0/src/builder/__main__.py +12 -0
  9. satvu-0.2.0/src/builder/ast_generator.py +555 -0
  10. satvu-0.2.0/src/builder/build.py +457 -0
  11. satvu-0.2.0/src/builder/config.py +32 -0
  12. satvu-0.2.0/src/builder/jinja_filters/__init__.py +3 -0
  13. satvu-0.2.0/src/builder/jinja_filters/to_pydantic_model_field.py +35 -0
  14. satvu-0.2.0/src/builder/load.py +154 -0
  15. satvu-0.2.0/src/builder/openapi_preprocessor.py +86 -0
  16. satvu-0.2.0/src/builder/patches.py +769 -0
  17. satvu-0.2.0/src/builder/schema_utils.py +249 -0
  18. satvu-0.2.0/src/builder/streaming_detector.py +214 -0
  19. satvu-0.2.0/src/builder/streaming_post_processor.py +121 -0
  20. satvu-0.2.0/src/builder/templates/endpoint_module.py.jinja +325 -0
  21. satvu-0.2.0/src/builder/templates/macros/return_annotation.jinja +46 -0
  22. satvu-0.2.0/src/builder/templates/macros/test_error.jinja +80 -0
  23. satvu-0.2.0/src/builder/templates/macros/test_helpers.jinja +93 -0
  24. satvu-0.2.0/src/builder/templates/macros/test_no_content.jinja +31 -0
  25. satvu-0.2.0/src/builder/templates/macros/test_success.jinja +50 -0
  26. satvu-0.2.0/src/builder/templates/model.py.jinja +54 -0
  27. satvu-0.2.0/src/builder/templates/models_init.py.jinja +23 -0
  28. satvu-0.2.0/src/builder/templates/property_templates/list_property.py.jinja +55 -0
  29. satvu-0.2.0/src/builder/templates/property_templates/model_property.py.jinja +38 -0
  30. satvu-0.2.0/src/builder/templates/property_templates/union_property.py.jinja +97 -0
  31. satvu-0.2.0/src/builder/templates/test_module.py.jinja +114 -0
  32. satvu-0.2.0/src/builder/templates/test_schemas.py.jinja +80 -0
  33. satvu-0.2.0/src/builder/test_generator.py +465 -0
  34. satvu-0.2.0/src/satvu/__init__.py +11 -0
  35. satvu-0.2.0/src/satvu/auth.py +248 -0
  36. satvu-0.2.0/src/satvu/auth_test.py +415 -0
  37. satvu-0.2.0/src/satvu/core.py +306 -0
  38. satvu-0.2.0/src/satvu/core_retry_test.py +242 -0
  39. satvu-0.2.0/src/satvu/core_streaming_test.py +268 -0
  40. satvu-0.2.0/src/satvu/core_test.py +588 -0
  41. satvu-0.2.0/src/satvu/http/__init__.py +130 -0
  42. satvu-0.2.0/src/satvu/http/errors.py +499 -0
  43. satvu-0.2.0/src/satvu/http/httpx_adapter.py +300 -0
  44. satvu-0.2.0/src/satvu/http/httpx_adapter_test.py +236 -0
  45. satvu-0.2.0/src/satvu/http/protocol.py +132 -0
  46. satvu-0.2.0/src/satvu/http/requests_adapter.py +298 -0
  47. satvu-0.2.0/src/satvu/http/requests_adapter_test.py +284 -0
  48. satvu-0.2.0/src/satvu/http/stdlib_adapter.py +356 -0
  49. satvu-0.2.0/src/satvu/http/stdlib_adapter_test.py +208 -0
  50. satvu-0.2.0/src/satvu/http/urllib3_adapter.py +351 -0
  51. satvu-0.2.0/src/satvu/http/urllib3_adapter_test.py +282 -0
  52. satvu-0.2.0/src/satvu/py.typed +0 -0
  53. satvu-0.2.0/src/satvu/result.py +351 -0
  54. satvu-0.2.0/src/satvu/sdk.py +161 -0
  55. satvu-0.2.0/src/satvu/services/conftest.py +57 -0
  56. satvu-0.2.0/src/satvu/shared/__init__.py +0 -0
  57. satvu-0.2.0/src/satvu/shared/parsing.py +136 -0
  58. satvu-0.2.0/src/satvu/shared/parsing_test.py +387 -0
satvu-0.2.0/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ __pycache__/
2
+ .cache
3
+ .envrc
4
+ .idea/
5
+ .mcp.json
6
+ .pytest_cache
7
+ .venv
8
+ *.egg-info
9
+ *.py[oc]
10
+ /src/satvu/services/*
11
+ !/src/satvu/services/conftest.py
12
+ build/
13
+ dist/
14
+ pytest-coverage.txt
15
+ pytest.xml
16
+ tasks-*.md
17
+ wheels/
18
+ .claude/
19
+ .dagger/src/dagger_gen.py
20
+ .hypothesis
satvu-0.2.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 to present SatVu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
satvu-0.2.0/PKG-INFO ADDED
@@ -0,0 +1,107 @@
1
+ Metadata-Version: 2.4
2
+ Name: satvu
3
+ Version: 0.2.0
4
+ Summary: SatVu API SDK
5
+ Author-email: Christian Wygoda <christian.wygoda@satellitevu.com>, James Harrison <james.harrison@satellitevu.com>, Zhelini Raveendran <zhelini.raveendran@satellitevu.com>
6
+ License-File: LICENSE
7
+ Requires-Python: >=3.10
8
+ Requires-Dist: pydantic>=2.11.7
9
+ Provides-Extra: http-httpx
10
+ Requires-Dist: httpx>=0.28.1; extra == 'http-httpx'
11
+ Provides-Extra: http-requests
12
+ Requires-Dist: requests>=2.32.0; extra == 'http-requests'
13
+ Provides-Extra: http-urllib3
14
+ Requires-Dist: urllib3>=2.0.0; extra == 'http-urllib3'
15
+ Provides-Extra: standard
16
+ Requires-Dist: appdirs>=1.4.4; extra == 'standard'
17
+ Description-Content-Type: text/markdown
18
+
19
+ # SatVu API SDK
20
+
21
+ [![pypi](https://img.shields.io/pypi/v/satvu)](https://pypi.org/project/satvu/)
22
+ [![GitHub License](https://img.shields.io/github/license/SatelliteVu/satvu-api-sdk)](https://github.com/SatelliteVu/satvu-api-sdk/blob/main/LICENSE)
23
+ [![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/satellitevu)](https://x.com/intent/follow?screen_name=satellitevu)
24
+ [![LinkedIn](https://img.shields.io/badge/LinkedIn-blue?style=flat&logo=linkedin)](https://uk.linkedin.com/company/satvu)
25
+
26
+ Python SDK for [SatVu's](https://www.satellitevu.com/) satellite imagery platform.
27
+
28
+ ## ✨ Features
29
+
30
+ - **Unified Interface** - Access all SatVu APIs through a single SDK
31
+ - **Type Safety** - Full type hints with Pydantic models for requests and responses
32
+ - **Explicit Error Handling** - Rust-inspired Result types for predictable error handling
33
+ - **Multiple HTTP Backends** - Choose httpx, requests, urllib3, or stdlib
34
+ - **Built-in Pagination** - Iterator methods for seamless pagination through large result sets
35
+ - **Streaming Downloads** - Memory-efficient downloads for large satellite imagery files
36
+
37
+ ## 📦 Installation
38
+
39
+ The package is published on [PyPI](https://pypi.org/project/satvu/) and can be installed with pip:
40
+
41
+ ```bash
42
+ pip install satvu
43
+ ```
44
+
45
+ With optional HTTP backends:
46
+
47
+ ```bash
48
+ pip install satvu[http-httpx]
49
+ pip install satvu[http-requests]
50
+ pip install satvu[http-urllib3]
51
+ ```
52
+
53
+ The SDK works out of the box with Python's built-in `urllib`.
54
+
55
+ ## 🚀 Quick Start
56
+
57
+ ```python
58
+ import os
59
+ from uuid import UUID
60
+ from satvu import SatVuSDK
61
+
62
+ sdk = SatVuSDK(
63
+ client_id=os.environ["SATVU_CLIENT_ID"],
64
+ client_secret=os.environ["SATVU_CLIENT_SECRET"],
65
+ )
66
+
67
+ contract_id = UUID(os.environ["SATVU_CONTRACT_ID"])
68
+
69
+ # Search the catalog
70
+ results = sdk.catalog.get_search(contract_id=contract_id, limit=10)
71
+ for feature in results.features:
72
+ print(feature.id)
73
+ ```
74
+
75
+ ## Available Services
76
+
77
+ | Service | Description |
78
+ | -------------- | ----------------------------------------------------------------------------------------- |
79
+ | `sdk.catalog` | Search and discover SatVu's [STAC](https://github.com/radiantearth/stac-api-spec) catalog |
80
+ | `sdk.cos` | Order and download imagery available from SatVu's STAC catalog |
81
+ | `sdk.id` | Identity and user management, including webhooks |
82
+ | `sdk.otm` | Order and manage satellite tasking |
83
+ | `sdk.policy` | Check active contracts |
84
+ | `sdk.reseller` | Perform reseller operations |
85
+ | `sdk.wallet` | Check credit balances |
86
+
87
+ ## 📖 Documentation
88
+
89
+ - [Getting Started](docs/getting-started.md) - Installation, authentication, first API call
90
+ - [Authentication](docs/authentication.md) - OAuth2 flow, token caching, environments
91
+ - [Error Handling](docs/error-handling.md) - Result types and error patterns
92
+ - [Pagination](docs/pagination.md) - Working with paginated endpoints
93
+ - [Streaming Downloads](docs/streaming-downloads.md) - Downloading large imagery files
94
+ - [HTTP Backends](docs/http-backends.md) - Choosing and configuring HTTP clients
95
+ - [Changelog](CHANGELOG.md)
96
+
97
+ ## Requirements
98
+
99
+ - Python 3.10+
100
+
101
+ ## Contributing
102
+
103
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
104
+
105
+ ## Support
106
+
107
+ For bugs and feature requests, please [open an issue](https://github.com/satellitevu/satvu-api-sdk/issues).
satvu-0.2.0/README.md ADDED
@@ -0,0 +1,89 @@
1
+ # SatVu API SDK
2
+
3
+ [![pypi](https://img.shields.io/pypi/v/satvu)](https://pypi.org/project/satvu/)
4
+ [![GitHub License](https://img.shields.io/github/license/SatelliteVu/satvu-api-sdk)](https://github.com/SatelliteVu/satvu-api-sdk/blob/main/LICENSE)
5
+ [![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/satellitevu)](https://x.com/intent/follow?screen_name=satellitevu)
6
+ [![LinkedIn](https://img.shields.io/badge/LinkedIn-blue?style=flat&logo=linkedin)](https://uk.linkedin.com/company/satvu)
7
+
8
+ Python SDK for [SatVu's](https://www.satellitevu.com/) satellite imagery platform.
9
+
10
+ ## ✨ Features
11
+
12
+ - **Unified Interface** - Access all SatVu APIs through a single SDK
13
+ - **Type Safety** - Full type hints with Pydantic models for requests and responses
14
+ - **Explicit Error Handling** - Rust-inspired Result types for predictable error handling
15
+ - **Multiple HTTP Backends** - Choose httpx, requests, urllib3, or stdlib
16
+ - **Built-in Pagination** - Iterator methods for seamless pagination through large result sets
17
+ - **Streaming Downloads** - Memory-efficient downloads for large satellite imagery files
18
+
19
+ ## 📦 Installation
20
+
21
+ The package is published on [PyPI](https://pypi.org/project/satvu/) and can be installed with pip:
22
+
23
+ ```bash
24
+ pip install satvu
25
+ ```
26
+
27
+ With optional HTTP backends:
28
+
29
+ ```bash
30
+ pip install satvu[http-httpx]
31
+ pip install satvu[http-requests]
32
+ pip install satvu[http-urllib3]
33
+ ```
34
+
35
+ The SDK works out of the box with Python's built-in `urllib`.
36
+
37
+ ## 🚀 Quick Start
38
+
39
+ ```python
40
+ import os
41
+ from uuid import UUID
42
+ from satvu import SatVuSDK
43
+
44
+ sdk = SatVuSDK(
45
+ client_id=os.environ["SATVU_CLIENT_ID"],
46
+ client_secret=os.environ["SATVU_CLIENT_SECRET"],
47
+ )
48
+
49
+ contract_id = UUID(os.environ["SATVU_CONTRACT_ID"])
50
+
51
+ # Search the catalog
52
+ results = sdk.catalog.get_search(contract_id=contract_id, limit=10)
53
+ for feature in results.features:
54
+ print(feature.id)
55
+ ```
56
+
57
+ ## Available Services
58
+
59
+ | Service | Description |
60
+ | -------------- | ----------------------------------------------------------------------------------------- |
61
+ | `sdk.catalog` | Search and discover SatVu's [STAC](https://github.com/radiantearth/stac-api-spec) catalog |
62
+ | `sdk.cos` | Order and download imagery available from SatVu's STAC catalog |
63
+ | `sdk.id` | Identity and user management, including webhooks |
64
+ | `sdk.otm` | Order and manage satellite tasking |
65
+ | `sdk.policy` | Check active contracts |
66
+ | `sdk.reseller` | Perform reseller operations |
67
+ | `sdk.wallet` | Check credit balances |
68
+
69
+ ## 📖 Documentation
70
+
71
+ - [Getting Started](docs/getting-started.md) - Installation, authentication, first API call
72
+ - [Authentication](docs/authentication.md) - OAuth2 flow, token caching, environments
73
+ - [Error Handling](docs/error-handling.md) - Result types and error patterns
74
+ - [Pagination](docs/pagination.md) - Working with paginated endpoints
75
+ - [Streaming Downloads](docs/streaming-downloads.md) - Downloading large imagery files
76
+ - [HTTP Backends](docs/http-backends.md) - Choosing and configuring HTTP clients
77
+ - [Changelog](CHANGELOG.md)
78
+
79
+ ## Requirements
80
+
81
+ - Python 3.10+
82
+
83
+ ## Contributing
84
+
85
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
86
+
87
+ ## Support
88
+
89
+ For bugs and feature requests, please [open an issue](https://github.com/satellitevu/satvu-api-sdk/issues).
@@ -0,0 +1,23 @@
1
+ """Hatch build hook to generate SDK code from OpenAPI specs."""
2
+
3
+ import sys
4
+ from pathlib import Path
5
+
6
+ from hatchling.builders.hooks.plugin.interface import ( # type: ignore[import-not-found]
7
+ BuildHookInterface,
8
+ )
9
+
10
+ # Add src to sys.path so we can import builder
11
+ ROOT_DIR = Path(__file__).parent
12
+ sys.path.insert(0, str(ROOT_DIR / "src"))
13
+
14
+
15
+ class CustomBuildHook(BuildHookInterface):
16
+ """Build hook to generate SDK code before packaging."""
17
+
18
+ def initialize(self, version, build_data):
19
+ """Run the SDK builder before packaging."""
20
+ from builder.build import build
21
+
22
+ # Generate all service modules (fetch specs fresh during build)
23
+ build(api_id="all", use_cached=False)
@@ -0,0 +1,195 @@
1
+ [project]
2
+ name = "satvu"
3
+ version = "0.2.0"
4
+ description = "SatVu API SDK"
5
+ readme = "README.md"
6
+ authors = [
7
+ { name = "Christian Wygoda", email = "christian.wygoda@satellitevu.com" },
8
+ { name = "James Harrison", email = "james.harrison@satellitevu.com" },
9
+ { name = "Zhelini Raveendran", email = "zhelini.raveendran@satellitevu.com" },
10
+ ]
11
+ requires-python = ">=3.10"
12
+ dependencies = [
13
+ "pydantic>=2.11.7",
14
+ ]
15
+
16
+ [project.optional-dependencies]
17
+ standard = ["appdirs>=1.4.4"]
18
+ http-urllib3 = ["urllib3>=2.0.0"]
19
+ http-requests = ["requests>=2.32.0"]
20
+ http-httpx = ["httpx>=0.28.1"]
21
+
22
+ [build-system]
23
+ requires = [
24
+ "hatchling",
25
+ "openapi-python-client>=0.27.0",
26
+ "httpx>=0.28.1",
27
+ "attr>=0.3.2",
28
+ ]
29
+ build-backend = "hatchling.build"
30
+
31
+ [dependency-groups]
32
+ dev = [
33
+ "attr>=0.3.2",
34
+ "fawltydeps>=0.20.0",
35
+ "freezegun>=1.5.5",
36
+ "httpx>=0.28.1",
37
+ "hypothesis>=6.148.2",
38
+ "hypothesis-jsonschema>=0.23.1",
39
+ "mdformat>=1.0.0",
40
+ "mdformat-gfm>=1.0.0",
41
+ "mdformat-ruff>=0.1.3",
42
+ "openapi-python-client>=0.27.0",
43
+ "pook>=2.1.0",
44
+ "pyright>=1.1.407",
45
+ "pytest>=8.3.4",
46
+ "pytest-cov>=7.0.0",
47
+ "pytest-xdist>=3.8.0",
48
+ "requests>=2.32.0",
49
+ "ruff>=0.14.3",
50
+ "urllib3>=2.0.0",
51
+ ]
52
+
53
+ [tool.hatch.build.hooks.custom]
54
+ path = "hatch_build.py"
55
+
56
+ [tool.hatch.build.targets.wheel]
57
+ packages = ["src/satvu"]
58
+
59
+ [tool.hatch.build.targets.wheel.force-include]
60
+ "src/builder" = "builder"
61
+
62
+ [tool.hatch.build.targets.sdist]
63
+ include = ["/src"]
64
+
65
+ [tool.hatch.envs.default.scripts]
66
+ build-sdk = "uv run python -m builder all"
67
+
68
+ [tool.ruff]
69
+ target-version = "py310"
70
+ line-length = 88
71
+
72
+ [tool.ruff.lint]
73
+ select = [
74
+ "B", # flake8-bugbear
75
+ "E", # pycodestyle
76
+ "F", # pyflakes
77
+ "FURB", # refurb
78
+ "I", # isort
79
+ "SIM", # flake8-simplify
80
+ "UP", # pyupgrade
81
+ ]
82
+ ignore = [
83
+ "E501", # line too long
84
+ "UP007" # x | y syntax
85
+ ]
86
+
87
+ [tool.pyright]
88
+ exclude = [
89
+ ".dagger/",
90
+ ".venv/",
91
+ "**/__pycache__/",
92
+ "**/node_modules/",
93
+ "src/builder/patches.py",
94
+ ]
95
+ pythonVersion = "3.10"
96
+ reportMissingImports = true
97
+ reportMissingTypeStubs = false
98
+ typeCheckingMode = "basic"
99
+ venv = ".venv"
100
+ venvPath = "."
101
+
102
+ [tool.fawltydeps]
103
+ code = [
104
+ "src/"
105
+ ]
106
+ ignore_unused = [
107
+ "fawltydeps",
108
+ "hypothesis-jsonschema",
109
+ "mdformat",
110
+ "mdformat-gfm",
111
+ "mdformat-ruff",
112
+ "pyright",
113
+ "pytest-cov",
114
+ "pytest-xdist",
115
+ "ruff",
116
+ ]
117
+ ignore_undeclared = [
118
+ "builder",
119
+ "hatchling",
120
+ "satvu", # Allow self-referencing imports in tests
121
+ ]
122
+
123
+ [tool.commitizen]
124
+ name = "cz_customize"
125
+
126
+ [tool.commitizen.customize]
127
+ message_template = "{{change_type}}({{scope}}): {{subject}}{% if body %}\n\n{{body}}{% endif %}{% if breaking %}\n\nBREAKING CHANGE: {{breaking}}{% endif %}"
128
+ example = "feat(catalog): add thermal_anomaly collection support"
129
+ schema = "<type>(<scope>): <subject>"
130
+ schema_pattern = "^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)\\((core|auth|http|catalog|cos|id|otm|policy|reseller|wallet|builder|deps|docs|test|misc)\\): .{1,50}$"
131
+ commit_parser = "^(?P<change_type>feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)\\((?P<scope>core|auth|http|catalog|cos|id|otm|policy|reseller|wallet|builder|deps|docs|test|misc)\\): (?P<message>.*)$"
132
+ bump_pattern = "^(feat|fix|refactor|perf)"
133
+ bump_map = {"feat" = "MINOR", "fix" = "PATCH", "refactor" = "PATCH", "perf" = "PATCH"}
134
+ info = "Commits must follow: <type>(<scope>): <subject>"
135
+
136
+ [[tool.commitizen.customize.questions]]
137
+ type = "list"
138
+ name = "change_type"
139
+ message = "Select the type of change:"
140
+ choices = [
141
+ {value = "feat", name = "feat: A new feature"},
142
+ {value = "fix", name = "fix: A bug fix"},
143
+ {value = "docs", name = "docs: Documentation only"},
144
+ {value = "style", name = "style: Code style (formatting, etc)"},
145
+ {value = "refactor", name = "refactor: Code change that neither fixes a bug nor adds a feature"},
146
+ {value = "perf", name = "perf: Performance improvement"},
147
+ {value = "test", name = "test: Adding or updating tests"},
148
+ {value = "build", name = "build: Build system or dependencies"},
149
+ {value = "ci", name = "ci: CI/CD configuration"},
150
+ {value = "chore", name = "chore: Other changes (maintenance, tooling)"},
151
+ {value = "revert", name = "revert: Revert a previous commit"},
152
+ ]
153
+
154
+ [[tool.commitizen.customize.questions]]
155
+ type = "list"
156
+ name = "scope"
157
+ message = "Select the scope of this change:"
158
+ choices = [
159
+ {value = "core", name = "core: SDK core (SDKClient, base functionality)"},
160
+ {value = "auth", name = "auth: Authentication (AuthService, tokens)"},
161
+ {value = "http", name = "http: HTTP adapters (httpx, requests, urllib3, stdlib)"},
162
+ {value = "catalog", name = "catalog: Catalog API service"},
163
+ {value = "cos", name = "cos: COS API service"},
164
+ {value = "id", name = "id: ID API service"},
165
+ {value = "otm", name = "otm: OTM API service"},
166
+ {value = "policy", name = "policy: Policy API service"},
167
+ {value = "reseller", name = "reseller: Reseller API service"},
168
+ {value = "wallet", name = "wallet: Wallet API service"},
169
+ {value = "builder", name = "builder: SDK code generator"},
170
+ {value = "deps", name = "deps: Dependencies"},
171
+ {value = "docs", name = "docs: Documentation"},
172
+ {value = "test", name = "test: Test infrastructure"},
173
+ {value = "misc", name = "misc: Miscellaneous changes"},
174
+ ]
175
+
176
+ [[tool.commitizen.customize.questions]]
177
+ type = "input"
178
+ name = "subject"
179
+ message = "Write a short description (max 50 chars):"
180
+
181
+ [[tool.commitizen.customize.questions]]
182
+ type = "input"
183
+ name = "body"
184
+ message = "Longer description (optional, press enter to skip):"
185
+
186
+ [[tool.commitizen.customize.questions]]
187
+ type = "input"
188
+ name = "breaking"
189
+ message = "Breaking change description (optional, press enter to skip):"
190
+
191
+ [tool.coverage.report]
192
+ show_missing = true
193
+ skip_empty = true
194
+ sort = "Cover"
195
+ omit = ["**/*_test.py", "**/conftest.py", "src/builder/**"]
@@ -0,0 +1,8 @@
1
+ """
2
+ Builder package for SatVu API SDK.
3
+
4
+ This package generates Python SDK code from OpenAPI specifications.
5
+ """
6
+
7
+ # Import patches to apply monkey-patches to openapi-python-client
8
+ import builder.patches # noqa: F401
@@ -0,0 +1,12 @@
1
+ from argparse import ArgumentParser
2
+
3
+ from builder.build import build
4
+ from builder.config import CMD_ARGS
5
+
6
+ parser = ArgumentParser(__package__, description="OpenAPI SDK builder")
7
+ parser.add_argument("api", choices=CMD_ARGS.keys())
8
+ parser.add_argument("--cached", action="store_true", default=False)
9
+
10
+ args = parser.parse_args()
11
+
12
+ build(api_id=args.api, use_cached=args.cached)