content: [project]
  name = "maptasker"
  dynamic = [ "version" ]
  version = "9.0.0"
  description = "Utility to display your entire Android 'Tasker' configuration on your Desktop."
  requires-python = ">=3.11,<4.0"
  authors = [
      { name = "Michael Rubin", email = "mikrubin@gmail.com" },
  ]
  readme = "README_PyPl.md"
  license = "MIT License (MIT)"
  repository = "https://github.com/mctinker/Map-Tasker"
  # changelog = "https://github.com/mctinker/Map-Tasker/blob/Master/Changelog.md"
  keywords = [
      "tasker",
      "Tasker",
      "map tasker",
      "configuration",
      "tasker configuration",
      "tasker",
      "tasker configuration",
  ]
  packages = [
      { include = "maptasker"}
  ]
  include = [
      "**/maptasker/**/*.py",
      "**/maptasker/assets/*.*",
      "**/sample.prj.xml",
  ]
  exclude = [
      "run_test.py",
      "**/maptasker/**/backup.xml",
      "**/maptasker/maptasker.log",
      "**/maptasker/MapTasker.html",
      "**/maptasker/.MapTasker_RunCount.txt",
      "**/maptasker/.arguments.txt",
      "**/maptasker/**/__pycache__",
      "**/maptasker/**/.dep-tree.yml",
  ]
  dependencies = [
      "anthropic>=0.69.0",  #  Ai Anthropics support
      # "customtkinter>=5.2.2",  # GUI
      "darkdetect>=0.8.0",  # Appearance mode detection
      "defusedxml>=0.7.1",  # More secure xml parser
      # "google-generativeai>=0.8.5",  #  Ai Google Generative support
      "google-genai>=1.38.0",  # AI Google Generative support
      "ollama>=0.6.0",  #  Ai Ollama support > cria rquires this
      "openai>=2.3.0",  #  Ai OpenAi support
      "packaging>=25.0",  # Customtkinter needs this
      "pillow==11.3.0",  # Image support in GUI.  Revert back to 11.2.0 to avoid UV bug with tkinter.
      "psutil>=7.1.0",  #  System monitoring
      "requests>=2.32.5",  # HTTP Server function request
      "tomli_w>=1.2.0",  # Write toml file
      "webcolors>=24.11.1", # For color matching
      "vulture (>=2.14,<3.0)",
      "black (>=25.1.0,<26.0.0)",
  ]
  
  [project.scripts]
  maptasker = "maptasker.main:main"
  
  [project.urls]
  Homepage = "https://github.com/mctinker/Map-Tasker"
  "Bug Tracker" = "https://github.com/mctinker/Map-Tasker/issues"
  Changelog = "https://github.com/mctinker/Map-Tasker/CHANGELOG.md"
  
  
  [tool.poetry]
  requires-poetry = ">=2.0"
  
  [[tool.poetry.source]]
  name = "testpypi"
  url = "https://test.pypi.org/legacy/"
  priority = "primary"
  
  [[tool.poetry.source]]
  name = "PyPI"
  priority = "primary"
  
  [tool.ruff]
  include = ["pyproject.toml", "maptasker/custom_overrides/**/*.py", "maptasker/src/**/*.py", "scripts/**/*.py"]
  respect-gitignore = true
  line-length = 120
  # editor.formatOnSaveMode = "modificationsIfAvailable"
  select = [
      'A',    # Builtins
      'ANN',  # Annotations
      'ARG',  # Unused arguments
      'B',    # Bugbear
      'BLE',  # Blind except
      'C4',   # Comprehensions
      'C90',  # mccabe
      'COM',  # Commas
      'D1',   # Undocumented public elements
  #    'D2',   # Docstring conventions
      'D3',   # Triple double quotes
  #   'D4',   # Docstring text format
      'DTZ',  # Datetimes
      'EM',   # Error messages
  #    'ERA',  # Commented-out code
  #    'EXE',  # Executable
      'F',    # Pyflakes
      'FA',   # __future__ annotations
      'FLY',  # F-strings
      # 'FURB', # Refurb
      'G',    # Logging format
      'I',    # Isort
      'ICN',  # Import conventions
      'INP',  # Disallow PEP-420 (Implicit namespace packages)
      'INT',  # gettext
      'ISC',  # Implicit str concat
      # 'LOG',  # Logging
      'N',    # PEP-8 Naming
      'NPY',  # Numpy
      'PERF', # Unnecessary performance costs
      'PGH',  # Pygrep hooks
      'PIE',  # Unnecessary code
      'PL',   # Pylint
      'PT',   # Pytest
      # 'PTH',  # Use Pathlib
      'PYI',  # Stub files
      'Q',    # Quotes
      'RET',  # Return
      'RUF',  # Ruff
      'RSE',  # Raise
      'S',    # Bandit
      'SIM',  # Code simplification
      'SLF',  # Private member access
      'SLOT', # __slots__
      'T10',  # Debugger
      'T20',  # Print
      'TCH',  # Type checking
      'TID',  # Tidy imports
      'TRY',  # Exception handling
      'UP',   # Pyupgrade
      'W',    # Warnings
      'YTT',  # sys.version
  ]
  # Exclude a variety of commonly ignored directories.
  exclude = [
      ".direnv",
      "dist",
      ".eggs",
      ".git",
      ".git-rewrite",
      ".hg",
      ".mypy_cache",
      ".pyenv",
      ".pytest_cache",
      ".pytype",
      ".ruff_cache",
      ".venv",
      ".vscode",
      "__pypackages__",
      "_build",
      "build",
      "dist",
      "site-packages",
      "venv",
      ".md",
      "__init__.py",
      "**/maptasker/assets/*.*",
      "**/maptasker/MapTasker.html",
      "**/maptasker/.MapTasker_RunCount.txt",
      "**/maptasker/.arguments.txt",
      "**/maptasker/**/__pycache__",
      "**/maptasker/**/.dep-tree.yml"
  ]
  
  ignore = [
      "PLR2004",  # Constant value comparison
      "SIM115",   # Missing "with" on oepn file
      "S606",     # No shell
      "B009",     # Do not perform function calls in argument defaults
      "T201",     # Print found
      "ANN101",   # Missing type annotation for self
      ]
  show-fixes = true
  src = ['src',]
  
  [tool.ruff.lint.pycodestyle]
  ignore-overlong-task-comments = true
  
  [tool.ruff.flake8-quotes]
  docstring-quotes = 'double'
  multiline-quotes = 'double'
  
  [tool.ruff.mccabe]
  # Unlike Flake8, default to a complexity level of 15.
  max-complexity = 15
  
  [tool.ruff.per-file-ignores]
  # https://beta.ruff.rs/docs/rules/
  '__init__.py' = ['F401','F403','F405',]
  'tests/*' = ['ANN', 'ARG', 'INP001', 'S101',]
  
  [tool.ruff.lint.pylint]
  max-args = 15
  max-branches = 20
  max-returns = 10
  max-statements = 120
  max-locals = 20
  max-nested-blocks = 10
  
  [tool.ruff.flake8-tidy-imports]
  ban-relative-imports = 'all'
  
  [tool.ruff.format]
  quote-style = "double"
  # indent-style = "tab"
  docstring-code-format = true
  # Like Black, automatically detect the appropriate line ending.
  line-ending = "auto"
  
  [tool.black]
  --line-length = 120
  line-length = 120
  
  [build-system]
  requires = ["poetry-core"]
  build-backend = "poetry.core.masonry.api"
  
  [dependency-groups]
  dev = [
      "ruff>=0.11.6",
  ]
  
  [tool.pytest.ini_options]
  pythonpath = [
      "."
  ]
  
  [tool.poetry.group.test.dependencies]
  pytest = "^7.3.2"
  pytest-mock = "*"
  
  # Bump version identifiers.  Repeat this chunk for each file.
  [tool.poetry_bumpversion.replacements]
  files = ["maptasker/src/sysconst.py"]
  search = 'VERSION = "{current_version}"'
  replace = 'VERSION = "{new_version}"'
  
  
  
  
  
  
  [tool.poetry.group.dev.dependencies]
  black = "^25.9.0"
  # +black = { version = "*", allows-prereleases = true }
  line-profiler = "^4.1.3"
  poetry-bumpversion = "^0.3.3"
  pyinstrument = "^5.0.0"
  mypy = "^1.17.1"
  screeninfo = "^0.8.1"  # Needed for Windows 11 window sizing.
  types-defusedxml = "^0.7.0"
  vulture = "^2.14"
  
  
  
  
  
  
  [tool.poetry.group.dev]
  optional = true
  