pyproject.toml (173 lines of code) (raw):
[tool.poetry]
name = "awswrangler"
version = "3.11.0"
description = "Pandas on AWS."
authors = ["Amazon Web Services"]
license = "Apache License 2.0"
readme = "README.md"
include = ["awswrangler/py.typed"]
exclude = ["*.so", "*.pyc", "*~", "#*", ".git*", ".coverage*", "DS_Store", "__pycache__"]
homepage = "https://aws-sdk-pandas.readthedocs.io/"
repository = "https://github.com/aws/aws-sdk-pandas"
documentation = "https://aws-sdk-pandas.readthedocs.io/"
keywords = ["pandas", "aws"]
classifiers = [
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
]
[tool.poetry.dependencies]
python = ">=3.9, <4.0"
# Required
boto3 = "^1.20.32"
botocore = "^1.23.32"
pandas = { version = ">=1.2.0,<3.0.0" }
numpy = [
{ version = ">=1.26,<2.1.0", markers = "python_version < \"3.10\"" },
{ version = ">=1.26,<3.0", markers = "python_version >= \"3.10\"" }
]
pyarrow = [
{ version = ">=8.0.0,<19.0.0", markers = "python_version < \"3.13\"" },
{ version = ">=18.0.0,<19.0.0", markers = "python_version >= \"3.13\"" }
]
typing-extensions = "^4.4.0"
packaging = ">=21.1,<25.0"
# needed because Py 3.12 removed distutils, which some libraries still need
setuptools = {version = "*", markers = "python_version >= \"3.12\""}
# Databases
redshift-connector = { version = "^2.0.0", optional = true }
pymysql = { version = "^1.0.0", optional = true }
pg8000 = { version = "^1.29.0", optional = true }
pyodbc = { version = ">=4,<6", optional = true }
oracledb = { version = ">=1,<4", optional = true }
# Graph
gremlinpython = { version = "^3.7.1", optional = true }
SPARQLWrapper = { version = "^2.0.0", optional = true }
requests = { version = "^2.0.0", optional = true }
aiohttp = { version = "^3.9.0", optional = true }
async-timeout = { version = ">=4.0.3,<6.0.0", optional = true }
# OpenSearch
opensearch-py = { version = "^2.0.0", optional = true }
requests-aws4auth = { version = "^1.1.1", optional = true }
jsonpath-ng = { version = "^1.5.3", optional = true }
# Other
openpyxl = { version = "^3.0.0", optional = true }
progressbar2 = { version = "^4.0.0", optional = true }
deltalake = { version = ">=0.18.0,<0.26.0", optional = true }
geopandas = { version = "^1.0.0", optional = true }
# Distributed
modin = { version = ">=0.31,<0.33", optional = true }
ray = { version = ">=2.30.0,<2.38.0", extras = ["default", "data"], optional = true }
[tool.poetry.extras]
redshift = ["redshift-connector"]
mysql = ["pymysql"]
postgres = ["pg8000"]
sqlserver = ["pyodbc"]
oracle = ["oracledb"]
gremlin = ["gremlinpython", "requests", "aiohttp", "async-timeout"]
sparql = ["SPARQLWrapper", "requests"]
opencypher = ["requests"]
opensearch = ["opensearch-py", "jsonpath-ng", "requests-aws4auth"]
openpyxl = ["openpyxl"]
progressbar = ["progressbar2"]
deltalake = ["deltalake"]
geopandas = ["geopandas"]
modin = ["modin"]
ray = ["ray"]
[tool.poetry.group.dev.dependencies]
# Build
setuptools = "*"
wheel = "^0.45.1"
msgpack = "*"
poetry = "^2.0.1"
# Lint
boto3-stubs = {version = "^1.36.2", extras = ["athena", "cleanrooms", "chime", "cloudwatch", "dynamodb", "ec2", "emr", "emr-serverless", "glue", "kms", "logs", "neptune", "opensearch", "opensearchserverless", "quicksight", "rds", "rds-data", "redshift", "redshift-data", "s3", "secretsmanager", "ssm", "sts", "timestream-query", "timestream-write"]}
doc8 = "^1.1"
mypy = "^1.14"
ruff = ">=0.9.2,<0.12.0"
# Test
moto = "^5.0"
openpyxl = "^3.1"
pyparsing = "^3.2.1"
pytest = "^8.3.4"
pytest-cov = "^6.0"
pytest-rerunfailures = "^15.0"
pytest-timeout = "^2.3.1"
pytest-xdist = "^3.6.1"
s3fs = "0.4.2" # Must be pinned to 0.4.2
tox = "^4.23.2"
# Docs
bump-my-version = ">=0.29,<1.2"
IPython = "^8.18.1"
jupyterlab = "^4.3"
nbsphinx = "^0.9.6"
nbsphinx-link = "^1.3.1"
sphinx = "^7.1"
sphinx-autodoc-typehints = "^2.0.1"
sphinx-bootstrap-theme = "^0.8"
sphinx-copybutton = "^0.5.1"
pydot = "^3.0.3"
myst-parser = "^3.0.1"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
[tool.ruff]
extend-include = ["*.ipynb"]
exclude = [
".eggs",
".git",
".mypy_cache",
".ruff_cache",
".tox",
".venv",
"__pypackages__",
"_build",
"build",
"dist",
"venv",
]
line-length = 120
target-version = "py38"
[tool.ruff.lint]
select = ["D", "E", "F", "I", "PL", "RUF100", "W", "FA", "UP", "PYI036", "NPY"]
ignore = ["E501", "PLR2004", "UP037"]
fixable = ["ALL"]
[tool.ruff.lint.per-file-ignores]
"docs/*" = ["D"]
"test_infra/*" = ["D"]
"tests/*" = ["PL", "D"]
"tutorials/*" = ["D", "E402", "F401", "F811", "F821"]
[tool.ruff.lint.pydocstyle]
convention = "numpy"
[tool.ruff.lint.pylint]
max-args=25 # Maximum number of arguments for function / method.
max-bool-expr=5 # Maximum number of boolean expressions in an if statement (see R0916).
max-branches=15 # Maximum number of branch for function / method body.
max-locals=30 # Maximum number of locals for function / method body.
max-public-methods=20 # Maximum number of public methods for a class (see R0904).
max-returns=6 # Maximum number of return / yield for function / method body.
max-statements=50 # Maximum number of statements in function / method body.
[tool.mypy]
python_version = "3.9"
strict = true
ignore_missing_imports = true
warn_unused_ignores = true
[tool.pytest.ini_options]
log_cli = false
filterwarnings = "ignore::DeprecationWarning"
addopts = "--log-cli-format \"[%(name)s][%(funcName)s] %(message)s\" --verbose --capture=sys"
markers = [
"distributed: tests againsts methods with distributed functionality",
]
[tool.coverage.run]
branch = true
omit = [
"awswrangler/distributed/*",
"awswrangler/neptune/_utils.py",
"awswrangler/opensearch/_utils.py",
"awswrangler/chime.py",
]
[tool.coverage.report]
show_missing = true