Skip to content

Commit 60ff14a

Browse files
initial commit
1 parent 7f5119d commit 60ff14a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+13088
-1
lines changed

.devcontainer/Dockerfile

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
ARG VARIANT="3.9"
2+
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}
3+
4+
USER vscode
5+
6+
RUN curl -sSf https://rye.astral.sh/get | RYE_VERSION="0.35.0" RYE_INSTALL_OPTION="--yes" bash
7+
ENV PATH=/home/vscode/.rye/shims:$PATH
8+
9+
RUN echo "[[ -d .venv ]] && source .venv/bin/activate" >> /home/vscode/.bashrc

.devcontainer/devcontainer.json

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
2+
// README at: https://github.com/devcontainers/templates/tree/main/src/debian
3+
{
4+
"name": "Debian",
5+
"build": {
6+
"dockerfile": "Dockerfile",
7+
"context": ".."
8+
},
9+
10+
"postStartCommand": "rye sync --all-features",
11+
12+
"customizations": {
13+
"vscode": {
14+
"extensions": [
15+
"ms-python.python"
16+
],
17+
"settings": {
18+
"terminal.integrated.shell.linux": "/bin/bash",
19+
"python.pythonPath": ".venv/bin/python",
20+
"python.defaultInterpreterPath": ".venv/bin/python",
21+
"python.typeChecking": "basic",
22+
"terminal.integrated.env.linux": {
23+
"PATH": "/home/vscode/.rye/shims:${env:PATH}"
24+
}
25+
}
26+
}
27+
}
28+
29+
// Features to add to the dev container. More info: https://containers.dev/features.
30+
// "features": {},
31+
32+
// Use 'forwardPorts' to make a list of ports inside the container available locally.
33+
// "forwardPorts": [],
34+
35+
// Configure tool-specific properties.
36+
// "customizations": {},
37+
38+
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
39+
// "remoteUser": "root"
40+
}

.github/workflows/ci.yml

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: CI
2+
on:
3+
push:
4+
branches:
5+
- main
6+
pull_request:
7+
branches:
8+
- main
9+
- next
10+
11+
jobs:
12+
lint:
13+
name: lint
14+
runs-on: ubuntu-latest
15+
16+
17+
steps:
18+
- uses: actions/checkout@v4
19+
20+
- name: Install Rye
21+
run: |
22+
curl -sSf https://rye.astral.sh/get | bash
23+
echo "$HOME/.rye/shims" >> $GITHUB_PATH
24+
env:
25+
RYE_VERSION: '0.35.0'
26+
RYE_INSTALL_OPTION: '--yes'
27+
28+
- name: Install dependencies
29+
run: rye sync --all-features
30+
31+
- name: Run lints
32+
run: ./scripts/lint
33+
test:
34+
name: test
35+
runs-on: ubuntu-latest
36+
37+
steps:
38+
- uses: actions/checkout@v4
39+
40+
- name: Install Rye
41+
run: |
42+
curl -sSf https://rye.astral.sh/get | bash
43+
echo "$HOME/.rye/shims" >> $GITHUB_PATH
44+
env:
45+
RYE_VERSION: '0.35.0'
46+
RYE_INSTALL_OPTION: '--yes'
47+
48+
- name: Bootstrap
49+
run: ./scripts/bootstrap
50+
51+
- name: Run tests
52+
run: ./scripts/test
53+

.gitignore

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
.prism.log
2+
.vscode
3+
_dev
4+
5+
__pycache__
6+
.mypy_cache
7+
8+
dist
9+
10+
.venv
11+
.idea
12+
13+
.env
14+
.envrc
15+
codegen.log
16+
Brewfile.lock.json

.python-version

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3.9.18

.stats.yml

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
configured_endpoints: 3
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/beats-ai-beatsfoundation%2Fbeats-foundation-f711efcd99b00b3dc26c741770eecb8c17dc76bac1372c192aa232b4aae417e9.yml

Brewfile

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
brew "rye"
2+

CONTRIBUTING.md

+129
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
## Setting up the environment
2+
3+
### With Rye
4+
5+
We use [Rye](https://rye.astral.sh/) to manage dependencies because it will automatically provision a Python environment with the expected Python version. To set it up, run:
6+
7+
```sh
8+
$ ./scripts/bootstrap
9+
```
10+
11+
Or [install Rye manually](https://rye.astral.sh/guide/installation/) and run:
12+
13+
```sh
14+
$ rye sync --all-features
15+
```
16+
17+
You can then run scripts using `rye run python script.py` or by activating the virtual environment:
18+
19+
```sh
20+
$ rye shell
21+
# or manually activate - https://docs.python.org/3/library/venv.html#how-venvs-work
22+
$ source .venv/bin/activate
23+
24+
# now you can omit the `rye run` prefix
25+
$ python script.py
26+
```
27+
28+
### Without Rye
29+
30+
Alternatively if you don't want to install `Rye`, you can stick with the standard `pip` setup by ensuring you have the Python version specified in `.python-version`, create a virtual environment however you desire and then install dependencies using this command:
31+
32+
```sh
33+
$ pip install -r requirements-dev.lock
34+
```
35+
36+
## Modifying/Adding code
37+
38+
Most of the SDK is generated code. Modifications to code will be persisted between generations, but may
39+
result in merge conflicts between manual patches and changes from the generator. The generator will never
40+
modify the contents of the `src/beats_foundation/lib/` and `examples/` directories.
41+
42+
## Adding and running examples
43+
44+
All files in the `examples/` directory are not modified by the generator and can be freely edited or added to.
45+
46+
```py
47+
# add an example to examples/<your-example>.py
48+
49+
#!/usr/bin/env -S rye run python
50+
51+
```
52+
53+
```sh
54+
$ chmod +x examples/<your-example>.py
55+
# run the example against your api
56+
$ ./examples/<your-example>.py
57+
```
58+
59+
## Using the repository from source
60+
61+
If you’d like to use the repository from source, you can either install from git or link to a cloned repository:
62+
63+
To install via git:
64+
65+
```sh
66+
$ pip install git+ssh://git@github.com/stainless-sdks/beats-foundation-python.git
67+
```
68+
69+
Alternatively, you can build from source and install the wheel file:
70+
71+
Building this package will create two files in the `dist/` directory, a `.tar.gz` containing the source files and a `.whl` that can be used to install the package efficiently.
72+
73+
To create a distributable version of the library, all you have to do is run this command:
74+
75+
```sh
76+
$ rye build
77+
# or
78+
$ python -m build
79+
```
80+
81+
Then to install:
82+
83+
```sh
84+
$ pip install ./path-to-wheel-file.whl
85+
```
86+
87+
## Running tests
88+
89+
Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.
90+
91+
```sh
92+
# you will need npm installed
93+
$ npx prism mock path/to/your/openapi.yml
94+
```
95+
96+
```sh
97+
$ ./scripts/test
98+
```
99+
100+
## Linting and formatting
101+
102+
This repository uses [ruff](https://github.com/astral-sh/ruff) and
103+
[black](https://github.com/psf/black) to format the code in the repository.
104+
105+
To lint:
106+
107+
```sh
108+
$ ./scripts/lint
109+
```
110+
111+
To format and fix all ruff issues automatically:
112+
113+
```sh
114+
$ ./scripts/format
115+
```
116+
117+
## Publishing and releases
118+
119+
Changes made to this repository via the automated release PR pipeline should publish to PyPI automatically. If
120+
the changes aren't made through the automated pipeline, you may want to make releases manually.
121+
122+
### Publish with a GitHub workflow
123+
124+
You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/stainless-sdks/beats-foundation-python/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up.
125+
126+
### Publish manually
127+
128+
If you need to manually release a package, you can run the `bin/publish-pypi` script with a `PYPI_TOKEN` set on
129+
the environment.

0 commit comments

Comments
 (0)