| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- [build-system]
- requires = ["setuptools>=77.0", "wheel"]
- build-backend = "setuptools.build_meta"
- [project]
- name = "cloudbridge"
- description = "A simple layer of abstraction over multiple cloud providers."
- readme = "README.rst"
- license = "MIT"
- license-files = ["LICENSE"]
- requires-python = ">=3.13"
- authors = [
- { name = "Galaxy and GVL Projects", email = "help@genome.edu.au" },
- ]
- keywords = ["cloud", "aws", "azure", "gcp", "openstack", "iaas"]
- classifiers = [
- "Development Status :: 5 - Production/Stable",
- "Environment :: Console",
- "Intended Audience :: Developers",
- "Intended Audience :: System Administrators",
- "Operating System :: OS Independent",
- "Programming Language :: Python",
- "Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.13",
- "Programming Language :: Python :: Implementation :: CPython",
- "Topic :: Software Development :: Libraries :: Python Modules",
- ]
- dependencies = [
- "tenacity>=6.0",
- "deprecation>=2.0.7",
- "pyeventsystem<2",
- ]
- dynamic = ["version"]
- [project.urls]
- Homepage = "http://cloudbridge.cloudve.org/"
- Source = "https://github.com/CloudVE/cloudbridge"
- Issues = "https://github.com/CloudVE/cloudbridge/issues"
- [project.optional-dependencies]
- aws = [
- "boto3>=1.9.86,<2.0.0",
- ]
- # Install azure>=3.0.0 package to find which of the azure libraries listed
- # below are compatible with each other. List individual libraries instead
- # of using the azure umbrella package to speed up installation.
- # Minimums match SDK generation tested against the model-class
- # serialization fixes in cloudbridge/providers/azure/. Older SDKs may
- # work but are not covered by integration tests.
- azure = [
- "azure-identity>=1.20.0,<2.0.0",
- "azure-common>=1.1.28,<2.0.0",
- "azure-core>=1.30.0,<2.0.0",
- "azure-mgmt-devtestlabs>=9.0.0,<10.0.0",
- "azure-mgmt-resource>=23.0.0,<26.0.0",
- "azure-mgmt-subscription>=3.0.0,<4.0.0",
- "azure-mgmt-compute>=34.0.0,<39.0.0",
- "azure-mgmt-dns>=9.0.0,<10.0.0",
- "azure-mgmt-network>=28.0.0,<31.0.0",
- "azure-mgmt-storage>=22.0.0,<25.0.0",
- "azure-storage-blob>=12.20.0,<13.0.0",
- "azure-data-tables>=12.4.0,<13.0.0",
- "paramiko<6.0.0",
- ]
- gcp = [
- "google-api-python-client>=2.0,<3.0.0",
- ]
- # Minimums match SDK generation tested against the OpenStack
- # provider fixes in cloudbridge/providers/openstack/. The previous
- # floors were circa-2018 and exposed Nova/Neutron APIs (e.g. the
- # add_floating_ip_to_server action) that are gone from any modern
- # OpenStack deployment.
- openstack = [
- "openstacksdk>=3.0.0,<5.0.0",
- "python-novaclient>=17.0.0,<20.0",
- "python-swiftclient>=4.0.0,<5.0",
- "python-neutronclient>=11.0.0,<13.0",
- "python-keystoneclient>=4.0.0,<7.0",
- ]
- full = [
- "cloudbridge[aws,azure,gcp,openstack]",
- ]
- # httpretty is required with/for moto 1.0.0 or AWS tests fail
- dev = [
- "cloudbridge[full]",
- "tox>=4.0.0",
- "pytest",
- "moto[ec2,s3]>=5.0.0",
- "packaging",
- "sphinx>=1.3.1",
- "pydevd",
- "flake8>=3.3.0",
- "flake8-import-order>=0.12",
- "mypy>=1.11",
- ]
- [tool.setuptools.dynamic]
- version = { attr = "cloudbridge.__version__" }
- [tool.setuptools.packages.find]
- include = ["cloudbridge*"]
- exclude = ["tests*"]
- [tool.setuptools.package-data]
- # Ship the PEP 561 marker so downstream consumers pick up our type hints.
- cloudbridge = ["py.typed"]
- [tool.coverage.run]
- branch = true
- source = ["cloudbridge"]
- omit = [
- "cloudbridge/interfaces/*",
- "cloudbridge/__init__.py",
- ]
- parallel = true
- [tool.mypy]
- # CloudBridge is typed gradually. The public API (the interface layer and the
- # factory) is held to a strict baseline so downstream users get a fully-typed
- # API; the base implementations and providers (which wrap untyped cloud SDKs)
- # are temporarily exempted below and ratcheted to strict module-by-module.
- python_version = "3.13"
- files = ["cloudbridge"]
- ignore_missing_imports = true # untyped cloud SDKs (boto3, azure-*, ...) -> Any
- namespace_packages = true
- warn_unused_configs = true
- # Full strict baseline (applies to every module NOT exempted below), with two
- # documented exceptions that don't fit this codebase:
- strict = true
- # interfaces/__init__.py re-exports the public names without an __all__; keep
- # implicit re-export so `from cloudbridge.interfaces import CloudProvider`
- # keeps working for factory.py and downstream consumers.
- implicit_reexport = true
- # Cross-class property setters (@LabeledCloudResource.label.setter) and the
- # `deprecation` library's decorators are untyped; don't fail the build on them.
- disallow_untyped_decorators = false
- # Not-yet-typed internal modules: stay exempt until annotated, then move them
- # into the pragmatic tier below (or, if fully strict-clean, delete the entry).
- [[tool.mypy.overrides]]
- module = ["cloudbridge.providers.*"]
- ignore_errors = true
- # base/ is held to the FULL strict bar (it orchestrates through the typed
- # interface layer and never touches the cloud SDKs directly), so it falls under
- # the global strict baseline with no override. The providers will get a
- # pragmatic tier (warn_return_any / disallow_untyped_calls off) when they are
- # typed, because they DO read from untyped SDK objects.
|