[project] name = "kmp-proto-manipulator" version = "0.1.0" description = "Manipulate Generated .kt files from .proto" authors = [ {name = "Tim Camise",email = "tcamise@gopro.com"} ] readme = "README.md" requires-python = ">=3.11" [tool.poetry.scripts] set-kmp-scopes = "kmp_proto_manipulator.scripts.set_kotlin_proto_scopes:entrypoint" [tool.poetry.dependencies] python = "^3.11" pydantic = "^2" pyparsing = "^3" [tool.poetry.group.dev.dependencies] pydoclint = "^0" pydocstyle = { extras = ["toml"], version = "^6" } pytest = "^7" black = "*" pylint = "^2" mypy = "*" pytest-html = "==4.0.0rc4" poethepoet = "^0" isort = "^5" [build-system] requires = ["poetry-core>=2.0.0,<3.0.0"] build-backend = "poetry.core.masonry.api" [tool.poe.tasks.tests] cmd = "pytest tests -vv" help = "Run unit tests" [tool.poe.tasks._types] cmd = "mypy kmp_proto_manipulator" help = "Check types" # We're only enforcing documentation on public objects [tool.poe.tasks._pylint] cmd = "pylint --no-docstring-rgx=_|main|parse_arguments|entrypoint kmp_proto_manipulator" help = "Run pylint" [tool.poe.tasks._isort] cmd = "isort kmp_proto_manipulator tests" help = "Apply black formatting to source code" [tool.poe.tasks.lint] sequence = ["_types", "_isort", "_pylint"] help = "Lint code" [tool.poe.tasks.format] cmd = "black kmp_proto_manipulator tests" help = "Apply black formatting to source code" [tool.poe.tasks._pydocstyle] cmd = "pydocstyle --config pyproject.toml -v kmp_proto_manipulator" help = "check docstrings style" [tool.poe.tasks._doclint] cmd = "pydoclint kmp_proto_manipulator" help = "validate docstrings" [tool.poe.tasks.docstrings] sequence = ["_pydocstyle", "_doclint"] help = "Analyze docstrings for consistency and errors" [tool.poe.tasks._clean_artifacts] cmd = "rm -rf **/__pycache__ *.csv *.mp4 *.jpg *.log .mypy_cache .nox" help = "Clean testing artifacts and pycache" [tool.poe.tasks._clean_tests] cmd = "rm -rf .reports && rm -rf .pytest_cache" help = "Clean test reports" [tool.poe.tasks.clean] sequence = ["_clean_artifacts", "_clean_tests"] help = "Clean everything" [tool.poe.tasks.all] sequence = ["format", "lint", "tests", "docstrings"] help = "Format, check types, lint, and run unit tests" [tool.mypy] ignore_missing_imports = true warn_redundant_casts = true disallow_untyped_calls = false disallow_untyped_defs = true disallow_incomplete_defs = true disallow_untyped_decorators = false warn_unused_ignores = true warn_unreachable = false show_error_context = true pretty = true [tool.pylint.'MASTER'] load-plugins = "pylint.extensions.docparams" accept-no-param-doc = "yes" accept-no-return-doc = "yes" default-docstring-type = "google" ignore-paths = "kmp_proto_manipulator/models/schemas/" [tool.pylint.'MESSAGES CONTROL'] disable = [ "unnecessary-lambda", "unnecessary-lambda-assignment", "too-many-ancestors", "no-name-in-module", "too-many-nested-blocks", "unspecified-encoding", "consider-using-with", "abstract-method", "useless-type-doc", "cyclic-import", "logging-fstring-interpolation", "logging-format-interpolation", "duplicate-code", "global-statement", "too-few-public-methods", "too-many-arguments", "too-many-instance-attributes", "too-many-branches", "too-many-locals", "too-many-lines", "too-many-statements", "fixme", "protected-access", "invalid-name", "useless-param-doc", ] [tool.pylint.'FORMAT'] max-line-length = 300 # This is handled by black [tool.pytest.ini_options] log_auto_indent = true log_cli = true log_cli_level = "ERROR" log_cli_format = "%(asctime)s %(levelname)s %(message)s" log_cli_date_format = "%H:%M:%S" log_file_level = "DEBUG" log_file_format = "%(threadName)13s: %(name)40s:%(lineno)5d %(asctime)s.%(msecs)03d %(levelname)-8s | %(message)s" log_file_date_format = "%H:%M:%S" filterwarnings = "ignore::DeprecationWarning" addopts = [ "-s", "--capture=tee-sys", "--html=.reports/test_report.html", "--self-contained-html", ] [tool.black] line-length = 120 exclude = ".venv" [tool.isort] line_length = 120 [tool.pydocstyle] convention = "google" add-ignore = "D415, D107, D105, D402" [tool.pydoclint] style = 'google' require-return-section-when-returning-nothing = false ignore-underscore-args = true should-document-private-class-attributes = false check-class-attributes = false