[tool.poetry]
name = "jrnl"
version = "v4.1"
description = "Collect your thoughts and notes without leaving the command line."
authors = [
  "jrnl contributors <maintainers@jrnl.sh>",
  "Manuel Ebert <manuel@1450.me>",
  "Jonathan Wren <jonathan@nowandwren.com>",
  "Micah Ellison <micahellison@gmail.com>",
]
maintainers = ["Jonathan Wren and Micah Ellison <maintainers@jrnl.sh>"]
license = "GPL-3.0-only"
readme = "README.md"
homepage = "https://jrnl.sh"
repository = "https://github.com/jrnl-org/jrnl"
classifiers = [
  "Topic :: Office/Business :: News/Diary",
  "Environment :: Console",
  "Operating System :: OS Independent",
]

[tool.poetry.urls]
"Documentation" = "https://jrnl.sh"
"Issue Tracker" = "https://github.com/jrnl-org/jrnl/issues"
"Funding" = "https://opencollective.com/jrnl"

[tool.poetry.dependencies]
python = ">=3.10.0, <3.13"

colorama = ">=0.4"          # https://github.com/tartley/colorama/blob/master/CHANGELOG.rst
cryptography = ">=3.0"      # https://cryptography.io/en/latest/api-stability.html
keyring = ">=21.0"          # https://github.com/jaraco/keyring#integration
parsedatetime = ">=2.6"
python-dateutil = "^2.8"    # https://github.com/dateutil/dateutil/blob/master/RELEASING
pyxdg = ">=0.27.0"
"ruamel.yaml" = ">=0.17.22"
rich = ">=12.2.0, <14.0.0"


# dayone-only deps
tzlocal = ">=4.0"      # https://github.com/regebro/tzlocal/blob/master/CHANGES.txt
mkdocs-i18n = "^0.4.6"

[tool.poetry.dev-dependencies]
black = { version = ">=21.5b2", allow-prereleases = true }
ipdb = "*"
mkdocs = ">=1.4"
parse-type = ">=0.6.0"
poethepoet = "*"
pytest = ">=6.2,<=8.1"
pytest-bdd = ">=6.0"
pytest-clarity = "*"
pytest-xdist = ">=2.5.0"
requests = "*"
ruff = ">=0.0.276"
toml = ">=0.10"
tox = "*"
xmltodict = "*"
mkdocs-i18n = "^0.4.6"

#[tool.poetry.plugins."mkdocs.plugins"]
#i18n = "mkdocs_i18n.plugin:I18nPlugin"

[tool.poetry.scripts]
jrnl = 'jrnl.main:run'

[tool.poe.tasks]
docs-check.default_item_type = "script"
docs-check.sequence = [
  "tasks:delete_files(['sitemap.xml', 'config.json'])",
  "tasks:generate_sitemap",
  "tasks:output_file('sitemap.xml')",
  "tasks:generate_pa11y_config_from_sitemap",
  "tasks:output_file('config.json')",
  "tasks:run_shell('npx pa11y-ci -c config.json')",
  "tasks:delete_files(['sitemap.xml', 'config.json'])",
]
docs-run = [{ cmd = "mkdocs serve" }]

test-run = [{ cmd = "tox -q -e py --" }]

# Groups of tasks
format.default_item_type = "cmd"
format.sequence = [
  "ruff check . --select I --fix", # equivalent to "isort ."
  "black .",
]

lint.default_item_type = "cmd"
lint.sequence = [
  "poetry --version",
  "poetry check",
  "ruff --version",
  "ruff .",
  "black --version",
  "black --check .",
]

test = ["lint", "test-run"]

[tool.pytest.ini_options]
minversion = "6.0"
required_plugins = ["pytest-bdd"]
markers = ["todo", "skip_win", "skip_posix", "on_win", "on_posix"]
addopts = ["--pdbcls=IPython.terminal.debugger:Pdb", "--tb=native", "-n=auto"]

filterwarnings = [
  "ignore::DeprecationWarning",
  "ignore:[WinError 32].*",
  "ignore:[WinError 5].*",
]

[tool.ruff]
line-length = 88
target-version = "py310"

# https://beta.ruff.rs/docs/rules/
select = [
  'F',     # Pyflakes
  'E',     # pycodestyle errors
  'W',     # pycodestyle warnings
  'I',     # isort
  'ASYNC', # flake8-async
  'S110',  # try-except-pass
  'S112',  # try-except-continue
  'EM',    # flake8-errmsg
  'ISC',   # flake8-implicit-str-concat
  'Q',     # flake8-quotes
  'RSE',   # flake8-raise
  'TID',   # flake8-tidy-imports
  'TCH',   # flake8-type-checking
  'T100',  # debugger, don't allow break points
  'ICN',   # flake8-import-conventions
]
exclude = [".git", ".tox", ".venv", "node_modules"]

[tool.ruff.isort]
force-single-line = true
known-first-party = ["jrnl", "tests"]

[tool.ruff.per-file-ignores]
"__init__.py" = ["F401"] # unused imports

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

[tool.tox]
# see: https://tox.wiki/en/latest/example/basic.html
legacy_tox_ini = """
[tox]
envlist = py
isolated_build = True

[testenv]
deps =
  pytest >=6.2,<=8.1
  pytest-bdd >=6.0
  pytest-xdist >=2.5.0
  parse-type >=0.6.0
  toml >=0.10

commands = pytest {posargs}
passenv = HOME
"""
