epistola-client 0.13.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.
- epistola_client-0.13.0/.gitignore +16 -0
- epistola_client-0.13.0/CHANGELOG.md +45 -0
- epistola_client-0.13.0/PKG-INFO +146 -0
- epistola_client-0.13.0/README.md +125 -0
- epistola_client-0.13.0/generated/epistola_client_generated/__init__.py +292 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/__init__.py +18 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/attributes_api.py +1657 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/catalogs_api.py +1004 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/code_lists_api.py +2285 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/consumers_api.py +2528 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/environments_api.py +1585 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/fonts_api.py +697 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/generation_api.py +3080 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/stencils_api.py +4430 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/system_api.py +311 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/templates_api.py +2009 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/tenants_api.py +1515 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/themes_api.py +1677 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/variants_api.py +3702 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api/versions_api.py +1843 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api_client.py +804 -0
- epistola_client-0.13.0/generated/epistola_client_generated/api_response.py +21 -0
- epistola_client-0.13.0/generated/epistola_client_generated/configuration.py +617 -0
- epistola_client-0.13.0/generated/epistola_client_generated/exceptions.py +219 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/__init__.py +125 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/activation_dto.py +102 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/activation_list_response.py +95 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/approve_consumer_request.py +99 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/attribute_dto.py +146 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/attribute_dto_code_list_binding.py +89 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/attribute_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/batch_generation_item.py +178 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/block_style_preset_dto.py +91 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/catalog_dto.py +119 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/catalog_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/catalog_upgrade_diff.py +110 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/code_list_dto.py +177 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/code_list_entries_response.py +95 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/code_list_entry_dto.py +93 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/code_list_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/collect_meta.py +99 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/collect_request.py +95 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/consumer_dto.py +197 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/consumer_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/consumer_node_dto.py +99 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/consumer_permissions.py +193 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_attribute_request.py +112 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_attribute_request_code_list_binding.py +89 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_code_list_request.py +149 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_environment_request.py +97 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_stencil_request.py +114 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_stencil_version_request.py +98 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_template_request.py +99 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_tenant_request.py +97 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_theme_request.py +124 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/create_variant_request.py +106 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/data_example_dto.py +91 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/data_model_validation_error.py +89 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/data_model_validation_problem_detail.py +114 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/document_dto.py +141 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/document_generation_item_dto.py +187 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/document_generation_job_dto.py +138 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/document_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/environment_dto.py +109 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/environment_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/font_dto.py +141 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/font_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/font_variant_dto.py +90 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/generate_batch_request.py +103 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/generate_document_request.py +178 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/generation_job_detail.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/generation_job_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/generation_job_response.py +111 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/generation_result.py +174 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/import_catalog_response.py +99 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/import_template_result_dto.py +107 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/margins_dto.py +94 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/node_dto.py +98 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/page_meta.py +93 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/page_settings_dto.py +117 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/partition_assignment.py +98 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/ping_request.py +92 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/pong_details_dto.py +97 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/pong_response.py +103 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/preview_document_request.py +157 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/problem_detail.py +95 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/publish_version_request.py +95 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/register_consumer_request.py +109 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/reject_consumer_request.py +88 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/rotate_public_key_request.py +88 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/slot_dto.py +94 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/stencil_dto.py +130 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/stencil_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/stencil_summary_dto.py +127 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/stencil_usage_dto.py +110 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/stencil_usage_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/stencil_version_dto.py +136 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/stencil_version_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/stencil_version_summary_dto.py +114 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/template_data_validation_error.py +91 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/template_data_validation_result.py +97 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/template_document_dto.py +141 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/template_dto.py +135 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/template_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/template_summary_dto.py +111 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/tenant_dto.py +100 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/tenant_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/theme_dto.py +138 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/theme_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/theme_ref_dto.py +97 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_attribute_request.py +102 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_attribute_request_code_list_binding.py +89 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_code_list_request.py +130 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_consumer_request.py +128 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_draft_request.py +91 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_environment_request.py +88 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_stencil_draft_request.py +98 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_stencil_request.py +97 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_template_request.py +104 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_tenant_request.py +88 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_theme_request.py +125 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/update_variant_request.py +97 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/upgrade_preview_dto.py +121 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/upgrade_preview_list_response.py +95 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/validate_template_data_request.py +87 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/validation_error.py +96 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/validation_problem_detail.py +105 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/variant_dto.py +126 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/variant_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/variant_selection_attribute.py +98 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/variant_summary_dto.py +105 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/version_dto.py +129 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/version_list_response.py +101 -0
- epistola_client-0.13.0/generated/epistola_client_generated/models/version_summary_dto.py +123 -0
- epistola_client-0.13.0/generated/epistola_client_generated/py.typed +0 -0
- epistola_client-0.13.0/generated/epistola_client_generated/rest.py +263 -0
- epistola_client-0.13.0/pyproject.toml +78 -0
- epistola_client-0.13.0/src/epistola_client/__init__.py +94 -0
- epistola_client-0.13.0/src/epistola_client/_generated/__init__.py +19 -0
- epistola_client-0.13.0/src/epistola_client/_generated/contract_version.py +4 -0
- epistola_client-0.13.0/src/epistola_client/_generated/known_problem_slugs.py +39 -0
- epistola_client-0.13.0/src/epistola_client/_generated/model_validation.py +298 -0
- epistola_client-0.13.0/src/epistola_client/auth/__init__.py +5 -0
- epistola_client-0.13.0/src/epistola_client/auth/jwt_signer.py +122 -0
- epistola_client-0.13.0/src/epistola_client/collect/__init__.py +17 -0
- epistola_client-0.13.0/src/epistola_client/collect/result_collector.py +538 -0
- epistola_client-0.13.0/src/epistola_client/error/__init__.py +13 -0
- epistola_client-0.13.0/src/epistola_client/error/problem_detail_exception.py +104 -0
- epistola_client-0.13.0/src/epistola_client/error/problem_detail_handler.py +86 -0
- epistola_client-0.13.0/src/epistola_client/error/problem_types.py +35 -0
- epistola_client-0.13.0/src/epistola_client/http/__init__.py +5 -0
- epistola_client-0.13.0/src/epistola_client/http/client.py +132 -0
- epistola_client-0.13.0/src/epistola_client/identity/__init__.py +5 -0
- epistola_client-0.13.0/src/epistola_client/identity/client_identity.py +86 -0
- epistola_client-0.13.0/src/epistola_client/validation/__init__.py +19 -0
- epistola_client-0.13.0/src/epistola_client/validation/schema.py +189 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Stock OpenAPI-generated client — regenerated from the spec by generate.sh.
|
|
2
|
+
/generated/
|
|
3
|
+
|
|
4
|
+
# Derived sources — regenerated from the spec by gen/generate_derived.py.
|
|
5
|
+
/src/epistola_client/_generated/
|
|
6
|
+
|
|
7
|
+
# Build / packaging artifacts.
|
|
8
|
+
/dist/
|
|
9
|
+
/build/
|
|
10
|
+
*.egg-info/
|
|
11
|
+
|
|
12
|
+
# Virtualenv / caches.
|
|
13
|
+
/.venv/
|
|
14
|
+
__pycache__/
|
|
15
|
+
.pytest_cache/
|
|
16
|
+
uv.lock
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Changelog — Epistola Python Client
|
|
2
|
+
|
|
3
|
+
All notable changes to the `epistola-client` PyPI package are documented here.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This package's
|
|
6
|
+
version tracks the Epistola contract version (`info.version` in the OpenAPI spec), so it releases in
|
|
7
|
+
lockstep with the other generated artifacts; the repository-level [CHANGELOG](../CHANGELOG.md)
|
|
8
|
+
records contract/spec changes. This file records changes specific to the Python client library.
|
|
9
|
+
|
|
10
|
+
## [Unreleased]
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- `generate.sh` now runs the derived-source generator without installing the package first, fixing
|
|
15
|
+
GitHub Actions failures where hatchling tried to read the generated `contract_version.py` before
|
|
16
|
+
it existed.
|
|
17
|
+
- Pull request CI now builds the Python wheel and source distribution after tests, so packaging
|
|
18
|
+
failures are caught before release or snapshot publishing.
|
|
19
|
+
- Snapshot CI now stamps the generated contract version to a PEP 440 `dev` version before pytest
|
|
20
|
+
installs the package, matching the TestPyPI publish version.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- Documented that PyPI/TestPyPI trusted publishing should temporarily be configured under Sander de
|
|
25
|
+
Groot's personal PyPI account while the Epistola organization approval is pending.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- **Initial release** — a Python client for the Epistola API, generated from the OpenAPI contract
|
|
30
|
+
with OpenAPI Generator (`python` / urllib3, pydantic v2 models), at feature parity with the Kotlin
|
|
31
|
+
and .NET clients.
|
|
32
|
+
- `ClientIdentity` — mandatory `User-Agent` / `X-EP-Node-Id` headers, built via a fluent builder.
|
|
33
|
+
- `JwtSigner` — self-signed RSA / EC P-256 JWT bearer authentication, minting a fresh short-lived
|
|
34
|
+
token per request.
|
|
35
|
+
- `ProblemDetailException` and the opt-in problem-detail handler — RFC 9457 problem-detail error
|
|
36
|
+
handling, with `KnownProblemSlugs` generated from the spec's `x-problem-types` registry.
|
|
37
|
+
- `EpistolaClientBuilder` / `EpistolaApiClient` — compose identity, JWT, and problem-detail
|
|
38
|
+
handling onto the generated `ApiClient` for the generated APIs. (No media-type handler is needed:
|
|
39
|
+
the Python generator already emits the versioned `application/vnd.epistola.v1+json` content type.)
|
|
40
|
+
- `ResultCollector` — NDJSON result streaming with constant memory, gzip (plus optional lz4/zstd),
|
|
41
|
+
adaptive polling, and murmur3 partition-routing helpers.
|
|
42
|
+
- Client-side JSON-Schema validation (`TemplateSchemaValidator`, `ValidatingGenerationApi`) and a
|
|
43
|
+
generated `validate()` helper covering the models that carry schema constraints.
|
|
44
|
+
- A `ProblemRegistryTest`-equivalent guard test keeping the hand-written problem-type base in sync
|
|
45
|
+
with the value the build-time generator derives from the spec.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: epistola-client
|
|
3
|
+
Version: 0.13.0
|
|
4
|
+
Summary: Python client library for the Epistola document generation API, using urllib3. Generated from the Epistola OpenAPI contract, with identity headers, RFC 9457 problem-detail error handling, self-signed JWT auth, NDJSON result collection, and client-side schema validation.
|
|
5
|
+
Project-URL: Homepage, https://github.com/epistola-app/epistola-contract
|
|
6
|
+
Project-URL: Repository, https://github.com/epistola-app/epistola-contract.git
|
|
7
|
+
Author: Sander de Groot
|
|
8
|
+
License-Expression: EUPL-1.2
|
|
9
|
+
Keywords: api,client,document-generation,epistola,openapi
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
13
|
+
Requires-Python: >=3.9
|
|
14
|
+
Requires-Dist: jsonschema>=4.21.0
|
|
15
|
+
Requires-Dist: pydantic>=2
|
|
16
|
+
Requires-Dist: pyjwt[crypto]>=2.8.0
|
|
17
|
+
Requires-Dist: python-dateutil>=2.8.2
|
|
18
|
+
Requires-Dist: typing-extensions>=4.7.1
|
|
19
|
+
Requires-Dist: urllib3<3.0.0,>=2.1.0
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# Epistola Python Client
|
|
23
|
+
|
|
24
|
+
Python client library for the [Epistola](https://github.com/epistola-app/epistola-contract)
|
|
25
|
+
document generation API, generated from the Epistola OpenAPI contract with
|
|
26
|
+
[OpenAPI Generator](https://openapi-generator.tech) (`python` / urllib3, pydantic v2 models).
|
|
27
|
+
|
|
28
|
+
It adds, on top of the stock generated client:
|
|
29
|
+
|
|
30
|
+
- **Client identity** headers (`User-Agent` + `X-EP-Node-Id`) required on every request.
|
|
31
|
+
- **RFC 9457 problem-detail** error handling — typed `ProblemDetailException` with a
|
|
32
|
+
`type_slug` discriminator and generated `KnownProblemSlugs` constants.
|
|
33
|
+
- **Self-signed JWT** authentication (`JwtSigner`), minting a fresh short-lived token per request.
|
|
34
|
+
- **NDJSON result collection** (`ResultCollector`) with adaptive polling, compression, and
|
|
35
|
+
partition-aware routing helpers.
|
|
36
|
+
- **Client-side JSON Schema validation** of template data (`TemplateSchemaValidator`).
|
|
37
|
+
|
|
38
|
+
The package version tracks the Epistola contract version (`info.version`) and releases in
|
|
39
|
+
lockstep with the Kotlin and .NET clients.
|
|
40
|
+
|
|
41
|
+
## Install
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install epistola-client
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Prerelease snapshots (published on every push to `main`) are available from TestPyPI:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
pip install -i https://test.pypi.org/simple/ \
|
|
51
|
+
--extra-index-url https://pypi.org/simple/ epistola-client
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Quick start
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
from epistola_client import (
|
|
58
|
+
EpistolaClientBuilder, ClientIdentity, JwtSigner, TemplatesApi,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
identity = ClientIdentity.builder().node_id("my-pod-123").build()
|
|
62
|
+
signer = (
|
|
63
|
+
JwtSigner.builder()
|
|
64
|
+
.consumer_id("invoice-service")
|
|
65
|
+
.private_key(JwtSigner.load_private_key("private.pem"))
|
|
66
|
+
.build()
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
http = (
|
|
70
|
+
EpistolaClientBuilder()
|
|
71
|
+
.base_url("https://epistola.example.com/api")
|
|
72
|
+
.identity(identity)
|
|
73
|
+
.jwt_signer(signer)
|
|
74
|
+
.install_problem_detail_handler()
|
|
75
|
+
.build()
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
templates = TemplatesApi(http)
|
|
79
|
+
template = templates.get_template("acme", "invoices", "invoice")
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Error handling
|
|
83
|
+
|
|
84
|
+
Install the opt-in problem-detail handler on the client
|
|
85
|
+
(`.install_problem_detail_handler()`), then switch on `type_slug` against
|
|
86
|
+
`KnownProblemSlugs`. The slug list is **open** — the API can introduce new problem types
|
|
87
|
+
without a client release — so always keep a fallback branch and fall back to the HTTP
|
|
88
|
+
status for unrecognized types.
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
from epistola_client import (
|
|
92
|
+
TenantsApi, ProblemDetailException, KnownProblemSlugs,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
try:
|
|
96
|
+
tenants_api.get_tenant("acme")
|
|
97
|
+
except ProblemDetailException as e:
|
|
98
|
+
match e.type_slug:
|
|
99
|
+
case KnownProblemSlugs.NOT_FOUND:
|
|
100
|
+
log.warning("tenant not found: %s", e.detail)
|
|
101
|
+
case KnownProblemSlugs.FORBIDDEN:
|
|
102
|
+
raise PermissionError(e.detail)
|
|
103
|
+
case KnownProblemSlugs.VALIDATION_ERROR:
|
|
104
|
+
for err in e.errors: # field-level ValidationProblemDetail
|
|
105
|
+
log.warning("%s: %s", err.var_field, err.message)
|
|
106
|
+
case KnownProblemSlugs.DATA_MODEL_VALIDATION_ERROR:
|
|
107
|
+
for example, failures in e.validation_errors.items(): # 422 data-model failures
|
|
108
|
+
for f in failures:
|
|
109
|
+
log.warning("%s %s: %s", example, f.path, f.message)
|
|
110
|
+
case _:
|
|
111
|
+
raise # unknown / framework error — fall back to status
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
`ProblemDetailException` extends the generated `ApiException`, so existing
|
|
115
|
+
`except ApiException` sites keep working. It exposes `type`, `type_slug`, `title`,
|
|
116
|
+
`problem_status`, `detail`, `errors`, `validation_errors`, `is_validation_problem`, and
|
|
117
|
+
`is_data_model_validation_problem`.
|
|
118
|
+
|
|
119
|
+
## Result collection
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
from epistola_client import ResultCollector
|
|
123
|
+
|
|
124
|
+
collector = (
|
|
125
|
+
ResultCollector.builder()
|
|
126
|
+
.api_client(http)
|
|
127
|
+
.tenant_id("acme")
|
|
128
|
+
.handler(lambda result: print(result.request_id, result.status))
|
|
129
|
+
.build()
|
|
130
|
+
)
|
|
131
|
+
collector.start() # blocks; adaptive polling until collector.stop()
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Development
|
|
135
|
+
|
|
136
|
+
The client is generated from the bundled spec. From the repository root:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
make bundle # produce openapi.yaml
|
|
140
|
+
cd client-python-urllib3
|
|
141
|
+
./generate.sh # stock client + derived sources
|
|
142
|
+
uv run pytest # run the tests
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
`generated/` (stock client) and `src/epistola_client/_generated/` (derived sources) are
|
|
146
|
+
gitignored and rebuilt from the spec each time.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Epistola Python Client
|
|
2
|
+
|
|
3
|
+
Python client library for the [Epistola](https://github.com/epistola-app/epistola-contract)
|
|
4
|
+
document generation API, generated from the Epistola OpenAPI contract with
|
|
5
|
+
[OpenAPI Generator](https://openapi-generator.tech) (`python` / urllib3, pydantic v2 models).
|
|
6
|
+
|
|
7
|
+
It adds, on top of the stock generated client:
|
|
8
|
+
|
|
9
|
+
- **Client identity** headers (`User-Agent` + `X-EP-Node-Id`) required on every request.
|
|
10
|
+
- **RFC 9457 problem-detail** error handling — typed `ProblemDetailException` with a
|
|
11
|
+
`type_slug` discriminator and generated `KnownProblemSlugs` constants.
|
|
12
|
+
- **Self-signed JWT** authentication (`JwtSigner`), minting a fresh short-lived token per request.
|
|
13
|
+
- **NDJSON result collection** (`ResultCollector`) with adaptive polling, compression, and
|
|
14
|
+
partition-aware routing helpers.
|
|
15
|
+
- **Client-side JSON Schema validation** of template data (`TemplateSchemaValidator`).
|
|
16
|
+
|
|
17
|
+
The package version tracks the Epistola contract version (`info.version`) and releases in
|
|
18
|
+
lockstep with the Kotlin and .NET clients.
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pip install epistola-client
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Prerelease snapshots (published on every push to `main`) are available from TestPyPI:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pip install -i https://test.pypi.org/simple/ \
|
|
30
|
+
--extra-index-url https://pypi.org/simple/ epistola-client
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Quick start
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
from epistola_client import (
|
|
37
|
+
EpistolaClientBuilder, ClientIdentity, JwtSigner, TemplatesApi,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
identity = ClientIdentity.builder().node_id("my-pod-123").build()
|
|
41
|
+
signer = (
|
|
42
|
+
JwtSigner.builder()
|
|
43
|
+
.consumer_id("invoice-service")
|
|
44
|
+
.private_key(JwtSigner.load_private_key("private.pem"))
|
|
45
|
+
.build()
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
http = (
|
|
49
|
+
EpistolaClientBuilder()
|
|
50
|
+
.base_url("https://epistola.example.com/api")
|
|
51
|
+
.identity(identity)
|
|
52
|
+
.jwt_signer(signer)
|
|
53
|
+
.install_problem_detail_handler()
|
|
54
|
+
.build()
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
templates = TemplatesApi(http)
|
|
58
|
+
template = templates.get_template("acme", "invoices", "invoice")
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Error handling
|
|
62
|
+
|
|
63
|
+
Install the opt-in problem-detail handler on the client
|
|
64
|
+
(`.install_problem_detail_handler()`), then switch on `type_slug` against
|
|
65
|
+
`KnownProblemSlugs`. The slug list is **open** — the API can introduce new problem types
|
|
66
|
+
without a client release — so always keep a fallback branch and fall back to the HTTP
|
|
67
|
+
status for unrecognized types.
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
from epistola_client import (
|
|
71
|
+
TenantsApi, ProblemDetailException, KnownProblemSlugs,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
tenants_api.get_tenant("acme")
|
|
76
|
+
except ProblemDetailException as e:
|
|
77
|
+
match e.type_slug:
|
|
78
|
+
case KnownProblemSlugs.NOT_FOUND:
|
|
79
|
+
log.warning("tenant not found: %s", e.detail)
|
|
80
|
+
case KnownProblemSlugs.FORBIDDEN:
|
|
81
|
+
raise PermissionError(e.detail)
|
|
82
|
+
case KnownProblemSlugs.VALIDATION_ERROR:
|
|
83
|
+
for err in e.errors: # field-level ValidationProblemDetail
|
|
84
|
+
log.warning("%s: %s", err.var_field, err.message)
|
|
85
|
+
case KnownProblemSlugs.DATA_MODEL_VALIDATION_ERROR:
|
|
86
|
+
for example, failures in e.validation_errors.items(): # 422 data-model failures
|
|
87
|
+
for f in failures:
|
|
88
|
+
log.warning("%s %s: %s", example, f.path, f.message)
|
|
89
|
+
case _:
|
|
90
|
+
raise # unknown / framework error — fall back to status
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`ProblemDetailException` extends the generated `ApiException`, so existing
|
|
94
|
+
`except ApiException` sites keep working. It exposes `type`, `type_slug`, `title`,
|
|
95
|
+
`problem_status`, `detail`, `errors`, `validation_errors`, `is_validation_problem`, and
|
|
96
|
+
`is_data_model_validation_problem`.
|
|
97
|
+
|
|
98
|
+
## Result collection
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
from epistola_client import ResultCollector
|
|
102
|
+
|
|
103
|
+
collector = (
|
|
104
|
+
ResultCollector.builder()
|
|
105
|
+
.api_client(http)
|
|
106
|
+
.tenant_id("acme")
|
|
107
|
+
.handler(lambda result: print(result.request_id, result.status))
|
|
108
|
+
.build()
|
|
109
|
+
)
|
|
110
|
+
collector.start() # blocks; adaptive polling until collector.stop()
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Development
|
|
114
|
+
|
|
115
|
+
The client is generated from the bundled spec. From the repository root:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
make bundle # produce openapi.yaml
|
|
119
|
+
cd client-python-urllib3
|
|
120
|
+
./generate.sh # stock client + derived sources
|
|
121
|
+
uv run pytest # run the tests
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`generated/` (stock client) and `src/epistola_client/_generated/` (derived sources) are
|
|
125
|
+
gitignored and rebuilt from the spec each time.
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
# flake8: noqa
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
Epistola API
|
|
7
|
+
|
|
8
|
+
Document template management API for Epistola Suite. ## Versioning This API uses header-based versioning via the Accept header. Use `application/vnd.epistola.v1+json` for API version 1. ## Authentication The API uses JWT Bearer tokens for authentication. Two paths are supported: - **OAuth 2.0** (recommended): Use Client Credentials flow to obtain a JWT from your IdP - **Self-signed JWT**: Register with a public key, then sign short-lived JWTs with your private key Both paths use `Authorization: Bearer <jwt>`. Permissions (allowed tenants, roles) are managed in Epistola's consumer record, not in JWT claims. See the [Authentication Guide](/docs/auth.md) for details. ## Client Identity All requests must include the following headers for client identification: - **`User-Agent`** (required) — identifies the client software stack using standard [RFC 9110 §10.1.5](https://www.rfc-editor.org/rfc/rfc9110#name-user-agent) product tokens. The first token **must** be `epistola-contract/{version}` indicating the contract version the client was built against. Additional product/version pairs can be appended to describe the full software stack. Example: `epistola-contract/x.y.z valtimo-epistola-plugin/1.2.0 gzac/5.0.0` - **`X-EP-Node-Id`** (required) — identifies the specific client node. Use the Kubernetes pod name, container ID, or hostname. In local/dev environments, the machine hostname is acceptable. The generated Epistola client libraries set both headers automatically — `User-Agent` with the contract version, and `X-EP-Node-Id` with the hostname. Consumers wrapping the client library can append additional product tokens to `User-Agent` for their own software and override the node ID as needed. ## Error Responses The API uses [RFC 9457 Problem Details](https://www.rfc-editor.org/rfc/rfc9457) for error responses. Error responses have `Content-Type: application/problem+json` and include the following fields: - `type` (string, URI) — identifies the problem type; the stable, machine-readable discriminator clients should switch on - `title` (string) — short human-readable summary - `status` (integer) — HTTP status code - `detail` (string, optional) — human-readable explanation of this occurrence - `instance` (string, URI, optional) — identifies this specific occurrence Problem `type` URIs use the `https://epistola.app/errors/{slug}` namespace and resolve to human-readable HTML documentation for that problem type. A response may also carry domain-specific extension members as top-level fields; clients should ignore members they do not recognize. For validation errors (`type: .../validation-error`), the response also includes an `errors` array with field-level details. The canonical problem `type` slugs are registered in [`docs/error-types.md`](docs/error-types.md); the machine-readable registry is this document's top-level `x-problem-types` extension. ## Authorization Access is controlled via roles (`reader`, `editor`, `generator`, `manager`, `tenant_control`) and tenant permissions. These are set by an administrator when approving a consumer registration.
|
|
9
|
+
|
|
10
|
+
The version of the OpenAPI document: 0.13.0
|
|
11
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
12
|
+
|
|
13
|
+
Do not edit the class manually.
|
|
14
|
+
""" # noqa: E501
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__version__ = "1.0.0"
|
|
18
|
+
|
|
19
|
+
# Define package exports
|
|
20
|
+
__all__ = [
|
|
21
|
+
"AttributesApi",
|
|
22
|
+
"CatalogsApi",
|
|
23
|
+
"CodeListsApi",
|
|
24
|
+
"ConsumersApi",
|
|
25
|
+
"EnvironmentsApi",
|
|
26
|
+
"FontsApi",
|
|
27
|
+
"GenerationApi",
|
|
28
|
+
"StencilsApi",
|
|
29
|
+
"SystemApi",
|
|
30
|
+
"TemplatesApi",
|
|
31
|
+
"TenantsApi",
|
|
32
|
+
"ThemesApi",
|
|
33
|
+
"VariantsApi",
|
|
34
|
+
"VersionsApi",
|
|
35
|
+
"ApiResponse",
|
|
36
|
+
"ApiClient",
|
|
37
|
+
"Configuration",
|
|
38
|
+
"OpenApiException",
|
|
39
|
+
"ApiTypeError",
|
|
40
|
+
"ApiValueError",
|
|
41
|
+
"ApiKeyError",
|
|
42
|
+
"ApiAttributeError",
|
|
43
|
+
"ApiException",
|
|
44
|
+
"ActivationDto",
|
|
45
|
+
"ActivationListResponse",
|
|
46
|
+
"ApproveConsumerRequest",
|
|
47
|
+
"AttributeDto",
|
|
48
|
+
"AttributeDtoCodeListBinding",
|
|
49
|
+
"AttributeListResponse",
|
|
50
|
+
"BatchGenerationItem",
|
|
51
|
+
"BlockStylePresetDto",
|
|
52
|
+
"CatalogDto",
|
|
53
|
+
"CatalogListResponse",
|
|
54
|
+
"CatalogUpgradeDiff",
|
|
55
|
+
"CodeListDto",
|
|
56
|
+
"CodeListEntriesResponse",
|
|
57
|
+
"CodeListEntryDto",
|
|
58
|
+
"CodeListListResponse",
|
|
59
|
+
"CollectMeta",
|
|
60
|
+
"CollectRequest",
|
|
61
|
+
"ConsumerDto",
|
|
62
|
+
"ConsumerListResponse",
|
|
63
|
+
"ConsumerNodeDto",
|
|
64
|
+
"ConsumerPermissions",
|
|
65
|
+
"CreateAttributeRequest",
|
|
66
|
+
"CreateAttributeRequestCodeListBinding",
|
|
67
|
+
"CreateCodeListRequest",
|
|
68
|
+
"CreateEnvironmentRequest",
|
|
69
|
+
"CreateStencilRequest",
|
|
70
|
+
"CreateStencilVersionRequest",
|
|
71
|
+
"CreateTemplateRequest",
|
|
72
|
+
"CreateTenantRequest",
|
|
73
|
+
"CreateThemeRequest",
|
|
74
|
+
"CreateVariantRequest",
|
|
75
|
+
"DataExampleDto",
|
|
76
|
+
"DataModelValidationError",
|
|
77
|
+
"DataModelValidationProblemDetail",
|
|
78
|
+
"DocumentDto",
|
|
79
|
+
"DocumentGenerationItemDto",
|
|
80
|
+
"DocumentGenerationJobDto",
|
|
81
|
+
"DocumentListResponse",
|
|
82
|
+
"EnvironmentDto",
|
|
83
|
+
"EnvironmentListResponse",
|
|
84
|
+
"FontDto",
|
|
85
|
+
"FontListResponse",
|
|
86
|
+
"FontVariantDto",
|
|
87
|
+
"GenerateBatchRequest",
|
|
88
|
+
"GenerateDocumentRequest",
|
|
89
|
+
"GenerationJobDetail",
|
|
90
|
+
"GenerationJobListResponse",
|
|
91
|
+
"GenerationJobResponse",
|
|
92
|
+
"GenerationResult",
|
|
93
|
+
"ImportCatalogResponse",
|
|
94
|
+
"ImportTemplateResultDto",
|
|
95
|
+
"MarginsDto",
|
|
96
|
+
"NodeDto",
|
|
97
|
+
"PageMeta",
|
|
98
|
+
"PageSettingsDto",
|
|
99
|
+
"PartitionAssignment",
|
|
100
|
+
"PingRequest",
|
|
101
|
+
"PongDetailsDto",
|
|
102
|
+
"PongResponse",
|
|
103
|
+
"PreviewDocumentRequest",
|
|
104
|
+
"ProblemDetail",
|
|
105
|
+
"PublishVersionRequest",
|
|
106
|
+
"RegisterConsumerRequest",
|
|
107
|
+
"RejectConsumerRequest",
|
|
108
|
+
"RotatePublicKeyRequest",
|
|
109
|
+
"SlotDto",
|
|
110
|
+
"StencilDto",
|
|
111
|
+
"StencilListResponse",
|
|
112
|
+
"StencilSummaryDto",
|
|
113
|
+
"StencilUsageDto",
|
|
114
|
+
"StencilUsageListResponse",
|
|
115
|
+
"StencilVersionDto",
|
|
116
|
+
"StencilVersionListResponse",
|
|
117
|
+
"StencilVersionSummaryDto",
|
|
118
|
+
"TemplateDataValidationError",
|
|
119
|
+
"TemplateDataValidationResult",
|
|
120
|
+
"TemplateDocumentDto",
|
|
121
|
+
"TemplateDto",
|
|
122
|
+
"TemplateListResponse",
|
|
123
|
+
"TemplateSummaryDto",
|
|
124
|
+
"TenantDto",
|
|
125
|
+
"TenantListResponse",
|
|
126
|
+
"ThemeDto",
|
|
127
|
+
"ThemeListResponse",
|
|
128
|
+
"ThemeRefDto",
|
|
129
|
+
"UpdateAttributeRequest",
|
|
130
|
+
"UpdateAttributeRequestCodeListBinding",
|
|
131
|
+
"UpdateCodeListRequest",
|
|
132
|
+
"UpdateConsumerRequest",
|
|
133
|
+
"UpdateDraftRequest",
|
|
134
|
+
"UpdateEnvironmentRequest",
|
|
135
|
+
"UpdateStencilDraftRequest",
|
|
136
|
+
"UpdateStencilRequest",
|
|
137
|
+
"UpdateTemplateRequest",
|
|
138
|
+
"UpdateTenantRequest",
|
|
139
|
+
"UpdateThemeRequest",
|
|
140
|
+
"UpdateVariantRequest",
|
|
141
|
+
"UpgradePreviewDto",
|
|
142
|
+
"UpgradePreviewListResponse",
|
|
143
|
+
"ValidateTemplateDataRequest",
|
|
144
|
+
"ValidationError",
|
|
145
|
+
"ValidationProblemDetail",
|
|
146
|
+
"VariantDto",
|
|
147
|
+
"VariantListResponse",
|
|
148
|
+
"VariantSelectionAttribute",
|
|
149
|
+
"VariantSummaryDto",
|
|
150
|
+
"VersionDto",
|
|
151
|
+
"VersionListResponse",
|
|
152
|
+
"VersionSummaryDto",
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
# import apis into sdk package
|
|
156
|
+
from epistola_client_generated.api.attributes_api import AttributesApi as AttributesApi
|
|
157
|
+
from epistola_client_generated.api.catalogs_api import CatalogsApi as CatalogsApi
|
|
158
|
+
from epistola_client_generated.api.code_lists_api import CodeListsApi as CodeListsApi
|
|
159
|
+
from epistola_client_generated.api.consumers_api import ConsumersApi as ConsumersApi
|
|
160
|
+
from epistola_client_generated.api.environments_api import EnvironmentsApi as EnvironmentsApi
|
|
161
|
+
from epistola_client_generated.api.fonts_api import FontsApi as FontsApi
|
|
162
|
+
from epistola_client_generated.api.generation_api import GenerationApi as GenerationApi
|
|
163
|
+
from epistola_client_generated.api.stencils_api import StencilsApi as StencilsApi
|
|
164
|
+
from epistola_client_generated.api.system_api import SystemApi as SystemApi
|
|
165
|
+
from epistola_client_generated.api.templates_api import TemplatesApi as TemplatesApi
|
|
166
|
+
from epistola_client_generated.api.tenants_api import TenantsApi as TenantsApi
|
|
167
|
+
from epistola_client_generated.api.themes_api import ThemesApi as ThemesApi
|
|
168
|
+
from epistola_client_generated.api.variants_api import VariantsApi as VariantsApi
|
|
169
|
+
from epistola_client_generated.api.versions_api import VersionsApi as VersionsApi
|
|
170
|
+
|
|
171
|
+
# import ApiClient
|
|
172
|
+
from epistola_client_generated.api_response import ApiResponse as ApiResponse
|
|
173
|
+
from epistola_client_generated.api_client import ApiClient as ApiClient
|
|
174
|
+
from epistola_client_generated.configuration import Configuration as Configuration
|
|
175
|
+
from epistola_client_generated.exceptions import OpenApiException as OpenApiException
|
|
176
|
+
from epistola_client_generated.exceptions import ApiTypeError as ApiTypeError
|
|
177
|
+
from epistola_client_generated.exceptions import ApiValueError as ApiValueError
|
|
178
|
+
from epistola_client_generated.exceptions import ApiKeyError as ApiKeyError
|
|
179
|
+
from epistola_client_generated.exceptions import ApiAttributeError as ApiAttributeError
|
|
180
|
+
from epistola_client_generated.exceptions import ApiException as ApiException
|
|
181
|
+
|
|
182
|
+
# import models into sdk package
|
|
183
|
+
from epistola_client_generated.models.activation_dto import ActivationDto as ActivationDto
|
|
184
|
+
from epistola_client_generated.models.activation_list_response import ActivationListResponse as ActivationListResponse
|
|
185
|
+
from epistola_client_generated.models.approve_consumer_request import ApproveConsumerRequest as ApproveConsumerRequest
|
|
186
|
+
from epistola_client_generated.models.attribute_dto import AttributeDto as AttributeDto
|
|
187
|
+
from epistola_client_generated.models.attribute_dto_code_list_binding import AttributeDtoCodeListBinding as AttributeDtoCodeListBinding
|
|
188
|
+
from epistola_client_generated.models.attribute_list_response import AttributeListResponse as AttributeListResponse
|
|
189
|
+
from epistola_client_generated.models.batch_generation_item import BatchGenerationItem as BatchGenerationItem
|
|
190
|
+
from epistola_client_generated.models.block_style_preset_dto import BlockStylePresetDto as BlockStylePresetDto
|
|
191
|
+
from epistola_client_generated.models.catalog_dto import CatalogDto as CatalogDto
|
|
192
|
+
from epistola_client_generated.models.catalog_list_response import CatalogListResponse as CatalogListResponse
|
|
193
|
+
from epistola_client_generated.models.catalog_upgrade_diff import CatalogUpgradeDiff as CatalogUpgradeDiff
|
|
194
|
+
from epistola_client_generated.models.code_list_dto import CodeListDto as CodeListDto
|
|
195
|
+
from epistola_client_generated.models.code_list_entries_response import CodeListEntriesResponse as CodeListEntriesResponse
|
|
196
|
+
from epistola_client_generated.models.code_list_entry_dto import CodeListEntryDto as CodeListEntryDto
|
|
197
|
+
from epistola_client_generated.models.code_list_list_response import CodeListListResponse as CodeListListResponse
|
|
198
|
+
from epistola_client_generated.models.collect_meta import CollectMeta as CollectMeta
|
|
199
|
+
from epistola_client_generated.models.collect_request import CollectRequest as CollectRequest
|
|
200
|
+
from epistola_client_generated.models.consumer_dto import ConsumerDto as ConsumerDto
|
|
201
|
+
from epistola_client_generated.models.consumer_list_response import ConsumerListResponse as ConsumerListResponse
|
|
202
|
+
from epistola_client_generated.models.consumer_node_dto import ConsumerNodeDto as ConsumerNodeDto
|
|
203
|
+
from epistola_client_generated.models.consumer_permissions import ConsumerPermissions as ConsumerPermissions
|
|
204
|
+
from epistola_client_generated.models.create_attribute_request import CreateAttributeRequest as CreateAttributeRequest
|
|
205
|
+
from epistola_client_generated.models.create_attribute_request_code_list_binding import CreateAttributeRequestCodeListBinding as CreateAttributeRequestCodeListBinding
|
|
206
|
+
from epistola_client_generated.models.create_code_list_request import CreateCodeListRequest as CreateCodeListRequest
|
|
207
|
+
from epistola_client_generated.models.create_environment_request import CreateEnvironmentRequest as CreateEnvironmentRequest
|
|
208
|
+
from epistola_client_generated.models.create_stencil_request import CreateStencilRequest as CreateStencilRequest
|
|
209
|
+
from epistola_client_generated.models.create_stencil_version_request import CreateStencilVersionRequest as CreateStencilVersionRequest
|
|
210
|
+
from epistola_client_generated.models.create_template_request import CreateTemplateRequest as CreateTemplateRequest
|
|
211
|
+
from epistola_client_generated.models.create_tenant_request import CreateTenantRequest as CreateTenantRequest
|
|
212
|
+
from epistola_client_generated.models.create_theme_request import CreateThemeRequest as CreateThemeRequest
|
|
213
|
+
from epistola_client_generated.models.create_variant_request import CreateVariantRequest as CreateVariantRequest
|
|
214
|
+
from epistola_client_generated.models.data_example_dto import DataExampleDto as DataExampleDto
|
|
215
|
+
from epistola_client_generated.models.data_model_validation_error import DataModelValidationError as DataModelValidationError
|
|
216
|
+
from epistola_client_generated.models.data_model_validation_problem_detail import DataModelValidationProblemDetail as DataModelValidationProblemDetail
|
|
217
|
+
from epistola_client_generated.models.document_dto import DocumentDto as DocumentDto
|
|
218
|
+
from epistola_client_generated.models.document_generation_item_dto import DocumentGenerationItemDto as DocumentGenerationItemDto
|
|
219
|
+
from epistola_client_generated.models.document_generation_job_dto import DocumentGenerationJobDto as DocumentGenerationJobDto
|
|
220
|
+
from epistola_client_generated.models.document_list_response import DocumentListResponse as DocumentListResponse
|
|
221
|
+
from epistola_client_generated.models.environment_dto import EnvironmentDto as EnvironmentDto
|
|
222
|
+
from epistola_client_generated.models.environment_list_response import EnvironmentListResponse as EnvironmentListResponse
|
|
223
|
+
from epistola_client_generated.models.font_dto import FontDto as FontDto
|
|
224
|
+
from epistola_client_generated.models.font_list_response import FontListResponse as FontListResponse
|
|
225
|
+
from epistola_client_generated.models.font_variant_dto import FontVariantDto as FontVariantDto
|
|
226
|
+
from epistola_client_generated.models.generate_batch_request import GenerateBatchRequest as GenerateBatchRequest
|
|
227
|
+
from epistola_client_generated.models.generate_document_request import GenerateDocumentRequest as GenerateDocumentRequest
|
|
228
|
+
from epistola_client_generated.models.generation_job_detail import GenerationJobDetail as GenerationJobDetail
|
|
229
|
+
from epistola_client_generated.models.generation_job_list_response import GenerationJobListResponse as GenerationJobListResponse
|
|
230
|
+
from epistola_client_generated.models.generation_job_response import GenerationJobResponse as GenerationJobResponse
|
|
231
|
+
from epistola_client_generated.models.generation_result import GenerationResult as GenerationResult
|
|
232
|
+
from epistola_client_generated.models.import_catalog_response import ImportCatalogResponse as ImportCatalogResponse
|
|
233
|
+
from epistola_client_generated.models.import_template_result_dto import ImportTemplateResultDto as ImportTemplateResultDto
|
|
234
|
+
from epistola_client_generated.models.margins_dto import MarginsDto as MarginsDto
|
|
235
|
+
from epistola_client_generated.models.node_dto import NodeDto as NodeDto
|
|
236
|
+
from epistola_client_generated.models.page_meta import PageMeta as PageMeta
|
|
237
|
+
from epistola_client_generated.models.page_settings_dto import PageSettingsDto as PageSettingsDto
|
|
238
|
+
from epistola_client_generated.models.partition_assignment import PartitionAssignment as PartitionAssignment
|
|
239
|
+
from epistola_client_generated.models.ping_request import PingRequest as PingRequest
|
|
240
|
+
from epistola_client_generated.models.pong_details_dto import PongDetailsDto as PongDetailsDto
|
|
241
|
+
from epistola_client_generated.models.pong_response import PongResponse as PongResponse
|
|
242
|
+
from epistola_client_generated.models.preview_document_request import PreviewDocumentRequest as PreviewDocumentRequest
|
|
243
|
+
from epistola_client_generated.models.problem_detail import ProblemDetail as ProblemDetail
|
|
244
|
+
from epistola_client_generated.models.publish_version_request import PublishVersionRequest as PublishVersionRequest
|
|
245
|
+
from epistola_client_generated.models.register_consumer_request import RegisterConsumerRequest as RegisterConsumerRequest
|
|
246
|
+
from epistola_client_generated.models.reject_consumer_request import RejectConsumerRequest as RejectConsumerRequest
|
|
247
|
+
from epistola_client_generated.models.rotate_public_key_request import RotatePublicKeyRequest as RotatePublicKeyRequest
|
|
248
|
+
from epistola_client_generated.models.slot_dto import SlotDto as SlotDto
|
|
249
|
+
from epistola_client_generated.models.stencil_dto import StencilDto as StencilDto
|
|
250
|
+
from epistola_client_generated.models.stencil_list_response import StencilListResponse as StencilListResponse
|
|
251
|
+
from epistola_client_generated.models.stencil_summary_dto import StencilSummaryDto as StencilSummaryDto
|
|
252
|
+
from epistola_client_generated.models.stencil_usage_dto import StencilUsageDto as StencilUsageDto
|
|
253
|
+
from epistola_client_generated.models.stencil_usage_list_response import StencilUsageListResponse as StencilUsageListResponse
|
|
254
|
+
from epistola_client_generated.models.stencil_version_dto import StencilVersionDto as StencilVersionDto
|
|
255
|
+
from epistola_client_generated.models.stencil_version_list_response import StencilVersionListResponse as StencilVersionListResponse
|
|
256
|
+
from epistola_client_generated.models.stencil_version_summary_dto import StencilVersionSummaryDto as StencilVersionSummaryDto
|
|
257
|
+
from epistola_client_generated.models.template_data_validation_error import TemplateDataValidationError as TemplateDataValidationError
|
|
258
|
+
from epistola_client_generated.models.template_data_validation_result import TemplateDataValidationResult as TemplateDataValidationResult
|
|
259
|
+
from epistola_client_generated.models.template_document_dto import TemplateDocumentDto as TemplateDocumentDto
|
|
260
|
+
from epistola_client_generated.models.template_dto import TemplateDto as TemplateDto
|
|
261
|
+
from epistola_client_generated.models.template_list_response import TemplateListResponse as TemplateListResponse
|
|
262
|
+
from epistola_client_generated.models.template_summary_dto import TemplateSummaryDto as TemplateSummaryDto
|
|
263
|
+
from epistola_client_generated.models.tenant_dto import TenantDto as TenantDto
|
|
264
|
+
from epistola_client_generated.models.tenant_list_response import TenantListResponse as TenantListResponse
|
|
265
|
+
from epistola_client_generated.models.theme_dto import ThemeDto as ThemeDto
|
|
266
|
+
from epistola_client_generated.models.theme_list_response import ThemeListResponse as ThemeListResponse
|
|
267
|
+
from epistola_client_generated.models.theme_ref_dto import ThemeRefDto as ThemeRefDto
|
|
268
|
+
from epistola_client_generated.models.update_attribute_request import UpdateAttributeRequest as UpdateAttributeRequest
|
|
269
|
+
from epistola_client_generated.models.update_attribute_request_code_list_binding import UpdateAttributeRequestCodeListBinding as UpdateAttributeRequestCodeListBinding
|
|
270
|
+
from epistola_client_generated.models.update_code_list_request import UpdateCodeListRequest as UpdateCodeListRequest
|
|
271
|
+
from epistola_client_generated.models.update_consumer_request import UpdateConsumerRequest as UpdateConsumerRequest
|
|
272
|
+
from epistola_client_generated.models.update_draft_request import UpdateDraftRequest as UpdateDraftRequest
|
|
273
|
+
from epistola_client_generated.models.update_environment_request import UpdateEnvironmentRequest as UpdateEnvironmentRequest
|
|
274
|
+
from epistola_client_generated.models.update_stencil_draft_request import UpdateStencilDraftRequest as UpdateStencilDraftRequest
|
|
275
|
+
from epistola_client_generated.models.update_stencil_request import UpdateStencilRequest as UpdateStencilRequest
|
|
276
|
+
from epistola_client_generated.models.update_template_request import UpdateTemplateRequest as UpdateTemplateRequest
|
|
277
|
+
from epistola_client_generated.models.update_tenant_request import UpdateTenantRequest as UpdateTenantRequest
|
|
278
|
+
from epistola_client_generated.models.update_theme_request import UpdateThemeRequest as UpdateThemeRequest
|
|
279
|
+
from epistola_client_generated.models.update_variant_request import UpdateVariantRequest as UpdateVariantRequest
|
|
280
|
+
from epistola_client_generated.models.upgrade_preview_dto import UpgradePreviewDto as UpgradePreviewDto
|
|
281
|
+
from epistola_client_generated.models.upgrade_preview_list_response import UpgradePreviewListResponse as UpgradePreviewListResponse
|
|
282
|
+
from epistola_client_generated.models.validate_template_data_request import ValidateTemplateDataRequest as ValidateTemplateDataRequest
|
|
283
|
+
from epistola_client_generated.models.validation_error import ValidationError as ValidationError
|
|
284
|
+
from epistola_client_generated.models.validation_problem_detail import ValidationProblemDetail as ValidationProblemDetail
|
|
285
|
+
from epistola_client_generated.models.variant_dto import VariantDto as VariantDto
|
|
286
|
+
from epistola_client_generated.models.variant_list_response import VariantListResponse as VariantListResponse
|
|
287
|
+
from epistola_client_generated.models.variant_selection_attribute import VariantSelectionAttribute as VariantSelectionAttribute
|
|
288
|
+
from epistola_client_generated.models.variant_summary_dto import VariantSummaryDto as VariantSummaryDto
|
|
289
|
+
from epistola_client_generated.models.version_dto import VersionDto as VersionDto
|
|
290
|
+
from epistola_client_generated.models.version_list_response import VersionListResponse as VersionListResponse
|
|
291
|
+
from epistola_client_generated.models.version_summary_dto import VersionSummaryDto as VersionSummaryDto
|
|
292
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# flake8: noqa
|
|
2
|
+
|
|
3
|
+
# import apis into api package
|
|
4
|
+
from epistola_client_generated.api.attributes_api import AttributesApi
|
|
5
|
+
from epistola_client_generated.api.catalogs_api import CatalogsApi
|
|
6
|
+
from epistola_client_generated.api.code_lists_api import CodeListsApi
|
|
7
|
+
from epistola_client_generated.api.consumers_api import ConsumersApi
|
|
8
|
+
from epistola_client_generated.api.environments_api import EnvironmentsApi
|
|
9
|
+
from epistola_client_generated.api.fonts_api import FontsApi
|
|
10
|
+
from epistola_client_generated.api.generation_api import GenerationApi
|
|
11
|
+
from epistola_client_generated.api.stencils_api import StencilsApi
|
|
12
|
+
from epistola_client_generated.api.system_api import SystemApi
|
|
13
|
+
from epistola_client_generated.api.templates_api import TemplatesApi
|
|
14
|
+
from epistola_client_generated.api.tenants_api import TenantsApi
|
|
15
|
+
from epistola_client_generated.api.themes_api import ThemesApi
|
|
16
|
+
from epistola_client_generated.api.variants_api import VariantsApi
|
|
17
|
+
from epistola_client_generated.api.versions_api import VersionsApi
|
|
18
|
+
|