| # 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 |