[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "easymapping" version = "5.0.0" description = "HAProxy label based routing with service discovery for Docker, Swarm, and Kubernetes" readme = "README.md" license = {file = "LICENSE"} requires-python = ">=3.11" authors = [] keywords = ["haproxy", "docker", "kubernetes", "service-discovery", "load-balancer"] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "Topic :: System :: Systems Administration", "Topic :: Internet :: Proxy Servers", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", ] dependencies = [ "pyyaml>=6.0", "docker>=7.0.0", "jinja2>=3.1.0", "kubernetes>=28.0.0", "deepdiff>=6.0.0", "pyopenssl>=24.0.0", "psutil>=5.9.0", "requests>=2.31.0", ] [dependency-groups] dev = [ "pytest>=9.0.2", "pytest-cov>=4.1.0", "ruff>=0.1.0", "PyJWT>=2.8.0", "cryptography>=41.0.0", ] [project.scripts] easy-haproxy = "main:main" [tool.hatch.build.targets.wheel] packages = ["src/easymapping", "src/functions", "src/processor", "src/plugins", "src/templates"] [tool.hatch.build.targets.wheel.sources] "src" = "" [tool.pytest.ini_options] addopts = "-v -p no:warnings" testpaths = ["tests"] pythonpath = ["src"] markers = [ "kubernetes: marks tests as kubernetes integration tests (deselect with '-m \"not kubernetes\"')", "ssl: marks tests for SSL/TLS functionality", "jwt: marks tests for JWT validator plugin", "loadbalancing: marks tests for load balancing functionality", "php: marks tests for PHP-FPM FastCGI plugin", "plugins: marks tests for combined plugin functionality", "security: marks tests for security features (IP whitelist, etc.)", "cloudflare: marks tests for Cloudflare IP restoration plugin", "custom_label: marks tests for custom label prefix functionality", "static: marks tests for static configuration mode", "acme: marks tests for certbot/acme", ] [tool.ruff] line-length = 120 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "W", "I", "N", "UP"] ignore = ["E501"] [tool.coverage.run] source = ["src"] omit = ["*/tests/*", "*/test_*.py"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", ]