[build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [project] name = "pythonnative" version = "0.13.1" description = "Cross-platform native UI toolkit for Android and iOS" authors = [ { name = "Owen Carey" } ] readme = "README.md" requires-python = ">=3.10" license = { file = "LICENSE" } classifiers = [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Software Development :: User Interfaces", ] dependencies = [ "requests>=2.31.0", ] [project.optional-dependencies] ios = [ "rubicon-objc>=0.4.6,<0.5.0", ] docs = [ "mkdocs>=1.5", "mkdocs-material[imaging]>=9.5", "mkdocstrings[python]>=0.24", "mkdocs-autorefs>=1.0", "pymdown-extensions>=10.7", ] dev = [ "black>=24.0", "ruff>=0.5", "mypy>=1.10", "pytest>=8.0", ] ci = [ "black>=24.0", "ruff>=0.5", "mypy>=1.10", "pytest>=8.0", ] [project.scripts] pn = "pythonnative.cli.pn:main" [project.urls] Homepage = "https://github.com/pythonnative/pythonnative" Repository = "https://github.com/pythonnative/pythonnative" Issues = "https://github.com/pythonnative/pythonnative/issues" Documentation = "https://docs.pythonnative.com/" [tool.setuptools.packages.find] where = ["src"] [tool.setuptools] license-files = ["LICENSE*"] # Include template directories inside the package so importlib.resources can find them [tool.setuptools.package-data] pythonnative = [ "templates/**", ] [tool.ruff] target-version = "py39" line-length = 120 extend-exclude = [ "experiments", "apps", "templates", "docs", ] [tool.ruff.lint] # Docstring (D) rules use the Google convention; see [tool.ruff.lint.pydocstyle]. # Selectively enabled so tests/examples/templates aren't penalized. select = ["E", "F", "I", "D"] # D107 (missing __init__ docstring): mkdocstrings is configured to merge # __init__ into the class docstring, so the class docstring is the source of truth. # D105 (magic method docstring): most are self-explanatory (__repr__, __eq__, etc.). # D203/D213: conflict with Google convention defaults; ruff auto-suppresses # these via `convention = "google"`, but we list them defensively. ignore = ["D107", "D105", "D203", "D213"] [tool.ruff.lint.per-file-ignores] "tests/**/*.py" = ["D"] "examples/**/*.py" = ["D"] "src/pythonnative/templates/**/*.py" = ["D"] "setup.py" = ["D"] "conftest.py" = ["D"] # Platform handler subclasses implement the ViewHandler ABC defined in # native_views/base.py, which carries the canonical docstrings for the # protocol. The concrete classes are internal (registered by name in # NativeViewRegistry, never imported by users), so requiring per-method # docstrings would only add boilerplate that repeats the ABC. "src/pythonnative/native_views/android.py" = ["D101", "D102"] "src/pythonnative/native_views/ios.py" = ["D101", "D102"] [tool.ruff.lint.pydocstyle] convention = "google" [tool.black] line-length = 120 target-version = ['py39'] # ── Semantic Release ──────────────────────────────────────────────── [tool.semantic_release] version_toml = ["pyproject.toml:project.version"] version_variables = ["src/pythonnative/__init__.py:__version__"] commit_message = "chore(release): v{version}" tag_format = "v{version}" major_on_zero = false [tool.semantic_release.branches.main] match = "main" prerelease = false [tool.semantic_release.changelog] changelog_file = "CHANGELOG.md" exclude_commit_patterns = [ "^chore\\(release\\):", ] [tool.semantic_release.commit_parser_options] allowed_tags = [ "build", "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "revert", "style", "test", ] minor_tags = ["feat"] patch_tags = ["fix", "perf"]