From bd49d04f37c494bc5d9f58f81bc2c06910a96244 Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Wed, 3 Aug 2022 19:54:53 +0200 Subject: [PATCH 01/11] Update dependencies --- poetry.lock | 701 ++++++++++++++++++++++--------------------------- pyproject.toml | 25 +- 2 files changed, 326 insertions(+), 400 deletions(-) diff --git a/poetry.lock b/poetry.lock index b449c16e..f46f3ae0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,6 +1,6 @@ [[package]] name = "atomicwrites" -version = "1.4.0" +version = "1.4.1" description = "Atomic file writes." category = "dev" optional = false @@ -8,46 +8,31 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" -version = "21.2.0" +version = "22.1.0" description = "Classes Without Boilerplate" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.5" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope-interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope-interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope-interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "babel" -version = "2.9.1" +version = "2.10.3" description = "Internationalization utilities" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [package.dependencies] pytz = ">=2015.7" [[package]] -name = "backports.entry-points-selectable" -version = "1.1.1" -description = "Compatibility shim providing selectable entry points for older implementations" -category = "dev" -optional = false -python-versions = ">=2.7" - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-checkdocs (>=2.4)", "pytest-enabler (>=1.0.1)"] - -[[package]] -name = "backports.zoneinfo" +name = "backports-zoneinfo" version = "0.2.1" description = "Backport of the standard library zoneinfo module" category = "main" @@ -59,29 +44,25 @@ tzdata = ["tzdata"] [[package]] name = "black" -version = "21.12b0" +version = "22.6.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -click = ">=7.1.2" +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" +pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" +tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = ">=3.10.0.0,<3.10.0.1 || >3.10.0.1", markers = "python_version >= \"3.10\""}, -] +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -94,11 +75,11 @@ python-versions = ">=3.6.1" [[package]] name = "cleo" -version = "1.0.0a4" +version = "1.0.0a5" description = "Cleo allows you to create beautiful and testable command-line interfaces." category = "dev" optional = false -python-versions = ">=3.6,<4.0" +python-versions = ">=3.7,<4.0" [package.dependencies] crashtest = ">=0.3.1,<0.4.0" @@ -106,11 +87,11 @@ pylev = ">=1.3.0,<2.0.0" [[package]] name = "click" -version = "8.0.3" +version = "8.1.3" description = "Composable command line interface toolkit" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -118,7 +99,7 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.5" description = "Cross-platform colored terminal text." category = "dev" optional = false @@ -126,11 +107,14 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "coverage" -version = "6.2" +version = "6.4.2" description = "Code coverage measurement for Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] toml = ["tomli"] @@ -145,7 +129,7 @@ python-versions = ">=3.6,<4.0" [[package]] name = "distlib" -version = "0.3.4" +version = "0.3.5" description = "Distribution utilities" category = "dev" optional = false @@ -153,11 +137,11 @@ python-versions = "*" [[package]] name = "filelock" -version = "3.4.0" +version = "3.7.1" description = "A platform independent file lock." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] @@ -165,7 +149,7 @@ testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-co [[package]] name = "ghp-import" -version = "2.0.2" +version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." category = "dev" optional = false @@ -175,22 +159,22 @@ python-versions = "*" python-dateutil = ">=2.8.1" [package.extras] -dev = ["twine", "markdown", "flake8", "wheel"] +dev = ["wheel", "flake8", "markdown", "twine"] [[package]] name = "identify" -version = "2.4.0" +version = "2.5.2" description = "File identification library for Python" category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.extras] license = ["ukkonen"] [[package]] name = "importlib-metadata" -version = "4.10.0" +version = "4.12.0" description = "Read metadata from Python packages" category = "dev" optional = false @@ -201,9 +185,9 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl-flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "iniconfig" @@ -229,11 +213,11 @@ plugins = ["setuptools"] [[package]] name = "jinja2" -version = "3.0.3" +version = "3.1.2" description = "A very fast and expressive template engine." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] MarkupSafe = ">=2.0" @@ -243,11 +227,11 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "markdown" -version = "3.3.6" +version = "3.4.1" description = "Python implementation of Markdown." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} @@ -268,11 +252,11 @@ markdown = "*" [[package]] name = "markupsafe" -version = "2.0.1" +version = "2.1.1" description = "Safely add untrusted strings to HTML/XML markup." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "mergedeep" @@ -284,7 +268,7 @@ python-versions = ">=3.6" [[package]] name = "mkdocs" -version = "1.2.3" +version = "1.3.0" description = "Project documentation with Markdown." category = "dev" optional = false @@ -293,8 +277,8 @@ python-versions = ">=3.6" [package.dependencies] click = ">=3.3" ghp-import = ">=1.0" -importlib-metadata = ">=3.10" -Jinja2 = ">=2.10.1" +importlib-metadata = ">=4.3" +Jinja2 = ">=2.10.2" Markdown = ">=3.2.1" mergedeep = ">=1.3.4" packaging = ">=20.5" @@ -315,11 +299,14 @@ python-versions = "*" [[package]] name = "nodeenv" -version = "1.6.0" +version = "1.7.0" description = "Node.js virtual environment builder" category = "dev" optional = false -python-versions = "*" +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" + +[package.dependencies] +setuptools = "*" [[package]] name = "packaging" @@ -342,15 +329,15 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "platformdirs" -version = "2.4.0" +version = "2.5.2" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] -docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pluggy" @@ -369,11 +356,11 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "2.16.0" +version = "2.20.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.dependencies] cfgv = ">=2.0.0" @@ -394,11 +381,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pygments" -version = "2.10.0" +version = "2.12.0" description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" [[package]] name = "pylev" @@ -421,22 +408,22 @@ Markdown = ">=3.2" [[package]] name = "pyparsing" -version = "3.0.6" -description = "Python parsing module" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.6.8" [package.extras] -diagrams = ["jinja2", "railroad-diagrams"] +diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pytest" -version = "6.2.5" +version = "7.1.2" description = "pytest: simple powerful testing with Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} @@ -447,23 +434,22 @@ iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" py = ">=1.8.2" -toml = "*" +tomli = ">=1.0.0" [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] [[package]] name = "pytest-cov" -version = "2.12.1" +version = "3.0.0" description = "Pytest plugin for measuring coverage." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" [package.dependencies] -coverage = ">=5.2.1" +coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" -toml = "*" [package.extras] testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] @@ -481,7 +467,7 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2021.3" +version = "2022.1" description = "World timezone definitions, modern and historical" category = "dev" optional = false @@ -506,6 +492,19 @@ python-versions = ">=3.6" [package.dependencies] pyyaml = "*" +[[package]] +name = "setuptools" +version = "63.4.1" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)", "sphinx-notfound-page (==0.8.3)", "sphinx-hoverxref (<2)", "pygments-github-lexers (==0.0.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-reredirects", "sphinxcontrib-towncrier", "furo"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-enabler (>=1.3)", "pytest-perf", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "wheel", "pip (>=19.1)", "jaraco.envs (>=2.2)", "pytest-xdist", "jaraco.path (>=3.2.0)", "build", "filelock (>=3.4.0)", "pip-run (>=8.8)", "ini2toml[lite] (>=0.9)", "tomli-w (>=1.0.0)", "pytest-black (>=0.3.7)", "pytest-cov", "pytest-mypy (>=0.9.1)"] +testing-integration = ["pytest", "pytest-xdist", "pytest-enabler", "virtualenv (>=13.0.0)", "tomli", "wheel", "jaraco.path (>=3.2.0)", "jaraco.envs (>=2.2)", "build", "filelock (>=3.4.0)"] + [[package]] name = "six" version = "1.16.0" @@ -516,11 +515,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "time-machine" -version = "2.5.0" +version = "2.7.1" description = "Travel through time in your tests." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] python-dateutil = "*" @@ -535,15 +534,15 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.2.3" +version = "2.0.1" description = "A lil' TOML parser" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "tox" -version = "3.24.4" +version = "3.25.1" description = "tox is a generic virtualenv management and test command line tool" category = "dev" optional = false @@ -562,11 +561,11 @@ virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2, [package.extras] docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] -testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)", "pytest-xdist (>=1.22.2)", "pathlib2 (>=2.3.3)"] +testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)", "psutil (>=5.6.1)", "pathlib2 (>=2.3.3)"] [[package]] name = "typed-ast" -version = "1.5.1" +version = "1.5.4" description = "a fork of Python 2 and 3 ast modules with type comment support" category = "dev" optional = false @@ -574,15 +573,15 @@ python-versions = ">=3.6" [[package]] name = "typing-extensions" -version = "4.0.1" -description = "Backported and Experimental Type Hints for Python 3.6+" +version = "4.3.0" +description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "tzdata" -version = "2021.5" +version = "2022.1" description = "Provider of IANA time zone data" category = "main" optional = false @@ -590,27 +589,25 @@ python-versions = ">=2" [[package]] name = "virtualenv" -version = "20.10.0" +version = "20.16.2" description = "Virtual Python Environment builder" category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" [package.dependencies] -"backports.entry-points-selectable" = ">=1.0.4" distlib = ">=0.3.1,<1" filelock = ">=3.2,<4" importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} platformdirs = ">=2,<3" -six = ">=1.9.0,<2" [package.extras] docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "packaging (>=20.0)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)"] [[package]] name = "watchdog" -version = "2.1.6" +version = "2.1.9" description = "Filesystem events monitoring" category = "dev" optional = false @@ -621,39 +618,32 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "zipp" -version = "3.6.0" +version = "3.8.1" description = "Backport of pathlib-compatible object wrapper for zip files" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco-itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "09a75ed923554d44c6f1195434ae31c4467b2364fb24e31c98df0654ae6023cd" +content-hash = "e68745a42f4beccf1f6a589760735abb3c39b0c0bdcc4a3715af97445144f6cf" [metadata.files] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] +atomicwrites = [] attrs = [ - {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, - {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, + {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, + {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, ] babel = [ - {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, - {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, + {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, + {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, ] -"backports.entry-points-selectable" = [ - {file = "backports.entry_points_selectable-1.1.1-py2.py3-none-any.whl", hash = "sha256:7fceed9532a7aa2bd888654a7314f864a3c16a4e710b34a58cfc0f08114c663b"}, - {file = "backports.entry_points_selectable-1.1.1.tar.gz", hash = "sha256:914b21a479fde881635f7af5adc7f6e38d6b274be32269070c53b698c60d5386"}, -] -"backports.zoneinfo" = [ +backports-zoneinfo = [ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, @@ -672,98 +662,68 @@ babel = [ {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, ] black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, + {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, + {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, + {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, + {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, + {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, + {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, + {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, + {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, + {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, + {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, + {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, + {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, + {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, + {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, + {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, + {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, + {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, + {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, + {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, ] cfgv = [ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] cleo = [ - {file = "cleo-1.0.0a4-py3-none-any.whl", hash = "sha256:cdd0c3458c15ced3a9f0204b1e53a1b4bee3c56ebcb3ac54c872a56acc657a09"}, - {file = "cleo-1.0.0a4.tar.gz", hash = "sha256:a103a065d031b7d936ee88a6b93086a69bd9c1b40fa2ebfe8c056285a66b481d"}, + {file = "cleo-1.0.0a5-py3-none-any.whl", hash = "sha256:ff53056589300976e960f75afb792dfbfc9c78dcbb5a448e207a17b643826360"}, + {file = "cleo-1.0.0a5.tar.gz", hash = "sha256:097c9d0e0332fd53cc89fc11eb0a6ba0309e6a3933c08f7b38558555486925d3"}, ] click = [ - {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, - {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -coverage = [ - {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"}, - {file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"}, - {file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"}, - {file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"}, - {file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"}, - {file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"}, - {file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"}, - {file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"}, - {file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"}, - {file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"}, - {file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"}, - {file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"}, - {file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"}, - {file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"}, - {file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"}, - {file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"}, - {file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"}, - {file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"}, - {file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"}, - {file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"}, + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, ] +coverage = [] crashtest = [ {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"}, {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"}, ] distlib = [ - {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, - {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, + {file = "distlib-0.3.5-py2.py3-none-any.whl", hash = "sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c"}, + {file = "distlib-0.3.5.tar.gz", hash = "sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe"}, ] filelock = [ - {file = "filelock-3.4.0-py3-none-any.whl", hash = "sha256:2e139a228bcf56dd8b2274a65174d005c4a6b68540ee0bdbb92c76f43f29f7e8"}, - {file = "filelock-3.4.0.tar.gz", hash = "sha256:93d512b32a23baf4cac44ffd72ccf70732aeff7b8050fcaf6d3ec406d954baf4"}, + {file = "filelock-3.7.1-py3-none-any.whl", hash = "sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404"}, + {file = "filelock-3.7.1.tar.gz", hash = "sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04"}, ] ghp-import = [ - {file = "ghp-import-2.0.2.tar.gz", hash = "sha256:947b3771f11be850c852c64b561c600fdddf794bab363060854c1ee7ad05e071"}, - {file = "ghp_import-2.0.2-py3-none-any.whl", hash = "sha256:5f8962b30b20652cdffa9c5a9812f7de6bcb56ec475acac579807719bf242c46"}, + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, ] identify = [ - {file = "identify-2.4.0-py2.py3-none-any.whl", hash = "sha256:eba31ca80258de6bb51453084bff4a923187cd2193b9c13710f2516ab30732cc"}, - {file = "identify-2.4.0.tar.gz", hash = "sha256:a33ae873287e81651c7800ca309dc1f84679b763c9c8b30680e16fbfa82f0107"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.10.0-py3-none-any.whl", hash = "sha256:b7cf7d3fef75f1e4c80a96ca660efbd51473d7e8f39b5ab9210febc7809012a4"}, - {file = "importlib_metadata-4.10.0.tar.gz", hash = "sha256:92a8b58ce734b2a4494878e0ecf7d79ccd7a128b5fc6014c401e0b61f006f0f6"}, + {file = "identify-2.5.2-py2.py3-none-any.whl", hash = "sha256:feaa9db2dc0ce333b453ce171c0cf1247bbfde2c55fc6bb785022d411a1b78b5"}, + {file = "identify-2.5.2.tar.gz", hash = "sha256:a3d4c096b384d50d5e6dc5bc8b9bc44f1f61cefebd750a7b3e9f939b53fb214d"}, ] +importlib-metadata = [] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, @@ -773,103 +733,71 @@ isort = [ {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, ] jinja2 = [ - {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, - {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] markdown = [ - {file = "Markdown-3.3.6-py3-none-any.whl", hash = "sha256:9923332318f843411e9932237530df53162e29dc7a4e2b91e35764583c46c9a3"}, - {file = "Markdown-3.3.6.tar.gz", hash = "sha256:76df8ae32294ec39dcf89340382882dfa12975f87f45c3ed1ecdb1e8cefc7006"}, + {file = "Markdown-3.4.1-py3-none-any.whl", hash = "sha256:08fb8465cffd03d10b9dd34a5c3fea908e20391a2a90b88d66362cb05beed186"}, + {file = "Markdown-3.4.1.tar.gz", hash = "sha256:3b809086bb6efad416156e00a0da66fe47618a5d6918dd688f53f40c8e4cfeff"}, ] markdown-include = [ {file = "markdown-include-0.5.1.tar.gz", hash = "sha256:72a45461b589489a088753893bc95c5fa5909936186485f4ed55caa57d10250f"}, ] markupsafe = [ - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] mergedeep = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, ] mkdocs = [ - {file = "mkdocs-1.2.3-py3-none-any.whl", hash = "sha256:a1fa8c2d0c1305d7fc2b9d9f607c71778572a8b110fb26642aa00296c9e6d072"}, - {file = "mkdocs-1.2.3.tar.gz", hash = "sha256:89f5a094764381cda656af4298727c9f53dc3e602983087e1fe96ea1df24f4c1"}, + {file = "mkdocs-1.3.0-py3-none-any.whl", hash = "sha256:26bd2b03d739ac57a3e6eed0b7bcc86168703b719c27b99ad6ca91dc439aacde"}, + {file = "mkdocs-1.3.0.tar.gz", hash = "sha256:b504405b04da38795fec9b2e5e28f6aa3a73bb0960cb6d5d27ead28952bd35ea"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] -nodeenv = [ - {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, - {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, -] +nodeenv = [] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, @@ -879,24 +807,21 @@ pathspec = [ {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, ] platformdirs = [ - {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, - {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] -pre-commit = [ - {file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"}, - {file = "pre_commit-2.16.0.tar.gz", hash = "sha256:fe9897cac830aa7164dbd02a4e7b90cae49630451ce88464bca73db486ba9f65"}, -] +pre-commit = [] py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] pygments = [ - {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, - {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, + {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, + {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, ] pylev = [ {file = "pylev-1.4.0-py2.py3-none-any.whl", hash = "sha256:7b2e2aa7b00e05bb3f7650eb506fc89f474f70493271a35c242d9a92188ad3dd"}, @@ -907,24 +832,24 @@ pymdown-extensions = [ {file = "pymdown_extensions-6.3-py2.py3-none-any.whl", hash = "sha256:66fae2683c7a1dac53184f7de57f51f8dad73f9ead2f453e94e85096cb811335"}, ] pyparsing = [ - {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, - {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, + {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"}, + {file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"}, ] pytest-cov = [ - {file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"}, - {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"}, + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, ] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] pytz = [ - {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, - {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, + {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, + {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, ] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, @@ -965,132 +890,128 @@ pyyaml-env-tag = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, ] +setuptools = [ + {file = "setuptools-63.4.1-py3-none-any.whl", hash = "sha256:dc2662692f47d99cb8ae15a784529adeed535bcd7c277fee0beccf961522baf6"}, + {file = "setuptools-63.4.1.tar.gz", hash = "sha256:7c7854ee1429a240090297628dc9f75b35318d193537968e2dc14010ee2f5bca"}, +] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] time-machine = [ - {file = "time-machine-2.5.0.tar.gz", hash = "sha256:f61e582dfe1018c9b1c035d2da948b1ac7f298e3153d704a55f305a7aaefea57"}, - {file = "time_machine-2.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:176a18266394d66a2565a6d71874a945dad3b837ee7db6b26d3329792d086adc"}, - {file = "time_machine-2.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fd081d951ba84d27bce13a988884bf746877073e2bc4220c0d093dd579dd9081"}, - {file = "time_machine-2.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30a9a19ff9ec66cca00944830b3c5d89080a6a222615997a8db251b4dda13acd"}, - {file = "time_machine-2.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8afbb3d7445b2fd26c3d322e77cc5c1734367a55cdeab4198507f735e2a51a8b"}, - {file = "time_machine-2.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:089cea08787d3863bf0dd8ac79d5d9474231f8ce70c8b028ab7788d4196361ea"}, - {file = "time_machine-2.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8fd7a95421f8979d47035e295443ad3e617eccb02f9e669ccb6a02a900e40321"}, - {file = "time_machine-2.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31863586d37c72264f795353f70f3f076530941bef4e2936a0aafab28d70a5a1"}, - {file = "time_machine-2.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51baf21f138dace274a2d628f28a004db5ce020eb5bbcb0908949141c993868b"}, - {file = "time_machine-2.5.0-cp310-cp310-win32.whl", hash = "sha256:0992030c0c58006610e1d8d65a61df176561b8baa416f22ee129cd8c0a092120"}, - {file = "time_machine-2.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:7116e9685513917c57fec0230024e27037d5eff92414a709999c21644ee3ac0a"}, - {file = "time_machine-2.5.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:5a95e99f0f29bd6fd5142e033709a3415246f314ed225661f2bcbe2759a41197"}, - {file = "time_machine-2.5.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a76092104d682a38b1081941bbbf030d47ae03001554425434b8a9f21ca1d5b"}, - {file = "time_machine-2.5.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e7889e2496c64b85a760e79e25f791055f63c10a6d27abeb4ec4cd12146b6c9"}, - {file = "time_machine-2.5.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c213d5f4d708cdbcfe5be671f1110a7fbe9b8d2ceae9899fbb09dd4e1424d58"}, - {file = "time_machine-2.5.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a50222840f2702a5f7efd13d58506cc45484b22e7371bb86ce4eee7b615053de"}, - {file = "time_machine-2.5.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:9a10c379ebf7a80d8034538016af736103a6c3348670d297788146abaac2c606"}, - {file = "time_machine-2.5.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0873edc3d22a09c606771c899e95b9a9b23d66d9a9fd1f302c778287ece59481"}, - {file = "time_machine-2.5.0-cp36-cp36m-win32.whl", hash = "sha256:1288a7283b5efc53b69ce846d0ec5598ea6b2682053cd706f5d5e52fb6b2120c"}, - {file = "time_machine-2.5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f4ed5b43ab71f10dfeaf9c8a0c377cb091c3a3dac3e21ee0ec132ad76d0e771d"}, - {file = "time_machine-2.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47ba6e193bd6a755abb7dde5000ea62b66fcb6ae468ca122652ed8dbd3ad6bd3"}, - {file = "time_machine-2.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4ac68af561565bce073230a6038209cf5a19fe0f1cb5e94ebf2ea10cc4a845a"}, - {file = "time_machine-2.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28ad158c80187c17931c1667ced28294af5597ee28479b5b145da3d07ae2f34d"}, - {file = "time_machine-2.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b3f8178aa8676dce482100415e035eaf065664ecf1ab5b32dc88a6d07a5481"}, - {file = "time_machine-2.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fc915a4c32084384acd88ebc39400a5dbf62129f2c694a58f71b35aa45663096"}, - {file = "time_machine-2.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:936890909eb86e6c735ba76ce06e42e0da41d888d41130e65d41819663446bf1"}, - {file = "time_machine-2.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7acf47de70fca46042b19f8b97b6f7c6cb37f6ddd157d0f56d22774e9bcc5cae"}, - {file = "time_machine-2.5.0-cp37-cp37m-win32.whl", hash = "sha256:30c533c30eb7dbf452b59170ea5584b9aca4bccf17b4382d42ad79481041d930"}, - {file = "time_machine-2.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:42614b6a234cc0c60ff9e8ff3567da480e7f69d1f19a70706fa7a95a382b21bf"}, - {file = "time_machine-2.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e6fd3ca3f49e2116889255e11f7243b79f8b15586f219538a8ed14c8d0677c64"}, - {file = "time_machine-2.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8dc833bc503e8f3afe5fbebb7ab5887a848534ee2de9883f3ce9b770efd78e5a"}, - {file = "time_machine-2.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36d3f90b98bbb7bfaa45a8755d43bb290c27cd5e04b37329bda7617bfe745682"}, - {file = "time_machine-2.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78a159d57131244c2a6591c26c75f26fce4c26f3b23ecac918cfe0de1812cde7"}, - {file = "time_machine-2.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37df69104c38af80e465b8530a2929a6bc4ea51e332b6ae66aa4fdade6a454e7"}, - {file = "time_machine-2.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:701f2e56205411d2d1644f26dc4a98a39e901a41868819d1826b7d2e00f5d37a"}, - {file = "time_machine-2.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:98800bb5db89815d9d1ade51d8690b6418d93b0b9664bf4a4a8492380e95dc38"}, - {file = "time_machine-2.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e51562bad97ada3b00f996db40b9de2ff0e2cb61b54b017ede7738fc08edb7b"}, - {file = "time_machine-2.5.0-cp38-cp38-win32.whl", hash = "sha256:6c76ee141f4e33c64a9de7cda1f6793985c66bcfa3cc6d284ab8aae1ec468444"}, - {file = "time_machine-2.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e7a0430b25c7f6487b7455774bbe0e447753bc2ac43f25cbc82aba6453bf126a"}, - {file = "time_machine-2.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b6c59c2fca5b573bbcd7b5eab8799e685d61c17ed31906f29e465e4d747f38f2"}, - {file = "time_machine-2.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b567dc27997bc7cef3aeaf5aa5f6481560dced0a1fc0ca6d7de2cbc592a019b"}, - {file = "time_machine-2.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10532dcf6a6eb37eead208f6307886e6abf388af4d0bd1d50502b8bece9ca895"}, - {file = "time_machine-2.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd2edef76fa21de1238c54beb751863e75928b075a25d62d5ac65f8e909e4628"}, - {file = "time_machine-2.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ff6a4c60177d68489a8fc8f98d60692aa57572d1ddc4cd8209914010d8436a3"}, - {file = "time_machine-2.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cfae49174892c138f9b127dcb820f4f287f603af6771581e130feedcbdd6c320"}, - {file = "time_machine-2.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b093449198841fc008f7d2af71e28485dc46958a488f2068bf31a59caff6887"}, - {file = "time_machine-2.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a486d59f966872732492e2139d76c4cd03460d6600de9239f4f8ab606b9b7f37"}, - {file = "time_machine-2.5.0-cp39-cp39-win32.whl", hash = "sha256:739ac3d5b75a1236ab3e7833a8a4936f046b94fae86e97ea124aa59fc060c2cc"}, - {file = "time_machine-2.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:ae0f33be3ab2550af3af8545e74382adc4c1fac3a6e4bf42924c7ebefc42d17a"}, + {file = "time-machine-2.7.1.tar.gz", hash = "sha256:be6c1f0421a77a046db8fae00886fb364f683a86612b71dd5c74b22891590042"}, + {file = "time_machine-2.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ae93d2f761435d192bc80c148438a0c4261979db0610cef08dfe2c8d21ca1c67"}, + {file = "time_machine-2.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:342b431154fbfb1889f8d7aa3d857373a837106bba395a5cc99123f11a7cea03"}, + {file = "time_machine-2.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4011ea76f6ad2f932f00cf9e77a25b575a024d6bc15bcf891a3f9916ceeb6e"}, + {file = "time_machine-2.7.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43ae8192d370a90d2246fca565a55633f592b314264c65c5c9151c361b715fb9"}, + {file = "time_machine-2.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cea12d0592ebbe738db952ce6fd272ed90e7bbb095e802f4f2145f8f0e322fa3"}, + {file = "time_machine-2.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:732d5fd2d442fa87538b5a6ca623cb205b9b048d2c9aaf79e5cfc7ec7f637848"}, + {file = "time_machine-2.7.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c34e1f49cad2fd41d42c4aabd3d69a32c79d9a8e0779064554843823cd1fb1e4"}, + {file = "time_machine-2.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6af3e81cf663b6d5660953ae59da2bb2ae802452ecbc9907272979ed06253659"}, + {file = "time_machine-2.7.1-cp310-cp310-win32.whl", hash = "sha256:10c2937d3556f4358205dac5c7cd2d33832b8b911f3deff050f59e1fe2be3231"}, + {file = "time_machine-2.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:200974e9bb8a1cb227ce579caafeaeebb0f9de81758c444cbccc0ea464313caf"}, + {file = "time_machine-2.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d5e2376b7922c9d96921709c7e730498b9c69da889f359a465d0c43117b62da3"}, + {file = "time_machine-2.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9117abe223cdc7b4a4432e0a0cfebb1b351a091ee996c653e90f27a734fce"}, + {file = "time_machine-2.7.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:626ef686723147468e84da3edcd67ff757a463250fd35f8f6a8e5b899c43b43d"}, + {file = "time_machine-2.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9331946ed13acd50bc484f408e26b8eefa67e3dbca41927d2052f2148d3661d"}, + {file = "time_machine-2.7.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3d0612e0323047f29c23732963d9926f1a95e2ce334d86fecd37c803ac240fc6"}, + {file = "time_machine-2.7.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b474499ad0083252240bc5be13f8116cc2ca8a89d1ca4967ed74a7b5f0883f95"}, + {file = "time_machine-2.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7df0857709432585b62d2667c0e6e64029b652e2df776b9fb85223c60dce52c7"}, + {file = "time_machine-2.7.1-cp37-cp37m-win32.whl", hash = "sha256:77c8dfe8dc7f45bbfe73494c72f3728d99abec5a020460ad7ffee5247365eba4"}, + {file = "time_machine-2.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:c1fd1c231377ce076f99c8c16999a95510690f8dbd35db0e5fbbc74a17f84b39"}, + {file = "time_machine-2.7.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:462924fb87826882fc7830098e621116599f9259d181a7bbf5a4e49f74ec325b"}, + {file = "time_machine-2.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:46bf3b4a52d43289b23f0015a9d8592ddf621a5058e566c275cb060347d430c1"}, + {file = "time_machine-2.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30afd5b978d8121334c80fa23119d7bd7c9f954169854edf5103e5c8b38358bb"}, + {file = "time_machine-2.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:633fb8c47f3cd64690591ca6981e4fdbcaa54c18d8a57a3cdc24638ca98f8216"}, + {file = "time_machine-2.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b6093c3b70d1d1a66b65f18a6e53b233c8dd5d8ffe7ac59e9d048fb1d5e15c"}, + {file = "time_machine-2.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e62ed7d78694b7e0a2ab30b3dd52ebf26b03e17d6eda0f231fd77e24307a55a9"}, + {file = "time_machine-2.7.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0eaf024d16482ec211a579fd389cbbd4fedd8a1f0a0c41642508815f880ca3a9"}, + {file = "time_machine-2.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2688091ce0c16151faa80625efb34e3096731fbdee6d5284c48c984bce95c311"}, + {file = "time_machine-2.7.1-cp38-cp38-win32.whl", hash = "sha256:2e54bf0521b6e397fcaa03060feb187bbe5aa63ac51dbb97d5bc59fb0c4725f8"}, + {file = "time_machine-2.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:cee72d9e14d36e4b8da6af1d2d784f14da53f76aeb5066540a38318aa907b551"}, + {file = "time_machine-2.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:06322d41d45d86e2dc2520794c95129ff25b8620b33851ed40700c859ebf8c30"}, + {file = "time_machine-2.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:193b14daa3b3cf67e6b55d6e2d63c2eb7c1d3f49017704d4b43963b198656888"}, + {file = "time_machine-2.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1367a89fb857f68cfa723e236cd47febaf201a3a625ad8423110fe0509d5fca8"}, + {file = "time_machine-2.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce350f7e8bd51a0bb064180486300283bec5cd1a21a318a8ffe5f7df11735f36"}, + {file = "time_machine-2.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68ff623d835760314e279aedc0d19a1dc4dec117c6bca388e1ff077c781256bd"}, + {file = "time_machine-2.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:05fecd818d41727d31109a0d039ce07c8311602b45ffc07bffd8ae8b6f266ee5"}, + {file = "time_machine-2.7.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1fe4e604c5effc290c1bbecd3ea98687690d0a88fd98ba93e0246bf19ae2a520"}, + {file = "time_machine-2.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff07a5635d42957f2bd7eb5ca6579f64de368c842e754a4d3414520693b75db9"}, + {file = "time_machine-2.7.1-cp39-cp39-win32.whl", hash = "sha256:8c6314e7e0ffd7af82c8026786d5551aff973e0c86ec1368b0590be9a7620cad"}, + {file = "time_machine-2.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:d50a2620d726788cbde97c58e0f6f61d10337d16d088a1fad789f50a1b5ff4d1"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, -] -tox = [ - {file = "tox-3.24.4-py2.py3-none-any.whl", hash = "sha256:5e274227a53dc9ef856767c21867377ba395992549f02ce55eb549f9fb9a8d10"}, - {file = "tox-3.24.4.tar.gz", hash = "sha256:c30b57fa2477f1fb7c36aa1d83292d5c2336cd0018119e1b1c17340e2c2708ca"}, + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] +tox = [] typed-ast = [ - {file = "typed_ast-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d8314c92414ce7481eee7ad42b353943679cf6f30237b5ecbf7d835519e1212"}, - {file = "typed_ast-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b53ae5de5500529c76225d18eeb060efbcec90ad5e030713fe8dab0fb4531631"}, - {file = "typed_ast-1.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:24058827d8f5d633f97223f5148a7d22628099a3d2efe06654ce872f46f07cdb"}, - {file = "typed_ast-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a6d495c1ef572519a7bac9534dbf6d94c40e5b6a608ef41136133377bba4aa08"}, - {file = "typed_ast-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:de4ecae89c7d8b56169473e08f6bfd2df7f95015591f43126e4ea7865928677e"}, - {file = "typed_ast-1.5.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:256115a5bc7ea9e665c6314ed6671ee2c08ca380f9d5f130bd4d2c1f5848d695"}, - {file = "typed_ast-1.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:7c42707ab981b6cf4b73490c16e9d17fcd5227039720ca14abe415d39a173a30"}, - {file = "typed_ast-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:71dcda943a471d826ea930dd449ac7e76db7be778fcd722deb63642bab32ea3f"}, - {file = "typed_ast-1.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4f30a2bcd8e68adbb791ce1567fdb897357506f7ea6716f6bbdd3053ac4d9471"}, - {file = "typed_ast-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ca9e8300d8ba0b66d140820cf463438c8e7b4cdc6fd710c059bfcfb1531d03fb"}, - {file = "typed_ast-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9caaf2b440efb39ecbc45e2fabde809cbe56272719131a6318fd9bf08b58e2cb"}, - {file = "typed_ast-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9bcad65d66d594bffab8575f39420fe0ee96f66e23c4d927ebb4e24354ec1af"}, - {file = "typed_ast-1.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:591bc04e507595887160ed7aa8d6785867fb86c5793911be79ccede61ae96f4d"}, - {file = "typed_ast-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:a80d84f535642420dd17e16ae25bb46c7f4c16ee231105e7f3eb43976a89670a"}, - {file = "typed_ast-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:38cf5c642fa808300bae1281460d4f9b7617cf864d4e383054a5ef336e344d32"}, - {file = "typed_ast-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b6ab14c56bc9c7e3c30228a0a0b54b915b1579613f6e463ba6f4eb1382e7fd4"}, - {file = "typed_ast-1.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2b8d7007f6280e36fa42652df47087ac7b0a7d7f09f9468f07792ba646aac2d"}, - {file = "typed_ast-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:b6d17f37f6edd879141e64a5db17b67488cfeffeedad8c5cec0392305e9bc775"}, - {file = "typed_ast-1.5.1.tar.gz", hash = "sha256:484137cab8ecf47e137260daa20bafbba5f4e3ec7fda1c1e69ab299b75fa81c5"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, + {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, + {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, + {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, + {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, + {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, + {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, + {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, + {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, ] typing-extensions = [ - {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, - {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, + {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, + {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, ] tzdata = [ - {file = "tzdata-2021.5-py2.py3-none-any.whl", hash = "sha256:3eee491e22ebfe1e5cfcc97a4137cd70f092ce59144d81f8924a844de05ba8f5"}, - {file = "tzdata-2021.5.tar.gz", hash = "sha256:68dbe41afd01b867894bbdfd54fa03f468cfa4f0086bfb4adcd8de8f24f3ee21"}, + {file = "tzdata-2022.1-py2.py3-none-any.whl", hash = "sha256:238e70234214138ed7b4e8a0fab0e5e13872edab3be586ab8198c407620e2ab9"}, + {file = "tzdata-2022.1.tar.gz", hash = "sha256:8b536a8ec63dc0751342b3984193a3118f8fca2afe25752bb9b7fffd398552d3"}, ] virtualenv = [ - {file = "virtualenv-20.10.0-py2.py3-none-any.whl", hash = "sha256:4b02e52a624336eece99c96e3ab7111f469c24ba226a53ec474e8e787b365814"}, - {file = "virtualenv-20.10.0.tar.gz", hash = "sha256:576d05b46eace16a9c348085f7d0dc8ef28713a2cabaa1cf0aea41e8f12c9218"}, + {file = "virtualenv-20.16.2-py2.py3-none-any.whl", hash = "sha256:635b272a8e2f77cb051946f46c60a54ace3cb5e25568228bd6b57fc70eca9ff3"}, + {file = "virtualenv-20.16.2.tar.gz", hash = "sha256:0ef5be6d07181946891f5abc8047fda8bc2f0b4b9bf222c64e6e8963baee76db"}, ] watchdog = [ - {file = "watchdog-2.1.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9693f35162dc6208d10b10ddf0458cc09ad70c30ba689d9206e02cd836ce28a3"}, - {file = "watchdog-2.1.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aba5c812f8ee8a3ff3be51887ca2d55fb8e268439ed44110d3846e4229eb0e8b"}, - {file = "watchdog-2.1.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4ae38bf8ba6f39d5b83f78661273216e7db5b00f08be7592062cb1fc8b8ba542"}, - {file = "watchdog-2.1.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ad6f1796e37db2223d2a3f302f586f74c72c630b48a9872c1e7ae8e92e0ab669"}, - {file = "watchdog-2.1.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:922a69fa533cb0c793b483becaaa0845f655151e7256ec73630a1b2e9ebcb660"}, - {file = "watchdog-2.1.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b2fcf9402fde2672545b139694284dc3b665fd1be660d73eca6805197ef776a3"}, - {file = "watchdog-2.1.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3386b367e950a11b0568062b70cc026c6f645428a698d33d39e013aaeda4cc04"}, - {file = "watchdog-2.1.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f1c00aa35f504197561060ca4c21d3cc079ba29cf6dd2fe61024c70160c990b"}, - {file = "watchdog-2.1.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b52b88021b9541a60531142b0a451baca08d28b74a723d0c99b13c8c8d48d604"}, - {file = "watchdog-2.1.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8047da932432aa32c515ec1447ea79ce578d0559362ca3605f8e9568f844e3c6"}, - {file = "watchdog-2.1.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e92c2d33858c8f560671b448205a268096e17870dcf60a9bb3ac7bfbafb7f5f9"}, - {file = "watchdog-2.1.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b7d336912853d7b77f9b2c24eeed6a5065d0a0cc0d3b6a5a45ad6d1d05fb8cd8"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_aarch64.whl", hash = "sha256:cca7741c0fcc765568350cb139e92b7f9f3c9a08c4f32591d18ab0a6ac9e71b6"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_armv7l.whl", hash = "sha256:25fb5240b195d17de949588628fdf93032ebf163524ef08933db0ea1f99bd685"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_i686.whl", hash = "sha256:be9be735f827820a06340dff2ddea1fb7234561fa5e6300a62fe7f54d40546a0"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0d19fb2441947b58fbf91336638c2b9f4cc98e05e1045404d7a4cb7cddc7a65"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:3becdb380d8916c873ad512f1701f8a92ce79ec6978ffde92919fd18d41da7fb"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_s390x.whl", hash = "sha256:ae67501c95606072aafa865b6ed47343ac6484472a2f95490ba151f6347acfc2"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e0f30db709c939cabf64a6dc5babb276e6d823fd84464ab916f9b9ba5623ca15"}, - {file = "watchdog-2.1.6-py3-none-win32.whl", hash = "sha256:e02794ac791662a5eafc6ffeaf9bcc149035a0e48eb0a9d40a8feb4622605a3d"}, - {file = "watchdog-2.1.6-py3-none-win_amd64.whl", hash = "sha256:bd9ba4f332cf57b2c1f698be0728c020399ef3040577cde2939f2e045b39c1e5"}, - {file = "watchdog-2.1.6-py3-none-win_ia64.whl", hash = "sha256:a0f1c7edf116a12f7245be06120b1852275f9506a7d90227648b250755a03923"}, - {file = "watchdog-2.1.6.tar.gz", hash = "sha256:a36e75df6c767cbf46f61a91c70b3ba71811dfa0aca4a324d9407a06a8b7a2e7"}, -] -zipp = [ - {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, - {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, -] + {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"}, + {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d"}, + {file = "watchdog-2.1.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658"}, + {file = "watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591"}, + {file = "watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd"}, + {file = "watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3"}, + {file = "watchdog-2.1.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d"}, + {file = "watchdog-2.1.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_armv7l.whl", hash = "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_i686.whl", hash = "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64.whl", hash = "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_s390x.whl", hash = "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6"}, + {file = "watchdog-2.1.9-py3-none-win32.whl", hash = "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1"}, + {file = "watchdog-2.1.9-py3-none-win_amd64.whl", hash = "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c"}, + {file = "watchdog-2.1.9-py3-none-win_ia64.whl", hash = "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428"}, + {file = "watchdog-2.1.9.tar.gz", hash = "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609"}, +] +zipp = [] diff --git a/pyproject.toml b/pyproject.toml index 748cae9b..8cf31891 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,10 +31,10 @@ python-dateutil = "^2.6" tzdata = ">=2020.1" [tool.poetry.group.test.dependencies] -pytest = "^6.2.5" -pytest-cov = "^2.5" -pytz = ">=2018.3" -time-machine = "^2.4.0" +pytest = "^7.1.2" +pytest-cov = "^3.0.0" +pytz = ">=2022.1" +time-machine = "^2.7.1" [tool.poetry.group.doc.dependencies] mkdocs = "^1.0" @@ -43,14 +43,14 @@ pygments = "^2.2" markdown-include = "^0.5.1" [tool.poetry.group.lint.dependencies] -black = {version = "^21.12b0", markers = "implementation_name != 'pypy'"} -isort = "^5.9.1" -pre-commit = "^2.10.0" +black = {version = "^22.6.0", markers = "implementation_name != 'pypy'"} +isort = "^5.10.1" +pre-commit = "^2.20.0" [tool.poetry.group.dev.dependencies] -babel = "^2.5" -cleo = "^1.0.0a3" -tox = "^3.0" +babel = "^2.10.3" +cleo = "^1.0.0a5" +tox = "^3.25.1" [tool.poetry.build] generate-setup-file = false @@ -77,6 +77,11 @@ known_third_party = [ "pytzdata", ] +[tool.mypy] +strict = true +files = "pendulum, tests" +show_error_codes = true +pretty = true [build-system] requires = ["poetry-core>=1.1.0a6"] From 3df90b7ab72f605fecbc625f461bda1ff7d93434 Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Wed, 3 Aug 2022 19:55:27 +0200 Subject: [PATCH 02/11] Update old and add new checks to pre-commit --- .pre-commit-config.yaml | 61 +++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bcc97bc7..97d256e8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,31 +1,62 @@ repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.0.1 + hooks: + - id: trailing-whitespace + exclude: ^tests/.*/fixtures/.* + - id: end-of-file-fixer + exclude: ^tests/.*/fixtures/.* + - id: debug-statements + + - repo: https://github.com/hadialqattan/pycln + rev: v2.1.1 + hooks: + - id: pycln + args: [--all] + - repo: https://github.com/psf/black - rev: 21.9b0 + rev: 22.6.0 hooks: - id: black - - repo: https://gitlab.com/pycqa/flake8 - rev: 3.9.2 + - repo: https://github.com/pycqa/flake8 + rev: 4.0.1 hooks: - id: flake8 + additional_dependencies: &flake8_deps + - flake8-broken-line==0.4.0 + - flake8-bugbear==22.7.1 + - flake8-comprehensions==3.10.0 + - flake8-eradicate==1.2.1 + - flake8-quotes==3.3.1 + - flake8-simplify==0.19.2 + - flake8-tidy-imports==4.8.0 + - flake8-type-checking==2.0.3 + - flake8-typing-imports==1.12.0 + - flake8-use-fstring==1.3 + - pep8-naming==0.13.1 + + - repo: https://github.com/asottile/yesqa + rev: v1.3.0 + hooks: + - id: yesqa + additional_dependencies: *flake8_deps - - repo: https://github.com/timothycrosley/isort - rev: 5.9.3 + - repo: https://github.com/pycqa/isort + rev: 5.10.1 hooks: - id: isort - additional_dependencies: [toml] - exclude: ^.*/?setup\.py$ + args: [--add-import, from __future__ import annotations] - repo: https://github.com/asottile/pyupgrade - rev: v2.29.0 + rev: v2.37.3 hooks: - id: pyupgrade - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.0.1 + - repo: https://github.com/pre-commit/mirrors-mypy + rev: v0.971 hooks: - - id: trailing-whitespace - exclude: ^tests/.*/fixtures/.* - - id: end-of-file-fixer - exclude: ^tests/.*/fixtures/.* - - id: debug-statements + - id: mypy + pass_filenames: false + additional_dependencies: + - pytest>=7.1.2 From cfa19d40182d57000d2d02b2bc68cf836f1b9d25 Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Wed, 3 Aug 2022 21:27:09 +0200 Subject: [PATCH 03/11] Run isort --- .coveragerc | 7 ------ .flake8 | 24 +++++++++++++++++++- .pre-commit-config.yaml | 4 ++++ clock | 2 ++ pendulum/__init__.py | 2 ++ pendulum/__version__.py | 2 +- pendulum/_extensions/helpers.py | 2 ++ pendulum/constants.py | 3 +++ pendulum/date.py | 2 ++ pendulum/datetime.py | 2 ++ pendulum/duration.py | 2 ++ pendulum/exceptions.py | 2 ++ pendulum/formatting/__init__.py | 2 ++ pendulum/formatting/difference_formatter.py | 2 ++ pendulum/formatting/formatter.py | 2 ++ pendulum/helpers.py | 2 ++ pendulum/mixins/default.py | 2 ++ pendulum/parser.py | 2 ++ pendulum/parsing/__init__.py | 2 ++ pendulum/parsing/exceptions/__init__.py | 3 +++ pendulum/parsing/iso8601.py | 2 ++ pendulum/period.py | 2 ++ pendulum/time.py | 2 ++ pendulum/tz/__init__.py | 2 ++ pendulum/tz/data/windows.py | 3 +++ pendulum/tz/exceptions.py | 3 +++ pendulum/tz/local_timezone.py | 2 ++ pendulum/tz/timezone.py | 2 ++ pendulum/utils/_compat.py | 2 ++ pyproject.toml | 16 +++++++++++-- tests/conftest.py | 2 ++ tests/date/test_add.py | 2 ++ tests/date/test_behavior.py | 2 ++ tests/date/test_comparison.py | 2 ++ tests/date/test_construct.py | 2 ++ tests/date/test_day_of_week_modifiers.py | 2 ++ tests/date/test_diff.py | 2 ++ tests/date/test_fluent_setters.py | 2 ++ tests/date/test_getters.py | 2 ++ tests/date/test_start_end_of.py | 2 ++ tests/date/test_strings.py | 2 ++ tests/date/test_sub.py | 2 ++ tests/datetime/test_add.py | 2 ++ tests/datetime/test_behavior.py | 2 ++ tests/datetime/test_comparison.py | 2 ++ tests/datetime/test_construct.py | 2 ++ tests/datetime/test_create_from_timestamp.py | 2 ++ tests/datetime/test_day_of_week_modifiers.py | 2 ++ tests/datetime/test_diff.py | 2 ++ tests/datetime/test_fluent_setters.py | 2 ++ tests/datetime/test_from_format.py | 2 ++ tests/datetime/test_getters.py | 2 ++ tests/datetime/test_naive.py | 2 ++ tests/datetime/test_replace.py | 2 ++ tests/datetime/test_start_end_of.py | 2 ++ tests/datetime/test_strings.py | 2 ++ tests/datetime/test_sub.py | 2 ++ tests/datetime/test_timezone.py | 2 ++ tests/duration/test_add_sub.py | 2 ++ tests/duration/test_arithmetic.py | 2 ++ tests/duration/test_behavior.py | 2 ++ tests/duration/test_construct.py | 2 ++ tests/duration/test_in_methods.py | 2 ++ tests/duration/test_in_words.py | 2 ++ tests/duration/test_total_methods.py | 2 ++ tests/formatting/test_formatter.py | 2 ++ tests/helpers/test_local_time.py | 2 ++ tests/localization/test_da.py | 2 ++ tests/localization/test_de.py | 2 ++ tests/localization/test_es.py | 2 ++ tests/localization/test_fa.py | 2 ++ tests/localization/test_fo.py | 2 ++ tests/localization/test_fr.py | 2 ++ tests/localization/test_id.py | 2 ++ tests/localization/test_it.py | 2 ++ tests/localization/test_ko.py | 2 ++ tests/localization/test_lt.py | 2 ++ tests/localization/test_nb.py | 2 ++ tests/localization/test_nl.py | 2 ++ tests/localization/test_nn.py | 2 ++ tests/localization/test_pl.py | 2 ++ tests/localization/test_ru.py | 2 ++ tests/parsing/test_parse_iso8601.py | 2 ++ tests/parsing/test_parsing.py | 2 ++ tests/parsing/test_parsing_duration.py | 2 ++ tests/period/test_add_subtract.py | 2 ++ tests/period/test_arithmetic.py | 2 ++ tests/period/test_behavior.py | 2 ++ tests/period/test_construct.py | 2 ++ tests/period/test_hashing.py | 2 ++ tests/period/test_in_words.py | 2 ++ tests/period/test_range.py | 2 ++ tests/test_helpers.py | 2 ++ tests/test_main.py | 2 ++ tests/test_parsing.py | 2 ++ tests/time/test_add.py | 2 ++ tests/time/test_behavior.py | 2 ++ tests/time/test_comparison.py | 2 ++ tests/time/test_construct.py | 2 ++ tests/time/test_diff.py | 2 ++ tests/time/test_fluent_setters.py | 2 ++ tests/time/test_strings.py | 2 ++ tests/time/test_sub.py | 2 ++ tests/tz/test_helpers.py | 2 ++ tests/tz/test_local_timezone.py | 2 ++ tests/tz/test_timezone.py | 2 ++ tests/tz/test_timezones.py | 2 ++ 107 files changed, 250 insertions(+), 11 deletions(-) delete mode 100644 .coveragerc diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index 73ec6b72..00000000 --- a/.coveragerc +++ /dev/null @@ -1,7 +0,0 @@ -[run] -omit = pendulum/locales/*, - pendulum/_compat.py, - pendulum/__version__.py, - pendulum/_extensions/* - pendulum/parsing/iso8601.py - pendulum/utils/_compat.py diff --git a/.flake8 b/.flake8 index facde560..322a90e5 100644 --- a/.flake8 +++ b/.flake8 @@ -1,9 +1,31 @@ [flake8] max-line-length = 88 -ignore = E501, E203, W503 +ignore = + # E501: Line too long + E501, + # E203: Whitespace before ':' + E203, + #W503: Line break occurred before a binary operator + W503 per-file-ignores = + # F401: Module imported but unused __init__.py:F401 + # F811: Redefinition of unused name from line n pendulum/tz/timezone.py:F811 +min_python_version = 3.7.0 +ban-relative-imports = true +# flake8-use-fstring: https://github.com/MichaelKim0407/flake8-use-fstring#--percent-greedy-and---format-greedy +format-greedy = 1 +inline-quotes = double +enable-extensions = TC, TC1 +type-checking-exempt-modules = typing, typing-extensions +eradicate-whitelist-extend = ^-.*; +extend-ignore = + # SIM106: Handle error-cases first + SIM106, +extend-exclude = + # External to the project's coding standards: + docs/*, exclude = .git __pycache__ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 97d256e8..632bb1d7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -52,11 +52,15 @@ repos: rev: v2.37.3 hooks: - id: pyupgrade + exclude: ^build\.py$ + args: + - --py37-plus - repo: https://github.com/pre-commit/mirrors-mypy rev: v0.971 hooks: - id: mypy pass_filenames: false + exclude: ^build\.py$ additional_dependencies: - pytest>=7.1.2 diff --git a/clock b/clock index 1bfa17c9..2a89bc98 100755 --- a/clock +++ b/clock @@ -1,5 +1,7 @@ #!/usr/bin/env python +from __future__ import annotations + import glob import json import os diff --git a/pendulum/__init__.py b/pendulum/__init__.py index 3e678052..cad1fdaa 100644 --- a/pendulum/__init__.py +++ b/pendulum/__init__.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import datetime as _datetime from typing import Optional diff --git a/pendulum/__version__.py b/pendulum/__version__.py index 58039f50..29e86a85 100644 --- a/pendulum/__version__.py +++ b/pendulum/__version__.py @@ -1 +1 @@ -__version__ = "2.1.1" +__version__ = "3.0.0a" diff --git a/pendulum/_extensions/helpers.py b/pendulum/_extensions/helpers.py index 549f3fc3..f8a9ce7a 100644 --- a/pendulum/_extensions/helpers.py +++ b/pendulum/_extensions/helpers.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import datetime import math import typing diff --git a/pendulum/constants.py b/pendulum/constants.py index 38697d73..c7b3876a 100644 --- a/pendulum/constants.py +++ b/pendulum/constants.py @@ -1,4 +1,7 @@ # The day constants +from __future__ import annotations + + SUNDAY = 0 MONDAY = 1 TUESDAY = 2 diff --git a/pendulum/date.py b/pendulum/date.py index 536b0a8b..c62a2f80 100644 --- a/pendulum/date.py +++ b/pendulum/date.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import calendar import math diff --git a/pendulum/datetime.py b/pendulum/datetime.py index a17d2626..eddf5165 100644 --- a/pendulum/datetime.py +++ b/pendulum/datetime.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import calendar import datetime diff --git a/pendulum/duration.py b/pendulum/duration.py index 9db45e2e..9fde234c 100644 --- a/pendulum/duration.py +++ b/pendulum/duration.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import timedelta import pendulum diff --git a/pendulum/exceptions.py b/pendulum/exceptions.py index 4c6448a6..3ab4db91 100644 --- a/pendulum/exceptions.py +++ b/pendulum/exceptions.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from .parsing.exceptions import ParserError # noqa diff --git a/pendulum/formatting/__init__.py b/pendulum/formatting/__init__.py index 856321af..8e33afd5 100644 --- a/pendulum/formatting/__init__.py +++ b/pendulum/formatting/__init__.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from .formatter import Formatter diff --git a/pendulum/formatting/difference_formatter.py b/pendulum/formatting/difference_formatter.py index 74f9616b..f5a92984 100644 --- a/pendulum/formatting/difference_formatter.py +++ b/pendulum/formatting/difference_formatter.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import typing import pendulum diff --git a/pendulum/formatting/formatter.py b/pendulum/formatting/formatter.py index c264644d..96fee604 100644 --- a/pendulum/formatting/formatter.py +++ b/pendulum/formatting/formatter.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import datetime import re import typing diff --git a/pendulum/helpers.py b/pendulum/helpers.py index 3d758541..0e85f548 100644 --- a/pendulum/helpers.py +++ b/pendulum/helpers.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import struct diff --git a/pendulum/mixins/default.py b/pendulum/mixins/default.py index 6db27192..cff9cc9c 100644 --- a/pendulum/mixins/default.py +++ b/pendulum/mixins/default.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from ..formatting import Formatter diff --git a/pendulum/parser.py b/pendulum/parser.py index 9b081755..c58781e9 100644 --- a/pendulum/parser.py +++ b/pendulum/parser.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import datetime import typing diff --git a/pendulum/parsing/__init__.py b/pendulum/parsing/__init__.py index 1d15023b..352f68c8 100644 --- a/pendulum/parsing/__init__.py +++ b/pendulum/parsing/__init__.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import copy import os import re diff --git a/pendulum/parsing/exceptions/__init__.py b/pendulum/parsing/exceptions/__init__.py index 9b4ea71a..05195b5c 100644 --- a/pendulum/parsing/exceptions/__init__.py +++ b/pendulum/parsing/exceptions/__init__.py @@ -1,3 +1,6 @@ +from __future__ import annotations + + class ParserError(ValueError): pass diff --git a/pendulum/parsing/iso8601.py b/pendulum/parsing/iso8601.py index 4f507264..acdd8278 100644 --- a/pendulum/parsing/iso8601.py +++ b/pendulum/parsing/iso8601.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import datetime import re diff --git a/pendulum/period.py b/pendulum/period.py index 47475567..c5e5f457 100644 --- a/pendulum/period.py +++ b/pendulum/period.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import operator from datetime import date diff --git a/pendulum/time.py b/pendulum/time.py index 20948c1e..064c6284 100644 --- a/pendulum/time.py +++ b/pendulum/time.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import time from datetime import timedelta diff --git a/pendulum/tz/__init__.py b/pendulum/tz/__init__.py index ba4af1b1..5477393e 100644 --- a/pendulum/tz/__init__.py +++ b/pendulum/tz/__init__.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os from typing import Union diff --git a/pendulum/tz/data/windows.py b/pendulum/tz/data/windows.py index 68bcfeb2..e76e6bbf 100644 --- a/pendulum/tz/data/windows.py +++ b/pendulum/tz/data/windows.py @@ -1,3 +1,6 @@ +from __future__ import annotations + + windows_timezones = { "AUS Central Standard Time": "Australia/Darwin", "AUS Eastern Standard Time": "Australia/Sydney", diff --git a/pendulum/tz/exceptions.py b/pendulum/tz/exceptions.py index 09e6d045..5d5a393e 100644 --- a/pendulum/tz/exceptions.py +++ b/pendulum/tz/exceptions.py @@ -1,3 +1,6 @@ +from __future__ import annotations + + class TimezoneError(ValueError): pass diff --git a/pendulum/tz/local_timezone.py b/pendulum/tz/local_timezone.py index 185abfe2..b2e11088 100644 --- a/pendulum/tz/local_timezone.py +++ b/pendulum/tz/local_timezone.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import re import sys diff --git a/pendulum/tz/timezone.py b/pendulum/tz/timezone.py index 120388a3..e657243a 100644 --- a/pendulum/tz/timezone.py +++ b/pendulum/tz/timezone.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from abc import ABC from abc import abstractmethod from datetime import datetime diff --git a/pendulum/utils/_compat.py b/pendulum/utils/_compat.py index 11924e6c..60ad52cb 100644 --- a/pendulum/utils/_compat.py +++ b/pendulum/utils/_compat.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import sys diff --git a/pyproject.toml b/pyproject.toml index 8cf31891..eaee5a91 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,8 +64,11 @@ include_trailing_comma = true lines_after_imports = 2 lines_between_types = 1 use_parentheses = true -not_skip = "__init__.py" -skip_glob = ["*/setup.py"] +skip_glob = [ + "pendulum/locales/**", + "build.py", + "pendulum/__version__.py", +] filter_files = true known_first_party = "pendulum" @@ -83,6 +86,15 @@ files = "pendulum, tests" show_error_codes = true pretty = true +[tool.coverage.run] +omit = [ + "pendulum/locales/*", + "pendulum/__version__.py,", + "pendulum/_extensions/*", + "pendulum/parsing/iso8601.py", + "pendulum/utils/_compat.py", +] + [build-system] requires = ["poetry-core>=1.1.0a6"] build-backend = "poetry.core.masonry.api" diff --git a/tests/conftest.py b/tests/conftest.py index 18abbda9..14d20b1a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest import pendulum diff --git a/tests/date/test_add.py b/tests/date/test_add.py index 969dfb4b..01c1ef04 100644 --- a/tests/date/test_add.py +++ b/tests/date/test_add.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import timedelta import pytest diff --git a/tests/date/test_behavior.py b/tests/date/test_behavior.py index 23de481a..98dd175f 100644 --- a/tests/date/test_behavior.py +++ b/tests/date/test_behavior.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pickle from datetime import date diff --git a/tests/date/test_comparison.py b/tests/date/test_comparison.py index 052ae2f3..bd6c9b19 100644 --- a/tests/date/test_comparison.py +++ b/tests/date/test_comparison.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import date import pendulum diff --git a/tests/date/test_construct.py b/tests/date/test_construct.py index 615ca80d..eb3635d2 100644 --- a/tests/date/test_construct.py +++ b/tests/date/test_construct.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from pendulum import Date from ..conftest import assert_date diff --git a/tests/date/test_day_of_week_modifiers.py b/tests/date/test_day_of_week_modifiers.py index 85d67b69..5d6a0255 100644 --- a/tests/date/test_day_of_week_modifiers.py +++ b/tests/date/test_day_of_week_modifiers.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest import pendulum diff --git a/tests/date/test_diff.py b/tests/date/test_diff.py index 6726f9ae..e1ba44d7 100644 --- a/tests/date/test_diff.py +++ b/tests/date/test_diff.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import date import pytest diff --git a/tests/date/test_fluent_setters.py b/tests/date/test_fluent_setters.py index 4eaea8c4..0d11cf94 100644 --- a/tests/date/test_fluent_setters.py +++ b/tests/date/test_fluent_setters.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from ..conftest import assert_date diff --git a/tests/date/test_getters.py b/tests/date/test_getters.py index 3d95ae30..a4927941 100644 --- a/tests/date/test_getters.py +++ b/tests/date/test_getters.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/date/test_start_end_of.py b/tests/date/test_start_end_of.py index b27c3e5d..e966e257 100644 --- a/tests/date/test_start_end_of.py +++ b/tests/date/test_start_end_of.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest import pendulum diff --git a/tests/date/test_strings.py b/tests/date/test_strings.py index fe671b98..f3735818 100644 --- a/tests/date/test_strings.py +++ b/tests/date/test_strings.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/date/test_sub.py b/tests/date/test_sub.py index 74ae6c33..66500ba9 100644 --- a/tests/date/test_sub.py +++ b/tests/date/test_sub.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import datetime from datetime import timedelta diff --git a/tests/datetime/test_add.py b/tests/datetime/test_add.py index 3c40c8fd..6b17945c 100644 --- a/tests/datetime/test_add.py +++ b/tests/datetime/test_add.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import timedelta import pytest diff --git a/tests/datetime/test_behavior.py b/tests/datetime/test_behavior.py index 137e1df5..712a4e53 100644 --- a/tests/datetime/test_behavior.py +++ b/tests/datetime/test_behavior.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pickle from copy import deepcopy diff --git a/tests/datetime/test_comparison.py b/tests/datetime/test_comparison.py index 564510c9..6e5b6420 100644 --- a/tests/datetime/test_comparison.py +++ b/tests/datetime/test_comparison.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import datetime import pytz diff --git a/tests/datetime/test_construct.py b/tests/datetime/test_construct.py index 1466f21f..0405e467 100644 --- a/tests/datetime/test_construct.py +++ b/tests/datetime/test_construct.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os from datetime import datetime diff --git a/tests/datetime/test_create_from_timestamp.py b/tests/datetime/test_create_from_timestamp.py index e7e24d7a..f466ee10 100644 --- a/tests/datetime/test_create_from_timestamp.py +++ b/tests/datetime/test_create_from_timestamp.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from pendulum import timezone diff --git a/tests/datetime/test_day_of_week_modifiers.py b/tests/datetime/test_day_of_week_modifiers.py index 80d0fa0b..93c85383 100644 --- a/tests/datetime/test_day_of_week_modifiers.py +++ b/tests/datetime/test_day_of_week_modifiers.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest import pendulum diff --git a/tests/datetime/test_diff.py b/tests/datetime/test_diff.py index e4957e6e..592318a5 100644 --- a/tests/datetime/test_diff.py +++ b/tests/datetime/test_diff.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import datetime import pytest diff --git a/tests/datetime/test_fluent_setters.py b/tests/datetime/test_fluent_setters.py index 13a313f8..86633faa 100644 --- a/tests/datetime/test_fluent_setters.py +++ b/tests/datetime/test_fluent_setters.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import datetime import pendulum diff --git a/tests/datetime/test_from_format.py b/tests/datetime/test_from_format.py index fcc9d678..bf6d6c1d 100644 --- a/tests/datetime/test_from_format.py +++ b/tests/datetime/test_from_format.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest import pendulum diff --git a/tests/datetime/test_getters.py b/tests/datetime/test_getters.py index 5948fc92..c0c7760b 100644 --- a/tests/datetime/test_getters.py +++ b/tests/datetime/test_getters.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import struct import pytest diff --git a/tests/datetime/test_naive.py b/tests/datetime/test_naive.py index 61afaae7..a5488318 100644 --- a/tests/datetime/test_naive.py +++ b/tests/datetime/test_naive.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from ..conftest import assert_datetime diff --git a/tests/datetime/test_replace.py b/tests/datetime/test_replace.py index 11466f43..13282a8b 100644 --- a/tests/datetime/test_replace.py +++ b/tests/datetime/test_replace.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from ..conftest import assert_datetime diff --git a/tests/datetime/test_start_end_of.py b/tests/datetime/test_start_end_of.py index 09350d46..8ab58a2b 100644 --- a/tests/datetime/test_start_end_of.py +++ b/tests/datetime/test_start_end_of.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest import pendulum diff --git a/tests/datetime/test_strings.py b/tests/datetime/test_strings.py index ea8233d0..5ce6ed06 100644 --- a/tests/datetime/test_strings.py +++ b/tests/datetime/test_strings.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest import pendulum diff --git a/tests/datetime/test_sub.py b/tests/datetime/test_sub.py index 7ebf5222..a962e095 100644 --- a/tests/datetime/test_sub.py +++ b/tests/datetime/test_sub.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import timedelta import pytest diff --git a/tests/datetime/test_timezone.py b/tests/datetime/test_timezone.py index 96398e37..1b6fb460 100644 --- a/tests/datetime/test_timezone.py +++ b/tests/datetime/test_timezone.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from ..conftest import assert_datetime diff --git a/tests/duration/test_add_sub.py b/tests/duration/test_add_sub.py index 530343ae..0482c8f0 100644 --- a/tests/duration/test_add_sub.py +++ b/tests/duration/test_add_sub.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import timedelta import pendulum diff --git a/tests/duration/test_arithmetic.py b/tests/duration/test_arithmetic.py index 0f3283a5..33992198 100644 --- a/tests/duration/test_arithmetic.py +++ b/tests/duration/test_arithmetic.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from ..conftest import assert_duration diff --git a/tests/duration/test_behavior.py b/tests/duration/test_behavior.py index 115e3979..a97bbde6 100644 --- a/tests/duration/test_behavior.py +++ b/tests/duration/test_behavior.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pickle from datetime import timedelta diff --git a/tests/duration/test_construct.py b/tests/duration/test_construct.py index bd33a361..2a1179c5 100644 --- a/tests/duration/test_construct.py +++ b/tests/duration/test_construct.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import timedelta import pytest diff --git a/tests/duration/test_in_methods.py b/tests/duration/test_in_methods.py index 85ad3e7a..4527257f 100644 --- a/tests/duration/test_in_methods.py +++ b/tests/duration/test_in_methods.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/duration/test_in_words.py b/tests/duration/test_in_words.py index 499e3c35..c0a1a1fe 100644 --- a/tests/duration/test_in_words.py +++ b/tests/duration/test_in_words.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/duration/test_total_methods.py b/tests/duration/test_total_methods.py index 9c2897ee..aabcd6c0 100644 --- a/tests/duration/test_total_methods.py +++ b/tests/duration/test_total_methods.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/formatting/test_formatter.py b/tests/formatting/test_formatter.py index 97ca69b4..76c7a7ff 100644 --- a/tests/formatting/test_formatter.py +++ b/tests/formatting/test_formatter.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest import pendulum diff --git a/tests/helpers/test_local_time.py b/tests/helpers/test_local_time.py index a9afbd0d..05631077 100644 --- a/tests/helpers/test_local_time.py +++ b/tests/helpers/test_local_time.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from pendulum.helpers import local_time diff --git a/tests/localization/test_da.py b/tests/localization/test_da.py index b5728442..7b455faf 100644 --- a/tests/localization/test_da.py +++ b/tests/localization/test_da.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_de.py b/tests/localization/test_de.py index 94aa18e3..0b051eef 100644 --- a/tests/localization/test_de.py +++ b/tests/localization/test_de.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_es.py b/tests/localization/test_es.py index 80f64cd2..4e8af450 100644 --- a/tests/localization/test_es.py +++ b/tests/localization/test_es.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_fa.py b/tests/localization/test_fa.py index 392f3250..2c52b0e0 100644 --- a/tests/localization/test_fa.py +++ b/tests/localization/test_fa.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_fo.py b/tests/localization/test_fo.py index 67ec0a69..d3c82a15 100644 --- a/tests/localization/test_fo.py +++ b/tests/localization/test_fo.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_fr.py b/tests/localization/test_fr.py index d43674cb..5080061f 100644 --- a/tests/localization/test_fr.py +++ b/tests/localization/test_fr.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_id.py b/tests/localization/test_id.py index 1eda1496..9885c456 100644 --- a/tests/localization/test_id.py +++ b/tests/localization/test_id.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_it.py b/tests/localization/test_it.py index 171a5ce6..b7fca2a2 100644 --- a/tests/localization/test_it.py +++ b/tests/localization/test_it.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_ko.py b/tests/localization/test_ko.py index 44e5f7cb..24a392f2 100644 --- a/tests/localization/test_ko.py +++ b/tests/localization/test_ko.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_lt.py b/tests/localization/test_lt.py index db47ee8d..edeb9aa9 100644 --- a/tests/localization/test_lt.py +++ b/tests/localization/test_lt.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_nb.py b/tests/localization/test_nb.py index 12509d3d..8e548d24 100644 --- a/tests/localization/test_nb.py +++ b/tests/localization/test_nb.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_nl.py b/tests/localization/test_nl.py index 60649adf..e6f8ee91 100644 --- a/tests/localization/test_nl.py +++ b/tests/localization/test_nl.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_nn.py b/tests/localization/test_nn.py index d159641a..bd896718 100644 --- a/tests/localization/test_nn.py +++ b/tests/localization/test_nn.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_pl.py b/tests/localization/test_pl.py index 50ca10ad..e525d716 100644 --- a/tests/localization/test_pl.py +++ b/tests/localization/test_pl.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/localization/test_ru.py b/tests/localization/test_ru.py index a87ea295..5b7dd35d 100644 --- a/tests/localization/test_ru.py +++ b/tests/localization/test_ru.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/parsing/test_parse_iso8601.py b/tests/parsing/test_parse_iso8601.py index d86cb621..83f28810 100644 --- a/tests/parsing/test_parse_iso8601.py +++ b/tests/parsing/test_parse_iso8601.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import date from datetime import datetime from datetime import time diff --git a/tests/parsing/test_parsing.py b/tests/parsing/test_parsing.py index 6c113bb2..50526746 100644 --- a/tests/parsing/test_parsing.py +++ b/tests/parsing/test_parsing.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import datetime import pytest diff --git a/tests/parsing/test_parsing_duration.py b/tests/parsing/test_parsing_duration.py index 41d488b7..ab8b9920 100644 --- a/tests/parsing/test_parsing_duration.py +++ b/tests/parsing/test_parsing_duration.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from pendulum.parsing import ParserError diff --git a/tests/period/test_add_subtract.py b/tests/period/test_add_subtract.py index 0a7ff756..88525a36 100644 --- a/tests/period/test_add_subtract.py +++ b/tests/period/test_add_subtract.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/period/test_arithmetic.py b/tests/period/test_arithmetic.py index 47b6ddfb..71f7202f 100644 --- a/tests/period/test_arithmetic.py +++ b/tests/period/test_arithmetic.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from ..conftest import assert_duration diff --git a/tests/period/test_behavior.py b/tests/period/test_behavior.py index 7ad7b455..98cf2494 100644 --- a/tests/period/test_behavior.py +++ b/tests/period/test_behavior.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pickle from datetime import timedelta diff --git a/tests/period/test_construct.py b/tests/period/test_construct.py index 21538fc2..f5946b22 100644 --- a/tests/period/test_construct.py +++ b/tests/period/test_construct.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import datetime import pendulum diff --git a/tests/period/test_hashing.py b/tests/period/test_hashing.py index 2a567f11..c18502ff 100644 --- a/tests/period/test_hashing.py +++ b/tests/period/test_hashing.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/period/test_in_words.py b/tests/period/test_in_words.py index 7bedbc7a..a6e8fb2a 100644 --- a/tests/period/test_in_words.py +++ b/tests/period/test_in_words.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum diff --git a/tests/period/test_range.py b/tests/period/test_range.py index 55aac10c..663bd765 100644 --- a/tests/period/test_range.py +++ b/tests/period/test_range.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from pendulum import Period diff --git a/tests/test_helpers.py b/tests/test_helpers.py index cb17385e..0a898895 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import datetime import pytest diff --git a/tests/test_main.py b/tests/test_main.py index becc4964..1205b3de 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytz from pendulum import _safe_timezone diff --git a/tests/test_parsing.py b/tests/test_parsing.py index 3dcf050b..fd895634 100644 --- a/tests/test_parsing.py +++ b/tests/test_parsing.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from .conftest import assert_date diff --git a/tests/time/test_add.py b/tests/time/test_add.py index ea44e175..7075ebe2 100644 --- a/tests/time/test_add.py +++ b/tests/time/test_add.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import timedelta import pytest diff --git a/tests/time/test_behavior.py b/tests/time/test_behavior.py index 66fde86c..0071c944 100644 --- a/tests/time/test_behavior.py +++ b/tests/time/test_behavior.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pickle from datetime import time diff --git a/tests/time/test_comparison.py b/tests/time/test_comparison.py index b163ecba..2ed7c1cf 100644 --- a/tests/time/test_comparison.py +++ b/tests/time/test_comparison.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import time import pendulum diff --git a/tests/time/test_construct.py b/tests/time/test_construct.py index d2d106fe..2d1fdb3a 100644 --- a/tests/time/test_construct.py +++ b/tests/time/test_construct.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from ..conftest import assert_time diff --git a/tests/time/test_diff.py b/tests/time/test_diff.py index 5e99701b..dd5e0938 100644 --- a/tests/time/test_diff.py +++ b/tests/time/test_diff.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pendulum from pendulum import Time diff --git a/tests/time/test_fluent_setters.py b/tests/time/test_fluent_setters.py index 1337ec51..e21ade6b 100644 --- a/tests/time/test_fluent_setters.py +++ b/tests/time/test_fluent_setters.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from pendulum import Time from ..conftest import assert_time diff --git a/tests/time/test_strings.py b/tests/time/test_strings.py index 57ac988f..db3c9cd1 100644 --- a/tests/time/test_strings.py +++ b/tests/time/test_strings.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from pendulum import Time diff --git a/tests/time/test_sub.py b/tests/time/test_sub.py index 67ed915a..f15de7b0 100644 --- a/tests/time/test_sub.py +++ b/tests/time/test_sub.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import time from datetime import timedelta diff --git a/tests/tz/test_helpers.py b/tests/tz/test_helpers.py index cc09c473..edec6fda 100644 --- a/tests/tz/test_helpers.py +++ b/tests/tz/test_helpers.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from pendulum.tz import timezone diff --git a/tests/tz/test_local_timezone.py b/tests/tz/test_local_timezone.py index dfdab991..b8eff6de 100644 --- a/tests/tz/test_local_timezone.py +++ b/tests/tz/test_local_timezone.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import sys diff --git a/tests/tz/test_timezone.py b/tests/tz/test_timezone.py index af71fa39..40f3e2a1 100644 --- a/tests/tz/test_timezone.py +++ b/tests/tz/test_timezone.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from datetime import datetime from datetime import timedelta diff --git a/tests/tz/test_timezones.py b/tests/tz/test_timezones.py index 41401275..abe599ed 100644 --- a/tests/tz/test_timezones.py +++ b/tests/tz/test_timezones.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest import pendulum From e014199a6be8ce4e086ac2612dab9bc9093dc6dc Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Thu, 4 Aug 2022 00:39:41 +0200 Subject: [PATCH 04/11] Modernize with pyupgrade and com2ann --- clock | 15 +- pendulum/__init__.py | 26 +-- pendulum/_extensions/helpers.py | 20 +-- pendulum/date.py | 4 +- pendulum/datetime.py | 184 ++++++++++---------- pendulum/duration.py | 8 +- pendulum/formatting/difference_formatter.py | 8 +- pendulum/formatting/formatter.py | 40 ++--- pendulum/helpers.py | 54 +++--- pendulum/locales/locale.py | 4 +- pendulum/parser.py | 4 +- pendulum/parsing/_iso8601.c | 2 +- pendulum/parsing/iso8601.py | 4 +- pendulum/period.py | 8 +- pendulum/time.py | 2 +- pendulum/tz/__init__.py | 2 +- pendulum/tz/local_timezone.py | 6 +- pendulum/tz/timezone.py | 14 +- tests/datetime/test_strings.py | 2 +- 19 files changed, 203 insertions(+), 204 deletions(-) diff --git a/clock b/clock index 2a89bc98..d549e21d 100755 --- a/clock +++ b/clock @@ -193,8 +193,8 @@ translations = {{}} else: v = repr(v) - s.append("{}{!r}: {},\n".format(" " * tab, k, v)) - s.append("%s}" % (" " * (tab - 1))) + s.append(f"{' ' * tab}{k!r}: {v},\n") + s.append(f'{" " * (tab - 1)}}}') return "".join(s) @@ -202,7 +202,7 @@ translations = {{}} to_py = _LambdaCompiler().compile result = ["lambda n: "] for tag, ast in PluralRule.parse(rule).abstract: - result.append("'{}' if {} else ".format(tag, to_py(ast))) + result.append(f"'{tag}' if {to_py(ast)} else ") result.append("'other'") return "".join(result) @@ -217,13 +217,13 @@ translations = {{}} limit = PATTERN_CHARS[fieldchar] if limit and fieldnum not in limit: raise ValueError( - "Invalid length for field: %r" % (fieldchar * fieldnum) + f"Invalid length for field: {(fieldchar * fieldnum)!r}" ) result.append( self.TOKENS_MAP.get(fieldchar * fieldnum, fieldchar * fieldnum) ) else: - raise NotImplementedError("Unknown token type: %s" % tok_type) + raise NotImplementedError(f"Unknown token type: {tok_type}") return "".join(result) @@ -258,11 +258,10 @@ class WindowsTzDump(Command): for name in sorted_names: tznames[name] = raw_tznames[name] - mapping = json.dumps(tznames, indent=4) - mapping = "windows_timezones = " + mapping.replace('"', "'") + "\n" + mapping = json.dumps(tznames, indent=4).replace('"', "'") with open(os.path.join(self.MAPPING_DIR, "windows.py"), "w") as f: - f.write(mapping) + f.write(f"windows_timezones = {mapping}\n") app = Application("clock", __version__) diff --git a/pendulum/__init__.py b/pendulum/__init__.py index cad1fdaa..6916ec3e 100644 --- a/pendulum/__init__.py +++ b/pendulum/__init__.py @@ -53,7 +53,7 @@ from .tz.timezone import Timezone -_TEST_NOW = None # type: Optional[DateTime] +_TEST_NOW: DateTime | None = None _LOCALE = "en" _WEEK_STARTS_AT = MONDAY _WEEK_ENDS_AT = SUNDAY @@ -62,7 +62,7 @@ def _safe_timezone( - obj: Optional[Union[str, float, _datetime.tzinfo, Timezone]] + obj: str | float | _datetime.tzinfo | Timezone | None ) -> Timezone: """ Creates a timezone instance @@ -102,8 +102,8 @@ def datetime( minute: int = 0, second: int = 0, microsecond: int = 0, - tz: Optional[Union[str, float, Timezone]] = UTC, - fold: Optional[int] = 1, + tz: str | float | Timezone | None = UTC, + fold: int | None = 1, raise_on_unknown_times: bool = False, ) -> DateTime: """ @@ -148,7 +148,7 @@ def naive( minute: int = 0, second: int = 0, microsecond: int = 0, - fold: Optional[int] = 1, + fold: int | None = 1, ) -> DateTime: """ Return a naive DateTime. @@ -171,7 +171,7 @@ def time(hour: int, minute: int = 0, second: int = 0, microsecond: int = 0) -> T def instance( - dt: _datetime.datetime, tz: Optional[Union[str, Timezone]] = UTC + dt: _datetime.datetime, tz: str | Timezone | None = UTC ) -> DateTime: """ Create a DateTime instance from a datetime one. @@ -200,28 +200,28 @@ def instance( ) -def now(tz: Optional[Union[str, Timezone]] = None) -> DateTime: +def now(tz: str | Timezone | None = None) -> DateTime: """ Get a DateTime instance for the current date and time. """ return DateTime.now(tz) -def today(tz: Union[str, Timezone] = "local") -> DateTime: +def today(tz: str | Timezone = "local") -> DateTime: """ Create a DateTime instance for today. """ return now(tz).start_of("day") -def tomorrow(tz: Union[str, Timezone] = "local") -> DateTime: +def tomorrow(tz: str | Timezone = "local") -> DateTime: """ Create a DateTime instance for today. """ return today(tz).add(days=1) -def yesterday(tz: Union[str, Timezone] = "local") -> DateTime: +def yesterday(tz: str | Timezone = "local") -> DateTime: """ Create a DateTime instance for today. """ @@ -231,8 +231,8 @@ def yesterday(tz: Union[str, Timezone] = "local") -> DateTime: def from_format( string: str, fmt: str, - tz: Union[str, Timezone] = UTC, - locale: Optional[str] = None, # noqa + tz: str | Timezone = UTC, + locale: str | None = None, # noqa ) -> DateTime: """ Creates a DateTime instance from a specific format. @@ -245,7 +245,7 @@ def from_format( def from_timestamp( - timestamp: Union[int, float], tz: Union[str, Timezone] = UTC + timestamp: int | float, tz: str | Timezone = UTC ) -> DateTime: """ Create a DateTime instance from a timestamp. diff --git a/pendulum/_extensions/helpers.py b/pendulum/_extensions/helpers.py index f8a9ce7a..8d493263 100644 --- a/pendulum/_extensions/helpers.py +++ b/pendulum/_extensions/helpers.py @@ -49,18 +49,18 @@ def __repr__(self): ) -def is_leap(year): # type: (int) -> bool +def is_leap(year: int) -> bool: return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) -def is_long_year(year): # type: (int) -> bool +def is_long_year(year: int) -> bool: def p(y): return y + y // 4 - y // 100 + y // 400 return p(year) % 7 == 4 or p(year - 1) % 7 == 3 -def week_day(year, month, day): # type: (int, int, int) -> int +def week_day(year: int, month: int, day: int) -> int: if month < 3: year -= 1 @@ -79,14 +79,14 @@ def week_day(year, month, day): # type: (int, int, int) -> int return w -def days_in_year(year): # type: (int) -> int +def days_in_year(year: int) -> int: if is_leap(year): return DAYS_PER_L_YEAR return DAYS_PER_N_YEAR -def timestamp(dt): # type: (datetime.datetime) -> int +def timestamp(dt: datetime.datetime) -> int: year = dt.year result = (year - 1970) * 365 + MONTHS_OFFSETS[0][dt.month] @@ -109,8 +109,8 @@ def timestamp(dt): # type: (datetime.datetime) -> int def local_time( - unix_time, utc_offset, microseconds -): # type: (int, int, int) -> typing.Tuple[int, int, int, int, int, int, int] + unix_time: int, utc_offset: int, microseconds: int +) -> tuple[int, int, int, int, int, int, int]: """ Returns a UNIX time as a broken down time for a particular transition type. @@ -186,8 +186,8 @@ def local_time( def precise_diff( - d1, d2 -): # type: (typing.Union[datetime.datetime, datetime.date], typing.Union[datetime.datetime, datetime.date]) -> PreciseDiff + d1: datetime.datetime | datetime.date, d2: datetime.datetime | datetime.date +) -> PreciseDiff: """ Calculate a precise difference between two datetimes. @@ -351,7 +351,7 @@ def precise_diff( ) -def _day_number(year, month, day): # type: (int, int, int) -> int +def _day_number(year: int, month: int, day: int) -> int: month = (month + 9) % 12 year = year - month // 10 diff --git a/pendulum/date.py b/pendulum/date.py index c62a2f80..1d2e6ce9 100644 --- a/pendulum/date.py +++ b/pendulum/date.py @@ -419,9 +419,9 @@ def end_of(self, unit): :rtype: Date """ if unit not in self._MODIFIERS_VALID_UNITS: - raise ValueError('Invalid unit "%s" for end_of()' % unit) + raise ValueError(f'Invalid unit "{unit}" for end_of()') - return getattr(self, "_end_of_%s" % unit)() + return getattr(self, f"_end_of_{unit}")() def _start_of_day(self): """ diff --git a/pendulum/datetime.py b/pendulum/datetime.py index eddf5165..af0d00c8 100644 --- a/pendulum/datetime.py +++ b/pendulum/datetime.py @@ -45,11 +45,11 @@ class DateTime(datetime.datetime, Date): - EPOCH: Optional["DateTime"] = None + EPOCH: DateTime | None = None # Formats - _FORMATS: Dict[str, Union[str, Callable]] = { + _FORMATS: dict[str, str | Callable] = { "atom": ATOM, "cookie": COOKIE, "iso8601": lambda dt: dt.isoformat(), @@ -65,7 +65,7 @@ class DateTime(datetime.datetime, Date): _EPOCH: datetime.datetime = datetime.datetime(1970, 1, 1, tzinfo=UTC) - _MODIFIERS_VALID_UNITS: List[str] = [ + _MODIFIERS_VALID_UNITS: list[str] = [ "second", "minute", "hour", @@ -87,10 +87,10 @@ def create( minute: int = 0, second: int = 0, microsecond: int = 0, - tz: Optional[Union[str, float, Timezone]] = UTC, - fold: Optional[int] = 1, + tz: str | float | Timezone | None = UTC, + fold: int | None = 1, raise_on_unknown_times: bool = False, - ) -> "DateTime": + ) -> DateTime: """ Creates a new DateTime instance from a specific date and time. """ @@ -117,7 +117,7 @@ def create( ) @classmethod - def now(cls, tz: Optional[Union[str, Timezone]] = None) -> "DateTime": + def now(cls, tz: str | Timezone | None = None) -> DateTime: """ Get a DateTime instance for the current date and time. """ @@ -152,18 +152,18 @@ def now(cls, tz: Optional[Union[str, Timezone]] = None) -> "DateTime": ) @classmethod - def utcnow(cls) -> "DateTime": + def utcnow(cls) -> DateTime: """ Get a DateTime instance for the current date and time in UTC. """ return pendulum.now(UTC) @classmethod - def today(cls) -> "DateTime": + def today(cls) -> DateTime: return pendulum.now() @classmethod - def strptime(cls, time: str, fmt: str) -> "DateTime": + def strptime(cls, time: str, fmt: str) -> DateTime: return pendulum.instance(datetime.datetime.strptime(time, fmt)) # Getters/Setters @@ -233,18 +233,18 @@ def offset_hours(self) -> int: return self.get_offset() / SECONDS_PER_MINUTE / MINUTES_PER_HOUR @property - def timezone(self) -> Optional[Timezone]: + def timezone(self) -> Timezone | None: if not isinstance(self.tzinfo, (Timezone, FixedTimezone)): return return self.tzinfo @property - def tz(self) -> Optional[Timezone]: + def tz(self) -> Timezone | None: return self.timezone @property - def timezone_name(self) -> Optional[str]: + def timezone_name(self) -> str | None: tz = self.timezone if tz is None: @@ -274,7 +274,7 @@ def date(self) -> Date: def time(self) -> Time: return Time(self.hour, self.minute, self.second, self.microsecond) - def naive(self) -> "DateTime": + def naive(self) -> DateTime: """ Return the DateTime without timezone information. """ @@ -288,7 +288,7 @@ def naive(self) -> "DateTime": self.microsecond, ) - def on(self, year: int, month: int, day: int) -> "DateTime": + def on(self, year: int, month: int, day: int) -> DateTime: """ Returns a new instance with the current date set to a different date. """ @@ -296,7 +296,7 @@ def on(self, year: int, month: int, day: int) -> "DateTime": def at( self, hour: int, minute: int = 0, second: int = 0, microsecond: int = 0 - ) -> "DateTime": + ) -> DateTime: """ Returns a new instance with the current time to a different time. """ @@ -304,7 +304,7 @@ def at( hour=hour, minute=minute, second=second, microsecond=microsecond ) - def in_timezone(self, tz: Union[str, Timezone]) -> "DateTime": + def in_timezone(self, tz: str | Timezone) -> DateTime: """ Set the instance's timezone from a string or object. """ @@ -316,7 +316,7 @@ def in_timezone(self, tz: Union[str, Timezone]) -> "DateTime": return tz.convert(dt) - def in_tz(self, tz: Union[str, Timezone]) -> "DateTime": + def in_tz(self, tz: str | Timezone) -> DateTime: """ Set the instance's timezone from a string or object. """ @@ -413,7 +413,7 @@ def to_w3c_string(self) -> str: """ return self._to_string("w3c") - def _to_string(self, fmt: str, locale: Optional[str] = None) -> str: + def _to_string(self, fmt: str, locale: str | None = None) -> str: """ Format the instance to a common string format. """ @@ -456,7 +456,7 @@ def __repr__(self) -> str: # Comparisons def closest( self, dt1: datetime.datetime, dt2: datetime.datetime, *dts: datetime.datetime - ) -> "DateTime": + ) -> DateTime: """ Get the farthest date from the instance. """ @@ -469,7 +469,7 @@ def closest( def farthest( self, dt1: datetime.datetime, dt2: datetime.datetime, *dts: datetime.datetime - ) -> "DateTime": + ) -> DateTime: """ Get the farthest date from the instance. """ @@ -513,7 +513,7 @@ def is_same_day(self, dt: datetime.datetime) -> bool: return self.to_date_string() == dt.to_date_string() - def is_anniversary(self, dt: Optional[datetime.datetime] = None) -> bool: + def is_anniversary(self, dt: datetime.datetime | None = None) -> bool: """ Check if its the anniversary. Compares the date/month values of the two dates. @@ -537,7 +537,7 @@ def add( minutes: int = 0, seconds: int = 0, microseconds: int = 0, - ) -> "DateTime": + ) -> DateTime: """ Add a duration to the instance. @@ -620,7 +620,7 @@ def subtract( minutes: int = 0, seconds: int = 0, microseconds: int = 0, - ) -> "DateTime": + ) -> DateTime: """ Remove duration from the instance. """ @@ -638,7 +638,7 @@ def subtract( # Adding a final underscore to the method name # to avoid errors for PyPy which already defines # a _add_timedelta method - def _add_timedelta_(self, delta: datetime.timedelta) -> "DateTime": + def _add_timedelta_(self, delta: datetime.timedelta) -> DateTime: """ Add timedelta duration to the instance. """ @@ -660,7 +660,7 @@ def _add_timedelta_(self, delta: datetime.timedelta) -> "DateTime": return self.add(seconds=delta.total_seconds()) - def _subtract_timedelta(self, delta: datetime.timedelta) -> "DateTime": + def _subtract_timedelta(self, delta: datetime.timedelta) -> DateTime: """ Remove timedelta duration from the instance. """ @@ -673,7 +673,7 @@ def _subtract_timedelta(self, delta: datetime.timedelta) -> "DateTime": # DIFFERENCES - def diff(self, dt: Optional["DateTime"] = None, abs: bool = True) -> Period: + def diff(self, dt: DateTime | None = None, abs: bool = True) -> Period: """ Returns the difference between two DateTime objects represented as a Period. """ @@ -684,9 +684,9 @@ def diff(self, dt: Optional["DateTime"] = None, abs: bool = True) -> Period: def diff_for_humans( self, - other: Optional["DateTime"] = None, + other: DateTime | None = None, absolute: bool = False, - locale: Optional[str] = None, + locale: str | None = None, ) -> str: """ Get the difference in a human readable format in the current locale. @@ -717,7 +717,7 @@ def diff_for_humans( return pendulum.format_diff(diff, is_now, absolute, locale) # Modifiers - def start_of(self, unit: str) -> "DateTime": + def start_of(self, unit: str) -> DateTime: """ Returns a copy of the instance with the time reset with the following rules: @@ -737,7 +737,7 @@ def start_of(self, unit: str) -> "DateTime": return getattr(self, f"_start_of_{unit}")() - def end_of(self, unit: str) -> "DateTime": + def end_of(self, unit: str) -> DateTime: """ Returns a copy of the instance with the time reset with the following rules: @@ -753,85 +753,85 @@ def end_of(self, unit: str) -> "DateTime": * century: date to last day of century and time to 23:59:59.999999 """ if unit not in self._MODIFIERS_VALID_UNITS: - raise ValueError('Invalid unit "%s" for end_of()' % unit) + raise ValueError(f'Invalid unit "{unit}" for end_of()') - return getattr(self, "_end_of_%s" % unit)() + return getattr(self, f"_end_of_{unit}")() - def _start_of_second(self) -> "DateTime": + def _start_of_second(self) -> DateTime: """ Reset microseconds to 0. """ return self.set(microsecond=0) - def _end_of_second(self) -> "DateTime": + def _end_of_second(self) -> DateTime: """ Set microseconds to 999999. """ return self.set(microsecond=999999) - def _start_of_minute(self) -> "DateTime": + def _start_of_minute(self) -> DateTime: """ Reset seconds and microseconds to 0. """ return self.set(second=0, microsecond=0) - def _end_of_minute(self) -> "DateTime": + def _end_of_minute(self) -> DateTime: """ Set seconds to 59 and microseconds to 999999. """ return self.set(second=59, microsecond=999999) - def _start_of_hour(self) -> "DateTime": + def _start_of_hour(self) -> DateTime: """ Reset minutes, seconds and microseconds to 0. """ return self.set(minute=0, second=0, microsecond=0) - def _end_of_hour(self) -> "DateTime": + def _end_of_hour(self) -> DateTime: """ Set minutes and seconds to 59 and microseconds to 999999. """ return self.set(minute=59, second=59, microsecond=999999) - def _start_of_day(self) -> "DateTime": + def _start_of_day(self) -> DateTime: """ Reset the time to 00:00:00. """ return self.at(0, 0, 0, 0) - def _end_of_day(self) -> "DateTime": + def _end_of_day(self) -> DateTime: """ Reset the time to 23:59:59.999999. """ return self.at(23, 59, 59, 999999) - def _start_of_month(self) -> "DateTime": + def _start_of_month(self) -> DateTime: """ Reset the date to the first day of the month and the time to 00:00:00. """ return self.set(self.year, self.month, 1, 0, 0, 0, 0) - def _end_of_month(self) -> "DateTime": + def _end_of_month(self) -> DateTime: """ Reset the date to the last day of the month and the time to 23:59:59.999999. """ return self.set(self.year, self.month, self.days_in_month, 23, 59, 59, 999999) - def _start_of_year(self) -> "DateTime": + def _start_of_year(self) -> DateTime: """ Reset the date to the first day of the year and the time to 00:00:00. """ return self.set(self.year, 1, 1, 0, 0, 0, 0) - def _end_of_year(self) -> "DateTime": + def _end_of_year(self) -> DateTime: """ Reset the date to the last day of the year and the time to 23:59:59.999999. """ return self.set(self.year, 12, 31, 23, 59, 59, 999999) - def _start_of_decade(self) -> "DateTime": + def _start_of_decade(self) -> DateTime: """ Reset the date to the first day of the decade and the time to 00:00:00. @@ -839,7 +839,7 @@ def _start_of_decade(self) -> "DateTime": year = self.year - self.year % YEARS_PER_DECADE return self.set(year, 1, 1, 0, 0, 0, 0) - def _end_of_decade(self) -> "DateTime": + def _end_of_decade(self) -> DateTime: """ Reset the date to the last day of the decade and the time to 23:59:59.999999. @@ -848,7 +848,7 @@ def _end_of_decade(self) -> "DateTime": return self.set(year, 12, 31, 23, 59, 59, 999999) - def _start_of_century(self) -> "DateTime": + def _start_of_century(self) -> DateTime: """ Reset the date to the first day of the century and the time to 00:00:00. @@ -857,7 +857,7 @@ def _start_of_century(self) -> "DateTime": return self.set(year, 1, 1, 0, 0, 0, 0) - def _end_of_century(self) -> "DateTime": + def _end_of_century(self) -> DateTime: """ Reset the date to the last day of the century and the time to 23:59:59.999999. @@ -866,7 +866,7 @@ def _end_of_century(self) -> "DateTime": return self.set(year, 12, 31, 23, 59, 59, 999999) - def _start_of_week(self) -> "DateTime": + def _start_of_week(self) -> DateTime: """ Reset the date to the first day of the week and the time to 00:00:00. @@ -878,7 +878,7 @@ def _start_of_week(self) -> "DateTime": return dt.start_of("day") - def _end_of_week(self) -> "DateTime": + def _end_of_week(self) -> DateTime: """ Reset the date to the last day of the week and the time to 23:59:59. @@ -891,8 +891,8 @@ def _end_of_week(self) -> "DateTime": return dt.end_of("day") def next( - self, day_of_week: Optional[int] = None, keep_time: bool = False - ) -> "DateTime": + self, day_of_week: int | None = None, keep_time: bool = False + ) -> DateTime: """ Modify to the next occurrence of a given day of the week. If no day_of_week is provided, modify to the next occurrence @@ -917,8 +917,8 @@ def next( return dt def previous( - self, day_of_week: Optional[int] = None, keep_time: bool = False - ) -> "DateTime": + self, day_of_week: int | None = None, keep_time: bool = False + ) -> DateTime: """ Modify to the previous occurrence of a given day of the week. If no day_of_week is provided, modify to the previous occurrence @@ -942,7 +942,7 @@ def previous( return dt - def first_of(self, unit: str, day_of_week: Optional[int] = None) -> "DateTime": + def first_of(self, unit: str, day_of_week: int | None = None) -> DateTime: """ Returns an instance set to the first occurrence of a given day of the week in the current unit. @@ -956,7 +956,7 @@ def first_of(self, unit: str, day_of_week: Optional[int] = None) -> "DateTime": return getattr(self, f"_first_of_{unit}")(day_of_week) - def last_of(self, unit: str, day_of_week: Optional[int] = None) -> "DateTime": + def last_of(self, unit: str, day_of_week: int | None = None) -> DateTime: """ Returns an instance set to the last occurrence of a given day of the week in the current unit. @@ -970,7 +970,7 @@ def last_of(self, unit: str, day_of_week: Optional[int] = None) -> "DateTime": return getattr(self, f"_last_of_{unit}")(day_of_week) - def nth_of(self, unit: str, nth: int, day_of_week: int) -> "DateTime": + def nth_of(self, unit: str, nth: int, day_of_week: int) -> DateTime: """ Returns a new instance set to the given occurrence of a given day of the week in the current unit. @@ -993,7 +993,7 @@ def nth_of(self, unit: str, nth: int, day_of_week: int) -> "DateTime": return dt - def _first_of_month(self, day_of_week: Optional[int] = None) -> "DateTime": + def _first_of_month(self, day_of_week: int | None = None) -> DateTime: """ Modify to the first occurrence of a given day of the week in the current month. If no day_of_week is provided, @@ -1016,7 +1016,7 @@ def _first_of_month(self, day_of_week: Optional[int] = None) -> "DateTime": return dt.set(day=day_of_month) - def _last_of_month(self, day_of_week: Optional[int] = None) -> "DateTime": + def _last_of_month(self, day_of_week: int | None = None) -> DateTime: """ Modify to the last occurrence of a given day of the week in the current month. If no day_of_week is provided, @@ -1039,7 +1039,7 @@ def _last_of_month(self, day_of_week: Optional[int] = None) -> "DateTime": return dt.set(day=day_of_month) - def _nth_of_month(self, nth: int, day_of_week: Optional[int] = None) -> "DateTime": + def _nth_of_month(self, nth: int, day_of_week: int | None = None) -> DateTime: """ Modify to the given occurrence of a given day of the week in the current month. If the calculated occurrence is outside, @@ -1060,7 +1060,7 @@ def _nth_of_month(self, nth: int, day_of_week: Optional[int] = None) -> "DateTim return False - def _first_of_quarter(self, day_of_week: Optional[int] = None) -> "DateTime": + def _first_of_quarter(self, day_of_week: int | None = None) -> DateTime: """ Modify to the first occurrence of a given day of the week in the current quarter. If no day_of_week is provided, @@ -1071,7 +1071,7 @@ def _first_of_quarter(self, day_of_week: Optional[int] = None) -> "DateTime": "month", day_of_week ) - def _last_of_quarter(self, day_of_week: Optional[int] = None) -> "DateTime": + def _last_of_quarter(self, day_of_week: int | None = None) -> DateTime: """ Modify to the last occurrence of a given day of the week in the current quarter. If no day_of_week is provided, @@ -1081,8 +1081,8 @@ def _last_of_quarter(self, day_of_week: Optional[int] = None) -> "DateTime": return self.on(self.year, self.quarter * 3, 1).last_of("month", day_of_week) def _nth_of_quarter( - self, nth: int, day_of_week: Optional[int] = None - ) -> "DateTime": + self, nth: int, day_of_week: int | None = None + ) -> DateTime: """ Modify to the given occurrence of a given day of the week in the current quarter. If the calculated occurrence is outside, @@ -1111,7 +1111,7 @@ def _nth_of_quarter( return self.on(self.year, dt.month, dt.day).start_of("day") - def _first_of_year(self, day_of_week: Optional[int] = None) -> "DateTime": + def _first_of_year(self, day_of_week: int | None = None) -> DateTime: """ Modify to the first occurrence of a given day of the week in the current year. If no day_of_week is provided, @@ -1120,7 +1120,7 @@ def _first_of_year(self, day_of_week: Optional[int] = None) -> "DateTime": """ return self.set(month=1).first_of("month", day_of_week) - def _last_of_year(self, day_of_week: Optional[int] = None) -> "DateTime": + def _last_of_year(self, day_of_week: int | None = None) -> DateTime: """ Modify to the last occurrence of a given day of the week in the current year. If no day_of_week is provided, @@ -1129,7 +1129,7 @@ def _last_of_year(self, day_of_week: Optional[int] = None) -> "DateTime": """ return self.set(month=MONTHS_PER_YEAR).last_of("month", day_of_week) - def _nth_of_year(self, nth: int, day_of_week: Optional[int] = None) -> "DateTime": + def _nth_of_year(self, nth: int, day_of_week: int | None = None) -> DateTime: """ Modify to the given occurrence of a given day of the week in the current year. If the calculated occurrence is outside, @@ -1150,7 +1150,7 @@ def _nth_of_year(self, nth: int, day_of_week: Optional[int] = None) -> "DateTime return self.on(self.year, dt.month, dt.day).start_of("day") - def average(self, dt: Optional[datetime.datetime] = None) -> "DateTime": + def average(self, dt: datetime.datetime | None = None) -> DateTime: """ Modify the current instance to the average of a given instance (default now) and the current instance. @@ -1168,8 +1168,8 @@ def average(self, dt: Optional[datetime.datetime] = None) -> "DateTime": ) def __sub__( - self, other: Union[datetime.datetime, datetime.timedelta] - ) -> Union["DateTime", Period]: + self, other: datetime.datetime | datetime.timedelta + ) -> DateTime | Period: if isinstance(other, datetime.timedelta): return self._subtract_timedelta(other) @@ -1212,7 +1212,7 @@ def __rsub__(self, other: datetime.datetime) -> Period: return self.diff(other, False) - def __add__(self, other: datetime.timedelta) -> "DateTime": + def __add__(self, other: datetime.timedelta) -> DateTime: if not isinstance(other, datetime.timedelta): return NotImplemented @@ -1228,30 +1228,30 @@ def __add__(self, other: datetime.timedelta) -> "DateTime": return self._add_timedelta_(other) - def __radd__(self, other: datetime.timedelta) -> "DateTime": + def __radd__(self, other: datetime.timedelta) -> DateTime: return self.__add__(other) # Native methods override @classmethod def fromtimestamp( - cls, t: float, tz: Optional[datetime.tzinfo] = None - ) -> "DateTime": + cls, t: float, tz: datetime.tzinfo | None = None + ) -> DateTime: return pendulum.instance(datetime.datetime.fromtimestamp(t, tz=tz), tz=tz) @classmethod - def utcfromtimestamp(cls, t: float) -> "DateTime": + def utcfromtimestamp(cls, t: float) -> DateTime: return pendulum.instance(datetime.datetime.utcfromtimestamp(t), tz=None) @classmethod - def fromordinal(cls, n) -> "DateTime": + def fromordinal(cls, n) -> DateTime: return pendulum.instance(datetime.datetime.fromordinal(n), tz=None) @classmethod - def combine(cls, date: datetime.date, time: datetime.time) -> "DateTime": + def combine(cls, date: datetime.date, time: datetime.time) -> DateTime: return pendulum.instance(datetime.datetime.combine(date, time), tz=None) - def astimezone(self, tz: Optional[datetime.tzinfo] = None) -> "DateTime": + def astimezone(self, tz: datetime.tzinfo | None = None) -> DateTime: dt = super().astimezone(tz) return self.__class__( @@ -1268,15 +1268,15 @@ def astimezone(self, tz: Optional[datetime.tzinfo] = None) -> "DateTime": def replace( self, - year: Optional[int] = None, - month: Optional[int] = None, - day: Optional[int] = None, - hour: Optional[int] = None, - minute: Optional[int] = None, - second: Optional[int] = None, - microsecond: Optional[int] = None, - tzinfo: Optional[Union[bool, datetime.tzinfo]] = True, - fold: Optional[int] = None, + year: int | None = None, + month: int | None = None, + day: int | None = None, + hour: int | None = None, + minute: int | None = None, + second: int | None = None, + microsecond: int | None = None, + tzinfo: bool | datetime.tzinfo | None = True, + fold: int | None = None, ): if year is None: year = self.year @@ -1301,10 +1301,10 @@ def replace( year, month, day, hour, minute, second, microsecond, tz=tzinfo, fold=fold ) - def __getnewargs__(self) -> Tuple: + def __getnewargs__(self) -> tuple: return (self,) - def _getstate(self, protocol: int = 3) -> Tuple: + def _getstate(self, protocol: int = 3) -> tuple: return ( self.year, self.month, @@ -1316,10 +1316,10 @@ def _getstate(self, protocol: int = 3) -> Tuple: self.tzinfo, ) - def __reduce__(self) -> Tuple: + def __reduce__(self) -> tuple: return self.__reduce_ex__(2) - def __reduce_ex__(self, protocol: int) -> Tuple: + def __reduce_ex__(self, protocol: int) -> tuple: return self.__class__, self._getstate(protocol) def _cmp(self, other: datetime.datetime, **kwargs) -> int: diff --git a/pendulum/duration.py b/pendulum/duration.py index 9fde234c..411b2e9e 100644 --- a/pendulum/duration.py +++ b/pendulum/duration.py @@ -245,16 +245,16 @@ def in_words(self, locale=None, separator=" "): unit, count = period if abs(count) > 0: translation = locale.translation( - "units.{}.{}".format(unit, locale.plural(abs(count))) + f"units.{unit}.{locale.plural(abs(count))}" ) parts.append(translation.format(count)) if not parts: if abs(self.microseconds) > 0: - unit = "units.second.{}".format(locale.plural(1)) - count = "{:.2f}".format(abs(self.microseconds) / 1e6) + unit = f"units.second.{locale.plural(1)}" + count = f"{abs(self.microseconds) / 1e6:.2f}" else: - unit = "units.microsecond.{}".format(locale.plural(0)) + unit = f"units.microsecond.{locale.plural(0)}" count = 0 translation = locale.translation(unit) parts.append(translation.format(count)) diff --git a/pendulum/formatting/difference_formatter.py b/pendulum/formatting/difference_formatter.py index f5a92984..f6dfe4a8 100644 --- a/pendulum/formatting/difference_formatter.py +++ b/pendulum/formatting/difference_formatter.py @@ -16,8 +16,8 @@ def __init__(self, locale="en"): self._locale = Locale.load(locale) def format( - self, diff, is_now=True, absolute=False, locale=None - ): # type: (pendulum.Period, bool, bool, typing.Optional[str]) -> str + self, diff: pendulum.Period, is_now: bool = True, absolute: bool = False, locale: str | None = None + ) -> str: """ Formats a difference. @@ -135,7 +135,7 @@ def format( if not trans: # No special rule time = locale.get( - "translations.units.{}.{}".format(unit, locale.plural(count)) + f"translations.units.{unit}.{locale.plural(count)}" ).format(count) else: time = trans[locale.plural(count)].format(count) @@ -148,6 +148,6 @@ def format( return locale.get(key).format(time) - key += ".{}".format(locale.plural(count)) + key += f".{locale.plural(count)}" return locale.get(key).format(count) diff --git a/pendulum/formatting/formatter.py b/pendulum/formatting/formatter.py index 65523770..1798772d 100644 --- a/pendulum/formatting/formatter.py +++ b/pendulum/formatting/formatter.py @@ -228,8 +228,8 @@ class Formatter: } def format( - self, dt, fmt, locale=None - ): # type: (pendulum.DateTime, str, typing.Optional[typing.Union[str, Locale]]) -> str + self, dt: pendulum.DateTime, fmt: str, locale: str | Locale | None = None + ) -> str: """ Formats a DateTime instance with a given format and locale. @@ -261,8 +261,8 @@ def format( return result def _format_token( - self, dt, token, locale - ): # type: (pendulum.DateTime, str, Locale) -> str + self, dt: pendulum.DateTime, token: str, locale: Locale + ) -> str: """ Formats a DateTime instance with a given token and locale. @@ -309,8 +309,8 @@ def _format_token( return f"{sign}{hour:02d}{separator}{minute:02d}" def _format_localizable_token( - self, dt, token, locale - ): # type: (pendulum.DateTime, str, Locale) -> str + self, dt: pendulum.DateTime, token: str, locale: Locale + ) -> str: """ Formats a DateTime instance with a given localizable token and locale. @@ -361,11 +361,11 @@ def _format_localizable_token( def parse( self, - time, # type: str - fmt, # type: str - now, # type: pendulum.DateTime - locale=None, # type: typing.Optional[str] - ): # type: (...) -> typing.Dict[str, typing.Any] + time: str, + fmt: str, + now: pendulum.DateTime, + locale: str | None = None, + ) -> dict[str, typing.Any]: """ Parses a time string matching a given format as a tuple. @@ -415,8 +415,8 @@ def parse( return self._check_parsed(parsed, now) def _check_parsed( - self, parsed, now - ): # type: (typing.Dict[str, typing.Any], pendulum.DateTime) -> typing.Dict[str, typing.Any] + self, parsed: dict[str, typing.Any], now: pendulum.DateTime + ) -> dict[str, typing.Any]: """ Checks validity of parsed elements. @@ -537,8 +537,8 @@ def _check_parsed( return validated def _get_parsed_values( - self, m, parsed, locale, now - ): # type: (typing.Match[str], typing.Dict[str, typing.Any], Locale, pendulum.DateTime) -> None + self, m: typing.Match[str], parsed: dict[str, typing.Any], locale: Locale, now: pendulum.DateTime + ) -> None: for token, index in m.re.groupindex.items(): if token in self._LOCALIZABLE_TOKENS: self._get_parsed_locale_value(token, m.group(index), parsed, locale) @@ -546,8 +546,8 @@ def _get_parsed_values( self._get_parsed_value(token, m.group(index), parsed, now) def _get_parsed_value( - self, token, value, parsed, now - ): # type: (str, str, typing.Dict[str, typing.Any], pendulum.DateTime) -> None + self, token: str, value: str, parsed: dict[str, typing.Any], now: pendulum.DateTime + ) -> None: parsed_token = self._PARSE_TOKENS[token](value) if "Y" in token: @@ -606,8 +606,8 @@ def _get_parsed_value( parsed["tz"] = pendulum.timezone(value) def _get_parsed_locale_value( - self, token, value, parsed, locale - ): # type: (str, str, typing.Dict[str, typing.Any], Locale) -> None + self, token: str, value: str, parsed: dict[str, typing.Any], locale: Locale + ) -> None: if token == "MMMM": unit = "month" match = "months.wide" @@ -650,7 +650,7 @@ def _get_parsed_locale_value( if value is None: raise ValueError("Invalid date") - def _replace_tokens(self, token, locale): # type: (str, Locale) -> str + def _replace_tokens(self, token: str, locale: Locale) -> str: if token.startswith("[") and token.endswith("]"): return token[1:-1] elif token.startswith("\\"): diff --git a/pendulum/helpers.py b/pendulum/helpers.py index 0e85f548..4806393c 100644 --- a/pendulum/helpers.py +++ b/pendulum/helpers.py @@ -56,27 +56,27 @@ @overload def add_duration( - dt, # type: _DT - years=0, # type: int - months=0, # type: int - weeks=0, # type: int - days=0, # type: int - hours=0, # type: int - minutes=0, # type: int - seconds=0, # type: int - microseconds=0, # type: int -): # type: (...) -> _DT + dt: _DT, + years: int = 0, + months: int = 0, + weeks: int = 0, + days: int = 0, + hours: int = 0, + minutes: int = 0, + seconds: int = 0, + microseconds: int = 0, +) -> _DT: pass @overload def add_duration( - dt, # type: _D - years=0, # type: int - months=0, # type: int - weeks=0, # type: int - days=0, # type: int -): # type: (...) -> _D + dt: _D, + years: int = 0, + months: int = 0, + weeks: int = 0, + days: int = 0, +) -> _D: pass @@ -160,8 +160,8 @@ def add_duration( def format_diff( - diff, is_now=True, absolute=False, locale=None -): # type: (Period, bool, bool, Optional[str]) -> str + diff: Period, is_now: bool = True, absolute: bool = False, locale: str | None = None +) -> str: if locale is None: locale = get_locale() @@ -176,7 +176,7 @@ def _sign(x): @contextmanager -def test(mock): # type: (pendulum.DateTime) -> Iterator[None] +def test(mock: pendulum.DateTime) -> Iterator[None]: set_test_now(mock) try: yield @@ -184,40 +184,40 @@ def test(mock): # type: (pendulum.DateTime) -> Iterator[None] set_test_now() -def set_test_now(test_now=None): # type: (Optional[pendulum.DateTime]) -> None +def set_test_now(test_now: pendulum.DateTime | None = None) -> None: pendulum._TEST_NOW = test_now -def get_test_now(): # type: () -> Optional[pendulum.DateTime] +def get_test_now() -> pendulum.DateTime | None: return pendulum._TEST_NOW -def has_test_now(): # type: () -> bool +def has_test_now() -> bool: return pendulum._TEST_NOW is not None -def locale(name): # type: (str) -> Locale +def locale(name: str) -> Locale: return Locale.load(name) -def set_locale(name): # type: (str) -> None +def set_locale(name: str) -> None: locale(name) pendulum._LOCALE = name -def get_locale(): # type: () -> str +def get_locale() -> str: return pendulum._LOCALE -def week_starts_at(wday): # type: (int) -> None +def week_starts_at(wday: int) -> None: if wday < pendulum.SUNDAY or wday > pendulum.SATURDAY: raise ValueError("Invalid week day as start of week.") pendulum._WEEK_STARTS_AT = wday -def week_ends_at(wday): # type: (int) -> None +def week_ends_at(wday: int) -> None: if wday < pendulum.SUNDAY or wday > pendulum.SATURDAY: raise ValueError("Invalid week day as start of week.") diff --git a/pendulum/locales/locale.py b/pendulum/locales/locale.py index 5569725f..c890a461 100644 --- a/pendulum/locales/locale.py +++ b/pendulum/locales/locale.py @@ -48,7 +48,7 @@ def load(cls, locale: Union[str, "Locale"]) -> "Locale": def normalize_locale(cls, locale: str) -> str: m = re.match("([a-z]{2})[-_]([a-z]{2})", locale, re.I) if m: - return "{}_{}".format(m.group(1).lower(), m.group(2).lower()) + return f"{m.group(1).lower()}_{m.group(2).lower()}" else: return locale.lower() @@ -78,7 +78,7 @@ def ordinal(self, number: int) -> str: return self._data["ordinal"](number) def ordinalize(self, number: int) -> str: - ordinal = self.get("custom.ordinal.{}".format(self.ordinal(number))) + ordinal = self.get(f"custom.ordinal.{self.ordinal(number)}") if not ordinal: return f"{number}" diff --git a/pendulum/parser.py b/pendulum/parser.py index c58781e9..dc9b6bbf 100644 --- a/pendulum/parser.py +++ b/pendulum/parser.py @@ -21,8 +21,8 @@ def parse( - text, **options -): # type: (str, **typing.Any) -> typing.Union[Date, Time, DateTime, Duration] + text: str, **options: typing.Any +) -> Date | Time | DateTime | Duration: # Use the mock now value if it exists options["now"] = options.get("now", pendulum.get_test_now()) diff --git a/pendulum/parsing/_iso8601.c b/pendulum/parsing/_iso8601.c index 87d8b23f..b8c3e091 100644 --- a/pendulum/parsing/_iso8601.c +++ b/pendulum/parsing/_iso8601.c @@ -221,7 +221,7 @@ static PyObject *FixedOffset_dst(FixedOffset *self, PyObject *args) { * sign = '+' * if self.offset < 0: * sign = '-' - * return "%s%d:%d" % (sign, self.offset / 60, self.offset % 60) + * return f"{sign}{self.offset / 60}:{self.offset % 60}" */ static PyObject *FixedOffset_tzname(FixedOffset *self, PyObject *args) { if (self->tzname != NULL) { diff --git a/pendulum/parsing/iso8601.py b/pendulum/parsing/iso8601.py index acdd8278..3097cc33 100644 --- a/pendulum/parsing/iso8601.py +++ b/pendulum/parsing/iso8601.py @@ -182,7 +182,7 @@ def parse_iso8601(text): if ambiguous_date: # We can "safely" assume that the ambiguous date # was actually a time in the form hhmmss - hhmmss = "{}{:0>2}".format(str(year), str(month)) + hhmmss = f"{str(year)}{str(month):0>2}" return datetime.time(int(hhmmss[:2]), int(hhmmss[2:4]), int(hhmmss[4:])) @@ -394,7 +394,7 @@ def _parse_iso8601_duration(text, **options): if "." in _seconds: _seconds, _microseconds = _seconds.split(".") seconds += int(_seconds) - microseconds += int("{:0<6}".format(_microseconds[:6])) + microseconds += int(f"{_microseconds[:6]:0<6}") else: seconds += int(_seconds) diff --git a/pendulum/period.py b/pendulum/period.py index c5e5f457..3b65f036 100644 --- a/pendulum/period.py +++ b/pendulum/period.py @@ -238,16 +238,16 @@ def in_words(self, locale=None, separator=" "): unit, count = period if abs(count) > 0: translation = locale.translation( - "units.{}.{}".format(unit, locale.plural(abs(count))) + f"units.{unit}.{locale.plural(abs(count))}" ) parts.append(translation.format(count)) if not parts: if abs(self.microseconds) > 0: - unit = "units.second.{}".format(locale.plural(1)) - count = "{:.2f}".format(abs(self.microseconds) / 1e6) + unit = f"units.second.{locale.plural(1)}" + count = f"{abs(self.microseconds) / 1e6:.2f}" else: - unit = "units.microsecond.{}".format(locale.plural(0)) + unit = f"units.microsecond.{locale.plural(0)}" count = 0 translation = locale.translation(unit) parts.append(translation.format(count)) diff --git a/pendulum/time.py b/pendulum/time.py index 064c6284..8045b179 100644 --- a/pendulum/time.py +++ b/pendulum/time.py @@ -26,7 +26,7 @@ def __repr__(self): tzinfo = "" if self.tzinfo: - tzinfo = ", tzinfo={}".format(repr(self.tzinfo)) + tzinfo = f", tzinfo={repr(self.tzinfo)}" return "{}({}, {}, {}{}{})".format( self.__class__.__name__, self.hour, self.minute, self.second, us, tzinfo diff --git a/pendulum/tz/__init__.py b/pendulum/tz/__init__.py index 5477393e..c70cd5d0 100644 --- a/pendulum/tz/__init__.py +++ b/pendulum/tz/__init__.py @@ -34,7 +34,7 @@ def timezones(): return _timezones -def timezone(name: Union[str, int]) -> Union[Timezone, FixedTimezone]: +def timezone(name: str | int) -> Timezone | FixedTimezone: """ Return a Timezone instance given its name. """ diff --git a/pendulum/tz/local_timezone.py b/pendulum/tz/local_timezone.py index b2e11088..5d6f0bef 100644 --- a/pendulum/tz/local_timezone.py +++ b/pendulum/tz/local_timezone.py @@ -27,7 +27,7 @@ _local_timezone = None -def get_local_timezone() -> Union[Timezone, FixedTimezone]: +def get_local_timezone() -> Timezone | FixedTimezone: global _local_timezone if _mock_local_timezone is not None: @@ -41,7 +41,7 @@ def get_local_timezone() -> Union[Timezone, FixedTimezone]: return _local_timezone -def set_local_timezone(mock=None): # type: (Optional[Union[str, Timezone]]) -> None +def set_local_timezone(mock: str | Timezone | None = None) -> None: global _mock_local_timezone _mock_local_timezone = mock @@ -152,7 +152,7 @@ def _get_darwin_timezone() -> Timezone: return Timezone(tzname) -def _get_unix_timezone(_root="/"): # type: (str) -> Timezone +def _get_unix_timezone(_root: str = "/") -> Timezone: tzenv = os.environ.get("TZ") if tzenv: try: diff --git a/pendulum/tz/timezone.py b/pendulum/tz/timezone.py index e657243a..26ed8bab 100644 --- a/pendulum/tz/timezone.py +++ b/pendulum/tz/timezone.py @@ -30,7 +30,7 @@ def name(self) -> str: raise NotImplementedError @abstractmethod - def convert(self, dt: datetime, dst_rule: Optional[str] = None) -> datetime: + def convert(self, dt: datetime, dst_rule: str | None = None) -> datetime: raise NotImplementedError @abstractmethod @@ -57,7 +57,7 @@ class Timezone(zoneinfo.ZoneInfo, PendulumTimezone): >>> tz = Timezone('Europe/Paris') """ - def __new__(cls, key: str) -> "Timezone": + def __new__(cls, key: str) -> Timezone: try: return super().__new__(cls, key) except zoneinfo.ZoneInfoNotFoundError: @@ -137,7 +137,7 @@ def __repr__(self) -> str: class FixedTimezone(tzinfo, PendulumTimezone): - def __init__(self, offset: int, name: Optional[str] = None) -> None: + def __init__(self, offset: int, name: str | None = None) -> None: sign = "-" if offset < 0 else "+" minutes = offset / 60 @@ -188,20 +188,20 @@ def datetime( def offset(self) -> int: return self._offset - def utcoffset(self, dt: Optional[datetime]) -> timedelta: + def utcoffset(self, dt: datetime | None) -> timedelta: return self._utcoffset - def dst(self, dt: Optional[_datetime]): + def dst(self, dt: _datetime | None): return timedelta() def fromutc(self, dt: datetime) -> datetime: # Use the stdlib datetime's add method to avoid infinite recursion return (datetime.__add__(dt, self._utcoffset)).replace(tzinfo=self) - def tzname(self, dt: Optional[datetime]) -> Optional[str]: + def tzname(self, dt: datetime | None) -> str | None: return self._name - def __getinitargs__(self): # type: () -> tuple + def __getinitargs__(self) -> tuple: return self._offset, self._name def __repr__(self) -> str: diff --git a/tests/datetime/test_strings.py b/tests/datetime/test_strings.py index 5ce6ed06..e61ed412 100644 --- a/tests/datetime/test_strings.py +++ b/tests/datetime/test_strings.py @@ -109,7 +109,7 @@ def test_to_string_invalid(): def test_repr(): d = pendulum.datetime(1975, 12, 25, 14, 15, 16, tz="local") - expected = "DateTime(1975, 12, 25, 14, 15, 16, tzinfo={})".format(repr(d.tzinfo)) + expected = f"DateTime(1975, 12, 25, 14, 15, 16, tzinfo={repr(d.tzinfo)})" assert repr(d) == expected d = pendulum.datetime(1975, 12, 25, 14, 15, 16, 123456, tz="local") From 5b47ec4a54cb107168d9fe59e553d3330b801f1d Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Thu, 4 Aug 2022 00:40:47 +0200 Subject: [PATCH 05/11] Format with black --- pendulum/__init__.py | 12 +++--------- pendulum/datetime.py | 12 +++--------- pendulum/formatting/difference_formatter.py | 6 +++++- pendulum/formatting/formatter.py | 16 +++++++++++----- pendulum/parser.py | 4 +--- 5 files changed, 23 insertions(+), 27 deletions(-) diff --git a/pendulum/__init__.py b/pendulum/__init__.py index 6916ec3e..85e84f7d 100644 --- a/pendulum/__init__.py +++ b/pendulum/__init__.py @@ -61,9 +61,7 @@ _formatter = Formatter() -def _safe_timezone( - obj: str | float | _datetime.tzinfo | Timezone | None -) -> Timezone: +def _safe_timezone(obj: str | float | _datetime.tzinfo | Timezone | None) -> Timezone: """ Creates a timezone instance from a string, Timezone, TimezoneInfo or integer offset. @@ -170,9 +168,7 @@ def time(hour: int, minute: int = 0, second: int = 0, microsecond: int = 0) -> T return Time(hour, minute, second, microsecond) -def instance( - dt: _datetime.datetime, tz: str | Timezone | None = UTC -) -> DateTime: +def instance(dt: _datetime.datetime, tz: str | Timezone | None = UTC) -> DateTime: """ Create a DateTime instance from a datetime one. """ @@ -244,9 +240,7 @@ def from_format( return datetime(**parts) -def from_timestamp( - timestamp: int | float, tz: str | Timezone = UTC -) -> DateTime: +def from_timestamp(timestamp: int | float, tz: str | Timezone = UTC) -> DateTime: """ Create a DateTime instance from a timestamp. """ diff --git a/pendulum/datetime.py b/pendulum/datetime.py index af0d00c8..0887aca2 100644 --- a/pendulum/datetime.py +++ b/pendulum/datetime.py @@ -890,9 +890,7 @@ def _end_of_week(self) -> DateTime: return dt.end_of("day") - def next( - self, day_of_week: int | None = None, keep_time: bool = False - ) -> DateTime: + def next(self, day_of_week: int | None = None, keep_time: bool = False) -> DateTime: """ Modify to the next occurrence of a given day of the week. If no day_of_week is provided, modify to the next occurrence @@ -1080,9 +1078,7 @@ def _last_of_quarter(self, day_of_week: int | None = None) -> DateTime: """ return self.on(self.year, self.quarter * 3, 1).last_of("month", day_of_week) - def _nth_of_quarter( - self, nth: int, day_of_week: int | None = None - ) -> DateTime: + def _nth_of_quarter(self, nth: int, day_of_week: int | None = None) -> DateTime: """ Modify to the given occurrence of a given day of the week in the current quarter. If the calculated occurrence is outside, @@ -1234,9 +1230,7 @@ def __radd__(self, other: datetime.timedelta) -> DateTime: # Native methods override @classmethod - def fromtimestamp( - cls, t: float, tz: datetime.tzinfo | None = None - ) -> DateTime: + def fromtimestamp(cls, t: float, tz: datetime.tzinfo | None = None) -> DateTime: return pendulum.instance(datetime.datetime.fromtimestamp(t, tz=tz), tz=tz) @classmethod diff --git a/pendulum/formatting/difference_formatter.py b/pendulum/formatting/difference_formatter.py index f6dfe4a8..1259b8d2 100644 --- a/pendulum/formatting/difference_formatter.py +++ b/pendulum/formatting/difference_formatter.py @@ -16,7 +16,11 @@ def __init__(self, locale="en"): self._locale = Locale.load(locale) def format( - self, diff: pendulum.Period, is_now: bool = True, absolute: bool = False, locale: str | None = None + self, + diff: pendulum.Period, + is_now: bool = True, + absolute: bool = False, + locale: str | None = None, ) -> str: """ Formats a difference. diff --git a/pendulum/formatting/formatter.py b/pendulum/formatting/formatter.py index 1798772d..4aad0fd3 100644 --- a/pendulum/formatting/formatter.py +++ b/pendulum/formatting/formatter.py @@ -260,9 +260,7 @@ def format( return result - def _format_token( - self, dt: pendulum.DateTime, token: str, locale: Locale - ) -> str: + def _format_token(self, dt: pendulum.DateTime, token: str, locale: Locale) -> str: """ Formats a DateTime instance with a given token and locale. @@ -537,7 +535,11 @@ def _check_parsed( return validated def _get_parsed_values( - self, m: typing.Match[str], parsed: dict[str, typing.Any], locale: Locale, now: pendulum.DateTime + self, + m: typing.Match[str], + parsed: dict[str, typing.Any], + locale: Locale, + now: pendulum.DateTime, ) -> None: for token, index in m.re.groupindex.items(): if token in self._LOCALIZABLE_TOKENS: @@ -546,7 +548,11 @@ def _get_parsed_values( self._get_parsed_value(token, m.group(index), parsed, now) def _get_parsed_value( - self, token: str, value: str, parsed: dict[str, typing.Any], now: pendulum.DateTime + self, + token: str, + value: str, + parsed: dict[str, typing.Any], + now: pendulum.DateTime, ) -> None: parsed_token = self._PARSE_TOKENS[token](value) diff --git a/pendulum/parser.py b/pendulum/parser.py index dc9b6bbf..509348fb 100644 --- a/pendulum/parser.py +++ b/pendulum/parser.py @@ -20,9 +20,7 @@ CDuration = None -def parse( - text: str, **options: typing.Any -) -> Date | Time | DateTime | Duration: +def parse(text: str, **options: typing.Any) -> Date | Time | DateTime | Duration: # Use the mock now value if it exists options["now"] = options.get("now", pendulum.get_test_now()) From 1f96eb351168d2acd8b3e57ff80eb74279f8a8ec Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Thu, 4 Aug 2022 00:47:11 +0200 Subject: [PATCH 06/11] Lint with pycln --- pendulum/_extensions/helpers.py | 1 - pendulum/datetime.py | 5 ----- pendulum/formatting/difference_formatter.py | 2 -- pendulum/helpers.py | 2 +- pendulum/tz/local_timezone.py | 2 -- pendulum/tz/timezone.py | 1 - 6 files changed, 1 insertion(+), 12 deletions(-) diff --git a/pendulum/_extensions/helpers.py b/pendulum/_extensions/helpers.py index 8d493263..9342351d 100644 --- a/pendulum/_extensions/helpers.py +++ b/pendulum/_extensions/helpers.py @@ -2,7 +2,6 @@ import datetime import math -import typing from collections import namedtuple diff --git a/pendulum/datetime.py b/pendulum/datetime.py index 0887aca2..037cae36 100644 --- a/pendulum/datetime.py +++ b/pendulum/datetime.py @@ -4,11 +4,6 @@ import datetime from typing import Callable -from typing import Dict -from typing import List -from typing import Optional -from typing import Tuple -from typing import Union import pendulum diff --git a/pendulum/formatting/difference_formatter.py b/pendulum/formatting/difference_formatter.py index 1259b8d2..0325d303 100644 --- a/pendulum/formatting/difference_formatter.py +++ b/pendulum/formatting/difference_formatter.py @@ -1,7 +1,5 @@ from __future__ import annotations -import typing - import pendulum from ..locales.locale import Locale diff --git a/pendulum/helpers.py b/pendulum/helpers.py index 4806393c..7653c333 100644 --- a/pendulum/helpers.py +++ b/pendulum/helpers.py @@ -10,7 +10,6 @@ from math import copysign from typing import TYPE_CHECKING from typing import Iterator -from typing import Optional from typing import TypeVar from typing import overload @@ -31,6 +30,7 @@ _D = TypeVar("_D", bound=date) try: + # nopycln: file if not with_extensions or struct.calcsize("P") == 4: raise ImportError() diff --git a/pendulum/tz/local_timezone.py b/pendulum/tz/local_timezone.py index 5d6f0bef..4e92ef7b 100644 --- a/pendulum/tz/local_timezone.py +++ b/pendulum/tz/local_timezone.py @@ -6,8 +6,6 @@ from contextlib import contextmanager from typing import Iterator -from typing import Optional -from typing import Union from .exceptions import InvalidTimezone from .timezone import FixedTimezone diff --git a/pendulum/tz/timezone.py b/pendulum/tz/timezone.py index 26ed8bab..47fa3f9e 100644 --- a/pendulum/tz/timezone.py +++ b/pendulum/tz/timezone.py @@ -5,7 +5,6 @@ from datetime import datetime from datetime import timedelta from datetime import tzinfo -from typing import Optional from typing import TypeVar from pendulum.utils._compat import zoneinfo From e43c53a9af468d2836cbdc7fea009aaea214c490 Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Thu, 4 Aug 2022 00:54:22 +0200 Subject: [PATCH 07/11] Update .flake8 --- .flake8 | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/.flake8 b/.flake8 index 322a90e5..fe0ad3e8 100644 --- a/.flake8 +++ b/.flake8 @@ -1,12 +1,5 @@ [flake8] max-line-length = 88 -ignore = - # E501: Line too long - E501, - # E203: Whitespace before ':' - E203, - #W503: Line break occurred before a binary operator - W503 per-file-ignores = # F401: Module imported but unused __init__.py:F401 @@ -21,22 +14,14 @@ enable-extensions = TC, TC1 type-checking-exempt-modules = typing, typing-extensions eradicate-whitelist-extend = ^-.*; extend-ignore = + # E501: Line too long + E501, + # E203: Whitespace before ':' + E203, # SIM106: Handle error-cases first SIM106, extend-exclude = # External to the project's coding standards: docs/*, -exclude = - .git - __pycache__ - setup.py - build - dist - releases - .idea - .venv - .tox - .mypy_cache - .pytest_cache - .vscode - .github + # Machine-generated, too many false-positives + pendulum/locales/*, From f0aa8f9901f78ca898bb1e764ea0e59cbe188b1e Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Thu, 4 Aug 2022 00:55:53 +0200 Subject: [PATCH 08/11] Remove redundant isort configs --- pyproject.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index eaee5a91..c2e3108d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,17 +60,14 @@ script = "build.py" profile = "black" force_single_line = true atomic = true -include_trailing_comma = true lines_after_imports = 2 lines_between_types = 1 -use_parentheses = true skip_glob = [ "pendulum/locales/**", "build.py", "pendulum/__version__.py", ] filter_files = true - known_first_party = "pendulum" known_third_party = [ "babel", From efad336bea3a77d7429dd2197cc33203f237ebc3 Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Thu, 4 Aug 2022 01:34:51 +0200 Subject: [PATCH 09/11] Add mypy typing ignore list for incremental typing --- pyproject.toml | 95 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c2e3108d..81ff677e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,7 +81,100 @@ known_third_party = [ strict = true files = "pendulum, tests" show_error_codes = true -pretty = true +#pretty = true + +# The following whitelist is used to allow for incremental adoption +# of Mypy. Modules should be removed from this whitelist as and when +# their respective type errors have been addressed. No new modules +# should be added to this whitelist. + +[[tool.mypy.overrides]] +module = [ + "pendulum", + "pendulum._extensions.helpers", + "pendulum.date", + "pendulum.datetime", + "pendulum.duration", + "pendulum.formatting.formatter", + "pendulum.formatting.difference_formatter", + "pendulum.helpers", + "pendulum.locales.locale", + "pendulum.mixins.default", + "pendulum.parser", + "pendulum.parsing", + "pendulum.parsing.iso8601", + "pendulum.period", + "pendulum.time", + "pendulum.tz", + "pendulum.tz.exceptions", + "pendulum.tz.local_timezone", + "pendulum.tz.timezone", + "pendulum.utils._compat", + "tests.conftest", + "tests.test_helpers", + "tests.test_main", + "tests.test_parsing", + "tests.date.test_add", + "tests.date.test_behavior", + "tests.date.test_construct", + "tests.date.test_comparison", + "tests.date.test_day_of_week_modifiers", + "tests.date.test_diff", + "tests.date.test_fluent_setters", + "tests.date.test_getters", + "tests.date.test_start_end_of", + "tests.date.test_strings", + "tests.date.test_sub", + "tests.datetime.test_add", + "tests.datetime.test_behavior", + "tests.datetime.test_construct", + "tests.datetime.test_comparison", + "tests.datetime.test_create_from_timestamp", + "tests.datetime.test_day_of_week_modifiers", + "tests.datetime.test_diff", + "tests.datetime.test_fluent_setters", + "tests.datetime.test_from_format", + "tests.datetime.test_getters", + "tests.datetime.test_naive", + "tests.datetime.test_replace", + "tests.datetime.test_start_end_of", + "tests.datetime.test_strings", + "tests.datetime.test_sub", + "tests.datetime.test_timezone", + "tests.duration.test_add_sub", + "tests.duration.test_arithmetic", + "tests.duration.test_behavior", + "tests.duration.test_construct", + "tests.duration.test_in_methods", + "tests.duration.test_in_words", + "tests.duration.test_total_methods", + "tests.formatting.test_formatter", + "tests.helpers.test_local_time", + "tests.localization.*", + "tests.parsing.test_parsing", + "tests.parsing.test_parsing_duration", + "tests.parsing.test_parse_iso8601", + "tests.period.test_add_subtract", + "tests.period.test_arithmetic", + "tests.period.test_behavior", + "tests.period.test_construct", + "tests.period.test_hashing", + "tests.period.test_in_words", + "tests.period.test_range", + "tests.time.test_add", + "tests.time.test_behavior", + "tests.time.test_comparison", + "tests.time.test_construct", + "tests.time.test_diff", + "tests.time.test_fluent_setters", + "tests.time.test_strings", + "tests.time.test_sub", + "tests.tz.test_helpers", + "tests.tz.test_local_timezone", + "tests.tz.test_timezone", + "tests.tz.test_timezones", +] +ignore_errors = true [tool.coverage.run] omit = [ From 7c092edbe1d89583375157a0b6c1fa69165c01e0 Mon Sep 17 00:00:00 2001 From: Bartek Sokorski Date: Fri, 5 Aug 2022 15:59:51 +0200 Subject: [PATCH 10/11] Apply changes required by flake8 plugins --- .flake8 | 3 +- build.py | 6 +- clock | 2 +- pendulum/__init__.py | 92 +-- pendulum/_extensions/helpers.py | 52 +- pendulum/date.py | 50 +- pendulum/datetime.py | 69 +- pendulum/duration.py | 9 +- pendulum/formatting/__init__.py | 2 +- pendulum/formatting/difference_formatter.py | 15 +- pendulum/formatting/formatter.py | 18 +- pendulum/helpers.py | 38 +- pendulum/mixins/default.py | 2 +- pendulum/parser.py | 23 +- pendulum/parsing/__init__.py | 23 +- pendulum/parsing/iso8601.py | 32 +- pendulum/period.py | 17 +- pendulum/time.py | 21 +- pendulum/tz/__init__.py | 12 +- pendulum/tz/local_timezone.py | 29 +- pendulum/tz/timezone.py | 12 +- tests/date/test_add.py | 2 +- tests/date/test_comparison.py | 4 +- tests/date/test_construct.py | 3 +- tests/date/test_day_of_week_modifiers.py | 3 +- tests/date/test_diff.py | 170 ++--- tests/date/test_fluent_setters.py | 2 +- tests/date/test_start_end_of.py | 3 +- tests/date/test_sub.py | 2 +- tests/datetime/test_add.py | 16 +- tests/datetime/test_comparison.py | 2 +- tests/datetime/test_construct.py | 5 +- tests/datetime/test_create_from_timestamp.py | 3 +- tests/datetime/test_day_of_week_modifiers.py | 3 +- tests/datetime/test_diff.py | 456 +++++++------ tests/datetime/test_fluent_setters.py | 82 +-- tests/datetime/test_from_format.py | 19 +- tests/datetime/test_getters.py | 5 +- tests/datetime/test_naive.py | 2 +- tests/datetime/test_replace.py | 2 +- tests/datetime/test_start_end_of.py | 2 +- tests/datetime/test_strings.py | 10 +- tests/datetime/test_sub.py | 16 +- tests/datetime/test_timezone.py | 2 +- tests/duration/test_add_sub.py | 2 +- tests/duration/test_arithmetic.py | 2 +- tests/duration/test_construct.py | 21 +- tests/parsing/test_parsing.py | 652 +++++++++---------- tests/period/test_arithmetic.py | 2 +- tests/period/test_construct.py | 2 +- tests/period/test_range.py | 5 +- tests/test_helpers.py | 18 +- tests/test_main.py | 2 +- tests/test_parsing.py | 24 +- tests/time/test_comparison.py | 2 +- tests/time/test_construct.py | 2 +- tests/time/test_fluent_setters.py | 3 +- tests/time/test_sub.py | 3 +- tests/tz/test_timezone.py | 7 +- tests/tz/test_timezones.py | 2 +- 60 files changed, 1050 insertions(+), 1040 deletions(-) diff --git a/.flake8 b/.flake8 index fe0ad3e8..d5712859 100644 --- a/.flake8 +++ b/.flake8 @@ -2,7 +2,8 @@ max-line-length = 88 per-file-ignores = # F401: Module imported but unused - __init__.py:F401 + # TC001: Move import into type checking block + __init__.py:F401, TC001 # F811: Redefinition of unused name from line n pendulum/tz/timezone.py:F811 min_python_version = 3.7.0 diff --git a/build.py b/build.py index 885b1c3b..ae98d976 100644 --- a/build.py +++ b/build.py @@ -51,10 +51,8 @@ def build_extension(self, ext): build_ext.build_extension(self, ext) except (CCompilerError, DistutilsExecError, DistutilsPlatformError, ValueError): print( - ' Unable to build the "{}" C extension, ' - "Pendulum will use the pure python version of the extension.".format( - ext.name - ) + f' Unable to build the "{ext.name}" C extension, ' + "Pendulum will use the pure python version of the extension." ) diff --git a/clock b/clock index d549e21d..17f35a32 100755 --- a/clock +++ b/clock @@ -252,7 +252,7 @@ class WindowsTzDump(Command): def handle(self): raw_tznames = get_global("windows_zone_mapping") - sorted_names = sorted(list(raw_tznames.keys())) + sorted_names = sorted(raw_tznames.keys()) tznames = {} for name in sorted_names: diff --git a/pendulum/__init__.py b/pendulum/__init__.py index 85e84f7d..bbe284b9 100644 --- a/pendulum/__init__.py +++ b/pendulum/__init__.py @@ -5,52 +5,52 @@ from typing import Optional from typing import Union -from .__version__ import __version__ -from .constants import DAYS_PER_WEEK -from .constants import FRIDAY -from .constants import HOURS_PER_DAY -from .constants import MINUTES_PER_HOUR -from .constants import MONDAY -from .constants import MONTHS_PER_YEAR -from .constants import SATURDAY -from .constants import SECONDS_PER_DAY -from .constants import SECONDS_PER_HOUR -from .constants import SECONDS_PER_MINUTE -from .constants import SUNDAY -from .constants import THURSDAY -from .constants import TUESDAY -from .constants import WEDNESDAY -from .constants import WEEKS_PER_YEAR -from .constants import YEARS_PER_CENTURY -from .constants import YEARS_PER_DECADE -from .date import Date -from .datetime import DateTime -from .duration import Duration -from .formatting import Formatter -from .helpers import format_diff -from .helpers import get_locale -from .helpers import get_test_now -from .helpers import has_test_now -from .helpers import locale -from .helpers import set_locale -from .helpers import set_test_now -from .helpers import test -from .helpers import week_ends_at -from .helpers import week_starts_at -from .parser import parse -from .period import Period -from .time import Time -from .tz import POST_TRANSITION -from .tz import PRE_TRANSITION -from .tz import TRANSITION_ERROR -from .tz import UTC -from .tz import local_timezone -from .tz import set_local_timezone -from .tz import test_local_timezone -from .tz import timezone -from .tz import timezones -from .tz.timezone import FixedTimezone -from .tz.timezone import Timezone +from pendulum.__version__ import __version__ +from pendulum.constants import DAYS_PER_WEEK +from pendulum.constants import FRIDAY +from pendulum.constants import HOURS_PER_DAY +from pendulum.constants import MINUTES_PER_HOUR +from pendulum.constants import MONDAY +from pendulum.constants import MONTHS_PER_YEAR +from pendulum.constants import SATURDAY +from pendulum.constants import SECONDS_PER_DAY +from pendulum.constants import SECONDS_PER_HOUR +from pendulum.constants import SECONDS_PER_MINUTE +from pendulum.constants import SUNDAY +from pendulum.constants import THURSDAY +from pendulum.constants import TUESDAY +from pendulum.constants import WEDNESDAY +from pendulum.constants import WEEKS_PER_YEAR +from pendulum.constants import YEARS_PER_CENTURY +from pendulum.constants import YEARS_PER_DECADE +from pendulum.date import Date +from pendulum.datetime import DateTime +from pendulum.duration import Duration +from pendulum.formatting import Formatter +from pendulum.helpers import format_diff +from pendulum.helpers import get_locale +from pendulum.helpers import get_test_now +from pendulum.helpers import has_test_now +from pendulum.helpers import locale +from pendulum.helpers import set_locale +from pendulum.helpers import set_test_now +from pendulum.helpers import test +from pendulum.helpers import week_ends_at +from pendulum.helpers import week_starts_at +from pendulum.parser import parse +from pendulum.period import Period +from pendulum.time import Time +from pendulum.tz import POST_TRANSITION +from pendulum.tz import PRE_TRANSITION +from pendulum.tz import TRANSITION_ERROR +from pendulum.tz import UTC +from pendulum.tz import local_timezone +from pendulum.tz import set_local_timezone +from pendulum.tz import test_local_timezone +from pendulum.tz import timezone +from pendulum.tz import timezones +from pendulum.tz.timezone import FixedTimezone +from pendulum.tz.timezone import Timezone _TEST_NOW: DateTime | None = None diff --git a/pendulum/_extensions/helpers.py b/pendulum/_extensions/helpers.py index 9342351d..992ea06b 100644 --- a/pendulum/_extensions/helpers.py +++ b/pendulum/_extensions/helpers.py @@ -5,21 +5,21 @@ from collections import namedtuple -from ..constants import DAY_OF_WEEK_TABLE -from ..constants import DAYS_PER_L_YEAR -from ..constants import DAYS_PER_MONTHS -from ..constants import DAYS_PER_N_YEAR -from ..constants import EPOCH_YEAR -from ..constants import MONTHS_OFFSETS -from ..constants import SECS_PER_4_YEARS -from ..constants import SECS_PER_100_YEARS -from ..constants import SECS_PER_400_YEARS -from ..constants import SECS_PER_DAY -from ..constants import SECS_PER_HOUR -from ..constants import SECS_PER_MIN -from ..constants import SECS_PER_YEAR -from ..constants import TM_DECEMBER -from ..constants import TM_JANUARY +from pendulum.constants import DAY_OF_WEEK_TABLE +from pendulum.constants import DAYS_PER_L_YEAR +from pendulum.constants import DAYS_PER_MONTHS +from pendulum.constants import DAYS_PER_N_YEAR +from pendulum.constants import EPOCH_YEAR +from pendulum.constants import MONTHS_OFFSETS +from pendulum.constants import SECS_PER_4_YEARS +from pendulum.constants import SECS_PER_100_YEARS +from pendulum.constants import SECS_PER_400_YEARS +from pendulum.constants import SECS_PER_DAY +from pendulum.constants import SECS_PER_HOUR +from pendulum.constants import SECS_PER_MIN +from pendulum.constants import SECS_PER_YEAR +from pendulum.constants import TM_DECEMBER +from pendulum.constants import TM_JANUARY class PreciseDiff( @@ -30,21 +30,13 @@ class PreciseDiff( ): def __repr__(self): return ( - "{years} years " - "{months} months " - "{days} days " - "{hours} hours " - "{minutes} minutes " - "{seconds} seconds " - "{microseconds} microseconds" - ).format( - years=self.years, - months=self.months, - days=self.days, - hours=self.hours, - minutes=self.minutes, - seconds=self.seconds, - microseconds=self.microseconds, + f"{self.years} years " + f"{self.months} months " + f"{self.days} days " + f"{self.hours} hours " + f"{self.minutes} minutes " + f"{self.seconds} seconds " + f"{self.microseconds} microseconds" ) diff --git a/pendulum/date.py b/pendulum/date.py index 1d2e6ce9..925f7a87 100644 --- a/pendulum/date.py +++ b/pendulum/date.py @@ -8,20 +8,20 @@ import pendulum -from .constants import FRIDAY -from .constants import MONDAY -from .constants import MONTHS_PER_YEAR -from .constants import SATURDAY -from .constants import SUNDAY -from .constants import THURSDAY -from .constants import TUESDAY -from .constants import WEDNESDAY -from .constants import YEARS_PER_CENTURY -from .constants import YEARS_PER_DECADE -from .exceptions import PendulumException -from .helpers import add_duration -from .mixins.default import FormattableMixin -from .period import Period +from pendulum.constants import FRIDAY +from pendulum.constants import MONDAY +from pendulum.constants import MONTHS_PER_YEAR +from pendulum.constants import SATURDAY +from pendulum.constants import SUNDAY +from pendulum.constants import THURSDAY +from pendulum.constants import TUESDAY +from pendulum.constants import WEDNESDAY +from pendulum.constants import YEARS_PER_CENTURY +from pendulum.constants import YEARS_PER_DECADE +from pendulum.exceptions import PendulumException +from pendulum.helpers import add_duration +from pendulum.mixins.default import FormattableMixin +from pendulum.period import Period class Date(FormattableMixin, date): @@ -105,16 +105,7 @@ def to_formatted_date_string(self): return self.strftime("%b %d, %Y") def __repr__(self): - return ( - "{klass}(" - "{year}, {month}, {day}" - ")".format( - klass=self.__class__.__name__, - year=self.year, - month=self.month, - day=self.day, - ) - ) + return f"{self.__class__.__name__}({self.year}, {self.month}, {self.day})" # COMPARISONS @@ -652,9 +643,8 @@ def nth_of(self, unit, nth, day_of_week): dt = getattr(self, f"_nth_of_{unit}")(nth, day_of_week) if dt is False: raise PendulumException( - "Unable to find occurence {} of {} in {}".format( - nth, self._days[day_of_week], unit - ) + f"Unable to find occurence {nth}" + f" of {self._days[day_of_week]} in {unit}" ) return dt @@ -732,7 +722,7 @@ def _nth_of_month(self, nth, day_of_week): dt = self.first_of("month") check = dt.format("YYYY-MM") - for i in range(nth - (1 if dt.day_of_week == day_of_week else 0)): + for _ in range(nth - (1 if dt.day_of_week == day_of_week else 0)): dt = dt.next(day_of_week) if dt.format("YYYY-MM") == check: @@ -789,7 +779,7 @@ def _nth_of_quarter(self, nth, day_of_week): last_month = dt.month year = dt.year dt = dt.first_of("quarter") - for i in range(nth - (1 if dt.day_of_week == day_of_week else 0)): + for _ in range(nth - (1 if dt.day_of_week == day_of_week else 0)): dt = dt.next(day_of_week) if last_month < dt.month or year != dt.year: @@ -842,7 +832,7 @@ def _nth_of_year(self, nth, day_of_week): dt = self.first_of("year") year = dt.year - for i in range(nth - (1 if dt.day_of_week == day_of_week else 0)): + for _ in range(nth - (1 if dt.day_of_week == day_of_week else 0)): dt = dt.next(day_of_week) if year != dt.year: diff --git a/pendulum/datetime.py b/pendulum/datetime.py index 037cae36..03fb28d8 100644 --- a/pendulum/datetime.py +++ b/pendulum/datetime.py @@ -7,35 +7,35 @@ import pendulum -from .constants import ATOM -from .constants import COOKIE -from .constants import MINUTES_PER_HOUR -from .constants import MONTHS_PER_YEAR -from .constants import RFC822 -from .constants import RFC850 -from .constants import RFC1036 -from .constants import RFC1123 -from .constants import RFC2822 -from .constants import RSS -from .constants import SATURDAY -from .constants import SECONDS_PER_DAY -from .constants import SECONDS_PER_MINUTE -from .constants import SUNDAY -from .constants import W3C -from .constants import YEARS_PER_CENTURY -from .constants import YEARS_PER_DECADE -from .date import Date -from .exceptions import PendulumException -from .helpers import add_duration -from .helpers import get_test_now -from .helpers import has_test_now -from .period import Period -from .time import Time -from .tz import UTC -from .tz import local_timezone -from .tz.timezone import FixedTimezone -from .tz.timezone import Timezone -from .utils._compat import PY38 +from pendulum.constants import ATOM +from pendulum.constants import COOKIE +from pendulum.constants import MINUTES_PER_HOUR +from pendulum.constants import MONTHS_PER_YEAR +from pendulum.constants import RFC822 +from pendulum.constants import RFC850 +from pendulum.constants import RFC1036 +from pendulum.constants import RFC1123 +from pendulum.constants import RFC2822 +from pendulum.constants import RSS +from pendulum.constants import SATURDAY +from pendulum.constants import SECONDS_PER_DAY +from pendulum.constants import SECONDS_PER_MINUTE +from pendulum.constants import SUNDAY +from pendulum.constants import W3C +from pendulum.constants import YEARS_PER_CENTURY +from pendulum.constants import YEARS_PER_DECADE +from pendulum.date import Date +from pendulum.exceptions import PendulumException +from pendulum.helpers import add_duration +from pendulum.helpers import get_test_now +from pendulum.helpers import has_test_now +from pendulum.period import Period +from pendulum.time import Time +from pendulum.tz import UTC +from pendulum.tz import local_timezone +from pendulum.tz.timezone import FixedTimezone +from pendulum.tz.timezone import Timezone +from pendulum.utils._compat import PY38 class DateTime(datetime.datetime, Date): @@ -979,9 +979,8 @@ def nth_of(self, unit: str, nth: int, day_of_week: int) -> DateTime: dt = getattr(self, f"_nth_of_{unit}")(nth, day_of_week) if dt is False: raise PendulumException( - "Unable to find occurence {} of {} in {}".format( - nth, self._days[day_of_week], unit - ) + f"Unable to find occurence {nth}" + f" of {self._days[day_of_week]} in {unit}" ) return dt @@ -1045,7 +1044,7 @@ def _nth_of_month(self, nth: int, day_of_week: int | None = None) -> DateTime: dt = self.first_of("month") check = dt.format("%Y-%M") - for i in range(nth - (1 if dt.day_of_week == day_of_week else 0)): + for _ in range(nth - (1 if dt.day_of_week == day_of_week else 0)): dt = dt.next(day_of_week) if dt.format("%Y-%M") == check: @@ -1094,7 +1093,7 @@ def _nth_of_quarter(self, nth: int, day_of_week: int | None = None) -> DateTime: last_month = dt.month year = dt.year dt = dt.first_of("quarter") - for i in range(nth - (1 if dt.day_of_week == day_of_week else 0)): + for _ in range(nth - (1 if dt.day_of_week == day_of_week else 0)): dt = dt.next(day_of_week) if last_month < dt.month or year != dt.year: @@ -1133,7 +1132,7 @@ def _nth_of_year(self, nth: int, day_of_week: int | None = None) -> DateTime: dt = self.first_of("year") year = dt.year - for i in range(nth - (1 if dt.day_of_week == day_of_week else 0)): + for _ in range(nth - (1 if dt.day_of_week == day_of_week else 0)): dt = dt.next(day_of_week) if year != dt.year: diff --git a/pendulum/duration.py b/pendulum/duration.py index 411b2e9e..88414ff3 100644 --- a/pendulum/duration.py +++ b/pendulum/duration.py @@ -4,13 +4,12 @@ import pendulum +from pendulum.constants import SECONDS_PER_DAY +from pendulum.constants import SECONDS_PER_HOUR +from pendulum.constants import SECONDS_PER_MINUTE +from pendulum.constants import US_PER_SECOND from pendulum.utils._compat import PYPY -from .constants import SECONDS_PER_DAY -from .constants import SECONDS_PER_HOUR -from .constants import SECONDS_PER_MINUTE -from .constants import US_PER_SECOND - def _divide_and_round(a, b): """divide a by b and round result to the nearest integer diff --git a/pendulum/formatting/__init__.py b/pendulum/formatting/__init__.py index 8e33afd5..0c6e725d 100644 --- a/pendulum/formatting/__init__.py +++ b/pendulum/formatting/__init__.py @@ -1,6 +1,6 @@ from __future__ import annotations -from .formatter import Formatter +from pendulum.formatting.formatter import Formatter __all__ = ["Formatter"] diff --git a/pendulum/formatting/difference_formatter.py b/pendulum/formatting/difference_formatter.py index 0325d303..4d738fa4 100644 --- a/pendulum/formatting/difference_formatter.py +++ b/pendulum/formatting/difference_formatter.py @@ -1,8 +1,12 @@ from __future__ import annotations -import pendulum +import typing as t -from ..locales.locale import Locale +from pendulum.locales.locale import Locale + + +if t.TYPE_CHECKING: + from pendulum import Period class DifferenceFormatter: @@ -15,7 +19,7 @@ def __init__(self, locale="en"): def format( self, - diff: pendulum.Period, + diff: Period, is_now: bool = True, absolute: bool = False, locale: str | None = None, @@ -136,9 +140,8 @@ def format( trans = locale.get(key) if not trans: # No special rule - time = locale.get( - f"translations.units.{unit}.{locale.plural(count)}" - ).format(count) + key = f"translations.units.{unit}.{locale.plural(count)}" + time = locale.get(key).format(count) else: time = trans[locale.plural(count)].format(count) diff --git a/pendulum/formatting/formatter.py b/pendulum/formatting/formatter.py index 4aad0fd3..29d1acf6 100644 --- a/pendulum/formatting/formatter.py +++ b/pendulum/formatting/formatter.py @@ -125,8 +125,8 @@ class Formatter: "X": lambda dt: f"{dt.int_timestamp:d}", "x": lambda dt: f"{dt.int_timestamp * 1000 + dt.microsecond // 1000:d}", # Timezone - "zz": lambda dt: "{}".format(dt.tzname() if dt.tzinfo is not None else ""), - "z": lambda dt: "{}".format(dt.timezone_name or ""), + "zz": lambda dt: f'{dt.tzname() if dt.tzinfo is not None else ""}', + "z": lambda dt: f'{dt.timezone_name or ""}', } _DATE_FORMATS = { @@ -438,7 +438,7 @@ def _check_parsed( if parsed["timestamp"] is not None: str_us = str(parsed["timestamp"]) if "." in str_us: - microseconds = int("{}".format(str_us.split(".")[1].ljust(6, "0"))) + microseconds = int(f'{str_us.split(".")[1].ljust(6, "0")}') else: microseconds = 0 @@ -474,9 +474,7 @@ def _check_parsed( validated["year"] = now.year if parsed["day_of_year"] is not None: - dt = pendulum.parse( - "{}-{:>03d}".format(validated["year"], parsed["day_of_year"]) - ) + dt = pendulum.parse(f'{validated["year"]}-{parsed["day_of_year"]:>03d}') validated["month"] = dt.month validated["day"] = dt.day @@ -561,7 +559,7 @@ def _get_parsed_value( parsed_token = now.year // 100 * 100 + parsed_token parsed["year"] = parsed_token - elif "Q" == token: + elif token == "Q": parsed["quarter"] = parsed_token elif token in ["MM", "M"]: parsed["month"] = parsed_token @@ -587,7 +585,7 @@ def _get_parsed_value( elif token in ["X", "x"]: parsed["timestamp"] = parsed_token elif token in ["ZZ", "Z"]: - negative = True if value.startswith("-") else False + negative = bool(value.startswith("-")) tz = value[1:] if ":" not in tz: if len(tz) == 2: @@ -641,7 +639,7 @@ def _get_parsed_locale_value( if token == "a": value = value.lower() - valid_values = list(map(lambda x: x.lower(), valid_values)) + valid_values = [x.lower() for x in valid_values] if value not in valid_values: raise ValueError("Invalid date") @@ -684,6 +682,6 @@ def _replace_tokens(self, token: str, locale: Locale) -> str: if not isinstance(candidates, tuple): candidates = (candidates,) - pattern = "(?P<{}>{})".format(token, "|".join(candidates)) + pattern = f'(?P<{token}>{"|".join(candidates)})' return pattern diff --git a/pendulum/helpers.py b/pendulum/helpers.py index 7653c333..7d6f831f 100644 --- a/pendulum/helpers.py +++ b/pendulum/helpers.py @@ -15,14 +15,14 @@ import pendulum -from .constants import DAYS_PER_MONTHS -from .formatting.difference_formatter import DifferenceFormatter -from .locales.locale import Locale +from pendulum.constants import DAYS_PER_MONTHS +from pendulum.formatting.difference_formatter import DifferenceFormatter +from pendulum.locales.locale import Locale if TYPE_CHECKING: # Prevent import cycles - from .period import Period + from pendulum.period import Period with_extensions = os.getenv("PENDULUM_EXTENSIONS", "1") == "1" @@ -30,25 +30,25 @@ _D = TypeVar("_D", bound=date) try: - # nopycln: file + # nopycln: file # noqa: E800 if not with_extensions or struct.calcsize("P") == 4: raise ImportError() - from ._extensions._helpers import days_in_year - from ._extensions._helpers import is_leap - from ._extensions._helpers import is_long_year - from ._extensions._helpers import local_time - from ._extensions._helpers import precise_diff - from ._extensions._helpers import timestamp - from ._extensions._helpers import week_day + from pendulum._extensions._helpers import days_in_year + from pendulum._extensions._helpers import is_leap + from pendulum._extensions._helpers import is_long_year + from pendulum._extensions._helpers import local_time + from pendulum._extensions._helpers import precise_diff + from pendulum._extensions._helpers import timestamp + from pendulum._extensions._helpers import week_day except ImportError: - from ._extensions.helpers import days_in_year # noqa - from ._extensions.helpers import is_leap # noqa - from ._extensions.helpers import is_long_year # noqa - from ._extensions.helpers import local_time # noqa - from ._extensions.helpers import precise_diff # noqa - from ._extensions.helpers import timestamp # noqa - from ._extensions.helpers import week_day # noqa + from pendulum._extensions.helpers import days_in_year # noqa + from pendulum._extensions.helpers import is_leap + from pendulum._extensions.helpers import is_long_year # noqa + from pendulum._extensions.helpers import local_time # noqa + from pendulum._extensions.helpers import precise_diff # noqa + from pendulum._extensions.helpers import timestamp # noqa + from pendulum._extensions.helpers import week_day # noqa difference_formatter = DifferenceFormatter() diff --git a/pendulum/mixins/default.py b/pendulum/mixins/default.py index cff9cc9c..f6f0315c 100644 --- a/pendulum/mixins/default.py +++ b/pendulum/mixins/default.py @@ -1,6 +1,6 @@ from __future__ import annotations -from ..formatting import Formatter +from pendulum.formatting import Formatter _formatter = Formatter() diff --git a/pendulum/parser.py b/pendulum/parser.py index 509348fb..dc3ab489 100644 --- a/pendulum/parser.py +++ b/pendulum/parser.py @@ -1,26 +1,29 @@ from __future__ import annotations import datetime -import typing +import typing as t import pendulum -from .date import Date -from .datetime import DateTime -from .parsing import _Interval -from .parsing import parse as base_parse -from .time import Duration -from .time import Time -from .tz import UTC +from pendulum.parsing import _Interval +from pendulum.parsing import parse as base_parse +from pendulum.tz import UTC + + +if t.TYPE_CHECKING: + from pendulum.date import Date + from pendulum.datetime import DateTime + from pendulum.time import Duration + from pendulum.time import Time try: - from .parsing._iso8601 import Duration as CDuration + from pendulum.parsing._iso8601 import Duration as CDuration except ImportError: CDuration = None -def parse(text: str, **options: typing.Any) -> Date | Time | DateTime | Duration: +def parse(text: str, **options: t.Any) -> Date | Time | DateTime | Duration: # Use the mock now value if it exists options["now"] = options.get("now", pendulum.get_test_now()) diff --git a/pendulum/parsing/__init__.py b/pendulum/parsing/__init__.py index 352f68c8..58554630 100644 --- a/pendulum/parsing/__init__.py +++ b/pendulum/parsing/__init__.py @@ -1,5 +1,6 @@ from __future__ import annotations +import contextlib import copy import os import re @@ -11,7 +12,7 @@ from dateutil import parser -from .exceptions import ParserError +from pendulum.parsing.exceptions import ParserError with_extensions = os.getenv("PENDULUM_EXTENSIONS", "1") == "1" @@ -20,13 +21,13 @@ if not with_extensions or struct.calcsize("P") == 4: raise ImportError() - from ._iso8601 import parse_iso8601 + from pendulum.parsing._iso8601 import parse_iso8601 except ImportError: - from .iso8601 import parse_iso8601 + from pendulum.parsing.iso8601 import parse_iso8601 COMMON = re.compile( - # Date (optional) + # Date (optional) # noqa: E800 "^" "(?P" " (?P" # Classic date (YYYY-MM-DD) @@ -37,7 +38,7 @@ " )?" " )" ")?" - # Time (optional) + # Time (optional) # noqa: E800 "(?P