[build-system]
requires = ["pbr>=6.1.1"]
build-backend = "pbr.build"

[project]
name = "nova"
description = "Cloud computing fabric controller"
authors = [
    {name = "OpenStack", email = "openstack-discuss@lists.openstack.org"},
]
readme = {file = "README.rst", content-type = "text/x-rst"}
license = {text = "Apache-2.0"}
dynamic = ["version", "dependencies"]
requires-python = ">=3.10"
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Environment :: OpenStack",
    "Intended Audience :: Information Technology",
    "Intended Audience :: System Administrators",
    "License :: OSI Approved :: Apache Software License",
    "Operating System :: POSIX :: Linux",
    "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 :: Only",
    "Programming Language :: Python :: Implementation :: CPython",
]

[project.optional-dependencies]
osprofiler = [
    "osprofiler>=1.4.0", # Apache-2.0
]
zvm = [
    "zVMCloudConnector>=1.3.0;sys_platform!='win32'",  # Apache 2.0 License
]
vmware = [
    "oslo.vmware>=3.6.0", # Apache-2.0
]

[project.urls]
"Bug Tracker" = "https://bugs.launchpad.net/nova/"
"Documentation" = "https://docs.openstack.org/nova/"
"Source Code" = "https://opendev.org/openstack/nova"

[project.scripts]
nova-compute = "nova.cmd.compute:main"
nova-conductor = "nova.cmd.conductor:main"
nova-manage = "nova.cmd.manage:main"
nova-novncproxy = "nova.cmd.novncproxy:main"
nova-policy = "nova.cmd.policy:main"
nova-rootwrap = "oslo_rootwrap.cmd:main"
nova-rootwrap-daemon = "oslo_rootwrap.cmd:daemon"
nova-scheduler = "nova.cmd.scheduler:main"
nova-serialproxy = "nova.cmd.serialproxy:main"
nova-spicehtml5proxy = "nova.cmd.spicehtml5proxy:main"
nova-status = "nova.cmd.status:main"

[project.entry-points."oslo.config.opts"]
"nova.conf" = "nova.conf.opts:list_opts"

[project.entry-points."oslo.config.opts.defaults"]
"nova.conf" = "nova.config:set_lib_defaults"

[project.entry-points."oslo.policy.enforcer"]
nova = "nova.policy:get_enforcer"

[project.entry-points."oslo.policy.policies"]
# The sample policies will be ordered by entry point and then by list
# returned from that entry point. If more control is desired split out each
# list_rules method into a separate entry point rather than using the
# aggregate method.
nova = "nova.policies:list_rules"

[project.entry-points."nova.api.extra_spec_validators"]
accel = "nova.api.validation.extra_specs.accel"
aggregate_instance_extra_specs = "nova.api.validation.extra_specs.aggregate_instance_extra_specs"
capabilities = "nova.api.validation.extra_specs.capabilities"
hw = "nova.api.validation.extra_specs.hw"
hw_rng = "nova.api.validation.extra_specs.hw_rng"
hw_video = "nova.api.validation.extra_specs.hw_video"
null = "nova.api.validation.extra_specs.null"
os = "nova.api.validation.extra_specs.os"
pci_passthrough = "nova.api.validation.extra_specs.pci_passthrough"
quota = "nova.api.validation.extra_specs.quota"
resources = "nova.api.validation.extra_specs.resources"
traits = "nova.api.validation.extra_specs.traits"
vmware = "nova.api.validation.extra_specs.vmware"

[project.entry-points."nova.compute.monitors.cpu"]
virt_driver = "nova.compute.monitors.cpu.virt_driver:Monitor"

[tool.setuptools]
packages = [
    "nova"
]

[tool.setuptools.data-files]
"etc/nova" = [
    "etc/nova/api-paste.ini",
    "etc/nova/rootwrap.conf",
]
"etc/nova/rootwrap.d" = [
    "etc/nova/rootwrap.d/*",
]

[tool.autopep8]
aggressive = 3
in-place = true
recursive = true

[tool.codespell]
skip = "*.po,*.js,*.css,*.html,*.svg,HACKING.py,*hacking*,*build*,*_static*,doc/dictionary.txt,*.pyc,*.inv,*.gz,*.jpg,*.png,*.vsd,*.graffle,*.json"
count = true
quiet-level = 4

[tool.coverage.run]
branch = true
source = ["nova"]
omit = ["nova/tests/*"]
concurrency = ["eventlet"]

[tool.coverage.report]
ignore_errors = true

[tool.mypy]
python_version = "3.10"
show_column_numbers = true
show_error_context = true
ignore_missing_imports = true
follow_imports = "skip"
incremental = true
check_untyped_defs = true
warn_unused_ignores = true
files = [
    "nova/compute/manager.py",
    "nova/compute/pci_placement_translator.py",
    "nova/crypto.py",
    "nova/filesystem.py",
    "nova/limit/local.py",
    "nova/limit/placement.py",
    "nova/network/neutron.py",
    "nova/pci/*.py",
    "nova/privsep/path.py",
    "nova/scheduler/client/report.py",
    "nova/scheduler/request_filter.py",
    "nova/scheduler/utils.py",
    "nova/utils.py",
    "nova/virt/driver.py",
    "nova/virt/hardware.py",
    "nova/virt/libvirt/machine_type_utils.py",
    "nova/virt/libvirt/__init__.py",
    "nova/virt/libvirt/cpu/__init__.py",
    "nova/virt/libvirt/cpu/api.py",
    "nova/virt/libvirt/cpu/core.py",
    "nova/virt/libvirt/driver.py",
    "nova/virt/libvirt/event.py",
    "nova/virt/libvirt/guest.py",
    "nova/virt/libvirt/host.py",
    "nova/virt/libvirt/utils.py",
]
