pax_global_header00006660000000000000000000000064147573522600014525gustar00rootroot0000000000000052 comment=19f99d8e59c14d1152ccb274ba1605536ddf5379 joostlek-python-overseerr-19f99d8/000077500000000000000000000000001475735226000172675ustar00rootroot00000000000000joostlek-python-overseerr-19f99d8/.editorconfig000066400000000000000000000002741475735226000217470ustar00rootroot00000000000000root = true [*] charset = utf-8 end_of_line = lf indent_style = space insert_final_newline = true trim_trailing_whitespace = true indent_size = 4 [*.md] trim_trailing_whitespace = false joostlek-python-overseerr-19f99d8/.gitattributes000066400000000000000000000000511475735226000221560ustar00rootroot00000000000000* text eol=lf *.py whitespace=error joostlek-python-overseerr-19f99d8/.github/000077500000000000000000000000001475735226000206275ustar00rootroot00000000000000joostlek-python-overseerr-19f99d8/.github/CODEOWNERS000066400000000000000000000000241475735226000222160ustar00rootroot00000000000000.github/* @joostlek joostlek-python-overseerr-19f99d8/.github/CODE_OF_CONDUCT.md000066400000000000000000000062141475735226000234310ustar00rootroot00000000000000# Code of conduct ## Our pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our standards Examples of behavior that contributes to creating a positive environment include: - Using welcoming and inclusive language - Being respectful of differing viewpoints and experiences - Gracefully accepting constructive criticism - Focusing on what is best for the community - Showing empathy towards other community members Examples of unacceptable behavior by participants include: - The use of sexualized language or imagery and unwelcome sexual attention or advances - Trolling, insulting/derogatory comments, and personal or political attacks - Public or private harassment - Publishing others' private information, such as a physical or electronic address, without explicit permission - Other conduct which could reasonably be considered inappropriate in a professional setting ## Our responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project lead at frenck@addons.community. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project lead is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ joostlek-python-overseerr-19f99d8/.github/CONTRIBUTING.md000066400000000000000000000022231475735226000230570ustar00rootroot00000000000000# Contributing When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. Please note we have a code of conduct, please follow it in all your interactions with the project. ## Issues and feature requests You've found a bug in the source code, a mistake in the documentation or maybe you'd like a new feature? You can help us by submitting an issue to our [GitHub Repository][github]. Before you create an issue, make sure you search the archive, maybe your question was already answered. Even better: You could submit a pull request with a fix / new feature! ## Pull request process 1. Search our repository for open or closed [pull requests][prs] that relates to your submission. You don't want to duplicate effort. 2. You may merge the pull request in once you have the sign-off of two other developers, or if you do not have permission to do that, you may request the second reviewer to merge it for you. [github]: https://github.com/joostlek/python-overseerr/issues [prs]: https://github.com/joostlek/python-overseerr/pulls joostlek-python-overseerr-19f99d8/.github/FUNDING.yaml000066400000000000000000000000311475735226000225770ustar00rootroot00000000000000--- github: - joostlek joostlek-python-overseerr-19f99d8/.github/ISSUE_TEMPLATE.md000066400000000000000000000005141475735226000233340ustar00rootroot00000000000000# Problem/Motivation > (Why the issue was filed) ## Expected behavior > (What you expected to happen) ## Actual behavior > (What actually happened) ## Steps to reproduce > (How can someone else make/see it happen) ## Proposed changes > (If you have a proposed change, workaround or fix, > describe the rationale behind it) joostlek-python-overseerr-19f99d8/.github/LICENSE.md000066400000000000000000000020721475735226000222340ustar00rootroot00000000000000# MIT License Copyright (c) 2024-2025 Joost Lekkerkerker 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. joostlek-python-overseerr-19f99d8/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000003761475735226000244360ustar00rootroot00000000000000# Proposed Changes > (Describe the changes and rationale behind them) ## Related Issues > ([Github link][autolink-references] to related issues or pull requests) [autolink-references]: https://help.github.com/articles/autolinked-references-and-urls/ joostlek-python-overseerr-19f99d8/.github/labels.yml000066400000000000000000000054331475735226000226210ustar00rootroot00000000000000--- - 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." joostlek-python-overseerr-19f99d8/.github/release-drafter.yml000066400000000000000000000020471475735226000244220ustar00rootroot00000000000000--- 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 joostlek-python-overseerr-19f99d8/.github/renovate.json000066400000000000000000000021611475735226000233450ustar00rootroot00000000000000{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "schedule": ["before 2am"], "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 } ] } joostlek-python-overseerr-19f99d8/.github/workflows/000077500000000000000000000000001475735226000226645ustar00rootroot00000000000000joostlek-python-overseerr-19f99d8/.github/workflows/labels.yaml000066400000000000000000000007361475735226000250200ustar00rootroot00000000000000--- 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 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 }} joostlek-python-overseerr-19f99d8/.github/workflows/linting.yaml000066400000000000000000000146011475735226000252160ustar00rootroot00000000000000--- 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 joostlek-python-overseerr-19f99d8/.github/workflows/lock.yaml000066400000000000000000000006651475735226000245070ustar00rootroot00000000000000--- 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 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: "" joostlek-python-overseerr-19f99d8/.github/workflows/pr-labels.yaml000066400000000000000000000013021475735226000254250ustar00rootroot00000000000000--- 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 joostlek-python-overseerr-19f99d8/.github/workflows/release-drafter.yaml000066400000000000000000000005741475735226000266230ustar00rootroot00000000000000--- 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 steps: - name: ๐Ÿš€ Run Release Drafter uses: release-drafter/release-drafter@v6.1.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} joostlek-python-overseerr-19f99d8/.github/workflows/release.yaml000066400000000000000000000031431475735226000251710ustar00rootroot00000000000000--- 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/python-overseerr 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 joostlek-python-overseerr-19f99d8/.github/workflows/stale.yaml000066400000000000000000000025601475735226000246630ustar00rootroot00000000000000--- 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 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. joostlek-python-overseerr-19f99d8/.github/workflows/tests.yaml000066400000000000000000000045001475735226000247110ustar00rootroot00000000000000--- 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 vehicle tests - name: โฌ†๏ธ Upload coverage artifact uses: actions/upload-artifact@v4.6.1 with: include-hidden-files: true name: coverage-${{ matrix.python }} path: .coverage 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.1.8 - 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 with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} joostlek-python-overseerr-19f99d8/.github/workflows/typing.yaml000066400000000000000000000016151475735226000250650ustar00rootroot00000000000000--- 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 src tests joostlek-python-overseerr-19f99d8/.gitignore000066400000000000000000000027011475735226000212570ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # OSX useful to ignore *.DS_Store .AppleDouble .LSOverride # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # 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/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log # Sphinx documentation docs/_build/ # pyenv .python-version # virtualenv .venv venv/ ENV/ # mypy .mypy_cache/ # ruff .ruff_cache # Visual Studio Code .vscode # IntelliJ Idea family of suites .idea *.iml ## File-based project format: *.ipr *.iws ## mpeltonen/sbt-idea plugin .idea_modules/ # PyBuilder target/ # Cookiecutter output/ python_boilerplate/ # Node node_modules/ # Deepcode AI .dccache joostlek-python-overseerr-19f99d8/.nvmrc000066400000000000000000000000101475735226000204040ustar00rootroot0000000000000022.14.0 joostlek-python-overseerr-19f99d8/.pre-commit-config.yaml000066400000000000000000000101751475735226000235540ustar00rootroot00000000000000--- repos: - repo: local hooks: - id: ruff-check name: ๐Ÿถ Ruff Linter language: system types: [python] entry: poetry run ruff check --fix require_serial: true stages: [pre-commit, pre-push, manual] - id: ruff-format name: ๐Ÿถ Ruff Formatter language: system types: [python] entry: poetry run ruff format require_serial: true stages: [pre-commit, pre-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: [pre-commit, pre-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=activite - 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: [pre-commit, pre-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: [pre-commit, pre-push, manual] - id: yamllint name: ๐ŸŽ— Check YAML files with yamllint language: system types: [yaml] entry: poetry run yamllint joostlek-python-overseerr-19f99d8/.prettierignore000066400000000000000000000000131475735226000223240ustar00rootroot00000000000000.gitignore joostlek-python-overseerr-19f99d8/.yamllint000066400000000000000000000024001475735226000211150ustar00rootroot00000000000000--- 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 joostlek-python-overseerr-19f99d8/LICENSE.md000066400000000000000000000020721475735226000206740ustar00rootroot00000000000000# MIT License Copyright (c) 2024-2025 Joost Lekkerkerker 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. joostlek-python-overseerr-19f99d8/README.md000066400000000000000000000110141475735226000205430ustar00rootroot00000000000000# Python: Overseerr [![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 Overseerr. ## About This package allows you to fetch data from Overseerr. ## Installation ```bash pip install python-overseerr ``` ## 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. We are always open to people who want to use the code or contribute to it. We've set up a separate document for our [contribution guidelines](.github/CONTRIBUTING.md). 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 12+ (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 [Joost Lekkerkerker][joostlek]. For a full list of all authors and contributors, check [the contributor's page][contributors]. ## License MIT License Copyright (c) 2024 Joost Lekkerkerker 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/joostlek/python-overseerr/actions/workflows/tests.yaml/badge.svg [build]: https://github.com/joostlek/python-overseerr/actions [codecov-shield]: https://codecov.io/gh/joostlek/python-overseerr/branch/master/graph/badge.svg [codecov]: https://codecov.io/gh/joostlek/python-overseerr [commits-shield]: https://img.shields.io/github/commit-activity/y/joostlek/python-overseerr.svg [commits]: https://github.com/joostlek/python-overseerr/commits/master [contributors]: https://github.com/joostlek/python-overseerr/graphs/contributors [joostlek]: https://github.com/joostlek [keepchangelog]: http://keepachangelog.com/en/1.0.0/ [license-shield]: https://img.shields.io/github/license/joostlek/python-overseerr.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/python-overseerr [releases-shield]: https://img.shields.io/github/release/joostlek/python-overseerr.svg [releases]: https://github.com/joostlek/python-overseerr/releases [semver]: http://semver.org/spec/v2.0.0.html [pypi]: https://pypi.org/project/python-overseerr/ joostlek-python-overseerr-19f99d8/package-lock.json000066400000000000000000000014271475735226000225070ustar00rootroot00000000000000{ "name": "python_overseerr", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "python_overseerr", "version": "0.0.0", "license": "MIT", "devDependencies": { "prettier": "3.5.2" } }, "node_modules/prettier": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", "dev": true, "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } } } } joostlek-python-overseerr-19f99d8/package.json000066400000000000000000000005331475735226000215560ustar00rootroot00000000000000{ "name": "python_overseerr", "version": "0.0.0", "private": true, "description": "Asynchronous Python client for Overseerr.", "scripts": { "prettier": "prettier --write **/*.{json,js,md,yml,yaml}" }, "author": "Joost Lekkerkerker ", "license": "MIT", "devDependencies": { "prettier": "3.5.2" } } joostlek-python-overseerr-19f99d8/poetry.lock000066400000000000000000006755611475735226000215070ustar00rootroot00000000000000# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" version = "2.4.6" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.9" files = [ {file = "aiohappyeyeballs-2.4.6-py3-none-any.whl", hash = "sha256:147ec992cf873d74f5062644332c539fcd42956dc69453fe5204195e560517e1"}, {file = "aiohappyeyeballs-2.4.6.tar.gz", hash = "sha256:9b05052f9042985d32ecbe4b59a77ae19c006a78f1344d7fdad69d28ded3d0b0"}, ] [[package]] name = "aiohttp" version = "3.11.13" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ {file = "aiohttp-3.11.13-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a4fe27dbbeec445e6e1291e61d61eb212ee9fed6e47998b27de71d70d3e8777d"}, {file = "aiohttp-3.11.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9e64ca2dbea28807f8484c13f684a2f761e69ba2640ec49dacd342763cc265ef"}, {file = "aiohttp-3.11.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9840be675de208d1f68f84d578eaa4d1a36eee70b16ae31ab933520c49ba1325"}, {file = "aiohttp-3.11.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28a772757c9067e2aee8a6b2b425d0efaa628c264d6416d283694c3d86da7689"}, {file = "aiohttp-3.11.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b88aca5adbf4625e11118df45acac29616b425833c3be7a05ef63a6a4017bfdb"}, {file = "aiohttp-3.11.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce10ddfbe26ed5856d6902162f71b8fe08545380570a885b4ab56aecfdcb07f4"}, {file = "aiohttp-3.11.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa48dac27f41b36735c807d1ab093a8386701bbf00eb6b89a0f69d9fa26b3671"}, {file = "aiohttp-3.11.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89ce611b1eac93ce2ade68f1470889e0173d606de20c85a012bfa24be96cf867"}, {file = "aiohttp-3.11.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:78e4dd9c34ec7b8b121854eb5342bac8b02aa03075ae8618b6210a06bbb8a115"}, {file = "aiohttp-3.11.13-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:66047eacbc73e6fe2462b77ce39fc170ab51235caf331e735eae91c95e6a11e4"}, {file = "aiohttp-3.11.13-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5ad8f1c19fe277eeb8bc45741c6d60ddd11d705c12a4d8ee17546acff98e0802"}, {file = "aiohttp-3.11.13-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64815c6f02e8506b10113ddbc6b196f58dbef135751cc7c32136df27b736db09"}, {file = "aiohttp-3.11.13-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:967b93f21b426f23ca37329230d5bd122f25516ae2f24a9cea95a30023ff8283"}, {file = "aiohttp-3.11.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cf1f31f83d16ec344136359001c5e871915c6ab685a3d8dee38e2961b4c81730"}, {file = "aiohttp-3.11.13-cp310-cp310-win32.whl", hash = "sha256:00c8ac69e259c60976aa2edae3f13d9991cf079aaa4d3cd5a49168ae3748dee3"}, {file = "aiohttp-3.11.13-cp310-cp310-win_amd64.whl", hash = "sha256:90d571c98d19a8b6e793b34aa4df4cee1e8fe2862d65cc49185a3a3d0a1a3996"}, {file = "aiohttp-3.11.13-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6b35aab22419ba45f8fc290d0010898de7a6ad131e468ffa3922b1b0b24e9d2e"}, {file = "aiohttp-3.11.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f81cba651db8795f688c589dd11a4fbb834f2e59bbf9bb50908be36e416dc760"}, {file = "aiohttp-3.11.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f55d0f242c2d1fcdf802c8fabcff25a9d85550a4cf3a9cf5f2a6b5742c992839"}, {file = "aiohttp-3.11.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4bea08a6aad9195ac9b1be6b0c7e8a702a9cec57ce6b713698b4a5afa9c2e33"}, {file = "aiohttp-3.11.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6070bcf2173a7146bb9e4735b3c62b2accba459a6eae44deea0eb23e0035a23"}, {file = "aiohttp-3.11.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:718d5deb678bc4b9d575bfe83a59270861417da071ab44542d0fcb6faa686636"}, {file = "aiohttp-3.11.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f6b2c5b4a4d22b8fb2c92ac98e0747f5f195e8e9448bfb7404cd77e7bfa243f"}, {file = "aiohttp-3.11.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:747ec46290107a490d21fe1ff4183bef8022b848cf9516970cb31de6d9460088"}, {file = "aiohttp-3.11.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:01816f07c9cc9d80f858615b1365f8319d6a5fd079cd668cc58e15aafbc76a54"}, {file = "aiohttp-3.11.13-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a08ad95fcbd595803e0c4280671d808eb170a64ca3f2980dd38e7a72ed8d1fea"}, {file = "aiohttp-3.11.13-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c97be90d70f7db3aa041d720bfb95f4869d6063fcdf2bb8333764d97e319b7d0"}, {file = "aiohttp-3.11.13-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ab915a57c65f7a29353c8014ac4be685c8e4a19e792a79fe133a8e101111438e"}, {file = "aiohttp-3.11.13-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:35cda4e07f5e058a723436c4d2b7ba2124ab4e0aa49e6325aed5896507a8a42e"}, {file = "aiohttp-3.11.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:af55314407714fe77a68a9ccaab90fdb5deb57342585fd4a3a8102b6d4370080"}, {file = "aiohttp-3.11.13-cp311-cp311-win32.whl", hash = "sha256:42d689a5c0a0c357018993e471893e939f555e302313d5c61dfc566c2cad6185"}, {file = "aiohttp-3.11.13-cp311-cp311-win_amd64.whl", hash = "sha256:b73a2b139782a07658fbf170fe4bcdf70fc597fae5ffe75e5b67674c27434a9f"}, {file = "aiohttp-3.11.13-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2eabb269dc3852537d57589b36d7f7362e57d1ece308842ef44d9830d2dc3c90"}, {file = "aiohttp-3.11.13-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7b77ee42addbb1c36d35aca55e8cc6d0958f8419e458bb70888d8c69a4ca833d"}, {file = "aiohttp-3.11.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55789e93c5ed71832e7fac868167276beadf9877b85697020c46e9a75471f55f"}, {file = "aiohttp-3.11.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c929f9a7249a11e4aa5c157091cfad7f49cc6b13f4eecf9b747104befd9f56f2"}, {file = "aiohttp-3.11.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d33851d85537bbf0f6291ddc97926a754c8f041af759e0aa0230fe939168852b"}, {file = "aiohttp-3.11.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9229d8613bd8401182868fe95688f7581673e1c18ff78855671a4b8284f47bcb"}, {file = "aiohttp-3.11.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:669dd33f028e54fe4c96576f406ebb242ba534dd3a981ce009961bf49960f117"}, {file = "aiohttp-3.11.13-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c1b20a1ace54af7db1f95af85da530fe97407d9063b7aaf9ce6a32f44730778"}, {file = "aiohttp-3.11.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5724cc77f4e648362ebbb49bdecb9e2b86d9b172c68a295263fa072e679ee69d"}, {file = "aiohttp-3.11.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:aa36c35e94ecdb478246dd60db12aba57cfcd0abcad43c927a8876f25734d496"}, {file = "aiohttp-3.11.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9b5b37c863ad5b0892cc7a4ceb1e435e5e6acd3f2f8d3e11fa56f08d3c67b820"}, {file = "aiohttp-3.11.13-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e06cf4852ce8c4442a59bae5a3ea01162b8fcb49ab438d8548b8dc79375dad8a"}, {file = "aiohttp-3.11.13-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5194143927e494616e335d074e77a5dac7cd353a04755330c9adc984ac5a628e"}, {file = "aiohttp-3.11.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:afcb6b275c2d2ba5d8418bf30a9654fa978b4f819c2e8db6311b3525c86fe637"}, {file = "aiohttp-3.11.13-cp312-cp312-win32.whl", hash = "sha256:7104d5b3943c6351d1ad7027d90bdd0ea002903e9f610735ac99df3b81f102ee"}, {file = "aiohttp-3.11.13-cp312-cp312-win_amd64.whl", hash = "sha256:47dc018b1b220c48089b5b9382fbab94db35bef2fa192995be22cbad3c5730c8"}, {file = "aiohttp-3.11.13-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9862d077b9ffa015dbe3ce6c081bdf35135948cb89116e26667dd183550833d1"}, {file = "aiohttp-3.11.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fbfef0666ae9e07abfa2c54c212ac18a1f63e13e0760a769f70b5717742f3ece"}, {file = "aiohttp-3.11.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:93a1f7d857c4fcf7cabb1178058182c789b30d85de379e04f64c15b7e88d66fb"}, {file = "aiohttp-3.11.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba40b7ae0f81c7029583a338853f6607b6d83a341a3dcde8bed1ea58a3af1df9"}, {file = "aiohttp-3.11.13-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5b95787335c483cd5f29577f42bbe027a412c5431f2f80a749c80d040f7ca9f"}, {file = "aiohttp-3.11.13-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7d474c5c1f0b9405c1565fafdc4429fa7d986ccbec7ce55bc6a330f36409cad"}, {file = "aiohttp-3.11.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e83fb1991e9d8982b3b36aea1e7ad27ea0ce18c14d054c7a404d68b0319eebb"}, {file = "aiohttp-3.11.13-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4586a68730bd2f2b04a83e83f79d271d8ed13763f64b75920f18a3a677b9a7f0"}, {file = "aiohttp-3.11.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fe4eb0e7f50cdb99b26250d9328faef30b1175a5dbcfd6d0578d18456bac567"}, {file = "aiohttp-3.11.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2a8a6bc19818ac3e5596310ace5aa50d918e1ebdcc204dc96e2f4d505d51740c"}, {file = "aiohttp-3.11.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7f27eec42f6c3c1df09cfc1f6786308f8b525b8efaaf6d6bd76c1f52c6511f6a"}, {file = "aiohttp-3.11.13-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2a4a13dfbb23977a51853b419141cd0a9b9573ab8d3a1455c6e63561387b52ff"}, {file = "aiohttp-3.11.13-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:02876bf2f69b062584965507b07bc06903c2dc93c57a554b64e012d636952654"}, {file = "aiohttp-3.11.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b992778d95b60a21c4d8d4a5f15aaab2bd3c3e16466a72d7f9bfd86e8cea0d4b"}, {file = "aiohttp-3.11.13-cp313-cp313-win32.whl", hash = "sha256:507ab05d90586dacb4f26a001c3abf912eb719d05635cbfad930bdbeb469b36c"}, {file = "aiohttp-3.11.13-cp313-cp313-win_amd64.whl", hash = "sha256:5ceb81a4db2decdfa087381b5fc5847aa448244f973e5da232610304e199e7b2"}, {file = "aiohttp-3.11.13-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:51c3ff9c7a25f3cad5c09d9aacbc5aefb9267167c4652c1eb737989b554fe278"}, {file = "aiohttp-3.11.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e271beb2b1dabec5cd84eb488bdabf9758d22ad13471e9c356be07ad139b3012"}, {file = "aiohttp-3.11.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0e9eb7e5764abcb49f0e2bd8f5731849b8728efbf26d0cac8e81384c95acec3f"}, {file = "aiohttp-3.11.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baae005092e3f200de02699314ac8933ec20abf998ec0be39448f6605bce93df"}, {file = "aiohttp-3.11.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1982c98ac62c132d2b773d50e2fcc941eb0b8bad3ec078ce7e7877c4d5a2dce7"}, {file = "aiohttp-3.11.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2b25b2eeb35707113b2d570cadc7c612a57f1c5d3e7bb2b13870fe284e08fc0"}, {file = "aiohttp-3.11.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b27961d65639128336b7a7c3f0046dcc62a9443d5ef962e3c84170ac620cec47"}, {file = "aiohttp-3.11.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a01fe9f1e05025eacdd97590895e2737b9f851d0eb2e017ae9574d9a4f0b6252"}, {file = "aiohttp-3.11.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa1fb1b61881c8405829c50e9cc5c875bfdbf685edf57a76817dfb50643e4a1a"}, {file = "aiohttp-3.11.13-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:25de43bb3cf83ad83efc8295af7310219af6dbe4c543c2e74988d8e9c8a2a917"}, {file = "aiohttp-3.11.13-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe7065e2215e4bba63dc00db9ae654c1ba3950a5fff691475a32f511142fcddb"}, {file = "aiohttp-3.11.13-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7836587eef675a17d835ec3d98a8c9acdbeb2c1d72b0556f0edf4e855a25e9c1"}, {file = "aiohttp-3.11.13-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:85fa0b18558eb1427090912bd456a01f71edab0872f4e0f9e4285571941e4090"}, {file = "aiohttp-3.11.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a86dc177eb4c286c19d1823ac296299f59ed8106c9536d2b559f65836e0fb2c6"}, {file = "aiohttp-3.11.13-cp39-cp39-win32.whl", hash = "sha256:684eea71ab6e8ade86b9021bb62af4bf0881f6be4e926b6b5455de74e420783a"}, {file = "aiohttp-3.11.13-cp39-cp39-win_amd64.whl", hash = "sha256:82c249f2bfa5ecbe4a1a7902c81c0fba52ed9ebd0176ab3047395d02ad96cfcb"}, {file = "aiohttp-3.11.13.tar.gz", hash = "sha256:8ce789231404ca8fff7f693cdce398abf6d90fd5dae2b1847477196c243b1fbb"}, ] [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 = "annotated-types" version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] [[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 = "authlib" version = "1.5.0" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false python-versions = ">=3.9" files = [ {file = "Authlib-1.5.0-py2.py3-none-any.whl", hash = "sha256:b3cc5ccfc19cf87678046b6e7cb19d402d8a631a33c40e36385232203227953a"}, {file = "authlib-1.5.0.tar.gz", hash = "sha256:8fd8bd8f806485a532ac39a17b579982cf54688f956174f995cc938a91725423"}, ] [package.dependencies] cryptography = "*" [[package]] name = "certifi" version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, ] [[package]] name = "cffi" version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] [package.dependencies] pycparser = "*" [[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 = "charset-normalizer" version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, ] [[package]] name = "click" version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [[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.12" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ {file = "coverage-7.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8"}, {file = "coverage-7.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879"}, {file = "coverage-7.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe"}, {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674"}, {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb"}, {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c"}, {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c"}, {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e"}, {file = "coverage-7.6.12-cp310-cp310-win32.whl", hash = "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425"}, {file = "coverage-7.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa"}, {file = "coverage-7.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015"}, {file = "coverage-7.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45"}, {file = "coverage-7.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702"}, {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0"}, {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f"}, {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f"}, {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d"}, {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba"}, {file = "coverage-7.6.12-cp311-cp311-win32.whl", hash = "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f"}, {file = "coverage-7.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558"}, {file = "coverage-7.6.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad"}, {file = "coverage-7.6.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3"}, {file = "coverage-7.6.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574"}, {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985"}, {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750"}, {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea"}, {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3"}, {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a"}, {file = "coverage-7.6.12-cp312-cp312-win32.whl", hash = "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95"}, {file = "coverage-7.6.12-cp312-cp312-win_amd64.whl", hash = "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288"}, {file = "coverage-7.6.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1"}, {file = "coverage-7.6.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd"}, {file = "coverage-7.6.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9"}, {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e"}, {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4"}, {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6"}, {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3"}, {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc"}, {file = "coverage-7.6.12-cp313-cp313-win32.whl", hash = "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3"}, {file = "coverage-7.6.12-cp313-cp313-win_amd64.whl", hash = "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef"}, {file = "coverage-7.6.12-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e"}, {file = "coverage-7.6.12-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703"}, {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0"}, {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924"}, {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b"}, {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d"}, {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827"}, {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9"}, {file = "coverage-7.6.12-cp313-cp313t-win32.whl", hash = "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3"}, {file = "coverage-7.6.12-cp313-cp313t-win_amd64.whl", hash = "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f"}, {file = "coverage-7.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d"}, {file = "coverage-7.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929"}, {file = "coverage-7.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87"}, {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c"}, {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2"}, {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd"}, {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73"}, {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86"}, {file = "coverage-7.6.12-cp39-cp39-win32.whl", hash = "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31"}, {file = "coverage-7.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57"}, {file = "coverage-7.6.12-pp39.pp310-none-any.whl", hash = "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf"}, {file = "coverage-7.6.12-py3-none-any.whl", hash = "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953"}, {file = "coverage-7.6.12.tar.gz", hash = "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2"}, ] [package.extras] toml = ["tomli"] [[package]] name = "cryptography" version = "44.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = "!=3.9.0,!=3.9.1,>=3.7" files = [ {file = "cryptography-44.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf688f615c29bfe9dfc44312ca470989279f0e94bb9f631f85e3459af8efc009"}, {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd7c7e2d71d908dc0f8d2027e1604102140d84b155e658c20e8ad1304317691f"}, {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887143b9ff6bad2b7570da75a7fe8bbf5f65276365ac259a5d2d5147a73775f2"}, {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:322eb03ecc62784536bc173f1483e76747aafeb69c8728df48537eb431cd1911"}, {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:21377472ca4ada2906bc313168c9dc7b1d7ca417b63c1c3011d0c74b7de9ae69"}, {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:df978682c1504fc93b3209de21aeabf2375cb1571d4e61907b3e7a2540e83026"}, {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:eb3889330f2a4a148abead555399ec9a32b13b7c8ba969b72d8e500eb7ef84cd"}, {file = "cryptography-44.0.1-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:8e6a85a93d0642bd774460a86513c5d9d80b5c002ca9693e63f6e540f1815ed0"}, {file = "cryptography-44.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6f76fdd6fd048576a04c5210d53aa04ca34d2ed63336d4abd306d0cbe298fddf"}, {file = "cryptography-44.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6c8acf6f3d1f47acb2248ec3ea261171a671f3d9428e34ad0357148d492c7864"}, {file = "cryptography-44.0.1-cp37-abi3-win32.whl", hash = "sha256:24979e9f2040c953a94bf3c6782e67795a4c260734e5264dceea65c8f4bae64a"}, {file = "cryptography-44.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:fd0ee90072861e276b0ff08bd627abec29e32a53b2be44e41dbcdf87cbee2b00"}, {file = "cryptography-44.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:a2d8a7045e1ab9b9f803f0d9531ead85f90c5f2859e653b61497228b18452008"}, {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8272f257cf1cbd3f2e120f14c68bff2b6bdfcc157fafdee84a1b795efd72862"}, {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8d181e90a777b63f3f0caa836844a1182f1f265687fac2115fcf245f5fbec3"}, {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:436df4f203482f41aad60ed1813811ac4ab102765ecae7a2bbb1dbb66dcff5a7"}, {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4f422e8c6a28cf8b7f883eb790695d6d45b0c385a2583073f3cec434cc705e1a"}, {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:72198e2b5925155497a5a3e8c216c7fb3e64c16ccee11f0e7da272fa93b35c4c"}, {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a46a89ad3e6176223b632056f321bc7de36b9f9b93b2cc1cccf935a3849dc62"}, {file = "cryptography-44.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:53f23339864b617a3dfc2b0ac8d5c432625c80014c25caac9082314e9de56f41"}, {file = "cryptography-44.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:888fcc3fce0c888785a4876ca55f9f43787f4c5c1cc1e2e0da71ad481ff82c5b"}, {file = "cryptography-44.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00918d859aa4e57db8299607086f793fa7813ae2ff5a4637e318a25ef82730f7"}, {file = "cryptography-44.0.1-cp39-abi3-win32.whl", hash = "sha256:9b336599e2cb77b1008cb2ac264b290803ec5e8e89d618a5e978ff5eb6f715d9"}, {file = "cryptography-44.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:e403f7f766ded778ecdb790da786b418a9f2394f36e8cc8b796cc056ab05f44f"}, {file = "cryptography-44.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1f9a92144fa0c877117e9748c74501bea842f93d21ee00b0cf922846d9d0b183"}, {file = "cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:610a83540765a8d8ce0f351ce42e26e53e1f774a6efb71eb1b41eb01d01c3d12"}, {file = "cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5fed5cd6102bb4eb843e3315d2bf25fede494509bddadb81e03a859c1bc17b83"}, {file = "cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:f4daefc971c2d1f82f03097dc6f216744a6cd2ac0f04c68fb935ea2ba2a0d420"}, {file = "cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94f99f2b943b354a5b6307d7e8d19f5c423a794462bde2bf310c770ba052b1c4"}, {file = "cryptography-44.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d9c5b9f698a83c8bd71e0f4d3f9f839ef244798e5ffe96febfa9714717db7af7"}, {file = "cryptography-44.0.1.tar.gz", hash = "sha256:f51f5705ab27898afda1aaa430f34ad90dc117421057782022edf0600bec5f14"}, ] [package.dependencies] cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0)"] docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2)"] pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] sdist = ["build (>=1.0.0)"] ssh = ["bcrypt (>=3.1.5)"] test = ["certifi (>=2024)", "cryptography-vectors (==44.0.1)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] test-randomorder = ["pytest-randomly"] [[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 = "dparse" version = "0.6.4" description = "A parser for Python dependency files" optional = false python-versions = ">=3.7" files = [ {file = "dparse-0.6.4-py3-none-any.whl", hash = "sha256:fbab4d50d54d0e739fbb4dedfc3d92771003a5b9aa8545ca7a7045e3b174af57"}, {file = "dparse-0.6.4.tar.gz", hash = "sha256:90b29c39e3edc36c6284c82c4132648eaf28a01863eb3c231c2512196132201a"}, ] [package.dependencies] packaging = "*" [package.extras] all = ["pipenv", "poetry", "pyyaml"] conda = ["pyyaml"] pipenv = ["pipenv"] poetry = ["poetry"] [[package]] name = "filelock" version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] 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.8" description = "File identification library for Python" optional = false python-versions = ">=3.9" files = [ {file = "identify-2.6.8-py2.py3-none-any.whl", hash = "sha256:83657f0f766a3c8d0eaea16d4ef42494b39b34629a4b3192a9d020d349b3e255"}, {file = "identify-2.6.8.tar.gz", hash = "sha256:61491417ea2c0c5c670484fd8abbb34de34cdae1e5f39a73ee65e48e4bb663fc"}, ] [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 = "jinja2" version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] [[package]] name = "joblib" version = "1.4.2" description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.8" files = [ {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, ] [[package]] name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, ] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] benchmarking = ["psutil", "pytest", "pytest-benchmark"] code-style = ["pre-commit (>=3.0,<4.0)"] compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] name = "marshmallow" version = "3.26.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.9" files = [ {file = "marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c"}, {file = "marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6"}, ] [package.dependencies] packaging = ">=17.0" [package.extras] dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "sphinxext-opengraph (==0.9.1)"] tests = ["pytest", "simplejson"] [[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 = "mdurl" version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] [[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 = "nltk" version = "3.9.1" description = "Natural Language Toolkit" optional = false python-versions = ">=3.8" files = [ {file = "nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1"}, {file = "nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868"}, ] [package.dependencies] click = "*" joblib = "*" regex = ">=2021.8.3" tqdm = "*" [package.extras] all = ["matplotlib", "numpy", "pyparsing", "python-crfsuite", "requests", "scikit-learn", "scipy", "twython"] corenlp = ["requests"] machine-learning = ["numpy", "python-crfsuite", "scikit-learn", "scipy"] plot = ["matplotlib"] tgrep = ["pyparsing"] twitter = ["twython"] [[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.3.0" description = "Accelerated property cache" optional = false python-versions = ">=3.9" files = [ {file = "propcache-0.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:efa44f64c37cc30c9f05932c740a8b40ce359f51882c70883cc95feac842da4d"}, {file = "propcache-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2383a17385d9800b6eb5855c2f05ee550f803878f344f58b6e194de08b96352c"}, {file = "propcache-0.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3e7420211f5a65a54675fd860ea04173cde60a7cc20ccfbafcccd155225f8bc"}, {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3302c5287e504d23bb0e64d2a921d1eb4a03fb93a0a0aa3b53de059f5a5d737d"}, {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7e2e068a83552ddf7a39a99488bcba05ac13454fb205c847674da0352602082f"}, {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d913d36bdaf368637b4f88d554fb9cb9d53d6920b9c5563846555938d5450bf"}, {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ee1983728964d6070ab443399c476de93d5d741f71e8f6e7880a065f878e0b9"}, {file = "propcache-0.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36ca5e9a21822cc1746023e88f5c0af6fce3af3b85d4520efb1ce4221bed75cc"}, {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9ecde3671e62eeb99e977f5221abcf40c208f69b5eb986b061ccec317c82ebd0"}, {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d383bf5e045d7f9d239b38e6acadd7b7fdf6c0087259a84ae3475d18e9a2ae8b"}, {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8cb625bcb5add899cb8ba7bf716ec1d3e8f7cdea9b0713fa99eadf73b6d4986f"}, {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5fa159dcee5dba00c1def3231c249cf261185189205073bde13797e57dd7540a"}, {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7080b0159ce05f179cfac592cda1a82898ca9cd097dacf8ea20ae33474fbb25"}, {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ed7161bccab7696a473fe7ddb619c1d75963732b37da4618ba12e60899fefe4f"}, {file = "propcache-0.3.0-cp310-cp310-win32.whl", hash = "sha256:bf0d9a171908f32d54f651648c7290397b8792f4303821c42a74e7805bfb813c"}, {file = "propcache-0.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:42924dc0c9d73e49908e35bbdec87adedd651ea24c53c29cac103ede0ea1d340"}, {file = "propcache-0.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9ddd49258610499aab83b4f5b61b32e11fce873586282a0e972e5ab3bcadee51"}, {file = "propcache-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2578541776769b500bada3f8a4eeaf944530516b6e90c089aa368266ed70c49e"}, {file = "propcache-0.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8074c5dd61c8a3e915fa8fc04754fa55cfa5978200d2daa1e2d4294c1f136aa"}, {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b58229a844931bca61b3a20efd2be2a2acb4ad1622fc026504309a6883686fbf"}, {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e45377d5d6fefe1677da2a2c07b024a6dac782088e37c0b1efea4cfe2b1be19b"}, {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ec5060592d83454e8063e487696ac3783cc48c9a329498bafae0d972bc7816c9"}, {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15010f29fbed80e711db272909a074dc79858c6d28e2915704cfc487a8ac89c6"}, {file = "propcache-0.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a254537b9b696ede293bfdbc0a65200e8e4507bc9f37831e2a0318a9b333c85c"}, {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2b975528998de037dfbc10144b8aed9b8dd5a99ec547f14d1cb7c5665a43f075"}, {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:19d36bb351ad5554ff20f2ae75f88ce205b0748c38b146c75628577020351e3c"}, {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6032231d4a5abd67c7f71168fd64a47b6b451fbcb91c8397c2f7610e67683810"}, {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6985a593417cdbc94c7f9c3403747335e450c1599da1647a5af76539672464d3"}, {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6a1948df1bb1d56b5e7b0553c0fa04fd0e320997ae99689488201f19fa90d2e7"}, {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8319293e85feadbbfe2150a5659dbc2ebc4afdeaf7d98936fb9a2f2ba0d4c35c"}, {file = "propcache-0.3.0-cp311-cp311-win32.whl", hash = "sha256:63f26258a163c34542c24808f03d734b338da66ba91f410a703e505c8485791d"}, {file = "propcache-0.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:cacea77ef7a2195f04f9279297684955e3d1ae4241092ff0cfcef532bb7a1c32"}, {file = "propcache-0.3.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e53d19c2bf7d0d1e6998a7e693c7e87300dd971808e6618964621ccd0e01fe4e"}, {file = "propcache-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a61a68d630e812b67b5bf097ab84e2cd79b48c792857dc10ba8a223f5b06a2af"}, {file = "propcache-0.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fb91d20fa2d3b13deea98a690534697742029f4fb83673a3501ae6e3746508b5"}, {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67054e47c01b7b349b94ed0840ccae075449503cf1fdd0a1fdd98ab5ddc2667b"}, {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:997e7b8f173a391987df40f3b52c423e5850be6f6df0dcfb5376365440b56667"}, {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d663fd71491dde7dfdfc899d13a067a94198e90695b4321084c6e450743b8c7"}, {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8884ba1a0fe7210b775106b25850f5e5a9dc3c840d1ae9924ee6ea2eb3acbfe7"}, {file = "propcache-0.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa806bbc13eac1ab6291ed21ecd2dd426063ca5417dd507e6be58de20e58dfcf"}, {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6f4d7a7c0aff92e8354cceca6fe223973ddf08401047920df0fcb24be2bd5138"}, {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:9be90eebc9842a93ef8335291f57b3b7488ac24f70df96a6034a13cb58e6ff86"}, {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:bf15fc0b45914d9d1b706f7c9c4f66f2b7b053e9517e40123e137e8ca8958b3d"}, {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5a16167118677d94bb48bfcd91e420088854eb0737b76ec374b91498fb77a70e"}, {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:41de3da5458edd5678b0f6ff66691507f9885f5fe6a0fb99a5d10d10c0fd2d64"}, {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:728af36011bb5d344c4fe4af79cfe186729efb649d2f8b395d1572fb088a996c"}, {file = "propcache-0.3.0-cp312-cp312-win32.whl", hash = "sha256:6b5b7fd6ee7b54e01759f2044f936dcf7dea6e7585f35490f7ca0420fe723c0d"}, {file = "propcache-0.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:2d15bc27163cd4df433e75f546b9ac31c1ba7b0b128bfb1b90df19082466ff57"}, {file = "propcache-0.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a2b9bf8c79b660d0ca1ad95e587818c30ccdb11f787657458d6f26a1ea18c568"}, {file = "propcache-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b0c1a133d42c6fc1f5fbcf5c91331657a1ff822e87989bf4a6e2e39b818d0ee9"}, {file = "propcache-0.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bb2f144c6d98bb5cbc94adeb0447cfd4c0f991341baa68eee3f3b0c9c0e83767"}, {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1323cd04d6e92150bcc79d0174ce347ed4b349d748b9358fd2e497b121e03c8"}, {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b812b3cb6caacd072276ac0492d249f210006c57726b6484a1e1805b3cfeea0"}, {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:742840d1d0438eb7ea4280f3347598f507a199a35a08294afdcc560c3739989d"}, {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c6e7e4f9167fddc438cd653d826f2222222564daed4116a02a184b464d3ef05"}, {file = "propcache-0.3.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a94ffc66738da99232ddffcf7910e0f69e2bbe3a0802e54426dbf0714e1c2ffe"}, {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3c6ec957025bf32b15cbc6b67afe233c65b30005e4c55fe5768e4bb518d712f1"}, {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:549722908de62aa0b47a78b90531c022fa6e139f9166be634f667ff45632cc92"}, {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5d62c4f6706bff5d8a52fd51fec6069bef69e7202ed481486c0bc3874912c787"}, {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:24c04f8fbf60094c531667b8207acbae54146661657a1b1be6d3ca7773b7a545"}, {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7c5f5290799a3f6539cc5e6f474c3e5c5fbeba74a5e1e5be75587746a940d51e"}, {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4fa0e7c9c3cf7c276d4f6ab9af8adddc127d04e0fcabede315904d2ff76db626"}, {file = "propcache-0.3.0-cp313-cp313-win32.whl", hash = "sha256:ee0bd3a7b2e184e88d25c9baa6a9dc609ba25b76daae942edfb14499ac7ec374"}, {file = "propcache-0.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1c8f7d896a16da9455f882870a507567d4f58c53504dc2d4b1e1d386dfe4588a"}, {file = "propcache-0.3.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e560fd75aaf3e5693b91bcaddd8b314f4d57e99aef8a6c6dc692f935cc1e6bbf"}, {file = "propcache-0.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:65a37714b8ad9aba5780325228598a5b16c47ba0f8aeb3dc0514701e4413d7c0"}, {file = "propcache-0.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:07700939b2cbd67bfb3b76a12e1412405d71019df00ca5697ce75e5ef789d829"}, {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c0fdbdf6983526e269e5a8d53b7ae3622dd6998468821d660d0daf72779aefa"}, {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:794c3dd744fad478b6232289c866c25406ecdfc47e294618bdf1697e69bd64a6"}, {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4544699674faf66fb6b4473a1518ae4999c1b614f0b8297b1cef96bac25381db"}, {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fddb8870bdb83456a489ab67c6b3040a8d5a55069aa6f72f9d872235fbc52f54"}, {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f857034dc68d5ceb30fb60afb6ff2103087aea10a01b613985610e007053a121"}, {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:02df07041e0820cacc8f739510078f2aadcfd3fc57eaeeb16d5ded85c872c89e"}, {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f47d52fd9b2ac418c4890aad2f6d21a6b96183c98021f0a48497a904199f006e"}, {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9ff4e9ecb6e4b363430edf2c6e50173a63e0820e549918adef70515f87ced19a"}, {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ecc2920630283e0783c22e2ac94427f8cca29a04cfdf331467d4f661f4072dac"}, {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:c441c841e82c5ba7a85ad25986014be8d7849c3cfbdb6004541873505929a74e"}, {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c929916cbdb540d3407c66f19f73387f43e7c12fa318a66f64ac99da601bcdf"}, {file = "propcache-0.3.0-cp313-cp313t-win32.whl", hash = "sha256:0c3e893c4464ebd751b44ae76c12c5f5c1e4f6cbd6fbf67e3783cd93ad221863"}, {file = "propcache-0.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:75e872573220d1ee2305b35c9813626e620768248425f58798413e9c39741f46"}, {file = "propcache-0.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:03c091bb752349402f23ee43bb2bff6bd80ccab7c9df6b88ad4322258d6960fc"}, {file = "propcache-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:46ed02532cb66612d42ae5c3929b5e98ae330ea0f3900bc66ec5f4862069519b"}, {file = "propcache-0.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:11ae6a8a01b8a4dc79093b5d3ca2c8a4436f5ee251a9840d7790dccbd96cb649"}, {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df03cd88f95b1b99052b52b1bb92173229d7a674df0ab06d2b25765ee8404bce"}, {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03acd9ff19021bd0567582ac88f821b66883e158274183b9e5586f678984f8fe"}, {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd54895e4ae7d32f1e3dd91261df46ee7483a735017dc6f987904f194aa5fd14"}, {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a67e5c04e3119594d8cfae517f4b9330c395df07ea65eab16f3d559b7068fe"}, {file = "propcache-0.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee25f1ac091def37c4b59d192bbe3a206298feeb89132a470325bf76ad122a1e"}, {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58e6d2a5a7cb3e5f166fd58e71e9a4ff504be9dc61b88167e75f835da5764d07"}, {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:be90c94570840939fecedf99fa72839aed70b0ced449b415c85e01ae67422c90"}, {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:49ea05212a529c2caffe411e25a59308b07d6e10bf2505d77da72891f9a05641"}, {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:119e244ab40f70a98c91906d4c1f4c5f2e68bd0b14e7ab0a06922038fae8a20f"}, {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:507c5357a8d8b4593b97fb669c50598f4e6cccbbf77e22fa9598aba78292b4d7"}, {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8526b0941ec5a40220fc4dfde76aed58808e2b309c03e9fa8e2260083ef7157f"}, {file = "propcache-0.3.0-cp39-cp39-win32.whl", hash = "sha256:7cedd25e5f678f7738da38037435b340694ab34d424938041aa630d8bac42663"}, {file = "propcache-0.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:bf4298f366ca7e1ad1d21bbb58300a6985015909964077afd37559084590c929"}, {file = "propcache-0.3.0-py3-none-any.whl", hash = "sha256:67dda3c7325691c2081510e92c561f465ba61b975f481735aefdfc845d2cd043"}, {file = "propcache-0.3.0.tar.gz", hash = "sha256:a8fd93de4e1d278046345f49e2238cdb298589325849b2645d4a94c53faeffc5"}, ] [[package]] name = "psutil" version = "6.1.1" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"}, {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"}, {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4"}, {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468"}, {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca"}, {file = "psutil-6.1.1-cp27-none-win32.whl", hash = "sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac"}, {file = "psutil-6.1.1-cp27-none-win_amd64.whl", hash = "sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030"}, {file = "psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8"}, {file = "psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377"}, {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003"}, {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160"}, {file = "psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3"}, {file = "psutil-6.1.1-cp36-cp36m-win32.whl", hash = "sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603"}, {file = "psutil-6.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303"}, {file = "psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53"}, {file = "psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649"}, {file = "psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5"}, ] [package.extras] dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] test = ["pytest", "pytest-xdist", "setuptools"] [[package]] name = "pycparser" version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pydantic" version = "2.9.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, ] [package.dependencies] annotated-types = ">=0.6.0" pydantic-core = "2.23.4" typing-extensions = [ {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, {version = ">=4.6.1", markers = "python_version < \"3.13\""}, ] [package.extras] email = ["email-validator (>=2.0.0)"] timezone = ["tzdata"] [[package]] name = "pydantic-core" version = "2.23.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, ] [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pygments" version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] [package.extras] windows-terminal = ["colorama (>=0.4.6)"] [[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 = "regex" version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, ] [[package]] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] [[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.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ {file = "ruff-0.9.7-py3-none-linux_armv6l.whl", hash = "sha256:99d50def47305fe6f233eb8dabfd60047578ca87c9dcb235c9723ab1175180f4"}, {file = "ruff-0.9.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d59105ae9c44152c3d40a9c40d6331a7acd1cdf5ef404fbe31178a77b174ea66"}, {file = "ruff-0.9.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f313b5800483770bd540cddac7c90fc46f895f427b7820f18fe1822697f1fec9"}, {file = "ruff-0.9.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:042ae32b41343888f59c0a4148f103208bf6b21c90118d51dc93a68366f4e903"}, {file = "ruff-0.9.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:87862589373b33cc484b10831004e5e5ec47dc10d2b41ba770e837d4f429d721"}, {file = "ruff-0.9.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a17e1e01bee0926d351a1ee9bc15c445beae888f90069a6192a07a84af544b6b"}, {file = "ruff-0.9.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7c1f880ac5b2cbebd58b8ebde57069a374865c73f3bf41f05fe7a179c1c8ef22"}, {file = "ruff-0.9.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e63fc20143c291cab2841dbb8260e96bafbe1ba13fd3d60d28be2c71e312da49"}, {file = "ruff-0.9.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91ff963baed3e9a6a4eba2a02f4ca8eaa6eba1cc0521aec0987da8d62f53cbef"}, {file = "ruff-0.9.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88362e3227c82f63eaebf0b2eff5b88990280fb1ecf7105523883ba8c3aaf6fb"}, {file = "ruff-0.9.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0372c5a90349f00212270421fe91874b866fd3626eb3b397ede06cd385f6f7e0"}, {file = "ruff-0.9.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d76b8ab60e99e6424cd9d3d923274a1324aefce04f8ea537136b8398bbae0a62"}, {file = "ruff-0.9.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0c439bdfc8983e1336577f00e09a4e7a78944fe01e4ea7fe616d00c3ec69a3d0"}, {file = "ruff-0.9.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:115d1f15e8fdd445a7b4dc9a30abae22de3f6bcabeb503964904471691ef7606"}, {file = "ruff-0.9.7-py3-none-win32.whl", hash = "sha256:e9ece95b7de5923cbf38893f066ed2872be2f2f477ba94f826c8defdd6ec6b7d"}, {file = "ruff-0.9.7-py3-none-win_amd64.whl", hash = "sha256:3770fe52b9d691a15f0b87ada29c45324b2ace8f01200fb0c14845e499eb0c2c"}, {file = "ruff-0.9.7-py3-none-win_arm64.whl", hash = "sha256:b075a700b2533feb7a01130ff656a4ec0d5f340bb540ad98759b8401c32c2037"}, {file = "ruff-0.9.7.tar.gz", hash = "sha256:643757633417907510157b206e490c3aa11cab0c087c912f60e07fbafa87a4c6"}, ] [[package]] name = "safety" version = "3.3.1" description = "Scan dependencies for known vulnerabilities and licenses." optional = false python-versions = ">=3.8" files = [ {file = "safety-3.3.1-py3-none-any.whl", hash = "sha256:243355a961403b873c1504e3e6f79ce36b86881d559722595632d788aa92b7ea"}, {file = "safety-3.3.1.tar.gz", hash = "sha256:679834432d0ad64c54e0b864ac6715d4743a65f8db67512380ee7ee2011c206a"}, ] [package.dependencies] authlib = ">=1.2.0" click = ">=8.0.2" dparse = ">=0.6.4" filelock = ">=3.16.1,<3.17.0" jinja2 = ">=3.1.0" marshmallow = ">=3.15.0" nltk = ">=3.9" packaging = ">=21.0" psutil = ">=6.1.0,<6.2.0" pydantic = ">=2.6.0,<2.10.0" requests = "*" ruamel-yaml = ">=0.17.21" safety-schemas = "0.0.11" setuptools = ">=65.5.1" typer = ">=0.12.1" typing-extensions = ">=4.7.1" [package.extras] github = ["pygithub (>=1.43.3)"] gitlab = ["python-gitlab (>=1.3.0)"] spdx = ["spdx-tools (>=0.8.2)"] [[package]] name = "safety-schemas" version = "0.0.11" description = "Schemas for Safety tools" optional = false python-versions = ">=3.7" files = [ {file = "safety_schemas-0.0.11-py3-none-any.whl", hash = "sha256:2af940c1c992d6891a6b84403a7c12fd445e20651752b1818b86c205690b3e03"}, {file = "safety_schemas-0.0.11.tar.gz", hash = "sha256:10804372e077ca5a95e740cc507e73d9173663284006fcaaf5756179ba13ac9d"}, ] [package.dependencies] dparse = ">=0.6.4" packaging = ">=21.0" pydantic = ">=2.6.0,<2.10.0" ruamel-yaml = ">=0.17.21" typing-extensions = ">=4.7.1" [[package]] name = "setuptools" version = "75.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" files = [ {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "shellingham" version = "1.5.4" description = "Tool to Detect Surrounding Shell" optional = false python-versions = ">=3.7" files = [ {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, ] [[package]] name = "syrupy" version = "4.8.2" description = "Pytest Snapshot Test Utility" optional = false python-versions = ">=3.8.1" files = [ {file = "syrupy-4.8.2-py3-none-any.whl", hash = "sha256:1fee874d422cfb1342aa746a65936d6500178beeb6fe26cb3a970c626fbe6058"}, {file = "syrupy-4.8.2.tar.gz", hash = "sha256:8418748be9cc050bf156d2e6c551dbc1768d591d36652e945a52ab3b0303a899"}, ] [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 = "tqdm" version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] [[package]] name = "typer" version = "0.15.1" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.7" files = [ {file = "typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847"}, {file = "typer-0.15.1.tar.gz", hash = "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a"}, ] [package.dependencies] click = ">=8.0.0" rich = ">=10.11.0" shellingham = ">=1.3.0" typing-extensions = ">=3.7.4.3" [[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 = "urllib3" version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" files = [ {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" version = "20.29.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ {file = "virtualenv-20.29.2-py3-none-any.whl", hash = "sha256:febddfc3d1ea571bdb1dc0f98d7b45d24def7428214d4fb73cc486c9568cce6a"}, {file = "virtualenv-20.29.2.tar.gz", hash = "sha256:fdaabebf6d03b5ba83ae0a02cfe96f48a716f4fae556461d180825866f75b728"}, ] [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 = "2d2b9996c564915e15019e3d99de99d5a23433013b17bf30b6e816897d2614f8" joostlek-python-overseerr-19f99d8/pyproject.toml000066400000000000000000000074371475735226000222160ustar00rootroot00000000000000[tool.poetry] name = "python_overseerr" version = "0.1.0" description = "Asynchronous Python client for Overseerr." authors = ["Joost Lekkerkerker "] maintainers = ["Joost Lekkerkerker "] license = "MIT" readme = "README.md" homepage = "https://github.com/joostlek/python-overseerr" repository = "https://github.com/joostlek/python-overseerr" documentation = "https://github.com/joostlek/python-overseerr" keywords = ["Overseerr", "api", "async", "client"] 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", ] packages = [ { include = "python_overseerr", from = "src" }, ] [tool.poetry.dependencies] python = "^3.11" aiohttp = ">=3.0.0" yarl = ">=1.6.0" mashumaro = "^3.11" orjson = ">=3.9.0" [tool.poetry.group.dev.dependencies] codespell = "2.4.1" covdefaults = "2.3.0" coverage = {version = "7.6.12", extras = ["toml"]} mypy = "1.15.0" pre-commit = "4.1.0" pre-commit-hooks = "5.0.0" pylint = "3.3.4" pytest = "8.3.4" pytest-asyncio = "0.25.3" pytest-cov = "6.0.0" ruff = "0.9.7" safety = "3.3.1" yamllint = "1.35.1" syrupy = "4.8.2" aioresponses = "0.7.8" [tool.poetry.urls] "Bug Tracker" = "https://github.com/joostlek/python-overseerr/issues" Changelog = "https://github.com/joostlek/python-overseerr/releases" [tool.coverage.report] show_missing = true [tool.coverage.run] plugins = ["covdefaults"] source = ["python_overseerr"] [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", "wrong-import-order", "too-many-arguments", "too-many-positional-arguments", ] [tool.pylint.SIMILARITIES] ignore-imports = true [tool.pylint.FORMAT] max-line-length = 88 [tool.pytest.ini_options] addopts = "--cov" asyncio_mode = "auto" [tool.ruff.lint] ignore = [ "ANN401", # Opinioated warning on disallowing dynamically typed expressions "COM812", # Conflicts with other rules "D203", # Conflicts with other rules "D213", # Conflicts with other rules "D417", # False positives in some occasions "ISC001", # Conflicts with other rules "PLR2004", # Just annoying, not really useful ] select = ["ALL"] [tool.ruff.lint.flake8-pytest-style] fixture-parentheses = false mark-parentheses = false [tool.ruff.lint.isort] known-first-party = ["python_overseerr"] 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"] joostlek-python-overseerr-19f99d8/src/000077500000000000000000000000001475735226000200565ustar00rootroot00000000000000joostlek-python-overseerr-19f99d8/src/python_overseerr/000077500000000000000000000000001475735226000234735ustar00rootroot00000000000000joostlek-python-overseerr-19f99d8/src/python_overseerr/__init__.py000066400000000000000000000032221475735226000256030ustar00rootroot00000000000000"""Asynchronous Python client for Overseerr.""" from python_overseerr.exceptions import ( OverseerrAuthenticationError, OverseerrConnectionError, OverseerrError, ) from python_overseerr.models import ( TV, Genre, Issue, IssueCount, IssueFilterStatus, IssueResponse, IssueSortStatus, IssueStatus, IssueType, Keyword, MediaInfo, MediaInfoWithRequests, MediaStatus, MediaType, Movie, MovieDetails, NotificationConfig, NotificationType, Person, Request, RequestCount, RequestFilterStatus, RequestResponse, RequestSortStatus, RequestStatus, Result, SearchResult, Status, TVDetails, User, WatchlistEntry, WatchlistResponse, WebhookNotificationConfig, WebhookNotificationOptions, ) from python_overseerr.overseerr import OverseerrClient __all__ = [ "TV", "Genre", "Issue", "IssueCount", "IssueFilterStatus", "IssueResponse", "IssueSortStatus", "IssueStatus", "IssueType", "Keyword", "MediaInfo", "MediaInfoWithRequests", "MediaStatus", "MediaType", "Movie", "MovieDetails", "NotificationConfig", "NotificationType", "OverseerrAuthenticationError", "OverseerrClient", "OverseerrConnectionError", "OverseerrError", "Person", "Request", "RequestCount", "RequestFilterStatus", "RequestResponse", "RequestSortStatus", "RequestStatus", "Result", "SearchResult", "Status", "TVDetails", "User", "WatchlistEntry", "WatchlistResponse", "WebhookNotificationConfig", "WebhookNotificationOptions", ] joostlek-python-overseerr-19f99d8/src/python_overseerr/exceptions.py000066400000000000000000000004601475735226000262260ustar00rootroot00000000000000"""Asynchronous Python client for Overseerr.""" class OverseerrError(Exception): """Generic exception.""" class OverseerrConnectionError(OverseerrError): """Overseerr connection exception.""" class OverseerrAuthenticationError(OverseerrError): """Overseerr authentication exception.""" joostlek-python-overseerr-19f99d8/src/python_overseerr/models.py000066400000000000000000000265231475735226000253400ustar00rootroot00000000000000"""Models for Overseerr.""" from __future__ import annotations from dataclasses import dataclass, field from datetime import date, datetime # noqa: TC003 from enum import IntEnum, IntFlag, StrEnum from typing import Annotated from mashumaro import field_options from mashumaro.mixins.orjson import DataClassORJSONMixin from mashumaro.types import Discriminator @dataclass class RequestCount(DataClassORJSONMixin): """Request count model.""" total: int movie: int tv: int pending: int approved: int declined: int processing: int available: int @dataclass class IssueCount(DataClassORJSONMixin): """Issue count model.""" total: int video: int audio: int subtitles: int others: int open: int closed: int @dataclass class Status(DataClassORJSONMixin): """Status model.""" version: str update_available: bool = field(metadata=field_options(alias="updateAvailable")) commits_behind: int = field(metadata=field_options(alias="commitsBehind")) restart_required: bool = field(metadata=field_options(alias="restartRequired")) class MediaStatus(IntEnum): """Media status enum.""" UNKNOWN = 1 PENDING = 2 PROCESSING = 3 PARTIALLY_AVAILABLE = 4 AVAILABLE = 5 @dataclass class MediaInfo(DataClassORJSONMixin): """Media info model.""" id: int tmdb_id: int | None = field(metadata=field_options(alias="tmdbId")) tvdb_id: int | None = field(metadata=field_options(alias="tvdbId")) imdb_id: str | None = field(metadata=field_options(alias="imdbId")) media_type: MediaType = field(metadata=field_options(alias="mediaType")) status: MediaStatus created_at: datetime = field(metadata=field_options(alias="createdAt")) updated_at: datetime = field(metadata=field_options(alias="updatedAt")) class ResultMediaType(StrEnum): """Media type enum.""" MOVIE = "movie" TV = "tv" PERSON = "person" class MediaType(StrEnum): """Media type enum.""" MOVIE = "movie" TV = "tv" @dataclass class Result(DataClassORJSONMixin): """Result model.""" id: int mediaType: ResultMediaType # noqa: N815 # pylint: disable=invalid-name media_type: ResultMediaType = field(metadata=field_options(alias="mediaType")) @dataclass class Movie(Result): """Movie result model.""" mediaType = ResultMediaType.MOVIE # noqa: N815 # pylint: disable=invalid-name original_language: str = field(metadata=field_options(alias="originalLanguage")) original_title: str = field(metadata=field_options(alias="originalTitle")) overview: str popularity: float title: str adult: bool media_info: MediaInfo | None = field( metadata=field_options(alias="mediaInfo"), default=None ) @dataclass class TV(Result): """TV result model.""" mediaType = ResultMediaType.TV # noqa: N815 # pylint: disable=invalid-name first_air_date: date = field(metadata=field_options(alias="firstAirDate")) name: str original_language: str = field(metadata=field_options(alias="originalLanguage")) original_name: str = field(metadata=field_options(alias="originalName")) overview: str popularity: float media_info: MediaInfo | None = field( metadata=field_options(alias="mediaInfo"), default=None ) @dataclass class Person(Result): """Person result model.""" mediaType = ResultMediaType.PERSON # noqa: N815 # pylint: disable=invalid-name name: str popularity: float known_for: list[Movie] = field(metadata=field_options(alias="knownFor")) adult: bool @dataclass class SearchResult(DataClassORJSONMixin): """Search result model.""" results: list[ Annotated[Result, Discriminator(field="mediaType", include_subtypes=True)] ] class NotificationType(IntFlag): """Webhook notification type enum.""" REQUEST_PENDING_APPROVAL = 2 REQUEST_APPROVED = 4 REQUEST_AVAILABLE = 8 REQUEST_PROCESSING_FAILED = 16 REQUEST_DECLINED = 64 REQUEST_AUTOMATICALLY_APPROVED = 128 ISSUE_REPORTED = 256 ISSUE_COMMENTED = 512 ISSUE_RESOLVED = 1024 ISSUE_REOPENED = 2048 @dataclass class NotificationConfig(DataClassORJSONMixin): """Webhook config model.""" enabled: bool types: NotificationType @dataclass class WebhookNotificationOptions: """Webhook notification options model.""" json_payload: str = field(metadata=field_options(alias="jsonPayload")) webhook_url: str = field(metadata=field_options(alias="webhookUrl")) @dataclass class WebhookNotificationConfig(NotificationConfig): """Webhook config model.""" options: WebhookNotificationOptions @dataclass class User(DataClassORJSONMixin): """User model.""" id: int plex_username: str = field(metadata=field_options(alias="plexUsername")) plex_id: int = field(metadata=field_options(alias="plexId")) email: str avatar: str movie_quota_limit: int | None = field( metadata=field_options(alias="movieQuotaLimit") ) movie_quota_days: int | None = field(metadata=field_options(alias="movieQuotaDays")) tv_quota_limit: int | None = field(metadata=field_options(alias="tvQuotaLimit")) tv_quota_days: int | None = field(metadata=field_options(alias="tvQuotaDays")) created_at: datetime = field(metadata=field_options(alias="createdAt")) updated_at: datetime = field(metadata=field_options(alias="updatedAt")) request_count: int = field(metadata=field_options(alias="requestCount")) display_name: str = field(metadata=field_options(alias="displayName")) class RequestFilterStatus(StrEnum): """Request filter status enum.""" ALL = "all" APPROVED = "approved" AVAILABLE = "available" PENDING = "pending" PROCESSING = "processing" UNAVAILABLE = "unavailable" FAILED = "failed" class RequestSortStatus(StrEnum): """Request sort status enum.""" ADDED = "added" MODIFIED = "modified" class RequestStatus(IntEnum): """Request status enum.""" PENDING_APPROVAL = 1 APPROVED = 2 DECLINED = 3 @dataclass class Request(DataClassORJSONMixin): """Request model.""" id: int status: RequestStatus created_at: datetime = field(metadata=field_options(alias="createdAt")) updated_at: datetime = field(metadata=field_options(alias="updatedAt")) is4k: bool requested_by: User = field(metadata=field_options(alias="requestedBy")) season_count: int | None = field( metadata=field_options(alias="seasonCount"), default=None ) modified_by: User | None = field( metadata=field_options(alias="modifiedBy"), default=None ) @dataclass(kw_only=True) class RequestWithMedia(Request): """Request with media model.""" media: MediaInfo @dataclass class MediaInfoWithRequests(MediaInfo): """Media info with requests model.""" requests: list[Request] @dataclass class RequestResponse(DataClassORJSONMixin): """Request response model.""" results: list[RequestWithMedia] class IssueFilterStatus(StrEnum): """Issue filter status enum.""" ALL = "all" OPEN = "open" RESOLVED = "resolved" class IssueSortStatus(StrEnum): """Issue sort status enum.""" ADDED = "added" MODIFIED = "modified" class IssueStatus(IntEnum): """Issue status enum.""" OPEN = 1 RESOLVED = 2 class IssueType(IntEnum): """Issue status enum.""" VIDEO = 1 AUDIO = 2 SUBTITLE = 3 OTHER = 4 @dataclass class Issue(DataClassORJSONMixin): """Issue model.""" id: int issue_type: IssueType = field(metadata=field_options(alias="issueType")) status: IssueStatus problem_season: int = field(metadata=field_options(alias="problemSeason")) problem_episode: int = field(metadata=field_options(alias="problemEpisode")) created_at: datetime = field(metadata=field_options(alias="createdAt")) updated_at: datetime = field(metadata=field_options(alias="updatedAt")) created_by: User = field(metadata=field_options(alias="createdBy")) media: MediaInfo modified_by: User | None = field( metadata=field_options(alias="modifiedBy"), default=None ) @dataclass class IssueResponse(DataClassORJSONMixin): """Issue response model.""" results: list[Issue] @dataclass class Genre: """Genre model.""" id: int name: str @dataclass class Keyword: """Keyword model.""" id: int name: str @dataclass class MovieDetails(DataClassORJSONMixin): """Movie details model.""" id: int adult: bool budget: int genres: list[Genre] original_language: str = field(metadata=field_options(alias="originalLanguage")) original_title: str = field(metadata=field_options(alias="originalTitle")) popularity: float release_date: date = field(metadata=field_options(alias="releaseDate")) revenue: int title: str vote_average: float = field(metadata=field_options(alias="voteAverage")) vote_count: int = field(metadata=field_options(alias="voteCount")) imdb_id: str | None = field(metadata=field_options(alias="imdbId")) overview: str runtime: int tagline: str media_info: MediaInfoWithRequests = field(metadata=field_options(alias="mediaInfo")) keywords: list[Keyword] @dataclass class Season(DataClassORJSONMixin): """Season model.""" id: int name: str overview: str season_number: int = field(metadata=field_options(alias="seasonNumber")) episode_count: int = field(metadata=field_options(alias="episodeCount")) air_date: date = field(metadata=field_options(alias="airDate")) poster_path: str = field(metadata=field_options(alias="posterPath")) @dataclass class Episode(DataClassORJSONMixin): """Episode model.""" id: int name: str overview: str episode_number: int = field(metadata=field_options(alias="episodeNumber")) air_date: date = field(metadata=field_options(alias="airDate")) still_path: str = field(metadata=field_options(alias="stillPath")) @dataclass class TVDetails(DataClassORJSONMixin): """TV details model.""" id: int first_air_date: date = field(metadata=field_options(alias="firstAirDate")) genres: list[Genre] languages: list[str] last_air_date: date = field(metadata=field_options(alias="lastAirDate")) name: str number_of_episodes: int = field(metadata=field_options(alias="numberOfEpisodes")) number_of_seasons: int = field(metadata=field_options(alias="numberOfSeasons")) original_language: str = field(metadata=field_options(alias="originalLanguage")) original_name: str = field(metadata=field_options(alias="originalName")) tagline: str overview: str popularity: float seasons: list[Season] last_episode_to_air: Episode = field( metadata=field_options(alias="lastEpisodeToAir") ) keywords: list[Keyword] media_info: MediaInfoWithRequests = field(metadata=field_options(alias="mediaInfo")) next_episode_to_air: Episode | None = field( metadata=field_options(alias="nextEpisodeToAir"), default=None ) @dataclass class WatchlistEntry(DataClassORJSONMixin): """Watchlist entry model.""" rating_key: str = field(metadata=field_options(alias="ratingKey")) title: str media_type: MediaType = field(metadata=field_options(alias="mediaType")) tmdb_id: int | None = field(metadata=field_options(alias="tmdbId")) @dataclass class WatchlistResponse(DataClassORJSONMixin): """Watchlist response model.""" results: list[WatchlistEntry] joostlek-python-overseerr-19f99d8/src/python_overseerr/overseerr.py000066400000000000000000000202741475735226000260660ustar00rootroot00000000000000"""Asynchronous Python client for Overseerr.""" from __future__ import annotations import asyncio from dataclasses import dataclass from importlib import metadata import socket from typing import TYPE_CHECKING, Any, Literal from aiohttp import ClientError, ClientResponseError, ClientSession from aiohttp.hdrs import METH_GET, METH_POST from yarl import URL from .exceptions import OverseerrAuthenticationError, OverseerrConnectionError from .models import ( Issue, IssueCount, IssueFilterStatus, IssueResponse, IssueSortStatus, MediaType, MovieDetails, NotificationType, RequestCount, RequestFilterStatus, RequestResponse, RequestSortStatus, RequestWithMedia, Result, SearchResult, Status, TVDetails, WatchlistEntry, WatchlistResponse, WebhookNotificationConfig, ) if TYPE_CHECKING: from typing_extensions import Self VERSION = metadata.version(__package__) @dataclass class OverseerrClient: """Main class for handling connections with Overseerr.""" host: str port: int api_key: str ssl: bool = True session: ClientSession | None = None request_timeout: int = 10 _close_session: bool = False async def _request( self, method: str, uri: str, *, params: dict[str, Any] | None = None, data: dict[str, Any] | None = None, ) -> str: """Handle a request to Overseerr.""" url = URL.build( host=self.host, port=self.port, scheme="https" if self.ssl else "http" ).joinpath(f"api/v1/{uri}") headers = { "User-Agent": f"PythonOverseerr/{VERSION}", "Accept": "application/json", "X-Api-Key": self.api_key, } if self.session is None: self.session = ClientSession() self._close_session = True try: async with asyncio.timeout(self.request_timeout): response = await self.session.request( method, url, params=params, headers=headers, json=data, ) except asyncio.TimeoutError as exception: msg = "Timeout occurred while connecting to the service" raise OverseerrConnectionError(msg) from exception except ( ClientError, ClientResponseError, socket.gaierror, ) as exception: msg = "Error occurred while communicating with the service" raise OverseerrConnectionError(msg) from exception if response.status == 403: msg = "Invalid API key" raise OverseerrAuthenticationError(msg) if response.status >= 400: content_type = response.headers.get("Content-Type", "") text = await response.text() msg = "Unexpected response from Overseerr" raise OverseerrConnectionError( msg, {"Content-Type": content_type, "response": text}, ) return await response.text() async def get_request_count(self) -> RequestCount: """Get request count from Overseerr.""" response = await self._request(METH_GET, "request/count") return RequestCount.from_json(response) async def get_issue_count(self) -> IssueCount: """Get issue count from Overseerr.""" response = await self._request(METH_GET, "issue/count") return IssueCount.from_json(response) async def get_status(self) -> Status: """Get status from Overseerr.""" response = await self._request(METH_GET, "status") return Status.from_json(response) async def search(self, keyword: str) -> list[Result]: """Search for media in Overseerr.""" response = await self._request(METH_GET, "search", params={"query": keyword}) return SearchResult.from_json(response).results async def get_webhook_notification_config(self) -> WebhookNotificationConfig: """Get webhook notification config from Overseerr.""" response = await self._request(METH_GET, "settings/notifications/webhook") return WebhookNotificationConfig.from_json(response) async def get_requests( self, status: RequestFilterStatus | None = None, sort: RequestSortStatus | None = None, requested_by: int | None = None, ) -> list[RequestWithMedia]: """Get requests from Overseerr.""" params: dict[str, Any] = {} if status: params["filter"] = status if sort: params["sort"] = sort if requested_by: params["requestedBy"] = requested_by response = await self._request(METH_GET, "request", params=params) return RequestResponse.from_json(response).results async def create_request( self, media_type: MediaType, tmdb_id: int, seasons: list[int] | Literal["all"] | None = None, ) -> RequestWithMedia: """Create a request in Overseerr.""" data = {"mediaType": media_type, "mediaId": tmdb_id} if seasons: data["seasons"] = seasons response = await self._request(METH_POST, "request", data=data) return RequestWithMedia.from_json(response) async def get_issues( self, status: IssueFilterStatus | None = None, sort: IssueSortStatus | None = None, requested_by: int | None = None, ) -> list[Issue]: """Get issues from Overseerr.""" params: dict[str, Any] = {} if status: params["filter"] = status if sort: params["sort"] = sort if requested_by: params["requestedBy"] = requested_by response = await self._request(METH_GET, "issue", params=params) return IssueResponse.from_json(response).results async def get_movie_details(self, identifier: int) -> MovieDetails: """Get movie details from Overseerr.""" response = await self._request(METH_GET, f"movie/{identifier}") return MovieDetails.from_json(response) async def get_tv_details(self, identifier: int) -> TVDetails: """Get tv details from Overseerr.""" response = await self._request(METH_GET, f"tv/{identifier}") return TVDetails.from_json(response) async def get_watchlist(self) -> list[WatchlistEntry]: """Get watchlist from Overseerr.""" response = await self._request(METH_GET, "discover/watchlist") return WatchlistResponse.from_json(response).results async def test_webhook_notification_config( self, webhook_url: str, json_payload: str ) -> bool: """Test webhook notification config with Overseerr.""" try: await self._request( METH_POST, "settings/notifications/webhook/test", data={ "enabled": True, "types": NotificationType.REQUEST_PENDING_APPROVAL, "options": {"webhookUrl": webhook_url, "jsonPayload": json_payload}, }, ) except OverseerrConnectionError: return False return True async def set_webhook_notification_config( self, *, enabled: bool, types: NotificationType, webhook_url: str, json_payload: str, ) -> None: """Get webhook notification config from Overseerr.""" await self._request( METH_POST, "settings/notifications/webhook", data={ "enabled": enabled, "types": types, "options": {"webhookUrl": webhook_url, "jsonPayload": json_payload}, }, ) 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. Returns ------- The OverseerrClient object. """ return self async def __aexit__(self, *_exc_info: object) -> None: """Async exit. Args: ---- _exc_info: Exec type. """ await self.close() joostlek-python-overseerr-19f99d8/src/python_overseerr/py.typed000066400000000000000000000000001475735226000251600ustar00rootroot00000000000000joostlek-python-overseerr-19f99d8/tests/000077500000000000000000000000001475735226000204315ustar00rootroot00000000000000joostlek-python-overseerr-19f99d8/tests/__init__.py000066400000000000000000000003571475735226000225470ustar00rootroot00000000000000"""Asynchronous Python client for Overseerr.""" from pathlib import Path def load_fixture(filename: str) -> str: """Load a fixture.""" path = Path(__package__) / "fixtures" / filename return path.read_text(encoding="utf-8") joostlek-python-overseerr-19f99d8/tests/__snapshots__/000077500000000000000000000000001475735226000232475ustar00rootroot00000000000000joostlek-python-overseerr-19f99d8/tests/__snapshots__/test_overseerr.ambr000066400000000000000000002165041475735226000271750ustar00rootroot00000000000000# serializer version: 1 # name: test_creating_request[args0-create_movie_request.json-json0] dict({ 'created_at': datetime.datetime(2025, 1, 3, 8, 22, 1, tzinfo=datetime.timezone.utc), 'id': 22, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2025, 1, 3, 8, 22, 1, tzinfo=datetime.timezone.utc), 'id': 543, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 402431, 'tvdb_id': None, 'updated_at': datetime.datetime(2025, 1, 3, 8, 22, 1, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaa/avatar?c=aaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'aaaaaa', 'email': 'some@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 43972689, 'plex_username': 'aaaaaa', 'request_count': 15, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaa/avatar?c=aaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'aaaaaa', 'email': 'some@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 43972689, 'plex_username': 'aaaaaa', 'request_count': 15, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': None, 'status': , 'updated_at': datetime.datetime(2025, 1, 3, 8, 22, 1, tzinfo=datetime.timezone.utc), }) # --- # name: test_creating_request[args1-create_tv_request.json-json1] dict({ 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), 'id': 14, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), 'id': 535, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 249522, 'tvdb_id': 447806, 'updated_at': datetime.datetime(2024, 12, 26, 14, 45, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 1, 'status': , 'updated_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), }) # --- # name: test_creating_request[args2-create_tv_request.json-json2] dict({ 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), 'id': 14, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), 'id': 535, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 249522, 'tvdb_id': 447806, 'updated_at': datetime.datetime(2024, 12, 26, 14, 45, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 1, 'status': , 'updated_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), }) # --- # name: test_data_retrieval[issue_count] dict({ 'audio': 0, 'closed': 0, 'open': 0, 'others': 0, 'subtitles': 0, 'total': 0, 'video': 0, }) # --- # name: test_data_retrieval[request_count] dict({ 'approved': 11, 'available': 8, 'declined': 0, 'movie': 9, 'pending': 0, 'processing': 3, 'total': 11, 'tv': 2, }) # --- # name: test_data_retrieval[status] dict({ 'commits_behind': 0, 'restart_required': False, 'update_available': False, 'version': 'develop-local', }) # --- # name: test_data_retrieval[watchlist] list([ dict({ 'media_type': , 'rating_key': 'aaaa', 'title': 'Sonic the Hedgehog 3', 'tmdb_id': 939243, }), dict({ 'media_type': , 'rating_key': 'bbbb', 'title': 'Superbad', 'tmdb_id': 8363, }), dict({ 'media_type': , 'rating_key': 'cccc', 'title': 'The Legend of Korra', 'tmdb_id': 33880, }), ]) # --- # name: test_data_retrieval[webhook_config] dict({ 'enabled': True, 'options': dict({ 'json_payload': ''' { "notification_type": "{{notification_type}}", "event": "{{event}}", "subject": "{{subject}}", "message": "{{message}}", "image": "{{image}}", "{{media}}": { "media_type": "{{media_type}}", "tmdbId": "{{media_tmdbid}}", "tvdbId": "{{media_tvdbid}}", "status": "{{media_status}}", "status4k": "{{media_status4k}}" }, "{{request}}": { "request_id": "{{request_id}}", "requestedBy_email": "{{requestedBy_email}}", "requestedBy_username": "{{requestedBy_username}}", "requestedBy_avatar": "{{requestedBy_avatar}}", "requestedBy_settings_discordId": "{{requestedBy_settings_discordId}}", "requestedBy_settings_telegramChatId": "{{requestedBy_settings_telegramChatId}}" }, "{{issue}}": { "issue_id": "{{issue_id}}", "issue_type": "{{issue_type}}", "issue_status": "{{issue_status}}", "reportedBy_email": "{{reportedBy_email}}", "reportedBy_username": "{{reportedBy_username}}", "reportedBy_avatar": "{{reportedBy_avatar}}", "reportedBy_settings_discordId": "{{reportedBy_settings_discordId}}", "reportedBy_settings_telegramChatId": "{{reportedBy_settings_telegramChatId}}" }, "{{comment}}": { "comment_message": "{{comment_message}}", "commentedBy_email": "{{commentedBy_email}}", "commentedBy_username": "{{commentedBy_username}}", "commentedBy_avatar": "{{commentedBy_avatar}}", "commentedBy_settings_discordId": "{{commentedBy_settings_discordId}}", "commentedBy_settings_telegramChatId": "{{commentedBy_settings_telegramChatId}}" }, "{{extra}}": [] } ''', 'webhook_url': 'https://test.test.nl', }), 'types': , }) # --- # name: test_fetching_issues list([ dict({ 'created_at': datetime.datetime(2025, 2, 6, 15, 45, 19, tzinfo=datetime.timezone.utc), 'created_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'id': 11, 'issue_type': , 'media': dict({ 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), 'id': 537, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 1156593, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 17, tzinfo=datetime.timezone.utc), }), 'modified_by': None, 'problem_episode': 0, 'problem_season': 0, 'status': , 'updated_at': datetime.datetime(2025, 2, 6, 15, 45, 19, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2025, 2, 6, 15, 45, 13, tzinfo=datetime.timezone.utc), 'created_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'id': 10, 'issue_type': , 'media': dict({ 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), 'id': 537, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 1156593, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 17, tzinfo=datetime.timezone.utc), }), 'modified_by': None, 'problem_episode': 0, 'problem_season': 0, 'status': , 'updated_at': datetime.datetime(2025, 2, 6, 15, 45, 13, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2025, 2, 6, 15, 45, 6, tzinfo=datetime.timezone.utc), 'created_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'id': 9, 'issue_type': , 'media': dict({ 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), 'id': 537, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 1156593, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 17, tzinfo=datetime.timezone.utc), }), 'modified_by': None, 'problem_episode': 0, 'problem_season': 0, 'status': , 'updated_at': datetime.datetime(2025, 2, 6, 15, 45, 6, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2025, 2, 6, 15, 44, 58, tzinfo=datetime.timezone.utc), 'created_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'id': 8, 'issue_type': , 'media': dict({ 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), 'id': 537, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 1156593, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 17, tzinfo=datetime.timezone.utc), }), 'modified_by': None, 'problem_episode': 0, 'problem_season': 0, 'status': , 'updated_at': datetime.datetime(2025, 2, 6, 15, 44, 58, tzinfo=datetime.timezone.utc), }), ]) # --- # name: test_fetching_movie_details dict({ 'adult': False, 'budget': 0, 'genres': list([ dict({ 'id': 10749, 'name': 'Romance', }), dict({ 'id': 18, 'name': 'Drama', }), ]), 'id': 1156593, 'imdb_id': 'tt28510079', 'keywords': list([ dict({ 'id': 818, 'name': 'based on novel or book', }), dict({ 'id': 9663, 'name': 'sequel', }), ]), 'media_info': dict({ 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), 'id': 537, 'imdb_id': None, 'media_type': , 'requests': list([ dict({ 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), 'id': 16, 'is4k': False, 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaaaa/avatar?c=aaaaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'me@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 43972689, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaaaa/avatar?c=aaaaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'me@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 43972689, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 0, 'status': , 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), }), ]), 'status': , 'tmdb_id': 1156593, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 17, tzinfo=datetime.timezone.utc), }), 'original_language': 'es', 'original_title': 'Culpa tuya', 'overview': "The love between Noah and Nick seems unwavering despite their parents' attempts to separate them. But his job and her entry into college open up their lives to new relationships that will shake the foundations of both their relationship and the Leister family itself.", 'popularity': 3958.479, 'release_date': datetime.date(2024, 12, 26), 'revenue': 0, 'runtime': 120, 'tagline': 'Divided by family. Driven by love.', 'title': 'Your Fault', 'vote_average': 7.7, 'vote_count': 190, }) # --- # name: test_fetching_requests list([ dict({ 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), 'id': 16, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), 'id': 537, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 1156593, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 17, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 0, 'status': , 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2024, 12, 28, 14, 19, 34, tzinfo=datetime.timezone.utc), 'id': 15, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 28, 14, 19, 34, tzinfo=datetime.timezone.utc), 'id': 536, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 1010581, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 28, 14, 30, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 0, 'status': , 'updated_at': datetime.datetime(2024, 12, 28, 14, 19, 34, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), 'id': 14, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), 'id': 535, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 249522, 'tvdb_id': 447806, 'updated_at': datetime.datetime(2024, 12, 26, 14, 45, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 1, 'status': , 'updated_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2024, 12, 24, 21, 13, 40, tzinfo=datetime.timezone.utc), 'id': 13, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 24, 21, 13, 40, tzinfo=datetime.timezone.utc), 'id': 534, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 1290287, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 24, 21, 20, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 0, 'status': , 'updated_at': datetime.datetime(2024, 12, 24, 21, 13, 40, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2024, 12, 17, 12, 11, 17, tzinfo=datetime.timezone.utc), 'id': 12, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 17, 12, 11, 17, tzinfo=datetime.timezone.utc), 'id': 533, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 10428, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 17, 12, 25, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 0, 'status': , 'updated_at': datetime.datetime(2024, 12, 17, 12, 11, 17, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2024, 12, 16, 23, 59, 55, tzinfo=datetime.timezone.utc), 'id': 11, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 16, 23, 59, 55, tzinfo=datetime.timezone.utc), 'id': 532, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 562, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 17, 0, 5, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 0, 'status': , 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 55, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2024, 12, 16, 22, 58, 17, tzinfo=datetime.timezone.utc), 'id': 10, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 16, 22, 58, 17, tzinfo=datetime.timezone.utc), 'id': 531, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 845781, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 5, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 0, 'status': , 'updated_at': datetime.datetime(2024, 12, 16, 22, 58, 17, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2024, 12, 16, 22, 38, 29, tzinfo=datetime.timezone.utc), 'id': 9, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 16, 21, 15, 14, tzinfo=datetime.timezone.utc), 'id': 439, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 94605, 'tvdb_id': 371028, 'updated_at': datetime.datetime(2024, 12, 16, 22, 45, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaaaaaa/avatar?c=aaaaaaaaa', 'created_at': datetime.datetime(2024, 12, 16, 22, 31, 8, tzinfo=datetime.timezone.utc), 'display_name': 'else', 'email': 'other@email.com', 'id': 3, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 123123, 'plex_username': 'else', 'request_count': 2, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 22, 31, 8, tzinfo=datetime.timezone.utc), }), 'season_count': 1, 'status': , 'updated_at': datetime.datetime(2024, 12, 16, 22, 39, 53, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2024, 12, 16, 22, 37, 35, tzinfo=datetime.timezone.utc), 'id': 8, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 16, 22, 37, 35, tzinfo=datetime.timezone.utc), 'id': 530, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 69629, 'tvdb_id': 328552, 'updated_at': datetime.datetime(2024, 12, 16, 22, 55, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/aaaaaaaaa/avatar?c=aaaaaaaaa', 'created_at': datetime.datetime(2024, 12, 16, 22, 31, 8, tzinfo=datetime.timezone.utc), 'display_name': 'else', 'email': 'other@email.com', 'id': 3, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 123123, 'plex_username': 'else', 'request_count': 2, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 22, 31, 8, tzinfo=datetime.timezone.utc), }), 'season_count': 2, 'status': , 'updated_at': datetime.datetime(2024, 12, 16, 22, 41, 1, tzinfo=datetime.timezone.utc), }), dict({ 'created_at': datetime.datetime(2024, 12, 16, 22, 7, 45, tzinfo=datetime.timezone.utc), 'id': 7, 'is4k': False, 'media': dict({ 'created_at': datetime.datetime(2024, 12, 16, 22, 4, 7, tzinfo=datetime.timezone.utc), 'id': 529, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 884605, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 16, 22, 20, tzinfo=datetime.timezone.utc), }), 'modified_by': dict({ 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'one@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 321321321, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/bvbbbbb/avatar?c=bbbbbb', 'created_at': datetime.datetime(2024, 12, 16, 22, 0, 12, tzinfo=datetime.timezone.utc), 'display_name': 'bbbbb', 'email': 'yes@gmail.com', 'id': 2, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 234234234234, 'plex_username': 'yestest', 'request_count': 1, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 22, 0, 12, tzinfo=datetime.timezone.utc), }), 'season_count': 0, 'status': , 'updated_at': datetime.datetime(2024, 12, 16, 22, 8, 5, tzinfo=datetime.timezone.utc), }), ]) # --- # name: test_fetching_tv_details dict({ 'first_air_date': datetime.date(2024, 12, 19), 'genres': list([ dict({ 'id': 10764, 'name': 'Reality', }), ]), 'id': 249522, 'keywords': list([ dict({ 'id': 271, 'name': 'competition', }), dict({ 'id': 4325, 'name': 'game show', }), dict({ 'id': 330122, 'name': 'mrbeast', }), ]), 'languages': list([ 'da', 'en', ]), 'last_air_date': datetime.date(2024, 12, 26), 'last_episode_to_air': dict({ 'air_date': datetime.date(2024, 12, 26), 'episode_number': 3, 'id': 5802152, 'name': 'The Solitary Experiment', 'overview': 'What would happen if three best friends were trapped in a room, but only two could escape? Watch and see for yourself right now!', 'still_path': '/r6LRRaA2l2tMDttWbYl3dXdJUij.jpg', }), 'media_info': dict({ 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), 'id': 535, 'imdb_id': None, 'media_type': , 'requests': list([ dict({ 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), 'id': 14, 'is4k': False, 'modified_by': dict({ 'avatar': 'https://plex.tv/users/123123/avatar?c=123123', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'me@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 123123, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'requested_by': dict({ 'avatar': 'https://plex.tv/users/123123/avatar?c=123123', 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), 'display_name': 'somebody', 'email': 'me@email.com', 'id': 1, 'movie_quota_days': None, 'movie_quota_limit': None, 'plex_id': 123123, 'plex_username': 'somebody', 'request_count': 11, 'tv_quota_days': None, 'tv_quota_limit': None, 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), }), 'season_count': 1, 'status': , 'updated_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), }), ]), 'status': , 'tmdb_id': 249522, 'tvdb_id': 447806, 'updated_at': datetime.datetime(2024, 12, 26, 14, 45, tzinfo=datetime.timezone.utc), }), 'name': 'Beast Games', 'next_episode_to_air': dict({ 'air_date': datetime.date(2025, 1, 2), 'episode_number': 4, 'id': 5802153, 'name': 'Episode 4', 'overview': '', 'still_path': 'None', }), 'number_of_episodes': 10, 'number_of_seasons': 1, 'original_language': 'en', 'original_name': 'Beast Games', 'overview': "I gathered 1,000 people to fight for $5,000,000, the LARGEST cash prize in TV history! We're also giving away a private island, Lamborghinis, and millions more in cash throughout the competition! Go watch to see the greatest show ever made!", 'popularity': 769.189, 'seasons': list([ dict({ 'air_date': datetime.date(2024, 12, 19), 'episode_count': 10, 'id': 384427, 'name': 'Season 1', 'overview': '', 'poster_path': '/3itZlypnOcVcqI5xxyO6nvJ52yM.jpg', 'season_number': 1, }), ]), 'tagline': '1,000 players. 5 million dollars. 1 winner.', }) # --- # name: test_search[search_1.json] list([ dict({ 'adult': False, 'id': 605521, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Frosty', 'overview': 'โ€œI need to run because I love having that connection to nature,โ€ says ultra-runner Anna Frost, whoโ€™s been racking up competitive wins for more than a decade. After being consumed with running for years, Frost takes on a new challenge. This film follows the endurance athlete from podium to motherhood.', 'popularity': 0.001, 'title': 'Frosty', }), dict({ 'adult': False, 'id': 1290287, 'mediaType': , 'media_info': dict({ 'created_at': datetime.datetime(2024, 12, 24, 21, 13, 40, tzinfo=datetime.timezone.utc), 'id': 534, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 1290287, 'tvdb_id': None, 'updated_at': datetime.datetime(2024, 12, 24, 21, 20, tzinfo=datetime.timezone.utc), }), 'media_type': , 'original_language': 'en', 'original_title': 'Hot Frosty', 'overview': "When a young widow's magic scarf brings a dashing snowman to life, can he help her rediscover romance, laughter and holiday cheer before he melts away?", 'popularity': 87.462, 'title': 'Hot Frosty', }), dict({ 'adult': False, 'id': 1828978, 'known_for': list([ dict({ 'adult': False, 'id': 535, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Flashdance', 'overview': 'Alex Owens, a young woman juggling between two odd jobs, aspires to become a successful ballet dancer. Nick, who is her boss and lover, supports and encourages her to fulfil her dream.', 'popularity': 22.254, 'title': 'Flashdance', }), dict({ 'adult': False, 'id': 67361, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Freshest Kids', 'overview': 'From the Boogie Down Bronx and beyond, the history of the b-boy.', 'popularity': 0.505, 'title': 'The Freshest Kids', }), ]), 'mediaType': , 'media_type': , 'name': "Wayne 'Frosty Freeze' Frost", 'popularity': 0.611, }), dict({ 'adult': False, 'id': 1414554, 'known_for': list([ dict({ 'adult': False, 'id': 18785, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Hangover', 'overview': "When three friends finally come to after a raucous night of bachelor-party revelry, they find a baby in the closet and a tiger in the bathroom. But they can't seem to locate their best friend, Doug โ€“ who's supposed to be tying the knot. Launching a frantic search for Doug, the trio perseveres through a nasty hangover to try to make it to the church on time.", 'popularity': 90.836, 'title': 'The Hangover', }), dict({ 'adult': False, 'id': 119450, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Dawn of the Planet of the Apes', 'overview': 'A group of scientists in San Francisco struggle to stay alive in the aftermath of a plague that is wiping out humanity, while Caesar tries to maintain dominance over his community of intelligent apes.', 'popularity': 61.855, 'title': 'Dawn of the Planet of the Apes', }), dict({ 'adult': False, 'id': 58574, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Sherlock Holmes: A Game of Shadows', 'overview': 'There is a new criminal mastermind at large (Professor Moriarty) and not only is he Holmesโ€™ intellectual equal, but his capacity for evil and lack of conscience may give him an advantage over the detective.', 'popularity': 34.481, 'title': 'Sherlock Holmes: A Game of Shadows', }), ]), 'mediaType': , 'media_type': , 'name': 'Craig Frosty Silva', 'popularity': 0.43, }), dict({ 'adult': False, 'id': 28042, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Frosty Returns', 'overview': "Mr. Twitchell, a greedy old businessman, has invented Summer Wheeze: a spray that instantly removes snow and slush! Now Holly has to keep Frosty from melting, and convince everybody that snow's actually a good thing.", 'popularity': 7.677, 'title': 'Frosty Returns', }), dict({ 'adult': False, 'id': 1300131, 'known_for': list([ dict({ 'adult': False, 'id': 967, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Spartacus', 'overview': 'The rebellious Thracian Spartacus, born and raised a slave, is sold to Gladiator trainer Batiatus. After weeks of being trained to kill for the arena, Spartacus turns on his owners and leads the other slaves in rebellion. As the rebels move from town to town, their numbers swell as escaped slaves join their ranks. Under the leadership of Spartacus, they make their way to southern Italy, where they will cross the sea and return to their homes.', 'popularity': 37.881, 'title': 'Spartacus', }), dict({ 'adult': False, 'id': 18264, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Man from Laramie', 'overview': 'Will Lockhart arrives in Coronado, an isolated town in New Mexico, in search of someone who sells rifles to the Apache tribe, finding himself unwillingly drawn into the convoluted life of a local ranching family whose members seem to have a lot to hide.', 'popularity': 13.317, 'title': 'The Man from Laramie', }), dict({ 'adult': False, 'id': 28484, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Colorado Territory', 'overview': 'After escaping from jail, outlaw Wes McQueen is convinced by his old partner in crime to do one last heist.', 'popularity': 5.99, 'title': 'Colorado Territory', }), ]), 'mediaType': , 'media_type': , 'name': 'Frosty Royce', 'popularity': 0.355, }), dict({ 'adult': False, 'id': 26539, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': "Frosty's Winter Wonderland", 'overview': 'Years have passed since Frosty left for the North Pole, but his promise is kept when he hears news of the first snowfall of the season, and decides to return.', 'popularity': 10.095, 'title': "Frosty's Winter Wonderland", }), dict({ 'adult': False, 'id': 13675, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Frosty the Snowman', 'overview': 'A discarded silk top-hat becomes the focus of a struggle between a washed-up stage magician and a group of schoolchildren, after it magically brings a snowman to life. Realizing that newly-living Frosty will melt in spring unless he takes refuge in a colder climate, Frosty and Karen, a young girl who he befriends, stow away on a freight train headed for the north pole. Little do they know that the magician is following them, and he wants his hat back!', 'popularity': 20.297, 'title': 'Frosty the Snowman', }), dict({ 'adult': False, 'id': 40246, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': "Rudolph and Frosty's Christmas in July", 'overview': 'Winterbolt is trying to make the North Pole his evil wonderland, and it is up to Frosty the Snowman, Rudolph the Red-Nosed Reindeer and others to stop him.', 'popularity': 6.946, 'title': "Rudolph and Frosty's Christmas in July", }), dict({ 'adult': False, 'id': 1393660, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Hot Frosty 2024 - Afdah', 'overview': "Hot Frosty 2024 is a pleasant surprise among holiday romances. The film goes beyond what you would expect from a film in this genre, turning a potentially silly premise into a complex look at grief, love, and magical second chances. Lacey Chabert and Dustin Milligan's captivating chemistry, clever script, and true emotional depth turn a potentially forgotten idea into a memorable one. The film skillfully combines funny and touching moments to create a unique story that shows how complicated relationships can be. Unlike other holiday movies, it combines magic with a moving true story.", 'popularity': 0.537, 'title': 'Hot Frosty 2024 - Comedy, Romance, Fantasy', }), dict({ 'adult': False, 'id': 5070012, 'known_for': list([ dict({ 'adult': False, 'id': 1390475, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'All the Little Things', 'overview': 'An accomplished molecular biologist moves out of the lab in a quest to make an encyclopedia documenting all the fruit fly species in North America.', 'popularity': 2.353, 'title': 'All the Little Things', }), ]), 'mediaType': , 'media_type': , 'name': 'Frosty/Misty', 'popularity': 0.001, }), dict({ 'adult': False, 'id': 1357698, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Rudolph, Frosty & Friends Sing Along', 'overview': 'Ten Musical Yuletide treasures featuring the voices of Fred Astaire, Jimmy Durante and Burl Ives. Create A tuneful new family tradition with this festive, fun-to-follow sing along!', 'popularity': 1.55, 'title': 'The Rudolph, Frosty & Friends Sing Along', }), dict({ 'adult': False, 'id': 953871, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'ru', 'original_title': 'ะ ะฝะฐะด ะขัƒะฝะณัƒัะบะพะน ะผะพั€ะพะทะฝั‹ะน ัั‚ะตะปะตั‚ัั ั‚ัƒะผะฐะฝ...', 'overview': 'On the shore of the Podkamennaya Tunguska, in harsh northern conditions, the Kto people live, the keeper of a special way of life, traditions and rituals.', 'popularity': 0.005, 'title': 'And Over Tunguska Frosty Fog Spreads', }), dict({ 'adult': False, 'id': 845524, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'lv', 'original_title': 'Sarmฤซtes', 'overview': 'In the mid โ€“ 1960โ€™s, Latvia was a part of the Soviet Union. People lived identical lives, listened to the same radio stations. Children wore the same boots and ate the same porridge every morning. Only their dreams and desires for something different set them apart from each other. For little Dace this is a moment, where stand still of childhoodโ€™s happiness turns into time for growing up. "A fulfilled expression of Beauty in the passage of Life." (Dmitry Rancev, "The Independent", Latvia) "Competent and Spartanโ€ฆ" (Jan Ingman, catalogue of "Stockholm IFF")', 'popularity': 0.426, 'title': 'Frosty Flowers', }), dict({ 'adult': False, 'id': 433229, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Jadeh-haye Sard', 'overview': "Moosavi, a country schoolteacher, must undertake an arduous journey to fetch medicine for his village's sick. Accompanied by his student and a villager, he travels through a blizzard and is pursued by a pack of hungry wolves.", 'popularity': 0.001, 'title': 'Frosty Roads', }), dict({ 'adult': False, 'id': 1002270, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'zh', 'original_title': 'ๆœˆ่ฝ็ƒๅ•ผ้œœๆปฟๅคฉ', 'overview': "Loosely based on Maxim Gorky's The Lower Depths", 'popularity': 0.746, 'title': 'The Frosty Night', }), dict({ 'adult': False, 'id': 441986, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'ru', 'original_title': 'ะœะพั€ะพะทะฝั‹ะน ัƒะทะพั€', 'overview': 'How Morozik decorated a rainy day with sparkling snow.', 'popularity': 0.001, 'title': 'Frosty Pattern', }), ]) # --- # name: test_search[search_2.json] list([ dict({ 'first_air_date': datetime.date(2014, 7, 13), 'id': 47640, 'mediaType': , 'media_info': dict({ 'created_at': datetime.datetime(2024, 12, 16, 21, 15, 21, tzinfo=datetime.timezone.utc), 'id': 503, 'imdb_id': None, 'media_type': , 'status': , 'tmdb_id': 47640, 'tvdb_id': 276564, 'updated_at': datetime.datetime(2024, 12, 16, 21, 15, 21, tzinfo=datetime.timezone.utc), }), 'media_type': , 'name': 'The Strain', 'original_language': 'en', 'original_name': 'The Strain', 'overview': 'A high concept thriller that tells the story of Dr. Ephraim Goodweather, the head of the Center for Disease Control Canary Team in New York City. He and his team are called upon to investigate a mysterious viral outbreak with hallmarks of an ancient and evil strain of vampirism. As the strain spreads, Eph, his team, and an assembly of everyday New Yorkers, wage war for the fate of humanity itself.', 'popularity': 284.215, }), dict({ 'first_air_date': datetime.date(2008, 5, 26), 'id': 19997, 'mediaType': , 'media_info': None, 'media_type': , 'name': 'The Andromeda Strain', 'original_language': 'en', 'original_name': 'The Andromeda Strain', 'overview': 'A U.S. satellite crash-lands near a small town in Utah, unleashing a deadly plague that kills virtually everyone except two survivors, who may provide clues to immunizing the population. As the military attempts to quarantine the area, a team of highly specialized scientists is assembled to find a cure and stop the spread of the alien pathogen, code-named Andromeda.', 'popularity': 38.794, }), dict({ 'first_air_date': datetime.date(2014, 7, 13), 'id': 272184, 'mediaType': , 'media_info': None, 'media_type': , 'name': 'The Strain', 'original_language': 'es', 'original_name': 'The Strain', 'overview': '', 'popularity': 0.006, }), dict({ 'adult': False, 'id': 10514, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Andromeda Strain', 'overview': "When virtually all of the residents of Piedmont, New Mexico, are found dead after the return to Earth of a space satellite, the head of the US Air Force's Project Scoop declares an emergency. A group of eminent scientists led by Dr. Jeremy Stone scramble to a secure laboratory and try to first isolate the life form while determining why two people from Piedmont - an old alcoholic and a six-month-old baby - survived. The scientists methodically study the alien life form unaware that it has already mutated and presents a far greater danger in the lab, which is equipped with a nuclear self-destruct device designed to prevent the escape of dangerous biological agents.", 'popularity': 16.612, 'title': 'The Andromeda Strain', }), dict({ 'adult': False, 'id': 962613, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Terra Incognita: Making the Andromeda Strain', 'overview': 'A behind the scenes look at the background and making of the 2008 TV mini-series', 'popularity': 2.258, 'title': 'Terra Incognita: Making the Andromeda Strain', }), dict({ 'adult': False, 'id': 73101, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'fr', 'original_title': 'The Killing Strain', 'overview': "A man-made virus, 'The Killing Strain'-- an out-of-control swine flu-- turns infected humans into raging monsters. As it rapidly spreads, a group of uninfected survivors must make life-or-death decisions before the U.S. military firebombs the area in a desperate attempt contain the contagion. The survivors are unaware that the virus has already reached their group-- by infecting one of them-- and now the merciless metamorphic process has begun.", 'popularity': 1.021, 'title': 'The Killing Strain', }), dict({ 'adult': False, 'id': 1074431, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Andromeda Strain: Making the Film', 'overview': 'The making of "The Andromeda Strain".', 'popularity': 0.979, 'title': 'The Andromeda Strain: Making the Film', }), dict({ 'adult': False, 'id': 291952, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Racing Strain', 'overview': 'Lucille Cameron, the spirited daughter of a Kentucky colonel, discovers that her father is nearly bankrupt as a result of his dealings with New York horseman and stock promoter Jim De Luce....', 'popularity': 0.158, 'title': 'The Racing Strain', }), dict({ 'adult': False, 'id': 982014, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Wild Strain', 'overview': "Although the prominent Hollywood family prides itself on its illustrious family tree, young Winifred Hollywood exhibits a fondness for wild adventures that greatly disturbs her parents. When Winifred becomes engaged to bank official Harold Burton, his equally snobbish parents visit the Hollywood home and are shocked by the young woman's spirited outbursts and mischievous tricks, and the engagement is broken after she decides to perform bareback feats with a traveling circus.", 'popularity': 0.179, 'title': 'The Wild Strain', }), dict({ 'adult': False, 'id': 159423, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Racing Strain', 'overview': 'A race-car driver whose career is on the skids because of his drinking falls for a rich society girl. That motivates him to clean up his act and resume his career, but it may be too late for that.', 'popularity': 1.441, 'title': 'The Racing Strain', }), dict({ 'adult': False, 'id': 622790, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Golden Strain', 'overview': "Lt. Milt Mulford graduates from West Point and is assigned to a cavalry outpost in the West, near an Apache reservation. One day the Apaches, tired of being cheated by a crooked Indian agent, break the reservation and Mulford is sent after them with a patrol. Unfortunately, he cracks under the pressure of his first firefight, and is thrown out of the army. His fiancรฉ, disgusted, ends their engagement. He sets out to prove that he is not a coward and regain his fiancรฉ's love.", 'popularity': 0.564, 'title': 'The Golden Strain', }), dict({ 'adult': False, 'id': 1040917, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'sh', 'original_title': 'Plemeniti soj', 'overview': 'Short animated film.', 'popularity': 0.238, 'title': 'The Noble Strain', }), dict({ 'adult': False, 'id': 223061, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Missouri Strain', 'overview': 'A family threatened by a nationwide biological apocalypse flees everyday city life to survive.', 'popularity': 0.298, 'title': 'The Missouri Strain', }), dict({ 'adult': False, 'id': 243291, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Winning Strain', 'overview': 'A 1966 short documentary showing athletes in action at the 1966 National Amateur Athletic Union track carnival in New York. The film was nominated for an Oscar for Best Live Action Short Film.', 'popularity': 0.347, 'title': 'The Winning Strain', }), dict({ 'adult': False, 'id': 526388, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Warrior Strain', 'overview': "An Earl's cadet son stops a German baron from planting wireless-controlled signals at Brighton.", 'popularity': 0.442, 'title': 'The Warrior Strain', }), dict({ 'adult': False, 'id': 938337, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'The Iron Strain', 'overview': 'The story is set in Alaska, where spoiled and pampered heiress Octavia Van Ness has come for her health. Here she meets \'Chuck\' Hemingway, who despite his rough exterior is likewise a child of wealth, and a Yale graduate to boot. When Van Ness violently rejects his romantic overtures, Hemingway turns to an old Indian chum for advice. The Indian suggests rather chauvinistically that the way to win a headstrong girl is to "tame" her -- that is, treat \'er rough and make \'er like it.', 'popularity': 0.442, 'title': 'The Iron Strain', }), dict({ 'adult': False, 'id': 80116, 'known_for': list([ dict({ 'adult': False, 'id': 67395, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'L.E.T.H.A.L. Ladies: Return to Savage Beach', 'overview': "A stolen computer disk contains the location of a hidden tresaure trove. It's up to the sexy ladies of LETHAL (Legion to Ensure Total Harmony and Law) to find the treasure before the bad guys do.", 'popularity': 34.91, 'title': 'L.E.T.H.A.L. Ladies: Return to Savage Beach', }), dict({ 'adult': False, 'id': 16225, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Heavy Metal 2000', 'overview': "Upon discovery of a shard of what could be the Loc-Nar, a miner named Tyler becomes possessed with an insatiable hunger for power and a thirst for immortality. On his way to the planet of youth, Tyler wipes out most of a space colony and kidnaps a beautiful young woman. His only mistake is that he doesn't kill her sister, Julie, who then sets out on a mission of rescue and revenge.", 'popularity': 12.815, 'title': 'Heavy Metal 2000', }), dict({ 'adult': False, 'id': 9594, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Double Impact', 'overview': 'Jean Claude Van Damme plays a dual role as Alex and Chad, twins separated at the death of their parents. Chad is raised by a family retainer in Paris, Alex becomes a petty crook in Hong Kong. Seeing a picture of Alex, Chad rejoins him and convinces him that his rival in Hong Kong is also the man who killed their parents. Alex is suspicious of Chad, especially when it comes to his girlfriend.', 'popularity': 33.319, 'title': 'Double Impact', }), ]), 'mediaType': , 'media_type': , 'name': 'Julie Strain', 'popularity': 14.373, }), dict({ 'adult': False, 'id': 216141, 'mediaType': , 'media_info': None, 'media_type': , 'original_language': 'en', 'original_title': 'Doctor Strain the Body Snatcher', 'overview': 'Positively torturous, undecipherable shambles of a horror film concerns the titular doctor and his nephew as they incautiously revive corpses in their basement laboratory.', 'popularity': 0.479, 'title': 'Doctor Strain the Body Snatcher', }), dict({ 'first_air_date': datetime.date(1995, 11, 10), 'id': 69019, 'mediaType': , 'media_info': None, 'media_type': , 'name': 'Strain of Blood', 'original_language': 'th', 'original_name': 'เธชเธฒเธขเน‚เธฅเธซเธดเธ•', 'overview': "Krai comes from a family of soldiers and has spent most of his life fighting in battles and wars for his country. Dao is the youngest daughter of a prominent village chief, who is very curious and happy go lucky as a youngster. Krai's older brother marries Dao's older sister, sealing the connection between both families. Krai meets Dao as a young girl and he spends a lot of time taking care of her, buying her toys and taking her on village outings with him to the market. Krai and his older brother are called away to defend the border and he promises Dao that he will return to take care of her always as an older brother. Years later, Krai comes back to realize that Dao has grown into a young beautiful maiden and the good feelings that both had for each other from years ago resurface into true love.", 'popularity': 10.02, }), dict({ 'first_air_date': datetime.date(2006, 11, 1), 'id': 31715, 'mediaType': , 'media_info': None, 'media_type': , 'name': 'Strain: Strategic Armored Infantry', 'original_language': 'ja', 'original_name': 'ๅฅๅ…‰ใฎใ‚นใƒˆใƒฌใ‚คใƒณ', 'overview': 'In the distant future, mankind is divided into two factions: Union and Deague. They have waged a war against each other for so long that no one remembers when it first began.Sara Werec, the daughter of a respectable family, is a 16-year old girl who attends a Space Academy where she is training to become a pilot. Her brother, Ralph Werec, had been sent to the frontline to accomplish a special mission when she was 11 years old. The two of them had lost their parents when they were young and the bond between the two is very close. It is Saraโ€™s dearest wish to be reunited with her brother. To do that, she must travel to the battlefield where he is.One day, Saraโ€™s planet is suddenly assaulted by Deague forces. To her surprise, her brother, Ralph, turns out to be one of the raiders who successfully kidnap a mysterious girl sleeping in a capsule.', 'popularity': 12.867, }), ]) # --- joostlek-python-overseerr-19f99d8/tests/conftest.py000066400000000000000000000021511475735226000226270ustar00rootroot00000000000000"""Asynchronous Python client for Overseerr.""" from collections.abc import AsyncGenerator, Generator import aiohttp from aioresponses import aioresponses import pytest from python_overseerr import OverseerrClient from syrupy import SnapshotAssertion from .syrupy import OverseerrSnapshotExtension @pytest.fixture(name="snapshot") def snapshot_assertion(snapshot: SnapshotAssertion) -> SnapshotAssertion: """Return snapshot assertion fixture with the Overseerr extension.""" return snapshot.use_extension(OverseerrSnapshotExtension) @pytest.fixture async def client() -> AsyncGenerator[OverseerrClient, None]: """Return a Overseerr client.""" async with ( aiohttp.ClientSession() as session, OverseerrClient( "192.168.0.30", 443, "key", session=session, ) as overseerr_client, ): yield overseerr_client @pytest.fixture(name="responses") def aioresponses_fixture() -> Generator[aioresponses, None, None]: """Return aioresponses fixture.""" with aioresponses() as mocked_responses: yield mocked_responses joostlek-python-overseerr-19f99d8/tests/const.py000066400000000000000000000004511475735226000221310ustar00rootroot00000000000000"""Constants for tests.""" from importlib import metadata MOCK_HOST = "192.168.0.30" MOCK_URL = f"https://{MOCK_HOST}/api/v1" version = metadata.version("python_overseerr") HEADERS = { "User-Agent": f"PythonOverseerr/{version}", "Accept": "application/json", "X-Api-Key": "key", } joostlek-python-overseerr-19f99d8/tests/fixtures/000077500000000000000000000000001475735226000223025ustar00rootroot00000000000000joostlek-python-overseerr-19f99d8/tests/fixtures/create_movie_request.json000066400000000000000000000074051475735226000274150ustar00rootroot00000000000000{ "type": "movie", "media": { "downloadStatus": [], "downloadStatus4k": [], "tmdbId": 402431, "tvdbId": null, "status": 2, "status4k": 1, "mediaType": "movie", "imdbId": null, "mediaAddedAt": null, "serviceId": null, "serviceId4k": null, "externalServiceId": null, "externalServiceId4k": null, "externalServiceSlug": null, "externalServiceSlug4k": null, "ratingKey": null, "ratingKey4k": null, "id": 543, "createdAt": "2025-01-03T08:22:01.000Z", "updatedAt": "2025-01-03T08:22:01.000Z", "lastSeasonChange": "2025-01-03T08:22:01.000Z" }, "requestedBy": { "permissions": 2, "id": 1, "email": "some@email.com", "plexUsername": "aaaaaa", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 43972689, "avatar": "https://plex.tv/users/aaaa/avatar?c=aaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "settings": { "id": 1, "locale": "", "region": "", "originalLanguage": null, "pgpKey": null, "discordId": "123", "pushbulletAccessToken": null, "pushoverApplicationToken": null, "pushoverUserKey": null, "pushoverSound": null, "telegramChatId": null, "telegramSendSilently": null, "watchlistSyncMovies": null, "watchlistSyncTv": null, "notificationTypes": { "email": 8190, "discord": 0, "pushbullet": 0, "pushover": 0, "slack": 0, "telegram": 0, "webhook": 0, "webpush": 8190 } }, "requestCount": 15, "displayName": "aaaaaa" }, "status": 2, "modifiedBy": { "permissions": 2, "id": 1, "email": "some@email.com", "plexUsername": "aaaaaa", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 43972689, "avatar": "https://plex.tv/users/aaaa/avatar?c=aaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "settings": { "id": 1, "locale": "", "region": "", "originalLanguage": null, "pgpKey": null, "discordId": "123", "pushbulletAccessToken": null, "pushoverApplicationToken": null, "pushoverUserKey": null, "pushoverSound": null, "telegramChatId": null, "telegramSendSilently": null, "watchlistSyncMovies": null, "watchlistSyncTv": null, "notificationTypes": { "email": 8190, "discord": 0, "pushbullet": 0, "pushover": 0, "slack": 0, "telegram": 0, "webhook": 0, "webpush": 8190 } }, "requestCount": 15, "displayName": "aaaaaa" }, "is4k": false, "serverId": null, "profileId": null, "rootFolder": null, "tags": null, "isAutoRequest": false, "languageProfileId": null, "id": 22, "createdAt": "2025-01-03T08:22:01.000Z", "updatedAt": "2025-01-03T08:22:01.000Z" } joostlek-python-overseerr-19f99d8/tests/fixtures/create_tv_request.json000066400000000000000000000053141475735226000267240ustar00rootroot00000000000000{ "id": 14, "status": 2, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:37:30.000Z", "type": "tv", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/tv", "languageProfileId": 1, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 535, "mediaType": "tv", "tmdbId": 249522, "tvdbId": 447806, "imdbId": null, "status": 4, "status4k": 1, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:45:00.000Z", "lastSeasonChange": "2024-12-26T14:37:30.000Z", "mediaAddedAt": "2024-12-26T14:39:56.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 144, "externalServiceId4k": null, "externalServiceSlug": "beast-games", "externalServiceSlug4k": null, "ratingKey": "10189", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10189", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10189&server=aaaa", "serviceUrl": "http://192.168.0.2:8989/series/beast-games" }, "seasons": [ { "id": 4, "seasonNumber": 1, "status": 2, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:37:30.000Z" } ], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasonCount": 1 } joostlek-python-overseerr-19f99d8/tests/fixtures/issue.json000066400000000000000000000177551475735226000243440ustar00rootroot00000000000000{ "pageInfo": { "pages": 1, "pageSize": 10, "results": 4, "page": 1 }, "results": [ { "id": 11, "issueType": 4, "status": 1, "problemSeason": 0, "problemEpisode": 0, "createdAt": "2025-02-06T15:45:19.000Z", "updatedAt": "2025-02-06T15:45:19.000Z", "createdBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 537, "mediaType": "movie", "tmdbId": 1156593, "tvdbId": null, "imdbId": null, "status": 3, "status4k": 1, "createdAt": "2024-12-29T10:04:16.000Z", "updatedAt": "2024-12-29T10:04:17.000Z", "lastSeasonChange": "2024-12-29T10:04:16.000Z", "mediaAddedAt": null, "serviceId": 0, "serviceId4k": null, "externalServiceId": 423, "externalServiceId4k": null, "externalServiceSlug": "1156593", "externalServiceSlug4k": null, "ratingKey": null, "ratingKey4k": null, "serviceUrl": "http://192.168.0.1:7878/movie/1156593" }, "modifiedBy": null }, { "id": 10, "issueType": 3, "status": 1, "problemSeason": 0, "problemEpisode": 0, "createdAt": "2025-02-06T15:45:13.000Z", "updatedAt": "2025-02-06T15:45:13.000Z", "createdBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 537, "mediaType": "movie", "tmdbId": 1156593, "tvdbId": null, "imdbId": null, "status": 3, "status4k": 1, "createdAt": "2024-12-29T10:04:16.000Z", "updatedAt": "2024-12-29T10:04:17.000Z", "lastSeasonChange": "2024-12-29T10:04:16.000Z", "mediaAddedAt": null, "serviceId": 0, "serviceId4k": null, "externalServiceId": 423, "externalServiceId4k": null, "externalServiceSlug": "1156593", "externalServiceSlug4k": null, "ratingKey": null, "ratingKey4k": null, "serviceUrl": "http://192.168.0.1:7878/movie/1156593" }, "modifiedBy": null }, { "id": 9, "issueType": 2, "status": 1, "problemSeason": 0, "problemEpisode": 0, "createdAt": "2025-02-06T15:45:06.000Z", "updatedAt": "2025-02-06T15:45:06.000Z", "createdBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 537, "mediaType": "movie", "tmdbId": 1156593, "tvdbId": null, "imdbId": null, "status": 3, "status4k": 1, "createdAt": "2024-12-29T10:04:16.000Z", "updatedAt": "2024-12-29T10:04:17.000Z", "lastSeasonChange": "2024-12-29T10:04:16.000Z", "mediaAddedAt": null, "serviceId": 0, "serviceId4k": null, "externalServiceId": 423, "externalServiceId4k": null, "externalServiceSlug": "1156593", "externalServiceSlug4k": null, "ratingKey": null, "ratingKey4k": null, "serviceUrl": "http://192.168.0.1:7878/movie/1156593" }, "modifiedBy": null }, { "id": 8, "issueType": 1, "status": 1, "problemSeason": 0, "problemEpisode": 0, "createdAt": "2025-02-06T15:44:58.000Z", "updatedAt": "2025-02-06T15:44:58.000Z", "createdBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 537, "mediaType": "movie", "tmdbId": 1156593, "tvdbId": null, "imdbId": null, "status": 3, "status4k": 1, "createdAt": "2024-12-29T10:04:16.000Z", "updatedAt": "2024-12-29T10:04:17.000Z", "lastSeasonChange": "2024-12-29T10:04:16.000Z", "mediaAddedAt": null, "serviceId": 0, "serviceId4k": null, "externalServiceId": 423, "externalServiceId4k": null, "externalServiceSlug": "1156593", "externalServiceSlug4k": null, "ratingKey": null, "ratingKey4k": null, "serviceUrl": "http://192.168.0.1:7878/movie/1156593" }, "modifiedBy": null } ] } joostlek-python-overseerr-19f99d8/tests/fixtures/issue_count.json000066400000000000000000000001521475735226000255330ustar00rootroot00000000000000{ "total": 0, "video": 0, "audio": 0, "subtitles": 0, "others": 0, "open": 0, "closed": 0 } joostlek-python-overseerr-19f99d8/tests/fixtures/movie.json000066400000000000000000002555321475735226000243300ustar00rootroot00000000000000{ "id": 1156593, "adult": false, "budget": 0, "genres": [ { "id": 10749, "name": "Romance" }, { "id": 18, "name": "Drama" } ], "relatedVideos": [ { "site": "YouTube", "key": "IoyJOL5WnvQ", "name": "Nick and Noah Meet Briar and Sofia [Subtitled]", "size": 1080, "type": "Clip", "url": "https://www.youtube.com/watch?v=IoyJOL5WnvQ" }, { "site": "YouTube", "key": "nuPjieeswM4", "name": "Sneak Peek: Nick and Noah are Back [Subtitled]", "size": 1080, "type": "Clip", "url": "https://www.youtube.com/watch?v=nuPjieeswM4" }, { "site": "YouTube", "key": "QT5j0Uf-rdM", "name": "Official Trailer 2 [Subtitled]", "size": 1080, "type": "Trailer", "url": "https://www.youtube.com/watch?v=QT5j0Uf-rdM" }, { "site": "YouTube", "key": "m_TWESxP_DE", "name": "Official Trailer [Subtitled]", "size": 1080, "type": "Trailer", "url": "https://www.youtube.com/watch?v=m_TWESxP_DE" }, { "site": "YouTube", "key": "Wp4S0-fWgI0", "name": "Official Teaser [Subtitled]", "size": 1080, "type": "Teaser", "url": "https://www.youtube.com/watch?v=Wp4S0-fWgI0" }, { "site": "YouTube", "key": "3KTZekgTyFU", "name": "Date Announce", "size": 1080, "type": "Teaser", "url": "https://www.youtube.com/watch?v=3KTZekgTyFU" } ], "originalLanguage": "es", "originalTitle": "Culpa tuya", "popularity": 3958.479, "productionCompanies": [ { "id": 32485, "name": "Pokeepsie Films", "originCountry": "ES", "logoPath": "/fVXreZkiJTOq1cCi6htSQlPSy7R.png" }, { "id": 210099, "name": "Amazon MGM Studios", "originCountry": "US", "logoPath": "/d6HwljzlOzxJ4tXlrpRkNZaZMWL.png" } ], "productionCountries": [ { "iso_3166_1": "ES", "name": "Spain" }, { "iso_3166_1": "US", "name": "United States of America" } ], "releaseDate": "2024-12-26", "releases": { "results": [ { "iso_3166_1": "AR", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "AS", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-26T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "AT", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "BE", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "BG", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "BO", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "BR", "release_dates": [ { "certification": "18", "descriptors": [ "Sexual Content", "Illegal Drugs" ], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-26T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "CA", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "CH", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "CL", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "CO", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "CR", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "CZ", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "DE", "release_dates": [ { "certification": "16", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "DK", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "EC", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "EG", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "ES", "release_dates": [ { "certification": "16", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "FI", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "FR", "release_dates": [ { "certification": "16", "descriptors": [], "iso_639_1": "", "note": "Prime vidรฉo", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "GB", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "GR", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "GT", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "GU", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "HK", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "HR", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "HU", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "ID", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "IE", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "IN", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "IT", "release_dates": [ { "certification": "14+", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "JP", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "KR", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "MP", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "MX", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "MY", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "NL", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "NO", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "NZ", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "PE", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "PH", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "PK", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "PL", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "PR", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-26T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "PT", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "RO", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "SA", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "SE", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "SG", "release_dates": [ { "certification": "M18", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "SK", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "TH", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "TR", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "TW", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "US", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-26T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "VE", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "VI", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-26T00:00:00.000Z", "type": 4 } ] }, { "iso_3166_1": "ZA", "release_dates": [ { "certification": "", "descriptors": [], "iso_639_1": "", "note": "Prime Video", "release_date": "2024-12-27T00:00:00.000Z", "type": 4 } ] } ] }, "revenue": 0, "spokenLanguages": [ { "english_name": "Spanish", "iso_639_1": "es", "name": "Espaรฑol" } ], "status": "Released", "title": "Your Fault", "video": false, "voteAverage": 7.7, "voteCount": 190, "backdropPath": "/6qld2YxAO9gdEblo0rsEb8BcYKO.jpg", "homepage": "https://www.amazon.com/dp/B0DJ1L7ZN3", "imdbId": "tt28510079", "overview": "The love between Noah and Nick seems unwavering despite their parents' attempts to separate them. But his job and her entry into college open up their lives to new relationships that will shake the foundations of both their relationship and the Leister family itself.", "posterPath": "/1sQA7lfcF9yUyoLYC0e6Zo3jmxE.jpg", "runtime": 120, "tagline": "Divided by family. Driven by love.", "credits": { "cast": [ { "castId": 1, "character": "Noah Morgan", "creditId": "64c12ecefdc1460139f9e120", "id": 2527414, "name": "Nicole Wallace", "order": 0, "gender": 1, "profilePath": "/gSGCoJVKAMUTmyA3GzCAX22WNBA.jpg" }, { "castId": 2, "character": "Nick Leister", "creditId": "64c12ed6df86a80125827557", "id": 2786960, "name": "Gabriel Guevara", "order": 1, "gender": 2, "profilePath": "/pviRYKEEmoPUfLYwP1VHJ6LQcRg.jpg" }, { "castId": 12, "character": "William Leister", "creditId": "65e0ed456a300b017d1dc9fc", "id": 1251336, "name": "Ivรกn Sรกnchez", "order": 2, "gender": 2, "profilePath": "/woVz8D7t1VUKjFJnsTAdc8tyz5C.jpg" }, { "castId": 13, "character": "Rafaela", "creditId": "65e0ed9851f99a018557897f", "id": 970027, "name": "Marta Hazas", "order": 3, "gender": 1, "profilePath": "/1dbeTFRCbWBt70dIGjYHKVLnpaG.jpg" }, { "castId": 14, "character": "Jenna", "creditId": "65e0edda41a561016382560b", "id": 4105602, "name": "Eva Ruiz", "order": 4, "gender": 1, "profilePath": "/bcu0nmQvhxwTzh4csc4kuxJsQee.jpg" }, { "castId": 15, "character": "Lion", "creditId": "65e0ef982d531a0162bf8423", "id": 2126335, "name": "Vรญctor Varona", "order": 5, "gender": 0, "profilePath": "/lcwFAjHjhJXkxf59TXGSjGGOlLj.jpg" }, { "castId": 16, "character": "Sofรญa", "creditId": "65e0f001724de10187de9bf1", "id": 3513082, "name": "Gabriela Andrada", "order": 6, "gender": 1, "profilePath": "/h8cAdDqbDK2ayGIuxQQdNCzyCsb.jpg" }, { "castId": 17, "character": "Briar", "creditId": "65e0f09541a5610186825d32", "id": 3904252, "name": "Alex Bejar", "order": 7, "gender": 1, "profilePath": "/kPeFa6xX57IyhAfoT8dtgfPMgmX.jpg" }, { "castId": 18, "character": "Michael", "creditId": "65e0f0b46a300b017d1dcbde", "id": 2785763, "name": "Javier Morgade", "order": 8, "gender": 2, "profilePath": "/hcDV10bTZlm1rTi0NRhoGIpdicw.jpg" }, { "castId": 19, "character": "Luca", "creditId": "65e0f35ea39d0b018608bda5", "id": 3117422, "name": "Felipe Londoรฑo", "order": 9, "gender": 0, "profilePath": "/gUKu2bla3ZKtwuzfymMbyzUsobC.jpg" }, { "castId": 20, "character": "Anabel", "creditId": "65e0f37c9dee58017c7cdb1f", "id": 261, "name": "Goya Toledo", "order": 10, "gender": 1, "profilePath": "/dihdQxVr2sFA1XznPK4orzC2m7i.jpg" }, { "castId": 21, "character": "Simรณn", "creditId": "65e0f3b107e2810163dc6d82", "id": 1983424, "name": "Fran Morcillo", "order": 11, "gender": 2, "profilePath": "/ovPzGuRvMQhB4OrC6lfxlEGLewD.jpg" }, { "castId": 22, "character": "Dioni", "creditId": "65e0f420724de10187de9dbf", "id": 2508286, "name": "Josรฉ Manuel Palacios", "order": 12, "gender": 2, "profilePath": "/1oXz8Hht5pBluq700BmHBQwWbVQ.jpg" } ], "crew": [ { "creditId": "64c54c10cadb6b01440d5d47", "department": "Writing", "id": 4106905, "job": "Novel", "name": "Mercedes Ron", "gender": 1, "profilePath": null }, { "creditId": "64c12f562f1be000ae4ba431", "department": "Production", "id": 57865, "job": "Producer", "name": "รlex de la Iglesia", "gender": 2, "profilePath": "/vyZFSSNtY2jL06v4nJHLIT5fWa2.jpg" }, { "creditId": "64c12f63097c49011d82bc77", "department": "Production", "id": 512958, "job": "Producer", "name": "Carolina Bang", "gender": 1, "profilePath": "/zwY5dMMeRAxUGU2Q50u7mWk3DA0.jpg" }, { "creditId": "64c17c3d871b34011e697f24", "department": "Directing", "id": 1739102, "job": "Director", "name": "Domingo Gonzรกlez", "gender": 0, "profilePath": null }, { "creditId": "674ddb345c9ffdbae7692b9a", "department": "Writing", "id": 1739102, "job": "Screenplay", "name": "Domingo Gonzรกlez", "gender": 0, "profilePath": null }, { "creditId": "674ddb3f7473778bbd9afc75", "department": "Writing", "id": 1495797, "job": "Screenplay", "name": "Sofรญa Cuenca", "gender": 0, "profilePath": "/d5JbOSgQFcLd0GlBSotuNXK9Yia.jpg" } ] }, "collection": { "id": 1156666, "name": "Fault Collection", "posterPath": "/cAimhhErEnKdvaZoU6Wtbf38sTS.jpg", "backdropPath": "/7N9p8D39MXJDfm14zlBwW7mBh7g.jpg" }, "externalIds": { "facebookId": null, "imdbId": "tt28510079", "instagramId": null, "twitterId": null }, "mediaInfo": { "downloadStatus": [], "downloadStatus4k": [], "id": 537, "mediaType": "movie", "tmdbId": 1156593, "tvdbId": null, "imdbId": null, "status": 3, "status4k": 1, "createdAt": "2024-12-29T10:04:16.000Z", "updatedAt": "2024-12-29T10:04:17.000Z", "lastSeasonChange": "2024-12-29T10:04:16.000Z", "mediaAddedAt": null, "serviceId": 0, "serviceId4k": null, "externalServiceId": 423, "externalServiceId4k": null, "externalServiceSlug": "1156593", "externalServiceSlug4k": null, "ratingKey": null, "ratingKey4k": null, "requests": [ { "id": 16, "status": 2, "createdAt": "2024-12-29T10:04:16.000Z", "updatedAt": "2024-12-29T10:04:16.000Z", "type": "movie", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/movies", "languageProfileId": null, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 537, "mediaType": "movie", "tmdbId": 1156593, "tvdbId": null, "imdbId": null, "status": 3, "status4k": 1, "createdAt": "2024-12-29T10:04:16.000Z", "updatedAt": "2024-12-29T10:04:17.000Z", "lastSeasonChange": "2024-12-29T10:04:16.000Z", "mediaAddedAt": null, "serviceId": 0, "serviceId4k": null, "externalServiceId": 423, "externalServiceId4k": null, "externalServiceSlug": "1156593", "externalServiceSlug4k": null, "ratingKey": null, "ratingKey4k": null, "serviceUrl": "http://192.168.0.1:7878/movie/1156593" }, "requestedBy": { "permissions": 2, "id": 1, "email": "me@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 43972689, "avatar": "https://plex.tv/users/aaaaaaa/avatar?c=aaaaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "modifiedBy": { "permissions": 2, "id": 1, "email": "me@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 43972689, "avatar": "https://plex.tv/users/aaaaaaa/avatar?c=aaaaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasons": [], "seasonCount": 0 } ], "issues": [], "seasons": [], "serviceUrl": "http://192.168.0.1:7878/movie/1156593" }, "watchProviders": [ { "iso_3166_1": "AD", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AD", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AE", "buy": [], "flatrate": [ { "displayPriority": 9, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AG", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AL", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AL", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AR", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AR", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AT", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AT", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" }, { "displayPriority": 65, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "AU", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AU", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BA", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BB", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BB", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BE", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BG", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BH", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BH", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BM", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BO", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BO", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BR", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BR", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BS", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BS", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CA", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CA", "buy": [], "flatrate": [ { "displayPriority": 3, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" }, { "displayPriority": 152, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "CH", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CH", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CI", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CI", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CL", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CL", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CO", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CO", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CR", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CR", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CZ", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CZ", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "DE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=DE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" }, { "displayPriority": 157, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "DK", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=DK", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "DO", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=DO", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "DZ", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=DZ", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "EC", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=EC", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "EE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=EE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "EG", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=EG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "ES", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=ES", "buy": [], "flatrate": [ { "displayPriority": 3, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "FI", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=FI", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "FR", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=FR", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GB", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GB", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" }, { "displayPriority": 136, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "GF", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GF", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GG", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GH", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GH", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GI", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GI", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GR", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GR", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GT", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GT", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "HK", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=HK", "buy": [], "flatrate": [ { "displayPriority": 5, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "HN", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=HN", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "HR", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=HR", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "HU", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=HU", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "ID", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=ID", "buy": [], "flatrate": [ { "displayPriority": 7, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IL", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IL", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IN", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IN", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IQ", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IQ", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IS", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IS", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IT", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IT", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" }, { "displayPriority": 15, "logoPath": "/6FDKQWcR6JfmRKLqezSsvGgRuUY.jpg", "id": 109, "name": "Timvision" } ] }, { "iso_3166_1": "JM", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=JM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "JO", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=JO", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "JP", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=JP", "buy": [], "flatrate": [ { "displayPriority": 4, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "KE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=KE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "KR", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=KR", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "KW", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=KW", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LB", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LB", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LC", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LC", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LI", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LI", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LT", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LT", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LV", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LV", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LY", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LY", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MA", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MC", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MC", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MD", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MD", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MK", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MK", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MT", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MT", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MX", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MX", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MY", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MY", "buy": [], "flatrate": [ { "displayPriority": 9, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MZ", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MZ", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NG", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NL", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NL", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NO", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NO", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NZ", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NZ", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "OM", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=OM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PA", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PF", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PF", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PH", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PH", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PK", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PK", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PL", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PL", "buy": [], "flatrate": [ { "displayPriority": 5, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PS", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PS", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PT", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PT", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PY", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PY", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "QA", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=QA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "RO", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=RO", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "RS", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=RS", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SA", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SA", "buy": [], "flatrate": [ { "displayPriority": 23, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SE", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SG", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SI", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SI", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SK", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SK", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SM", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SV", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SV", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TC", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TC", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TH", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TH", "buy": [], "flatrate": [ { "displayPriority": 3, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TN", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TN", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TR", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TR", "buy": [], "flatrate": [ { "displayPriority": 6, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TT", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TT", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TW", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TW", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "UG", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=UG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "US", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=US", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" }, { "displayPriority": 258, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "UY", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=UY", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "VA", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=VA", "buy": [], "flatrate": [ { "displayPriority": 0, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "VE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=VE", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "YE", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=YE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "ZA", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=ZA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "ZM", "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=ZM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] } ], "keywords": [ { "id": 818, "name": "based on novel or book" }, { "id": 9663, "name": "sequel" } ] } joostlek-python-overseerr-19f99d8/tests/fixtures/no_access.json000066400000000000000000000001311475735226000251250ustar00rootroot00000000000000{ "status": 403, "error": "You do not have permission to access this endpoint" } joostlek-python-overseerr-19f99d8/tests/fixtures/request.json000066400000000000000000001002361475735226000246670ustar00rootroot00000000000000{ "pageInfo": { "pages": 2, "pageSize": 10, "results": 14, "page": 1 }, "results": [ { "id": 16, "status": 2, "createdAt": "2024-12-29T10:04:16.000Z", "updatedAt": "2024-12-29T10:04:16.000Z", "type": "movie", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/movies", "languageProfileId": null, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 537, "mediaType": "movie", "tmdbId": 1156593, "tvdbId": null, "imdbId": null, "status": 3, "status4k": 1, "createdAt": "2024-12-29T10:04:16.000Z", "updatedAt": "2024-12-29T10:04:17.000Z", "lastSeasonChange": "2024-12-29T10:04:16.000Z", "mediaAddedAt": null, "serviceId": 0, "serviceId4k": null, "externalServiceId": 423, "externalServiceId4k": null, "externalServiceSlug": "1156593", "externalServiceSlug4k": null, "ratingKey": null, "ratingKey4k": null, "serviceUrl": "http://192.168.0.1:7878/movie/1156593" }, "seasons": [], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasonCount": 0 }, { "id": 15, "status": 2, "createdAt": "2024-12-28T14:19:34.000Z", "updatedAt": "2024-12-28T14:19:34.000Z", "type": "movie", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/movies", "languageProfileId": null, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 536, "mediaType": "movie", "tmdbId": 1010581, "tvdbId": null, "imdbId": null, "status": 5, "status4k": 1, "createdAt": "2024-12-28T14:19:34.000Z", "updatedAt": "2024-12-28T14:30:00.000Z", "lastSeasonChange": "2024-12-28T14:19:34.000Z", "mediaAddedAt": "2024-12-28T14:28:00.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 422, "externalServiceId4k": null, "externalServiceSlug": "1010581", "externalServiceSlug4k": null, "ratingKey": "10196", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10196", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10196&server=aaaa", "serviceUrl": "http://192.168.0.1:7878/movie/1010581" }, "seasons": [], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasonCount": 0 }, { "id": 14, "status": 2, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:37:30.000Z", "type": "tv", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/tv", "languageProfileId": 1, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 535, "mediaType": "tv", "tmdbId": 249522, "tvdbId": 447806, "imdbId": null, "status": 4, "status4k": 1, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:45:00.000Z", "lastSeasonChange": "2024-12-26T14:37:30.000Z", "mediaAddedAt": "2024-12-26T14:39:56.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 144, "externalServiceId4k": null, "externalServiceSlug": "beast-games", "externalServiceSlug4k": null, "ratingKey": "10189", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10189", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10189&server=aaaa", "serviceUrl": "http://192.168.0.2:8989/series/beast-games" }, "seasons": [ { "id": 4, "seasonNumber": 1, "status": 2, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:37:30.000Z" } ], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasonCount": 1 }, { "id": 13, "status": 2, "createdAt": "2024-12-24T21:13:40.000Z", "updatedAt": "2024-12-24T21:13:40.000Z", "type": "movie", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/movies", "languageProfileId": null, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 534, "mediaType": "movie", "tmdbId": 1290287, "tvdbId": null, "imdbId": null, "status": 5, "status4k": 1, "createdAt": "2024-12-24T21:13:40.000Z", "updatedAt": "2024-12-24T21:20:00.000Z", "lastSeasonChange": "2024-12-24T21:13:40.000Z", "mediaAddedAt": "2024-12-24T21:15:39.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 421, "externalServiceId4k": null, "externalServiceSlug": "1290287", "externalServiceSlug4k": null, "ratingKey": "10177", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10177", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10177&server=aaaa", "serviceUrl": "http://192.168.0.1:7878/movie/1290287" }, "seasons": [], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasonCount": 0 }, { "id": 12, "status": 2, "createdAt": "2024-12-17T12:11:17.000Z", "updatedAt": "2024-12-17T12:11:17.000Z", "type": "movie", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/movies", "languageProfileId": null, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 533, "mediaType": "movie", "tmdbId": 10428, "tvdbId": null, "imdbId": null, "status": 5, "status4k": 1, "createdAt": "2024-12-17T12:11:17.000Z", "updatedAt": "2024-12-17T12:25:00.000Z", "lastSeasonChange": "2024-12-17T12:11:17.000Z", "mediaAddedAt": "2024-12-17T12:24:53.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 420, "externalServiceId4k": null, "externalServiceSlug": "10428", "externalServiceSlug4k": null, "ratingKey": "10165", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10165", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10165&server=aaaa", "serviceUrl": "http://192.168.0.1:7878/movie/10428" }, "seasons": [], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasonCount": 0 }, { "id": 11, "status": 2, "createdAt": "2024-12-16T23:59:55.000Z", "updatedAt": "2024-12-16T23:59:55.000Z", "type": "movie", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/movies", "languageProfileId": null, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 532, "mediaType": "movie", "tmdbId": 562, "tvdbId": null, "imdbId": null, "status": 5, "status4k": 1, "createdAt": "2024-12-16T23:59:55.000Z", "updatedAt": "2024-12-17T00:05:00.000Z", "lastSeasonChange": "2024-12-16T23:59:55.000Z", "mediaAddedAt": "2024-12-17T00:01:58.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 419, "externalServiceId4k": null, "externalServiceSlug": "562", "externalServiceSlug4k": null, "ratingKey": "10159", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10159", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10159&server=aaaa", "serviceUrl": "http://192.168.0.1:7878/movie/562" }, "seasons": [], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasonCount": 0 }, { "id": 10, "status": 2, "createdAt": "2024-12-16T22:58:17.000Z", "updatedAt": "2024-12-16T22:58:17.000Z", "type": "movie", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/movies", "languageProfileId": null, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 531, "mediaType": "movie", "tmdbId": 845781, "tvdbId": null, "imdbId": null, "status": 5, "status4k": 1, "createdAt": "2024-12-16T22:58:17.000Z", "updatedAt": "2024-12-16T23:05:00.000Z", "lastSeasonChange": "2024-12-16T22:58:17.000Z", "mediaAddedAt": "2024-12-16T23:02:45.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 418, "externalServiceId4k": null, "externalServiceSlug": "845781", "externalServiceSlug4k": null, "ratingKey": "10153", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10153", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10153&server=aaaa", "serviceUrl": "http://192.168.0.1:7878/movie/845781" }, "seasons": [], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasonCount": 0 }, { "id": 9, "status": 2, "createdAt": "2024-12-16T22:38:29.000Z", "updatedAt": "2024-12-16T22:39:53.000Z", "type": "tv", "is4k": false, "serverId": null, "profileId": null, "rootFolder": null, "languageProfileId": null, "tags": null, "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 439, "mediaType": "tv", "tmdbId": 94605, "tvdbId": 371028, "imdbId": null, "status": 4, "status4k": 1, "createdAt": "2024-12-16T21:15:14.000Z", "updatedAt": "2024-12-16T22:45:00.000Z", "lastSeasonChange": "2024-12-16T22:45:00.132Z", "mediaAddedAt": "2024-12-16T08:25:04.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 3, "externalServiceId4k": null, "externalServiceSlug": "arcane", "externalServiceSlug4k": null, "ratingKey": "2541", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F2541", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F2541&server=aaaa", "serviceUrl": "http://192.168.0.2:8989/series/arcane" }, "seasons": [ { "id": 3, "seasonNumber": 2, "status": 2, "createdAt": "2024-12-16T22:38:29.000Z", "updatedAt": "2024-12-16T22:39:53.000Z" } ], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 32, "id": 3, "email": "other@email.com", "plexUsername": "else", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 123123, "avatar": "https://plex.tv/users/aaaaaaaaa/avatar?c=aaaaaaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T22:31:08.000Z", "updatedAt": "2024-12-16T22:31:08.000Z", "requestCount": 2, "displayName": "else" }, "seasonCount": 1 }, { "id": 8, "status": 2, "createdAt": "2024-12-16T22:37:35.000Z", "updatedAt": "2024-12-16T22:41:01.000Z", "type": "tv", "is4k": false, "serverId": null, "profileId": null, "rootFolder": null, "languageProfileId": null, "tags": null, "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 530, "mediaType": "tv", "tmdbId": 69629, "tvdbId": 328552, "imdbId": null, "status": 5, "status4k": 1, "createdAt": "2024-12-16T22:37:35.000Z", "updatedAt": "2024-12-16T22:55:00.000Z", "lastSeasonChange": "2024-12-16T22:55:00.130Z", "mediaAddedAt": "2024-12-16T22:48:28.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 143, "externalServiceId4k": null, "externalServiceSlug": "the-gifted", "externalServiceSlug4k": null, "ratingKey": "10116", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10116", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10116&server=aaaa", "serviceUrl": "http://192.168.0.2:8989/series/the-gifted" }, "seasons": [ { "id": 1, "seasonNumber": 1, "status": 2, "createdAt": "2024-12-16T22:37:35.000Z", "updatedAt": "2024-12-16T22:41:01.000Z" }, { "id": 2, "seasonNumber": 2, "status": 2, "createdAt": "2024-12-16T22:37:35.000Z", "updatedAt": "2024-12-16T22:41:01.000Z" } ], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 32, "id": 3, "email": "other@email.com", "plexUsername": "else", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 123123, "avatar": "https://plex.tv/users/aaaaaaaaa/avatar?c=aaaaaaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T22:31:08.000Z", "updatedAt": "2024-12-16T22:31:08.000Z", "requestCount": 2, "displayName": "else" }, "seasonCount": 2 }, { "id": 7, "status": 2, "createdAt": "2024-12-16T22:07:45.000Z", "updatedAt": "2024-12-16T22:08:05.000Z", "type": "movie", "is4k": false, "serverId": null, "profileId": null, "rootFolder": null, "languageProfileId": null, "tags": null, "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 529, "mediaType": "movie", "tmdbId": 884605, "tvdbId": null, "imdbId": null, "status": 5, "status4k": 1, "createdAt": "2024-12-16T22:04:07.000Z", "updatedAt": "2024-12-16T22:20:00.000Z", "lastSeasonChange": "2024-12-16T22:04:07.000Z", "mediaAddedAt": "2024-12-16T22:18:16.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 417, "externalServiceId4k": null, "externalServiceSlug": "884605", "externalServiceSlug4k": null, "ratingKey": "10100", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10100", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10100&server=aaaa", "serviceUrl": "http://192.168.0.1:7878/movie/884605" }, "seasons": [], "modifiedBy": { "permissions": 2, "id": 1, "email": "one@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 321321321, "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "requestedBy": { "permissions": 32, "id": 2, "email": "yes@gmail.com", "plexUsername": "yestest", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 234234234234, "avatar": "https://plex.tv/users/bvbbbbb/avatar?c=bbbbbb", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T22:00:12.000Z", "updatedAt": "2024-12-16T22:00:12.000Z", "requestCount": 1, "displayName": "bbbbb" }, "seasonCount": 0 } ] } joostlek-python-overseerr-19f99d8/tests/fixtures/request_count.json000066400000000000000000000002231475735226000260720ustar00rootroot00000000000000{ "total": 11, "movie": 9, "tv": 2, "pending": 0, "approved": 11, "declined": 0, "processing": 3, "available": 8 } joostlek-python-overseerr-19f99d8/tests/fixtures/search_1.json000066400000000000000000000543641475735226000246760ustar00rootroot00000000000000{ "page": 1, "totalPages": 3, "totalResults": 44, "results": [ { "id": 605521, "mediaType": "movie", "adult": false, "genreIds": [ 99 ], "originalLanguage": "en", "originalTitle": "Frosty", "overview": "โ€œI need to run because I love having that connection to nature,โ€ says ultra-runner Anna Frost, whoโ€™s been racking up competitive wins for more than a decade. After being consumed with running for years, Frost takes on a new challenge. This film follows the endurance athlete from podium to motherhood.", "popularity": 0.001, "releaseDate": "", "title": "Frosty", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": "/k9TZgaLoTfdN6nrivajxNQN92jL.jpg", "posterPath": null }, { "id": 1290287, "mediaType": "movie", "adult": false, "genreIds": [ 10749, 35 ], "originalLanguage": "en", "originalTitle": "Hot Frosty", "overview": "When a young widow's magic scarf brings a dashing snowman to life, can he help her rediscover romance, laughter and holiday cheer before he melts away?", "popularity": 87.462, "releaseDate": "2024-11-12", "title": "Hot Frosty", "video": false, "voteAverage": 6, "voteCount": 215, "backdropPath": "/6neVLKBU4DaWAwpWFhfCpV6yuqN.jpg", "posterPath": "/waW6R5WJQSxq65gwBkvnKlseU6n.jpg", "mediaInfo": { "downloadStatus": [], "downloadStatus4k": [], "id": 534, "mediaType": "movie", "tmdbId": 1290287, "tvdbId": null, "imdbId": null, "status": 5, "status4k": 1, "createdAt": "2024-12-24T21:13:40.000Z", "updatedAt": "2024-12-24T21:20:00.000Z", "lastSeasonChange": "2024-12-24T21:13:40.000Z", "mediaAddedAt": "2024-12-24T21:15:39.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 421, "externalServiceId4k": null, "externalServiceSlug": "1290287", "externalServiceSlug4k": null, "ratingKey": "10177", "ratingKey4k": null, "seasons": [], "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10177", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10177&server=aaaa", "serviceUrl": "http://192.168.0.1:7878/movie/1290287" } }, { "id": 1828978, "name": "Wayne 'Frosty Freeze' Frost", "popularity": 0.611, "adult": false, "mediaType": "person", "profilePath": "/tcGCWSAAruIf4O7oQXXpZyD5yxK.jpg", "knownFor": [ { "id": 535, "mediaType": "movie", "adult": false, "genreIds": [ 18, 10749 ], "originalLanguage": "en", "originalTitle": "Flashdance", "overview": "Alex Owens, a young woman juggling between two odd jobs, aspires to become a successful ballet dancer. Nick, who is her boss and lover, supports and encourages her to fulfil her dream.", "popularity": 22.254, "releaseDate": "1983-04-14", "title": "Flashdance", "video": false, "voteAverage": 6.496, "voteCount": 1466, "backdropPath": "/4taRyneJlNDhuEkfX5QU6CG6Vbh.jpg", "posterPath": "/ziiy6ORt8BlxWFXskBChBMInvDA.jpg" }, { "id": 67361, "mediaType": "movie", "adult": false, "genreIds": [ 99 ], "originalLanguage": "en", "originalTitle": "The Freshest Kids", "overview": "From the Boogie Down Bronx and beyond, the history of the b-boy.", "popularity": 0.505, "releaseDate": "2002-10-01", "title": "The Freshest Kids", "video": false, "voteAverage": 8.1, "voteCount": 5, "backdropPath": null, "posterPath": "/z24m7Yr1GBUH84PGHf0fm1CapCr.jpg" } ] }, { "id": 1414554, "name": "Craig Frosty Silva", "popularity": 0.43, "adult": false, "mediaType": "person", "profilePath": null, "knownFor": [ { "id": 18785, "mediaType": "movie", "adult": false, "genreIds": [ 35 ], "originalLanguage": "en", "originalTitle": "The Hangover", "overview": "When three friends finally come to after a raucous night of bachelor-party revelry, they find a baby in the closet and a tiger in the bathroom. But they can't seem to locate their best friend, Doug โ€“ who's supposed to be tying the knot. Launching a frantic search for Doug, the trio perseveres through a nasty hangover to try to make it to the church on time.", "popularity": 90.836, "releaseDate": "2009-06-02", "title": "The Hangover", "video": false, "voteAverage": 7.322, "voteCount": 16877, "backdropPath": "/ubiu5Y7nP187ZFWUzjPj7Hgw6Go.jpg", "posterPath": "/wTt2BoyAGhr0M00eR1ewVZyQoUq.jpg" }, { "id": 119450, "mediaType": "movie", "adult": false, "genreIds": [ 878, 28, 18, 53 ], "originalLanguage": "en", "originalTitle": "Dawn of the Planet of the Apes", "overview": "A group of scientists in San Francisco struggle to stay alive in the aftermath of a plague that is wiping out humanity, while Caesar tries to maintain dominance over his community of intelligent apes.", "popularity": 61.855, "releaseDate": "2014-07-08", "title": "Dawn of the Planet of the Apes", "video": false, "voteAverage": 7.329, "voteCount": 11427, "backdropPath": "/zlU8BIkgY7E6SMfD3USTWC6bchL.jpg", "posterPath": "/kScdQEwS9jPEdnO23XjGAtaoRcT.jpg" }, { "id": 58574, "mediaType": "movie", "adult": false, "genreIds": [ 12, 28, 80, 9648 ], "originalLanguage": "en", "originalTitle": "Sherlock Holmes: A Game of Shadows", "overview": "There is a new criminal mastermind at large (Professor Moriarty) and not only is he Holmesโ€™ intellectual equal, but his capacity for evil and lack of conscience may give him an advantage over the detective.", "popularity": 34.481, "releaseDate": "2011-11-22", "title": "Sherlock Holmes: A Game of Shadows", "video": false, "voteAverage": 7.14, "voteCount": 10294, "backdropPath": "/nVMalJRUsOeGP5xPx9ULmirZ4cJ.jpg", "posterPath": "/y1MYZkwhZK6L0Jy4YMuPktzDOfn.jpg" } ] }, { "id": 28042, "mediaType": "movie", "adult": false, "genreIds": [ 16, 10751, 10770 ], "originalLanguage": "en", "originalTitle": "Frosty Returns", "overview": "Mr. Twitchell, a greedy old businessman, has invented Summer Wheeze: a spray that instantly removes snow and slush! Now Holly has to keep Frosty from melting, and convince everybody that snow's actually a good thing.", "popularity": 7.677, "releaseDate": "1992-12-01", "title": "Frosty Returns", "video": false, "voteAverage": 5.6, "voteCount": 100, "backdropPath": "/tQBVmuHhIycRg1BJaEZrBp9M9gM.jpg", "posterPath": "/t22OhZnczuoT68k5KNPCM0C9zUT.jpg" }, { "id": 1300131, "name": "Frosty Royce", "popularity": 0.355, "adult": false, "mediaType": "person", "profilePath": null, "knownFor": [ { "id": 967, "mediaType": "movie", "adult": false, "genreIds": [ 36, 10752, 18, 12 ], "originalLanguage": "en", "originalTitle": "Spartacus", "overview": "The rebellious Thracian Spartacus, born and raised a slave, is sold to Gladiator trainer Batiatus. After weeks of being trained to kill for the arena, Spartacus turns on his owners and leads the other slaves in rebellion. As the rebels move from town to town, their numbers swell as escaped slaves join their ranks. Under the leadership of Spartacus, they make their way to southern Italy, where they will cross the sea and return to their homes.", "popularity": 37.881, "releaseDate": "1960-10-13", "title": "Spartacus", "video": false, "voteAverage": 7.546, "voteCount": 2139, "backdropPath": "/aheSIG4h3JNxWeDvdb1NxKzgjaM.jpg", "posterPath": "/xLPpQlFWE12cbqNJQ5Vf4eJU8ij.jpg" }, { "id": 18264, "mediaType": "movie", "adult": false, "genreIds": [ 18, 37 ], "originalLanguage": "en", "originalTitle": "The Man from Laramie", "overview": "Will Lockhart arrives in Coronado, an isolated town in New Mexico, in search of someone who sells rifles to the Apache tribe, finding himself unwillingly drawn into the convoluted life of a local ranching family whose members seem to have a lot to hide.", "popularity": 13.317, "releaseDate": "1955-08-19", "title": "The Man from Laramie", "video": false, "voteAverage": 7.2, "voteCount": 230, "backdropPath": "/f2AknGbvyhFdeZUDcbq3ZqguQZT.jpg", "posterPath": "/aKMZoZpN0FobSIDAlj5Ixv0kDeT.jpg" }, { "id": 28484, "mediaType": "movie", "adult": false, "genreIds": [ 37, 80, 10749 ], "originalLanguage": "en", "originalTitle": "Colorado Territory", "overview": "After escaping from jail, outlaw Wes McQueen is convinced by his old partner in crime to do one last heist.", "popularity": 5.99, "releaseDate": "1949-06-11", "title": "Colorado Territory", "video": false, "voteAverage": 6.8, "voteCount": 62, "backdropPath": "/geizp94zUS43Q0h7kO0ZlUQI3Mn.jpg", "posterPath": "/sliBPULxtTEit14lFJYLSeHO679.jpg" } ] }, { "id": 26539, "mediaType": "movie", "adult": false, "genreIds": [ 16, 10751, 10770 ], "originalLanguage": "en", "originalTitle": "Frosty's Winter Wonderland", "overview": "Years have passed since Frosty left for the North Pole, but his promise is kept when he hears news of the first snowfall of the season, and decides to return.", "popularity": 10.095, "releaseDate": "1976-12-02", "title": "Frosty's Winter Wonderland", "video": false, "voteAverage": 6.7, "voteCount": 75, "backdropPath": "/eFL6glfGf0GPGRQ712f1rPNniDV.jpg", "posterPath": "/o915rkZ0wwQjrk0UAEQkEkmt1E1.jpg" }, { "id": 13675, "mediaType": "movie", "adult": false, "genreIds": [ 10751, 16, 10770 ], "originalLanguage": "en", "originalTitle": "Frosty the Snowman", "overview": "A discarded silk top-hat becomes the focus of a struggle between a washed-up stage magician and a group of schoolchildren, after it magically brings a snowman to life. Realizing that newly-living Frosty will melt in spring unless he takes refuge in a colder climate, Frosty and Karen, a young girl who he befriends, stow away on a freight train headed for the north pole. Little do they know that the magician is following them, and he wants his hat back!", "popularity": 20.297, "releaseDate": "1969-12-07", "title": "Frosty the Snowman", "video": false, "voteAverage": 6.945, "voteCount": 343, "backdropPath": "/69HEmEIgFCo6Te8ShHcFB1ERPeF.jpg", "posterPath": "/gw7ie4W3iW8nefnZ4kuw8dgYNM2.jpg" }, { "id": 40246, "mediaType": "movie", "adult": false, "genreIds": [ 16, 14, 10751, 10770 ], "originalLanguage": "en", "originalTitle": "Rudolph and Frosty's Christmas in July", "overview": "Winterbolt is trying to make the North Pole his evil wonderland, and it is up to Frosty the Snowman, Rudolph the Red-Nosed Reindeer and others to stop him.", "popularity": 6.946, "releaseDate": "1979-07-01", "title": "Rudolph and Frosty's Christmas in July", "video": false, "voteAverage": 6.5, "voteCount": 69, "backdropPath": "/9bBUH5OfA19jri8YOpXTty1dB0v.jpg", "posterPath": "/3BfpQ4trGB6aEIIirL7SikStHRU.jpg" }, { "id": 1393660, "mediaType": "movie", "adult": false, "genreIds": [], "originalLanguage": "en", "originalTitle": "Hot Frosty 2024 - Afdah", "overview": "Hot Frosty 2024 is a pleasant surprise among holiday romances. The film goes beyond what you would expect from a film in this genre, turning a potentially silly premise into a complex look at grief, love, and magical second chances. Lacey Chabert and Dustin Milligan's captivating chemistry, clever script, and true emotional depth turn a potentially forgotten idea into a memorable one. The film skillfully combines funny and touching moments to create a unique story that shows how complicated relationships can be. Unlike other holiday movies, it combines magic with a moving true story.", "popularity": 0.537, "releaseDate": "", "title": "Hot Frosty 2024 - Comedy, Romance, Fantasy", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": null }, { "id": 5070012, "name": "Frosty/Misty", "popularity": 0.001, "adult": false, "mediaType": "person", "profilePath": null, "knownFor": [ { "id": 1390475, "mediaType": "movie", "adult": false, "genreIds": [ 99 ], "originalLanguage": "en", "originalTitle": "All the Little Things", "overview": "An accomplished molecular biologist moves out of the lab in a quest to make an encyclopedia documenting all the fruit fly species in North America.", "popularity": 2.353, "releaseDate": "2024-12-06", "title": "All the Little Things", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": "/s6oSKU12XO4u83JhEqrcOqaUFzw.jpg" } ] }, { "id": 1357698, "mediaType": "movie", "adult": false, "genreIds": [], "originalLanguage": "en", "originalTitle": "The Rudolph, Frosty & Friends Sing Along", "overview": "Ten Musical Yuletide treasures featuring the voices of Fred Astaire, Jimmy Durante and Burl Ives. Create A tuneful new family tradition with this festive, fun-to-follow sing along!", "popularity": 1.55, "releaseDate": "2024-11-08", "title": "The Rudolph, Frosty & Friends Sing Along", "video": true, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": "/6TPx3OOgSlhKIwtVEiaedJ7UmBa.jpg" }, { "id": 953871, "mediaType": "movie", "adult": false, "genreIds": [ 99 ], "originalLanguage": "ru", "originalTitle": "ะ ะฝะฐะด ะขัƒะฝะณัƒัะบะพะน ะผะพั€ะพะทะฝั‹ะน ัั‚ะตะปะตั‚ัั ั‚ัƒะผะฐะฝ...", "overview": "On the shore of the Podkamennaya Tunguska, in harsh northern conditions, the Kto people live, the keeper of a special way of life, traditions and rituals.", "popularity": 0.005, "releaseDate": "2015-03-09", "title": "And Over Tunguska Frosty Fog Spreads", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": null }, { "id": 845524, "mediaType": "movie", "adult": false, "genreIds": [], "originalLanguage": "lv", "originalTitle": "Sarmฤซtes", "overview": "In the mid โ€“ 1960โ€™s, Latvia was a part of the Soviet Union. People lived identical lives, listened to the same radio stations. Children wore the same boots and ate the same porridge every morning. Only their dreams and desires for something different set them apart from each other. For little Dace this is a moment, where stand still of childhoodโ€™s happiness turns into time for growing up. \"A fulfilled expression of Beauty in the passage of Life.\" (Dmitry Rancev, \"The Independent\", Latvia) \"Competent and Spartanโ€ฆ\" (Jan Ingman, catalogue of \"Stockholm IFF\")", "popularity": 0.426, "releaseDate": "2001-10-10", "title": "Frosty Flowers", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": null }, { "id": 433229, "mediaType": "movie", "adult": false, "genreIds": [], "originalLanguage": "en", "originalTitle": "Jadeh-haye Sard", "overview": "Moosavi, a country schoolteacher, must undertake an arduous journey to fetch medicine for his village's sick. Accompanied by his student and a villager, he travels through a blizzard and is pursued by a pack of hungry wolves.", "popularity": 0.001, "releaseDate": "1985-01-01", "title": "Frosty Roads", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": "/wm60uU0s6UvyaE7d2zRjWvJXh5z.jpg" }, { "id": 1002270, "mediaType": "movie", "adult": false, "genreIds": [ 28 ], "originalLanguage": "zh", "originalTitle": "ๆœˆ่ฝ็ƒๅ•ผ้œœๆปฟๅคฉ", "overview": "Loosely based on Maxim Gorky's The Lower Depths", "popularity": 0.746, "releaseDate": "1957-07-04", "title": "The Frosty Night", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": "/d3daC6WjqcPIXYDIWmGCQXe6M94.jpg" }, { "id": 441986, "mediaType": "movie", "adult": false, "genreIds": [ 16 ], "originalLanguage": "ru", "originalTitle": "ะœะพั€ะพะทะฝั‹ะน ัƒะทะพั€", "overview": "How Morozik decorated a rainy day with sparkling snow.", "popularity": 0.001, "releaseDate": "1974-02-16", "title": "Frosty Pattern", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": "/xBVamm4xxgKqfQHtVoLTpd3tjpz.jpg" } ] } joostlek-python-overseerr-19f99d8/tests/fixtures/search_2.json000066400000000000000000000576201475735226000246750ustar00rootroot00000000000000{ "page": 1, "totalPages": 5, "totalResults": 91, "results": [ { "id": 47640, "firstAirDate": "2014-07-13", "genreIds": [ 10765, 18, 9648 ], "mediaType": "tv", "name": "The Strain", "originCountry": [ "US" ], "originalLanguage": "en", "originalName": "The Strain", "overview": "A high concept thriller that tells the story of Dr. Ephraim Goodweather, the head of the Center for Disease Control Canary Team in New York City. He and his team are called upon to investigate a mysterious viral outbreak with hallmarks of an ancient and evil strain of vampirism. As the strain spreads, Eph, his team, and an assembly of everyday New Yorkers, wage war for the fate of humanity itself.", "popularity": 284.215, "voteAverage": 7.478, "voteCount": 1819, "backdropPath": "/4YnAZ1KO9goeS4c06VO7HXiO3oO.jpg", "posterPath": "/2BWErT9QcADpf2G4BZ769eSnFTP.jpg", "mediaInfo": { "downloadStatus": [], "downloadStatus4k": [], "id": 503, "mediaType": "tv", "tmdbId": 47640, "tvdbId": 276564, "imdbId": null, "status": 4, "status4k": 1, "createdAt": "2024-12-16T21:15:21.000Z", "updatedAt": "2024-12-16T21:15:21.000Z", "lastSeasonChange": "2024-12-16T21:15:21.000Z", "mediaAddedAt": "2024-12-16T08:35:24.000Z", "serviceId": null, "serviceId4k": null, "externalServiceId": null, "externalServiceId4k": null, "externalServiceSlug": null, "externalServiceSlug4k": null, "ratingKey": "9520", "ratingKey4k": null, "seasons": [ { "id": 420, "seasonNumber": 0, "status": 1, "status4k": 1, "createdAt": "2024-12-16T21:15:22.000Z", "updatedAt": "2024-12-16T21:15:22.000Z" }, { "id": 421, "seasonNumber": 1, "status": 5, "status4k": 1, "createdAt": "2024-12-16T21:15:22.000Z", "updatedAt": "2024-12-16T21:15:22.000Z" }, { "id": 422, "seasonNumber": 2, "status": 5, "status4k": 1, "createdAt": "2024-12-16T21:15:22.000Z", "updatedAt": "2024-12-16T21:15:22.000Z" }, { "id": 423, "seasonNumber": 3, "status": 5, "status4k": 1, "createdAt": "2024-12-16T21:15:22.000Z", "updatedAt": "2024-12-16T21:15:22.000Z" }, { "id": 425, "seasonNumber": 4, "status": 5, "status4k": 1, "createdAt": "2024-12-16T21:15:22.000Z", "updatedAt": "2024-12-16T21:15:22.000Z" } ], "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F9520", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F9520&server=aaaa" } }, { "id": 19997, "firstAirDate": "2008-05-26", "genreIds": [ 10765, 18, 10759 ], "mediaType": "tv", "name": "The Andromeda Strain", "originCountry": [ "US" ], "originalLanguage": "en", "originalName": "The Andromeda Strain", "overview": "A U.S. satellite crash-lands near a small town in Utah, unleashing a deadly plague that kills virtually everyone except two survivors, who may provide clues to immunizing the population. As the military attempts to quarantine the area, a team of highly specialized scientists is assembled to find a cure and stop the spread of the alien pathogen, code-named Andromeda.", "popularity": 38.794, "voteAverage": 6.211, "voteCount": 213, "backdropPath": "/9vypNFCSB7GWK6wfAbVml9pMVi9.jpg", "posterPath": "/6sLbP198qk1czySbc6yE0RnHYY.jpg" }, { "id": 272184, "firstAirDate": "2014-07-13", "genreIds": [], "mediaType": "tv", "name": "The Strain", "originCountry": [ "ES" ], "originalLanguage": "es", "originalName": "The Strain", "overview": "", "popularity": 0.006, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": null }, { "id": 10514, "mediaType": "movie", "adult": false, "genreIds": [ 878, 53 ], "originalLanguage": "en", "originalTitle": "The Andromeda Strain", "overview": "When virtually all of the residents of Piedmont, New Mexico, are found dead after the return to Earth of a space satellite, the head of the US Air Force's Project Scoop declares an emergency. A group of eminent scientists led by Dr. Jeremy Stone scramble to a secure laboratory and try to first isolate the life form while determining why two people from Piedmont - an old alcoholic and a six-month-old baby - survived. The scientists methodically study the alien life form unaware that it has already mutated and presents a far greater danger in the lab, which is equipped with a nuclear self-destruct device designed to prevent the escape of dangerous biological agents.", "popularity": 16.612, "releaseDate": "1971-03-12", "title": "The Andromeda Strain", "video": false, "voteAverage": 7.048, "voteCount": 693, "backdropPath": "/8yE0aOQoZSSl2CuuPvjxdHuQl4P.jpg", "posterPath": "/i3rTxQRJaBJoBcY8VMUOPT2E8Hp.jpg" }, { "id": 962613, "mediaType": "movie", "adult": false, "genreIds": [ 99, 878, 18 ], "originalLanguage": "en", "originalTitle": "Terra Incognita: Making the Andromeda Strain", "overview": "A behind the scenes look at the background and making of the 2008 TV mini-series", "popularity": 2.258, "releaseDate": "2008-07-21", "title": "Terra Incognita: Making the Andromeda Strain", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": "/mmmMytFB1S0RsUhkRHx6Bb4RwiD.jpg" }, { "id": 73101, "mediaType": "movie", "adult": false, "genreIds": [ 27, 53 ], "originalLanguage": "fr", "originalTitle": "The Killing Strain", "overview": "A man-made virus, 'The Killing Strain'-- an out-of-control swine flu-- turns infected humans into raging monsters. As it rapidly spreads, a group of uninfected survivors must make life-or-death decisions before the U.S. military firebombs the area in a desperate attempt contain the contagion. The survivors are unaware that the virus has already reached their group-- by infecting one of them-- and now the merciless metamorphic process has begun.", "popularity": 1.021, "releaseDate": "2010-01-01", "title": "The Killing Strain", "video": false, "voteAverage": 3.2, "voteCount": 5, "backdropPath": null, "posterPath": "/uvr3ukOPUZSLcg410I2Exi7bk0c.jpg" }, { "id": 1074431, "mediaType": "movie", "adult": false, "genreIds": [ 99 ], "originalLanguage": "en", "originalTitle": "The Andromeda Strain: Making the Film", "overview": "The making of \"The Andromeda Strain\".", "popularity": 0.979, "releaseDate": "2003-04-01", "title": "The Andromeda Strain: Making the Film", "video": false, "voteAverage": 6, "voteCount": 1, "backdropPath": null, "posterPath": "/cclujsq7P7Ua0hYTQqtPlWDRpCb.jpg" }, { "id": 291952, "mediaType": "movie", "adult": false, "genreIds": [ 18 ], "originalLanguage": "en", "originalTitle": "The Racing Strain", "overview": "Lucille Cameron, the spirited daughter of a Kentucky colonel, discovers that her father is nearly bankrupt as a result of his dealings with New York horseman and stock promoter Jim De Luce....", "popularity": 0.158, "releaseDate": "1918-12-22", "title": "The Racing Strain", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": "/q78eqDKe8iYzEOtMPr3bmt6W4uG.jpg", "posterPath": "/wjzev8BHgnb3xXmOJKia3mneF0R.jpg" }, { "id": 982014, "mediaType": "movie", "adult": false, "genreIds": [ 35, 18 ], "originalLanguage": "en", "originalTitle": "The Wild Strain", "overview": "Although the prominent Hollywood family prides itself on its illustrious family tree, young Winifred Hollywood exhibits a fondness for wild adventures that greatly disturbs her parents. When Winifred becomes engaged to bank official Harold Burton, his equally snobbish parents visit the Hollywood home and are shocked by the young woman's spirited outbursts and mischievous tricks, and the engagement is broken after she decides to perform bareback feats with a traveling circus.", "popularity": 0.179, "releaseDate": "1918-01-14", "title": "The Wild Strain", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": "/uEnJZjaHr4Yjw7wge3kxznbP0MI.jpg" }, { "id": 159423, "mediaType": "movie", "adult": false, "genreIds": [ 18 ], "originalLanguage": "en", "originalTitle": "The Racing Strain", "overview": "A race-car driver whose career is on the skids because of his drinking falls for a rich society girl. That motivates him to clean up his act and resume his career, but it may be too late for that.", "popularity": 1.441, "releaseDate": "1932-12-16", "title": "The Racing Strain", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": "/39yDZKVXnCtQlOz7RoNAf4i1a77.jpg", "posterPath": "/e9WgARGE5sHKewCxS21bFnMP3Ac.jpg" }, { "id": 622790, "mediaType": "movie", "adult": false, "genreIds": [ 37 ], "originalLanguage": "en", "originalTitle": "The Golden Strain", "overview": "Lt. Milt Mulford graduates from West Point and is assigned to a cavalry outpost in the West, near an Apache reservation. One day the Apaches, tired of being cheated by a crooked Indian agent, break the reservation and Mulford is sent after them with a patrol. Unfortunately, he cracks under the pressure of his first firefight, and is thrown out of the army. His fiancรฉ, disgusted, ends their engagement. He sets out to prove that he is not a coward and regain his fiancรฉ's love.", "popularity": 0.564, "releaseDate": "1925-12-27", "title": "The Golden Strain", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": "/9BbBExXJVjwohBJbqHuapHGDNDS.jpg", "posterPath": "/xe0dIiHdWP62vFS5gPJnKtLNQH0.jpg" }, { "id": 1040917, "mediaType": "movie", "adult": false, "genreIds": [ 16 ], "originalLanguage": "sh", "originalTitle": "Plemeniti soj", "overview": "Short animated film.", "popularity": 0.238, "releaseDate": "1971-01-01", "title": "The Noble Strain", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": null }, { "id": 223061, "mediaType": "movie", "adult": false, "genreIds": [ 27 ], "originalLanguage": "en", "originalTitle": "The Missouri Strain", "overview": "A family threatened by a nationwide biological apocalypse flees everyday city life to survive.", "popularity": 0.298, "releaseDate": "2013-11-01", "title": "The Missouri Strain", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": null }, { "id": 243291, "mediaType": "movie", "adult": false, "genreIds": [ 99 ], "originalLanguage": "en", "originalTitle": "The Winning Strain", "overview": "A 1966 short documentary showing athletes in action at the 1966 National Amateur Athletic Union track carnival in New York. The film was nominated for an Oscar for Best Live Action Short Film.", "popularity": 0.347, "releaseDate": "1966-01-01", "title": "The Winning Strain", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": "/9NnuxC7BUb6yaOPCwpuESMiEtBM.jpg" }, { "id": 526388, "mediaType": "movie", "adult": false, "genreIds": [ 18, 10752 ], "originalLanguage": "en", "originalTitle": "The Warrior Strain", "overview": "An Earl's cadet son stops a German baron from planting wireless-controlled signals at Brighton.", "popularity": 0.442, "releaseDate": "1919-03-15", "title": "The Warrior Strain", "video": false, "voteAverage": 0, "voteCount": 0, "backdropPath": "/fcyYZUqiSONBNZBoTTWyr1XXGSE.jpg", "posterPath": "/8o5ESrX3Quncyp2pkqUD3m9JNrC.jpg" }, { "id": 938337, "mediaType": "movie", "adult": false, "genreIds": [ 37, 10749 ], "originalLanguage": "en", "originalTitle": "The Iron Strain", "overview": "The story is set in Alaska, where spoiled and pampered heiress Octavia Van Ness has come for her health. Here she meets 'Chuck' Hemingway, who despite his rough exterior is likewise a child of wealth, and a Yale graduate to boot. When Van Ness violently rejects his romantic overtures, Hemingway turns to an old Indian chum for advice. The Indian suggests rather chauvinistically that the way to win a headstrong girl is to \"tame\" her -- that is, treat 'er rough and make 'er like it.", "popularity": 0.442, "releaseDate": "1915-11-07", "title": "The Iron Strain", "video": false, "voteAverage": 4, "voteCount": 1, "backdropPath": "/oPDapwbJ9bbUipZFolgg76FKVsM.jpg", "posterPath": "/a1APOLxbPfL3sWo2QNjZEMmkKtJ.jpg" }, { "id": 80116, "name": "Julie Strain", "popularity": 14.373, "adult": false, "mediaType": "person", "profilePath": "/2M537eXSUhaxzQ0s7XM33m0AoXe.jpg", "knownFor": [ { "id": 67395, "mediaType": "movie", "adult": false, "genreIds": [ 28, 53 ], "originalLanguage": "en", "originalTitle": "L.E.T.H.A.L. Ladies: Return to Savage Beach", "overview": "A stolen computer disk contains the location of a hidden tresaure trove. It's up to the sexy ladies of LETHAL (Legion to Ensure Total Harmony and Law) to find the treasure before the bad guys do.", "popularity": 34.91, "releaseDate": "1998-01-27", "title": "L.E.T.H.A.L. Ladies: Return to Savage Beach", "video": false, "voteAverage": 6.101, "voteCount": 193, "backdropPath": "/cQpSKsSjoQYnDmqTlYl0gV3qnif.jpg", "posterPath": "/9z3hdYnDdfWGKD55kdDmshDojeP.jpg" }, { "id": 16225, "mediaType": "movie", "adult": false, "genreIds": [ 28, 12, 16, 14, 878 ], "originalLanguage": "en", "originalTitle": "Heavy Metal 2000", "overview": "Upon discovery of a shard of what could be the Loc-Nar, a miner named Tyler becomes possessed with an insatiable hunger for power and a thirst for immortality. On his way to the planet of youth, Tyler wipes out most of a space colony and kidnaps a beautiful young woman. His only mistake is that he doesn't kill her sister, Julie, who then sets out on a mission of rescue and revenge.", "popularity": 12.815, "releaseDate": "2000-04-19", "title": "Heavy Metal 2000", "video": false, "voteAverage": 6, "voteCount": 215, "backdropPath": "/f5C03doOWiauu37bToKXtpgP5bS.jpg", "posterPath": "/mzOgKYOXiuwE5DIfagFs34bOb3J.jpg" }, { "id": 9594, "mediaType": "movie", "adult": false, "genreIds": [ 53, 28, 80, 18 ], "originalLanguage": "en", "originalTitle": "Double Impact", "overview": "Jean Claude Van Damme plays a dual role as Alex and Chad, twins separated at the death of their parents. Chad is raised by a family retainer in Paris, Alex becomes a petty crook in Hong Kong. Seeing a picture of Alex, Chad rejoins him and convinces him that his rival in Hong Kong is also the man who killed their parents. Alex is suspicious of Chad, especially when it comes to his girlfriend.", "popularity": 33.319, "releaseDate": "1991-07-31", "title": "Double Impact", "video": false, "voteAverage": 6.1, "voteCount": 1057, "backdropPath": "/iI0n28l5vn3K1GdXHVoA54kRemv.jpg", "posterPath": "/jEXOguTFhYV93cq65XfiazbkfYK.jpg" } ] }, { "id": 216141, "mediaType": "movie", "adult": false, "genreIds": [ 27, 18, 878 ], "originalLanguage": "en", "originalTitle": "Doctor Strain the Body Snatcher", "overview": "Positively torturous, undecipherable shambles of a horror film concerns the titular doctor and his nephew as they incautiously revive corpses in their basement laboratory.", "popularity": 0.479, "releaseDate": "1991-10-31", "title": "Doctor Strain the Body Snatcher", "video": false, "voteAverage": 3.3, "voteCount": 3, "backdropPath": null, "posterPath": null }, { "id": 69019, "firstAirDate": "1995-11-10", "genreIds": [ 18 ], "mediaType": "tv", "name": "Strain of Blood", "originCountry": [ "TH" ], "originalLanguage": "th", "originalName": "เธชเธฒเธขเน‚เธฅเธซเธดเธ•", "overview": "Krai comes from a family of soldiers and has spent most of his life fighting in battles and wars for his country. Dao is the youngest daughter of a prominent village chief, who is very curious and happy go lucky as a youngster. Krai's older brother marries Dao's older sister, sealing the connection between both families. Krai meets Dao as a young girl and he spends a lot of time taking care of her, buying her toys and taking her on village outings with him to the market. Krai and his older brother are called away to defend the border and he promises Dao that he will return to take care of her always as an older brother. Years later, Krai comes back to realize that Dao has grown into a young beautiful maiden and the good feelings that both had for each other from years ago resurface into true love.", "popularity": 10.02, "voteAverage": 0, "voteCount": 0, "backdropPath": null, "posterPath": "/eBJeBVxQW7UwATdAs5oYXmOFXdA.jpg" }, { "id": 31715, "firstAirDate": "2006-11-01", "genreIds": [ 16, 10765 ], "mediaType": "tv", "name": "Strain: Strategic Armored Infantry", "originCountry": [ "JP" ], "originalLanguage": "ja", "originalName": "ๅฅๅ…‰ใฎใ‚นใƒˆใƒฌใ‚คใƒณ", "overview": "In the distant future, mankind is divided into two factions: Union and Deague. They have waged a war against each other for so long that no one remembers when it first began.Sara Werec, the daughter of a respectable family, is a 16-year old girl who attends a Space Academy where she is training to become a pilot. Her brother, Ralph Werec, had been sent to the frontline to accomplish a special mission when she was 11 years old. The two of them had lost their parents when they were young and the bond between the two is very close. It is Saraโ€™s dearest wish to be reunited with her brother. To do that, she must travel to the battlefield where he is.One day, Saraโ€™s planet is suddenly assaulted by Deague forces. To her surprise, her brother, Ralph, turns out to be one of the raiders who successfully kidnap a mysterious girl sleeping in a capsule.", "popularity": 12.867, "voteAverage": 8.4, "voteCount": 5, "backdropPath": "/slBzY18bTsr9mSnj2iZI73ebpOh.jpg", "posterPath": "/2WrCZULqB481U27oqAOtTLn5dqj.jpg" } ] } joostlek-python-overseerr-19f99d8/tests/fixtures/status.json000066400000000000000000000002211475735226000245130ustar00rootroot00000000000000{ "version": "develop-local", "commitTag": "local", "updateAvailable": false, "commitsBehind": 0, "restartRequired": false } joostlek-python-overseerr-19f99d8/tests/fixtures/tv.json000066400000000000000000002070071475735226000236340ustar00rootroot00000000000000{ "createdBy": [ { "id": 2282154, "credit_id": "673fc8e2d7bee5585c559789", "name": "Jimmy Donaldson", "original_name": "Jimmy Donaldson", "gender": 2, "profile_path": "/dE6VIMrvZsY5a9gIaWoX40tzYkV.jpg" }, { "id": 4886515, "credit_id": "673fc8ecd7bee5585c55979f", "name": "Tyler Conklin", "original_name": "Tyler Conklin", "gender": 2, "profile_path": null }, { "id": 572350, "credit_id": "673fc8f4d7bee5585c5597a7", "name": "Sean Klitzner", "original_name": "Sean Klitzner", "gender": 2, "profile_path": "/rTVGa5hK5N9mhJwrd2oGOWzbeh7.jpg" }, { "id": 5073789, "credit_id": "673fc8f88337acae076dca7d", "name": "Mack Hopkins", "original_name": "Mack Hopkins", "gender": 2, "profile_path": "/5yaA2crWsdzTf2BFnlZ3ZuvFaL8.jpg" } ], "episodeRunTime": [], "firstAirDate": "2024-12-19", "genres": [ { "id": 10764, "name": "Reality" } ], "relatedVideos": [ { "site": "YouTube", "key": "37ZG9lddxto", "name": "Official Trailer", "size": 1080, "type": "Trailer", "url": "https://www.youtube.com/watch?v=37ZG9lddxto" }, { "site": "YouTube", "key": "2lyCZnx71ps", "name": "Teaser Trailer", "size": 1080, "type": "Teaser", "url": "https://www.youtube.com/watch?v=2lyCZnx71ps" } ], "homepage": "https://www.amazon.com/dp/B0CZ7S3N9Y", "id": 249522, "inProduction": true, "languages": [ "da", "en" ], "lastAirDate": "2024-12-26", "name": "Beast Games", "networks": [ { "id": 1024, "name": "Prime Video", "originCountry": "", "logoPath": "/ifhbNuuVnlwYy5oXA5VIb2YR8AZ.png" } ], "numberOfEpisodes": 10, "numberOfSeasons": 1, "originCountry": [ "US" ], "originalLanguage": "en", "originalName": "Beast Games", "tagline": "1,000 players. 5 million dollars. 1 winner.", "overview": "I gathered 1,000 people to fight for $5,000,000, the LARGEST cash prize in TV history! We're also giving away a private island, Lamborghinis, and millions more in cash throughout the competition! Go watch to see the greatest show ever made!", "popularity": 769.189, "productionCompanies": [ { "id": 210099, "name": "Amazon MGM Studios", "originCountry": "US", "logoPath": "/d6HwljzlOzxJ4tXlrpRkNZaZMWL.png" }, { "id": 247865, "name": "MrBeast", "originCountry": "US", "logoPath": "/9jchzJF1IonYRakcyVIu2fKb8Mz.png" } ], "productionCountries": [ { "iso_3166_1": "US", "name": "United States of America" } ], "contentRatings": { "results": [ { "descriptors": [], "iso_3166_1": "SG", "rating": "G" }, { "descriptors": [], "iso_3166_1": "BR", "rating": "L" }, { "descriptors": [], "iso_3166_1": "MX", "rating": "A" }, { "descriptors": [], "iso_3166_1": "US", "rating": "TV-G" }, { "descriptors": [], "iso_3166_1": "ES", "rating": "7" } ] }, "spokenLanguages": [ { "englishName": "Danish", "iso_639_1": "da", "name": "Dansk" }, { "englishName": "English", "iso_639_1": "en", "name": "English" } ], "seasons": [ { "airDate": "2024-12-19", "episodeCount": 10, "id": 384427, "name": "Season 1", "overview": "", "seasonNumber": 1, "posterPath": "/3itZlypnOcVcqI5xxyO6nvJ52yM.jpg" } ], "status": "Returning Series", "type": "Reality", "voteAverage": 7.523, "voteCount": 44, "backdropPath": "/bXJII8e2iIQ7EzDx4KRhSghn2me.jpg", "lastEpisodeToAir": { "id": 5802152, "airDate": "2024-12-26", "episodeNumber": 3, "name": "The Solitary Experiment", "overview": "What would happen if three best friends were trapped in a room, but only two could escape? Watch and see for yourself right now!", "productionCode": "", "seasonNumber": 1, "showId": 249522, "voteAverage": 4.6, "stillPath": "/r6LRRaA2l2tMDttWbYl3dXdJUij.jpg" }, "nextEpisodeToAir": { "id": 5802153, "airDate": "2025-01-02", "episodeNumber": 4, "name": "Episode 4", "overview": "", "productionCode": "", "seasonNumber": 1, "showId": 249522, "voteAverage": 0, "stillPath": null }, "posterPath": "/3itZlypnOcVcqI5xxyO6nvJ52yM.jpg", "credits": { "cast": [ { "character": "Self - Host", "creditId": "65f9449f15a4a1012c0c8d19", "id": 2282154, "name": "Jimmy Donaldson", "order": 0, "gender": 2, "profilePath": "/dE6VIMrvZsY5a9gIaWoX40tzYkV.jpg" }, { "character": "Self - Co-Host", "creditId": "6765bca2330bce6ec990e041", "id": 5131521, "name": "Chandler Hallow", "order": 1, "gender": 2, "profilePath": "/8MAvWDC4FiiSYlmpZ9p2oCovxl0.jpg" }, { "character": "Self - Co-Host", "creditId": "6765bcb9330bce6ec990e059", "id": 5131522, "name": "Karl Jacobs", "order": 2, "gender": 2, "profilePath": "/9ZNCxiXh4l3i24KXLD67Lqyv04K.jpg" }, { "character": "Self - Co-Host", "creditId": "6765bcbf87b92a43be5e00bd", "id": 5131524, "name": "Nolan Hansen", "order": 3, "gender": 2, "profilePath": "/uyEUcMieLKH6pn9JTPuoI5nURWB.jpg" }, { "character": "Self - Co-Host", "creditId": "6765bcca919287ef5390dc73", "id": 5131525, "name": "Tareq Salameh", "order": 4, "gender": 2, "profilePath": "/bFZn6A8CSn7EPi9MHcIYxTpLAlF.jpg" }, { "character": "Self - Co-Host", "creditId": "6765bcd1919287ef5390dc7c", "id": 5073789, "name": "Mack Hopkins", "order": 5, "gender": 2, "profilePath": "/5yaA2crWsdzTf2BFnlZ3ZuvFaL8.jpg" }, { "character": "Self", "creditId": "6767dae0ae1b411f405e4af9", "id": 1126417, "name": "Arturo del Puerto", "order": 6, "gender": 2, "profilePath": "/tALGmngyUUtxyeQtMSy7KyzjdYc.jpg" } ], "crew": [ { "creditId": "65f94625223e20016079bd7c", "department": "Production", "id": 2282154, "job": "Executive Producer", "name": "Jimmy Donaldson", "gender": 2, "profilePath": "/dE6VIMrvZsY5a9gIaWoX40tzYkV.jpg" }, { "creditId": "673fcb2b7b825e685b4e0a34", "department": "Production", "id": 4886515, "job": "Executive Producer", "name": "Tyler Conklin", "gender": 2, "profilePath": null }, { "creditId": "673fcb357b825e685b4e0a37", "department": "Production", "id": 572350, "job": "Executive Producer", "name": "Sean Klitzner", "gender": 2, "profilePath": "/rTVGa5hK5N9mhJwrd2oGOWzbeh7.jpg" }, { "creditId": "673fcb41dae2e6a938254d38", "department": "Production", "id": 5073789, "job": "Executive Producer", "name": "Mack Hopkins", "gender": 2, "profilePath": "/5yaA2crWsdzTf2BFnlZ3ZuvFaL8.jpg" }, { "creditId": "673fcb57dae2e6a938254d4e", "department": "Production", "id": 5073813, "job": "Executive Producer", "name": "Michael Cruz", "gender": 0, "profilePath": null }, { "creditId": "673fcb605cac041cfae26a54", "department": "Production", "id": 4851894, "job": "Executive Producer", "name": "Matt Apps", "gender": 0, "profilePath": null }, { "creditId": "673fcb6b7b825e685b4e0a3d", "department": "Production", "id": 4007900, "job": "Executive Producer", "name": "Charles Wachter", "gender": 0, "profilePath": null }, { "creditId": "673fcb747b825e685b4e0a43", "department": "Production", "id": 2292335, "job": "Executive Producer", "name": "Keith Geller", "gender": 0, "profilePath": null }, { "creditId": "673fcb807b825e685b4e0a4d", "department": "Production", "id": 1251868, "job": "Executive Producer", "name": "Joe Coleman", "gender": 2, "profilePath": null }, { "creditId": "673fcb877b825e685b4e0a53", "department": "Production", "id": 1450643, "job": "Executive Producer", "name": "Rachel Skidmore", "gender": 0, "profilePath": null }, { "creditId": "673fcb91dae2e6a938254d5c", "department": "Production", "id": 4338334, "job": "Executive Producer", "name": "Chris Keiper", "gender": 0, "profilePath": null }, { "creditId": "673fcb9a5cac041cfae26a5c", "department": "Production", "id": 5073815, "job": "Executive Producer", "name": "Joshua Kulic", "gender": 0, "profilePath": null } ] }, "externalIds": { "facebookId": null, "freebaseId": null, "freebaseMid": null, "imdbId": "tt31812476", "instagramId": "beastgamesonprime", "tvdbId": 447806, "tvrageId": null, "twitterId": null }, "keywords": [ { "id": 271, "name": "competition" }, { "id": 4325, "name": "game show" }, { "id": 330122, "name": "mrbeast" } ], "mediaInfo": { "downloadStatus": [], "downloadStatus4k": [], "id": 535, "mediaType": "tv", "tmdbId": 249522, "tvdbId": 447806, "imdbId": null, "status": 4, "status4k": 1, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:45:00.000Z", "lastSeasonChange": "2024-12-26T14:37:30.000Z", "mediaAddedAt": "2024-12-26T14:39:56.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 144, "externalServiceId4k": null, "externalServiceSlug": "beast-games", "externalServiceSlug4k": null, "ratingKey": "10189", "ratingKey4k": null, "requests": [ { "id": 14, "status": 2, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:37:30.000Z", "type": "tv", "is4k": false, "serverId": 0, "profileId": 7, "rootFolder": "/media/tv", "languageProfileId": 1, "tags": [], "isAutoRequest": false, "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 535, "mediaType": "tv", "tmdbId": 249522, "tvdbId": 447806, "imdbId": null, "status": 4, "status4k": 1, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:45:00.000Z", "lastSeasonChange": "2024-12-26T14:37:30.000Z", "mediaAddedAt": "2024-12-26T14:39:56.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 144, "externalServiceId4k": null, "externalServiceSlug": "beast-games", "externalServiceSlug4k": null, "ratingKey": "10189", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaaaaa/details?key=%2Flibrary%2Fmetadata%2F10189", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10189&server=aaaaaaa", "serviceUrl": "http://192.168.0.2:8989/series/beast-games" }, "requestedBy": { "permissions": 2, "id": 1, "email": "me@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 123123, "avatar": "https://plex.tv/users/123123/avatar?c=123123", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "modifiedBy": { "permissions": 2, "id": 1, "email": "me@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 123123, "avatar": "https://plex.tv/users/123123/avatar?c=123123", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "seasons": [ { "id": 4, "seasonNumber": 1, "status": 2, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:37:30.000Z" } ], "seasonCount": 1 } ], "issues": [ { "id": 1, "issueType": 2, "status": 1, "problemSeason": 1, "problemEpisode": 0, "createdAt": "2024-12-28T14:22:29.000Z", "updatedAt": "2024-12-28T14:22:54.000Z", "media": { "downloadStatus": [], "downloadStatus4k": [], "id": 535, "mediaType": "tv", "tmdbId": 249522, "tvdbId": 447806, "imdbId": null, "status": 4, "status4k": 1, "createdAt": "2024-12-26T14:37:30.000Z", "updatedAt": "2024-12-26T14:45:00.000Z", "lastSeasonChange": "2024-12-26T14:37:30.000Z", "mediaAddedAt": "2024-12-26T14:39:56.000Z", "serviceId": 0, "serviceId4k": null, "externalServiceId": 144, "externalServiceId4k": null, "externalServiceSlug": "beast-games", "externalServiceSlug4k": null, "ratingKey": "10189", "ratingKey4k": null, "plexUrl": "https://app.plex.tv/desktop#!/server/aaaaaaa/details?key=%2Flibrary%2Fmetadata%2F10189", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10189&server=aaaaaaa", "serviceUrl": "http://192.168.0.2:8989/series/beast-games" }, "createdBy": { "permissions": 2, "id": 1, "email": "me@email.com", "plexUsername": "somebody", "username": null, "recoveryLinkExpirationDate": null, "userType": 1, "plexId": 123123, "avatar": "https://plex.tv/users/123123/avatar?c=123123", "movieQuotaLimit": null, "movieQuotaDays": null, "tvQuotaLimit": null, "tvQuotaDays": null, "createdAt": "2024-12-16T21:13:58.000Z", "updatedAt": "2024-12-16T23:59:03.000Z", "requestCount": 11, "displayName": "somebody" }, "modifiedBy": null, "comments": [ { "id": 2, "message": "boop", "createdAt": "2024-12-28T14:22:54.000Z", "updatedAt": "2024-12-28T14:22:54.000Z" }, { "id": 1, "message": "test", "createdAt": "2024-12-28T14:22:29.000Z", "updatedAt": "2024-12-28T14:22:29.000Z" } ] } ], "seasons": [ { "id": 577, "seasonNumber": 1, "status": 4, "status4k": 1, "createdAt": "2024-12-26T14:45:00.000Z", "updatedAt": "2024-12-26T14:45:00.000Z" } ], "plexUrl": "https://app.plex.tv/desktop#!/server/aaaaaaa/details?key=%2Flibrary%2Fmetadata%2F10189", "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10189&server=aaaaaaa", "serviceUrl": "http://192.168.0.2:8989/series/beast-games" }, "watchProviders": [ { "iso_3166_1": "AD", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AD", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AE", "buy": [], "flatrate": [ { "displayPriority": 9, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AG", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AL", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AL", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AR", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AR", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "AT", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AT", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" }, { "displayPriority": 65, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "AU", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AU", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BA", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BB", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BB", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BE", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BG", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BH", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BH", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BM", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BO", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BO", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BR", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BR", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "BS", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BS", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CA", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CA", "buy": [], "flatrate": [ { "displayPriority": 3, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" }, { "displayPriority": 152, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "CH", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CH", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CI", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CI", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CL", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CL", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CO", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CO", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CR", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CR", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "CZ", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CZ", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "DE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=DE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" }, { "displayPriority": 157, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "DK", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=DK", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "DO", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=DO", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "DZ", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=DZ", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "EC", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=EC", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "EE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=EE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "EG", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=EG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "ES", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=ES", "buy": [], "flatrate": [ { "displayPriority": 3, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "FI", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=FI", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "FR", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=FR", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GB", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GB", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" }, { "displayPriority": 136, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "GF", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GF", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GG", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GH", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GH", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GI", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GI", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GR", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GR", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "GT", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GT", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "HK", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=HK", "buy": [], "flatrate": [ { "displayPriority": 5, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "HN", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=HN", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "HR", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=HR", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "HU", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=HU", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "ID", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=ID", "buy": [], "flatrate": [ { "displayPriority": 7, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IL", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IL", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IN", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IN", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IQ", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IQ", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IS", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IS", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "IT", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IT", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" }, { "displayPriority": 15, "logoPath": "/6FDKQWcR6JfmRKLqezSsvGgRuUY.jpg", "id": 109, "name": "Timvision" } ] }, { "iso_3166_1": "JM", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=JM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "JO", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=JO", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "JP", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=JP", "buy": [], "flatrate": [ { "displayPriority": 4, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "KE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=KE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "KR", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=KR", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "KW", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=KW", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LB", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LB", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LC", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LC", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LI", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LI", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LT", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LT", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LV", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LV", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "LY", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LY", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MA", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MC", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MC", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MD", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MD", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MK", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MK", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MT", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MT", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MX", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MX", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MY", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MY", "buy": [], "flatrate": [ { "displayPriority": 9, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "MZ", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MZ", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NG", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NL", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NL", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NO", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NO", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "NZ", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NZ", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "OM", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=OM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PA", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PF", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PF", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PH", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PH", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PK", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PK", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PL", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PL", "buy": [], "flatrate": [ { "displayPriority": 5, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PS", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PS", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PT", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PT", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "PY", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PY", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "QA", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=QA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "RO", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=RO", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "RS", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=RS", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SA", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SA", "buy": [], "flatrate": [ { "displayPriority": 23, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SE", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SG", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SI", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SI", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SK", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SK", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SM", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "SV", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SV", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TC", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TC", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TH", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TH", "buy": [], "flatrate": [ { "displayPriority": 3, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TN", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TN", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TR", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TR", "buy": [], "flatrate": [ { "displayPriority": 6, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TT", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TT", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "TW", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TW", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "UG", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=UG", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "US", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=US", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 9, "name": "Amazon Prime Video" }, { "displayPriority": 258, "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", "id": 2100, "name": "Amazon Prime Video with Ads" } ] }, { "iso_3166_1": "UY", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=UY", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "VA", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=VA", "buy": [], "flatrate": [ { "displayPriority": 0, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "VE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=VE", "buy": [], "flatrate": [ { "displayPriority": 2, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "YE", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=YE", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "ZA", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=ZA", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] }, { "iso_3166_1": "ZM", "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=ZM", "buy": [], "flatrate": [ { "displayPriority": 1, "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", "id": 119, "name": "Amazon Prime Video" } ] } ] } joostlek-python-overseerr-19f99d8/tests/fixtures/watchlist.json000066400000000000000000000010501475735226000251730ustar00rootroot00000000000000{ "page": 1, "totalPages": 1, "totalResults": 3, "results": [ { "ratingKey": "aaaa", "title": "Sonic the Hedgehog 3", "mediaType": "movie", "tmdbId": 939243 }, { "ratingKey": "bbbb", "title": "Superbad", "mediaType": "movie", "tmdbId": 8363 }, { "ratingKey": "cccc", "title": "The Legend of Korra", "mediaType": "tv", "tmdbId": 33880 } ] } joostlek-python-overseerr-19f99d8/tests/fixtures/webhook_config.json000066400000000000000000000035361475735226000261670ustar00rootroot00000000000000{ "enabled": true, "types": 4062, "options": { "jsonPayload": "{\n \"notification_type\": \"{{notification_type}}\",\n \"event\": \"{{event}}\",\n \"subject\": \"{{subject}}\",\n \"message\": \"{{message}}\",\n \"image\": \"{{image}}\",\n \"{{media}}\": {\n \"media_type\": \"{{media_type}}\",\n \"tmdbId\": \"{{media_tmdbid}}\",\n \"tvdbId\": \"{{media_tvdbid}}\",\n \"status\": \"{{media_status}}\",\n \"status4k\": \"{{media_status4k}}\"\n },\n \"{{request}}\": {\n \"request_id\": \"{{request_id}}\",\n \"requestedBy_email\": \"{{requestedBy_email}}\",\n \"requestedBy_username\": \"{{requestedBy_username}}\",\n \"requestedBy_avatar\": \"{{requestedBy_avatar}}\",\n \"requestedBy_settings_discordId\": \"{{requestedBy_settings_discordId}}\",\n \"requestedBy_settings_telegramChatId\": \"{{requestedBy_settings_telegramChatId}}\"\n },\n \"{{issue}}\": {\n \"issue_id\": \"{{issue_id}}\",\n \"issue_type\": \"{{issue_type}}\",\n \"issue_status\": \"{{issue_status}}\",\n \"reportedBy_email\": \"{{reportedBy_email}}\",\n \"reportedBy_username\": \"{{reportedBy_username}}\",\n \"reportedBy_avatar\": \"{{reportedBy_avatar}}\",\n \"reportedBy_settings_discordId\": \"{{reportedBy_settings_discordId}}\",\n \"reportedBy_settings_telegramChatId\": \"{{reportedBy_settings_telegramChatId}}\"\n },\n \"{{comment}}\": {\n \"comment_message\": \"{{comment_message}}\",\n \"commentedBy_email\": \"{{commentedBy_email}}\",\n \"commentedBy_username\": \"{{commentedBy_username}}\",\n \"commentedBy_avatar\": \"{{commentedBy_avatar}}\",\n \"commentedBy_settings_discordId\": \"{{commentedBy_settings_discordId}}\",\n \"commentedBy_settings_telegramChatId\": \"{{commentedBy_settings_telegramChatId}}\"\n },\n \"{{extra}}\": []\n}", "webhookUrl": "https://test.test.nl" } } joostlek-python-overseerr-19f99d8/tests/ruff.toml000066400000000000000000000007611475735226000222740ustar00rootroot00000000000000# 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... "TC002", # pytest doesn't like this one... "PLR0913", # we're overwriting function that has many arguments ] joostlek-python-overseerr-19f99d8/tests/syrupy.py000066400000000000000000000034351475735226000223630ustar00rootroot00000000000000"""Asynchronous Python client for Overseerr.""" from __future__ import annotations from dataclasses import asdict, is_dataclass from typing import TYPE_CHECKING, Any from syrupy.extensions import AmberSnapshotExtension from syrupy.extensions.amber import AmberDataSerializer if TYPE_CHECKING: from syrupy.types import ( PropertyFilter, PropertyMatcher, PropertyPath, SerializableData, ) class OverseerrSnapshotSerializer(AmberDataSerializer): """Overseerr snapshot serializer for Syrupy. Handles special cases for Overseerr data structures. """ @classmethod def _serialize( # pylint: disable=too-many-arguments cls, data: SerializableData, *, depth: int = 0, exclude: PropertyFilter | None = None, include: PropertyFilter | None = None, matcher: PropertyMatcher | None = None, path: PropertyPath = (), visited: set[Any] | None = None, ) -> str: """Pre-process data before serializing. This allows us to handle specific cases for Overseerr data structures. """ serializable_data = data if is_dataclass(type(data)): serializable_data = asdict(data) return super()._serialize( serializable_data, depth=depth, exclude=exclude, include=include, matcher=matcher, path=path, visited=visited, ) class OverseerrSnapshotExtension(AmberSnapshotExtension): """Overseerr extension for Syrupy.""" VERSION = "1" """Current version of serialization format. Need to be bumped when we change the OverseerrSnapshotSerializer. """ serializer_class: type[AmberDataSerializer] = OverseerrSnapshotSerializer joostlek-python-overseerr-19f99d8/tests/test_overseerr.py000066400000000000000000000307261475735226000240660ustar00rootroot00000000000000"""Tests for the client.""" from __future__ import annotations import asyncio from typing import TYPE_CHECKING, Any import aiohttp from aiohttp import ClientError from aiohttp.hdrs import METH_GET, METH_POST from aioresponses import CallbackResult, aioresponses import pytest from python_overseerr import MediaType, OverseerrClient from python_overseerr.exceptions import ( OverseerrAuthenticationError, OverseerrConnectionError, OverseerrError, ) from python_overseerr.models import ( NotificationType, RequestFilterStatus, RequestSortStatus, ) from tests import load_fixture from tests.const import HEADERS, MOCK_URL if TYPE_CHECKING: from syrupy import SnapshotAssertion async def test_putting_in_own_session( responses: aioresponses, ) -> None: """Test putting in own session.""" responses.get( f"{MOCK_URL}/request/count", status=200, body=load_fixture("request_count.json"), ) async with aiohttp.ClientSession() as session: overseerr = OverseerrClient("192.168.0.30", 443, "abc", session=session) await overseerr.get_request_count() assert overseerr.session is not None assert not overseerr.session.closed await overseerr.close() assert not overseerr.session.closed async def test_creating_own_session( responses: aioresponses, ) -> None: """Test creating own session.""" responses.get( f"{MOCK_URL}/request/count", status=200, body=load_fixture("request_count.json"), ) overseerr = OverseerrClient("192.168.0.30", 443, "abc") await overseerr.get_request_count() assert overseerr.session is not None assert not overseerr.session.closed await overseerr.close() assert overseerr.session.closed async def test_unexpected_server_response( responses: aioresponses, client: OverseerrClient, ) -> None: """Test handling unexpected response.""" responses.get( f"{MOCK_URL}/request/count", status=404, headers={"Content-Type": "plain/text"}, body="Yes", ) with pytest.raises(OverseerrError): await client.get_request_count() async def test_timeout( responses: aioresponses, ) -> None: """Test request timeout.""" # Faking a timeout by sleeping async def response_handler(_: str, **_kwargs: Any) -> CallbackResult: """Response handler for this test.""" await asyncio.sleep(2) return CallbackResult(body="Goodmorning!") responses.get( f"{MOCK_URL}/request/count", callback=response_handler, ) async with OverseerrClient( "192.168.0.30", 443, "abc", request_timeout=1, ) as overseerr: with pytest.raises(OverseerrConnectionError): await overseerr.get_request_count() async def test_client_error( client: OverseerrClient, responses: aioresponses, ) -> None: """Test client error.""" async def response_handler(_: str, **_kwargs: Any) -> CallbackResult: """Response handler for this test.""" raise ClientError responses.get( f"{MOCK_URL}/request/count", callback=response_handler, ) with pytest.raises(OverseerrConnectionError): await client.get_request_count() async def test_authentication_error( client: OverseerrClient, responses: aioresponses, ) -> None: """Test authentication error.""" responses.get( f"{MOCK_URL}/request/count", status=403, body=load_fixture("no_access.json"), ) with pytest.raises(OverseerrAuthenticationError): await client.get_request_count() @pytest.mark.parametrize( ("endpoint", "fixture", "method"), [ ("request/count", "request_count.json", "get_request_count"), ("status", "status.json", "get_status"), ( "settings/notifications/webhook", "webhook_config.json", "get_webhook_notification_config", ), ( "discover/watchlist", "watchlist.json", "get_watchlist", ), ("issue/count", "issue_count.json", "get_issue_count"), ], ids=[ "request_count", "status", "webhook_config", "watchlist", "issue_count", ], ) async def test_data_retrieval( responses: aioresponses, client: OverseerrClient, snapshot: SnapshotAssertion, endpoint: str, fixture: str, method: str, ) -> None: """Test data retrieval.""" responses.get( f"{MOCK_URL}/{endpoint}", status=200, body=load_fixture(fixture), ) assert await getattr(client, method)() == snapshot responses.assert_called_once_with( f"{MOCK_URL}/{endpoint}", METH_GET, headers=HEADERS, params=None, json=None, ) @pytest.mark.parametrize( "fixtures", [ "search_1.json", "search_2.json", ], ) async def test_search( responses: aioresponses, client: OverseerrClient, snapshot: SnapshotAssertion, fixtures: str, ) -> None: """Test searching for media.""" responses.get( f"{MOCK_URL}/search?query=frosty", status=200, body=load_fixture(fixtures), ) assert await client.search("frosty") == snapshot responses.assert_called_once_with( f"{MOCK_URL}/search", METH_GET, headers=HEADERS, params={"query": "frosty"}, json=None, ) async def test_setting_webhook_configuration( responses: aioresponses, client: OverseerrClient, ) -> None: """Test setting webhook configuration.""" responses.post( f"{MOCK_URL}/settings/notifications/webhook", status=200, ) await client.set_webhook_notification_config( enabled=True, types=NotificationType.REQUEST_APPROVED, webhook_url="http://localhost", json_payload="{}", ) responses.assert_called_once_with( f"{MOCK_URL}/settings/notifications/webhook", METH_POST, headers=HEADERS, params=None, json={ "enabled": True, "types": 4, "options": { "webhookUrl": "http://localhost", "jsonPayload": "{}", }, }, ) async def test_webhook_config_test( responses: aioresponses, client: OverseerrClient, ) -> None: """Test setting webhook configuration.""" responses.post( f"{MOCK_URL}/settings/notifications/webhook/test", status=204, ) assert ( await client.test_webhook_notification_config( webhook_url="http://localhost", json_payload="{}", ) is True ) responses.assert_called_once_with( f"{MOCK_URL}/settings/notifications/webhook/test", METH_POST, headers=HEADERS, params=None, json={ "enabled": True, "types": 2, "options": { "webhookUrl": "http://localhost", "jsonPayload": "{}", }, }, ) async def test_failing_webhook_config_test( responses: aioresponses, client: OverseerrClient, ) -> None: """Test setting webhook configuration.""" responses.post( f"{MOCK_URL}/settings/notifications/webhook/test", status=500, body='{"message": "Failed to send webhook notification."}', ) assert ( await client.test_webhook_notification_config( webhook_url="http://localhost", json_payload="{}", ) is False ) responses.assert_called_once_with( f"{MOCK_URL}/settings/notifications/webhook/test", METH_POST, headers=HEADERS, params=None, json={ "enabled": True, "types": 2, "options": { "webhookUrl": "http://localhost", "jsonPayload": "{}", }, }, ) async def test_fetching_requests( responses: aioresponses, client: OverseerrClient, snapshot: SnapshotAssertion, ) -> None: """Test fetching requests.""" responses.get( f"{MOCK_URL}/request", status=200, body=load_fixture("request.json"), ) assert await client.get_requests() == snapshot responses.assert_called_once_with( f"{MOCK_URL}/request", METH_GET, headers=HEADERS, params={}, json=None ) @pytest.mark.parametrize( ("kwargs", "params", "query_string"), [ ({"status": RequestFilterStatus.ALL}, {"filter": "all"}, "filter=all"), ({"sort": RequestSortStatus.ADDED}, {"sort": "added"}, "sort=added"), ({"requested_by": 1}, {"requestedBy": 1}, "requestedBy=1"), ], ) async def test_fetching_request_parameters( responses: aioresponses, client: OverseerrClient, kwargs: dict[str, Any], params: dict[str, Any], query_string: str, ) -> None: """Test fetching requests with parameters.""" responses.get( f"{MOCK_URL}/request?{query_string}", status=200, body=load_fixture("request.json"), ) await client.get_requests(**kwargs) responses.assert_called_once_with( f"{MOCK_URL}/request", METH_GET, headers=HEADERS, params=params, json=None ) async def test_fetching_issues( responses: aioresponses, client: OverseerrClient, snapshot: SnapshotAssertion, ) -> None: """Test fetching issues.""" responses.get( f"{MOCK_URL}/issue", status=200, body=load_fixture("issue.json"), ) assert await client.get_issues() == snapshot responses.assert_called_once_with( f"{MOCK_URL}/issue", METH_GET, headers=HEADERS, params={}, json=None ) @pytest.mark.parametrize( ("kwargs", "params", "query_string"), [ ({"status": RequestFilterStatus.ALL}, {"filter": "all"}, "filter=all"), ({"sort": RequestSortStatus.ADDED}, {"sort": "added"}, "sort=added"), ({"requested_by": 1}, {"requestedBy": 1}, "requestedBy=1"), ], ) async def test_fetching_issue_parameters( responses: aioresponses, client: OverseerrClient, kwargs: dict[str, Any], params: dict[str, Any], query_string: str, ) -> None: """Test fetching issues with parameters.""" responses.get( f"{MOCK_URL}/issue?{query_string}", status=200, body=load_fixture("issue.json"), ) await client.get_issues(**kwargs) responses.assert_called_once_with( f"{MOCK_URL}/issue", METH_GET, headers=HEADERS, params=params, json=None ) async def test_fetching_movie_details( responses: aioresponses, client: OverseerrClient, snapshot: SnapshotAssertion, ) -> None: """Test fetching movie details.""" responses.get( f"{MOCK_URL}/movie/1156593", status=200, body=load_fixture("movie.json"), ) assert await client.get_movie_details(1156593) == snapshot responses.assert_called_once_with( f"{MOCK_URL}/movie/1156593", METH_GET, headers=HEADERS, params=None, json=None ) async def test_fetching_tv_details( responses: aioresponses, client: OverseerrClient, snapshot: SnapshotAssertion, ) -> None: """Test fetching tv details.""" responses.get( f"{MOCK_URL}/tv/249522", status=200, body=load_fixture("tv.json"), ) assert await client.get_tv_details(249522) == snapshot responses.assert_called_once_with( f"{MOCK_URL}/tv/249522", METH_GET, headers=HEADERS, params=None, json=None ) @pytest.mark.parametrize( ("args", "fixture", "json"), [ ( (MediaType.MOVIE, 1156593), "create_movie_request.json", {"mediaType": "movie", "mediaId": 1156593}, ), ( (MediaType.TV, 249522, "all"), "create_tv_request.json", {"mediaType": "tv", "mediaId": 249522, "seasons": "all"}, ), ( (MediaType.TV, 249522, [1]), "create_tv_request.json", {"mediaType": "tv", "mediaId": 249522, "seasons": [1]}, ), ], ) async def test_creating_request( responses: aioresponses, client: OverseerrClient, snapshot: SnapshotAssertion, args: tuple[Any, ...], fixture: str, json: dict[str, Any], ) -> None: """Test creating a request.""" responses.post( f"{MOCK_URL}/request", status=201, body=load_fixture(fixture), ) assert await client.create_request(*args) == snapshot responses.assert_called_once_with( f"{MOCK_URL}/request", METH_POST, headers=HEADERS, params=None, json=json )