blob: c73df7c74fec5f410a20641e1e431a3275eb31d4 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
[build-system]
requires = [
"setuptools~=75.3.0",
"wheel~=0.45.1"
]
build-backend = "setuptools.build_meta"
[project]
name = "apache-libcloud"
description = "A standard Python library that abstracts away differences among multiple cloud provider APIs. For more information and documentation, please see https://libcloud.apache.org"
authors = [
{name = "Apache Software Foundation", email = "dev@libcloud.apache.org"},
]
keywords = [
"cloud",
"libcloud",
"apache",
"aws",
"ec2",
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Intended Audience :: Developers",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Software Development :: Libraries :: Python Modules",
]
requires-python = ">=3.10"
dependencies = [
"requests>=2.26.0",
]
license = {text = "Apache License (2.0)"}
dynamic = ["version", "readme"]
[project.urls]
# Threre seems to be known bug with homepage and pyproject.yaml https://github.com/pypa/packaging-problems/issues/606
Homepage = "https://libcloud.apache.org"
Documentation = "https://libcloud.readthedocs.io"
"Mailing list" = "https://libcloud.apache.org/community.html#mailing-lists"
Security = "https://libcloud.apache.org/security.html"
Repository = "https://github.com/apache/libcloud"
Tests = "https://github.com/apache/libcloud/tree/trunk/libcloud/test"
Coverage = "https://app.codecov.io/github/apache/libcloud"
Issues = "https://github.com/apache/libcloud/issues"
Distribution = "https://pypi.org/project/apache-libcloud"
Changelog = "https://github.com/apache/libcloud/blob/trunk/CHANGES.rst"
[dependency-groups]
build = [
"build==1.2.2",
]
publish = [
"twine==5.1.1",
]
test = [
"coverage[toml]==7.2.7; python_version >= '3.10'",
"requests>=2.31.0",
"requests_mock==1.11.0",
"pytest==8.3.5",
"pytest-xdist==3.6.1",
"pytest-timeout==2.3.1",
"pytest-benchmark[histogram]==5.1.0; python_version >= '3.10'",
"cryptography==44.0.2",
"pyopenssl==25.0.0",
"fasteners",
"paramiko==3.5.1; platform_python_implementation != 'PyPy'",
"libvirt-python==10.2.0",
]
lint = [
"pep8==1.7.1",
"flake8==5.0.4",
"astroid==3.3.8; python_version >= '3.10'",
"pylint==3.3.4; python_version >= '3.10'",
"bandit[toml]==1.9.3; python_version >= '3.10'",
"black==25.1.0; python_version >= '3.10' and implementation_name == \"cpython\"",
"isort==6.0.1; python_version >= '3.10'",
"pyupgrade==3.3.1",
"rstcheck==6.2.4; python_version >= '3.10'",
"codespell==2.4.1",
"prek>=0.2.17",
"requests>=2.27.1",
"paramiko==3.5.1; platform_python_implementation != 'PyPy'",
]
docs = [
"rstcheck==6.2.4; python_version >= '3.10'",
"fasteners",
"sphinx_rtd_theme==2.0.0",
"sphinx==6.2.1",
]
mypy = [
"mypy==1.15.0; python_version >= '3.10' and implementation_name == \"cpython\"",
"types-simplejson",
"types-certifi",
"types-requests",
"types-urllib3",
]
ci = [
"tox==4.24.1",
]
integration-compute = [
"bottle",
]
integration-storage = [
"azure-identity",
"azure-mgmt-resource",
"azure-mgmt-storage",
"boto3",
"docker",
"requests",
]
dev = [
{include-group = "test"},
{include-group = "lint"},
{include-group = "mypy"},
{include-group = "ci"},
]
[tool.setuptools.packages.find]
where = ["./"]
include = ["libcloud", "libcloud.test*", "libcloud.*" ]
[tool.setuptools.package-data]
"libcloud.data" = [
"pricing.json"
]
"libcloud.test" = [
"**/*.json",
"**/*.xml",
"**/*.pub",
"**/*.key",
"**/*.pem",
"**/*.crt",
"**/*.csv",
"**/*.txt",
"**/*.html",
]
[tool.setuptools]
include-package-data = true
exclude-package-data = { "*" = ["secrets.py"], "libcloud.test" = ["secrets.py"] }
[tool.setuptools.dynamic]
version = {attr = "libcloud.__version__"}
readme = {file = ["README.rst"], content-type = "text/x-rst"}
[tool.distutils.bdist_wheel]
[tool.black]
line_length = 100
target_version = ['py310', 'py311', 'py312', 'py313']
include = '\.pyi?$'
exclude = '''
(
/(
| \.git
| \.virtualenv
| __pycache__
| secrets\.py
)/
)
'''
[tool.isort]
profile = "black"
multi_line_output = 3
line_length = 99
src_paths = ["libcloud", "contrib", "docs", "demos", "pylint_plugins", "integration"]
skip_glob = [".venv/*", ".tox/*", ".github/actions/*"]
length_sort = true
[tool.pytest.ini_options]
# Set options for pytest
python_classes = "*Test"
testpaths = "libcloud/test"
# Show slowest 10 tests in the output
addopts = "--durations=10"
# Ignore UserWarning's
filterwarnings = ["ignore::UserWarning"]
[tool.bandit]
exclude_dirs = [".tox", ".git", "build", "dist", "venv", "tests/*"]
skips = ["B411"]
[tool.pylint.MASTER]
ignore = "test,constants"
persistent = "yes"
load-plugins = ""
[tool.pylint.'MESSAGES CONTROL']
disable = "redefined-builtin,too-many-arguments,too-few-public-methods,missing-docstring,invalid-name,abstract-method"
[tool.pylint.TYPECHECK]
generated-members = "async_request,objects"
[tool.pylint.VARIABLES]
init-import = "no"
dummy-variables-rgx = "_|dummy"
additional-builtins = ""
[tool.pylint.FORMAT]
max-line-length = 100
max-module-lines = 1000
indent-string = " "
[tool.mypy]
python_version = "3.10"
platform = "linux"
show_error_context = true
show_column_numbers = true
[[tool.mypy.overrides]]
module = [
"lxml",
"xml.dom",
"xmlrpc.*",
"paramiko.*",
"cryptography.*",
"lockfile.*",
]
ignore_missing_imports = true
[[tool.mypy.overrides]]
module = [
"libcloud.utils.py3",
"libcloud.compute.drivers.*",
"libcloud.storage.drivers.*",
"libcloud.dns.drivers.*",
"libcloud.container.drivers.*",
]
ignore_errors = true
[tool.coverage.run]
parallel = false
branch = true
source = ["libcloud"]
[tool.coverage.paths]
source = [
"libcloud/",
]
tests = [
"libcloud/test/",
]
[tool.coverage.report]
show_missing = true
skip_covered = true
exclude_lines = [
# Have to re-enable the standard pragma
"pragma: no cover",
# Don't complain about missing debug-only code:
"def __repr__",
"def __str__",
"if self\\.debug",
# Don't complain if tests don't hit defensive assertion code:
"raise AssertionError",
"raise NotImplementedError",
# Don't complain if non-runnable code isn't run:
"if 0:",
"if __name__ == .__main__.:",
"__all__",
"import",
"deprecated_warning",
"in_development_warning",
"@abc.abstractmethod",
# Type checking related code,
"^if (False|TYPE_CHECKING):",
"if typing.TYPE_CHECKING",
]
ignore_errors = true
[tool.coverage.html]
directory = "coverage_html_report"
[tool.codespell]
skip = 'venvs,.venv,.git,build,*.egg-info,*.lock,libcloud/test/*/fixtures/*'
# fo - file object, hda - hda mount point, nd - node, doesnt - inside the path,
# ags - agreements
ignore-words-list = 'fo,hda,nd,doesnt,ags'
count = ''
quiet-level = 3