[project] name = "pelican" authors = [{ name = "Justin Mayer", email = "authors@getpelican.com" }] description = "Static site generator supporting Markdown and reStructuredText" version = "4.9.1" license = { text = "AGPLv3" } readme = "README.rst" keywords = ["static site generator", "static sites", "ssg"] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Framework :: Pelican", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Content Management System", "Topic :: Internet :: WWW/HTTP :: Site Management", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: Markup :: Markdown", "Topic :: Text Processing :: Markup :: HTML", "Topic :: Text Processing :: Markup :: reStructuredText", ] requires-python = ">=3.8.1,<4.0" dependencies = [ "blinker>=1.7.0", "docutils>=0.20.1", "feedgenerator>=2.1.0", "jinja2>=3.1.2", "ordered-set>=4.1.0", "pygments>=2.16.1", "python-dateutil>=2.8.2", "rich>=13.6.0", "unidecode>=1.3.7", "backports-zoneinfo>=0.2.1; python_version < \"3.9\"", "watchfiles>=0.21.0", "tzdata; sys_platform == 'win32'", ] [project.optional-dependencies] markdown = ["markdown>=3.1"] [project.urls] Homepage = "https://getpelican.com" Funding = "https://donate.getpelican.com/" "Issue Tracker" = "https://github.com/getpelican/pelican/issues" Repository = "https://github.com/getpelican/pelican" Documentation = "https://docs.getpelican.com" [project.scripts] pelican = "pelican.__main__:main" pelican-import = "pelican.tools.pelican_import:main" pelican-plugins = "pelican.plugins._utils:list_plugins" pelican-quickstart = "pelican.tools.pelican_quickstart:main" pelican-themes = "pelican.tools.pelican_themes:main" [tool.autopub] project-name = "Pelican" git-username = "botpub" git-email = "52496925+botpub@users.noreply.github.com" changelog-file = "docs/changelog.rst" changelog-header = "###############" version-header = "=" [tool.pdm] ignore_package_warnings = ["sphinx"] [tool.pdm.scripts] docbuild = "invoke docbuild" docserve = "invoke docserve" lint = "invoke lint" test = "invoke tests" [tool.pdm.dev-dependencies] dev = [ "BeautifulSoup4>=4.12.2", "jinja2>=3.1.2", "lxml>=4.9.3", "markdown>=3.5.1", "typogrify>=2.0.7", "sphinx>=7.1.2", "sphinxext-opengraph>=0.9.0", "furo==2023.9.10", "livereload>=2.6.3", "psutil>=5.9.6", "pygments>=2.16.1", "pytest>=7.4.3", "pytest-cov>=4.1.0", "pytest-sugar>=0.9.7", "pytest-xdist>=3.4.0", "tox>=4.11.3", "invoke>=2.2.0", "ruff>=0.1.15,<0.2.0", "tomli>=2.0.1; python_version < \"3.11\"", ] [tool.pdm.build] source-includes = [ "CONTRIBUTING.rst", "THANKS", "docs/changelog.rst", "samples/", ] [build-system] requires = ["pdm-backend"] build-backend = "pdm.backend" [tool.ruff.lint] # see https://docs.astral.sh/ruff/configuration/#using-pyprojecttoml # "F" contains autoflake, see https://github.com/astral-sh/ruff/issues/1647 # add more rules select = [ # default Ruff checkers as of ruff 0.1.3: E4, E7, E9, F "E4", "E7", "E9", "F", # pyflakes # the rest in alphabetical order: # TODO: "A", # flake8-builtins # TODO: "ARG", # flake8-unused-arguments "B", # flake8-bugbear # TODO: "BLE", # flake8-blind-except # TODO: Do I want "COM", # flake8-commas "C4", # flake8-comprehensions # TODO: "DJ", # flake8-django # TODO: "DTZ", # flake8-datetimez # TODO: "EM", # flake8-errmsg "EXE", # flake8-executable # TODO: "FURB", # refurb # TODO: "FBT", # flake8-boolean-trap # TODO: "G", # flake8-logging-format "I", # isort "ICN", # flake8-import-conventions "INP", # flake8-no-pep420 # TODO: "INT", # flake8-gettext "ISC", # flake8-implicit-str-concat # TODO: "LOG", # flake8-logging "PERF", # perflint "PIE", # flake8-pie "PL", # pylint "PYI", # flake8-pyi # TODO: "RET", # flake8-return "RSE", # flake8-raise "RUF", # TODO: "SIM", # flake8-simplify "SLF", # flake8-self "SLOT", # flake8-slots "TID", # flake8-tidy-imports "UP", # pyupgrade "Q", # flake8-quotes "TCH", # flake8-type-checking "T10", # flake8-debugger "T20", # flake8-print # TODO: "S", # flake8-bandit "YTT", # flake8-2020 # TODO: add more flake8 rules ] ignore = [ # suppression in order of # of violations in Dec 2023: "B007", # unused-loop-control-variable "T201", # print "PLW2901", # redefined-loop-name "SLF001", # private-member-access "RUF001", # ambiguous-unicode-character-string "PLR2004", # magic-value-comparison "PLR0912", # too-many-branches "PLR0913", # too-many-arguments "RUF005", # collection-literal-concatenation "RUF012", # mutable-class-default "PLR0915", # too-many-statements "INP001", # implicit-namespace-package "RUF015", # unnecessary-iterable-allocation-for-first-element "PLR1722", # sys-exit-alias "ISC001", # single-line-implicit-string-concatenation "C408", # unnecessary-collection-call "B904", # raise-without-from-inside-except "UP007", # use `|` operator for union type annotations (PEP 604) "UP031", # printf-string-formatting "PLR5501", # collapsible-else-if "PERF203", # try-except-in-loop "B006", # mutable-argument-default "PLR1714", # repeated-equality-comparison "PERF401", # manual-list-comprehension # TODO: these only have one violation each in Dec 2023: "SLOT000", # no-slots-in-str-subclass "PYI024", # collections-named-tuple "PLW0603", # global-statement "PIE800", # unnecessary-spread "ISC003", # explicit-string-concatenation "EXE002", # shebang-missing-executable-file "C401", # unnecessary-generator-set "C416", # unnecessary `list` comprehension "B028", # no-explicit-stacklevel "B008", # function-call-in-default-argument ] [tool.ruff.lint.extend-per-file-ignores] "pelican/__init__.py" = [ # allow imports after a call to a function, see the file "E402" ]