diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4776211..a94cd04 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,6 +4,10 @@ updates: directory: "/" schedule: interval: "weekly" + groups: + all: + patterns: + - "*" - package-ecosystem: "github-actions" directory: "/" diff --git a/.github/workflows/python-package.yaml b/.github/workflows/python-package.yaml index a938dac..aa0eb5c 100644 --- a/.github/workflows/python-package.yaml +++ b/.github/workflows/python-package.yaml @@ -17,19 +17,14 @@ jobs: - macos-latest - windows-latest python-version: - - "3.8" - - "3.9" - "3.10" - "3.11" - "3.12" - exclude: - # 3.8 on windows fails due to some pip issue - - os: windows-latest - python-version: "3.8" + - "3.13" steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} @@ -43,7 +38,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: "3.x" @@ -57,7 +52,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: "3.x" @@ -72,7 +67,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: "3.x" diff --git a/CHANGELOG.md b/CHANGELOG.md index f4a94ac..0bd0a3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # Changelog +## [unreleased] + +* Added Python 3.13 to github actions + +## [2.3.2] -- 2024-10-13 + +* Ignore FileNotFoundError when trying to get the last modified time of files + in directories. This happens for example with temporary emacs files. +* Added changelog to docs +* removed ruff's target-version from pyproject.toml, this value defaults to the + projects requires-python + +## [2.3.1] -- 2024-07-06 + +* added manpage +* added makefile target for generating blog's manpage +* added makefile target for serving blags docs locally +* mkdocs: disabled loading of google fonts, using locally installed system + fonts instead +* Debian: simplified html docs directory for blag-doc package +* Debian: changed section from Python to Web +* updated dependencies + +## [2.3.0] -- 2024-04-24 + +* fixed devsever so it does not crash anymore when the (re-)build fails +* dropped support for Python 3.8 and 3.9 +* updated dependencies + ## [2.2.1] -- 2023-11-11 * fixed `suggests` to blag-doc diff --git a/Makefile b/Makefile index 13e2bfd..5b8208e 100644 --- a/Makefile +++ b/Makefile @@ -57,6 +57,14 @@ update-pygmentize: $(VENV) docs: $(VENV) $(BIN)/mkdocs build +.PHONY: serve-docs +serve-docs: $(VENV) + $(BIN)/mkdocs serve + +.PHONY: manpage +manpage: $(VENV) + help2man $(BIN)/blag --no-info -n "blog-aware, static site generator" -o debian/blag.1 + .PHONY: clean clean: rm -rf build dist *.egg-info diff --git a/README.md b/README.md index 1038bb8..3b723f8 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ blag is named after [the blag of the webcomic xkcd][blagxkcd]. * Integrated devserver * Available on [PyPI][] -blag runs on Linux, Mac and Windows and requires Python >= 3.8 +blag runs on Linux, Mac and Windows and requires Python >= 3.10 [markdown]: https://daringfireball.net/projects/markdown/ [jinja2]: https://palletsprojects.com/p/jinja/ diff --git a/blag/blag.py b/blag/blag.py index 2d72054..9f87cc1 100644 --- a/blag/blag.py +++ b/blag/blag.py @@ -2,9 +2,6 @@ """blag's core methods.""" -# remove when we don't support py38 anymore -from __future__ import annotations - import argparse import configparser import logging diff --git a/blag/devserver.py b/blag/devserver.py index 4f3ec50..2dd6481 100644 --- a/blag/devserver.py +++ b/blag/devserver.py @@ -6,9 +6,6 @@ site if necessary. """ -# remove when we don't support py38 anymore -from __future__ import annotations - import argparse import logging import multiprocessing @@ -45,14 +42,19 @@ def get_last_modified(dirs: list[str]) -> float: for dir in dirs: for root, dirs, files in os.walk(dir): for f in files: - mtime = os.stat(os.path.join(root, f)).st_mtime + try: + mtime = os.stat(os.path.join(root, f)).st_mtime + except FileNotFoundError: + # ignore files that have been deleted since the os.walk + # call (for example temporary emacs files) + continue if mtime > last_mtime: last_mtime = mtime return last_mtime -def autoreload(args: argparse.Namespace) -> NoReturn: +def autoreload(args: argparse.Namespace, wait: int=1) -> NoReturn: """Start the autoreloader. This method monitors the given directories for changes (i.e. the @@ -66,6 +68,9 @@ def autoreload(args: argparse.Namespace) -> NoReturn: ---------- args contains the input-, template- and static dir + wait + number of seconds the devsever waits before checking for updated + content """ dirs = [args.input_dir, args.template_dir, args.static_dir] @@ -74,12 +79,18 @@ def autoreload(args: argparse.Namespace) -> NoReturn: # loop to avoid serving stale contents last_mtime = 0.0 while True: - mtime = get_last_modified(dirs) - if mtime > last_mtime: - last_mtime = mtime - logger.info("Change detected, rebuilding...") - blag.build(args) - time.sleep(1) + # make sure the devsever does not crash when the build fails with an + # exception + try: + mtime = get_last_modified(dirs) + if mtime > last_mtime: + last_mtime = mtime + logger.info("Change detected, rebuilding...") + blag.build(args) + time.sleep(wait) + except Exception: + logger.exception("Error occurred during rebuild:") + logger.info("Devserver did not crash, you may continue editing.") def serve(args: argparse.Namespace) -> None: diff --git a/blag/markdown.py b/blag/markdown.py index bc7aa6b..ee4c573 100644 --- a/blag/markdown.py +++ b/blag/markdown.py @@ -5,9 +5,6 @@ processing. """ -# remove when we don't support py38 anymore -from __future__ import annotations - import logging from datetime import datetime from urllib.parse import urlsplit, urlunsplit diff --git a/blag/quickstart.py b/blag/quickstart.py index fdd34d8..fc58c37 100644 --- a/blag/quickstart.py +++ b/blag/quickstart.py @@ -1,8 +1,5 @@ """Helper methods for blag's quickstart command.""" -# remove when we don't support py38 anymore -from __future__ import annotations - import argparse import configparser import os diff --git a/blag/static/code-dark.css b/blag/static/code-dark.css index a2af57e..dc75c9e 100644 --- a/blag/static/code-dark.css +++ b/blag/static/code-dark.css @@ -4,35 +4,36 @@ span.linenos { color: inherit; background-color: transparent; padding-left: 5px; td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .hll { background-color: #49483e } -.c { color: #75715e } /* Comment */ -.err { color: #960050; background-color: #1e0010 } /* Error */ +.c { color: #959077 } /* Comment */ +.err { color: #ed007e; background-color: #1e0010 } /* Error */ .esc { color: #f8f8f2 } /* Escape */ .g { color: #f8f8f2 } /* Generic */ .k { color: #66d9ef } /* Keyword */ .l { color: #ae81ff } /* Literal */ .n { color: #f8f8f2 } /* Name */ -.o { color: #f92672 } /* Operator */ +.o { color: #ff4689 } /* Operator */ .x { color: #f8f8f2 } /* Other */ .p { color: #f8f8f2 } /* Punctuation */ -.ch { color: #75715e } /* Comment.Hashbang */ -.cm { color: #75715e } /* Comment.Multiline */ -.cp { color: #75715e } /* Comment.Preproc */ -.cpf { color: #75715e } /* Comment.PreprocFile */ -.c1 { color: #75715e } /* Comment.Single */ -.cs { color: #75715e } /* Comment.Special */ -.gd { color: #f92672 } /* Generic.Deleted */ +.ch { color: #959077 } /* Comment.Hashbang */ +.cm { color: #959077 } /* Comment.Multiline */ +.cp { color: #959077 } /* Comment.Preproc */ +.cpf { color: #959077 } /* Comment.PreprocFile */ +.c1 { color: #959077 } /* Comment.Single */ +.cs { color: #959077 } /* Comment.Special */ +.gd { color: #ff4689 } /* Generic.Deleted */ .ge { color: #f8f8f2; font-style: italic } /* Generic.Emph */ +.ges { color: #f8f8f2; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .gr { color: #f8f8f2 } /* Generic.Error */ .gh { color: #f8f8f2 } /* Generic.Heading */ .gi { color: #a6e22e } /* Generic.Inserted */ .go { color: #66d9ef } /* Generic.Output */ -.gp { color: #f92672; font-weight: bold } /* Generic.Prompt */ +.gp { color: #ff4689; font-weight: bold } /* Generic.Prompt */ .gs { color: #f8f8f2; font-weight: bold } /* Generic.Strong */ -.gu { color: #75715e } /* Generic.Subheading */ +.gu { color: #959077 } /* Generic.Subheading */ .gt { color: #f8f8f2 } /* Generic.Traceback */ .kc { color: #66d9ef } /* Keyword.Constant */ .kd { color: #66d9ef } /* Keyword.Declaration */ -.kn { color: #f92672 } /* Keyword.Namespace */ +.kn { color: #ff4689 } /* Keyword.Namespace */ .kp { color: #66d9ef } /* Keyword.Pseudo */ .kr { color: #66d9ef } /* Keyword.Reserved */ .kt { color: #66d9ef } /* Keyword.Type */ @@ -51,9 +52,9 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: .nn { color: #f8f8f2 } /* Name.Namespace */ .nx { color: #a6e22e } /* Name.Other */ .py { color: #f8f8f2 } /* Name.Property */ -.nt { color: #f92672 } /* Name.Tag */ +.nt { color: #ff4689 } /* Name.Tag */ .nv { color: #f8f8f2 } /* Name.Variable */ -.ow { color: #f92672 } /* Operator.Word */ +.ow { color: #ff4689 } /* Operator.Word */ .pm { color: #f8f8f2 } /* Punctuation.Marker */ .w { color: #f8f8f2 } /* Text.Whitespace */ .mb { color: #ae81ff } /* Literal.Number.Bin */ diff --git a/blag/static/code-light.css b/blag/static/code-light.css index e2cc7b8..2b68908 100644 --- a/blag/static/code-light.css +++ b/blag/static/code-light.css @@ -16,6 +16,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ .gd { color: #A00000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ +.ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .gr { color: #E40000 } /* Generic.Error */ .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .gi { color: #008400 } /* Generic.Inserted */ diff --git a/blag/static/style.css b/blag/static/style.css index f00afd6..8e5c332 100644 --- a/blag/static/style.css +++ b/blag/static/style.css @@ -1,33 +1,16 @@ @import "code-light.css" (prefers-color-scheme: light); @import "code-dark.css" (prefers-color-scheme: dark); -@media (prefers-color-scheme: light) { - :root { - --background: #FFFFFF; - --background-dim: #f5f7f9; - - --foreground: #2B303A; - --foreground-dim: #576379; - --foreground-heavy: #191C22; - - --primary-color: #375287; - } +:root { + color-scheme: light dark; + --background: light-dark(#FFFFFF, #2B363B); + --background-dim: light-dark(#f5f7f9, #2F3C42); + --foreground: light-dark(#2B303A, #f0f2f3); + --foreground-dim: light-dark(#576379, #d5d5d5); + --foreground-heavy: light-dark(#191C22, #f2f4f5); + --primary-color: light-dark(#375287, #A1C5FF); } -@media (prefers-color-scheme: dark) { - :root { - --background: #2B363B; - --background-dim: #2F3C42; - - --foreground: #f0f2f3; - --foreground-dim: #d5d5d5; - --foreground-heavy: #f2f4f5; - - --primary-color: #A1C5FF; - } -} - - html { font-size: 18px; font-family: serif; diff --git a/blag/version.py b/blag/version.py index 30d8088..deff8d1 100644 --- a/blag/version.py +++ b/blag/version.py @@ -1,3 +1,3 @@ """Version information for the blag package.""" -__VERSION__ = "2.2.1" +__VERSION__ = "2.3.2" diff --git a/debian/blag-doc.docs b/debian/blag-doc.docs index 45ddf0a..913aeb2 100644 --- a/debian/blag-doc.docs +++ b/debian/blag-doc.docs @@ -1 +1 @@ -site/ +site/* diff --git a/debian/blag.1 b/debian/blag.1 new file mode 100644 index 0000000..019f2f9 --- /dev/null +++ b/debian/blag.1 @@ -0,0 +1,28 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. +.TH BLAG "1" "July 2024" "blag 2.3.0" "User Commands" +.SH NAME +blag \- blog-aware, static site generator +.SH DESCRIPTION +usage: blag [\-h] [\-\-version] [\-v] {build,quickstart,serve} ... +.SS "positional arguments:" +.IP +{build,quickstart,serve} +.TP +build +Build website. +.TP +quickstart +Quickstart blag, creating necessary configuration. +.TP +serve +Start development server. +.SS "options:" +.TP +\fB\-h\fR, \fB\-\-help\fR +show this help message and exit +.TP +\fB\-\-version\fR +show program's version number and exit +.TP +\fB\-v\fR, \fB\-\-verbose\fR +Verbose output. diff --git a/debian/changelog b/debian/changelog index 3ec7e20..453e93e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,34 @@ +blag (2.3.2) unstable; urgency=medium + + * Ignore FileNotFoundError when trying to get the last modified time of + files in directories. This happens for example with temporary emacs files. + * Added changelog to docs + * removed ruff's target-version from pyproject.toml, this value defaults to + the projects requires-python + + -- Bastian Venthur Sun, 13 Oct 2024 20:12:29 +0200 + +blag (2.3.1) unstable; urgency=medium + + * added manpage + * added makefile target for generating blog's manpage + * added makefile target for serving blags docs locally + * mkdocs: disabled loading of google fonts, using locally installed system + fonts instead + * Debian: simplified html docs directory for blag-doc package + * Debian: changed section in debian/control from Python to Web + * updated dependencies + + -- Bastian Venthur Sat, 06 Jul 2024 15:33:36 +0200 + +blag (2.3.0) unstable; urgency=medium + + * fixed devsever so it does not crash anymore when the (re-)build fails + * dropped support for Python 3.8 and 3.9 + * updated dependencies + + -- Bastian Venthur Wed, 24 Apr 2024 22:25:31 +0200 + blag (2.2.1) unstable; urgency=medium * fixed suggests field to blag-doc (Closes: #1055769) diff --git a/debian/control b/debian/control index 2011e23..0c5d1a4 100644 --- a/debian/control +++ b/debian/control @@ -1,24 +1,24 @@ Source: blag -Section: python +Section: web Priority: optional Maintainer: Bastian Venthur Rules-Requires-Root: no Build-Depends: debhelper-compat (= 13), - dh-sequence-python3, dh-python, - pybuild-plugin-pyproject, - python3-setuptools, - python3-all, - python3-markdown, - python3-feedgenerator, - python3-jinja2, - python3-pygments, - python3-pytest, - python3-pytest-cov, + dh-sequence-python3, mkdocs, mkdocs-material, mkdocstrings-python-handlers, + pybuild-plugin-pyproject, + python3-all, + python3-feedgenerator, + python3-jinja2, + python3-markdown, + python3-pygments, + python3-pytest, + python3-pytest-cov, + python3-setuptools, #Testsuite: autopkgtest-pkg-python Standards-Version: 4.6.0.1 Homepage: https://github.com/venthur/blag @@ -28,8 +28,8 @@ Vcs-Git: https://github.com/venthur/blag.git Package: blag Architecture: all Depends: - ${python3:Depends}, ${misc:Depends}, + ${python3:Depends}, Suggests: blag-doc, Description: Blog-aware, static site generator diff --git a/debian/manpages b/debian/manpages new file mode 100644 index 0000000..3f5ed8d --- /dev/null +++ b/debian/manpages @@ -0,0 +1 @@ +debian/blag.1 diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 120000 index 0000000..04c99a5 --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1 @@ +../CHANGELOG.md \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index cc0564e..d270fdd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -16,7 +16,7 @@ blag is named after [the blag of the webcomic xkcd][blagxkcd]. ## Features * Write content in [Markdown][] -* Good looking default theme +* Good looking default theme: ![Blag Screenshot](blag.png) * Theming support using [Jinja2][] templates * Generation of Atom feeds for blog content @@ -24,7 +24,7 @@ blag is named after [the blag of the webcomic xkcd][blagxkcd]. * Integrated devserver * Available on [PyPI][] -blag runs on Linux, Mac and Windows and requires Python >= 3.8 +blag runs on Linux, Mac and Windows and requires Python >= 3.10 [markdown]: https://daringfireball.net/projects/markdown/ [jinja2]: https://palletsprojects.com/p/jinja/ diff --git a/mkdocs.yml b/mkdocs.yml index e891eaf..8b26450 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -13,10 +13,13 @@ nav: - blag.markdown: markdown.md - blag.devserver: devserver.md - blag.quickstart: quickstart.md + - Changelog: CHANGELOG.md theme: name: material highlightjs: true + # disable google fonts, use system fonts + font: false markdown_extensions: - pymdownx.superfences diff --git a/pyproject.toml b/pyproject.toml index 59f0d1a..c51e644 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ description = "blog-aware, static site generator" keywords = ["markdown", "blag", "blog", "static site generator", "cli"] readme = "README.md" license = { file="LICENSE" } -requires-python = ">=3.8" +requires-python = ">=3.10" dynamic = ["version"] dependencies = [ "markdown", @@ -64,6 +64,9 @@ addopts = """ """ [tool.ruff] +line-length = 79 + +[tool.ruff.lint] select = [ "F", # pyflakes "E", "W", # pycodestyle @@ -72,11 +75,7 @@ select = [ "D", # pydocstyle "UP" # pyupgrade ] -line-length = 79 -target-version = "py38" - -[tool.ruff.pydocstyle] -convention = "numpy" +pydocstyle.convention = "numpy" [tool.mypy] files = "blag,tests" diff --git a/requirements-dev.txt b/requirements-dev.txt index a2c255c..3bf2a90 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,11 +1,11 @@ -build==1.0.3 -mkdocs==1.5.3 -mkdocs-material==9.4.8 -mkdocstrings[python]==0.23.0 -twine==4.0.2 -wheel==0.41.3 -pytest==7.4.3 -pytest-cov==4.1.0 -ruff==0.1.5 -mypy==1.6.1 -types-markdown==3.5.0.1 +build==1.2.2.post1 +mkdocs==1.6.1 +mkdocs-material==9.5.49 +mkdocstrings[python]==0.27.0 +twine==6.0.1 +wheel==0.45.1 +pytest==8.3.4 +pytest-cov==6.0.0 +ruff==0.8.4 +mypy==1.14.0 +types-markdown==3.7.0.20241204 diff --git a/requirements.txt b/requirements.txt index 62bba80..9a67d85 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -markdown==3.5.1 +markdown==3.7 feedgenerator==2.1.0 -jinja2==3.1.2 -pygments==2.16.1 +jinja2==3.1.5 +pygments==2.18.0 diff --git a/tests/conftest.py b/tests/conftest.py index 9ee4239..969a06b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,13 +1,9 @@ """Pytest fixtures.""" - -# remove when we don't support py38 anymore -from __future__ import annotations - import os from argparse import Namespace +from collections.abc import Callable, Iterator from tempfile import TemporaryDirectory -from typing import Callable, Iterator import pytest from jinja2 import Environment, Template diff --git a/tests/test_blag.py b/tests/test_blag.py index 155e483..c7d1ca8 100644 --- a/tests/test_blag.py +++ b/tests/test_blag.py @@ -1,9 +1,5 @@ """Test blag.""" - -# remove when we don't support py38 anymore -from __future__ import annotations - import os from argparse import Namespace from datetime import datetime diff --git a/tests/test_devserver.py b/tests/test_devserver.py index 3652f19..df7b69f 100644 --- a/tests/test_devserver.py +++ b/tests/test_devserver.py @@ -1,17 +1,13 @@ """Tests for the devserver module.""" - -# remove when we don't support py38 anymore -from __future__ import annotations - import threading import time from argparse import Namespace -import pytest - from blag import devserver +WAITTIME = 0.1 + def test_get_last_modified(cleandir: str) -> None: """Test get_last_modified.""" @@ -19,13 +15,13 @@ def test_get_last_modified(cleandir: str) -> None: t1 = devserver.get_last_modified(["content"]) # wait a bit, create a file and measure again - time.sleep(0.1) + time.sleep(WAITTIME) with open("content/test", "w") as fh: fh.write("boo") t2 = devserver.get_last_modified(["content"]) # wait a bit and take time again - time.sleep(0.1) + time.sleep(WAITTIME) t3 = devserver.get_last_modified(["content"]) assert t2 > t1 @@ -40,14 +36,14 @@ def test_autoreload_builds_immediately(args: Namespace) -> None: t = threading.Thread( target=devserver.autoreload, - args=(args,), + args=(args, WAITTIME), daemon=True, ) t0 = devserver.get_last_modified(["build"]) t.start() # try for 5 seconds... for i in range(5): - time.sleep(1) + time.sleep(WAITTIME) t1 = devserver.get_last_modified(["build"]) print(t1) if t1 > t0: @@ -55,14 +51,11 @@ def test_autoreload_builds_immediately(args: Namespace) -> None: assert t1 > t0 -@pytest.mark.filterwarnings( - "ignore::pytest.PytestUnhandledThreadExceptionWarning" -) def test_autoreload(args: Namespace) -> None: """Test autoreload.""" t = threading.Thread( target=devserver.autoreload, - args=(args,), + args=(args, WAITTIME), daemon=True, ) t.start() @@ -75,8 +68,32 @@ def test_autoreload(args: Namespace) -> None: # try for 5 seconds to see if we rebuild once... for i in range(5): - time.sleep(1) + time.sleep(WAITTIME) t1 = devserver.get_last_modified(["build"]) if t1 > t0: break assert t1 > t0 + + +def test_autoreload_does_not_crash(args: Namespace) -> None: + """Test autoreload does not crash if build fails.""" + t = threading.Thread( + target=devserver.autoreload, + args=(args, WAITTIME), + daemon=True, + ) + t.start() + + t0 = devserver.get_last_modified(["build"]) + + # create a file that causes build to crash + with open("content/test.md", "w") as fh: + fh.write("date: ") + + # try for 5 seconds to see if we rebuild once... + for i in range(5): + time.sleep(WAITTIME) + t1 = devserver.get_last_modified(["build"]) + if t1 > t0: + break + assert t.is_alive() diff --git a/tests/test_markdown.py b/tests/test_markdown.py index 56cb742..5e393d2 100644 --- a/tests/test_markdown.py +++ b/tests/test_markdown.py @@ -1,9 +1,5 @@ """Test markdown module.""" - -# remove when we don't support py38 anymore -from __future__ import annotations - from datetime import datetime from typing import Any diff --git a/tests/test_quickstart.py b/tests/test_quickstart.py index 4467fc9..70a29e7 100644 --- a/tests/test_quickstart.py +++ b/tests/test_quickstart.py @@ -1,9 +1,5 @@ """Tests for the quickstart module.""" - -# remove when we don't support py38 anymore -from __future__ import annotations - import os from pytest import MonkeyPatch diff --git a/tests/test_templates.py b/tests/test_templates.py index 4d96f66..171be34 100644 --- a/tests/test_templates.py +++ b/tests/test_templates.py @@ -1,9 +1,5 @@ """Test the templates.""" - -# remove when we don't support py38 anymore -from __future__ import annotations - import datetime from jinja2 import Template diff --git a/tests/test_version.py b/tests/test_version.py index fbe1d02..e309b9f 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -1,9 +1,5 @@ """Test the version module.""" - -# remove when we don't support py38 anymore -from __future__ import annotations - import blag