# 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~=66.1",
    "wheel~=0.37.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.7",
    "Programming Language :: Python :: 3.8",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
    "Topic :: Software Development :: Libraries :: Python Modules",
]
requires-python = ">=3.7"
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"


[project.optional-dependencies]
build = [
    "build==0.10.0"
]
publish = [
    "twine==4.0.2"
]
test = [
    "pytest",
    "requests_mock",
]

[tool.setuptools.packages.find]
where = ["./"]
include = ["libcloud"]

[tool.setuptools]
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]
universal = true


[tool.black]
line_length = 100
target_version = ['py37', 'py38', 'py39', 'py310', 'py311']
include = '\.pyi?$'
extended_exclude = '''
(
    /(
        | \.git
        | \.virtualenv
        | __pycache__
    )/
)
'''


[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.7
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]
branch = true
source = ["libcloud"]

[tool.coverage.report]
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",
]
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
