Skip to content

Commit dc43b22

Browse files
Regenerate client using OpenAPI Generator 7.12.0
Co-authored-by: Jay Hack <jay@codegen.com>
1 parent 45e97ce commit dc43b22

32 files changed

+1631
-46
lines changed

.github/workflows/python.yml

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,7 @@
55

66
name: codegen_api_client Python package
77

8-
on:
9-
push:
10-
branches:
11-
- develop
12-
pull_request:
13-
branches:
14-
- develop
8+
on: [push, pull_request]
159

1610
jobs:
1711
build:
@@ -23,11 +17,15 @@ jobs:
2317

2418
steps:
2519
- uses: actions/checkout@v4
26-
- name: Set up UV ${{ matrix.python-version }}
27-
uses: astral-sh/setup-uv@v5
20+
- name: Set up Python ${{ matrix.python-version }}
21+
uses: actions/setup-python@v4
2822
with:
29-
enable-cache: true
3023
python-version: ${{ matrix.python-version }}
24+
- name: Install dependencies
25+
run: |
26+
python -m pip install --upgrade pip
27+
pip install -r requirements.txt
28+
pip install -r test-requirements.txt
3129
- name: Test with pytest
3230
run: |
33-
uv run pytest --cov=codegen_api_client
31+
pytest --cov=codegen_api_client

.openapi-generator/FILES

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
.github/workflows/python.yml
22
.gitignore
33
.gitlab-ci.yml
4-
.openapi-generator-ignore
54
.travis.yml
65
README.md
76
codegen_api_client/__init__.py

README.md

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,60 @@
11
# codegen-api-client
22
API for application developers
33

4+
## Regenerating the Client
5+
6+
This client is automatically generated from the OpenAPI specification. To regenerate the client:
7+
8+
### Using Docker (Recommended)
9+
10+
```bash
11+
# Pull the OpenAPI Generator Docker image (version 7.12.0 to match current)
12+
docker pull openapitools/openapi-generator-cli:v7.12.0
13+
14+
# Run the generator (from the repository root)
15+
docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:v7.12.0 generate \
16+
-i /local/gen/openapi.yaml \
17+
-g python \
18+
-c /local/gen/config.json \
19+
-o /local
20+
```
21+
22+
### Alternative: Using NPM
23+
24+
```bash
25+
# Install via npm
26+
npm install -g @openapitools/openapi-generator-cli@7.12.0
27+
28+
# Set the version
29+
npx @openapitools/openapi-generator-cli version-manager set 7.12.0
30+
31+
# Generate the client
32+
npx @openapitools/openapi-generator-cli generate \
33+
-i ./gen/openapi.yaml \
34+
-g python \
35+
-c ./gen/config.json \
36+
-o .
37+
```
38+
39+
### After Generation
40+
41+
```bash
42+
# Build the package
43+
uv build
44+
45+
# Optionally publish the package
46+
uv publish
47+
```
48+
49+
### Important Notes
50+
51+
- The OpenAPI spec at `./gen/openapi.yaml` is the source of truth for this client
52+
- Update this spec file first if you need to update the API client
53+
- The configuration in `./gen/config.json` specifies the package name as "codegen_api_client"
54+
- GitHub workflows handle testing and publishing, but not regeneration
55+
56+
---
57+
458
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
559

660
- API version: 1.0.0
@@ -114,6 +168,3 @@ Endpoints do not require authorization.
114168

115169
## Author
116170

117-
118-
119-
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
__pycache__/
2+
build/
3+
dist/
4+
*.egg-info/
5+
.pytest_cache/
6+
7+
# pyenv
8+
.python-version
9+
10+
# Environments
11+
.env
12+
.venv
13+
14+
# mypy
15+
.mypy_cache/
16+
.dmypy.json
17+
dmypy.json
18+
19+
# JetBrains
20+
.idea/
21+
22+
/coverage.xml
23+
/.coverage

gen/developer-api-client/README.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# developer-api-client
2+
A client library for accessing Developer API
3+
4+
## Usage
5+
First, create a client:
6+
7+
```python
8+
from developer_api_client import Client
9+
10+
client = Client(base_url="https://api.example.com")
11+
```
12+
13+
If the endpoints you're going to hit require authentication, use `AuthenticatedClient` instead:
14+
15+
```python
16+
from developer_api_client import AuthenticatedClient
17+
18+
client = AuthenticatedClient(base_url="https://api.example.com", token="SuperSecretToken")
19+
```
20+
21+
Now call your endpoint and use your models:
22+
23+
```python
24+
from developer_api_client.models import MyDataModel
25+
from developer_api_client.api.my_tag import get_my_data_model
26+
from developer_api_client.types import Response
27+
28+
with client as client:
29+
my_data: MyDataModel = get_my_data_model.sync(client=client)
30+
# or if you need more info (e.g. status_code)
31+
response: Response[MyDataModel] = get_my_data_model.sync_detailed(client=client)
32+
```
33+
34+
Or do the same thing with an async version:
35+
36+
```python
37+
from developer_api_client.models import MyDataModel
38+
from developer_api_client.api.my_tag import get_my_data_model
39+
from developer_api_client.types import Response
40+
41+
async with client as client:
42+
my_data: MyDataModel = await get_my_data_model.asyncio(client=client)
43+
response: Response[MyDataModel] = await get_my_data_model.asyncio_detailed(client=client)
44+
```
45+
46+
By default, when you're calling an HTTPS API it will attempt to verify that SSL is working correctly. Using certificate verification is highly recommended most of the time, but sometimes you may need to authenticate to a server (especially an internal server) using a custom certificate bundle.
47+
48+
```python
49+
client = AuthenticatedClient(
50+
base_url="https://internal_api.example.com",
51+
token="SuperSecretToken",
52+
verify_ssl="/path/to/certificate_bundle.pem",
53+
)
54+
```
55+
56+
You can also disable certificate validation altogether, but beware that **this is a security risk**.
57+
58+
```python
59+
client = AuthenticatedClient(
60+
base_url="https://internal_api.example.com",
61+
token="SuperSecretToken",
62+
verify_ssl=False
63+
)
64+
```
65+
66+
Things to know:
67+
1. Every path/method combo becomes a Python module with four functions:
68+
1. `sync`: Blocking request that returns parsed data (if successful) or `None`
69+
1. `sync_detailed`: Blocking request that always returns a `Request`, optionally with `parsed` set if the request was successful.
70+
1. `asyncio`: Like `sync` but async instead of blocking
71+
1. `asyncio_detailed`: Like `sync_detailed` but async instead of blocking
72+
73+
1. All path/query params, and bodies become method arguments.
74+
1. If your endpoint had any tags on it, the first tag will be used as a module name for the function (my_tag above)
75+
1. Any endpoint which did not have a tag will be in `developer_api_client.api.default`
76+
77+
## Advanced customizations
78+
79+
There are more settings on the generated `Client` class which let you control more runtime behavior, check out the docstring on that class for more info. You can also customize the underlying `httpx.Client` or `httpx.AsyncClient` (depending on your use-case):
80+
81+
```python
82+
from developer_api_client import Client
83+
84+
def log_request(request):
85+
print(f"Request event hook: {request.method} {request.url} - Waiting for response")
86+
87+
def log_response(response):
88+
request = response.request
89+
print(f"Response event hook: {request.method} {request.url} - Status {response.status_code}")
90+
91+
client = Client(
92+
base_url="https://api.example.com",
93+
httpx_args={"event_hooks": {"request": [log_request], "response": [log_response]}},
94+
)
95+
96+
# Or get the underlying httpx client to modify directly with client.get_httpx_client() or client.get_async_httpx_client()
97+
```
98+
99+
You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url):
100+
101+
```python
102+
import httpx
103+
from developer_api_client import Client
104+
105+
client = Client(
106+
base_url="https://api.example.com",
107+
)
108+
# Note that base_url needs to be re-set, as would any shared cookies, headers, etc.
109+
client.set_httpx_client(httpx.Client(base_url="https://api.example.com", proxies="http://localhost:8030"))
110+
```
111+
112+
## Building / publishing this package
113+
This project uses [Poetry](https://python-poetry.org/) to manage dependencies and packaging. Here are the basics:
114+
1. Update the metadata in pyproject.toml (e.g. authors, version)
115+
1. If you're using a private repository, configure it with Poetry
116+
1. `poetry config repositories.<your-repository-name> <url-to-your-repository>`
117+
1. `poetry config http-basic.<your-repository-name> <username> <password>`
118+
1. Publish the client with `poetry publish --build -r <your-repository-name>` or, if for public PyPI, just `poetry publish --build`
119+
120+
If you want to install this client into another project without publishing it (e.g. for development) then:
121+
1. If that project **is using Poetry**, you can simply do `poetry add <path-to-this-client>` from that project
122+
1. If that project is not using Poetry:
123+
1. Build a wheel with `poetry build -f wheel`
124+
1. Install that wheel from the other project `pip install <path-to-wheel>`
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
"""A client library for accessing Developer API"""
2+
3+
from .client import AuthenticatedClient, Client
4+
5+
__all__ = (
6+
"AuthenticatedClient",
7+
"Client",
8+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Contains methods for accessing the API"""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Contains endpoint functions for accessing the API"""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Contains endpoint functions for accessing the API"""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Contains endpoint functions for accessing the API"""

0 commit comments

Comments
 (0)