Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .cursorrules
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
Here are some notes for Python CDK development.

## Development Setup

* Use Poetry for dependency management
- Install dependencies with `poetry install --all-extras`
- Run commands with `poetry run` or activate the virtual environment
- Use Poe tasks for common operations: `poetry run poe list`

## Testing

* Write unit tests in the `unit_tests` directory
- Tests should follow the same directory structure as the code they test
- Use pytest fixtures for common test setup
- Run tests with `poetry run poe pytest` or `poetry run poe pytest-fast` for faster tests

## Linting and Formatting

* Use Ruff for linting and formatting
- Run `poetry run poe format-fix` to auto-fix formatting issues
- Run `poetry run poe lint` to check for linting issues
- Run `poetry run poe check-all` to run all checks

## Code Organization

* Follow the existing module structure
- Place new code in the appropriate module based on functionality
- Use relative imports within modules
- Avoid circular dependencies by careful import ordering

## Import Conventions

* Avoid circular dependencies by following these guidelines:
- Submodules should import from lower-level modules, not from the top-level `airbyte_cdk` package
- Use `if TYPE_CHECKING:` blocks for imports that are only used as type hints
- For modules with circular dependency risks, use explicit relative imports

* Special handling for `__init__.py` files:
- Do not auto-sort imports in `__init__.py` files with isort
- When a module depends on classes defined within the same module, use the isort split directive:
```python
# Import the base class first
from .transformation import RecordTransformation

# isort: split
# Then import the implementations
from .add_fields import AddFields
from .remove_fields import RemoveFields
```
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe this guidance is stale and should be fully removed.


## Docstring Standards

* Use Google-style docstrings
- First sentence must be a one-liner on the same line as opening `"""` and end with a period
- Multi-line docstrings require a blank line after the one-liner
- Args section is optional, but if "args:" is specified, all arguments must be documented
- Argument types should not be documented in docstrings as they are already in function signatures
6 changes: 6 additions & 0 deletions docs/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ Only Airbyte CDK maintainers can run slash commands. The most common slash comma
The full list of available slash commands can be found in the [slash command dispatch file](https://github.com/airbytehq/airbyte-python-cdk/blob/main/.github/workflows/slash_command_dispatch.yml#L21-L25).

# Appendix: Advanced Topics
## Development Guidelines and Cursor Rules

The Airbyte Python CDK uses specific development guidelines to maintain consistent code organization and avoid common issues. These guidelines are documented in the [.cursorrules](./../.cursorrules) file at the root of the repository.

When working with the CDK codebase, please review the cursor rules to ensure your changes follow the project's development practices, especially regarding import conventions, docstring standards, and code organization.

Comment thread
aaronsteers marked this conversation as resolved.
Outdated

## Using MockServer in Place of Direct API Access

Expand Down