[build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [project] name = "cyclone" version = "0.1.0" description = "Cyclone EDI suite — X12 837P/835 parser" requires-python = ">=3.11" dependencies = [ "pydantic>=2.6,<3", "click>=8.1,<9", "fastapi>=0.110,<1", "uvicorn[standard]>=0.27,<1", "python-multipart>=0.0.9,<1", "sqlalchemy>=2.0,<3", "pyyaml>=6.0,<7", "keyring>=25.0,<26", # backup_service / backup: encryption-at-rest (SP17). Used at module # top-level by cyclone.backup, so it has to be a hard dep — not an # extra — or the test suite fails to collect when the venv is built # from a clean `uv sync`. "cryptography>=49.0,<50", # passlib 1.7.4 + bcrypt >= 4.1 are incompatible (passlib probes bcrypt.__about__ # which 4.x removed). Pin bcrypt < 4.1. "passlib[bcrypt]>=1.7.4", "bcrypt<4.1", ] [project.optional-dependencies] dev = [ "pytest>=8.0", "pytest-cov>=4.1", "pytest-asyncio>=0.23,<1", "httpx>=0.27,<1", "pytest-randomly>=4.1", ] sqlcipher = [ # SP12: encryption at rest. Optional — without it the DB is plain SQLite. # Install via: pip install -e .[sqlcipher] (after brew install sqlcipher). "sqlcipher3>=0.6,<1", ] sftp = [ # SP13: real SFTP wire-up. Optional — without it the stub keeps working. # Install via: pip install -e .[sftp]. "paramiko>=3.4,<6", ] [project.scripts] cyclone = "cyclone.cli:main" [tool.setuptools.packages.find] where = ["src"] [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-ra --strict-markers" asyncio_mode = "auto"