1
0
mirror of synced 2025-12-25 11:06:55 -05:00
Files
airbyte/pyproject.toml
2024-06-03 09:21:17 -07:00

280 lines
7.8 KiB
TOML

[tool.poetry]
name = "airbyte"
version = "0.1.0"
description = "Airbyte open source connector code"
authors = ["Airbyte <contact@airbyte.io>"]
[tool.poetry.dependencies]
python = "~3.10"
jsonschema = "^4.22.0"
[tool.poetry.group.dev.dependencies]
isort = "5.6.4"
black = "~22.3.0"
ruff = "^0.4"
poethepoet = "^0.26.1"
[tool.poe.tasks]
isort = { cmd = "poetry run isort --settings-file pyproject.toml ." }
black = { cmd = "poetry run black --config pyproject.toml ." }
format = { sequence = [
"isort",
"black",
], help = "Format Python code in the repository. This command is invoked in airbyte-ci format." }
[tool.black]
line-length = 140
target-version = ["py310"]
extend-exclude = """
/(
build
| integration_tests
| unit_tests
| generated
| airbyte-cdk/python/airbyte_cdk/sources/declarative/models
| invalid
| non_formatted_code
| airbyte-integrations/connectors/destination-duckdb
| airbyte-integrations/connectors/destination-snowflake-cortex
)/
"""
[tool.flake8]
extend-exclude = [
"*/lib/*/site-packages",
".venv",
"build",
"models",
".eggs",
"**/__init__.py",
"**/generated/*",
"**/declarative/models/*",
]
max-complexity = 20
max-line-length = 140
extend-ignore = [
"E203", # whitespace before ':' (conflicts with Black)
"E231", # Bad trailing comma (conflicts with Black)
"E501", # line too long (conflicts with Black)
"W503", # line break before binary operator (conflicts with Black)
"F811", # TODO: ella fix after pflake8 version update
]
[tool.coverage.report]
fail_under = 0
skip_empty = true
sort = "-cover"
omit = [
".venv/*",
"main.py",
"setup.py",
"unit_tests/*",
"integration_tests/*",
"**/generated/*",
]
# TODO: This will be removed in favor of the section below.
[tool.isort]
profile = "black"
color_output = false
# skip_gitignore = true
line_length = 140
multi_line_output = 3
include_trailing_comma = true
force_grid_wrap = 0
use_parentheses = true
skip_glob = [
"airbyte-cdk/python/airbyte_cdk/sources/declarative/models/**",
"**/invalid/**",
"**/non_formatted_code/**",
"**/connector_builder/generated/**",
# TODO: Remove this after we move to Ruff. Ruff is mono-repo-aware and
# correctly handles first-party imports in subdirectories.
# Migrated to Ruff:
"airbyte-integrations/connectors/destination-duckdb/**",
"airbyte-integrations/connectors/destination-snowflake-cortex/**"
]
[tool.ruff.pylint]
max-args = 8 # Relaxed from default of 5
max-branches = 15 # Relaxed from default of 12
[tool.ruff]
target-version = "py310"
select = [
# For rules reference, see https://docs.astral.sh/ruff/rules/
"A", # flake8-builtins
"ANN", # flake8-annotations
"ARG", # flake8-unused-arguments
"ASYNC", # flake8-async
"B", # flake8-bugbear
"FBT", # flake8-boolean-trap
"BLE", # Blind except
"C4", # flake8-comprehensions
"C90", # mccabe (complexity)
"COM", # flake8-commas
"CPY", # missing copyright notice
# "D", # pydocstyle # TODO: Re-enable when adding docstrings
"DTZ", # flake8-datetimez
"E", # pycodestyle (errors)
"ERA", # flake8-eradicate (commented out code)
"EXE", # flake8-executable
"F", # Pyflakes
"FA", # flake8-future-annotations
"FIX", # flake8-fixme
"FLY", # flynt
"FURB", # Refurb
"I", # isort
"ICN", # flake8-import-conventions
"INP", # flake8-no-pep420
"INT", # flake8-gettext
"ISC", # flake8-implicit-str-concat
"ICN", # flake8-import-conventions
"LOG", # flake8-logging
"N", # pep8-naming
"PD", # pandas-vet
"PERF", # Perflint
"PIE", # flake8-pie
"PGH", # pygrep-hooks
"PL", # Pylint
"PT", # flake8-pytest-style
"PTH", # flake8-use-pathlib
"PYI", # flake8-pyi
"Q", # flake8-quotes
"RET", # flake8-return
"RSE", # flake8-raise
"RUF", # Ruff-specific rules
"SIM", # flake8-simplify
"SLF", # flake8-self
"SLOT", # flake8-slots
"T10", # debugger calls
# "T20", # flake8-print # TODO: Re-enable once we have logging
"TCH", # flake8-type-checking
"TD", # flake8-todos
"TID", # flake8-tidy-imports
"TRY", # tryceratops
"TRY002", # Disallow raising vanilla Exception. Create or use a custom exception instead.
"TRY003", # Disallow vanilla string passing. Prefer kwargs to the exception constructur.
"UP", # pyupgrade
"W", # pycodestyle (warnings)
"YTT", # flake8-2020
]
ignore = [
# For rules reference, see https://docs.astral.sh/ruff/rules/
# These we don't agree with or don't want to prioritize to enforce:
"ANN003", # kwargs missing type annotations
"ANN101", # Type annotations for 'self' args
"ANN102", # Type annotations for 'cls' args
"COM812", # Because it conflicts with ruff auto-format
"EM", # flake8-errmsgs (may reconsider later)
"DJ", # Django linting
"G", # flake8-logging-format
"ISC001", # Conflicts with ruff auto-format
"NPY", # NumPy-specific rules
"PIE790", # Allow unnecssary 'pass' (sometimes useful for readability)
"PERF203", # exception handling in loop
"S", # flake8-bandit (noisy, security related)
"SIM910", # Allow "None" as second argument to Dict.get(). "Explicit is better than implicit."
"TD002", # Require author for TODOs
"TRIO", # flake8-trio (opinionated, noisy)
"INP001", # Dir 'examples' is part of an implicit namespace package. Add an __init__.py.
# TODO: Consider re-enabling these before release:
"A003", # Class attribute 'type' is shadowing a Python builtin
"BLE001", # Do not catch blind exception: Exception
"ERA001", # Remove commented-out code
"FIX002", # Allow "TODO:" until release (then switch to requiring links via TDO003)
"PLW0603", # Using the global statement to update _cache is discouraged
"TD003", # Require links for TODOs # TODO: Re-enable when we disable FIX002
"UP007", # Allow legacy `Union[a, b]` and `Optional[a]` for Pydantic, until we drop Python 3.9 (Pydantic doesn't like it)
]
fixable = ["ALL"]
unfixable = [
"ERA001", # Commented-out code (avoid silent loss of code)
"T201", # print() calls (avoid silent loss of code / log messages)
]
line-length = 140
extend-exclude = ["docs", "test", "tests"]
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
[tool.ruff.isort]
force-sort-within-sections = false
lines-after-imports = 2
known-first-party = [
"airbyte",
"airbyte_cdk",
"airbyte_protocol",
"airbyte_api_client",
"connector_ops",
"pipelines",
]
known-local-folder = ["airbyte"]
required-imports = ["from __future__ import annotations"]
known-third-party = []
section-order = [
"future",
"standard-library",
"third-party",
"first-party",
"local-folder",
]
[tool.ruff.mccabe]
max-complexity = 24
[tool.ruff.pycodestyle]
ignore-overlong-task-comments = true
[tool.ruff.pydocstyle]
convention = "google"
[tool.ruff.flake8-annotations]
allow-star-arg-any = false
ignore-fully-untyped = false
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
skip-magic-trailing-comma = false
line-ending = "auto"
preview = false
docstring-code-format = true
[tool.mypy]
platform = "linux"
exclude = "(build|integration_tests|unit_tests|generated)"
# Optionals
ignore_missing_imports = true
# Strictness
allow_untyped_globals = false
allow_redefinition = false
implicit_reexport = false
strict_equality = true
# Warnings
warn_unused_ignores = true
warn_no_return = true
warn_return_any = true
warn_redundant_casts = true
warn_unreachable = true
# Error output
show_column_numbers = true
show_error_context = true
show_error_codes = true
show_traceback = true
pretty = true
color_output = true
error_summary = true
[tool.pytest.ini_options]
minversion = "6.2.5"
addopts = "-r a --capture=no -vv --color=yes"