pax_global_header00006660000000000000000000000064147506143550014524gustar00rootroot0000000000000052 comment=62f21ebd47b18f6775009e78a565f8c419c2e97c aioelectricitymaps-1.1.0/000077500000000000000000000000001475061435500154155ustar00rootroot00000000000000aioelectricitymaps-1.1.0/.github/000077500000000000000000000000001475061435500167555ustar00rootroot00000000000000aioelectricitymaps-1.1.0/.github/FUNDING.yml000066400000000000000000000001141475061435500205660ustar00rootroot00000000000000--- github: jpbede custom: - https://www.buymeacoffee.com/janphilipp_bnck aioelectricitymaps-1.1.0/.github/labels.yml000066400000000000000000000054331475061435500207470ustar00rootroot00000000000000--- - name: "breaking-change" color: ee0701 description: "A breaking change for existing users." - name: "bugfix" color: ee0701 description: "Inconsistencies or issues which will cause a problem for users or implementers." - name: "documentation" color: 0052cc description: "Solely about the documentation of the project." - name: "enhancement" color: 1d76db description: "Enhancement of the code, not introducing new features." - name: "refactor" color: 1d76db description: "Improvement of existing code, not introducing new features." - name: "performance" color: 1d76db description: "Improving performance, not introducing new features." - name: "new-feature" color: 0e8a16 description: "New features or options." - name: "maintenance" color: 2af79e description: "Generic maintenance tasks." - name: "ci" color: 1d76db description: "Work that improves the continue integration." - name: "dependencies" color: 1d76db description: "Upgrade or downgrade of project dependencies." - name: "in-progress" color: fbca04 description: "Issue is currently being resolved by a developer." - name: "stale" color: fef2c0 description: "There has not been activity on this issue or PR for quite some time." - name: "no-stale" color: fef2c0 description: "This issue or PR is exempted from the stable bot." - name: "security" color: ee0701 description: "Marks a security issue that needs to be resolved asap." - name: "incomplete" color: fef2c0 description: "Marks a PR or issue that is missing information." - name: "invalid" color: fef2c0 description: "Marks a PR or issue that is missing information." - name: "beginner-friendly" color: 0e8a16 description: "Good first issue for people wanting to contribute to the project." - name: "help-wanted" color: 0e8a16 description: "We need some extra helping hands or expertise in order to resolve this." - name: "hacktoberfest" description: "Issues/PRs are participating in the Hacktoberfest." color: fbca04 - name: "hacktoberfest-accepted" description: "Issues/PRs are participating in the Hacktoberfest." color: fbca04 - name: "priority-critical" color: ee0701 description: "This should be dealt with ASAP. Not fixing this issue would be a serious error." - name: "priority-high" color: b60205 description: "After critical issues are fixed, these should be dealt with before any further issues." - name: "priority-medium" color: 0e8a16 description: "This issue may be useful, and needs some attention." - name: "priority-low" color: e4ea8a description: "Nice addition, maybe... someday..." - name: "major" color: b60205 description: "This PR causes a major version bump in the version number." - name: "minor" color: 0e8a16 description: "This PR causes a minor version bump in the version number." aioelectricitymaps-1.1.0/.github/release-drafter.yml000066400000000000000000000020471475061435500225500ustar00rootroot00000000000000--- name-template: "v$RESOLVED_VERSION" tag-template: "v$RESOLVED_VERSION" change-template: "- $TITLE @$AUTHOR (#$NUMBER)" sort-direction: ascending categories: - title: "๐Ÿšจ Breaking changes" labels: - "breaking-change" - title: "โœจ New features" labels: - "new-feature" - title: "๐Ÿ› Bug fixes" labels: - "bugfix" - title: "๐Ÿš€ Enhancements" labels: - "enhancement" - "refactor" - "performance" - title: "๐Ÿงฐ Maintenance" labels: - "maintenance" - "ci" - title: "๐Ÿ“š Documentation" labels: - "documentation" - title: "โฌ†๏ธ Dependency updates" labels: - "dependencies" version-resolver: major: labels: - "major" - "breaking-change" minor: labels: - "minor" - "new-feature" patch: labels: - "bugfix" - "chore" - "ci" - "dependencies" - "documentation" - "enhancement" - "performance" - "refactor" default: patch template: | ## Whatโ€™s changed $CHANGES aioelectricitymaps-1.1.0/.github/renovate.json000066400000000000000000000021771475061435500215020ustar00rootroot00000000000000{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "schedule": ["after 5pm and before 9am"], "rebaseWhen": "behind-base-branch", "dependencyDashboard": true, "labels": ["dependencies", "no-stale"], "lockFileMaintenance": { "enabled": true, "automerge": true }, "commitMessagePrefix": "โฌ†๏ธ", "packageRules": [ { "matchManagers": ["poetry"], "addLabels": ["python"] }, { "matchManagers": ["poetry"], "matchDepTypes": ["dev"], "rangeStrategy": "pin" }, { "matchManagers": ["poetry"], "matchUpdateTypes": ["minor", "patch"], "automerge": true }, { "matchManagers": ["npm", "nvm"], "addLabels": ["javascript"], "rangeStrategy": "pin" }, { "matchManagers": ["npm", "nvm"], "matchUpdateTypes": ["minor", "patch"], "automerge": true }, { "matchManagers": ["github-actions"], "addLabels": ["github_actions"], "rangeStrategy": "pin" }, { "matchManagers": ["github-actions"], "matchUpdateTypes": ["minor", "patch"], "automerge": true } ] } aioelectricitymaps-1.1.0/.github/workflows/000077500000000000000000000000001475061435500210125ustar00rootroot00000000000000aioelectricitymaps-1.1.0/.github/workflows/codeql.yml000066400000000000000000000011561475061435500230070ustar00rootroot00000000000000--- name: "CodeQL" # yamllint disable-line rule:truthy on: push: branches: - main pull_request: branches: - main workflow_dispatch: schedule: - cron: "30 1 * * 0" jobs: codeql: name: Scanning runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Initialize CodeQL uses: github/codeql-action/init@v3.28.8 - name: ๐Ÿš€ Perform CodeQL Analysis uses: github/codeql-action/analyze@v3.28.8 aioelectricitymaps-1.1.0/.github/workflows/labels.yml000066400000000000000000000010121475061435500227710ustar00rootroot00000000000000--- name: Sync labels # yamllint disable-line rule:truthy on: push: branches: - main paths: - .github/labels.yml workflow_dispatch: jobs: labels: name: โ™ป๏ธ Sync labels runs-on: ubuntu-latest permissions: pull-requests: write steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿš€ Run Label Syncer uses: micnncim/action-label-syncer@v1.3.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} aioelectricitymaps-1.1.0/.github/workflows/linting.yml000066400000000000000000000146011475061435500232030ustar00rootroot00000000000000--- name: Linting # yamllint disable-line rule:truthy on: push: branches: - main pull_request: workflow_dispatch: env: DEFAULT_PYTHON: "3.11" jobs: codespell: name: codespell runs-on: ubuntu-latest steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install Python dependencies run: poetry install --no-interaction - name: ๐Ÿš€ Check code for common misspellings run: poetry run pre-commit run codespell --all-files ruff: name: Ruff runs-on: ubuntu-latest steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install Python dependencies run: poetry install --no-interaction - name: ๐Ÿš€ Run ruff linter run: poetry run ruff check --output-format=github . - name: ๐Ÿš€ Run ruff formatter run: poetry run ruff format --check . pre-commit-hooks: name: pre-commit-hooks runs-on: ubuntu-latest steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install Python dependencies run: poetry install --no-interaction - name: ๐Ÿš€ Check Python AST run: poetry run pre-commit run check-ast --all-files - name: ๐Ÿš€ Check for case conflicts run: poetry run pre-commit run check-case-conflict --all-files - name: ๐Ÿš€ Check docstring is first run: poetry run pre-commit run check-docstring-first --all-files - name: ๐Ÿš€ Check that executables have shebangs run: poetry run pre-commit run check-executables-have-shebangs --all-files - name: ๐Ÿš€ Check JSON files run: poetry run pre-commit run check-json --all-files - name: ๐Ÿš€ Check for merge conflicts run: poetry run pre-commit run check-merge-conflict --all-files - name: ๐Ÿš€ Check for broken symlinks run: poetry run pre-commit run check-symlinks --all-files - name: ๐Ÿš€ Check TOML files run: poetry run pre-commit run check-toml --all-files - name: ๐Ÿš€ Check XML files run: poetry run pre-commit run check-xml --all-files - name: ๐Ÿš€ Check YAML files run: poetry run pre-commit run check-yaml --all-files - name: ๐Ÿš€ Detect Private Keys run: poetry run pre-commit run detect-private-key --all-files - name: ๐Ÿš€ Check End of Files run: poetry run pre-commit run end-of-file-fixer --all-files - name: ๐Ÿš€ Trim Trailing Whitespace run: poetry run pre-commit run trailing-whitespace --all-files pylint: name: pylint runs-on: ubuntu-latest steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install Python dependencies run: poetry install --no-interaction - name: ๐Ÿš€ Run pylint run: poetry run pre-commit run pylint --all-files yamllint: name: yamllint runs-on: ubuntu-latest steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install Python dependencies run: poetry install --no-interaction - name: ๐Ÿš€ Run yamllint run: poetry run yamllint . prettier: name: Prettier runs-on: ubuntu-latest steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install Python dependencies run: poetry install --no-interaction - name: ๐Ÿ— Set up Node.js uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4 with: node-version-file: ".nvmrc" cache: "npm" - name: ๐Ÿ— Install NPM dependencies run: npm install - name: ๐Ÿš€ Run prettier run: poetry run pre-commit run prettier --all-files aioelectricitymaps-1.1.0/.github/workflows/lock.yml000066400000000000000000000010161475061435500224630ustar00rootroot00000000000000--- name: Lock # yamllint disable-line rule:truthy on: schedule: - cron: "0 9 * * *" workflow_dispatch: jobs: lock: name: ๐Ÿ”’ Lock closed issues and PRs runs-on: ubuntu-latest permissions: issues: write pull-requests: write discussions: write steps: - uses: dessant/lock-threads@v5.0.1 with: github-token: ${{ github.token }} issue-inactive-days: "30" issue-lock-reason: "" pr-inactive-days: "1" pr-lock-reason: "" aioelectricitymaps-1.1.0/.github/workflows/pr-labels.yml000066400000000000000000000013021475061435500234120ustar00rootroot00000000000000--- name: PR Labels # yamllint disable-line rule:truthy on: pull_request_target: types: - opened - labeled - unlabeled - synchronize workflow_call: jobs: pr_labels: name: Verify runs-on: ubuntu-latest steps: - name: ๐Ÿท Verify PR has a valid label uses: jesusvasquez333/verify-pr-label-action@v1.4.0 with: pull-request-number: "${{ github.event.pull_request.number }}" github-token: "${{ secrets.GITHUB_TOKEN }}" valid-labels: >- breaking-change, bugfix, documentation, enhancement, refactor, performance, new-feature, maintenance, ci, dependencies disable-reviews: true aioelectricitymaps-1.1.0/.github/workflows/release-drafter.yml000066400000000000000000000011531475061435500246020ustar00rootroot00000000000000--- name: Release Drafter # yamllint disable-line rule:truthy on: push: branches: - main workflow_dispatch: jobs: update_release_draft: name: โœ๏ธ Draft release runs-on: ubuntu-latest permissions: # write permission is required to create a github release contents: write # write permission is required for autolabeler # otherwise, read permission is required at least pull-requests: write steps: - name: ๐Ÿš€ Run Release Drafter uses: release-drafter/release-drafter@v6.1.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} aioelectricitymaps-1.1.0/.github/workflows/release.yml000066400000000000000000000031451475061435500231600ustar00rootroot00000000000000--- name: Release # yamllint disable-line rule:truthy on: release: types: - published env: DEFAULT_PYTHON: "3.11" jobs: release: name: Releasing to PyPi runs-on: ubuntu-latest environment: name: release url: https://pypi.org/p/aioelectricitymaps permissions: contents: write id-token: write steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install dependencies run: poetry install --no-interaction - name: ๐Ÿ— Set package version run: | version="${{ github.event.release.tag_name }}" version="${version,,}" version="${version#v}" poetry version --no-interaction "${version}" - name: ๐Ÿ— Build package run: poetry build --no-interaction - name: ๐Ÿš€ Publish to PyPi uses: pypa/gh-action-pypi-publish@v1.12.4 with: verbose: true print-hash: true - name: โœ๏ธ Sign published artifacts uses: sigstore/gh-action-sigstore-python@v3.0.0 with: inputs: ./dist/*.tar.gz ./dist/*.whl release-signing-artifacts: true aioelectricitymaps-1.1.0/.github/workflows/stale.yml000066400000000000000000000026601475061435500226510ustar00rootroot00000000000000--- name: Stale # yamllint disable-line rule:truthy on: schedule: - cron: "0 8 * * *" workflow_dispatch: jobs: stale: name: ๐Ÿงน Clean up stale issues and PRs runs-on: ubuntu-latest permissions: issues: write pull-requests: write steps: - name: ๐Ÿš€ Run stale uses: actions/stale@v9.1.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-stale: 30 days-before-close: 7 remove-stale-when-updated: true stale-issue-label: "stale" exempt-issue-labels: "no-stale,help-wanted" stale-issue-message: > There hasn't been any activity on this issue recently, so we clean up some of the older and inactive issues. Please make sure to update to the latest version and check if that solves the issue. Let us know if that works for you by leaving a comment ๐Ÿ‘ This issue has now been marked as stale and will be closed if no further activity occurs. Thanks! stale-pr-label: "stale" exempt-pr-labels: "no-stale" stale-pr-message: > There hasn't been any activity on this pull request recently. This pull request has been automatically marked as stale because of that and will be closed if no further activity occurs within 7 days. Thank you for your contributions. aioelectricitymaps-1.1.0/.github/workflows/tests.yml000066400000000000000000000043461475061435500227060ustar00rootroot00000000000000--- name: Testing # yamllint disable-line rule:truthy on: push: branches: - main pull_request: workflow_dispatch: env: DEFAULT_PYTHON: "3.11" jobs: pytest: name: Python ${{ matrix.python }} runs-on: ubuntu-latest strategy: matrix: python: ["3.11", "3.12", "3.13"] steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ matrix.python }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ matrix.python }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install dependencies run: poetry install --no-interaction - name: ๐Ÿš€ Run pytest run: poetry run pytest --cov aioelectricitymaps tests - name: โฌ†๏ธ Upload coverage artifact uses: actions/upload-artifact@v4 with: name: coverage-${{ matrix.python }} path: .coverage include-hidden-files: true coverage: runs-on: ubuntu-latest needs: pytest steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 with: fetch-depth: 0 - name: โฌ‡๏ธ Download coverage data uses: actions/download-artifact@v4 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install dependencies run: poetry install --no-interaction - name: ๐Ÿš€ Process coverage results run: | poetry run coverage combine coverage*/.coverage* poetry run coverage xml -i - name: ๐Ÿš€ Upload coverage report uses: codecov/codecov-action@v5.3.1 aioelectricitymaps-1.1.0/.github/workflows/typing.yml000066400000000000000000000016261475061435500230540ustar00rootroot00000000000000--- name: Typing # yamllint disable-line rule:truthy on: push: branches: - main pull_request: workflow_dispatch: env: DEFAULT_PYTHON: "3.11" jobs: mypy: name: mypy runs-on: ubuntu-latest steps: - name: โคต๏ธ Check out code from GitHub uses: actions/checkout@v4.2.2 - name: ๐Ÿ— Set up Poetry run: pipx install poetry - name: ๐Ÿ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python uses: actions/setup-python@v5.4.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" - name: ๐Ÿ— Install workflow dependencies run: | poetry config virtualenvs.create true poetry config virtualenvs.in-project true - name: ๐Ÿ— Install dependencies run: poetry install --no-interaction - name: ๐Ÿš€ Run mypy run: poetry run mypy aioelectricitymaps aioelectricitymaps-1.1.0/.gitignore000066400000000000000000000060251475061435500174100ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock # pdm # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. #pdm.lock # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it # in version control. # https://pdm.fming.dev/#use-with-ide .pdm.toml # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # PyCharm # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ node_modules/ aioelectricitymaps-1.1.0/.nvmrc000066400000000000000000000000101475061435500165320ustar00rootroot0000000000000022.13.1 aioelectricitymaps-1.1.0/.pre-commit-config.yaml000066400000000000000000000101451475061435500216770ustar00rootroot00000000000000--- repos: - repo: local hooks: - id: ruff-check name: ๐Ÿถ Ruff Linter language: system types: [python] entry: poetry run ruff check --fix require_serial: true stages: [commit, push, manual] - id: ruff-format name: ๐Ÿถ Ruff Formatter language: system types: [python] entry: poetry run ruff format require_serial: true stages: [commit, push, manual] - id: check-ast name: ๐Ÿ Check Python AST language: system types: [python] entry: poetry run check-ast - id: check-case-conflict name: ๐Ÿ”  Check for case conflicts language: system entry: poetry run check-case-conflict - id: check-docstring-first name: โ„น๏ธ Check docstring is first language: system types: [python] entry: poetry run check-docstring-first - id: check-executables-have-shebangs name: ๐Ÿง Check that executables have shebangs language: system types: [text, executable] entry: poetry run check-executables-have-shebangs stages: [commit, push, manual] - id: check-json name: ๏ฝ› Check JSON files language: system types: [json] entry: poetry run check-json - id: check-merge-conflict name: ๐Ÿ’ฅ Check for merge conflicts language: system types: [text] entry: poetry run check-merge-conflict - id: check-symlinks name: ๐Ÿ”— Check for broken symlinks language: system types: [symlink] entry: poetry run check-symlinks - id: check-toml name: โœ… Check TOML files language: system types: [toml] entry: poetry run check-toml - id: check-xml name: โœ… Check XML files entry: check-xml language: system types: [xml] - id: check-yaml name: โœ… Check YAML files language: system types: [yaml] entry: poetry run check-yaml - id: codespell name: โœ… Check code for common misspellings language: system types: [text] exclude: ^poetry\.lock$ entry: poetry run codespell args: - --ignore-words-list=fo,incomfort,nam,bloc,ue - id: detect-private-key name: ๐Ÿ•ต๏ธ Detect Private Keys language: system types: [text] entry: poetry run detect-private-key - id: end-of-file-fixer name: โฎ Fix End of Files language: system types: [text] entry: poetry run end-of-file-fixer stages: [commit, push, manual] - id: mypy name: ๐Ÿ†Ž Static type checking using mypy language: system types: [python] entry: poetry run mypy require_serial: true - id: no-commit-to-branch name: ๐Ÿ›‘ Don't commit to main branch language: system entry: poetry run no-commit-to-branch pass_filenames: false always_run: true args: - --branch=main - id: poetry name: ๐Ÿ“œ Check pyproject with Poetry language: system entry: poetry check pass_filenames: false always_run: true - id: prettier name: ๐Ÿ’„ Ensuring files are prettier language: system types: [yaml, json, markdown] entry: npm run prettier pass_filenames: false - id: pylint name: ๐ŸŒŸ Starring code with pylint language: system types: [python] entry: poetry run pylint - id: pytest name: ๐Ÿงช Running tests and test coverage with pytest language: system types: [python] entry: poetry run pytest pass_filenames: false - id: trailing-whitespace name: โœ„ Trim Trailing Whitespace language: system types: [text] entry: poetry run trailing-whitespace-fixer stages: [commit, push, manual] - id: yamllint name: ๐ŸŽ— Check YAML files with yamllint language: system types: [yaml] entry: poetry run yamllint aioelectricitymaps-1.1.0/.prettierignore000066400000000000000000000000131475061435500204520ustar00rootroot00000000000000.gitignore aioelectricitymaps-1.1.0/.yamllint000066400000000000000000000024001475061435500172430ustar00rootroot00000000000000--- ignore: - .venv rules: braces: level: error min-spaces-inside: 0 max-spaces-inside: 1 min-spaces-inside-empty: -1 max-spaces-inside-empty: -1 brackets: level: error min-spaces-inside: 0 max-spaces-inside: 0 min-spaces-inside-empty: -1 max-spaces-inside-empty: -1 colons: level: error max-spaces-before: 0 max-spaces-after: 1 commas: level: error max-spaces-before: 0 min-spaces-after: 1 max-spaces-after: 1 comments: level: error require-starting-space: true min-spaces-from-content: 1 comments-indentation: level: error document-end: level: error present: false document-start: level: error present: true empty-lines: level: error max: 1 max-start: 0 max-end: 1 hyphens: level: error max-spaces-after: 1 indentation: level: error spaces: 2 indent-sequences: true check-multi-line-strings: false key-duplicates: level: error line-length: level: warning max: 120 allow-non-breakable-words: true allow-non-breakable-inline-mappings: true new-line-at-end-of-file: level: error new-lines: level: error type: unix trailing-spaces: level: error truthy: level: error aioelectricitymaps-1.1.0/LICENSE000066400000000000000000000020641475061435500164240ustar00rootroot00000000000000MIT License Copyright (c) 2023 Jan-Philipp Benecke Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. aioelectricitymaps-1.1.0/README.md000066400000000000000000000115361475061435500167020ustar00rootroot00000000000000# aioelectricitymaps [![GitHub Release][releases-shield]][releases] [![Python Versions][python-versions-shield]][pypi] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield] [![License][license-shield]](LICENSE.md) [![Build Status][build-shield]][build] [![Code Coverage][codecov-shield]][codecov] Asynchronous Python client for Electricity Maps. ## About This package allows you to fetch data from electricitymaps.com. ## Installation ```bash pip install aioelectricitymaps ``` ## Usage ```python import asyncio from aioelectricitymaps import ElectricityMaps, ZoneRequest async def main() -> None: """Run the example.""" async with ElectricityMaps(token="abc123") as em: response = await em.latest_carbon_intensity(ZoneRequest("DE")) print(f"Carbon intensity in Germany: {response.carbon_intensity} gCO2eq/kWh") if __name__ == "__main__": asyncio.run(main()) ``` ## Changelog & Releases This repository keeps a change log using [GitHub's releases][releases] functionality. The format of the log is based on [Keep a Changelog][keepchangelog]. Releases are based on [Semantic Versioning][semver], and use the format of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented based on the following: - `MAJOR`: Incompatible or major changes. - `MINOR`: Backwards-compatible new features and enhancements. - `PATCH`: Backwards-compatible bugfixes and package updates. ## Contributing This is an active open-source project. I am always open to people who want to use the code or contribute to it. Thank you for being involved! :heart_eyes: ## Setting up development environment This Python project is fully managed using the [Poetry][poetry] dependency manager. But also relies on the use of NodeJS for certain checks during development. You need at least: - Python 3.11+ - [Poetry][poetry-install] - NodeJS 20+ (including NPM) To install all packages, including all development requirements: ```bash npm install poetry install ``` As this repository uses the [pre-commit][pre-commit] framework, all changes are linted and tested with each commit. You can run all checks and tests manually, using the following command: ```bash poetry run pre-commit run --all-files ``` To run just the Python tests: ```bash poetry run pytest ``` ## Authors & contributors The content is by [Jan-Philipp Benecke][jpbede]. For a full list of all authors and contributors, check [the contributor's page][contributors]. ## License MIT License Copyright (c) 2023-2025 Jan-Philipp Benecke Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. [build-shield]: https://github.com/jpbede/aioelectricitymaps/actions/workflows/release.yml/badge.svg [build]: https://github.com/jpbede/aioelectricitymaps/actions [codecov-shield]: https://codecov.io/gh/jpbede/aioelectricitymaps/branch/main/graph/badge.svg [codecov]: https://codecov.io/gh/jpbede/aioelectricitymaps [commits-shield]: https://img.shields.io/github/commit-activity/y/jpbede/aioelectricitymaps.svg [commits]: https://github.com/jpbede/aioelectricitymaps/commits/main [contributors]: https://github.com/jpbede/aioelectricitymaps/graphs/contributors [jpbede]: https://github.com/jpbede [keepchangelog]: http://keepachangelog.com/en/1.0.0/ [license-shield]: https://img.shields.io/github/license/jpbede/aioelectricitymaps.svg [maintenance-shield]: https://img.shields.io/maintenance/yes/2025.svg [poetry-install]: https://python-poetry.org/docs/#installation [poetry]: https://python-poetry.org [pre-commit]: https://pre-commit.com/ [project-stage-shield]: https://img.shields.io/badge/project%20stage-stable-green.svg [python-versions-shield]: https://img.shields.io/pypi/pyversions/aioelectricitymaps [releases-shield]: https://img.shields.io/github/release/jpbede/aioelectricitymaps.svg [releases]: https://github.com/jpbede/aioelectricitymaps/releases [semver]: http://semver.org/spec/v2.0.0.html [pypi]: https://pypi.org/project/aioelectricitymaps/ aioelectricitymaps-1.1.0/aioelectricitymaps/000077500000000000000000000000001475061435500213075ustar00rootroot00000000000000aioelectricitymaps-1.1.0/aioelectricitymaps/__init__.py000066400000000000000000000013201475061435500234140ustar00rootroot00000000000000"""ElectricityMaps wrapper.""" from .electricitymaps import ElectricityMaps from .exceptions import ( ElectricityMapsConnectionError, ElectricityMapsConnectionTimeoutError, ElectricityMapsError, ElectricityMapsInvalidTokenError, ElectricityMapsNoDataError, ) from .models import HomeAssistantCarbonIntensityResponse, Zone from .request import CoordinatesRequest, ZoneRequest __all__ = [ "CoordinatesRequest", "ElectricityMaps", "ElectricityMapsConnectionError", "ElectricityMapsConnectionTimeoutError", "ElectricityMapsError", "ElectricityMapsInvalidTokenError", "ElectricityMapsNoDataError", "HomeAssistantCarbonIntensityResponse", "Zone", "ZoneRequest", ] aioelectricitymaps-1.1.0/aioelectricitymaps/const.py000066400000000000000000000012161475061435500230070ustar00rootroot00000000000000"""Constants for aioelectricitymaps.""" from enum import StrEnum API_BASE_URL = "https://api.electricitymap.org/v3" class ApiEndpoints: """Class holding API endpoints.""" CARBON_INTENSITY_HA = API_BASE_URL + "/home-assistant" ZONES = API_BASE_URL + "/zones" LATEST_CARBON_INTENSITY = API_BASE_URL + "/carbon-intensity/latest" HISTORY_CARBON_INTENSITY = API_BASE_URL + "/carbon-intensity/history" LATEST_POWER_BREAKDOWN = API_BASE_URL + "/power-breakdown/latest" HISTORY_POWER_BREAKDOWN = API_BASE_URL + "/power-breakdown/history" class Status(StrEnum): """Enum for status.""" OK = "ok" NO_DATA = "no-data" aioelectricitymaps-1.1.0/aioelectricitymaps/electricitymaps.py000066400000000000000000000117211475061435500250640ustar00rootroot00000000000000"""Async Python client for electricitymaps.com.""" from __future__ import annotations from dataclasses import dataclass import logging import socket from typing import TYPE_CHECKING, Self from aiohttp import ClientError, ClientResponseError, ClientSession from .const import ApiEndpoints from .exceptions import ( ElectricityMapsConnectionError, ElectricityMapsConnectionTimeoutError, ElectricityMapsInvalidTokenError, ) from .models import ( CarbonIntensityHistory, HomeAssistantCarbonIntensityResponse, LatestCarbonIntensity, LatestPowerBreakdown, PowerBreakdownHistory, Zone, ZonesResponse, ) if TYPE_CHECKING: from .request import BaseRequest, CoordinatesRequest, ZoneRequest _LOGGER = logging.getLogger(__name__) @dataclass(kw_only=True) class ElectricityMaps: """ElectricityMaps API client.""" token: str session: ClientSession | None = None _close_session: bool = False async def _get( self, *, url: str, request: BaseRequest | None = None, unauthenticated: bool = False, ) -> str: """Execute a GET request against the API.""" if self.session is None: self.session = ClientSession() self._close_session = True headers = {} if unauthenticated else {"auth-token": self.token} _LOGGER.debug("Doing request: GET %s %s", url, str(request)) params = {} if request: params = request.get_request_parameters() try: async with self.session.get( url, headers=headers, params=params, ) as response: response.raise_for_status() response_text = await response.text() except TimeoutError as exception: msg = "Timeout occurred while connecting to the Electricity Maps API" raise ElectricityMapsConnectionTimeoutError(msg) from exception except ( ClientError, socket.gaierror, ) as exception: if isinstance(exception, ClientResponseError) and exception.status == 401: msg = "The given token is invalid" raise ElectricityMapsInvalidTokenError(msg) from exception msg = "Error occurred while communicating to the Electricity Maps API" raise ElectricityMapsConnectionError(msg) from exception _LOGGER.debug( "Got response with status %s and body: %s", response.status, response_text, ) return response_text async def carbon_intensity_for_home_assistant( self, request: CoordinatesRequest | ZoneRequest, ) -> HomeAssistantCarbonIntensityResponse: """Get carbon intensity.""" result = await self._get( url=ApiEndpoints.CARBON_INTENSITY_HA, request=request, ) return HomeAssistantCarbonIntensityResponse.from_json(result) async def latest_carbon_intensity( self, request: CoordinatesRequest | ZoneRequest, ) -> LatestCarbonIntensity: """Get latest carbon intensity.""" result = await self._get( url=ApiEndpoints.LATEST_CARBON_INTENSITY, request=request, ) return LatestCarbonIntensity.from_json(result) async def carbon_intensity_history( self, request: CoordinatesRequest | ZoneRequest, ) -> CarbonIntensityHistory: """Get carbon intensity history.""" result = await self._get( url=ApiEndpoints.HISTORY_CARBON_INTENSITY, request=request, ) return CarbonIntensityHistory.from_json(result) async def latest_power_breakdown( self, request: CoordinatesRequest | ZoneRequest, ) -> LatestPowerBreakdown: """Get latest power breakdown.""" result = await self._get( url=ApiEndpoints.LATEST_POWER_BREAKDOWN, request=request, ) return LatestPowerBreakdown.from_json(result) async def power_breakdown_history( self, request: CoordinatesRequest | ZoneRequest, ) -> PowerBreakdownHistory: """Get power breakdown history.""" result = await self._get( url=ApiEndpoints.HISTORY_POWER_BREAKDOWN, request=request, ) return PowerBreakdownHistory.from_json(result) async def zones(self) -> dict[str, Zone]: """Get a dict of zones where carbon intensity is available.""" result = await self._get(url=ApiEndpoints.ZONES, unauthenticated=True) return ZonesResponse.from_json(result).zones async def close(self) -> None: """Close open client session.""" if self.session and self._close_session: await self.session.close() async def __aenter__(self) -> Self: """Async enter.""" return self async def __aexit__(self, *_exc_info: object) -> None: """Async exit.""" await self.close() aioelectricitymaps-1.1.0/aioelectricitymaps/exceptions.py000066400000000000000000000011731475061435500240440ustar00rootroot00000000000000"""Exceptions for ElectricityMaps.""" class ElectricityMapsError(Exception): """Generic error occurred in ElectricityMaps package.""" class ElectricityMapsNoDataError(ElectricityMapsError): """There is no data available for the given location.""" class ElectricityMapsConnectionError(ElectricityMapsError): """Error occurred while communicating to the Electricity Maps API.""" class ElectricityMapsConnectionTimeoutError(ElectricityMapsError): """Timeout occurred while connecting to the Electricity Maps API.""" class ElectricityMapsInvalidTokenError(ElectricityMapsError): """Given token is invalid.""" aioelectricitymaps-1.1.0/aioelectricitymaps/models/000077500000000000000000000000001475061435500225725ustar00rootroot00000000000000aioelectricitymaps-1.1.0/aioelectricitymaps/models/__init__.py000066400000000000000000000007721475061435500247110ustar00rootroot00000000000000"""Models to the electricitymaps.com API.""" from .carbon_intensity import CarbonIntensityHistory, LatestCarbonIntensity from .home_assistant import HomeAssistantCarbonIntensityResponse from .power_breakdown import LatestPowerBreakdown, PowerBreakdownHistory from .zone import Zone, ZonesResponse __all__ = [ "CarbonIntensityHistory", "HomeAssistantCarbonIntensityResponse", "LatestCarbonIntensity", "LatestPowerBreakdown", "PowerBreakdownHistory", "Zone", "ZonesResponse", ] aioelectricitymaps-1.1.0/aioelectricitymaps/models/carbon_intensity.py000066400000000000000000000022571475061435500265240ustar00rootroot00000000000000"""Models for the electricitymaps.com carbon intensity API.""" from dataclasses import dataclass, field from datetime import datetime from mashumaro import field_options from mashumaro.mixins.orjson import DataClassORJSONMixin @dataclass(slots=True, frozen=True, kw_only=True) class CarbonIntensity: """API response.""" carbon_intensity: int = field(metadata=field_options(alias="carbonIntensity")) timestamp: datetime = field(metadata=field_options(alias="datetime")) updated_at: datetime = field(metadata=field_options(alias="updatedAt")) emission_factor_type: str = field( metadata=field_options(alias="emissionFactorType"), ) is_estimated: bool = field(metadata=field_options(alias="isEstimated")) estimation_method: str = field(metadata=field_options(alias="estimationMethod")) @dataclass(slots=True, frozen=True, kw_only=True) class LatestCarbonIntensity(CarbonIntensity, DataClassORJSONMixin): """Carbon intensity response.""" zone: str @dataclass(slots=True, frozen=True, kw_only=True) class CarbonIntensityHistory(DataClassORJSONMixin): """Carbon intensity history response.""" zone: str history: list[CarbonIntensity] aioelectricitymaps-1.1.0/aioelectricitymaps/models/home_assistant.py000066400000000000000000000033261475061435500261710ustar00rootroot00000000000000"""Models to the electricitymaps.com API.""" from __future__ import annotations from dataclasses import dataclass, field from typing import Any, Self from mashumaro import field_options from mashumaro.mixins.orjson import DataClassORJSONMixin from aioelectricitymaps.const import Status from aioelectricitymaps.exceptions import ( ElectricityMapsError, ElectricityMapsNoDataError, ) @dataclass(slots=True, frozen=True, kw_only=True) class HomeAssistantCarbonIntensityResponse(DataClassORJSONMixin): """API response.""" status: str country_code: str = field(metadata=field_options(alias="countryCode")) data: HomeAssistantCarbonIntensityData units: HomeAssistantCarbonIntensityUnit @classmethod def __pre_deserialize__( cls: type[Self], d: dict[Any, Any], ) -> dict[Any, Any]: """Check if the status is ok otherwise raise an error.""" status = d.get("status") if status == Status.OK: return d if status == Status.NO_DATA: msg = "No data available for selected location" raise ElectricityMapsNoDataError(msg) msg = f"Unknown response status occurred: {status}" raise ElectricityMapsError(msg) @dataclass(slots=True, frozen=True, kw_only=True) class HomeAssistantCarbonIntensityData: """Data field.""" carbon_intensity: float = field(metadata=field_options(alias="carbonIntensity")) fossil_fuel_percentage: float = field( metadata=field_options(alias="fossilFuelPercentage"), ) @dataclass(slots=True, frozen=True, kw_only=True) class HomeAssistantCarbonIntensityUnit: """Unit field.""" carbon_intensity: str = field(metadata=field_options(alias="carbonIntensity")) aioelectricitymaps-1.1.0/aioelectricitymaps/models/power_breakdown.py000066400000000000000000000043231475061435500263360ustar00rootroot00000000000000"""Power breakdown response models for the electricitymaps.com API.""" from __future__ import annotations from dataclasses import dataclass, field from datetime import datetime # noqa: TC003 from mashumaro import field_options from mashumaro.mixins.orjson import DataClassORJSONMixin @dataclass(slots=True, frozen=True, kw_only=True) class PowerBreakdown: """API response.""" time: datetime = field(metadata=field_options(alias="datetime")) updated_at: datetime = field(metadata=field_options(alias="updatedAt")) created_at: datetime = field(metadata=field_options(alias="createdAt")) power_consumption_breakdown: dict[str, int | None] = field( metadata=field_options(alias="powerConsumptionBreakdown"), ) power_production_breakdown: dict[str, int | None] = field( metadata=field_options(alias="powerProductionBreakdown"), ) power_import_breakdown: dict[str, int | None] = field( metadata=field_options(alias="powerImportBreakdown"), ) power_export_breakdown: dict[str, int | None] = field( metadata=field_options(alias="powerExportBreakdown"), ) fossil_free_percentage: int = field( metadata=field_options(alias="fossilFreePercentage"), ) renewable_percentage: int = field( metadata=field_options(alias="renewablePercentage"), ) power_consumption_total: int = field( metadata=field_options(alias="powerConsumptionTotal"), ) power_production_total: int = field( metadata=field_options(alias="powerProductionTotal"), ) power_import_total: int = field(metadata=field_options(alias="powerImportTotal")) power_export_total: int = field(metadata=field_options(alias="powerExportTotal")) is_estimated: bool = field(metadata=field_options(alias="isEstimated")) estimation_method: str = field(metadata=field_options(alias="estimationMethod")) @dataclass(slots=True, frozen=True, kw_only=True) class LatestPowerBreakdown(PowerBreakdown, DataClassORJSONMixin): """Power breakdown response.""" zone: str @dataclass(slots=True, frozen=True, kw_only=True) class PowerBreakdownHistory(DataClassORJSONMixin): """Power breakdown response.""" zone: str history: list[PowerBreakdown] aioelectricitymaps-1.1.0/aioelectricitymaps/models/zone.py000066400000000000000000000015461475061435500241250ustar00rootroot00000000000000"""Models for the electricitymaps.com zone API.""" from dataclasses import dataclass, field from typing import Any, Self from mashumaro import field_options from mashumaro.mixins.orjson import DataClassORJSONMixin @dataclass(slots=True, frozen=True, kw_only=True) class Zone: """Zone for carbon intensity API.""" zone_name: str = field(metadata=field_options(alias="zoneName")) country_name: str | None = field( metadata=field_options(alias="countryName"), default=None, ) @dataclass(slots=True, frozen=True, kw_only=True) class ZonesResponse(DataClassORJSONMixin): """Zones API response.""" zones: dict[str, Zone] @classmethod def __pre_deserialize__( cls: type[Self], d: dict[Any, Any], ) -> dict[Any, Any]: """Wrap data in a dict for deserialization.""" return {"zones": d} aioelectricitymaps-1.1.0/aioelectricitymaps/py.typed000066400000000000000000000000001475061435500227740ustar00rootroot00000000000000aioelectricitymaps-1.1.0/aioelectricitymaps/request.py000066400000000000000000000011501475061435500233460ustar00rootroot00000000000000"""Request model for electricitymaps API.""" from dataclasses import asdict, dataclass @dataclass class BaseRequest: """Base request model.""" def get_request_parameters(self) -> dict[str, str]: """Get request parameters.""" return asdict(self) def __str__(self) -> str: """Return string representation of the request.""" return str(asdict(self)) @dataclass class ZoneRequest(BaseRequest): """Zone request model.""" zone: str @dataclass(kw_only=True) class CoordinatesRequest(BaseRequest): """Coordinates request model.""" lat: str lon: str aioelectricitymaps-1.1.0/package-lock.json000066400000000000000000000014331475061435500206320ustar00rootroot00000000000000{ "name": "aioelectricitymaps", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aioelectricitymaps", "version": "0.0.0", "license": "MIT", "devDependencies": { "prettier": "3.4.2" } }, "node_modules/prettier": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } } } } aioelectricitymaps-1.1.0/package.json000066400000000000000000000005371475061435500177100ustar00rootroot00000000000000{ "name": "aioelectricitymaps", "version": "0.0.0", "private": true, "description": "Asynchronous Python client for Electricity Maps.", "scripts": { "prettier": "prettier --write **/*.{json,js,md,yml,yaml}" }, "author": "Jan-Philipp Benecke ", "license": "MIT", "devDependencies": { "prettier": "3.4.2" } } aioelectricitymaps-1.1.0/poetry.lock000066400000000000000000004077631475061435500176320ustar00rootroot00000000000000# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" version = "2.4.4" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, ] [[package]] name = "aiohttp" version = "3.11.11" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"}, {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"}, {file = "aiohttp-3.11.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:731468f555656767cda219ab42e033355fe48c85fbe3ba83a349631541715ba2"}, {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb23d8bb86282b342481cad4370ea0853a39e4a32a0042bb52ca6bdde132df43"}, {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f047569d655f81cb70ea5be942ee5d4421b6219c3f05d131f64088c73bb0917f"}, {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd7659baae9ccf94ae5fe8bfaa2c7bc2e94d24611528395ce88d009107e00c6d"}, {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af01e42ad87ae24932138f154105e88da13ce7d202a6de93fafdafb2883a00ef"}, {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5854be2f3e5a729800bac57a8d76af464e160f19676ab6aea74bde18ad19d438"}, {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6526e5fb4e14f4bbf30411216780c9967c20c5a55f2f51d3abd6de68320cc2f3"}, {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:85992ee30a31835fc482468637b3e5bd085fa8fe9392ba0bdcbdc1ef5e9e3c55"}, {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:88a12ad8ccf325a8a5ed80e6d7c3bdc247d66175afedbe104ee2aaca72960d8e"}, {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0a6d3fbf2232e3a08c41eca81ae4f1dff3d8f1a30bae415ebe0af2d2458b8a33"}, {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84a585799c58b795573c7fa9b84c455adf3e1d72f19a2bf498b54a95ae0d194c"}, {file = "aiohttp-3.11.11-cp310-cp310-win32.whl", hash = "sha256:bfde76a8f430cf5c5584553adf9926534352251d379dcb266ad2b93c54a29745"}, {file = "aiohttp-3.11.11-cp310-cp310-win_amd64.whl", hash = "sha256:0fd82b8e9c383af11d2b26f27a478640b6b83d669440c0a71481f7c865a51da9"}, {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ba74ec819177af1ef7f59063c6d35a214a8fde6f987f7661f4f0eecc468a8f76"}, {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4af57160800b7a815f3fe0eba9b46bf28aafc195555f1824555fa2cfab6c1538"}, {file = "aiohttp-3.11.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffa336210cf9cd8ed117011085817d00abe4c08f99968deef0013ea283547204"}, {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b8fe282183e4a3c7a1b72f5ade1094ed1c6345a8f153506d114af5bf8accd9"}, {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af41686ccec6a0f2bdc66686dc0f403c41ac2089f80e2214a0f82d001052c03"}, {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70d1f9dde0e5dd9e292a6d4d00058737052b01f3532f69c0c65818dac26dc287"}, {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:249cc6912405917344192b9f9ea5cd5b139d49e0d2f5c7f70bdfaf6b4dbf3a2e"}, {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0eb98d90b6690827dcc84c246811feeb4e1eea683c0eac6caed7549be9c84665"}, {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec82bf1fda6cecce7f7b915f9196601a1bd1a3079796b76d16ae4cce6d0ef89b"}, {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9fd46ce0845cfe28f108888b3ab17abff84ff695e01e73657eec3f96d72eef34"}, {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd176afcf8f5d2aed50c3647d4925d0db0579d96f75a31e77cbaf67d8a87742d"}, {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ec2aa89305006fba9ffb98970db6c8221541be7bee4c1d027421d6f6df7d1ce2"}, {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:92cde43018a2e17d48bb09c79e4d4cb0e236de5063ce897a5e40ac7cb4878773"}, {file = "aiohttp-3.11.11-cp311-cp311-win32.whl", hash = "sha256:aba807f9569455cba566882c8938f1a549f205ee43c27b126e5450dc9f83cc62"}, {file = "aiohttp-3.11.11-cp311-cp311-win_amd64.whl", hash = "sha256:ae545f31489548c87b0cced5755cfe5a5308d00407000e72c4fa30b19c3220ac"}, {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e595c591a48bbc295ebf47cb91aebf9bd32f3ff76749ecf282ea7f9f6bb73886"}, {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3ea1b59dc06396b0b424740a10a0a63974c725b1c64736ff788a3689d36c02d2"}, {file = "aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8811f3f098a78ffa16e0ea36dffd577eb031aea797cbdba81be039a4169e242c"}, {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7227b87a355ce1f4bf83bfae4399b1f5bb42e0259cb9405824bd03d2f4336a"}, {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d40f9da8cabbf295d3a9dae1295c69975b86d941bc20f0a087f0477fa0a66231"}, {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffb3dc385f6bb1568aa974fe65da84723210e5d9707e360e9ecb51f59406cd2e"}, {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8f5f7515f3552d899c61202d99dcb17d6e3b0de777900405611cd747cecd1b8"}, {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3499c7ffbfd9c6a3d8d6a2b01c26639da7e43d47c7b4f788016226b1e711caa8"}, {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8e2bf8029dbf0810c7bfbc3e594b51c4cc9101fbffb583a3923aea184724203c"}, {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6212a60e5c482ef90f2d788835387070a88d52cf6241d3916733c9176d39eab"}, {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d119fafe7b634dbfa25a8c597718e69a930e4847f0b88e172744be24515140da"}, {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:6fba278063559acc730abf49845d0e9a9e1ba74f85f0ee6efd5803f08b285853"}, {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:92fc484e34b733704ad77210c7957679c5c3877bd1e6b6d74b185e9320cc716e"}, {file = "aiohttp-3.11.11-cp312-cp312-win32.whl", hash = "sha256:9f5b3c1ed63c8fa937a920b6c1bec78b74ee09593b3f5b979ab2ae5ef60d7600"}, {file = "aiohttp-3.11.11-cp312-cp312-win_amd64.whl", hash = "sha256:1e69966ea6ef0c14ee53ef7a3d68b564cc408121ea56c0caa2dc918c1b2f553d"}, {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:541d823548ab69d13d23730a06f97460f4238ad2e5ed966aaf850d7c369782d9"}, {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:929f3ed33743a49ab127c58c3e0a827de0664bfcda566108989a14068f820194"}, {file = "aiohttp-3.11.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0882c2820fd0132240edbb4a51eb8ceb6eef8181db9ad5291ab3332e0d71df5f"}, {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b63de12e44935d5aca7ed7ed98a255a11e5cb47f83a9fded7a5e41c40277d104"}, {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa54f8ef31d23c506910c21163f22b124facb573bff73930735cf9fe38bf7dff"}, {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a344d5dc18074e3872777b62f5f7d584ae4344cd6006c17ba12103759d407af3"}, {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7fb429ab1aafa1f48578eb315ca45bd46e9c37de11fe45c7f5f4138091e2f1"}, {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c341c7d868750e31961d6d8e60ff040fb9d3d3a46d77fd85e1ab8e76c3e9a5c4"}, {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed9ee95614a71e87f1a70bc81603f6c6760128b140bc4030abe6abaa988f1c3d"}, {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:de8d38f1c2810fa2a4f1d995a2e9c70bb8737b18da04ac2afbf3971f65781d87"}, {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a9b7371665d4f00deb8f32208c7c5e652059b0fda41cf6dbcac6114a041f1cc2"}, {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:620598717fce1b3bd14dd09947ea53e1ad510317c85dda2c9c65b622edc96b12"}, {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf8d9bfee991d8acc72d060d53860f356e07a50f0e0d09a8dfedea1c554dd0d5"}, {file = "aiohttp-3.11.11-cp313-cp313-win32.whl", hash = "sha256:9d73ee3725b7a737ad86c2eac5c57a4a97793d9f442599bea5ec67ac9f4bdc3d"}, {file = "aiohttp-3.11.11-cp313-cp313-win_amd64.whl", hash = "sha256:c7a06301c2fb096bdb0bd25fe2011531c1453b9f2c163c8031600ec73af1cc99"}, {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3e23419d832d969f659c208557de4a123e30a10d26e1e14b73431d3c13444c2e"}, {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21fef42317cf02e05d3b09c028712e1d73a9606f02467fd803f7c1f39cc59add"}, {file = "aiohttp-3.11.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f21bb8d0235fc10c09ce1d11ffbd40fc50d3f08a89e4cf3a0c503dc2562247a"}, {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1642eceeaa5ab6c9b6dfeaaa626ae314d808188ab23ae196a34c9d97efb68350"}, {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2170816e34e10f2fd120f603e951630f8a112e1be3b60963a1f159f5699059a6"}, {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8be8508d110d93061197fd2d6a74f7401f73b6d12f8822bbcd6d74f2b55d71b1"}, {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eed954b161e6b9b65f6be446ed448ed3921763cc432053ceb606f89d793927e"}, {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6c9af134da4bc9b3bd3e6a70072509f295d10ee60c697826225b60b9959acdd"}, {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:44167fc6a763d534a6908bdb2592269b4bf30a03239bcb1654781adf5e49caf1"}, {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:479b8c6ebd12aedfe64563b85920525d05d394b85f166b7873c8bde6da612f9c"}, {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:10b4ff0ad793d98605958089fabfa350e8e62bd5d40aa65cdc69d6785859f94e"}, {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b540bd67cfb54e6f0865ceccd9979687210d7ed1a1cc8c01f8e67e2f1e883d28"}, {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1dac54e8ce2ed83b1f6b1a54005c87dfed139cf3f777fdc8afc76e7841101226"}, {file = "aiohttp-3.11.11-cp39-cp39-win32.whl", hash = "sha256:568c1236b2fde93b7720f95a890741854c1200fba4a3471ff48b2934d2d93fd3"}, {file = "aiohttp-3.11.11-cp39-cp39-win_amd64.whl", hash = "sha256:943a8b052e54dfd6439fd7989f67fc6a7f2138d0a2cf0a7de5f18aa4fe7eb3b1"}, {file = "aiohttp-3.11.11.tar.gz", hash = "sha256:bb49c7f1e6ebf3821a42d81d494f538107610c3a705987f53068546b0e90303e"}, ] [package.dependencies] aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" propcache = ">=0.2.0" yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aioresponses" version = "0.7.8" description = "Mock out requests made by ClientSession from aiohttp package" optional = false python-versions = "*" files = [ {file = "aioresponses-0.7.8-py2.py3-none-any.whl", hash = "sha256:b73bd4400d978855e55004b23a3a84cb0f018183bcf066a85ad392800b5b9a94"}, {file = "aioresponses-0.7.8.tar.gz", hash = "sha256:b861cdfe5dc58f3b8afac7b0a6973d5d7b2cb608dd0f6253d16b8ee8eaf6df11"}, ] [package.dependencies] aiohttp = ">=3.3.0,<4.0.0" packaging = ">=22.0" [[package]] name = "aiosignal" version = "1.3.2" description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.9" files = [ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, ] [package.dependencies] frozenlist = ">=1.1.0" [[package]] name = "astroid" version = "3.3.8" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.9.0" files = [ {file = "astroid-3.3.8-py3-none-any.whl", hash = "sha256:187ccc0c248bfbba564826c26f070494f7bc964fd286b6d9fff4420e55de828c"}, {file = "astroid-3.3.8.tar.gz", hash = "sha256:a88c7994f914a4ea8572fac479459f4955eeccc877be3f2d959a33273b0cf40b"}, ] [[package]] name = "attrs" version = "25.1.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" files = [ {file = "attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a"}, {file = "attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e"}, ] [package.extras] benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] [[package]] name = "codespell" version = "2.4.1" description = "Fix common misspellings in text files" optional = false python-versions = ">=3.8" files = [ {file = "codespell-2.4.1-py3-none-any.whl", hash = "sha256:3dadafa67df7e4a3dbf51e0d7315061b80d265f9552ebd699b3dd6834b47e425"}, {file = "codespell-2.4.1.tar.gz", hash = "sha256:299fcdcb09d23e81e35a671bbe746d5ad7e8385972e65dbb833a2eaac33c01e5"}, ] [package.extras] dev = ["Pygments", "build", "chardet", "pre-commit", "pytest", "pytest-cov", "pytest-dependency", "ruff", "tomli", "twine"] hard-encoding-detection = ["chardet"] toml = ["tomli"] types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency"] [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] [[package]] name = "covdefaults" version = "2.3.0" description = "A coverage plugin to provide sensible default settings" optional = false python-versions = ">=3.7" files = [ {file = "covdefaults-2.3.0-py2.py3-none-any.whl", hash = "sha256:2832961f6ffcfe4b57c338bc3418a3526f495c26fb9c54565409c5532f7c41be"}, {file = "covdefaults-2.3.0.tar.gz", hash = "sha256:4e99f679f12d792bc62e5510fa3eb59546ed47bd569e36e4fddc4081c9c3ebf7"}, ] [package.dependencies] coverage = ">=6.0.2" [[package]] name = "coverage" version = "7.6.10" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, ] [package.extras] toml = ["tomli"] [[package]] name = "dill" version = "0.3.9" description = "serialize all of Python" optional = false python-versions = ">=3.8" files = [ {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "distlib" version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, ] [[package]] name = "filelock" version = "3.17.0" description = "A platform independent file lock." optional = false python-versions = ">=3.9" files = [ {file = "filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338"}, {file = "filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"}, ] [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "frozenlist" version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, ] [[package]] name = "identify" version = "2.6.6" description = "File identification library for Python" optional = false python-versions = ">=3.9" files = [ {file = "identify-2.6.6-py2.py3-none-any.whl", hash = "sha256:cbd1810bce79f8b671ecb20f53ee0ae8e86ae84b557de31d89709dc2a48ba881"}, {file = "identify-2.6.6.tar.gz", hash = "sha256:7bec12768ed44ea4761efb47806f0a41f86e7c0a5fdf5950d4648c90eca7e251"}, ] [package.extras] license = ["ukkonen"] [[package]] name = "idna" version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] [[package]] name = "isort" version = "6.0.0" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.9.0" files = [ {file = "isort-6.0.0-py3-none-any.whl", hash = "sha256:567954102bb47bb12e0fae62606570faacddd441e45683968c8d1734fb1af892"}, {file = "isort-6.0.0.tar.gz", hash = "sha256:75d9d8a1438a9432a7d7b54f2d3b45cad9a4a0fdba43617d9873379704a8bdf1"}, ] [package.extras] colors = ["colorama"] plugins = ["setuptools"] [[package]] name = "mashumaro" version = "3.15" description = "Fast and well tested serialization library" optional = false python-versions = ">=3.9" files = [ {file = "mashumaro-3.15-py3-none-any.whl", hash = "sha256:cdd45ef5a4d09860846a3ee37a4c2f5f4bc70eb158caa55648c4c99451ca6c4c"}, {file = "mashumaro-3.15.tar.gz", hash = "sha256:32a2a38a1e942a07f2cbf9c3061cb2a247714ee53e36a5958548b66bd116d0a9"}, ] [package.dependencies] typing-extensions = ">=4.1.0" [package.extras] msgpack = ["msgpack (>=0.5.6)"] orjson = ["orjson"] toml = ["tomli (>=1.1.0)", "tomli-w (>=1.0)"] yaml = ["pyyaml (>=3.13)"] [[package]] name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] [[package]] name = "multidict" version = "6.1.0" description = "multidict implementation" optional = false python-versions = ">=3.8" files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"}, {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"}, {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"}, {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"}, {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"}, {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"}, {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"}, {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"}, {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"}, {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"}, {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"}, {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"}, {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"}, {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"}, {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"}, {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"}, {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"}, {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"}, {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"}, {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"}, {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"}, {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"}, {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"}, {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"}, {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"}, {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"}, {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"}, {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"}, {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"}, {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"}, {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"}, {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"}, {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"}, {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"}, {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"}, {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"}, {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"}, {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"}, {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"}, {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"}, {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"}, {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"}, {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"}, {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"}, {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"}, {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"}, {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"}, {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"}, {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"}, {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"}, {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"}, {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"}, {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"}, {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"}, {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"}, {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"}, {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"}, {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"}, {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"}, {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"}, {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"}, {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"}, {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"}, {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"}, {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"}, {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"}, {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"}, {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"}, {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"}, {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"}, {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"}, {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"}, {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"}, {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"}, {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"}, {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"}, {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"}, {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"}, {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"}, {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"}, {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"}, {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"}, {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"}, {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"}, {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"}, {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"}, {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"}, {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"}, {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"}, {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"}, ] [[package]] name = "mypy" version = "1.15.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.9" files = [ {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, ] [package.dependencies] mypy_extensions = ">=1.0.0" typing_extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] [[package]] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] [[package]] name = "nodeenv" version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] [[package]] name = "orjson" version = "3.10.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ {file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"}, {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"}, {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c2c79fa308e6edb0ffab0a31fd75a7841bf2a79a20ef08a3c6e3b26814c8ca8"}, {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cb85490aa6bf98abd20607ab5c8324c0acb48d6da7863a51be48505646c814"}, {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763dadac05e4e9d2bc14938a45a2d0560549561287d41c465d3c58aec818b164"}, {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a330b9b4734f09a623f74a7490db713695e13b67c959713b78369f26b3dee6bf"}, {file = "orjson-3.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a61a4622b7ff861f019974f73d8165be1bd9a0855e1cad18ee167acacabeb061"}, {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd271247691574416b3228db667b84775c497b245fa275c6ab90dc1ffbbd2b3"}, {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4759b109c37f635aa5c5cc93a1b26927bfde24b254bcc0e1149a9fada253d2d"}, {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e992fd5cfb8b9f00bfad2fd7a05a4299db2bbe92e6440d9dd2fab27655b3182"}, {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f95fb363d79366af56c3f26b71df40b9a583b07bbaaf5b317407c4d58497852e"}, {file = "orjson-3.10.15-cp310-cp310-win32.whl", hash = "sha256:f9875f5fea7492da8ec2444839dcc439b0ef298978f311103d0b7dfd775898ab"}, {file = "orjson-3.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:17085a6aa91e1cd70ca8533989a18b5433e15d29c574582f76f821737c8d5806"}, {file = "orjson-3.10.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c4cc83960ab79a4031f3119cc4b1a1c627a3dc09df125b27c4201dff2af7eaa6"}, {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddbeef2481d895ab8be5185f2432c334d6dec1f5d1933a9c83014d188e102cef"}, {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e590a0477b23ecd5b0ac865b1b907b01b3c5535f5e8a8f6ab0e503efb896334"}, {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6be38bd103d2fd9bdfa31c2720b23b5d47c6796bcb1d1b598e3924441b4298d"}, {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff4f6edb1578960ed628a3b998fa54d78d9bb3e2eb2cfc5c2a09732431c678d0"}, {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0482b21d0462eddd67e7fce10b89e0b6ac56570424662b685a0d6fccf581e13"}, {file = "orjson-3.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bb5cc3527036ae3d98b65e37b7986a918955f85332c1ee07f9d3f82f3a6899b5"}, {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d569c1c462912acdd119ccbf719cf7102ea2c67dd03b99edcb1a3048651ac96b"}, {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1e6d33efab6b71d67f22bf2962895d3dc6f82a6273a965fab762e64fa90dc399"}, {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c33be3795e299f565681d69852ac8c1bc5c84863c0b0030b2b3468843be90388"}, {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eea80037b9fae5339b214f59308ef0589fc06dc870578b7cce6d71eb2096764c"}, {file = "orjson-3.10.15-cp311-cp311-win32.whl", hash = "sha256:d5ac11b659fd798228a7adba3e37c010e0152b78b1982897020a8e019a94882e"}, {file = "orjson-3.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:cf45e0214c593660339ef63e875f32ddd5aa3b4adc15e662cdb80dc49e194f8e"}, {file = "orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a"}, {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dba5a1e85d554e3897fa9fe6fbcff2ed32d55008973ec9a2b992bd9a65d2352d"}, {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7723ad949a0ea502df656948ddd8b392780a5beaa4c3b5f97e525191b102fff0"}, {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fd9bc64421e9fe9bd88039e7ce8e58d4fead67ca88e3a4014b143cec7684fd4"}, {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dadba0e7b6594216c214ef7894c4bd5f08d7c0135f4dd0145600be4fbcc16767"}, {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48f59114fe318f33bbaee8ebeda696d8ccc94c9e90bc27dbe72153094e26f41"}, {file = "orjson-3.10.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:035fb83585e0f15e076759b6fedaf0abb460d1765b6a36f48018a52858443514"}, {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d13b7fe322d75bf84464b075eafd8e7dd9eae05649aa2a5354cfa32f43c59f17"}, {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7066b74f9f259849629e0d04db6609db4cf5b973248f455ba5d3bd58a4daaa5b"}, {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:88dc3f65a026bd3175eb157fea994fca6ac7c4c8579fc5a86fc2114ad05705b7"}, {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b342567e5465bd99faa559507fe45e33fc76b9fb868a63f1642c6bc0735ad02a"}, {file = "orjson-3.10.15-cp312-cp312-win32.whl", hash = "sha256:0a4f27ea5617828e6b58922fdbec67b0aa4bb844e2d363b9244c47fa2180e665"}, {file = "orjson-3.10.15-cp312-cp312-win_amd64.whl", hash = "sha256:ef5b87e7aa9545ddadd2309efe6824bd3dd64ac101c15dae0f2f597911d46eaa"}, {file = "orjson-3.10.15-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bae0e6ec2b7ba6895198cd981b7cca95d1487d0147c8ed751e5632ad16f031a6"}, {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f93ce145b2db1252dd86af37d4165b6faa83072b46e3995ecc95d4b2301b725a"}, {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c203f6f969210128af3acae0ef9ea6aab9782939f45f6fe02d05958fe761ef9"}, {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8918719572d662e18b8af66aef699d8c21072e54b6c82a3f8f6404c1f5ccd5e0"}, {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f71eae9651465dff70aa80db92586ad5b92df46a9373ee55252109bb6b703307"}, {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e117eb299a35f2634e25ed120c37c641398826c2f5a3d3cc39f5993b96171b9e"}, {file = "orjson-3.10.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13242f12d295e83c2955756a574ddd6741c81e5b99f2bef8ed8d53e47a01e4b7"}, {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7946922ada8f3e0b7b958cc3eb22cfcf6c0df83d1fe5521b4a100103e3fa84c8"}, {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b7155eb1623347f0f22c38c9abdd738b287e39b9982e1da227503387b81b34ca"}, {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:208beedfa807c922da4e81061dafa9c8489c6328934ca2a562efa707e049e561"}, {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eca81f83b1b8c07449e1d6ff7074e82e3fd6777e588f1a6632127f286a968825"}, {file = "orjson-3.10.15-cp313-cp313-win32.whl", hash = "sha256:c03cd6eea1bd3b949d0d007c8d57049aa2b39bd49f58b4b2af571a5d3833d890"}, {file = "orjson-3.10.15-cp313-cp313-win_amd64.whl", hash = "sha256:fd56a26a04f6ba5fb2045b0acc487a63162a958ed837648c5781e1fe3316cfbf"}, {file = "orjson-3.10.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5e8afd6200e12771467a1a44e5ad780614b86abb4b11862ec54861a82d677746"}, {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da9a18c500f19273e9e104cca8c1f0b40a6470bcccfc33afcc088045d0bf5ea6"}, {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb00b7bfbdf5d34a13180e4805d76b4567025da19a197645ca746fc2fb536586"}, {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33aedc3d903378e257047fee506f11e0833146ca3e57a1a1fb0ddb789876c1e1"}, {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd0099ae6aed5eb1fc84c9eb72b95505a3df4267e6962eb93cdd5af03be71c98"}, {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c864a80a2d467d7786274fce0e4f93ef2a7ca4ff31f7fc5634225aaa4e9e98c"}, {file = "orjson-3.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c25774c9e88a3e0013d7d1a6c8056926b607a61edd423b50eb5c88fd7f2823ae"}, {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e78c211d0074e783d824ce7bb85bf459f93a233eb67a5b5003498232ddfb0e8a"}, {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:43e17289ffdbbac8f39243916c893d2ae41a2ea1a9cbb060a56a4d75286351ae"}, {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:781d54657063f361e89714293c095f506c533582ee40a426cb6489c48a637b81"}, {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6875210307d36c94873f553786a808af2788e362bd0cf4c8e66d976791e7b528"}, {file = "orjson-3.10.15-cp38-cp38-win32.whl", hash = "sha256:305b38b2b8f8083cc3d618927d7f424349afce5975b316d33075ef0f73576b60"}, {file = "orjson-3.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:5dd9ef1639878cc3efffed349543cbf9372bdbd79f478615a1c633fe4e4180d1"}, {file = "orjson-3.10.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ffe19f3e8d68111e8644d4f4e267a069ca427926855582ff01fc012496d19969"}, {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d433bf32a363823863a96561a555227c18a522a8217a6f9400f00ddc70139ae2"}, {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:da03392674f59a95d03fa5fb9fe3a160b0511ad84b7a3914699ea5a1b3a38da2"}, {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a63bb41559b05360ded9132032239e47983a39b151af1201f07ec9370715c82"}, {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3766ac4702f8f795ff3fa067968e806b4344af257011858cc3d6d8721588b53f"}, {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1c73dcc8fadbd7c55802d9aa093b36878d34a3b3222c41052ce6b0fc65f8e8"}, {file = "orjson-3.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b299383825eafe642cbab34be762ccff9fd3408d72726a6b2a4506d410a71ab3"}, {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:abc7abecdbf67a173ef1316036ebbf54ce400ef2300b4e26a7b843bd446c2480"}, {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:3614ea508d522a621384c1d6639016a5a2e4f027f3e4a1c93a51867615d28829"}, {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:295c70f9dc154307777ba30fe29ff15c1bcc9dfc5c48632f37d20a607e9ba85a"}, {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:63309e3ff924c62404923c80b9e2048c1f74ba4b615e7584584389ada50ed428"}, {file = "orjson-3.10.15-cp39-cp39-win32.whl", hash = "sha256:a2f708c62d026fb5340788ba94a55c23df4e1869fec74be455e0b2f5363b8507"}, {file = "orjson-3.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:efcf6c735c3d22ef60c4aa27a5238f1a477df85e9b15f2142f9d669beb2d13fd"}, {file = "orjson-3.10.15.tar.gz", hash = "sha256:05ca7fe452a2e9d8d9d706a2984c95b9c2ebc5db417ce0b7a49b91d50642a23e"}, ] [[package]] name = "packaging" version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] name = "pathspec" version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] name = "platformdirs" version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" version = "4.1.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ {file = "pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b"}, {file = "pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4"}, ] [package.dependencies] cfgv = ">=2.0.0" identify = ">=1.0.0" nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" [[package]] name = "pre-commit-hooks" version = "5.0.0" description = "Some out-of-the-box hooks for pre-commit." optional = false python-versions = ">=3.8" files = [ {file = "pre_commit_hooks-5.0.0-py2.py3-none-any.whl", hash = "sha256:8d71cfb582c5c314a5498d94e0104b6567a8b93fb35903ea845c491f4e290a7a"}, {file = "pre_commit_hooks-5.0.0.tar.gz", hash = "sha256:10626959a9eaf602fbfc22bc61b6e75801436f82326bfcee82bb1f2fc4bc646e"}, ] [package.dependencies] "ruamel.yaml" = ">=0.15" [[package]] name = "propcache" version = "0.2.1" description = "Accelerated property cache" optional = false python-versions = ">=3.9" files = [ {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, {file = "propcache-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6445804cf4ec763dc70de65a3b0d9954e868609e83850a47ca4f0cb64bd79fea"}, {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9479aa06a793c5aeba49ce5c5692ffb51fcd9a7016e017d555d5e2b0045d212"}, {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9631c5e8b5b3a0fda99cb0d29c18133bca1e18aea9effe55adb3da1adef80d3"}, {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3156628250f46a0895f1f36e1d4fbe062a1af8718ec3ebeb746f1d23f0c5dc4d"}, {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b6fb63ae352e13748289f04f37868099e69dba4c2b3e271c46061e82c745634"}, {file = "propcache-0.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:887d9b0a65404929641a9fabb6452b07fe4572b269d901d622d8a34a4e9043b2"}, {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a96dc1fa45bd8c407a0af03b2d5218392729e1822b0c32e62c5bf7eeb5fb3958"}, {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a7e65eb5c003a303b94aa2c3852ef130230ec79e349632d030e9571b87c4698c"}, {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:999779addc413181912e984b942fbcc951be1f5b3663cd80b2687758f434c583"}, {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:19a0f89a7bb9d8048d9c4370c9c543c396e894c76be5525f5e1ad287f1750ddf"}, {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1ac2f5fe02fa75f56e1ad473f1175e11f475606ec9bd0be2e78e4734ad575034"}, {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:574faa3b79e8ebac7cb1d7930f51184ba1ccf69adfdec53a12f319a06030a68b"}, {file = "propcache-0.2.1-cp310-cp310-win32.whl", hash = "sha256:03ff9d3f665769b2a85e6157ac8b439644f2d7fd17615a82fa55739bc97863f4"}, {file = "propcache-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:2d3af2e79991102678f53e0dbf4c35de99b6b8b58f29a27ca0325816364caaba"}, {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16"}, {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717"}, {file = "propcache-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3"}, {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b480c6a4e1138e1aa137c0079b9b6305ec6dcc1098a8ca5196283e8a49df95a9"}, {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d27b84d5880f6d8aa9ae3edb253c59d9f6642ffbb2c889b78b60361eed449787"}, {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:857112b22acd417c40fa4595db2fe28ab900c8c5fe4670c7989b1c0230955465"}, {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf6c4150f8c0e32d241436526f3c3f9cbd34429492abddbada2ffcff506c51af"}, {file = "propcache-0.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d4cfda1d8ed687daa4bc0274fcfd5267873db9a5bc0418c2da19273040eeb7"}, {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2f992c07c0fca81655066705beae35fc95a2fa7366467366db627d9f2ee097f"}, {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:4a571d97dbe66ef38e472703067021b1467025ec85707d57e78711c085984e54"}, {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bb6178c241278d5fe853b3de743087be7f5f4c6f7d6d22a3b524d323eecec505"}, {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ad1af54a62ffe39cf34db1aa6ed1a1873bd548f6401db39d8e7cd060b9211f82"}, {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e7048abd75fe40712005bcfc06bb44b9dfcd8e101dda2ecf2f5aa46115ad07ca"}, {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:160291c60081f23ee43d44b08a7e5fb76681221a8e10b3139618c5a9a291b84e"}, {file = "propcache-0.2.1-cp311-cp311-win32.whl", hash = "sha256:819ce3b883b7576ca28da3861c7e1a88afd08cc8c96908e08a3f4dd64a228034"}, {file = "propcache-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:edc9fc7051e3350643ad929df55c451899bb9ae6d24998a949d2e4c87fb596d3"}, {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:081a430aa8d5e8876c6909b67bd2d937bfd531b0382d3fdedb82612c618bc41a"}, {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2ccec9ac47cf4e04897619c0e0c1a48c54a71bdf045117d3a26f80d38ab1fb0"}, {file = "propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d"}, {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:049324ee97bb67285b49632132db351b41e77833678432be52bdd0289c0e05e4"}, {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cd9a1d071158de1cc1c71a26014dcdfa7dd3d5f4f88c298c7f90ad6f27bb46d"}, {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98110aa363f1bb4c073e8dcfaefd3a5cea0f0834c2aab23dda657e4dab2f53b5"}, {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:647894f5ae99c4cf6bb82a1bb3a796f6e06af3caa3d32e26d2350d0e3e3faf24"}, {file = "propcache-0.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd3223c15bebe26518d58ccf9a39b93948d3dcb3e57a20480dfdd315356baff"}, {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d71264a80f3fcf512eb4f18f59423fe82d6e346ee97b90625f283df56aee103f"}, {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e73091191e4280403bde6c9a52a6999d69cdfde498f1fdf629105247599b57ec"}, {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3935bfa5fede35fb202c4b569bb9c042f337ca4ff7bd540a0aa5e37131659348"}, {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f508b0491767bb1f2b87fdfacaba5f7eddc2f867740ec69ece6d1946d29029a6"}, {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1672137af7c46662a1c2be1e8dc78cb6d224319aaa40271c9257d886be4363a6"}, {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b74c261802d3d2b85c9df2dfb2fa81b6f90deeef63c2db9f0e029a3cac50b518"}, {file = "propcache-0.2.1-cp312-cp312-win32.whl", hash = "sha256:d09c333d36c1409d56a9d29b3a1b800a42c76a57a5a8907eacdbce3f18768246"}, {file = "propcache-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:c214999039d4f2a5b2073ac506bba279945233da8c786e490d411dfc30f855c1"}, {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aca405706e0b0a44cc6bfd41fbe89919a6a56999157f6de7e182a990c36e37bc"}, {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:12d1083f001ace206fe34b6bdc2cb94be66d57a850866f0b908972f90996b3e9"}, {file = "propcache-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d93f3307ad32a27bda2e88ec81134b823c240aa3abb55821a8da553eed8d9439"}, {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba278acf14471d36316159c94a802933d10b6a1e117b8554fe0d0d9b75c9d536"}, {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e6281aedfca15301c41f74d7005e6e3f4ca143584ba696ac69df4f02f40d629"}, {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b750a8e5a1262434fb1517ddf64b5de58327f1adc3524a5e44c2ca43305eb0b"}, {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf72af5e0fb40e9babf594308911436c8efde3cb5e75b6f206c34ad18be5c052"}, {file = "propcache-0.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2d0a12018b04f4cb820781ec0dffb5f7c7c1d2a5cd22bff7fb055a2cb19ebce"}, {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e800776a79a5aabdb17dcc2346a7d66d0777e942e4cd251defeb084762ecd17d"}, {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4160d9283bd382fa6c0c2b5e017acc95bc183570cd70968b9202ad6d8fc48dce"}, {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:30b43e74f1359353341a7adb783c8f1b1c676367b011709f466f42fda2045e95"}, {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:58791550b27d5488b1bb52bc96328456095d96206a250d28d874fafe11b3dfaf"}, {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0f022d381747f0dfe27e99d928e31bc51a18b65bb9e481ae0af1380a6725dd1f"}, {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:297878dc9d0a334358f9b608b56d02e72899f3b8499fc6044133f0d319e2ec30"}, {file = "propcache-0.2.1-cp313-cp313-win32.whl", hash = "sha256:ddfab44e4489bd79bda09d84c430677fc7f0a4939a73d2bba3073036f487a0a6"}, {file = "propcache-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:556fc6c10989f19a179e4321e5d678db8eb2924131e64652a51fe83e4c3db0e1"}, {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6a9a8c34fb7bb609419a211e59da8887eeca40d300b5ea8e56af98f6fbbb1541"}, {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae1aa1cd222c6d205853b3013c69cd04515f9d6ab6de4b0603e2e1c33221303e"}, {file = "propcache-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:accb6150ce61c9c4b7738d45550806aa2b71c7668c6942f17b0ac182b6142fd4"}, {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eee736daafa7af6d0a2dc15cc75e05c64f37fc37bafef2e00d77c14171c2097"}, {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7a31fc1e1bd362874863fdeed71aed92d348f5336fd84f2197ba40c59f061bd"}, {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba4cfa1052819d16699e1d55d18c92b6e094d4517c41dd231a8b9f87b6fa681"}, {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f089118d584e859c62b3da0892b88a83d611c2033ac410e929cb6754eec0ed16"}, {file = "propcache-0.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:781e65134efaf88feb447e8c97a51772aa75e48b794352f94cb7ea717dedda0d"}, {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31f5af773530fd3c658b32b6bdc2d0838543de70eb9a2156c03e410f7b0d3aae"}, {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:a7a078f5d37bee6690959c813977da5291b24286e7b962e62a94cec31aa5188b"}, {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cea7daf9fc7ae6687cf1e2c049752f19f146fdc37c2cc376e7d0032cf4f25347"}, {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8b3489ff1ed1e8315674d0775dc7d2195fb13ca17b3808721b54dbe9fd020faf"}, {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9403db39be1393618dd80c746cb22ccda168efce239c73af13c3763ef56ffc04"}, {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5d97151bc92d2b2578ff7ce779cdb9174337390a535953cbb9452fb65164c587"}, {file = "propcache-0.2.1-cp39-cp39-win32.whl", hash = "sha256:9caac6b54914bdf41bcc91e7eb9147d331d29235a7c967c150ef5df6464fd1bb"}, {file = "propcache-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:92fc4500fcb33899b05ba73276dfb684a20d31caa567b7cb5252d48f896a91b1"}, {file = "propcache-0.2.1-py3-none-any.whl", hash = "sha256:52277518d6aae65536e9cea52d4e7fd2f7a66f4aa2d30ed3f2fcea620ace3c54"}, {file = "propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64"}, ] [[package]] name = "pylint" version = "3.3.4" description = "python code static checker" optional = false python-versions = ">=3.9.0" files = [ {file = "pylint-3.3.4-py3-none-any.whl", hash = "sha256:289e6a1eb27b453b08436478391a48cd53bb0efb824873f949e709350f3de018"}, {file = "pylint-3.3.4.tar.gz", hash = "sha256:74ae7a38b177e69a9b525d0794bd8183820bfa7eb68cc1bee6e8ed22a42be4ce"}, ] [package.dependencies] astroid = ">=3.3.8,<=3.4.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<7" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomlkit = ">=0.10.1" [package.extras] spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] [[package]] name = "pytest" version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, ] [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} iniconfig = "*" packaging = "*" pluggy = ">=1.5,<2" [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-asyncio" version = "0.25.3" description = "Pytest support for asyncio" optional = false python-versions = ">=3.9" files = [ {file = "pytest_asyncio-0.25.3-py3-none-any.whl", hash = "sha256:9e89518e0f9bd08928f97a3482fdc4e244df17529460bc038291ccaf8f85c7c3"}, {file = "pytest_asyncio-0.25.3.tar.gz", hash = "sha256:fc1da2cf9f125ada7e710b4ddad05518d4cee187ae9412e9ac9271003497f07a"}, ] [package.dependencies] pytest = ">=8.2,<9" [package.extras] docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"] testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] [[package]] name = "pytest-cov" version = "6.0.0" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" files = [ {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, ] [package.dependencies] coverage = {version = ">=7.5", extras = ["toml"]} pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "pyyaml" version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] name = "ruamel-yaml" version = "0.18.10" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" optional = false python-versions = ">=3.7" files = [ {file = "ruamel.yaml-0.18.10-py3-none-any.whl", hash = "sha256:30f22513ab2301b3d2b577adc121c6471f28734d3d9728581245f1e76468b4f1"}, {file = "ruamel.yaml-0.18.10.tar.gz", hash = "sha256:20c86ab29ac2153f80a428e1254a8adf686d3383df04490514ca3b79a362db58"}, ] [package.dependencies] "ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} [package.extras] docs = ["mercurial (>5.7)", "ryd"] jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] [[package]] name = "ruamel-yaml-clib" version = "0.2.12" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" optional = false python-versions = ">=3.9" files = [ {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28"}, {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6"}, {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e"}, {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e"}, {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52"}, {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642"}, {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2"}, {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3"}, {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4"}, {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb"}, {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632"}, {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d"}, {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c"}, {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd"}, {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31"}, {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680"}, {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d"}, {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5"}, {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4"}, {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a"}, {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475"}, {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef"}, {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6"}, {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf"}, {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1"}, {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01"}, {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6"}, {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3"}, {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987"}, {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45"}, {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519"}, {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7"}, {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285"}, {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed"}, {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7"}, {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12"}, {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b"}, {file = "ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f"}, ] [[package]] name = "ruff" version = "0.9.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ {file = "ruff-0.9.4-py3-none-linux_armv6l.whl", hash = "sha256:64e73d25b954f71ff100bb70f39f1ee09e880728efb4250c632ceed4e4cdf706"}, {file = "ruff-0.9.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6ce6743ed64d9afab4fafeaea70d3631b4d4b28b592db21a5c2d1f0ef52934bf"}, {file = "ruff-0.9.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:54499fb08408e32b57360f6f9de7157a5fec24ad79cb3f42ef2c3f3f728dfe2b"}, {file = "ruff-0.9.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37c892540108314a6f01f105040b5106aeb829fa5fb0561d2dcaf71485021137"}, {file = "ruff-0.9.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de9edf2ce4b9ddf43fd93e20ef635a900e25f622f87ed6e3047a664d0e8f810e"}, {file = "ruff-0.9.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87c90c32357c74f11deb7fbb065126d91771b207bf9bfaaee01277ca59b574ec"}, {file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56acd6c694da3695a7461cc55775f3a409c3815ac467279dfa126061d84b314b"}, {file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0c93e7d47ed951b9394cf352d6695b31498e68fd5782d6cbc282425655f687a"}, {file = "ruff-0.9.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d4c8772670aecf037d1bf7a07c39106574d143b26cfe5ed1787d2f31e800214"}, {file = "ruff-0.9.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfc5f1d7afeda8d5d37660eeca6d389b142d7f2b5a1ab659d9214ebd0e025231"}, {file = "ruff-0.9.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faa935fc00ae854d8b638c16a5f1ce881bc3f67446957dd6f2af440a5fc8526b"}, {file = "ruff-0.9.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a6c634fc6f5a0ceae1ab3e13c58183978185d131a29c425e4eaa9f40afe1e6d6"}, {file = "ruff-0.9.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:433dedf6ddfdec7f1ac7575ec1eb9844fa60c4c8c2f8887a070672b8d353d34c"}, {file = "ruff-0.9.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d612dbd0f3a919a8cc1d12037168bfa536862066808960e0cc901404b77968f0"}, {file = "ruff-0.9.4-py3-none-win32.whl", hash = "sha256:db1192ddda2200671f9ef61d9597fcef89d934f5d1705e571a93a67fb13a4402"}, {file = "ruff-0.9.4-py3-none-win_amd64.whl", hash = "sha256:05bebf4cdbe3ef75430d26c375773978950bbf4ee3c95ccb5448940dc092408e"}, {file = "ruff-0.9.4-py3-none-win_arm64.whl", hash = "sha256:585792f1e81509e38ac5123492f8875fbc36f3ede8185af0a26df348e5154f41"}, {file = "ruff-0.9.4.tar.gz", hash = "sha256:6907ee3529244bb0ed066683e075f09285b38dd5b4039370df6ff06041ca19e7"}, ] [[package]] name = "syrupy" version = "4.8.1" description = "Pytest Snapshot Test Utility" optional = false python-versions = ">=3.8.1" files = [ {file = "syrupy-4.8.1-py3-none-any.whl", hash = "sha256:274f97cbaf44175f5e478a2f3a53559d31f41c66c6bf28131695f94ac893ea00"}, {file = "syrupy-4.8.1.tar.gz", hash = "sha256:8da8c0311e6d92de0b15767768c6ab98982b7b4a4c67083c08fbac3fbad4d44c"}, ] [package.dependencies] pytest = ">=7.0.0,<9.0.0" [[package]] name = "tomlkit" version = "0.13.2" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" files = [ {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] [[package]] name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] name = "virtualenv" version = "20.29.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ {file = "virtualenv-20.29.1-py3-none-any.whl", hash = "sha256:4e4cb403c0b0da39e13b46b1b2476e505cb0046b25f242bee80f62bf990b2779"}, {file = "virtualenv-20.29.1.tar.gz", hash = "sha256:b8b8970138d32fb606192cb97f6cd4bb644fa486be9308fb9b63f81091b5dc35"}, ] [package.dependencies] distlib = ">=0.3.7,<1" filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<5" [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "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]] name = "yamllint" version = "1.35.1" description = "A linter for YAML files." optional = false python-versions = ">=3.8" files = [ {file = "yamllint-1.35.1-py3-none-any.whl", hash = "sha256:2e16e504bb129ff515b37823b472750b36b6de07963bd74b307341ef5ad8bdc3"}, {file = "yamllint-1.35.1.tar.gz", hash = "sha256:7a003809f88324fd2c877734f2d575ee7881dd9043360657cc8049c809eba6cd"}, ] [package.dependencies] pathspec = ">=0.5.3" pyyaml = "*" [package.extras] dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"] [[package]] name = "yarl" version = "1.18.3" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, {file = "yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed"}, {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde"}, {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b"}, {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5"}, {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc"}, {file = "yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd"}, {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990"}, {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db"}, {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62"}, {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760"}, {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b"}, {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690"}, {file = "yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6"}, {file = "yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8"}, {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069"}, {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193"}, {file = "yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889"}, {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8"}, {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca"}, {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8"}, {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae"}, {file = "yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3"}, {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb"}, {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e"}, {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59"}, {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d"}, {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e"}, {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a"}, {file = "yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1"}, {file = "yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5"}, {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50"}, {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576"}, {file = "yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640"}, {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2"}, {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75"}, {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512"}, {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba"}, {file = "yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb"}, {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272"}, {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6"}, {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e"}, {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb"}, {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393"}, {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285"}, {file = "yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2"}, {file = "yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"}, {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb"}, {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa"}, {file = "yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782"}, {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0"}, {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482"}, {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186"}, {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58"}, {file = "yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53"}, {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2"}, {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8"}, {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1"}, {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a"}, {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10"}, {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8"}, {file = "yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d"}, {file = "yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"}, {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04"}, {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719"}, {file = "yarl-1.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e"}, {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee"}, {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789"}, {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8"}, {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c"}, {file = "yarl-1.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5"}, {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1"}, {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24"}, {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318"}, {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985"}, {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910"}, {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1"}, {file = "yarl-1.18.3-cp39-cp39-win32.whl", hash = "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5"}, {file = "yarl-1.18.3-cp39-cp39-win_amd64.whl", hash = "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9"}, {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"}, {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"}, ] [package.dependencies] idna = ">=2.0" multidict = ">=4.0" propcache = ">=0.2.0" [metadata] lock-version = "2.0" python-versions = "^3.11" content-hash = "ce1ee7e3d2115594cd17c9ba1b59a417f6920888063786e45da43620ea2681c9" aioelectricitymaps-1.1.0/pyproject.toml000066400000000000000000000073641475061435500203430ustar00rootroot00000000000000[tool.poetry] name = "aioelectricitymaps" version = "0.0.0" description = "Async Python 3 wrapper for Electricity maps" authors = ["Jan-Philipp Benecke "] repository = "https://github.com/jpbede/aioelectricitymaps" license = "MIT License" readme = "README.md" packages = [ { include = "aioelectricitymaps" } ] classifiers = [ "Development Status :: 5 - Production/Stable", "Framework :: AsyncIO", "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", ] [tool.poetry.dependencies] python = "^3.11" aiohttp = ">=3.8.0" mashumaro = ">=3.11" orjson = ">=3.9.8" [tool.poetry.group.dev.dependencies] codespell = "2.4.1" covdefaults = "2.3.0" coverage = {version = "7.6.10", extras = ["toml"]} pylint = "3.3.4" pytest = "8.3.4" pytest-asyncio = "0.25.3" pytest-cov = "6.0.0" pre-commit = "==4.1.0" pre-commit-hooks = "5.0.0" mypy = "1.15.0" ruff = "0.9.4" syrupy = "4.8.1" yamllint = "1.35.1" aioresponses = "0.7.8" [tool.poetry.urls] "Bug Tracker" = "https://github.com/jpbede/aioelectricitymaps/issues" Changelog = "https://github.com/jpbede/aioelectricitymaps/releases" [tool.coverage.report] show_missing = true fail_under = 50 [tool.coverage.run] plugins = ["covdefaults"] source = ["aioelectricitymaps"] [tool.mypy] # Specify the target platform details in config, so your developers are # free to run mypy on Windows, Linux, or macOS and get consistent # results. platform = "linux" python_version = "3.11" # show error messages from unrelated files follow_imports = "normal" # suppress errors about unsatisfied imports ignore_missing_imports = true # be strict check_untyped_defs = true disallow_any_generics = true disallow_incomplete_defs = true disallow_subclassing_any = true disallow_untyped_calls = true disallow_untyped_decorators = true disallow_untyped_defs = true no_implicit_optional = true strict_optional = true warn_incomplete_stub = true warn_no_return = true warn_redundant_casts = true warn_return_any = true warn_unused_configs = true warn_unused_ignores = true [tool.pylint.MASTER] ignore = [ "tests", ] [tool.pylint.BASIC] good-names = [ "_", "ex", "fp", "i", "id", "j", "k", "on", "Run", "T", ] [tool.pylint.DESIGN] max-attributes = 8 [tool.pylint."MESSAGES CONTROL"] disable = [ "duplicate-code", "format", "unsubscriptable-object", "too-many-instance-attributes", "too-many-arguments", "too-many-public-methods", "too-few-public-methods", "wrong-import-order", ] [tool.pylint.SIMILARITIES] ignore-imports = true [tool.pylint.FORMAT] max-line-length = 88 [tool.pytest.ini_options] addopts = "--cov" asyncio_mode = "auto" [tool.ruff] target-version = "py311" [tool.ruff.lint] ignore = [ "ANN101", # Self... explanatory "ANN102", # cls... just as useless "ANN401", # Opinioated warning on disallowing dynamically typed expressions "D203", # Conflicts with other rules "D213", # Conflicts with other rules "D417", # False positives in some occasions "PLR2004", # Just annoying, not really useful "PLR0913", # Too many arguments "COM812", # avoid conflicts "COM819", # avoid conflicts "ISC001", # avoid conflicts "ISC002", # avoid conflicts ] select = ["ALL"] [tool.ruff.lint.flake8-pytest-style] fixture-parentheses = false mark-parentheses = false [tool.ruff.lint.isort] known-first-party = ["aioelectricitymaps"] force-sort-within-sections = true split-on-trailing-comma = false combine-as-imports = true [tool.ruff.lint.mccabe] max-complexity = 25 [build-system] build-backend = "poetry.core.masonry.api" requires = ["poetry-core>=1.0.0"] aioelectricitymaps-1.1.0/tests/000077500000000000000000000000001475061435500165575ustar00rootroot00000000000000aioelectricitymaps-1.1.0/tests/__init__.py000066400000000000000000000003201475061435500206630ustar00rootroot00000000000000"""Helpers for the tests.""" from pathlib import Path def load_fixture(filename: str) -> str: """Load a fixture.""" path = Path(__file__).parent / "fixtures" / filename return path.read_text() aioelectricitymaps-1.1.0/tests/__snapshots__/000077500000000000000000000000001475061435500213755ustar00rootroot00000000000000aioelectricitymaps-1.1.0/tests/__snapshots__/test_electricitymaps.ambr000066400000000000000000002011211475061435500264750ustar00rootroot00000000000000# serializer version: 1 # name: test_carbon_intensity_by_coordinates HomeAssistantCarbonIntensityResponse(status='ok', country_code='DE', data=HomeAssistantCarbonIntensityData(carbon_intensity=474.0, fossil_fuel_percentage=42.22), units=HomeAssistantCarbonIntensityUnit(carbon_intensity='gCO2eq/kWh')) # --- # name: test_carbon_intensity_history CarbonIntensityHistory(zone='DE', history=[CarbonIntensity(carbon_intensity=599, timestamp=datetime.datetime(2024, 3, 5, 20, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 15, 48, 54, 12000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=607, timestamp=datetime.datetime(2024, 3, 5, 21, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 11, 49, 4, 367000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=599, timestamp=datetime.datetime(2024, 3, 5, 22, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 12, 52, 3, 415000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=606, timestamp=datetime.datetime(2024, 3, 5, 23, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 7, 47, 41, 274000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=623, timestamp=datetime.datetime(2024, 3, 6, 0, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 7, 47, 41, 274000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=636, timestamp=datetime.datetime(2024, 3, 6, 1, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 7, 47, 34, 335000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=628, timestamp=datetime.datetime(2024, 3, 6, 2, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 9, 50, 45, 588000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=633, timestamp=datetime.datetime(2024, 3, 6, 3, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 9, 50, 45, 588000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=641, timestamp=datetime.datetime(2024, 3, 6, 4, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 10, 47, 36, 210000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=635, timestamp=datetime.datetime(2024, 3, 6, 5, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 10, 47, 39, 50000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=632, timestamp=datetime.datetime(2024, 3, 6, 6, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 13, 51, 49, 605000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=616, timestamp=datetime.datetime(2024, 3, 6, 7, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 10, 50, 911000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=583, timestamp=datetime.datetime(2024, 3, 6, 8, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 47, 22, 104000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=541, timestamp=datetime.datetime(2024, 3, 6, 9, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 47, 22, 104000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=511, timestamp=datetime.datetime(2024, 3, 6, 10, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 47, 22, 104000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=492, timestamp=datetime.datetime(2024, 3, 6, 11, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=503, timestamp=datetime.datetime(2024, 3, 6, 12, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=526, timestamp=datetime.datetime(2024, 3, 6, 13, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 7, 43000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=563, timestamp=datetime.datetime(2024, 3, 6, 14, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 47, 22, 104000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=613, timestamp=datetime.datetime(2024, 3, 6, 15, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=627, timestamp=datetime.datetime(2024, 3, 6, 16, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 7, 43000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=633, timestamp=datetime.datetime(2024, 3, 6, 17, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 7, 43000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=False, estimation_method='None'), CarbonIntensity(carbon_intensity=663, timestamp=datetime.datetime(2024, 3, 6, 18, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 7, 43000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=True, estimation_method='TIME_SLICER_AVERAGE'), CarbonIntensity(carbon_intensity=689, timestamp=datetime.datetime(2024, 3, 6, 19, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=True, estimation_method='TIME_SLICER_AVERAGE')]) # --- # name: test_json_request_without_session HomeAssistantCarbonIntensityResponse(status='ok', country_code='DE', data=HomeAssistantCarbonIntensityData(carbon_intensity=474.0, fossil_fuel_percentage=42.22), units=HomeAssistantCarbonIntensityUnit(carbon_intensity='gCO2eq/kWh')) # --- # name: test_latest_carbon_intensity LatestCarbonIntensity(carbon_intensity=216, timestamp=datetime.datetime(2024, 3, 6, 19, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), emission_factor_type='lifecycle', is_estimated=True, estimation_method='TIME_SLICER_AVERAGE', zone='US-CAR-DUK') # --- # name: test_latest_power_breakdown LatestPowerBreakdown(time=datetime.datetime(2024, 3, 6, 19, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 19, 46, 59, 534000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 440, 'geothermal': 21, 'biomass': 5896, 'coal': 23893, 'wind': 6998, 'solar': 0, 'hydro': 2870, 'gas': 10334, 'oil': 339, 'unknown': 403, 'hydro discharge': 1706, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5408, 'coal': 23339, 'wind': 6415, 'solar': 0, 'hydro': 1671, 'gas': 9602, 'oil': 304, 'unknown': 313, 'hydro discharge': 1496, 'battery discharge': None}, power_import_breakdown={'AT': 244, 'BE': 901, 'CH': 1344, 'LU': 0, 'NL': 0, 'DK-DK1': 1473, 'DK-DK2': 619, 'NO-NO2': 1217}, power_export_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'LU': 752, 'NL': 715, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0}, fossil_free_percentage=34, renewable_percentage=33, power_consumption_total=52901, power_production_total=48570, power_import_total=5798, power_export_total=1467, is_estimated=True, estimation_method='TIME_SLICER_AVERAGE', zone='DE') # --- # name: test_power_breakdown_history PowerBreakdownHistory(zone='DE', history=[PowerBreakdown(time=datetime.datetime(2024, 3, 5, 20, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 15, 48, 54, 12000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 2, 20, 47, 49, 346000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 819, 'geothermal': 19, 'biomass': 5117, 'coal': 21057, 'wind': 12635, 'solar': 0, 'hydro': 3133, 'gas': 9511, 'oil': 353, 'unknown': 365, 'hydro discharge': 869, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5360, 'coal': 22506, 'wind': 12590, 'solar': 0, 'hydro': 1634, 'gas': 10192, 'oil': 354, 'unknown': 335, 'hydro discharge': 845, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 0, 'CH': 28, 'CZ': 783, 'FR': 643, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1589, 'DK-DK2': 660, 'NO-NO2': 1113, 'SE-SE4': 426}, power_export_breakdown={'AT': 269, 'BE': 794, 'CH': 0, 'CZ': 0, 'FR': 0, 'LU': 587, 'NL': 1847, 'PL': 1703, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=42, renewable_percentage=41, power_consumption_total=53879, power_production_total=53837, power_import_total=5242, power_export_total=5200, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 5, 21, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 11, 49, 4, 367000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 2, 21, 48, 36, 543000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 684, 'geothermal': 19, 'biomass': 5033, 'coal': 20493, 'wind': 11880, 'solar': 0, 'hydro': 3076, 'gas': 8709, 'oil': 342, 'unknown': 352, 'hydro discharge': 259, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5334, 'coal': 22126, 'wind': 11866, 'solar': 0, 'hydro': 1645, 'gas': 9460, 'oil': 353, 'unknown': 335, 'hydro discharge': 20, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 710, 'FR': 449, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1523, 'DK-DK2': 679, 'NO-NO2': 1160, 'SE-SE4': 440}, power_export_breakdown={'AT': 322, 'BE': 698, 'CH': 407, 'CZ': 0, 'FR': 0, 'LU': 575, 'NL': 1731, 'PL': 1540, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=41, renewable_percentage=40, power_consumption_total=50847, power_production_total=51159, power_import_total=4961, power_export_total=5273, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 5, 22, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 12, 52, 3, 415000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 2, 22, 50, 50, 836000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 874, 'geothermal': 18, 'biomass': 4873, 'coal': 19104, 'wind': 11248, 'solar': 0, 'hydro': 3051, 'gas': 7437, 'oil': 331, 'unknown': 325, 'hydro discharge': 81, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5323, 'coal': 21288, 'wind': 11449, 'solar': 0, 'hydro': 1622, 'gas': 8297, 'oil': 353, 'unknown': 318, 'hydro discharge': -1219, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 724, 'FR': 806, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1796, 'DK-DK2': 698, 'NO-NO2': 1172, 'SE-SE4': 451}, power_export_breakdown={'AT': 554, 'BE': 843, 'CH': 1058, 'CZ': 0, 'FR': 0, 'LU': 476, 'NL': 1255, 'PL': 1569, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=43, renewable_percentage=41, power_consumption_total=47343, power_production_total=48670, power_import_total=5647, power_export_total=5755, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 5, 23, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 7, 47, 41, 274000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 2, 23, 50, 24, 971000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 688, 'geothermal': 18, 'biomass': 4838, 'coal': 17997, 'wind': 9681, 'solar': 0, 'hydro': 3227, 'gas': 7015, 'oil': 322, 'unknown': 320, 'hydro discharge': 85, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5323, 'coal': 20059, 'wind': 9921, 'solar': 0, 'hydro': 1685, 'gas': 7992, 'oil': 349, 'unknown': 309, 'hydro discharge': -2132, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 1061, 'FR': 186, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1779, 'DK-DK2': 793, 'NO-NO2': 1391, 'SE-SE4': 473}, power_export_breakdown={'AT': 414, 'BE': 582, 'CH': 1074, 'CZ': 0, 'FR': 0, 'LU': 542, 'NL': 822, 'PL': 1583, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=42, renewable_percentage=41, power_consumption_total=44191, power_production_total=45657, power_import_total=5683, power_export_total=5016, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 0, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 7, 47, 41, 274000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 0, 49, 13, 137000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 722, 'geothermal': 18, 'biomass': 4798, 'coal': 17724, 'wind': 8160, 'solar': 0, 'hydro': 3220, 'gas': 6829, 'oil': 322, 'unknown': 332, 'hydro discharge': 80, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5263, 'coal': 19579, 'wind': 8371, 'solar': 0, 'hydro': 1658, 'gas': 7796, 'oil': 350, 'unknown': 308, 'hydro discharge': -2218, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 1327, 'FR': 0, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1557, 'DK-DK2': 852, 'NO-NO2': 1403, 'SE-SE4': 483}, power_export_breakdown={'AT': 272, 'BE': 752, 'CH': 983, 'CZ': 0, 'FR': 96, 'LU': 433, 'NL': 786, 'PL': 1225, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=40, renewable_percentage=39, power_consumption_total=42204, power_production_total=43346, power_import_total=5622, power_export_total=4546, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 1, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 7, 47, 34, 335000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 1, 48, 52, 124000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 811, 'geothermal': 18, 'biomass': 4830, 'coal': 17653, 'wind': 7208, 'solar': 0, 'hydro': 3153, 'gas': 6979, 'oil': 319, 'unknown': 333, 'hydro discharge': 79, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5332, 'coal': 19516, 'wind': 7448, 'solar': 0, 'hydro': 1626, 'gas': 8028, 'oil': 351, 'unknown': 308, 'hydro discharge': -2850, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 1572, 'FR': 0, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1274, 'DK-DK2': 886, 'NO-NO2': 1403, 'SE-SE4': 492}, power_export_breakdown={'AT': 150, 'BE': 790, 'CH': 1032, 'CZ': 0, 'FR': 142, 'LU': 377, 'NL': 500, 'PL': 1033, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=39, renewable_percentage=37, power_consumption_total=41382, power_production_total=42630, power_import_total=5627, power_export_total=4024, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 2, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 9, 50, 45, 588000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 2, 49, 7, 889000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1331, 'geothermal': 18, 'biomass': 4915, 'coal': 17522, 'wind': 6822, 'solar': 0, 'hydro': 3335, 'gas': 7133, 'oil': 323, 'unknown': 337, 'hydro discharge': 83, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5348, 'coal': 19207, 'wind': 6861, 'solar': 0, 'hydro': 1606, 'gas': 8053, 'oil': 350, 'unknown': 308, 'hydro discharge': -4073, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 1549, 'FR': 846, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1439, 'DK-DK2': 896, 'NO-NO2': 1403, 'SE-SE4': 497}, power_export_breakdown={'AT': 65, 'BE': 228, 'CH': 733, 'CZ': 0, 'FR': 0, 'LU': 261, 'NL': 114, 'PL': 1092, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=40, renewable_percentage=36, power_consumption_total=41818, power_production_total=41754, power_import_total=6630, power_export_total=2493, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 3, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 9, 50, 45, 588000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 3, 49, 51, 731000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1487, 'geothermal': 18, 'biomass': 5031, 'coal': 18072, 'wind': 6563, 'solar': 0, 'hydro': 3451, 'gas': 7649, 'oil': 336, 'unknown': 354, 'hydro discharge': 94, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5381, 'coal': 19634, 'wind': 6512, 'solar': 0, 'hydro': 1621, 'gas': 8262, 'oil': 351, 'unknown': 312, 'hydro discharge': -3599, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 1156, 'FR': 1257, 'LU': 0, 'NL': 356, 'PL': 0, 'DK-DK1': 1333, 'DK-DK2': 810, 'NO-NO2': 1403, 'SE-SE4': 500}, power_export_breakdown={'AT': 98, 'BE': 135, 'CH': 323, 'CZ': 0, 'FR': 0, 'LU': 250, 'NL': 0, 'PL': 1449, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=39, renewable_percentage=35, power_consumption_total=43056, power_production_total=42094, power_import_total=6815, power_export_total=2255, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 4, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 10, 47, 36, 210000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 4, 46, 28, 650000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1384, 'geothermal': 19, 'biomass': 5242, 'coal': 19979, 'wind': 7080, 'solar': 0, 'hydro': 3793, 'gas': 8643, 'oil': 358, 'unknown': 404, 'hydro discharge': 107, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5359, 'coal': 21115, 'wind': 6629, 'solar': 0, 'hydro': 1655, 'gas': 8745, 'oil': 352, 'unknown': 334, 'hydro discharge': -1054, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 160, 'CH': 0, 'CZ': 462, 'FR': 1339, 'LU': 0, 'NL': 506, 'PL': 0, 'DK-DK1': 1896, 'DK-DK2': 675, 'NO-NO2': 1403, 'SE-SE4': 503}, power_export_breakdown={'AT': 688, 'BE': 0, 'CH': 518, 'CZ': 0, 'FR': 0, 'LU': 324, 'NL': 0, 'PL': 1559, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=38, renewable_percentage=35, power_consumption_total=47009, power_production_total=44209, power_import_total=6944, power_export_total=3089, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 5, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 10, 47, 39, 50000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 5, 48, 52, 206000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 2093, 'geothermal': 20, 'biomass': 5635, 'coal': 22483, 'wind': 7151, 'solar': 37, 'hydro': 4506, 'gas': 10487, 'oil': 387, 'unknown': 491, 'hydro discharge': 990, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5351, 'coal': 22776, 'wind': 6376, 'solar': 39, 'hydro': 1707, 'gas': 9619, 'oil': 352, 'unknown': 334, 'hydro discharge': 473, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 372, 'CH': 782, 'CZ': 233, 'FR': 2058, 'LU': 0, 'NL': 1055, 'PL': 0, 'DK-DK1': 2283, 'DK-DK2': 667, 'NO-NO2': 1383, 'SE-SE4': 506}, power_export_breakdown={'AT': 74, 'BE': 0, 'CH': 0, 'CZ': 0, 'FR': 0, 'LU': 428, 'NL': 0, 'PL': 1607, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=38, renewable_percentage=34, power_consumption_total=54278, power_production_total=47048, power_import_total=9339, power_export_total=2109, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 6, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 13, 51, 49, 605000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 6, 49, 9, 893000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1771, 'geothermal': 20, 'biomass': 5533, 'coal': 23785, 'wind': 6729, 'solar': 1317, 'hydro': 4156, 'gas': 10239, 'oil': 369, 'unknown': 461, 'hydro discharge': 5122, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5309, 'coal': 23518, 'wind': 6111, 'solar': 1325, 'hydro': 1736, 'gas': 9843, 'oil': 351, 'unknown': 334, 'hydro discharge': 4795, 'battery discharge': None}, power_import_breakdown={'AT': 614, 'BE': 0, 'CH': 922, 'CZ': 1461, 'FR': 1408, 'LU': 0, 'NL': 160, 'PL': 0, 'DK-DK1': 2062, 'DK-DK2': 388, 'NO-NO2': 833, 'SE-SE4': 338}, power_export_breakdown={'AT': 0, 'BE': 487, 'CH': 0, 'CZ': 0, 'FR': 0, 'LU': 530, 'NL': 0, 'PL': 1004, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=42, renewable_percentage=39, power_consumption_total=59505, power_production_total=53342, power_import_total=8184, power_export_total=2021, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 7, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 10, 50, 911000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 7, 49, 19, 45000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1773, 'geothermal': 20, 'biomass': 5457, 'coal': 24167, 'wind': 5676, 'solar': 5404, 'hydro': 3604, 'gas': 10035, 'oil': 442, 'unknown': 441, 'hydro discharge': 4319, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5264, 'coal': 23613, 'wind': 5249, 'solar': 5279, 'hydro': 1685, 'gas': 9724, 'oil': 436, 'unknown': 334, 'hydro discharge': 3899, 'battery discharge': None}, power_import_breakdown={'AT': 1117, 'BE': 0, 'CH': 935, 'CZ': 2238, 'FR': 1093, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1346, 'DK-DK2': 259, 'NO-NO2': 391, 'SE-SE4': 218}, power_export_breakdown={'AT': 0, 'BE': 189, 'CH': 0, 'CZ': 0, 'FR': 0, 'LU': 609, 'NL': 445, 'PL': 518, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=43, renewable_percentage=40, power_consumption_total=61339, power_production_total=55503, power_import_total=7596, power_export_total=1760, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 8, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 47, 22, 104000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 8, 48, 25, 598000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1624, 'geothermal': 20, 'biomass': 5226, 'coal': 23467, 'wind': 4854, 'solar': 10382, 'hydro': 3699, 'gas': 9934, 'oil': 392, 'unknown': 438, 'hydro discharge': 1325, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5194, 'coal': 23487, 'wind': 4554, 'solar': 10383, 'hydro': 1666, 'gas': 9803, 'oil': 394, 'unknown': 334, 'hydro discharge': 682, 'battery discharge': None}, power_import_breakdown={'AT': 1088, 'BE': 212, 'CH': 565, 'CZ': 2149, 'FR': 851, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1020, 'DK-DK2': 297, 'NO-NO2': 904, 'SE-SE4': 481}, power_export_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 0, 'FR': 0, 'LU': 577, 'NL': 1269, 'PL': 878, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=44, renewable_percentage=42, power_consumption_total=61361, power_production_total=56518, power_import_total=7566, power_export_total=2723, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 9, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 47, 22, 104000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 9, 50, 35, 125000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1458, 'geothermal': 20, 'biomass': 5155, 'coal': 22328, 'wind': 4540, 'solar': 14770, 'hydro': 3896, 'gas': 9096, 'oil': 356, 'unknown': 392, 'hydro discharge': 127, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5170, 'coal': 22236, 'wind': 4198, 'solar': 14880, 'hydro': 1702, 'gas': 9066, 'oil': 353, 'unknown': 330, 'hydro discharge': -553, 'battery discharge': None}, power_import_breakdown={'AT': 582, 'BE': 0, 'CH': 0, 'CZ': 2011, 'FR': 948, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1572, 'DK-DK2': 170, 'NO-NO2': 1375, 'SE-SE4': 509}, power_export_breakdown={'AT': 0, 'BE': 234, 'CH': 138, 'CZ': 0, 'FR': 0, 'LU': 398, 'NL': 381, 'PL': 1282, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=48, renewable_percentage=46, power_consumption_total=62137, power_production_total=57955, power_import_total=7168, power_export_total=2432, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 10, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 47, 22, 104000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 10, 50, 32, 247000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1238, 'geothermal': 20, 'biomass': 5182, 'coal': 21020, 'wind': 4216, 'solar': 17403, 'hydro': 3742, 'gas': 8338, 'oil': 363, 'unknown': 363, 'hydro discharge': 160, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5135, 'coal': 20875, 'wind': 3900, 'solar': 17277, 'hydro': 1678, 'gas': 8230, 'oil': 352, 'unknown': 281, 'hydro discharge': 7, 'battery discharge': None}, power_import_breakdown={'AT': 270, 'BE': 0, 'CH': 0, 'CZ': 1794, 'FR': 614, 'LU': 0, 'NL': 631, 'PL': 0, 'DK-DK1': 1266, 'DK-DK2': 406, 'NO-NO2': 1403, 'SE-SE4': 510}, power_export_breakdown={'AT': 0, 'BE': 359, 'CH': 435, 'CZ': 0, 'FR': 0, 'LU': 364, 'NL': 0, 'PL': 1446, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=52, renewable_percentage=50, power_consumption_total=62045, power_production_total=57756, power_import_total=6894, power_export_total=2604, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 11, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 11, 47, 35, 958000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1539, 'geothermal': 19, 'biomass': 5103, 'coal': 19623, 'wind': 3894, 'solar': 17835, 'hydro': 3763, 'gas': 7941, 'oil': 365, 'unknown': 349, 'hydro discharge': 89, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5150, 'coal': 20157, 'wind': 3650, 'solar': 17685, 'hydro': 1694, 'gas': 7723, 'oil': 352, 'unknown': 260, 'hydro discharge': -2493, 'battery discharge': None}, power_import_breakdown={'AT': 335, 'BE': 0, 'CH': 0, 'CZ': 1542, 'FR': 1285, 'LU': 0, 'NL': 1850, 'PL': 0, 'DK-DK1': 1470, 'DK-DK2': 586, 'NO-NO2': 1346, 'SE-SE4': 510}, power_export_breakdown={'AT': 0, 'BE': 215, 'CH': 454, 'CZ': 0, 'FR': 0, 'LU': 285, 'NL': 0, 'PL': 1648, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=53, renewable_percentage=51, power_consumption_total=60519, power_production_total=56691, power_import_total=8923, power_export_total=2602, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 12, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 12, 49, 55, 906000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1777, 'geothermal': 19, 'biomass': 5108, 'coal': 19724, 'wind': 3776, 'solar': 16830, 'hydro': 3525, 'gas': 8166, 'oil': 360, 'unknown': 335, 'hydro discharge': 77, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5179, 'coal': 20338, 'wind': 3624, 'solar': 16578, 'hydro': 1768, 'gas': 7953, 'oil': 353, 'unknown': 259, 'hydro discharge': -1999, 'battery discharge': None}, power_import_breakdown={'AT': 154, 'BE': 520, 'CH': 0, 'CZ': 1392, 'FR': 1713, 'LU': 0, 'NL': 1486, 'PL': 0, 'DK-DK1': 647, 'DK-DK2': 669, 'NO-NO2': 1341, 'SE-SE4': 334}, power_export_breakdown={'AT': 0, 'BE': 0, 'CH': 379, 'CZ': 0, 'FR': 0, 'LU': 420, 'NL': 0, 'PL': 1832, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=52, renewable_percentage=49, power_consumption_total=59697, power_production_total=56072, power_import_total=8256, power_export_total=2632, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 13, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 7, 43000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 13, 48, 7, 412000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 1889, 'geothermal': 20, 'biomass': 5266, 'coal': 20418, 'wind': 3646, 'solar': 14500, 'hydro': 3838, 'gas': 8385, 'oil': 369, 'unknown': 348, 'hydro discharge': 86, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5222, 'coal': 20819, 'wind': 3388, 'solar': 13919, 'hydro': 1739, 'gas': 7961, 'oil': 352, 'unknown': 259, 'hydro discharge': -989, 'battery discharge': None}, power_import_breakdown={'AT': 55, 'BE': 614, 'CH': 0, 'CZ': 1026, 'FR': 1909, 'LU': 0, 'NL': 1359, 'PL': 0, 'DK-DK1': 1239, 'DK-DK2': 698, 'NO-NO2': 1400, 'SE-SE4': 282}, power_export_breakdown={'AT': 0, 'BE': 0, 'CH': 224, 'CZ': 0, 'FR': 0, 'LU': 468, 'NL': 0, 'PL': 1815, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=50, renewable_percentage=47, power_consumption_total=58765, power_production_total=53679, power_import_total=8581, power_export_total=2507, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 14, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 17, 47, 22, 104000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 14, 50, 33, 346000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 2165, 'geothermal': 20, 'biomass': 5441, 'coal': 21576, 'wind': 3998, 'solar': 10530, 'hydro': 4061, 'gas': 9184, 'oil': 381, 'unknown': 346, 'hydro discharge': 401, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5292, 'coal': 21854, 'wind': 3723, 'solar': 9667, 'hydro': 1746, 'gas': 8583, 'oil': 353, 'unknown': 260, 'hydro discharge': 70, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 0, 'CH': 281, 'CZ': 614, 'FR': 2655, 'LU': 0, 'NL': 1830, 'PL': 0, 'DK-DK1': 1332, 'DK-DK2': 694, 'NO-NO2': 1403, 'SE-SE4': 187}, power_export_breakdown={'AT': 137, 'BE': 159, 'CH': 0, 'CZ': 0, 'FR': 0, 'LU': 373, 'NL': 0, 'PL': 1791, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=46, renewable_percentage=42, power_consumption_total=58104, power_production_total=51567, power_import_total=8996, power_export_total=2460, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 15, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 15, 48, 4, 95000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 2316, 'geothermal': 20, 'biomass': 5538, 'coal': 23004, 'wind': 4803, 'solar': 5287, 'hydro': 4294, 'gas': 10068, 'oil': 374, 'unknown': 387, 'hydro discharge': 1258, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5358, 'coal': 23434, 'wind': 4448, 'solar': 4792, 'hydro': 1749, 'gas': 9458, 'oil': 353, 'unknown': 278, 'hydro discharge': 1056, 'battery discharge': None}, power_import_breakdown={'AT': 0, 'BE': 822, 'CH': 476, 'CZ': 403, 'FR': 2494, 'LU': 0, 'NL': 134, 'PL': 0, 'DK-DK1': 2125, 'DK-DK2': 709, 'NO-NO2': 1403, 'SE-SE4': 107}, power_export_breakdown={'AT': 17, 'BE': 0, 'CH': 0, 'CZ': 0, 'FR': 0, 'LU': 566, 'NL': 0, 'PL': 1686, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=41, renewable_percentage=37, power_consumption_total=57349, power_production_total=50946, power_import_total=8671, power_export_total=2269, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 16, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 7, 43000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 16, 49, 37, 71000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 2600, 'geothermal': 20, 'biomass': 5647, 'coal': 23421, 'wind': 5647, 'solar': 1481, 'hydro': 4696, 'gas': 10478, 'oil': 370, 'unknown': 467, 'hydro discharge': 3771, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5419, 'coal': 23953, 'wind': 5354, 'solar': 1108, 'hydro': 1733, 'gas': 9760, 'oil': 354, 'unknown': 301, 'hydro discharge': 3388, 'battery discharge': None}, power_import_breakdown={'AT': 433, 'BE': 859, 'CH': 1612, 'CZ': 475, 'FR': 2552, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 2126, 'DK-DK2': 569, 'NO-NO2': 1397, 'SE-SE4': 16}, power_export_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 0, 'FR': 0, 'LU': 599, 'NL': 634, 'PL': 1598, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=41, renewable_percentage=36, power_consumption_total=58598, power_production_total=51390, power_import_total=10039, power_export_total=2831, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 17, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 7, 43000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 17, 50, 57, 878000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 2497, 'geothermal': 20, 'biomass': 5626, 'coal': 23369, 'wind': 6276, 'solar': 219, 'hydro': 4349, 'gas': 10630, 'oil': 367, 'unknown': 482, 'hydro discharge': 4998, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5440, 'coal': 24032, 'wind': 6090, 'solar': 79, 'hydro': 1733, 'gas': 9980, 'oil': 355, 'unknown': 315, 'hydro discharge': 4663, 'battery discharge': None}, power_import_breakdown={'AT': 308, 'BE': 961, 'CH': 1394, 'CZ': 418, 'FR': 2552, 'LU': 0, 'NL': 0, 'PL': 0, 'DK-DK1': 1651, 'DK-DK2': 566, 'NO-NO2': 1228, 'SE-SE4': 16}, power_export_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 0, 'FR': 0, 'LU': 708, 'NL': 664, 'PL': 1598, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0, 'SE-SE4': 0}, fossil_free_percentage=41, renewable_percentage=37, power_consumption_total=58831, power_production_total=52708, power_import_total=9093, power_export_total=2970, is_estimated=False, estimation_method='None'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 18, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 7, 43000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 18, 47, 52, 886000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 787, 'geothermal': 20, 'biomass': 5820, 'coal': 23998, 'wind': 6486, 'solar': 0, 'hydro': 3938, 'gas': 10531, 'oil': 379, 'unknown': 451, 'hydro discharge': 4967, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5440, 'coal': 24032, 'wind': 6090, 'solar': 0, 'hydro': 1733, 'gas': 9980, 'oil': 355, 'unknown': 315, 'hydro discharge': 4663, 'battery discharge': None}, power_import_breakdown={'AT': 244, 'BE': 901, 'CH': 1344, 'CZ': 418, 'LU': 0, 'NL': 0, 'DK-DK1': 1473, 'DK-DK2': 619, 'NO-NO2': 1217}, power_export_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'CZ': 0, 'LU': 752, 'NL': 715, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0}, fossil_free_percentage=38, renewable_percentage=37, power_consumption_total=57378, power_production_total=52629, power_import_total=6216, power_export_total=1467, is_estimated=True, estimation_method='TIME_SLICER_AVERAGE'), PowerBreakdown(time=datetime.datetime(2024, 3, 6, 19, 0, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 3, 6, 18, 48, 27, 926000, tzinfo=datetime.timezone.utc), created_at=datetime.datetime(2024, 3, 3, 19, 46, 59, 534000, tzinfo=datetime.timezone.utc), power_consumption_breakdown={'nuclear': 440, 'geothermal': 21, 'biomass': 5896, 'coal': 23893, 'wind': 6998, 'solar': 0, 'hydro': 2870, 'gas': 10334, 'oil': 339, 'unknown': 403, 'hydro discharge': 1706, 'battery discharge': 0}, power_production_breakdown={'nuclear': None, 'geothermal': 21, 'biomass': 5408, 'coal': 23339, 'wind': 6415, 'solar': 0, 'hydro': 1671, 'gas': 9602, 'oil': 304, 'unknown': 313, 'hydro discharge': 1496, 'battery discharge': None}, power_import_breakdown={'AT': 244, 'BE': 901, 'CH': 1344, 'LU': 0, 'NL': 0, 'DK-DK1': 1473, 'DK-DK2': 619, 'NO-NO2': 1217}, power_export_breakdown={'AT': 0, 'BE': 0, 'CH': 0, 'LU': 752, 'NL': 715, 'DK-DK1': 0, 'DK-DK2': 0, 'NO-NO2': 0}, fossil_free_percentage=34, renewable_percentage=33, power_consumption_total=52901, power_production_total=48570, power_import_total=5798, power_export_total=1467, is_estimated=True, estimation_method='TIME_SLICER_AVERAGE')]) # --- # name: test_zones_request dict({ 'AD': Zone(zone_name='Andorra', country_name=None), 'AE': Zone(zone_name='United Arab Emirates', country_name=None), 'AF': Zone(zone_name='Afghanistan', country_name=None), 'AG': Zone(zone_name='Antigua and Barbuda', country_name=None), 'AL': Zone(zone_name='Albania', country_name=None), 'AM': Zone(zone_name='Armenia', country_name=None), 'AO': Zone(zone_name='Angola', country_name=None), 'AR': Zone(zone_name='Argentina', country_name=None), 'AT': Zone(zone_name='Austria', country_name=None), 'AU': Zone(zone_name='Australia', country_name=None), 'AU-LH': Zone(zone_name='Lord Howe Island', country_name='Australia'), 'AU-NSW': Zone(zone_name='New South Wales', country_name='Australia'), 'AU-NT': Zone(zone_name='Northern Territory', country_name='Australia'), 'AU-QLD': Zone(zone_name='Queensland', country_name='Australia'), 'AU-SA': Zone(zone_name='South Australia', country_name='Australia'), 'AU-TAS': Zone(zone_name='Tasmania', country_name='Australia'), 'AU-TAS-CBI': Zone(zone_name='Cape Barren Island', country_name='Australia'), 'AU-TAS-FI': Zone(zone_name='Flinders Island', country_name='Australia'), 'AU-TAS-KI': Zone(zone_name='King Island', country_name='Australia'), 'AU-VIC': Zone(zone_name='Victoria', country_name='Australia'), 'AU-WA': Zone(zone_name='Western Australia', country_name='Australia'), 'AU-WA-RI': Zone(zone_name='Rottnest Island', country_name='Australia'), 'AW': Zone(zone_name='Aruba', country_name=None), 'AX': Zone(zone_name='ร…land Islands', country_name=None), 'AZ': Zone(zone_name='Azerbaijan', country_name=None), 'BA': Zone(zone_name='Bosnia and Herzegovina', country_name=None), 'BB': Zone(zone_name='Barbados', country_name=None), 'BD': Zone(zone_name='Bangladesh', country_name=None), 'BE': Zone(zone_name='Belgium', country_name=None), 'BF': Zone(zone_name='Burkina Faso', country_name=None), 'BG': Zone(zone_name='Bulgaria', country_name=None), 'BH': Zone(zone_name='Bahrain', country_name=None), 'BI': Zone(zone_name='Burundi', country_name=None), 'BJ': Zone(zone_name='Benin', country_name=None), 'BN': Zone(zone_name='Brunei', country_name=None), 'BO': Zone(zone_name='Bolivia', country_name=None), 'BR': Zone(zone_name='Brazil', country_name=None), 'BR-CS': Zone(zone_name='Central Brazil', country_name='Brazil'), 'BR-N': Zone(zone_name='North Brazil', country_name='Brazil'), 'BR-NE': Zone(zone_name='North-East Brazil', country_name='Brazil'), 'BR-S': Zone(zone_name='South Brazil', country_name='Brazil'), 'BS': Zone(zone_name='Bahamas', country_name=None), 'BT': Zone(zone_name='Bhutan', country_name=None), 'BW': Zone(zone_name='Botswana', country_name=None), 'BY': Zone(zone_name='Belarus', country_name=None), 'BZ': Zone(zone_name='Belize', country_name=None), 'CA-AB': Zone(zone_name='Alberta', country_name='Canada'), 'CA-BC': Zone(zone_name='British Columbia', country_name='Canada'), 'CA-MB': Zone(zone_name='Manitoba', country_name='Canada'), 'CA-NB': Zone(zone_name='New Brunswick', country_name='Canada'), 'CA-NL-LB': Zone(zone_name='Labrador', country_name='Canada'), 'CA-NL-NF': Zone(zone_name='Newfoundland', country_name='Canada'), 'CA-NS': Zone(zone_name='Nova Scotia', country_name='Canada'), 'CA-NT': Zone(zone_name='Northwest Territories', country_name='Canada'), 'CA-NU': Zone(zone_name='Nunavut', country_name='Canada'), 'CA-ON': Zone(zone_name='Ontario', country_name='Canada'), 'CA-PE': Zone(zone_name='Prince Edward Island', country_name='Canada'), 'CA-QC': Zone(zone_name='Quรฉbec', country_name='Canada'), 'CA-SK': Zone(zone_name='Saskatchewan', country_name='Canada'), 'CA-YT': Zone(zone_name='Yukon', country_name='Canada'), 'CD': Zone(zone_name='Democratic Republic of the Congo', country_name=None), 'CF': Zone(zone_name='Central African Republic', country_name=None), 'CG': Zone(zone_name='Congo', country_name=None), 'CH': Zone(zone_name='Switzerland', country_name=None), 'CI': Zone(zone_name='Ivory Coast', country_name=None), 'CL-CHP': Zone(zone_name='Easter Island', country_name='Chile'), 'CL-SEA': Zone(zone_name='Sistema Elรฉctrico de Aysรฉn', country_name='Chile'), 'CL-SEM': Zone(zone_name='Sistema Elรฉctrico de Magallanes', country_name='Chile'), 'CL-SEN': Zone(zone_name='Sistema Elรฉctrico Nacional', country_name='Chile'), 'CM': Zone(zone_name='Cameroon', country_name=None), 'CN': Zone(zone_name='China', country_name=None), 'CO': Zone(zone_name='Colombia', country_name=None), 'CR': Zone(zone_name='Costa Rica', country_name=None), 'CU': Zone(zone_name='Cuba', country_name=None), 'CV': Zone(zone_name='Cabo Verde', country_name=None), 'CY': Zone(zone_name='Cyprus', country_name=None), 'CZ': Zone(zone_name='Czechia', country_name=None), 'DE': Zone(zone_name='Germany', country_name=None), 'DJ': Zone(zone_name='Djibouti', country_name=None), 'DK': Zone(zone_name='Denmark', country_name=None), 'DK-BHM': Zone(zone_name='Bornholm', country_name='Denmark'), 'DK-DK1': Zone(zone_name='West Denmark', country_name='Denmark'), 'DK-DK2': Zone(zone_name='East Denmark', country_name='Denmark'), 'DM': Zone(zone_name='Dominica', country_name=None), 'DO': Zone(zone_name='Dominican Republic', country_name=None), 'DZ': Zone(zone_name='Algeria', country_name=None), 'EC': Zone(zone_name='Ecuador', country_name=None), 'EE': Zone(zone_name='Estonia', country_name=None), 'EG': Zone(zone_name='Egypt', country_name=None), 'EH': Zone(zone_name='Western Sahara', country_name=None), 'ER': Zone(zone_name='Eritrea', country_name=None), 'ES': Zone(zone_name='Spain', country_name=None), 'ES-CE': Zone(zone_name='Ceuta', country_name='Spain'), 'ES-CN-FVLZ': Zone(zone_name='Fuerteventura/Lanzarote', country_name='Spain'), 'ES-CN-GC': Zone(zone_name='Gran Canaria', country_name='Spain'), 'ES-CN-HI': Zone(zone_name='El Hierro', country_name='Spain'), 'ES-CN-IG': Zone(zone_name='Isla de la Gomera', country_name='Spain'), 'ES-CN-LP': Zone(zone_name='La Palma', country_name='Spain'), 'ES-CN-TE': Zone(zone_name='Tenerife', country_name='Spain'), 'ES-IB-FO': Zone(zone_name='Formentera', country_name='Spain'), 'ES-IB-IZ': Zone(zone_name='Ibiza', country_name='Spain'), 'ES-IB-MA': Zone(zone_name='Mallorca', country_name='Spain'), 'ES-IB-ME': Zone(zone_name='Menorca', country_name='Spain'), 'ES-ML': Zone(zone_name='Melilla', country_name='Spain'), 'ET': Zone(zone_name='Ethiopia', country_name=None), 'FI': Zone(zone_name='Finland', country_name=None), 'FJ': Zone(zone_name='Fiji', country_name=None), 'FK': Zone(zone_name='Falkland Islands', country_name=None), 'FM': Zone(zone_name='Micronesia', country_name=None), 'FO': Zone(zone_name='Faroe Islands', country_name=None), 'FO-MI': Zone(zone_name='Main Islands', country_name='Faroe Islands'), 'FO-SI': Zone(zone_name='South Island', country_name='Faroe Islands'), 'FR': Zone(zone_name='France', country_name=None), 'FR-COR': Zone(zone_name='Corsica', country_name='France'), 'GA': Zone(zone_name='Gabon', country_name=None), 'GB': Zone(zone_name='Great Britain', country_name=None), 'GB-NIR': Zone(zone_name='Northern Ireland', country_name=None), 'GB-ORK': Zone(zone_name='Orkney Islands', country_name='Great Britain'), 'GB-ZET': Zone(zone_name='Unknown', country_name=None), 'GE': Zone(zone_name='Georgia', country_name=None), 'GF': Zone(zone_name='French Guiana', country_name=None), 'GH': Zone(zone_name='Ghana', country_name=None), 'GL': Zone(zone_name='Greenland', country_name=None), 'GM': Zone(zone_name='Gambia', country_name=None), 'GN': Zone(zone_name='Guinea', country_name=None), 'GP': Zone(zone_name='Guadeloupe', country_name=None), 'GQ': Zone(zone_name='Equatorial Guinea', country_name=None), 'GR': Zone(zone_name='Greece', country_name=None), 'GR-IS': Zone(zone_name='Aegean Islands', country_name='Greece'), 'GS': Zone(zone_name='South Georgia and the South Sandwich Islands', country_name=None), 'GT': Zone(zone_name='Guatemala', country_name=None), 'GU': Zone(zone_name='Guam', country_name=None), 'GW': Zone(zone_name='Guinea-Bissau', country_name=None), 'GY': Zone(zone_name='Guyana', country_name=None), 'HK': Zone(zone_name='Hong Kong', country_name=None), 'HM': Zone(zone_name='Heard Island and McDonald Islands', country_name=None), 'HN': Zone(zone_name='Honduras', country_name=None), 'HR': Zone(zone_name='Croatia', country_name=None), 'HT': Zone(zone_name='Haiti', country_name=None), 'HU': Zone(zone_name='Hungary', country_name=None), 'ID': Zone(zone_name='Indonesia', country_name=None), 'IE': Zone(zone_name='Ireland', country_name=None), 'IL': Zone(zone_name='Israel', country_name=None), 'IM': Zone(zone_name='Isle of Man', country_name=None), 'IN': Zone(zone_name='Mainland India', country_name=None), 'IN-AN': Zone(zone_name='Andaman and Nicobar Islands', country_name='India'), 'IN-DL': Zone(zone_name='Delhi', country_name='India'), 'IN-EA': Zone(zone_name='Eastern India', country_name='India'), 'IN-HP': Zone(zone_name='Himachal Pradesh', country_name='India'), 'IN-KA': Zone(zone_name='Karnataka', country_name='India'), 'IN-MH': Zone(zone_name='Maharashtra', country_name='India'), 'IN-NE': Zone(zone_name='North Eastern India', country_name='India'), 'IN-NO': Zone(zone_name='Northern India', country_name='India'), 'IN-PB': Zone(zone_name='Punjab', country_name='India'), 'IN-SO': Zone(zone_name='Southern India', country_name='India'), 'IN-UP': Zone(zone_name='Uttar Pradesh', country_name='India'), 'IN-UT': Zone(zone_name='Uttarakhand', country_name='India'), 'IN-WE': Zone(zone_name='Western India', country_name='India'), 'IQ': Zone(zone_name='Iraq', country_name=None), 'IQ-KUR': Zone(zone_name='Kurdistan', country_name='Iraq'), 'IR': Zone(zone_name='Iran', country_name=None), 'IS': Zone(zone_name='Iceland', country_name=None), 'IT': Zone(zone_name='Italy', country_name=None), 'IT-CNO': Zone(zone_name='Central North Italy', country_name='Italy'), 'IT-CSO': Zone(zone_name='Central South Italy', country_name='Italy'), 'IT-NO': Zone(zone_name='North Italy', country_name='Italy'), 'IT-SAR': Zone(zone_name='Sardinia', country_name='Italy'), 'IT-SIC': Zone(zone_name='Sicily', country_name='Italy'), 'IT-SO': Zone(zone_name='South Italy', country_name='Italy'), 'JM': Zone(zone_name='Jamaica', country_name=None), 'JO': Zone(zone_name='Jordan', country_name=None), 'JP': Zone(zone_name='Japan', country_name=None), 'JP-CB': Zone(zone_name='Chลซbu', country_name='Japan'), 'JP-CG': Zone(zone_name='Chลซgoku', country_name='Japan'), 'JP-HKD': Zone(zone_name='Hokkaidล', country_name='Japan'), 'JP-HR': Zone(zone_name='Hokuriku', country_name='Japan'), 'JP-KN': Zone(zone_name='Kansai', country_name='Japan'), 'JP-KY': Zone(zone_name='Kyลซshลซ', country_name='Japan'), 'JP-ON': Zone(zone_name='Okinawa', country_name='Japan'), 'JP-SK': Zone(zone_name='Shikoku', country_name='Japan'), 'JP-TH': Zone(zone_name='Tลhoku', country_name='Japan'), 'JP-TK': Zone(zone_name='Tลkyล', country_name='Japan'), 'KE': Zone(zone_name='Kenya', country_name=None), 'KG': Zone(zone_name='Kyrgyzstan', country_name=None), 'KH': Zone(zone_name='Cambodia', country_name=None), 'KM': Zone(zone_name='Comoros', country_name=None), 'KP': Zone(zone_name='North Korea', country_name=None), 'KR': Zone(zone_name='South Korea', country_name=None), 'KW': Zone(zone_name='Kuwait', country_name=None), 'KZ': Zone(zone_name='Kazakhstan', country_name=None), 'LA': Zone(zone_name='Laos', country_name=None), 'LB': Zone(zone_name='Lebanon', country_name=None), 'LC': Zone(zone_name='Saint Lucia', country_name=None), 'LI': Zone(zone_name='Liechtenstein', country_name=None), 'LK': Zone(zone_name='Sri Lanka', country_name=None), 'LR': Zone(zone_name='Liberia', country_name=None), 'LS': Zone(zone_name='Lesotho', country_name=None), 'LT': Zone(zone_name='Lithuania', country_name=None), 'LU': Zone(zone_name='Luxembourg', country_name=None), 'LV': Zone(zone_name='Latvia', country_name=None), 'LY': Zone(zone_name='Libya', country_name=None), 'MA': Zone(zone_name='Morocco', country_name=None), 'MD': Zone(zone_name='Moldova', country_name=None), 'ME': Zone(zone_name='Montenegro', country_name=None), 'MG': Zone(zone_name='Madagascar', country_name=None), 'MK': Zone(zone_name='North Macedonia', country_name=None), 'ML': Zone(zone_name='Mali', country_name=None), 'MM': Zone(zone_name='Myanmar', country_name=None), 'MN': Zone(zone_name='Mongolia', country_name=None), 'MQ': Zone(zone_name='Martinique', country_name=None), 'MR': Zone(zone_name='Mauritania', country_name=None), 'MT': Zone(zone_name='Malta', country_name=None), 'MU': Zone(zone_name='Mauritius', country_name=None), 'MW': Zone(zone_name='Malawi', country_name=None), 'MX': Zone(zone_name='Mexico', country_name=None), 'MX-BC': Zone(zone_name='Baja California', country_name='Mexico'), 'MX-BCS': Zone(zone_name='Baja California Sur', country_name='Mexico'), 'MX-CE': Zone(zone_name='Central', country_name='Mexico'), 'MX-NE': Zone(zone_name='North East', country_name='Mexico'), 'MX-NO': Zone(zone_name='North', country_name='Mexico'), 'MX-NW': Zone(zone_name='North West', country_name='Mexico'), 'MX-OC': Zone(zone_name='Occidental', country_name='Mexico'), 'MX-OR': Zone(zone_name='Oriental', country_name='Mexico'), 'MX-PN': Zone(zone_name='Peninsula', country_name='Mexico'), 'MY-EM': Zone(zone_name='Borneo', country_name='Malaysia'), 'MY-WM': Zone(zone_name='Peninsula', country_name='Malaysia'), 'MZ': Zone(zone_name='Mozambique', country_name=None), 'NA': Zone(zone_name='Namibia', country_name=None), 'NC': Zone(zone_name='New Caledonia', country_name=None), 'NE': Zone(zone_name='Niger', country_name=None), 'NG': Zone(zone_name='Nigeria', country_name=None), 'NI': Zone(zone_name='Nicaragua', country_name=None), 'NKR': Zone(zone_name='Nagorno-Karabakh', country_name=None), 'NL': Zone(zone_name='Netherlands', country_name=None), 'NO': Zone(zone_name='Norway', country_name=None), 'NO-NO1': Zone(zone_name='Southeast Norway', country_name='Norway'), 'NO-NO2': Zone(zone_name='Southwest Norway', country_name='Norway'), 'NO-NO3': Zone(zone_name='Middle Norway', country_name='Norway'), 'NO-NO4': Zone(zone_name='North Norway', country_name='Norway'), 'NO-NO5': Zone(zone_name='West Norway', country_name='Norway'), 'NP': Zone(zone_name='Nepal', country_name=None), 'NZ': Zone(zone_name='New Zealand', country_name=None), 'NZ-NZA': Zone(zone_name='Auckland Islands', country_name='New Zealand'), 'NZ-NZC': Zone(zone_name='Chatham Islands', country_name='New Zealand'), 'NZ-NZST': Zone(zone_name='Stewart Island', country_name='New Zealand'), 'OM': Zone(zone_name='Oman', country_name=None), 'PA': Zone(zone_name='Panama', country_name=None), 'PE': Zone(zone_name='Peru', country_name=None), 'PF': Zone(zone_name='French Polynesia', country_name=None), 'PG': Zone(zone_name='Papua New Guinea', country_name=None), 'PH': Zone(zone_name='Philippines', country_name=None), 'PH-LU': Zone(zone_name='Luzon', country_name='Philippines'), 'PH-MI': Zone(zone_name='Mindanao', country_name='Philippines'), 'PH-VI': Zone(zone_name='Visayas', country_name='Philippines'), 'PK': Zone(zone_name='Pakistan', country_name=None), 'PL': Zone(zone_name='Poland', country_name=None), 'PM': Zone(zone_name='Saint Pierre and Miquelon', country_name=None), 'PR': Zone(zone_name='Puerto Rico', country_name=None), 'PS': Zone(zone_name='State of Palestine', country_name=None), 'PT': Zone(zone_name='Portugal', country_name=None), 'PT-AC': Zone(zone_name='Azores', country_name='Portugal'), 'PT-MA': Zone(zone_name='Madeira', country_name='Portugal'), 'PW': Zone(zone_name='Palau', country_name=None), 'PY': Zone(zone_name='Paraguay', country_name=None), 'QA': Zone(zone_name='Qatar', country_name=None), 'RE': Zone(zone_name='Rรฉunion', country_name=None), 'RO': Zone(zone_name='Romania', country_name=None), 'RS': Zone(zone_name='Serbia', country_name=None), 'RU': Zone(zone_name='Russia', country_name=None), 'RU-1': Zone(zone_name='Europe-Ural', country_name='Russia'), 'RU-2': Zone(zone_name='Siberia', country_name='Russia'), 'RU-AS': Zone(zone_name='East', country_name='Russia'), 'RU-EU': Zone(zone_name='Arctic', country_name='Russia'), 'RU-FE': Zone(zone_name='Far East', country_name='Russia'), 'RU-KGD': Zone(zone_name='Kaliningrad', country_name='Russia'), 'RW': Zone(zone_name='Rwanda', country_name=None), 'SA': Zone(zone_name='Saudi Arabia', country_name=None), 'SB': Zone(zone_name='Solomon Islands', country_name=None), 'SD': Zone(zone_name='Sudan', country_name=None), 'SE': Zone(zone_name='Sweden', country_name=None), 'SE-SE1': Zone(zone_name='North Sweden', country_name='Sweden'), 'SE-SE2': Zone(zone_name='North Central Sweden', country_name='Sweden'), 'SE-SE3': Zone(zone_name='South Central Sweden', country_name='Sweden'), 'SE-SE4': Zone(zone_name='South Sweden', country_name='Sweden'), 'SG': Zone(zone_name='Singapore', country_name=None), 'SI': Zone(zone_name='Slovenia', country_name=None), 'SJ': Zone(zone_name='Svalbard and Jan Mayen', country_name=None), 'SK': Zone(zone_name='Slovakia', country_name=None), 'SL': Zone(zone_name='Sierra Leone', country_name=None), 'SN': Zone(zone_name='Senegal', country_name=None), 'SO': Zone(zone_name='Somalia', country_name=None), 'SR': Zone(zone_name='Suriname', country_name=None), 'SS': Zone(zone_name='South Sudan', country_name=None), 'ST': Zone(zone_name='Sao Tome and Principe', country_name=None), 'SV': Zone(zone_name='El Salvador', country_name=None), 'SY': Zone(zone_name='Syria', country_name=None), 'SZ': Zone(zone_name='Swaziland', country_name=None), 'TD': Zone(zone_name='Chad', country_name=None), 'TF': Zone(zone_name='French Southern Territories', country_name=None), 'TG': Zone(zone_name='Togo', country_name=None), 'TH': Zone(zone_name='Thailand', country_name=None), 'TJ': Zone(zone_name='Tajikistan', country_name=None), 'TL': Zone(zone_name='Timor-Leste', country_name=None), 'TM': Zone(zone_name='Turkmenistan', country_name=None), 'TN': Zone(zone_name='Tunisia', country_name=None), 'TO': Zone(zone_name='Tonga', country_name=None), 'TR': Zone(zone_name='Turkey', country_name=None), 'TT': Zone(zone_name='Trinidad and Tobago', country_name=None), 'TW': Zone(zone_name='Taiwan', country_name=None), 'TZ': Zone(zone_name='Tanzania', country_name=None), 'UA': Zone(zone_name='Ukraine', country_name=None), 'UA-CR': Zone(zone_name='Crimea', country_name='Ukraine'), 'UG': Zone(zone_name='Uganda', country_name=None), 'US': Zone(zone_name='Contiguous United States', country_name=None), 'US-AK': Zone(zone_name='Alaska', country_name='USA'), 'US-CAL-BANC': Zone(zone_name='Balancing Authority Of Northern California', country_name='USA'), 'US-CAL-CISO': Zone(zone_name='California Independent System Operator', country_name='USA'), 'US-CAL-IID': Zone(zone_name='Imperial Irrigation District', country_name='USA'), 'US-CAL-LDWP': Zone(zone_name='Los Angeles Department Of Water And Power', country_name='USA'), 'US-CAL-TIDC': Zone(zone_name='Turlock Irrigation District', country_name='USA'), 'US-CAR-CPLE': Zone(zone_name='Duke Energy Progress East', country_name='USA'), 'US-CAR-CPLW': Zone(zone_name='Duke Energy Progress West', country_name='USA'), 'US-CAR-DUK': Zone(zone_name='Duke Energy Carolinas', country_name='USA'), 'US-CAR-SC': Zone(zone_name='South Carolina Public Service Authority', country_name='USA'), 'US-CAR-SCEG': Zone(zone_name='South Carolina Electric & Gas Company', country_name='USA'), 'US-CAR-YAD': Zone(zone_name='Alcoa Power Generating, Inc. Yadkin Division', country_name='USA'), 'US-CENT-SPA': Zone(zone_name='Southwestern Power Administration', country_name='USA'), 'US-CENT-SWPP': Zone(zone_name='Southwest Power Pool', country_name='USA'), 'US-FLA-FMPP': Zone(zone_name='Florida Municipal Power Pool', country_name='USA'), 'US-FLA-FPC': Zone(zone_name='Duke Energy Florida Inc', country_name='USA'), 'US-FLA-FPL': Zone(zone_name='Florida Power & Light Company', country_name='USA'), 'US-FLA-GVL': Zone(zone_name='Gainesville Regional Utilities', country_name='USA'), 'US-FLA-HST': Zone(zone_name='City Of Homestead', country_name='USA'), 'US-FLA-JEA': Zone(zone_name='Jacksonville Electric Authority', country_name='USA'), 'US-FLA-SEC': Zone(zone_name='Seminole Electric Cooperative', country_name='USA'), 'US-FLA-TAL': Zone(zone_name='City Of Tallahassee', country_name='USA'), 'US-FLA-TEC': Zone(zone_name='Tampa Electric Company', country_name='USA'), 'US-HI-HA': Zone(zone_name='Hawaii', country_name='USA'), 'US-HI-KA': Zone(zone_name='Kauai', country_name='USA'), 'US-HI-KH': Zone(zone_name='Kahoolawe', country_name='USA'), 'US-HI-LA': Zone(zone_name='Lanai', country_name='USA'), 'US-HI-MA': Zone(zone_name='Maui', country_name='USA'), 'US-HI-MO': Zone(zone_name='Molokai', country_name='USA'), 'US-HI-NI': Zone(zone_name='Niihau', country_name='USA'), 'US-HI-OA': Zone(zone_name='Oahu', country_name='USA'), 'US-MIDA-PJM': Zone(zone_name='PJM Interconnection, Llc', country_name='USA'), 'US-MIDW-AECI': Zone(zone_name='Associated Electric Cooperative, Inc.', country_name='USA'), 'US-MIDW-LGEE': Zone(zone_name='Louisville Gas And Electric Company And Kentucky Utilities', country_name='USA'), 'US-MIDW-MISO': Zone(zone_name='Midcontinent Independent Transmission System Operator, Inc.', country_name='USA'), 'US-NE-ISNE': Zone(zone_name='Iso New England Inc.', country_name='USA'), 'US-NW-AVA': Zone(zone_name='Avista Corporation', country_name='USA'), 'US-NW-BPAT': Zone(zone_name='Bonneville Power Administration', country_name='USA'), 'US-NW-CHPD': Zone(zone_name='PUD No. 1 Of Chelan County', country_name='USA'), 'US-NW-DOPD': Zone(zone_name='PUD No. 1 Of Douglas County', country_name='USA'), 'US-NW-GCPD': Zone(zone_name='PUD No. 2 Of Grant County, Washington', country_name='USA'), 'US-NW-GRID': Zone(zone_name='Gridforce Energy Management, Llc', country_name='USA'), 'US-NW-GWA': Zone(zone_name='Naturener Power Watch, Llc (Gwa)', country_name='USA'), 'US-NW-IPCO': Zone(zone_name='Idaho Power Company', country_name='USA'), 'US-NW-NEVP': Zone(zone_name='Nevada Power Company', country_name='USA'), 'US-NW-NWMT': Zone(zone_name='Northwestern Energy', country_name='USA'), 'US-NW-PACE': Zone(zone_name='Pacificorp East', country_name='USA'), 'US-NW-PACW': Zone(zone_name='Pacificorp West', country_name='USA'), 'US-NW-PGE': Zone(zone_name='Portland General Electric Company', country_name='USA'), 'US-NW-PSCO': Zone(zone_name='Public Service Company Of Colorado', country_name='USA'), 'US-NW-PSEI': Zone(zone_name='Puget Sound Energy', country_name='USA'), 'US-NW-SCL': Zone(zone_name='Seattle City Light', country_name='USA'), 'US-NW-TPWR': Zone(zone_name='City Of Tacoma, Department Of Public Utilities, Light Division', country_name='USA'), 'US-NW-WACM': Zone(zone_name='Western Area Power Administration - Rocky Mountain Region', country_name='USA'), 'US-NW-WAUW': Zone(zone_name='Western Area Power Administration UGP West', country_name='USA'), 'US-NW-WWA': Zone(zone_name='Naturener Wind Watch, Llc', country_name='USA'), 'US-NY-NYIS': Zone(zone_name='New York Independent System Operator', country_name='USA'), 'US-SE-SEPA': Zone(zone_name='Southeastern Power Administration', country_name='USA'), 'US-SE-SOCO': Zone(zone_name='Southern Company Services, Inc. - Trans', country_name='USA'), 'US-SW-AZPS': Zone(zone_name='Arizona Public Service Company', country_name='USA'), 'US-SW-EPE': Zone(zone_name='El Paso Electric Company', country_name='USA'), 'US-SW-GRIF': Zone(zone_name='Griffith Energy, LLC', country_name='USA'), 'US-SW-PNM': Zone(zone_name='Public Service Company Of New Mexico', country_name='USA'), 'US-SW-SRP': Zone(zone_name='Salt River Project', country_name='USA'), 'US-SW-TEPC': Zone(zone_name='Tucson Electric Power Company', country_name='USA'), 'US-SW-WALC': Zone(zone_name='Western Area Power Administration - Desert Southwest Region', country_name='USA'), 'US-TEN-TVA': Zone(zone_name='Tennessee Valley Authority', country_name='USA'), 'US-TEX-ERCO': Zone(zone_name='Electric Reliability Council Of Texas, Inc.', country_name='USA'), 'UY': Zone(zone_name='Uruguay', country_name=None), 'UZ': Zone(zone_name='Uzbekistan', country_name=None), 'VC': Zone(zone_name='Saint Vincent and the Grenadines', country_name=None), 'VE': Zone(zone_name='Venezuela', country_name=None), 'VI': Zone(zone_name='Virgin Islands', country_name='USA'), 'VN': Zone(zone_name='Vietnam', country_name=None), 'VN-C': Zone(zone_name='Central Vietnam', country_name='Vietnam'), 'VN-N': Zone(zone_name='Northern Vietnam', country_name='Vietnam'), 'VN-S': Zone(zone_name='Southern Vietnam', country_name='Vietnam'), 'VU': Zone(zone_name='Vanuatu', country_name=None), 'WS': Zone(zone_name='Samoa', country_name=None), 'XK': Zone(zone_name='Kosovo', country_name=None), 'XX': Zone(zone_name='Northern Cyprus', country_name=None), 'YE': Zone(zone_name='Yemen', country_name=None), 'YT': Zone(zone_name='Mayotte', country_name=None), 'ZA': Zone(zone_name='South Africa', country_name=None), 'ZM': Zone(zone_name='Zambia', country_name=None), 'ZW': Zone(zone_name='Zimbabwe', country_name=None), }) # --- aioelectricitymaps-1.1.0/tests/conftest.py000066400000000000000000000030501475061435500207540ustar00rootroot00000000000000"""Fixtures for aioelectricitymaps tests.""" from collections.abc import AsyncGenerator, Generator import re import aiohttp from aioresponses import aioresponses import pytest from aioelectricitymaps import ElectricityMaps from . import load_fixture @pytest.fixture(name="responses") def aioresponses_fixture() -> Generator[aioresponses, None, None]: """Return aioresponses fixture.""" with aioresponses() as mocked_responses: yield mocked_responses @pytest.fixture(name="mock_response") def _mock_response(responses: aioresponses) -> None: """Mock an API response.""" url_pattern = re.compile( r"^https://api\.electricitymap\.org/v3/home-assistant\?.*$", ) responses.get( url_pattern, status=200, headers={"Content-Type": "application/json"}, body=load_fixture("response.json"), ) @pytest.fixture(name="mock_broken_response") def _mock_broken_response(responses: aioresponses) -> None: """Mock a bad API response.""" responses.get( "https://api.electricitymap.org/v3/home-assistant", status=200, headers={"Content-Type": "application/json"}, body='{"status": "ok"', ) @pytest.fixture(name="electricitymaps_client") async def client() -> AsyncGenerator[ElectricityMaps, None]: """Return a ElectricityMaps client.""" async with ( aiohttp.ClientSession() as session, ElectricityMaps( token="abc123", session=session, ) as electricitymaps_client, ): yield electricitymaps_client aioelectricitymaps-1.1.0/tests/fixtures/000077500000000000000000000000001475061435500204305ustar00rootroot00000000000000aioelectricitymaps-1.1.0/tests/fixtures/carbon_intensity_history.json000066400000000000000000000162561475061435500264700ustar00rootroot00000000000000{ "zone": "DE", "history": [ { "zone": "DE", "carbonIntensity": 599, "datetime": "2024-03-05T20:00:00.000Z", "updatedAt": "2024-03-06T15:48:54.012Z", "createdAt": "2024-03-02T20:47:49.346Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 607, "datetime": "2024-03-05T21:00:00.000Z", "updatedAt": "2024-03-06T11:49:04.367Z", "createdAt": "2024-03-02T21:48:36.543Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 599, "datetime": "2024-03-05T22:00:00.000Z", "updatedAt": "2024-03-06T12:52:03.415Z", "createdAt": "2024-03-02T22:50:50.836Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 606, "datetime": "2024-03-05T23:00:00.000Z", "updatedAt": "2024-03-06T07:47:41.274Z", "createdAt": "2024-03-02T23:50:24.971Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 623, "datetime": "2024-03-06T00:00:00.000Z", "updatedAt": "2024-03-06T07:47:41.274Z", "createdAt": "2024-03-03T00:49:13.137Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 636, "datetime": "2024-03-06T01:00:00.000Z", "updatedAt": "2024-03-06T07:47:34.335Z", "createdAt": "2024-03-03T01:48:52.124Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 628, "datetime": "2024-03-06T02:00:00.000Z", "updatedAt": "2024-03-06T09:50:45.588Z", "createdAt": "2024-03-03T02:49:07.889Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 633, "datetime": "2024-03-06T03:00:00.000Z", "updatedAt": "2024-03-06T09:50:45.588Z", "createdAt": "2024-03-03T03:49:51.731Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 641, "datetime": "2024-03-06T04:00:00.000Z", "updatedAt": "2024-03-06T10:47:36.210Z", "createdAt": "2024-03-03T04:46:28.650Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 635, "datetime": "2024-03-06T05:00:00.000Z", "updatedAt": "2024-03-06T10:47:39.050Z", "createdAt": "2024-03-03T05:48:52.206Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 632, "datetime": "2024-03-06T06:00:00.000Z", "updatedAt": "2024-03-06T13:51:49.605Z", "createdAt": "2024-03-03T06:49:09.893Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 616, "datetime": "2024-03-06T07:00:00.000Z", "updatedAt": "2024-03-06T17:10:50.911Z", "createdAt": "2024-03-03T07:49:19.045Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 583, "datetime": "2024-03-06T08:00:00.000Z", "updatedAt": "2024-03-06T17:47:22.104Z", "createdAt": "2024-03-03T08:48:25.598Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 541, "datetime": "2024-03-06T09:00:00.000Z", "updatedAt": "2024-03-06T17:47:22.104Z", "createdAt": "2024-03-03T09:50:35.125Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 511, "datetime": "2024-03-06T10:00:00.000Z", "updatedAt": "2024-03-06T17:47:22.104Z", "createdAt": "2024-03-03T10:50:32.247Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 492, "datetime": "2024-03-06T11:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T11:47:35.958Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 503, "datetime": "2024-03-06T12:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T12:49:55.906Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 526, "datetime": "2024-03-06T13:00:00.000Z", "updatedAt": "2024-03-06T18:48:07.043Z", "createdAt": "2024-03-03T13:48:07.412Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 563, "datetime": "2024-03-06T14:00:00.000Z", "updatedAt": "2024-03-06T17:47:22.104Z", "createdAt": "2024-03-03T14:50:33.346Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 613, "datetime": "2024-03-06T15:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T15:48:04.095Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 627, "datetime": "2024-03-06T16:00:00.000Z", "updatedAt": "2024-03-06T18:48:07.043Z", "createdAt": "2024-03-03T16:49:37.071Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 633, "datetime": "2024-03-06T17:00:00.000Z", "updatedAt": "2024-03-06T18:48:07.043Z", "createdAt": "2024-03-03T17:50:57.878Z", "emissionFactorType": "lifecycle", "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "carbonIntensity": 663, "datetime": "2024-03-06T18:00:00.000Z", "updatedAt": "2024-03-06T18:48:07.043Z", "createdAt": "2024-03-03T18:47:52.886Z", "emissionFactorType": "lifecycle", "isEstimated": true, "estimationMethod": "TIME_SLICER_AVERAGE" }, { "zone": "DE", "carbonIntensity": 689, "datetime": "2024-03-06T19:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T19:46:59.534Z", "emissionFactorType": "lifecycle", "isEstimated": true, "estimationMethod": "TIME_SLICER_AVERAGE" } ] } aioelectricitymaps-1.1.0/tests/fixtures/latest_carbon_intensity.json000066400000000000000000000004361475061435500262540ustar00rootroot00000000000000{ "zone": "US-CAR-DUK", "carbonIntensity": 216, "datetime": "2024-03-06T19:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T19:47:16.265Z", "emissionFactorType": "lifecycle", "isEstimated": true, "estimationMethod": "TIME_SLICER_AVERAGE" } aioelectricitymaps-1.1.0/tests/fixtures/latest_power_breakdown.json000066400000000000000000000024001475061435500260630ustar00rootroot00000000000000{ "zone": "DE", "datetime": "2024-03-06T19:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T19:46:59.534Z", "powerConsumptionBreakdown": { "nuclear": 440, "geothermal": 21, "biomass": 5896, "coal": 23893, "wind": 6998, "solar": 0, "hydro": 2870, "gas": 10334, "oil": 339, "unknown": 403, "hydro discharge": 1706, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5408, "coal": 23339, "wind": 6415, "solar": 0, "hydro": 1671, "gas": 9602, "oil": 304, "unknown": 313, "hydro discharge": 1496, "battery discharge": null }, "powerImportBreakdown": { "AT": 244, "BE": 901, "CH": 1344, "LU": 0, "NL": 0, "DK-DK1": 1473, "DK-DK2": 619, "NO-NO2": 1217 }, "powerExportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "LU": 752, "NL": 715, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0 }, "fossilFreePercentage": 34, "renewablePercentage": 33, "powerConsumptionTotal": 52901, "powerProductionTotal": 48570, "powerImportTotal": 5798, "powerExportTotal": 1467, "isEstimated": true, "estimationMethod": "TIME_SLICER_AVERAGE" } aioelectricitymaps-1.1.0/tests/fixtures/no-data-response.json000066400000000000000000000004531475061435500245040ustar00rootroot00000000000000{ "_disclaimer": "This data is the exclusive property of Electricity Maps and/or related parties. If you're in doubt about your rights to use this data, please contact api@co2signal.com", "status": "no-data", "countryCode": "DE", "data": {}, "units": { "carbonIntensity": "gCO2eq/kWh" } } aioelectricitymaps-1.1.0/tests/fixtures/power_breakdown_history.json000066400000000000000000001156561475061435500263120ustar00rootroot00000000000000{ "zone": "DE", "history": [ { "zone": "DE", "datetime": "2024-03-05T20:00:00.000Z", "updatedAt": "2024-03-06T15:48:54.012Z", "createdAt": "2024-03-02T20:47:49.346Z", "powerConsumptionBreakdown": { "nuclear": 819, "geothermal": 19, "biomass": 5117, "coal": 21057, "wind": 12635, "solar": 0, "hydro": 3133, "gas": 9511, "oil": 353, "unknown": 365, "hydro discharge": 869, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5360, "coal": 22506, "wind": 12590, "solar": 0, "hydro": 1634, "gas": 10192, "oil": 354, "unknown": 335, "hydro discharge": 845, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 0, "CH": 28, "CZ": 783, "FR": 643, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1589, "DK-DK2": 660, "NO-NO2": 1113, "SE-SE4": 426 }, "powerExportBreakdown": { "AT": 269, "BE": 794, "CH": 0, "CZ": 0, "FR": 0, "LU": 587, "NL": 1847, "PL": 1703, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 42, "renewablePercentage": 41, "powerConsumptionTotal": 53879, "powerProductionTotal": 53837, "powerImportTotal": 5242, "powerExportTotal": 5200, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-05T21:00:00.000Z", "updatedAt": "2024-03-06T11:49:04.367Z", "createdAt": "2024-03-02T21:48:36.543Z", "powerConsumptionBreakdown": { "nuclear": 684, "geothermal": 19, "biomass": 5033, "coal": 20493, "wind": 11880, "solar": 0, "hydro": 3076, "gas": 8709, "oil": 342, "unknown": 352, "hydro discharge": 259, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5334, "coal": 22126, "wind": 11866, "solar": 0, "hydro": 1645, "gas": 9460, "oil": 353, "unknown": 335, "hydro discharge": 20, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 710, "FR": 449, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1523, "DK-DK2": 679, "NO-NO2": 1160, "SE-SE4": 440 }, "powerExportBreakdown": { "AT": 322, "BE": 698, "CH": 407, "CZ": 0, "FR": 0, "LU": 575, "NL": 1731, "PL": 1540, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 41, "renewablePercentage": 40, "powerConsumptionTotal": 50847, "powerProductionTotal": 51159, "powerImportTotal": 4961, "powerExportTotal": 5273, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-05T22:00:00.000Z", "updatedAt": "2024-03-06T12:52:03.415Z", "createdAt": "2024-03-02T22:50:50.836Z", "powerConsumptionBreakdown": { "nuclear": 874, "geothermal": 18, "biomass": 4873, "coal": 19104, "wind": 11248, "solar": 0, "hydro": 3051, "gas": 7437, "oil": 331, "unknown": 325, "hydro discharge": 81, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5323, "coal": 21288, "wind": 11449, "solar": 0, "hydro": 1622, "gas": 8297, "oil": 353, "unknown": 318, "hydro discharge": -1219, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 724, "FR": 806, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1796, "DK-DK2": 698, "NO-NO2": 1172, "SE-SE4": 451 }, "powerExportBreakdown": { "AT": 554, "BE": 843, "CH": 1058, "CZ": 0, "FR": 0, "LU": 476, "NL": 1255, "PL": 1569, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 43, "renewablePercentage": 41, "powerConsumptionTotal": 47343, "powerProductionTotal": 48670, "powerImportTotal": 5647, "powerExportTotal": 5755, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-05T23:00:00.000Z", "updatedAt": "2024-03-06T07:47:41.274Z", "createdAt": "2024-03-02T23:50:24.971Z", "powerConsumptionBreakdown": { "nuclear": 688, "geothermal": 18, "biomass": 4838, "coal": 17997, "wind": 9681, "solar": 0, "hydro": 3227, "gas": 7015, "oil": 322, "unknown": 320, "hydro discharge": 85, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5323, "coal": 20059, "wind": 9921, "solar": 0, "hydro": 1685, "gas": 7992, "oil": 349, "unknown": 309, "hydro discharge": -2132, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 1061, "FR": 186, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1779, "DK-DK2": 793, "NO-NO2": 1391, "SE-SE4": 473 }, "powerExportBreakdown": { "AT": 414, "BE": 582, "CH": 1074, "CZ": 0, "FR": 0, "LU": 542, "NL": 822, "PL": 1583, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 42, "renewablePercentage": 41, "powerConsumptionTotal": 44191, "powerProductionTotal": 45657, "powerImportTotal": 5683, "powerExportTotal": 5016, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T00:00:00.000Z", "updatedAt": "2024-03-06T07:47:41.274Z", "createdAt": "2024-03-03T00:49:13.137Z", "powerConsumptionBreakdown": { "nuclear": 722, "geothermal": 18, "biomass": 4798, "coal": 17724, "wind": 8160, "solar": 0, "hydro": 3220, "gas": 6829, "oil": 322, "unknown": 332, "hydro discharge": 80, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5263, "coal": 19579, "wind": 8371, "solar": 0, "hydro": 1658, "gas": 7796, "oil": 350, "unknown": 308, "hydro discharge": -2218, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 1327, "FR": 0, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1557, "DK-DK2": 852, "NO-NO2": 1403, "SE-SE4": 483 }, "powerExportBreakdown": { "AT": 272, "BE": 752, "CH": 983, "CZ": 0, "FR": 96, "LU": 433, "NL": 786, "PL": 1225, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 40, "renewablePercentage": 39, "powerConsumptionTotal": 42204, "powerProductionTotal": 43346, "powerImportTotal": 5622, "powerExportTotal": 4546, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T01:00:00.000Z", "updatedAt": "2024-03-06T07:47:34.335Z", "createdAt": "2024-03-03T01:48:52.124Z", "powerConsumptionBreakdown": { "nuclear": 811, "geothermal": 18, "biomass": 4830, "coal": 17653, "wind": 7208, "solar": 0, "hydro": 3153, "gas": 6979, "oil": 319, "unknown": 333, "hydro discharge": 79, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5332, "coal": 19516, "wind": 7448, "solar": 0, "hydro": 1626, "gas": 8028, "oil": 351, "unknown": 308, "hydro discharge": -2850, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 1572, "FR": 0, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1274, "DK-DK2": 886, "NO-NO2": 1403, "SE-SE4": 492 }, "powerExportBreakdown": { "AT": 150, "BE": 790, "CH": 1032, "CZ": 0, "FR": 142, "LU": 377, "NL": 500, "PL": 1033, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 39, "renewablePercentage": 37, "powerConsumptionTotal": 41382, "powerProductionTotal": 42630, "powerImportTotal": 5627, "powerExportTotal": 4024, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T02:00:00.000Z", "updatedAt": "2024-03-06T09:50:45.588Z", "createdAt": "2024-03-03T02:49:07.889Z", "powerConsumptionBreakdown": { "nuclear": 1331, "geothermal": 18, "biomass": 4915, "coal": 17522, "wind": 6822, "solar": 0, "hydro": 3335, "gas": 7133, "oil": 323, "unknown": 337, "hydro discharge": 83, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5348, "coal": 19207, "wind": 6861, "solar": 0, "hydro": 1606, "gas": 8053, "oil": 350, "unknown": 308, "hydro discharge": -4073, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 1549, "FR": 846, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1439, "DK-DK2": 896, "NO-NO2": 1403, "SE-SE4": 497 }, "powerExportBreakdown": { "AT": 65, "BE": 228, "CH": 733, "CZ": 0, "FR": 0, "LU": 261, "NL": 114, "PL": 1092, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 40, "renewablePercentage": 36, "powerConsumptionTotal": 41818, "powerProductionTotal": 41754, "powerImportTotal": 6630, "powerExportTotal": 2493, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T03:00:00.000Z", "updatedAt": "2024-03-06T09:50:45.588Z", "createdAt": "2024-03-03T03:49:51.731Z", "powerConsumptionBreakdown": { "nuclear": 1487, "geothermal": 18, "biomass": 5031, "coal": 18072, "wind": 6563, "solar": 0, "hydro": 3451, "gas": 7649, "oil": 336, "unknown": 354, "hydro discharge": 94, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5381, "coal": 19634, "wind": 6512, "solar": 0, "hydro": 1621, "gas": 8262, "oil": 351, "unknown": 312, "hydro discharge": -3599, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 1156, "FR": 1257, "LU": 0, "NL": 356, "PL": 0, "DK-DK1": 1333, "DK-DK2": 810, "NO-NO2": 1403, "SE-SE4": 500 }, "powerExportBreakdown": { "AT": 98, "BE": 135, "CH": 323, "CZ": 0, "FR": 0, "LU": 250, "NL": 0, "PL": 1449, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 39, "renewablePercentage": 35, "powerConsumptionTotal": 43056, "powerProductionTotal": 42094, "powerImportTotal": 6815, "powerExportTotal": 2255, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T04:00:00.000Z", "updatedAt": "2024-03-06T10:47:36.210Z", "createdAt": "2024-03-03T04:46:28.650Z", "powerConsumptionBreakdown": { "nuclear": 1384, "geothermal": 19, "biomass": 5242, "coal": 19979, "wind": 7080, "solar": 0, "hydro": 3793, "gas": 8643, "oil": 358, "unknown": 404, "hydro discharge": 107, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5359, "coal": 21115, "wind": 6629, "solar": 0, "hydro": 1655, "gas": 8745, "oil": 352, "unknown": 334, "hydro discharge": -1054, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 160, "CH": 0, "CZ": 462, "FR": 1339, "LU": 0, "NL": 506, "PL": 0, "DK-DK1": 1896, "DK-DK2": 675, "NO-NO2": 1403, "SE-SE4": 503 }, "powerExportBreakdown": { "AT": 688, "BE": 0, "CH": 518, "CZ": 0, "FR": 0, "LU": 324, "NL": 0, "PL": 1559, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 38, "renewablePercentage": 35, "powerConsumptionTotal": 47009, "powerProductionTotal": 44209, "powerImportTotal": 6944, "powerExportTotal": 3089, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T05:00:00.000Z", "updatedAt": "2024-03-06T10:47:39.050Z", "createdAt": "2024-03-03T05:48:52.206Z", "powerConsumptionBreakdown": { "nuclear": 2093, "geothermal": 20, "biomass": 5635, "coal": 22483, "wind": 7151, "solar": 37, "hydro": 4506, "gas": 10487, "oil": 387, "unknown": 491, "hydro discharge": 990, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5351, "coal": 22776, "wind": 6376, "solar": 39, "hydro": 1707, "gas": 9619, "oil": 352, "unknown": 334, "hydro discharge": 473, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 372, "CH": 782, "CZ": 233, "FR": 2058, "LU": 0, "NL": 1055, "PL": 0, "DK-DK1": 2283, "DK-DK2": 667, "NO-NO2": 1383, "SE-SE4": 506 }, "powerExportBreakdown": { "AT": 74, "BE": 0, "CH": 0, "CZ": 0, "FR": 0, "LU": 428, "NL": 0, "PL": 1607, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 38, "renewablePercentage": 34, "powerConsumptionTotal": 54278, "powerProductionTotal": 47048, "powerImportTotal": 9339, "powerExportTotal": 2109, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T06:00:00.000Z", "updatedAt": "2024-03-06T13:51:49.605Z", "createdAt": "2024-03-03T06:49:09.893Z", "powerConsumptionBreakdown": { "nuclear": 1771, "geothermal": 20, "biomass": 5533, "coal": 23785, "wind": 6729, "solar": 1317, "hydro": 4156, "gas": 10239, "oil": 369, "unknown": 461, "hydro discharge": 5122, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5309, "coal": 23518, "wind": 6111, "solar": 1325, "hydro": 1736, "gas": 9843, "oil": 351, "unknown": 334, "hydro discharge": 4795, "battery discharge": null }, "powerImportBreakdown": { "AT": 614, "BE": 0, "CH": 922, "CZ": 1461, "FR": 1408, "LU": 0, "NL": 160, "PL": 0, "DK-DK1": 2062, "DK-DK2": 388, "NO-NO2": 833, "SE-SE4": 338 }, "powerExportBreakdown": { "AT": 0, "BE": 487, "CH": 0, "CZ": 0, "FR": 0, "LU": 530, "NL": 0, "PL": 1004, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 42, "renewablePercentage": 39, "powerConsumptionTotal": 59505, "powerProductionTotal": 53342, "powerImportTotal": 8184, "powerExportTotal": 2021, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T07:00:00.000Z", "updatedAt": "2024-03-06T17:10:50.911Z", "createdAt": "2024-03-03T07:49:19.045Z", "powerConsumptionBreakdown": { "nuclear": 1773, "geothermal": 20, "biomass": 5457, "coal": 24167, "wind": 5676, "solar": 5404, "hydro": 3604, "gas": 10035, "oil": 442, "unknown": 441, "hydro discharge": 4319, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5264, "coal": 23613, "wind": 5249, "solar": 5279, "hydro": 1685, "gas": 9724, "oil": 436, "unknown": 334, "hydro discharge": 3899, "battery discharge": null }, "powerImportBreakdown": { "AT": 1117, "BE": 0, "CH": 935, "CZ": 2238, "FR": 1093, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1346, "DK-DK2": 259, "NO-NO2": 391, "SE-SE4": 218 }, "powerExportBreakdown": { "AT": 0, "BE": 189, "CH": 0, "CZ": 0, "FR": 0, "LU": 609, "NL": 445, "PL": 518, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 43, "renewablePercentage": 40, "powerConsumptionTotal": 61339, "powerProductionTotal": 55503, "powerImportTotal": 7596, "powerExportTotal": 1760, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T08:00:00.000Z", "updatedAt": "2024-03-06T17:47:22.104Z", "createdAt": "2024-03-03T08:48:25.598Z", "powerConsumptionBreakdown": { "nuclear": 1624, "geothermal": 20, "biomass": 5226, "coal": 23467, "wind": 4854, "solar": 10382, "hydro": 3699, "gas": 9934, "oil": 392, "unknown": 438, "hydro discharge": 1325, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5194, "coal": 23487, "wind": 4554, "solar": 10383, "hydro": 1666, "gas": 9803, "oil": 394, "unknown": 334, "hydro discharge": 682, "battery discharge": null }, "powerImportBreakdown": { "AT": 1088, "BE": 212, "CH": 565, "CZ": 2149, "FR": 851, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1020, "DK-DK2": 297, "NO-NO2": 904, "SE-SE4": 481 }, "powerExportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 0, "FR": 0, "LU": 577, "NL": 1269, "PL": 878, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 44, "renewablePercentage": 42, "powerConsumptionTotal": 61361, "powerProductionTotal": 56518, "powerImportTotal": 7566, "powerExportTotal": 2723, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T09:00:00.000Z", "updatedAt": "2024-03-06T17:47:22.104Z", "createdAt": "2024-03-03T09:50:35.125Z", "powerConsumptionBreakdown": { "nuclear": 1458, "geothermal": 20, "biomass": 5155, "coal": 22328, "wind": 4540, "solar": 14770, "hydro": 3896, "gas": 9096, "oil": 356, "unknown": 392, "hydro discharge": 127, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5170, "coal": 22236, "wind": 4198, "solar": 14880, "hydro": 1702, "gas": 9066, "oil": 353, "unknown": 330, "hydro discharge": -553, "battery discharge": null }, "powerImportBreakdown": { "AT": 582, "BE": 0, "CH": 0, "CZ": 2011, "FR": 948, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1572, "DK-DK2": 170, "NO-NO2": 1375, "SE-SE4": 509 }, "powerExportBreakdown": { "AT": 0, "BE": 234, "CH": 138, "CZ": 0, "FR": 0, "LU": 398, "NL": 381, "PL": 1282, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 48, "renewablePercentage": 46, "powerConsumptionTotal": 62137, "powerProductionTotal": 57955, "powerImportTotal": 7168, "powerExportTotal": 2432, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T10:00:00.000Z", "updatedAt": "2024-03-06T17:47:22.104Z", "createdAt": "2024-03-03T10:50:32.247Z", "powerConsumptionBreakdown": { "nuclear": 1238, "geothermal": 20, "biomass": 5182, "coal": 21020, "wind": 4216, "solar": 17403, "hydro": 3742, "gas": 8338, "oil": 363, "unknown": 363, "hydro discharge": 160, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5135, "coal": 20875, "wind": 3900, "solar": 17277, "hydro": 1678, "gas": 8230, "oil": 352, "unknown": 281, "hydro discharge": 7, "battery discharge": null }, "powerImportBreakdown": { "AT": 270, "BE": 0, "CH": 0, "CZ": 1794, "FR": 614, "LU": 0, "NL": 631, "PL": 0, "DK-DK1": 1266, "DK-DK2": 406, "NO-NO2": 1403, "SE-SE4": 510 }, "powerExportBreakdown": { "AT": 0, "BE": 359, "CH": 435, "CZ": 0, "FR": 0, "LU": 364, "NL": 0, "PL": 1446, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 52, "renewablePercentage": 50, "powerConsumptionTotal": 62045, "powerProductionTotal": 57756, "powerImportTotal": 6894, "powerExportTotal": 2604, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T11:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T11:47:35.958Z", "powerConsumptionBreakdown": { "nuclear": 1539, "geothermal": 19, "biomass": 5103, "coal": 19623, "wind": 3894, "solar": 17835, "hydro": 3763, "gas": 7941, "oil": 365, "unknown": 349, "hydro discharge": 89, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5150, "coal": 20157, "wind": 3650, "solar": 17685, "hydro": 1694, "gas": 7723, "oil": 352, "unknown": 260, "hydro discharge": -2493, "battery discharge": null }, "powerImportBreakdown": { "AT": 335, "BE": 0, "CH": 0, "CZ": 1542, "FR": 1285, "LU": 0, "NL": 1850, "PL": 0, "DK-DK1": 1470, "DK-DK2": 586, "NO-NO2": 1346, "SE-SE4": 510 }, "powerExportBreakdown": { "AT": 0, "BE": 215, "CH": 454, "CZ": 0, "FR": 0, "LU": 285, "NL": 0, "PL": 1648, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 53, "renewablePercentage": 51, "powerConsumptionTotal": 60519, "powerProductionTotal": 56691, "powerImportTotal": 8923, "powerExportTotal": 2602, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T12:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T12:49:55.906Z", "powerConsumptionBreakdown": { "nuclear": 1777, "geothermal": 19, "biomass": 5108, "coal": 19724, "wind": 3776, "solar": 16830, "hydro": 3525, "gas": 8166, "oil": 360, "unknown": 335, "hydro discharge": 77, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5179, "coal": 20338, "wind": 3624, "solar": 16578, "hydro": 1768, "gas": 7953, "oil": 353, "unknown": 259, "hydro discharge": -1999, "battery discharge": null }, "powerImportBreakdown": { "AT": 154, "BE": 520, "CH": 0, "CZ": 1392, "FR": 1713, "LU": 0, "NL": 1486, "PL": 0, "DK-DK1": 647, "DK-DK2": 669, "NO-NO2": 1341, "SE-SE4": 334 }, "powerExportBreakdown": { "AT": 0, "BE": 0, "CH": 379, "CZ": 0, "FR": 0, "LU": 420, "NL": 0, "PL": 1832, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 52, "renewablePercentage": 49, "powerConsumptionTotal": 59697, "powerProductionTotal": 56072, "powerImportTotal": 8256, "powerExportTotal": 2632, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T13:00:00.000Z", "updatedAt": "2024-03-06T18:48:07.043Z", "createdAt": "2024-03-03T13:48:07.412Z", "powerConsumptionBreakdown": { "nuclear": 1889, "geothermal": 20, "biomass": 5266, "coal": 20418, "wind": 3646, "solar": 14500, "hydro": 3838, "gas": 8385, "oil": 369, "unknown": 348, "hydro discharge": 86, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5222, "coal": 20819, "wind": 3388, "solar": 13919, "hydro": 1739, "gas": 7961, "oil": 352, "unknown": 259, "hydro discharge": -989, "battery discharge": null }, "powerImportBreakdown": { "AT": 55, "BE": 614, "CH": 0, "CZ": 1026, "FR": 1909, "LU": 0, "NL": 1359, "PL": 0, "DK-DK1": 1239, "DK-DK2": 698, "NO-NO2": 1400, "SE-SE4": 282 }, "powerExportBreakdown": { "AT": 0, "BE": 0, "CH": 224, "CZ": 0, "FR": 0, "LU": 468, "NL": 0, "PL": 1815, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 50, "renewablePercentage": 47, "powerConsumptionTotal": 58765, "powerProductionTotal": 53679, "powerImportTotal": 8581, "powerExportTotal": 2507, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T14:00:00.000Z", "updatedAt": "2024-03-06T17:47:22.104Z", "createdAt": "2024-03-03T14:50:33.346Z", "powerConsumptionBreakdown": { "nuclear": 2165, "geothermal": 20, "biomass": 5441, "coal": 21576, "wind": 3998, "solar": 10530, "hydro": 4061, "gas": 9184, "oil": 381, "unknown": 346, "hydro discharge": 401, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5292, "coal": 21854, "wind": 3723, "solar": 9667, "hydro": 1746, "gas": 8583, "oil": 353, "unknown": 260, "hydro discharge": 70, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 0, "CH": 281, "CZ": 614, "FR": 2655, "LU": 0, "NL": 1830, "PL": 0, "DK-DK1": 1332, "DK-DK2": 694, "NO-NO2": 1403, "SE-SE4": 187 }, "powerExportBreakdown": { "AT": 137, "BE": 159, "CH": 0, "CZ": 0, "FR": 0, "LU": 373, "NL": 0, "PL": 1791, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 46, "renewablePercentage": 42, "powerConsumptionTotal": 58104, "powerProductionTotal": 51567, "powerImportTotal": 8996, "powerExportTotal": 2460, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T15:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T15:48:04.095Z", "powerConsumptionBreakdown": { "nuclear": 2316, "geothermal": 20, "biomass": 5538, "coal": 23004, "wind": 4803, "solar": 5287, "hydro": 4294, "gas": 10068, "oil": 374, "unknown": 387, "hydro discharge": 1258, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5358, "coal": 23434, "wind": 4448, "solar": 4792, "hydro": 1749, "gas": 9458, "oil": 353, "unknown": 278, "hydro discharge": 1056, "battery discharge": null }, "powerImportBreakdown": { "AT": 0, "BE": 822, "CH": 476, "CZ": 403, "FR": 2494, "LU": 0, "NL": 134, "PL": 0, "DK-DK1": 2125, "DK-DK2": 709, "NO-NO2": 1403, "SE-SE4": 107 }, "powerExportBreakdown": { "AT": 17, "BE": 0, "CH": 0, "CZ": 0, "FR": 0, "LU": 566, "NL": 0, "PL": 1686, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 41, "renewablePercentage": 37, "powerConsumptionTotal": 57349, "powerProductionTotal": 50946, "powerImportTotal": 8671, "powerExportTotal": 2269, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T16:00:00.000Z", "updatedAt": "2024-03-06T18:48:07.043Z", "createdAt": "2024-03-03T16:49:37.071Z", "powerConsumptionBreakdown": { "nuclear": 2600, "geothermal": 20, "biomass": 5647, "coal": 23421, "wind": 5647, "solar": 1481, "hydro": 4696, "gas": 10478, "oil": 370, "unknown": 467, "hydro discharge": 3771, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5419, "coal": 23953, "wind": 5354, "solar": 1108, "hydro": 1733, "gas": 9760, "oil": 354, "unknown": 301, "hydro discharge": 3388, "battery discharge": null }, "powerImportBreakdown": { "AT": 433, "BE": 859, "CH": 1612, "CZ": 475, "FR": 2552, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 2126, "DK-DK2": 569, "NO-NO2": 1397, "SE-SE4": 16 }, "powerExportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 0, "FR": 0, "LU": 599, "NL": 634, "PL": 1598, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 41, "renewablePercentage": 36, "powerConsumptionTotal": 58598, "powerProductionTotal": 51390, "powerImportTotal": 10039, "powerExportTotal": 2831, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T17:00:00.000Z", "updatedAt": "2024-03-06T18:48:07.043Z", "createdAt": "2024-03-03T17:50:57.878Z", "powerConsumptionBreakdown": { "nuclear": 2497, "geothermal": 20, "biomass": 5626, "coal": 23369, "wind": 6276, "solar": 219, "hydro": 4349, "gas": 10630, "oil": 367, "unknown": 482, "hydro discharge": 4998, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5440, "coal": 24032, "wind": 6090, "solar": 79, "hydro": 1733, "gas": 9980, "oil": 355, "unknown": 315, "hydro discharge": 4663, "battery discharge": null }, "powerImportBreakdown": { "AT": 308, "BE": 961, "CH": 1394, "CZ": 418, "FR": 2552, "LU": 0, "NL": 0, "PL": 0, "DK-DK1": 1651, "DK-DK2": 566, "NO-NO2": 1228, "SE-SE4": 16 }, "powerExportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 0, "FR": 0, "LU": 708, "NL": 664, "PL": 1598, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0, "SE-SE4": 0 }, "fossilFreePercentage": 41, "renewablePercentage": 37, "powerConsumptionTotal": 58831, "powerProductionTotal": 52708, "powerImportTotal": 9093, "powerExportTotal": 2970, "isEstimated": false, "estimationMethod": null }, { "zone": "DE", "datetime": "2024-03-06T18:00:00.000Z", "updatedAt": "2024-03-06T18:48:07.043Z", "createdAt": "2024-03-03T18:47:52.886Z", "powerConsumptionBreakdown": { "nuclear": 787, "geothermal": 20, "biomass": 5820, "coal": 23998, "wind": 6486, "solar": 0, "hydro": 3938, "gas": 10531, "oil": 379, "unknown": 451, "hydro discharge": 4967, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5440, "coal": 24032, "wind": 6090, "solar": 0, "hydro": 1733, "gas": 9980, "oil": 355, "unknown": 315, "hydro discharge": 4663, "battery discharge": null }, "powerImportBreakdown": { "AT": 244, "BE": 901, "CH": 1344, "CZ": 418, "LU": 0, "NL": 0, "DK-DK1": 1473, "DK-DK2": 619, "NO-NO2": 1217 }, "powerExportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "CZ": 0, "LU": 752, "NL": 715, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0 }, "fossilFreePercentage": 38, "renewablePercentage": 37, "powerConsumptionTotal": 57378, "powerProductionTotal": 52629, "powerImportTotal": 6216, "powerExportTotal": 1467, "isEstimated": true, "estimationMethod": "TIME_SLICER_AVERAGE" }, { "zone": "DE", "datetime": "2024-03-06T19:00:00.000Z", "updatedAt": "2024-03-06T18:48:27.926Z", "createdAt": "2024-03-03T19:46:59.534Z", "powerConsumptionBreakdown": { "nuclear": 440, "geothermal": 21, "biomass": 5896, "coal": 23893, "wind": 6998, "solar": 0, "hydro": 2870, "gas": 10334, "oil": 339, "unknown": 403, "hydro discharge": 1706, "battery discharge": 0 }, "powerProductionBreakdown": { "nuclear": null, "geothermal": 21, "biomass": 5408, "coal": 23339, "wind": 6415, "solar": 0, "hydro": 1671, "gas": 9602, "oil": 304, "unknown": 313, "hydro discharge": 1496, "battery discharge": null }, "powerImportBreakdown": { "AT": 244, "BE": 901, "CH": 1344, "LU": 0, "NL": 0, "DK-DK1": 1473, "DK-DK2": 619, "NO-NO2": 1217 }, "powerExportBreakdown": { "AT": 0, "BE": 0, "CH": 0, "LU": 752, "NL": 715, "DK-DK1": 0, "DK-DK2": 0, "NO-NO2": 0 }, "fossilFreePercentage": 34, "renewablePercentage": 33, "powerConsumptionTotal": 52901, "powerProductionTotal": 48570, "powerImportTotal": 5798, "powerExportTotal": 1467, "isEstimated": true, "estimationMethod": "TIME_SLICER_AVERAGE" } ] } aioelectricitymaps-1.1.0/tests/fixtures/response.json000066400000000000000000000006231475061435500231620ustar00rootroot00000000000000{ "_disclaimer": "This data is the exclusive property of Electricity Maps and/or related parties. If you're in doubt about your rights to use this data, please contact api@co2signal.com", "status": "ok", "countryCode": "DE", "data": { "datetime": "2023-10-02T08:00:00.000Z", "carbonIntensity": 474, "fossilFuelPercentage": 42.22 }, "units": { "carbonIntensity": "gCO2eq/kWh" } } aioelectricitymaps-1.1.0/tests/fixtures/unknown-response.json000066400000000000000000000004651475061435500246630ustar00rootroot00000000000000{ "_disclaimer": "This data is the exclusive property of Electricity Maps and/or related parties. If you're in doubt about your rights to use this data, please contact api@co2signal.com", "status": "idk-what-happened", "countryCode": "DE", "data": {}, "units": { "carbonIntensity": "gCO2eq/kWh" } } aioelectricitymaps-1.1.0/tests/fixtures/zones.json000066400000000000000000000540331475061435500224660ustar00rootroot00000000000000{ "AD": { "zoneName": "Andorra" }, "AE": { "zoneName": "United Arab Emirates" }, "AF": { "zoneName": "Afghanistan" }, "AG": { "zoneName": "Antigua and Barbuda" }, "AL": { "zoneName": "Albania" }, "AM": { "zoneName": "Armenia" }, "AO": { "zoneName": "Angola" }, "AR": { "zoneName": "Argentina" }, "AT": { "zoneName": "Austria" }, "AU": { "zoneName": "Australia" }, "AU-LH": { "countryName": "Australia", "zoneName": "Lord Howe Island" }, "AU-NSW": { "countryName": "Australia", "zoneName": "New South Wales" }, "AU-NT": { "countryName": "Australia", "zoneName": "Northern Territory" }, "AU-QLD": { "countryName": "Australia", "zoneName": "Queensland" }, "AU-SA": { "countryName": "Australia", "zoneName": "South Australia" }, "AU-TAS": { "countryName": "Australia", "zoneName": "Tasmania" }, "AU-TAS-CBI": { "countryName": "Australia", "zoneName": "Cape Barren Island" }, "AU-TAS-FI": { "countryName": "Australia", "zoneName": "Flinders Island" }, "AU-TAS-KI": { "countryName": "Australia", "zoneName": "King Island" }, "AU-VIC": { "countryName": "Australia", "zoneName": "Victoria" }, "AU-WA": { "countryName": "Australia", "zoneName": "Western Australia" }, "AU-WA-RI": { "countryName": "Australia", "zoneName": "Rottnest Island" }, "AW": { "zoneName": "Aruba" }, "AX": { "zoneName": "ร…land Islands" }, "AZ": { "zoneName": "Azerbaijan" }, "BA": { "zoneName": "Bosnia and Herzegovina" }, "BB": { "zoneName": "Barbados" }, "BD": { "zoneName": "Bangladesh" }, "BE": { "zoneName": "Belgium" }, "BF": { "zoneName": "Burkina Faso" }, "BG": { "zoneName": "Bulgaria" }, "BH": { "zoneName": "Bahrain" }, "BI": { "zoneName": "Burundi" }, "BJ": { "zoneName": "Benin" }, "BN": { "zoneName": "Brunei" }, "BO": { "zoneName": "Bolivia" }, "BR": { "zoneName": "Brazil" }, "BR-CS": { "countryName": "Brazil", "zoneName": "Central Brazil" }, "BR-N": { "countryName": "Brazil", "zoneName": "North Brazil" }, "BR-NE": { "countryName": "Brazil", "zoneName": "North-East Brazil" }, "BR-S": { "countryName": "Brazil", "zoneName": "South Brazil" }, "BS": { "zoneName": "Bahamas" }, "BT": { "zoneName": "Bhutan" }, "BW": { "zoneName": "Botswana" }, "BY": { "zoneName": "Belarus" }, "BZ": { "zoneName": "Belize" }, "CA-AB": { "countryName": "Canada", "zoneName": "Alberta" }, "CA-BC": { "countryName": "Canada", "zoneName": "British Columbia" }, "CA-MB": { "countryName": "Canada", "zoneName": "Manitoba" }, "CA-NB": { "countryName": "Canada", "zoneName": "New Brunswick" }, "CA-NL-LB": { "countryName": "Canada", "zoneName": "Labrador" }, "CA-NL-NF": { "countryName": "Canada", "zoneName": "Newfoundland" }, "CA-NS": { "countryName": "Canada", "zoneName": "Nova Scotia" }, "CA-NT": { "countryName": "Canada", "zoneName": "Northwest Territories" }, "CA-NU": { "countryName": "Canada", "zoneName": "Nunavut" }, "CA-ON": { "countryName": "Canada", "zoneName": "Ontario" }, "CA-PE": { "countryName": "Canada", "zoneName": "Prince Edward Island" }, "CA-QC": { "countryName": "Canada", "zoneName": "Quรฉbec" }, "CA-SK": { "countryName": "Canada", "zoneName": "Saskatchewan" }, "CA-YT": { "countryName": "Canada", "zoneName": "Yukon" }, "CD": { "zoneName": "Democratic Republic of the Congo" }, "CF": { "zoneName": "Central African Republic" }, "CG": { "zoneName": "Congo" }, "CH": { "zoneName": "Switzerland" }, "CI": { "zoneName": "Ivory Coast" }, "CL-CHP": { "countryName": "Chile", "zoneName": "Easter Island" }, "CL-SEA": { "countryName": "Chile", "zoneName": "Sistema Elรฉctrico de Aysรฉn" }, "CL-SEM": { "countryName": "Chile", "zoneName": "Sistema Elรฉctrico de Magallanes" }, "CL-SEN": { "countryName": "Chile", "zoneName": "Sistema Elรฉctrico Nacional" }, "CM": { "zoneName": "Cameroon" }, "CN": { "zoneName": "China" }, "CO": { "zoneName": "Colombia" }, "CR": { "zoneName": "Costa Rica" }, "CU": { "zoneName": "Cuba" }, "CV": { "zoneName": "Cabo Verde" }, "CY": { "zoneName": "Cyprus" }, "CZ": { "zoneName": "Czechia" }, "DE": { "zoneName": "Germany" }, "DJ": { "zoneName": "Djibouti" }, "DK": { "zoneName": "Denmark" }, "DK-BHM": { "countryName": "Denmark", "zoneName": "Bornholm" }, "DK-DK1": { "countryName": "Denmark", "zoneName": "West Denmark" }, "DK-DK2": { "countryName": "Denmark", "zoneName": "East Denmark" }, "DM": { "zoneName": "Dominica" }, "DO": { "zoneName": "Dominican Republic" }, "DZ": { "zoneName": "Algeria" }, "EC": { "zoneName": "Ecuador" }, "EE": { "zoneName": "Estonia" }, "EG": { "zoneName": "Egypt" }, "EH": { "zoneName": "Western Sahara" }, "ER": { "zoneName": "Eritrea" }, "ES": { "zoneName": "Spain" }, "ES-CE": { "countryName": "Spain", "zoneName": "Ceuta" }, "ES-CN-FVLZ": { "countryName": "Spain", "zoneName": "Fuerteventura/Lanzarote" }, "ES-CN-GC": { "countryName": "Spain", "zoneName": "Gran Canaria" }, "ES-CN-HI": { "countryName": "Spain", "zoneName": "El Hierro" }, "ES-CN-IG": { "countryName": "Spain", "zoneName": "Isla de la Gomera" }, "ES-CN-LP": { "countryName": "Spain", "zoneName": "La Palma" }, "ES-CN-TE": { "countryName": "Spain", "zoneName": "Tenerife" }, "ES-IB-FO": { "countryName": "Spain", "zoneName": "Formentera" }, "ES-IB-IZ": { "countryName": "Spain", "zoneName": "Ibiza" }, "ES-IB-MA": { "countryName": "Spain", "zoneName": "Mallorca" }, "ES-IB-ME": { "countryName": "Spain", "zoneName": "Menorca" }, "ES-ML": { "countryName": "Spain", "zoneName": "Melilla" }, "ET": { "zoneName": "Ethiopia" }, "FI": { "zoneName": "Finland" }, "FJ": { "zoneName": "Fiji" }, "FK": { "zoneName": "Falkland Islands" }, "FM": { "zoneName": "Micronesia" }, "FO": { "zoneName": "Faroe Islands" }, "FO-MI": { "countryName": "Faroe Islands", "zoneName": "Main Islands" }, "FO-SI": { "countryName": "Faroe Islands", "zoneName": "South Island" }, "FR": { "zoneName": "France" }, "FR-COR": { "countryName": "France", "zoneName": "Corsica" }, "GA": { "zoneName": "Gabon" }, "GB": { "zoneName": "Great Britain" }, "GB-NIR": { "zoneName": "Northern Ireland" }, "GB-ORK": { "countryName": "Great Britain", "zoneName": "Orkney Islands" }, "GB-ZET": { "zoneName": "Unknown" }, "GE": { "zoneName": "Georgia" }, "GF": { "zoneName": "French Guiana" }, "GH": { "zoneName": "Ghana" }, "GL": { "zoneName": "Greenland" }, "GM": { "zoneName": "Gambia" }, "GN": { "zoneName": "Guinea" }, "GP": { "zoneName": "Guadeloupe" }, "GQ": { "zoneName": "Equatorial Guinea" }, "GR": { "zoneName": "Greece" }, "GR-IS": { "countryName": "Greece", "zoneName": "Aegean Islands" }, "GS": { "zoneName": "South Georgia and the South Sandwich Islands" }, "GT": { "zoneName": "Guatemala" }, "GU": { "zoneName": "Guam" }, "GW": { "zoneName": "Guinea-Bissau" }, "GY": { "zoneName": "Guyana" }, "HK": { "zoneName": "Hong Kong" }, "HM": { "zoneName": "Heard Island and McDonald Islands" }, "HN": { "zoneName": "Honduras" }, "HR": { "zoneName": "Croatia" }, "HT": { "zoneName": "Haiti" }, "HU": { "zoneName": "Hungary" }, "ID": { "zoneName": "Indonesia" }, "IE": { "zoneName": "Ireland" }, "IL": { "zoneName": "Israel" }, "IM": { "zoneName": "Isle of Man" }, "IN": { "zoneName": "Mainland India" }, "IN-AN": { "countryName": "India", "zoneName": "Andaman and Nicobar Islands" }, "IN-DL": { "countryName": "India", "zoneName": "Delhi" }, "IN-EA": { "countryName": "India", "zoneName": "Eastern India" }, "IN-HP": { "countryName": "India", "zoneName": "Himachal Pradesh" }, "IN-KA": { "countryName": "India", "zoneName": "Karnataka" }, "IN-MH": { "countryName": "India", "zoneName": "Maharashtra" }, "IN-NE": { "countryName": "India", "zoneName": "North Eastern India" }, "IN-NO": { "countryName": "India", "zoneName": "Northern India" }, "IN-PB": { "countryName": "India", "zoneName": "Punjab" }, "IN-SO": { "countryName": "India", "zoneName": "Southern India" }, "IN-UP": { "countryName": "India", "zoneName": "Uttar Pradesh" }, "IN-UT": { "countryName": "India", "zoneName": "Uttarakhand" }, "IN-WE": { "countryName": "India", "zoneName": "Western India" }, "IQ": { "zoneName": "Iraq" }, "IQ-KUR": { "countryName": "Iraq", "zoneName": "Kurdistan" }, "IR": { "zoneName": "Iran" }, "IS": { "zoneName": "Iceland" }, "IT": { "zoneName": "Italy" }, "IT-CNO": { "countryName": "Italy", "zoneName": "Central North Italy" }, "IT-CSO": { "countryName": "Italy", "zoneName": "Central South Italy" }, "IT-NO": { "countryName": "Italy", "zoneName": "North Italy" }, "IT-SAR": { "countryName": "Italy", "zoneName": "Sardinia" }, "IT-SIC": { "countryName": "Italy", "zoneName": "Sicily" }, "IT-SO": { "countryName": "Italy", "zoneName": "South Italy" }, "JM": { "zoneName": "Jamaica" }, "JO": { "zoneName": "Jordan" }, "JP": { "zoneName": "Japan" }, "JP-CB": { "countryName": "Japan", "zoneName": "Chลซbu" }, "JP-CG": { "countryName": "Japan", "zoneName": "Chลซgoku" }, "JP-HKD": { "countryName": "Japan", "zoneName": "Hokkaidล" }, "JP-HR": { "countryName": "Japan", "zoneName": "Hokuriku" }, "JP-KN": { "countryName": "Japan", "zoneName": "Kansai" }, "JP-KY": { "countryName": "Japan", "zoneName": "Kyลซshลซ" }, "JP-ON": { "countryName": "Japan", "zoneName": "Okinawa" }, "JP-SK": { "countryName": "Japan", "zoneName": "Shikoku" }, "JP-TH": { "countryName": "Japan", "zoneName": "Tลhoku" }, "JP-TK": { "countryName": "Japan", "zoneName": "Tลkyล" }, "KE": { "zoneName": "Kenya" }, "KG": { "zoneName": "Kyrgyzstan" }, "KH": { "zoneName": "Cambodia" }, "KM": { "zoneName": "Comoros" }, "KP": { "zoneName": "North Korea" }, "KR": { "zoneName": "South Korea" }, "KW": { "zoneName": "Kuwait" }, "KZ": { "zoneName": "Kazakhstan" }, "LA": { "zoneName": "Laos" }, "LB": { "zoneName": "Lebanon" }, "LC": { "zoneName": "Saint Lucia" }, "LI": { "zoneName": "Liechtenstein" }, "LK": { "zoneName": "Sri Lanka" }, "LR": { "zoneName": "Liberia" }, "LS": { "zoneName": "Lesotho" }, "LT": { "zoneName": "Lithuania" }, "LU": { "zoneName": "Luxembourg" }, "LV": { "zoneName": "Latvia" }, "LY": { "zoneName": "Libya" }, "MA": { "zoneName": "Morocco" }, "MD": { "zoneName": "Moldova" }, "ME": { "zoneName": "Montenegro" }, "MG": { "zoneName": "Madagascar" }, "MK": { "zoneName": "North Macedonia" }, "ML": { "zoneName": "Mali" }, "MM": { "zoneName": "Myanmar" }, "MN": { "zoneName": "Mongolia" }, "MQ": { "zoneName": "Martinique" }, "MR": { "zoneName": "Mauritania" }, "MT": { "zoneName": "Malta" }, "MU": { "zoneName": "Mauritius" }, "MW": { "zoneName": "Malawi" }, "MX": { "zoneName": "Mexico" }, "MX-BC": { "countryName": "Mexico", "zoneName": "Baja California" }, "MX-BCS": { "countryName": "Mexico", "zoneName": "Baja California Sur" }, "MX-CE": { "countryName": "Mexico", "zoneName": "Central" }, "MX-NE": { "countryName": "Mexico", "zoneName": "North East" }, "MX-NO": { "countryName": "Mexico", "zoneName": "North" }, "MX-NW": { "countryName": "Mexico", "zoneName": "North West" }, "MX-OC": { "countryName": "Mexico", "zoneName": "Occidental" }, "MX-OR": { "countryName": "Mexico", "zoneName": "Oriental" }, "MX-PN": { "countryName": "Mexico", "zoneName": "Peninsula" }, "MY-EM": { "countryName": "Malaysia", "zoneName": "Borneo" }, "MY-WM": { "countryName": "Malaysia", "zoneName": "Peninsula" }, "MZ": { "zoneName": "Mozambique" }, "NA": { "zoneName": "Namibia" }, "NC": { "zoneName": "New Caledonia" }, "NE": { "zoneName": "Niger" }, "NG": { "zoneName": "Nigeria" }, "NI": { "zoneName": "Nicaragua" }, "NKR": { "zoneName": "Nagorno-Karabakh" }, "NL": { "zoneName": "Netherlands" }, "NO": { "zoneName": "Norway" }, "NO-NO1": { "countryName": "Norway", "zoneName": "Southeast Norway" }, "NO-NO2": { "countryName": "Norway", "zoneName": "Southwest Norway" }, "NO-NO3": { "countryName": "Norway", "zoneName": "Middle Norway" }, "NO-NO4": { "countryName": "Norway", "zoneName": "North Norway" }, "NO-NO5": { "countryName": "Norway", "zoneName": "West Norway" }, "NP": { "zoneName": "Nepal" }, "NZ": { "zoneName": "New Zealand" }, "NZ-NZA": { "countryName": "New Zealand", "zoneName": "Auckland Islands" }, "NZ-NZC": { "countryName": "New Zealand", "zoneName": "Chatham Islands" }, "NZ-NZST": { "countryName": "New Zealand", "zoneName": "Stewart Island" }, "OM": { "zoneName": "Oman" }, "PA": { "zoneName": "Panama" }, "PE": { "zoneName": "Peru" }, "PF": { "zoneName": "French Polynesia" }, "PG": { "zoneName": "Papua New Guinea" }, "PH": { "zoneName": "Philippines" }, "PH-LU": { "countryName": "Philippines", "zoneName": "Luzon" }, "PH-MI": { "countryName": "Philippines", "zoneName": "Mindanao" }, "PH-VI": { "countryName": "Philippines", "zoneName": "Visayas" }, "PK": { "zoneName": "Pakistan" }, "PL": { "zoneName": "Poland" }, "PM": { "zoneName": "Saint Pierre and Miquelon" }, "PR": { "zoneName": "Puerto Rico" }, "PS": { "zoneName": "State of Palestine" }, "PT": { "zoneName": "Portugal" }, "PT-AC": { "countryName": "Portugal", "zoneName": "Azores" }, "PT-MA": { "countryName": "Portugal", "zoneName": "Madeira" }, "PW": { "zoneName": "Palau" }, "PY": { "zoneName": "Paraguay" }, "QA": { "zoneName": "Qatar" }, "RE": { "zoneName": "Rรฉunion" }, "RO": { "zoneName": "Romania" }, "RS": { "zoneName": "Serbia" }, "RU": { "zoneName": "Russia" }, "RU-1": { "countryName": "Russia", "zoneName": "Europe-Ural" }, "RU-2": { "countryName": "Russia", "zoneName": "Siberia" }, "RU-AS": { "countryName": "Russia", "zoneName": "East" }, "RU-EU": { "countryName": "Russia", "zoneName": "Arctic" }, "RU-FE": { "countryName": "Russia", "zoneName": "Far East" }, "RU-KGD": { "countryName": "Russia", "zoneName": "Kaliningrad" }, "RW": { "zoneName": "Rwanda" }, "SA": { "zoneName": "Saudi Arabia" }, "SB": { "zoneName": "Solomon Islands" }, "SD": { "zoneName": "Sudan" }, "SE": { "zoneName": "Sweden" }, "SE-SE1": { "countryName": "Sweden", "zoneName": "North Sweden" }, "SE-SE2": { "countryName": "Sweden", "zoneName": "North Central Sweden" }, "SE-SE3": { "countryName": "Sweden", "zoneName": "South Central Sweden" }, "SE-SE4": { "countryName": "Sweden", "zoneName": "South Sweden" }, "SG": { "zoneName": "Singapore" }, "SI": { "zoneName": "Slovenia" }, "SJ": { "zoneName": "Svalbard and Jan Mayen" }, "SK": { "zoneName": "Slovakia" }, "SL": { "zoneName": "Sierra Leone" }, "SN": { "zoneName": "Senegal" }, "SO": { "zoneName": "Somalia" }, "SR": { "zoneName": "Suriname" }, "SS": { "zoneName": "South Sudan" }, "ST": { "zoneName": "Sao Tome and Principe" }, "SV": { "zoneName": "El Salvador" }, "SY": { "zoneName": "Syria" }, "SZ": { "zoneName": "Swaziland" }, "TD": { "zoneName": "Chad" }, "TF": { "zoneName": "French Southern Territories" }, "TG": { "zoneName": "Togo" }, "TH": { "zoneName": "Thailand" }, "TJ": { "zoneName": "Tajikistan" }, "TL": { "zoneName": "Timor-Leste" }, "TM": { "zoneName": "Turkmenistan" }, "TN": { "zoneName": "Tunisia" }, "TO": { "zoneName": "Tonga" }, "TR": { "zoneName": "Turkey" }, "TT": { "zoneName": "Trinidad and Tobago" }, "TW": { "zoneName": "Taiwan" }, "TZ": { "zoneName": "Tanzania" }, "UA": { "zoneName": "Ukraine" }, "UA-CR": { "countryName": "Ukraine", "zoneName": "Crimea" }, "UG": { "zoneName": "Uganda" }, "US": { "zoneName": "Contiguous United States" }, "US-AK": { "countryName": "USA", "zoneName": "Alaska" }, "US-CAL-BANC": { "countryName": "USA", "zoneName": "Balancing Authority Of Northern California" }, "US-CAL-CISO": { "countryName": "USA", "zoneName": "California Independent System Operator" }, "US-CAL-IID": { "countryName": "USA", "zoneName": "Imperial Irrigation District" }, "US-CAL-LDWP": { "countryName": "USA", "zoneName": "Los Angeles Department Of Water And Power" }, "US-CAL-TIDC": { "countryName": "USA", "zoneName": "Turlock Irrigation District" }, "US-CAR-CPLE": { "countryName": "USA", "zoneName": "Duke Energy Progress East" }, "US-CAR-CPLW": { "countryName": "USA", "zoneName": "Duke Energy Progress West" }, "US-CAR-DUK": { "countryName": "USA", "zoneName": "Duke Energy Carolinas" }, "US-CAR-SC": { "countryName": "USA", "zoneName": "South Carolina Public Service Authority" }, "US-CAR-SCEG": { "countryName": "USA", "zoneName": "South Carolina Electric & Gas Company" }, "US-CAR-YAD": { "countryName": "USA", "zoneName": "Alcoa Power Generating, Inc. Yadkin Division" }, "US-CENT-SPA": { "countryName": "USA", "zoneName": "Southwestern Power Administration" }, "US-CENT-SWPP": { "countryName": "USA", "zoneName": "Southwest Power Pool" }, "US-FLA-FMPP": { "countryName": "USA", "zoneName": "Florida Municipal Power Pool" }, "US-FLA-FPC": { "countryName": "USA", "zoneName": "Duke Energy Florida Inc" }, "US-FLA-FPL": { "countryName": "USA", "zoneName": "Florida Power & Light Company" }, "US-FLA-GVL": { "countryName": "USA", "zoneName": "Gainesville Regional Utilities" }, "US-FLA-HST": { "countryName": "USA", "zoneName": "City Of Homestead" }, "US-FLA-JEA": { "countryName": "USA", "zoneName": "Jacksonville Electric Authority" }, "US-FLA-SEC": { "countryName": "USA", "zoneName": "Seminole Electric Cooperative" }, "US-FLA-TAL": { "countryName": "USA", "zoneName": "City Of Tallahassee" }, "US-FLA-TEC": { "countryName": "USA", "zoneName": "Tampa Electric Company" }, "US-HI-HA": { "countryName": "USA", "zoneName": "Hawaii" }, "US-HI-KA": { "countryName": "USA", "zoneName": "Kauai" }, "US-HI-KH": { "countryName": "USA", "zoneName": "Kahoolawe" }, "US-HI-LA": { "countryName": "USA", "zoneName": "Lanai" }, "US-HI-MA": { "countryName": "USA", "zoneName": "Maui" }, "US-HI-MO": { "countryName": "USA", "zoneName": "Molokai" }, "US-HI-NI": { "countryName": "USA", "zoneName": "Niihau" }, "US-HI-OA": { "countryName": "USA", "zoneName": "Oahu" }, "US-MIDA-PJM": { "countryName": "USA", "zoneName": "PJM Interconnection, Llc" }, "US-MIDW-AECI": { "countryName": "USA", "zoneName": "Associated Electric Cooperative, Inc." }, "US-MIDW-LGEE": { "countryName": "USA", "zoneName": "Louisville Gas And Electric Company And Kentucky Utilities" }, "US-MIDW-MISO": { "countryName": "USA", "zoneName": "Midcontinent Independent Transmission System Operator, Inc." }, "US-NE-ISNE": { "countryName": "USA", "zoneName": "Iso New England Inc." }, "US-NW-AVA": { "countryName": "USA", "zoneName": "Avista Corporation" }, "US-NW-BPAT": { "countryName": "USA", "zoneName": "Bonneville Power Administration" }, "US-NW-CHPD": { "countryName": "USA", "zoneName": "PUD No. 1 Of Chelan County" }, "US-NW-DOPD": { "countryName": "USA", "zoneName": "PUD No. 1 Of Douglas County" }, "US-NW-GCPD": { "countryName": "USA", "zoneName": "PUD No. 2 Of Grant County, Washington" }, "US-NW-GRID": { "countryName": "USA", "zoneName": "Gridforce Energy Management, Llc" }, "US-NW-GWA": { "countryName": "USA", "zoneName": "Naturener Power Watch, Llc (Gwa)" }, "US-NW-IPCO": { "countryName": "USA", "zoneName": "Idaho Power Company" }, "US-NW-NEVP": { "countryName": "USA", "zoneName": "Nevada Power Company" }, "US-NW-NWMT": { "countryName": "USA", "zoneName": "Northwestern Energy" }, "US-NW-PACE": { "countryName": "USA", "zoneName": "Pacificorp East" }, "US-NW-PACW": { "countryName": "USA", "zoneName": "Pacificorp West" }, "US-NW-PGE": { "countryName": "USA", "zoneName": "Portland General Electric Company" }, "US-NW-PSCO": { "countryName": "USA", "zoneName": "Public Service Company Of Colorado" }, "US-NW-PSEI": { "countryName": "USA", "zoneName": "Puget Sound Energy" }, "US-NW-SCL": { "countryName": "USA", "zoneName": "Seattle City Light" }, "US-NW-TPWR": { "countryName": "USA", "zoneName": "City Of Tacoma, Department Of Public Utilities, Light Division" }, "US-NW-WACM": { "countryName": "USA", "zoneName": "Western Area Power Administration - Rocky Mountain Region" }, "US-NW-WAUW": { "countryName": "USA", "zoneName": "Western Area Power Administration UGP West" }, "US-NW-WWA": { "countryName": "USA", "zoneName": "Naturener Wind Watch, Llc" }, "US-NY-NYIS": { "countryName": "USA", "zoneName": "New York Independent System Operator" }, "US-SE-SEPA": { "countryName": "USA", "zoneName": "Southeastern Power Administration" }, "US-SE-SOCO": { "countryName": "USA", "zoneName": "Southern Company Services, Inc. - Trans" }, "US-SW-AZPS": { "countryName": "USA", "zoneName": "Arizona Public Service Company" }, "US-SW-EPE": { "countryName": "USA", "zoneName": "El Paso Electric Company" }, "US-SW-GRIF": { "countryName": "USA", "zoneName": "Griffith Energy, LLC" }, "US-SW-PNM": { "countryName": "USA", "zoneName": "Public Service Company Of New Mexico" }, "US-SW-SRP": { "countryName": "USA", "zoneName": "Salt River Project" }, "US-SW-TEPC": { "countryName": "USA", "zoneName": "Tucson Electric Power Company" }, "US-SW-WALC": { "countryName": "USA", "zoneName": "Western Area Power Administration - Desert Southwest Region" }, "US-TEN-TVA": { "countryName": "USA", "zoneName": "Tennessee Valley Authority" }, "US-TEX-ERCO": { "countryName": "USA", "zoneName": "Electric Reliability Council Of Texas, Inc." }, "UY": { "zoneName": "Uruguay" }, "UZ": { "zoneName": "Uzbekistan" }, "VC": { "zoneName": "Saint Vincent and the Grenadines" }, "VE": { "zoneName": "Venezuela" }, "VI": { "countryName": "USA", "zoneName": "Virgin Islands" }, "VN": { "zoneName": "Vietnam" }, "VN-C": { "countryName": "Vietnam", "zoneName": "Central Vietnam" }, "VN-N": { "countryName": "Vietnam", "zoneName": "Northern Vietnam" }, "VN-S": { "countryName": "Vietnam", "zoneName": "Southern Vietnam" }, "VU": { "zoneName": "Vanuatu" }, "WS": { "zoneName": "Samoa" }, "XK": { "zoneName": "Kosovo" }, "XX": { "zoneName": "Northern Cyprus" }, "YE": { "zoneName": "Yemen" }, "YT": { "zoneName": "Mayotte" }, "ZA": { "zoneName": "South Africa" }, "ZM": { "zoneName": "Zambia" }, "ZW": { "zoneName": "Zimbabwe" } } aioelectricitymaps-1.1.0/tests/ruff.toml000066400000000000000000000007621475061435500204230ustar00rootroot00000000000000# This extend our general Ruff rules specifically for tests extend = "../pyproject.toml" lint.extend-select = [ "PT", # Use @pytest.fixture without parentheses ] lint.extend-ignore = [ "S101", # Use of assert detected. As these are tests... "S105", # Detection of passwords... "S106", # Detection of passwords... "SLF001", # Tests will access private/protected members... "TCH002", # pytest doesn't like this one... "PLR0913", # we're overwriting function that has many arguments ] aioelectricitymaps-1.1.0/tests/test_electricitymaps.py000066400000000000000000000144241475061435500233760ustar00rootroot00000000000000"""Tests for the electricitymaps.com client.""" from aioresponses import aioresponses import pytest from syrupy.assertion import SnapshotAssertion from aioelectricitymaps import CoordinatesRequest, ElectricityMaps, ZoneRequest from aioelectricitymaps.exceptions import ( ElectricityMapsConnectionError, ElectricityMapsConnectionTimeoutError, ElectricityMapsError, ElectricityMapsInvalidTokenError, ElectricityMapsNoDataError, ) from . import load_fixture @pytest.mark.usefixtures("mock_response") async def test_json_request_without_session(snapshot: SnapshotAssertion) -> None: """Test JSON response is handled correctly without given session.""" async with ElectricityMaps(token="abc123") as em: assert ( await em.carbon_intensity_for_home_assistant(ZoneRequest("DE")) == snapshot ) assert em.session is not None assert em.session.closed @pytest.mark.usefixtures("mock_response") async def test_carbon_intensity_by_coordinates( electricitymaps_client: ElectricityMaps, snapshot: SnapshotAssertion, ) -> None: """Test carbon_intentsity_by_coordinates with given session.""" assert ( await electricitymaps_client.carbon_intensity_for_home_assistant( CoordinatesRequest( lat="53.1357012", lon="8.2024685", ), ) == snapshot ) async def test_catching_client_error( electricitymaps_client: ElectricityMaps, responses: aioresponses, ) -> None: """Test JSON response is handled correctly with given session.""" responses.get( "https://api.electricitymap.org/v3/home-assistant?zone=DE", status=500, headers={"Content-Type": "application/json"}, body="Boooom!", ) with pytest.raises(ElectricityMapsConnectionError): await electricitymaps_client.carbon_intensity_for_home_assistant( ZoneRequest("DE"), ) async def test_zones_request( electricitymaps_client: ElectricityMaps, responses: aioresponses, snapshot: SnapshotAssertion, ) -> None: """Test zones request.""" responses.get( "https://api.electricitymap.org/v3/zones", status=200, headers={"Content-Type": "application/json"}, body=load_fixture("zones.json"), ) assert await electricitymaps_client.zones() == snapshot async def test_timeout( electricitymaps_client: ElectricityMaps, responses: aioresponses, ) -> None: """Test request timeout.""" responses.add( "https://api.electricitymap.org/v3/home-assistant?zone=DE", timeout=True, ) with pytest.raises(ElectricityMapsConnectionTimeoutError): await electricitymaps_client.carbon_intensity_for_home_assistant( ZoneRequest("DE"), ) async def test_invalid_token( electricitymaps_client: ElectricityMaps, responses: aioresponses, ) -> None: """Test invalid token response.""" responses.get( "https://api.electricitymap.org/v3/home-assistant?zone=DE", status=401, headers={"Content-Type": "application/json"}, body="", ) with pytest.raises(ElectricityMapsInvalidTokenError): await electricitymaps_client.carbon_intensity_for_home_assistant( ZoneRequest("DE"), ) @pytest.mark.parametrize( ("filename", "expected_exception"), [ ("no-data-response.json", ElectricityMapsNoDataError), ("unknown-response.json", ElectricityMapsError), ], ) async def test_not_ok_responses( electricitymaps_client: ElectricityMaps, responses: aioresponses, filename: str, expected_exception: type[Exception], ) -> None: """Test not-ok responses.""" responses.get( "https://api.electricitymap.org/v3/home-assistant?zone=DE", status=200, headers={"Content-Type": "application/json"}, body=load_fixture(filename), ) with pytest.raises(expected_exception): await electricitymaps_client.carbon_intensity_for_home_assistant( ZoneRequest("DE"), ) async def test_latest_power_breakdown( electricitymaps_client: ElectricityMaps, responses: aioresponses, snapshot: SnapshotAssertion, ) -> None: """Test latest_power_breakdown.""" responses.get( "https://api.electricitymap.org/v3/power-breakdown/latest?zone=DE", status=200, headers={"Content-Type": "application/json"}, body=load_fixture("latest_power_breakdown.json"), ) assert ( await electricitymaps_client.latest_power_breakdown( ZoneRequest("DE"), ) == snapshot ) async def test_power_breakdown_history( electricitymaps_client: ElectricityMaps, responses: aioresponses, snapshot: SnapshotAssertion, ) -> None: """Test power_breakdown_history.""" responses.get( "https://api.electricitymap.org/v3/power-breakdown/history?zone=DE", status=200, headers={"Content-Type": "application/json"}, body=load_fixture("power_breakdown_history.json"), ) assert ( await electricitymaps_client.power_breakdown_history( ZoneRequest("DE"), ) == snapshot ) async def test_latest_carbon_intensity( electricitymaps_client: ElectricityMaps, responses: aioresponses, snapshot: SnapshotAssertion, ) -> None: """Test latest_power_breakdown.""" responses.get( "https://api.electricitymap.org/v3/carbon-intensity/latest?zone=DE", status=200, headers={"Content-Type": "application/json"}, body=load_fixture("latest_carbon_intensity.json"), ) assert ( await electricitymaps_client.latest_carbon_intensity( ZoneRequest("DE"), ) == snapshot ) async def test_carbon_intensity_history( electricitymaps_client: ElectricityMaps, responses: aioresponses, snapshot: SnapshotAssertion, ) -> None: """Test power_breakdown_history.""" responses.get( "https://api.electricitymap.org/v3/carbon-intensity/history?zone=DE", status=200, headers={"Content-Type": "application/json"}, body=load_fixture("carbon_intensity_history.json"), ) assert ( await electricitymaps_client.carbon_intensity_history( ZoneRequest("DE"), ) == snapshot )