--- /dev/null
+{
+ "name": "pallets/jinja",
+ "image": "mcr.microsoft.com/devcontainers/python:3",
+ "customizations": {
+ "vscode": {
+ "settings": {
+ "python.defaultInterpreterPath": "${workspaceFolder}/.venv",
+ "python.terminal.activateEnvInCurrentTerminal": true,
+ "python.terminal.launchArgs": [
+ "-X",
+ "dev"
+ ]
+ }
+ }
+ },
+ "onCreateCommand": ".devcontainer/on-create-command.sh"
+}
--- /dev/null
+#!/bin/bash
+set -e
+python3 -m venv --upgrade-deps .venv
+. .venv/bin/activate
+pip install -r requirements/dev.txt
+pip install -e .
+pre-commit install --install-hooks
charset = utf-8
max_line_length = 88
-[*.{yml,yaml,json,js,css,html}]
+[*.{css,html,js,json,jsx,scss,ts,tsx,yaml,yml}]
indent_size = 2
+++ /dev/null
-[flake8]
-extend-select =
- # bugbear
- B
- # bugbear opinions
- B9
- # implicit str concat
- ISC
-extend-ignore =
- # slice notation whitespace, invalid
- E203
- # line length, handled by bugbear B950
- E501
- # bare except, handled by bugbear B001
- E722
- # zip with strict=, requires python >= 3.10
- B905
- # string formatting opinion, B028 renamed to B907
- B028
- B907
-# up to 88 allowed by bugbear B950
-max-line-length = 80
-per-file-ignores =
- # __init__ exports names
- src/jinja2/__init__.py: F401
- # not relevant to jinja's compiler
- src/jinja2/compiler.py: B906
- src/jinja2/idtracking.py: B906
---
<!--
-This issue tracker is a tool to address bugs in Jinja itself. Please
-use Pallets Discord or Stack Overflow for questions about your own code.
+This issue tracker is a tool to address bugs in Jinja itself. Please use
+GitHub Discussions or the Pallets Discord for questions about your own code.
Replace this comment with a clear outline of what the bug is.
-->
blank_issues_enabled: false
contact_links:
- - name: Security issue
- url: security@palletsprojects.com
- about: Do not report security issues publicly. Email our security contact.
- - name: Questions
- url: https://stackoverflow.com/questions/tagged/Jinja?tab=Frequent
- about: Search for and ask questions about your code on Stack Overflow.
- - name: Questions and discussions
+ - name: Questions on Discussions
+ url: https://github.com/pallets/jinja/discussions/
+ about: Ask questions about your own code on the Discussions tab.
+ - name: Questions on Chat
url: https://discord.gg/pallets
- about: Discuss questions about your code on our Discord chat.
+ about: Ask questions about your own code on our Discord chat.
<!--
Replace this comment with a description of what the feature should do.
-Include details such as links relevant specs or previous discussions.
+Include details such as links to relevant specs or previous discussions.
-->
<!--
Replace this comment with an example of the problem which this feature
-would resolve. Is this problem solvable without changes to Jinja,
-such as by subclassing or using an extension?
+would resolve. Is this problem solvable without changes to Jinja, such
+as by subclassing or using an extension?
-->
version: 2
updates:
-- package-ecosystem: "github-actions"
- directory: "/"
- schedule:
- interval: "monthly"
- day: "monday"
- time: "16:00"
- timezone: "UTC"
+ - package-ecosystem: github-actions
+ directory: /
+ schedule:
+ interval: monthly
+ ignore:
+ # slsa depends on upload/download v3
+ - dependency-name: actions/upload-artifact
+ versions: '>= 4'
+ - dependency-name: actions/download-artifact
+ versions: '>= 4'
+ groups:
+ github-actions:
+ patterns:
+ - '*'
+ - package-ecosystem: pip
+ directory: /requirements/
+ schedule:
+ interval: monthly
+ groups:
+ python-requirements:
+ patterns:
+ - '*'
<!--
-Before opening a PR, open a ticket describing the issue or feature the PR will address. Follow the steps in CONTRIBUTING.rst.
+Before opening a PR, open a ticket describing the issue or feature the
+PR will address. An issue is not required for fixing typos in
+documentation, or other simple non-code changes.
-Replace this comment with a description of the change. Describe how it addresses the linked ticket.
+Replace this comment with a description of the change. Describe how it
+addresses the linked ticket.
-->
<!--
-Link to relevant issues or previous PRs, one per line. Use "fixes" to automatically close an issue.
--->
+Link to relevant issues or previous PRs, one per line. Use "fixes" to
+automatically close an issue.
-- fixes #<issue number>
+fixes #<issue number>
+-->
<!--
-Ensure each step in CONTRIBUTING.rst is complete by adding an "x" to each box below.
+Ensure each step in CONTRIBUTING.rst is complete, especially the following:
-If only docs were changed, these aren't relevant and can be removed.
+- Add tests that demonstrate the correct behavior of the change. Tests
+ should fail without the change.
+- Add or update relevant docs, in the docs folder and in code.
+- Add an entry in CHANGES.rst summarizing the change and linking to the issue.
+- Add `.. versionchanged::` entries in any relevant code docs.
-->
-
-Checklist:
-
-- [ ] Add tests that demonstrate the correct behavior of the change. Tests should fail without the change.
-- [ ] Add or update relevant docs, in the docs folder and in code.
-- [ ] Add an entry in `CHANGES.rst` summarizing the change and linking to the issue.
-- [ ] Add `.. versionchanged::` entries in any relevant code docs.
-- [ ] Run `pre-commit` hooks and fix any issues.
-- [ ] Run `pytest` and `tox`, no tests failed.
-name: 'Lock threads'
-# Lock closed issues that have not received any further activity for
-# two weeks. This does not close open issues, only humans may do that.
-# We find that it is easier to respond to new issues with fresh examples
-# rather than continuing discussions on old issues.
+name: Lock inactive closed issues
+# Lock closed issues that have not received any further activity for two weeks.
+# This does not close open issues, only humans may do that. It is easier to
+# respond to new issues with fresh examples rather than continuing discussions
+# on old issues.
on:
schedule:
- cron: '0 0 * * *'
-
permissions:
issues: write
pull-requests: write
-
concurrency:
group: lock
-
jobs:
lock:
runs-on: ubuntu-latest
steps:
- - uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
+ - uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5.0.1
with:
issue-inactive-days: 14
pr-inactive-days: 14
+ discussion-inactive-days: 14
outputs:
hash: ${{ steps.hash.outputs.hash }}
steps:
- - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
- - uses: actions/setup-python@5ccb29d8773c3f3f653e1705f474dfaa8a06a912
+ - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
+ - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
with:
python-version: '3.x'
- cache: 'pip'
- cache-dependency-path: 'requirements/*.txt'
+ cache: pip
+ cache-dependency-path: requirements*/*.txt
- run: pip install -r requirements/build.txt
# Use the commit date instead of the current date during the build.
- run: echo "SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
- name: generate hash
id: hash
run: cd dist && echo "hash=$(sha256sum * | base64 -w0)" >> $GITHUB_OUTPUT
- - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce
+ - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with:
path: ./dist
provenance:
- needs: ['build']
+ needs: [build]
permissions:
actions: read
id-token: write
contents: write
# Can't pin with hash due to how this workflow works.
- uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.4.0
+ uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.10.0
with:
base64-subjects: ${{ needs.build.outputs.hash }}
create-release:
# Upload the sdist, wheels, and provenance to a GitHub release. They remain
# available as build artifacts for a while as well.
- needs: ['provenance']
+ needs: [provenance]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
+ - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
- name: create release
run: >
gh release create --draft --repo ${{ github.repository }}
env:
GH_TOKEN: ${{ github.token }}
publish-pypi:
- needs: ['provenance']
+ needs: [provenance]
# Wait for approval before attempting to upload to PyPI. This allows reviewing the
# files in the draft release.
- environment: 'publish'
+ environment:
+ name: publish
+ url: https://pypi.org/project/Jinja2/${{ github.ref_name }}
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
- - uses: pypa/gh-action-pypi-publish@2f6f737ca5f74c637829c0f5c3acd0e29ea5e8bf
+ - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
+ - uses: pypa/gh-action-pypi-publish@81e9d935c883d0b210363ab89cf05f3894778450 # v1.8.14
+ with:
+ repository-url: https://test.pypi.org/legacy/
+ packages-dir: artifact/
+ - uses: pypa/gh-action-pypi-publish@81e9d935c883d0b210363ab89cf05f3894778450 # v1.8.14
with:
packages-dir: artifact/
- '*.md'
- '*.rst'
pull_request:
- branches:
- - main
- - '*.x'
paths-ignore:
- 'docs/**'
- '*.md'
- '*.rst'
jobs:
tests:
- name: ${{ matrix.name }}
- runs-on: ${{ matrix.os }}
+ name: ${{ matrix.name || matrix.python }}
+ runs-on: ${{ matrix.os || 'ubuntu-latest' }}
strategy:
fail-fast: false
matrix:
include:
- - {name: Linux, python: '3.11', os: ubuntu-latest, tox: py311}
- - {name: Windows, python: '3.11', os: windows-latest, tox: py311}
- - {name: Mac, python: '3.11', os: macos-latest, tox: py311}
- - {name: '3.12-dev', python: '3.12-dev', os: ubuntu-latest, tox: py312}
- - {name: '3.10', python: '3.10', os: ubuntu-latest, tox: py310}
- - {name: '3.9', python: '3.9', os: ubuntu-latest, tox: py39}
- - {name: '3.8', python: '3.8', os: ubuntu-latest, tox: py38}
- - {name: '3.7', python: '3.7', os: ubuntu-latest, tox: py37}
- - {name: 'PyPy', python: 'pypy-3.10', os: ubuntu-latest, tox: pypy310}
- - {name: Typing, python: '3.11', os: ubuntu-latest, tox: typing}
+ - {python: '3.12'}
+ - {name: Windows, python: '3.12', os: windows-latest}
+ - {name: Mac, python: '3.12', os: macos-latest}
+ - {python: '3.11'}
+ - {python: '3.10'}
+ - {python: '3.9'}
+ - {python: '3.8'}
+ - {python: '3.7'}
+ - {name: PyPy, python: 'pypy-3.10', tox: pypy310}
steps:
- - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
- - uses: actions/setup-python@5ccb29d8773c3f3f653e1705f474dfaa8a06a912
+ - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
+ - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
with:
python-version: ${{ matrix.python }}
- cache: 'pip'
- cache-dependency-path: 'requirements/*.txt'
- - name: update pip
- run: |
- pip install -U wheel
- pip install -U setuptools
- python -m pip install -U pip
+ allow-prereleases: true
+ cache: pip
+ cache-dependency-path: requirements*/*.txt
+ - run: pip install tox
+ - run: tox run -e ${{ matrix.tox || format('py{0}', matrix.python) }}
+ typing:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
+ - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
+ with:
+ python-version: '3.x'
+ cache: pip
+ cache-dependency-path: requirements*/*.txt
- name: cache mypy
- uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12
+ uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
path: ./.mypy_cache
- key: mypy|${{ matrix.python }}|${{ hashFiles('setup.cfg') }}
- if: matrix.tox == 'typing'
+ key: mypy|${{ hashFiles('pyproject.toml') }}
- run: pip install tox
- - run: tox run -e ${{ matrix.tox }}
+ - run: tox run -e typing
-*.so
-docs/_build/
-*.pyc
-*.pyo
-*.egg-info/
-*.egg
-build/
+.idea/
+.vscode/
+.venv*/
+venv*/
+__pycache__/
dist/
-.DS_Store
+.coverage*
+htmlcov/
.tox/
-.cache/
-.idea/
-env/
-venv/
-venv-*/
-.coverage
-.coverage.*
-htmlcov
-.pytest_cache/
-/.vscode/
-.mypy_cache
+docs/_build/
ci:
- autoupdate_branch: "3.1.x"
autoupdate_schedule: monthly
repos:
- - repo: https://github.com/asottile/pyupgrade
- rev: v3.15.0
+ - repo: https://github.com/astral-sh/ruff-pre-commit
+ rev: v0.4.1
hooks:
- - id: pyupgrade
- args: ["--py37-plus"]
- - repo: https://github.com/asottile/reorder-python-imports
- rev: v3.12.0
- hooks:
- - id: reorder-python-imports
- args: ["--application-directories", "src"]
- - repo: https://github.com/psf/black
- rev: 23.12.1
- hooks:
- - id: black
- - repo: https://github.com/PyCQA/flake8
- rev: 7.0.0
- hooks:
- - id: flake8
- additional_dependencies: [flake8-bugbear]
- - repo: https://github.com/peterdemin/pip-compile-multi
- rev: v2.6.3
- hooks:
- - id: pip-compile-multi-verify
+ - id: ruff
+ - id: ruff-format
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.5.0
+ rev: v4.6.0
hooks:
+ - id: check-merge-conflict
+ - id: debug-statements
- id: fix-byte-order-marker
- id: trailing-whitespace
- id: end-of-file-fixer
version: 2
build:
- os: ubuntu-20.04
+ os: ubuntu-22.04
tools:
- python: "3.10"
+ python: '3.12'
python:
install:
- requirements: requirements/docs.txt
+++ /dev/null
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, sex characteristics, gender identity and expression,
-level of experience, education, socio-economic status, nationality, personal
-appearance, race, religion, or sexual identity and orientation.
-
-## Our Standards
-
-Examples of behavior that contributes to creating a positive environment
-include:
-
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery and unwelcome sexual attention or
- advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
- address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
-
-## Scope
-
-This Code of Conduct applies both within project spaces and in public spaces
-when an individual is representing the project or its community. Examples of
-representing a project or community include using an official project e-mail
-address, posting via an official social media account, or acting as an appointed
-representative at an online or offline event. Representation of a project may be
-further defined and clarified by project maintainers.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at report@palletsprojects.com. All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an incident.
-Further details of specific enforcement policies may be posted separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
-
-[homepage]: https://www.contributor-covenant.org
-
-For answers to common questions about this code of conduct, see
-https://www.contributor-covenant.org/faq
+++ /dev/null
-include CHANGES.rst
-include tox.ini
-include requirements/*.txt
-graft artwork
-graft docs
-prune docs/_build
-graft examples
-graft tests
-include src/jinja2/py.typed
-global-exclude *.pyc
-Jinja
-=====
+# Jinja
Jinja is a fast, expressive, extensible templating engine. Special
placeholders in the template allow writing code similar to Python
restricting functionality too much.
-Installing
-----------
-
-Install and update using `pip`_:
-
-.. code-block:: text
-
- $ pip install -U Jinja2
-
-.. _pip: https://pip.pypa.io/en/stable/getting-started/
-
-
-In A Nutshell
--------------
+## In A Nutshell
.. code-block:: jinja
{% endblock %}
-Donate
-------
+## Donate
The Pallets organization develops and supports Jinja and other popular
packages. In order to grow the community of contributors and users, and
-allow the maintainers to devote more time to the projects, `please
-donate today`_.
-
-.. _please donate today: https://palletsprojects.com/donate
-
-
-Links
------
+allow the maintainers to devote more time to the projects, [please
+donate today][].
-- Documentation: https://jinja.palletsprojects.com/
-- Changes: https://jinja.palletsprojects.com/changes/
-- PyPI Releases: https://pypi.org/project/Jinja2/
-- Source Code: https://github.com/pallets/jinja/
-- Issue Tracker: https://github.com/pallets/jinja/issues/
-- Chat: https://discord.gg/pallets
+[please donate today]: https://palletsprojects.com/donate
# General --------------------------------------------------------------
-master_doc = "index"
+default_role = "code"
extensions = [
"sphinx.ext.autodoc",
+ "sphinx.ext.extlinks",
"sphinx.ext.intersphinx",
- "pallets_sphinx_themes",
"sphinxcontrib.log_cabinet",
- "sphinx_issues",
+ "pallets_sphinx_themes",
]
+autodoc_member_order = "bysource"
autodoc_typehints = "description"
-intersphinx_mapping = {"python": ("https://docs.python.org/3/", None)}
-issues_github_path = "pallets/jinja"
+autodoc_preserve_defaults = True
+extlinks = {
+ "issue": ("https://github.com/pallets/jinja/issues/%s", "#%s"),
+ "pr": ("https://github.com/pallets/jinja/pull/%s", "#%s"),
+}
+intersphinx_mapping = {
+ "python": ("https://docs.python.org/3/", None),
+}
# HTML -----------------------------------------------------------------
html_logo = "_static/jinja-logo-sidebar.png"
html_title = f"Jinja Documentation ({version})"
html_show_sourcelink = False
-
-# LaTeX ----------------------------------------------------------------
-
-latex_documents = [(master_doc, f"Jinja-{version}.tex", html_title, author, "manual")]
from jinja2.lexer import count_newlines
from jinja2.lexer import Token
-
_outside_re = re.compile(r"\\?(gettext|_)\(")
_inside_re = re.compile(r"\\?[()]")
BSD-3-Clause License
====================
-.. include:: ../LICENSE.rst
+.. literalinclude:: ../LICENSE.txt
+ :language: text
--- /dev/null
+[project]
+name = "Jinja2"
+description = "A very fast and expressive template engine."
+readme = "README.md"
+license = {file = "LICENSE.txt"}
+maintainers = [{name = "Pallets", email = "contact@palletsprojects.com"}]
+classifiers = [
+ "Development Status :: 5 - Production/Stable",
+ "Environment :: Web Environment",
+ "Intended Audience :: Developers",
+ "License :: OSI Approved :: BSD License",
+ "Operating System :: OS Independent",
+ "Programming Language :: Python",
+ "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
+ "Topic :: Text Processing :: Markup :: HTML",
+ "Typing :: Typed",
+]
+requires-python = ">=3.7"
+dependencies = ["MarkupSafe>=2.0"]
+dynamic = ["version"]
+
+[project.urls]
+Donate = "https://palletsprojects.com/donate"
+Documentation = "https://jinja.palletsprojects.com/"
+Changes = "https://jinja.palletsprojects.com/changes/"
+Source = "https://github.com/pallets/jinja/"
+Chat = "https://discord.gg/pallets"
+
+[project.optional-dependencies]
+i18n = ["Babel>=2.7"]
+
+[project.entry-points."babel.extractors"]
+jinja2 = "jinja2.ext:babel_extract[i18n]"
+
+[build-system]
+requires = ["flit_core<4"]
+build-backend = "flit_core.buildapi"
+
+[tool.flit.module]
+name = "jinja2"
+
+[tool.flit.sdist]
+include = [
+ "docs/",
+ "requirements/",
+ "tests/",
+ "CHANGES.md",
+ "tox.ini",
+]
+exclude = [
+ "docs/_build/",
+]
+
+[tool.pytest.ini_options]
+testpaths = ["tests"]
+filterwarnings = [
+ "error",
+]
+
+[tool.coverage.run]
+branch = true
+source = ["jinja2", "tests"]
+
+[tool.coverage.paths]
+source = ["src", "*/site-packages"]
+
+[tool.mypy]
+python_version = "3.8"
+files = ["src/jinja2"]
+show_error_codes = true
+pretty = true
+strict = true
+
+[tool.pyright]
+pythonVersion = "3.8"
+include = ["src/jinja2"]
+typeCheckingMode = "basic"
+
+[tool.ruff]
+src = ["src"]
+fix = true
+show-fixes = true
+output-format = "full"
+
+[tool.ruff.lint]
+select = [
+ "B", # flake8-bugbear
+ "E", # pycodestyle error
+ "F", # pyflakes
+ "I", # isort
+ "UP", # pyupgrade
+ "W", # pycodestyle warning
+]
+ignore-init-module-imports = true
+
+[tool.ruff.lint.isort]
+force-single-line = true
+order-by-type = false
+++ /dev/null
-[metadata]
-name = Jinja2
-version = attr: jinja2.__version__
-url = https://palletsprojects.com/p/jinja/
-project_urls =
- Donate = https://palletsprojects.com/donate
- Documentation = https://jinja.palletsprojects.com/
- Changes = https://jinja.palletsprojects.com/changes/
- Source Code = https://github.com/pallets/jinja/
- Issue Tracker = https://github.com/pallets/jinja/issues/
- Chat = https://discord.gg/pallets
-license = BSD-3-Clause
-license_files = LICENSE.rst
-maintainer = Pallets
-maintainer_email = contact@palletsprojects.com
-description = A very fast and expressive template engine.
-long_description = file: README.rst
-long_description_content_type = text/x-rst
-classifiers =
- Development Status :: 5 - Production/Stable
- Environment :: Web Environment
- Intended Audience :: Developers
- License :: OSI Approved :: BSD License
- Operating System :: OS Independent
- Programming Language :: Python
- Topic :: Internet :: WWW/HTTP :: Dynamic Content
- Topic :: Text Processing :: Markup :: HTML
-
-[options]
-packages = find:
-package_dir = = src
-include_package_data = True
-python_requires = >= 3.7
-# Dependencies are in setup.py for GitHub's dependency graph.
-
-[options.packages.find]
-where = src
-
-[options.entry_points]
-babel.extractors =
- jinja2 = jinja2.ext:babel_extract[i18n]
-
-[tool:pytest]
-testpaths = tests
-filterwarnings =
- error
-
-[coverage:run]
-branch = True
-source =
- jinja2
- tests
-
-[coverage:paths]
-source =
- src
- */site-packages
-
-[mypy]
-files = src/jinja2
-python_version = 3.7
-show_error_codes = True
-disallow_subclassing_any = True
-disallow_untyped_calls = True
-disallow_untyped_defs = True
-disallow_incomplete_defs = True
-no_implicit_optional = True
-local_partial_types = True
-no_implicit_reexport = True
-strict_equality = True
-warn_redundant_casts = True
-warn_unused_configs = True
-warn_unused_ignores = True
-warn_return_any = True
-warn_unreachable = True
-
-[mypy-jinja2.defaults]
-no_implicit_reexport = False
-
-[mypy-markupsafe]
-no_implicit_reexport = False
+++ /dev/null
-from setuptools import setup
-
-# Metadata goes in setup.cfg. These are here for GitHub's dependency graph.
-setup(
- name="Jinja2",
- install_requires=["MarkupSafe>=2.0"],
- extras_require={"i18n": ["Babel>=2.7"]},
-)
[testenv]
package = wheel
wheel_build_env = .pkg
+constrain_package_deps = true
+use_frozen_constraints = true
deps = -r requirements/tests.txt
commands = pytest -v --tb=short --basetemp={envtmpdir} {posargs}
[testenv:docs]
deps = -r requirements/docs.txt
-commands = sphinx-build -W -b html -d {envtmpdir}/doctrees docs {envtmpdir}/html
+commands = sphinx-build -E -W -b dirhtml docs docs/_build/dirhtml
+
+[testenv:update-requirements]
+deps =
+ pip-tools
+ pre-commit
+skip_install = true
+change_dir = requirements
+commands =
+ pre-commit autoupdate -j4
+ pip-compile -U build.in
+ pip-compile -U docs.in
+ pip-compile -U tests.in
+ pip-compile -U typing.in
+ pip-compile -U dev.in