diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml index df1754b8..fcc7ed3f 100644 --- a/.github/workflows/codspeed.yml +++ b/.github/workflows/codspeed.yml @@ -35,12 +35,15 @@ jobs: run: poetry config virtualenvs.create false - name: Install dependencies - run: poetry install --only test --only benchmark -vvv --no-root + run: poetry install --only test --only benchmark --only build -vvv --no-root + + - name: Install project + run: poetry install --only test --only benchmark --only build -vvv --no-root - name: Install pendulum and check extensions run: | - MATURIN_BUILD_ARGS="--no-default-features -vv" pip install -e . -v - python -c 'import _pendulum; assert _pendulum.__pendulum_default_allocator__' + poetry run pip install -e . -vvv + python -c 'import pendulum._pendulum' - name: Run benchmarks uses: CodSpeedHQ/action@v1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 52ab1c31..58214074 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,91 +7,99 @@ on: workflow_dispatch: jobs: - - build_wheels: - name: Build wheels on ${{ matrix.os }} - runs-on: ${{ matrix.os }}-latest + build: + name: Build on ${{ matrix.platform || matrix.os }} (${{ matrix.target }} - ${{ matrix.manylinux || 'auto' }}) strategy: + fail-fast: false matrix: - os: [ ubuntu, windows, macos ] + os: [ubuntu, macos, windows] + target: [x86_64, aarch64] + manylinux: [auto] + include: + - os: ubuntu + platform: linux + - os: windows + ls: dir + interpreter: 3.7 3.8 3.9 3.10 3.11 3.12 pypy3.8 pypy3.9 pypy3.10 + - os: windows + ls: dir + target: aarch64 + interpreter: 3.11 3.12 + - os: macos + target: aarch64 + interpreter: 3.7 3.8 3.9 3.10 3.11 3.12 pypy3.8 pypy3.9 pypy3.10 + - os: ubuntu + platform: linux + target: aarch64 + # mimalloc not supported on manylinux2014 cross-compile container + extra-build-args: --no-default-features + # musllinux + - os: ubuntu + platform: linux + target: x86_64 + manylinux: musllinux_1_1 + - os: ubuntu + platform: linux + target: aarch64 + manylinux: musllinux_1_1 + - os: ubuntu + platform: linux + target: ppc64le + interpreter: 3.7 3.8 3.9 3.10 3.11 3.12 + # mimalloc not supported on manylinux2014 cross-compile container + extra-build-args: --no-default-features + - os: ubuntu + platform: linux + target: s390x + interpreter: 3.7 3.8 3.9 3.10 3.11 3.12 + # mimalloc not supported on manylinux2014 cross-compile container + extra-build-args: --no-default-features + runs-on: ${{ matrix.os }}-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - name: Set up rust - uses: dtolnay/rust-toolchain@stable + - name: set up python + uses: actions/setup-python@v4 with: - toolchain: stable + python-version: '3.11' + architecture: ${{ matrix.python-architecture || 'x64' }} - - name: Setup Rust cache - uses: Swatinem/rust-cache@v2 + - name: build wheels + uses: PyO3/maturin-action@v1 with: - key: ${{ matrix.os }} + target: ${{ matrix.target }} + manylinux: ${{ matrix.manylinux || 'auto' }} + container: ${{ matrix.container }} + args: --release --out dist --interpreter ${{ matrix.interpreter || '3.7 3.8 3.9 3.10 3.11 3.12 pypy3.7 pypy3.8 pypy3.9 pypy3.10' }} ${{ matrix.extra-build-args }} + rust-toolchain: stable + docker-options: -e CI - - name: Set up QEMU - if: runner.os == 'Linux' - uses: docker/setup-qemu-action@v2 - with: - platforms: all - - - name: Build wheels - uses: pypa/cibuildwheel@v2.12.1 - env: - CIBW_ARCHS_LINUX: auto aarch64 - CIBW_ARCHS_MACOS: x86_64 - CIBW_ARCHS_WINDOWS: AMD64 - CIBW_PROJECT_REQUIRES_PYTHON: ">=3.8" - with: - package-dir: . - output-dir: dist + - run: ${{ matrix.ls || 'ls -lh' }} dist/ - uses: actions/upload-artifact@v3 with: name: dist - path: ./dist/* - - build_wheels_macos_arm: - name: Build arm64 wheels on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ macos-12 ] + path: dist + build_sdist: + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - - name: Set up rust - uses: dtolnay/rust-toolchain@stable + - name: Build sdist + uses: PyO3/maturin-action@v1 with: - toolchain: stable - - - name: Setup Rust cache - uses: Swatinem/rust-cache@v2 - with: - key: ${{ matrix.os }} - - - name: Build wheels - uses: pypa/cibuildwheel@v2.12.1 - env: - CIBW_ARCHS_MACOS: arm64 - CIBW_PROJECT_REQUIRES_PYTHON: ">=3.8" - with: - package-dir: . - output-dir: dist - - - name: Fix wheel tags - run: | - python3 -m pip install wheel - python3 -m wheel tags --platform-tag macosx_12_0_arm64 dist/*-macosx*.whl --remove - - - uses: actions/upload-artifact@v3 + command: sdist + args: --out dist + - name: Upload sdist + uses: actions/upload-artifact@v3 with: name: dist - path: ./dist/* + path: dist Release: - needs: [ build_wheels, build_wheels_macos_arm ] + needs: [ build, build_sdist ] if: success() && startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest @@ -112,9 +120,6 @@ jobs: - name: Update PATH run: echo "$HOME/.local/bin" >> $GITHUB_PATH - - name: Build sdist - run: poetry build --format sdist - - name: Check distributions run: | ls -la dist diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2c69c036..077a9c7a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -80,14 +80,17 @@ jobs: run: timeout 10s poetry run pip --version || rm -rf .venv - name: Install runtime, testing, and typing dependencies - run: poetry install --only main --only test --only typing -vvv + run: poetry install --only main --only test --only typing --only build --no-root -vvv + + - name: Install project + run: poetry run maturin develop - name: Run type checking run: poetry run mypy - name: Uninstall typing dependencies # This ensures pendulum runs without typing_extensions installed - run: poetry install --only main --only test --sync --no-root -vvv + run: poetry install --only main --only test --only build --sync --no-root -vvv - name: Test Pure Python run: | diff --git a/.gitignore b/.gitignore index d7309a0c..dd3696f6 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ setup.py .vscode /target +/rust/target diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c5bd461f..3ec3be2a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: - id: black - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.0.283 + rev: v0.0.291 hooks: - id: ruff diff --git a/Makefile b/Makefile index a12389a9..d6626b5c 100644 --- a/Makefile +++ b/Makefile @@ -9,10 +9,10 @@ list: no_targets__: lint-rust: - cargo fmt --all -- --check - cargo clippy --tests -- -D warnings + cd rust && cargo fmt --all -- --check + cd rust && cargo clippy --tests -- -D warnings format-rust: - cargo fmt --all - cargo clippy --tests --fix --allow-dirty -- -D warnings + cd rust && cargo fmt --all + cd rust && cargo clippy --tests --fix --allow-dirty -- -D warnings diff --git a/build.py b/build.py deleted file mode 100644 index 800e9479..00000000 --- a/build.py +++ /dev/null @@ -1,56 +0,0 @@ -import os -import shlex -import shutil -import subprocess -import zipfile - -from pathlib import Path - - -def maturin(*args): - subprocess.call(["maturin", *list(args)]) - - -def _build(): - build_dir = Path(__file__).parent.joinpath("build") - build_dir.mkdir(parents=True, exist_ok=True) - - wheels_dir = Path(__file__).parent.joinpath("target/wheels") - if wheels_dir.exists(): - shutil.rmtree(wheels_dir) - - cargo_args = [] - if os.getenv("MATURIN_BUILD_ARGS"): - cargo_args = shlex.split(os.getenv("MATURIN_BUILD_ARGS", "")) - - maturin("build", "-r", *cargo_args) - - # We won't use the wheel built by maturin directly since - # we want Poetry to build it but we need to retrieve the - # compiled extensions from the maturin wheel. - wheel = next(iter(wheels_dir.glob("*.whl"))) - with zipfile.ZipFile(wheel.as_posix()) as whl: - whl.extractall(wheels_dir.as_posix()) - - for extension in wheels_dir.rglob("**/*.so"): - shutil.copyfile(extension, Path(__file__).parent.joinpath(extension.name)) - - shutil.rmtree(wheels_dir) - - -def build(setup_kwargs): - """ - This function is mandatory in order to build the extensions. - """ - try: - _build() - except Exception as e: - print( - " Unable to build Rust extensions, " - "Pendulum will use the pure python version of the extensions." - ) - print(e) - - -if __name__ == "__main__": - build({}) diff --git a/poetry.lock b/poetry.lock index f5b7c2d9..34baa7cd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -168,13 +168,13 @@ rapidfuzz = ">=2.2.0,<3.0.0" [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -229,18 +229,19 @@ test = ["pytest (>=6)"] [[package]] name = "filelock" -version = "3.12.2" +version = "3.12.4" description = "A platform independent file lock." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4"}, + {file = "filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] +typing = ["typing-extensions (>=4.7.1)"] [[package]] name = "ghp-import" @@ -261,13 +262,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "identify" -version = "2.5.26" +version = "2.5.30" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, - {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, + {file = "identify-2.5.30-py2.py3-none-any.whl", hash = "sha256:afe67f26ae29bab007ec21b03d4114f41316ab9dd15aa8736a167481e108da54"}, + {file = "identify-2.5.30.tar.gz", hash = "sha256:f302a4256a15c849b91cfcdcec052a8ce914634b2f77ae87dad29cd749f2d88d"}, ] [package.extras] @@ -428,6 +429,35 @@ files = [ {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] +[[package]] +name = "maturin" +version = "1.2.3" +description = "Build and publish crates with pyo3, rust-cpython and cffi bindings as well as rust binaries as python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "maturin-1.2.3-py3-none-linux_armv6l.whl", hash = "sha256:7b6484d7c94d6d6188ccf4ed8a6167cb8f1e98f13c653bfa715c9ee9eac4be0c"}, + {file = "maturin-1.2.3-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:b44fb4d1d116d69ce7c713c22b322debd5fc222db09eb1cdfa0e1c1b7f3e2e9c"}, + {file = "maturin-1.2.3-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:735375559c8c75bdc910c377f6dcc9197637ee2a312a60e361ef0e08fb31fcb5"}, + {file = "maturin-1.2.3-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:619f4f7b7e3a842a4f6cbae1d138a71d67aeba460f6217b38f2150ad53bb4dc1"}, + {file = "maturin-1.2.3-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:4e1035c102f87aa3e6733d28c2248b7303afa11f93a21f2ac88636e0430b0258"}, + {file = "maturin-1.2.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:aef8ddb9e775dd3781e6f56e10cc3d26f648735723ab5c47ce938542b9b5bbb6"}, + {file = "maturin-1.2.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:23c6fdc5750b96fd10d28c125dd795e9b75cd5cd768c8a403dc91dfde641243a"}, + {file = "maturin-1.2.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:40b4d69f9e5be5eacedd80ae496fae67cfd71d386b5604f7ce2e9ac9d34d0460"}, + {file = "maturin-1.2.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:826e90533789ff6dd3f3f0541fbe46c3549ec985d19edceff7913f9bdf9c3131"}, + {file = "maturin-1.2.3-py3-none-win32.whl", hash = "sha256:e414e56896d904c255e80190ac81fa8299b1d7df52f7e2e3f10df33f92784fd8"}, + {file = "maturin-1.2.3-py3-none-win_amd64.whl", hash = "sha256:1f5516dbe68491bf4bf7e047caf139596a3cd9d4a5ec8bb43034980e3710e550"}, + {file = "maturin-1.2.3-py3-none-win_arm64.whl", hash = "sha256:7d47e9a0fe56d25de98a2bed7d1c75975516e3a25fa5b552b2ee61fb1add41c0"}, + {file = "maturin-1.2.3.tar.gz", hash = "sha256:ef3f42af453d64f233b99543c3001bee645019a9c2022c7972210a9cacb5301f"}, +] + +[package.dependencies] +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} + +[package.extras] +patchelf = ["patchelf"] +zig = ["ziglang (>=0.10.0,<0.11.0)"] + [[package]] name = "mergedeep" version = "1.3.4" @@ -441,13 +471,13 @@ files = [ [[package]] name = "mkdocs" -version = "1.5.2" +version = "1.5.3" description = "Project documentation with Markdown." optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs-1.5.2-py3-none-any.whl", hash = "sha256:60a62538519c2e96fe8426654a67ee177350451616118a41596ae7c876bb7eac"}, - {file = "mkdocs-1.5.2.tar.gz", hash = "sha256:70d0da09c26cff288852471be03c23f0f521fc15cf16ac89c7a3bfb9ae8d24f9"}, + {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, + {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, ] [package.dependencies] @@ -472,33 +502,38 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mypy" -version = "1.5.0" +version = "1.5.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ad3109bec37cc33654de8db30fe8ff3a1bb57ea65144167d68185e6dced9868d"}, - {file = "mypy-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b4ea3a0241cb005b0ccdbd318fb99619b21ae51bcf1660b95fc22e0e7d3ba4a1"}, - {file = "mypy-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fe816e26e676c1311b9e04fd576543b873576d39439f7c24c8e5c7728391ecf"}, - {file = "mypy-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42170e68adb1603ccdc55a30068f72bcfcde2ce650188e4c1b2a93018b826735"}, - {file = "mypy-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d145b81a8214687cfc1f85c03663a5bbe736777410e5580e54d526e7e904f564"}, - {file = "mypy-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c36011320e452eb30bec38b9fd3ba20569dc9545d7d4540d967f3ea1fab9c374"}, - {file = "mypy-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f3940cf5845b2512b3ab95463198b0cdf87975dfd17fdcc6ce9709a9abe09e69"}, - {file = "mypy-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9166186c498170e1ff478a7f540846b2169243feb95bc228d39a67a1a450cdc6"}, - {file = "mypy-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:725b57a19b7408ef66a0fd9db59b5d3e528922250fb56e50bded27fea9ff28f0"}, - {file = "mypy-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:eec5c927aa4b3e8b4781840f1550079969926d0a22ce38075f6cfcf4b13e3eb4"}, - {file = "mypy-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79c520aa24f21852206b5ff2cf746dc13020113aa73fa55af504635a96e62718"}, - {file = "mypy-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:769ddb6bfe55c2bd9c7d6d7020885a5ea14289619db7ee650e06b1ef0852c6f4"}, - {file = "mypy-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf18f8db7e5f060d61c91e334d3b96d6bb624ddc9ee8a1cde407b737acbca2c"}, - {file = "mypy-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a2500ad063413bc873ae102cf655bf49889e0763b260a3a7cf544a0cbbf7e70a"}, - {file = "mypy-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:84cf9f7d8a8a22bb6a36444480f4cbf089c917a4179fbf7eea003ea931944a7f"}, - {file = "mypy-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a551ed0fc02455fe2c1fb0145160df8336b90ab80224739627b15ebe2b45e9dc"}, - {file = "mypy-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:372fd97293ed0076d52695849f59acbbb8461c4ab447858cdaeaf734a396d823"}, - {file = "mypy-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8a7444d6fcac7e2585b10abb91ad900a576da7af8f5cffffbff6065d9115813"}, - {file = "mypy-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:35b13335c6c46a386577a51f3d38b2b5d14aa619e9633bb756bd77205e4bd09f"}, - {file = "mypy-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:2c9d570f53908cbea326ad8f96028a673b814d9dca7515bf71d95fa662c3eb6f"}, - {file = "mypy-1.5.0-py3-none-any.whl", hash = "sha256:69b32d0dedd211b80f1b7435644e1ef83033a2af2ac65adcdc87c38db68a86be"}, - {file = "mypy-1.5.0.tar.gz", hash = "sha256:f3460f34b3839b9bc84ee3ed65076eb827cd99ed13ed08d723f9083cada4a212"}, + {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, + {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, + {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, + {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, + {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, + {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, + {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, + {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, + {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, + {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, + {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, + {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, + {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, + {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, + {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, + {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, + {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, + {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, + {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, + {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, + {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, + {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, + {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, + {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, + {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, + {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, + {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, ] [package.dependencies] @@ -575,13 +610,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.2.0" +version = "1.3.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] [package.extras] @@ -590,13 +625,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.3.3" +version = "3.4.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.8" files = [ - {file = "pre_commit-3.3.3-py2.py3-none-any.whl", hash = "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb"}, - {file = "pre_commit-3.3.3.tar.gz", hash = "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023"}, + {file = "pre_commit-3.4.0-py2.py3-none-any.whl", hash = "sha256:96d529a951f8b677f730a7212442027e8ba53f9b04d217c4c67dc56c393ad945"}, + {file = "pre_commit-3.4.0.tar.gz", hash = "sha256:6bbd5129a64cad4c0dfaeeb12cd8f7ea7e15b77028d985341478c8af3c759522"}, ] [package.dependencies] @@ -622,7 +657,7 @@ name = "pycparser" version = "2.21" description = "C parser in Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = "*" files = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, @@ -644,28 +679,31 @@ plugins = ["importlib-metadata"] [[package]] name = "pymdown-extensions" -version = "10.1" +version = "10.3" description = "Extension pack for Python Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.1-py3-none-any.whl", hash = "sha256:ef25dbbae530e8f67575d222b75ff0649b1e841e22c2ae9a20bad9472c2207dc"}, - {file = "pymdown_extensions-10.1.tar.gz", hash = "sha256:508009b211373058debb8247e168de4cbcb91b1bff7b5e961b2c3e864e00b195"}, + {file = "pymdown_extensions-10.3-py3-none-any.whl", hash = "sha256:77a82c621c58a83efc49a389159181d570e370fff9f810d3a4766a75fc678b66"}, + {file = "pymdown_extensions-10.3.tar.gz", hash = "sha256:94a0d8a03246712b64698af223848fd80aaf1ae4c4be29c8c61939b0467b5722"}, ] [package.dependencies] markdown = ">=3.2" pyyaml = "*" +[package.extras] +extra = ["pygments (>=2.12)"] + [[package]] name = "pyproject-api" -version = "1.5.3" +version = "1.6.1" description = "API to interact with the python pyproject.toml based projects" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pyproject_api-1.5.3-py3-none-any.whl", hash = "sha256:14cf09828670c7b08842249c1f28c8ee6581b872e893f81b62d5465bec41502f"}, - {file = "pyproject_api-1.5.3.tar.gz", hash = "sha256:ffb5b2d7cad43f5b2688ab490de7c4d3f6f15e0b819cb588c4b771567c9729eb"}, + {file = "pyproject_api-1.6.1-py3-none-any.whl", hash = "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675"}, + {file = "pyproject_api-1.6.1.tar.gz", hash = "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538"}, ] [package.dependencies] @@ -673,18 +711,18 @@ packaging = ">=23.1" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "importlib-metadata (>=6.6)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "setuptools (>=67.8)", "wheel (>=0.40)"] +docs = ["furo (>=2023.8.19)", "sphinx (<7.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "setuptools (>=68.1.2)", "wheel (>=0.41.2)"] [[package]] name = "pytest" -version = "7.4.0" +version = "7.4.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, ] [package.dependencies] @@ -753,13 +791,13 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -774,6 +812,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -781,8 +820,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -799,6 +845,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -806,6 +853,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -931,19 +979,19 @@ full = ["numpy"] [[package]] name = "setuptools" -version = "68.1.0" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.1.0-py3-none-any.whl", hash = "sha256:e13e1b0bc760e9b0127eda042845999b2f913e12437046e663b833aa96d89715"}, - {file = "setuptools-68.1.0.tar.gz", hash = "sha256:d59c97e7b774979a5ccb96388efc9eb65518004537e85d52e81eaee89ab6dd91"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -958,67 +1006,67 @@ files = [ [[package]] name = "time-machine" -version = "2.12.0" +version = "2.13.0" description = "Travel through time in your tests." optional = false python-versions = ">=3.8" files = [ - {file = "time_machine-2.12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:786efcc336edc196e5a854a73ff714be198bc57da6856064083677a188c8e018"}, - {file = "time_machine-2.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:35ec4170e5045ac0d5dfb1255320e301d5b6fc359f9cf36010007bf572888e73"}, - {file = "time_machine-2.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47dc877f3a475d0e818b31a6ad6fc1fbe40f334dcd73d2cb076057aff4d73beb"}, - {file = "time_machine-2.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcb41d70da706e14a805fcbf42bdb17435d4a91420bd5b6a88f8f61beb95b862"}, - {file = "time_machine-2.12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8676471983482522f3e124ad2c8fe38d6d6ed957379504910d2ea0c646d96cb4"}, - {file = "time_machine-2.12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1e3b07d7aa993a2f24e3a2ef5a216869f0a1fcaaba6227ad73b265c4f15feca5"}, - {file = "time_machine-2.12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:328266ea13f0c517cdf758c16a2d83f0118516b8ac7910bba4eba6d4d3b3b2f1"}, - {file = "time_machine-2.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:496a47e2eef78893eb6915d0a5215c59346ebe29d5c88a56301ed74deebe45cc"}, - {file = "time_machine-2.12.0-cp310-cp310-win32.whl", hash = "sha256:d7442e9cffccd76115521f8d64c270e923e566e9487ba9da9824149653cf0641"}, - {file = "time_machine-2.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:796968ca8e770ee1121fe209a18cee9bd462bc0cacf57e2b1d528df08c6f18d6"}, - {file = "time_machine-2.12.0-cp310-cp310-win_arm64.whl", hash = "sha256:a525dd4fd6f7a2ecf2b54fce3c8b9982650dc570992ca6e38987c3922684099a"}, - {file = "time_machine-2.12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ead6c3a1858c551b4edbba781d48892a487fda6ef6416c87f8ed559bfb29c904"}, - {file = "time_machine-2.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:93c84850c9e529433613af2b2097634d27b30e9853271b6ea1384ee00be5424a"}, - {file = "time_machine-2.12.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:8ec623cff18e328781ab7a6251f1ee77e225f14e1f5a26633028a14b7d90ed82"}, - {file = "time_machine-2.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3fe070414ef05359c55bbbf94b7a895d532af726705e6f33e6f2eeb26326042"}, - {file = "time_machine-2.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43a4a5d722f7a6b6ee8f1d3cdeffe6d7c3421452219dce0d22778e6810fb645c"}, - {file = "time_machine-2.12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc80ba01ff5663c74ce74c9ee2267dbf900ee8e8d18d55937b5e83eb1e179998"}, - {file = "time_machine-2.12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d4f546b262e0d955376bf0af9a4de13a910f5f27c5e44e4db46ceea61b4c4a7d"}, - {file = "time_machine-2.12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05f7320851edb3e887d79a5c797966c8c1b64458fb8b8ee74982c6593606a387"}, - {file = "time_machine-2.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:669437542e9027db55e06ff05e848a9cb0e88d1fc6e659b412e9721be227b9be"}, - {file = "time_machine-2.12.0-cp311-cp311-win32.whl", hash = "sha256:82062eef6096c42ce14c7c07a7898caa3d696ac189fdb1586f59562893f6abf4"}, - {file = "time_machine-2.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:8176eba6b182f88fa8afd9a964c9391b73f3456f6c2f59bb2514957ec6269724"}, - {file = "time_machine-2.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:d09aaa1d323c4a4b5b4569f44a02bb24ba5030b55adc9710a895843796363c0c"}, - {file = "time_machine-2.12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:2b84449a2b170ed51c26a725a2ca983bc98490c5f23d28e9473402adc7e694ba"}, - {file = "time_machine-2.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b9dec9619ff5e89798e9cfb5e2a53e1eed18afa1b20460d7158fa2db94dd2d3b"}, - {file = "time_machine-2.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1b7b1b758de72de73fcf063be8ae9e2e98dd4bab0e6cd8b32c8e7d0462d78b0"}, - {file = "time_machine-2.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9f13f8c8dc72541654830d16efcc6249969bac1cbe591bee4a0ac19490592e2"}, - {file = "time_machine-2.12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c764bd6690b83a72b4294934774044c8cea4356cb9b103b7dbb8232242b3047"}, - {file = "time_machine-2.12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fafb423453e711ea95a669373bdaf628e9e8a0c606c1366499835f3e446554dc"}, - {file = "time_machine-2.12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:26d2be6009151de7aa210e8569c49eece6563b8beb7e290ebd4a10b2b8d2fc5c"}, - {file = "time_machine-2.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:81b88ac04e61c772854fa85b8e04428e3068fe690487a50b69bb07dda2168c36"}, - {file = "time_machine-2.12.0-cp312-cp312-win32.whl", hash = "sha256:58ec76d58dcc3ab6a3d7951ae08ae99c7b413a40c7e8255c106b5df4f768f8dd"}, - {file = "time_machine-2.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:156fdd17fde2a3ea9c41a8108b8ac877e4f90a7ac5e6db533ab6ecb86f723891"}, - {file = "time_machine-2.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:5240e1cb013826449a5065062b47a46ce3d431fc47cbddc938e3c05e3fe4a951"}, - {file = "time_machine-2.12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bb60d061978487db5cba8a20fb84b3ae29af5ca004a0e991cd5eaa31b0851b59"}, - {file = "time_machine-2.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e8d5ae0f0a25b3aa7207688edf23de514f918a91ea05edbeffdbdd56d8497c13"}, - {file = "time_machine-2.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3992b9285c75c6f74fabfdb0ca7f17f12e22d0fc631ff43d0e110ccd53382569"}, - {file = "time_machine-2.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33ee51c6f9f02d7b1d792d379b42321a3d13b819ecd8d136fb287be4adc7b9da"}, - {file = "time_machine-2.12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715956ef123645ef22d1c7a13963bb9bc50c02b8578797704715a410bfa49575"}, - {file = "time_machine-2.12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e45505414fba93a15957a43ff52bbf737c3ef7905464eb16ef45e1395e95206d"}, - {file = "time_machine-2.12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4bd89a8bf7756b50de180258517004f30857deea82c1841f291a2c8e25cfaa83"}, - {file = "time_machine-2.12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9c389ef8508f787ff1ec963b473838616773db8e00bc043cab9374f36d9e8201"}, - {file = "time_machine-2.12.0-cp38-cp38-win32.whl", hash = "sha256:5e62e45a71674b5df9f9275ffbb342c78ba026c9b556478d0b4bc4470e9f2b4b"}, - {file = "time_machine-2.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:9ac560499086184142b0a0b28eca0ea1d245e9df1c008ef3356b0e3ea6cb1536"}, - {file = "time_machine-2.12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b535a2524e1adbac3c8028c49cdceb764f800ca95c2f7421aad11c5d4c274ed7"}, - {file = "time_machine-2.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d365d6e0faaf6bcddacfb71d8c033011b7a65f1a94142350a1bc9da3c85bfb8e"}, - {file = "time_machine-2.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f9c48f19a6af887ac769740e914f8eb8e406a3d33a651e107f28bba1adc3796"}, - {file = "time_machine-2.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a0a3fb0c316c23b0d79810cf7a158c7d4671acc02a5dfa5cda7aa673478a0dc"}, - {file = "time_machine-2.12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:353b6b43e43aee22df79194584c587225ec1a06a2f444099ada2096d806d602e"}, - {file = "time_machine-2.12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0613aef850db722f2ceee1923d67fc050ae8d6a09fa2cd1ca1dae0748864e6d7"}, - {file = "time_machine-2.12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a5304de3e41c33cd6e4be7b85f09409b1059b9ff6a8289482352c42fb50b4e42"}, - {file = "time_machine-2.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4cf10267610244d4398312c4eea5cfc2f68f9a0286260d2157d45d1a54dcc6b2"}, - {file = "time_machine-2.12.0-cp39-cp39-win32.whl", hash = "sha256:9b255feaa4f3c46c7ebd1319a630ee1e3aa87078c9b428f9428980597c3ce830"}, - {file = "time_machine-2.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:81095391ccef01c56b6061248216da4e2d749b543952fce199b628b8a8ce5ca2"}, - {file = "time_machine-2.12.0-cp39-cp39-win_arm64.whl", hash = "sha256:dfe8b2478b4c3556a913b187ce598ad2afd07e6acfcf652be8e5a56dee2bf200"}, - {file = "time_machine-2.12.0.tar.gz", hash = "sha256:e0c98003096624cc70caa5743fe6a1fd0e97ffeaf9b44560e4158b0e1a38168e"}, + {file = "time_machine-2.13.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:685d98593f13649ad5e7ce3e58efe689feca1badcf618ba397d3ab877ee59326"}, + {file = "time_machine-2.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ccbce292380ebf63fb9a52e6b03d91677f6a003e0c11f77473efe3913a75f289"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:679cbf9b15bfde1654cf48124128d3fbe52f821fa158a98fcee5fe7e05db1917"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a26bdf3462d5f12a4c1009fdbe54366c6ef22c7b6f6808705b51dedaaeba8296"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dabb3b155819811b4602f7e9be936e2024e20dc99a90f103e36b45768badf9c3"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0db97f92be3efe0ac62fd3f933c91a78438cef13f283b6dfc2ee11123bfd7d8a"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:12eed2e9171c85b703d75c985dab2ecad4fe7025b7d2f842596fce1576238ece"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bdfe4a7f033e6783c3e9a7f8d8fc0b115367330762e00a03ff35fedf663994f3"}, + {file = "time_machine-2.13.0-cp310-cp310-win32.whl", hash = "sha256:3a7a0a49ce50d9c306c4343a7d6a3baa11092d4399a4af4355c615ccc321a9d3"}, + {file = "time_machine-2.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1812e48c6c58707db9988445a219a908a710ea065b2cc808d9a50636291f27d4"}, + {file = "time_machine-2.13.0-cp310-cp310-win_arm64.whl", hash = "sha256:5aee23cd046abf9caeddc982113e81ba9097a01f3972e9560f5ed64e3495f66d"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2bd4169b808745d219a69094b3cb86006938d45e7293249694e6b7366225a186"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:8d526cdcaca06a496877cfe61cc6608df2c3a6fce210e076761964ebac7f77cc"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfef4ebfb4f055ce3ebc7b6c1c4d0dbfcffdca0e783ad8c6986c992915a57ed3"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f128db8997c3339f04f7f3946dd9bb2a83d15e0a40d35529774da1e9e501511"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21bef5854d49b62e2c33848b5c3e8acf22a3b46af803ef6ff19529949cb7cf9f"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:32b71e50b07f86916ac04bd1eefc2bd2c93706b81393748b08394509ee6585dc"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ac8ff145c63cd0dcfd9590fe694b5269aacbc130298dc7209b095d101f8cdde"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:19a3b10161c91ca8e0fd79348665cca711fd2eac6ce336ff9e6b447783817f93"}, + {file = "time_machine-2.13.0-cp311-cp311-win32.whl", hash = "sha256:5f87787d562e42bf1006a87eb689814105b98c4d5545874a281280d0f8b9a2d9"}, + {file = "time_machine-2.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:62fd14a80b8b71726e07018628daaee0a2e00937625083f96f69ed6b8e3304c0"}, + {file = "time_machine-2.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:e9935aff447f5400a2665ab10ed2da972591713080e1befe1bb8954e7c0c7806"}, + {file = "time_machine-2.13.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:34dcdbbd25c1e124e17fe58050452960fd16a11f9d3476aaa87260e28ecca0fd"}, + {file = "time_machine-2.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e58d82fe0e59d6e096ada3281d647a2e7420f7da5453b433b43880e1c2e8e0c5"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71acbc1febbe87532c7355eca3308c073d6e502ee4ce272b5028967847c8e063"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dec0ec2135a4e2a59623e40c31d6e8a8ae73305ade2634380e4263d815855750"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e3a2611f8788608ebbcb060a5e36b45911bc3b8adc421b1dc29d2c81786ce4d"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:42ef5349135626ad6cd889a0a81400137e5c6928502b0817ea9e90bb10702000"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6c16d90a597a8c2d3ce22d6be2eb3e3f14786974c11b01886e51b3cf0d5edaf7"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f2ae8d0e359b216b695f1e7e7256f208c390db0480601a439c5dd1e1e4e16ce"}, + {file = "time_machine-2.13.0-cp312-cp312-win32.whl", hash = "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237"}, + {file = "time_machine-2.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:02b33a8c19768c94f7ffd6aa6f9f64818e88afce23250016b28583929d20fb12"}, + {file = "time_machine-2.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:0cc116056a8a2a917a4eec85661dfadd411e0d8faae604ef6a0e19fe5cd57ef1"}, + {file = "time_machine-2.13.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:de01f33aa53da37530ad97dcd17e9affa25a8df4ab822506bb08101bab0c2673"}, + {file = "time_machine-2.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:67fa45cd813821e4f5bec0ac0820869e8e37430b15509d3f5fad74ba34b53852"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a2d3db2c3b8e519d5ef436cd405abd33542a7b7761fb05ef5a5f782a8ce0b1"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7558622a62243be866a7e7c41da48eacd82c874b015ecf67d18ebf65ca3f7436"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab04cf4e56e1ee65bee2adaa26a04695e92eb1ed1ccc65fbdafd0d114399595a"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b0c8f24ae611a58782773af34dd356f1f26756272c04be2be7ea73b47e5da37d"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ca20f85a973a4ca8b00cf466cd72c27ccc72372549b138fd48d7e70e5a190ab"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9fad549521c4c13bdb1e889b2855a86ec835780d534ffd8f091c2647863243be"}, + {file = "time_machine-2.13.0-cp38-cp38-win32.whl", hash = "sha256:20205422fcf2caf9a7488394587df86e5b54fdb315c1152094fbb63eec4e9304"}, + {file = "time_machine-2.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:2dc76ee55a7d915a55960a726ceaca7b9097f67e4b4e681ef89871bcf98f00be"}, + {file = "time_machine-2.13.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7693704c0f2f6b9beed912ff609781edf5fcf5d63aff30c92be4093e09d94b8e"}, + {file = "time_machine-2.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:918f8389de29b4f41317d121f1150176fae2cdb5fa41f68b2aee0b9dc88df5c3"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fe3fda5fa73fec74278912e438fce1612a79c36fd0cc323ea3dc2d5ce629f31"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c6245db573863b335d9ca64b3230f623caf0988594ae554c0c794e7f80e3e66"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e433827eccd6700a34a2ab28fd9361ff6e4d4923f718d2d1dac6d1dcd9d54da6"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:924377d398b1c48e519ad86a71903f9f36117f69e68242c99fb762a2465f5ad2"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66fb3877014dca0b9286b0f06fa74062357bd23f2d9d102d10e31e0f8fa9b324"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0c9829b2edfcf6b5d72a6ff330d4380f36a937088314c675531b43d3423dd8af"}, + {file = "time_machine-2.13.0-cp39-cp39-win32.whl", hash = "sha256:1a22be4df364f49a507af4ac9ea38108a0105f39da3f9c60dce62d6c6ea4ccdc"}, + {file = "time_machine-2.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:88601de1da06c7cab3d5ed3d5c3801ef683366e769e829e96383fdab6ae2fe42"}, + {file = "time_machine-2.13.0-cp39-cp39-win_arm64.whl", hash = "sha256:3c87856105dcb25b5bbff031d99f06ef4d1c8380d096222e1bc63b496b5258e6"}, + {file = "time_machine-2.13.0.tar.gz", hash = "sha256:c23b2408e3adcedec84ea1131e238f0124a5bc0e491f60d1137ad7239b37c01a"}, ] [package.dependencies] @@ -1037,30 +1085,30 @@ files = [ [[package]] name = "tox" -version = "4.8.0" +version = "4.11.3" description = "tox is a generic virtualenv management and test command line tool" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tox-4.8.0-py3-none-any.whl", hash = "sha256:4991305a56983d750a0d848a34242be290452aa88d248f1bf976e4036ee8b213"}, - {file = "tox-4.8.0.tar.gz", hash = "sha256:2adacf435b12ccf10b9dfa9975d8ec0afd7cbae44d300463140d2117b968037b"}, + {file = "tox-4.11.3-py3-none-any.whl", hash = "sha256:599af5e5bb0cad0148ac1558a0b66f8fff219ef88363483b8d92a81e4246f28f"}, + {file = "tox-4.11.3.tar.gz", hash = "sha256:5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951"}, ] [package.dependencies] cachetools = ">=5.3.1" -chardet = ">=5.1" +chardet = ">=5.2" colorama = ">=0.4.6" -filelock = ">=3.12.2" +filelock = ">=3.12.3" packaging = ">=23.1" -platformdirs = ">=3.9.1" -pluggy = ">=1.2" -pyproject-api = ">=1.5.3" +platformdirs = ">=3.10" +pluggy = ">=1.3" +pyproject-api = ">=1.6.1" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} -virtualenv = ">=20.24.1" +virtualenv = ">=20.24.3" [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-argparse-cli (>=1.11.1)", "sphinx-autodoc-typehints (>=1.23.3,!=1.23.4)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -testing = ["build[virtualenv] (>=0.10)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.1.1)", "devpi-process (>=0.3.1)", "diff-cover (>=7.7)", "distlib (>=0.3.7)", "flaky (>=3.7)", "hatch-vcs (>=0.3)", "hatchling (>=1.17.1)", "psutil (>=5.9.5)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-xdist (>=3.3.1)", "re-assert (>=1.1)", "time-machine (>=2.10)", "wheel (>=0.40)"] +docs = ["furo (>=2023.8.19)", "sphinx (>=7.2.4)", "sphinx-argparse-cli (>=1.11.1)", "sphinx-autodoc-typehints (>=1.24)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +testing = ["build[virtualenv] (>=0.10)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.1.1)", "devpi-process (>=1)", "diff-cover (>=7.7)", "distlib (>=0.3.7)", "flaky (>=3.7)", "hatch-vcs (>=0.3)", "hatchling (>=1.18)", "psutil (>=5.9.5)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-xdist (>=3.3.1)", "re-assert (>=1.1)", "time-machine (>=2.12)", "wheel (>=0.41.2)"] [[package]] name = "types-python-dateutil" @@ -1075,24 +1123,24 @@ files = [ [[package]] name = "types-pytz" -version = "2023.3.0.1" +version = "2023.3.1.1" description = "Typing stubs for pytz" optional = false python-versions = "*" files = [ - {file = "types-pytz-2023.3.0.1.tar.gz", hash = "sha256:1a7b8d4aac70981cfa24478a41eadfcd96a087c986d6f150d77e3ceb3c2bdfab"}, - {file = "types_pytz-2023.3.0.1-py3-none-any.whl", hash = "sha256:65152e872137926bb67a8fe6cc9cfd794365df86650c5d5fdc7b167b0f38892e"}, + {file = "types-pytz-2023.3.1.1.tar.gz", hash = "sha256:cc23d0192cd49c8f6bba44ee0c81e4586a8f30204970fc0894d209a6b08dab9a"}, + {file = "types_pytz-2023.3.1.1-py3-none-any.whl", hash = "sha256:1999a123a3dc0e39a2ef6d19f3f8584211de9e6a77fe7a0259f04a524e90a5cf"}, ] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] @@ -1108,13 +1156,13 @@ files = [ [[package]] name = "virtualenv" -version = "20.24.3" +version = "20.24.5" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, - {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, + {file = "virtualenv-20.24.5-py3-none-any.whl", hash = "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b"}, + {file = "virtualenv-20.24.5.tar.gz", hash = "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752"}, ] [package.dependencies] @@ -1123,7 +1171,7 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<4" [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] @@ -1167,20 +1215,20 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" -python-versions = "^3.8" -content-hash = "11ee61d0c3cfd2c1282fc589848ffb7397a8cfcfa7305ba7363bcc5fe21e06ac" +python-versions = ">=3.8" +content-hash = "33ff91e185972044e13b4daa56b923d26b5ec9555b8f35f6c10b5442a1b236ed" diff --git a/pyproject.toml b/pyproject.toml index 9bf9cfc0..ccb53adb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,37 @@ +[project] +name = "pendulum" +version = "3.0.0a1" +description = "Python datetimes made easy" +readme = "README.rst" +requires-python = ">=3.8" +license = {text = "MIT License"} +authors = [{name = "Sébastien Eustace", email="sebastien@eustace.io>"}] +keywords = ['datetime', 'date', 'time'] + +classifiers = [ + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", +] + +dependencies =[ + "python-dateutil>=2.6,<3.0", + "tzdata>=2020.1", + 'backports.zoneinfo>=0.2.1,<0.3.0; python_version >= "3.7" and python_version < "3.9"', + 'time-machine>=2.6.0,<3.0.0; implementation_name != "pypy"', + 'importlib-resources>=5.9.0,<6.0.0; python_version >= "3.7" and python_version < "3.9"' +] + +[project.urls] +Homepage = "https://pendulum.eustace.io" +Documentation = "https://pendulum.eustace.io/docs" +Repository = "https://github.com/sdispater/pendulum" + + [tool.poetry] name = "pendulum" version = "3.0.0a1" @@ -10,24 +44,9 @@ repository = "https://github.com/sdispater/pendulum" documentation = "https://pendulum.eustace.io/docs" keywords = ['datetime', 'date', 'time'] -packages = [ - { include = "pendulum" }, - { include = "tests", format = "sdist" }, -] -include = [ - { path = "pendulum/py.typed" }, - # Typing stubs - { path = "*.pyi"}, - # Rust source - { path = "rust", format = "sdist" }, - # Rust extension - { path = "_pendulum*.so", format = "wheel" }, - { path = "_pendulum*.pyd", format = "wheel" }, -] - [tool.poetry.dependencies] -python = "^3.8" +python = ">=3.8" python-dateutil = "^2.6" "backports.zoneinfo" = { version = "^0.2.1", python = "<3.9" } time-machine = { version = "^2.6.0", markers = "implementation_name != 'pypy'" } @@ -56,14 +75,17 @@ types-pytz = ">=2022.7.1.2" [tool.poetry.group.dev.dependencies] babel = "^2.10.3" -cleo = "^2.0.1" +cleo = {version = "^2.0.1", python = ">=3.8,<4.0"} tox = "^4.0.0" [tool.poetry.group.benchmark.dependencies] pytest-codspeed = "^1.2.2" -[tool.poetry.build] -script = "build.py" +[tool.poetry.group.build.dependencies] +maturin = ">=1.0,<2.0" + +[tool.maturin] +module-name = "pendulum._pendulum" [tool.ruff] @@ -97,7 +119,7 @@ extend-exclude = [ # External to the project's coding standards: "docs/*", # Machine-generated, too many false-positives - "pendulum/locales/*", + "src/pendulum/locales/*", # ruff disagrees with black when it comes to formatting "*.pyi", ] @@ -125,7 +147,7 @@ required-imports = ["from __future__ import annotations"] [tool.mypy] strict = true -files = "pendulum, tests" +files = "src, tests" show_error_codes = true pretty = true warn_unused_ignores = true @@ -214,5 +236,5 @@ omit = [ ] [build-system] -requires = ["poetry-core>=1.6.1", "maturin>=1,<2"] -build-backend = "poetry.core.masonry.api" +requires = ["maturin>=1.0,<2.0"] +build-backend = "maturin" diff --git a/.cargo/config.toml b/rust/.cargo/config.toml similarity index 100% rename from .cargo/config.toml rename to rust/.cargo/config.toml diff --git a/Cargo.lock b/rust/Cargo.lock similarity index 97% rename from Cargo.lock rename to rust/Cargo.lock index 4d0fd72b..5889b800 100644 --- a/Cargo.lock +++ b/rust/Cargo.lock @@ -2,6 +2,14 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "_pendulum" +version = "3.0.0-alpha-1" +dependencies = [ + "mimalloc", + "pyo3", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -40,9 +48,9 @@ checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "libmimalloc-sys" -version = "0.1.33" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ac0e912c8ef1b735e92369695618dc5b1819f5a7bf3f167301a3ba1cea515e" +checksum = "3979b5c37ece694f1f5e51e7ecc871fdb0f517ed04ee45f88d15d6d553cb9664" dependencies = [ "cc", "libc", @@ -69,9 +77,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.37" +version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2894987a3459f3ffb755608bd82188f8ed00d0ae077f1edea29c068d639d98" +checksum = "fa01922b5ea280a911e323e4d2fd24b7fe5cc4042e0d2cda3c40775cdc4bdc9c" dependencies = [ "libmimalloc-sys", ] @@ -105,14 +113,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "pendulum" -version = "3.0.0-alpha-1" -dependencies = [ - "mimalloc", - "pyo3", -] - [[package]] name = "proc-macro2" version = "1.0.51" diff --git a/Cargo.toml b/rust/Cargo.toml similarity index 77% rename from Cargo.toml rename to rust/Cargo.toml index 0c3176a4..b4a766b8 100644 --- a/Cargo.toml +++ b/rust/Cargo.toml @@ -1,21 +1,21 @@ [package] -name = "pendulum" +name = "_pendulum" version = "3.0.0-alpha-1" edition = "2021" [lib] name = "_pendulum" crate-type = ["cdylib", "rlib"] -path = "rust/lib.rs" [profile.release] lto = "fat" codegen-units = 1 strip = true +overflow-checks = false [dependencies] pyo3 = { version = "0.19.0", features = ["extension-module", "generate-import-lib"] } -mimalloc = { version = "0.1.30", optional = true, default-features = false } +mimalloc = { version = "0.1.39", optional = true, default-features = false } [features] extension-module = ["pyo3/extension-module"] diff --git a/rust/constants.rs b/rust/src/constants.rs similarity index 100% rename from rust/constants.rs rename to rust/src/constants.rs diff --git a/rust/helpers.rs b/rust/src/helpers.rs similarity index 100% rename from rust/helpers.rs rename to rust/src/helpers.rs diff --git a/rust/lib.rs b/rust/src/lib.rs similarity index 100% rename from rust/lib.rs rename to rust/src/lib.rs diff --git a/rust/parsing.rs b/rust/src/parsing.rs similarity index 100% rename from rust/parsing.rs rename to rust/src/parsing.rs diff --git a/rust/python/helpers.rs b/rust/src/python/helpers.rs similarity index 100% rename from rust/python/helpers.rs rename to rust/src/python/helpers.rs diff --git a/rust/python/mod.rs b/rust/src/python/mod.rs similarity index 100% rename from rust/python/mod.rs rename to rust/src/python/mod.rs diff --git a/rust/python/parsing.rs b/rust/src/python/parsing.rs similarity index 100% rename from rust/python/parsing.rs rename to rust/src/python/parsing.rs diff --git a/rust/python/types/duration.rs b/rust/src/python/types/duration.rs similarity index 100% rename from rust/python/types/duration.rs rename to rust/src/python/types/duration.rs diff --git a/rust/src/python/types/interval.rs b/rust/src/python/types/interval.rs new file mode 100644 index 00000000..71374934 --- /dev/null +++ b/rust/src/python/types/interval.rs @@ -0,0 +1,46 @@ +use pyo3::prelude::*; + +use pyo3::types::PyDelta; + +#[pyclass(extends=PyDelta)] +#[derive(Default)] +pub struct Interval { + pub days: i32, + pub seconds: i32, + pub microseconds: i32, +} + +#[pymethods] +impl Interval { + #[new] + #[pyo3(signature = (days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0))] + pub fn new( + py: Python, + days: Option, + seconds: Option, + microseconds: Option, + milliseconds: Option, + minutes: Option, + hours: Option, + weeks: Option, + ) -> PyResult { + println!("{} days", 31); + PyDelta::new( + py, + days.unwrap_or(0), + seconds.unwrap_or(0), + microseconds.unwrap_or(0), + true, + )?; + + let f = Ok(Self { + days: days.unwrap_or(0), + seconds: seconds.unwrap_or(0), + microseconds: microseconds.unwrap_or(0), + }); + + println!("{} days", 31); + + f + } +} diff --git a/rust/python/types/mod.rs b/rust/src/python/types/mod.rs similarity index 100% rename from rust/python/types/mod.rs rename to rust/src/python/types/mod.rs diff --git a/rust/python/types/precise_diff.rs b/rust/src/python/types/precise_diff.rs similarity index 100% rename from rust/python/types/precise_diff.rs rename to rust/src/python/types/precise_diff.rs diff --git a/rust/python/types/timezone.rs b/rust/src/python/types/timezone.rs similarity index 100% rename from rust/python/types/timezone.rs rename to rust/src/python/types/timezone.rs diff --git a/pendulum/__init__.py b/src/pendulum/__init__.py similarity index 100% rename from pendulum/__init__.py rename to src/pendulum/__init__.py diff --git a/pendulum/__version__.py b/src/pendulum/__version__.py similarity index 100% rename from pendulum/__version__.py rename to src/pendulum/__version__.py diff --git a/pendulum/_helpers.py b/src/pendulum/_helpers.py similarity index 100% rename from pendulum/_helpers.py rename to src/pendulum/_helpers.py diff --git a/_pendulum.pyi b/src/pendulum/_pendulum.pyi similarity index 100% rename from _pendulum.pyi rename to src/pendulum/_pendulum.pyi diff --git a/pendulum/constants.py b/src/pendulum/constants.py similarity index 100% rename from pendulum/constants.py rename to src/pendulum/constants.py diff --git a/pendulum/date.py b/src/pendulum/date.py similarity index 100% rename from pendulum/date.py rename to src/pendulum/date.py diff --git a/pendulum/datetime.py b/src/pendulum/datetime.py similarity index 100% rename from pendulum/datetime.py rename to src/pendulum/datetime.py diff --git a/pendulum/day.py b/src/pendulum/day.py similarity index 100% rename from pendulum/day.py rename to src/pendulum/day.py diff --git a/pendulum/duration.py b/src/pendulum/duration.py similarity index 100% rename from pendulum/duration.py rename to src/pendulum/duration.py diff --git a/pendulum/exceptions.py b/src/pendulum/exceptions.py similarity index 100% rename from pendulum/exceptions.py rename to src/pendulum/exceptions.py diff --git a/pendulum/formatting/__init__.py b/src/pendulum/formatting/__init__.py similarity index 100% rename from pendulum/formatting/__init__.py rename to src/pendulum/formatting/__init__.py diff --git a/pendulum/formatting/difference_formatter.py b/src/pendulum/formatting/difference_formatter.py similarity index 100% rename from pendulum/formatting/difference_formatter.py rename to src/pendulum/formatting/difference_formatter.py diff --git a/pendulum/formatting/formatter.py b/src/pendulum/formatting/formatter.py similarity index 100% rename from pendulum/formatting/formatter.py rename to src/pendulum/formatting/formatter.py diff --git a/pendulum/helpers.py b/src/pendulum/helpers.py similarity index 93% rename from pendulum/helpers.py rename to src/pendulum/helpers.py index 87ed6871..5d5fe8e5 100644 --- a/pendulum/helpers.py +++ b/src/pendulum/helpers.py @@ -32,13 +32,13 @@ if not with_extensions or struct.calcsize("P") == 4: raise ImportError() - from _pendulum import PreciseDiff - from _pendulum import days_in_year - from _pendulum import is_leap - from _pendulum import is_long_year - from _pendulum import local_time - from _pendulum import precise_diff - from _pendulum import week_day + from pendulum._pendulum import PreciseDiff + from pendulum._pendulum import days_in_year + from pendulum._pendulum import is_leap + from pendulum._pendulum import is_long_year + from pendulum._pendulum import local_time + from pendulum._pendulum import precise_diff + from pendulum._pendulum import week_day except ImportError: from pendulum._helpers import PreciseDiff # type: ignore[assignment] from pendulum._helpers import days_in_year diff --git a/pendulum/interval.py b/src/pendulum/interval.py similarity index 100% rename from pendulum/interval.py rename to src/pendulum/interval.py diff --git a/pendulum/locales/__init__.py b/src/pendulum/locales/__init__.py similarity index 100% rename from pendulum/locales/__init__.py rename to src/pendulum/locales/__init__.py diff --git a/pendulum/locales/cs/__init__.py b/src/pendulum/locales/cs/__init__.py similarity index 100% rename from pendulum/locales/cs/__init__.py rename to src/pendulum/locales/cs/__init__.py diff --git a/pendulum/locales/cs/custom.py b/src/pendulum/locales/cs/custom.py similarity index 93% rename from pendulum/locales/cs/custom.py rename to src/pendulum/locales/cs/custom.py index 5f66b690..c909f324 100644 --- a/pendulum/locales/cs/custom.py +++ b/src/pendulum/locales/cs/custom.py @@ -1,6 +1,8 @@ """ cs custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "pár vteřin"}, diff --git a/pendulum/locales/cs/locale.py b/src/pendulum/locales/cs/locale.py similarity index 98% rename from pendulum/locales/cs/locale.py rename to src/pendulum/locales/cs/locale.py index d7b38bdf..b44d0f76 100644 --- a/pendulum/locales/cs/locale.py +++ b/src/pendulum/locales/cs/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.cs.custom import translations as custom_translations """ diff --git a/pendulum/locales/da/__init__.py b/src/pendulum/locales/da/__init__.py similarity index 100% rename from pendulum/locales/da/__init__.py rename to src/pendulum/locales/da/__init__.py diff --git a/pendulum/locales/da/custom.py b/src/pendulum/locales/da/custom.py similarity index 90% rename from pendulum/locales/da/custom.py rename to src/pendulum/locales/da/custom.py index c62ab838..57e68f4a 100644 --- a/pendulum/locales/da/custom.py +++ b/src/pendulum/locales/da/custom.py @@ -1,6 +1,8 @@ """ da custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/da/locale.py b/src/pendulum/locales/da/locale.py similarity index 97% rename from pendulum/locales/da/locale.py rename to src/pendulum/locales/da/locale.py index 968e1d6f..2385de53 100644 --- a/pendulum/locales/da/locale.py +++ b/src/pendulum/locales/da/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.da.custom import translations as custom_translations """ diff --git a/pendulum/locales/de/__init__.py b/src/pendulum/locales/de/__init__.py similarity index 100% rename from pendulum/locales/de/__init__.py rename to src/pendulum/locales/de/__init__.py diff --git a/pendulum/locales/de/custom.py b/src/pendulum/locales/de/custom.py similarity index 96% rename from pendulum/locales/de/custom.py rename to src/pendulum/locales/de/custom.py index a19a8e19..8ef06cc4 100644 --- a/pendulum/locales/de/custom.py +++ b/src/pendulum/locales/de/custom.py @@ -1,6 +1,8 @@ """ de custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/de/locale.py b/src/pendulum/locales/de/locale.py similarity index 97% rename from pendulum/locales/de/locale.py rename to src/pendulum/locales/de/locale.py index 28e631cc..7781c3f9 100644 --- a/pendulum/locales/de/locale.py +++ b/src/pendulum/locales/de/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.de.custom import translations as custom_translations """ diff --git a/pendulum/locales/en/__init__.py b/src/pendulum/locales/en/__init__.py similarity index 100% rename from pendulum/locales/en/__init__.py rename to src/pendulum/locales/en/__init__.py diff --git a/pendulum/locales/en/custom.py b/src/pendulum/locales/en/custom.py similarity index 93% rename from pendulum/locales/en/custom.py rename to src/pendulum/locales/en/custom.py index a403ad82..65cf467c 100644 --- a/pendulum/locales/en/custom.py +++ b/src/pendulum/locales/en/custom.py @@ -1,6 +1,8 @@ """ en custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "a few seconds"}, diff --git a/pendulum/locales/en/locale.py b/src/pendulum/locales/en/locale.py similarity index 97% rename from pendulum/locales/en/locale.py rename to src/pendulum/locales/en/locale.py index 08b0b85e..4f05c2f3 100644 --- a/pendulum/locales/en/locale.py +++ b/src/pendulum/locales/en/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.en.custom import translations as custom_translations """ diff --git a/pendulum/locales/en_gb/__init__.py b/src/pendulum/locales/en_gb/__init__.py similarity index 100% rename from pendulum/locales/en_gb/__init__.py rename to src/pendulum/locales/en_gb/__init__.py diff --git a/pendulum/locales/en_gb/custom.py b/src/pendulum/locales/en_gb/custom.py similarity index 93% rename from pendulum/locales/en_gb/custom.py rename to src/pendulum/locales/en_gb/custom.py index f6f6353f..2c77a698 100644 --- a/pendulum/locales/en_gb/custom.py +++ b/src/pendulum/locales/en_gb/custom.py @@ -1,6 +1,8 @@ """ en-gb custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "a few seconds"}, diff --git a/pendulum/locales/en_gb/locale.py b/src/pendulum/locales/en_gb/locale.py similarity index 92% rename from pendulum/locales/en_gb/locale.py rename to src/pendulum/locales/en_gb/locale.py index 7ff8ad64..c25f7d5c 100644 --- a/pendulum/locales/en_gb/locale.py +++ b/src/pendulum/locales/en_gb/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.en_gb.custom import translations as custom_translations """ @@ -10,22 +12,22 @@ locale = { "plural": lambda n: "one" - if ((n == n and ((n == 1))) and (0 == 0 and ((0 == 0)))) + if ((n == n and (n == 1)) and (0 == 0 and (0 == 0))) else "other", "ordinal": lambda n: "few" if ( - ((n % 10) == (n % 10) and (((n % 10) == 3))) - and (not ((n % 100) == (n % 100) and (((n % 100) == 13)))) + ((n % 10) == (n % 10) and ((n % 10) == 3)) + and (not ((n % 100) == (n % 100) and ((n % 100) == 13))) ) else "one" if ( - ((n % 10) == (n % 10) and (((n % 10) == 1))) - and (not ((n % 100) == (n % 100) and (((n % 100) == 11)))) + ((n % 10) == (n % 10) and ((n % 10) == 1)) + and (not ((n % 100) == (n % 100) and ((n % 100) == 11))) ) else "two" if ( - ((n % 10) == (n % 10) and (((n % 10) == 2))) - and (not ((n % 100) == (n % 100) and (((n % 100) == 12)))) + ((n % 10) == (n % 10) and ((n % 10) == 2)) + and (not ((n % 100) == (n % 100) and ((n % 100) == 12))) ) else "other", "translations": { diff --git a/pendulum/locales/en_us/__init__.py b/src/pendulum/locales/en_us/__init__.py similarity index 100% rename from pendulum/locales/en_us/__init__.py rename to src/pendulum/locales/en_us/__init__.py diff --git a/pendulum/locales/en_us/custom.py b/src/pendulum/locales/en_us/custom.py similarity index 93% rename from pendulum/locales/en_us/custom.py rename to src/pendulum/locales/en_us/custom.py index 943d8f8b..72d2005c 100644 --- a/pendulum/locales/en_us/custom.py +++ b/src/pendulum/locales/en_us/custom.py @@ -1,6 +1,8 @@ """ en-us custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "a few seconds"}, diff --git a/pendulum/locales/en_us/locale.py b/src/pendulum/locales/en_us/locale.py similarity index 92% rename from pendulum/locales/en_us/locale.py rename to src/pendulum/locales/en_us/locale.py index 657c76f6..7f40f3f6 100644 --- a/pendulum/locales/en_us/locale.py +++ b/src/pendulum/locales/en_us/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.en_us.custom import translations as custom_translations """ @@ -10,22 +12,22 @@ locale = { "plural": lambda n: "one" - if ((n == n and ((n == 1))) and (0 == 0 and ((0 == 0)))) + if ((n == n and (n == 1)) and (0 == 0 and (0 == 0))) else "other", "ordinal": lambda n: "few" if ( - ((n % 10) == (n % 10) and (((n % 10) == 3))) - and (not ((n % 100) == (n % 100) and (((n % 100) == 13)))) + ((n % 10) == (n % 10) and ((n % 10) == 3)) + and (not ((n % 100) == (n % 100) and ((n % 100) == 13))) ) else "one" if ( - ((n % 10) == (n % 10) and (((n % 10) == 1))) - and (not ((n % 100) == (n % 100) and (((n % 100) == 11)))) + ((n % 10) == (n % 10) and ((n % 10) == 1)) + and (not ((n % 100) == (n % 100) and ((n % 100) == 11))) ) else "two" if ( - ((n % 10) == (n % 10) and (((n % 10) == 2))) - and (not ((n % 100) == (n % 100) and (((n % 100) == 12)))) + ((n % 10) == (n % 10) and ((n % 10) == 2)) + and (not ((n % 100) == (n % 100) and ((n % 100) == 12))) ) else "other", "translations": { diff --git a/pendulum/locales/es/__init__.py b/src/pendulum/locales/es/__init__.py similarity index 100% rename from pendulum/locales/es/__init__.py rename to src/pendulum/locales/es/__init__.py diff --git a/pendulum/locales/es/custom.py b/src/pendulum/locales/es/custom.py similarity index 93% rename from pendulum/locales/es/custom.py rename to src/pendulum/locales/es/custom.py index 4b7e2b55..4acb411a 100644 --- a/pendulum/locales/es/custom.py +++ b/src/pendulum/locales/es/custom.py @@ -1,6 +1,8 @@ """ es custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "unos segundos"}, diff --git a/pendulum/locales/es/locale.py b/src/pendulum/locales/es/locale.py similarity index 97% rename from pendulum/locales/es/locale.py rename to src/pendulum/locales/es/locale.py index 09fa1441..4ab2784e 100644 --- a/pendulum/locales/es/locale.py +++ b/src/pendulum/locales/es/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.es.custom import translations as custom_translations """ diff --git a/pendulum/locales/fa/__init__.py b/src/pendulum/locales/fa/__init__.py similarity index 100% rename from pendulum/locales/fa/__init__.py rename to src/pendulum/locales/fa/__init__.py diff --git a/pendulum/locales/fa/custom.py b/src/pendulum/locales/fa/custom.py similarity index 91% rename from pendulum/locales/fa/custom.py rename to src/pendulum/locales/fa/custom.py index 082bfad9..e4b4a60a 100644 --- a/pendulum/locales/fa/custom.py +++ b/src/pendulum/locales/fa/custom.py @@ -1,6 +1,8 @@ """ fa custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/fa/locale.py b/src/pendulum/locales/fa/locale.py similarity index 97% rename from pendulum/locales/fa/locale.py rename to src/pendulum/locales/fa/locale.py index 43aff228..1c3f6c54 100644 --- a/pendulum/locales/fa/locale.py +++ b/src/pendulum/locales/fa/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.fa.custom import translations as custom_translations """ diff --git a/pendulum/locales/fo/__init__.py b/src/pendulum/locales/fo/__init__.py similarity index 100% rename from pendulum/locales/fo/__init__.py rename to src/pendulum/locales/fo/__init__.py diff --git a/pendulum/locales/fo/custom.py b/src/pendulum/locales/fo/custom.py similarity index 91% rename from pendulum/locales/fo/custom.py rename to src/pendulum/locales/fo/custom.py index 456dd59d..3f0fd1c8 100644 --- a/pendulum/locales/fo/custom.py +++ b/src/pendulum/locales/fo/custom.py @@ -1,6 +1,8 @@ """ fo custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/fo/locale.py b/src/pendulum/locales/fo/locale.py similarity index 97% rename from pendulum/locales/fo/locale.py rename to src/pendulum/locales/fo/locale.py index a13792a7..28ec0c01 100644 --- a/pendulum/locales/fo/locale.py +++ b/src/pendulum/locales/fo/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.fo.custom import translations as custom_translations """ diff --git a/pendulum/locales/fr/__init__.py b/src/pendulum/locales/fr/__init__.py similarity index 100% rename from pendulum/locales/fr/__init__.py rename to src/pendulum/locales/fr/__init__.py diff --git a/pendulum/locales/fr/custom.py b/src/pendulum/locales/fr/custom.py similarity index 93% rename from pendulum/locales/fr/custom.py rename to src/pendulum/locales/fr/custom.py index 134f297a..913656cb 100644 --- a/pendulum/locales/fr/custom.py +++ b/src/pendulum/locales/fr/custom.py @@ -1,6 +1,8 @@ """ fr custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "quelques secondes"}, diff --git a/pendulum/locales/fr/locale.py b/src/pendulum/locales/fr/locale.py similarity index 97% rename from pendulum/locales/fr/locale.py rename to src/pendulum/locales/fr/locale.py index 241ae987..30ee8cd3 100644 --- a/pendulum/locales/fr/locale.py +++ b/src/pendulum/locales/fr/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.fr.custom import translations as custom_translations """ diff --git a/pendulum/locales/he/__init__.py b/src/pendulum/locales/he/__init__.py similarity index 100% rename from pendulum/locales/he/__init__.py rename to src/pendulum/locales/he/__init__.py diff --git a/pendulum/locales/he/custom.py b/src/pendulum/locales/he/custom.py similarity index 93% rename from pendulum/locales/he/custom.py rename to src/pendulum/locales/he/custom.py index 51f84769..c8e1f70a 100644 --- a/pendulum/locales/he/custom.py +++ b/src/pendulum/locales/he/custom.py @@ -1,6 +1,8 @@ """ he custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "כמה שניות"}, diff --git a/pendulum/locales/he/locale.py b/src/pendulum/locales/he/locale.py similarity index 98% rename from pendulum/locales/he/locale.py rename to src/pendulum/locales/he/locale.py index 9e8a8e00..42d55aab 100644 --- a/pendulum/locales/he/locale.py +++ b/src/pendulum/locales/he/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.he.custom import translations as custom_translations """ diff --git a/pendulum/locales/id/__init__.py b/src/pendulum/locales/id/__init__.py similarity index 100% rename from pendulum/locales/id/__init__.py rename to src/pendulum/locales/id/__init__.py diff --git a/pendulum/locales/id/custom.py b/src/pendulum/locales/id/custom.py similarity index 92% rename from pendulum/locales/id/custom.py rename to src/pendulum/locales/id/custom.py index 3ba20355..3d4460cb 100644 --- a/pendulum/locales/id/custom.py +++ b/src/pendulum/locales/id/custom.py @@ -1,6 +1,8 @@ """ id custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "beberapa detik"}, diff --git a/pendulum/locales/id/locale.py b/src/pendulum/locales/id/locale.py similarity index 97% rename from pendulum/locales/id/locale.py rename to src/pendulum/locales/id/locale.py index fff8a934..20733571 100644 --- a/pendulum/locales/id/locale.py +++ b/src/pendulum/locales/id/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.id.custom import translations as custom_translations """ diff --git a/pendulum/locales/it/__init__.py b/src/pendulum/locales/it/__init__.py similarity index 100% rename from pendulum/locales/it/__init__.py rename to src/pendulum/locales/it/__init__.py diff --git a/pendulum/locales/it/custom.py b/src/pendulum/locales/it/custom.py similarity index 93% rename from pendulum/locales/it/custom.py rename to src/pendulum/locales/it/custom.py index e5cf1cc0..b1a77a09 100644 --- a/pendulum/locales/it/custom.py +++ b/src/pendulum/locales/it/custom.py @@ -1,6 +1,7 @@ """ it custom locale file. """ +from __future__ import annotations translations = { diff --git a/pendulum/locales/it/locale.py b/src/pendulum/locales/it/locale.py similarity index 97% rename from pendulum/locales/it/locale.py rename to src/pendulum/locales/it/locale.py index f2ebbfd2..ae5dc393 100644 --- a/pendulum/locales/it/locale.py +++ b/src/pendulum/locales/it/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.it.custom import translations as custom_translations """ diff --git a/pendulum/locales/ja/__init__.py b/src/pendulum/locales/ja/__init__.py similarity index 100% rename from pendulum/locales/ja/__init__.py rename to src/pendulum/locales/ja/__init__.py diff --git a/pendulum/locales/ja/custom.py b/src/pendulum/locales/ja/custom.py similarity index 92% rename from pendulum/locales/ja/custom.py rename to src/pendulum/locales/ja/custom.py index c0762503..4cb5b956 100644 --- a/pendulum/locales/ja/custom.py +++ b/src/pendulum/locales/ja/custom.py @@ -1,6 +1,8 @@ """ ja custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "数秒"}, diff --git a/pendulum/locales/ja/locale.py b/src/pendulum/locales/ja/locale.py similarity index 97% rename from pendulum/locales/ja/locale.py rename to src/pendulum/locales/ja/locale.py index e6f5cfd4..a1d3bd92 100644 --- a/pendulum/locales/ja/locale.py +++ b/src/pendulum/locales/ja/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.ja.custom import translations as custom_translations """ diff --git a/pendulum/locales/ko/__init__.py b/src/pendulum/locales/ko/__init__.py similarity index 100% rename from pendulum/locales/ko/__init__.py rename to src/pendulum/locales/ko/__init__.py diff --git a/pendulum/locales/ko/custom.py b/src/pendulum/locales/ko/custom.py similarity index 91% rename from pendulum/locales/ko/custom.py rename to src/pendulum/locales/ko/custom.py index 2c0e50c5..b7476ff8 100644 --- a/pendulum/locales/ko/custom.py +++ b/src/pendulum/locales/ko/custom.py @@ -1,6 +1,8 @@ """ ko custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/ko/locale.py b/src/pendulum/locales/ko/locale.py similarity index 96% rename from pendulum/locales/ko/locale.py rename to src/pendulum/locales/ko/locale.py index 8ca36eb9..b285dc06 100644 --- a/pendulum/locales/ko/locale.py +++ b/src/pendulum/locales/ko/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.ko.custom import translations as custom_translations """ diff --git a/pendulum/locales/locale.py b/src/pendulum/locales/locale.py similarity index 95% rename from pendulum/locales/locale.py rename to src/pendulum/locales/locale.py index dba73bdf..21eaaec3 100644 --- a/pendulum/locales/locale.py +++ b/src/pendulum/locales/locale.py @@ -1,11 +1,13 @@ from __future__ import annotations +import re + from importlib import import_module from pathlib import Path - -import re -from typing import Any, cast +from typing import Any +from typing import ClassVar from typing import Dict +from typing import cast from pendulum.utils._compat import resources @@ -15,7 +17,7 @@ class Locale: Represent a specific locale. """ - _cache: dict[str, Locale] = {} + _cache: ClassVar[dict[str, Locale]] = {} def __init__(self, locale: str, data: Any) -> None: self._locale: str = locale diff --git a/pendulum/locales/lt/__init__.py b/src/pendulum/locales/lt/__init__.py similarity index 100% rename from pendulum/locales/lt/__init__.py rename to src/pendulum/locales/lt/__init__.py diff --git a/pendulum/locales/lt/custom.py b/src/pendulum/locales/lt/custom.py similarity index 98% rename from pendulum/locales/lt/custom.py rename to src/pendulum/locales/lt/custom.py index 6480c314..d7f17d3d 100644 --- a/pendulum/locales/lt/custom.py +++ b/src/pendulum/locales/lt/custom.py @@ -1,6 +1,8 @@ """ lt custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/lt/locale.py b/src/pendulum/locales/lt/locale.py similarity index 98% rename from pendulum/locales/lt/locale.py rename to src/pendulum/locales/lt/locale.py index aeae21ec..6e9a4606 100644 --- a/pendulum/locales/lt/locale.py +++ b/src/pendulum/locales/lt/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.lt.custom import translations as custom_translations """ diff --git a/pendulum/locales/nb/__init__.py b/src/pendulum/locales/nb/__init__.py similarity index 100% rename from pendulum/locales/nb/__init__.py rename to src/pendulum/locales/nb/__init__.py diff --git a/pendulum/locales/nn/custom.py b/src/pendulum/locales/nb/custom.py similarity index 92% rename from pendulum/locales/nn/custom.py rename to src/pendulum/locales/nb/custom.py index 4c7cd6a8..554e7f3d 100644 --- a/pendulum/locales/nn/custom.py +++ b/src/pendulum/locales/nb/custom.py @@ -1,6 +1,8 @@ """ nn custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/nb/locale.py b/src/pendulum/locales/nb/locale.py similarity index 97% rename from pendulum/locales/nb/locale.py rename to src/pendulum/locales/nb/locale.py index efb03b52..084f019e 100644 --- a/pendulum/locales/nb/locale.py +++ b/src/pendulum/locales/nb/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.nb.custom import translations as custom_translations """ diff --git a/pendulum/locales/nl/__init__.py b/src/pendulum/locales/nl/__init__.py similarity index 100% rename from pendulum/locales/nl/__init__.py rename to src/pendulum/locales/nl/__init__.py diff --git a/pendulum/locales/nl/custom.py b/src/pendulum/locales/nl/custom.py similarity index 93% rename from pendulum/locales/nl/custom.py rename to src/pendulum/locales/nl/custom.py index 2ca5a85a..ca906739 100644 --- a/pendulum/locales/nl/custom.py +++ b/src/pendulum/locales/nl/custom.py @@ -1,6 +1,8 @@ """ nl custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "enkele seconden"}, diff --git a/pendulum/locales/nl/locale.py b/src/pendulum/locales/nl/locale.py similarity index 97% rename from pendulum/locales/nl/locale.py rename to src/pendulum/locales/nl/locale.py index e1f498d8..68b54e74 100644 --- a/pendulum/locales/nl/locale.py +++ b/src/pendulum/locales/nl/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.nl.custom import translations as custom_translations """ diff --git a/pendulum/locales/nn/__init__.py b/src/pendulum/locales/nn/__init__.py similarity index 100% rename from pendulum/locales/nn/__init__.py rename to src/pendulum/locales/nn/__init__.py diff --git a/pendulum/locales/nb/custom.py b/src/pendulum/locales/nn/custom.py similarity index 92% rename from pendulum/locales/nb/custom.py rename to src/pendulum/locales/nn/custom.py index 4c7cd6a8..554e7f3d 100644 --- a/pendulum/locales/nb/custom.py +++ b/src/pendulum/locales/nn/custom.py @@ -1,6 +1,8 @@ """ nn custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/nn/locale.py b/src/pendulum/locales/nn/locale.py similarity index 97% rename from pendulum/locales/nn/locale.py rename to src/pendulum/locales/nn/locale.py index d6565b13..737ee6db 100644 --- a/pendulum/locales/nn/locale.py +++ b/src/pendulum/locales/nn/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.nn.custom import translations as custom_translations """ diff --git a/pendulum/locales/pl/__init__.py b/src/pendulum/locales/pl/__init__.py similarity index 100% rename from pendulum/locales/pl/__init__.py rename to src/pendulum/locales/pl/__init__.py diff --git a/pendulum/locales/pl/custom.py b/src/pendulum/locales/pl/custom.py similarity index 92% rename from pendulum/locales/pl/custom.py rename to src/pendulum/locales/pl/custom.py index 9741b74c..0aaab900 100644 --- a/pendulum/locales/pl/custom.py +++ b/src/pendulum/locales/pl/custom.py @@ -1,6 +1,8 @@ """ pl custom locale file. """ +from __future__ import annotations + translations = { "units": {"few_second": "kilka sekund"}, diff --git a/pendulum/locales/pl/locale.py b/src/pendulum/locales/pl/locale.py similarity index 98% rename from pendulum/locales/pl/locale.py rename to src/pendulum/locales/pl/locale.py index 0f1943e7..c7091202 100644 --- a/pendulum/locales/pl/locale.py +++ b/src/pendulum/locales/pl/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.pl.custom import translations as custom_translations """ diff --git a/pendulum/locales/pt_br/__init__.py b/src/pendulum/locales/pt_br/__init__.py similarity index 100% rename from pendulum/locales/pt_br/__init__.py rename to src/pendulum/locales/pt_br/__init__.py diff --git a/pendulum/locales/pt_br/custom.py b/src/pendulum/locales/pt_br/custom.py similarity index 91% rename from pendulum/locales/pt_br/custom.py rename to src/pendulum/locales/pt_br/custom.py index 12aced7d..87a7702d 100644 --- a/pendulum/locales/pt_br/custom.py +++ b/src/pendulum/locales/pt_br/custom.py @@ -1,6 +1,8 @@ """ pt-br custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/pt_br/locale.py b/src/pendulum/locales/pt_br/locale.py similarity index 97% rename from pendulum/locales/pt_br/locale.py rename to src/pendulum/locales/pt_br/locale.py index 4bd4feb8..793cba8c 100644 --- a/pendulum/locales/pt_br/locale.py +++ b/src/pendulum/locales/pt_br/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.pt_br.custom import translations as custom_translations """ diff --git a/pendulum/locales/ru/__init__.py b/src/pendulum/locales/ru/__init__.py similarity index 100% rename from pendulum/locales/ru/__init__.py rename to src/pendulum/locales/ru/__init__.py diff --git a/pendulum/locales/ru/custom.py b/src/pendulum/locales/ru/custom.py similarity index 92% rename from pendulum/locales/ru/custom.py rename to src/pendulum/locales/ru/custom.py index b4c89bb0..e1f87ffe 100644 --- a/pendulum/locales/ru/custom.py +++ b/src/pendulum/locales/ru/custom.py @@ -1,6 +1,8 @@ """ ru custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/ru/locale.py b/src/pendulum/locales/ru/locale.py similarity index 98% rename from pendulum/locales/ru/locale.py rename to src/pendulum/locales/ru/locale.py index 04154672..b9eab83a 100644 --- a/pendulum/locales/ru/locale.py +++ b/src/pendulum/locales/ru/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.ru.custom import translations as custom_translations """ diff --git a/pendulum/locales/sk/__init__.py b/src/pendulum/locales/sk/__init__.py similarity index 100% rename from pendulum/locales/sk/__init__.py rename to src/pendulum/locales/sk/__init__.py diff --git a/pendulum/locales/sk/custom.py b/src/pendulum/locales/sk/custom.py similarity index 91% rename from pendulum/locales/sk/custom.py rename to src/pendulum/locales/sk/custom.py index 71afb15b..0059c11e 100644 --- a/pendulum/locales/sk/custom.py +++ b/src/pendulum/locales/sk/custom.py @@ -1,6 +1,8 @@ """ sk custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/sk/locale.py b/src/pendulum/locales/sk/locale.py similarity index 98% rename from pendulum/locales/sk/locale.py rename to src/pendulum/locales/sk/locale.py index e3caee1d..530303fb 100644 --- a/pendulum/locales/sk/locale.py +++ b/src/pendulum/locales/sk/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.sk.custom import translations as custom_translations """ diff --git a/pendulum/locales/sv/__init__.py b/src/pendulum/locales/sv/__init__.py similarity index 100% rename from pendulum/locales/sv/__init__.py rename to src/pendulum/locales/sv/__init__.py diff --git a/pendulum/locales/sv/custom.py b/src/pendulum/locales/sv/custom.py similarity index 91% rename from pendulum/locales/sv/custom.py rename to src/pendulum/locales/sv/custom.py index 7158f4b7..83f36b13 100644 --- a/pendulum/locales/sv/custom.py +++ b/src/pendulum/locales/sv/custom.py @@ -1,6 +1,8 @@ """ sv custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/sv/locale.py b/src/pendulum/locales/sv/locale.py similarity index 98% rename from pendulum/locales/sv/locale.py rename to src/pendulum/locales/sv/locale.py index 457acf23..c3c44726 100644 --- a/pendulum/locales/sv/locale.py +++ b/src/pendulum/locales/sv/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.sv.custom import translations as custom_translations """ diff --git a/pendulum/locales/tr/__init__.py b/src/pendulum/locales/tr/__init__.py similarity index 100% rename from pendulum/locales/tr/__init__.py rename to src/pendulum/locales/tr/__init__.py diff --git a/pendulum/locales/tr/custom.py b/src/pendulum/locales/tr/custom.py similarity index 93% rename from pendulum/locales/tr/custom.py rename to src/pendulum/locales/tr/custom.py index f644f85e..b7fd3c7a 100644 --- a/pendulum/locales/tr/custom.py +++ b/src/pendulum/locales/tr/custom.py @@ -1,6 +1,8 @@ """ tr custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/tr/locale.py b/src/pendulum/locales/tr/locale.py similarity index 98% rename from pendulum/locales/tr/locale.py rename to src/pendulum/locales/tr/locale.py index 8b605345..f0233f21 100644 --- a/pendulum/locales/tr/locale.py +++ b/src/pendulum/locales/tr/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.tr.custom import translations as custom_translations """ diff --git a/pendulum/locales/zh/__init__.py b/src/pendulum/locales/zh/__init__.py similarity index 100% rename from pendulum/locales/zh/__init__.py rename to src/pendulum/locales/zh/__init__.py diff --git a/pendulum/locales/zh/custom.py b/src/pendulum/locales/zh/custom.py similarity index 91% rename from pendulum/locales/zh/custom.py rename to src/pendulum/locales/zh/custom.py index 69bc4cab..cf47a403 100644 --- a/pendulum/locales/zh/custom.py +++ b/src/pendulum/locales/zh/custom.py @@ -1,6 +1,8 @@ """ zh custom locale file. """ +from __future__ import annotations + translations = { # Relative time diff --git a/pendulum/locales/zh/locale.py b/src/pendulum/locales/zh/locale.py similarity index 97% rename from pendulum/locales/zh/locale.py rename to src/pendulum/locales/zh/locale.py index 30b353d3..eb85ab7e 100644 --- a/pendulum/locales/zh/locale.py +++ b/src/pendulum/locales/zh/locale.py @@ -1,4 +1,6 @@ -from .custom import translations as custom_translations +from __future__ import annotations + +from pendulum.locales.zh.custom import translations as custom_translations """ diff --git a/pendulum/mixins/__init__.py b/src/pendulum/mixins/__init__.py similarity index 100% rename from pendulum/mixins/__init__.py rename to src/pendulum/mixins/__init__.py diff --git a/pendulum/mixins/default.py b/src/pendulum/mixins/default.py similarity index 100% rename from pendulum/mixins/default.py rename to src/pendulum/mixins/default.py diff --git a/pendulum/parser.py b/src/pendulum/parser.py similarity index 98% rename from pendulum/parser.py rename to src/pendulum/parser.py index 2cb5ef95..5f9a0f78 100644 --- a/pendulum/parser.py +++ b/src/pendulum/parser.py @@ -18,7 +18,7 @@ from pendulum.time import Time try: - from _pendulum import Duration as RustDuration + from pendulum._pendulum import Duration as RustDuration except ImportError: RustDuration = None # type: ignore[assignment,misc] diff --git a/pendulum/parsing/__init__.py b/src/pendulum/parsing/__init__.py similarity index 98% rename from pendulum/parsing/__init__.py rename to src/pendulum/parsing/__init__.py index 908b670d..761f52c5 100644 --- a/pendulum/parsing/__init__.py +++ b/src/pendulum/parsing/__init__.py @@ -24,8 +24,8 @@ if not with_extensions or struct.calcsize("P") == 4: raise ImportError() - from _pendulum import Duration - from _pendulum import parse_iso8601 + from pendulum._pendulum import Duration + from pendulum._pendulum import parse_iso8601 except ImportError: from pendulum.duration import Duration # type: ignore[assignment] from pendulum.parsing.iso8601 import parse_iso8601 # type: ignore[assignment] diff --git a/pendulum/parsing/exceptions/__init__.py b/src/pendulum/parsing/exceptions/__init__.py similarity index 100% rename from pendulum/parsing/exceptions/__init__.py rename to src/pendulum/parsing/exceptions/__init__.py diff --git a/pendulum/parsing/iso8601.py b/src/pendulum/parsing/iso8601.py similarity index 100% rename from pendulum/parsing/iso8601.py rename to src/pendulum/parsing/iso8601.py diff --git a/pendulum/py.typed b/src/pendulum/py.typed similarity index 100% rename from pendulum/py.typed rename to src/pendulum/py.typed diff --git a/pendulum/testing/__init__.py b/src/pendulum/testing/__init__.py similarity index 100% rename from pendulum/testing/__init__.py rename to src/pendulum/testing/__init__.py diff --git a/pendulum/testing/traveller.py b/src/pendulum/testing/traveller.py similarity index 100% rename from pendulum/testing/traveller.py rename to src/pendulum/testing/traveller.py diff --git a/pendulum/time.py b/src/pendulum/time.py similarity index 100% rename from pendulum/time.py rename to src/pendulum/time.py diff --git a/pendulum/tz/__init__.py b/src/pendulum/tz/__init__.py similarity index 100% rename from pendulum/tz/__init__.py rename to src/pendulum/tz/__init__.py diff --git a/pendulum/tz/data/__init__.py b/src/pendulum/tz/data/__init__.py similarity index 100% rename from pendulum/tz/data/__init__.py rename to src/pendulum/tz/data/__init__.py diff --git a/pendulum/tz/data/windows.py b/src/pendulum/tz/data/windows.py similarity index 100% rename from pendulum/tz/data/windows.py rename to src/pendulum/tz/data/windows.py diff --git a/pendulum/tz/exceptions.py b/src/pendulum/tz/exceptions.py similarity index 100% rename from pendulum/tz/exceptions.py rename to src/pendulum/tz/exceptions.py diff --git a/pendulum/tz/local_timezone.py b/src/pendulum/tz/local_timezone.py similarity index 100% rename from pendulum/tz/local_timezone.py rename to src/pendulum/tz/local_timezone.py diff --git a/pendulum/tz/timezone.py b/src/pendulum/tz/timezone.py similarity index 100% rename from pendulum/tz/timezone.py rename to src/pendulum/tz/timezone.py diff --git a/pendulum/utils/__init__.py b/src/pendulum/utils/__init__.py similarity index 100% rename from pendulum/utils/__init__.py rename to src/pendulum/utils/__init__.py diff --git a/pendulum/utils/_compat.py b/src/pendulum/utils/_compat.py similarity index 100% rename from pendulum/utils/_compat.py rename to src/pendulum/utils/_compat.py diff --git a/pendulum/utils/_zoneinfo.py b/src/pendulum/utils/_zoneinfo.py similarity index 100% rename from pendulum/utils/_zoneinfo.py rename to src/pendulum/utils/_zoneinfo.py diff --git a/tests/parsing/test_parse_iso8601.py b/tests/parsing/test_parse_iso8601.py index 22c43a22..c15b9bd9 100644 --- a/tests/parsing/test_parse_iso8601.py +++ b/tests/parsing/test_parse_iso8601.py @@ -10,7 +10,7 @@ try: - from _pendulum import FixedTimezone + from pendulum._pendulum import FixedTimezone except ImportError: from pendulum.tz.timezone import FixedTimezone