[build-system] requires = ["setuptools>=45", "wheel"] build-backend = "setuptools.build_meta" [project] name = "docuelevate" dynamic = ["version"] description = "Intelligent document processing system with AI-powered metadata extraction" readme = "README.md" requires-python = ">=3.11" license = {text = "Apache-2.0"} authors = [ {name = "Christian Louis", email = "christianlouis@users.noreply.github.com"} ] keywords = ["document", "processing", "ocr", "ai", "metadata", "extraction"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] [project.urls] Homepage = "https://github.com/christianlouis/DocuElevate" Documentation = "https://github.com/christianlouis/DocuElevate/tree/main/docs" Repository = "https://github.com/christianlouis/DocuElevate" Issues = "https://github.com/christianlouis/DocuElevate/issues" Changelog = "https://github.com/christianlouis/DocuElevate/blob/main/CHANGELOG.md" [tool.setuptools.dynamic] version = {file = "VERSION"} [tool.semantic_release] version_toml = [] version_source = "tag" commit_version_number = true tag_format = "v{version}" major_on_zero = false allow_zero_version = true build_command = """ chmod +x scripts/generate_build_metadata.sh ./scripts/generate_build_metadata.sh """ [tool.semantic_release.branches.main] match = "main" prerelease = false [tool.semantic_release.changelog] template_dir = "templates" exclude_commit_patterns = [ "^chore\\(release\\):", "^Merge", "^Bump version", ] [tool.semantic_release.changelog.default_templates] changelog_file = "CHANGELOG.md" [tool.semantic_release.changelog.environment] block_start_string = "{%" block_end_string = "%}" variable_start_string = "{{" variable_end_string = "}}" comment_start_string = "{#" comment_end_string = "#}" trim_blocks = false lstrip_blocks = false newline_sequence = "\n" keep_trailing_newline = false extensions = [] autoescape = true [tool.semantic_release.commit_parser_options] allowed_tags = [ "feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", ] minor_tags = ["feat"] patch_tags = ["fix", "perf"] default_bump_level = 0 [tool.semantic_release.remote] name = "origin" type = "github" ignore_token_for_push = false [tool.semantic_release.remote.token] env = "GH_TOKEN" [tool.semantic_release.publish] dist_glob_patterns = [] upload_to_vcs_release = true upload_to_pypi = false upload_to_repository = false # Black configuration [tool.black] line-length = 120 target-version = ['py311'] include = '\.pyi?$' extend-exclude = ''' /( # directories \.eggs | \.git | \.hg | \.mypy_cache | \.tox | \.venv | build | dist | migrations )/ ''' # isort configuration [tool.isort] profile = "black" line_length = 120 skip_gitignore = true known_first_party = ["app"] sections = ["FUTURE", "STDLIB", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"] # pytest configuration [tool.pytest.ini_options] minversion = "7.0" testpaths = ["tests"] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = [ "-v", "--strict-markers", "--strict-config", "--cov=app", "--cov-report=term-missing", "--cov-report=html", "--cov-branch", ] markers = [ "unit: Unit tests for individual functions/methods", "integration: Integration tests for API endpoints and workflows", "slow: Tests that take significant time to run", "security: Security-related tests", "requires_external: Tests requiring external services (OpenAI, Azure, etc.)", "requires_db: Tests requiring database", "requires_redis: Tests requiring Redis", "e2e: End-to-end tests with full infrastructure (requires Docker)", "requires_docker: Tests requiring Docker containers (testcontainers)", ] # mypy configuration [tool.mypy] python_version = "3.11" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = false disallow_incomplete_defs = false check_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true warn_unused_ignores = true warn_no_return = true warn_unreachable = true strict_equality = true ignore_missing_imports = true # Coverage configuration [tool.coverage.run] source = ["app"] omit = [ "*/tests/*", "*/migrations/*", "*/__pycache__/*", "*/venv/*", "*/env/*", ] [tool.coverage.report] precision = 2 show_missing = true skip_covered = false exclude_lines = [ "pragma: no cover", "def __repr__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", "@abstractmethod", ]