Commit 93f3d3c3

Stainless Bot <107565488+stainless-bot@users.noreply.github.com>
2024-02-09 03:50:04
docs: add CONTRIBUTING.md (#1138)
1 parent a061daf
Changed files (1)
CONTRIBUTING.md
@@ -0,0 +1,125 @@
+## Setting up the environment
+
+### With Rye
+
+We use [Rye](https://rye-up.com/) to manage dependencies so we highly recommend [installing it](https://rye-up.com/guide/installation/) as it will automatically provision a Python environment with the expected Python version.
+
+After installing Rye, you'll just have to run this command:
+
+```sh
+$ rye sync --all-features
+```
+
+You can then run scripts using `rye run python script.py` or by activating the virtual environment:
+
+```sh
+$ rye shell
+# or manually activate - https://docs.python.org/3/library/venv.html#how-venvs-work
+$ source .venv/bin/activate
+
+# now you can omit the `rye run` prefix
+$ python script.py
+```
+
+### Without Rye
+
+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:
+
+```sh
+$ pip install -r requirements-dev.lock
+```
+
+## Modifying/Adding code
+
+Most of the SDK is generated code, and any modified code will be overridden on the next generation. The
+`src/openai/lib/` and `examples/` directories are exceptions and will never be overridden.
+
+## Adding and running examples
+
+All files in the `examples/` directory are not modified by the Stainless generator and can be freely edited or
+added to.
+
+```bash
+# add an example to examples/<your-example>.py
+
+#!/usr/bin/env -S rye run python
+…
+```
+
+```
+chmod +x examples/<your-example>.py
+# run the example against your api
+./examples/<your-example>.py
+```
+
+## Using the repository from source
+
+If you’d like to use the repository from source, you can either install from git or link to a cloned repository:
+
+To install via git:
+
+```bash
+pip install git+ssh://git@github.com:openai/openai-python.git
+```
+
+Alternatively, you can build from source and install the wheel file:
+
+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.
+
+To create a distributable version of the library, all you have to do is run this command:
+
+```bash
+rye build
+# or
+python -m build
+```
+
+Then to install:
+
+```sh
+pip install ./path-to-wheel-file.whl
+```
+
+## Running tests
+
+Most tests will require you to [setup a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.
+
+```bash
+# you will need npm installed
+npx prism path/to/your/openapi.yml
+```
+
+```bash
+rye run pytest
+```
+
+## Linting and formatting
+
+This repository uses [ruff](https://github.com/astral-sh/ruff) and
+[black](https://github.com/psf/black) to format the code in the repository.
+
+To lint:
+
+```bash
+rye run lint
+```
+
+To format and fix all ruff issues automatically:
+
+```bash
+rye run format
+```
+
+## Publishing and releases
+
+Changes made to this repository via the automated release PR pipeline should publish to PyPI automatically. If
+the changes aren't made through the automated pipeline, you may want to make releases manually.
+
+### Publish with a GitHub workflow
+
+You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/openai/openai-python/actions/workflows/publish-pypi.yml). This will require a setup organization or repository secret to be set up.
+
+### Publish manually
+
+If you need to manually release a package, you can run the `bin/publish-pypi` script with an `PYPI_TOKEN` set on
+the environment.