From dc912e683c739f424a119bbeaba858d65778909d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 2 May 2025 23:25:24 +0000 Subject: [PATCH 01/27] chore: sync repo --- .devcontainer/Dockerfile | 9 + .devcontainer/devcontainer.json | 43 + .dockerignore | 38 - .editorconfig | 24 - .github/.stale.yml | 17 - .github/ISSUE_TEMPLATE/api_bug_report.md | 29 - .github/ISSUE_TEMPLATE/bug_report.md | 42 - .github/ISSUE_TEMPLATE/config.yml | 3 - .github/ISSUE_TEMPLATE/feature_request.md | 23 - .github/ISSUE_TEMPLATE/question.md | 25 - .github/PULL_REQUEST_TEMPLATE.md | 28 - .github/dependabot.yml | 35 - .github/release-drafter.yml | 28 - .github/workflows/ci.yml | 52 + .github/workflows/codacy.yml | 61 - .github/workflows/greetings.yml | 26 - .github/workflows/release-drafter.yml | 16 - .github/workflows/static.yml | 42 - .gitignore | 627 +---- .pre-commit-config.yaml | 33 - .python-version | 1 + .stats.yml | 4 + Brewfile | 2 + CODE_OF_CONDUCT.md | 76 - CONTRIBUTING.md | 140 +- LICENSE | 221 +- Makefile | 127 - README.md | 543 ++-- RELEASE.md | 18 - SECURITY.md | 36 +- add.py | 48 - api.md | 23 + assets/images/1.png | Bin 360297 -> 0 bytes assets/images/2.png | Bin 351284 -> 0 bytes assets/images/3.png | Bin 354793 -> 0 bytes assets/images/YouChat.png | Bin 6010 -> 0 bytes assets/images/YouCode.png | Bin 6849 -> 0 bytes assets/images/YouDotCom.jpg | Bin 93367 -> 0 bytes assets/images/coverage.svg | 21 - bin/publish-pypi | 6 + cookiecutter-config-file.yml | 12 - docker/Dockerfile | 25 - docker/README.md | 47 - examples/.keep | 4 + examples/youchat.py | 12 - mypy.ini | 50 + noxfile.py | 9 + poetry.lock | 2263 ----------------- poetry.lock.old | 1987 --------------- pyproject.toml | 360 +-- release.py | 35 - requirements-dev.lock | 104 + requirements.lock | 45 + requirements.txt | 34 - scripts/bootstrap | 19 + scripts/format | 8 + scripts/lint | 11 + scripts/mock | 41 + scripts/test | 61 + scripts/utils/ruffen-docs.py | 167 ++ setup.cfg | 4 - src/ydc_search_api/__init__.py | 94 + src/ydc_search_api/_base_client.py | 1943 ++++++++++++++ src/ydc_search_api/_client.py | 411 +++ src/ydc_search_api/_compat.py | 219 ++ src/ydc_search_api/_constants.py | 14 + src/ydc_search_api/_exceptions.py | 108 + src/ydc_search_api/_files.py | 123 + src/ydc_search_api/_models.py | 803 ++++++ src/ydc_search_api/_qs.py | 150 ++ src/ydc_search_api/_resource.py | 43 + src/ydc_search_api/_response.py | 832 ++++++ src/ydc_search_api/_streaming.py | 333 +++ src/ydc_search_api/_types.py | 217 ++ src/ydc_search_api/_utils/__init__.py | 57 + src/ydc_search_api/_utils/_logs.py | 25 + src/ydc_search_api/_utils/_proxy.py | 62 + src/ydc_search_api/_utils/_reflection.py | 42 + src/ydc_search_api/_utils/_streams.py | 12 + src/ydc_search_api/_utils/_sync.py | 86 + src/ydc_search_api/_utils/_transform.py | 447 ++++ src/ydc_search_api/_utils/_typing.py | 151 ++ src/ydc_search_api/_utils/_utils.py | 422 +++ src/ydc_search_api/_version.py | 4 + src/ydc_search_api/lib/.keep | 4 + image.png => src/ydc_search_api/py.typed | 0 src/ydc_search_api/resources/__init__.py | 33 + src/ydc_search_api/resources/news.py | 265 ++ src/ydc_search_api/resources/search.py | 239 ++ src/ydc_search_api/types/__init__.py | 8 + src/ydc_search_api/types/news_list_params.py | 57 + .../types/news_list_response.py | 51 + .../types/search_query_params.py | 46 + .../types/search_query_response.py | 37 + tests/__init__.py | 1 + tests/api_resources/__init__.py | 1 + tests/api_resources/test_news.py | 122 + tests/api_resources/test_search.py | 116 + tests/conftest.py | 51 + tests/sample_file.txt | 1 + tests/test_client.py | 1641 ++++++++++++ tests/test_deepcopy.py | 58 + tests/test_example/test.py | 0 tests/test_extract_files.py | 64 + tests/test_files.py | 51 + tests/test_models.py | 891 +++++++ tests/test_qs.py | 78 + tests/test_required_args.py | 111 + tests/test_response.py | 277 ++ tests/test_streaming.py | 252 ++ tests/test_transform.py | 453 ++++ tests/test_utils/test_proxy.py | 23 + tests/test_utils/test_typing.py | 73 + tests/utils.py | 159 ++ update.py | 29 - youdotcom.png | Bin 187213 -> 0 bytes youdotcom/__init__.py | 26 - youdotcom/__main__.py | 141 - youdotcom/api_1.py | 133 - youdotcom/api_2.py | 236 -- youdotcom/apps.py | 98 - youdotcom/code.py | 118 - youdotcom/config.json | 5 - youdotcom/imagine.py | 57 - youdotcom/init.py | 142 -- youdotcom/search.py | 53 - youdotcom/test.py | 5 - youdotcom/write.py | 59 - youdotcom/youchat.py | 57 - 129 files changed, 13195 insertions(+), 7490 deletions(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json delete mode 100755 .dockerignore delete mode 100755 .editorconfig delete mode 100755 .github/.stale.yml delete mode 100755 .github/ISSUE_TEMPLATE/api_bug_report.md delete mode 100755 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100755 .github/ISSUE_TEMPLATE/config.yml delete mode 100755 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100755 .github/ISSUE_TEMPLATE/question.md delete mode 100755 .github/PULL_REQUEST_TEMPLATE.md delete mode 100755 .github/dependabot.yml delete mode 100755 .github/release-drafter.yml create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/codacy.yml delete mode 100755 .github/workflows/greetings.yml delete mode 100644 .github/workflows/release-drafter.yml delete mode 100755 .github/workflows/static.yml mode change 100755 => 100644 .gitignore delete mode 100755 .pre-commit-config.yaml create mode 100644 .python-version create mode 100644 .stats.yml create mode 100644 Brewfile delete mode 100755 CODE_OF_CONDUCT.md mode change 100755 => 100644 CONTRIBUTING.md mode change 100755 => 100644 LICENSE delete mode 100755 Makefile mode change 100755 => 100644 README.md delete mode 100755 RELEASE.md mode change 100755 => 100644 SECURITY.md delete mode 100755 add.py create mode 100644 api.md delete mode 100755 assets/images/1.png delete mode 100755 assets/images/2.png delete mode 100755 assets/images/3.png delete mode 100755 assets/images/YouChat.png delete mode 100755 assets/images/YouCode.png delete mode 100755 assets/images/YouDotCom.jpg delete mode 100755 assets/images/coverage.svg create mode 100644 bin/publish-pypi delete mode 100755 cookiecutter-config-file.yml delete mode 100755 docker/Dockerfile delete mode 100755 docker/README.md create mode 100644 examples/.keep delete mode 100755 examples/youchat.py create mode 100644 mypy.ini create mode 100644 noxfile.py delete mode 100644 poetry.lock delete mode 100755 poetry.lock.old delete mode 100755 release.py create mode 100644 requirements-dev.lock create mode 100644 requirements.lock delete mode 100755 requirements.txt create mode 100755 scripts/bootstrap create mode 100755 scripts/format create mode 100755 scripts/lint create mode 100755 scripts/mock create mode 100755 scripts/test create mode 100644 scripts/utils/ruffen-docs.py delete mode 100755 setup.cfg create mode 100644 src/ydc_search_api/__init__.py create mode 100644 src/ydc_search_api/_base_client.py create mode 100644 src/ydc_search_api/_client.py create mode 100644 src/ydc_search_api/_compat.py create mode 100644 src/ydc_search_api/_constants.py create mode 100644 src/ydc_search_api/_exceptions.py create mode 100644 src/ydc_search_api/_files.py create mode 100644 src/ydc_search_api/_models.py create mode 100644 src/ydc_search_api/_qs.py create mode 100644 src/ydc_search_api/_resource.py create mode 100644 src/ydc_search_api/_response.py create mode 100644 src/ydc_search_api/_streaming.py create mode 100644 src/ydc_search_api/_types.py create mode 100644 src/ydc_search_api/_utils/__init__.py create mode 100644 src/ydc_search_api/_utils/_logs.py create mode 100644 src/ydc_search_api/_utils/_proxy.py create mode 100644 src/ydc_search_api/_utils/_reflection.py create mode 100644 src/ydc_search_api/_utils/_streams.py create mode 100644 src/ydc_search_api/_utils/_sync.py create mode 100644 src/ydc_search_api/_utils/_transform.py create mode 100644 src/ydc_search_api/_utils/_typing.py create mode 100644 src/ydc_search_api/_utils/_utils.py create mode 100644 src/ydc_search_api/_version.py create mode 100644 src/ydc_search_api/lib/.keep rename image.png => src/ydc_search_api/py.typed (100%) mode change 100755 => 100644 create mode 100644 src/ydc_search_api/resources/__init__.py create mode 100644 src/ydc_search_api/resources/news.py create mode 100644 src/ydc_search_api/resources/search.py create mode 100644 src/ydc_search_api/types/__init__.py create mode 100644 src/ydc_search_api/types/news_list_params.py create mode 100644 src/ydc_search_api/types/news_list_response.py create mode 100644 src/ydc_search_api/types/search_query_params.py create mode 100644 src/ydc_search_api/types/search_query_response.py create mode 100644 tests/__init__.py create mode 100644 tests/api_resources/__init__.py create mode 100644 tests/api_resources/test_news.py create mode 100644 tests/api_resources/test_search.py create mode 100644 tests/conftest.py create mode 100644 tests/sample_file.txt create mode 100644 tests/test_client.py create mode 100644 tests/test_deepcopy.py delete mode 100755 tests/test_example/test.py create mode 100644 tests/test_extract_files.py create mode 100644 tests/test_files.py create mode 100644 tests/test_models.py create mode 100644 tests/test_qs.py create mode 100644 tests/test_required_args.py create mode 100644 tests/test_response.py create mode 100644 tests/test_streaming.py create mode 100644 tests/test_transform.py create mode 100644 tests/test_utils/test_proxy.py create mode 100644 tests/test_utils/test_typing.py create mode 100644 tests/utils.py delete mode 100755 update.py delete mode 100755 youdotcom.png delete mode 100755 youdotcom/__init__.py delete mode 100755 youdotcom/__main__.py delete mode 100755 youdotcom/api_1.py delete mode 100755 youdotcom/api_2.py delete mode 100755 youdotcom/apps.py delete mode 100755 youdotcom/code.py delete mode 100755 youdotcom/config.json delete mode 100755 youdotcom/imagine.py delete mode 100755 youdotcom/init.py delete mode 100755 youdotcom/search.py delete mode 100755 youdotcom/test.py delete mode 100755 youdotcom/write.py delete mode 100755 youdotcom/youchat.py diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..ff261ba --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,9 @@ +ARG VARIANT="3.9" +FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT} + +USER vscode + +RUN curl -sSf https://rye.astral.sh/get | RYE_VERSION="0.44.0" RYE_INSTALL_OPTION="--yes" bash +ENV PATH=/home/vscode/.rye/shims:$PATH + +RUN echo "[[ -d .venv ]] && source .venv/bin/activate || export PATH=\$PATH" >> /home/vscode/.bashrc diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..c17fdc1 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,43 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/debian +{ + "name": "Debian", + "build": { + "dockerfile": "Dockerfile", + "context": ".." + }, + + "postStartCommand": "rye sync --all-features", + + "customizations": { + "vscode": { + "extensions": [ + "ms-python.python" + ], + "settings": { + "terminal.integrated.shell.linux": "/bin/bash", + "python.pythonPath": ".venv/bin/python", + "python.defaultInterpreterPath": ".venv/bin/python", + "python.typeChecking": "basic", + "terminal.integrated.env.linux": { + "PATH": "/home/vscode/.rye/shims:${env:PATH}" + } + } + } + }, + "features": { + "ghcr.io/devcontainers/features/node:1": {} + } + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.dockerignore b/.dockerignore deleted file mode 100755 index 6be1e24..0000000 --- a/.dockerignore +++ /dev/null @@ -1,38 +0,0 @@ -# Git -.git -.gitignore -.github - -# Docker -.dockerignore - -# IDE -.idea -.vscode - -# Byte-compiled / optimized / DLL files -__pycache__/ -**/__pycache__/ -*.pyc -*.pyo -*.pyd -.Python -*.py[cod] -*$py.class -.pytest_cache/ -..mypy_cache/ - -# poetry -.venv - -# C extensions -*.so - -# Virtual environment -.venv -venv - -.DS_Store -.AppleDouble -.LSOverride -._* diff --git a/.editorconfig b/.editorconfig deleted file mode 100755 index 7f578f1..0000000 --- a/.editorconfig +++ /dev/null @@ -1,24 +0,0 @@ -# Check http://editorconfig.org for more information -# This is the main config file for this project: -root = true - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true - -[*.{py, pyi}] -indent_style = space -indent_size = 4 - -[Makefile] -indent_style = tab - -[*.md] -trim_trailing_whitespace = false - -[*.{diff,patch}] -trim_trailing_whitespace = false diff --git a/.github/.stale.yml b/.github/.stale.yml deleted file mode 100755 index dc90e5a..0000000 --- a/.github/.stale.yml +++ /dev/null @@ -1,17 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security -# Label to use when marking an issue as stale -staleLabel: wontfix -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false diff --git a/.github/ISSUE_TEMPLATE/api_bug_report.md b/.github/ISSUE_TEMPLATE/api_bug_report.md deleted file mode 100755 index d61e283..0000000 --- a/.github/ISSUE_TEMPLATE/api_bug_report.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: πŸ”§ API Error report -about: If the api isn't working πŸ”§ -title: '' -labels: bug -assignees: ---- - -## πŸ”§ API Error Report - - - -## πŸ”¬ How To Reproduce (url used) - -What url dit you use: (remove your api key before posting it here) - - - -### Screenshots - - - -## πŸ“ˆ Expected behavior - - - -## πŸ“Ž Additional context - - diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100755 index bdd7677..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -name: πŸ› Bug report -about: If something isn't working πŸ”§ -title: '' -labels: bug -assignees: ---- - -## πŸ› Bug Report - - - -## πŸ”¬ How To Reproduce - -Steps to reproduce the behavior: - -1. ... - -### Code sample - - - -### Environment - -* OS: [e.g. Linux / Windows / macOS] -* Python version, get it with: - -```bash -python --version -``` - -### Screenshots - - - -## πŸ“ˆ Expected behavior - - - -## πŸ“Ž Additional context - - diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100755 index 8f2da54..0000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,3 +0,0 @@ -# Configuration: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository - -blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100755 index c387120..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: πŸš€ Feature request -about: Suggest an idea for this project πŸ– -title: '' -labels: enhancement -assignees: ---- - -## πŸš€ Feature Request - - - -## πŸ”ˆ Motivation - - - -## πŸ›° Alternatives - - - -## πŸ“Ž Additional context - - diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md deleted file mode 100755 index 82373ce..0000000 --- a/.github/ISSUE_TEMPLATE/question.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: ❓ Question -about: Ask a question about this project πŸŽ“ -title: '' -labels: question -assignees: ---- - -## Checklist - - - -- [ ] I've searched the project's [`issues`](https://github.com/silkepilon/youdotcom/issues?q=is%3Aissue). - -## ❓ Question - - - -How can I [...]? - -Is it possible to [...]? - -## πŸ“Ž Additional context - - diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100755 index 064f982..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,28 +0,0 @@ -## Description - - - -## Related Issue - - - -## Type of Change - - - -- [ ] πŸ“š Examples / docs / tutorials / dependencies update -- [ ] πŸ”§ Bug fix (non-breaking change which fixes an issue) -- [ ] πŸ₯‚ Improvement (non-breaking change which improves an existing feature) -- [ ] πŸš€ New feature (non-breaking change which adds functionality) -- [ ] πŸ’₯ Breaking change (fix or feature that would cause existing functionality to change) -- [ ] πŸ” Security fix - -## Checklist - - - -- [ ] I've read the [`CODE_OF_CONDUCT.md`](https://github.com/silkepilon/youdotcom/blob/master/CODE_OF_CONDUCT.md) document. -- [ ] I've read the [`CONTRIBUTING.md`](https://github.com/silkepilon/youdotcom/blob/master/CONTRIBUTING.md) guide. -- [ ] I've updated the code style using `make codestyle`. -- [ ] I've written tests for all new methods and classes that I created. -- [ ] I've written the docstring in Google format for all the methods and classes that I used. diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100755 index f6c346e..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,35 +0,0 @@ -# Configuration: https://dependabot.com/docs/config-file/ -# Docs: https://docs.github.com/en/github/administering-a-repository/keeping-your-dependencies-updated-automatically - -version: 2 - -updates: - - package-ecosystem: "pip" - directory: "/" - schedule: - interval: "daily" - allow: - - dependency-type: "all" - commit-message: - prefix: ":arrow_up:" - open-pull-requests-limit: 50 - - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "daily" - allow: - - dependency-type: "all" - commit-message: - prefix: ":arrow_up:" - open-pull-requests-limit: 50 - - - package-ecosystem: "docker" - directory: "/docker" - schedule: - interval: "weekly" - allow: - - dependency-type: "all" - commit-message: - prefix: ":arrow_up:" - open-pull-requests-limit: 50 diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml deleted file mode 100755 index 0ce0984..0000000 --- a/.github/release-drafter.yml +++ /dev/null @@ -1,28 +0,0 @@ -# Release drafter configuration https://github.com/release-drafter/release-drafter#configuration -# Emojis were chosen to match the https://gitmoji.carloscuesta.me/ - -name-template: "v$NEXT_PATCH_VERSION" -tag-template: "v$NEXT_PATCH_VERSION" - -categories: - - title: ":rocket: Features" - labels: [enhancement, feature] - - title: ":wrench: Fixes & Refactoring" - labels: [bug, refactoring, bugfix, fix] - - title: ":package: Build System & CI/CD" - labels: [build, ci, testing] - - title: ":boom: Breaking Changes" - labels: [breaking] - - title: ":pencil: Documentation" - labels: [documentation] - - title: ":arrow_up: Dependencies updates" - labels: [dependencies] - -template: | - ## What’s Changed - - $CHANGES - - ## :busts_in_silhouette: List of contributors - - $CONTRIBUTORS diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..35e99d9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,52 @@ +name: CI +on: + push: + branches-ignore: + - 'generated' + - 'codegen/**' + - 'integrated/**' + - 'stl-preview-head/**' + - 'stl-preview-base/**' + +jobs: + lint: + timeout-minutes: 10 + name: lint + runs-on: ${{ github.repository == 'stainless-sdks/ydc-search-api-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + steps: + - uses: actions/checkout@v4 + + - name: Install Rye + run: | + curl -sSf https://rye.astral.sh/get | bash + echo "$HOME/.rye/shims" >> $GITHUB_PATH + env: + RYE_VERSION: '0.44.0' + RYE_INSTALL_OPTION: '--yes' + + - name: Install dependencies + run: rye sync --all-features + + - name: Run lints + run: ./scripts/lint + + test: + timeout-minutes: 10 + name: test + runs-on: ${{ github.repository == 'stainless-sdks/ydc-search-api-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + steps: + - uses: actions/checkout@v4 + + - name: Install Rye + run: | + curl -sSf https://rye.astral.sh/get | bash + echo "$HOME/.rye/shims" >> $GITHUB_PATH + env: + RYE_VERSION: '0.44.0' + RYE_INSTALL_OPTION: '--yes' + + - name: Bootstrap + run: ./scripts/bootstrap + + - name: Run tests + run: ./scripts/test diff --git a/.github/workflows/codacy.yml b/.github/workflows/codacy.yml deleted file mode 100644 index f450d32..0000000 --- a/.github/workflows/codacy.yml +++ /dev/null @@ -1,61 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -# This workflow checks out code, performs a Codacy security scan -# and integrates the results with the -# GitHub Advanced Security code scanning feature. For more information on -# the Codacy security scan action usage and parameters, see -# https://github.com/codacy/codacy-analysis-cli-action. -# For more information on Codacy Analysis CLI in general, see -# https://github.com/codacy/codacy-analysis-cli. - -name: Codacy Security Scan - -on: - push: - branches: [ "main" ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ "main" ] - schedule: - - cron: '27 12 * * 5' - -permissions: - contents: read - -jobs: - codacy-security-scan: - permissions: - contents: read # for actions/checkout to fetch code - security-events: write # for github/codeql-action/upload-sarif to upload SARIF results - actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status - name: Codacy Security Scan - runs-on: ubuntu-latest - steps: - # Checkout the repository to the GitHub Actions runner - - name: Checkout code - uses: actions/checkout@v3 - - # Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis - - name: Run Codacy Analysis CLI - uses: codacy/codacy-analysis-cli-action@5cc54a75f9ad88159bb54046196d920e40e367a5 - with: - # Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository - # You can also omit the token and run the tools that support default configurations - project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} - verbose: true - output: results.sarif - format: sarif - # Adjust severity of non-security issues - gh-code-scanning-compat: true - # Force 0 exit code to allow SARIF file generation - # This will handover control about PR rejection to the GitHub side - max-allowed-issues: 2147483647 - - # Upload the SARIF file generated in the previous step - - name: Upload SARIF results file - uses: github/codeql-action/upload-sarif@v2 - with: - sarif_file: results.sarif diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml deleted file mode 100755 index 77c70eb..0000000 --- a/.github/workflows/greetings.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Greetings - -on: [pull_request, issues] - -jobs: - greeting: - runs-on: ubuntu-latest - steps: - - uses: actions/first-interaction@v1 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - pr-message: 'Hello @${{ github.actor }}, thank you for submitting a PR! We will respond as soon as possible.' - issue-message: | - Hello @${{ github.actor }}, thank you for your interest in youdotcom/betterapi. - - If this is a bug/issue with the api (betterapi.net) note that this is still in beta. - - Please note that repository is made and maintained by a single developer, @SilkePilon. - - - Thank you for submitting a issue! @SilkePilon will respond as soon as possible. - - - - - diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml deleted file mode 100644 index 58efdb9..0000000 --- a/.github/workflows/release-drafter.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Release Drafter - -on: - push: - # branches to consider in the event; optional, defaults to all - branches: - - master - -jobs: - update_release_draft: - runs-on: ubuntu-latest - steps: - # Drafts your next Release notes as Pull Requests are merged into "master" - - uses: release-drafter/release-drafter@v5.23.0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml deleted file mode 100755 index c790867..0000000 --- a/.github/workflows/static.yml +++ /dev/null @@ -1,42 +0,0 @@ -# Simple workflow for deploying static content to GitHub Pages -name: Deploy static content to Pages - -on: - # Runs on pushes targeting the default branch - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow one concurrent deployment -concurrency: - group: "pages" - cancel-in-progress: true - -jobs: - # Single deploy job since we're just deploying - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Pages - uses: actions/configure-pages@v3 - - name: Upload artifact - uses: actions/upload-pages-artifact@v1 - with: - # Upload entire repository - path: '.' - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v1 diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index 53c1b0d..8779740 --- a/.gitignore +++ b/.gitignore @@ -1,621 +1,16 @@ +.prism.log +.vscode +_dev -# Created by https://www.gitignore.io/api/osx,python,pycharm,windows,visualstudio,visualstudiocode -# Edit at https://www.gitignore.io/?templates=osx,python,pycharm,windows,visualstudio,visualstudiocode +__pycache__ +.mypy_cache -### OSX ### -# General -.DS_Store -.AppleDouble -.LSOverride +dist -# Icon must end with two \r -Icon - -# 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 - -### PyCharm ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# Generated files -.idea/**/contentModel.xml - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/modules.xml -# .idea/*.iml -# .idea/modules -# *.iml -# *.ipr - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests - -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser - -### PyCharm Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 - -# *.iml -# modules.xml -# .idea/misc.xml -# *.ipr - -# Sonarlint plugin -.idea/**/sonarlint/ - -# SonarQube Plugin -.idea/**/sonarIssues.xml - -# Markdown Navigator plugin -.idea/**/markdown-navigator.xml -.idea/**/markdown-navigator/ - -### Python ### -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# pyenv -.python-version - -# poetry .venv +.idea -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# Mr Developer -.mr.developer.cfg -.project -.pydevproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# Plugins -.secrets.baseline - -### VisualStudioCode ### -.vscode/* -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### VisualStudio ### -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# End of https://www.gitignore.io/api/osx,python,pycharm,windows,visualstudio,visualstudiocode - -poetry-convert.py -Makefile -Makefile +.env +.envrc +codegen.log +Brewfile.lock.json diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100755 index 4583df9..0000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,33 +0,0 @@ -default_language_version: - python: python3.10 - -default_stages: [commit, push] - -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.5.0 - hooks: - - id: check-yaml - - id: end-of-file-fixer - exclude: LICENSE - - - repo: local - hooks: - - id: pyupgrade - name: pyupgrade - entry: poetry run pyupgrade --py39-plus - types: [python] - language: system - - - repo: local - hooks: - - id: isort - name: isort - entry: poetry run isort --settings-path pyproject.toml - types: [python] - language: system - - - repo: https://github.com/psf/black - rev: 22.3.0 - hooks: - - id: black diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..43077b2 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.9.18 diff --git a/.stats.yml b/.stats.yml new file mode 100644 index 0000000..29bcbb3 --- /dev/null +++ b/.stats.yml @@ -0,0 +1,4 @@ +configured_endpoints: 2 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/you-com%2Fydc-search-api-04f2345110c3136d65a032316e9a5fb987d70d08b1b65f970d5f13860638b106.yml +openapi_spec_hash: f07d2ad7cbe69d51209ae44cea47d1d5 +config_hash: 53e8ae870b14286bfa14d64840b35915 diff --git a/Brewfile b/Brewfile new file mode 100644 index 0000000..492ca37 --- /dev/null +++ b/Brewfile @@ -0,0 +1,2 @@ +brew "rye" + diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100755 index a6362a4..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,76 +0,0 @@ -# Contributor Covenant 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, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, 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 team at silkepilon2009@gmail.com. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team 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 https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md old mode 100755 new mode 100644 index 16e880e..8e0f729 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,47 +1,129 @@ -# How to contribute +## Setting up the environment -## Dependencies +### With Rye -We use `poetry` to manage the [dependencies](https://github.com/python-poetry/poetry). -If you dont have `poetry`, you should install with `make poetry-download`. +We use [Rye](https://rye.astral.sh/) to manage dependencies because it will automatically provision a Python environment with the expected Python version. To set it up, run: -To install dependencies and prepare [`pre-commit`](https://pre-commit.com/) hooks you would need to run `install` command: +```sh +$ ./scripts/bootstrap +``` + +Or [install Rye manually](https://rye.astral.sh/guide/installation/) and run: + +```sh +$ rye sync --all-features +``` + +You can then run scripts using `rye run python script.py` or by activating the virtual environment: + +```sh +$ rye shell +# or manually activate - https://docs.python.org/3/library/venv.html#how-venvs-work +$ source .venv/bin/activate + +# now you can omit the `rye run` prefix +$ python script.py +``` + +### Without Rye + +Alternatively if you don't want to install `Rye`, you can stick with the standard `pip` setup by ensuring you have the Python version specified in `.python-version`, create a virtual environment however you desire and then install dependencies using this command: -```bash -make install -make pre-commit-install +```sh +$ pip install -r requirements-dev.lock ``` -To activate your `virtualenv` run `poetry shell`. +## Modifying/Adding code -## Codestyle +Most of the SDK is generated code. Modifications to code will be persisted between generations, but may +result in merge conflicts between manual patches and changes from the generator. The generator will never +modify the contents of the `src/ydc_search_api/lib/` and `examples/` directories. -After installation you may execute code formatting. +## Adding and running examples -```bash -make codestyle +All files in the `examples/` directory are not modified by the generator and can be freely edited or added to. + +```py +# add an example to examples/.py + +#!/usr/bin/env -S rye run python +… +``` + +```sh +$ chmod +x examples/.py +# run the example against your api +$ ./examples/.py +``` + +## Using the repository from source + +If you’d like to use the repository from source, you can either install from git or link to a cloned repository: + +To install via git: + +```sh +$ pip install git+ssh://git@github.com/stainless-sdks/ydc-search-api-python.git ``` -### Checks +Alternatively, you can build from source and install the wheel file: + +Building this package will create two files in the `dist/` directory, a `.tar.gz` containing the source files and a `.whl` that can be used to install the package efficiently. -Many checks are configured for this project. Command `make check-codestyle` will check black, isort and darglint. -The `make check-safety` command will look at the security of your code. +To create a distributable version of the library, all you have to do is run this command: + +```sh +$ rye build +# or +$ python -m build +``` + +Then to install: + +```sh +$ pip install ./path-to-wheel-file.whl +``` + +## Running tests + +Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests. + +```sh +# you will need npm installed +$ npx prism mock path/to/your/openapi.yml +``` + +```sh +$ ./scripts/test +``` + +## Linting and formatting + +This repository uses [ruff](https://github.com/astral-sh/ruff) and +[black](https://github.com/psf/black) to format the code in the repository. + +To lint: + +```sh +$ ./scripts/lint +``` + +To format and fix all ruff issues automatically: + +```sh +$ ./scripts/format +``` -Comand `make lint` applies all checks. +## Publishing and releases -### Before submitting +Changes made to this repository via the automated release PR pipeline should publish to PyPI automatically. If +the changes aren't made through the automated pipeline, you may want to make releases manually. -Before submitting your code please do the following steps: +### Publish with a GitHub workflow -1. Add any changes you want -1. Add tests for the new changes -1. Edit documentation if you have changed something significant -1. Run `make codestyle` to format your changes. -1. Run `make lint` to ensure that types, security and docstrings are okay. +You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/stainless-sdks/ydc-search-api-python/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up. -## Other help +### Publish manually -You can contribute by spreading a word about this library. -It would also be a huge contribution to write -a short article on how you are using this project. -You can also share your best practices with us. +If you need to manually release a package, you can run the `bin/publish-pypi` script with a `PYPI_TOKEN` set on +the environment. diff --git a/LICENSE b/LICENSE old mode 100755 new mode 100644 index 0d85078..c29940e --- a/LICENSE +++ b/LICENSE @@ -1,20 +1,201 @@ -The MIT License (MIT) -Copyright (c) 2022 youdotcom - -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. \ No newline at end of file + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2025 Ydc Search API + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Makefile b/Makefile deleted file mode 100755 index bd92626..0000000 --- a/Makefile +++ /dev/null @@ -1,127 +0,0 @@ -#* Variables -SHELL := /usr/bin/env bash -PYTHON := python -PYTHONPATH := `pwd` - -#* Docker variables -IMAGE := youdotcom -VERSION := latest - -#* Poetry -.PHONY: poetry-download -poetry-download: - curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | $(PYTHON) - - -.PHONY: poetry-remove -poetry-remove: - curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | $(PYTHON) - --uninstall - -#* Installation -.PHONY: install -install: - poetry lock -n && poetry export --without-hashes > requirements.txt - poetry install -n - -poetry run mypy --install-types --non-interactive ./ - -.PHONY: update -update: - poetry lock --no-update - -.PHONY: publish -publish: - poetry version patch - poetry publish --build - python3 update.py - python3 release.py -.PHONY: readme -readme: - python3 update.py - -.PHONY: pre-commit-install -pre-commit-install: - poetry run pre-commit install - -#* Formatters -.PHONY: codestyle -codestyle: - poetry run pyupgrade --exit-zero-even-if-changed --py39-plus **/*.py - poetry run isort --settings-path pyproject.toml ./ - poetry run black --config pyproject.toml ./ - -.PHONY: formatting -formatting: codestyle - -#* Linting -.PHONY: test -test: - PYTHONPATH=$(PYTHONPATH) poetry run pytest -c pyproject.toml --cov-report=html --cov=youdotcom tests/ - poetry run coverage-badge -o assets/images/coverage.svg -f - -.PHONY: check-codestyle -check-codestyle: - poetry run isort --diff --check-only --settings-path pyproject.toml ./ - poetry run black --diff --check --config pyproject.toml ./ - poetry run darglint --verbosity 2 youdotcom tests - -.PHONY: mypy -mypy: - poetry run mypy --config-file pyproject.toml ./ - -.PHONY: check-safety -check-safety: - poetry check - poetry run safety check --full-report - poetry run bandit -ll --recursive youdotcom tests - -.PHONY: lint -lint: test check-codestyle mypy check-safety - -.PHONY: update-dev-deps -update-dev-deps: - poetry add -D bandit@latest darglint@latest "isort[colors]@latest" mypy@latest pre-commit@latest pydocstyle@latest pylint@latest pytest@latest pyupgrade@latest safety@latest coverage@latest coverage-badge@latest pytest-html@latest pytest-cov@latest - poetry add -D --allow-prereleases black@latest - -#* Docker -# Example: make docker-build VERSION=latest -# Example: make docker-build IMAGE=some_name VERSION=0.1.0 -.PHONY: docker-build -docker-build: - @echo Building docker $(IMAGE):$(VERSION) ... - docker build \ - -t $(IMAGE):$(VERSION) . \ - -f ./docker/Dockerfile --no-cache - -# Example: make docker-remove VERSION=latest -# Example: make docker-remove IMAGE=some_name VERSION=0.1.0 -.PHONY: docker-remove -docker-remove: - @echo Removing docker $(IMAGE):$(VERSION) ... - docker rmi -f $(IMAGE):$(VERSION) - -#* Cleaning -.PHONY: pycache-remove -pycache-remove: - find . | grep -E "(__pycache__|\.pyc|\.pyo$$)" | xargs rm -rf - -.PHONY: dsstore-remove -dsstore-remove: - find . | grep -E ".DS_Store" | xargs rm -rf - -.PHONY: mypycache-remove -mypycache-remove: - find . | grep -E ".mypy_cache" | xargs rm -rf - -.PHONY: ipynbcheckpoints-remove -ipynbcheckpoints-remove: - find . | grep -E ".ipynb_checkpoints" | xargs rm -rf - -.PHONY: pytestcache-remove -pytestcache-remove: - find . | grep -E ".pytest_cache" | xargs rm -rf - -.PHONY: build-remove -build-remove: - rm -rf build/ - -.PHONY: cleanup -cleanup: pycache-remove dsstore-remove mypycache-remove ipynbcheckpoints-remove pytestcache-remove diff --git a/README.md b/README.md old mode 100755 new mode 100644 index 1c8f612..6949077 --- a/README.md +++ b/README.md @@ -1,413 +1,348 @@ +# Ydc Search API Python API library -

-
- YouDotCom -
-
- YouDotCom for python v2.0.23 (New updates planned!) -
-

+[![PyPI version](https://img.shields.io/pypi/v/ydc_search_api.svg)](https://pypi.org/project/ydc_search_api/) -

An python library for you.com and all of its apps.

+The Ydc Search API Python library provides convenient access to the Ydc Search API REST API from any Python 3.8+ +application. The library includes type definitions for all request params and response fields, +and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx). -
+It is generated with [Stainless](https://www.stainless.com/). - [![Python Version](https://img.shields.io/pypi/pyversions/youdotcom.svg)](https://pypi.org/project/youdotcom/) - [![Dependencies Status](https://img.shields.io/badge/dependencies-up%20to%20date-brightgreen.svg)](https://github.com/silkepilon/youdotcom/pulls?utf8=%E2%9C%93&q=is%3Apr%20author%3Aapp%2Fdependabot) +## Documentation - [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) - [![Security: bandit](https://img.shields.io/badge/security-bandit-green.svg)](https://github.com/PyCQA/bandit) - [![Pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/silkepilon/youdotcom/blob/master/.pre-commit-config.yaml) - [![Semantic Versions](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--versions-e10079.svg)](https://github.com/silkepilon/youdotcom/releases) - [![License](https://img.shields.io/github/license/silkepilon/youdotcom)](https://github.com/silkepilon/youdotcom/blob/master/LICENSE) - ![Coverage Report](assets/images/coverage.svg) - -
+The REST API documentation can be found on [documentation.you.com](https://documentation.you.com). The full API of this library can be found in [api.md](api.md). -

- About β€’ - Key Features β€’ - How To Use β€’ - Install β€’ - Credits β€’ - License -

+## Installation - +```sh +# install from this staging repo +pip install git+ssh://git@github.com/stainless-sdks/ydc-search-api-python.git +``` -## About -Welcome to the YouDotCom Python Library! +> [!NOTE] +> Once this package is [published to PyPI](https://app.stainless.com/docs/guides/publish), this will become: `pip install --pre ydc_search_api` -This library allows users to easily access and utilize all of the functionality of the You.com platform through a simple and intuitive Python interface. With the library, users can access a variety of You.com apps and services, including but not limited to: +## Usage -* Search -* YouChat -* YouCode -* YouWrite +The full API of this library can be found in [api.md](api.md). -To get started with the YouDotCom Python Library, simply install the package using pip and import it into your Python script. From there, you can use the provided functions and classes to easily interact with the You.com platform. +```python +import os +from ydc_search_api import YdcSearchAPI -We hope you enjoy using the YouDotCom Python Library and all of the features it has to offer! -> by Chat GPT +client = YdcSearchAPI( + api_key=os.environ.get("YDC_SEARCH_API_API_KEY"), # This is the default and can be omitted +) +response = client.search.query( + query="REPLACE_ME", +) +print(response.hits) +``` -## Key Features -* Bypass CloudFlare -* Interact with YouChat -* Find code examples -* Server ready - - Supports non-gui operating systems. -* Cross platform - - Windows, macOS and Linux ready. +While you can provide an `api_key` keyword argument, +we recommend using [python-dotenv](https://pypi.org/project/python-dotenv/) +to add `YDC_SEARCH_API_API_KEY="My API Key"` to your `.env` file +so that your API Key is not stored in source control. +## Async usage -## How to install +Simply import `AsyncYdcSearchAPI` instead of `YdcSearchAPI` and use `await` with each API call: -To install the YouDotCom Python Library, use the following command: +```python +import os +import asyncio +from ydc_search_api import AsyncYdcSearchAPI -``` -pip install youdotcom -``` -This will install the latest version of the youdotcom package. Always make sure to be up-to-date so you don't miss any features, use: +client = AsyncYdcSearchAPI( + api_key=os.environ.get("YDC_SEARCH_API_API_KEY"), # This is the default and can be omitted +) -``` -pip install youdotcom --upgrade -``` -Once the installation is complete, you can use the youdotcom package in your Python scripts by importing it: +async def main() -> None: + response = await client.search.query( + query="REPLACE_ME", + ) + print(response.hits) -```python -import youdotcom -``` +asyncio.run(main()) +``` -## How To Use +Functionality between the synchronous and asynchronous clients is otherwise identical. -To help users get started with the YouDotCom Python Library, we have provided a selection of code examples that demonstrate common use cases for the library. These examples can be found below and cover a range of functionality. +## Using types -To use the code examples, simply copy and paste the relevant code into your Python script and customize it to fit your specific needs. You can also use the examples as a starting point for your own code, using them as a guide to understand how the library functions can be used to build your own applications and integrations with the You.com platform. +Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like: -We hope that these code examples will make it easier for users to get up and running with the YouDotCom Python Library and start building with the You.com platform. -> :warning: **Warning!** -> Do not spam or harm the you.com servers in any way! +- Serializing back into JSON, `model.to_json()` +- Converting to a dictionary, `model.to_dict()` +Typed requests and responses provide autocomplete and documentation within your editor. If you would like to see type errors in VS Code to help catch bugs earlier, set `python.analysis.typeCheckingMode` to `basic`. -
-YouChat example -
-

-
- YouChat -
-

+## Handling errors +When the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `ydc_search_api.APIConnectionError` is raised. -> **Note** -> YouChat is currently disabled because you.com does not yet support the trafic. +When the API returns a non-success status code (that is, 4xx or 5xx +response), a subclass of `ydc_search_api.APIStatusError` is raised, containing `status_code` and `response` properties. +All errors inherit from `ydc_search_api.APIError`. ```python -from youdotcom import Chat # import all the classes - -chat = Chat.send_message(message="how is your day?", api_key="YOUR API KEY HERE") # send a message to YouChat. passing the message and your api key. - -# you can get an api key form the site: https://api.betterapi.net/ (with is also made by me) - -print(chat) # returns the message and some other data +import ydc_search_api +from ydc_search_api import YdcSearchAPI + +client = YdcSearchAPI() + +try: + client.search.query( + query="REPLACE_ME", + ) +except ydc_search_api.APIConnectionError as e: + print("The server could not be reached") + print(e.__cause__) # an underlying Exception, likely raised within httpx. +except ydc_search_api.RateLimitError as e: + print("A 429 status code was received; we should back off a bit.") +except ydc_search_api.APIStatusError as e: + print("Another non-200-range status code was received") + print(e.status_code) + print(e.response) ``` +Error codes are as follows: -#### Context -> **Note** -> at the moment there is no context support YET. becuase of new api. - - -> **Note** -> Your context will not always be used in the response message is is not a code bug but a YouChat thing. Note its still in beta - -YouDotCom's YouChat feature is a powerful tool that allows for context to be utilized in your conversations. By passing a list or a file in the JSON format, you can provide the chatbot with additional information to better understand and respond to your questions. +| Status Code | Error Type | +| ----------- | -------------------------- | +| 400 | `BadRequestError` | +| 401 | `AuthenticationError` | +| 403 | `PermissionDeniedError` | +| 404 | `NotFoundError` | +| 422 | `UnprocessableEntityError` | +| 429 | `RateLimitError` | +| >=500 | `InternalServerError` | +| N/A | `APIConnectionError` | -To use the context option, you can change the way you send your message by changing the `Chat.send_message` method. This method allows you to pass in a driver, a message, and a context_form_file or a context parameter. +### Retries -For example, if you want to use a file, you can pass the file name as the `context_form_file` parameter, like this: - -```python -Chat.send_message(driver=driver, message="YOUR QUESTION HERE", context_form_file="FILE_NAME.json") -``` - -Make sure to change the `FILE_NAME` to the name of the file you are using and include a question in the `message` parameter. +Certain errors are automatically retried 2 times by default, with a short exponential backoff. +Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict, +429 Rate Limit, and >=500 Internal errors are all retried by default. + +You can use the `max_retries` option to configure or disable retry settings: -Alternatively, you can also use the context directly without a file by passing in a list as the `context` parameter. Like this: - ```python -Chat.send_message(driver=driver, message="YOUR QUESTION HERE", context=['context #1', '#2', 'etc...']) +from ydc_search_api import YdcSearchAPI + +# Configure the default for all requests: +client = YdcSearchAPI( + # default is 2 + max_retries=0, +) + +# Or, configure per-request: +client.with_options(max_retries=5).search.query( + query="REPLACE_ME", +) ``` -By providing context to your conversations, you can expect more accurate and personalized responses from YouChat, which can help to improve your overall experience. +### Timeouts -The following is an example of a JSON file that can be used as the `context_form_file` parameter in the `Chat.send_message` method: +By default requests time out after 1 minute. You can configure this with a `timeout` option, +which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/#fine-tuning-the-configuration) object: -```json -{ - "context": [ - "my name is test", - "i love coding", - "my hobby's are making pictures in nature" - ] -} +```python +from ydc_search_api import YdcSearchAPI + +# Configure the default for all requests: +client = YdcSearchAPI( + # 20 seconds (default is 1 minute) + timeout=20.0, +) + +# More granular control: +client = YdcSearchAPI( + timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0), +) + +# Override per-request: +client.with_options(timeout=5.0).search.query( + query="REPLACE_ME", +) ``` -In this example, the `context` field contains an array of strings that provide additional information about the user. The strings can include any relevant information that could help the chatbot understand the context of the conversation. - - -
- -
-YouCode example -
- -

-
- YouCode -
-

+On timeout, an `APITimeoutError` is thrown. +Note that requests that time out are [retried twice by default](#retries). +## Advanced -#### Find code +### Logging - -```python -from youdotcom import Webdriver, Code # import all the classes - -driver = Webdriver().driver # setting up the webdriver. use `webdriver_path=` if the pre-installed one does not work. +We use the standard library [`logging`](https://docs.python.org/3/library/logging.html) module. -code = Code.find_code(driver, search="how to make an python loop?") # get all the code displayed on screen. passing the driver and search string. +You can enable logging by setting the environment variable `YDC_SEARCH_API_LOG` to `info`. -for string in code['response']: # loop through all the code - print(string) # print 1 at an time. - -print(code['time']) # print the time taken to complete you search. +```shell +$ export YDC_SEARCH_API_LOG=info ``` - -This code imports the Code and Webdriver classes from the youdotcom library. The Code class is used to search for code snippets, while the Webdriver class is used to set up a webdriver. - -First, the Webdriver class is instantiated with Webdriver(). The driver attribute of the resulting object is then stored in the driver variable. The driver attribute returns a webdriver object that can be used to automate web browsing tasks. -Next, the find_code method of the Code class is called with driver and a search string as arguments. This method searches for code snippets related to the specified search string using the webdriver. The result of the method call is stored in the code variable. - -The code variable is a dictionary containing a list of code snippets in the response field and the time taken to complete the search in the time field. The code then loops through the response list and prints each code snippet to the console one at a time. Finally, the time taken to complete the search is printed to the console. - ---- - -#### Generate code - -> **Note** -> Code complete has an daily limit of 20 requests. - -```python -from youdotcom import Code # import the write class +Or to `debug` for more verbose logging. -text = Code.gen_code("python loop") # make an api call +### How to tell whether `None` means `null` or missing -print(text['response']) # print the AI made code +In an API response, a field may be explicitly `null`, or missing entirely; in either case, its value is `None` in this library. You can differentiate the two cases with `.model_fields_set`: -print(text['time']) # print total time taken to complete your request +```py +if response.my_field is None: + if 'my_field' not in response.model_fields_set: + print('Got json like {}, without a "my_field" key present at all.') + else: + print('Got json like {"my_field": null}.') ``` - -This code imports the Code class from the youdotcom module. It then calls the gen_code method of the Code class, passing in the string "python loop" as an argument. The gen_code method makes an API call and returns a dictionary with two keys: response and time. The code then prints the value associated with the response key, which is the AI-generated code. It also prints the value associated with the time key, which is the total time taken to complete the request. - -
- -
-Search example -
- -```python -from youdotcom import Search # import the Search class -search_results = Search.search_for("how to make an python loop?") # search! No need to use the Webdriver class. +### Accessing raw response data (e.g. headers) -print(search_results['results']) # print all the search results +The "raw" Response object can be accessed by prefixing `.with_raw_response.` to any HTTP method call, e.g., -print(search_results['time']) # print the total time taken (les then 3 seconds on average) -``` - -This code imports the Search class from the youdotcom module. It then calls the search_for method of the Search class, passing in the string "how to make an python loop?" as an argument. The search_for method returns a dictionary with two keys: results and time. The code then prints the value associated with the results key, which is a list of search results. It also prints the value associated with the time key, which is the total time taken to perform the search. - -
- -
-YouWrite example -
- - -

-
- YouCode -
-

- -> **Note** -> YouWrite has an daily limit of 10 requests. - -```python -from youdotcom import Write # import the write class +```py +from ydc_search_api import YdcSearchAPI -text = Write.write("how to write well?") # make an api call +client = YdcSearchAPI() +response = client.search.with_raw_response.query( + query="REPLACE_ME", +) +print(response.headers.get('X-My-Header')) -print(text['response']) # print the AI made text - -print(text['time']) # print total time taken to complete your request +search = response.parse() # get the object that `search.query()` would have returned +print(search.hits) ``` - -This code imports the Write class from the youdotcom module. It then calls the write method of the Write class, passing in the string "how to write well?" as an argument. The write method makes an API call and returns a dictionary with two keys: response and time. The code then prints the value associated with the response key, which is a text generated by an AI. It also prints the value associated with the time key, which is the total time taken to complete the request. - -
-> **Note** -> YouDotCom is in Alpha and there will be bugs! +These methods return an [`APIResponse`](https://github.com/stainless-sdks/ydc-search-api-python/tree/main/src/ydc_search_api/_response.py) object. +The async client returns an [`AsyncAPIResponse`](https://github.com/stainless-sdks/ydc-search-api-python/tree/main/src/ydc_search_api/_response.py) with the same structure, the only difference being `await`able methods for reading the response content. -## Interactive shell -The YouDotCom python library offers a wide range of functionality to its users, and one of the ways in which users can access and utilize this functionality is through an interactive terminal shell. With the interactive shell, users are able to execute commands and manipulate the library in real-time, allowing for a more flexible and dynamic experience. +#### `.with_streaming_response` -to use the interactive shell, use the following command in your terminal: +The above interface eagerly reads the full response body when you make the request, which may not always be what you want. -``` -youdotcom -``` +To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods. -you will get something like this: +```python +with client.search.with_streaming_response.query( + query="REPLACE_ME", +) as response: + print(response.headers.get("X-My-Header")) -```bash -Welcome to YouShell an interactive shell for all YouDotCom commands -Enter 'help' for a list of available commands. -Type 'exit' to stop. + for line in response.iter_lines(): + print(line) +``` +The context manager is required so that the response will reliably be closed. -YouShell > -``` +### Making custom/undocumented requests -> **Note** -> You may sometimes get the following error message: -> ``` -> Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version. -> ``` +This library is typed for convenient access to the documented API. +If you need to access undocumented endpoints, params, or response properties, the library can still be used. +#### Undocumented endpoints +To make requests to undocumented endpoints, you can make requests using `client.get`, `client.post`, and other +http verbs. Options on the client will be respected (such as retries) when making this request. +```py +import httpx -## API +response = client.post( + "/foo", + cast_to=httpx.Response, + body={"my_param": True}, +) -> **Note** -> The request limit is 15 per minute. +print(response.headers.get("x-foo")) +``` -Welcome to the YouDotCom Python library! Our library now features an easy-to-use public API that allows you to interact with YouChat. With this API, you can easily integrate YouChat into your own projects and applications, providing a convenient and user-friendly way for you to access and utilize the capabilities of the chat bot. +#### Undocumented request params -To get started, you will first need to get an API key on our [website](https://betterapi.net/). This key will be required to authenticate each API request. +If you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` request +options. -base url: `api.betterapi.net` +#### Undocumented response properties -To send a message to YouChat and receive a JSON response, you can make an HTTP GET request to the endpoint `/youdotcom/chat`, including the message to be sent as a query parameter. The key is `message` and the value should be the message text encoded in URL format. For example, to send the message `hello there`, the endpoint would be `https://api.betterapi.net/youdotcom/chat?message=hello%20there&key=YOUR_API_KEY`. The JSON response will include the message sent by YouChat, time, v2Captcha, and type of the request. +To access undocumented response properties, you can access the extra fields like `response.unknown_prop`. You +can also get all the extra fields on the Pydantic model as a dict with +[`response.model_extra`](https://docs.pydantic.dev/latest/api/base_model/#pydantic.BaseModel.model_extra). -You also need to set your API key, you can do this by providing it as an parameter like this `/youdotcom/chat?message=hello%20there&key=YOUR_API_KEY` +### Configuring the HTTP client +You can directly override the [httpx client](https://www.python-httpx.org/api/#client) to customize it for your use case, including: -auto updating docs can be found at: https://betterapi.net/redoc +- Support for [proxies](https://www.python-httpx.org/advanced/proxies/) +- Custom [transports](https://www.python-httpx.org/advanced/transports/) +- Additional [advanced](https://www.python-httpx.org/advanced/clients/) functionality -Make sure to include the API key in the url of each request to authenticate it. +```python +import httpx +from ydc_search_api import YdcSearchAPI, DefaultHttpxClient + +client = YdcSearchAPI( + # Or use the `YDC_SEARCH_API_BASE_URL` env var + base_url="http://my.test.server.example.com:8083", + http_client=DefaultHttpxClient( + proxy="http://my.test.proxy.example.com", + transport=httpx.HTTPTransport(local_address="0.0.0.0"), + ), +) +``` -We are constantly improving and updating the YouDotCom library and API, so make sure to check back for new features and updates. If you have any questions or need assistance, feel free to reach out in the Discusions tab. I'm always happy to help. +You can also customize the client on a per-request basis by using `with_options()`: -## Discord bot ```python -from typing import Optional - -import discord -from discord import app_commands - - -MY_GUILD = discord.Object(id=0) # replace with your guild id - - -class MyClient(discord.Client): - def __init__(self, *, intents: discord.Intents): - super().__init__(intents=intents) - # A CommandTree is a special type that holds all the application command - # state required to make it work. This is a separate class because it - # allows all the extra state to be opt-in. - # Whenever you want to work with application commands, your tree is used - # to store and work with them. - # Note: When using commands.Bot instead of discord.Client, the bot will - # maintain its own tree instead. - self.tree = app_commands.CommandTree(self) - - # In this basic example, we just synchronize the app commands to one guild. - # Instead of specifying a guild to every command, we copy over our global commands instead. - # By doing so, we don't have to wait up to an hour until they are shown to the end-user. - async def setup_hook(self): - # This copies the global commands over to your guild. - self.tree.copy_global_to(guild=MY_GUILD) - await self.tree.sync(guild=MY_GUILD) - - -intents = discord.Intents.default() -client = MyClient(intents=intents) -betterapi_token = "YOUR API KEY HERE" - -@client.event -async def on_ready(): - print(f'Logged in as {client.user} (ID: {client.user.id})') - print('------') - - -@client.tree.command() -@app_commands.describe(message='The message to YouChat') -async def joined(interaction: discord.Interaction, message:str = "hi there"): - """Send a message to YouChat""" - await interaction.response.defer() - data = requests.get(f"https://api.betterapi.net/youdotcom/chat?message={message}&key={betterapi_token}").json() - try: - msg = data['message'] - except: - msg = "got an error!" - await interaction.followup.send(f"{msg}") - -client.run('token') +client.with_options(http_client=DefaultHttpxClient(...)) ``` +### Managing HTTP resources -## YouDotCom roadmap -* [x] add youchat -* [x] add youcode -* [ ] switch to using you.com/api -* [ ] make code faster -* [ ] add code translate -* [ ] add all of you.com apps +By default the library closes underlying HTTP connections whenever the client is [garbage collected](https://docs.python.org/3/reference/datamodel.html#object.__del__). You can manually close the client using the `.close()` method if desired, or with a context manager that closes when exiting. +```py +from ydc_search_api import YdcSearchAPI +with YdcSearchAPI() as client: + # make requests here + ... +# HTTP client is now closed +``` -## YouDotCom projects! -- [telegram bot](https://github.com/samezarus/you_telegram_bot) +## Versioning +This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions: +1. Changes that only affect static types, without breaking runtime behavior. +2. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_ +3. Changes that we do not expect to impact the vast majority of users in practice. -## Discord -In addition to the YouDotCom Python Library, we also have an active [Discord server](https://discord.gg/SD7wZMFSvV) where you can chat with developers and get help with using the library. Our Discord community is a great place to ask questions, share your projects, and get feedback from other developers. +We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience. +We are keen for your feedback; please open an [issue](https://www.github.com/stainless-sdks/ydc-search-api-python/issues) with questions, bugs, or suggestions. -## Credits +### Determining the installed version -This software uses the following open source packages: +If you've upgraded to the latest version but aren't seeing any new features you were expecting then your python environment is likely still using an older version. -- [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver) +You can determine the version that is being used at runtime with: + +```py +import ydc_search_api +print(ydc_search_api.__version__) +``` +## Requirements -## License +Python 3.8 or higher. -MIT +## Contributing ---- +See [the contributing documentation](./CONTRIBUTING.md). diff --git a/RELEASE.md b/RELEASE.md deleted file mode 100755 index 2599c57..0000000 --- a/RELEASE.md +++ /dev/null @@ -1,18 +0,0 @@ - -

-
- Markdownify -
-
- YouDotCom for python v1.0.23 -
-

- -

A python library for you.com and all of its apps.

- - - - - -## Release notes -fully replaced youdotcom's chat with the betterapi (also made by me) for faster responsesits now way faster (les that 8 sec) diff --git a/SECURITY.md b/SECURITY.md old mode 100755 new mode 100644 index ec760bc..2de41ee --- a/SECURITY.md +++ b/SECURITY.md @@ -1,27 +1,27 @@ -# Security +# Security Policy -## πŸ” Reporting Security Issues +## Reporting Security Issues -> Do not open issues that might have security implications! -> It is critical that security related issues are reported privately so we have time to address them before they become public knowledge. +This SDK is generated by [Stainless Software Inc](http://stainless.com). Stainless takes security seriously, and encourages you to report any security vulnerability promptly so that appropriate action can be taken. -Vulnerabilities can be reported by emailing core members: +To report a security issue, please contact the Stainless team at security@stainless.com. -- youdotcom [silkepilon2009@gmail.com](mailto:silkepilon2009@gmail.com) +## Responsible Disclosure -Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: +We appreciate the efforts of security researchers and individuals who help us maintain the security of +SDKs we generate. If you believe you have found a security vulnerability, please adhere to responsible +disclosure practices by allowing us a reasonable amount of time to investigate and address the issue +before making any information public. -- Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) -- Full paths of source file(s) related to the manifestation of the issue -- The location of the affected source code (tag/branch/commit or direct URL) -- Any special configuration required to reproduce the issue -- Environment (e.g. Linux / Windows / macOS) -- Step-by-step instructions to reproduce the issue -- Proof-of-concept or exploit code (if possible) -- Impact of the issue, including how an attacker might exploit the issue +## Reporting Non-SDK Related Security Issues -This information will help us triage your report more quickly. +If you encounter security issues that are not directly related to SDKs but pertain to the services +or products provided by Ydc Search API please follow the respective company's security reporting guidelines. -## Preferred Languages +### Ydc Search API Terms and Policies -We prefer all communications to be in English. +Please contact api@you.com for any questions or concerns regarding security of our services. + +--- + +Thank you for helping us keep the SDKs and systems they interact with secure. diff --git a/add.py b/add.py deleted file mode 100755 index 46a23a6..0000000 --- a/add.py +++ /dev/null @@ -1,48 +0,0 @@ -#!python3 -""" -Convert a requirements.txt file to a Poetry project. -Just place in the root of your working directory and run! -""" - -sourceFile = "./requirements.txt" - -import os -import re - -if not os.path.exists(sourceFile): - # Install Pigar and run it to generate your initial requirements - # https://github.com/damnever/pigar - os.system("pip install pigar") - os.system(f"pigar -o ~= -p {sourceFile}") - -# We don't need to keep track of this file -with open(".gitignore", "a") as fh: - fh.write("\npoetry-convert.py\n") - -# Initialize Poetry if it doesn't yet have a pyproject.toml file -if not os.path.exists("./pyproject.toml"): - os.system("poetry init") - -with open(sourceFile) as fh: - requirements = fh.read() - -noComments = re.sub("^#.*$", "", requirements, 0, re.IGNORECASE | re.MULTILINE) -bareRequirements = re.sub("\n+", "\n", noComments, 0, re.IGNORECASE | re.MULTILINE).strip() - -pipPoetryMap = {">": "^", "=": ""} - -reqList = [] -for line in bareRequirements.splitlines(): - package, match, version = re.sub(r"^(.*?)\s*([~>=<])=\s*v?([0-9\.\*]+)", r"\1,\2,\3", line, 0, re.IGNORECASE | re.MULTILINE).split(",") - try: - poetryMatch = pipPoetryMap[match] - except KeyError: - poetryMatch = match - poetryLine = f"{package}:{poetryMatch}{version}" - reqList.append(poetryLine) - -print("Found Poetry-compatible dependencies:") -print(reqList) - -for req in reqList: - os.system(f"poetry add {req}") diff --git a/api.md b/api.md new file mode 100644 index 0000000..e85fe89 --- /dev/null +++ b/api.md @@ -0,0 +1,23 @@ +# Search + +Types: + +```python +from ydc_search_api.types import SearchQueryResponse +``` + +Methods: + +- client.search.query(\*\*params) -> SearchQueryResponse + +# News + +Types: + +```python +from ydc_search_api.types import NewsListResponse +``` + +Methods: + +- client.news.list(\*\*params) -> NewsListResponse diff --git a/assets/images/1.png b/assets/images/1.png deleted file mode 100755 index 8166ff89cb12fede4afd407f84ae75867344cae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360297 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 z 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 Ef+AI_&;S4c diff --git a/assets/images/2.png b/assets/images/2.png deleted file mode 100755 index fb8b7ee53cda644c6a9e86b4ecab2466d94e648a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351284 zcmYIQcOaJi_eK;#R#sL#p@{6gcbV}B*_-T5Mj?_F%HBkF_9i=fhlC`1hirbw`}Tf+ zf4u*Q=eh6mIiGW`>pItYgH@Ddaj_||QBY8D<>jOvqoAM(z<>CdSK%kGecRrmprWA2 zONpzyC#@&DxvQK0ITStUPZo(*!p6G$4&^1f#FpY4Txr#kf;TSr*L>WbR9#e(R^_hM z*49dom(pRoep11>`*4dp9f3+X%o#6oaDHCR$$Jy?b#2Jjl85`3-tWI>s#2c!dkjSK zUAcSL^2M9%mDD@(jwluste-KoD-lC#$SyQ)@e4e`G?c|{`&a(vy+$^SJQB)>q+4KmXYNRP2HJ!q$4yp94!@Yx99` zTHYU*?E8;C9`tW|R4ygu>M1?p$-O=c{5P*_t2lPqU{kO#E389b?a-pf4O)vDR^MWpQq# zc6IH|?H^KdP%>Xi*^F1_HP7D&7ab9rJ@&ot>9f8ix95b8DSL4PRXmO0BU-L{%m@Dj z2C7&@0!p!iai;n)P1NY`<*~8%$wJyaS6m-Hd`OW%!kp;y5fO>8H^#-SJW?(qmW}B0 z7JnFv(4mdDB(M@l+#cYXOJ1!XNMxH&+1T>UZZF+8aY-M1zeM8Ykreip_HcE0^1E|P z%gKdM>VZ@8z*=gaqKMtMrilthH1roTiX+|P`9oaYV)>}uCRze$kFo5(RHuEV+m?%J z>xxdkE=YAxas0=N?A#8FjL=ux*2wpaa#2Y{W9yok<8QMxu3@92y%eLxPr^+wTedd( zmWo+hnIk_k>ZmyK^-|kXvH^n4JBk?529zhz#G#*Za7NYqY;i^7D92%)`)lKX;mv^6iUFa}{+fsjvpc{XH>^42ssnlb-dk{u?C%_~YQ zc{)6@th~r)CX-x5S=RDV3i^XiSpPnWv)Bk%adz%CE=6zI7)7=#&ogGP(Dra7eEnIK zS)Mc@^FieASKW~7Eu1{OL7Am9?^~)KFd+^qDWcFo66e8V{ zA}?=P+eDRi(cK!8Uq0<-Zk}fu3$yV{_uIcNA6bm{&`vxG5uI(BTUww~lxJAR(xdT~ z=V8=nmL)|(c2rc9jEl=1$DYl5uRUi>^74+kwKO_Vuq3_^{PWk_vw>OBEIr+(d3iq9 z$!?yBcm}XeG2N#@yl_T_>D=$>c6Pok%SUzn?>8|h#k?=cqYz-|=@$9Hv}{)J?j6@J zO>0(pIwfSqBNMGgJUOBS%F7eMM8DXOde0#rWkPX9`{g-RTL4wfonhL^G(9}W7<|Wn zgLPV*_O#@e4sxvM+VS!%s>OZ7@7(tvGs$CzsvZCt+{U1|> z!LBhb)}gBR^yU2j2JSp(P*L+ShsFHMcgs~@X!*sd?#er|8{EYE^7r3mOCTE8%im3q za{L(NvU!c@%GGfX{`&7DcuBuLUUhzgv=MX8yvb3ktiEC0CCBlxi*}MA{O{wjq9CxOk@Bc49LIW2w_2R<{QJ@^&Em}Boj7s{ zU+>)x_$Qud%@?dnpKo93da?3|HT3U~j-*fvIPMD;A?89^{{2HVG0BJ<7O|+LEuymj z1hDy)Ke{GLV(8}U(80xjQ>I#M5Jfr)5fr+aO3x+mZ%~sj2no*h72I zE@S+y3h}L-9fze2a&)w2j4+C`+4R9loXaTXq}5EeRy)ks94$UoLGFikj*pE!e*Cy4 zTKW9duV3mYR#tg&oJ%sSHNQBxHhRZD78lP)D~lM;wY+L;$1;TABoUCmy(3?GPv2D@ zKKp`1M4$7CzBhMQR~H;JCv|F4lET)Ew`QFy?#TfSf)I<{`}odx=aIeuiDuSmPGR9I zb<_PlY)zP$;{SZu&1oZ35)laJkAgw2u)RGTzvd#WyL0wr(OpspoACh>;_Ap&tBMRJ z-5YZYyB_k2iXk%>NpJ4sV>W7kp*n{*@++e2;m{_%6F%Wk%HnqH{iJy4+zV2R?+PJp zaJ=Nd$B7Yw@BD8X>b#btMW^~V^+;L&mpXn@Xk51;$d_TSR*94i#j;+&Lz%zo%KBv3niERNpZ5qY zf~6-(NUQy1i>+nh4I?Fxl$1kPG^r2KVW;Im${DZ0yd^DC1^La60!+{ozJ{< z<)R+Mw{bys^ea3QmyIiebJe2n;fRzYYr5#2>_Po*>y|hWg~+tj71dYmov^MfW6gmQ z+D(u3&lz&NxKw0)Fn!?o>mzG?Q4H(Zi>xf$4!1db%$$+w54)(4Qj?{oL|t9EsWt0x z(9EwGE)T$7V|0AnX(`!_-F3a1m7l1mw0Cc18=!!f)DkYgibG zG(P!bb9#PoBl_LD)A(*SIDQVfe{KxlQ;BpGQeCc_Ws~0*oR0r&D66WnU%L@Q7#t8M z;BqxLHy0gEms3}Zg~W4zRUSboFm7}m-LIIM;x*qtr#bXVyU-%x>w+&sbZ~Dki$pqp zULJWuQc(&G&ec~8mpOW$?s*No?$1Ftg=F2gpUKz_wK|zO^pAy6sSo3 zar~PzJpU^L>2&`q6`BDN|6OpB|7992LH~axO_Ph3?w`1Pg}BT+*VcN~cbR0=9wXjl zr2S1aqMCLi@tFOUhf)2t)ey=2M{@tB`Ny-ZM+>02L;jFM(zdCrqVR z*_H%I-0`@+N)PNMifCP0e6Kr^rsPN@*40+A>U?u@3B2WO79?`#s5WMlNGvMgEg*<~ zY%DPoHd44UVXXFEJn8dZI+u4=$v@jNVZ!CV!hVNg`L#FB-$*04EC`$fQvZu47QI1Q zz-58_=k9*Or}*!7b4g_Wg(xl37XQ2c7O%5X{yQ?nAh$q^_1`a%$PDBBx00hZzY1jd z|ARC6{|Zl(KJ>T1i_>}i_mQ7o|5vVAHA8hEivJXSQo?(+GP3{Q0>a|FGO^A7Ha$`b z_OS2?J=TBQkDv76e~)iZko~{Plkh+n>u*8&|DPi0IR0xl6v)fdzx*;*DXGt5f4`Q6 z@PDt3CXJ3m{7+o$#pzxD`!IWg|FtCo!&<`s{$1hkgR{zUp)B;UzWULWn$2)y&i=)p zZc(jDgR-el+AR7?&5cri&9r@eVMEG&Krx1X4wkyy4~U%92{psFbD5cG@$==h)7oZHJuoKHmVk|Lx<0 ztsW}3?=Q!!Fc1$P4JeDkX)oa_VhZ@-jgCLrou|2ot8rS2N=SHJ8)78@O`gyR5PCS?n2Rs$dDPi{ePA zZ{d-3rNLcK8-a$(A5E_;tgGIlh@k=GFs=KV>}j@I-qWDta#X=7Md{oNb% zXcer5Rfq*`t9C<8v0q6XdWooWTO={}VDlti$*;(yFCSQwpDAP10JmC{^Iq0 zdKS87Ww=#qy$8=6vTQtPCrz3Ss|{>S;x^(QNcZ#Z?*ikk~sVgvE?KV-&Jcf7>Z*8u7Zty^^Y&<0ERhZ|R)zgY5C0cwg z5#~2ob<^PkORZZ6bn+AwX>kI71eK$M>^0q-$5F~Azh;#rQZqDqz|c5I};k-dj407k#VC_C6;(F{T)a(>w3KZ_^(3F4sv72CO_B^cz?* zU7skyAyYwFCVDr!wNx=qvi{n28b*xRSM|6wrW zdX;!bD0ycbduFKl{*hOK{>5Dy?{YNh5@&qRsd41m^UiO34F@D{xu?1|`G?g3oL{vb zkRccugJv3@qt(h()Ym5|Ci0Y94%qYcel48xIGC<-5SV{0MR$1C2Ql@Jqz|g{2*2}4 z5w6vVYd?n#^ILG0-KJjweEGNBWm&aDHzm7Ey8@+r4ItWTY>%Fe7yQ-ZJ zshVa7-~a+z4U?40b{hH^N|vYHy88PW?#j;^65?FVEh_5BVzLmE^u8}G?O(G|`IKDP zlPfoO`jZr+8WL$~W%V=Vd1HT~U1NLG#TjKV*4+-N+0kFOMMP4zyti&MC?&}qY?4oG zxMnTqZ5*5c$}-*fRv~ooeHUILzAb>bUhl@ZzGx70aXlImsfv8>dpe)`-ECG_Aywo` zP-}Pw6N~1j7e~8GM0nT8xjt5pa9AY-cFxZg)omKB4BzlrFX@z%Th^I~L$5mA3l7*|?)QA~!oZt-|P0I}pmZho=Z z@2uS3zVp^ z^OPgTTRa7JBSEXHdGXxOc*b>k6I)s&e$LN_nInuI69&*zJ2o)%{do zzb{K(t!B4>ij2eLqr;YFqMpZs0?B>Ptx=l~(w(3AE0N}0+#c1ZzaPa59%z_o9n5K0 zZ@XkGHN1XSR1;WUuCBlkJ>*tg{nL@!=kP}LG%L0H51)>3sz*9HI*Ch%hw~9f(_80K zrVCh^)+NV@f(JZieYH`ir(WM}tA=JG5Xytxa56`HnJ(tCQ z|Ne~vIB{X9^Ss5z$u2!DP1LL`UX1qhQ09X5_j2;4rpapM6P`aOXX;PJKiN*#F7wUa ztK7QYPXchF9Kb5{baek(ZJiOWBqhfAjxb|DoVmrt9V?-&MkUL30Tx0Rry+3)s<^kI zBYx7p@17tON+lRWb8#q(LnVL%`N7iDfu3ziAulfvFoDD1GfJ)7z>lh?v-?ZcP`73Gdt$ z&B$prDwm{`vy*f@dvCr&(ORuzLfGg)UO^%2xf#QitHf`kqFN$+PmPH`G)ziJB9T6) z^E4bDzYzr*&u*oLwY5n>Ta%NQUwAruOfoiBp~+&_j{$YOWWK*pFEN3l=1;Y27uC0JCtDkrS^>2&%;4Z)6Z3-yNn_WskJU8!-U2zFuT49s zn=CV*-#_m9B4@lhn#)HSj_1wE&3*H2^;%J#oWdwZVQp==%WUI$RCF|m0_naNs6xlf zsqPyU;~-UtBayXkTS~63l_d^yDbF{J+P3F9c2CZH3N)^#r=_Nz?_DJS5wWzi{I#$! zRAnd9bkt|3)#THg`1k1_R-V6F#xx;N;Y-u(}yC zd-B5n+8@-~)R1iHw^T#d+t;6JH7*Cw8FEWomV^fK0ZD;gGpUoJuUAZ)Kg6s5_M#|SsA-w3*TaI zP5A7^`9X)DBhSakZS#-g7yz;s`;&WKpq_<2(|Gcv4BA9@cQ-jlRvZC+pmB*NK7Rq;!q2jA$5S`k^e_!IbAnPtfEfY#6?yzG3&6b%tq;9J*q%V=T z%w?_8iGvqtsN-5;mBYBMTVz6l)%UWZqHyn%Kk(sX57JQb$KLdr8Gm_u`*ilgJLK%- zhW+8TDr@5*ArzvEFFie|5BjGYp7Wxdog6UUy^B>gsi3DvJ$u-}%ja{79zt@zW9}0X zPN4gC^JV@2GKluFt;D#K&vl)ToO}iDJjh1nJlb!`E=34Y_kQEgRHVMz%rP?++;Ej8 z199M9zv}LOc+B(`Q??%hvD}u54D+cEx(s}j)qT4D!cQe zndyz+?3OGNiS`oZrPvF>&FaiPZ?T_)>5`Pfp2X6sOiWC)?Cb0HEQrOoxcJiDHTt;UnXZ{v-D zV^(*Bg_EI8$CK)Ny@XS)HACd_=M~%im114uqq|-H7olbJ82YZV|{*2ka=`|(DW#RTI*xp zo7Oo4K%`Q1b52&N9og9f>c#V&idp(iUh_6J+1Y_m@fiy=OF|7)+BYh9M^ewWO|$mU;N(OPw` z(^}UBnhjnjB~jWo?0@Bv=s(_HJL-39^zWPpt-m88^)oyp(PK5WNYi+TyyMD;*zMRR zp?-j*R+#)i;GC9N8!ygi9QT%QXEvmGEN;QqXXM?hso{sq+6TAjtvz20m0PcAZyb9d zITIxwr`?QKiq~(f({mJ_#P@Yu=K}gC-xQhN3>$VL)zpX}jQdWu%vB__rZhQ+hwgg5 zXD&Vmb+a&@pqB~#DJy!6I$h@mi3RfpAYDTHqqFYkN4{4c*nD$tJedvxViaM;8chbk z>^doHmfMyd)#`a>gvQRGOn65DBBfp-H| z6@cYo~zi<>J2?LYn|`<9`&SR zp*xF9=~Jc{eR*rd!NKts5nNv{)De~_heWz0o`4dd_uK}Rt$y21tV!0=@~*V>m723Z zQ*TYl6-Snb=+}~_ve)*Hr||YYA$5qbUwvE8#=h#mKK=YfYtRkjk_k(z((O)Bk#0a% ziqh=_>d4H>N)qW3qpGQ=mOP)=_DfyXG{j~b)b;HagG5i+;Yz=YjU@<{`dCmPl2gsm z*Voq@?{pvPB`?W0C~fE4L9!DyPNY1Etb7d|Tc#ahw|ZR0bxChp=mKeIdv}+V-Kfo8 zGHusgsD5wQR}F-$4oZPNw?{;~cj&S|2-h_|Cq>GeGG(Tjqak)H+N^9xZUd~dMOL5@xW~i#E zg>_}AXlr*L?iknn`SvW#_|L}Fz?SdD^HZN`ma_rhbAK!%2K$|MPGCMvZwRN=)7VYB zNAX-PCX9W}U@RarO~e122g>&Xa7%GjVqk^Q42njBY0cJ?rMZgacjS#GOBYVp%|$YS6VZ7+BfIJ!ZgK4*k@)fnB+Eptce;k0rUQKQAFo@=i1ote^adW>Hm%g$x zUQBaC^z<4Yl|b9_kn!?#U6sRnSKd7+0+wEl3@vjpuPPfG19j_MIh~guh|#n5_ifL$ zYL;8D!-HIsH1h#!6Rq^3BD}ImiDJDYV&Y#;L(*!WrZzf+p|jq;-PpPdv)TS+!Amiu zt84l#g2<<-Sdv_r`bJNzuau3=m7N_d8C?iMSbkA0cB0}z57sLQN+HeekE--j-&^N* zwpVgef9@VR)DdM2EExh<0hrNRPq53$Pbw2e;oZM4U_GHS1AOH4{KcGFG@w{JpWW** zELttlRy0eD`0HFZ47O%;EhvVPxd`863=R&8F%fep(0O=x)c@{g2F8n($YWzR{f*mt zvNk?huCi?wTuWN4pQdZ07DgN8(%*k?G}B-r21T--Yk)GjM64F!pme;r{y@hP1}dk;_e z`5$X!%7eA>;+*~j$M_e6^ng^1od9PfahrjDq4^GV!ZDsgXU*^lz4$RXqthKkO@`C zegAGPM*1KsTCMtc6$bV10W#6%sKK0hlD&U6I^#*-gzz-=JQ^70;Qdsg@Ddx_XxYYLS^5aMQ#Q9T|?GH5o~uE&Ui0MGJ|=l3ia%{Dd^Xji;h zD^B%Cte{xM%=Z%kGj3OhLLOi;OsoNiy?v7Y!cnoCOF zNE55;de^u!9Byain>W~2R#t#WZrL>+@m#yH$$0zrQBo%V(&D0&cP<^|CmyxX>+z}3 z)^xV>sH}sL+FH-m)zu7hO8}OU(b4{6d7U=E?}vvalY~4#o7&SXGvK(Zo+{J~t$^%- z0ZLk;W@*{;2Nr_{k}6RMEMMBs=V#Y&!!&xU9`f8>pY_G}rF}6n^i}9U>)Sn^tF;L- zbd=%o5_je={@@Ka8>B^Z3U0+Fk2jD8wHE5@q6JMiFDl+*Vk@Q<7M|YT?;04`vWLNv zrL8RwHNzi;!Yz7v!Y6tj7}CWxF+{DdU3LC4<8L`yuTd1+To zPY?C;T&t`HP`KA2PQZ=go^RHKK)Zt0?phbNGLpmTw0IL8O}w=V^)oi0Js_#~g7oy@t`fl>=9tntBnuum`?7SYS6StS_0306#j6zuMH)Lk3N zrZzE|^!u7O5hXft)NXvhxAxd2?5k;@(rU$Y_e7(fw}`0d#nFI$-LyioCxKE9kyZ>4 z=iB`J@%8mOEprd%J0q5U$8%~`8=y9wOmDpodGvYf#!jJ~cL+eZd#gJ6v^_k-!`4~Z z*~4Y#%AoWSF(?=;_V#!HXcgM+ieljc#jW%&)V6*8lc zhViNIj(($yqNnFEEITD@HPf3sFPX0R(17wmRqk-i+WrvDNB^4ml7h|6HMc_1&hrS% zphlK5g(s_eF(wI#iCE~`=uBEMxP412uXStAyrDNQgRYi8&xQE5S#I6%Op$h(u0>XM zFs8Ql8{X_4#Igf3yjDfUJ^(^h4UPVeu+;5u&x#{cQ|`Vy-MRi85a{`SqY z(q_t0rYwy5Q>BX6J8z8n0MTW)v9IoFo6JYHL4)Hhl7j3QA+cW!vG;VHqk#5a0xc za;%ETVK+QK$j-~lZvAQ}JY3pn(am9@omJN3vsuo{nWWng^X?rCTUXa^9nBmxJ~Eu6 zHS4cWYWBYt9X}~tTm6(hUP0zO`((53M(V)8e8fe3K!C};d*MzOX9w(#zbwppmOrJNK>Lyl~~$ehZB#@xD*_yFu~=Q8sjp?zzveL z;iAYHIc@i<)Lwm>(=&`Wm;}ozN)L3q)#X+%9Q5&HnYoA&6Yes2)L6da+v}k;)7f?OZ z&6~0Vnt|WG2{ZzOzZ7uh`&Nr8R>O4%FeUOP#pMNg1Oa=R0TXax-ovmj%*8aq2Xmy&J$ z3XOpJL+N%0iS)PWs$Jby4k!_K8;srr^!9Fccsq+X#`s@57#STk!EEM94Ez3F$FEr> z@#LDMI0#gNV@6(IE8m0&R`IbfWzM>M*z|9vg;?I^u6W8^Xu)(Zz`5{k;S!#F)I^E# zH4si|`rSR5h~ec*`j!kH1oW8^JnhHW7{V73@cRm7w$|m5>F7t*7p(Yv$x3=YN2VYI z$jiy`puY$Vl)=7!EjlH|OyLc?(=cOd!909qR#p~%u#}wKYert)Ak!WZYi@D*ORnFF z%Nv!NIsh8T$NYTb)<8uQQ&Xb~ZD@-h^ST*Ry;_23d<@V}pIKNKt&ZBp4X|H?wHlg( z>j=ni?Ia zz6uyjBq9)q%=FHcn$zF$9YqrIQJ@W*b%s;HJgU2gnTcsRB5&1)6ZjlT%i)=iHP6%0 zUpLKw(by=c>)J5~$0@6xRDLTlCiQ8ei4HEyVcs+_=gTgurQx>XO60K{8c|1~R;I7| z{+k<$9!_-B%s{1cZd_^BC*KPnzvi^`ioX8MX2{r*$#vB^)t0S;$mHZ!nnS zRqFAvz&+-CRbtLd3r3E)ii*nTJY>Eq_j~t9alJI6L=OaD6`TT%TTd&k+t+M5R-DuG z?tzB05X^Yq9m3WKZ+$&@KN%D~Cr}5-`9C1!GoZCY`FyOeKX4f+M&+E5uFGZxZQAQ} z=bo`@oRG)8Ss>P5y1QGJb}xSqaQ`Fi;x{F_^w6>v&CV2sZr^^{!&-+^)ic&?GI$eE zzRSLg*YBPQwdkNL*ACdtdaHNU zR?Nk9bw~Ke*Vue^n6Khde*Rul_0zHDt!X@!plhk+h}pe+-6$Y_N=8{MIOofLDl91Y zH8p$A^F)W8D1R)l3o%mXMx#-n8QhuampwG99)YMhRF;bh7#J_TS=U%p8J68+Rguim z7~VQ(G*drbz5n&;CH5zIMUFvM8Ob<&X*OBLa7rdH)Qlqzn~qxycv(pw>AKWIJY4;=1xzS zntnWKI>zv6B2^68zI3^OXy>+S?Xy_<^PSCp;_PXRbjS?vX+-~!N^K@!M-DZ8ewu_yZNAUua|ZxAsmrRg^{es}2H05QJT?7Hyt#mJZ#GxSH% zh~SE6<0VGzk9CUpsGqN6$wW{~st$>%BR}|FoSz;IM3jPfE0O-dtW3htkN^VorejWS z4s-`d4}mu!Az{42FF;8MXgc3723Sa#*r#M@cso-zg2QMe={jppNGHt&Gayjz?zotk z4(Le2*~+Ohl9E?I2E-xfXxq*Q699`=X~6NZXYV4L&oWdZYVW=8t1f596`)!C{P|N( zK>^eVphewf1831;w|IW;djj<^9L@^1seEWRRY{dP@JLIG9C+F%?VDmo9ic0i;>R^S zN(3d|NSQe`bVSq#y<|X_WMYU{*PeNR;Qzp|1)WRr;HAfEZq7ul%kvz0rTZkzH*YS~ z@AlWh;Hx2!{umPAs8jU38E_w%j&R5xya2HZL|zk)l4s+#DZb~@2?<_6#=O8dV8`MP zG(ZR*Wbsw6`TM>jZ8`DpKA?LA#V8I;JNa2 z+f*yNpuo>O)f=xO_9QUVa{*HV3?)FXu?@tz%hRjf)g_NZBa#H2#3Epi z7Ti{8mK2Z!4p2l?`99$zK>xjizg=cOC!xc7pe0L9s`C~+GJcf+biG8_Kt#fayUz)8 zS_(xq_Qbxu-%15Hb8;O zqN76@78a(ip-~wp+fSH3X7z4oF34AMYesngb>qqkjA_H{`K&D*#N5ht8oe-l&(?@+ zN~=@DcN+xT%*q^34{OGr85?sxiuL*8d%jDvS--19f9LbZNP2QU1C&TP^g3N$@@0o$ z1drWJ_hrG-VdZ6O*rW5mio2NbtVky2jt(m+zzX*HPF`8J=}BDuoAObbHI8?bMUD^- zJDxMSetu}Iwaav)asfo|kwPcyWmHMepN=O^Z7f2$mhkix7}pcL6)oRvTcxV5E;rkF z^rh4qlk`o7JqXAtK8ss0JNV&P6DN9cv$U+N=48zc=B1xBS%^vSvh4J|Pn=i|-m~;T zm(ugvk=FAtrB=$huBGuYH+KmJYr+vC$Bd<=9GL_yMDctM83YE(s>B*ar>{}3V1H{H z53U%i34hs*mYC`!Xz#^n))I)S_jz9hz6Evp5fHP8vj4rZRSLD1BlpVb6(nMkNA3}MZfOpGz# zyXOu)rW*d4-*w%c>vuuGh^6sZ9&~eqUj!RK9tB z=aa*H;E1g>PvT7>YPL(Bc(lOg+ZRbM`_^<)?u%8`n$|LXB<8cP1(ywCVgFU}yz{C! zYU>CRY9iUp8W8}yAF*brDN}cFyG^m z)a?-c)8XofcBAHnVGMF%z4vWU$^Ln-0iScH({oz9x-bw@SA6)FBd5-MM4ycpjdkY8 zA@2`HqA0?S#tduE!3+pRp0=s@4h{}Let$T3IPJ8n$;+?E00{`EzMolC6ccuf zS54dVZC;)g#jRUmNh0iUJH;M=`2p1DtOpK15%j(F)XfzM@0p*d=<2ra%)bY18zC<~ zqE1KfzPFbP8~Z8;D09DecR?RZFE0=H@F@1NhHEIbFh{5~BQdtaFFA6(;@HqoE>P3W z-p#`-gHlv)((>KRYl_=sd@ke>)WY4hF3aXM(p
    (rZY7WTKNNd=$g70E2^}D~HMAo7Z3M{Wdeny0j+q z9N=8_2Yc#cD=Q@xRaLAPTB@OABE;ChE##Dy>2Ie$O*F@a-?%vEprFX(hnNB`k}j#d ztIR|!rOIMrk~Lhc?+fx;U{@An!1O0WdO=s~%=BhSB_$HGkQtuBsV5_1YOUz~rG+N) z{2$UlnwL{jS}pf&J61REET_4WuCo1Z9zIEKcxA0Ix2tvdLoNA1Td-Bj+}n~nA`pcf zWj14L89IXQ?(m_BiP7Ay1LuR_{rsq?E5J*G2ga@U^6mNL93AOE{vw~8OTc%<}4({;rWv^)w{ByrCOIDeC(RG82$0$OV&b26AFHq5*l@#pO07R{8ovO_6v zItu7Xju^c><63vk@zLQT*5o5>A;n$HRxT%)zC z^%PxFd~fsy)f5*o-f9AxR>z9{?JnBe>3Q1aq91Mgaj!}`uf??0ZLM0~1OW!h9547q zPE^ZUE$_83+3`_qiiIb{>`^_+!`|QDXLkj##bJ??X9W5SmEX%1( z8Ff0VN1~xN{C0ml2i0$CMFD5|`n2a;mEEJKD+zSc?6R|*+!B!wM2blV1wvn{4Ow1T zj5i4iW_#C2q$_m<*Lb&WeTv-bnX|wBh)}L}-p#4(n(kCS?Hbh_*LaLFvlp2S<=PWf zjNI(u$K$GD1}Em9v~A-0H2lPAKoLzE4##8_%J5SP?lL(_#D9*FlhuArBFr}D>&IeV z*L6dVuE4wtb-Bln8Z*T{M+}S;25ZDL7ibFV8W<4-)93lvMab%lnQ9Hs*6&B9yOcjn z-j~YBU)Xm#MHRKmM_(?*F>~sC;ZzbQVg6Ic@u`bxmExM`MnP{5QMM65_S0__`*y!A zUrCf@%&H*;MV~}Xu}Z;U8FXJl!u|VmB~%_fPsiPe+gAk$SKO5o`#iPhXkCjkERs|5 z6KR#b?IscQi7X#CHf=b%rC=UB6FFQe|~HJ zQ*>$S23hFz(z~+$bub}GedbabvijezePOJ$%H)G zYxQ}mU23b--TBzQnwX=q@@LkM&f_t!UIEOC@?1Pd5mK^_NX)0nR&wJf<*M((4H?eYo`Ci8TQlQGd$E&CQ*& zw*tmxzg_WBS@WhY6Ay;$o|}m~u(;sSXWCx4C87F^^6EKk8g4Zrp3l?-!O`1ZhGhxhG_uJVA`oB#NuX{*!TzTA%0 z#r)S~?YA3hSo?UuKJ6c;H>|-BvR@d3vG?zXa^YMU|8KWQLYm0oe@^j#wqE}EuGgdl$1q>MNVV6rJ|*(1k)kt1LlupDy&U4#k9AcN-5-@p(f#>pM0&8!6MYmIu^J3U zuGprIU z(bWF!&&|d2f@IEFd_7r-_sy`Y!1xlCe&Q|*$&~rMwI?rQjwp!R{YF-@O43uPC;0&Y z{n?xjo1%&sUlX?T7Tc~#N5vFha*|5@oIu9!h|}KQ?!5LD7c9U)*kmK9O;?6ZLBhqq zz);*&R8;(!ciwSqs^kuy4{6nEusGahWz8=Ajjk+uhO@9BTcTN@|1ch1UkF~Tx|;8j zwSKqdg=DBdY}svVXY?{O#k?w+_2GlV!Sun~#KayjK*CU+$X!UUWllw11x1Tz-n9-@ z_e=Z(Lo`6;41~d-e9ituyAvzCL`skZ4KzM zCIV^*xhRn$()-#{#>Vupm0?K{7UqIO!S!w^Qx@11o){8&2T0*!wDMO1(%2V>;C0cB zog*(CYN0sQOc`U2F7QT%!My=LnKX=gh4F%-!4dlF73q1OG^wJ^__a!dD#6BeS^RQZ z=?g6JrQMc!O9VfE7z`I;3Fu{_VqyaO%z!OIe(tzmI_6Sth`2`pvb`fBvg34L89WDN zW_@%ZkI6}$DMas@-yu|m)y;VDdkp0$>#wd^d4TrJ@BC2;Q$YVV_)x%To~xDvB8eSv zmR`Vyy`NOvcTEj=wO06kfG;qii;KfqLbt zBTVDxc8~ZxO5fn#;z=6Q9M<;}QiyjXfL4hCL2fZB`LV-Q;;~DDMv@d~L{Kz^-$EfisGVNPwdm8w-QoUJ%^9jLiAhlyVvmd3c|bi~105H8sU8rTT_f zSGyzR-Py_kCIYr#E2?)Saji=RV+Jf&8U6VDGL)PXPg?cTy{LcTxk&8&qsIqLoEf$< zBnFQtAw8gfbzix0N)yef3?>+`T5)raftE)|6b)E}QAFe=P;xI38fFa^#&ajH==~FK zAi92c)mU5Rcalbac{QpK10i@g<8eTht%&>S**G4L?de|V;$`*7Ce-bv0#ucG#;rK6 z?nR(ksNuRX)Ah4`3m_mSxMR9NTOHyG#TZy{Eb%(xxa450Pbd?z4J))A1d>6RnzR;I z8)J7k6wRj~X6!LoYxjNhZQwolk( z66WGmz(KL%J32gz8a;WczH^KZifv4mk-qRbJ05}~wyiN`Ra6YCKR<36IKx=;#Z?@6 zka(Yu(lfPOyYNd?3rIZD|9D&H-Pa0vQAN~f@V(M8X_5#07Z+tNy=J4iY9*7_AolL0 zUeteqVK!z^E4-p@qX#P}Qgoc0A;sPsW)C0YIsP``7D?@_4xiraFtXg4v$Xgac7DgO zsxEX^`xN6__ycKn*l*fC@qY1U%&L9PelsZ>l|MN{`liqc0sQY-?y_{jQHE+srwwvhhBPq z&0=-TmP~I%=Gx&oLK86WWa551C$V%&(IdI5O>$>7sZjJVmn1{%GmXvoAGvCs`!*Q0 zxr6gNgX|_T0j+b^^NiVf1VSlhT=x}D1S&KO0<9WdQlm}P_Tu-BKWW-b*o12|GTLl0 z%QNV(GHU0G5Cxa-MR#=6YV;LVu-~d+B*Xc+Tk*Yh;SFa>!w0q%Q|G$*Z)3Xayqp(4 zn_4p-OZW5g@=)HtrjUs;0sA3d5D1*uABUcGtUi<;;o?%HC&n9^&>YWh5}+(n^4^95 zChTeA1V$Cm<@#X;2Fk{-g?%dr=P@y)B;w8;m1tTADl6b*H?x{#?)HO#!gi^ zt-*SK6F_2G|iQGiPH^ObBQ<0`o=qr3DVEM=PHUa;~KFTng%!|Fs+0A1&}fKfK&} zI|Q4Xn5XAeTwGjG8?ImKiy`d_l9E(6L=GExnvlrkwylE)rrqkGTKa=kCT5@PE%YU? zv`UR)g3sk=Mo4xB6ZYEI!uAEnp(bBckcd^7+CYhPKieO#K0m&7_uf4y zm|!{s;jlMVG!-uMsfg$ek-cf20Z^E41KO^GRZIIkzL;i%w@>tw2O1lmW1*jcl9tdF zor6!4`hukgRvsiJg<-s6)|Y@x#>U3Qt@!SH!P^Cs6H2@?=at7`n7RWRNb0O|>P$n; zW-UL|EHJo((aN0P=TuXjp669omPuyHty{OiS9iZBmJJ$AB&^uLU@QTu5fNSxc!TaT zKUp3B+81Qw`?PdVlKM^MGq4Y&`W$0{I@`M9Tg3PV*3W$&qp}qu2Q@W%r^WA| zq1BX3*}MqI%S+;O@Vm(zQ)V+oLfqb)B_I8C|D_8w{iwvmN3c!;8Z(%C-@^u~j_=w2 z-sW_UqA$!}uI(;1gl3fM8lVCb?puf*;6lGuJl+Env8Btk4vQWG6;d+W`W??CC0=l^ z3!UxFW?X+r1V%JoxFeDy>Kes*eHqfQiKPkJ=KS%RUE7?!J$O$R8-8O~&AJN0To9ft zNmTf^tk3ot4XkMJ0ayi40iH~dy_Fwpc_anVoGT_ezKeZge=x1jDB8rv5RHXI!Z30k zq;;@V;N@2o&IV>%0*nGg2T$A!L#dtU)YJMft%q0W2w;~p92P)FxM09HQE8L!5X!;~ zN2kC*4z?p&e3QfN$X|<#z{Ek2-3BI3(Q@?Y!XwhKRYpZeN5R&XwKXW>*Zw$ZC4n!nw~c&+2zN z65SgVHEr-H1|G;j)6?7gP}V?FGha^>8~}dOo_GP|))q)KVCjk#EcEXP6nGPab9ud5 zY~6kwoOpn$3}X)ZH(LB>eAc#Y3|?OSyc80dPUkyEr=WSi>FuRPc^4D&8%8Z?AS2zB zA4cw)%Jyj0AL_yu@emholm4uku*D!g3`4=)sY=4){$6gckd6$;`LJ)z#^BHTGjKiD zbhN=BphVk6KMf*gP&EZs5rff>>_A6U^z~td8}2m%np|Gqy;C0=nAiS1KcNA4D?1;h z5`;7D1O-H$n9XTUkJFt_%&Y#+TPa- zY?9$d%iku(zAewe8k-0!j_(YZ{s>*+0~0dFb-g>p*eW_g@4z`!>CyUx7$bFn6qw^K zID3EWb91_^I&apl+5Z0R2`3J%AM9?~mN1)!@7Wwhe9XJ2ksr1*&j{-npn8M2VnnIL zh?<%T5QM|#8xE|o^~B!K%+7uT*ybl}10r~NZvZf7B9>4kR!5qCd20xh&)+aFA_%s) z+!pJKW@}kGxOBR~q8&wTN5Pq0xm@W+~+)PWVI{_8S0bs3IF-14T@Ah!z~TY%m^}S-t`T!`L202M2aA+hd}G9gkqT z&fIa<`^E#??|eF}u{)Fu(JfyhGrPVl_p2!jOEVS3G7<)-S>6MFfO{2(>@|qTF{WT4 zhZU$D&xQi6vg|Nd1y$nio`~W6Cn8s_;{7-*nFpU5D{M;A-@O|NCjRKu)QBzqtW1Ewr)z{K|CU~6H#>HMZ_IOW{((C|l< zK|jQb3v7tMI_VuUoKlZnnW9=N9uJQO6h7#dP^9Vcw~cwGfL!jajo%1rl|~R6&Nd2< zj*fy`7EMgoh8tuvbAZTv$*geWVPo4Oa|<)brR>BswhsmzkC84>xTz_VZH0*)vW^47 z2SdC~Y$W-21QzcQOB?PjvtQ=J-iR{6<;Io;CRA{k&l3)hjF7_y)6mkDmnf1!xUIHj zW%h<^?A#c|;~^}GWTHMo3EAYv_7D(ISa+8*BL>%ZoNYpdj!c3oS17}J6&jkRtX=Oh zGp{Jn!kQ<}EuPSmE#DU~st3FM?ov}rv;PTd@U=#VMTd!s-yrdBf;~-(2^2p5Etrw`})P3_|dKBwYtMmwWqf zYZ59eG!#xo_NF1yAW1galuh<%30a}+Q7Q^0gzW5Oh3vie-uwS~-v7C-b6w|sPmbU3 zdA{SmKkGgQ`R5JCr3o1g4R+|M^*XctD{809Vf&ErPhzMF=Zk@!C$|gy5sVI zMuWJs9UR2qGqXi}f=5CEn`W*j_-Ab#e(H}K8*!&t!Utm2SHcCg#etE0=C~$rr9^{? z8MTFSd@G3Fh{GE^8ZRH8PRb9LemHD!wZQZ!{UL$;{?|3n5G_}7nP=PU1=Dwwl}mhR zLcUwaPuW@F;qy2x@nPvFsb#(l(R3s)=q4P~)h#Lgp+eT@vG#`~wjH9sC>UBaDyEGF z2i}kwy}Y$rTcDtz0JXG|6~5SAb@eLzW2#vv?FTZ+GvtJ$#le9F_RYZSlKSO-8lp45 z1YphB2Xz$;Z>bi&yY49t)`(1hR7w^nz8{<*uhSnX?OZ!Ubjdj0RlfJ|Vf87*sY_~V z%7Ksy(G(5>Zr^9~(??MySbuDcmX%eAc!1avckc0ePPS*%=PX~WufKbw;jXPMKdx5X z@_*5v!v6+zAJ$N*y{BVokLR&7Y;`7QJ!~>Tz{=f|q|C6N_JiYvbN8BGI6Lp{tHJt^ zY5##08#f*$-j{xd;O4mpa|5hN8tazvyHp{MfRoTVfxSOG?vV}7#>2hFLsb_lD#vB6 zT-gN~sFG4GG{a#6<_tM@(|gX~6H4xtl~7b<4j3F!KQl`EZfq>*Me%8n_UIumee~65 zJ}){Vt{`tp@sRoaK$Cvs48Kzt&+xv3hYop3-h(3%)EQO4n>R&y%U#m2@IWGY98xR2 z$u|F;c^Wn(GjB#BzxzRpfx7t^&Mkq?1wKMYy|(zscPUsu41)0QhP7rV*p%TtHpg-Q z47DXkfiv-Pd)=v`$LFY3pwH(}YA#a!o$6EZFKgab@MIj&Ay_pvfSpjkUg>$B2?Gt) zmn6|bSX!D(EmtVKyo$`nM9)M9NRR=>e~)Z~4b)$|vM3K|$RC5PJ6x=~&Rli9bGy1e~!kf#RkQdVC5xZ_HVE=*io#520y2-g2f%6Co6pzM-gD>gKKE8Xf zgV1<>3fXFq`kT^9Z_@VTDHbDygri+~B5*aPK5YDNZhjrNnjF&s*~rg&t*M`I;(0@f z0Anl>*5l^1CPO<$CunaWVU`(zI_`{!hzGzS$nNH>#{?W>E)uOwsDvAXcnp;c_vj&~ z3y7o%3k!p$f|kw&F4&5rqD(SzKkfHJ6R%zF_jO?;pc)Sc`eohiEf+Y93VM52>xz77g%j}wJ$ zDK+&2%#hvj==9*-la;lN*jkt=F6cFCmA_JmJ2nb3Ys!e~8szRcEJtO=>W2WahBd;Q zO)LMfqOS!izkKLuu$Ey(;|L2Ao3RgXTj35peuxk~xBW1{X3cY4ywZ5)*s%p>4vy1f z{^tV%>wQswAw5DGf^7sn;KQT8IFgy8YwtndZg)r2{`30)B2=Y1ys@O5`BXZ^-AP*! zIsvmDGB^9sxHyB8q;&Taqu^}|3=NgMT(|>rB$*3T9GA3s&&dcco-jXf>KSYTdfcaF zD0c5V{4q5(5b!Mi`dv{GrRb zttXkzjh?Tw_*p8zNg)sCfP6RQTgV>-kHzMvkRCuf41JXtAQcN?7>o>C)1+gZf;lv< zK;Usd(H+nv)Ywq!}dBX~GuQjBDQI=c66ZG}1M&`w1wohzlZ=UB> zR2pPHckV;Ne>ewqpxCR+lmhq~Y*o$I46*qwRaM$7hdfkEWqeB$t+%mrAvD1*0+=+YG|P1KcdlXf!pyY z?5?{YmcgxDXPT`Lz(jLf;ebamZY8X(&9&o56lt4y3H{oTfy*v74u&gNuAF&JLY3yc zN&(~w?;A*tZu2*K9A!Swp6x{AAc}yfuWFTEly6JQ&%v}&0t_(?jmz%pw?O$tKhgp#~``_@mGnEtoVuj$TBrKn>kPTI@lT}x1f}DmK zIw&|8ksE~i>M(=)Ez6XA`^1M3PVFn|-5(a#Sy4S%3U?G?9Xd%$0*B{=rldp&OHYA9 z01QhgUpGCqxx>(kir^jtcuMXcAAOS}%y=Ols^S#uVcWjG$JHgN`ZrrM&B^}XbF!S2 zG-4h8B`Ha7wlCA`^U;GZg}%EHFjH6VD2d znq_*EFm5ma!PY793_y+MMWrdY=eqp-&!#c)6bat{WwkIJ=y!+G+6x+Qe=rhPD=FGp zg>}o$4Gb^uw7I+hXW;8QNmRh105xl2*!{Gjj(yK3NT?KZNoS+>NP0Jc|hun#{ zBWBAJan>Ustp9g_mH6g@!Ygl&9vk6`%F6LO0&1CN+S~cNna-c9|2Lq$I`^q6)bfCA zJkQvLU>FD+Y05o;q;Aj@tCU0rCl_ov;%8xuhPp_|&2_>bp)aQ@UdMD#vz2Kxpd>x| ztY-D<-qRzIc6vdQ3JO6fx4DFbXcmuY52{Twy&g=P|EYA0M?5A3MwNibNCHQLqzR}2yH+uj)73xgxlAodOn4@2$82?znG7`48>bStC>=DD-s+E)-HL3mRmBHF)^ zo`eJvmE8YCML!`JMpJQ9R+a;V(hm9U3#BdY^$h;;2UPg4?X~-I+wGx|(T-nC7fwCz zW_-|{@3LdhF735}Wk2zPscr==Ex8*vgu};3zI^>JEo}|x{Dj1J|5vZ9(Bp&rkt%TA z4Ig5}b*8GJ>Ik?l8HsIRH|-2T3vSu7#|~Qc{MxzU>PFH#X>vzVahWbaPfx{*Lz8{+ z;~}1U6?2g$BXU=Xm7d-BxUK~f*~N!%+}L2#SUZhduV~OpURin1lje4lm25bVVvX6= zq7{#0KSG}eW}-WJ+Qv#a%7;!MASvnA8S>*nGUkT>Ua^eG;cEowdm$?-Q7QTS$u95o zC}&VUTn`7Xqm-30FgO9lgfg3>gl$&G%L3U)(CZ<=$&X&dFScce(3qVf+*rSQEndI= zt5XI$5L^!W`sY$*E(hLfF(DUk`Bi=xQ~%VHwxNhb;O@Ed}e*+is0E8x2p5**xNnxquPT`i(|f} z4=*dW3y1OX{u2V zZm%CJS7tvU8=W*n2pd7>5O4$*$=P$C=-l0(L)%P7)SmsuMZ*o5tKroKAO`**9j~#gSZha0Hw4}hJBcubF?YA{FAl){R z4y?WQTc}-KdN`V{0s)2{6Yt}OnC>UiOaFWGCA65Z4_-R;1a(pGU%PQ!h9?yjQ`#pH z3qaGRe`LSMGyIcwW;_1}!he;f=*$gJXXDhKsCl1i1H;X=$6$NU!biR^-5rydoc|KQy+`%XC8eF~aQ_%KC0(Go_-;R1 zUvO$WeLAno#(OU;@PbLdcCja3F2)sMW$CTH$B^1{%p+b zu)4a*!gjLc_35ka`-Q`sQukkYRfURkW_=UbBoW6X@}Q`$^StrPpd{FHDuNXC42LtE z#^yr?WXbGp=^>Fli=to5$#xz--Pk$Fb0@rguS>ce`kIiyyTSb51-b7A)&C{kCkgO8 zXhdjrp)IF4=Jc3W!Z<1#&#+!XgWT~i58nz z&fmED%eT85AhaxRQIaGe7<8mQUM&V`h?cm)auUu4IH3=xReUkx;<4FsVxlOVUamv1 zoJ_@KaMRb(+k)nWQ6K=(0K^sqf7@Fv&|Lyk!=x?c!M$Mu)1Qp)h z@d6x7y7eDr2mn`Jz7RoGHQzc#j7&b4BZQOUK+I|VOKhaCN8fB#FzyeE>U`dsmR#8T z9W;x!=2oqnY%_hEMS`Y5T3ZWn9AFbP;KISPyjoe=RjdcK4&Pw}T z31k98hpzF6ZNy}fV={x*h&Oy$e&(CqnH9f(!*K_nXd;wjl$jz=AN-PoocDg>@!OAD zt1NJ8LlteCb2fWZm5W#4e9#qFSHxeH4bKw?deVI!(6)$HDu@*cErOWWpy$^WSh$g^ z1622nUJ%V~MSRoAo>RzSLz)oF-o5S!!~j%N*dQn2-aP&(E-rk1dONQ7PG>ms#-gVh z;>l32l^LXwA6y-6U}p5VN>-wzrPV!ln4Om49TmBve}7}ggm%k!^6VjX#Ut8mCrPnG zg(j)P1m*oHHe2`5A5aNK#FZWDm7$FGsb7OumYt8AQ^5ED7`yJ^a4n=$P)T)RI)NxT-&#)V$&maLgi;4N-U^(Vreidh2=tb=_;9AN-9f4I3W?w)0 zq)bYqk&%(H7VyqpH6=K`4FT2vhN`mbFVvXSTsne4BhH0|wVo9H8Kbqmru3qCr(Ua1 zdH=O$-s>-uFW=(9X2+e61P?Zuq-{O1W_k%J{3@u!LtzRIXx4N(awluKt9=waIUc); ziVz_!l#9uqj9yFg*wwhBpu2dWLIKbiDfGYu{vfe6dl)Mb$_HB2psOA?TJl}!P#hIb z+9GzabfP1R*c|TxF?U!?e30^u!?DKbw!wvP!71LJNcg2nUkwtScT$oG4qoJAppbtF z%Y;r^yQgFk4B!M{0%c?v_*UX{9=aWYPH=Fp(hy3105Z1IUB2DZ@hK^FM)BC<+>gh2 z6A}|?xODdDmih3Vh)%oKEzUU)s^$~Eh2)vju&|rM)x7fwt3urA%JX_EZsUk$A<@?# z1V15zeiShpMQ{P_@Pfj`V!qn?h(aNyoaoESK}khE_}x56-&#E=V31!POH4j@?wY{y z=={Bf57TBVn8$^>WZdd`-=YwE2Gcq%h@|mkPA2NH?4JMa8=;kjhV+vXu5bx30h9Ev zV6sLV2m>S}mXZ)j!+4H6-8atoq_B-=c(|(iw-p6-rR5mU)f^CD>KsZxNQG|-Kjt_m zu}Sm(L8y<<6jAfOzk>w9KQY@IEI2?AjlqVUDRjbnFHX;?&K#}?Q`9p%2`qMN^AO8_ z|Mej#cW^Ldcqfs50@eHrw#qtnC&mYvo zeM{{_Lbg|nPTg%g$cunoAAtcJO9WA3FD34@&!1_TB<0ANu)+~tIi(>2eaacaC3)*n zww&gn_jf$eQuB=eNwl}C%hCH7Z;g%Gq!(Xj+(6 zac$}k{y7dgAI@05$YFT2LQ#UlA?^~)w)*6n_X%VLg)uReSOeI_!}h7zgDv1Ita3jU zN8d|@+10Y?MF^!TfE5t&aj+tQ!c|n#=se9=f~2@25=J)oqXKS)aleJVdgcS;rUWjZ zcP!_@$4jGO2MsgmPNn(FWU50{J7pxN44wPc`}g_3d>KV}2{QH;GhK3`u1o4x1TNF? zJ+!gOv1Wi!{_2}ICz;sU;r}}`VM_;vmR?sbRZ6=C!Rr%yajG-z`puiep!0r>o5D`y zjN(*ER(44!%v4VW8Y~EfVA#D5l8@BG`>eDL^FOG~b@|6FpQ25p1lR|_SP{m~ktX)H zIaApl@2^TjSOjlVoE)QASru;lSGB{#ut@;Te1QltBqT-P#3Bo+tbTDI=#Jv#8`*T> zwP)H~z#d)Ox9+K{`!Iz;FLw-=GC(hce36uWE3AEH68I%?{?1)1LU;8bUG=~oo%~DL zabJJ@cq8tz@XH4C|MqWds7I{R( z?FviPw>(=?;2AsaD1Y|24IGUSmf<#FK7D$p%&s&Q#)iUoW>V-JLT_39`>1n8zAD~E zU;daoH2K*5=v8$)e$H<6Q56(Tll{#!mq<;sZZr7{Fk!T0OF%?=OUt<5ZQm+o2uX@oSh+Mzh54S z(MfZ$o%BLd&8_ngN;&j-l~?>3D+Fo}o;F;_+6)ect-phoEr0JY&uvC&y^w<7&ZMca zP)>A~8pj?t&U2Iwf8*uyEper2R|c~~7NFIdIgPZR-DxU=z5*u*76%ZRWme?EbaM~MHk`~|wz@uUV*D><04cp;A1o!yh+woTY~x|7sb$zSRCwiOkZ z$-X+VP@s12pJ~JOJ-Zz5l(Yy1!sZyDT%~NvkEfT}mj4Y6vL&5Fh-U)r;8vv;!&&Ns zTskZJUmm7;XmV~JGG>_F*4w)U?Pq?mS{unANwzqcT@68TkyHEW52WdqlZJF8x=z&F_19Y)EAH(=QJDb*{n6Rs^E*HcMB6*bge;EX# zAX7kR4nyCAVpLXzEZ%87goy^t{UJ_KY3JMsY<5BpZes+eMvj2RecqR^3nzM|s0cKA}mLXq#jQ$V5lyNCO{NfmSeH+-#-N~$7M6}o!^Dw zVp(lpsrS#ZghU_~hJshj+kOOeZ*OJt^7GjU8WuiVRd*OP0Y|M<^%$GJ_fv>wPrrZj z(P3LV2cHt>h_=jY>#LLZy3?n2r<%m(=03wk{M6iKydB*N4-%}1WT02aZ|3ll>VNrA zc59|J0Ay+N?^N!)fgi2A9Z!wCd2q+>SQRSc!B=3VcR|94uHf7`5_FyMNfZ0;Cu-Qu zygha7@M}QuXouF8IZpwB>iH#((^>Y$4VWaJUpn<0XYIo0I91$3CLqID+1Q|;I(m3t zYl<$y6CeLCp)KXzaK>CvSlBiEkh^=fu*2e*;z`6H-m%Q-|NZ+n;7tFjs$2IIm1dRh zy^#mF-knS~H!y%uz-HaOiudndv%Ag0@+vG^%o!H{22ovp0}C+Ez(I-K`niTM}gCy?IvW{Xf|BI4aH_GF+oIA&D`zNZn~$cnZWk(=yhibJ^N@exyr`^0tByB9f5)fFQkR zcYga<5An9;X0=vs?Osn&HIX;8PMeL87kGas{&G8-Xw>GY0WmAV!(PyN1>*YG*NNzg zr%6dub)6cQ!6V*cIVn~DOYiFrYpR~ z4GawIbbTVKPk_OP4H{@9GlaDiX{83g?>>FU7}9Xfz~KDmI@RmY&*hb9wg|EtJF%f- zVzlSc?v&d{$$^lE$1OYc{G&UnvwV0Dl4Q^Fq=^9J?X?jmeqeb@13Gl1&-tXN-A(mZ z(p0$);mW5^pEefaC8Xq!0kGBKu0VSTebEi10RlLH{VW>US|rdEHpA2`I`^9q@ll9W zxCVGdL0%s2-B0MLr1y#+djC4cth2sGR7$mxZX_;cX}*27|9I5G@;nz-K z0gW%Y8PDs-nEWweY!B4`KK*}nGNQ=jcINH zE7k1U0{fSguhFKpb#|nJCpn4_DA&Gk5N3b2H;C=Sds=gUv&>4*a}EDKiZH9P1@i~p zyLeRcYU!jcx!05C@j6`{qoaN=yd;Z2Wti}HR@5O>o7Cg68-vPDneMzg9mfD)8Bq%P z4;A8SZ@IErO3&Xqm3_Rm<9vV?+qC@n{8QPpsee)t9_bUOJ&|f5sLt}rH5qO;4f(i{Na|o6Wq3 zQZY+qVkTMOrZR0v&pLR$5b+DhsI5ydmrnm|nt!#-Bn6xmB$g-UHJK<* zpEToYtVs1yNjWONI4#FVTK!68ztC{N=XYt9dfXDHZz;v_tTBC%+#9TXUV|oL@L!;l zNnd@?tjt=;g{P9`$|4l0TwLqU>_MMOAC51~rR=R3ZqV(e4s!e_BNQxBHoi#FF8^0t zP}z|3f}{dnsIUO#<6F_qt9D;&n|W2k_QZ0_C3@7m98w+okJ?ALMD?p-%jrFE$U@+e zS@GwOUe6_$%SEP|^Hk4gfGb~v%k1q&2{zk!sn;2x){BK<7ShW(fW%gf@r~@vBeKs!d7O72W z`q%8@$A(h)%{wK8AI;bNjhUY4cG8{fyd0rhCQY`ShEXB%=a2o1 zVQ(@Q362lqI#bDF`1yIwnyq1X)I++T6?$VowsgA3`xEuq1w&>z1uwkdnWHMry2W7V z=G+`HZ`0glTB4O7^)qk1c2qJX?MouybO@e-6`d0iAwg`|H*q4%0TNBdJ`0-#4Z&t7 zm#!sSjSF?@PS@+dST9CaT56OoXw}Dv9~w>*7e8c}LpN-)R=(P2)BoY|rMeUE)n4I^ zq?Ps!k8E9(mk?!LGtv0V??Us~LU>_zQ9q>b!t;Gb81}I8=l!}H%fi@Os?Oeb(qbH( z$?x*>8N3GS?>VRAWDm5f?$y}s<_i3|FP|IpfLYqgVM^r5rIvU}m+hiFvfj)%fdXw2rvruEJ5Hb0hm1=?j&DYMlKE z$5(NyU!L`>6UBa=jb&<%z5nmbs$rz{R9AYot*xUb?*8BU#s~8NU(@2__f7G0%94g$ z1skp;(30Q^^6I>Q%Eh`A=o}T z74hc|=*a*T*=jyA2Wi5o9%jyDW*i%QP;w*;kLzju%KJ|;?b{$ zGIG})g!%Go<1=rXRE8B#i6&2yd%b{EvMy4L8?&3B1%b~OB7RG_`!`&-w076E1)EUrSmym?+|e!rvUz>x-Q&Yh&y;UOHv`PDZNaz}aOflldq6>U8z``h_)z zO^i&Eh)=WwT@3|Q$V}Kb=9RmDkG5Cl_~rM!2<6sC3i4pk>(`zM2~Z0XaHKd?m{5o| z8AS)SJbSq(HL1tSCHQcbA+{*+1*3hWY?6v+O-r{xW|w6*0E zhr9hcySPf$L)@Vu1G&2pm9Lz12p{0(!{Vey!0xAS!muIh>@Y4JrMlzY?q z>TdJAO^vmF6VDKkVM1JOpakt^hCZ)qi-q(%N0-awHB)2NS7H%DF~d9LvMZ6KHW?z1qh$yhb;(?o9L{4)a3| z2ZgJv9mV7ErF;P}1qIa6W1>WC=*;?V@VndwRm#C^o3B6J6yK=tHaZiq|GY{s)Vqdd zJ~w0QVil25i{`iz-EW6||Lv97+5$+nYEBKiyx+6yGziaPKu7Qo&^8g^^5@gl zgpG|ya~GS&-vl$P#T>Ok|0g!@2&JVaroV1oy{YtmDJr@KYGn%l!EAbEG61LG!-oQ9Ig_MFQS~V99T=#%p__tU zn^{64292W${~@FuP>XB*RsI_(OLaks!?3q#ub_xbtX=-!d(hoWMYj9uaARbQydod1 zN#gu4IM*TMm+QCvFvb)FNd2+upikD(IfH`z6xv?IJ5rLmgMlv%`ELSB1jw(rQR2e8 zGdMViJP9`@>V-7JS`M>g;35v}^Gi%R_>)Y2pKOA=X{&!^+G z%rcCYFP=TkSTg?gFheK3^>Hz;q&wZ$&MeI8Zac@sc%E6&p zH+MAiQq}`4goYQN=%kPk5%p~P<}E$uV*UG>BPAU}?q9Au0IbyuikBTkR-yEQ*Y#J? zN$)-6{qyuauAFwxH|SSQO`=})(u0zJ4i3{;2OTCbM2JhvH+&-<_>r_W**M$$Es`+f z64;HIVtKxZsczk2dC}aSw4Sho!_Zq!`l@c8*|L9d1$|=`!sd5v88ulR=$KmJ`55il z6cGnz3~y#&V1V1UN)QMWxq)@Ar5;2`(B}n(hrdLSbFhAY)(<0C zGyL!iiI}0PAO-)JgwDUWn$gs^eHo%%mb8fARfLIP4jmthX6GrfllI0L?S73j-cZY+{&)or$DF}2SV=jGG+;T`w1*wW1PdUzc9;e9ONTB{8{ zWo2Q+m!)tu4(8LWtYO!gOpM}GGlghFtAhE3l64lTySgaw z>|AA^OP^H_U2Nl{Af@g9+0QewU0%*?^SL{8THR;K)yUU(@n!eBMoi~AOkMl_eSDgQ zU}XH{hm_&J_tJ0E@O_W$~07G%e4t_D6dzF28L)n$2a z*ABrfl4y}b`I>2F)fPb%j1YiczDOW^x6g5 zix!toqpAZk*r;3r3j+a-R|{x?+I*y9L^lRP=osaBpW;C)x zBkI*cNA&yU*n?cMKH=f*YzLmKh1XE)&J&zy-Em=Kth+ zY_f@5TS(HNgmMS$;w#Vv)8j{E#o?-zS5u2mG>Z_$Je$K%Uq5B4fKJ_GbzW;9gv;Ip zCCL%ez~ZK_e;i3W;Tj@#59|by(4k!uxo(lukNE44KNe0EzdTZ|lR^l1Ao#3=#g63_ z4b~*WN9+-Cjwr8*SIBD}{u&*-!@2%zrEFBmBfFn$_ z6pTdD{`^E*EzP9ee03%W3`QiMLkfXtussm!LZnSht%S@L?RK>D7;9h06wgrWE6CZ9 zyn8F0*DJHjl|Cd6s!Z@X@C3gkr9XH*w0el&`w7$Ki#^f`eBWZM#UPyFjlSv6tM-Rv z+Rd}J`((Aor@EGZzo2`i5!Pd|&7r^D09afbh|>=(D;^#m%+_@5m=gR@D;s(-4Dw9` z-h!Qb3hJca?;tOnbEfm{n8MIGv;sGEkChNoYRh5xKIo3S@(>*Hq)Hl(`5@?}ru_}% zWwwmYy#C)m`zF%ATbBq{0DeewJ(VGZJi^-;NQh1&B5-Y7Ravb2FOoxv_vT~nmJ1c>*B?A0CPVq%xqCO(?fod{Juq+H;fcJ&5CSl&mVzfy4I%qe zz@qqw76!Oryk;n1)dzvcp|k2mIfDTr@=8kO2$_2VA~mbE7?w^s5TW<@ie4SRfB_!( z4$q*m`t$a}PA{kpFo%vTJUkpeoh)l}UEKGCiysNaca@br%Nr!2pM=%!tb{~2HD>~? z0hlua1YTJY)Kfv!IzbL)n$gENr}{xRKub54RiLP5*7gHajieBX4=s?OjVes)Ur{r__ z#03`^DgA$gu)CIgme<7$7AIB~7Gw?sW${&4273tuz#LGdpr1b_0WyXP%^$=xk*6IU zqE!Z^76}XMn+Py~vwm9u4x-6BOBRA9*n1sL(@6ZL0{o-=(_$y2Z=r&g+>mkYfGX(; zjBE6K6vk;k-<)I{d`{K{z8q791i*Xi!()p$X$hz%QS%cck6<_DK33|}Jv|8TE4OjI z9)|6G`g9J>4U!i8Q2G0!`Z~*#8q2b0*JYHvv;P$2zGJ8p0?dfB4-VRR&|9FyUxzeP zrnN%5(nwI3NJ_(*hn@L@H%~J$G0~ylS3uY()u!6(kJxfY`Cy2atd36Xmcbt2w#dMM z>!+HhR`i19Ht1q;`m|K$J^ohIR) zfjNVcY@=ep90r#1`tL5YgPPUcEXzufg(hU6oHj zfQaI~IHEh%A@UP?Zvafl*pRIDIS6VJ@iv6SpGa8m=;-+T{844mw+I7FL%9gK6AZoN zhqt2Q;v5Y$UH59Ox3QzVe9!VKWe_tHx$S4}pl*qQKQH{!U$|RzF>(dov%7P1b1eVS zp5$}-4@OieKU&`xC9s|fuY7~0yu9J>;ILxC4A2trrMj-I?B&M!`oxmBQZd1pLvAOp?n8(5qfqMs0U-0~0 zgW3a$sW6ig!(h;wqNzGWm0$LTRRMz}b1=G!44&}ol4QQ`6UcGpylhSS@u+eO>i;+J z5id+@Jz=UK9s}|Rr!^QTwJddL=`jS<5F38OZD~uiBQ;TY+TBgJCabAyICAXXfA>Dc z-MIFJGkyQjU3C#o`AKeS5BRWyr}YreipxB4nV=GDtAPlB)a&*aWVq z!hJr4r@9wi`awPQ{9_t`IGHk z6?9!Q`%auVkp*+zN)L(KQ>Zj|6rlys)C4^&|7s46(kskukt1?WB^ItqRN?uq)J!{5 z33SZx!LYqgbFDtnzI(l^wkC>G&%wbR#Ge0Z$FO*%TG!nDF3cO62hAKhIH-@jm~6g7 z*P0(kT9$=5_w1JVeN%Ie;>v#KxuBRH0k?UH+23c^1?Q{M_R+58uTS-l#*=+_m=ESF z<&pkCZr5SS3}1^5ByN$mZTu%r1pmb4OEj!4NJ4pE^zD6X*gTc{rdrr&MU(9K$k1yGQ-rT9ZyH}qxCmg#ADE4+` z&)i+b8qxV%ZMJ_5CDv6iQj~Qn&yG`TtzK&;H6$<6u3%jZmJ3&-=24qJ#bjc6%_ zYpx#$xmW{ZVGUjP%K3amwaPaif2?6y&6f;Yzt1s0t21}x8YiuIdxk>(dQO4I za_(>*cE8u7jJ z{*P&9=O3KN6~~owJ$Y&bqZn5M3d-?DYLIA7E-PYsA=#;OTv=VcZ!sAo%r{4C34M_G zqgjiZuvw!LER4HSAIJ%Z8szB%FkJV3iI3KSXigooUm_ibXif^HI(H1)O?8xRE_att zZ`7Duw;9LJW;f^gfuHGG@0yM?r4wIDkucELcgI3gXrg=jSohjj^T8wL_GdX=MirgcGYg`UT^EVRe`I6Gd}~-c zs3r@Bs@=I5$npSeIKq{&4WynZTDwt!ryV-WxOz2z?rp)qcOGpl?Yq8FQ25;Yf9o%|Z) z45#yIH%_{24@G9JjfLRzim5wIGNzig^J{LeHK+ajSu(Dto3+XnmGXS3&z{~hmOWIvwa`G!k=zJ!o1?^=2qUz@+Z!=%&vD6t zr)L;Gq_rX{v822GLeaq51z>|gi#w?({9AbsbDC} z1E*K~?1-sQ#M;{=B71SUmk&o-Akh~<)d_sLM67BJyrYF*T{V+*s>yX>9wBaL>HMjH zLXEGMYHj#CZ!d4}XwQhM;cLzfypZh71>J*TcfK@iRAkL=la5;pJZ?oudi=T6mTU$4 z<9wMweqF0)`6^hz(zV41WfY4A%TA0K=~wqFpZAO(yz_ zM11Bsa?KN|{mcLNq@Ocx>;>2O>|yVZhAMsjDA|@wbH+k}?~Qlff0M>{r7wP#f_0K% zF5%7TwtAB|Lhxq3PIS3&akiwo$H$2OBF<3FnP*h*4%&6QP{GH{IPKKEE;JlD4?W4z zg7qB6A>>wrixT{;Vb@s!A)tLRU02CXEyv@W4i$>K`8v&C7pz7URK#plFpp+WEUb#- zI#~TS?bvKN`7rB&fnALCP*PgW0K2)v1&lEnu3%;yZg$&jUI~&|-DBE53rqPN=k{QM z4%BJ6YmLc+P>t;;<~f_&7e^?ost({1`tYV|s*@_qDfUz##tZFLx9D|0DQfcs=nuJW zA9i-%OS*h14G96I%By5zCHS1B#EPRTSUE=w3Y2DWctM;y>h`_Yb~ta2YcWgFM4Jkm z3icm%`gS`)R=YMjXEk$sNz1bGYi3YRa5;mM&-VKE*0yEgUaFa|7!)ZEf7o1tQeHT2 zhRcds@N2Jx#jLV2IBgurckE1mag=x__C*Z~2cizt%KuhVJigrR#wf8Gv>gt`6fuOx z3fU~ye^?_hKd?8%ZS}b`juAa=Z7;|QU$&I1k3GtUdIH-|mg5XtWsq4B3`NqmW=?{Wu?cIJf!^-8z2( zinA9NzS)x-Mm;`(-zl^M`zHhs@7NB-n}1fGORStFioc_~V%GkZudI}dAN+1GwLKcM zMN_br$OxlUafi!tRHWnB7c9{W$OXCS(3q%MO`KSwayO1+sKoTFTESw3jYeg(nBBbG zR)xgiKLr8nG8#jxHsf}CjErr*_xD@En2=ccL=FY!IbGZy)7p$d1f1)baLSJ#B{<9; zHYID-;!?ZW%ttI1p;_vUF&_WIp!N!qJ|o^flXT+5DPuS%;rQ zxcisRVH=HdqV|}|TV}xhs$?O72QH(cAc#9{SEcJTH3LRMvAypyv{Y*%*#a znJ;JdP=1e2(g+D@j;?18V#N~8igaBY{rul@clV(X->&@Lm*d1FWa8}$E&fv=3L;{! z5>8m<0$1i7Tb0=FojIHan`=j$q1(}(A5swN_uF1t z8hVVGzlejI1C!kH$5~S|6L;p}jdNtf)kTnh2kSq zSA{y))6$Rbg4czP2rv3j7fQnD{N#hQQcLPNtC^n5Q(1;&aIhm8#06@`h8IW4$xl#G zu_io)|RB%DV8cm$T z$3E#XxOGgOD=V>ad;^hajLZ6jDva%X!lz4v-@j_Vu07S}BT|FVxz)M#>-zMQ6mzEVq%rm&K7` zP2dEWbSTB(up+;O^FNR(Z{!AOs9K!!WVIB!eZQW%Y^=s?yDP1HTTPQ#=k4C!oW|YN zaGf>v`$ciH8YRV2B6*u}t9Lr>$4@`&f?n%|ZYpfjh^*1L2o&`^sQ&tZ1@s?J{%LUi z{f( z*;%cP8d}u|mDMl^S%soRSzJkePWeqttWrg>oYCsa{%@RPEqUuYW&Py9B8G{yq`u?H z)J=uxgX$mC-@JJf9%`o*=Nn$k(e{zG&O>soIm=zzE?*K>Gd9&tyL7sL`Hg;>=$eX3pz^q1%4+rskhV zn)9kP!jD8mv{tT2EqZ2u!%FYpVPjQ8h^l}=#wNh-=P*~neBF4@{>NfNT~5m=Fr0Qm zuJ!vOx#C+4G^WLePxxaatdAp&jXiu$LTdJ-(hbE%5O)q1bYC;RJ%SpK#M}GkXVo`# zb930S;zhm!u2CVm1Lq>G{;(3gHPInPTGt4<7CF6^SWl}(48SP(<$$;_jQNo2TCJH@ zPFEh;QI(LO1EBb-E6PFiB%-SW{rH@wf3J(pzs$7ljgV!=|7<)<^8%d@!DDBbq%c{j z_5f6tRHX5h0wDPoVVV)d9*q*w`ki4KZ;iSaBPmF4up%$)F)C7b{Jk1!*R@LAUU&d2 z6_aMz7l#hjvdh(D)vo;YaE&nEUdqJ0P}y%;LyFE@^D+H6a6Wu{gyU8d$GyZb%J<@# zu#6~NOv9<)zyJF4=OA(90)w(v9B1+NKA)k1qXEHhf{Xvyi%}^RlE{3y!gNPbm%(9x z9OTg-C~%`2@{-M#%x#WJI4-c9_B0RV9+xB6TUp0wu)XyaLOi%rHs&fxg6B}-3~Oz8 zZy$MLU7NmJa{p6rj%?4g+OCRx7k|Tz653WdR})qsW6P6HNT1q)3t8*?n97UMANs2!+IJIZe9Q2T^0hS_;`nc| zig^r&wqoJ!KOJ!Q3e&|X{_;FKG@x5UWe>~~JEjyhtPwLa_qE&c1v2&M*2B->k}V37 z6R(KbUL7Vz>9ykef`eh$os;*}5>9~G#blQ#%C}ENTQ9oB^-iaJ$H{f*w~&J3aST6H zYg%wmp!o2~U-@g)!P6JRcnR$C%|r9<;U*@xN>c{SEt6Y{^6b!07GK>fvNVz9jYZ?g zVp5Ju`ANduAEo?o({|b6QchP^oI}HM_IckP;ka*DeadKG;9dJ4ya&bfncanXU|z6v z2QiO)Gr{?2;^<;}gUpjSW7hDzlcgrwUR>D6P)!RG)e_N)VU|6!+YCuTZJBTU>$`nV zNf;iWM|5}Ji$dO`?sMFmbk}tR&*ILYfb-2~Kk63+;IVlCPUZ$Vx6cu~8m=Rf5Oph7 z9P<~@ZOAr1hFipRqJ5cqIHsUtnt8T_Qf}rw*(ND|DLse^1L3Gt6hM!0xg(2a^SI-q z$%Ch^9(G{NaK5$fzGc27POiCH$mSMX6Mfdb=I=Afp?LGHr?+hVm1uQWvI`av)9yo-IloWE?lTYr>KOf5an_+ zGK;lJn3sA8*v%r}=>E8d(H$)4R-&~yFnnvAav2tYw#SmNamaq8`ez6FF?htb? z1uY&(KuOO@oYd&tYUMUcwyS6iBlCwgrAg5YmQu}cEpMNSkIDBfXY4Ld-fT;@z!Loa z{rmNH+vi z@0AR5ClSWg-_r`shh9AJ!GYUu-w@GNg3qJTY)MQjPED=CJ^%uqNu)s$&_D5_iC89t z*m&V9&o(A&R@&$O0v1s6bocs~g!$iD#7mm_BIgpB&Crmc(Db$aSKMtn1oDswTIspt z;G1o3vg@Bk<&*2Ce2J)DhpN?#+7Ga*47B0x_rA}h#7H3dOL%7mWduwpD>QiQTmIT0 z@hgdPi3og-JcQPL_(y|me?p?B?EWIcKB~1f7((q&6`dZT|CJSp9M%885Ns@wu36GC z#}XjsJ>N3Y`OyoY8&THOM5(w)02JLTzFL{Cl%f2THG=(^B^L(}VGk51D;Hm)`obY> zy;{O7zAp(a{}4`deK5N=8sb|`eq7`Y2cvA;j0ZaEZ!!PK8vN0~_G&0hAQx%AuKcFL zVQes$B@et&;Qycs?k7i-`HyPwIM9LE1PX#FESMK5Sd3h1GtBmH&R<#tbM;o5(d7ls z)0kn{Gl<^TfLHb1coR2kwM~(6yy@U>#+A#&5E?3BHy=6IIo&t0HTA!W$s~T-PEEJe z;JhodH?byOFADIZTW5o7b57rkffV8`I-y94G#k*eI5$s?@aQ^B|+w=1l$+?wQIg*58g_IS)Kh&f)9X9pqq7f`ln@@q z;gRg%($Z_LBOb1ys6-iw-dlUPhH5T2Gxx3Ag8vp55#G{2yNmelj9Z;#=we9&F16bb zwF*dq7pPC>Fb1BKyq7qCi9Vc-g9B51dQrH>j|)CtHo1Vt!h^4eXq0LFkaP(GU} zp*;UeT~(C;pC;asz>GS1s9_Vz^s8uynu&uX&8$`UHUbn}4O0`wRer zrw4;8GS=(}xOn%*X2JII>K5=!PWwV*G%2P)K(Fl2oqC+ykHI#3iC-A&Z9CtTneSU# zdhUk9(Cr~0)gMjO+A?6HP3~zg*qoebap0eJZO(B3?(&1bwLNVl#_-W?p5C6*j~YOI zom_To$FY&>juCmG)Von>ZqzYuo|aft*d~+MY}odT*&1~#m)ra&Hy2T`8iV@n)D9|j z3vvXMpTl7W*Q@U;=k*G1-klK}Mp_mamm^WOqW zXB=eQDt06Al!PF0P1fL-10Jp;(koh9s|7us)2>t=q>Rpf2mn=V8lH;e5$^ttD{%=RNH+*W4P7%d(hW+9(%s#m#0((}-2y6I0@5wg4FXCD z0^i|&-tYI^&z}r4=bXLI-g~WeU29#7J!qrw5hwHnV2gU2==_7n-3!$2HYyiSN56ac zH~#SS5wm*q&|PYLSy%t&pKQGN7acqfFdqO@@fuJvTKxQPyVmj%V!ZmY+ROdYgJ60; zV_IwZQK=6w_UJ%MGltH8Bb`0P$PYmH{jG*k)(m%!}Y7(4QAT|L7hOvJxbq z+|K5Ydi8ix)Va*_0kCWJf6yV!=L=xYgPvJ^>q|Ki}Z2-XE`OnH!qDU3n95pkHW` zp6M%@`{=Ga58+$@r`(?k?Vzyj%;B{l4y8v6@rWf8eayc^0~$Sidwg?%KcZ4_@kKh_ zU=MJZHk6+G2|Qv(D#7O`K<9|Jbxlo4um4g^8&vyncLFM7J3ymkT1&Kp#{(#o=-=8} zOQL}LYT(sb=Y8!%z}SyYpnLjXfV>IbnN)eU4p{Ha&wu!ekRTvv$i6=RnCx(0P#Kv5 z_>3P$wPqBVVv_@pk^vm(_v80WJ)H z7(@d3!td@2`+zd8Pxm*qdh^U|>BBg+M5zGmwhcrl0s_iEFKVs;&5izlXMlq6VQp|4 zKr=d~NdE_e0N#-wZmPEX#jN2Uz%FHFe>rjv+F-AGZj z%{xFvc>eRwo6oy4Cw3klbdUN9fFnx)l(627OSJ8*f@rfEBqsi1wba!O0o2U+`2ErN z?=L`@_=uDPj7!L$@fXkdcL1ib_z^1KTz$ALd?e3oJv>rrUtLQAFz()C?C)FPgbj=U8qwuHrq{gvyeYNcp2e&}==JCs0(8>vqrR|+zDK-C>|w{^ zH_^lTiydISZ5>ovXwB!kp8~>20sHC}TZTc~;Z@g86;4a*e*~0&we8Xe9k$*J{b%t3 z{^}agMi37G#wZ^{Isn+a`}bq~P8fLWo#YTV`!GtfB^1U3ZN@niNR}tnpn^`TGY_ThVqX`70TmN04KSQ1#3xj>T`v_ zf{aPWzQVgj2O}e@KR>U6o&#ZJcWdDCGTj>6qudEVhA0JX0;mmf1bd-hT;Xk7;dWji2kptah!j8w*96{~9vVf;lT4tsjvd+!Br?zEOvqS%-HF&>@-UjSg; zUuyn%@6^~c0@zE`4B#-QlRn$he?%)g%i2f)96s)G+(2Si25|%cE|miKda&OQuY#kO z1`l86vo3-k0BGF~psu?gX>H&to;9B~aG{w%!d-mh_Xan*=Vnjn{5smcOMOKBRf5nc-WuRyh@=l92D1%M>! zuCjJQ^8hvsVAdWKl=G8s==`sK_TJwWXdhu5#^M5|xDViIq#pMfP<4T?ih9!d5CkMO zxBw*P10Utfcc_%+-U3oSM{59GwgIH+KMsEY*q_?dKD>rs_xcqqOd@LBfhg-#z4JW& zv3cwGghl8FQ?>ew$}6T(@^9?T1)KVdpa0H0k4kyT#xyRAxxXstvK&Q4`p9MgZfou% zrP{A#ngGywKp*WZz#Y_fAD8hrw`CI^i=h0xCj7{l0GPEbAb`0AD3h)MlPqZ3^5Gkx zY}9tWq5jCY0~jZ;i>d*SFk)JJHOd)qU7y(kaP&*nfLs6pEUY%Q=mJCu005Ea`Lpdu z1QxIj+mE4bMAxFj$$8wE?{xq+1^f+AaUeu*DiH!iY%$T#{BqiBaz(iTK+*n@uLQ91 z$6nMRu+fE?w&%FaTiyB1O{AgrM}44{RU(G$z5Tbx_A1}Lc|+(wnrOXy09s@KHPwHB z5j`4#l&PGvccV&_=5=iA%Z|e8B>;%?czpc(Gfvw8Sp}BfOtaflska4zKmJs5;o;f% z9Q!dk6tsl{(Wfdl;04Hj3%oks2Ed(D7BjpUxn+?L?SG-;siaPMQ9zvYetWw(1L3;( z8x3eqy+0|V4^#mV=9O*lfBX-*+4>G(zWUi^&phtCUtH_9e70Q9yJ&Ya1=i%iqQh$y zmfu6n$?kyUf<7#^W(3GdU(J-Et3>j}w$AL=Z4-Wa|J0Ox?y%*V3(A7B=k&=i1aPM>rf1<<<3L>FTd zlVGzK&{^!+MBlhxeyhpthpQEBjo9{@XcyDl z71e2B?-lQN--G_0EP9Cn%&!0S;KTKU!o0}8XAgr9zbgJ33P?_q^L;)Ai@ug64*{&# zBWnRPU7W81-V30}Cem2&{n zR$P`u2D-f4NA0rBJ$mN-8hd*uft}2Lu<8db^iD7}*mV%YO3uGxZz!uz_~Ej9TMV6D z>g@-90B{bCPSczykN6v~XBEtoooMh{_72Zveh(FkK0C~__uIH&VU;S%_y1M1F7c?2 z{D^4!o=*mDeRvH17ushD6V2z(BA*8oeDOaiCA&cH5#?)lyjrX2xVw~k1kV-#CBjlN zH7D(bY#o5U2j2O%nR_=T5C}H^@LQ%Up-SllqfYNuRvf5tt`Km}y^wk$IXR8BTLKm>kMwU0hh4%R?MeEWx(oE1?jGKi$ZSE8GQVo1dgA)K)-v1L` zt_wKFj?tMfP8Z~9JP}r}kR&8tyfYng3Vx8F)Xsc0uM&}l2Qj?&^6cBR4y zvgwz1fZ2ZXxaT@g@jAQ4AAsXHL-XU)w}Q>%4xP6UnSb!=K45 z2Cs!shUF`%%wC|mNzoQ7tn$DA>#6Zj==jUqeCKpMJVx;VNsntQI`$3eKwFI}*eEJ_ z-@Gmhb;={xLq_k4*FAI{@fpfQU%cLZn@?5k?B&9Ic)K}xje$Lw&@J~X9^NB{A<^jI z91`^PV|sh6;fs!oKi3hpv3(+k2=h*&(;V~8;3PdXK-wGOWRjJg9Y`nC?b~Tk$pr+| zPYWt6p5HcG%nstJWhz7P2hU5>rrzz6>gjh&|$v(}zq({DWj>Vo6~kpnHK@-=udjQfPr463Tme_>P2;`N5TF~hDIW!nXe zYaE!^O4{W13%l7`e-Dj~w69Da|KWU&<*1; zfz9+iPw%|L5Tc5o?n z>E1|3wqqyucB5~c^=C_DZ!|BHJ#;=MViVD$NX$<4oV`HGMc(*f(E$y6ye#pk zJ-%0(WPi7Hm)PXuXZpp7&=-3fcaJeDGow1k{)6|}#!qG9n+Jcs{p}FEGoMs==sxQ8 zR1%EcDBCbTHg{ly>fQOWrm9M3Mp3EQhA3@(B3pnBT<3nin^$!Hx&lY=IqI3FaRN>O z`UAO*^!jabHGy|S|F4CU`}c^SiV^2xAKv`2r5y<-XvDA!zWZ4CK?ooOzwSCGdBX38Z?|%9xCgE^Yd62#d%ha~Mz&+U z)i!oq>xzem_eivFf4#jVWdHn-74qw^C7U(Dzi+hx6QpLcLmL}C!O6GlKXyc0A4Em9 zsl;2`?%o(%aPI@DUY;iY^ap=%RdUjFV?rc=4XHGT+Um; zV1d0KB)t4zQGkuoxq@H)&lhlhQ5TFf?~1mzjk!I3^k-(L`|9yuz>R#i;h@QW9@&3 z6#vgH=<~ud+w=Z=3Ic?>nMZcz{%ej_tB9UI6PEl#_2+*lDnJnP+lT)i4Y${&J&I&c z!p8rO(ChYOh0HPZ>A&pXtCvCl`;b5Gfj)N5Ma4+3y8oT)`wp?U`rBb3#S#VtHizU} ztN(eUkCX9Gqp3)&XdT0fgIMzEjUTrt*=!59Cvm8}zaKNxlGh@unhPFBUR|)U|Gjm8 zA?d#=Wc~d?%NB-KRD`y1j2I1)t*o@ zmS44;l>>1rBL^L+n?EaiUrYY``OtBbG=HBcQk(zp>b@2XuWD;0mFf1vnfoB~KJfdm z>WAeeig{Rp_hGT;kMZ#xTJ50V@tx+^=K(IaDoKC;D&CEp&RlM-W4NtaG+)DRv?=Ys z5a1W`R@Uezby(0T_ddKo!f3p&b$k$+SAbU?_{Z<;8>Xi_%55oLT^SyyI|wOjU*@Kp zD;U4`P)_!}du{ntCR*fH!h!}8QH@Hy5f~ zIj+tA#Z`|Yeo!Ow`8+166E@lv8zz~OaylmB&7ddzY@P!w*USLY8H?$I#lxsYx740R z{8gGd09$tWR`X@l*BJIMM_&1qgDVet4pL{cJ$0WpuIwI0ycI!obg^4kHTU<@O}?)O zlPYb3Pk5(wGxMJQMiPAPJe=J;d$-_$DAf(ls>0&0EEK%CHL%c55h*kbHZZ=BL0p<4A~y~Tuce_R zVO&ZPMz~5ClOPRE>X#@Qg&+I3pKV6w%VMm=wA(->qYwJ#cqRcB_d*wQ`}PE zn3ia#Gq3l7Noky(`0sdIL@PS4`jXEyeWL7%gIlKl=5hO2FfMiuj*()5QldqTR%DTC z#?8Mf!5REj$J_6-e&57!VB)lRW(48?BS4?w&?6K{=i_z#Nfy6DTml;7g{wUc{$?P| zQu2Bty`Jp;Wu2;eOp4TDN)a*FtxVrylu;adL66YRbFzm{#9(3~F?uPtXt-e~9~e7D zik0nIA0xt?5u@HTrjlL-!!wlXNY*Cr3r7epBZk^9Y)%r9)KXSQG)~9R77glB%=TAm zkk}fRm$e9ket2tBq}D>)(9hND$r2>S5wYD9n=MXFbb0rE-R%T8PrX^`Ia&a z%fv*7wV#HQK_b;g<&*$PpnssJ5Sy_;;;G0o5kZcYssloW6VQc$)J~^Q>e&+)-Q!`1 ztyjk><|3|StP%{^EP@0gHf2>QRB$q9XR@It79=&lqGN6v6_H_n{z7EZaNc}DBDFNJ zGf2M-I^%6Sz*EuuDtJzlP2#ra=tP}KLL&%Q1f_yp4P{A8f4jQ2gi#OGRt%8^U($0>fQGGVK=u7U zcCrZnSYjDet*Xp;dlO!xk*DGiT)Xtw&WG=5u;~xkQWs<4BXC$TvASCc#k{Cmb#PNye zpd(q=+(R)*bFT%fYc|tJ4uXh0kw25m0@+w+^9DjGy&`IORv5l^IjfNg5!h7jdoK+8 z^F+nw3IuI1l+d{_by*|hROg9p7@SKcNWcuYLHxI`mVpGTJ}RB&i)y5@x5Vx7;!BWc zbYBDo2g!jwSpT_zv!PKEd3>oINSOtfQ%u7q@tuV-E^n$@2H#szhp-D3Y;t72fIEBo zK-@c8SmkBWtbgr|1136OH;UFT27@^^l>S|( zgky=k93hilWBp#O#gs5MO^A_IZJBt$=39xpK*Z122CS_mI@8WiOo*Ea;Er$vlM6hf zz>hNQn>+ZqZ!Q@HRvr3+t%cHLC6|&Qx+oRu2JhDii`n>Sh^;qGj;^St&KS-GyOf11H0Xe% zcLXq$MD!8FlD98eN!22kA_HA6`pw`31SqhFg0EwqKB5jSjF+Uo1Ne(xie!va{ET`8 zMeHDn9$gSI)nr{l3Ne$_9+7Dky9SkjAPTj8ZN7I8fgBjCPS7fnkWqkXnn^BN^B*gP zj%1nljAEY{YAG=t_Iv{B9+qX6t^U)aJEUcGHyCuMpFDba@MRa zPa`WcWyhB*UuC)id_I1oFIQ$F?+%S6+(bc(q&TC0<)mZLh-iJwG$kqijZkq`yH{op z7n^{W?l@1tArMM>*P#OCm{5z}N~d8uQOy?ZG%N3P4r4G|cSy8bX?7ZyR{;;c$3PzPdCLT5ym z=PYIJm&=~LsUcH?DM*z*(JtoD@M5D5RGQP!ESgTDD&lUrGypj@Gsj$mbca|;)2p-F zY}0BhieeVxQc3jo_Zkutm_mUKhOCz^WmsY`an#e~j5LxIM8%2Anj=hJN(CP$S7HF+7uMA;fM?$ES_0;owH^ojNg4-aGE|*1NO1YNger@p+*W~k;2LlTagJCtI;NN zwlcp{zVh!Oj=HQ7L$>XsJ&rPM3;$kusTktEsdDs!$IS&PH<_412yJCTJ4^!)=fRu{ zRHql86mXoMtT5$%kP1uK`;Gg19^I!YE#=TClR?1b0ZYNIrS_=;5fW^o6iB9E-?zu0 zoLE}H1;NpCo8LDnciu}a#P;@`y}0vQ-4p&H#2dm=OvozvPOsD(%d^QA-PxH#w$F0J zmrR&et|63XV2P|V+sd7KZNI`6wTVoj(43y4O-`-@Y+&>JhSW1fk$jNMp|X7n)tMnd z4p&4!mr0IzS@E`eh3Iq^+R8ZfjdCe0ZmNZ}_(p-oO#5z!f@R9S<7->dzbz0b2LC9r z96vp%jD}bdJykKql2lI8p`VL(A;+IxO>uSy0YQlswgdBIt`Frv+`x)^dMX@Xjuu|1 zuLkpo&uafbMqFAGo3kK8bergsIHRN8ID3o0^7vrFj-IQz(VH~Uoq?s*AU-+9n^kUS z+WtS1M&Wz>*nAO?by7m z0a3yP^t~Y#F3<&vr}F^MA+9=4{b`TI0F%cW6P8eAdn@1B0 ze?UiV&{JNg%KAmyXn#j#bmxEha8Zl9!E2h1-DImg)6`VCBsjr;ajy!Ui3z8{dPPoC zCah6W5!1JRLQYOV5S9WVjGJL_FJ}^;+ zmw8BZLAc9E+Nm6EN}S6ggqeJJVVqTcay+@nL#);uWc99|AQO&!;umak?2;doC2?%+ zc&f9xMfY#zVN_2ZOjo}j@B#(%<yk8I1CmRVMQoY`B|K! z%H?HTKcV)U1hUy~7>u~A%`U@P%E%cGv&qtHBKVZl@^UAQ6UhS=ar^ZTkjZI0G=gI* z$+PN&9XptZ)|eE1=N7&IHQRR-&{kNkyij6Z$k68eL}E@`3_MIL^0_S`J*MAjo&J zb zKLU16+jtU)r4Iuq#Bi`y-Yrw03o=DGCTKb}{zb8QxWiXWwRaJh%0FByr$-#b^X?s7 zmCK-3tECbSFBI|gb3jBWVs)(U2l4ZqMg$!hu$JA`_8{Hoq?1lVFIS06=_x{wLL5Y7 zp8qmBQQPF>V*MLIzCW(oZBCh5l}ikwNk|1JNZyOHPNj_>P1Gd zIbdpgK9{M?i1D_4__?uGLXBcLk^y0IQle8P8zb~#CU+VeaKS674|svK?sIbs%Sh=Fdq&R&Vmb_~>}!5hn)j^+6l zW|9H-OdA4+E^(o3H43Z)&m8#rf-I~C)1>)k;AKQ6KOM?i{c!-3j?EWGhK53wZvWP| zCKU=3YbS@OdqdPz@Og1e3-IVzj``J0d~>+M!MBHOzqcr&gWMp}vc0ZW>fQ{N2`A;S zl<@jRH#KOrz<112T$?mx$FgeYyvJ68WT!IJQe*dOuVTtk5 z+$33baqe_Rbl^4lt{V&o3B@phg(-s1jN!OW7$!r=JGG?_Y+`Z;^vo(dotBE)Mi`BL zz}=DEl=Ag>lBsS{Oxw012;>q5bws9oNQD}|SAh@L)O$^&*ZpzF2G7Wy*BkXM#!;1md% z*X@&eO(mSB(o#pZ{=76=VcswbsDnJ{3-$_@Tz}WE4DxKJDo@k(c=Li!3B@Aw*12-! zB*)@Bv7*ocBjDl}cL`I8)B)<_ZwvB6L}68P2; zara!-#_GJ2%AAI0t|H$tiu-8uwIPNSlK=#Q+HXe2l+i*dLckq8V(-0UtS8b{toD3E z(14AWO7P={FA|CTghHbz-y3;yzV4uslk!r?$LFop=sU>uQ+;*qil$1TqO0ph=6^TB z|CgaF$OUFiqF2Js%m?4NiCI-eVA+^Wp%6#tu#+Bd$i9iNhT^g=gi-ae1*fHk$7#&i zs%L|Wrp}uMdwjO4D7mWsyvdoo--9Y3t9$ zP^uUKzc9LG%}g)#KM-rqOBE8BdlHDR@t}$6#YrJZ%J!>)BY~=RNiZ^r!o$7EZ@OvS zW_(i9q=$n}j5-kKDm|d27+&llKKcBi1)gMV-9s|KGZj%G^u)>%EABAPd47?F$<5Jt z0<*X;(1nl8MACwYxn9x1b*{zGtXOql%+H3lLHvRzvcEyjXMvLVeJis~HZl#87Q;va zqsrW(eZrGPk|^9VX^HrgHCj%^oK{{goT_HaLSFrJ^9K8CATGqAD?vnk>gcCG!%{qp z!ht08AgYrpv%Nmtc`r#f06=$`5dm6rNsvDJV=5BZn8CmzlN z?HNGNvNuk|MD1rxXl->p@qwMAFWB4|JJn3go#fp6i95n^Qyx~)7ctB=v7N;yhXc-Z z(}!YCVeiwhe7dirkuM;mNl6hBpb{eUQt_nxT5o|BKqfVzgqA)jgBkf z)yp7bQuF>&70m)^xw0BH#Q)lf1CU1ZB2XvW+k&AYuf)lLw+73vwJ@~e?A1iyT4X53 zF`N2ARXsFtV?T5-GGJ|$fPe2=BEDf?O=Ek^mWc|N34SU8^PiW0U)wrrvJrMq_mApZ z4Zo!*R^@VI54aSoPWn1qF-P2=^MRQ72_4AJ(o4fxFC_yjP}kTg1vbC8^19Tv1o^=O zhm7(i9Jh@bI(xLJ&*H4uNbuDFkEx}?WnP|)tJ<-YRpJxG!}gg9XC8IGQiBhqF5N@> ztj72=uWgrK*$d1Hrc8oMU9;2ll!e%3O5#}!Dw-u}ZG z-y!E9?BgavXR)GnI*Fl0c#v-@Ywk1|8w9s=*44KD7&x4|zzW8O+J&mVS)fR3vCm6l zpy5Rud~$x8KiVXM2z3%ak{ccf|hoD$5wUi2-+=RkAB129=L21L?$j6dAXF{i<4Po-c+NPS?Wo)tz zYz|VI>06D%Q~PoZW}uUdxv?sb(c8z*xwuPv+Bg5bI7j>wT|`%|4?%cqPaJw7L`7Xm zDH_Mqbjj*yY(d;*tU!C;@yS5lxlM7f0U9PX#-Nhlw$^iySY7^yl|$yw6cF1d(X4B< zW?*QAA?i^?+e>RTMVuL$oIXpr0n~St_JVaye$N^b?uT z#!oo0VKMGlyGABoutaLTv4johk}++jI0nj8fJ?@xNuJ2;)%hA)Klwx-M`+9zC4v75 z+Z47xv!hBVQm-+#UKP28--b-nvm1xv)+4K5Dw^O!!LNE2KT>6F%SM-#ENn~Pli897wfVa`w;(7Gtm z$^F`>p*pEJCeLM&oteU=_y?(dd1#ATF|WoK6>cPWMUFa!=D7PHnlV*R2C9F7l8qw- zQs9ISc)tMuGRuPdOb~)%7^i$zPGS9T+9lp@nYn6{yFA=$IgGp5yy(w!5@S?ze`~@L zB{z?k6{t;2;>kC7tiBq7S!_R}pd=JQW?!XAJUwswC!TO!we+1Z=(4~}BRjqEuPI5P zj#F7E9G~XBgG;4|IEaZ+iIRPZ$@a>*N)s}v#r35kUy&69+(24O!OHT&xXquhPtH)1 zh1I{Bn{Nkp@=gVjm+0(m!pE-EfzL%j7dD}${>)EidUy$8Z(65BGP-~>O0d>c8A?eR zgLHA{Uux#&Wu<^7{;sS{{fo#Sj@1i|N5{Mpv+0aZAr>&#{H~n+(P%PScPFg^X?#9k zh2GcEL9EZB=9z5680|{yF%-ch$I_gM+5?)*p$ou)>`GF2z@1r;f3upO^&xwW=*@T$ zy*QBYeVQYv<7<2Ye9MJjNXpl5vreSAbdQB=u=O>TZQ0MeVn}%DM40_NKfU(X2{Y&o zbG7Q;_&C4zvdemW!48@cSAP-QcW!M`Ue4(~!!yxgi%?ePnZOJGNRPvctxL-Nl(igx zO^Zc0QKLi8y~rGG#B&C*#2>Xco33&0Z z59@>pf8kpnbs>ESj3}r?^ivA@IeB#cmYF&ZE%?}n{1nX%aUL=H(CtpoMN&?ekfa)+ z!-(M=0qQgV@Tq5X3j>Ha1oR^1C|-Q9{?5`)7|ZO%o0Ns!rl3&tje=JhMiK`KppWIq z#46)7?y9Oa6)+kKp3~Sasu`h!#j%KBRir_DQs|T*HMYs}L)0u(UFCEOi~dZRed~&= zBjdLUHgmFiRZMRPXo})&44&p;;m}`Hd_9m9s@Vy{`32%xyb%FuyyS}HVqw90%M8nr z9lF(#;!?$cdB$wrr;u_P{4hCE9FL2=64d}$vd*yid5$Dsn$$(okeBK%2 zR}vn|P|cHWrKgGi$-~wu!+Ix7TN#eIM8@k#bNllEKdBwB{$w{yK(_nxFGDKTn47(y z9(tJsC34NH2uV;vRz5XEWGqys#d5uFQ~|cj`vB9BLC(!NSy>+67SWpbUduR;Qj1r1 zoynD4g~v2XehD%3nCrWXof^2U3DcM*H&47nq?$BQgBswGIxc?IPLf+Yr* zz&JplzS;>IrvzFf6)S(^d7^d5UV2jkp@e@E7#d#pXyk4bani@3#@rnGMRs zsEx|K;Qz6D^k=8wV8!|izJ!F)f!UTBX)Kp530HFo9?AR=fpn6kfW+KA&NPBWl_l}# z^5xy}DJi-*TF#VUSQ&OsSfZIfomvI zewY-(@GvOxqoKvKRNx{~c&gksNtF_lO{}dzrfJ&!%Y<1ym>xbGCl3Bn&W~p`0ciFa z9O88$T4^7L`Q53(OwMp!moLO2HE<%*ioU*|Sd6!3f;+k#ZTNm4IVP!iVn30&#V}w_ zui5dkslJ)d#9+<)(@Rw=&UU+0#7MFkvsIJDK%&WPn%hSxg9sHBCoL5+&vPZ?dmdNDxUlATqpSTFr7iOmlzx>I)*3alf6KbH zUL4KHk1pBMTK`UrIxUP>g1$*~(=djsO$aN;*5HUx+W4AHoVzwaFNi4h5Z?Wwt+Kb( zjS`k`dAlRC?!qeAT`)uhX#0&SEoG0PI`=Fb<#u3EmOMN4h%hqy;G`0y zUtJmh#$_3L)8FzIv&0f-K`(|a#_O$d7l!2<8iKtQQEnS)6DK)0c{Zx;MIU{HA~Cv0 zY0gsTr=3A9?t=5@G1Fm_X?QytwT_e#T(BndLjrE}5aWD>;zP+1d3}&B*Xrk)P_rnk zCefXKtgrDN>T>bAlc|cx^zD}u#=+w#$ii+#>|v#dz+X|;C@N-eOZCdzmyBw4>``!< zF?lep355kqC)(Gj=GV`sbR6>aidKaTI>`JP*nZ(2{i)shp$ikrDtSUIIkmpqVuX>2 z#aagW$eTH*V;pl4M_-!!i>8CBy?^f{l}htxBhgZDXKN;f601&jslVFtqtZLX?LDdE=mydOTv8bMDAdU~~fG^!fi91vcPw(hY;CFIsCQK_P5;Wn0 zCVld0!oMOpHrmK0S*0Ye>bE8;Kl_QKGjcWOkX zFrDTY3-mGYspHoPAq|COn(2wHqv10R4xX=iB{@8uT6O;8CXSx*5H{8kyzC|$E^_z|VQ6O%Cr0!a03*PNfcM5%cQ|QU8hy zKef;GjKotpR}E5_vmU(SF7n0-LHc1O_4Te6V1f>{M<8;IZU#$sEHvrXbwLZMN8Tp+ z98bSG&^~pKkUPvLwzeGFo{rDFYhK+i58s+#AH8zCA@O!q1t3hE* z#p)2b)b`ct7v;gN@rA=IwS6&kNTQPAg-IqNa)LUXY{u+4tNq^77tD1!MdI>%p~fhA znfzM4S4;MUaJ4K_l}z!=vG(JmlhRf9h#D8^yb*(0J*#-^YMh#8n@}YbHVv}|S|=k$ zXS*(SM6~F4IkJ4BMXiY+x%3W`h|Mm<9o6zRr%_=f7jYxMeQGQpZ8~Gti(>9bp2eQT z5nNb>G0kha=3@P6JWcU$2aX)Pq6RmKye0ezF1-CyoC$aQYkY?3zQaYUa1QTW9aa_^ zygV<5c&|_nW`l1e)BIaKP_`hV%f&nhsSsYNy|F?0MobBXTMVu$>9l1Rll4b&-F1kO zfTgybHSF1#Ue)dmW=*o|!Jz)@KyQ=Ua3`m78HfzX+{W%#L&UcJ)OYROyMUg7`xM(L zBAqb&$xOYr+b<6(>C?@P?8Wj;nlEUn^%rkK?BWidS|*eat<`;;KosN-o4q8T%y;GY z9Q%&nv@rd=CCnd(xXD}^#y>UyT3hLYN=qZwasb1Jw z#M+~aQ>gl}JXu*S^rl**$Bs6dBvchj3>DZgPN=zhITwndE=}=*CsEX;>W0bDF)eo6AN7Az+Ka<8&u1;~X9`sU2^d7AV6!U3Iacw&&8ytH zyQ!A>Xw+wV=jgvtrN7oyl;?#OmHT~dgeXKKofJhdC>K@G)zhSP`kB(%aCOO#vtk88 zJ4W+_!ExIo6?(_I#syFewJDuO=DA(harBduqNcDcVvN~d2@=$493hpA*1YkQX%Eqi5X@Z~?q=$B%WLTb_84GPw=3woIoa3_5Ky@8)-^%p;e?{~FI zV?y_riFYD^WQNENzI*_MglE+I)OA@!e9Q70w6eSXU=d>POUTI5K$9xJ>1BongxpxD zzY$8I%|;%!T{{tjS0qh>C@;)1-%VX+?eD?#r-a~8Eb*FCQ;gp?IZo=cQOsGZ z`x?@WyxyeCYP5?HA>K@9S14funDVHf`7jO!%t>+VEqv6Ej0p{nj055ky}L&@7?h#= zT*TAiJvQBmVX-LveF5el^5)alVt)h(Rp9v|3kW*oC?_(E>2L~Gc&CYUJOT}g^1!Ei zc^}LrcfMX)#zP*S&SmKg=vdQ-n4s#Zmgs7}s;-J~3gwwsEfi9o@islrd!K{~U1NGh zJN@+!D_(epW4&oCq;*Ozti9!fYIA~99w!JL_EZ-10{CucNX&FwgvS6_uiF(oVbP}D1?_Fx*&h2Dl37$%N?{{VV7dseX5g*e14c>YxEpEgQ#)TvY(I~`2Nw$Vq(lc0j)F@@#qt1NXGzGU zoae*3G~W8JV)zX{TPpS5p1I=PDmQ}NyH8%bglUR^xJG;2QA2Z+fxw<`TfFYYosT`f zF3}WOd2Da`<@??|1j~*^-EG<)Z`BB8TS9!wxvJahtjGGy3%V7)&7wxs3lFgM z6Yr}jkUKxA{rZIA*T!$2DXzxTz**S%;(I4a*iB63lDG6%i^_9B!toJ(TpE=YGGu$B zaD!coO`i;;ddQKi;*isdWmEaa&S&=PGcVD7iV=G41(k(sFgxiS6cWsOLKY zjA*m3kjIv^)=pAc@DjQS7VRdi$3Rd)QZ{P1uH^F|3!c!@xQv4g2fBdfxLxHcQ3Q z)ug}(p;Ab_&^Yu7o6Zqu=o9gbmP@yYS0|FuQyZNS%A4^u zLgOiWPhYbtYf5vtS-lsyXJ7Va`q(HNP@6_PqHr$9ixb)!Y(oB2VMvPivykaOd?TaQD_4kEYO z4~1t!l^w__lvimT*Mj{EA`f?pl_Pme20?mdHLjW5m9nY$wpT}b@=pSlJm#kac>{e3 z_HyZ;xSUtbxMt$TsHo$J2o?Pl7(vKxzQ#XaD6^`e)n6H9y1#M1xbN~nh3enByT!GC5;ji`ux~5ufUw+)2&*jN9|_n8drO+7ipa^03V$N$XOr7;03Bba|b03 z*H7Fl?JbHpWE4Lsfu{Yyw3V4tp?*KIL!^rvb_P3OL7qLg~BirBYd#YxST;^bkA0RGLy)MdwcCKMf;qT*3p%H zq)7XFICgpPuvbj*iHL+rT$>OAHRYw86WZvj#O1i4kZfswv0mSrw+bcVMP3)KgCO+2 zy;mt3pyICz`;qfm4)DUu*f<@YMO~^{EQT31W`0o9Z|q9fS7Q6PPOh|0^qgFgQ2aHr z43^oHIO%fUq%ZcRSKHZX)G(VS4r89hLS%m+bdp(I`l-31qg3T|nl-|S7Kwc8RWZ*i z@Zt~3uaFNyoUHG=y47u~?BO#DVH`e^t*8bu+#(aH>I6-FrEnoJ8^)}NmPIq&;tvnujdS@Bjp(e`>$dfD9bTA?T%^aF6 z$wMK?hw7<9m(B70=a62BqJUhnT8*2Ok{oV^BsiOs8Sms+>AJ;e>Ce@ha%E_f(ac;% zRFcn7C^M!qp8DmFz=h9+#AlcIONF-mQ!jWV)#tol_VVTFe7!(l9`Ys>iG|t|moe!$ zJ!Mckgl`7w^~*+UO-J(!#qY-$DZbyO`j~u=M%^TFaG1jyb5tItQgJQ16b)A)fLb-} zP~S@Ag-NtS$&U?2Wl94H-z-NB6ojiPfTfX*S$&FdF8zj>-S+yTXag&{NQ2Sv<=$bf zBe_WigH9Z~lE^gLw4O<$RN?8qJS9ODGTL~wdZgwEb7-1SeGS~jNji=_D+$Cq$++06 z-JGD0P&57Tr7tI6a@2DYg^>8O#_&N=wvIv*Mi#4qkI{+AAHnliH?S&|XA^~W@8a)i zvG%Ia1S|is{d~5OYQxsmT&dwT(k}Z<1G~@Jl|hwBvnsZpsVon_Z*NHhzdVEf2a?cF z-G)C+mE%TFA%f9XDr#%8NG;#FR>_E9>pV|l<4NNEUxc4lSpmmHlH{C@EAR7i%-c`y z#+zsdzG((m3X|WN=Ujv9q39F@3pXOS5bhaUA{de+zcjQikR9Kg6kDUC!bu=Lr%c05 zGrs!|c`V_f#q()#tRvfqji!)8i@5nPF6Unr-?e3Mv}cd=^5xzC84AO+Ei-u)r5BqO z;$AY0D%Hz=GH7g$sj?0U=xUcLwY~NCK&_0B`(@I3VT@hx%=R|FqaY%g3U zyiJI}!l(yaI}(2AQl)B^92WT|+Zw*!>!h2{1f`_C>V57&Y9|R9DJ`AG*OMNUD->BY zdppdj6NR&*LB_U*Yt2|_@aemb_a0u^#Vhz%x&Uyd^`t(?R&HegZJm$zbb^T#g&B+H zOCYSF&9{txH7#?hLdmEU;#5Ud4!s)|C~^yJH_AHvImX&;W>WbhqqKfvs=Wn*TYShBy$^2KsOBDQa`;pqmk_#5Tsz7d zv1w%aWE-CZ`OWZ}lO|HZ1_s`_!k>b?bGp*PP4xJR_`WsM4|v2IZ`&jn}0Ay#}eAOKMrV8J-`oIQ;7>XqOpr8z*fmP4(3AUN@P4vMeJ+T%saF8H9oZBwNO*7Uhr<62tvkrf|pQX!G z(Z=PXJt8imT6Op;%*h6ePcCPQ`aLL3Dao>i)1RI;C=k)ZLJ{<`@0v?0;#>>7Nvh=gM@(ni?v$-c(SDLzT>86@hh#;1XshbszRb0I&@*B9BCq1BE zf|?t>GSdaA47029>GZA4i&yj~Y30>?=f)YQau?^|HCUV+R&A=}FdA}P2lTk4+wya> zIGTCDtGqu>C-=$eAk8p&dPEu%Mu(qQ90v z>vI!MuM%PlXwMjlL27k)Dn+c`ma6MoX718b3Z1h?5zy$_u0w=4rjQA7gavGLs05S_ z^-%kwv#Rd>K91D07LwH-7Q4SrTVt^)#9(>0O13#-W6Y!tQPOao80_#`Y>{EwS=k%Y zs>XrX=t}1Rhru;A13OX#>3aVMK6@N6^bb&G>`wo=+*#z6pCF%$9T#e*KrkAf7<_Xx zfMN@r4lK)Ra5Y?~ry+U(6#Be00qr{T8~2mm>l2mim9(R&)J06|fvT}DtH4wjvZc0{ ziZU%oEuPvu7$eaYhN6*ep~PT<&sZZ(A!?s3+1R2Yo>IN1_q2HQl?=HGLP$(o%hwYK zbh$X-2y~rAUjz?XRAw$G)J~tJ6w8>KlCv^a!z8-?MpezF)pdkuq2>srXvq|#3j}Qe zF~Au-uOuV&r~o_BR@wZgB^Agn)Yf2w4s$Vql9&57>>#NX22DOFLxiN1VhQvl8C{#F znKZ7+O(u*Yp*E`AhXhKYt}5C%C3KP8SG!iFZW66@Xv9iU^sWnM0f+(<+k^?2+p2{y zio;x0Jee37Dtl{bGqRYVRbmW;u>oYsk*O?O@<R8{1ru`~i$C?-*?1i+{-$>B!L^E}lj4E!X z7I-081@agu$=gPPfqn^SE~HKgk|;^cUmwIGwH&+%AV*qHh~{S`&x&sDXtg|b64BNZ z^`+vX&%O*mUl`UBQ^soSC(B@Yh_s+pw0oa=?J^A>8D{_D%N8j(!=)BY*Jbq~H4hDCIc@j2zceE%Y34#PG zz8r$kg^JcU@}QniM{Hg3v#tYM1Fz+n?-gvkxAgiePd%v^h!UaBQ;IVcp*=!orpYml zimch^47B!pQ=c(dhfTf7Q=5}0Z7HVJEX5A~x+-(EujyL4VWbtJ>z)c|MkUc|0x2Fo zUm%QpwgyT*YHLm(mhK>|2MEK#*uSBm)XB2Wi+4jVeCm8)cm}@%HEIaO+*K+ZMN1l(MXB#k90WFlaMXF@U&jM6ZuhQNqp#=Al z26t<@yQA|3Cx*=IqUxZVE zBo%d4(-)cp3qcnj$;?;k13y(2x$CRt#^Ds)bxu?l20age z7JH6TtXggFN9{8+m(oE1X?^n}Aho?N(R|7jK~rlBd|eS^A~)umDkWREI;PGjxezN8 zPD4RrASBzMq>kj3*2K77AufyvL6ADotu)9uP>sjt4^DwNjmS74t(fbp3Z}tn9mp>R zn7XTKxWv3v4Xr(r)WcQX! zV^nx8P{P`Jo_mg<5QbtFr;aTsqHLBaB;RDr?I%j2xh>U}Dml{>FhY>ZNKr zf&#aC?VVTTL^a8>q4-6Jzax})lQmLHKAEHW;j)|fP>NzVrA(tI*WYlbAOd=U>6ml zM`FelXDk8`v@f>-c*N?kf4Mt_uC<>-A7x}ukW@)7*2crh6Q(Z_RjYE2fgEFTW?NTb zkdY3cM=&-wAYRic(jj!Qf>be$BVz8XK9vWMh#DYH{XWMGxDC(ZW|@WUKrbQ8ya!@Z zkScnpcI?C03lb7ZJyEE3<_=t?OHCmVUDMVT1#O|12Kb!JUJc!_fY^KJbvCa5#P*k5 zS`Qg7)G7IaJq)4qrPzAWc~Zz>_-N0bSrW!7jX}(X6@o?e1u;08bBopF^1aI@z6ul( z$-!p?o*LPDs_h3sbbXGR;27xh%h>E*jiaBzdTQD0j9BE18jIsXRG$^LmV3zu`fRxU zJ<9A_tO7j7RG8?k_W`OyNEHahKnW5EDbcl4e=QSp96F>69U&W#vqG(QvNA=zxa-Ot ze!T>tX?Q= z5o3KD&dMhQcb|3H^c>=Po?dKhC#f(4Fg_?_v^+bx4}CR4>i?l!IImp|!1M`F5lEof`*gCLPOGA1LhScG33n`TCf(Yz&Ftt{h)l{j|qc^#-$ z0yF|KP!&4~l_p!bf33t(L>nuGKIjwwv%od1*A1L zDRkX%MAqc#`BPYP+AIkZ@Q*yA%3ZpaFT|%uD2%#9PM|3=L>FoBgn~HOX-)4_SH{8= zUn_iWAv()*Q}_8ovbm|Ug%vaM6K|7YY$5fU0@YN9JRoIMVUjsPB$7Iai;K`?$|w?x zwM&y5cTl;TS7Aa!rcdLb#L?og8T9UxT1T|nkTg=Om2AlV%qb-5POfq77j&5qL7 zj;hV2gAS2zgoK7MRfv?35N&A*RJ0Vaw2AJpo^A5dUqh&1&;e>6=z?Y6wJiHO+g5yy zHiFRrMse3xNY(869?>g;>DWRb4UE3+3w;bx>76$ICBwfGQD$-sRXhA@91qW(5IV8% z?Xz^TBG8~rszY|Q$Vk}T_aj>;9ELDn#c#&=saHmvT1R!b9X!XEOe7y8~7zopDg({9s+^p6v zDb&6edZW8{!jYI4M~aSYn~5a=^aM%v4TcEm@*1}eif7;*T7TI1*Dx*W049iwiVfvU za{qfDrf$#<^Y!>5P_osp>f5n+eIIw38B1d>fKXRxHhq93FPgjTcR$MQH;JI|5h)^m!+2RQ#dk1R3qHnbE&_uNmxELxlnyZYe&yWfbNFk5~ zk|aEtr=6aqudm#n_U*(XB7@K?1Oo{}GCl8$9;Bq`(GtQ;d|YNHWAPJjuiFt3qY~AC zWQ=hLM-P6g37#jV_oqtmuyP50+A=+W_~P2D7-9%$6^NyxL_4V$3aPdNZZXy7HmYs; zk`U}rURj8y3DGlBC-Sra z0dAjnBDD71Aw;i{R)}?NRqrvNR9Yov+pw!rLsFPnjvR}!QfFSQaGgZUr?gsUR=Umv z;1OpCgNugM7_Yi7bt1!jD{Zzu4R*Q-(HDwh<4}WID0R$qaZ2nGT3KGBx>~T51VO0d zh;C%QaEcG%B7~gLp%$IcXDjZ}*U_F;T@4%i2;)geqD3e#MfADu^nLc8p!q5K?7_8Z7E4_LHnXCaAlf z9B5TiIb&-%R;nA=^4bL zy}HssG;L7EG=Ww!#zm!SK?b>GlK{ADu0x5QMc5*XGIglwLPE%7HL%brltGcypGgZX z5U?!Jr8tY|?+I$+`5^XrK`ABs0oo6=K?up+u0V*15bdznhpsDPk_6AC)bnf^6BhU2 z$c{<2d1|yWr4dC#GF?!pP{fLdmd12(E;cTRrA83*Hkd2Q))ll2E|}G9&aBFvfgc0; zg(SV8TBw08R+g&<1H6Q2Akd{1X^4n*P<)Jwr_i%l!S@m&O7Nnb_APzU zl5|F)zo4h_Ki1dQaF<8?V<07Z7;9=zB+fVQoGYD#oQQR>Al4o+)`dc7j?E~mY%rr&9lGHC?-a&jh5CVXtd*ZZaW7__({$> zKT2ijRA8v*(cstGpMb}w$7s|lK zh&j23zOh_80V!TnsOXSqCj`^P6zToBzR5~uVesPYoHIe8MC_rh9U_6g;06NQH4CPaEQBWHqili6GGuHkP)f zV&uSG30JuQ88u=_3XHq+po#6=mJR$ zoK#ZLC8M2{+H+oEGHq+3T)=X1FZq>?CgM4JxWWkzTDZm6QO%?~d$uhb(>4OQljZ4gev$gaO1i@+m4-kTX)~GyulF z2Qgh#gyCOhrsJtGch|^s!KBi#;@~6sp*i#k2t6!2rZJ6n4t%UNle?%^%Rua)+B@w0 z=b;HRs+rP@qE+bd%=rja2u##mX1?1Yl%CHcY6ohJN(#x#BNZeqI-}%KgZ}+}!q1uM z(4WR)il;y^T@BK+I5tMS)7D&}HxWp2WO>;zt*bqIL7gqNXzJk;0BS`^+Rh@b=ts2J zLbE!$YIXJTz8!nTcYg;mb2SaFlGI1htU{nFwy^i&u>Lzl90&+KrQV+?gNu^$bZR+8 zLZGw_hz#zkP*uhniRmo@<}ykp4Ja>abjsWYPN?G=kkyrrRO|#5HBf5vV+P`^ZQPxq zqBb8=zt#%XLQNYw%S4><>bACF7<#p^xTrRHbK7}%p?Y2fE1W06mc3LZnrtIf4-D(j~-uF2DEnZ83HRKX(B)T%j$Dq51qWh>^_vpT9u z-PgU+GK_T%fjnspEF~+bDw;@A(KR00sevMeFtR?*V(I5Y7cFET9TpVoiZBiy>7s;c zRb-;~QCBQrfDGyYC@fn6)xIo1-33N%WReP@PE;#CCp~f~b!x7rDCk1+FmDTCkI8{y zR!Dwu@dF7(VWoi-$;nt6X_eBob`YDi_L&r@LV^^j8>Ng)q~1y(h zd)eF%?wV3jnliQT@ES|mYa~Sy4HIK<=@Wt`id2m0$YRAcS^}eTlp-}j3prGlgfIki z>$s>@;)vvPyDybmW8)JoNLVoNvg-BK?$MK4?-rq7TOg)nj7u@b1XV(+5sy4At3X%> zj8r|FwKJA#V&3d)vBZihRu&>3Evl_Atz)&HvPD^y&TPt)ez(|Ff2n;c`{a(-MZzPN;DnyF!B*siDRu3&oWTjofLeG;`IL8FmDUBEf)5fhX5Z&)5Lw|v1OrK$d zrn9Kau4`#?M_*gc2;P35Sl#_r=do#*&9z%CFl~=g1=ISaXjz$u!6H4iP`pBU?ku}; zj}BLZo3&qM=q+bgU-fP$N3g|1pL^l57GFdIL3GgK;3vRiO_Jr_z}+cpIxTq+U(Z(f z;Fb{F-&+X92BZYjcjVw1O;ufZ?}?#;moRYlMg>wa1TTJSB6xm|toE!a`6bS(R&%)&+e{soMop&<}GLO=%KW4N;#{uX_ivlH0V?{ZeRBx>dD9_X453C5yy z&6GZ~rMbM!bzgH-H=n$b7L!>*}^q8AWrqOJ^m&qEE%d!MJ8B zTdKLzSrJF<;AgHT*TQHYd6LBDn)F@{2mH=pnBdshr95pYWGWe3n+QmTG_L8$q?|l4 zpKnw-S(_+?6kI2vv$0Wh$S^+h7urjKKxiA8m4)$! z4&r!`wrz}Mbb#Xn(7?(x8#~ix&xo4{ouZ8|SXDwtiMVVaswUBmg6RqSll#b+KZ^hp z>XN7%MT3xv=N+zVs#Zxw?6cz$BGGh7tT>C$Xr@Q(NRTc zvN2-CBdh$qIoSylpIc~OOg4G4Hw&M&$P|m>tU{tI%}{7Fn83~SHKiS*Za`?tgj^cW zw`1B7(=~_#l}M*ndnk&#X??@SH=#aPkIivA>6;s3X(;x{bR=qs>dMP2&sajpDUT=lff)f=) z3#k_f`)&5wie|1og-}~DR5g)vi-Km?(T#wD6w_5rOGiMcVxrAfo-_tySbA5bV(Zsx zjZ8n2XQDe>gMu@C#7HidjasxteXM1*)jCU{DHCIaJ^e{3#fk}2NO5cjTeW0`b*csp zsd{^)6BPHHb)R|=PN9g;2R!MnM5>r5eIUZ>CsGGW{!o43j)7kblo2(6Z?mqyK!_G) zRm`14f5JM^&0$zYWp)Ev)K&9FziEFHs#Z`=O<=0UI$2U0ShnM?-`ArW8bZ8MH3O&$ z;)5*4HKJu3^d2oC87X#}O={n#pxhrAMf99hBiM1x;~4s+QwNjngX#Eixi-D zSJkKT4 z&c*1pTEWMZy*`wMRt6GbWbVNzp6Pj^kG50Wtb-6R-+c;^5+D|#8MijR+CaCMiP<9J zLX70-gm{a&!c@skrnDV#R1rs>7*n&?FiQp+q#7d2v{+k+i~n0~=nJ$KpBG6YjD*rz zW>hMn2@`UcscTO#SL_~2)BESmU8n)0u>GVMY8#iOcS{LYaspdOq|X^eG^Pg+R|Qz8 z7)ec*j7CAbLav07=Wo$EqSKaCTk=9d(C9$d6ZjEL#}&Y$zsAP&Xu=}8rWqD0cOxql zE8JQFEL7_WDwJ^|t$3cD4Ar!wSuj_qsxoQuM}5KxLKMt7vZi$;9&T1c8)jriYPwOeE0yQb9J&QCC^bvm%9BtPtynkpurcfSKL} zHUlZf5Q7fxrJ{v#u!L>>soAQ#XV?E2*q;FepIbfX@w@`H)bz1Yy6XChQp;#KY6V}J z5`_jKX-i`%5$R-+pq5%dw4foGu7hZ7PU)aDmM4co6g#L{RGE6a+gh1Cvv1ZuYnjbw z%NtbCL0xm={b=^E25L>-Wg+b)d8BDHMn1%7*_(l?cjv3p20QiF>Y0&ow#Qp9_-fZ- zY(@$dZK$krxq##jq%VsRT{e)(YIk1@F2Sm61+h?e+c|={l|3vR&2)Xq2WA?T=sAP@ zgl%rCqGX*V(yUWGfQ=KI&}Y)l*q&B}3c=D>ME}nY$PUk(5vyZu>~qPaSec8|ZiXgL zY;7MZw#xwIPXu=Q2;M4=ypXGbw664d2U7fzV>u_=^R+FaqJRz2DwlA5`>}(EB7+qQPnP{?ut=YNLwN zFgAh+oma^XC7KX7w^X4f7bTaDPy*(W%!tma|E9&7?r2M^Q!GiAg>1K}r7DT2HBHqp zYDYAogNahcc%BzyVk8BkkB3n8`EhLGjK}N9*>oFu;-CThZs424g#LZK@yRT}we zMM)`A#Ts2va_nFl2$h|nnlu?`Vi_hY=FU`wPVGDVm7v9fE^7njqiC7Ascf#r+R_v# zY6qIi`V_SVr4Du|im9TGBZ_#i!K5|N5-rjzWz2Qe7Ry>3fRz@Rw3g5>U~F87grdZ* zpyR&kcJX{YN{P(e!%@gl8A3&xMWSejPU^r?2bRv%{;w(Codd zwK2sjewiyKGOl`eO6#9DfwFz`0!ezoX(V6)EuAd*H7sH&23QvYC5#cBQb|Qt>(^0` zHLi;OUWzl(L&C)2PWyGv*=$u7L!bnixh{MU&}e0h6d?%KUol$go}9^9X;mpPF)BLf zje3|-LZs)&6_^T)P0&CW5^by@B&uM0iAaT{k$DiD4N|fLIj@6FFJ4xfP*Ha)kQNO1 zW-GbUkNwJBPIx+r4#5{>nCQe{AsEyyCbIus-{--|(7$S6v=lwCa&h1K=o`Qfx4ZU}55d zN0(&JQftW85(BO^>1nFgPRae^5mIuuMjQZEkJfs@-5|~qA>`nqI=g?ZY~!|k7MY-l ztiR)OF#rJo07*naR2`wJNUehb%srB^jaGd@BY{pbv9iTyNQ^eMBwQty0jS`}vQz>s zE(T(B!chl&J`x=L%?69YL` z#4ti-Vdp(!F5uzdy`#ox(f%}P1KEmX_O-nr3}UiSnF!Msh3LSjSR|S+yw(YUK0-wa zsQ4nT#YD=nr}Bf*m7cf9vQ%Ty82&_k7%s(p%_g?CJ4GBcG$st~Cz(i}Tnch-th#V9 zk!P=OQrD>&weRjDF};XIt`syHbJj;Vq-?oh5G!mKN+0r{kiPh)r&SQaa^-lA7d)~m zm(EWp6)DzqO=E5W3YB>I3alQJVrdFgttDfs$a%^rjcr_Yvjs@oemg6cHD8LZ>VlG1Ipo%p~O?#qQS?-RKumggOE4pq%@Z3Md0OJJH4i-$OLJY<< zcHW<2tVqsQdP0i7#}}GX3DvZ~LP91}LY1f_QAy2&6)LT$O9G#pMG7H~jR_-AQL!>o z%j_Hknid^Z79=p4*n;0DBn4< z*H90bRx$9NN5QV&|2+Gf)zu5WW|}6VD}K`VZM&!?+lvaQxg}c?RhdviMWJHk_uYDN zg(3;GrAS0WO)ed+*u5w51DM~Zx%eWZfNN}KASbN~|F@P4!`dQ1EpZ6u2wvDT$K(-f zetpk09+D@Dbk9H$$RRTN|FiZtzt%0;njiEVBO>P7`#mQ!Z{AyVuMz%$9-l(hut3m9 zvJ66^fsp7T(c+H)|5sRGmxYm$+;YnZ84R|uT{bS)y*JOh*PIb!(0E47wce9ig@xFu zlkfN1Yt0!mVvJ`zADKLPiTJi}j@UH2P!ZZNtgK8DS%}1mQOy$pMOscY8r!>cQ9O$V zF7mUarw`gHYnSrC*|$B|iS}@`!L{a1VjkXkE(tbTtG)CdBYEZR8Wc~a#S}ebJ#WEG zaVur;G&^fI2aas>+kc(#*WHg`rMnyp59le$ptKyMDcAnx;cNSrxnF z#4L_|$)OYH&Z3I=6SGzB4f*~ugN*8aU%nkb5T5t@fI?sj9cp#pvEQSVU2GY4AP)`X zyLwn5pO;R zLVYw2dpSUw>2)9NL*18`?9R94waCa(Dc|h(R9ocx0#NCay7pb3K9-UiuX*9tH7+~# zzO+q<)N6(0+?$AHjkCP^7?5QeKX7=o`L5fUQrmLk+3(+T3=ik{JnopLtYS!}lBGb4 zjY7fLp>Bw~G}k0tGF!z3*xkVx>YBaC&y}_ln)WcYLg=#*hj;^68|Vg6~?ry4$s#;i42bR$=Cdaqkm{D`SI4d=XRl1#|{v4 z(u!xW@}fnjcbRL&3hZz?vhmNU`*mC&EMK&WNARJ-nqK3mv3XiTXrgKTl4Vm+c`|Xy zQG4YQB4+a*l_Xgko1~txN2a#jR8Wya6?B0}$d68bibuo@^3lld_$rwE46>=az7C@= zCpwJKT^`3r^=MKF^}74}z5xm&Md(N%v(QnQUbKd-tTk@%S*B;_Da7adclah_GA{AZ z=nbACL-X;WQFk~wI%_GD%bN_F;GWl1XFHGx>!^XEN;*STsuxKe+N@xD%;dG%J46Li^JWdez<& z_kQnL!i{V^GeyI0WidkDMG58X?e47JY30mpX&kL#)nKIy=`pigBHr|XRyp#@!zw@e z`y@*etRfDO*dVPH6=dT#TkXaD^OjjeDliyFaU_aDs~Q5nUdQSq`l1N)5t`m^`1%p$lM{!mAv0*1=N5{!)*J_f5C z7+*_Gp_66&RAJe zZQZ^%bscx{pmCnzi{c;z?$92`O&(u-0a^Yx#;WK(g)Vk%Zy0tIVxxnQ0J}t#eRZ6{ zXy2F_cLAc1)TqsSlakv_dR;M@adNZ=S49XkAIx%bHEO)HyIqs3v{z@MGg_kokzy+Y zDN0gazAHqF@3JHo&o)vy_uM6?FG8eQd+?=hj?8iTi2Lu-V5R* z>5-##f!AvVbDdIlAmV?-l*8xaQQ|%kIVYz!>Lod?(;59yVWr?P3IWo%_4F@n$X`cf z8PqnK)Oc}<1pOEv8sBA76)Q6)kNyzfYH4FRIOtPl#pNfv<8Gw{N_*Ke1mz`ET%)^j z`hJohoj!r?9N|QFjo<$EJM@m(P|+DR(~saYKX`V%)_gcUTE#1zJUI9RzwA}<+D7(T zbcp8{M+}}vV3GL82haSHt-x`VXPB!n`8ep0Z{)nlV<;SPAyRcFoJC&#h zFfA|bcO*KH(lBqO)G0}M?Z3_Z<_cyZvfFJvQA|s#k>s=?MHB1h&E4;jz}i8e=WV$0 zv6~rm+dw!tdS<-x5n5Dn-|mDtx{T%j7Tn2AbNZ8OoENd*p062lPCzx z5Am0p<9_JcSAozn-d5}DF`*DB%H)qYq4=Tc@@`@m^j+bG3-mP>XXGS7q`=XVmx#6+Um=sl9NU z4{?f2{DeTo$<2B$G;79%6g^J&qa@(-^*T+SAYodwGiE)!>+a~t3VcM|gvjls67
    ?$m z@AV|g;kup+YmIY0Ir@VZjnO{D<#K}y!N0C&WAqQ~G%kP2uE@$!cr`Bng0$P{&_~0r zA|hMr$L83|yI`}X5$0h-N#qYFE?v`^i-V6+gNd+z^;4rcYdqG$%vEl!n#T)Gs4>d! zjm*T+sR`z7L$Sjv-bh2kM4PxpqG(x?}@aQMM9PmPu!* zISCUPcmbI*m6OA96~b$=3~0_-(*uR?PL3wUVD_QO#2qE^`l?w%HFLU+I|x*xBJKzV zZF?1B+2ytLj@rGxjN1d}jWgTIz4@k<#I}Foew}S`5{1-lHP$G8(KAv3uhtn|mH-pQ zd4%=y>X}?9pw#_Q1(;~qEH&7pCOTo`Mr1@Pma*W9Dbc{X@Y>^=%R{T}Al$tVq&TS& zAyZ4NxMZqWuIr2DqfBfsnk)XHw?e{yD0KGERIj+2&e-?py&3x9>xP4OfnuomC~3KQ zO@@k~$0i}>uV2&da`)ck_itpr(vIsr-YSUJ?hAR3t<1zXxK{Cl>f2?OQ)zX!HE;Er zz2*u*#|AR#l_}ctB}utd-)hKB5MOxSDwr~q(dUn>V&}R^Rh1u(Qb8>S7@P`pxKO|7xLxq<>sKeDr?2XQ-`+?yh zm0c7Z-CV`3KLx{j%1^^KzoMBC%vtKfcVwYM>n}x%r5b^iQY<{$12E3Kgma}bexj1+ zkM@ueWx&`$eV|OU@1YS?@yZe*j~KKi&kb{psT3np<772Cw4qUDkP60h~U{m%t`k0?09sknF_N%A5Nbpl68|@{Ao{m?&4(; zo~-9D;-{tD##b(K1qXwRSzHaPH1w|Tb)7u?p}Kl#PZ$h+)+^~b2&a5xvMlYLW}R8z z&#Nd{y^~kj`~ud*dUe2r;sK5W`{j!shFux~_wv1Iu6t`^ zD8sCf!&Z$)X1)GeW!a%ePgW9YGB=Ua>38$dydpA+KWQnh%Z{e7YF>LC;(P3m?I6WT znhx0&lU9k~h81x&C8Ou!a6>B!J_y1giyv~3oaqdAo{0|HqyBvr-jT_b#_%0m0Go#< zKvL-G%3zq*_hNA{3f0i>oq3f!f1~%Ek?=Hm=HQMqQJgo20R21lAYQw3Kh!T<|#f&Vkp2mGp@o-p0_&ZdNjeh9H zM8UNgMJR?jRfU>wm@ru9gpnGBHOM1XyOncvU+p!deJyVojjTh?Tbas*5Uti4SUoHz zl!mTR2Ai}sv+VF+*V>B5W4$w5Fph)EPnln(4!u2sG&HHZDuh!gc+%~GTc;!c9$mZo z-1R#@m_nI2Od}6Ljwa$|EEPGClGbj>@||4ft;?5gX#*G>wR}<=e|3vy`(e{qOE&u2 zw6k)})+HXnjK%RdR8W>1?eJ0IbN8jH`><6tm3V(D1-(b7FTM822XiPwQRIx*SoZ(w)u7hlp0o^)RxiuFd9%#{+J|zjZtaj4$ zxx3wb9L0X*>oLDnr1=BRxM+0c1r?`9N+4}KEl`%y9AHreu4DdkF^yXJ2S@!mh2{i2 zhLEQ3;;Y!s9eXrJb``SEFVc*oOzt*9lewLMwSTOS&PWm2^`t3qvD3K=C!Asp{67yS>CAF4*I>_ro(8>?wp{sr2FI5^c0`Qt=G6x<1FJ9=OQA$ zK9`z<1H%~YaeHrJ`W`|Zvv?}?T)OVZ4&U%V)U7C+u7_h2oXnxRQG9KFB4;CNA z!?|l=cZSP^uvN1h86|<|UQe+*T3*ED{pa19_WUZgJq%jsC}L_9(!Fx=K#k7W@?(M{ z!6WG;PBNPe^uju}L{29sPcwS)d@_Qg9ruB~zdV!SPB%FY&j>m~cWisRWpanFz9BnV zqiQLI14+QMI57b`C+vPEfFhs2b!_)~AGgXki>O=_1h0lYvqqdM$}AV*4?N*2Hr@v* zZzNPmZvWTxfyb#kV+uxHcGNlICF38rjjC23WaccZU@F^3Q*zCwm{`!MZ7d(0c&i*VQM<(Rw) zTm?zC-m!~9r;O!Mz?ti?z+lEJLU)_5UG=~$b@_otbW!7^ww!es*-h@!CnP#VuVc}& z$$YQu^9X3aQD4Qe&QSPyrH%A8DjpzDa{tc3h zyD9T!J14&@Nx7e*Z3efJhbL>ndYM6*`eYTWS!ta>S5nT2z;B zlx$ix2{LN$LOxSXgrTv;Ilqf*xF;bIH18b!!HkP;rJ{_h?xojgOQ_gJGTc-h-_2?2 zie2-IW({0Qov$TSz^(HY$>ED@rNS%cMe7f8okaV_Xi1*(`xz*2>MI)uOF_QW*d_Tv zQVzU$h=`0HwGJZID|8i80BMG@*Ze3RPnIgG^M_oOPY31)-Hor*lX_{TihpN~3r!0y zg9rWgd0U%OQ12)1ZCDDj70KaFSPfat#NF8-!V0V(MFw9lglA7uyuy>)M-@Z0=Vw4W zASZCZ`ob!(^M}IzzGfwEkL{9d;`$ZRdtxk%Ksk0#wgw6o`kZ*fY|+*iv99t*YFNl> z!0zv=XFuzCR;aWw{HUlCb`kF)%5J{`7OC!3PNssS)vY!1tU^lkcohlF*fechd80PM`0Ef` zLRlgfy^oDXs=D;@uIStczjveC!5YCtT~&+}fjNVG7=G38$2*LgyZdWI(%88x^`Brc z?PQlyn=|7@e$9flk0N%@rNus5nfNu9on)WlmZW$)ef8?Bwl|THtsbIUd?L?YJDfzZxQX@CRYCcxG#b7Pb1G#!NDHRNjfPlw5m56kFjO`+`hv6W<6ZO=_arjNLlgSu zokazqqH)+`d=n~nbHntEIT{tNGOf(|zMZ4StTleX7<=|#{x+uN|Ay41%;e6meY=Ea zqz<&*5z6nS)=4M}&Wm=srLFe;No$7=ixpCI^{#u>jB#bnRjupD#}LB$#sv2_5pRf zqVtAYCHHIT=T!{5lx-A8auvTKa;oVur^gelb1i#6cZ5*)!9*hwdZ)8kCOScmIwx)p zO1{0zKlPn%SD|jkBSDV!;u1A;9yO-!>*6wz znLU$?OU1gsVuZ}ZS4x8&)3B_Xg!&PC3-@Id;aH1M(~YF;!D}V`fAJVkSZgR1Ae2 zU~BZW=csBeU+&Eos-g|5L_Ai3llALHTU|oQI3^5o>YygEsVRH3sgD*)APG(YcMx62d2|t(P0?+x6Q;$_&f4}{sp~JTZ#Z^QL?YR|rXk8{6XZ7M^ zG~}`k+>YBDCG1THyt+*t_-RRLYxTMOQL4X7ys;{riQD&-%TahUn>?fCWnvPVqj-PxmP}!4@PldGA1*PQE>&M z?)8T?{)R4p>MI*<4Y!fRY7nx=c;K%*M%ytAW9nU#Qa4Ky&tUkU1-F1 zH7>4@Jb7NtD^2e2iit?FJ)ri&UTdz1xcAqL#YZ1J=d5!)>g#2Vmx^~UG4!cNs!KB@J9_~$woZbYz#)M(?%bC4M zXT#wcSOg$s%4T2#ae2G<=mdAVT6#8?@P(*COn~ zY}B|*o++vZQ>aE2)wu+{nl>9OF^*=t(nq7Bz2t&F^#{bQ6IxBWrXgsif_P+lAZ^ieqSx zw@qUvd1gHqMNS{PxqxiRV|~COq-fe?Tr%72c9a!B@YTLJ=7ZT4GtzPZPC&80FxwMf z6%J^LN5y00kKLgP9F0s?&D5vwBE;^$yAhuc9vb0rY3zq{A++wOg6IRqBj{DPIAIgq z$Gs-hH!WK3;!**Kdk;~vv-lS>vV3`JWCR=sYweiYMfXRIY6Qs!H4^e(UM%{It$e_) zb&`*LuR_S?vGW0qTtad@YK%rQmVqU+R|C`=XHUjBI6FeahR`bup`${|Ykw+)Kuy2+ zc81*^QWAp{BG5-QAJp%^?w!s~t8s`D({u9_fB1SG6lTfMowfF!SH3KvD`@**rIqsL z;5ijSd||Y>ZhpksKCl#pxZA?>ix$cHQkUODilM%W?^vCFw;f3!gz`PP`%lFS>>^wU zb=HVW#qK7rpK%I(_T*7Y9&r9Z@@ZL77ea0n{wal5tFe@OgC-8oS;g|oyyG7n@iDo4u(S1uK6>r_Eje_z~0p& zxFZo$uop+l=@E$HIN#H%-LZIB*!){8YO?uSWwTO%R|VpN|!tI%pD$JV3W z1&Fz(hn=R4xEU4r~2YKQdm=s~=uyLKPSeXFk;-ttNEJ z#68NOQmuowI?IAl2Nxk96``q{*#{O)ptkR6hyl*8m_{9zpq^wb^DRqL)~3{!dl!3+eumI(=G^?QrGMCM~XUY zB*PTjGXS5H=t?bLHRagfv1PI!n?boMmlAliqsID)wNG-LcQF&iNwhn%;>ROZMZE%C z*?*cEEp;=lB1&tYlrww!K{w+$XPFAha8Pd0cAMgog)&#H&z{W8w0i=Q=Bz^UF6&sK zFUuRAAzz*p7;?P(-0Z@%8V~IOa@AjhIQ=s>GS= zywTmd-J$Xd3cY#F{*~ITZa#&0YH7ISu?e(2&f0lZ`+eM_s=5ic!C=i?_pC9K?G&7= z)LWs&IBm)+<{m-m|L({KqKeVDzjw=5cG>T)irP&b+y36b0JVnr2rg+ud68<8P z9!^#~g@wt$@C@uxaT>MhW^3yF&Z*3xHE#&ft1AstEQ2?NkX0ukdUTS;n1jp23Ax(tXXNsd z%jh3YOXr#jigoLZ>{#>rfL%Ka$eeSXl6s~%1go;dl)ldG4V0Cch7v>WuN$q|zpfPa zM95|qq}!uI%Ds8EBH4!5C`tv6W6XAuCe$a2kI~Gz^2reo7V#QY)yBFvo7c^%XD8wD z5ZoNZ-8mmMuG;e7@5n0t;6axsE`#yIXln9`-}vKE$_7!jr^v`o#Z?x^Mrq#z25o__g)gbgdKlAc3so?PqEsX*#VF>r&oXX8DNK9)u3^h{fk2VtX^kj?eP+X$(6# z?UO`aYnGkfr9N5(Ftn~P-#r2i69;f@qr%>pYu-h0w|>Xr6`= zu+~!&Z!1M`JMfq~6Y9Nt6*i#vXGpO|@gkeaS1H$&VlH)_m7Ce^YP>>-a;tlPxHG*o z+=S@2NBJfh6q&k}@@ud}n9n6;U7@Nn&UL0WjiIRXeV3MRyt3Wkk#-9&da22-IJGCm zS@*HkXzW#tw@N|?li!}kR9^So?ncb?%QrG|b-PqwMe4@v4#&Keca9ZGy6#Qy$KB}d zCGHJ+E4RuWu}PV-t_$;iAJ`GHoc1K_DPr+Op2$+o(r+7M7vRn*>+=hY{l|1h9RM}%KAe-*d_A%g$a%9#Fyj#;qu6J@M79mV9 zsU5&G#ra4bz*g^ZtJCZ3k&28YpDBe_(+aXW4BBc$UOG0du|qd!oC^ND3)axJDaqkz z?7DeCx=ANIOk9B{Ukp0e=FQX_|KOo9Q6Y8XPNjZzY!4o9 z2+ogRYAWm|q_3D7Nfb&*3c{Z2DUOnR6+20D!P@(%uu}4Eqs(3i0JYv;KPGu>>Fz#e z6khmXR97!`&{2r&)wqQlhV!Uv*3+f-GUF^0yW`%-Oe_ZE94cJT}SUa{;+{AQV`*yL^d8io!nICmv58 zO}xUhimx9V+E;W$)^po-^hStgaa3x%?sIW?cyWgGo~2NAmwVHlq~3-K&eZ<1!yoGZ zH|eQrp%v=HuG<86jvi=cdnI)wKaR5JX-^f#D%%&@$%Q zfYc~%4me{xxGtrvwl;35Y8eLTP^Rp(3}V$hcPMC3Dd@8DUS4Xe2QsO9R4C$6M7{Ca zl$&p_f|}Vr`i=hVr$B|+xZ2*{qyMI3&+;2OM6}JN zYc)$=>DEMgZk=;IdGt@d;ujwM8!IQzrD%_raFg;RX+J#tl^XbJAdFX0g3(r!^*S2S zW=nBx+N6i%;9u=K$Na!ra$ZlKd~w;Ayn&+Qxw%i^kFqzggJ=6H_0`KRVvh(6ZZkhn z{A*+qN8V&#<;{1VJZU(eeDcLp67qVr$>QLT39vsPb8kNiIT)32S zLL)6oB%$jmC0pgB)!GCp^ZX6%*qh?s7+<51&8R5jKcr^52tGM@qI-We75yq~l-8_q zrhIzH2QqJ*R&d%$4GUr7b4>g0= zsZ6B^+T%mKBzHc#v7S>1&~b3hb&C^nF5LVq?AR67OJ2HVA_r`=)!(KM5{+I7kNu($2#{UTKh>8}y#8*UN%+GZg|=Hk1im$ib^`vYLTMpyeI zX5J$!Ynt_$yNF9k$=LLr><-j?jjnF^FkcVJoi<*tzoE`3vR$qvGr-$Pm<=eEUjZT> zZdhcGz#{L%H8I+Rl2);;p&gT9Uzn6znOIcL$c^~q?aYiBd0qESclVM)mc*?-t68b2 zY}bC}$&yKg!X7swG0L?vLWjS5BOO)?#%yv3&YJ&sh5QN0(YPrpi)WSe6kL3oJq9co z(tDFEvmRbda4)HcT6XF>z(hz){PU$^Xx79D`7q)s4;DN0_v|X-XCzr1=hpiViWR%f ze9GB0MX-IJ>qo+PXr@aQC+coWA%ezES1ej<#jVJjjjsU0gcL-+y*4Dhwvugz50yDAneX?8hQ3 z%6I7^&8skyYN+)W$L;>vt^#Xir@cle=|x^H;%{HQ#)*N2v-&FI%utGYHY{5eOUhXT zquXG5#gkMgzKa=4!w%&z`2hRHX`iy>Z`C}|p?x1hMsD~|Z~LmT6o_{-5G?)VdObhb zTM_Z|5RXi{!bKZQg%C=zhe8SW;4cqtR_5AMP=)TTiJhn#% z?MAtF;qzIj)Rtf;i?C$O4CPUExkx;^2^#e>1h;6Y~|&IpsF{Nc2joNWP zS{ILPxR_CX-#QWkIB^DQq?=3QnROmm@prZX?R)&qk6%KMq9Suh!z@*Z<*E!ZJ*$t( z3iM1qSS))m^DS`IS}EcR!71YSk7QxH0R*Yy)GTxt5OTM{#qIRE9-|$%yUi9MrET@0 zMs_JUtXhS)Z@P;U!IivD42&0}v%abjxnHB#L5|gEgYrVCMHdOJk!#UL!Jzeb0b-Wy zJ2t#nC`xO09+h_?IrBV)5)G3L{~b!Ixp5{U7rVGVDyLn4KT4*(Kd|l50!6S^LAGVQ z_x4;1OofhS;O@bk>R!y8d7W%J<#svUERU?iuz8sU?oQ2BB&?;N%7`+g8nom8XvEv2wMTARb>$zT;#V7lHn+5>z|Tpt=p3}6 zhc71d19toaStFNH&t+|do{qH?e>svqo5daL5-un$&^;~wo0&%j%^!6P^e#DQWflt(X4KV2akC$ z?czDU_`H5%ew^4;)Wd@hT8_KWh*-o*`ZvR#MthWmcs>NVmyd}xjX{+k1=+-3$&nm3 zFbDtJ_98LY!*o<}GuL}@Q)erB?bZgKjhEt1yfv>IC*#Fl{GZA2gSlp@HXvCH`#?ST zk{x_KcdPhdhduPZGwNB~&*aON0|Xy9AuP$_K`(PUjiNp)ck8Q) zxrs=m4_V-mspyN@jh@Cxjpu!jB)mautn0)N$%_pt-|wo=z>Du#dzH6d;l@H>+T)}4 zK<(9D#%W>otgWE2u;W8WL4PO@uL^~BXvAfv=GIWW%5{Ff6&-QH1DM|3D8lq}`g7 zNv+-dscwyC#vFB+hYHHA)^hg>!ra@x-RO@{pH|;j{xYqa>!>qhM;PA+h`m9unKH^G zz!b=-bFx5zLL3`#m?66?-C#FkQ}Q~6?3qZwqYZIINpRU)q&G%2Do1m2JFt7#TZ%yJ z4LM?8>$=kpHtpga)x1AZ{kdcJ?`KTCXNRi~EaiwiTCdU{dV8p-MBKz?UU5Ig&xHHR zZOee(`fco)DI1XOwMFsh&Ux0^t0z=b8M}E~`^!sWKFZ@NIFqVaHq}}!$S!7LX{4cs z;;q=(H@1H7jcB}Ya%NTrRm$P`4c*xY1aODwDZ*ioNA%~aX#GwTUlun|p$}RQWo}QN zC>LB553#>btM2|aR0eq|PYZ`IH404p}sic3IXy%`-t=c<>HmZ9Ma;p;e=oYR#9? zfBSKV1&@3O+IMfY5uM$2w~Cb0`knbKBD$_w*kZWQJDQXvMqao9bZF1=}g*+S>|ox2EQ@RIE|sx!oXEa294=rs>z> zqb|Cv8pm_^1&s`o3$ybz#S#=fY?5v@YMSSoFs?z9^w+q4czde}3Mh zu3_!AYv|VR(XbF>*$#ATwYNsu9&AQxAsY5ZY$a%AEwVPEu~*kykx)mjR(VdaRwI-IRsPf!n%4yn_40dPXy&*#LnBao`->W%NR$7Dd{l>^ zg6NHlvkQvS@T-}y`-a9Q(ba4D7!}h{klBV-cZb^Ks}m+)oEHg8hpaWj&!kl`v*uLZ zRz2X>8a9ExpWrH}i-5b4D-|*obeJNRZunlZw&MB(7_D-$fC_^oLn9PqKxl5tF{(>q z#oUMLo^95KU()nF0ZrLnJL1f&tRT9SBd#usafMEFu#gIA}tZT7tb zO-bv`hEzyRKQ1c4*@eKZj4E(c;1yUY;wHw-3udsE)`!q2n5PQj_Nc=lz|G2vE?&*> z<+|Q1VjAs$(@v3j3(3f@*EPMKi}6##XVXDC4L^GM;Hc~HG_I6+V6X5)#Va(MZ(}qG*@bpK&|xb% z{9r|JdS9C+p=nh__#3*i znT)-PO`CG`#$X@gQ8GGwd+(LPNB z>8kbC3N5@RD#!+}5oT&cXSHOUMy!og7*<@QHuQ5+hkt8jfVM7JigY~MgSm9T8A_(@ zelX{=x?h7+BefMtANE>vOGVB2Fl;I20-Wb~;-PV#|Dh9Y>ivesQY<5$i~gHNoJRCh zbNq**NX}no1#^PU##*O}wjDCu%Cyqft){XaClaupI=uWSwV;WsFi*J~XPH>e?-LtF zpXJj00p1N(J+40S=%qN&IJq5NBa@VJuN7@T2&)V;{UIcb6|y5pXc#sc^KYl1{g(0$ z;z2U8R3S7|1pBf$TFji>ow6eMP;)?XzzzR0h zft-zD6*zgQdD_O4cbA#T7#~7mV=99yU%WBb(2^dF98x)o*jikpkaP3Q;7ApF0~g{# zq|9K=Cw{D7l-< z;N{@FJBQNW=UOtFdcO!8k^^OUG_OLb(4Zz#FPSPj0zurruEvmIou*4HupB%O4OxqUiZ9EIVMpt_mRfly(VsN)*V z<(bmjO^V&b-Wl3F9^|bSwn8SdlQal z!JPsAfr!MPMQHB&^Y#ra@(%Y5B>9w+v^v{XpBv;!vI(GTE)ijKK+^$hs7T4o8bKQC z5^NeNLUvD$rpDPt#CtT6cuny4c`gp*h0{NJAz3iSD=2cU1r{9rlNA@&*Q#k*AsHnT z%}}ARj+4eg&U%0YdY5sXI@T(HDq0~?Zk2VTKg9Lf>(f`mPG@0M}YNRAEgoO)ht>qi0}y;XsY+|sM*dUTCVt+|wBk2g90*LSWq=%(g4hrDSXtX+#S z>KS>2-Z#fXzG-0$TdYG8{LG+ze7mn(l9gp;Ka8@@idxtQv=Hf4NYvoq5<&Jx5|T`v z2==Rc_ICFu_(ZU_dlkP`tk+7{yD6~M)f6cGd@&48d&rTw%mrh9mmp+3$ol+QTu(!2 zRl_)oEBdZ78(#ZiS!9U&qd1ytokXE#Giypfp(rM94jAbTTNe>0t-9c3t8yzydPg&4 zD1M`9$knaiQwHVgRa1^@k4#=5OMUIeaZ^GfqrDX4EH*IZHw=9LX%n)~~^4f!75 z6@)kQ(kvczl~H8Lk9KHb)x04>oE}xSo7|~FZdSxXqmjiUY9_MXmSta8k!eluZLXJ^ z?V6V)pC3}2S(rB0VK9a8*h1=}4qUYAxN^B-=FdLCT;b$*O#<$j}sdG0lf{*rO1so6qXuKeXrxA2-)ji zmiV{2=M6p{pPZa*#(!H4f5>YnP9-Prb>q>=6K#}ThtttMxaL<8wsp;#8QV10Pb0P} zt!(^PTeZI=?NMv*)Ws3>s(WFV-3FCOVqcE^#$YD?-SJD}^t2=|=lHq7Y=om6uFt%q zE80@bNlxQxPa!%XBrOT(@*7g{V8Au$zcIOoUvf59a(H7Lohz?W6D1=>q~GdET`Pk_ zWNG_NsWcpoZ7vl&?dtdVP9}wtEPKVaY}evmF28fTL<8|GKaX!-3L=*w8$nL}M;-Y7 zA(ZQp2RRgmI&)$dJY0^l9lvGn@@-b6L`1^pfFl_+zJ8kY)o5XS=E1hCUx}XC2RyQf zl#V>E>JZyS4ol-Jc@w?uoe|>LjEb80ntu`%5D1<>6g$8Ev!l#EBa)A!adc;vXe4NO zO1T+n1dT^N3GYO~{GW%*bZ?VF%?N88DgTu)XB8UTwcMdKx*2Ck33+B$qB{<~Geiv% z;#WYr3Jg_1zUsAicHu^=*SgORGq~OMo?n_AxOiq{6?eUm{75)Y@s7qp&ZVre43WO~ zhJ+gGv%*mCQKgk|r3_)O6x#bDEsJ;^HfUx%%pMXj!wo zDP~)lP~Kcx3}@o~!OAA7dnRGMMu6hvxz$iDOYLUPXye7HP2*@A$@$|VAGkS@M-x%` zS{I{BvOi0x5V@m#w8vU~UNcX_qrdYya$~JkC3({W8L?%p^`@(6dEMOC*UiJpybGgE z8s1fMS~4s1W`98293P~(in+)pQm*n<%vU7{O+TCC0<`rTp{R^AY)>!EV63}MmeP7Dj;ZbZr*VZw02)N zJzRn>lT?&KN>SBY=h_z8v5G#f;&IDpXNc%^g*uLVW}M=v2r)`}Ggb!CU~%HJ;|;DE z_oCxWp<+*ikt}~=r;{UjPW?P0IiDd0{w(*)nPBL?S;8L>A~qA;xc(5d4`cnom~E9F zaznI6EGIlTuN|$SPJ7SPVzKe1_-vf^gv*$= z@MwH}|5AYH3F~8$Gl>rIoN}+lX*oI1iGMh22KIE~k^JHL2fq1lByXP=V;*GFp*2$^ zxM7X_#hHGQi`&F-eqF3Y97R`wnYrkF5SP%172-pAA_K{CZe|+su@qKpjX4)w&U{?h zGS*z!g6EeC#FbOy!6SM8^+|js{TO_$C%z1yMjkcdguLzE8oPW4zOY1rQda_*Huj_B0$^!c; zYlIr>%@qIXN;Oe=82Oyor*oc@5uJIcFrK}^*MhHvUSs5E;wy+S>~AjYv%wRVE%?J^ zxx+6N2Qy(A*r`MF*I${*je^G{=Fqz+4jM03Utc214AqIf!)TW?o;F>)JU))=n5!uw!F&(lUiUI$QBdl9cG$#z4p;z9HU zabTwFbQtDBVyobb{;2cxLnvVeAML@Fp#=Ex0hf4O!Qvx>%S4`D$!(b;AxqvvokUhB zv4XXp)vTkvIH)*}#o-6%I)Nm-gB@T`GK`~@q&%Y{C0;cEC=byPXp)hPesEsTl9B5g zTNix3JzTFRPFzd`eS21C4zX#lD zaZvSqW4bV{vP|imZ~9h)%R8BHe=FUqqorp z7Xi8Gt&F^`$<^l#q2`{Yh79tcG5WY4Jo8G1Hf~qXKt^{v{LKP3e1psq9riN zOEQ1^og6|lC++C9dFtLbcl_seE7lAViRF$g?}z>=W!s!dGqA(?_%rdsGK0^L4^0*( za0uSZV_~yl%lP)YgXcVX9E0aIIb12pKY#n=`yamOk3syR5!-P#+P6;pE$~1ENdFyu zII$X}(~hnfjqXIBqPg+ZDy~(5A$1A-k^AnoA8rdywA^`#o5|$L~JmFxxxVw@ap- zhH{1eyz_B=s0$9O2MfjZUV#EQzNsY~lwAjoQgIS0CXeLV{ncD*RqK{}ij{B-XI#2| zZpPG5A$vWSc*mMT*&pk z@}j(x^QrZkPBXbg^CybdA8%|GV?JP=Or$NuP0tR=8NuPs70Fj5Ke+-$4InO-yS#|5 z@8VjmsfL%u6~=?$@&|-U+_u$FwYR6;KxR9DS&)36NC{3*OT5tsqnoB*E*QLV8|M&skAADbM zADuO&0#Jgvlm~f;7qWICbp`G75NZ%vMdPj>bx|Us+?-Y6DPjD?9oA}cG`6fi`?#Gz zZv==SQ}*&}p0qA6m^n{+uZRLlS!FV~(!UB0J2>;ay=zuZBI<##Wag;~8E3}Hqdl0h ziGRB8@}OBSS)FP05E)q5ZE?L)9rI(z|D;9xfkgJV*DoA)(Br|+zmcawi^0bS&^6!O z^UiGxut|s%&hA|VU_p>3qGs!?>*5%Pu89w>ROE%!FUFcruqK2lL*2DY@v@0_)V;sw zz@&)Vyv>H|_lNowoX+IQu!F@E7Xl;749{&NcQrDN(0$CwfuxCF^T|(-PkwoR(OTo@ z6^!HHr;iW(IGDc?!L(Z)s6P$DEU9@~|AsS84nFzfuX*^N7fLG5 z!jEdmEE%&lo{o4!zm4B=xne^sG&|P_U@^*A2wUi@nm8H~53C9u)>y;8!RZ=P~qc0oTX)#Q0HIRpoiT0_sBm;KD|{Cau$*@q!zX}zyUbd z$>;-5<-;{^%sB~v6)4XVgXnnJO+SP+d_9SF>_27i-g}>K*6!C?IkC_fYpwYb68(v< z?R}J+2Wh&WUJcQlY7(RNVX^2IUB;ybRZ3e^m1d>@N4>Y&nccOy!0X1j>xQ^wf3a$Y z?uPaLN++*w@lU<+_ks!Yd!8p`OSRbAhy{)5fuD&#wgq-|`Z|$b*OguDXmj62g6{kB z>%yDKk3|o(UU7_mb9Yp?DbisV1N)oo&G`=1tk-lG+^IR|Q5%H_Z7sZ{qA2oV_hbR@8q~FCVa^u53`Q7h6Io2nizn9ynHYnXAL#nG> ztGGvvSf`5Gsd1e0b&5tXU5}8{iYPuvbU>+f4H=1f!~y3>ni zbsPuNL>i8qm<=Mo)5f5O?ET$=YhXjDh5N+{9k-1^YeFY`NsXgz57ipwz1?g5tMfka zLD4I%J}*sw2aHn#$U7%WG)X28}j1on z%BwAQd~4Ke=#sS}Xgi%&Y3fB@$E(oE`(26Zt|sIWoy+yiea3^6S?;pN>Pav6+~#_R z%NEi1sME>r_x`eoTbA65+?n0zEU8E5MeCmuUpO3B@H`I2b&0nk7(%dotMPVMz-K!Z zn={>M^E=i*8FP`Y;!0zdMQ{DZ|8v~|Ji$8I8hwf9;;lnWqIEo{LVs&Th@Uyggr4Qc z)jI2Z>b?YwW1}tdfr)it;}f4U{qm=c=cJ03>F{byneSW+qAPWBOGQM>8nH-9?aGnba&c;*?t-9@o&BNSJHI_Abewb{Df7JOy|YqV@-*FKUqOar zmI|lrPM%Y!&qJnozn)#ce;+We>(sxEEYm!7{V(~p-<9%O>&_q2=TL`cS*jVc+oM2% zoU0bBK6BnFd)%rkKuNFtQDn@$A(rkm8m6 z^!ea(d~iGl2Om6st`zYQcpOvSC5o0vNn&F%jt}CRQh}{i`)v8XSR>XK&IhqhR#n*7 z^ND#=mG7qUM3Iq2UfT;>_j*#nZH-b$yoovQ&rgJnmk+AxB+O{*}`I*6e+o5Q64V=XMFLX6JZQ{ zuz1q>VDUxcCm|B`wF%X$KCuOJ&APCg60a8AD1**OZ~e4x9$>fh}o`Xy072+4Wh58{6R7Y85pxev+9OFy!> zq|PG9LU^LIKzjeiV)D{43Kf+r@li@AwL7hTU!OhiPPOz;LNoC?3N#+e>h6RU>AI=7 zmTBXvLCS7_R!)w5=>A$_E15kw5-vv;2334LV=+vlx9Md#Xj-v_k!pmro=S~)UXmmBc07OQs%6VV^jFVp0AJ(i)_!{I{<0zRfY6pF?Y@1Nl*zqnlULb*)an0+t6qzwa zPF@p8hCjICWG4u$m^iy}m9U^$8T!U;No` z`Lo~s8Q;GBMEig_C5?7fo3|0+R#=#MdBbd_oZSWM9xw@M=*0CDp;y1fS-%M)K|)mCUsIoQmoY}=Co}5v_Ck{spRn)$>;323uUqWwMI(6qvFnGctwy5GuH9AM@M@-Z=@x!Cu|qy${uTOM2))k-}f>s zR2)ykt05x;>*9O4Hx)sE_k$#4)v*m(`%xAnzrMD=LcssTwcqP>|EVICOG#vnX`N+_ z%!&HS2OpoE-~aTS}z{X>kPls-QgCl zB<136CH}~u74;xdV@oxby_&V2S?=8=+ur$4FY!%=F7~}Q&50#h zrcCVYMsY;kFVB+p9(1OJRCOe~qf`;py_bA@lh*3@%DC&5Ii)dK=8K0PCUuTmRn-M? zTI%mNm#uq$E8?y)Fx+O0X7X4djmH@L-9P(1f9KDB&*S4aV98ud#K@B9i|?~PnM-z_ z>OCDmY3e!wlFP=Z$I zLM^rX4!$-QVN2_W*J*y#JiWaZKKi~{RhXgF>R79IJQ~?qiZGfKIWMwo0`xvwPKJvg z5+P$Zb73#?%qhPnOF9qIgkoeGcp0A2cs<(tGl}2S3rZiwEm`%S4)LpyjJ!utd#1hp zhW3H|>sQy-S5Xw~v7R(HLQ;DDj^F5yI4gQKxQkkiyUfbyuQGae8M3!%6&{0=FCFAr z-aB>ow)auzz^X`Fh4>^Y1T6Hd^(vP3{arQ4+V4o8s8tcDlyntiabKfX!LbpuR%0!z zcccGWp{F;BnERR5*OBVL!-G+=5iRA3)k6lHue*d+RQfiogGn{&*Kx)z}vW4d80?j|!01!@**?|tBr_=2qwa|BXor?vb3?eWk3l$YH}cjZfZD2AvtJ+EO#TbJ-; zlR@8#WVQ0bfmi+T_FO27OVbM3sc53&RaCV$N^rBUt1=Z0Zkv`QIff9r6{`Y1gNU^+ zbAc9GEq)g+nNlt_{{fBJcU6t?t6Fon4Grl+n;y2j3x;;TE)=X*7g4e5R#l+kW0W_I z$gr)vYT6K#mn0lkYe4Tet5S@3mtCg1jJ7)<{oh(q7i6;IAF{~4kT-&u?BcvO+;x_F zv6nQqOj1y_yFvt5g;Ca`FGpe(gYP!iTh6ZWO1Hr|pOT4N^@djAnN5Uav#P9%XQEI@ zz2~b)-oN|&nF_teLac(_qIJxMa$8_y|g*{K&HPi>i=66=^s8ga@+-Dm0$HeRj`OW z+-gjdZ20)SFBKBg3tOqeyokB?VO`znLf%cgd@_WvY*b|C)ZE;wK`Av;-k?$Nh@$VuoEL>~UZ(-jmnAc_C;YRUB=LHf8B0$@HMd zW>l0+*dR?sNSHFJw*5&OjJIF^`s=-uy>}>sp2mE9Km?bGgnT_d?y-N5AlzxhMKi3w5#Dd~ z!ZAO1jpMVZox8cTSA$TUtBx_0_yY)bwTVtQt?_l1{HZELj9{mI;dhI;m` zRh*7~Z~s~VgOG09s?Z&`KxI{BYLu47h4HY|HQddECGLl~X@5e5wAaqdn3cnUS0$!6U{MlVaQ`g&Wu)7<`PUttJe*z4$3T8 zYI_7^!cK0DBHgupP3zC+lv}f#?8uwF9^z{)+>*ce-S7DG-~Eo`I9MwMhi}JalPho= z$NiA(@JsKliXvr~m{BnCcAW-H${Hb73eI#=56xP*b)NYYGGvWpVho7IETW5VH13Bj zGw(xEkD}j7|UY|$BvQ_Sy-tRYdT*zx6sfV@kA`+{((}u1Q(+kbm z2Y1xb{u=0j`RjK&gEQyOF~#qzcyRJnqptnk?`@QZR1q7>-$nhF&Kky%AJFaQm#O;| ztSU4`2verXot4h4!cK}NkwEn?cWzY{_vTrsN>(^uGCA2fJW&PTzQ#KQbzjfP#a7>q zdjM+p-?6$9i?goF`&DGWbB&_vcNIC4Jfd;d+8xpO@>wYG|K#}7)l1@f_5;?IObwmGEK1+XNQqe%1+mN?IARFM_TMRJzZQNUHicz z87YRvoy~`A2@cxLH&jjY>ms7sZF58qc<~xv_ckyem^VG~;AaU z5bxt|wrw|DCKif#KfH>)YO?QU=~wq-KMAw2oMw8SJ!FM4`@w2rc{Nj$I%m+2#_xXr zd;a_{ek0+eIG@SOwN-B2>S)QB}BkV~m66I)&(` z{CXb!!IWJJ(xKFtK0>26?3oYJ^p!NPbP$G!ys$k9dA+h}J6Uj|TAX8s%0jh{=i%#tzYsNHc5EPsJ%u#_J&@( z|4$0Gy|Jl-yol;3HQI`dGIT5TOjhV^SpbO89e6aRy$HiEH0!m|McrdB)WAQ$^POXr zjB+csyJ-8)=ECST1mEjedU1hvso3t7KoyjF594+wmc#cVl@FI4PiSd)m~z4@W}_8K z;lH{MyR(q_un@9z0UXV?2*hU*Jd*C_5m3zOUR)6141z+S9gxAF=XaF zbeyiwAE|=I=TyU_hoFk4yx)!GDh`ohv$BiOzI5NUdTy1q)6n7SS<>SK656`!CVThGo3b*&z~Or_Ah?RVUlI<6XuFgkg3b~v|D51Tr?gP zO=6jZH>s*Jxngm&@wO(^8a>+34&j|{DxQuu*yfwN*nY*G?9cLATQzIY$(9i91Lx9{ z=kl{_t_;ibI%(cszn-Vgn%Z|_iIVU_QmAHIXsA5gUT?%xzCDpvK0>Y5OOSTl>*B}f zg4a55<)N7?Ty&G$M;pwz2o}$I>U+J_C03C#tqgz7kb81o3{f!LHXdl(ew$i&doe+w zE+!A1iW69sO1>SC&As?F{f{2_T{P{jBK80+veJD`vPf5gY&$ynRMqKSQ504xDWz|> zw%i{oedRAncDs_p(|1Z#SP)@hcQB1uNN^d zQ_2tAiIR`UTU8sTo42D6)J#=MFp{F@u4s9UaaOES`5S-r=YP&mpFe5NTH~xOrTt{&Yfa5`^ELj%YMsWVJC?e?*-$cg z_5I?AO>n;--ZVkd8tEk1f_2~?`0PreFF4r@=2Qy3$nCEW9+~v)H}P((gEl{BGH#eS~^FOGLJBY@4g>Px#4wJw1xK{5uf^; z@7H^es4%LOd+h`MVFc?Zs+}g=pTm3`V*F zyG_V6+egb}J79@oA;`P1*&bmp#3rlB>-WB{48Mw0*gcbpGQcje?{gur_TY93{^6?C zb6va(KPpbREWnkzYLgAMxS;KF9p`aR1L}{3BZXPH%rp#(%&!{%t<; zAK>{*@$Et*u@o}XQ%X$=fzLu4Ely?_k8cNm=P!RpQ1ptLM(k4qxEW}<^RYk)=&9I+ zWeA0~yX0bJa+FzK#)YtPulrx?r5#nim*HZ?qbzDv^{eaXfXAggDiV)HqUWS{-M5+Z zCHiqqS(-Jj@;2J0vwOTG;g3+j!;)mN45k?@@l3l9g^I>x5LI~Sv;9$Bz#d}X3tT)u zm&vVRTx;IkNwQ2EqcRuwb5=^l;iEV|d-SQ-54j%FwWH*(-h!dbpe@gh^2B*n(`_7F z&o8+Qw0jQ#UKA-fVBC3zwv8(dV zkk^CbT$c>}Vv~duu*tj@UU?p7lQBM6>(os!m{Wndk-RQaS=Ki@xa^Av{rikEDyphk zB;D&3U}j0=uKEQB8g}~wv^SP}YmK?4du_8q)=jHu$sO{f^)M^o?sy zk;t`++(=o52w5T>>iT&btm{eA>(}ByZH`qN2W!5vg>qg*8(br4XM;zXd$mHg;v&rn zo8nk*6(`1^dGJvZ^2w@FW7V-< z=)-;%o8mMi&0nRF?udA$2R&M8;XQ)m5V%aR=!3#w><9Ux0 z&-f}7Qz*c>z8LM3j3;JIUPalMy%Fn)S@9E6%9NOs*`(d`6TFwvCr;v|UATR)kLg%K z=gkLp{sHd~VhIsy<>%FWyyV{Iwa3iz@v=JxL0d@ees#H4oTc`xz~(|Mew2%6jr`X= z`p+^a^hj2G;q3vYpk?>Q!GFSof1Cd#|5~}x&S84o%|NK7}@6+Jn&RGqZ z@E5I;@98wt!TV{>vqmsG$FJ2+v~68-ExxKSNkmS+Os3~gDu~m2xh9|7Y2S$ZcsJPf zrNQB3+E5b}iggget!d4SsWrLg55ku%s#$B%doP#&8k?0RN9z(`ENbkVN>A?&p3aqv zbBQ|eicq@Cc6M{M$<-^@UDT{t97FVyb6yc+AO1`47&`EP) zfc;N<6TFa}?Rf)~d!h2BR0+O~ss1rV4sb_1h+9@LmFYLkV4at;iXH_44=1iVgj=I^ z`7|W$#n$%<38dzSOOCyAYc|%>LuhIA-fyV6)r@fyk|Xlw=NK^8$!L#zK5f+jWlDi{ z#k{?9yei&n{=%bwup$}l#qmge_}f<8F!=&(GeCP0vPP?9?Lv`6fL?M04xurB`R9Mm zG6>C|UDROy!$v&m58kK^qu4>LFHe554ThO zJ{k5=+?`%1)ixTmn~yUQ`ZLmNq@(NFtgDFCiz_WXJ8fz7v-MR+7`xAoA*+WYoN&Fr zR@eUYMGwt0c1SI-L*_9vt~hDgaf6G=(LU6LS~+yv3&GZRv|4kE;UBDcsymMJZe;fR z2ko=Xh7h0jz~Wi=FCh)L8vpIT=Z%rcu*M(qJKcof^*M<)n26xKnm&lT3^8HR{7?}? z3R$-YnUd$OIGM9DxpGP^v)^mX;u0yt?-=q3lc3>Xt|xACm!IYPwPT)E83ews4HZBd zy=hO2DtNMxml`AHB+U@?8ji_MH~ z?dBv|M2*IpI4KC}p)wV>s3PJ~&5zoShUg!9hT83CgX_8Kt=~b?x=VE)X37E~Q#oK} zwDpDggSnmzGcf1M;L#3NYDApg<%wr@znbp1-Oc)56lt%f2t?s{MOBqQP*cX^O{Gu; zDd*~H>{=mq3D*CyEcFN}r=Y56xpd+vpz@br-cX*`oBZ{c)xT}MGv|~(zLk4NN!h&; zXyw1KyI6eyk*G8q?R`tjv>4<|V|6o()(%Bp^6&Q!MPEirg(_V;Ao%Bkc~d3(TU9eD&uHH6;ViKtIb5#>PdCo4lyrwj71-s^JmSC_vQk2cUQUj zQsvhZXTamYuD$STks3TOezBmh!5T|x=;q{-6p%t^>ulBr5+<%kHrzEXkb9`sP-C!c zXO!#*!c?`>v2`)yqF2Y+&56*uIG^7cW3c8W=i{~L=6vO(+fmZ)O+|ev37mHa-6C%G zMMe`p2h%1S3B~1Vy%#M1_PhXnG_Fer-U<~LgTdGO;@~x>-sXwN+o(neh4JB!+ZI7r zJa1$2-i*1j3OD_$s6sAm6^Z**RJUC;ye{W`AJY??Lie~5EbB_Ztf&$yKX{Mri!}RQdRp}%OpW0&`O9QVBGfc*Y zJNVluevv~OEsbcEVOPcO%1N*0B@&KkQs5$xJ>(V5O$Ka6e?JaetS(a&~a>MaCq&@$d)F_)fSuRxO(fzxfN^ zzujwP=#N*bTz3)!?W>r+gb=4*!zXjfs z!riPO+ke8>O*Hb?H-96~>cH>xp<;(3`k7go2EkQ{)@y0JVzmIgWOb2AA4A>?rXr

    iLT)QuH!kMFwWi)@1)+a6!$c>N}s22Be2GhHnBU0H@F;tDG`8MY@`37ccoBK^+8v0Tl~24JJ`S&g`dvF&sqYyC3?l(ow}}+c@C%1J&10o1=2KySBD6-HBw5{bs=fuem#*> zrlfpzQ}#Id#sCzy0Vzxr!s8$yy22=Od^q=}LRlMSnptY)FdgXDnM#DSX-X`00aur~LKff;t3f-g`aUrZb}**GwB z=FG(O>R=@%>M9#*K<||4i1*5(4Q~rwV^PyqDPAzSj^VJ>-;kti^&I1>H(C+q3U!{y ztuvo1^HQ15jV*yoBAZ|tZhIm%Fdb>_z0=o~lB4CC-0?A1bxdA~b&cE^N~($_kI+}q zFlDzT7Gyo5zTyh22CBHKz_y~2E-CTZ1s|uuYX;V?WPw`mNhwq710@$C{@~gIxNH)= z11*dJg@|m>f=j5=`u0GYj%3*eUx(-$SP=B5!3S_r(g^MZFiE7k;5z>Fj!g&D9a+z@ zUMvr2zitLQS2}9x>yqYlR3@|>!FPE(7dnQ>kX`T2vW#N*((Z^&-p%P-+@UYz-7|N3w7^>2KU&wTEV|K+weF1j=IVl8~OKK;`$GrwGVx7uf7oe#lki z5eLufoH1|V?czOLlZW$fB$kiJ9J_iLUAZ{};n~-Y$4HSpmb=S98LlleU$=oy$NNH{ zxp+hKd@Y(Dc{X9;PZY=aa46oDRf3EN7HB?04aA1TJ9vG;OP8=; z8J}?pC7c&R`rCoS5@DW#*J#iC+)``R&#)iMHU@gQ#mnO8K1$OH%Me>PwhA z`Na;0{XsUtk3Y0XFa85YI8&)51WGJ|0+|9tQUvEOk@i#KP z4mq*4j?i$;h~ql?DeQzW+qPE+A!9>$IA7Z%ufK^t9<&nth;H;#9fo8^e^}6)!JE;M zYTGPMz1d^*Gzel~%8?=YEoj3_z!pa#3itkpRrTu{?T^4jd>5!hy`0 z6-QawF3y;SNA}QAMpO$@^l3YXEZ7=dorm)ocUbBgd=6Dk+d@*MXpmU%<{Q>p$(lHp znRyDLvRHnL19!Yu~87ax>4t`)C~uZqJF911cvE)?%%3|3#pNyq9@qU0yI( z<>&`EJwynqA9>I-S#wCBU9j>9y>hVQ6vdPo+4qgk@GkIXjl#BO+*&cPAW121)<>eb{*94zlyX-X}fLv?s~NzE{CPDz=bVnSLH zN{2NYN6Wl87`9c;xpR{boKh5rd79~Ui{7~Gmi{p}yftbbr?&BkT!hr4)b4sD^>Y*& z-O+jq0&DLawgC3iW^kOs;ah&t?fVxf;X~*o{u96p1-)~Klpe4CO`b{Pxy_$ z_;voh|I6RxKmK=qH&isM@$m=u{J;N$zmF}I-aK;VwniU;uja;o^6&lwK798>M3jH` z|Ma)`8~^6t<#>$rcJ|ndr2OdnAMkJg@BS8l`#=3XzWr-o=Jar))kg15Z$S)Igx~+& z@A7~A-~3IiDgTH6?cd`6^?(0wm`di2w{H2j{`dbW-}#3>Vk!~=!~4mf;DYSYIfz^k zjJAzb^bvocDO&Ws29bYH3Xej9%a))z#q+a{S>%tI`{n(1dAMpC?WtX!{VEqIepk9& z*W*<#3Zy{-zaTcd=HJn2ilWL}T+e=;lEPhjgqJ=ZBM>$WnHcY7m@w{$V+>g(NqFn* zxP}9x)FF9`kYvxKG{wCn-0YW;SNIqa`BVhQ0vYSA4X|vB{UasBg>w&XP;hqkHlK4- zX3QHi1=CPFl~I2^L^qUT4YY96qiEgAk$F4g=2R69kBHd84v7LWC84%TZS@natLtOY zF!_}UB@I@LanUS_P`8EK!!67DK+-}^5j&EtQ&XX8Vf77AZV_6UNY=^Q$}%0PZlgvQ z8nEKr61i5ECQJ*mozQ%sxwDc#sg}BoBEh8LW<0cwn;g$e-NfB>z!>6;A|f4+p9=Z@ zSw+sL-y|7uVhmg5WV1bL3!rz}BI>aAg|k#eTB zMwzDgT84M5?|CGT2P14Wj6Q~G+_s5=kH$_KEv@J~$3`d~u%wEx*2+O9l4LX~c|3k| zr)UlonFyKOS`ej8!mj}{vL?E9mb#6W)~BIp*As#W5xhntdtyq{P`n8|EF(1@F6y;? zA#tJ&wL`C15Sv@Hf@-T5qS{1>N$*OdGv$fe8?Fv%B9}zn0|{ThMxE$$9t5~fm(Ehc zh|e6RUf8TM)fBD2P~pBkxK4Y7=iF-x>lTwr3pEXsRc?}gu0 zJ4;?^I5$3%M9H;sw3)ew=S*C?p}jD9WQ8XW$hYV*&=j0gJ<&@PUnas$6=oB<2j8cu zk-N}qt}YK3&R0G^gf)Z6#pLX<7u_dbZAJ0{t4p*1hud(VOD)i) z5l*TlS3zRt=h1XiSeL8VEt@w^sk7$E=p7_kyZ!dGu%$es2TqyH|*G4YNdUoFa z@{yDhPv25*Zl zq0B(2LryJX%A-U@oxy5_ejJW^*1FQC z1LEOPRrB6vi@%2qBJ}>>^pmYC0QFAM8~OkNB6(}UJ$6ea3awNE`OD>ib&J9Yp{C5# zTL2HD+_?WD)=ZOVAt6GmHHz&iV_U`gu1s-Kk9Oau z9VjA)$zy?JPk~=Xzj2S$BNt7g9r5@6_IGIA z_(#A0E?@nnU*O?|@%``pgx~(l-$D{3$^827e3ifW&-@DWA>rn1>nP&f+15ZvMF$^c zw2D*-0&*QFoWywNu}eu2~4&~X@ajBOpQX9-z&TN=Om+h67G z=?%3-#D=$M4aNNl|Cq-k3W)dAQ9uZIkBlK7#fT3w?k=4Vq^6OQjMkwIrBn~8v6jo< zML^sh6*5AkpTn+v+LOm$9dJUBlOK8U45WTXZZ5Mz%P58j0&*_HwO=lq_T|U-c{b3& zz2Na-s=3oF)ME2v90=S4*=ZO$4i1MD@^z$8tquj9UD_!-3iF9q{21ak)T444mj$Qf zJlboWF2dCyF*fyxm}r{NEt+9=R zQ|0P#9Ii8lrNQk=H+WxBu~2V{Ag%NIy5%0lWaDZ`sO=mJg1e~o9*<+MkRP|M{t0Bh zPkoKn72B{accZ^t&_kl%S2P!_2kFC>C`8h2zB(q4R+HHE6uJ+9z3}ng$-93?&bS%X zJz864lz9$$dJaRi;(16tVIFO(jdgff3TL+QU&A!XAK?~tEXs{Wm(JEZHWtxDAWI@$kOqfK)e8>mR{S-bdy)zHFdAH8u z=jdLVzUmrW9bnbEN3^{q+(#M_duG8jCoNr5mi=QR*AuRkoMbye8Zp7v8T&~HvY(nF@Lf(Cf;zz*R zg4KZK1?6lXG0SZzwye@q!f9OM490v3^s0fzY_r2*WH1GXz%4eOPb@)~R#|K`hS6;! zPj~dXAXbi$o%97@9_t}`={JKJ@DSUAMxWKzQ;fM!*}`aAO0!7 z`8!|XKl;D@9p3%v`@HwwbAI-t_qly`Gys{x5h7j>q~JD2WL{# zGz|GZZG1b{E2<^rwyGoRsD?1)!n+KTYf3x%D8mTx8mf79g$^=!6fSmYOJR@W74_0W z0>5y1;>-QP?gh=K^FlA(s7D2lSpx~B*Co09mE!zy+tULvPd?<|Q3r>zs$mxH$5DWc zJU35Fs?pX)sXko)yT#m+h;^8T47@(#*Ss=JJ;r7f*b{wQ0udU8S?giJmzB7vQQ!p- zBp3JOEQPZ=#f67qMF7IwoUTHeGkIHRBFx#?HVvVpIh!SJrE_+nq}Yq5vcga@m^QHs?DmxQI6eQ?Qd{MG;N|9N@-@~`K^;l|x} zO=1k1b%lBU|E=J8{BrOtNE>jZdwk6mVwbI>cZH8We97KRAgMDWz;iUZXCD7I>S_h1fFwd)kfAM)58Pn z%|z-%zL^;1Va1-@VQzr{F;j`~#$A`71VU7*(MmxEqSeKiJjV&HXO^^Z+vg}eX-wqH z;^}T!fkT~GSt#X}wml%z4OY(-GE=z;UxwCToKlu#9J~ZUFd4Z={T z$%rd`TSsQn=*x`zXUj%9&Umemhmf)jxA9J7IrWa{Jk(m1iQAD@u2^4CJ(6^gLUkgX zex00dY5l}bEY0aabaldIx!HE{%IUq4^L|Pjw*5Y6s>6-v%SL(tzwP$+k zq@t&b#&is)_1=xs^Aqlg>6kd)PHdZT zez`E;%s9?=zmaA|Ju}@pr{~V?8xxMQJS^NCXDGtMM;mu<9C7c_KCH^NRBrAjmL-%; z^UZ1Kq=ftNUC4r7<{xhut32+Z6n<8y=nom2vr>&flvME3lc|+t33H>5lO^MzGw{2|NjJ;LqRI-#{h+4%^ zW`XKpDm-h>$5}YKvq_@YGnyunj_3+&Xmjk4&>HRGrtE&@;ou`OV$%Z2(Tk_r^;M?A zPrv^@U0;ULC`URAiJ%c6N^cvb9Kue-`-r!2(wzAIAO4VhD9pKV+8(&cGYdxAI+CEN zBDF>an$<8*WcR<0)jjAd3fp-oQwvv})hAz3=xp3*!cbL?-eU3rArZ6C#neYwsQi(lr4~ z3&x=)Y#4u)M@3G21|?NxlkmUrx`HZN&!}Vs<dSwAW>3D)VASX zm~K1XWwfr&SB?cbT20E3K$6o0$S9ijmd8HI2O2n#-Xeykv7shKh6Fw~kZ3PXdSLT& zAB|VhwZG zQ1G>O`Aaf5I#UWX6bZkW8)K=Rz8s+N>HXHi@i5AquhtG!N`vT4m0MN4%_0zslXY z>8Ob&(3*2hY1d(nW0i-luWcLo<|ck=YnRjdD`rcdDm(vkyhI}Hyp7GbhPo=g-cJFJ z*9HxAdQF};T32m1ui7_PxJ*jZaG9(<4Dt3HkzVV?RI9ElLZVEM82ZHKUoXP6eac0R z8BMI%B#tssqVtH2pWmd>-FPzJQamKto37*U#Kbz5I0g1@JeiM|w%A-Es$m-jX`y7e zZZLo5?HpHVZXDAM_x&C^9EV3r^Tuup_4@MRKhQtDP0yasou4cTL}jrGYCCkF4AUUlxu!2>dm1w6)boreq+LcNteq}^ud zd~+S|vM+khWCu#?tT%<@5(b1a9cb-L?JIRVfy8)Yi&M7%ecRAO5a{>J9a|UD;SjBq zZ3~2F_d?l8DVKi-#BkdvtlG13~?d-w{RX5yUy$^I^Jpj16nd zVV|b>xb=)l#^(cWMq}eJMXN*v)(W@BYk@O(u~8hq<_s;W*tR0Z^GWp+W8%r$M{z0&DezrI1x!9TU-DI^ayUK2I7dvJxaRb9>omfAmtuG#a=hKAQAiT zS3+473YW{lQ{=*rDJ64%f6sI%gZH8r`L=4JTV-EWqX5`J`e8MoaY)-Y*1ZMwI5_jq z^BSD>xK1K3O7M zZAoQhPs!NwhEQJPP&BFGnkioC>ZpgpHjMs)OBEcPxUSe0u0rQ{JU&{kKJMozJf<5W zh<2a*igQ&S9+It-g?B7k+V}b zr%#FEor5^%z6~@g#&2zba*9ewus?Ai_VMYA?kkf%4MY;X_`@YlG}~y_$ufmQ^4L?l z#R1mcIg}$l{u@6u5}2nlb_ zF=x)*C~f5|N|PMNJToKDb3oVUbF`{<6Tb7Ay{~@Z?(7S}pL0S)aX30~V*z(}^f*Oz z>W)kqndg90ca_3Ga<0Zwuby^Am2Hhp%vxhxmq2osbF`JFDXQi%2&ZYL4@>Ty)Ewj~ zr=WYo=W+uZodZ*llYJxSd^MRGC)67zie{dl??)Q7^EBT^Uzo_Qd3k<_VnRHMiP||% z6X!JwqLMS~x{b-mAS&oyipDJcUHvompqf<%Gj12uArPGCUcg z`fm1UpbM0oS*)_wmEJnjR6+^WAN`JTx=}RD7zg(CGCcrJr4F7DSY5cYoA9xqGRZBI zkH9%K%6XKS%SOGMDG%oeeH10NPM_kWp1UH=NKN4Gmg*w{!;GmH#Cn+dktj=Kyx^Ue zdZyoGlu*YZkk6g2@o7wq<2IrUMDg>>kiY`r$}o{hEUYYAIV>G1A@Of+J62 zYWp@eQww>sD1D2>N&ph&v;$tn)_h6KWOh3wb-!vLQGv8A+TY z3C(bNzmX@Uri2a!%C@~EHs8aLf*$F;(rt;Q!aF5LR7AIa$vlGC&!=a@0BsuxkraAg z#*P=~vZA+CKQYPi;+ov4Y<}ixdIu9DZIL+M2?Q*i&)6YCPgC2FwxNUEyZJ(6#hOy4 zM|-}(R*A9OZ6L$1tvP#=w}&-_q!bFQZ3|-f@N?M{yD$7i3(~(yxE+7(o4>$373v0i zoI{#AxW+%Mzyq*HYs{D}gTy-#%Xk3_W;^;aHaiErlFAXYI@YAUaM5V9=%Y<^BzKpo z1lPnKrJieWv{FiRi>$2H*3t4CoSK35JpOyvbyfd~OZwyW=hY-}Vvn%huXZn1#y(;l zBrHEK`+z@U-k3c)NbkxqXP2GZwg!4{9`489qS(01ui%K7clu~Tp-_7z52dJK7b}h4 zjU+*yPQ7BlEH@y+lxDhj>hN(}2a16+Vjo^btWuhY2oJw}ZDuiPw8Xg6jOK)or1QQl zQGDV|=@{Y`pxPQ^bF8-J9qE-dgBVCS0wSzb$sGC;MR5;`a78$3M+XmliIJn>z zU6HM~V5o{hJ!2C7JmEDx7Mk)jf{ok4AssLpwEBs9WB;nrMm$O%2zH1Xdd^HSchqrJ z)zm$nlF9xc$BL46zJNRF=H_C-ZOalr^SbfVr%#WuAdKF8XvG3D8!aW0_3(Wrd5p5u#6s(HgL+A0D^?f?-7<0XOzswh9hKAUT$ZS z1fmm7gWaRi>En>$A`#{((LYXvlXH?-e0H1g);jYPa!MB=xm?cC>WQ`&m8y_()O~|2 z{`eNCK$1lBAWEBen(Rt4p?Mo7d#^4~aT*D4k)@C8O-k_`g`5Bi$%B(Lv$lZK8w;HlwjdrOhB&BSPmi$WGwSG}5;2zwZM+XSmSEYR)@u3`X z!Ci;%My5{@=2vqbC*Y0_+2?G8y}+0&qDr$f-5batV`>SBu0?34N*?3vv7DC+3V8MB z@yn)6uLJFHHd|=EQuOvR=`KWIAGu&D!cQUaKII;%wt}Kbb8_mnj>NPVi6&c zM!$b?HMoC_3k<^lXjP|?i6?WujDM?*R3>PhZjR1#d{&V6_v4@NMbe&R(FZgr4i4oc5t8ex|;RHeSQ?KJbs5JWtTDOu-UM_g|$Tw zkF;1@VqJ4-Z?xdNlSo}18uUtM@8)SY9!c8`1trIN zjYtp>U#o8a%-3s^HPXoA^dvcYrMQx(jIUwAO&i95LY&s%Q?#b9y$!G}3z`zGM(ZHW zGf5J4+sH{rf^!cAg7q**hMi~|UJJ+IX>l-E^ zwrd_J$K7ERwoolYwqR&PpAwza=NID9{qh zl!jW#cW8fXT7KOytQk`oWK=p^s~ppTK8VZb?K~6;(eG`&QF2C1IM)StE?k~i47n@} zr7PMJl}eF}i&A>DBN7_c4w=|MJQfUbp{bCX(H%-31m8Td8Idtf7UG)ae}*p3)UOGHf$Y{1_EM2*9I27 zaZG5|Nb7{vM%kdZm0o-JH1$sF9dwHPA7p&~fy~tC`$(DtR_;9%HyBAJHf0Mn-*s_+ zTt-A&LM#Fa!&vjoU4EO@UUIe~l>@#+DE|NK$-R(8B>qp_FNB<4?c) zW8Qq{$%uV;bPHZveaxJc8gRU{r}hHKEL!TlE<=iMBUT^{G%VUxpUTjC{6Y8Vgiky4 z$+cJsQ^3)xdJPGG_3ypfz{#|O_R4!a>~R~~!z*a+T)u(TLMH#SH&QXYnm#Mi1N z4m+AidX<=8P3+>Dx*18rbIDpD*D~4}(JmUi!tr^#_2K@$7khhX>dxB>k$krv3L_81 zC#MMJENNH%jdgNt`>#Z}h>$JNc2bIGtBSP^YtfDp)hMpV96`fjIo9$po2-4k?2$T< zQJ2nSQJik>v@~&J5OQ;)n1CCm6Y9!|Oi~Y}r-Ud*sG(ZceJnikCDK<9_0DLv1g!mCgvBe@TJm3X&a=>jc=T-lCb0;swo-EnUr&=nN(q(=?@R&Cr>^x zsrva$diE^7*vZQOBxGlx2YOQ?3rhoz$2-!3fNV=gZss7%YKjxCRW8loZF_a&f9>}( z2%b9%l~nln)LGX|Qf1vXmTkh?!i$HSIO+CIt1HWS!WQA&HXhbnyfwTx9?rKUtK7Fj z_Qa+e4>e5nM3sm7K+#OEjUpL~@`#N_l|CkivYD~i7HE$O58DFU!Vh0Sw@OLM{d#6= zjcu!!lSH!`g^?&*TM{$m?E(8ZlcsPcUVY>a(Z}`1 z!oM}x&YdEOC7(H;jkQ#km(E%?)|bKUSl`<)Ro0hrLagscj79sP$5npNsM`bEn#i?> zV$TJuD{?-uyuWZhI@%lSVZv0Xw$WZRnmF51$tIjxIp>YKbnL#<&Yg4K*mPr+Mq4{= zX)L9pCiEAL5de`xpv=t-zec+ifYHa?yUGL&D- z{fWMA^tG`)yhLlEKNxmu_^Dy1xUQE{c)rEg4?gp-w#eD)u?(f87e!XU!a=Hh3^iRG zxCa_!-VqYV^puzFU7n_Q5Z~R7<+5nGbgG|Ytc*FFYQ+$A+Xz+R;iBMkoS8e2JuUoN z1I*K2yvs#JdFgTOWaX_Qr3}u*)$mS^Q-r$K2E)0xZ*|0;IP2P&=FC*WVDA&fi0_>; zp*IDB=XB-T#^KJbqLW8E%Qu__SP0Pmh_y(U|I~tGKP>M5{%5YWy9E5z?7UqewP&C0 zKl^8*IR5&-2kF&n3zXG6I^2i@(bUnFo5tZ7RCBaB%OTJzErHmz4R6DjtF?>&kzW{+ zGFm0^fV)+uTxfl?g#}6~Bbp)Bi<}bd>Lw4=tqS&J+L($O&>Vyy4W!`=AIq!!AmGH}Q zoF;V?jk^Xaym@M?dDr}XX2OPQH)I>|xEZst;^XdUH{4fk3} zcXt6bx`#4is25Tx7Z{P&qS*O!5S2xRe!qozVC^vFFtjMdS)&UI7i;N`H0q(G6l1J*86d~ns~-@=toi# zp4t0oe!`6}6bfQcrj3v_8uN6dn{%8FffNk}&vjrq9p|9YUQ(3q#xYGSG`@Vh;C{f} zm{TE_Y4l)+f^7HDPfjTlbmutF6fdlO<+FEZd=c`zktfi8;Tifhvt-nZd(TV#*WQbEs{O zPB{u#L7Jma9JfMxv%^|QZw6=J_U+&%-Mp#PtlYfaX_7d+<5X9sXGS~D9Bsp<6mGKB zahiC>BO7c0>_MXV}5c&vx;aQ(xmVR z!IY$qjXa;XJj^@on0X^r+&5}Z(ZaVz>y4a(E0EKH2nW5s_OL}o5sOW4=`SNws8_Pg zR9^==BOslvZ_FvPdZnaW+$#4|=8e^YOx;=#)dvin$>Yxnr=g4%ojW;S_y3gQe7c|P zFDv<&iKdQpi%1$khT;tyr{1DSBRpr4V%3R2SoVa-0x5@osz3G!*-69+kw3qY>+9{6Xl-rd zc0B&xC{|xPKf3iG*v1#349($r;?_thoaj>y60%{J5Ln3r(IFDft#6|Zoq~X!CQ=ew zs}YsbH>88fhU$dbhDgTSh9@8SRXY(@Ny%x$TBHw^XqM4p*O{%aNG~)RSNfsQ*hq}x z!iAKMG+QBMaul!iIMuwOYbb$7`ivtjy$6nQM=f@~%u6RmZhv#cLd1ch%Uw zGwm2j9%}!Roz@al**|s0iOz`ipxL(GnWrPmcDjzS(Uv5|eiyL|!ZaOeeItocL|IEF z_ezp0UNortQIMoiP#Zbct=5S`{4tWVcSeoHE!x*@|4fRpAyz0UV|_(*MlkhVb(Q96 zgma#+F!K4#J_~GJ17X=6i64=aaS!tHpQDWxkr2bxu=_YrI3%H;S0rf+&K+4A1LyLx zM@7$mGV|e}>|q$_nn~D5PSK)?+Cm(N#^T)4huD(R2-G!POlN`uH-O*E|`nJB1b7JfD(ppL>Ar^}eaPb0yEC1p0tWqebPJ4FB zBN%ttMm?AF81eo7PO76dVbY+);(d&1NxHBo7lKH(b1V=;#_RV*e{vryJFN9s^a zv`%S>o)YG8QxjDU{7fy;eoHR+Tqx&_nloYzccJ<=&Wf33O3W=$aeQ5vea10NhTE$J z#~_I!t`t+6kFXFIiqEvueeg+4M|RFIDD)Jrvg1T^Y!S|>QU=@}Q|`v2P-``0`Kk#S z?Tm1z&3HF#7`DZUErMmK4x_aygYOtE#f>`6^xo+jr$XsQA(6TxWD+?Xgc(MX2F-=8 zf@`OnV8ceMTbTEhJR_1Z+i)N!4}Q?z01%j8)^LB;;6kY=i3yXK1Dl;kxo?Okk{)o6 zD{>Eq?b}8~k@Qf_NsgB5%uL}(B+zX@qWVIb+M__l$D8!nxW~HXDiH?ku>hOyYk`cI zfGE&>I4rw>)Nw+dpl|T`Uwn%n{prv7$#;Lm{G^O*DZkE{#7LbFend_X=0{^QjLvDS z*Wy@BV1lTDkIf{N!OtBktf9~X$GzhtFKAc)K;?haj%$m@DWl=zx;j?$GTyX5N}uyAw^C)kbz-=AdiY= zLgMY0&oT1mL;`Ub#bX+WfIeDWecNpkFmx?`r_Kl|C}rJd|_p1OU<w zW_{XAfIe0x>sPtC1?5YJ9X$1sVMZBwJSBWtSfi)ur39zQ{oD}#mGRJx;xV} zMNC8~5vsTj0qmMnf1UzMfQT0gkz}A*vQkd-jR96>I0Zl>k?zH+oerI4{r|#Y*|9eJf5)) zj@c_gg(CDdcmO&)fz(Qb`_&`f&t%WTZM%pPd zoMW@8V_tXX%{LEh)p+?3!M-HHw|e1re|!~+ShmA&Y&p<*@S z`*jpqNN@y|Fg#U>LOP`b0Nol+Vjd9>!JBMU8-7kS*4~D9&W-@SUPSuvo)WCBn1oqo zN;wJxYhe+Ag<{qsMkA6_Usq~D(LzbbA?Me@N$MB1T_4i+Ivto)Fi(+@*EecOcw3m7 zA=&U6aY-uSDqd0?(p-e%eUP8!(nQ&{J|p^y<}p4C)8Lh+A+xy_8QnXFa!2=VtVX|Kz{VNApv&bm4k`r4wzL@q6@S7hd`!OhJ@J+PgxiR!6bH)B+p<{29m zc<()m8+Xb)qorKrv(w>#tevKgS0k&EI>We0DIQ(_v5XPEJ3Gha3YG60{Xu8$&tZ`t zWZ{l`wbgJSK0k1rj%bclY^rlQpQ4CJimw|^LW*L`5|wZpmiBi?b^|W=LHxDE zVha;9nw6!lJj+ix5Bq<|nRMn7W9o7GNUFTt?wO>FMJ`g>by$$6lxQA{`fa&k?c3lb z*m!)e%HCm+%z8!J~UwWo6-bcGjChX|Vz4wc&^1YqXui`SoxMDP!w7HZeC2%-jl0QJj5ooFVPK{9w9J@hg*79 zy8EN0C^l$Y*B~ZON^fEL|IRPG#ly=pr9`VsdM8bXXf^HmfHq7pclD)Tm&W*75RGDr zWMGMIO3EQ&k5zsR)X$cP=ICn_KWNDKvDhqz?^YUXXb?gBHL)DHWamB7<40z4=#*ba zaQ0^$pQT|y(rH9MwBer>hmUSyG-`DX6{|U+Kn%Z}tYugb=%e@8FT=664kc2L)>hl7 z^^8gwB%1i(fCS>EJ5pnTG7BQ{)^bVZIEe^nGI)W?KEo9;;M+C=qM#$GeF!n6z7KVKTsWNeTub21IM@qb% z&yz%vzM&4AZ&-@3UwWo!C==_XVV<6MUmTAHh#PBfh#IH5=NCRIa=2`}T&IO#Y!oR( z!rt}siwN7cM9hjzR9k7bUW)Ji7rHxBj=dmF6V{C_l@Sl*)a8U*B_!bb>+T+8^9*61RKlcnhA5Ju(_Z^;)3(lV0Oy_H&Jb;$oTIukEYHMC6f5jL0kU z^0r;QA@&>Zy)#V{ZQCwhLHpnJ-l;Wg&^sPbx`2||yrbRN#N%^x5VvTr(1*LOT_)OI zqQ*uF6p%Zx%?O0$oV;s-7`%N}5>vN~D^E zJpXn99c?Zf#5}7VAK5IuuP{$R5;O~!)%g}33KBCT4YR<=JKF~Md!3Lv?ngqys^GPr zeVisnLEJZT*{%QUfao*RJcrzO#{^X`pREt&Rhpv(bv3vfFNtT-rH(}rtP6JWdG9n^ zpyo@lFQX6-;^Y2luHza7qaRXzwR-I*bKALL9rbvG_T?wc*!v<#sWOmMjMv z3rS`m6f>v(5^N)HF{6iCDISWKQ%Vd_)7`AjuzVC!W_;=c31P5n-QiOh*`H#1>%kB3v){2 z>u@N?VhqUTPJFT}5x!%Fs$t{)$N8Yg1}-v+_Gq~w{Z)SV{#kc)ZCHf_G9In1y~ug} zwW)A00%`J&Nk(mpqqbKtm~uofm_@Wh>?4t^?k?2(B?hdJe?xfq>;Do4>MvKUMCk>^Qoq~{L zBcCVFGkp|Bi2V6@J3CS%@+eW(B3EZGboSO21W#yPuJ5t`4u-$XK#9bRx&^Ob8(f~q z_aHul1`&ClCbsi}9>Vv)OKjf9=}2#tBNN-Klsrc!#~ulOd0pEz^%8&?uS!Vq?&ce; zHEQ3$;O=llRhY_*xpQ+kMv6yWsWlQ|H5c^efUQyN;F0YjIiWW<*uy~8hSj-^1+Vrk z;9Q0>ff|9PC`gz=WzC%XLdhk_u*76Nd7w~h-8hyb)hjNB_wd^BNV$u9nWCcJ{VJBe zUQgpr1asbHni*9q$r6jMxGNv~^D#v%65K6uPT?^Dyz1|u#OH2}gC6lIahA#<&8&6h zkPj%z;*paySGd3N2rd<8ErK**s<0)4^9fq?Z*gba9+-yXg9pS#>NRv}3BWoyHSvyK9 zyL+~ewLpy7Z`pLgfUMzn;%37?B*sQFkc(9Ok<^sfn06B6{&lyIc6V#2X147_$+v9v zft+S?ipBJzdKt6fAkS!irn_;gZ?O4^Dc#ZO%;_oT_Wn3nL;*e#t;)pS{xmYjAT>&2 zd2xD#o(AE+U-)p~U7*k0-a5+?5C-lczhR>7BW5*}ZR5|Zd%(Shpr z5v>p#c^ukY6g-qLSLNL(jK`t&b!F0{0mhzMe;Ic>y68HJ@?r2-!gI;2vWG=ZX^O~! zM-I-WhIOO%ZOFdkprIPAdexbt5zXQj{ID{fv7u}u#oJ^*4!p|CVT|b5Qc~mt=80a< z>`^HqS4)chNQAtqWOIBRh9P-m40iU^_52AeAPRD)Na2(WVG2`2Int*I8R5acESL$a zOx$WmEu`D@E!JlnmL0GCZWEvlEszVfZIqmtHQ{;;Cum}Ak99ttX_i9WLX8`~IelM- zC^@m!M(ZP|tA(82v9ZQ=%6z)FPhG0xV??{*!_NXc)yna)NM=+E<0>CT+I(|^w?;RoNT!@C=f2{{Bh70V2X1G~J4czK-9sX}kai*V&O4(Y z;l##Fn9;ph9-?n4ar$_%oG4po-OiLU0AfI$zf)g6Fsa}Cb6Itd_AjO0( znmJAfP6LHHZ6|Wc1LYWwpM+soqoWq+%Hb5LvuSC}KE*bN=t@PHIbH)&+yl>PDj*bOX-Wu+Pn=mCsa-~+MltkFfbdnDA zX()+yWl>~m2qe%H&&c{pw;XMjnn}~1GKLDgH%YYh{h~LL@8z znl}#9ExpyzVw205aEtgE^*yU9P?ETwAjx*Cm;2e>aqBGG$K-TFP7|wbY<-L0{is#6 zBet&>IYPKQU;LRo+Ipls3c3;1F)R#57RjUEuw#lk%J(SVF7C|UV_%4YFn+%7BXAUY z;Ye&ck?K8h(hSi?nc{$OB*ZdECiPHSZi7Gb3Bo#%2~MLRtQPBi>%xn69vszAUy6f6 zrH|0tt21_Oos>faB*PD?lqvk`whc{*ZFzVVp&olngtpy)X4qAo>2Pf=?>sPb62deT ze?@l0CJtLunaO1aWOyfS`?Zd0N3J-JmO@+Civy>NgsI>D12X#GC9-NR*4^&I>?}~9 zz1X-oDDPet^-+82ANLx_45eI)oghD4nE01}S{uE*Lwu%3gv&B`I*gmewEGfm}_vDCl$nI3{Op=1du9-%S6B9zC(i!TJN6@DOhY?jaF-89vLkVul%`~%? zf(RrN>XZ?4YEDR=z&h4C>39g}unhU}VH$%W{@u3SWpo^rAntz>JPFBl^yLHcJ*Hzw z?Im)px^xbD2r{kj$kZ5uqChBOvL=dVTJM~a>*4#LK2Fo)gqyYoS!i>@ zyi%48osVq&M6z%^)+ymrMo1w?{4>U8oCYd0g>YxkI9X{%T`BC2$}s}WRzxzbt+BY( z?Yc>)iS=}k<{i+K?uAQBprpJmD#LRi)3E zpV3jkrD=}PN>7nnHsTRtci$kz_g-yjNqCn?qV*F=CnEM?yPo)o#LaF&6b+buClN+# zs^}BUmVp>Wq{f_{5w5G1LwW=AD3a_VI2FVl^-MpF_nH|8i9MAr3g%)r%#*R&N-B-s z<30x>6`ZT^xQY{Rr>qddbVFNW%2~L8W1ai~T2+NH2QYWFw=zT(@L3cV0)gb;xf_W6i zXo3_j!jcqxFXVctTE@v=hI6!}jQ1#@Yun;I$2$91E##x^qvO6X4iDyFE@XYghk`&l z5*K7KX2u8$dJAEhUN3j?Y6#Hg6j1GsY4xKJ7@bJ&?nDrpw4l_Szpr-x0 zF2paG#{1Mz4S9*Sl{z+;;CPuJ-Py)iY$9=9Ng707+YgO*K$e)HiHnZCq!ZL zPE#A=ibp-!K`m(>!WvEaLY>&NFtY>?NEk|5O{n+5VHzm0zFs~#q&Rrf>h;19Xy@yF zCDc|%jEOc1VUaXiV^_Isqeye`bC`2WmykqCF)-e|SK9zw&JcQln!bwq0tT zQh4x~1&rwqy+@#)>LuSQ?<7n31cCKaUytGBz3^$HZDSS%P~N>l2C_2{n=(yo=ktZ@ z(9LMpsoTmt&(x8k>VuSm5tRJ^hQTW9s@DbvqLTAmw)1+hzGf` zW0V@hEhd|@t(|6DAXnQ)X`Q}ol#~Ke&Y9F3UUCqzQUL`!ujAAQwnQcm7VkNwIf%A9 zDj=C&BqWsE2dJD_+WT0$XKC+qNQTvW-0x9YD5sa0J&=3>JK_G4;SenhdXL0hjFc0FiE7&`KkF)JHCjEBJz+_)y3kTVBq7^|TMv_|wqk9! zvEmcRqYx+m%0^_^hZ^zR2Zs$M6LAl#pTh~+HcGj{%*pvk?+ex)iiX)46 zwGO4mo{1%zu(i=^$Vv^E4v|uIWV>%(ktObEH*E@APFE*)0zEM*z0|Ku))@89}IZJd=H*=nYC{=^p|@ zil4vbg($~1*yFF=DJw8v-wV)O1EOL_O;Ik`j8L>3LAxDTbF_b~o68;5XZt)X~Z ztTN|0xE(`&P7l>eB1JpN3`Q23Sa@Q23w}mQ(cXzdKm0n6+>TFB8_b$g;B*t-n-)*D?w)xfCy4KEH}$eIrYW zhyso0__$5<$^pQkw|-F}^}Yp}SM(CUaN*S1P$4;&vC&46+KptZD4p2`JrjX`&eT=oR=eRf{^Tt z!05g$1A!Yjkb0=Mx`734!aO)qGQK7yR43B-ELYX*;~6)K2fxN=;0w?L>5rio{2Gnt zS41ctqLShR&3dG&-GA%uZorruS%wmDN1F^R<-yI`xrc#@Ra=?L0q-Hr@2v+1vm3c& zmKwfOQ&O5mHklyQk)@@YUI_<(WqomHm4wI^VZnVI-bG0smK=_Rj~9dxg^;jUZ$k*P zhfBwNDbuB86(c3ucNZgoC=gO29gnorDJFs0Fzt&6%`^p4GvIVY$hWujhldNoav?5H zVE}ZwyYANytcsmZ*FxsgUVAZfI0QjZ1hy5XV-z>LD|0FF{axaaQry5=Dehu9!Q`jCEaO!SONd-AEE`nwQh4C#H;vkPUhkswj&uWZTosNB<9J9Z1NY<#W!? zYT=w5=uzb+-*BjK%FdRfGM3(1-0{9))$taakqxVLtPcWP+|zUjlRm#cvChuov015u z)QZ{rh<$*S_woJ{X8V9+IdSM8g1^flzl8oS;_tHE-ZSgR(0_{P&)NL@NPm~S{S>z! z;r)9|`Z4rBVJ`QaAO0b0`yt12CbxH4`uDk+SA6>sef|jK157`pl@E~qAxruR#Xshh zf6UGK1=-GQ@^hB_Gw$jc-9E(pJ(9P7Oqnx=uEv5LDy>*-PwjzR5^LXHo#aB88cq^f zv7VTg1F{hIcS{_a#)6aPIa*vAsF>dkGSfXF>65wN|*OQ$$cFg<4DXx z#%o6PdQp?;E^pga(JR@o}2_;=A!E2aHqPdWAV_h9@VQ5WCodgIm{9 zc)m>FegXmOYy6xFGPo$Bp+HKc;k0}88q-IIO!Eji-dj-a!e$#JC{j?5q9Z=Lk7p|5 zXTuS<4+Kk0=+bG{s8$De%P;7US-eLSHJv#H*7!;^xZ2bluS`1>&O8+_m!NEfdOia)gTz}#asNNs?_ZzIwC4!`|&tfv@L8Se0U>? zUiUQ-ythy+UM9dmg4`}4m~NHrqI&$ttZf3dt{0wPt$Mjm(O`5S!U1PW&ej`s6op$i zWH&AR#4iqy-W|!=40;#3EP-HZxXNqq;eErf_Q+Grfa-)?#w^aLsJ@_mtaP>chkJ!bPG0+5(vv z`nUM{aDZir!pV&En>9sF>> zddH;VypQUia-06=d~o}lr0vKVBR}1!A5N4vV{x;yl5TBB`{?(I-uB2(`S=KLo#4e0 zmyN|UUZ6cQHW8*bl?QLMb0XgwFLC<422?#6B(SqW0Zk!APbu^K17m*M0)`dkWGm@| z-{q$KEz)w2mnZ1k0i6VwxN0uDiq-Q+%OJ=`8^$?p|t(@~mlqVCekl#qu zhsHcjv;;Czlcgrk(@P+S(yB-Fin^j2xoYPgh)rvaoP^ebPj~Js^N_GYM2Ac|U0S(~ zs~Ep%#HP$?4uY$ukfiTuI9$y+UD&1c%i0i0^sOT~ke)0G^F*o^a`&Z?j)~p`($1+N z1S!MG%X;unQZncnmvPMR9Z3@CO=85OY>@{Af#B^MfIE^V+K_qUVY$)kI!@xDMvB63 zgrSZ$-JIqi=yzw%GqpvWPw!E{Y$I^9_l{;A&e{=nx%DlK=UN;_R72@0DN}p2s8n?z zf0@nV=R(Dr2ZHFMrQ>m9#7J^W>o0;2VosvdWwgaci_XNMpShClVGmo~(e|9@OL2c` zhqOwXZ$mnsa&S_T28nVf9gE^Uip;GqA#F%Xl1%I23ciQA4y@#p>)EA+cSZ&>3@e)S z68orG$l9T2&LZS(R}KbdBihFOiq}p$PC2}Cjv4Md%o3{D=8YS<<=jt1STlnf5lP@t zTt?VzE;)*fM@5wFK49Zea9&pC!;G~?w+uCqpIy>_v3_B1r;R+cJmI}jyt7%mNXN4( zlV(nJ;aCoAZN2z5?a#3HFkIc%ZJ?@&)~-x{al^C-c<4igK}H^-m;mkJfqZ*Qs}Vwp z8R>AKolfL=rae52{_dD)BJ?GU(U_)ybaTYd%TR6Y+#Z2Ib(ST_&#%K;qll5#SX4Re zT%bWLz7##%7RAo~J@<=2fc$@$`}26)uB*Ni{f;^3YWCjeoO`dNE9t7UWl5H0%PsC( z47R~^4n=4TgeIhe_o_mLN-EvUOQ=dyRqv&$NRd29L5ctgPyrGkfH4F&1dMTS%a$cs zjny|-_ug~P-fOMd)*oZ8ea^j-sif-jKA$Z6eD2X{_St*wwdNe-H-1fwDlIj_iQUUs z*q&}tFN#vCzktGarqPQ+RgyxgA#|tgio}|o-3DtLVjQ+lv2A*MD73CHg^AX6+f8|% zg{B;Fw$<7DQO$G7QD6Jc&i3=%8hq?I+@J7qfWr;4=#Wwd^?m>gdk{u;gf%J3pP}(d(Jt8nc3_K8CE0-ac9C z4{rZ^QGf5)$k$w_9mVliFYTY;uo>BV_y^e?e~ltvj^(mvFLLU!g@26@OH#?9AL*R( zMnufk&to=|nq(2JE_k}AvMq9s|7~S4=_sw2>TKI}P;#Y| z%^jo8=u3&T?ShmFx_x%_<_Fo1AlTkd39#j;V4ky?iqQbk?7eP6{%B*$$zyFtw4T;? zWT{w@Q51>-*^R{5Yat~nB^T3FE`!B52veeQq6h_4S+dmrBjapOER(9&C{P0FScvVV zhhaAHGsH5`**(U%PuuJwQM>p^tk<6A-jr-GDNrhLk_e?&McovwzD0vsB+29Sy)B8W$yVe{{qr^gX8C&$V&W{Of38XU_~Ps;Wz+LMS>@u&!5?mFpl*sHJS0Cn7jkIct(} zMRVa&(ug2IH`Yw$sQxjM`y>gX!8HbGm{a0QF1SXk-BKW9K@v@h)kRs+ED_BWv{uJb zQ-sbzu5>w*AUco|kUFl8DUw9x7E>*yW6|=Dt^2f8r267<7=T#8`^chiNjcFs)uKQ| z*FM{m!?=CjV=gT19GI+4MzIE)4J8kFv2@lRA#)|rlYw zcC)Sb>P5eMk+(!8BhOr-bW!;(Cqbyp5B{GvYJDyWZ zI_DKBTZ8GBG(%0+^#gv{>I|KRw%buZj`8p)$8CE}9(M^<{=$NmPzRR2M6eZ&snx7V zP5Cw5)?-IWl8KZywCxE(IMg6Jfl>^%X1$PWH{Ueccr=YJhU17^Dq@wruVb#Du^!c^ zORyvYQVgj{FUvLyW2j z)NGqti4 z)vv7;EmJnfmII^i&5MhSA@zD}s_)Qoi-oEatHo9JqXv|gs2OfT9c|Ae7^#JfU`>O` z5b{JyiPkPKrA8%~UNi8_rK4bd?b&NsW(msaD`kN(x+VnAk&GMBNSG4TMf_M3rE8ov zCP5Y7Y7U5ws{q6aLkR4;o=s5W+#R>1kZ8mxrwFOUbsn~NMl7?Nkl*;+sv@CRfuOsSC52HK@I1EsLBJq;R%lZ~$QF{X=>6VCYEPUXUAUk(Q`=(t9=lp8v@R;uF7rj~9MZN> z!$G$uT%~MD%iHmkzU!*cI{spe!HeN7X@f^Dihsblqo17#$))I6D`$!b6jYor*K{T_{R z41NPBNjX&ylg_!Cn7)CMY1@TXujQz#JR&h){E@T9TI6Kub{$tNPY7Si+yDUp07*na zR3aEk+mH@6dVYztkJ|ndI7&hCgv}#6 zW8$G3{tBD^uj1k-^*qRDr%HS@*qBMfAy`APmfW@U zgA(5+o0PASCUv~6IW5n4niN`5BeRW6bXYRb(=nA}+@Q*56Jtro;BtN5r4|YSV_F?S z&I*QYap5Q>sGQeY(llWz->uB5E2D8Nw(GX)Mu`E$Dv2@#g`a&bo&bU)hoWl@f<0v_Iam=mV`O_xWRnSDpeaJkL6NJZ zelo^@$(bo9ylv@i!zOt(^Gs?Npk1XFJ$c>?OTGSzzJ{&zTB<)+QT|ddPW_UkAVG-dG34sOsv zgkYbJ@g>X=*XL4#^NjM$4T>>G=9@>zOQ{n2srI*%ey;|JZIjApq*pAd^29jymrB}T zD~WYmC}b^@EGkpCO;7S0z+&2-6g}HCZ_}vHkEqMD4-?k4+IUI9r$JSqV)1c}u?;?L zE_xn0Ys`=B8k(lVw65Nt12I+uQz!L3)z@Q9f~F-~L-m7XF4PLjKUvfmyQKY@26h4| z78a&sKTkBqDmRrx!QfM%Nm@MFnh3A&eN+LDue=x$CLb`O#kT8OLduMjCx?i&ma)=G z#M$aCr0eF=s%KoHD6zUdsl{0(!*5a|rbrM+=huum(l}L|&DYHQSk0_-Od0Pr+;!eJ zRSjqu^AQ46>TY+OarunHRJD^ahPc_N{5&XBp4Mwp{aPAFjB})6z$_M9$+=c=qP(1$ zP&_NVj(6*&JadFqW$M0mxy+BHSISYbG#5K+j~Te zA^C|p=r$fJe3JKCsB|5rX?0r&x>*u*gEXnZrnahRD!I|rH$ou;$m(S6q`^5MOamAt z{$etzx^bJ7wzr^EPnDErJNU%$9(jKKq57|cV{t8WD5yxoR1WFQ34A&vn@Gu-mITf zZ=_n|XNqW}w0-RrF|fu^nx^I(Ws04nB{E4gk4;%pYF6ru3KvSw8slNq*K6J=<_$jt zwL%l8mIJmGQc@Xl(`Znxk%G9{q*AYwoHax-Y()!lgpP<#ac163No+$bwNO#_<5Y{4 zf{wj%maPXEsLE}AlkJSiq=ZOC204=a&d#-^nl~Pos&CgBl*crqw2JOzkcg#v?VzZq zJ_i+m7=f53TI0wiZtt@BQRiH?WJ*5A;gI(<*iG9Q_1n3sAKvZ zYFPHg1#}^?QyUl^tzsyAX+&pxRC%}wL47}R2CpyD^u3zZRjIk_dy@C0%?4MMQCqK_ zNT4O}NJ@!~-%tun(*|dH*5jI30;UMwd#qT_ zADqKvi}w?&#SUkmKFcjP-OS(l>wk-<&z~d4i1!{JMnoJjjZEW2jPat6?W-42X?!W_ zYmp7MF*MSU{lp9kr9tJ*CjLH~D}I8*ozvLqViadS&JS?SY2nBITu)jW&J8L}53w*t z7(-!-g-|DfQv@H1em&^V1y$T0eV)O`Ldq~knCfFp)eA4w&!<=j_4_{RW6rSZrH4%; z)@JUszf0qOvm$iR44Nu^{FoQ;A?o#JD)gEpVUkKMGkL4#Km;2iwpb-&wmoL>ln`ka zD|Mw7OUY^O3+qOu@V8Vlq$#sWB5asc{+b=O)9c+XIwe0N1iUWgqQRItW%ab}ih`QH zl@zrz6}0#X!`3QY$Xetj9p7rT@visTlw!$S~jwQJ4+XO~*I)%WB0E!}lm5Osa!Bq78yvM{HJ zWxz_ylr|V~2(D_OvKC{T4q8L@k+QKAqexdyhU^n28se02i(|Z*T=3CXMUzyWT!XP{ z6c=4XlLE#-^dqfpz_!GkX-ypylInOT6Z1^2uCIw|L0_tL*n6yTl&m*S@qwmYVrwo~ zqEL#VYYZ`qX6+To=r~Gb!Wi&A;Y=na!CE0jAqPcH(sZP^(3hzNj;rr++gM`O=V7bQ zkhK~?GjnhBb>&Jj&1x!HqYLJuWZOy@C7TLLthYwTTFSvX@}luc38EUjsXg=DjHp5? zRK|k(iapzL93h+kdv*j8pW~upArjBe&^;9AqH6l`F>{u;|P#Jd4v8vouZXT-V*F{BLDLB{TrwQje zQVMlF$jl+F#%RJjphafMlx!#jRa+XPiR1Gyq<+M#>v70XY;{|)N{Y`VGbYcNCZG^Z zq{#_WxoqY59$B03*7nsVBePuWC~>?NLZOa9U3JL6Xz#9T*ij_YF@LtAg;5k8O|8+u zPuFxBM2f|eaZWjObKxY27C3eEI!8;)#D7qKy!iIgwN#PT7a0YBYJgRm8uE?$m_K(#xwdd^J$Kcsb;Q?)XUu}+&nwRnz?eDU(7rT zn~BKNq#q?ye8ly;>@EZGlFhV~%!Ld4e8bm$Bj5Ku-@)ha{X7pn`T*bk?cc`NyyNRR zd*K3CUU`N>VHiDUuDS+iE$hviD=t6Hl~-QQi4&JW5}tVa5w1FY6<1twCD)ue!^4k% zkvG5PE&Rwo{D+)4agxv9e-HoeeIL+yYl>WR_4QnL=6Y7k1>=;s?8GTfoH)tJlP9_I z%B%4{Xy9NyAClFfR8Lu^?|N3JdZb^FHzQ_eiD_Hx!b70f~j&;C{dJU$fu#Oo}# z-zfZ}?{$3o0<5RP$y1hS;q(=TE3dL#7z>9JGz+-tddpQ;8irgrdD7xqxG?DFO$Se} z3nxx$Ue9A2c+Pc}D^FXbgQpMmd#*2BbCqEo3X5ICE!P`PpEiUH{!0`)#*g&ZT*GF0 z116n?kSRNTow*&ozMM0??R9aCQajm70Ca4#$Xa_$y;V^Rv6k%DHR5E69}dYm5&W9A z+tZ>XP81?-zjJKls77sbzKvv6Zv`Llcr_vf!su%{vVz{Zs7kD98rpUj@9Wl&}yHZkL(~yhNa7SUwN7Evx5=GmVlB%hg%`gRGjr$0VC%Q@P@=e~t$@4iVspyDm zny`x{kccs3yB^yvFbK82Aw~~ft5F>$6Q_WYR7V6Gj`FvTk0lDF)X|JNN)a^Dut`rN zSQ@j0+NFtU>BhRr1c&Sd(zMY{Z6O%905Z}lSIC^G-D=j?V#MIA(_mg}kvfKKZNm@; zoK>%wEJ8?Xt{KA`o7K>C9<>}FLyCY;X)9|DSs$~j!iZ4fMSHk0Lhv==x(F^OOi9Gi zV@)Lc#3YV|X~>OJqemQ8bo8Iebd4_bnsGI56_>^czPs9f@F-P*HJ zP7yi^nYl?y1XinjQ+malwi`-C9V+2CXGMo*Rn+lfq~uK7?&zk2=AWs;#**>`WOZWB zqh15Y@s^@$nQb?|J%MUc8Pfzy}nn3OSq6=;njJdJ@NgJjFD zTOJ!q8gfZ=?JiSPD;ZsV=9ek>s0ggFmi^%XDKL#ALY0<_FnS#ghvPYu^%@#Wse+9; zsa%M8f*fhYFs97PSVBr9Kagz0WGyRE4%K{*(@>$8pB{ zTnN=-Do+!3xjf30sl;Zg^mcm@d5>!xyKO^E&)o36_nf-ya=!aJzKwtOQ~!dW`ni9O zp9T&O2EO6z-pTv^;1BqLzwqbzUw-Vzc;LYY`G0=@_w%zq_wzjU#FKpMw|pCi!#;~{ z#V`NLzvhw09^ub_-}mwG!%uO|^{4sq|Me%h_RKY;2w(foujO|>_(5*J{e}E*KYhqo zy!EZT_04bP@WO!W6944Ke}Xr@;Vs;H>&-m!@MGNa{9E{~-+nK@^Si&z<)<#w#Q+^W zfOcTkTC6zoX2kCHHSa1T@kz?+1#GyCmS?XVa)C!i_?p+jFaAN|TV7vy(P_iyp2+<0 z_cg2!M^?LrTd!~U;eQT)bWh^%f2)9NxNPb9+4sULZpmb6_^*B@@IQWwwuX|I&Jr4(5%zXR*0Dt>?8+JN4xd(smUmAYsTUrh_!pY^pFZ_=1 zTOWt3Pdw{W#sxSZe}b#{E^_`l)k_L0_v&=_6(fWglpKl2WbH6oX~{8D?2%*jrN=BO z^+cG~xOS=DEzJTy9pD;;d2=dQtG*#~2eTz77xfB>M8pZUD8!vgqFt)bQPiGK7qL3( zu{PseS2L7U)~X$y-WQIfDbiVG{W5Mq@G8_kAl zlipj|sQ-zLR{eEq=Nf$t7c|<9IYE^z)@hQmp!^=^w&z}VOM7%a5RwmS@;8$N>zW{! zptv)fKc#&-*5vVnrXE{S3jph!%DCC4psBRH6s!^Ldg})2tR?2C3MoL0Ix&Y* z6a~p>XKEpbgzGyb>V}%V8WOgW*`!2gELJkXs|&1;87DP>GiQvoI8n4QVre8WC5tn9 zE#^}6oQaNfvAGJ_MC}}sFnN!&4Jkw>GpWB=q6TEDO3jM;+BjngDbiYXA6DgELX*iv ztr~K!OLdF2x*3UemAatm;W7I9Gir9I8+st;gb`Kih!KL1s57q`g3d)*N~3Z+(d%%G zsgh41OJVd;$1qOSk2?3!wG*n@U(;*R>>S24TXR;T-mj%@{?^Q+D;>xBII8bbHe~Ut zPRa?AqJ=p}9bP-xj_xduEJ>#WsnB*cS5VlZW2Pty=d4p?q8N~8+O6cOES~+w3kBn> zj+2UpM!4$KTuR1TQyY9?or3bKfHB1yT&;XABbIgCU|f&Hpa!cPZKqp%h*DUzN(5gn zmy97+<3lY(d`jy4eGFA7z{=`)-_>V6M$ghM@kE?Jjv9ik)T+5lO z&hTB|^_@KN#H0LAKl-D@6!?lS|4MGT^@Ut<<>mbHZ~SXM@{vE{{NaW>@4AziC;sKX z`UOs(+~axAdk$ZG^dY|G8^4)9`sj!G2mkQza`TP1@Q$y18z*-6c>c}L3S4;a4bEsmQ` z3%6dAc{%2jA6j<27Kc<@e*AzcaD+i@F?3R4C6&c zW*5Z-h!%=aXjve+A(u%hA9U+Yn1br zgO1U~sI*NEHRDJ3Fge|JRB90Vs{gm-C{R-$dgYrXhe4 zqEDKH9Wy?T9Gu(m4ex#(VKPi%s;@nhlM+hDl89kY4oUU60W~SK#i$`&gcxe%LJ8U% zM}3@>qDE8{VTu!>5?x>Ry4!feJ6^=)r%w{5q)xnIi6N0v!4|_Xjx>GC%U*jMFMHK( zyz=$8bM14kW*EE{7f6j?@pwO}(PvH=)9UDb9LX^wv5*RsY{`D&=G$&YN+!lcih+<4 zC8(o*N)sijC(Up;a^tPf<<=M9O1J1abM3WELnOsi&!2h?&E|E%EBCCF#58(hm?%a$ zS-}T#R32Qa&3P$>;3wiRQEW@ef+I6U<-X>WINVI!_VQb}`KB9r@~K1K@Xjye@WO^E zmTl~i;(4hK*NcvFQ@|!qave>I*jnUl5uJ<0VT#Upk2oDcI}vRCd{(rj_{;*WP}Ii? z4b64d5R#ge8m}m2C|aB@q9>UalM-1BQH~sky0!%@x%gV_L?Bf~Yp&$|ifFez2_s`>f;MA#;vm zel-Ud4luJhlNj1MdRs1cSgw}5`c<#wzxi8#i|60+JW5LZyWjgghGFEt{!2f|?Js^Q zUwG&dhH=CQJp9NbWHKow&Tlqce)$RRy6axfoj=bXeE1{0@C7$xtmVlk&U4on?&0ox z@1bcLE`1N=*yffq^ee%x7F*d=5dro|{`wmDddXEBdf9^bfv1WbSB+*3sNm$wmD6ro$>ra_3|$m zQ56Q*s%A7Gxn}rWypR|pqv*%NeTZ zO-vI-)UU_n0H((nUA%otgqmyDn1-%jl8Y9YRt!@NoiF7zZ+S82FKj42 z(04u3T1*P8FHF4k8*b+%Uv`VS_U4Awo)8B0Rp}SX{YuqDYdG-S_Oj>lu5W)MU%2BT zUi@Xx<<)O`5$7J?@a=!@?Ob#HY1W6TKx>*#c{Sqb7J5w>G3=}s#0Vi2;#BCH25SwC zTM$Fs_MqMmq!?*CmHp^uU-08V+iP4vj>5QZc*i%toNKPWnzK)=`R4C^JI}rGDjxab z)4copzJi^-lf2;NXZX7BcsvpOqhK9Zly#&dL-E4bH$RUn_fJzwVY6AYKHTt` zPu|Io{=(1j^{;;m4?OxXZ+P+T{Or&DJdZzhp8xj$^*8vtfB7%->%a9IG)>FRH{G;_ zXiuLw!Tt9?!Yw!5#KVt2!b@LtJHPq6zsWUMUr*y2`bDqA?ZUDA7JE?;-u4Zwl3KA= zT_4AU>#xL{r?zCgOF25jRCv|Zh8JER`T6%}9y{0Y)9)Ghf&Xm9SG>&NEc6|)MDuzI z+<2q#{!c|d@X5qCywUMDzs+&e4@B;NwD9e3GyKheI?*-4fBo);U;X{W=O4|SKPdd> zM;m_abA|7Eb>@HgjmUSr&C<7Ua!2UM{M`E{_BV#V`5i5P;p-ayiyuv-tTM=F90t;b zr^yy_%A7cKNTH!+LKSDW=sAofZDq3!4I?9MX|b*&#*r+uGqDyl zq(m4uDjBVR+gi;^BTkrBc_Ox(Rf35YN1zZG>5GoTV)gWB5z6E-U9Tt+90kD^4MA0C zUvqh==nvI*2Xrj(jB7!FkdUrkCk2ggv6eWDxV|H&$e7lc(vV!CtTWAOgv`;R@l1)kL`M52rN&X zIx-{Vh@&B>g+Edt84dMm5-dF=3(E;c2Yp7$f^;}RU-?Q?LRN-iB94|rahRmiSX&=| zN{QY%#+2!;jw_%Fm~BUsMpCI#{+x+Z;&pF*1*;PdDILaUe*Nd(&sVGTn#Z_1Eyqg!?`RNB)tP;<^?Pju>*jy-llY{sC@z$*p|Zt8YWveGbkWKJ>m%==sTs(^sA3(;xi;AN{~x z+^RKl#01NeYSG zQ$3GAbb;S{?}xed_M3U}D{tY+$DiWrYftkVzw}3h=@8=#ly{OtSi zK62sd^Stoow{!KG%PAyG6ZzGj{r6mT<}}Z_@mfCh;cLlhzLK23xva&T_L zcm3yog1bL|54XPHHs1ToAHcOOH{5iZH^1$5yysv4E^q$oS90>QU1G4@^ZC2@%pZP% zKl$D7B)QBm9B{>{GyLq2{UR@a&23!&+~<<|3!J@o;Es>q%{%|(n|S)kLms&A5x#im z7s;vM!-gRq5@Y1a2M)RAg*WlR-~KR7Z_weaMT2s69N0?36elp5f{xim5>wFoV#>-r zI$C6OkIhBHaBYFjIAX1(H3pwE&f1F*6=PiGF=iTT@hQ_A$3!LD$AmEsArXv)%Ky?d ztAJ2PnRUFW>tDy@CmN?h3ElQnMZ{-wNgd-g0@IwTE}5Klb*!X=W59kLF+J;X$vDec z`-~!|)Wwox>Yto5cCk=SLq&S#F;wzLDY{fy`gY({JFq!qG)^Ad_ZKhvb0;bS)lZ}T zpO}PYyERJ&;Pe%z`SE}D<2?1$)4cHwui@cG9%ZrYx$ExxIDhUb-upZ6=S^>TJ=a`$ zhI{Y3pNAiLn1A*&KgG>A-ONAy8-I=0zV09a2`9}iLQ)Cz8@1cyT&Xq4d_9uAdjfO8i1^>;z5`OZx zJ%96`37@(@^Ty|AKL5pu^$4paJbcdaiMumbuY_-Wv*GQpG%OdwFTFpqY6}1IcOz#H zBM+W4{L%*#=hqV-_;ljEpG*AsuLj=v`oiCTcgyphYqg*uLZqf zyNd3VI`+^EoO;dGRCf`CvtT(c36&$m=;L@%|ia?*S&X9&uuYJ^a$67@}fzGV3rp4w4yKJ}q zGg}nsOBwyuaagRLK-)xX3btugtS zXa03n^0*_l3&AQ+%b>r%PDneezaWo=JmqSZm+4SnoI+icQ`#arN^%55@Ht~=PZ--^ zv)6#iqEP+~H(kl$g#&);7k`hPy(KSr*-bp}mMb`QYKP4bx#7msgiTN1T2jh<@Hg*Z zTyJ>Y+h4)vP}jh#&Ya-p7hK0}FTI(UzwY_G|JOgvxhD^}?m1@^X{aRH+it&=KYIVC zIRDf+4lZnX>ala&_1TAb@}VcO((=H4kMhyqxto{0`WC?O_(SKo=d+LT*aJ`Ul2_hD zj)vF1@dXUS1>XPbcS6bRo!F%mL({=0K71F8MZ=%@D__Uk-t}_MJ-OzgFFeZO!J2zN z_bA<};r5r`#GRkKmxt~<%d1|08-nH9=Ul<#4?V%}{Mv_j>8oz0?>oNnPklKbe*YbO z=41Epl9xXZ>y-5DC(qT_pW)@Nxs?yT=Tkg%|5;x8%A2_CvRz*MiW~WzU;Gpg-}@x5 zf9uP5;-M#b`2KTz;jV{)$glt6hxz(%eKmjTzkCN*U2_?Ce(XNZK6-)2zIcJVKYbrJ z-gJiLPRILx^^>^PaLWs><-7jUSM%;a`*xoH(i>RqthnjcEBWyIKgG*mdn-3R{|4Uk zOMghtkvG2m732sv-g1WD|Lr?it$J>_`3ipLmp{T=zv>mL*rYIyf$ML$l9QM9y!Tf= zz$;(%Qm()88Xo+@6FhkDSswc07rFYnQyg3XkU($0n6S-EIM!?FMK8ILPk;D69)93) z-u0*6$~|{J%(=4%{K5M_!VR~a;ri!Y!~1^a<2?SzBfS1Cui*t>_FP`^##{Noum1t( z9`n5PRX5Qs7To@-oB7m7KFw!7crUMg`|b3XwY=)JFXa;-`W%lw{1{E^NICPI>#pVW zWtS0r;_%>UF1t+qr&O+=RCOxV=uuG7fT_>9XoC@^jIGU!JvNyUsv4|*?o*<*X6td3 z@+|wmxB<&Gaek_bMQ1KfL*E(^q6$*6Jy5C-*fUjfb+Oxe`Q&QMI~O}g9y_|``jT1B zsMGw;lp+q0;v5_vs#40@8oT}_W(t=qjK{}TIcMD79&vwPzg}~wOwPnn=k#$Lb++C# zqze~tCr%Ld_i1)^)N#4Gdr}m+n4>7HbKtmmku2pX@2bwCvoTy4M^=j^`!SIM>@`PN z$D&`bULWv}{>hK%{BfFi^{ZaXwbx$9RhOOSXa40+@v}d#qqLv@WmoO!;fMdh-_nHO zI`=aMe)zxrVT^Ue5XdFc_Y3~^-}^hXO-B*kK*AL2tF{t#DPak>)9Y*qOjaWV=p_(3<=tc8wPOAOHQFuU7{ja!2^k9gz>-DO_m_%gcouPr`Tp_al4O@Y5fJg`IfabA+Gx&5X|zD+}N8 z-(^|@6R;@o+G`BI{6Wt@{~%mp;Jr^|e&dtEg3KGPH~jSPMt<`B(3ycLz~v5p=>Mlh z=IgE$9(cU)t^WWPZe+^P7Px99m}f(C5Q4y&{F7w+4mb>OqQx9eu;?&V@@vHsj0WZv z3Jberh>AqupeZd$5&@Oj9_BT>b{CPN64NaNs^>Z7sMm?9Fu3c9ain!iVi?Iru-%fJ zJYhVfT`UnCA&p8vv>8gSa`c9dc3V^x3e9Y$1`JFrrLQ;Z+&tMja|Xy*v!oEzSA>gC zl#XXxbz?ozktVNXMx&&})~=vr#=OCagJOxSS=f_=pm&25B}abAdtGE3UTGIA;yBVY z3&MDaxQx`0tKq*(>>ro%Nwe@>LNEJpAp)<_7QbPZ7nysq-L5=vNZt=i7VQV>a)1i7kw zia=)!2L~JOyXP?;d-Q4U_{d%C?k<_epd6h-mAGaKhR=NTZXSR5DenCA1HAd2Uq-*| zfXp;ShRwvSFMJN4{K$Pg@yOGB=(j%xt*>}E~|Ln#Iy^&z%nw!^EQxpWPzL(Pz$Fe~L#ReuBpzKF1^Xo#n#0H*@AW zC%N+4%lM{0{bqJ{7i^{tIUD>KS)bpqb7F@(K5{P~`Mpnb?Q_oXXMXVOnMTjK^M{O6 z885*M2_oz}*k=(EX3|!2OS~IheTb&PSLgb!P7SMp-SnaMx!a z;)w^I=Ann4U}vxA@Ni%pCJxRWRHf9BuM#Nt=;BeDb6B^4hoD#<-pczVO&X zXSv~dS90qMpG)_>4ZEk7Jn{H>Ui`9`^S%#$kS88I#}w}1>!&x+HI`dnbTcP*_i(PE zL?9V1oIm9LyB_AsYfoaF+CloNI*SCdEg(wp&19Tdq7+OVNX}quG>Jut+}RmijuZ>6 zt9)D7O4~uH5hi7@YB6xI8Q5JdNhvV}m3treN2-^=_MhIi3~{P959(qMLa~;f!jKCl z9ct0i?jUKc&D54}qZxtTk65GPiy6d#i%0gGG_kTB4#$4-G*$IBlOr4y$EcwL8Kf=d9_DAgPod7OI zj70kFJhGI6wC&bBD_5U^6U$vB= zhLwJPvi?PD;c`*L!5G**#tk=>1ATf|xT5mT_t2Wl7`@=G-IMJUQF{HIRrMCr=K!mg zt-x=NEqk^j*%miE!J_$P()gXQ6i9_^l_+Zx6q5-dQd+~pE*Rp5A#M<(J{K|0cK^`Q z5((_sm3knF-8$N;`ll|_vb}}KVS{a2q*%hV24^w3;Nw~)>&uhsokGT#hDJJk(Xm-a z&xl7oadoscNnjCMM(62D$C930|E`iGH9N}tHO}=&O?y5ncxUcPVm2Y%-V?!-HwCk6 zAb>c7PwVy9s$WnfqZDNCkGgX z(m=aoNSlQ1EoEqsodJKYgWVCE77&!r)!3F8qvCi48av}_+8L%8>6~(p3Udi5q_hQo~O?4bLG`1IeqOZt~_%RYYa_excaIqICc3c zZoKJQ{6;rVLFn6trg41w6QAQf8qqUz4{F6bB>1|xS!RcW4T)J`A^@?ul&r1 z_*?(z-Mr)77Z}zPSDd+w_iIYnT zg}!fb&Jm+-5t7v`u<0C4XE9b7Hi2oAxaIb%x$yLwE3dk2>&4Qvj{EO_nlwhC;slgdxS)E+c^cigC#O1r(`}xQC{=fbW{KAjFpGO~f zk`I0G4z7RR6@1}ykFi`i_D=5U<97|+Lfyfgv$V^WrnNYy>b9nJG@awVyB^{due+It zzwjV8+;|OleCqQw4YdeWmWzfKi9ztIk}>W;5}j_kV_e^ONu6)R|pulep@-%X#}Zyp~Tq z?|!a(&S{*rgdF+Q$L`|S|HTLKK5_N+dmQW^s=%VP*czpvPfHtKBhWN0VbTS+H4Q1Q z!Sy7!g9~e7v%n-(9AdymPd3V#nL?s-h9r+ujhN6|2)=4@%P6XSq1OBK*aLHs^BN35&)d5S4fir`$QIey~6&gAFq zYC$Z8-gGFDKoyINJdmYBgCr1>a}w7ylA`hh+@+(T|H$K_A_ul=EYmc^g9D^#^lO!z zOwL&6)MeDUi~M?K|DEla0+jt7!o`c^vA?NF#fR))P)F934VUjF&Q4MtPv>8;+Yj}# zIkk0yJpMgXA$)5s&MAp-CJ9@sz9>_gXiTFUs|B$_E(ymBB_(2s7$+Fh(%DWoWUFeM z`ESlgE_qwz2!geSVG|hhQ015~tIVW0Li-}@Q$K=9XUX=NV@G3kQh5BB1$6Vr{Bv^w zV(ahd0#d&(N8dmGIq1Lh&s+7rQ!`(C^!?+H`K5}SB8FfSSD*VEq~UeSb{VTFm^Bpd zmF#OB(pe0`5I5WR4%Ew{F%3=}$z);<_?#KjpxsP$lu#MsoQ+d3=7YFe;!3u3HJxsvKy zrra2<|J9v2&nhWBY1ow|4QVT5o%6K>gU_Sp#^g-vb_ip@E?c_XlE$M&qu6qBk)szQ zc25IA#Wkw15~&krjQg!)FIa6{{H*dwPDN%z2+g8u>+$dZe2T+y63Eavc zQAkC|!4SuU-LaI(Ks!OQ*cG_cZ>#ELG@nWkf+S+D`En`OnSUiSg8J#yzn?`p&PE{B z4MYm~G4i|@UB|n=`z@qk`OL?^!0-Or$2jwx6MV(jy^6;keu@%>C!aizagKL>^J}^B zw(I!t?|+7r17E!RX+j=(>ZyJ1yYpe5eDr{?d-of7*~?x^i07afrj!UF^5(C872o*X zui=6FALi~)Kgt(A|1hVoT=CpnuH}x8-_6TkeIsALFo_{T0{xvV-1ur?RMR0;*J@?=JIJew(17H2kujegqekJQl@lo2gA%sI7df-XKc<%hvy?p(5d^unE+{0WrILCMW(AV-c z-}+`=__7!9$@kyIBM(2ttKaleuDmJ<7NJz&rT5?|3sWd-aR4*>T?& z9;9jQv3tbu)D!1e9}XX)20iYLQdN<>iR_qU~6&D%j&IyFl_#z0QJZv1wvdA zaug+16Gb6su%_ZNraV)$RL9&YCt}Kk6mbaI?h>rgUjdQZU;WA-3o(B)Iq#rl*_YUY z{x2TK3X+V%sA;oNH&+pC-*1&3q{Kn+yyBKy87uj?n_nB;$C2w$u3VSt$gn_*zeER^3XO@Wv2|=cz~bNqNMYT3yUzS?c~T+#0mdosH5U*1$rQ?P}`zy1M3CEp{bW z4~d?X4zX@UiE5O11n3>RFQ|$%5hQ?ZdSVx`7oc=%b9RZ3{?TECw4Sg#D^*>RD5gau zZG&~%&hg;gPf|=#PF*!O?00q<)`u*XOV*nWtDPNE&WsoKS)4klW^B~)Y|(R^V&=LV zt|r+?Ic$-Yhb&BoneK!kt_!Xeih*JhGOE{%kBQ5!++*4F_?)36oOQZ5PXm+fSXd#V z#SmywGpEE)Nz=(gj3jZC(esW!`9?nVk-Is6_8ij?iCHDntDPQat;&US#yJB?*g3Ue zSdR>APup2q*D}RW15?#+XZO?!KL!pjY*?LGDA_X!#S|8+md&AO*o;`~SnhO$kno#{ zy~}sVIWw$1Vj-+EJEwZ}pRo{AA&!y7PRGuo=jr`JO3bv221;St2>lY4%U#B4&3fPC zdPOsKPb@gxpXhssuZi-`IlM0zs|+-xMerOvJ@L+We;FTr|ATz-j>q_a|IW?k8{tRpJsRG z6w@@)FFImK>etkCjH6~G?wwk4?#T;a;pE9ZQqG)zVxOJUJ+FDqYk1H9{(fHa=9_rs zYhKEa{rCTZ-IGgpPOK0z=gw^~lIfQnDP;9MqQ)Imzo^Y-V5W}PQc%;NQqdq|9gQ_Svi}sO50TK|17r*5|AO0mXHw_>~3yHM$ z*j0;Nbr5}RgA7uFCWz0CN>So=$cLC{S?;Vj+}|e*1KrM!62ZF;KaE5mSY39CI8AIe z8+K2gB!)nYiKb~3VH8DiLK^9crgaNI2DcF9E*Qv%1=|6^BK@TPEN!K$*NA|HbxgLU zw-vdoooeeEqy!MR_1_q)nu8Qb#_-6)4>5Vqh4T}OotEAhSTw|#nEb?|>-4=9!$e?n zFk-~euQcOMq=17KL$nPR;qd&1u4!2A>H1|v$X5M%_RkL(E39@Glv0=`HCkQl^=u9X zFoJa|MR$9aY0~T^jeRJzs|At^Po3Lm(Y0i!O;l?;%3>tM!ufMgBi7I@l@n&AusIy) zmrK0gsQT8n#A%>u4U&yIYZJ&>XnNsupLmjY|Jk>aGyMDaeVELMwaYCUc-hIz`Ht^@ z0mi^T`R{&}y;BRCwqgJLprfHhqprWkuo)uGH5d~a4kzv5oX~bkRE?pU?Ku?{7;A_% zbk!M)NJC7M@={{NHI`yC*q#fO+q1j3BF2eQpjhRw6rk-b<2bOhS}^ztV=HojAYDt2 z9%~(YyA4xNKHteJ7W~G~f0#43ELbj1f?{S64L zPAoY8*qX&&;V=EY?_nB8e)cDSh26a+ZQpQspn=AHr|!vG-Ajxic;=RBXO~*n61-P=HjWg> zI(l$4u4VLxh&cMTXEPiEg|=B#6S_$^Evphx?Z7o4aeZOKdOeV{ug;+JQzy1UUHWqZrVtO;?6tqgiMzjt zxOg?zJr9>1z9ii!2FN?=hQJhbB-18Z8p@Oujj-wm;cx^3ZEi8n>J1YV?XaRV>4j@+ zu97n$pe0xRkKnia6}!7JC)p@tSv&GS;Ck&EhB+Yz9ImR(qI9YUz;5>qT)MRgV z6TbAwrLeRun>6Vt_E;{Iz7>VW>ZTo2jWQ@&Jk4wP{BtvE*48FcK|D)Ry-Iy}-}sj7IYYd@u`gzCAh$fk($EobL_y=N5((%dd6HBwZ6UjOFoVywR=_%YBg zd;H`PqoZ%Bp`=HsgKT3_jICShn`}L6V_=! zX%?ko7%Z)w^Tm!{p9uIgu;>=t^||}$`=Gm6A)&TDi@U=ZKIu z8|-RD0aaoBF_-Bddu(|V5QjlMc0`%iWXF1 zzKs`Urb|B1nP)kI;1La%>s^avLu6vjhEng_{W8!e2?>!9q8fLN zQKe(^h9d%VF4nOyP+J;G_jbnhkFtC2U$EHwUN)FTSFM07* zNZw`Y1P&%#v6Pr8%bq-pn69Vv4IGR$M3b2ZckFGch=~c5sKrILS+kvhVj@O*hB(mL zqXl@|HIzcC3*P)bV+<*c7}t`*8nU_sr)j_~b_nAk#%U0qwNOk^v_t@(DNP|sL?#Gb zW>q>iL>8qbpuQ6w7SkxCEU2L!;`B_WQuhImwM$YO>O0f`Q}yIg3w*n@5TV3`T?#V+ zrJ$ju$!nr=wrZv)E>m(tG3dBLMr49yG)z|KTR*twIvAYE~=|+`u zsKJ$%!?>oAzK#s_`cBnHXG$3pJ?km5v)my@PqA6^t59d$;?(14_p&99LQ0Y3>=7>k zi&S)I$`NB6Q%YDdZ2edfvZzGf+J=}$8rwlJB+>JhiXirA?U*;zm`0pcW3?%zXDxE- zpHMH?y5P^tgZ_K*NMOF0W0^fmYCz|fOe#7KN*WNW7gJjUm4R(33X7cuiyfZz5D`vX zwtDt&KKpOfi%UluDGfN=p-J^9S$86|s_$?xF;2p)qFDL7-mG}REW$HoC&7t+!BEl0)4 z5%)$pFtH?h>zHyNWwfZNe4J1U%eEyXm32p9dtT=2Nxx#ZUlk+xsMlkbIVjjDM@I@s zr=Mp*Od-X9>6U8vX`3n`*LWN)Vm;&Js|Qx3vu?XbyZYA`MwpV8bc0>eq=_kemVGAx z?#KrI*pn|s3y)d~7kkWz=KscFM4)ZeXmDqTw7-wk;wNu5b)!Txhx(qd+0gFp64x6o zd=?AhFe;i80)&9=d%`d%i5k@RBxm+Y%RUp9hGGk28fn%O1DR5j7Nk%&;DQ~rI?S}J z(NP4bWqcVk9SvJw)lzTGoUqF!X)|)PN9uX(n~pIItaCzEOWKg}C2luc0aD3yu4P>c zAx`WpP7sr4^aH!AQ(HpxftfhTO0#)tiCap+?kq?L17d3|fe7S=BCjJg7g)MC`{XGD!GpAo{Q|imDIP0 z$w(GTD5^upz@YBA=FoFtH*#X@wp%+hpHyDln2R?AL-my?<+0U7H*+Q*Y*h2 znePRuW|bvnn&l4JPs9>wyIuUSkE*R4QAWrG(=BKZ3vp$j7)F1Nt~-UDGNCtw!x6Wm z6lJ$5q*bBInnPs)CtB><+MTED)xRbMf(P4KO3FC5AcRA@?j+N6fM&j|@cs~Mm8(K6 z{_=jt>Vh?_(I0*8d4CLBF#ys1ZRO<1P+rHc6P*u4qe<6jZw$vEQX~YICPF& zA}I--EnGOroO$j^{=~b#nt%E~{qJNiEILKwj45own$9dJwwjxjr11>8Xp;Pd>pDtG zbk3^6qn@A~;BHDZ~VbMf$_5Ct+p<~1_ z`SY~)B%q1)As;{$KFlgt>a*x=!f3Ft!_+Z_)W1&U&gJUglM-SLMU=yn4hIcaY+8yRak(YCfGa)TTFP(=+-(#uKqZia9LgORrQw{xCyLw}> zDKYI@`lLN%+rNZBW@=y&Er(rVZxnLZQo=;(4DEiVxI|ij7)u!f#j1KQH-?kzmbA(c zYRA&m@m%jTt zX0byI11UvZvmnKR6cb@jzux%;uIbgbtATbullB@?O?qychCBsIYjkulc%*BH#?#W1 zD_Uoadihx6w{W5{isF=#D{(Io<6$+|N?T458SDv591E0r({*g}ImDaV-6@gf3Vx41C;~thfJFNHj zF-=3`8bXTn6)`r}Vv0I|lFZOUnt`0$wq)A6 z9dFUJOy@4E>y6qGG-gjt2~)YK*fvHOqNg!JY=sI&Ym6HVlX%~_pzEQQ{0X%S#8_CUQv#2E6h z(F*t2+b+i9v)__TjdA2$ShP!h{>5@|cpkgEWZE2T$#+l@ry)Sj1SceGN#g*Ou&e`8 zbxSs)(m`*_77C|T)kz;M(ktX=ilr5UoeC|ERWf92H4rbTibTYaris*9inWXm?4sAx z<|`*ggj6?MV+zFzW=zDs1t|n;aJHj2EjFtW+klc0yQ1fEcVkFKu%o9KgI#-a(_n^( z$p+&yt!)|m3eCqv+HGJ6(29->hX9>Zv#Dc6j-EgTRmBKX97!h8nhqZ~EZq*d=o~!c z<6RL){|b~*;aEhp&@2VSki$fZqk14U4#^<7fQdA+K*oZZAUl+pH(wK`V7d-OwBT7- zm?E9@q-n%T%>y?EKh!)at5yZxt7CFX9%CAeaWy&G)v!ceFhr7a7UWnKjOe0%@kqmv zr$kx=Wb7y|X=gbFa*X7KU^3*8k-Ct~3N&3KW*kgNCDd+Q`ErzkHCDUALq(kOIAU5w zw)`;QCr`J#)N8&zcDrcF1#IsqsbE(EHj~zwG-ma6vJm$p#X78jTj^Rs(nVc6)__YH zUxa9Nl$Q{k>Bu<|Vx~7Oi=}qb#%LZ^EQ!V(2^Ab_PY{sGw~4fMfPl3)+iCweudL!K z)h?4$B~sQk)S3oo+il%4t4vZ3NRq9cl`5sMo??e84=JC zWRgFogp!&jtuNx}wajZr(lu*FrVyc!akf`pS5*wT%Be{xQf;lHBva#15+#9iosMy5 zRc($)3XnWv`-*Dm-<8VAQAD5xYstw2Qj^2g%0c-bY7a4=XE}NUFFAdBj*QXAvaZ># zuX&sQr1!%%F z%w%J*IcysPCxS>KC$ORp;>D<`9XmI8fsJB~GJz7bfbbPR#hu~n)6 zcG;7Jl2n?8G1jIqjyZ==T&HhLjPaQ8&^cg z)1))b5|O4w3XDWL3=xPV)5=DYbhzxHZ8U)*u*;Q`Njx61ZSRy`oVp4TqNFFPe zF^xzu;A_X%o9$zY7*ZIJoa@L?yRw?>KhrPSchQY;~;qi#wnoh?!Yc=NtyARVS{ zQ!ipvGVcu09*`$bUe#3ZSP=}P>wp$&LLLH8aQ%Y3nV>Fng-l2u@As?Axx(Q6-X224 z_B~ULhp}x(-?iFl7Y$@|jiY42G?p@Eun^ZE#Ud6`7SfnWJ|j+-{5XMWjE=CjKsGor zHLYB`-7aUmB;qD;!%f#JKcEzn)lIlEB$%b<+8bG>B+B2(n!IgtVY04nTN(fo(xkpX zVIt2&x2#UtrCMibaiHgl>Hx3#WDVA|idtG_kEA$}&WAD#I&eF zj2uRCjyT(Dp&&_xET&aX96CbOz*~dlz?4*pWKCNqw~CC}qT>`xr%giT9+i@HELkpw zakX%X1V55<(l`TSiD4oJZB&)eY$}7G;2KAab1|E@Mzq$tic&}oRuzn7CF!T*T%e=B zufhm}sgCN3p?ES$o!5!9EVf*pgvK$MG*T>NuQ3W;uhMv*sNQcH2vM_e5j!JSicIDl zNJ*355q)g`tRTj0u-RZ~bv|O%{ab46M3{M*fS}%0QVN8PT2Y9BIBn5r(EDOO|0zw| zb2tZG7r+)R)P|h3xG}ccr_SwZ(csgp*HpBf@)AoaB4m?e%toZRogJpbLnKBl8tj>- z>F9O|s%F=VAxcWR|a-zS=8}Wrm(mq z1$z!(tPiTr%oVCPVi?orXcjJpjX%I)SoAv_j{5+thkZ8FAz@rIjE6+4ZqTN{D20-v zhJEfIVEaxB##!d~jLQ&~*)p~X8FVAFB3p!DNzb?v+5=6-9)>lsQ7L6f3F{hiee9A7 z&I*2v#2nP)#_0&q8nab_7148*t-%ffGsdGaB8q0=giaicfk6(H98BV{Pps04u}_r! zHQ}TdoaV5?uvRFCo{%Rty9HAUAqHfxQ3R*8isGzXbvvvG*BBJNFowZzG{+{+J(N_k zoQ_Zhjgl}~y9`Rfh#}+&=`2!&F^?B5NFv&`m_~h&VjgK@k019TW!nBE0)#f<4k~A4 zquq`*mSt!tjbJ>Gm1x|FL#D!*26D=n#u3J;URoJrdaR~s*3B|u>;e%Xgf$^3ad%Gm zwN_BVn{K#vNiA#&1cNxy3uY!2Cm}5+y72@!gPhl-ZZQRKJvm0o6x5XzFiSQ4D|Y_uf>-ZO8Sj0 zLXy*wQpwsSre?MsU+dB|2jG^_hCMHrpzJFQlZSrIbA>9%V|+ zQ;%6NbLn%`bthNkM9oxnR^i*=cWZK4Y zFpl^ViBg@;N@2$~?3j*qn%8eV6GnubCf073IH_ez-*mN3(bJwx+vVcbj{$4RD0F4) zQ8HfJcW=mgE|@6?JCd z7!lAI4Md&CepXSYloBBYTDKrdBF2%v?KvDSuw3k6t)X{4*0dNODM`cam(7CISVA0e zi(XZeSnLpM6scEpaEY%Iw|`rInRUKAosm5@fNftUrF z&Zxs=$|RR7CnRE9y*Xn2ow?JW14rlX1Z%W-nj*oe-$!3M4(!BgBNSU$j0RaQ>7Mo^ zQ}8Bg1VCdDXKC66?P0{1NY^eX6FTy7nGh1PQMX>EpuC+$2T^Tq#p|L`k``+->9{cs zLmV{D!FKrM)!jFFP2H}E;f2D|E{T^YUPKJZA82!KT9T^}urwsEom@$Y&}JQzq^uja z5vIYbt8<|esuS54%ua(Hgk%!76xwC4re(&G;s&?qAd8v==1iUjX1+z!IJ}?me!#h= zLi8$M4r3-K(X{a*NRyzot`S*(^!>j8-lY{d3pVo#nbS+a*B z>bh)uh*^+Wr`OfXB&SIk4A!ZNu)t(35+lwy77NF({mj4Txi?+SIu@Pn%REkj-uBgq zPS=K%BCT=T`$MI;MjHuZH1)m|@@$q^bd*AMV>XgWIV%SxMdjOx(~lJE=T-6K)m%`o z#i&Z5QWKs-(8fV>jRa^fDlE2*XYH1^4Pr{w$yQ(IHt{*ixE=O@HA+x);>$HyW`_YPAaCX8(; zqH4Nao0Ck|bCMPTC?mIR`?Ba3K>e6r2D#ST*t~{+79UQ0nT<0}J$51nZtdc;! zr?tCkPAi6(M|5~}q*y~5h;=M#j}x^cU=gwUJgiPQ#u8bX79S$3nnchP%arvT4kvLVPvsa@vT5vge6@X7W)x#CfGQ%SM6~+c zVGDcBeM?M7sl~@u1h&}+Rr#QHSc#=LrtE1_VekWuIFvGKb;Llbl0PLjZ);c)2uc_> zVi+V={~RHsi5t_nX1Um_6EAi4jBz5R%qCBDhFo1c1=2WTi(%O;Nn$vR2N-8{@qV^L zP>0o^g@P0zm_)GYs0T36WeeF5U8GBf1M4A`ZD49~md;pgDFmNz336juOon9C{(DCB zL=2J=Q}A2T8lZ}qMvEpFBZ-6!3at)|oQwA*I6@k`EMTXu2IFBy6(8ct}%vOg8kn*QDd3ZlA^)N{sj(Y}1gEE?9muU{)PA zX3Ff*G+(=-66NGQDc6p;TWlj&N{O`Xg0@`}1X92C?MIIDEOlmsQ?+zRVj1V<_ZY0@!}sy5cx zq6?ulDs`VW8~W9X7$a$#bThXg&JblHGzlqaVI#&712jDpUocCH+A(I3hC-w* zYDHf}Xj3E-bmS*OyW{X7V2Tzn%-wu3jA^1Ih$#}K5Jhv-iWm}=oGCz3(Zq~k=Ab;s zT(p_UIVfitBtf!X^~}}p(H~N8D}b&p^nK)Wv^T7h&71W$~@ADikjBKAjMqATB0GhMr{zB z5y$~4ki3UxLGlyUiWX$0Af=FE)N@kTIa}A`kJc6H62M?7{* zA#jy$VKH?Ks3EpyTiB#y8}~E2#8T9tP*^jJnRLqqUac)V91J17WxupZ7#uDjsv>cUc=j^CVYbRL+4hhTZ-IrjoL>Lbl{{`#QGKMu}u0v?|TbQdlM}jMj_U ztx{Mw9&a@;t)xh?dWjlQ6DyMwA(iT1Q70ZEjMIRn(6$<&=0}gShGZ>$+mVkcoe;r> zgh>g%THvywEY-EOSi{g}cGp%R)&y-7vVk@knqVkK>2~HIkXLG4w-_M1#O}ta7sil| z^*43%v7+3a>T5)!D4UrQLmspis`deeLPLY{NL8jQKEq)pTOWJqS-uXUiRja~y%}5E zkfsfYCE5w!j4Z=0gB+4=;IQoDoFO%AJ2Df5elV2s8#YO!O*L9rbziR7p4 zb(+USu`>_G9Cc<`av0TGK#D%LWQy&urE+zuTFAETHo=~xhzq3>gsmfc%{Wu|Q%vli%XB|bf)R2@(!RtM33{(`>#Bc`F-Qtqu8z2#SVltFP;$bjh!IQ3BQbemnnRo+ zTfAi6;I{)JF$6zL>}A{N=A@%VSIzZAHw8tdYXfbX25T)j8;r^7TD~>YZOF+}ilOav ztZbd4+k#F=j+!N%A_NqD)TUWugB%@xJ1O`QhOeR~pf)DN6vm)ete=vGb7mzYk5j_3 z_3hO)E2|<69D=Q*zG;i<%mGmsTjUBUjW8D!X`f6Yi);(Bqs1S+_Wh>b1G4?Qu30cm z8?5WFMn_pv(XN~WLk`=R3B4Z`xwF7Q3fP%6Uf;P=6vgt{(@H~1iN4cmgE5AbV-anE z$%v4Lfp(?dB(|%@N--+erCPjO&;)Ytp~6a~jyz^X*8F>0SLJv#M}D@z&pa!$E_xH6 zWj1q!w>|66Y}oJ?I|&;1kD(Adh}sCUK@yXSd_9*3zj5h6^A<-}acK3rOP}`xnl$v)I9>z`<~yaXe%i4oESu zTAWmbW!dQ)877KXj6RQ5Qke_pic>nK$%-gR-2k*e5!MnR!!lYVsnThY95x%4p(R+$ zsi|dX)u_-J#}op_$rd@v6$*E4hiyBepGd*eELt61!M4aTBHM8mB4lIe4hMoQ$i^$L zB4s3KF%gMO61MMWtezpsStX11mgYhsb(Vl9qvMq5GRYR$glgt@3@$aIo8IA63zPyO zVj{W;)y+mi!A}Dciu&yY3!SQxrmBVjMaELcmUL-~pZ13 z^l^owqt8pGCSax-0&0bEk%(QU&poMw6m(qWdhHOU*RhLOhcShA*;O#ps6%Uvw7Vy; zH5@kA5nW8m@o4%6<8n=y?@_N7Eu5swq^YQfN73m?O1k+qAC4qrOi&;Vr+x8f+Qiw zQDx&Kh@Gw#+IV6+A&rR`1k(!fK#P+(@Jl5GoY5Z%VDw|sxIt1>6HC|Y2xlf5J8d9Z+bdrNssJWqZKo)^G?kAdI9aGyj_oN$ zoxoE%+JEX_RJ5X5=;kVE+ar~%1(1%-j`pirsU-;62V(RzO+yTIqEHm&F-BYF7^m%r zx~4lN&TdCnvMr=_7}ZuZiK@7&MHL;1qjhMD1Q~-(Bl8Vh5SpeV8rf7IF+tQtlQd)nc&4+P=~>X4RNL9FD3gx2z>b*^bI` z@-(hj&Q+@FGTSl_^iJ3wUm`{fo8(zqwFekdz#YGCYQYtAB&8aUQ8JzD2$lPGY^a+} zeR^bLh?@76$&lK(uPycq+!@bJBU$#4)K2bNB+-bkr$DZ|3i*v zmAuv2;yBVcNAjK=0?t}|@c3!OPYQv@lyD0rMt3L?b?^hTZFj1LOpm3*(AMrQY3;i$ zh5&R4&rGP-kgMp9|}(bj0AvT9V}WJGg5a)G{qDb}u^E&3+CQ-s5GL=$n= z5&DFi6uFtDoHD;w(W0bywa}j(fOGJqrNI@WGV&s-^eU0uSskCbNH7tK(2bCt5W|Fv zLUKBxNTbK~ZtH@b(oEL7{(twke+1-_y zglNt7+|4Sd(W@w7+H7e1o)jRhGxjn;Vnd3NGEF)rX%*^H(xFAN2MqKPIBtDE>0Mb= zM>)F0WFi|USTd(hpWxiNN9YzUwx~=zrKm_n-8=k`8`i{oFv(kOGVTwDO#jdvUbK8@RipzZ@4odIHS$4wVjS(m@wk%dsj)_ zuA>y?2PtxqD(V6v8ImH4B_-O?3T+Um4NNk%rs}chjNZJdO{1_c@LWn|F$Sc zT~`f;Tvt7%L#SVl7BhxKz~Z!VqFjuW%vZHBb7P=BYXQuv~?WNRQzs4?I%PEnz% z*0f=puiaAemI0gVxL)^9vyG;hzjn08=-Q}$f7*r;9^`>V=`a<%F2D*)EJgE}Dsj~yZ1A+(3jP0J?N4K5OVj*5?DxFOSt24c z?^65PRlWE0^fEo&GvgT!Db8XpplJ(~2~rX%*p>wwFzk;8{6YRi2(~|%hHM!YNWg*x zh#*bbG-*oWHv8h~*}7-CySl5os;j%IYrpqqM#MSiUH##CPh?hgixvS#p>Xr&jf{*q z%lkgh|M@SOEjk7K^RKIMFR&jc4?_xE4ut z;~BM7?AfR&Pn^g{Ra3d5O_;6&l`&gvfM99lE=V?W^buDp$*NJ?U^@&A@-;f5%P}-q zv6*f;hwplUATWZBS$Gptykt9NxC%s**Qv?qo5Ls9_=bTFA$dMg8Oe+%h zK54I01l#;{>aNGldNZccQ2XYWa@b=`Wj;PYoQ12PV>c(TpS8j7Rxc;31<-L(WGO+} z8sg;v>l{;_=q8KZ45yTFsiKhxOOuXvR*A1SE^DzyISIKV)``A9XR=pR3MEWn9bF#i z;z-^Uq!@n)yyxX*U z&npSI7VPM;Zi79uMM)~eeu zqQ#OZJwQrDN+lGf2$U1AqctF62zhE_xa+29<$tVE1Qj(CJgxhHbse2mKc&98g{z5R z(qoP~=Vo#%xUSVq>(_1TB&TZa|Pamh%6p%XUa*c^`4yDjIb8JyZ8_*8?JqN*3r}tluRN>&ZNT;x7m-0df7p|);GLsPvzm;d>Z~|VN{&nmIR(1ymM%fbfph7Z z^TJ#bk<3IOv@YgcI+l`|OC(V_V;}(s61V6HH7d!r3RBgYqll6*ONxXXDM=#jKwk2VYa6-)t0O zq{HDzC{g*0GY%X`B$CP8K3I~;I@SW{E$%^L&t5O=2Upmsl1;%IRmN=Gh58~n3&#NC zpz`7(>b-Mo)B>kUo8c6yx7Z^fO5W>3N8Lg^1`?Tc3{(S!MC=t(%~Sb7Pqqr;EWsYJ zIOgL6Hk@OuE))*o==NmEs;oj?K&A79DQKZIWy%K1F(A$$&XA{|d1|J#iFD&$s_sz7>CG5F}YRGmXT+XLaZWVpGF?Y?+MmN?m>mqn*=Qfry#QcC=9`MGJ z8Y%;-)X7;p+?um;Hpr?n${BEY*AsHaNK4z1%$yUWRXnF@M{y#AtVLi#logSK5>@kr zF^)OUj4grQ*$!O${lL(jHAUb|kydouYeZyS14|AVV+rA)C{6o!=Nu;@u2>-Jn5>?i>hL3+t^x{MQ=Ai%L>calmS3hh#v^5 z)51VI^N^1i>l-hpaY5GWMC2M#`l0(vZfJ;((?AKqIV&O)gC=F?oK(Ts(3z4aYE^W` zyst?YYRSYfw`155mLnCE@6#+dj8(J6o-Gw^)=EQ0*5kcO#4VPEV=HWw^eZRw?==Y+ zBTYqWRE5@iTsJUu9&2G*R0$Vy#u+7vPa!ic>Bh*asGD))T7B@Ljggv;&eNp!5ad?0 z8gdCZdxm<4gIM1r`tpAC%C`8B8)tO=Us0q$-*4LaSd^a7a;(%`K^tLn<2s>Myb;EJ zb1DY6-Ih$&(N)L{PWRb%rbt+>v}mu$wZ^TksLhJPto)mlbq;O&Ugg}=gxzeg-Zv;; z&4nn1IM4LssNK==_yZf^zv|Q#|D6VwobLsjn(6O&Ly3qKSOEcT?+J z76LOfnT*G`+saUla-KXMY9U+5E;HB-F$IkGYNVJF&W(*+oLIA8vIUs~cn8kF&R<*F zukXWoYL57Epmt6<4t*hnh1?Y+70j6@7bWM9GEhpvjg2f^uG>^ynru_ZC`!4=5u4kH zFnfF&NG_3WAlE>$f)hh>Is~;Ay6mV%N5s}!T;EYrMT%*g#SQ1%jOM=O&=erepiN8@ zIcSUuF_8o0)rjpZLl)|yoq5*eDOg4{S^{J+WC@hHKoq+3o>D3?FN%s)9e3qEQkJNT ze6N9(B9@e91pw%D(TYOO2hD(52fR6A?RE2_J*yTzVuW(lHuaEU26yI3VS>@YR4Egf z=#eq2fYfJf(k}YwZg8v+0u2SgHl>KeV!3jWTo*+t2vDziA_97?w*rq`$Wm~$WN@oW zO#K~(S`#s6#93U`&myAM2DYh5iWs6a&SO)O7|}wj$ZA^%21}AcZ6=mASLG-eA;*ka zlep1QnsXy5EgCwD%8L<5wFS3k9mT3!bI>fho9GMDh`?(Bq4$WjPK9h%zrTi&-rOu} zZD_SrKMGb z6_+Bd7?K;$uTAKp$U?2T6*q}hF=T9iQc1<2#8?4xPFUAB>A#N7G`Gr~q8;ES4@b`> zJSpM;soqj=g^1^~wrt+$^9Kb;~7Uoi=znVKYj) zZUuYFnK>7ntg+8+U6nP9tBvw=o2gV?^Ndqsx5?&oSsDSg(5mW;+}_dq-fgwE$ynPB zx!EYGxRjPwtZCu4>y$tUs@7R0vDV@?8%XFNXrimw?e4M}bSN|<+avZK6Xoz7@7_A>RJon)bar^v&?RJNCmdj<& zO!7$thEu#b4#q=nB9bb+mTy70H$4pi7W###F&)$8kQgz1Z;ZM;~YR z=mm3H2wA;_F6)AenSGZOK|n7sD#WB0>M|X%&eN%mQ9Uw5&qXQCsdPg=V zqw1WsE1pynMm=;AZ#KNYh zI>98E2$)b1XUR3=>&P%WOwg>g(kjOFj>&UIeCxQ1KrD!98-x?hLu}jmA~R#&fT=j~ z3Q^~b^c9;OIcAC|l%I3+4{04z&Y2oBe)Ou4vZ@ENUeztsjP)uJcY`B`Ol(}ayhL!B zuGHcGv{a{L*6z$Hdg7Y=yes4-PFb z+Sga4l2raLTJRFD5p951DuBI_<7M%LrhF_pV(qBEw~bL&PFz0WVTzRfaCx<92$im~c3p3) z9&hJdQz2H2sV9FaRamHRi;i$sZ#T_~%W1*dbHzQ^}H-DcC~baJc^#fAmK$aQE&7d4O%d<^0x;@4fj75AMCq zD=&VJhabC*^A0JM4Tg+xg%$=hLR-B#>Jh`?-UH4bc@+1*`YeZEdzH8U{x^_OINRJ} zx__UF;W*!C%ubbtha>O2agWRU2i)kGmIH6Uc8~C`@gimZr{G0n}gs!v8HtA_%SA_Y@*q3r3XZTrd_&y5vOD|R#qcyO8|&1N7M zH2r(4HsGYBE5T;eqGund^TZ&Xj(ci`O$Q-kQYDUwU>59oN2!HDdNPr8To5dzig+lq zB1k1w$}y{I$qMJE>=JFh|{)|;Vylz0Y8n8+tcl02hCEZtU+A5-K zNSr>35`C{gypZl??AE{-u{%qe_edOcU7-1GTo^d^WND^zG}AV3@Jn0RMeP-iZpKvg z`%o34^4>%?h-Igh0%hkQYXGMoKf* zDj%}5j+6tIinl`}LkEmhQZA|*s(OFssvW#wFxBAgK<7rFlBE*z#NZUpFBC!vP;DDi zt=t|?o04-%ggvQ%B$4t$XcA&+8(8l)`twpw>$a1QkdIi~6Z1^WGa9LwwV=zhnx5uN z%1R)w0wEt6?AZ7n8&cBZBevxCwMZ~x^fiqI%;`O@MCurp7OI=CM^~asI3?aL?K9Ad zHd@oAIgU9OVw^GdW-*{YAHgv~i3U#?Gzhc^#WM!V>skAtopErau)7Ge-tS z9nX_-j4aHj>vjFP_0MVyE*~l0GlfF21&5)eBc&KZhTiFfV0BzEM%su_7n%yqKy+^J zJ6(@FZ@kx)H)Sv?#iW^53K;Rke4t3w;xY@yRt{Gitj)yWDap2JlbI@GK+@a86I5kZPqYsz$S3JFc8EU3NV6*S~-%mCOIr?^Ct`>jpwPQa28X zGro3IXRyYwk5|;I0}>1ukKE$j*X~1@2@dW&{1E563-wsJT6pK}x3RtB(I+2gerFFG zM?dzw{n~phn*%6mG=a@!M9)JD|`d4Guv zJ$7-F%Y%-$mW-bl^>`Y*j(nV#^`qqoYM0JKCbpVFW)K>sSnOp;FqatWlyu$m*H`LeStfvw{21?1K zw5ZE(tWbq`T_4m;==25G34Yc8vso)jLe>ty4S6jHjv%Z|iB0}frU z>WG@@X&Wd`Q7u`UrGncvPth!-Q1P}W)_~a>@;u`b(rR8Otr@>Ewj%291X4 zT-&EISf?b$wsDziIJ(dZpEbR^sl=F(Hg;GygxpA`TKF{IbWy`ZZY;L0sxjb_4>&uJ z@`SnydvadXXf7)@;;a_SiBwE=ByI-loJL=B)0r2Mm!R^X% z$v1W>&3@DWy}ErV&j#*mfII z(UgJHeb!K_oL2foX_f&E7q`X;QXRGaK%uifMAQ@IeSeDJQXB4#A9ALOXfUU9>PFeP9in$5dCJ(cn?=rg&*(_V4UV**vAZ4y zl(gg>S6BD>kN@_6eCl}Dsi&5OdJw$xIB&6Ce?qaAv`R`Ld8;nO21uDi(C*X;F%?W# zbp%p{t#R**nW$2+0qkHYMbV1m{>Udj{b|Nw7BY#rL>){BgE-FW7(oZO$LL%j++_i5!k>pL`gMkoGedw>AV9$1ti(0tPQRf@Zs{C9G42{ez4v(dZO4X|*q!@jk z6Y^f=%+)y^qwH1ngoC_K*ingk$8cmP7bLR~%EFnyU@}+O+%t|2#E@cbK8I+`s(N6MzRNK%u}Zs*balXRJ78wczi}(bwnIgot zUrRx3AsrHC>~I^WW4Z`s0mh1@V+s>alzv!6H18=S%91qqDip9v+EwYfBXLC9IkRcP z`3)%^TK&<2E}^ALk7`nwB2sls#bn4E9Z8m>j(*Ys#1(Ri*gKwbufj!x*hLet#X7QB zwOGwJm%8h(O_dLPZ{ZL4bhlyDtWAcl~&XsF_eQ8#$g z){Qk3aor-7%TzFK(9X4S9Tdsbh0VGiITaa=vn7q_o)?^PDxW5)?0V&5-6V_VL~7%o z&gytGuh~M9n*YnXw&gZ@(eYO%P^+bPJxgk&TKVCF5k9aXuV36m7uF(2zpu~rojX0> zi9ZEpiWpKXIB(mZrlDm6&LwqlJ|&YkSMeM_Fa}$_e>^!YI6si$q{^Ta@vQ)p<|&i% zLf7vQQMyCOd%W=tSx^agCg7S~h8Ciw6_62wu;Ps>#Hb`@t|jCuI?zI4ATLLZA1QIh zcuzkJq_}9FTAS_UBn_Bo*HJ5^u?AAW`H>hS-gl&ioF&qUpXEddNl_BzX+ew`<83SI zW~TdR47c{UvLWXKrED8lNpL<Q;-N>lyek6P;~-a$?`neqrs zt?Hz?*^uX1wfs4&BC8=Y>3F1;LTW0lbUd~26asTR)<218>aLLt!D~|g;hk0iI-~orjfjI=;yZ;X2JM!^J zV{)EufQoj6<#5Dc8LKBA_8Jc$qQ+l`BhEQG@szYG2(D?B!52bOcUy~NGg-{P{$bp| z_apq&kNyOQcOI~W#3z326NG>K9p3wu7x1?>Bv*0Sahxu>IJ<*0T^j*Zyc;itZ((z*2}sCiQ{g1Hwtd-^W# zy>-cOKJehpiEh}apGH;5_;gTSMox)h1-oQQ%sl+eZH7ngaPPqb%H>s;NkmHpN!lER)KPkM0VBO0^d^vB*S;a4>te zY0E4VecDk)M~jkLc2U*^$ZrQ-NY)^>s!7q-TEe15klPKUgDNL$iMW2Fa_Id+F@d^7 z=6Da|oN|*&K!PLB5!qJay@ZIxjFvn@cgNxe$Fdw58OdIGU`tc^AcE~%Q_|U{*n@nG zVCA%!%X$uLw=V5^4n@hk&TiX6*Rqx7s>jqPWXPlk6?@lHZIl06i#Q?QgW}XtS=Re` zjd=lV%DT?{%N}y`ixst*+V>_-2o3_LF&ogfuxrX=Q=+sG)>XzU4ZX@K>f)awSyn}o zs^^?j_hut&Qgkb%D69lwoN_&K(t_VPP3@LbqnI(G4OW)5U|WYjP1&~oFX|bq&cYFA zd>c=#$4c6WCZ7t7d_qJ7Cypf@8liNh&t~cmlso3e-wmZSyM&S(`r--8M6D3x+`b>l zSxr5Maa5I4MVrU0%c8RM{g#|&!05E8s+p#BmSsKy(tZ;Tja62Uq8POKGl&W$sEt&sg`UL`S%?j#(Wq#LqdT3ObuH7c*TS4;Ib$`jwiK0- z#~IVqP)i7E5PDtbw54mU3|vEWhW473)YN#XNy@LI9V#n{yNY3M#j*}Q6fY@xhU(bd zK9It|yl95l=KRQXHL5$bh3PQTcZqp_hm!6i(y?an!CJuTZ!==JDv6EL4^gR{xlU66 z+G$Zl)M1Qp3`Yjrv+XtMx z2DO#PDsixikoODrV$d8Z9O5Bg1+6$cWnir{T0w|$;n7DQ=L?_z0-bj!gQ6AcS{e0! z{ME1X^7me3+?{Ko6C$Rr&c?cUT;6+^ToSjQy36r93%Ad2GcSRZ0`ojm$(-F8Ilevd zp~s)&^8SGoGuA4}s*sr|Y{X*Dh41{&{|lb_8$ZXz|LD^^{2#o9s0o)+m9}~U|)a82Nt-Zm!o|poQ(;mVP z13{Wp)IjMBHn+Lw?H*eV=i82Y{wPG~whlM;9MfKx{N|V|qWg|9@a8vP$80^@UC(pR zKgm0<-{W}yK)G8ufATi*-prCB4?Qs=CXp^ROH4$#`u;+{g>WTU65Ye1DrYO0)-gr` znZl0U32LSBhR)nMbJEBICypftoOGycR?qp)ZJAxnfnM&AjuRMgohrfroOIL+MLAh4ZYwMgGR`$M&~8HR8#ph>1KWy~LOCSN z?nJsF?IYriuF9sWTP=<%3ro6>6-P=3oI6v#20ck*=5>*b1$L?w5m(9Y2xbTAt%7V4 zRQ08CrlX!iktQ*8j(mBA8wb)ns|l*nOg4ZV6Ry{dhnAQvR8j)#+Bzpt+qu%ek5JcQ zXGGC}6(O-Gq`V>@H#;)Z{=MZbrGRTG&RQ_6=f@J$)ZqA0yLwjB!BvJWTHU7BbT;@~ zEj(5NtUaL?!aB<6$Z56szxn>IM;$pW8m*98WCN=b>Bg3TLvDOu3$UPLtQ$yCJrQry zsoPFTuOF~&EHR?~HX}JL)SBpqt&W-8ik2zDniGV^8?~<8<2m1W?=xbGI{LQt9jYQU zNoD$`1xjl2_*#@H(xl2PhjW$?T8M7eQo?%mh=SC-c!Zc1Amiv8Dc39COf^cZ@iGQO zB(<{$4&O$Df=FuH?~2w1l=v5vW0flX=8SOMQz_VfOP3GKQB48Y*StQT*XD+YWzXnF z3K3`fR^(h4o-2n=FMpwHqxL0bHcmL2BZ7Z^P#Hfo|OEIu|^{ z_KL7nHs=Rm(~iF$KVuv*EEF={jifYl;XIcqun|v3;VK0!gFisbSyG_)JyV#eXvlR+ zTD+f{2Z2%x=i75t7y{>;+f4vdvBn7X8qxW|LPrEiiFCsWxuWdnbUd<#Y_6P|+}vBM zwR(xBYZiYDK|OFvAuS6zMog_pO2ino$f@n%R~=ChT4vRtcIYdtmgkJ!`fK#Hoxhyb zrM2riUjO#X{Mv8+I;mCZAq1AN5L-mTZ~oSA@y&0418>wyKgS5(;lvTh)Uwbg1G|nF zU->qD*YoUi&vN(ShxqPyUnSQ{hvU`newW?(IUjoZLkwpFZ@%?9$t3KQRpOm0J8{f$ zq7EbZ(af9w``@76pLyti`~~b^evbJ+`YKo7dK0(xEKZdW-E8TrMXF(O(2rY9z@84& z!vvz%@YTRDDN=EDbwy5v$DVkU&FwQbn;q}GeUG6if^zH0Tiki*g6*9hhX-m;POADd zk3U45BX7L^4sU<^E#CRw8!Y>Y?tBMLEry^FZiAF_-*NXNkI~zX{d)&;E_9=i4@XkT zoZsD&a$tIQkM|o=w3KW)F84tko3oCb19u)j$6W{|sB+1Ma$U5Na9Ea>O{E6q+7&Em zKFJalg0++yoBg{IzAHN4T`kc?R5DKUe-bfdBW+~0UQY$KnmTVWgg#@EL6WBPVg*tm z8-=vW!2 zao+2=tf~8HNHKO}HSn_+R#-mQh}Z%i%F?7x3GBJYtm-t8hUO^x>Wt+O)Pyjl18v4d zDJ}R9A(g1_p#a4zCCI5!AypM0GHbV*(}GOpw1A5;Q4!}Fl~`rRc?pUXt&5(vxjG`u z5t9>j4K-|pYW4q^Pw0oDIiYRFwtc;BI4l2W<$sv=d_@{WY#Sl17u*fM6pZFlr3KfJ zlQqR$(VWDJfC+jpmXyd+uvL|diY#9*=OXffBIo*1(R=#lzn|Qy*VmBi=dR_<&Bsk{ zi8}7Cs-f#5N2St} z&Z;2EnPg1!gJ{3bIjjiAwTp4eNUx!kD+R`OmK4;vR6t|sjbOb{qe9lh?t-iDeV5<) z{Xf7oPatCq<2dro7hm9&?|hrh*$&h9O*SbSPTF_8{pM@D^zuuj9>(oCu|&S}t(W-L zE8pVVfBbdA@rd;u#bt7ceD{^_^7>0J@zP5#amYc5+Gis+3tg{jmp(gePPl%whoPI8-sxTFdUYg95f6QS#vmx+xXNTXwab;+CG zdX3Gk4YwY@!`pAY%i+NTto0ZpJox?CCBCKZ_|k*k3tQFe&{&P2TaP0-XgVd zc{sAY=L9Y;kmb zi`+0bT*Qr0&Kuyi1EfSrnRHl4OF|OZQF#Vtb;uPVUA`d8k8?m zNg?1uM?6l5HQ<9TS2Z_C5l9|JU4tZfvT5jZt=R2GQ>9xDPD%;eceu?+EovH<=Y<^C zV|KuF9n&1CS;tT{>sF;)p-N7!Np-JPSWWzj7Bef6xn)E#qI@0$ta*O9_1_b6dah|3 zbW8abb!@Mtp2jRW7fPV&MnI=d|+1+YEA7u z-9VMr&t|S0nzc9r!L?|3%t`|saV=@>f{2fcOI!J z1{0Z{4Quf0DFoy+x@?7SLH(~{B20T+H)5=#+nzyD^h?7+H=Kr4%^U0e=kXfVxIQO_ zlomA9^m=T%K3(61T4so-6@qu3(R#d7I|LfSR3uW8!H+Z6fblbjcW+bV$l0h(z(Z%2 zvYa>mn4X90kj_HMiIfVXafDLT)KClyiR)y@AO7g9*TCe4&>JzNW@myZ*}LSWrIahe zjVKydN}?9XB}=6m`Q(p%?thy?`s=mU3&6t<{^nW=ZnHVLC)ZkWeNS4n6R1_Yp9Dy~ zk<((W&KgTWti^aw4FT8ptzhuDzNfSWIE!%k;67jc>=!sZxR2j$DO131dZ0pqbX@Se zjv5PT$@q;Y&53HjZ93|b5NnAwQ$pagpZy%qJpC-SR=)T8>wNilew(oy*qDxkO_&wV zD@Bua>zehR6oTaWwQ9jO!_f18M7^YV5o@M(Wn8 z>03%XI9_t+>`CJB3hOe`D_Ivb#RHhm z=&U#>a+gT-z9$|76~T2zqdY{EtCiI7&JP3AgFSv6T57IJic8ek3AgDG;~*=?tM3P5 zT|?Ql2q?9(Wy6*1>8mOiYArbN95}FLOC^#kbWWXEVq_pO3X=hiA!AMm!CuUXRj24#WiQ$Zn zwk|t355!}n?|PyM^mV{w&t$LYq{Czn*?>>Ppqzwpv@A8yp`YU>7F(MyiW_^d$8{#}`?oZ2Y$|cZu=fwG_i*IzWJ!12gR2C$3U@GDZZsSocFx`t=AOwaE+~&^#ZfrQah`LjaDd!fZ4A6yS6E3z*b5zP!dl)`-FPaI7f*E zd>dmAJ#=V=G&@C`c95-smj~2zNdz!^eHf248$oAW5zY4tdvTa5>GsHhy5XPyu8A7 z{^rhiYEm_DIn%YVorZ)Oti3LDGO9ANPI(opLaf%tSYLTK?e+BQf-$;vq_o_Sbc@m% zhM^q~-78X5`w2y7%!w$h_p7vv!2?m%eAcqei>eEgu0GBwEn%4#w!1C!d~7P6wHj#L zrljkY^Zm(7C#Tf-rvoX>41Q!z6V_OaHPmV-&3i_1ON(<*nvacURdv|5N}Zw`L@0Ij z+*u1S!!jS}hpisFs$<8n1bjDQMVO}pzBi<$;KuDK_*Bh1)hyA8u%tyTKvud&E1cA? zMoM4X%3bx)pnJKS!?O~9$KZH0PDSSeU{}ExM{7$3V-~*Y&+}LA=+Hw%+1T32YTt4 zWMW7?PCS!L5aPOX#kf+P@UHEP1@=FCNaMU^50Ed_na zOzuFRx0qxIE-*8ZYs7lPIQCR5lAW55RvnGyistPI8ozRwv4g`JiygH9PD_BM3{*rX zskQz=O(?}#qPn0$v15?0d%G`XcHU)|x)-WFqm;w@;tkGnuG(*hJQlb{BZs(y> zBg30+X0CG(Qu8s7*U+c(tUrO zc_S&4+xwBu>l)I6f2%RXnECNP`5D4-<`bX)Fn|8P|MQ&RJ|i6i;yn9%dw%xkf0D1n#ee%>|5NmR zPmJk(>+&_a(T=^pmgBAw3AyErt-f2fWd`M(FvhpY1WmMFc_8fxjqGmQeO8)3k7x=w zirz2FK}p78ZeyBe$md(5aC&=b^TH_%QDAFiOg9k7fL{04KK3}%~L_G{#FO$jIQRb$T5mGi1BUh(d)gI zaw>9^UQs|CzUxTKK@kdT$;s$-xlA}`PToKIB4{L(bq&=rq!d(QFRo2q){&_mOw-1C zrU3{sWd=8}%IRUHhpV5NF$NWb?I?UbA~*kMp~Xs}Rfo6{?-E#kP7Mnq=ezq=EHq|kO14GwQz0ftcVJnW# z^mKDlM^#hU&W2*Zg-r26pM-2hm5)YA+|^kymE76WWmvr6Fa!tN*^#YQ^|mNs*=9?O zlal5vV3c$i>x^?kJ!Xuv#ChS}?|xr-4dSubW`NZo${4UgXV=MBI%C0DI`KH?G)+AQ za>=Lss#@zwR;i18J)Qp&!zua!&{zr)mJrA}weib!TttqMWDF@K)Hhf+y_5p3IK1)1 zIdV)#W>F834I8|3cySy!=%%_V3EItZB4kP?q=4NuH4hHw^>d_}@TO}j7q8c}h;orq z1hL>f6`{jnizjR~dH570Se<%Wcte>NWGT=%2Ch@*VGva-E(P(KvQLOpnfPpGjR$a< zA#F%*YWHS^KHGrR2)_-3vbcqfhbW zfBXUuE)RVBh3{c~X`?;}$3P01xFph2sZuDVvdlAa&W!`8|BJwMOx(Hs7!o~y;un9K zPk!N9_LoPzy~{(7J;m|Cp3NQ4)6ag0yLWeVTSfJreePlYKmYuzeCG3?!q|;^j3J~j z@zm2#@H@ZphrIH_t88|gn>)g3d0)L>YRejPPSFe3$h>Q=p>=(ea4V{zrhF)|H-}SE zw2ou67+FmQ)h#(Jfv(?>mzIf#ZQLBw6hTc%t?+HE zW;lk!$^1`0tJP~9+8DC^z7#$Uz|!^|-B?YnDsQ*PvL72ubKpg0@_jjl+o zs9jMPkxE$hC%0r>Qz~f*xF*?F?}QA_WBLwnuA2Zc=Cm!X4`YO|EDf~qA6Yg)w0#@drn;ySQO(9oUQT-dEzRuokL{!m_7tyt^u{f1Hu-U)|g zA}8hcIqNxw_4uDSIwvyn2RUZ{%^o*r!J_2l6Orp=HJ&vwJOtw5ph>vLzq8PHw514|BVD)*WkDc)mb*uk*^l6y2MfwuIpi0C^d1v9=V-H?$1~B*>W@$J0})b z)Z1m-Gna%^Q8(a2pl%0P0@W5>e+En4cw9q~Xgq@Mm=ROiM$hC5uEKsu4AoI9EH1H2 zj%t#o2SbCFRhsXrBjtjesZ+JzZh^qyE;yzKWSi(`VJVtL=4;0|j>>~LCR`Ch4n&(V zm6LIkcb?;PJi+S5T8xMums+%YZZgrjo-0&B+l`x3IP7|{8s9N=Y8>aR#am0Z!e9rY zEqK>cdhPb&ka);F3>FUcs4A-|kWyi`o*Nymk9C>U=D-GTC809WwIvCX$Q*h|c$i}twfa8burrHultH>87(s!~cS zdr#_<;fyM;`k^OHNreL2o*XjixR4H!Y-T-Yp{LFU*9(aQ90tT^k}O&%WJ8@S_QJ5F zEA1dl#ceJAmW2#+3Usz-f4EQG^wg`sQYZ33VSQ7Jx;w9%WFvoK1gVKw)!nyN!SxPz z){zmc^Vreq7*h;(Ft}`B6BVI2cKTj+I?6gNkmg1oXGD*S_t;@*YERwJf97BN68%nL z0Hi=$zi^CacYYgkA*IYCk3Pa%Z{4HR%F`dZ%O^kmJcqsdgM?Ukqs{@kNH{@f!x z`H@FR$4W{ak3RJTk3atiPd)z_7kAIdWzkU8Ir03*9_N4h@BbTw@PPl$U-|_;{E6pb zbHy+G`7iR`n=_yI!ZZA-Kl6DW+}|tjB`LQd=gbR#{3@UN{D+tis`$#;F^t+M4P#FT zGo{eNC!3*~G=wE*jOmDBQs1K-s8tb%(ri3*6CG}hM_MtHlnbFDp_RDIh>`a5JHj$4 zu{UMn_dmvG(VBK}1x`?hB<^~r{`wzKpL{2;%U2C@e1*IW2 zVL3LwkO~Z(=w{yaJ+-KEDx`d)yKe}H>zL*Pnb4%+1;GwJskbH?4o zF=aAGZG61NNTskqg^lw_Ry5ul!&TC}Hrq@=Z?4s&8#v4deEWVu-^;)3q0M$_UmM0@ zB-PAryoDI$5s&?*t&zIj8|3}q;eX@DDnDQH^-s$RL#31I%2|8*H`n(V=dgpO-Aenn zv>FXsd*kJGF0aO5tus9;|3+pbppvld$JKXTj5nB`h;^1Bhi1PcnrwRQlE}iQUEaM80TBZ8+Bo8KMPJ_bb>E#aAtI8@o$dr)D8OFxV*!E|{{hlb9!45Dw z(s3qD1$QyvcKyjon3hq8H5lUw(*tVBlsRFl5HDvPNf=?doRyG!jJS)AJQwm(uzjHP zGwGn$*y<6In^(ztb!1b>A(E#FStZ(5%}`(b@^^Xb^#^?I8^6c*zWE)x%|MzK#;xPs z2XE^LEb0A<6fBWA%{>3%C;8G(evU7E;nV#1mp;p~9C5br*&q8DU;N@{`O;5)hL8Wq zhsecJt7!qam9Ky0+x#d0yMMwj{o~){p(k%~+($wPDhZzNuq+erv)-$^z#os9haTS% zmqd(5#$C^+KJ!T)eE*2C(ndHl{jfuwg9|w=^uvx?8>hw?@Y3YcN&`qy3#1fhYOSi2 zbv?#tR+Mp;t{+d=l$fT@648-%*EQ3YtxErc0kL5!j)DNTUa0=XL~OQ6)ozI0rVzl@NRoW@UW4xxjnwBU@#Gtx0C z+Q7m}K-LJ@>i}0Z09@5ni}Jtv4JLydMsie%we33k%^Bp3>D5Wuce;@qBh0b3V|sI9 zB5gbsxmHZ2=C_p87bj2TTpPl6M4DPp)(}$B0EnIINvYC_=a>Rke9I>kiYcsKN;zq$ zY$_V(LKUnJbl&sM;Z5#z4>2DE+{8N%_FRlRmSCuIB<0AI@<}ihsSHkCms5h#7_L&J z%Bs4&t`l-C?1mkIcnTt&(oFAukW_!;@Sss3lQs`IC~YC^AqT4U)No%Bd8(;YV@fKB zk($Geg5_W3(V+SFy^ou7Tx(ASOj;I9DM%@LA*Z%+G=wL`*dVNm+c;eeX*YrQkkfTZfb`XNY{q0x=2g`@g1qFL0e`b3{B)`;fP zB*8V`u3{~COSWJFNU2yW8d}#Y!Isf$CvUCt9=wOCLBC5t#tun=Yd%3x*NmzTr~ABM zF-Q>|k5yr@8CNaN7_O$ho`RzCzU((-)uBY)pZC^#SqeR z%Gyb&$s@<0C_ozlR8}&kUSeL9x74}KDFjd-^?k?INk^@wjc+n}ZfIB4`MO|KtraUZ zz%uX2F@ecsnF;QQSsYaoo1w#{fe;hcDDNmqBF1Y3P3*OlR?rQp#HazP&T1z=M;&?A zN(zOpbJ$U{w91-JUF0N}&+MDxA>rzlDv4ColSeG%Sug?%Newm8@pC~pr*xPw+W`TV zC6c0&&`C)PjvMzPPE(#~<7gobH3%_&vrLJ*VDdj91E)SxKa(@nNplhl=1^L;y&WA)i(aQp%JP8>*mrc_qh| zG+yxCK+ZJbh2GoNRVC$CA&I{KoFmfwaX4K8A5f01YanZixZc0YrqUsn`gs{{zRMr> z8k9;ldVG~o+=5Y;NdsJO@^02od*atL6=&lZT^G66#*K>TSW*gjH@5F5oF8>9GgXTi zqauWqGqI6>6RD{?la7npdDjL_QM{Bi%da#m1WlTc+})gWjETV)?j14@?{-{G6Ssyf z_oj@s2H!^hRUoB60=8CplFFZ4SLJI|f93ENDmGg}j>M95l%H-`esKMz=Abo_vZzoX zxAgf!!8p&x4|QX4(T7$uyF>+QdMfc3$7*;o|shB;(EBa zAcdfe@UGK1iIgZYky0k?H3(6=NrjzDuB3g00} zGeQ-MJM*Lu7CWVq21luxi`1QDyeb_`NVmaO*!#d_)fqEL;w(G5WEeV6xp@p?f>@}> zg~p!NW3^vk+v^D9Y@_^ymAqyx(sxMX&r~X#ZlFBavy6gk=BvBpC@~OAW>-ALTe5fT zQb*cubP766EM-q`w@9vdwSnk!2_Fz0|5?NdzEP023r9|6T?LRgw|ZkZ=+vliGN z_S9OLj|ZIdbX||Nwjn!uBc+@X)BI{yKM-TdF;Hq#S#8uIJJ*Wu2fbcmP!qewLV_rX znLRRiNa%GSnVKq{^BkFQICf~R+FI~jpAJJvN33V(0RWkVp7A%IbD(R%$%+eu~=~}ow(D9v`Ls!DN`a^Mw`*&XOQ$I%>d#pA>hV^)R6x`ChgDXr+S>H{Pw z-^F-Go`Ui+dLbDlWolaU0@=g)5f%qg@N&+y1dOZTl`NV=MWhivZCi>;WuFhK5OV_^ zp5fLGHx88jjN5taG2@-ldml^M2i&&D6gW9iI#rw~dZWL?ZFzloYPooDFR(U{s=R46bJ0dHagpaQ9@sSdA(> zT%PHB%XeP+F8|`6{RY4GtG~xD|I%;Kb(wTXeEHYE#;^SH@9@w6*>Cg5zyEEz79d(n z8*R7+*L4^xxX$s`OKsnAUYeIoBc6&DF=5HgU04^IzTc8!QX;Tq zJs-Kb1UI-uq>yuLF2$J;CrZ&Mj~J6GZbe#=#q~O0RDG4=(hwwFYpm-qW*vv=I$^EB zcN?71%qV?-1!F2HEu^>*L(-UoIOF|r`W?!pyLQADESV-CV09?gB0^Vs9bJLYweh!( zvGR@QUhi{qy#s4;pOyRBpIwksCQh^N3vKKNE7E#%KW*G3k;a44HTV>~DmtRER{iGG zhp2G`#ZXdUE{T{58}B(L9jmKNRlIWH;x!9&cGCkX5bl1%$X%6RvWD!_E-@c)6iFIY~zI8@QOl< zo5OO2HI8XHB30N=_v!l`SI7J0oY`)7gj7h`Fo!)!*85o*td2sJA~hWs&5Ww88~tGM z(rne+J8Wp0Q8MApGoDim16$D;h3(^_4wbI!NGY*gUSg~zE(^ZzbyEbeTJ5J6{#J8U zUcq6Z9|vNXwEA39W4cFNl2iAS7UkM3Q7;4|n)X}fg(X$`3@nPY=%}H6UIA*sTF*U} zQ+l?kmB|C)NFRji9l6=h*HqX`Vr)?f3ki?r4b=k0LkSg|3o?$dOvr8^UQM{Z1D9b* zq#Wt(jw~uCBt~i|h<6;9OX_BzPBSGNdKuZLEBv^@MbQpC6ddrDPnc}Q2kE0qG+!;%{BC#MSrQipcY)GiV2*@i!d!S-gt^F_{p&!4~)r^4=`+Za0Qr3+9Wnoe(CuxAE2 zo3yvuJBrI}Mo-9&Wln6nbE+*YW#Rn1XTRUG*_;t;(m8u`v7U~JzE?vwoTr3EV;`)c z)S_8&<49g+0Q|7koVg^>9GT0oFxIZcF*MiNz9U~%O)M!x`cdqD0b+aDMcD(hy zH|f1_=c&7V|Ft)Gus_fZ1Jye`!sS~JNX^0^$BZA(z$dQWyKJL;omjg9esql6j+bBg z7WUN+-}k)m^_K{fLx!IJ^l$wGe)RJn;cxxTe?)h7BnQj>er3LQ;17QHkNMEYpCp9H z_g;F5hn~JmSdR3)C&tK!KJo-F>|R!9;jU+y6UOEy$6oJAMG^Jigo#v|D#|^?$xz-%luofUib7__g?~K=ZPKNUg3(yaWBPW0?yB(CgjOE7C}y zYtG!d@fK2xbvnv3dG^t2o�^YR0tp7%fE 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

    PpUIa3`%w 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%0AGg{tiK2ZCGAv|gB|#7cVXZYMv$D`t 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≧~^W1rQ?-w3V&Y7-roITj^j`x0wA9>@e__6PQ zF~9U{?Wj8kEpGC%f%ujFypU&)((^8es5CywGeOCEQ~BtjY4A1beV z*|WImg->H|cL!?>kDfZqFaOrt`O;VJW~c9&YT!Fw{(N5f(&sc{u;H%z9_0W0@9*Ty z!NY8(#CN{xMcnj)XY!s8ev)r|@w4#W;jQJj-uga%=l!4J@BirQxazXwtXDmE-2EW` z{AYiYomE7n0}|fr`q(|T=BNMO5A$E&@^+s7q{s5KCtcqZmYzR&$Di@5Z+$nHUvdFE zUC+<_X;qSfaySV7s9yu3=apI5P|6YFU zPjBWqPr8AB{I}l3TYmq&{LzQr&4~*y((8HZ4FBM-{~*_2eHCy1nSaL=Mqc-_7x9{# zUV^oX%sq7SA%6ZX|C2`_d4z{gAMlTU_=kA%jo0#Xzy21!@Aa=|XVueno)3KDWBlj0 z{62eoYyQ*U{9D{`&DDqqKk`@Jz{8K8;eY>c|Am81;Z5KEtvvHdPee?`VEEGAU*czf z?e|y}i!s_{gphdn)G7YWPy7_l7JmHS{9CTNpW$c!@aK?W4`VHn#G79C{XF@)Cu?q;z#aGA#Sj0&KjJcX zgg3qR2YCIR{HHt*XB~g}<=@JyrdRThfAODi=FDj>zw9_a`fWeV zHJ4pOE{Rk!ANu5n`K3SkB`)bMqxucj@9>$&wSxAH^(*Z1)a_L+z{PVGO)n_m59Uiz$;QcGoufotFQ_+>;{n}=1&tqB|* z(LKV+{RjCwul=Vy|0&O30wo_l^}YPZ-~U-op1Kp)MIJhPJFj@^8~MR+`2o64P48a$ zoL6ynbFl0iL)hmNXTQvUeErYyoTokuBO0{)rMth(kN>ytW7X}^n;yxU%1u#9fEGB0 zI3&8AZZQXpQ^eG!U@nzz-I2mJJbSxgL5-DS3eLL4UD?mh?$r=-Y$K&kZ7jqPN})#) zrGgM^qML0`j41HXets#<&IAqN%--V~GHsmEfXon8JfdVDYEo(h-eD$~a>nP(L5%D< zPiRalDTP(nb9OV(^`0pPDry**n$oOR*zJ4HjzjbBQO_)CLY5F4-62*Ib(uz#qLB_F zIy$UXU`%9ND5=nU$Cxu~YZ+74OgkWzO7EJ@LMgbz9eB;T6*vj%1oWufTnWC`X<#FO zv1@7_sMSMNNxCr|(=;2?<)+xFgs8IP5=KndQL0kXOq-+42bYLuaO|xuLoiUHN*&z} zIc$J}@w?QjW1(6r(-anK>{$}3;{&TstEnsqz&L8*rp}3~%t#U3YRz=8kFi#Zy$})a zn5IP68#PX=(D!?k5^!#%>M*N^g+-`Rpmty#l24Q62$Zpn<~%VpKb~%Vh}~c2let|p zy$IGirh|P}yGIFOKx!f7Nat4#d70(ZI_A<5PQaLMoABN^I>Rt7pWSzzh7YDh5xxEy z=tPzx=WA(kjg=r;u*~Vkxj915YOGwFw?Z3L^?koBnra)J^&PXqR;}j~B|Ewf#-U(} zu(#tlyPwD&JO;5VN*b7gXT2lj1WxPDR`kd@?{w*^TG2Vn$qyGi7am*lt`FYAQ=fP> z-}I7a^R{Fn;T_|@Ne4_*u*Res?hfnVFgKxNr7eDvuy!D+obMoYAc6Zji{6){= zr+@PM_?e&mbv}37oupJac4UvoU;h|>^R4fu^PZQ#@ELs9U%rXwJo`p&zw1HX|KU$@ z`4w02+MAxu_kY_<_^-e7Zn_H-&aHKl4@DRJc$CwTog zzl0DHzx^lgcjVP{KDh>vp4@W?tkPF-hcBaIT#Ok z;^VI6`~K3mGR45VKJ-~`{qmi>@VQUmci;UE3WXF47aUph#K%2`cfS7l+5=8JcJk+b^;Tyn`p{P=gjna(@@$2)(YVcO^N6PNML&-+Gp*K2 z`L-8*CqMtazrw%xjekh-BY*4l|A?19XFR9J1K#lbALBVsdJgaS#5?%xmp%hs#}B>o2l?Or>QD3LpZn|FfA$Vua^rXN z_x{R{^O4Vgn2&z`!-N=k@iTAY={Gz>8*Q=NbNWmC(s%z7FMZ}s{Fk@?7aq9(UM{-e z2yb}#8~J;${#X3spZpuHxZrwBsZ=pcal^XXBQudhq~G09QA$y(kiNOi*II}%5(dpq z`WocCqJ-NJ)kn*At*~imjLb^43}}N`5qhhN!*y>pbIb~2AVrNVacpHkiQ0@$3x2gC zPl0OGzfDTjP;O(WF;kqwHKg8(rwox|)Tnogk)6KN_go>>f)&Glm>S5T)QXb88xU_8 z2AwPnO{Pw1Rx6?ijWnltBL&Z=nMh5BYBlyDC*?%sR2GvZ^+?%JaZok*vet;P>TV1|NkYiY+rwFv zn~Q;5G2$sEQ(^?CfqJDuRK^HH^9V84Q%X>H3ftVxfSgnZFmp)SfqGa9tRovuoYlnO zkjx{!8EYgsS7QDNQZjU2tN_0-;36ffOfJE6J5_@-c6P*ku+yrnASHxoeb4&OQxLj zxrI-A^t?BV=ZcG->M{==>~qJpYCLuMeU(+L9L3VN8MSh@whEM-OXC-z8$m|bTm9OC zXa2jjhNC+x-u8}<^312*z)$?}>$v3N3;4iCZsENj_$<3SYp#FnCA|KXFXRv2{vm$u zzrUB=&JqjUd*4a^;otc#{^}cE%$xtW-#O~Z?!|5ULuYcl4h&k{de)%`K|G`IDuRU+S`D0vg^a$Ve z>euq8ANUNP`rH?I<9EDc5LeaC0N@+D4Oa)ejE-!zkl!pdf!XtgP-^q@B8E@IJVpK-cNjt$6S6X zH$CTtyzK+; z;Hd{VwtJMl{wOmc8enhT^M%{*B<0LgZg@PO`O23#dSs6quX!A|-F+w5U3oP--BBJr zbCMgcdnv{UAG`JAyzynP=9y1=8vpHo{!f18-M_(=dnb5!^9T=}dVn{7-w*Sw$32bz z@xix26?Xa^{@dGrm0y3)ySV=N3BL61Kji+09^gm6^Nl>`#;5Z8ANgaR`Gn{4rMtew zFTLY8ceL>T(x@%vyDKhmCxON8&AFNZeH?i;Y)XaiT8c_!yG$e zc)^pN$BBzh@GpPmU-E%lKEm<6i@5*besWH{=7q23=1>1QCpV99wEu*U-{rK z@XSk}&&R*==iGVU9mJ?2lD@ZuDYLiknDQ=e zvp?XU{^pyx?vf{S`^ismc7Na}zV9cw|Izz_Oin_7G?Jsm>=yjlj!ihlFTU+R^4mB6 z2A3Y);iG5nFXVSV^+kT*Ro~B7AG()+_1pi1Q=9v6w&OjY`(yt1 zzy6DyxcCyRu^j0x=NV6UI**(>$-j8}zu>8RS8&Ifk8tM$U*Y%#mviCH2}%jnYLK?4 zqDaQFPL5a4rmsgIFnZN1177c~Nd#C=)Qn$1NM7@t{ zu5_ItB~6IWrG017J;_;ZI$du`L1TGJt(2tZoq`rHQ8JzH$f00+$HBqCj(6;IJ&~+R z(HIzWVXy00Ij`P1fGIj=8d6eD(j0X$0})n@d!2J=3DJxdbA_azNvx1-(nu1~>5UVI z-L>S9G1jz9tD+U@#{6&DgjElG>&PSbo3!@peBMeVsSDNYgP@} z5v-WTQ_+J<-B#5jSF6g7QYWUM$c<~&9u%zU$SKlwd#Yec5mt^G3s?~KM@NGMlgdDS z#}ERm&XZ$lB;^sQ^PIQCppa&!*HM>MJ`Pnd&Xe;*2m@Wevp~S6k$0iC!laTzpj)pr z;o5qrh8Q+WE>eht`t*oq>~x)P8+0XvNZ0vgBvor77rTtIa#hciY#m`3=~g|{6p);$ z)?#ZtWY;klE6Se|WSN!vs%oL7$n;h-tJq4f5tapgcn)2w&~=G%*kQFEDQ9+=(uR*d z=`6QiKdEa0z>@*?x#?p^dG-S<&Xf(N3sBdTGN=(>-^PDpG{n%Y&t=5VpWwVU>d0Qt zZMQ$nTYm3-{Ky+$%>xggOdD3I3rSkDlf0-jI$A!mKDtz-NZs)GA zKEO9T{R!;uy2W{uiiXg|c&KAj_f$nNJvpri`7}2?_6k@_k@Wrn@z$gCVOFZdu*Kp#(J!+{O zYz7`ad6MH7?jlqUhJlnb_doOqS6sZqMaOn|+Lad(V`6uwM{-pJ5}+#Cy|#7nu}|O1 z9rxYO4OgC6R=|fpc?-{Z`gd~Tf@5uFZurQjZsoe;$JpI-TzTnbJo)k0^3l)y1(#lQ z5tm2rJnp#nUOsy3 z=Xu%FzJbnJ?tAbdUhw26HWRVLm8oM;6%o*4yvkF~?7^?k#sb_z0&? zpXR!&uEQA1Uca*?{#W6`or~E&c$m+A@it!g?5FS}uYDc2e&sIie)L{G_?eH>JI|#T z97l@EuR+*d?ef{Le36G9eV8X)cLR^?pXR0~zl6T)dH*Lq#2a7t9b9+$W4QI6FL3RZ zkL8~G@8OeQ`U)?7)(bc|*yk(vf0=K7`U{~Nkn5>Mc;wVcZoKvy9(u=s^_hoHpW*|5 z@kyTfn8)FruzU4m_}J$^&3B#oR&KoZT28-r!{=}RJkNUKGx$5N{Q*9I+wI(Ua+eR> z@-bGu<>Dj9nHOBGqTM#yj9MdHbY#WDXHW8?XS|R*@4pl8dS3dJ7a;;qtWV@~cYK!b ze8qQg#qlfo+^0Uvy${{TQy%vu{{E}}319r`7kS|H{k;2=?_#gtdT@vbktpKC9@f~zmRj!TYQ%*Dqpq3?Pw+PfIzAEea6X58?_dv4{ampz}(uZZPI z++cvkMfMmU&LjXT*mLd`}es2%oljd ziJRzb$0zQ2C%1j|Hg3G;Mq*BE%1Qp>%YVTOpZXI1{kQ&qx%rFl!##4qC+>b5?#_$3 z;=(83tnTBgV$QYza zq^)b3`XtcuD!kuin$F@5Mc1pxj&A`Ikh9=Bh*Je;aK2M?NVQ+e^(fmMBG6znLt)hk zp(+}b(|~QLj2J@+8^o@+lGVEP*%?Qb3a)ym?@JsdZxFHMGGa|fEtBR7O==n2IW@3b zbvsn@R&7<9gl<-e)JmN;3K`}~qQl$D6bq~Wo3j6om+idkd-3;ER+*XIPScTe)VpM> zS#Gi|_ks=B#s&-qjIrqnfk1#oK(@r%2tjgubI1t(1Z%FUNP@4=jkdLe5nM=}~30RnUe4 zPY%x0w4#=B&ZBac!YV|RwRE$NdelJ4{uSrwNDLCg;9c>iu~OXF$}SBE7m4L$DRQd1 zk|4GuCRR#GfjsmL?WiYik4U}a_uqOFPIoZZj0cT%iupJa+Q6q@dIIxVc>dE3aoo`N zQ}MzukWvuK0$Y<4r07^A#(y=z@2g*@?4R(rpSzoHf5)r1`Hrt}{KS+~_O5VZyW`NQ z`|&aH?D1{Jt;9lPBsb~E(W9Jw=rm5-+pyDU$@p;8j7YOx{z7@@&s7qlaof}wtvR_h zWjq=IiNVj9j2Z^lLxz2OR+-H@kuPfr4pj;Et~We=^cYuPem)d zfJ~+v=3>C8#V8Y?HkC{QvLmE*QZmavDx|=^jlF~vIWap%RVik^Wz_WaVViDntd47v zwgb~qhr$S zV>+Le>x!H*I>>+e(_dsV8uO}aUd^jt_!>^0oO9cQH}T&-{m+;UCs}U}2!BS2+OcjG z$z&?kGTU-AV@-;Is;w~D;=r?xS_}*8rf?&(#sC2T07*naRAK0g zx)?c&Dl7Y3a-Li@m{CpiG6GRb(-_0d4NPoBE1ex#C0bhx2|0;WU5#og6swa7ZWu^P z6O}^el5YhhB1Rc(V;QP1fq5BY zNs*)QeZn*vm69qPova~aO-+dN!h#kvGx>cX70bgDSp-X_n1NZz*D)x)Q1WDi+fx-X zs<@h>!jjaR$|;bIDOnlMH4;=xVQr#w31xE0I7uS)i;|M8bxlm-e7uleFA#<$nJJ61 z!5XpcHo76Eju5?!LxRWHMkLo!lk<66EG*&WS7M!5o$$P7^C!|1a zEFn`^>w<#l+>z}%!OhEis#t`98oMB#iQkSKMkRIE4=5dh7ON7&d`{C&iaVwRob8z9 zNfsA?_npi*bJP8LRt)_BIa4(ax&*0(l(0%sw+nlJ3o4@G9Ph{Ff%oKG zW2{=rsh?xtA0*K>#za+D!p$k6m<#J}Ij9ug8^)dD&tLpB9EzCZhJE*}aLKe{|4eh= z0mqZ4_MAAs&jxwc&xG&&m2FFQZO1dY;C#azl|xev9^Jao>{l!X`+>qanNW+R;i$D5TX>E(R+g0 z0wnez=gjKLnC;n|rV>x?lm8IQ5n(EARb#jRqwUn_|{ z&{}ifLyz*YPk(8NDr6;NNwQ+IJI0y&_VE{={0u+)kG_ZNuD*=@d-pIn&#m{|#~FLp zne}r*2z>U&o4NPV!;DHOunUpZNz0KF$BUD&dd}O^T6hNXL*+{6|AjB}4X=D7FTVUr zF1_$9zI@Lu-1OALJoMOMF1zqj&OYrXR>o`G^}r(>SY5*f$Gq$Kz+eBFkoe0QRXS1W zh6fKn!M=L6L>pMLx9E);qcg6{Se=eYgV_Qe~&mZ`8uDk$-_26l| z{nhW}l5?KN5C5lsu^e4#1DbZ%jgh>sm?O>y4nKLAkAD86EKDbJ&O|(oX?gJRM>uoe zY20%EZ5%oFG#8(7Df{-VbK#j6^MmjBLH^)lEBy71f6bx2r!()I7)GkV``_}tyyW>W z9_tE+GtMt(QwoAH#ykQydn<^56rQW4zb-gd30d#IIycI%; z&CtXwrhqaA>u73QY)~}LC9=tk8gbqSsEncyk=6>*6LzVebR{`+A!nMpDI+rxourU< z)|oaC10hDn#tN^es>$9nbB?jCsEwryfo4>b0z{K=PWHJtcxi^CIISzC7`h(QRK%`C zLd7T?(tAx6xSfUSs>pbev{ixUWbCtJNiUJ^QK@3{k@3MniHk_PoKSb0 zyJ=&{i^O2HY@1O^sN_jSbQWjb#ipFuK`z8-DWi2&?52e{8e&gn8+;y!apC2Wi78`k zMKU#ngsQ+YAq;csW=tg0_ft$g7KFuGA=&0Y42ilRN8V?w4d|SS)I`J>Pb)*lq4gN& z2AZZ3=T5UgLo#(!<9#m%ey9RTMnXu~b|Qq}f(Q+LkF9Dz#$yr-A)Y$o;%t_OTFwEL zGlO$jZAiMjZzU*fgD7W$3z&MhX<2a=4pNXQ1u+a{ENvUhM1-}Hq&guM}(z`6IXaO~lh59-AHe8(SMx6O}# zeg(Bh@`|7%=NcHO>J@^YmeEyS640e+wqI3@Ikc&lJfEfIe>oWI%5eWzp60D@)Le1t zIehSe8?e*YAO6{=*|)L6;5?J@m^Z)rDsKAn1Ke@nV|>Ru8_qlPH12=!2+h30 z1yLMca?#lwe(V{Jo}BM&3K`;16p6b`JJn)iO=joDn*g~&D+o*HavA?#bnYSgkeE(; zY_0JrbN*Rpu(dtona$(uU0Y@MYt&45X7f1Pvl&{$Uw!^&4opTuTnq!xyXbW0eWIIs z)>kInbl2S+IeMJuUwRIwpK>a9-un=DKKKv^HuiA)1NV~oI{Lx!r=R{DXRd7!Vxseb zuYctW`O^LO$e#37ubeZsI3%NhB+&U{tZ0p*j~&E{^UgYp!F7D;-dnlh9@y%8{`VjH z5w5-JO3pgvATA78ttbK?nx^5gqfc?<*t5Lig;%pOnQ-H+ck}8qFW~ljZ|CJNxSF@T z;yRu>`Xo;tdy}ryt?WQx5TWxBeZ$W!h#19|oG$%%!J4pGTj5jLKHL;YF|I z^LKonzy9*a2+TONaX$aTfrsF`nD>^2N@u$&_!SCo$D_!yMk^AMnp7(riee4TNUC&AX3@N#WmVouq2fIs-y@AKmy{KvfJ%vW&#(~ol9^Iy6Axwk)l zGqY~W3of~eqn|v+8U6%AN?4OQb?@o2Pb$Oq{3Opi_gYSFPxbCuI>ByukMd| z+biGB{>9MlriE9 z=5{>mWX}-J(Xen!kAjSLIWsPWR#qij${2=WD8%bbHknFWYG7V`dt7p;pa?38vaG2{ zsW`CLg485M$=nK(VMSOfeMxdBRBch6C)4_9ZOThz+zd6`4ZF z4RJ{zUXW;2&iE`0ZV8kUB@t2bP*j#NlQgnI@?A*GwJ}sxz5LKraX3~=#wRH&nYE@s z&d|0}J!UOg!6-!<0&$pQn+d+SF`IfU@7G#}5b!Y&qe$etL5i!GJXU1}7tl%y4pkls ztH8N#i9{_B4r808VP9HwK1%o=DTo8IF$UkwB{3W^2Mo?Jxa|Ughq8&Nf=)^F!Z1iE zYEmWAAtiah7ewxy@xwqp79SI0q#4(u5GZ$0DPJ;fGAIjaiqbOP=%@2tg=(1(2a$@` zO@kX;apWvXw7SGLXhj+no8t&U!7;yAV{7YhBAL1NNF)%Ye*%0HKv76kwlP0?^$1MxbfCUdGzt4 zy!I7Wan3oX;v?v4%=^FX)l|mt7a#i~>y71shn}V%9It!T)z}ro5DjmA6x7=_Z^653ui4aJ;GmET(^Ii$al zwYuQn4K8r%DSP?x_q?5x&J(ld>@!Z~b=SRs8*aUqle5__BD}m(3Us~WLm&M+EmA(DcpvT)O__wv%KujZ`NPvdVtcN42CV;ZA* z;L#_!^`3iq!*ws?wO3!mWN%Hg((s+%@FsrX-S6Uu-~LYSKXH8L{VlFTLG;C-Qpv$$ ztl{LzDKRE4J^y^>15EplAA8St^0wE$2HmzC*x2CWv(9EbYS^02nY%fat?*q~erv5Y z%E7Jo-o~ZpUBuS*Hn%xz-b3gr5ZJ? zwqvgU;%C{rv5#-L?tQFnjG2sE>J`fmf5VUPli&FhTyf#^c-0GE#{1v)e%|`>Z{nDF zn*HtBoO|kNv~|nod=nMG2WblTtV}qzeS+iL$Jw`b3NJY8GWKrlL9JB0>y_Wm#_FEZ zSs!1HOj6QxeT~+Z(O4wdN+~Ma@R>XQoO>R*m#=%t*K@)CD>*vtINm+Q+g|=nR7HfM zQDSb124}Ew9q$LWW?O8mZg9mp7h&@ncJGAq51n5gP{pSo`8?O(_DRk=<9vSNmA}A= z@CbLEe3~=L=4|l7IPK|C%3o%MWtWD)#T&%c%!1<&6DjarETV%w`=R zrn7Y`-e`f0$&%BQd_w6g1Y!oXE-Ky(buEF`(tK%h)}&P7!%S3KL6g#yQ9B|8RUF=7 zcXplB?PVmVGIg~}eXC23lvd=V%6>0~fm(sK2IoDK@d&?Aq82nixkaMrlG$qRz=RrUL0H#Wx}5ieyH`D&C=UMbnIzj+ju? zNoGM_%|$9+_&y#3TC zFbt%Wv6X?i2pk+skr+GBD`c~V&5n>Qwp}GGoN5Co<(9rk5)Y9f%glT+=Bla+H#k;w z%|m;g5D8{*;AF&|o`^$*RRbwox@@VN5ip0Kg$olr+SJn7U`uY6EHqIU0qrn8>G2b40RG$2rE#V`K)pYS8^e=9%pPrivGN1kP}I$~|I!UzB2 zQ+)C>_jB>Nd-&VW-@|1WpT$dFa54Yxr@oDppz9qs-FhFVpSqXeGpC)tm-Eg#gSxh? zOd4vd`O}Ynmi^!L7JmLG-p!Gt&xqpb)Pwx>^*8eDu}zH5eDJS6$9ul{wfxG@y`RHR z9AR}bV$b>-e|`OpeCi8#bLhYXAELPX`b6EX5JD!!%xpHthlsXT%sO*ma9+4g+K_yQ zYA3|Okp>C39gkXWy8T`*zTh1G_aFOih9Pj)83(!b?yvCSkBaObqu8F!mm@-@6bJUK z@;iV2x14#}0p9Z3m+|7OE+ePR%1T4@@ZUc0XDBUc#rsy*`0OoT=DKUIU~_xM=WoB6 zvrjt}l;Y6d4SwYhKgiE~-~0Hn_k1fyo;gNcTMq2q!yWfOz=uBZajw{ZD!m&d)*&u zht8ofBmVF&KFYM8(dvd~t!6mcQB4|h%&e}Dx#PZvc5|DJ2Fd@*l&#T&Wy%9rr7zy5Ey^Woe0 zz{fwpJ74<_UVime%!W;xx@CQ3jgNf#FSzA_TRC>uGhBA=rM&LNuj7InrOVKKeNK zK72oW)>q1wl^CW_wTT?ysqMr3$*2C9w_f)Se(&^;ur-~sy0XI4$BuGx`y`#8^YYVP zz>ojI_psJ{gm=F79lYYo>j=@aI$7b%_uj%amtD=YpK|xppWs8Eei2{)l5gZMfA}wX z>gY3^dD@w@jp4Wd>c24$Cs?)XlCVDXC@b`Y-X$t)3r|lGdxxonpz1pj>$q|r$)w$r zqBzTs+6gHqnhHWN^j#<1O9pfvlT=^m9%2e=j3NX6B zh2a@8+G>n4C`yp0Pnb&1*O+$b4=U#p(rQnG%W1;7b>R^5=}GOWxTg=vDAbh$d=X-azl(AIUA~4lcFNW0kEiIMkJ#T z2~L#vo+Kgzjmk1pj3xF$#wP(qgVHk2NJaa%h<#XwbCycoTImFg)np7g4w!002#(6u z48xqd9xvg{;2gHDm-6)x19jDidutksNnu=$z+y}&676I{H=Uz2RMiOQ9Os|6f$MuP z>yUk!EeCRmsfa;itRn`2Vu?MbS%cIA717O5%}8d}*`W0RwB>ziM#tepFFnbTtETW^ z#XtV!2K~AfFY_$v%PT$Hd``z_Uw#}i{OIqULAO^@Z^iaNX4sO46y=`Ah1XMEMpaS> zX(J=mlpMyiIM?HX;zd`U%kh&_9yxrBrrzOHoSgRT-@C^1FFA_~&OOLePjB+TLr-wu zSDs?e`WUSh-bFTN9oN0&Qub`DvN@e{&jXLLvAW8>ja6>E{az;HhN~_+A0Gl=y7d9} zZcKRU=qBf#b$|=bJ(Dv}+t0jnJoxC7+;QKdw6$SnVtMlE8K)gw=e#pd}&He9j9ly^sseItyzpC%b33_rAxu=g|i_>%c+L1Srea z))rSk?-HDk-2LD~Od1Q?LQHJU=WML4aM8KvaN+r6A+^IFE5N;l{h}V6AO=;>2;DclLQ)aPAp|l=;FfH*#WY;Dwi6 z!etkn&$ylNoPra_*rs zIp@$h+mW zZ~7#cpZ7dgS0;S!j?b}ov{w-MM)*40Cq47(DPDTP>$u{=E1A#d-2Lz!+jpSt*GLp*_16qrTX;WLtSF0>>h?pvqvE(R?mMs}w z3P~?Z-k`O^REA*)RCP=A9<6LikcU2bMrJ~Y15rgxHfWtuh|;K52A`rNlVb=ef`(d& zTe7&iC@O;>(g^=1crPNH#gwJMGuBw<{gk68pQ5&nsA!|YTE$TKHM+!y)JhR3T+0}! zj3u(;dTx!yDn;j=WWE{UDFq+Ul}O2B6iIuGLPuG~Xe{AW@Y|kdwI%cp(^%Zh(@YF8 ziwBP>e>qaPiV86#4v`R`X$-pMh-}~`?e&ThRYzQ7xjY=^fL1e;H&Qd@``L(ij zDJ*slvo^~^IHD*UrTy9j}9d0O9Yh6{lg1*u&?nW`b%ZU)B2r~xUkWoe)heOmt%3fe$ zS%}f&#xnFC(~L2BUT6)a#pmXbyVDBh$AX`l5H^AlXJBsjhd2+^0fhi3j$j} ztD0PtZgo4scT*NK1lx>=!+@?APSQJx-phIQF_q`D%PQY66Kyt3fHZA9# zxfeG$$Pu&{6QV4HIoV8v@|878E&L+15Yv^k6e)Yi23zUELo(F$fbR_|874E!pIm#K zr>>Sl=Z8MFhi+6c8V8~`*ecR=hMUgm`Rpr>L(crz@10A(+Jja^lUXFIFN#=WMtC=u zd2!l#k0{E2Cu}tqw{5e6b5o{sPgAvwC$&JUL0p~P;D|{{BDE2|SBjDK)wU##FG%!> z6Pw%ARZU2lacxM-GxUc2r&zp8Y;`>mPj|pZdbB{N^8jggt8$@Sqx~Q^jah6JthOIJq@rQZ=+|4Pgl4fsqm^ z!PcykT|o&4!dlJR>ME}9F_lnEcaMf6t;{)q02( z8*8m(`^4q+Z^>ix)1G8C+uJk7bzr3#F=|$s7gyWSsG*+^qDYOA?d~M5a4l8Jtc+HfyAG=>Rz_>&xXHHbSgj5) zS&7WOa78v}+cZ|8)hgC##;s#>n9+4ptTyz~vf518>b4lKSSDrvDwiGw8s$FbRQs&OE6mhlL*ZrK{1<+g-$W9m-9(#6LK+sHCkho`0)54mJyLz zo-N84G5$-D%2f1z&NI(G2FYSZ6*!??EYObBPLU7=S%^N!SRq7A(~y!7-ArBpV>>U&yYMnEGz+Wn1oV=T zWm|?mQ&kIvNQE(xtOPA`-4s*pn9407HKnL*wRC9=DG-wfV@M%l%t*Xy$V)c=!7>BK&iw0FcA0t`&W+Xj`euD{JY8k~p3`nF^x~&UHl!E)R-Uif)j+4e#azEq*(* zVGFApat`$UCT(qLtS2&pG$*PNsE8_Z{1_d^)C3oV$YrWhd<+=VK#8$eh*yH^=CqSN zQsmj1p`TLMW8uHdH?i#sIj7wNlcF zkjfZKiPT@I46&D`t5+a96sGWCA}q-3q~%PyZ3l*~qV|TT*9J~bJYAa?KnzdrOQgvh zr7STB*J#otPS&wlI4KUV&I#khTBm3`&|^tuuj?8&bfh>#X>qKUg_Nl35zcjGpQ*@s zD9_CtYb<-##mrGBh`Gbs34K3fG+w3ePOxv!8gA&R8;epk!B4TKCdNUE<>cA7u_~Xb zuF!TMgqD@Hi0f+Vkz=o&JZHTq4HXl{>yDH_#fU14BPXaw;5tQHTiS#BkP99sw27vZ33-rsm7vHk5NX7DnsxQk}c`kFm4<6 ztWL;DU}RM(LKmqg8t-7w`h-}bf>joUhE^J5V9%QTyR17@Y(atR=R3u?QeX_Lld)`` zeUEKhqI0OSF59M|Z5r7W>k5q_>KQtX302369kV)~h}y7ii_3Y7Z8B{wjfc_-A0sQP zV|3PFq^MICCV7wSLF*Yj*hwS|VlI{$P{xvjN81`@1fe!4Hdb44c2AxZJG3#hO`>gA zD0d2c9s*1r41PtSmXXG|WSq`s| z8rDbaSUZriA`Kd)EoYpvhm)Jq$gZv`+#FWSUd*Vbo-|CR6*(u)IMfhNLe7@ShUVBa z11lR9ZXOt|)b!KLY5Nb-&jQVwsK|`c38iqM@EU{BG`1!UvWIG=m^w#YDdx_x-Zac(Ea#t)kbR0W zl4{C$PD|FJsT<+gWF*%zWKhDV%Q=gzd@NUW*I2H{F*$)p0kBq)O> zL`ipEFskLx1(lF$FOi}lMUSyaT50Yvwn1Af;h|}V&#^EPtVb;|3@B5V=w(4Fl8|^X zRkeHwo^zn6om{O2X=zdLD3wUb({&<09|l7vF!UO$6Q4Q>6gvZ9ip%~coE&WuAxGLth4%w@-Tx?0A3aH38&Z&7 zl8~vjAuEV3ksUB9v)Y`Y5@WjPJG7Sg5mRTPZ^VPk1XMP}VE|*6?66pTvqXOCz<^de z2rle&o{%wVg;;fDuf;?x7e63M{$AHn*ENF|RL2^F0Zi56x(;Kd``1cTDMo{76K*D^ zqe}O(k644LDxwyTAX7%pb<>cecnfJ|QA!h-W7UL+jHu-x+wsX->^a6L{7lKH!qlRz zP>z(^@^6M+`(q6_Dg2Zud9(%^2y>`Ll3X2~$ArB^Geg@_JXnj0idZD=BzdN#`&QJ* zwJu1Z3iO@WS=1(CXh_ovZDg+|L7x@MIGAc|t;jCZ zuGCCV4%Fj}cOpBlnnV~PrdGth5{{rMD%@yMA)|D{Ap29y8Dl*;*5bCTE%n3`LZmh8 zWFoFh*t#MP2A6uGmvPj1wV@k^k_KR?S_L8DxMgry`{4h z53=zp6j}}nETMNa4Me5EYJ&43;|*eCP0|9N6~YusD(t3`gF`7z7!p=XaTkK8ZO7=G zKsDqjq*&qC7(y7RjUkbX7mY7P;sX3Mf_6ktDhNaf5$6Z-BGRUe?08O*vp}&V>7l}y z#ptT2zKm4dQ9(=!LXWL$VOsAl9+fYI^ekcPOLEGtcv;NjH<3nF(e*MF$R>fq@>E>Dw0n@#H1^% znoNu}t_u=gs{`bc+Y%sYSr5s{wWguNXyFN^D2OS@2+{im@*y943b`m$cE-fcd8*3O z&mEcwIue2+c_mqFDU}AK!&G+1K(VX?t;e7e~t2G9sC_|1cqfdMY;^S0o5|YYzH;DWApfICE^ahmhwBpoIH3n5#Y*V3X3rUlR zsLE2+7F`Qz()F%b?k5rhQ4bhKVyBT8DCR$S^+gtKN|Dn66-v2X#f>~uUoH4hO744d z8k#wA&?qYgZW-Z-kTT>V7BPTIXg@~R0i%n-Dv7|3nV>@B=#fuTyqB`d;KyjC=<_xT zFpQ~W9%2e4Z%M{M7Ez5+ z@?1Lx3>AtBYa>Iah+Ye~#yAKg6p7i~L$2_>!8U?qXEMfW{LqOtMRDQH*^`Y%R~e-p zIT!AxQux%#{^Obw4WVS;(Sx`Jr>5L1h|Ez!1i+DKbfQw3T5A#sWyBddB}JtbK1m}4 znII~1u~{jU1q+0fFb1rtao+7HZwrXAu!=#+d1%^3L^idCl<`s~Kr+|@LKw5~(+k8h z^Nmr|TD6hF$|{S&EO|iM>SZ&JLj3WRJnta}w9)uJk@Sw(!PKUxkEJjv67QIA(qDbjZ{nsH0a zhT4kf;(XXCpt8|m@$|=l9y$s(8!`V=hlidw#HoWaOA!V6jg+C55w&j!-12q z?!3FA3O%8^{He`)fft)n;L{xkWb2?ia{2+(n@KrN;l$af&zPeb*%fmV89+f5} zEl7)28tS_61}!QCfya&9#|$Lz1XKj|M_FW)#;+ zDq_&|zAu?*3*Mi64{2(1L2sq0?3_cPnDq{&JV}pHq*63Xu3%M-#LFpVv>rj+M5UIj z6GM{mP0b3)OQWTg41cU{nZ=$xUBkAHSY;SOWW#7qx`fdR6^)Qs<3MA^WE03qnh~-g zrbM;k2~$f_8C{D&LmNkMFwAOl8nLn`Fx!T;al^Em(M~MgX27adnsG;Pk?hy0*QO*7 zU1!lMQ&~j}8im-ItgKc{w=~9XW3ytG|*#c%cqnuOo+^Ai<`L%!ijAw z!;p%Hje?kE-%|==%vdERyvs8q3lmhUg!fQYnYyltKFE2Btjpkv`Dv=ewnfRLBs(d9 z$6B10D=gY*OiFYyNE$ks+E`rhB&EqdFeq7{S!beOWPB+REom#Xh*IqAtc^v=yYR)R zAcjbE5nIUK;`vihqAsFLvChzn&?TC&S#mQ&h}5k`>!r?E?1dJD)ffe>(Pi;#tBKAF zYJn!inJiG<%Hhp(!^#$ZHaRa+tTS@>IdYO8oO491Zsf)aNy-wPD50#iq?qtNkaCbp zjh#+hKEo15N+cym%7Ns2QWj{{)MI&UlK9FD&M)1QU0IkSHCCu%s?>FXssdvg6ow&W zs!9{HCG=C_cQh-7GgFX}T#TGjz*@u52cnUr?b<>NnS_x0d`h^eFr|cqh*2_vtEvWT zTC%RoB2cn%=S8MeF0$(K{>yuF!;IvmtF={wA7fQJ2n`U1-ySyaqc34+xUr zhHaEK#e7N&mmw)q8j7cn93~5dFb0oO88>t&YK$2ZqZ~TMWQ-Xx40Dtc-da^Ps46n_ zNfL{#!uJZLXP8k>92$mMSo%IujJ{AJbzj!8N1bI#^C3H;08#VsxkPvz~k9xl1sEzMe3kx4Jm@_ z6J@%I>&5Zf6o*xnlz7)zLskQ*0n!9a4Y?A8awvza%A_Eht1d`DN;{v?(iCEGa4vtp z{BO=s%`tfeR4=GYN`)(vcK8Oxu~uv0>ZMc=lMI-IHW}B~vfV|6sS=n0Q;-|ew76-Y zvYO-qY4DhFQ<{pJQdVy6$P32_b^DfiRRJK#96aVFit1jw*AKq!N7@LAeyMTGLd9K1Nhj z7})|@c%6bMrGspM&wccasGJ%rg~@*CYEgitZa`Thb5kohT#Ysu16_;^ zK)c}L8fl~|rSL8=8VSidCMiJh;g zAD;yKHv;paM@C?h;braaH1yrP2%+PcGQG;|G}~VT&?^Ht`Kn6slbnpQRM;tulK-lI z2Yu^FwWV(%Or}KZm}-M-13^c+abl<(X{6Xvi6JMJ9G>0RQbwGjOxp1#T73S``LW6@ zFUgpOoD$kJ!U0=IEsHxfDiWiZE-t$M7zPvuZ8KF>ld=*NC)H##12j4GXePL6B5P0G z8nUt^KZx=VMe;(z6DRA%&6S^#b3_$0L&<6q)nD?C90&2uL}A(*KY;5s^+gxld1W@MK4&^B7uVN5KPP{}80c7}z+E8^1K7<83LeO=(^2)Sp` z_@t~M$zg438Pm#J+;J>L2}!v8D7;Ul-ccmo3oi@}X;elu8e3J%y<&kBq*zQXwI&5G zMv0}E%39WbMoT11XoO>!223S|nauv>QOyV$SZO7yvZf+Ofx|y|{KW=tkCVugihLO!ERMhrT|pGwSOt*wLuQVy%CisY<_ zsi!tl%I2(yvB&$Gl!k(oiV>XAna^T`bX*89IG-Jzr8jD#b zxNU#g6RT!8vlaLI+W@2OCL@0tPZQno&7V8gd?FUS4K-9 zO|T%}GR~^?LTYa?jb-p&;uu_7BEJjtNI;xjO-`15WVhPbHWkSyiJ^$Q8zIDaP$$$P z-)%AOR*KLIJthtb+ZvQHc$Z*t0x7aMBR8$U>ZTU>izJnLR)myDDVA&rL&{QR$_0*C z5DIeXtjcxaoLf2`%TG*b6LEtohle5ifUZZRVIZT69C=3}mGi>*PDsAdrKO@qS2dUl zMI^c@RyPFSBMIz6uC_`;8G|jN;unPHluJZKltpZGTU28jbf)X%&qUcH(3`S`m{&+t zC^Y06%@nAldlJ-7P#R-s>XvMU=TI39sQ2+ARNIchQj`$+##*g?B4tKLsrwIYS>AjqBoM zkcipRw$C9A5tA&i!SzeSNn;nNm)gbGSzKyHn^x`%N|ag|LKt=xM7bP{U`(X0TS5@; zofy*6mOQykLfnD}?@{z<#%R@1wGG*J=t}Zml+hTa&{d0VD%{Xvn}!^NthaL0b1`_- z%A)I5oSwTGBv}Wh8cB3Yh8P1HgB?NLjtRXh%|)VWH?zP-Z|6t3(yh zbqywo>%0-9SShfnrSscpRU>R8N6#FC!7&g^K^K4qO=OOY)XJ#X)a0a4Mw6(Cp~HKN z1b1dSmr7pZqH$ZawV<=c*s3(237-r`!#r&h@DGY{Lno>o>pnDivDr=bg4sB{`8iKPJt)%dx$0~yx z6q-y{3CjenBPOnq&46J{3}DrmVQ#2bGC7ta(I|}ZI9H?7Dkx7TU|1uQPWP&(}MQHViSKN?}))A*KK)e(*AB$*M3O@-8%{V7JR=HDW4* zwg%l8QC1Z|A|^q!ge$B_LnLJ(twgD&rEp4l>8h-?tTq)$$tX)0=BTV8MWXMCzBtV; z@G&Ft>Cs6vfoSDLQ6(=~?2=C<6=2gerAR3qOdiUIFtAV(DWi$Q3{y#`Fw6!~xs=0d z!P!YUWX2QNvD_6@`f#47p*NM!z{2`?B)IF zKkkJG;!_b#3 zo`j(XT9Rr}(MjQ^YTPixR;}Ye#t36MVl!-;^%*Cq+!vqOAp`3Bw>oTj@%& zDfdk!QZnpWIY9`TVUW3bjGmNs3>t%%1rl?jZAapjqB1dQT9ZqFY1xUFyq(=cS0m)* zI0Lnld9$;u444+;iBe=Fs!@Y6Jt=#tS}_bgnT&IWw(XuXmV%5zJY1SaWW4gs$ihi6 zN+*^nfwW4TT|-9*8Rr~6!Qi7fl`a|wt;^U7V9YS|Xk|!of%s%{GF0P44lOw)RwgTC z)zHm)Y*pbs=rlqZgX??3;ABwI&2fFC8IKA5fGPp8qI4KYUIG)t&=ZCZ*Y&h3Yl0f7 z1Thd2)Qz}(8#BfCS;kXZc084gm^IpJx#4~FOP+s6$_YOtlFj6Da4+WGlnpdx=(Zd| zCFWa#e3-^S$kN<(XbXj z6F!bo3at!oyJw-I(qm0P?L!Lp;|10otsXRMb8*Uz6R-ndP{tG07O^>r3N^;mDAm%bXK+5^ z2Zzdvj&0i9qN$~*Gc($H1(Ov6GbXIlu!0skCyt($36O9=Vv$p|K;LCg@otWak-8De zK#VYw5Gx(CuV?2_JHS%=AW~scYarq2+mWtBbq|gudStO3ZJSrCH+9crE?NbyKEf{ z4n1m6D69osBt)onh0l(e_qY_PjHT7PCID(z6C07V@lr6EMzSHTu}d^IxDq8*#-b@K zVl)JKNL~suwd7l7>WP@)>bi`nY(bbK)Qup4i-Sqf{YZ=`opVw;EjAJ@@N9`?FV`Rh zUZv1U5uCL0)*7&e91;|BB3)S6i!7`K8W9(!8w|uKn~$w5ZpbC$Ngk%G6{c#iO+_3$ zDF-1amW^3!Nt#}EOl6*879$g_i8(uXCkLaK#hR3;qpTi?S`mX0eS;5-T1)U0>3S$G$RbnEXi_K}ch&{P zutXv%29jFHzau$E+E$XfGofT-HRXZP#2}*;V=S3Sa*mY5Cnp;NF*0~xAjc>Kag%s< z^B_$#P}idPk|4}o^V;R;Qp}>VmN3o6L=vKu**OuPJ04mt!^MHHT$bs%zm5^K7!@kz z89EI)lbnp;QiP#5G_58lQQIxP;bNwnQYa+rjCY|(NmEJ8jpQ8ACXDQiqU z68@R*NsP!u;i72?g4J5fAyBtq4BjV_wNe~gd5^|wywfB-ME}Z!zQrTUnlU-g3Bik* zno@*8loOE1$w10WYXizCE(1Dc3jK_xQ39Q-Kw6k9l`uncCK-=1;^?{)_L9(6j6@6h zZ`m2jI2mFm4(x7Pl|lw`a#W*C&W?;A#uRT4ZFTu-i$%R==z2nMgkbPpf?9$@o$3UN z-*uy-LZ+)>@$5^(Cfa;)2CrKomnXHb>F9`QLB^Co$P^T)sr;Ni%0Zw#J_pp$maNu5 zRY~}=Pg|%wK?O^UBG%a6JV`rhc-iGIp=u1B>lw2~Qi(;AmB%0@6aQBTb7c3agwmIR%y>k6HY{B=Tm4C>CWrENFj0U9%z^32R1) zQnimBt5!(3(imoRRwP{M;K8&D>kLJ|nMeg)Td0m=6kbS3o}4l+IvIaip)f2O9IG@z z_n3vKBFi{WP!vUsviA;M!YC;Ow9b$!lu3Bkl2j(8f{a@kWhn(-CPu_T_68|+)(Ffn zv;;b0GE^!FpC}1}oyoLD;Zw$^gh{)Q)(mzRwSeWq?Z7uI1$Aqqp z&{dXGS+(ThXCnxYsTOMCqLy`HHf-wh`-7Zo3trFSji>VeDhhEs`9#$iDr011rIaq7 zFS7B4!7YmmQ%Ogd%6NgY`71J6TgaM}16WW5VVkQ3e4dx1gvHyE14LwJB58Awi$Vkh zW=~!aBa<+?l1|MHXk&~vN+lXY*Ayy zGR_LY6H`&EsDvA!s*DiHD#dK>scVg`HAAncj3~uYA(UwoaovD52CEHW5Ok`pHMN1h zkCfU2G#C7_x6nU^I*CnI4ujajd?Mp2```ypM&ay1y ztvDk`PdmwkLD8%j+}vTTrfCx0yf1FYJH<%O!Xr|8QB*68$;6Pb#at_q3g4+-J_qx` z^VT=LnD>9jTe$R+v$_0v=Rap=z4+d8&t(n7kceT6(pH1%34<)$$`073rm6;F)S#=f zAVV1~Mq+fJG)50pl|k!*l*UMoj;5V3%==>62rd-&@C8xaWi*Kx8f@jT0?A^l$lz)+ z4y_}pd@i7N4v^h<{Htg9T5NK4h$Zt1$b$6VyinMFXN(iOwhV_I=UU!p%E;GZcY%?Sgsv1Ok1$F`C%P(xqMUHO7b$r)5C?}D4d^gpbJ*lfFL@L1 zdFyxaqRU>)R<}*k6f@XNrCMxmNF*v+oazWf3>8D3VND|iYl4P}$k4M0M`RySMf3nw zT`!+GS$Bm8nHGE5qJd7uNHm&5?sftLHraKjKIuO-Bat2gFrJ9s9K6O&?#afEeFi7-FlqXwP zV&ikL7=R+#}M z21YofNf-Radno|Cm*!s!f@N!qD5pBCt4%jFHiM(-^52TwM4Ai7rwex`@>c(HJQ($b>Lpv4y*#mh)@dHiW*YqnZZa z_t<)Z!Xt9Yox^BxGeZzLTV1PiI95vyzkE~!5sN~TRlt}AH}sgQK~<7)Zkt-NRtgeh zjKMpkaXp&_0m76vKHq$?4kqA zfw~?u4BLB)s|aBVR^c3s$18N*v=Ejfs7xItShi_uL4A~xkU*n3eB>nm^S}HQ zv)P>Q{%60;g@^Xyx*4jf@k38Nny|g;&_+}fsk6Y80VQZ$lAu3RMlgy@UZAUm{GXAo zTsUjuL$$Fw!I}zFX;hA&4X*Q$HOdAac;pFgy6Zu1xaB_DswH?uGFzYwCbxuc47MY7 zigu+29|et@C#sPmmr*A^P#Hr~0{{2(Ox1ufntqXcrij7678x& zd4Z{izAr{&k(gK>Y75apSU7+u3u+r!mqI?x#PqC(n0prLQ6bl6>Z+1r$4eS>v;(!R z*t@pQ#IE9soxWZXPb1szAk860f$k?7=RJyn91~T&f$IV;&Z(OfGCf*F>Q=^|F>j+P zamHR`^5GL9CYo_Y9E1wseZsUb-RfvoMHQ5Z#GxYSDb08dH%zJQob|~%e|PhzSl!s* zz6TzrwwB-rf|uqs=0xrTaTHP7GERHQDbwpYN-G9GC+37kv#E|z=?a$ytf?S5jIG6@ zqHxBt20skcOsOCXm!r z#yn*9*A>SGN2M)8>}gC(GJ-sGv14K<MM@5%MkwvcC{i9! z!HC0enqp{50jD80BsCW_-D#|r0<~#6LNFv(p>$mKt4bxDD>RKI_Oin#(@?lZft($U z8PUZlIn`y-A_Q!$z-5K__J}GL$`-pIP}emYL0fIp5(mF53S1DB&FBR(zH>e=ugOSY zvNEEy9M?5-=g12m9E7XYE;u>MNF>NAqp8Z$SBKN zOO7Rgxl+Vll&7h1BT+k|q^}vt7k*AGd(Sdr!loW+?>elm$y#K)N|M7w zl08UwYON&)sqBcu@6waZ@(T21zj`1xP)r8VmHOO$iqjsB@W^zNjR#2CUrp*kg5DAXrb| zi2^GoL3M^fQ4uj#NY&AKL5;$UsDr50tY&b<#Ed{?luUX}G5igY)>=~5Sk()A-!vE? zxRYo-A}K4f^VDH$!!UHDQ>o-#aLe+s#{C~MtgRhId3hJ-5qF`bOQjLbTl#!~4- zA~UIaYAYROvDzc}j$Eyjkw7f>XGiU_o9LRdV#Opv%&0hh&NxfRZ0yv)8M4lF9)_S8 zydoLR_IAW)LCaF5+1`q{py<6O);(ciGM3Bt(^=BD^#ZjEOAjYy#Y3iPN5n7?W3fNi z6)9!zx&JZFK7B6-_pK75XYiT9Cwz+R*|W;oXC7qMIpOnoMcu%@y{jnOl2A;i0kTHd zQ;aqodp3~tjC#DvWV}X9niHFw^nIjiMx3(m04Y~Y=Z>6XF_kpvTFA)3d0bXv_@xcU zvLz&qj|o3`d{)f1PB31baO%OmC>`hr&pc$Bre=M0A8k9P8zO%23^PrNiNQs&X-JB- zl?`lLGx$V5xTS4FOqrB3(IujG49??YCTYcLy~a(q-^UOB+uz}V#~xx-*JK^>u3|p# zNEl8#eLrr{3^6ctj;b|87f?1apE;DOSsks=xkxt*3_dZ;Wh`Y%XQwpua}OEZU>T;> zl0SzZ<6|J#4gIVmrbO=sdM{+}eS0@>F*100Pm3m|^MT%bDP|avQeX&kh7fTv;*-P2 zOz)k9l#Uus*?*9E-w9k;iS-43hd7zZs9G~wS!L3$F`ql;Lr>0$5Cb6xy1r*V%(0ba zGCl};Lf0R~>lvo4nT$u6s$$l6^nRf0dR&ZjZeU0Q%}5HZNMg{Ac`x~HAx3Pg>HC3T zBcU$@a-Eo}+zcznTF|nM%3U*%m>Hn!F58; z%-xik+agvTMP%>;^Vn0hHS6nZOx=vxFk=>GbZ#!-W{xtNND)$?D$?>0=4c~4A#HL& zdbGsqEY&`Gxok|9CJ>ZGZM8CWJ;I+o7f3M z90)03v|V049ensgeX$^Ax0*xj9Xh{skEjwhJIP($Y&{8Tmx;}F3H4I zQ;|}_4}q$!==)w!z+FF9DJ4ETsT3{-7BNsusrZlzqNz*asCLmS1dxld^pRy+EIhkR zT^bOZ$_-o`kP1;)X>AB4L&}<((<8;PD`tQ*m`Aro;!hbbx8G0Sy|gt2gfmeuLP3#MdQ$u5bkNa?0i1X~;M zV)nLBEiL_da>g1lc2Y_gdv{C5V~j3bmW1~eZ7U0Xa4@MP+_JJQIVRE|5T?$Crm_St zv*)aGG46|KZHody9hDMP?Lu?`5Q@4bPs~;*GDln%BST8V>H?!|SiRnrp9l9`}6ZFu(cxf5ZRz z^WVmex7^F>%7kmLxr}FypX49?^WWsGL;LxGcfXGF&pCwBaAI@Lmu|kBKl$j5*vfEx zJMypo>DP1noe#0HKH?QGx*V-Fx7~F=KliJD&b!|5BEIoWFJ*1ga&mjlpMCW6+;rPL z?AyPODe@Wkl1~{LwGGpTmzIfE9g4e$48uqR4 zA>n!A$!GbqkAI$rAAM|z%xMu^F!Y+~Jn}=|^%gF>=v@B8fBgf_JMVOU=^J0iZ~l+J z;`Rr=!oUCDet^vrQ@(KXy?paGzKXS#F~>Kzxc=|Iz!z`5o!T3=wmoJg@qO=lC+D4e z1`3!?=lte}KE%7<@{N4)_Al{;8}FkYPecF_Bibr{_`Bc5Q%^q2?|kF~oT?6xbmqkN zQLeb`V&4DF-^wri>aTM6$)~vFybE~y>t4;7hfc?8#k0pZ`KwP~&#iYoz^JjTuCDOY z-}xO}|HYg6+b@2K0~>qTp3k`Cyz_Y1H@ul&`rY5=`0?ZX*!$kc_SV3$=~KM=g|EO? zmhb-OKgoHM74l%PW4nBgV~m`6`k8$HyS|x8yFzU&cYNg@{__X^Cwo^S-X-4ijo(Jh zGoF3c^ZM&vL`s<-{|`SyNS=4R_KjTk!k36ln8eL@eVO0>%ReT?%(uP%8+hUKU%-$4 z$Die#{fAI0@oc}zFaG0y#T^gb!5{tAU$Sp~jU&%I!~4JKJ-qDd7x6>?@gH&YsgCb^ z>$h{w^R8q(8lf>fc=$nn<zwErKG|GXPoQ&Cr4%?1#Ltpl}|L1Y4R+%m~XqC{2bG2iOhJ6HPXj&pt zkSx5jBSNe;N`7`EiUV)?bm)tk5bG>C2WTF7t{R5X)$D1+7J#V60(? zo{?E&h}(py`I`C!PaI&ETG!XZ4(GF9nWKMrIgY`p}k)aAe%-)FJlxrs#1;^43yMa)3k)46ZkD!lJC)` zg_vY!7eXnX>aRg_VhosSM3v_R+A@lYth6w918xw-N?Od~p>%->TSM1(OU_1JRfH%K zc_IH+%lj}4a!%GK&e30tPovC9Oe?= z;T%mpX6R=!*Nr_#w+=F@9K&3c0y*zOW3;5n*L6+b&zIRGO*^LRwi%CBSPWg=(9yJ$ z^1zp8CCes~h-eFY9AS=fue^Zoch)4(wgysb`LJ+no<_?8GLg9$4jqb5CbH5`yGsZoE}8(W-`@_`$bx z)}aI3aLau>eE2C|aMdMz>)T$##>N`I_s1V6#K6IWdwAzF%)2>X_v&l;_IJF7uRQ!1-S!skNIa5^F?56HuKOS1`Iny0$;}yG z`0_nM5F|1gPk7bK&ZZjzH{5a;CpWh_xjE;@zUQr6`@-k(_g}t?JMVjlbI&}DH@)h` zGSyRqmTYIt`CfwhS@OZ<(I#d6f?&*r&ObsfBN3<#u)gU z&)z^?S6p-XCH%AZe-HoiKmRKCedQ6(Kl@BBIOl9`yZioP_;`>IkFq+RaKTw;vN9TT zBp&6!-hG^TO3P$&34ed{oq%Q1)ObIqG9zN|NKvx&T=2Z_o8Cd!NB;ii>pAU|GkEz` zSMxLVgkSuF-^9-XE8`KDo_{&0#7%eI!My8uX6q>5^``go_Se0c+wZ%Fdk^2qX?xD$ zbuWE2dp9=t-e3NCPHdgv;&adEjW2j3Uw+_o#E^OOi@uKY&OC>h1LN^0*xa16zGuWs zueyp8TPL{t@WcGfyMBUi{km`BbGO~djkkS~vra$6n_u>3{>eLkl%M^zpXY@uS8&0Z z=dn6j!!`}4?LUpPPdl4S&%c<@+;|JsXwEBN@G5@d-9OF`{JS5+AMbgVJ1<2DT9vl{Dlo4b-L>I;sVCFk_Wv$kHroqtLO!E59s)G=?sn zWNh}5OvD4o*qn7GWb`>;&hqmzRq=Au3O`NMD;9cDZ5d@G^mAcuIP5BNc3pQ0fx5N0 zzKjeNXrqJ&n8`M#m`BYdb$xH5>(Qm!%}C6HC=CW|J1)E&#IQ@;=FlM!on)*St;kqd z+L?s$VZ)8sZtep-Qxb6E;nv+#O+ z&f-u?o-7?TZ~tw5m%2d?LBZ+ZnOC4TJ>KEXwY_OO3r4PzzN z;9vY7zsu7{k1=j5T#W49v%!b|>NEWJ4}Xe1do&;Ti!ZUZGT{Z6Ux=wP``6cb)2m;~ zUH3o2PyGLWmjfFWy>r}p`vbi1-QU2W(@x>;hn_6YSmdc`;1|B{?Ogl9OZme;{~P}F zZ~vByPCsqe;~;9N!Fl%Y-Qeec`M3D;J@=zX+;i_^{HuTZUS9U1=W*lR5AeoUy@pHA zJD*?wpC9H!pZF99H`e&A5B&u{`TlR^Ew8x_tqe+K>UMV- zp6}uNf9~gZk;oKc&bJ^hMq-kuE#*wt_ndRy>HOQ@{7+o}r5ic8wwHr@Pm$3r9;0mG zJZV-&6AnN51pnJ_{TI&O*vsS7XZZ1Vei!e0%iFo~hD*8O?psJHGa9x0hu{6reCn2) z85zYj7r%h_zT+Ky+W@zU!^u!cV{T{ruhSpJ8h@<)v3$ z!)I>)8wL-rdD#nj`uNlATi?s-WR-`XIm}Bhx`xSkmEZdCAF^uqbIAo4Go4NO$zS_9 z&RE&QA6$PAM~`lC&RGXJZT~4OjNMX9B=3n?_R0VHq2K0#23z^zTli-u1F)fkEkOszPOlw-Y z*pZVjw2X+&LV?I+D%B8+Ey~=Tz?zjJo|iq+mN>!nh^Zg6j+N1Omq=lW&FGV3o%Opy0Ev2plqQ@q#Xo0Beh42;vg;x zvW#i9C?8SEYNd(EYo%l+CnQ{P2@Y8*Y7~Uvq+roXLN-%c!ev?suQ>*X(Th<=CAYjJ z0*69`qL|->B0*nBLA`T8Ro+w~bHqq0GTE3T);46V1s)BNYBVAf${0vELyPaLv_fZj zKtd2xIb}0B8}SPW14&otrRRrQ6x|rDiDgb`cRfH-QOiRsA5KFEt{4d}R0YuYns%&6 zKF~DaoW|&k)x8ucX@sdjCq%VIv1wNt-#e7G=weA+d@V5yWMxqbhTySgg3%deL|RRD zWK~JWP8)6j8ag3}MT~|ehuApkA>kWWa>@v+>zI0J9&AV+XE9uz^MOKO! zGi^H-XIq*WbJ&#}* z*t51mN}AbJltB+Z`ZVX9zD{zHzL%iOJ$p7tJO)|J>S908v<(}ptrU~WbLyT68*5|c z&ul@~eC5$6*xKCW(5dUo>;0F%_6c>Y07*|*Mb z{P&M==s?Zh^)+(N-1o>~e)+flh<+HTYB3`mRSo~~pS+vvuDyca`h&mVZ$9@$Efyx%|?Lc z&E@ADA}h`6xZ#tZyNOr7^hII=kbN-#4TKQcvp(kbuiVem&m7~`FMSz*{>i^b+h=(F z6|W-4%$@f<%!@C$h-f6>Wg3IU2lB@FTU(~_~_Vq ziWUm4uYHZ$mdBoYiod(@cCI}4vO<`bv}m0)o?d=0XL>jA;gA0{*Bm;J@%o7M<12jj zrki-}wXfiXmtW3@K7BoH)9~=&$NAV7zQC1dU&_&wM|s&5FK6C&{QYe=aPBFmbLzhR z?3=Cg*Pp$fx4!mGyy8VK;zxhy=lH23kMq2X&!cHqIP2hPoO|e8{_Og{ov9-njy5X;Q=^3xYXiIzI zDQ>>+7G8Y$i;IiA#koNmyex>9))k3Ccq%)`;r|~mO=KIx3M{XPMiU5z26p4v`uVTQG1a*3p=>?+H!Uu_VFx}l&%iHyObMUW$q zGKQMKfTbnw3QPU!_p~t5-HHELggj^z2A4dwSv2U8+Ehg42uTxDrZ$4K2B0Or=MBM%fP&F04gnrj;g&&IG$7+KA2X0mQy{fH++gH5dR9@sd8krVG$@u`P zKvlmo7UCc_6~<(eF%r>ImFZJs2wlWV)0?f3ZgVomn1$LZl?qD+kLA&d35-OzdmqK4 z#E0dq&yooXK8#Q+fu@Y4psFf-@p6eVF5QzCfsoB+#SBS4_eDXn18pseAm==7RTB_?NlIzy=2*uu1sB9u)^0*Tmn59rIekS-#m6E9Ofw>< z0f`P!#JI!bs*B;+vTH(QjmCi1H7WNTI{g5jzu|WFthZ$hHlVe|4RcOxZn1Y`LN`c| zp*9+0trV}tKST1=A|}bEBz%7zW983{6)Se76_qvEN{qLZ(R9;+ z^UpuX+h2PvXPtQ}`}c0(U7)F}ay^Na(S)QD4?p$<<7&OY>Q|D(WPq#M`B=48lL~WDJ$5&?Yf=k$vkMJaOb% z_Dn{!VcMOQPdtP*hP@m6c>36pUC*zm({>J?otL#0 z^Zo>@?M@z)Qi|S9sm+AOw6ck7IigNXPjKkKDUgK+c4B+R=2pi==bp*tTwG$4=~!>p zN!im!$0Zk>g9`&kPCm(`8q>`^m9`w+e3oNd$JxJk53hgzHGJxZ&+w1l{ry~d!6j_0 ztfQ6Ui#OlNnWvq>wU@k_Km7Qga@i#p@bD9l@brnNIAzZPKKhxDarSA4__nvaox#7E zN1r;({SSYI|Nhb6r3!ZE-73oGsL)3EbxJ98)H0?u24gcs4e zO~cXSM~SfzkO|by2=8Vn1tIjyAM_86sGj>;6b_58!u<%$$w18*g)97(mZ?`N^NoETNBq&!8X6+yF4M3D430rm8&a5E|krrrARcObV@N-mC>MZzAF~%W`~!ODM`Q?qRc|I&N9X_ zhHONx=3^9MYF-eY#3*PnHcBy4*Y)zv1n(tKvSebBAt#X~=A?>XXFzF@n4=IEO5b60 zE#s`{h*?s+Q%X`uX>m&pF$lT?DATY$5v7eqiXc@^iHNx?u;J)MyP|mu2*V#w178h~iA)7={6>=Q4&%UJS0BC-|P26qW8#TG7@P zYe3nB2u>5-HYl@1Hx@3rsEkzuL+q%Pcr6&yvO7OV%=C1*&jGDl#^V#DkTGn5Z41)& ze>3){!M1JLT_5-xvsr8Hz0bMLYqF7)DP<>RN=gYyAdrxZC?teYfst_0x&jEQTsBcr zu5uOOD5$VMIItZ!Tt(Rd4#Hq#gF`AnAP`0=1V{q)U8cHJ-(@PBm(6|mp0oE}Yt1>w zob_SMwa>XvsfyYW_ucz$bI#st%{Av3|M71e-dnNzT8DsbL3;047w$=TVVDF6)Ow~h z&pe+kx**MXZ?bta1}o&ekr6AkHl}gwtQzz&qH`O%bM6JD!IB*iy!bAytKx&OnRAYl zc_*x^vYr(m%*x+LCVGt*J*#BvczIn+aj7kn@ap6V6Fj1$F)b zpg9wF!)rErLl~uMM`HSK*NX3oh7G=T?X~YlC@EhyqgD!KO`L8|yzUJz@t6Oj{{!#- z+_&*dzxwO^gMa#6{P*AZZG7(!{UoZ&vRWvv;0e(ahKwH^r374=c#VKj1V^8neEMOg`L*MVF-8^8KR-1=VLd#tIA>T zIP4~9kQO^KQ@X|bYoPMt!-?$-IiZ%TvZlwKC>IH@V-%6HKOE(^149D zjrFvEb3|vG{<7ZlsB*Ru$9<(1NF~v#C$A&8g0ww|xyuG0NJ-Hp@Pj}3la!*o`HgSp z-JkQheDGr*;)j0jhxwUb{5ihhbKk~WUjA&}{)Tt)J@5P1Jls9tdfM~Lzw#0Ov;X10 z;BWn-Z{#O_?xz{!p0EGvKgeJDbAOpt(re1P{)yY&A$IRSP~m*eWK~LPq`D%Pkkrc1 zz11An45XVG>Dhi#qOEh0*VdAs; zdLVOcjbR*#!$2G-XqI3u-ghpKowI1c4_iD=1NDaP(|T4|Lx?Oj@nG6f)m(jGkptLNp&Z)I5~RqUfq-=IVtF{BnS(mMY>A@m+SNy$ZFNTv4lVy>rmXtlmeQ zn(?3JjE`nzZ+;yKYO{1@b%?V=&BjyoC zZZW<_Dbe}lmx5!N?Q^GO-YwJUE(Ap9JmVNTqSGCN<(c;$UG*Z7++MX-v^BKdv5tx=n(W$c zCU;t_Tdqwg4c61ycu$>RCte8CM5@ZW-}z>C)4<>R)_=)g`m5i}|MJg%gn#%QKg4-i z@y@t$Po6y^m%?xVl6UdRCuinkrM8u2O?=50yo(neJtWsN<1p}D-~Xfhg}?eueB-zN zbH3!=@8s*g>dSfMW6wx!y_mmA3l_F_`CNLDs@7V&8E7MV$4~s+&+(aWdObM?GxU?n z&GE=*zvZ(SNAp&3T`n8KgsRC;z4yHDXMUNV`=wvw^FHUTe8m@k3Co)J-uM0(Z+P7! zKJ?0~y!!N(x4ij{XcNxIm1RyW%)I?G-bT)aS3dCxidqu*)nP|-O3Ia7D=)loWkvn{ zh2?CI%XL9~wD(gBTA`GlDlOJ5y!B0=#naOhQc+IJ%*!vo$m56C{P@rOA}>z8nFI2y zl;glIMt=I|e}?@y@y^eD3$NbZQo}8$`OIg${xf*_;Y)nzV;^G8E3Z6xh4=sR&+%K{ z`FXtUO>gCU-uJKBhdsaipBwh%`lnOV$hUvbck`G3 zr~iuo;J^Bd{J@X@An$(1JNe>wd@-%v-LI|-FoVe{iyyH!u&3@e3zN!fq8KwsDf`pK<|k7qm{wG&Bs_a6 z86{&835kkFxy1%F+gIo+D?jyTrQ&h876?R=-nsZT8m^Ovmtr0++6u16Pnf4tGKY04 zG>2!T=z`W{hp?{Q!P*>B1&@=+swaXBy%5);@=wM5NVD(?>p!3fdvge z1$0sTK3q7q-g_vpcF@6(cHPa-&bT`@H>RDpTA(VW7gJj#L>vr7+Nd?oE{^Ln%1ZE) zC6?Zkkc&X@16dQT6~ZvkT%Y5qv9!r|GHoNH6;nV}a{}Eq^NS;K2o}2K9IdG-s`~sh z4yMFX9T2e(7l$6qUNEE77NN~l4>jMVZ_~_e)gmAINi0Tibz(ngjX0QlVyR*z=W51@ zej_`()>Epji1NYXgC`dyhJn^L#g@%lMXb0{725=AA+7nM{jb%6F{?Y^v5cXHr#W+P zR^8ZD6{nu0jie1cOx|0FW2(KTt5l{wlQx%5b18P_Je_V47pQgfyD^r$YC$>l;MPXf zf+-FwRcx$Qo%AO|E*s;Pe*N5bwM{nVd8B2#4);zFAhN7yLV!|ozlqW}g>AyD{fFIP z?<=hZgb{5C>CoES}|wNE!a)fHkxS)oNrh2PjZ-9Tw z#8S)`<@!abg%fNwl`^%khK-H76>I{}6v+Md$8*JrnucQg(YFJ51<+l{>S zGvCN(zwI-+GjZb=e(7WU;xB)QKk{|In@{_+HuOD-{Vc6`7+m65Bah$`8>YnD}N`>8DGFgsj-kUZ!< zAN)0b{1@KO2R`x&uYBSYyz3pG$=g2bjlA;YhPQpz+xdde{yZ)jJ75KjQ*u>CZ%A*} z#j@RMVhj%~ngug9{G-4B>zM1voM%4XZuz<|`+bbV$Pc~ueZ2nRqsu;L{w~V({)+GZ z(H|m}#J}-dznq&=Ij?7a@!1pp_`msw5OMsgAN^h)?yh;bKkx(Z{c%3;?eF4^FTbAe zd*6@qX)nCQPyFo9^5Kttgs=NuU&Sj=KF%j@p3vH>4AX%>|7ZVw{^alblRVKUym<8@ zx9(L+Ei6mscwV1dhb23tVPnwXFAdAGRttwm_}s(W`OY8uE>x92_SJukPk;FhtYzkF zzx-?YvUh*k1*N}a+exFX4j(r2&gY$}pMSOf%$u(mI0A!F6j<>DHZ*5TcNZM3ISVZ9 z>)+$?{lN6}5sI$_7l%6bU_20HxJJuB*jVV9`0=o3nk^nJTrP7471%90-(_ z@L}JZGuu-e6-S^jTO-~ZI74y0@eoA_&P*LWJ3J9>f!Z3C#nwu7q`H#ZO3Ortz>E^MuLPT_{SJDSrA+UA|Wkf3@fR>8E2p&-q7j_W4o2N(Km zsh=a@aTtQ`Hh`i3yJcMnE-*y1IuWH8wRf)LB9?8XYa#4{Q8m1&yP7lC|4XX*JxYou zMPd&LZ&>5s13nQDH5GGCdXfFtzT$x5oF9lju&gI6H_6ZfkqXURe8n4T6Z}X?iv@3P zS4a$4EUJVpbzB^Na8OQw#oT-EaollpwzTuKo-XRCoD$+jRF6;(RLwMuFp8^CtYb)P zuhs{f%SC^r)GM2vR?9Yu!_Y6(7FOxl?csQYF~AU&#qFs1jI?^O+^0EQ^rW1h>;8<> zq~wy>@2<#sCWeVzlv=G=RNdiyWEhN>0v#d5 zb6Y;I%GG2KM{7n-hEB1Rg{FblX8ib&$^%rNAu{%jYygC5iY$3y3L{0~;lq#e?AfQ& zD!lOU*Ld>kn;|W@Fj<&eU*_#zBJTay{parfubnfSBInFRY8>|Lrb?|loLiWe!ftmB zZ2>avLPmD9w!`~GYt|VdH;6u9vuPJSQ`&)XSE&lk3(`>?KQ@}eaZZDydRT3M69%VjA@7-&T)9knT1s2zpUqJ(MWYKXk&yMB;= z=NrC;Z~QO+Pkhf0{S<%czxn&nU|Eypp{)!182F(d`$c}=SAB>-{`FtYXTA9iXi?tv zj?bdj%CaQZHIvGjZ~DjojQ{Ju`^Wh&{_lT=_x|KBP^$9VzVMyA@27u}pZ~QF7>U1! zV|wR#unTofS@|8M>ca~|B(;B@+xn6^Gp2vulzbUr!&jCUiPXgiWf(! znOZY~<@pFg(j%Ri#|J+0K~`P(Z~x+d%+LJtPw~bV-^8cC{w2Qo+rOP(`S1tW4Wktd ztzHVFy}RNgAOA)Ehj0G-{HbsF2L9@w|4;b!kAH|az3^7v_=XqwmVf>)_@?jp$9(Zy z-_4p=-up8@%JK9Ed2;(nKKP-J@EI??j&>B@_cK4i@B50c;m6+pUOxQfS9$ZJck;@s zukgb^`NMqemwz>X{dNB@e)?B_k}v%1ck`KVd=uaPegBdl`S~B?-+cY=q7*~7;!x41 z9l?;!nS^O{#pqv@y5t&;eSFGGHaor{4p%*A8Kp45=Y5f?Z>BBM`N5LN^@y_K+m#hcj8xgWG*hrfZ^nCDdVr0VhmJaJ zq-Z5_po!WzCt%G}^Z3D`?FMNN>~M}}T)SrUfhLJ_fO+ zv(Xkl)unY($te@Z(PD?jv0GEvby!orAll*}ong4L;)lx!vEemBcigw%>6wOJ0Y^=W zjy7Fstr5m>*~=mp$HEBfjbrz?k>)OT>EgTX-fXgRLna*QcEyi@Fa-3N3HwM{GSgu) zZjZd?o{Cr!4}fb%z)qH)?!37pcO4ZpTId|=s!e^U4(~_I*l7FkHp(g4W`(V{?-II= zv=h^Gl|mI$DdkcK7WhId3GsW7isWpydfPV0ySrxT-T;A;Gd@@lTq!fVY1f(JW=2=C zxkv7HHZE~ZX()wqPNT-tNiZeZk59M?D5{7({pkRVL`=6)#CuAc7w2HN~2oM z<#;ncETym;r@ndIpLL6&DnjR-2+M4iuVX)SRUJ}{?;8SS7YXG=L5S{5V~1)b#EFv6 zR8?|={ZN^6VG4momC1V$gN+T2R-_vsir(UJgkfh95`gnNf_H=qIy3X^*{2hu5p$nD zdkZdRyg#s>ZW+cMIH`G=hr^)5vDN$i4aGw_L0B-x8K7jo;>AU?|2I@yzq#h zdjGHTgYW%0e&9!cn$LLMLr$aP2Y&edeB#M7d`BwA82I^L`E|54ZjWcCVX!gFvhbbX z|2{tc@mDz$-@~iVZu#xM^+NsGiQ|JGeuba>gb+)`;`MM_zftysrG@`+tR( zA3wkkfO_8W;4%O8-}*az%~yOWzvbQUL`&hje(*>5wtw~Aw6$`5eZ|$IJ^%1K{|VEs z@Xoh=HV>|^`Nn_rZT$4F{vv<;KS?P z6~Fj_U*ohK`H%nR-{3#_vwxb;eaq)@JD>QUzUA-np6~rWUia`JX)XNt&;1nR08{5A zLgfvQ-^@S#zV~o@dX=yGvM=XNFTahCz4~Fk{RiH|-}}yQ<%{0(`DTdb1IPKq|MH#x zf@kw5*+nx3eR#Oy2Y=#6h#~T$@BaxNjc=sM!pm1L@QvU8xB2i#Kf+i3j<4iP-uXq` zo{#*!_xuC?Ki~CDeEP$ec=GBKzVnB_n~%Txai%cweee5zp55F)F$8|mGrCm%)erq^ zp4`03)z!r7W~1d>2{B-O1Oi$W~n`HQ{}run^jSiZ$UX712V$vdA2PtjE3wZ69kx zzO}>OO7H`vnCp2~CA3E{+#+02Yee-(^^uf4J|;*9kcG)lB)uWkM$8d66ucKok;{G> zy3Sk0#^FJPTnaLd1m9?VT2h|lpxrAxrP0#BuurrGwRmt1R*yVrRKKvO;>0E%L+3KB zT9~{;M`Kj^Dy-|uxF35i;#PHZC*z$$8@sQaK3Aw*%nYR&LenY|on>8?f&@X=N*E^A zd7(B>@YslJa%gFU=qbf26jh-Fe_gA)xgxaLov| zMmDb1R9CGOypM?Ylwua{Axt#Q;5}8<3~ikwbSK3y?5*Wy1%H56FU5h@$}kL6Rf<-I z!9Ixd&Xg}TS>fY%IBycss&-g84_X>AHcAV4S7_K+$%{F43WNE-_yT@!e4^l}6?#xA zb5f$UUpO&mUGKx@5XKbFcgVtR`tMECW{W{iU>LE(8``-&4RrvoW)U(?yUH*P4?GnK; z44!#O9QIch=2~($gBmdi_yU~X`&nttd`(oFWd-dA=G#h$XK;HQwX3TV&UG>%E3HOz z92Mc!XEPyq9zTqf)$*WTd2(Vu1s*><0Et!ytKoCulg}1nYA2D4Cd0u&TPNY@+L=$jdg5?B zur5j|l?VI4H15oeJt_N#!moee8F3Oyt2i3_Y2ejo3vYP*7T3lAR|QL}F|S}UJ;_6dSSUVQWdwJw0?yskXCeaeIV10G*LVqRWl zH$9-F!Y7U&rnx=W`@rq_NGpZcJ$i`{1Lt|>)sy|ZtKET*KKUr#d0zMEbV;=dpYVr%&%e$8k-j`7BXSILZ=fx zkI)1S>E8E;;B1&zQzDKdt&@>y4ecD45Tj+R_0iSk?KwzC7!HPfix;$*B}XeTj*-*( zh7Wz>gLoNn-s7sd4T(5>tEf1)R8-kDwN`d6^%oUg9C>g^_(o1s6dEyQ1Q#=@vg+;~kV9tQli42tNka zwcy>1^S+O?j0=!fD<16s9a@Bmy4S3(o z98g-%f?5c}K&4UB86S6u1WGyM{T}Ba<=lx@1G$*Y+T5L8N1={b@nUJ#PTU0n@d1_v zM&~%4&Ui13<6y9xoNz8s#1X2}NH_*^nHk5&i0h8OwK7GImexmCCcpw`hDpsEmqHB% z@!nKnH7hMRe4i$#G!p~3@Sw}81sE-Z$u(*zrg9suQE8wV@8jiOEb9%^_~1FR<8#|v zgK1}E<&DQ<$}Oc7VNJ?z3c#6V7RC`^2bckwbul~O+}GtM{asNV5pibtcARluQ4OFD zZD*R_GY$i3H6(6#HL)y(Fh$m5;pImY%hK>+B+a+9w&Ts8_K2!RdV|prGn5eFMFr>O_-p}5x=`7@&fp0 zJlY?4czr-?WnGW#A3u0*1A6@n4{XnFjd5?I;71SkTr2os(IqduaD_HVw}qEqd_X>% zE&I6l%+CtDhk+qH1c6V!`Z0dn7km+a^nd+(`LZwmeE!Bae+!@d#0{VK!e{b-{xg4w zS3dqpKJe?Wup7H%-$OcCce*uaTH;SG;p zM8rs*hFB+p+f$do8(w(%Lf}_b#_@_#XFlr{Ehdm;&=u9BuyNTbqm}-g8SYCDPA402E z4)^m7=m=B;P`p1}_N~YP1S^1gQ+XMGT~MHnwqRalpQ^}_3ME%|!wzYMbrDOXPX(W0 zIE*ZFVcHFx^_Ea31~(D$ll2&23YP8}J56e?!d_kx)_^H$Eyn`xS?FMd>MaXPzrb>?nY7oZI zGpqtqgf*|E(u=ZAv3hNhW7~_Vq!Fd238s~XS-tom7TkSG#{F?Z)&{}q=(HB33M!y| zB-VmZvl1syUVkHx$?o9=(Yg6*o^#V`)M~T%<~*%ce6z94W|7#MeWO|{J_a^}Ijt+f z4XAU3X6eCUh?LT;!s!b{Hulryk+5#oZE7pMjJSqzWL;*4F_PBIFb=e4gj`LD5XHDe z{(zK3s+H&ptwr#~4ik4psS6^Jk}~6DMM^1^VTkNw>k(?TF;8G-Mu_DFjM2ZgwNA(>o>mn%8uYBXr^!qRJ8C{s-NB&HJk#nxjGm%Ls_uw8hto`H zo-lONsnJu4nQ1v!DA^1iLr`iB2n&9kpxF9%;!q8EUuZrUQQvLrextN0NVrIr#fh1$ zx!<@k&@jX&XPZ_A4_Wc!V5!$t3AN&e2dI1uDFa#~Zdhp9(_CR356tHy&IQCZL<0na z+glZeJ*;Pl0dl^(kGlt+^HI$*Az`Bg^N$!0-7g zzVf&JRvtdscap#G@h4CCmiK%YKlr})@wyit_0HP}>aRY# z_wmoa=LdMO+jl2#L#U)iw&J(SjB9)F3Cc)q3&Zt*&Y48ezW@ z-IZ|zH!J_zh<;?%Gte0QHCfMn@*#ksg&UFHivMcJjh~?&P+joe#yJcpM6W1$C5+vX zdGUx>GhlUn*>+O5`Ata|bVO4IsojHGE5mRgrDr&IO^ktMUWnsLO2Hy{O2iEbslvK? z4i5^;Dd3#lBURg1b8<9)%Pu}-%_nmgZc1tkzxL4&@`r!VALeU*``7UDOD}Ui&+K+1 zANj;b`0xMm-{b=y_;nsm4`D1&HdTxuW4{iyLGp0u@2`!MA&2UdvYJy>y zXf1W#OS{Ox;f`ms>cZqE&a)DxLUbcZlijb|LVTdMwt*^2En;(?aK^dAy*(mO>(Z?_ zjD+lD6PdXF>{YzqqiRXzBCsyXxHBP*odNbGwJ3ftN<;(lS(y$4sh+8`HBC(#zCpZ- zEKe&;E4yLOe9DAfg7Y;xJb`wwaeZ@E5VT4Nk@b9H-0exF^k^a_hCu3x1LuBodPE9NYvcM&FLe$Z` zHT{|jVGJg3&l6$4(#kf%YS0|DM#?fXJa9;fq$S}Z=xRAvX)X-A%^T-l@hbNJc{ch? ztBo*uD2jFw&i415myd3R&i@K}kP=(fWga?)=s07H`yEw{G^r(1b0!Rf6&vF~$=TeC zX;2F7A}Mo7IFQpbVwVgPCTNB@v{vz*`*NQL6FLh!7gKQA;oNY3!nsCXYd3*|IA9Al z*@(pXXi|5&I;UkytpxAT7L0Y?yCs91Z45Pr#!?#69L^)pXSEYdSwQs5e)I{m;%@*s(Qj~z9 zPpvvOzTH|1V^@XIDpf+i#&$hb1xPqI;C!T%OhEeyMju-NI`fvdy@7_=2{iBV4dZB` z)auM$J&cxp0^kFsEcSc%{DuI=3D)HT{ITC#VN=RojkJxz%&@N+3KoT&AcV%U!fv7$ zKwX8jIZLyRTMhbdZN$5TR#S2KIMPZr`5`@yL>U*Y88fIBIkm0m6VPQ z!vj;UF;UyO7p(*9DKktP0%||jB#dKYzV!@O#R}*aDRHGPjWG-)&6Jjj1YVgx#>3sq ze9oKSMv%ywPW-}$f0=nb@$g`tG?&Rx17atSIIIO<8%zQV=v0wZ2{KY-#kWB9ic*LY zxm_xUsdRpxT!_9Ft-|H^YIpG8$30r>Wu)ctRA=A6$z5?It=Ev=l(>Q=%o`U~scP>* zLQmZxk04kOx6+$4D%n%~EWI_!1A|xp`w(LsA&_zpH zt&x&o&sFdPYg#PSJ7sVaQdhJ#OFGYbF)Qu^A+!D{1vhxW(gvhQGWh^`xvK%Ftrzmo zH`ighD|9Z1&UR>f=U6-J6?+7H>860Sb^{=BRz%6z6kYK$7^k2$G-dqI zJF#|`2n;rt9>>8lltM6~Q)iC5UhvRbCrJ;$g2;i^W}F|1v2i-VG#Pw2414BuCisCM z260gm_-JrwIU?aeT33c~pp=3S-k|sqYH6&xaYdbNqQS__(5T`ruFziGoo~dwqO-MX z3bis5!bDMvCRkVP7TS*e-U^*@v`ubZVI1H*!{JcLbx**I?OZRWR5O)5A()Fb1vE4! zaTEdHOhaG~`so<~A9keq%yf7_ znQ!pZ!MeC+Mo^k&{IKiL@7)2u6)&Z9-<`gLY~$nmMUFUgvg}|U;|Oyvj$)|Yw*5@b zt`|d<)&>j>X#I0mOqRMBqDSf-ayLX_aYvz`X=NA=Sds1f-&=?=S_8PNlr`d=A_2JXvR= z+aa#8%R+I!asF2jhIjU_Lp%HJl$1@rLk;P+DOOqm58R z5Z6d2yUsp1w9VkmZNG`5rAif$uJZH}P)v0d7<%uT)0(trzvwXBSB1P5s;)`+x$=FIt6*NDWmD@YAh z3FAnb=X>USb|8re=>)?yNNuE5h&w|$%h?{M!3P$(;lrsP}3dx_)~Fo!XzJk-s}S|GvSnN@q`dA|6jWqn0LPOPG;}}t*V87wqh$^Dy^8I zlU0&tMCZo{ZGfh1R_pWtQ122sWooUYl+5`tB{sQvt<^ehv4_0jh(n>ZiQpUa+3FB2 zFpOf+_5;MQSO<$8qJpW6@Dr^hhVFJ8LiaOqu%t#3dx)x5#E*y%)b$1lkJV>5 zp27c);7+unh$fJgUGOZ$h~W3{bi>d%P*nDK<_@deB6T)6)iuKO80yn|3&!^_Rm&D} z&N1z;t)QI_=(8sI}I56c+TCON0*jqI4jN8+dS*%vDkDF1I0}{h%1%cERT^D2s?024~h3FI0{vp23 zgxxLc@s?q{LR?}PuRxzN9}RI-josYNP{Wc}O39R*?J#N;Fp1{WosWTDM& zmcIMk+o>BCt&)$IF19~zxFF=Cl8X{{0vY1o4mX{ZG*{wiqt;pzT26>N&`_=pk9l-` z;Nkv79vu!0&x8`J`JlOqrebG zw5@Dj-%7?wAf3%e&Lr6;S&pM)7##Caal!s9pB3#sUE+o2K(+gMsY7-v5(=d%s#fIe9-9_L8$I94uDKU0A~xQwswECg<7mEQ-F`uwB_DJE6!G_p9I@tK zTt$~XR7Go`aw4CN?;}oZWaUi!q~+G8MxArxU1QkUSdeN+j{Vwvb#Ql)Pp>U<#DV6! zWz47SvW#jPJ~S+O6c+R7Rcs8pgKWQu?^4*nosoI8{}Y} zn%D;z$H9WadMaxO0qtRBr6@iqAw*8+1?QEbg1AbE)!cH6FonW-7Lrc5!OZ_caA>Oq|@81ewUtIuX^D3MfFf@>6Q zeN)u?x0FU8kSW`QQXI%+9F{Vp>1fW(O)+A1>mhCs!^nDGsC6~x+my^+T>EBU8^bg( z?5+r|Vnpo9G(Du~(o?DnRWqyJNhQ69-A?+5)J9t&*oGauU}9bE&&(>ov76{z1(-&m zwTwAGpN;F$jP)(poY(HF`3PxQp?UncMz$IjbA0wbGEN6dUU4pxQ)0_n(_;4{#7J6a8@;B*{GL=PdFh|g4z$hH zG=u>kx`fk%NJE^bGgK&n;>Y&f8*K;6*wey?qcYNC#F_g@Q zht!&}phoafXcfZFAvM!fkRaq!=Rk-M2jjuHpm;x`#R^KP-u$regdx$q{3all02!$c z)$ZSg*)h~~pw>>1ufaSrikV6}AA5>*qv~?6K$8n6NV8hIoen6OR)l#?_vL7uGp zFDtGEsFrfA_rhpZYkyy^lYWiMk@I4kxE5=Q!b0#nd>E-6l6S%N;W>SRA+YKz^rGS4;z*`I*i*{Fy4rNWImcRO*42JpRms|r>obml-Bn>6 z6)hvdIV4+`REv#U(`q&pPV9QwI4GN$o>oeo5dxkF8fj9gMQzd`-Q`;g<5fUwqpY6k zfk)Ryt(cHv7p#!U5cgIT`QTV*WgG%{8^9rrpgUUjhFE8%c_pQabIpj;%bq3>ubiot zvf$?()jNiLF)pQ6E0QY&H{yx3>@T^IMGGN%TIz5s4K$*)AYr9ud#|B~c;*Cdg7swU z#x+Q@_MmAqBn)GCZoDp4C{-=mp;&%SYqrkIT1<7PrViFL7+*@7B^~U~CjQ}s4-fER zkEc^Vf=ze~`FBtnG6b}k3eyT2Pn^6t-Yevui50^C537@Az?ADOpWlG&+~0nzc)5EM zsw=Mh7ZhCyHl*zOcq4a#&FT!*-;_;O8aD-toUrkYZ~{W#;5)P@f)+zCtRl2-*!33E zIY;z?Ruf=K9xzo_tB|rVO+p|e+Q`|XV#q@nGHa;>7IsnaA=+Fp8={16GnK6>t^_ww z^o$da>PoE+X$7U?f(5;8o9q26ZoijtVhE1$RBW;AcB9SAXYB-UD=;=6N9Ph;Qga21 zM<|FiwC)hUr&h<{E#WXmV_~gOc!J!pPIJ-NRu| zYo$y1E1DPlwCm7|qogz92g-T|962r4K8mBPXT$|sEmmmV<0y%MRx2jN8A{V9q^O#^ za#7grVNLe?YuXN-&CT_$)83@#;u^Xp#7$U~iC`|Kwcpm#i(X4K&)K|vL<-`(nGd!E zQc(@m>Jc@o0BNbK{!aKX(JHi7Izr`X80zT5U>$!9s3toAdnAUThp`*5ZHne>f=?LRWYmPfR{pX7v5u4+i zJ%U_JBQ;f!+@FiE`M!cU!k7^!B+~AE193t+C&Fm!u4?T(0>OoBBP*#e%z#5$MT>wd zkT%mydu={kmr-J$+k|jHd%T7B0ae$n63paGvqDEXZNv{Q0M+*l9|+M?i)T#*UBUT4 zo-?&rP^=IjSVmV$M{3OkKXIxRFU}gujt1)Hgdx_mjIppL;{vwU$V(uv-iY)FN@Z{p zYd*8&8!8otvmj-0I1%PN8$zx9^IX;jY;;yDLuH(Eh6c<#yayi&t-@NAF^sqXX;E6P6s^!2(>_qN;Stug z(vp(Y4Em_m#44R$h6X~g$O(-birCrmKBF0Qf1(}*O~IP9G~lls6-5^Zp%M1UMo+GG zZmS}rxyXxyd{V?aS{hAt<|=N4nvFNZgV6ffs3L8bJbH0;QY~nT^0Kg0=$9*46d|OEW7I5wkm~S?xz}K*C_7 z|5EO_o(SmNpMh$HU28PEo9%f-XM5SE>Gck^o zbwRvC%W9qT1{rE4OcQ0jL7YV)5LRftlPU&T-Jwd_ZzA~M`v_>Y)N%HdoXEM5lV_Yv z&7-ADu0>c@;jk-|)f0k{%fZ}fTjb`P2%&Gp-ZKsZDy>UCdu=9;qBE|Uv|jw4aX)rt zS_Fb2BE4SRHpQ)AbIwszXw_46L7d|2z`6?S>e%lBYfYqNz-fq$)5*}E`_*)7T?yA5 z!JVmk?okypBEG}r4=80pdsdkUtlf-F`UtCCA}a<&&ol}6W~vf&Mbi^PH~>)6`J&Pg zu~}@Mj}~TE64U-MWqF1Sdz-(DWAs96N*E?$06!?}`3N!6D(v<`s}3hN4z+Gn@LpIG zmnaE4)cUdSY@D|yTh!;-2+iB&v5H>$HFCgaeZNOUS(C%nZuC)V&tDNXVnMC2J3OG( z6&D6HNA?d2`E0Qm)3i{_o-i~tMXIhHvduXE0%@J`-jmidq2K>48)+NmrFBLm_6N72 zwUE<_YBAV(J$EE1Q+34>y))xyct0#ok zxpxtf%6uHU9N*rL>eF6q_4N)Et+r{3^n%e*)Qa%nlG({4l;k=Aw=rDr%|CRv65KVl z6xJKPj43ZKxr3NRFz$#`#s>@O86eS4$zlj&^D91{p*llUhll;fo7!S`*qPmYC-Bdk zyw-V!y(ynsvyqr4MMAQ#y?YgO1nm`esQ9smg~}(o!qSoRhHlu#>RiCN00^pQd;o4hk-sc7Unu?=(@xQr@cALNC00E#hMn=9P?n)w zB*L{-u7-!yF0&E#;@F5Vw$nn)9&Nl)BB`(z4JyjdE7Fut%OR9v!ndMk7BYlTsUd~8$_t0FkU|7zI zZ$eQxJPZ^CSGTVwF*UN@)}GHcoO0;v6e(A6SRP|fOnOOAuCQC8g2;WoM~M;j+hA>0%4e}WA%G#T@89Iu7BU2gx>CQ zs~TJsSsUTZ4!6)#jW?3BW7^TPoHieqLU4N;M=IAipAkk>Z&2+Dnv1jXo$~Cmhcp;{ zV<{Ey0^%d8<}exJWbish)*gp}bqg_d&N@>!kjn}Z2u&a~a#n`u$psDv$MIMgVjvE1 zbCa0H5v>cuaKGqjv})N~T9Pf0YI$5GFNjQxqvPgWx!T$Myns)D@%|yI zHyF9E;C$fiZ+ipt+{a+j3FpI}vMz++!3WZOA`SzkHCkSYyGPV??zYbvKTM>O*zY~3 zXR~=FRbvkMaYD7=U7+Shb7oXmiha%)VV>dYY8zeIecU{Wy8Y6nATr{(A`&>A8;8B2 zWOw)U{=M8fjqMMDAtYkiS4EA0C&71KS0zNVc$cBzoyoO#`w`WJw2lme#f&&7R=iWX zH?2Q(wzDn=k) z%dMeeYDlObyyfO~#Kk#xQMzpnM>j=hoC4`sXxC@_`9+wXKnrLIglGxYTFleSD1n7q z1EtIi!_fI&AX2;fX=^|t<(?|5U+~V062dN1)&s zrb1d1!?>fI8xoW%328#}fq)$pTRKahj1s)rGr78T!Z7SADOHnlYeMVDIIUz^k@Xt! zN2+%Oc4WOpS}+u#Sw7LKg>Vc<_m~R6^ zY?LMpK`F@-_6?mYw1B@_X$i~q1Dx3Tgmg4d9bpK}w=3h7w?7Jv;JUY%2QL#TpV91W z?9_|Q)*4*_qYIkSOb5Ru09GUqQ(33@I`UBlB`(90rPlcfOBC?fj9c7*V}A z{FTzOpoeA2}2xFqRB)qw)aFP^H65NA z4%yFlXo_@VtYLuisYKNQvMH;1KhPcBd-AZf5+tF&AoEVL?HVh-{ zdM~&XL7bu`Z3wzqXyY#TV_g?ZQ7@JW7>Xe*3 zd5IJ?=(d!M_Y+!-4`4~^_HPXGx38ypHAO{;(6gb$*$*pnVlUFyeqRlL)sm?j5+~bO zPD!VTi(-alUeH|3a=+Vnj|aOrS|*x5n>|BP%Z58;#$7Z^pXRM#LGk_yXtse=kLKBs z4_64`K`(MrC+b=U=6oZa9L_gXCj>{B5`q$Ug>MD_rLiZv^G3l@r zVOB%CbU5Mt$<#;HqyAMx4z=`n14AlOu_C7dV~A*jz4wT74Bp!=;cQQs`v`3_*{dQ{ zrz}V z%rF?wWw!lGd__+-wsN6SPTgX{HJgR4BjOrP0{L8VHIkEwaLh^~Tdq~lvhuq?x^48S zIlA>&z|zm&DcGL2fgY%kwb8l#$cpAODg(6pJc-v_ zy~_b<8)!-i?}rOf4=}z&IwH=qro=c7U8U0rsah|GmXk_r24NcU)ZCuOVY+Y{0JLUW zGv(1%u-(0^0K%$ud8KBj3DO$2Wpu2v<4Mk$G5x5Gz+_R}&`G?16fIvXr4 z1lCf~eD3S6GK|j9o+f>yWnL{?28{Pz-Bym~&(QrNrm>OpnOs^gG&g^RjbCwh8ATnM zjVmMy>ne;_O359rcEaJh81E@s*PhOe5EF>@@K*EWu!B`mEtI0faZiwl$LtyIWS_QP ztdr@1h;I9SR?s`|ItjLqj*8%1Lsvmpp(WTqP|9p>)w?Uba5U9S0Xe?EE^-rU;X2 zJb`U|e7-$1?GCJKVLS|YABb^6yqd#s-cfy}Bu{H+q;~s>Rw!kqwL+~K=K{kpVbLO) z7>E9hIHpiLbPu(8rorxaPM*OTy7IA8;Nf1mZOWDGDaE68#SbIS8DTk&nWm92D!I(4 zJE7~o6E!yx0))QNX9Xt(C*|^-hG@uUZQv0koLDpVJ>^J952+!s<|DZ!VtF0U@(o^W zjfDJ=Dw)AskyC3Wbz*$Q8YVBoZO#M{ivy^Yr7BYh+-hO;9^b4W0xT9tgtKOD&vtn4 z4xZ@250Pc|gxyTKof!AZ6eh+=&;+>_8*2w6QM)NoQlKl|X$_OkcV3#0g|q}pa+oz* zB~B~(xTDpTyb83+^k8K@j(7=72hV&mh2pA5rnrYPaXwqt)O@PA0MlTFUa371=Ti`1 zowN(O1~y(vWudC^@}@A-s5J3LXK2>^rktqNv)^6eoulZACL!$A96JQWH>BM0p!{SR zU2T)87l*Wo>7n9WBt$#&YFub_MamwUV?Q1!=fWni@($u?O_KMJwcfNL0`AIs8Ob-f$CiCji~^IUKtn0K8T z%3teU^U|8#dw)-4`P{3Uf|eOtsWc7SiRuiyY8hmJ(z^_Nf55DLuB}`c-e#f|5%H|) zZ2XOFSSE^;+F9<6l4i{6Td3aS`x|fGpu!LXe%PDbEoa1gG#RW_n+14@IHqxASTuP-$qUdCD>9WONXotYJMQp#ft*&jX zHH|w;IuqK0mW5g}O2H2{0x(WPrfdYr=UxKzsCjH|9AjWvDzz0#DJ)9`660V>w^D>* zkV~;6VshnDj#P#H!Dh_j9622+c_yV>LvV_kA`3^vthVP>yE4qslavdtt)v{#bc=X1 zgeYRR7@JvN!}Y=;A@^pvcb`%4E|BIUE_z}ZS+o(nBb_s?<^E>|Gsh`#xDMo1Y30b_ zD&XRtS_2^zmZcG=+7DQVh}y$jEB>NfDmWKd7bQlUXQ?Js4@_fUyLIkezdmT|IR)0U@2G|lTu1bJu&4KqoMv)fIwE<09az6y z%7Swq*O44UP0u*zp()-4E4tE391ATt@XD}LhJ$iCM&hVe{NpGoP>z|nvvISHVLD$e z$Q^ms*(MN&%+=$mZzR@PmNH{f=7{QTU-K33uZ(+F&K6aYkM{ib>@=gOIni0nU}(qsr+?Wf+5*uQ9W`G9K43Mci(Zf^G5uF%Dtud%8!5r)F@-hKO#^J<6)qcLZR^>M4qKY6{Eb@ z))>4eIL~1iI7pzx!ugm;B-R^{VL_V-I@&rQ`w@2CJ?7)q*@edfpreJAOxAn?TBFK&-h>gS6FT>mVp{^Et2$>VF%MBtS7|> zd!A3{!gMec$9v&?qqu0!^sjw|UTik*1U#FWZZ660dCiR7gfxbUTo%sr@q%cJhjQ}v zTs48Xv1~DJ=CY?2Q>CReGu{WrVWQkZX`XelHGED-Ln9rOqn(e-3Dy}( zvVAYjiJr^NxEnYg&nA{BFdYWUX(G5l!+|=a4it5`CY0onAtS}4T%|08X{D4CVI1kq z1O$5zc~SD_w(MX!1j=H3VCTiohUHFKxY>(*%H*NW(OGXGJm@?=)#j**h_94nBdah% z_xJ$CDD@5_BG=38+sLomq3eyj*emx<*>LHeML=75#PIARU=|Lzde)yzHeHEssdI1!(hQ^(gZ@m)nYEFHT8e6 zAg&qoCpPHwy^AVEX+ZQ=%&cmo1qq=e8ht|&htx{SE8{fwk)KKFO366!gwT~|rC2Ua zwa*lzScYhIC$f|)Y?#iq?y5)AhD3ok=j<`PSFJmYL&*Cg*a{IZ=DS7w=v0v>PROadQ@F6V|u~d z4fSH!+rfqLaTaHK#=fjAf<>Ov$R74Mbm0;-YLGUL=J ztD-9m`+-t2wK&R>X(*~Yaz6HB%#2WCJlr9A5_&Nvs2=;TE2XSh>UipeLTe7ZYZeJp zg%BYI06)XBT=TrNF6F)>c^+4n9z-js8ThSvB)`YBZf}WRp%f z35Ir7Ppx`EKpj{rc1Om5i*R6j){`nx1nnFFQEQ%}bEH~XtL>WtoU4+xqIJP*VDJNs z6+bAE0bNXSCsQULogq^?8NY1_B!46ZM_RmbI8OFM#?9x(p_1^ykRZX6-80H!ktcpE zoKNOPuX!*IC4~@25bvJVxt-DaL$W5~}Q7xR$ zGyDCXoHM1UsY<;gdIJoG$>jKoIf+X!l~))yZyj?dz8dZQI`QN+GsK|}5dvkk$cmx` zskTqySA5JgpAZTnXG$In453kqA+Jq6h{scDArhLy51t`*iTvDiEJIgqV`E>vT=TBV zosFWRiA&!q4s-!Bj1L=a_7FT0f*p;eB)4^AW|+}2AsNg~Sj=5_W0~9GoUzOy^I5Q$ zvC~RP+<7Y6!MlY-S)@cT`FP5>&Y%uqprj17QqmEnBSb{J6Z7S8_I*kzjN^!OgCXy0{dRlj|BU0 zHqvWlrIpGMgxUlr)v8n)uH0hiSeM|($ePZ^E$R=9h`D91Yoa#WXveXUvlTumuU3rs zW)f$Ae~iT)OCIdQl|pd?B94YhfGH~hOJr`X(t@ygmTc%%@Cz8YM_Em+(5M7#gtne5zUO#pUW~WEVBSUq zR1bZeqc#ifgj4h3@vQ3!Rgd?Tl&lj9pfqu3J|gMnATCI035nk)J$!Q z70GTigs7N2bhxsBz2RW~HqLvCJ1C~Dbb~{4GNS)n2~#sNaCS^rfqXRiEfNsXKC)_E zaG=i>J|SGu+5jyvTm{Nnz!h3e47<+3J1N7#8ljTA=@$@2j~@eNF|Q60g)(+|vM^2~ zXroGJiiBvPkYO~wA5zdc(6~d;ZTxP|CwgC`&gVw4AVV#R3j?keW0j)%}qgz*z-Kbi1Yp;-}SXp zTjSJ6T(vfQKB6uXcBPMq(Sk-5IN0->q8*dhA0dNMaB3WI-8QI za3ZiX6_67&S4Mec4W$TW_Cz1?GMR$Sxjud}Wn3J^iq?Z7s)!E=fpR`Dj*ep3#ihup zwJ~0K)>ETYIvt>o(w$?uUClPbZ=>IW1t$-zDU(a;`@aywt_xqbF}raiZ4=%0Rj^R! z?QF&@!^FlyEfy09#DQf!F^+*4HyTExB&bD5Ye9SSPctLFR!n+T7Qh*=kkHjvV&`}D z&79DO!hFiq8i|u}Ajf^@wl1Ru0y|sB;+ma%!7Mt4;EdR3A|`Kcf@Ndv134*G zF<%}LGeO_5m;Tz$AMcu>unXwPe1S^B$n2^}EwoZhjv`K~AraolaoT@u1_`wO#1JxNCqU#w#Bn;k0S#F1=%WlRHiuCfr ziJ>1kXO?BLyb@J5iL5=8k@>tB*|;Q@dB%r{oGo&}KnJ0rwC1}0f2E{_K*Rezl$BDn z8+4h=Qt944tqLh;ChxF-KM$e?-#Lfoja1t>>)xtqW|}yBbGQ%~hryuTA$FvqB2=cy zadkCuJ~xIzndidQm2J!=8zQxIbm6sy#^s*G5nmH=xb6_2+8mc?yduCi%nzp7Xi&?E z+OBB%hFnHe8@m995%y6yFT(XsICkZ>^zZpxNqgaRRmSlOt(DkA@SGEt#nQ2>YlLW< z*hpX+8qEi^K%sIt99Wi9KWq~%pE%E^(5SUCj61;m8C0(jQHH^c#>VNY zlirMc+gf1bTHSpTdu{w0aS(@*QdS@^?2QbnS{e3<_2em>**|D3$H24`{Lom=BVjt? zqgff8ZUf?5CmUB{JaoR$nGmi(Geu8`3#gt@Jz=(Sjz;RnC`#}X-aCT71}f?@E>!X< zkb9CZK}fd+9}4FuGgmKOalTop+2h;}YGt^xG0%KVR8`Ke&gS}El%|#Crt~7ZQpy=| zo>GqY?rYxk6gI4#j+92x7Az zX;25WR0_8Y!vs=MsYE{+A~jqw->g(J`K;C;okRCpa*Pkv{H1E?GIU2H;M`!GqMqPv zz9aT;f}dE|CpHFi0XJ2uGi2x(Pt+ws%#`YQpgY`XQ7ub8@?doKJh%XHWeUPd;W`AK zCPPzlI^w;@d3YF227k<%+=R3)#A_kdLJ;NI=@A;9GWv*X4Qb5~2O1vVy{GIx9(yFv zRfs&ziQpVbm78K-G`BgUJ)|~(v5;mVJM>xH$< zc-bKciyWyf6N2ORRETXNIAJ{+dA!?o(WpcYSU^EVS*UWN)qopk+)zL&!-LBCbY$2E z<{Kpp=Dsf?_-Ow!ohsTKD#o3x;YgbAIc)crbHaKoHrA56y)R|sVb-R7PmV0>LN2DJ zUDgv_=Yb#5F^cRl!$d*`&sCXQz>R@ z83*Gz;$S_R2&a_BaBUV0!3Rof#2CqIW*luysmln(G42DyA+wx3UL5O5pbmsFu{`Vf zj`EN}Zm4>~tD^M@nFCV@5FVht`GtbtdGgurM=1r-M%*88q5Xzt`trXXT5ZIg`B8;E zsB1_Xpf($8PTPKk$Zz=_|Mq)oIe)d5;#;lw(W+ufM@M|HpUYx6Uaj}Or3ni+JM_&w zE%?|6XhLqq+z)~12XeD6Gq~7^lARNSp+uJ)0L?u+$pbUUXtU>Vr~a}9cPBgd-cxeM z2Y*SIb>2LH(t7S_f+t4%H|t`aI{;~I)^SqIJ-Bp}qz*a4U2y02s3%S_$kFk-GW!s$3mIno< zMhf1Lo}3}ZM$T68K8N3^9@_I90+Vl$A^8(#@3-u_CB7Xlf3uLCh(8T?>bO9iIO2hW-#jg^`z!=X@%V;FW6U1(K-fjHDYwsOYth}V>S?xUW~aI5EaHE6*R+CVPP z2w`W}QMaUapsjfSz@TSMggBB@B8(PCAuZ6_iVOjgp&sLYV3`+&=#4a9chr^`9*opu zq9}yDGwy~<i#Q)d&XUt^mw-i;#BjI3D{pFb0?RKP^sL8laakLSs=8iT*PgzTMB`*XYNL3lU zCubu}j(*Qto`7B%?`!qos*MZE$%24uHBXPBQ5V7O3oQkj2!6;W;mwV>GsdIp3dG)V z2Ee>cj7u=|KUYGyA|<=0MrOY1h|Y;|c!`u=Ma1K9RHt|%rJ0+%8KebNn~h0=QnF(T zFsmK(*TM5@QXYlMtvYgp$3x_lGl%H8NpLl-R_HC)xZP8h<-mSAk!v6oC3;T)Qb%xx z&_`d*4nr?OQZ*5j6P9AK^XMFNDQIhqKCo)(a`4Wj3qmarT!h_``MBeSmUzWy9{Pvo z#Osv041|5M=pPY$^E7YB4nsy-Lz`UGt-s;b0C7~q6>)7c_H+}pDZU0;Otex_s!7Otswx`vIZwwI|} z?>7bXuXFD!%Vx;CC8rC76{(YXIOTI!{|eJMF)t=Cu<_W6#9%?7(v!Z!(Eac3zNaHF zm#4gP^AXwt`>Q=UuQsl)jp~A-*a)qz#6zLX=GO(#y3&e1^JwB}dZrPH@xZ!1!`x-O zt>pmJV1lA?M@|dg3td**o|<-&e%56=0V4N{(kX|nH^x|~j*Gf%RE%k|XW*FKOT9)Lg$)4ls? z-Y*;B&3hP}uw>X=qD72g7=uBC+k^kwA_olKFGcZNC}Br}#>qxf+fuSjASlJ);1B|9 zQUqn(8>b>flYtgh>z0a5vq--=q- zi{FxJ>P4>7no{e+(233CzM?onT-onI+@9bgAxxCAlGe~e?$m6`>CFP}V*GYlD+o4n zwHs$7{@MI@baTRXh*W4o-0g6?(h&+%w#8wh=Eitv)S3vB$F~6`nPtN{Rg?@?#oa>Do_6#0Xc@P4p<`{kCVG!nY zCWe8sCI$*Mdwjh{%PmbDu_m-xQ#h0>%Qm7By(jiVd{L8#r&>9yS`pL_HYX-SHxHRD z@w+kgf7@DPAEO~J;!t;k9uIh5ImLmObRf&EjZ|4tKbvBc1J8Tdnp=%#_nQ_utqO71 zDD@W4NW}={wOWRfVh4XiiLysrBP~XNP01wN!9_~y6ayBE-H?jY=Zl=ns_uf5yEk+f zvTAvT=BZ%KZy;PU5x3v#_psY>+yni`4|v~Y=p`ay1_9?AB~AAVn}o=P&|!NPorvzE2^abZ zOPraemSi=AAB}nvMr&?MD!AZ#M&+HFP#4IHJ%VKx!p_{s!(hLZVxWUK zhx6W3Yj)#!=zN#h4|}>vNiv9+a_@$2ES39eB$LACvXD2M=FS{yr4Zss(G`jkun+G; zB!)wjI%p*CL9R7;;NI!h)Ww#{raH57)? zlB~V6kPRvgF9Il>VTQW2ah7A+raeyyrTX3XV6h(;XO2hZ4<_9Adjj=?LrRJ3M_ zdWO)L!VyY9Yh>78v02J{AJAHv#<3T2CNZ?4r*S?PoNMfMj+}*YtlZwNXsL{&6+JN; z;1;8>uEorxXoPq$Gsk}KESu+yxJ@ox$?29_7ed(KLa>Kkm3d9(MInvztn4PU8Ba-3 zX9})6_ni)NKerj&orK#j(`qQ!*8P{xoA6#ZACsgUOK&_CAF`x<5**z<* z7?Cq2rb9r2u+Dn%s@Z&iN>R(K>5^b0G($?aOuH*W0CVbWlrpp19XQW7#5mBJjhxP> zWM3!k5O+kYaC{0yPiQfCyftMUlqPoHj?W^nP}|Z!pToJ~@)%vXahn=U>SgnIzKF2T zlIKD`CU6-aEW@jmM58i4YxrzIO}duKa$Y!G?`ic;#tkrx!)1!Kg|d$wsh&N03^X~Ri!&>G=ej@F+GYF@;}szsNU56~ zmIO8NB=7MQqCe0|<`k53o3ZGT%2XY$2v5U_ppm&1>O66ZGr=oS1FvRf^v*;VRXA#) zRbi=_llCSPv)A`csYyxaBjN)jL$;r$LI95bSua%jz3#}wgJEEWKCZ7!y>MAdVIMqA zgkveBPCQ=J{Bx=p$8s)(DmKEe<-pY>9Evix6Kgn-OX0Mhs6{NEKzAg$!Qm{jM=RA8 zH1{ZlPf_GZSNf$hM0ZW$hR8!Z4`fAE*~v?+@|3CtmF`~c0_Xrv8F@_Mi1(FsHsZVs zef`UCEOM-9slBnkYw=7fz93@Un^H0<&#dW8(bNlHD{gkvl|>G{X1_F1$7@~jZLB0x zLC1a_Dj`H-99h?;bAFWFbakOvT>R?f{`tK%S)b}C&>-O~~a2`FHN=!A=>cV_(h>O%x$V=%cX0nKx(KwynnSDT6jW1VwHs3ZbG!AA* z@+W(XB0zP>PRTcBh&o;w$4l2f-sp6YRvS*WI_IRW>)NHdeRd{t55eh$kMEw!0uVv& zA8~gbYK#M0jCR;{5_3WHy0Etou4&*t6J zBjU%&W=7@$3db|d#W0aw+)6=#ChVh_+_MM}C~4`kx|MxcD0v~}ew|XH^{?Bi1#7B; z_s&#k-pt$9MHq&$LwS{Twbb;S1uczX2$T}gBGh^`b(YwO%OW(k)LTc0*KA%hRTq<` ziy&Hfa6M96fTB#J$ufmNbAdyIToiOWXdLJBOm)S&WeO&IeeFYL|G7LQaPcbi-Icej zRs;-#aK0(HXcEumT!=Q&F?;&yU=L7gLQeaO)cY$H% zjMnuy#rcuEjI6iW%=FHgc%5j?5e8FgZF~R-z4*Sx7010D?y_m#15_^e)qYVyEId(~ zgE}BSBk77(9m65eoCQ@bN2T>BhwW>)!7-mQC1rvS++@eJkF3jjQ8LE3sr`D>l@g^? z;?&4D)p$(R**HQ5iabSGxX9>vN+aT=nI7XB9!kXTJn7avW<&y-!B2|cDMPG0NsovT zQw7$FbAdQq1GaW@K2hrt?*`WO#>S#ec*&nx1C%mz8#0gD!;U;P_Bv32Q(SmCU!$Xu z3eREXr5IU~<1C5MInJdpMH4>+gcyWaGFLH@a-l9Kf;f(GphP8JgC8q33rAL77zS{j zhdz>3S!+dWlJE6)%{ zf?QL0iX%{1DPnuo!V>}qD$ZQAvm@mrU8VCWUqvg=Q5jkz<;*zjsI@XLCu%KB;}za} zhR&0aKGHkSw|7RDY)H-~qrO9ZbGEELFodv_^wg+2j;9-QV3tq$H2$V9 zaY9-X>y1!II0Eal0Y^pLriQAt9J-`DQuK&Oqm&cU9N|H?0;xt37!TL9s<;@5(?Hx^ z+kkg1z=(_9nzv-!A>cXTfEgJZEo8hlMvNxVX40p66mT$J!*YWux1C4VTSA<+$xCy_ zRS1M=2UXS5A=S;8=>AY*Q(~=M*>guuzJIfFSt-Rf>lh|#Gn!cQjpzpG&|C}wx~$A9 z;6UvVu)Q3uC4BH)sO@6oCsPU;S`qGjjZNO3HVa+Mmt=#y!F9LTjOs$k9_JDdnJvV|!gzS-VRwH$yAg@+}bo-vrbgy65GLR$PLc{3r>*;+%l0$S9K^jR zh>aTJ^+?N$!QKx|%^^`i19|bJB{E$V(#evrrQaPVjtvDD*MmGe$DowWn`wKG_ahM+ zkU_5yogkiIG-+)*JEWSksu#z)DAn1gZg>I_six{#isQkcEa!~#cOFjL^B#r(4XR7_ z9Jz(+oO!SaCetPmH~^7iwrEHTXb_~qIW*jA4VkGV%`$(fP!?~B(%QXjVujHnLYhDb zd*cZ@;Z&++38``KoH%M(nSDn5fNy~km4{_Vky|33#TU*YAyls0z%kCmWruf;t1@w` zg(8(*a7J0zLKBB87KU0|qlJ;%QixI^8qxoNfKJrxSaJc^IJihz97`(~6=^{50rt-Q ze<}Ny9?P5f7f31S(GBj9n& zL|zdD!}o~E`#S>~o+qGFhzJeUZZ;|z&jE+WF{zr9LScXRoPx*VSw_*c;+bglhqL)_ zU$xXblBr`CE&l5$Ug|?0u5xkDJk9L!rc;1YzJIpgsosof-QQK5!Y7Kc?k=F2w`sviMKsz2=5}-(a+tmP2jN&VP?#LEYQ6qz0 z^X_BI9bD04D5lmTt!hTo{baV=E0d0Q#H&~wE*848*)-pNT#1|Q=QWt;oafmr9>Ob%Nm zrGyVbe|e7&74^1BY9!d-?Hf)2^MF(Y1HytoQANKnn*b#s;7P&^LtY3{qVQ0PPwtxha6NyD_v_X!GUoyTst*FVc*}< zjiC=;9xWVARgRQ;@$7hipyo^y^(Wc(!ujM$NuxT}ZD-vI8N*gOy?c6gq*So(L~8|y zL5yX+S}+waGxyu&{vMPYq=tuTsP!F4pwi^lAJGA&G9XpQmi5@Ld!be3L5+{Yx)m*o zoQkz|oN_1M={0#DacIG%+%H9Vw7?B>rR<$tR?HaNdS}>H$ZaDmg_;w&I!x{O1KeIK zR*L5B3}pGX>Qa50bxdZAux$=w3K$KjbbfFf?(@61v;Ez@r(Kid&hOD;T}=>6RFzoS zRYq-H!7qhY1h*9Yp-^^5ibd_LypUcC4Nps+-pUBN^w>}_p)#Ec`^D?eR;Lqe;c~IPZoBO-DzjYLF&aa9400q0rogd^sxL0)zMsy2Idj?FH{Uww&nFhjVmB z{64OmjPwzx`2J`aHSD|F8?uq$c#Tnga>lx9d&hal8sh_rxEHwHfG>fPyIS)<&W@g!OhT;_ zHN85QD@XZE>8f^jb%#1!{Y7-k{B7O%u8`~okZC%RizX0TXR%J0=i`vTjb8gc%JRn{ z>j|in^81T=JZtZGA4oZ>qiE}64sO)3(O7aVW31H4wc@9VoOkHpCzW06mF0kjw_~A* zcV5ul+)k_N_vhA#ZuF(9Ex#JX8Cq>>ubng7w$XbdMMaF9pV_xa8kthgX%s-Gu>>`8 zyAy&t73ARcE`}vUTDN%bi7C^X zB3F4NSbFctTSf#fmyLNIg-%!Vs>`;MQ)gQvF{&K>begcPbGvB)aX3_rc>**WYTZV> zg0aJRu;ZQK`SOhvcebq}Lp`P7ddJkt!K>HLG%)0 zrCh01yQxyHICs`R*9-SNwfg~_mN&DW`?#y@g=rG5YrzA{$zhyh-PG)Dnhbla#I=%& z*3#?NXf3kL{&9ZpN%Qw{>sz7RiM#TpLO9`JGqI2{TdAy?Qhn$_~ST?#OiX2!zpYIwvoz0G`nbK~~!zW(+Z26E#;YNuvLS{=r9 z^6JQ|!?;1>iw-5k|B7Ew*}MpKHFW9hub#4pkx5mxNTJ~7HdGaAt8mYQE9*u$9aRxi ztB#XIdus)S#|BWJpiCGsycElPDr5N>_l(3pb$oIGG?S5NW6?m9na zhnkJaau7r}?8vEgdQ z*Pfne{?2>MR97+GW2FYeM`QC7 zrU~0&!xc~TH{!B!$%S)0P?Ev6MtABv^O_Rg7}i#pN}x-liV$-lILFa>YS*=C2|*1N zmx|c-{sJGrcRXiyUNHy>hnJ5uG7V3_Q)vXADBN@dd;Ist1AVu{jGvl-Jk|_Dk?_;ORVVOoVtw>JJyGEEu0~*r^dsdEY9{kjQ zd`$KJVXeUs`1?Qo-#PlvSP>5Hi7xfcVP-ruhw^nah?-DN1u+w)T+r$y0}&?&TGcWk z4=!Dpj(Xo~xEv~I(5A^wfW0?HcL-kSwqdOnRmkA!AUxh&|LY>>ai#Qz7%K*ZeZS$o z(Gd}rl4VHX7$b&p;N>ne4}<<}-x&(NA5G|q)T(y;Y)3sK#{AMaH75h`ejaQub@{C^ zE6l4xZ@Mwy>`2dE1_`r~(-r3?T2F(Q!??H%F&5@|ruR+=;o+Cid&h_HkOnG2(+~N% zcH5;0DK)%T&V^=X2`Q?1pmT;^Z^Pp|Q*y#s%ev+7I-OPv*Qop%NbW!5<$DWq9${0L|n|%OefNtVP2FddN?@NOX7S`!eMI;JCK490wFkRizBm1 z3!xC8cSEf&fWbOA9p797WRTZ-hj~8m)6YKv3DY{Zcj$r-mDVgyy1dY{7LCpcX;YHh z67=t_fe-5PIWJlSE)GgjgRq*_*)*oNMdpsk-T&-eN1Qsx*4?Y+_*{q=hhGeN-+29& zIh?B6%Uf_#NlBj%M&9#)g29s-@?N?jm&M zMlG&Tx{mIiq;iWxohhAKRDE$P#g~DAG z*XRU{S3^e;;b04M7p`9M$mA_u8lQ8g`HqAu+2YCE>f$0WK*qo2J4G>4Y5Ul5un*l}=*k#==Lv$JprI{K z+zVUYT`8G2UxPxXkx9G|nCZiYp^N-(mBTU*{s0!QCQdec+2qtdX&=cgXtKCQm zo`lQDrp3acydw8Y?>-!YP*fp?gj6j zD0#*Eg_0vGZ|gu+Eksvoh|rrLW~P=h##S>aby`=M@4UR1 zm^+Ls7&8c3Wy72FsIE(?3I!X>GIx4W{|Avy8l!+(V9kbL3iJ&hEUtqUmGlM*?LNYy zBUR;*m(}B}MnZH`sVuZwuvWP=$^%izzjsINjhs5IWm3{2CM8XJ&uVM*-Sym?3hulY zYM%LrfBQ49*H@hB98WVfx$({daTW4j@l#`&&RE}wF_G()Abyyp6@vQ%uB$rbc+eZa z)Q)Q>w%k$Mvy7ED!rmR>Dd>g;f)|B0y?3OngOS=$RbEk_k(_ihegrLAhjkt2!358q zDu>|JNDh>P;qRT5(p(&hKsBpHU|t;|=t!nE&(lYBzts>){pEvtP2|;5o7J(62-B%x zhk~GsD7rFyFvB!v(?e}glfh1g+f7G$3?$1~OHLcjDS;Xp4Tk8kGS-k*4-VXP=kln; zU8D@l&HE9@xtUsv4xHTHO{2c zB+#WZ%YsOu61fxN!DD24Y=Vs9MvERrN=+9w7b(5d#c=VJTmx%a@x|bm!m&9Fmg+U+ zG7YN$XGfGv%9Pb&T)`VlE*pDWXwtzL{1(Z@V_HM3p&K|>hZWTL&}nnHl$mXe=x$EQ z;f6{n28&U|tap+N_)_qtko=@X{#t3$@f4b|gqrEy5T}AG71xC9E7ccVwNzJVT?lDn zH-#ssIfA)X_S%>Py1x@Rdv*54e`D|7OsDbc$p(Kv9RVVDVkqi`J< zPsTEh5!H@jfF3xYrJ0I3@&nmv6jU*3aWoP|DnXufuR#q%6W_+q`|(O9cSUPz4GM#Oi%io(xBgvW)5orOgkJQH7|Z_q7qm7|$~xe^ zh1PYvR0sdWTUGItbQ_-(9T9l1@NP$mE+T3dP1gX$dvY2^eKBgqhI#DVh2Ez7$0tk^ z+qU8F`Bee8dNwhC-!~Ed-tfqbB3HdhXW%3QIH0y3iKOc`BD3qyVeUr6>3 z)D$_NXRg;>KhsdmrJNL6?Hy@wIv2iOJm;g11Y?YNulYoboBHM3%7>4KM@pKdQYWBvPC?9E5c>g!x8q_l~7v%}3ykRorSqoMGP` zhY9G0)Se0U6D8l6j}vKsZ=}^9ozdIx;1@_Y{ktaiDvj)JP8b$7tgKN36_pIGPMiQW zX*p@Uq7-+8XE`@+U%>=bVsZC^8pr4U`iFC4yXvLuf{s4-t7UnrtS=TfE3{pA%i%*M zZSqLo%@O8BFY$Qm_*2HTNehOq*S;9T?fS~ohbJyyg~NyX2(%MXG*6#l!|*}jTCp_w z3jGP>70X9O^7<7g3#}U(JJZz2@kHmDX*ucn7j;Y(v(sAVa6S*hG3?is<$OW}wwD{? zjY81Ys83I@xM^m6y)YdPnm)Yjlqy`S<;<*n9o~(t7`OccS^Mizg;?0XS`J?tubbf< z?tQneS=+aj@WCN{R3DI?Y z9pRI_Gli1|{)(hewD3y#W^kvD*unO=eCHT$p*H5`q30 z-Tn4_%j4WIN**5nS48I-&u2v7b^8Yn%O|8e8aF&2DcmqD2$sStf~8X*n9%*)ryL1k z8K{KP9PA*C$Fvbf0U_VLH}&R8IS(1PsyD5j*y2r#^>=&UcWaflA4u<{niQeIC`H5w z+rG0*^V>DOZ@9tfadsl*ee9c!<8ol#wy|BlJBA&dj{G}#I(Kq_@xtH#tDpI~{8udU z2j+kZZSLZQcOP1KdpdRg9!}9k=u^`or2)+%rPJIE%ST#n$l;0*5Xq#iAVw98T{#?j zJgnYA@di-w^AmZ0#n}aWTB+-qR&H=dn7Yz~%lfu%AiCB&KMm01?E~0Zev-fY7ytSH zt>)YRtd{DDL$4@gk?^t87K9Ki_v38`JYL}{h@)?3Br-XNlT3P2bvT=5%`9#S| zJTyineXVyTbPcq}7&|yH8W`$>I?ehJ$SDz~K-@FNLI_SBi0{-9QFRkc7<1FvqZsHF zac6b3?O<&sXE+}`uUqHfWu&z_s&wUMbRBISLZ=j=8P8-Rxm#M-z)IT-_?eU~3l~7h zCeWH8^c%9AaCEk{V1maDRmyEmJe?;lUvHehEbM#5izPK-xO>y8nn1n3KNQ&!_PsIB z!u8haEpt4C&;d)LG)r(+JL1*|9!ho?(;hcFGN>npqqm96TPosw3vF^lm-HW`c~*@Ym|lEJhqoMw%p%+^bS^)UwTrC z{@E0$0r8361k*fC24P>`Ex=vZCu1`BO4}DYjj%*&o~Z?WQ!a#_;8zHM$6Y`F~sf z_}_1&^+K4mpe;R7>&n6X2pwX3X0{*M>xSuhjQJ1byy}K59a_ix6FJ|z`ToFMa?KA< zD?j3G9213z!_a`76Ty2G8d^(g8LC=>l#=OmYA?+01AD&Wu=Fl;moR0bx`-+3$g8N9r^Y;#;IwHBQ7v|bTwS^s=v`NM%$hEsoQj}ex|4x5be^L-fn zna=)oXa1~QMAI$%b?5N;z}J8M!l!@!M9Zp@=%tfmrshs74L@6Yg?j!A{V!jbKYG$y zIeb}IUw)>`M862fKOEW1SK4hxj1W$V^z#J&!B^U!KOWVdR*?+}NhEM*F>}kgbPi(6u-A8bKlw}o)O*lJzeX5T2YbxL>&IaNI{HfAo zp!sL$2Vlp_MA{3^&(yr(7f)RUp-9wAn>_9b^5Y!?e!5%>n!H z$mn&%Md-!fTYpqlcNIqON}fttVM2w@+QU1(Tcesyt0+$@S#7zS($<_fOmLL_ZV2?g zYBg92Vi)d7%&n=xQt#@*S_Yxl7?lKi??!Ay(LlOdao#^noO-V~7c}*|=$PTI5VTf} z@22Su`A{qW^msp71UZaXZi~)kM`0s^lg=6|Ay_5@*95_IoU`O=2sToBK%`U4hH)Qp z?M9JK<;=uak~~pMQ)_MM)EIH|2`gG?s!B$&zLYcG8Ju-{$>XQ7Xb z2OqQu%1Lj6m^!UC=1E6jw*=<}E*DK@_O6qP=Xk87D1@NL%eX##kd!Z^$GIu`CKWM- zR3|2z6j_L#DP--d#*D3ZMdHF@Nb7>wDhEs4-tomY1&eBBKufxQ!HO^Duk|KuhN$|Z74pdXMf-2rLuA^23B{hxLfh`ZE zS+4MDK5?lRO!d04BXsFZJrIebKQ@mA*FLxijgeqRrZ6!PNl4e9x83N5V~1j^39+dX zq?^oQ58R@f+s#buHezg3r)4|SXcVh1!>%mkurk#%SNjVe${%@kzjBC2Vo+{XAD#MB z{lcsLRTV7#ZAJR)0rxm|Kl?Hv6l*8FGS3Ak#WS%+3uY;fc}a`6D^8l0J%j;T=OpJptk6*_@#H%tvQ+o1J9 zWgJm6O}T^36ey0n{h5%db;9{V$p&jP)*EVW)V$!Qi*AHCtnJiZMcYGjjj&&G!7MGbAD`L2&V-XX%u5w|^@vYM4lrwxj?45kBTl)2{$SYG zjF^s-g|%)P?}plKOe}g!cIAgkbKsi>5rby)y;$5iQ_}=y1p?M}>djN9uPP!*0?yF3 zMz;kQ3N_ETP$)fO`9$k4NL{G1X$Dp`I5$(}3RM^3mM3bDxX@HVwha$GtDa7jhB%|6 z=Ms@{_)SW~yT=^g#BGcM~bEL;F9V{e5SeX71yNj&69~PUN!Vrir}mOvfX& zRBDcDNq>AIkIVz-!{a^H+9eT6O*7U-`SbLJ2lw=^I`(>1@T zX`#?N#MJSw5&MyvZX71q+L@z!Vci{v8LoTbG#|NUIGGDA{HW(4{!F%?n7q;Gh(%@g zw_D_JSlIW7_won|ZI3bK9slD213qrk2Xb{sD#q7MrEpz0g;FBUshj7v zjm_D>ay0M8K9#tim}WI7OmW7Ch|nojv(vmU6|{QWAVIb@iH&4-Lw#FO*npl>oXkAdavv^n2&IKg~Jn%vCthnPaF7IJ&IaG z2N&{Ym)^S;yfKbq#}Ds^rq@f!gNWWb=YyqG%WaSR@O0q$wz4dS>!tGL>B!5v62chC z)rpl|T|@`tt_}$PA=iH(DZ{I(ccdHY`NrY;BkS@NvrfuEKq$TP`S6M7+lwy9z4Bzw zR4TW+a*`+F@+&T#iQ$H!BkM$4qAoPOQl;@F|1IDAKfp+7H{D>H!xqav?bt393LnZp z;nn?wxo_^jSL$>_vcK@pm;WJuAOD|(_CeQ>Hi1**l5&FZ0(I8Bo%uS7lMLVf2%mm} z?F0CvijM67hi7>C5l$C%!1cQpP<4VZ?(zK$^X0o@OdoetKzNKy{d*3bn&Bb-SOok z*}ZCE1l;q5-hRKockpf{~nM$MVHJ@t5+Ik311Y$<+s6D9v;9JGD8U zqvP|EFje?kHM8n(Cd)6;5X~?AXg^}{+*mn{_YuSsd*Yw^ANW)LMw80l+Ryw{pLvpn zg0Q!pFYY5>%M12*8T@bS*mq}F%upIb@PW&I;XIw`t^L)da2M0)qfu%jl^fO^Kq^i= zu}16zVh|85+(ayUd1mpSDS4-GWp+OdGfzk9yB5Qxk!xlC;f4L@56mA|_Ui$m;?1P$ zUYp3%j$coRg=@ZYa%Xz)G*hWvsST|sj{f6gTz9LlSW%$j=%2X87X&y=Pt@8-`Gy2L zz_3oeIowmCu3CuL(5b6_HhZYh8+8ka?NCvZz$8c!wk@&Do^2}}4-2vX%3W?>_XBRZ zP~w7&rp3;YmOUk}YVYC}Ot;kZidrC#+Qm4m4IrHwHEj6b`?#O(RIw-bC;5;6$N#JU ztMvAtrg#fJ1Zj9reh({Q@naCV|KM{tm8=iuS84_`zBb7-ua!P*A)0JSptOl=)2mQErUk4y(8b8{j4 zzs06saEFBw8@URHgQulNY)aBLeS~*NMoeH5p?gb;!#>|Kcua~yT(5=G$vyZxdKIbc z`svB?{H=063+qjfne(a^yWKLUljn9Te0XwPE}408)T&{fhl4|;u&rm7!)J=Yt6)qc?lWPE7}M!SD7)Z%BSp0xa4u7;p!rpW)ntbBzN(^T3X1F) zf$0D#HNJc}@O;_mSvfS)I+L4NYs4ANky+eKEIZ8zrjD@IktPpX*xdgd20B)%`eIrK zw{_ST*pY-D%p;_%{K(o?EQUhCoihF92&XIUdVuqWDV~-D(;V$^Wlmp+;hEmySU$1)7i^u80^4*! zdf;3>0C08BfZ)U`--JLVqp4t)fCnZL7ex-#XK%nO01QTk{J zqeV@?6UgYg0y6wqzTx?S%vTJSMj1wR@HSp4NT0~=8DBmEjbhjFZxvt8WVa#xt>Eg? zkbXzXE#BS8<&1Y<$>kH??d0O|?n*9CSSgei@NP%&T-rCz=0I-_Vd9(oJzvZp$rMai z1JAGJ!Y6ma;dm(*&h`w_d961B4(BYPdv5iH6-Vk7D~dSg-Z)K(*FC5Ql`-@Jr;xcO zwTxd}r#5)Dzw)8{fm5iI-uX-Y%EH3N&OdcO@=|V0rgMuY?DWFi123#h1PYapoOtD? z6VHE-gYm!fybk_l$x5itsllgzz`g!6Zuynj%~)qyZ!2L5#65C4o=29HrSU z>@5DkmUc?L@pSl+HLe&_QKbKV4h@i~bfki{v-+4#-zdrB+Gh$c(5*IBWB+RN3$i}p zv2@cYQV5JZJ3P0ta&pJf@EG=bgATJhve#8FeFOO>%tx!dD>hp4h_M)(5vwYu`<`E; z9#gk8%BB_@O~Cr9w@|jE`YXxCXfj)nwUS{QP`U9oE;5kuPk!rvmKrQO&*ULR3=N-TA_aI{3o*rPH4f2!x5B?|r>;FrM`~MsW zy=Sq5Dc-7D)3++j^GvBbtyzM11JOCsyBQo98Ae5ohu%w?c6-*0oFzqea@nwUR%5v^ zQ{svkp*4dwZyV;$ovzO(OEL%81_@dkY;WO~rUQW{kpmYv=W z-Of-mb8ze>L$|uYR~>_tsy-p5dyL7LuGvXRo}g?@uIi{!WEA9{W(}B$7GJ;}5wa=+ zlCW6Kd=ful>Q3qw?+m3hHEFbllsd~|*|v&zDhc-9ydhT7P}9aRl4L7BK#CUUJFRw7 zhEE?IU!M!dqfmRtbW51vaw*KSqg5TRolb_79DXQ3?jxQ1@zkPHyH-%+Jnzf9F1Atn zXD0Uxxt|F}GpSq<;-&?Mm`2J+q~8dWVc)bSmo^Z(ph(&ws3UetN@y0NNQsIIJ1$t- z@b+kVY(K+4$vcLd_S>JW)nY1_yL-0&dl+Nnme6!$Gh#@j(<{u2un#{w=i7J1L2atk zn&&rLfcKAFbaY5J5E68uMu%N8Bo98**BN_K&Wqg^>bxUXn+{WfW~uYaoIaA+Xdy!v z4m@#_7wia{tb+?-Fjy>>z{Z6WU%2u77_kk^_ViN;O& zRK)Rj9c$|E?%i|UE7Ci4r`PZ&JbuH>?Cm?GPLqPd@$tb_7_X0ODOIJg7)N}bjd6B9|)u{f84H$oZ&Xb;5U z3_N#B9Ew-l9bzqp8?gpvQz!zlc!JFwL+8(X;p8iG`NS*F(2rDmA&9~CBO*I{_KLt^ zfXJaAiIQ;TOmY|KLX)PPl>a{-?@6lnaOftD$xdA3m06COwmxmNHQ(8MG>z6i*wsk{LY5#=%eA zQpMbhhcUhv45i+1_DJa!8+Q73#JEN!A$6j0q2rm{iPZms)Q@00t*&@`Aahd{SJQl~ zRt-5r5JMKN4P5Uqc}h%J>vezW4Qmft2-XCC=6mPT>Gwxi0zEesN{C=x|H;5Tay0ka zI#TN3te8PY^|YQTxoHw|-U;DADLYVgJTYW(`Xbt?=)-kb-~a$=bV)=(RL!g%&Rvq4 zi_WKOO|+V!sAH`)0dG6T`|ncBM~Dvyd1-GTthRI@C`LLabe7ri`dWz*YI`$8sLI#na#1;D z+$YSq3%xH7LT;->K033%p&mkS#fI^t(@D^hb}S6j?rDOS zwV=`KQE;Y`cKC3Z5#Q;fkO3_)?&82a0xqr5V%3ifRcP^$wu~0`7ksbJ~d=6Ks$&f_b1f z6OCs)Pc$?xg$Htzf2YXt<5yCSNpEDQ2u*gcU<;ickE7qe*Ck*SYw~Uv;_mXTYk+s( z22CIhq~}*$`+>;~ej9=l;agb={z?_-De%nCggeqC@LDf80gEb59fp_k%HkbcuLM^y zHgO~I$i0OOf&Hd}8Xsm~f=G;3^tA$SIG@Wok*vm%S z8a5bi`HCwiOc1>HIPdh{t~#1^&Z|$`ny~imo(Mi*@sCYdyrOg>6IGIi3%3b(`ZK)- zIBa+$&@FyZ<6Ki`a!cgw>9#Nt206PixdXNv4*mmc-Ka%ftUF-DlFde3cWuVKp{5L` zU~Gf#k?wT-nGBL0aR=}7Jy-a_NvgGCoFZ{*hCE|@C#Qypa$CJSA}x^mS6coE;f0zb zj*m3i@#a8HLD$}7!05!LyNEx+^ZlQ#(aotylfe1Sk0 z!PP=HMhl+aG1j`xSn1ZO%VhWNVIwU@D0#<-c|d%|Oq8L6>lBl~_qrOIz#doZ}F zYQTmjMLh_NXPORRs)j<6wJjbHVr>;a&A1WDSkkVn`ravdr?v*xV#bA6_DJ0$B_~?T zs=i8bq?kHDl>lPAlJm??jEPpEwYP;YrNs4mC4?}dBRsW~Av?6BxH8QLa@tvzg>6fu z*r~(AW|~wpoHA^AYIMhq<%opxu`^THg7%tdu59zR>fH8vX$Jnb+MD>I>^F;pQi->8xwQ7(dW7 zJ#5o7sY7*Xn0{ei7HVyrPC@0yGzuRO5><{s!x%$Kl~QC(7#+3f80xkb4hQuBvQAx2 zFrD++F->(iiW)s-9oi@ydKZ>M#%NFm9pIy--c^>u&={;qiQrZL{lpoF{#r{O&p4R(4RulVOXBOp(H{ z=LXX(dwYS)fxcwYzHymf@!1o)q9FA)V=$!Yg7k*#jx?=QGo+zLh?g{s9p8$X_eIXX z^U^ev~Bfi{MzPAHn z8{cVXzk3)!t?Xrt8afrv-vT>{3xOYLWIP`RvS-Hk9BDXIjBqz}{O!re=!Xmn{kulU zXOjPwkU!z-6TW;R`B!|g_@Zh$T~p)tpW|JzrecLN>T@zrs{a$UoUx{oa-

      Uz;nLx*`N8k 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

      _42mZ?u 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 - - - - - - - - - - - - - - - coverage - coverage - 26% - 26% - - diff --git a/bin/publish-pypi b/bin/publish-pypi new file mode 100644 index 0000000..826054e --- /dev/null +++ b/bin/publish-pypi @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +set -eux +mkdir -p dist +rye build --clean +rye publish --yes --token=$PYPI_TOKEN diff --git a/cookiecutter-config-file.yml b/cookiecutter-config-file.yml deleted file mode 100755 index 8db604d..0000000 --- a/cookiecutter-config-file.yml +++ /dev/null @@ -1,12 +0,0 @@ -# This file contains values from Cookiecutter - -default_context: - project_name: "youdotcom" - project_description: "official api wrapper for you.com and all of its apps" - organization: "youdotcom" - license: "MIT" - minimal_python_version: 3.8 - github_name: "silkepilon" - email: "silkepilon2009@gmail.com" - version: "0.1.2" - line_length: "200" diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100755 index 2858b21..0000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM python:3.11-slim-buster - -ENV LANG=C.UTF-8 \ - LC_ALL=C.UTF-8 \ - PATH="${PATH}:/root/.poetry/bin" - -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - curl \ - && rm -rf /var/lib/apt/lists/* - -COPY pyproject.toml ./ - -# Install Poetry -RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | POETRY_HOME=/opt/poetry python && \ - cd /usr/local/bin && \ - ln -s /opt/poetry/bin/poetry && \ - poetry config virtualenvs.create false - -# Allow installing dev dependencies to run tests -ARG INSTALL_DEV=false -RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --no-dev ; fi" - -CMD mkdir -p /workspace -WORKDIR /workspace diff --git a/docker/README.md b/docker/README.md deleted file mode 100755 index 819f9f7..0000000 --- a/docker/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Docker for youdotcom - -## Installation - -To create Docker you need to run: - -```bash -make docker-build -``` - -which is equivalent to: - -```bash -make docker-build VERSION=latest -``` - -You may provide name and version for the image. -Default name is `IMAGE := youdotcom`. -Default version is `VERSION := latest`. - -```bash -make docker-build IMAGE=some_name VERSION=0.1.0 -``` - -## Usage - -```bash -docker run -it --rm \ - -v $(pwd):/workspace \ - youdotcom bash -``` - -## How to clean up - -To uninstall docker image run `make docker-remove` with `VERSION`: - -```bash -make docker-remove VERSION=0.1.0 -``` - -you may also choose the image name - -```bash -make docker-remove IMAGE=some_name VERSION=latest -``` - -If you want to clean all, including `build` and `pycache` run `make cleanup` diff --git a/examples/.keep b/examples/.keep new file mode 100644 index 0000000..d8c73e9 --- /dev/null +++ b/examples/.keep @@ -0,0 +1,4 @@ +File generated from our OpenAPI spec by Stainless. + +This directory can be used to store example files demonstrating usage of this SDK. +It is ignored by Stainless code generation and its content (other than this keep file) won't be touched. \ No newline at end of file diff --git a/examples/youchat.py b/examples/youchat.py deleted file mode 100755 index 2066dcd..0000000 --- a/examples/youchat.py +++ /dev/null @@ -1,12 +0,0 @@ -from youdotcom.init import Init # import the Init class -from youdotcom.youchat import Chat # import YouChat - -driver = Init().driver # setting up the webdriver. use `webdriver_path=` if the pre-installed one does not work. - - -chat = Chat.send_message(driver=driver, message="what is the time?") # send a message to YouChat. passing the driver and messages - -driver.close() # close the webdriver - - -print(chat) # {'message': 'The current time is Saturday, December 31, 2022 09:47:30 UTC.', 'time': '25'} diff --git a/mypy.ini b/mypy.ini new file mode 100644 index 0000000..24ff066 --- /dev/null +++ b/mypy.ini @@ -0,0 +1,50 @@ +[mypy] +pretty = True +show_error_codes = True + +# Exclude _files.py because mypy isn't smart enough to apply +# the correct type narrowing and as this is an internal module +# it's fine to just use Pyright. +# +# We also exclude our `tests` as mypy doesn't always infer +# types correctly and Pyright will still catch any type errors. +exclude = ^(src/ydc_search_api/_files\.py|_dev/.*\.py|tests/.*)$ + +strict_equality = True +implicit_reexport = True +check_untyped_defs = True +no_implicit_optional = True + +warn_return_any = True +warn_unreachable = True +warn_unused_configs = True + +# Turn these options off as it could cause conflicts +# with the Pyright options. +warn_unused_ignores = False +warn_redundant_casts = False + +disallow_any_generics = True +disallow_untyped_defs = True +disallow_untyped_calls = True +disallow_subclassing_any = True +disallow_incomplete_defs = True +disallow_untyped_decorators = True +cache_fine_grained = True + +# By default, mypy reports an error if you assign a value to the result +# of a function call that doesn't return anything. We do this in our test +# cases: +# ``` +# result = ... +# assert result is None +# ``` +# Changing this codegen to make mypy happy would increase complexity +# and would not be worth it. +disable_error_code = func-returns-value,overload-cannot-match + +# https://github.com/python/mypy/issues/12162 +[mypy.overrides] +module = "black.files.*" +ignore_errors = true +ignore_missing_imports = true diff --git a/noxfile.py b/noxfile.py new file mode 100644 index 0000000..53bca7f --- /dev/null +++ b/noxfile.py @@ -0,0 +1,9 @@ +import nox + + +@nox.session(reuse_venv=True, name="test-pydantic-v1") +def test_pydantic_v1(session: nox.Session) -> None: + session.install("-r", "requirements-dev.lock") + session.install("pydantic<2") + + session.run("pytest", "--showlocals", "--ignore=tests/functional", *session.posargs) diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 07d8f6e..0000000 --- a/poetry.lock +++ /dev/null @@ -1,2263 +0,0 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. - -[[package]] -name = "aioredis" -version = "2.0.1" -description = "asyncio (PEP 3156) Redis support" -optional = false -python-versions = ">=3.6" -files = [ - {file = "aioredis-2.0.1-py3-none-any.whl", hash = "sha256:9ac0d0b3b485d293b8ca1987e6de8658d7dafcca1cddfcd1d506cae8cdebfdd6"}, - {file = "aioredis-2.0.1.tar.gz", hash = "sha256:eaa51aaf993f2d71f54b70527c440437ba65340588afeb786cd87c55c89cd98e"}, -] - -[package.dependencies] -async-timeout = "*" -typing-extensions = "*" - -[package.extras] -hiredis = ["hiredis (>=1.0)"] - -[[package]] -name = "anyio" -version = "3.6.2" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.6.2" -files = [ - {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, -] - -[package.dependencies] -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16,<0.22)"] - -[[package]] -name = "ascii-magic" -version = "1.6" -description = "Converts pictures into ASCII art" -optional = false -python-versions = ">=3.5" -files = [ - {file = "ascii_magic-1.6-py3-none-any.whl", hash = "sha256:937447d8677b7428856729c298c0264afd62fc2b8e7ff90c82000492cdc5f8d4"}, - {file = "ascii_magic-1.6.tar.gz", hash = "sha256:7da5518f7368e73f11e2151a0c060804aa149e267b369b7ee7653fbd7b046a51"}, -] - -[package.dependencies] -colorama = "*" -Pillow = "*" - -[[package]] -name = "astroid" -version = "2.14.2" -description = "An abstract syntax tree for Python with inference support." -optional = false -python-versions = ">=3.7.2" -files = [ - {file = "astroid-2.14.2-py3-none-any.whl", hash = "sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153"}, - {file = "astroid-2.14.2.tar.gz", hash = "sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf"}, -] - -[package.dependencies] -lazy-object-proxy = ">=1.4.0" -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} -wrapt = [ - {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, -] - -[[package]] -name = "async-generator" -version = "1.10" -description = "Async generators and context managers for Python 3.5+" -optional = false -python-versions = ">=3.5" -files = [ - {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"}, - {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, -] - -[[package]] -name = "async-timeout" -version = "4.0.2" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.6" -files = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, -] - -[[package]] -name = "attrs" -version = "22.2.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.6" -files = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs[tests-no-zope]", "zope.interface"] -tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] - -[[package]] -name = "bandit" -version = "1.7.4" -description = "Security oriented static analyser for python code." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, - {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" -PyYAML = ">=5.3.1" -stevedore = ">=1.20.0" - -[package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml"] -toml = ["toml"] -yaml = ["PyYAML"] - -[[package]] -name = "beautifulsoup4" -version = "4.11.2" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "beautifulsoup4-4.11.2-py3-none-any.whl", hash = "sha256:0e79446b10b3ecb499c1556f7e228a53e64a2bfcebd455f370d8927cb5b59e39"}, - {file = "beautifulsoup4-4.11.2.tar.gz", hash = "sha256:bc4bdda6717de5a2987436fb8d72f45dc90dd856bdfd512a1314ce90349a0106"}, -] - -[package.dependencies] -soupsieve = ">1.2" - -[package.extras] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "black" -version = "22.12.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.7" -files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "certifi" -version = "2022.12.7" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] - -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "cfgv" -version = "3.3.1" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.0.1" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = "*" -files = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, -] - -[[package]] -name = "chromedriver-autoinstaller" -version = "0.4.0" -description = "Automatically install chromedriver that supports the currently installed version of chrome." -optional = false -python-versions = ">=3.6" -files = [ - {file = "chromedriver-autoinstaller-0.4.0.tar.gz", hash = "sha256:57f15f40d2e356c4cb84870cb7f882283a8280118bedacbf19301dd692f672b5"}, - {file = "chromedriver_autoinstaller-0.4.0-py3-none-any.whl", hash = "sha256:1534d39903d22379ff13435d695703ae9b14ddb336d43556fd7735854ada6d2b"}, -] - -[[package]] -name = "click" -version = "8.1.4" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.4-py3-none-any.whl", hash = "sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3"}, - {file = "click-8.1.4.tar.gz", hash = "sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "click-shell" -version = "2.1" -description = "An extension to click that easily turns your click app into a shell utility" -optional = false -python-versions = "*" -files = [ - {file = "click-shell-2.1.tar.gz", hash = "sha256:ce0c91faae284c41a39bec966f928791ad4a45763755445f1fe2041fd091aa37"}, - {file = "click_shell-2.1-py2.py3-none-any.whl", hash = "sha256:2d971a2e50eb7ad387cf0ce79ba4b844e66e0580784e2efe2df58b50a2f047f0"}, -] - -[package.dependencies] -click = ">=6.0" - -[package.extras] -readline = ["gnureadline"] -windows = ["pyreadline"] - -[[package]] -name = "cloudscraper" -version = "1.2.69" -description = "A Python module to bypass Cloudflare's anti-bot page." -optional = false -python-versions = "*" -files = [ - {file = "cloudscraper-1.2.69-py2.py3-none-any.whl", hash = "sha256:ad1e70be61fa071bc9a1409c2f419687b49a1780405ad8a226df59b52fb135db"}, - {file = "cloudscraper-1.2.69.tar.gz", hash = "sha256:1ff4befeeae63a67076c0264515162935981dd5d51552f052dc266bf64997345"}, -] - -[package.dependencies] -pyparsing = ">=2.4.7" -requests = ">=2.9.2" -requests-toolbelt = ">=0.9.1" - -[[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 = "coverage" -version = "7.2.3" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "coverage-7.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e58c0d41d336569d63d1b113bd573db8363bc4146f39444125b7f8060e4e04f5"}, - {file = "coverage-7.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:344e714bd0fe921fc72d97404ebbdbf9127bac0ca1ff66d7b79efc143cf7c0c4"}, - {file = "coverage-7.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:974bc90d6f6c1e59ceb1516ab00cf1cdfbb2e555795d49fa9571d611f449bcb2"}, - {file = "coverage-7.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0743b0035d4b0e32bc1df5de70fba3059662ace5b9a2a86a9f894cfe66569013"}, - {file = "coverage-7.2.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d0391fb4cfc171ce40437f67eb050a340fdbd0f9f49d6353a387f1b7f9dd4fa"}, - {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a42e1eff0ca9a7cb7dc9ecda41dfc7cbc17cb1d02117214be0561bd1134772b"}, - {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:be19931a8dcbe6ab464f3339966856996b12a00f9fe53f346ab3be872d03e257"}, - {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72fcae5bcac3333a4cf3b8f34eec99cea1187acd55af723bcbd559adfdcb5535"}, - {file = "coverage-7.2.3-cp310-cp310-win32.whl", hash = "sha256:aeae2aa38395b18106e552833f2a50c27ea0000122bde421c31d11ed7e6f9c91"}, - {file = "coverage-7.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:83957d349838a636e768251c7e9979e899a569794b44c3728eaebd11d848e58e"}, - {file = "coverage-7.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfd393094cd82ceb9b40df4c77976015a314b267d498268a076e940fe7be6b79"}, - {file = "coverage-7.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182eb9ac3f2b4874a1f41b78b87db20b66da6b9cdc32737fbbf4fea0c35b23fc"}, - {file = "coverage-7.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bb1e77a9a311346294621be905ea8a2c30d3ad371fc15bb72e98bfcfae532df"}, - {file = "coverage-7.2.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0f34363e2634deffd390a0fef1aa99168ae9ed2af01af4a1f5865e362f8623"}, - {file = "coverage-7.2.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55416d7385774285b6e2a5feca0af9652f7f444a4fa3d29d8ab052fafef9d00d"}, - {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:06ddd9c0249a0546997fdda5a30fbcb40f23926df0a874a60a8a185bc3a87d93"}, - {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fff5aaa6becf2c6a1699ae6a39e2e6fb0672c2d42eca8eb0cafa91cf2e9bd312"}, - {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ea53151d87c52e98133eb8ac78f1206498c015849662ca8dc246255265d9c3c4"}, - {file = "coverage-7.2.3-cp311-cp311-win32.whl", hash = "sha256:8f6c930fd70d91ddee53194e93029e3ef2aabe26725aa3c2753df057e296b925"}, - {file = "coverage-7.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:fa546d66639d69aa967bf08156eb8c9d0cd6f6de84be9e8c9819f52ad499c910"}, - {file = "coverage-7.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b2317d5ed777bf5a033e83d4f1389fd4ef045763141d8f10eb09a7035cee774c"}, - {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be9824c1c874b73b96288c6d3de793bf7f3a597770205068c6163ea1f326e8b9"}, - {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c3b2803e730dc2797a017335827e9da6da0e84c745ce0f552e66400abdfb9a1"}, - {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f69770f5ca1994cb32c38965e95f57504d3aea96b6c024624fdd5bb1aa494a1"}, - {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1127b16220f7bfb3f1049ed4a62d26d81970a723544e8252db0efde853268e21"}, - {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:aa784405f0c640940595fa0f14064d8e84aff0b0f762fa18393e2760a2cf5841"}, - {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3146b8e16fa60427e03884301bf8209221f5761ac754ee6b267642a2fd354c48"}, - {file = "coverage-7.2.3-cp37-cp37m-win32.whl", hash = "sha256:1fd78b911aea9cec3b7e1e2622c8018d51c0d2bbcf8faaf53c2497eb114911c1"}, - {file = "coverage-7.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f3736a5d34e091b0a611964c6262fd68ca4363df56185902528f0b75dbb9c1f"}, - {file = "coverage-7.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:981b4df72c93e3bc04478153df516d385317628bd9c10be699c93c26ddcca8ab"}, - {file = "coverage-7.2.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0045f8f23a5fb30b2eb3b8a83664d8dc4fb58faddf8155d7109166adb9f2040"}, - {file = "coverage-7.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f760073fcf8f3d6933178d67754f4f2d4e924e321f4bb0dcef0424ca0215eba1"}, - {file = "coverage-7.2.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c86bd45d1659b1ae3d0ba1909326b03598affbc9ed71520e0ff8c31a993ad911"}, - {file = "coverage-7.2.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:172db976ae6327ed4728e2507daf8a4de73c7cc89796483e0a9198fd2e47b462"}, - {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d2a3a6146fe9319926e1d477842ca2a63fe99af5ae690b1f5c11e6af074a6b5c"}, - {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f649dd53833b495c3ebd04d6eec58479454a1784987af8afb77540d6c1767abd"}, - {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c4ed4e9f3b123aa403ab424430b426a1992e6f4c8fd3cb56ea520446e04d152"}, - {file = "coverage-7.2.3-cp38-cp38-win32.whl", hash = "sha256:eb0edc3ce9760d2f21637766c3aa04822030e7451981ce569a1b3456b7053f22"}, - {file = "coverage-7.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:63cdeaac4ae85a179a8d6bc09b77b564c096250d759eed343a89d91bce8b6367"}, - {file = "coverage-7.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20d1a2a76bb4eb00e4d36b9699f9b7aba93271c9c29220ad4c6a9581a0320235"}, - {file = "coverage-7.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ea748802cc0de4de92ef8244dd84ffd793bd2e7be784cd8394d557a3c751e21"}, - {file = "coverage-7.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21b154aba06df42e4b96fc915512ab39595105f6c483991287021ed95776d934"}, - {file = "coverage-7.2.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd214917cabdd6f673a29d708574e9fbdb892cb77eb426d0eae3490d95ca7859"}, - {file = "coverage-7.2.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c2e58e45fe53fab81f85474e5d4d226eeab0f27b45aa062856c89389da2f0d9"}, - {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:87ecc7c9a1a9f912e306997ffee020297ccb5ea388421fe62a2a02747e4d5539"}, - {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:387065e420aed3c71b61af7e82c7b6bc1c592f7e3c7a66e9f78dd178699da4fe"}, - {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ea3f5bc91d7d457da7d48c7a732beaf79d0c8131df3ab278e6bba6297e23c6c4"}, - {file = "coverage-7.2.3-cp39-cp39-win32.whl", hash = "sha256:ae7863a1d8db6a014b6f2ff9c1582ab1aad55a6d25bac19710a8df68921b6e30"}, - {file = "coverage-7.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:3f04becd4fcda03c0160d0da9c8f0c246bc78f2f7af0feea1ec0930e7c93fa4a"}, - {file = "coverage-7.2.3-pp37.pp38.pp39-none-any.whl", hash = "sha256:965ee3e782c7892befc25575fa171b521d33798132692df428a09efacaffe8d0"}, - {file = "coverage-7.2.3.tar.gz", hash = "sha256:d298c2815fa4891edd9abe5ad6e6cb4207104c7dd9fd13aea3fdebf6f9b91259"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "coverage-badge" -version = "1.1.0" -description = "Generate coverage badges for Coverage.py." -optional = false -python-versions = "*" -files = [ - {file = "coverage-badge-1.1.0.tar.gz", hash = "sha256:c824a106503e981c02821e7d32f008fb3984b2338aa8c3800ec9357e33345b78"}, - {file = "coverage_badge-1.1.0-py2.py3-none-any.whl", hash = "sha256:e365d56e5202e923d1b237f82defd628a02d1d645a147f867ac85c58c81d7997"}, -] - -[package.dependencies] -coverage = "*" - -[[package]] -name = "darglint" -version = "1.8.1" -description = "A utility for ensuring Google-style docstrings stay up to date with the source code." -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "darglint-1.8.1-py3-none-any.whl", hash = "sha256:5ae11c259c17b0701618a20c3da343a3eb98b3bc4b5a83d31cdd94f5ebdced8d"}, - {file = "darglint-1.8.1.tar.gz", hash = "sha256:080d5106df149b199822e7ee7deb9c012b49891538f14a11be681044f0bb20da"}, -] - -[[package]] -name = "deprecated" -version = "1.2.13" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, - {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, -] - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] - -[[package]] -name = "dill" -version = "0.3.6" -description = "serialize all of python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, - {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, -] - -[package.extras] -graph = ["objgraph (>=1.7.2)"] - -[[package]] -name = "distlib" -version = "0.3.6" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, -] - -[[package]] -name = "dparse" -version = "0.6.2" -description = "A parser for Python dependency files" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dparse-0.6.2-py3-none-any.whl", hash = "sha256:8097076f1dd26c377f30d4745e6ec18fef42f3bf493933b842ac5bafad8c345f"}, - {file = "dparse-0.6.2.tar.gz", hash = "sha256:d45255bda21f998bc7ddf2afd5e62505ba6134756ba2d42a84c56b0826614dfe"}, -] - -[package.dependencies] -packaging = "*" -toml = "*" - -[package.extras] -conda = ["pyyaml"] -pipenv = ["pipenv"] - -[[package]] -name = "exceptiongroup" -version = "1.1.0" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastapi" -version = "0.92.0" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.7" -files = [ - {file = "fastapi-0.92.0-py3-none-any.whl", hash = "sha256:ae7b97c778e2f2ec3fb3cb4fb14162129411d99907fb71920f6d69a524340ebf"}, - {file = "fastapi-0.92.0.tar.gz", hash = "sha256:023a0f5bd2c8b2609014d3bba1e14a1d7df96c6abea0a73070621c9862b9a4de"}, -] - -[package.dependencies] -pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" -starlette = ">=0.25.0,<0.26.0" - -[package.extras] -all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -dev = ["pre-commit (>=2.17.0,<3.0.0)", "ruff (==0.0.138)", "uvicorn[standard] (>=0.12.0,<0.21.0)"] -doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer[all] (>=0.6.1,<0.8.0)"] -test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.10.0)", "coverage[toml] (>=6.5.0,<8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.982)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "ruff (==0.0.138)", "sqlalchemy (>=1.3.18,<1.4.43)", "types-orjson (==3.6.2)", "types-ujson (==5.6.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"] - -[[package]] -name = "fastapi-queue" -version = "0.1.1" -description = "A task queue based on redis that can serve as a peak shaver and protect your app." -optional = false -python-versions = ">=3.7" -files = [ - {file = "fastapi-queue-0.1.1.tar.gz", hash = "sha256:6a9ff8250adb0dcff2b507b2b78bac2197ed2af2b9aa50f690ef05910ed67a3d"}, - {file = "fastapi_queue-0.1.1-py3-none-any.whl", hash = "sha256:ea9d7599cee3a1901aa2a0b51382cb9875d9cedb07f91d7b863cb2ca8a0c2be0"}, -] - -[package.dependencies] -aioredis = "*" -fastapi = {version = "*", extras = ["standard"]} -loguru = "*" -msgpack = ">=1.0.0" -ThreadPoolExecutorPlus = "*" -uvicorn = "*" - -[[package]] -name = "filelock" -version = "3.11.0" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.11.0-py3-none-any.whl", hash = "sha256:f08a52314748335c6460fc8fe40cd5638b85001225db78c2aa01c8c0db83b318"}, - {file = "filelock-3.11.0.tar.gz", hash = "sha256:3618c0da67adcc0506b015fd11ef7faf1b493f0b40d87728e19986b536890c37"}, -] - -[package.extras] -docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.2)", "diff-cover (>=7.5)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "gitdb" -version = "4.0.10" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.31" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, - {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[[package]] -name = "gtts" -version = "2.3.1" -description = "gTTS (Google Text-to-Speech), a Python library and CLI tool to interface with Google Translate text-to-speech API" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gTTS-2.3.1-py3-none-any.whl", hash = "sha256:7123ba91d415340f3264266adc195ff69f89b07f97ddafcfe48c9dad66f005c8"}, - {file = "gTTS-2.3.1.tar.gz", hash = "sha256:fad26bccf0408aa8373ca8323f10731dc5b0c59eb5a0617591efe47ff30d4fcb"}, -] - -[package.dependencies] -click = ">=7.1,<8.2" -requests = ">=2.27,<3" - -[package.extras] -docs = ["sphinx", "sphinx-autobuild", "sphinx-click", "sphinx-mdinclude", "sphinx-rtd-theme"] -tests = ["pytest (>=7.1.3,<7.2.0)", "pytest-cov", "testfixtures"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "identify" -version = "2.5.18" -description = "File identification library for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "identify-2.5.18-py2.py3-none-any.whl", hash = "sha256:93aac7ecf2f6abf879b8f29a8002d3c6de7086b8c28d88e1ad15045a15ab63f9"}, - {file = "identify-2.5.18.tar.gz", hash = "sha256:89e144fa560cc4cffb6ef2ab5e9fb18ed9f9b3cb054384bab4b95c12f6c309fe"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[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 = "5.12.0" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, -] - -[package.dependencies] -colorama = {version = ">=0.4.3", optional = true, markers = "extra == \"colors\""} - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - -[[package]] -name = "lazy-object-proxy" -version = "1.9.0" -description = "A fast and thorough lazy object proxy." -optional = false -python-versions = ">=3.7" -files = [ - {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, -] - -[[package]] -name = "limits" -version = "2.8.0" -description = "Rate limiting utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "limits-2.8.0-py3-none-any.whl", hash = "sha256:ee19e9a98dd392d52dd62cfc28d93710eb29a22cf9834c21c16ee19367c4d596"}, - {file = "limits-2.8.0.tar.gz", hash = "sha256:b47e01c48b3b677c7230cb51775ebe7c30a574e9711dc68499dab810ed883bb9"}, -] - -[package.dependencies] -deprecated = ">=1.2" -packaging = ">=21,<23" -setuptools = "*" -typing-extensions = "*" - -[package.extras] -all = ["coredis (>=3.4.0,<5)", "emcache (>=0.6.1)", "motor (>=2.5,<4)", "pymemcache (>3,<5.0.0)", "pymongo (>3,<5)", "redis (>3,<5.0.0)", "redis (>=4.2.0)"] -async-memcached = ["emcache (>=0.6.1)"] -async-mongodb = ["motor (>=2.5,<4)"] -async-redis = ["coredis (>=3.4.0,<5)"] -memcached = ["pymemcache (>3,<5.0.0)"] -mongodb = ["pymongo (>3,<5)"] -redis = ["redis (>3,<5.0.0)"] -rediscluster = ["redis (>=4.2.0)"] - -[[package]] -name = "loguru" -version = "0.6.0" -description = "Python logging made (stupidly) simple" -optional = false -python-versions = ">=3.5" -files = [ - {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, - {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (>=4.1.1)", "black (>=19.10b0)", "colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "isort (>=5.1.1)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "tox (>=3.9.0)"] - -[[package]] -name = "markdown-it-py" -version = "2.2.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.7" -files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, -] - -[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 = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markdownify" -version = "0.11.6" -description = "Convert HTML to markdown." -optional = false -python-versions = "*" -files = [ - {file = "markdownify-0.11.6-py3-none-any.whl", hash = "sha256:ba35fe289d5e9073bcd7d2cad629278fe25f1a93741fcdc0bfb4f009076d8324"}, - {file = "markdownify-0.11.6.tar.gz", hash = "sha256:009b240e0c9f4c8eaf1d085625dcd4011e12f0f8cec55dedf9ea6f7655e49bfe"}, -] - -[package.dependencies] -beautifulsoup4 = ">=4.9,<5" -six = ">=1.15,<2" - -[[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 = "msgpack" -version = "1.0.4" -description = "MessagePack serializer" -optional = false -python-versions = "*" -files = [ - {file = "msgpack-1.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250"}, - {file = "msgpack-1.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88"}, - {file = "msgpack-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467"}, - {file = "msgpack-1.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6"}, - {file = "msgpack-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa"}, - {file = "msgpack-1.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb514ad14edf07a1dbe63761fd30f89ae79b42625731e1ccf5e1f1092950eaa6"}, - {file = "msgpack-1.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c23080fdeec4716aede32b4e0ef7e213c7b1093eede9ee010949f2a418ced6ba"}, - {file = "msgpack-1.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e"}, - {file = "msgpack-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:aca0f1644d6b5a73eb3e74d4d64d5d8c6c3d577e753a04c9e9c87d07692c58db"}, - {file = "msgpack-1.0.4-cp310-cp310-win32.whl", hash = "sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef"}, - {file = "msgpack-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075"}, - {file = "msgpack-1.0.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e83f80a7fec1a62cf4e6c9a660e39c7f878f603737a0cdac8c13131d11d97f52"}, - {file = "msgpack-1.0.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9"}, - {file = "msgpack-1.0.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9"}, - {file = "msgpack-1.0.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08"}, - {file = "msgpack-1.0.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fcb8a47f43acc113e24e910399376f7277cf8508b27e5b88499f053de6b115a8"}, - {file = "msgpack-1.0.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6"}, - {file = "msgpack-1.0.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae"}, - {file = "msgpack-1.0.4-cp36-cp36m-win32.whl", hash = "sha256:85f279d88d8e833ec015650fd15ae5eddce0791e1e8a59165318f371158efec6"}, - {file = "msgpack-1.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:c1683841cd4fa45ac427c18854c3ec3cd9b681694caf5bff04edb9387602d661"}, - {file = "msgpack-1.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a75dfb03f8b06f4ab093dafe3ddcc2d633259e6c3f74bb1b01996f5d8aa5868c"}, - {file = "msgpack-1.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9667bdfdf523c40d2511f0e98a6c9d3603be6b371ae9a238b7ef2dc4e7a427b0"}, - {file = "msgpack-1.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227"}, - {file = "msgpack-1.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac5bd7901487c4a1dd51a8c58f2632b15d838d07ceedaa5e4c080f7190925bff"}, - {file = "msgpack-1.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd"}, - {file = "msgpack-1.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e"}, - {file = "msgpack-1.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236"}, - {file = "msgpack-1.0.4-cp37-cp37m-win32.whl", hash = "sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44"}, - {file = "msgpack-1.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:eba96145051ccec0ec86611fe9cf693ce55f2a3ce89c06ed307de0e085730ec1"}, - {file = "msgpack-1.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d"}, - {file = "msgpack-1.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab"}, - {file = "msgpack-1.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d603de2b8d2ea3f3bcb2efe286849aa7a81531abc52d8454da12f46235092bcb"}, - {file = "msgpack-1.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9"}, - {file = "msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e"}, - {file = "msgpack-1.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81fc7ba725464651190b196f3cd848e8553d4d510114a954681fd0b9c479d7e1"}, - {file = "msgpack-1.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d5b5b962221fa2c5d3a7f8133f9abffc114fe218eb4365e40f17732ade576c8e"}, - {file = "msgpack-1.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43"}, - {file = "msgpack-1.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b17be2478b622939e39b816e0aa8242611cc8d3583d1cd8ec31b249f04623243"}, - {file = "msgpack-1.0.4-cp38-cp38-win32.whl", hash = "sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2"}, - {file = "msgpack-1.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6"}, - {file = "msgpack-1.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae"}, - {file = "msgpack-1.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55"}, - {file = "msgpack-1.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f0029245c51fd9473dc1aede1160b0a29f4a912e6b1dd353fa6d317085b219da"}, - {file = "msgpack-1.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed6f7b854a823ea44cf94919ba3f727e230da29feb4a99711433f25800cf747f"}, - {file = "msgpack-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92"}, - {file = "msgpack-1.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f"}, - {file = "msgpack-1.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624"}, - {file = "msgpack-1.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8"}, - {file = "msgpack-1.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae"}, - {file = "msgpack-1.0.4-cp39-cp39-win32.whl", hash = "sha256:fb62ea4b62bfcb0b380d5680f9a4b3f9a2d166d9394e9bbd9666c0ee09a3645c"}, - {file = "msgpack-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce"}, - {file = "msgpack-1.0.4.tar.gz", hash = "sha256:f5d869c18f030202eb412f08b28d2afeea553d6613aee89e200d7aca7ef01f5f"}, -] - -[[package]] -name = "mypy" -version = "1.0.1" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, - {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, - {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, - {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, - {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, - {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, - {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, - {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, - {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, - {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, - {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, - {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, - {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, - {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, - {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, - {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, - {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, - {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, - {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, - {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, -] - -[package.dependencies] -mypy-extensions = ">=0.4.3" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=3.10" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -python2 = ["typed-ast (>=1.4.0,<2)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nodeenv" -version = "1.7.0" -description = "Node.js virtual environment builder" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, - {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "outcome" -version = "1.2.0" -description = "Capture the outcome of Python function calls." -optional = false -python-versions = ">=3.7" -files = [ - {file = "outcome-1.2.0-py2.py3-none-any.whl", hash = "sha256:c4ab89a56575d6d38a05aa16daeaa333109c1f96167aba8901ab18b6b5e0f7f5"}, - {file = "outcome-1.2.0.tar.gz", hash = "sha256:6f82bd3de45da303cf1f771ecafa1633750a358436a8bb60e06a1ceb745d2672"}, -] - -[package.dependencies] -attrs = ">=19.2.0" - -[[package]] -name = "packaging" -version = "21.3" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.6" -files = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" - -[[package]] -name = "pathspec" -version = "0.11.0" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, - {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, -] - -[[package]] -name = "pbr" -version = "5.11.1" -description = "Python Build Reasonableness" -optional = false -python-versions = ">=2.6" -files = [ - {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, - {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, -] - -[[package]] -name = "pillow" -version = "9.4.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pillow-9.4.0-1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b4b4e9dda4f4e4c4e6896f93e84a8f0bcca3b059de9ddf67dac3c334b1195e1"}, - {file = "Pillow-9.4.0-1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fb5c1ad6bad98c57482236a21bf985ab0ef42bd51f7ad4e4538e89a997624e12"}, - {file = "Pillow-9.4.0-1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:f0caf4a5dcf610d96c3bd32932bfac8aee61c96e60481c2a0ea58da435e25acd"}, - {file = "Pillow-9.4.0-1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3f4cc516e0b264c8d4ccd6b6cbc69a07c6d582d8337df79be1e15a5056b258c9"}, - {file = "Pillow-9.4.0-1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b8c2f6eb0df979ee99433d8b3f6d193d9590f735cf12274c108bd954e30ca858"}, - {file = "Pillow-9.4.0-1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b70756ec9417c34e097f987b4d8c510975216ad26ba6e57ccb53bc758f490dab"}, - {file = "Pillow-9.4.0-1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:43521ce2c4b865d385e78579a082b6ad1166ebed2b1a2293c3be1d68dd7ca3b9"}, - {file = "Pillow-9.4.0-2-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:9d9a62576b68cd90f7075876f4e8444487db5eeea0e4df3ba298ee38a8d067b0"}, - {file = "Pillow-9.4.0-2-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:87708d78a14d56a990fbf4f9cb350b7d89ee8988705e58e39bdf4d82c149210f"}, - {file = "Pillow-9.4.0-2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8a2b5874d17e72dfb80d917213abd55d7e1ed2479f38f001f264f7ce7bae757c"}, - {file = "Pillow-9.4.0-2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:83125753a60cfc8c412de5896d10a0a405e0bd88d0470ad82e0869ddf0cb3848"}, - {file = "Pillow-9.4.0-2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9e5f94742033898bfe84c93c831a6f552bb629448d4072dd312306bab3bd96f1"}, - {file = "Pillow-9.4.0-2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:013016af6b3a12a2f40b704677f8b51f72cb007dac785a9933d5c86a72a7fe33"}, - {file = "Pillow-9.4.0-2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:99d92d148dd03fd19d16175b6d355cc1b01faf80dae93c6c3eb4163709edc0a9"}, - {file = "Pillow-9.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:2968c58feca624bb6c8502f9564dd187d0e1389964898f5e9e1fbc8533169157"}, - {file = "Pillow-9.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c5c1362c14aee73f50143d74389b2c158707b4abce2cb055b7ad37ce60738d47"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd752c5ff1b4a870b7661234694f24b1d2b9076b8bf337321a814c612665f343"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3049a10261d7f2b6514d35bbb7a4dfc3ece4c4de14ef5876c4b7a23a0e566d"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16a8df99701f9095bea8a6c4b3197da105df6f74e6176c5b410bc2df2fd29a57"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:94cdff45173b1919350601f82d61365e792895e3c3a3443cf99819e6fbf717a5"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ed3e4b4e1e6de75fdc16d3259098de7c6571b1a6cc863b1a49e7d3d53e036070"}, - {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5b2f8a31bd43e0f18172d8ac82347c8f37ef3e0b414431157718aa234991b28"}, - {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:09b89ddc95c248ee788328528e6a2996e09eaccddeeb82a5356e92645733be35"}, - {file = "Pillow-9.4.0-cp310-cp310-win32.whl", hash = "sha256:f09598b416ba39a8f489c124447b007fe865f786a89dbfa48bb5cf395693132a"}, - {file = "Pillow-9.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6e78171be3fb7941f9910ea15b4b14ec27725865a73c15277bc39f5ca4f8391"}, - {file = "Pillow-9.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:3fa1284762aacca6dc97474ee9c16f83990b8eeb6697f2ba17140d54b453e133"}, - {file = "Pillow-9.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eaef5d2de3c7e9b21f1e762f289d17b726c2239a42b11e25446abf82b26ac132"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4dfdae195335abb4e89cc9762b2edc524f3c6e80d647a9a81bf81e17e3fb6f0"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6abfb51a82e919e3933eb137e17c4ae9c0475a25508ea88993bb59faf82f3b35"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451f10ef963918e65b8869e17d67db5e2f4ab40e716ee6ce7129b0cde2876eab"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6663977496d616b618b6cfa43ec86e479ee62b942e1da76a2c3daa1c75933ef4"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:60e7da3a3ad1812c128750fc1bc14a7ceeb8d29f77e0a2356a8fb2aa8925287d"}, - {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:19005a8e58b7c1796bc0167862b1f54a64d3b44ee5d48152b06bb861458bc0f8"}, - {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f715c32e774a60a337b2bb8ad9839b4abf75b267a0f18806f6f4f5f1688c4b5a"}, - {file = "Pillow-9.4.0-cp311-cp311-win32.whl", hash = "sha256:b222090c455d6d1a64e6b7bb5f4035c4dff479e22455c9eaa1bdd4c75b52c80c"}, - {file = "Pillow-9.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba6612b6548220ff5e9df85261bddc811a057b0b465a1226b39bfb8550616aee"}, - {file = "Pillow-9.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5f532a2ad4d174eb73494e7397988e22bf427f91acc8e6ebf5bb10597b49c493"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dd5a9c3091a0f414a963d427f920368e2b6a4c2f7527fdd82cde8ef0bc7a327"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef21af928e807f10bf4141cad4746eee692a0dd3ff56cfb25fce076ec3cc8abe"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:847b114580c5cc9ebaf216dd8c8dbc6b00a3b7ab0131e173d7120e6deade1f57"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:653d7fb2df65efefbcbf81ef5fe5e5be931f1ee4332c2893ca638c9b11a409c4"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:46f39cab8bbf4a384ba7cb0bc8bae7b7062b6a11cfac1ca4bc144dea90d4a9f5"}, - {file = "Pillow-9.4.0-cp37-cp37m-win32.whl", hash = "sha256:7ac7594397698f77bce84382929747130765f66406dc2cd8b4ab4da68ade4c6e"}, - {file = "Pillow-9.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:46c259e87199041583658457372a183636ae8cd56dbf3f0755e0f376a7f9d0e6"}, - {file = "Pillow-9.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:0e51f608da093e5d9038c592b5b575cadc12fd748af1479b5e858045fff955a9"}, - {file = "Pillow-9.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:765cb54c0b8724a7c12c55146ae4647e0274a839fb6de7bcba841e04298e1011"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:519e14e2c49fcf7616d6d2cfc5c70adae95682ae20f0395e9280db85e8d6c4df"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d197df5489004db87d90b918033edbeee0bd6df3848a204bca3ff0a903bef837"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0845adc64fe9886db00f5ab68c4a8cd933ab749a87747555cec1c95acea64b0b"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e1339790c083c5a4de48f688b4841f18df839eb3c9584a770cbd818b33e26d5d"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:a96e6e23f2b79433390273eaf8cc94fec9c6370842e577ab10dabdcc7ea0a66b"}, - {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7cfc287da09f9d2a7ec146ee4d72d6ea1342e770d975e49a8621bf54eaa8f30f"}, - {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d7081c084ceb58278dd3cf81f836bc818978c0ccc770cbbb202125ddabec6628"}, - {file = "Pillow-9.4.0-cp38-cp38-win32.whl", hash = "sha256:df41112ccce5d47770a0c13651479fbcd8793f34232a2dd9faeccb75eb5d0d0d"}, - {file = "Pillow-9.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a21222644ab69ddd9967cfe6f2bb420b460dae4289c9d40ff9a4896e7c35c9a"}, - {file = "Pillow-9.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0f3269304c1a7ce82f1759c12ce731ef9b6e95b6df829dccd9fe42912cc48569"}, - {file = "Pillow-9.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cb362e3b0976dc994857391b776ddaa8c13c28a16f80ac6522c23d5257156bed"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e0f87144fcbbe54297cae708c5e7f9da21a4646523456b00cc956bd4c65815"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28676836c7796805914b76b1837a40f76827ee0d5398f72f7dcc634bae7c6264"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0884ba7b515163a1a05440a138adeb722b8a6ae2c2b33aea93ea3118dd3a899e"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:53dcb50fbdc3fb2c55431a9b30caeb2f7027fcd2aeb501459464f0214200a503"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:e8c5cf126889a4de385c02a2c3d3aba4b00f70234bfddae82a5eaa3ee6d5e3e6"}, - {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c6b1389ed66cdd174d040105123a5a1bc91d0aa7059c7261d20e583b6d8cbd2"}, - {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0dd4c681b82214b36273c18ca7ee87065a50e013112eea7d78c7a1b89a739153"}, - {file = "Pillow-9.4.0-cp39-cp39-win32.whl", hash = "sha256:6d9dfb9959a3b0039ee06c1a1a90dc23bac3b430842dcb97908ddde05870601c"}, - {file = "Pillow-9.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:54614444887e0d3043557d9dbc697dbb16cfb5a35d672b7a0fcc1ed0cf1c600b"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b9b752ab91e78234941e44abdecc07f1f0d8f51fb62941d32995b8161f68cfe5"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3b56206244dc8711f7e8b7d6cad4663917cd5b2d950799425076681e8766286"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aabdab8ec1e7ca7f1434d042bf8b1e92056245fb179790dc97ed040361f16bfd"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db74f5562c09953b2c5f8ec4b7dfd3f5421f31811e97d1dbc0a7c93d6e3a24df"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e9d7747847c53a16a729b6ee5e737cf170f7a16611c143d95aa60a109a59c336"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b52ff4f4e002f828ea6483faf4c4e8deea8d743cf801b74910243c58acc6eda3"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:575d8912dca808edd9acd6f7795199332696d3469665ef26163cd090fa1f8bfa"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c4ed2ff6760e98d262e0cc9c9a7f7b8a9f61aa4d47c58835cdaf7b0b8811bb"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e621b0246192d3b9cb1dc62c78cfa4c6f6d2ddc0ec207d43c0dedecb914f152a"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8f127e7b028900421cad64f51f75c051b628db17fb00e099eb148761eed598c9"}, - {file = "Pillow-9.4.0.tar.gz", hash = "sha256:a1c2d7780448eb93fbcc3789bf3916aa5720d942e37945f4056680317f1cd23e"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "platformdirs" -version = "3.8.1" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.8.1-py3-none-any.whl", hash = "sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c"}, - {file = "platformdirs-3.8.1.tar.gz", hash = "sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528"}, -] - -[package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "3.1.1" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pre_commit-3.1.1-py2.py3-none-any.whl", hash = "sha256:b80254e60668e1dd1f5c03a1c9e0413941d61f568a57d745add265945f65bfe8"}, - {file = "pre_commit-3.1.1.tar.gz", hash = "sha256:d63e6537f9252d99f65755ae5b79c989b462d511ebbc481b561db6a297e1e865"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pydantic" -version = "1.10.11" -description = "Data validation and settings management using python type hints" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-1.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff44c5e89315b15ff1f7fdaf9853770b810936d6b01a7bcecaa227d2f8fe444f"}, - {file = "pydantic-1.10.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c098d4ab5e2d5b3984d3cb2527e2d6099d3de85630c8934efcfdc348a9760e"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16928fdc9cb273c6af00d9d5045434c39afba5f42325fb990add2c241402d151"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0588788a9a85f3e5e9ebca14211a496409cb3deca5b6971ff37c556d581854e7"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9baf78b31da2dc3d3f346ef18e58ec5f12f5aaa17ac517e2ffd026a92a87588"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:373c0840f5c2b5b1ccadd9286782852b901055998136287828731868027a724f"}, - {file = "pydantic-1.10.11-cp310-cp310-win_amd64.whl", hash = "sha256:c3339a46bbe6013ef7bdd2844679bfe500347ac5742cd4019a88312aa58a9847"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a6c32e1c3809fbc49debb96bf833164f3438b3696abf0fbeceb417d123e6eb"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a451ccab49971af043ec4e0d207cbc8cbe53dbf148ef9f19599024076fe9c25b"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b02d24f7b2b365fed586ed73582c20f353a4c50e4be9ba2c57ab96f8091ddae"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f34739a89260dfa420aa3cbd069fbcc794b25bbe5c0a214f8fb29e363484b66"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e297897eb4bebde985f72a46a7552a7556a3dd11e7f76acda0c1093e3dbcf216"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d185819a7a059550ecb85d5134e7d40f2565f3dd94cfd870132c5f91a89cf58c"}, - {file = "pydantic-1.10.11-cp311-cp311-win_amd64.whl", hash = "sha256:4400015f15c9b464c9db2d5d951b6a780102cfa5870f2c036d37c23b56f7fc1b"}, - {file = "pydantic-1.10.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2417de68290434461a266271fc57274a138510dca19982336639484c73a07af6"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:331c031ba1554b974c98679bd0780d89670d6fd6f53f5d70b10bdc9addee1713"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8268a735a14c308923e8958363e3a3404f6834bb98c11f5ab43251a4e410170c"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:44e51ba599c3ef227e168424e220cd3e544288c57829520dc90ea9cb190c3248"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d7781f1d13b19700b7949c5a639c764a077cbbdd4322ed505b449d3ca8edcb36"}, - {file = "pydantic-1.10.11-cp37-cp37m-win_amd64.whl", hash = "sha256:7522a7666157aa22b812ce14c827574ddccc94f361237ca6ea8bb0d5c38f1629"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc64eab9b19cd794a380179ac0e6752335e9555d214cfcb755820333c0784cb3"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8dc77064471780262b6a68fe67e013298d130414d5aaf9b562c33987dbd2cf4f"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe429898f2c9dd209bd0632a606bddc06f8bce081bbd03d1c775a45886e2c1cb"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:192c608ad002a748e4a0bed2ddbcd98f9b56df50a7c24d9a931a8c5dd053bd3d"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ef55392ec4bb5721f4ded1096241e4b7151ba6d50a50a80a2526c854f42e6a2f"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e0bb6efe86281623abbeeb0be64eab740c865388ee934cd3e6a358784aca6e"}, - {file = "pydantic-1.10.11-cp38-cp38-win_amd64.whl", hash = "sha256:265a60da42f9f27e0b1014eab8acd3e53bd0bad5c5b4884e98a55f8f596b2c19"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:469adf96c8e2c2bbfa655fc7735a2a82f4c543d9fee97bd113a7fb509bf5e622"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e6cbfbd010b14c8a905a7b10f9fe090068d1744d46f9e0c021db28daeb8b6de1"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abade85268cc92dff86d6effcd917893130f0ff516f3d637f50dadc22ae93999"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9738b0f2e6c70f44ee0de53f2089d6002b10c33264abee07bdb5c7f03038303"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:787cf23e5a0cde753f2eabac1b2e73ae3844eb873fd1f5bdbff3048d8dbb7604"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:174899023337b9fc685ac8adaa7b047050616136ccd30e9070627c1aaab53a13"}, - {file = "pydantic-1.10.11-cp39-cp39-win_amd64.whl", hash = "sha256:1954f8778489a04b245a1e7b8b22a9d3ea8ef49337285693cf6959e4b757535e"}, - {file = "pydantic-1.10.11-py3-none-any.whl", hash = "sha256:008c5e266c8aada206d0627a011504e14268a62091450210eda7c07fabe6963e"}, - {file = "pydantic-1.10.11.tar.gz", hash = "sha256:f66d479cf7eb331372c470614be6511eae96f1f120344c25f3f9bb59fb1b5528"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pydocstyle" -version = "6.3.0" -description = "Python docstring style checker" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, - {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, -] - -[package.dependencies] -snowballstemmer = ">=2.2.0" - -[package.extras] -toml = ["tomli (>=1.2.3)"] - -[[package]] -name = "pygments" -version = "2.14.0" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pylint" -version = "2.16.3" -description = "python code static checker" -optional = false -python-versions = ">=3.7.2" -files = [ - {file = "pylint-2.16.3-py3-none-any.whl", hash = "sha256:3e803be66e3a34c76b0aa1a3cf4714b538335e79bd69718d34fcf36d8fff2a2b"}, - {file = "pylint-2.16.3.tar.gz", hash = "sha256:0decdf8dfe30298cd9f8d82e9a1542da464db47da60e03641631086671a03621"}, -] - -[package.dependencies] -astroid = ">=2.14.2,<=2.16.0-dev0" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -dill = [ - {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, -] -isort = ">=4.2.5,<6" -mccabe = ">=0.6,<0.8" -platformdirs = ">=2.2.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -tomlkit = ">=0.10.1" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -spelling = ["pyenchant (>=3.2,<4.0)"] -testutils = ["gitpython (>3)"] - -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pysocks" -version = "1.7.1" -description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, - {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, - {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, -] - -[[package]] -name = "pytest" -version = "7.2.2" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, - {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, -] - -[package.dependencies] -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "4.0.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, - {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-html" -version = "3.2.0" -description = "pytest plugin for generating HTML reports" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-html-3.2.0.tar.gz", hash = "sha256:c4e2f4bb0bffc437f51ad2174a8a3e71df81bbc2f6894604e604af18fbe687c3"}, - {file = "pytest_html-3.2.0-py3-none-any.whl", hash = "sha256:868c08564a68d8b2c26866f1e33178419bb35b1e127c33784a28622eb827f3f3"}, -] - -[package.dependencies] -py = ">=1.8.2" -pytest = ">=5.0,<6.0.0 || >6.0.0" -pytest-metadata = "*" - -[[package]] -name = "pytest-metadata" -version = "2.0.4" -description = "pytest plugin for test session metadata" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "pytest_metadata-2.0.4-py3-none-any.whl", hash = "sha256:acb739f89fabb3d798c099e9e0c035003062367a441910aaaf2281bc1972ee14"}, - {file = "pytest_metadata-2.0.4.tar.gz", hash = "sha256:fcc653f65fe3035b478820b5284fbf0f52803622ee3f60a2faed7a7d3ba1f41e"}, -] - -[package.dependencies] -pytest = ">=3.0.0,<8.0.0" - -[[package]] -name = "pyupgrade" -version = "3.3.1" -description = "A tool to automatically upgrade syntax for newer versions." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyupgrade-3.3.1-py2.py3-none-any.whl", hash = "sha256:3b93641963df022d605c78aeae4b5956a5296ea24701eafaef9c487527b77e60"}, - {file = "pyupgrade-3.3.1.tar.gz", hash = "sha256:f88bce38b0ba92c2a9a5063c8629e456e8d919b67d2d42c7ecab82ff196f9813"}, -] - -[package.dependencies] -tokenize-rt = ">=3.2.0" - -[[package]] -name = "pyvirtualdisplay" -version = "3.0" -description = "python wrapper for Xvfb, Xephyr and Xvnc" -optional = false -python-versions = "*" -files = [ - {file = "PyVirtualDisplay-3.0-py3-none-any.whl", hash = "sha256:40d4b8dfe4b8de8552e28eb367647f311f88a130bf837fe910e7f180d5477f0e"}, - {file = "PyVirtualDisplay-3.0.tar.gz", hash = "sha256:09755bc3ceb6eb725fb07eca5425f43f2358d3bf08e00d2a9b792a1aedd16159"}, -] - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] - -[[package]] -name = "ratelimit" -version = "2.2.1" -description = "API rate limit decorator" -optional = false -python-versions = "*" -files = [ - {file = "ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42"}, -] - -[[package]] -name = "requests" -version = "2.28.2" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7, <4" -files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-toolbelt" -version = "0.10.1" -description = "A utility belt for advanced users of python-requests" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-toolbelt-0.10.1.tar.gz", hash = "sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d"}, - {file = "requests_toolbelt-0.10.1-py2.py3-none-any.whl", hash = "sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7"}, -] - -[package.dependencies] -requests = ">=2.0.1,<3.0.0" - -[[package]] -name = "rich" -version = "13.3.2" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.3.2-py3-none-any.whl", hash = "sha256:a104f37270bf677148d8acb07d33be1569eeee87e2d1beb286a4e9113caf6f2f"}, - {file = "rich-13.3.2.tar.gz", hash = "sha256:91954fe80cfb7985727a467ca98a7618e5dd15178cc2da10f553b36a93859001"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0,<3.0.0" -pygments = ">=2.13.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "ruamel-yaml" -version = "0.17.21" -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" -files = [ - {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"}, - {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.6", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""} - -[package.extras] -docs = ["ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.7" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.5" -files = [ - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, - {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, -] - -[[package]] -name = "safety" -version = "2.3.5" -description = "Checks installed dependencies for known vulnerabilities and licenses." -optional = false -python-versions = "*" -files = [ - {file = "safety-2.3.5-py3-none-any.whl", hash = "sha256:2227fcac1b22b53c1615af78872b48348661691450aa25d6704a5504dbd1f7e2"}, - {file = "safety-2.3.5.tar.gz", hash = "sha256:a60c11f8952f412cbb165d70cb1f673a3b43a2ba9a93ce11f97e6a4de834aa3a"}, -] - -[package.dependencies] -Click = ">=8.0.2" -dparse = ">=0.6.2" -packaging = ">=21.0,<22.0" -requests = "*" -"ruamel.yaml" = ">=0.17.21" -setuptools = ">=19.3" - -[package.extras] -github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] -gitlab = ["python-gitlab (>=1.3.0)"] - -[[package]] -name = "selenium" -version = "4.8.2" -description = "" -optional = false -python-versions = ">=3.7" -files = [ - {file = "selenium-4.8.2-py3-none-any.whl", hash = "sha256:bd04eb41395605d9b2b65fe587f3fed21431da75512985c52772529e5e210c60"}, - {file = "selenium-4.8.2.tar.gz", hash = "sha256:c48372905bffcc3b24bd55ab4683a07ee5e1f30fe918c59558ea5ee44cedf6c3"}, -] - -[package.dependencies] -certifi = ">=2021.10.8" -trio = ">=0.17,<1.0" -trio-websocket = ">=0.9,<1.0" -urllib3 = {version = ">=1.26,<2.0", extras = ["socks"]} - -[[package]] -name = "setuptools" -version = "67.4.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools-67.4.0-py3-none-any.whl", hash = "sha256:f106dee1b506dee5102cc3f3e9e68137bbad6d47b616be7991714b0c62204251"}, - {file = "setuptools-67.4.0.tar.gz", hash = "sha256:e5fd0a713141a4a105412233c63dc4e17ba0090c8e8334594ac790ec97792330"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "shellingham" -version = "1.5.0.post1" -description = "Tool to Detect Surrounding Shell" -optional = false -python-versions = ">=3.7" -files = [ - {file = "shellingham-1.5.0.post1-py2.py3-none-any.whl", hash = "sha256:368bf8c00754fd4f55afb7bbb86e272df77e4dc76ac29dbcbb81a59e9fc15744"}, - {file = "shellingham-1.5.0.post1.tar.gz", hash = "sha256:823bc5fb5c34d60f285b624e7264f4dda254bc803a3774a147bf99c0e3004a28"}, -] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "slowapi" -version = "0.1.7" -description = "A rate limiting extension for Starlette and Fastapi" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "slowapi-0.1.7-py3-none-any.whl", hash = "sha256:94743ba5f68359455cfa1be214c086134c03f4e7072590682671fc65c744a615"}, - {file = "slowapi-0.1.7.tar.gz", hash = "sha256:5a4a6f3e232d0465085392c1d92f6f8f6a6329ed2102a80062094fe86d7b1f36"}, -] - -[package.dependencies] -limits = ">=2.3,<3.0" - -[[package]] -name = "smmap" -version = "5.0.0" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.6" -files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, -] - -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -optional = false -python-versions = "*" -files = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -optional = false -python-versions = "*" -files = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] - -[[package]] -name = "soupsieve" -version = "2.4" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "soupsieve-2.4-py3-none-any.whl", hash = "sha256:49e5368c2cda80ee7e84da9dbe3e110b70a4575f196efb74e51b94549d921955"}, - {file = "soupsieve-2.4.tar.gz", hash = "sha256:e28dba9ca6c7c00173e34e4ba57448f0688bb681b7c5e8bf4971daafc093d69a"}, -] - -[[package]] -name = "starlette" -version = "0.25.0" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.7" -files = [ - {file = "starlette-0.25.0-py3-none-any.whl", hash = "sha256:774f1df1983fd594b9b6fb3ded39c2aa1979d10ac45caac0f4255cbe2acb8628"}, - {file = "starlette-0.25.0.tar.gz", hash = "sha256:854c71e73736c429c2bdb07801f2c76c9cba497e7c3cf4988fde5e95fe4cdb3c"}, -] - -[package.dependencies] -anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] - -[[package]] -name = "stevedore" -version = "5.0.0" -description = "Manage dynamic plugins for Python applications" -optional = false -python-versions = ">=3.8" -files = [ - {file = "stevedore-5.0.0-py3-none-any.whl", hash = "sha256:bd5a71ff5e5e5f5ea983880e4a1dd1bb47f8feebbb3d95b592398e2f02194771"}, - {file = "stevedore-5.0.0.tar.gz", hash = "sha256:2c428d2338976279e8eb2196f7a94910960d9f7ba2f41f3988511e95ca447021"}, -] - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "threadpoolexecutorplus" -version = "0.2.2" -description = "A fully replaceable executor that makes it possible to reuse idle threads and shrink thread list when there's no heavy load. - GitHub - GoodManWEN/ThreadPoolExecutorPlus: A fully replaceable executor that makes it possible to reuse idle threads and shrink thread list when there's no heavy load." -optional = false -python-versions = ">=3.5" -files = [ - {file = "ThreadPoolExecutorPlus-0.2.2-py3-none-any.whl", hash = "sha256:bd5fada94b5563ccea24b2758c9a0629820f0a40815ad03f268794c63ff5e72f"}, - {file = "ThreadPoolExecutorPlus-0.2.2.tar.gz", hash = "sha256:aa958057f9ca72892f217c8a3af2b28d3a38d97510ece4189fe82f06ed0c7312"}, -] - -[[package]] -name = "tokenize-rt" -version = "5.0.0" -description = "A wrapper around the stdlib `tokenize` which roundtrips." -optional = false -python-versions = ">=3.7" -files = [ - {file = "tokenize_rt-5.0.0-py2.py3-none-any.whl", hash = "sha256:c67772c662c6b3dc65edf66808577968fb10badfc2042e3027196bed4daf9e5a"}, - {file = "tokenize_rt-5.0.0.tar.gz", hash = "sha256:3160bc0c3e8491312d0485171dea861fc160a240f5f5766b72a1165408d10740"}, -] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tomlkit" -version = "0.11.6" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, - {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, -] - -[[package]] -name = "trio" -version = "0.22.0" -description = "A friendly Python library for async concurrency and I/O" -optional = false -python-versions = ">=3.7" -files = [ - {file = "trio-0.22.0-py3-none-any.whl", hash = "sha256:f1dd0780a89bfc880c7c7994519cb53f62aacb2c25ff487001c0052bd721cdf0"}, - {file = "trio-0.22.0.tar.gz", hash = "sha256:ce68f1c5400a47b137c5a4de72c7c901bd4e7a24fbdebfe9b41de8c6c04eaacf"}, -] - -[package.dependencies] -async-generator = ">=1.9" -attrs = ">=19.2.0" -cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} -exceptiongroup = {version = ">=1.0.0rc9", markers = "python_version < \"3.11\""} -idna = "*" -outcome = "*" -sniffio = "*" -sortedcontainers = "*" - -[[package]] -name = "trio-websocket" -version = "0.9.2" -description = "WebSocket library for Trio" -optional = false -python-versions = ">=3.5" -files = [ - {file = "trio-websocket-0.9.2.tar.gz", hash = "sha256:a3d34de8fac26023eee701ed1e7bf4da9a8326b61a62934ec9e53b64970fd8fe"}, - {file = "trio_websocket-0.9.2-py3-none-any.whl", hash = "sha256:5b558f6e83cc20a37c3b61202476c5295d1addf57bd65543364e0337e37ed2bc"}, -] - -[package.dependencies] -async-generator = ">=1.10" -trio = ">=0.11" -wsproto = ">=0.14" - -[[package]] -name = "typer" -version = "0.4.2" -description = "Typer, build great CLIs. Easy to code. Based on Python type hints." -optional = false -python-versions = ">=3.6" -files = [ - {file = "typer-0.4.2-py3-none-any.whl", hash = "sha256:023bae00d1baf358a6cc7cea45851639360bb716de687b42b0a4641cd99173f1"}, - {file = "typer-0.4.2.tar.gz", hash = "sha256:b8261c6c0152dd73478b5ba96ba677e5d6948c715c310f7c91079f311f62ec03"}, -] - -[package.dependencies] -click = ">=7.1.1,<9.0.0" -colorama = {version = ">=0.4.3,<0.5.0", optional = true, markers = "extra == \"all\""} -shellingham = {version = ">=1.3.0,<2.0.0", optional = true, markers = "extra == \"all\""} - -[package.extras] -all = ["colorama (>=0.4.3,<0.5.0)", "shellingham (>=1.3.0,<2.0.0)"] -dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] -doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)"] -test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<5.4.0)", "pytest-cov (>=2.10.0,<3.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<2.0.0)", "shellingham (>=1.3.0,<2.0.0)"] - -[[package]] -name = "typing-extensions" -version = "4.5.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, -] - -[[package]] -name = "undetected-chromedriver" -version = "3.4.6" -description = "('Selenium.webdriver.Chrome replacement with compatiblity for Brave, and other Chromium based browsers.', 'Not triggered by CloudFlare/Imperva/hCaptcha and such.', 'NOTE: results may vary due to many factors. No guarantees are given, except for ongoing efforts in understanding detection algorithms.')" -optional = false -python-versions = "*" -files = [ - {file = "undetected-chromedriver-3.4.6.tar.gz", hash = "sha256:871485624f7a2e1c15fde75ab7b8ceb30ebc06dad90cd66173ea8036c046367f"}, -] - -[package.dependencies] -requests = "*" -selenium = ">=4.0.0" -websockets = "*" - -[[package]] -name = "urllib3" -version = "1.26.14" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, -] - -[package.dependencies] -PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "uvicorn" -version = "0.20.0" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.7" -files = [ - {file = "uvicorn-0.20.0-py3-none-any.whl", hash = "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd"}, - {file = "uvicorn-0.20.0.tar.gz", hash = "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8"}, -] - -[package.dependencies] -click = ">=7.0" -h11 = ">=0.8" - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "virtualenv" -version = "20.20.0" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.20.0-py3-none-any.whl", hash = "sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45"}, - {file = "virtualenv-20.20.0.tar.gz", hash = "sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4"}, -] - -[package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -platformdirs = ">=2.4,<4" - -[package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] -test = ["covdefaults (>=2.2.2)", "coverage (>=7.1)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23)", "pytest (>=7.2.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "websockets" -version = "10.4" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, - {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, - {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, - {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, - {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, - {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, - {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, - {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, - {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, - {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, - {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, - {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, - {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, - {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, - {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, - {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, - {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, - {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, - {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, - {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, - {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, - {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, - {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, - {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, - {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, - {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, - {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, - {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, - {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, - {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, -] - -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -optional = false -python-versions = ">=3.5" -files = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] - -[package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] - -[[package]] -name = "wrapt" -version = "1.15.0" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, -] - -[[package]] -name = "wsproto" -version = "1.2.0" -description = "WebSockets state-machine based protocol implementation" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, - {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, -] - -[package.dependencies] -h11 = ">=0.9.0,<1" - -[metadata] -lock-version = "2.0" -python-versions = "^3.8" -content-hash = "ba0470e3545180fa17d8cf9002d0c3571b52771c31044fd9b17cd58a66c2d8ad" diff --git a/poetry.lock.old b/poetry.lock.old deleted file mode 100755 index 7cb7af8..0000000 --- a/poetry.lock.old +++ /dev/null @@ -1,1987 +0,0 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. - -[[package]] -name = "ascii-magic" -version = "1.6" -description = "Converts pictures into ASCII art" -category = "main" -optional = false -python-versions = ">=3.5" -files = [ - {file = "ascii_magic-1.6-py3-none-any.whl", hash = "sha256:937447d8677b7428856729c298c0264afd62fc2b8e7ff90c82000492cdc5f8d4"}, - {file = "ascii_magic-1.6.tar.gz", hash = "sha256:7da5518f7368e73f11e2151a0c060804aa149e267b369b7ee7653fbd7b046a51"}, -] - -[package.dependencies] -colorama = "*" -Pillow = "*" - -[[package]] -name = "astroid" -version = "2.14.1" -description = "An abstract syntax tree for Python with inference support." -category = "dev" -optional = false -python-versions = ">=3.7.2" -files = [ - {file = "astroid-2.14.1-py3-none-any.whl", hash = "sha256:23c718921acab5f08cbbbe9293967f1f8fec40c336d19cd75dc12a9ea31d2eb2"}, - {file = "astroid-2.14.1.tar.gz", hash = "sha256:bd1aa4f9915c98e8aaebcd4e71930154d4e8c9aaf05d35ac0a63d1956091ae3f"}, -] - -[package.dependencies] -lazy-object-proxy = ">=1.4.0" -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} -wrapt = [ - {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, -] - -[[package]] -name = "async-generator" -version = "1.10" -description = "Async generators and context managers for Python 3.5+" -category = "main" -optional = false -python-versions = ">=3.5" -files = [ - {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"}, - {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, -] - -[[package]] -name = "attrs" -version = "22.2.0" -description = "Classes Without Boilerplate" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs[tests-no-zope]", "zope.interface"] -tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] - -[[package]] -name = "bandit" -version = "1.7.4" -description = "Security oriented static analyser for python code." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, - {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" -PyYAML = ">=5.3.1" -stevedore = ">=1.20.0" - -[package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml"] -toml = ["toml"] -yaml = ["PyYAML"] - -[[package]] -name = "beautifulsoup4" -version = "4.11.2" -description = "Screen-scraping library" -category = "main" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "beautifulsoup4-4.11.2-py3-none-any.whl", hash = "sha256:0e79446b10b3ecb499c1556f7e228a53e64a2bfcebd455f370d8927cb5b59e39"}, - {file = "beautifulsoup4-4.11.2.tar.gz", hash = "sha256:bc4bdda6717de5a2987436fb8d72f45dc90dd856bdfd512a1314ce90349a0106"}, -] - -[package.dependencies] -soupsieve = ">1.2" - -[package.extras] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "black" -version = "22.12.0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "certifi" -version = "2022.12.7" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] - -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "cfgv" -version = "3.3.1" -description = "Validate configuration and produce human readable error messages." -category = "dev" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.0.1" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, -] - -[[package]] -name = "chromedriver-autoinstaller" -version = "0.4.0" -description = "Automatically install chromedriver that supports the currently installed version of chrome." -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "chromedriver-autoinstaller-0.4.0.tar.gz", hash = "sha256:57f15f40d2e356c4cb84870cb7f882283a8280118bedacbf19301dd692f672b5"}, - {file = "chromedriver_autoinstaller-0.4.0-py3-none-any.whl", hash = "sha256:1534d39903d22379ff13435d695703ae9b14ddb336d43556fd7735854ada6d2b"}, -] - -[[package]] -name = "click" -version = "8.0.4" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"}, - {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "click-shell" -version = "2.1" -description = "An extension to click that easily turns your click app into a shell utility" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "click-shell-2.1.tar.gz", hash = "sha256:ce0c91faae284c41a39bec966f928791ad4a45763755445f1fe2041fd091aa37"}, - {file = "click_shell-2.1-py2.py3-none-any.whl", hash = "sha256:2d971a2e50eb7ad387cf0ce79ba4b844e66e0580784e2efe2df58b50a2f047f0"}, -] - -[package.dependencies] -click = ">=6.0" - -[package.extras] -readline = ["gnureadline"] -windows = ["pyreadline"] - -[[package]] -name = "cloudscraper" -version = "1.2.68" -description = "A Python module to bypass Cloudflare's anti-bot page." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "cloudscraper-1.2.68-py2.py3-none-any.whl", hash = "sha256:401409859697edae9384a7623b450cc97ab14dd0b2c8cdcac62edc2d50b31741"}, - {file = "cloudscraper-1.2.68.tar.gz", hash = "sha256:4d02aceffa90abd4dabc75b79bafa31636309baa7c0f2ee665e2d345aadb8863"}, -] - -[package.dependencies] -pyparsing = ">=2.4.7" -requests = ">=2.9.2" -requests-toolbelt = ">=0.9.1" - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -category = "main" -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 = "coverage" -version = "7.1.0" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "coverage-7.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b946bbcd5a8231383450b195cfb58cb01cbe7f8949f5758566b881df4b33baf"}, - {file = "coverage-7.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec8e767f13be637d056f7e07e61d089e555f719b387a7070154ad80a0ff31801"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a5a5879a939cb84959d86869132b00176197ca561c664fc21478c1eee60d75"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b643cb30821e7570c0aaf54feaf0bfb630b79059f85741843e9dc23f33aaca2c"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32df215215f3af2c1617a55dbdfb403b772d463d54d219985ac7cd3bf124cada"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:33d1ae9d4079e05ac4cc1ef9e20c648f5afabf1a92adfaf2ccf509c50b85717f"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:29571503c37f2ef2138a306d23e7270687c0efb9cab4bd8038d609b5c2393a3a"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:63ffd21aa133ff48c4dff7adcc46b7ec8b565491bfc371212122dd999812ea1c"}, - {file = "coverage-7.1.0-cp310-cp310-win32.whl", hash = "sha256:4b14d5e09c656de5038a3f9bfe5228f53439282abcab87317c9f7f1acb280352"}, - {file = "coverage-7.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:8361be1c2c073919500b6601220a6f2f98ea0b6d2fec5014c1d9cfa23dd07038"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da9b41d4539eefd408c46725fb76ecba3a50a3367cafb7dea5f250d0653c1040"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5b15ed7644ae4bee0ecf74fee95808dcc34ba6ace87e8dfbf5cb0dc20eab45a"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d12d076582507ea460ea2a89a8c85cb558f83406c8a41dd641d7be9a32e1274f"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2617759031dae1bf183c16cef8fcfb3de7617f394c813fa5e8e46e9b82d4222"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4e4881fa9e9667afcc742f0c244d9364d197490fbc91d12ac3b5de0bf2df146"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9d58885215094ab4a86a6aef044e42994a2bd76a446dc59b352622655ba6621b"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ffeeb38ee4a80a30a6877c5c4c359e5498eec095878f1581453202bfacc8fbc2"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3baf5f126f30781b5e93dbefcc8271cb2491647f8283f20ac54d12161dff080e"}, - {file = "coverage-7.1.0-cp311-cp311-win32.whl", hash = "sha256:ded59300d6330be27bc6cf0b74b89ada58069ced87c48eaf9344e5e84b0072f7"}, - {file = "coverage-7.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:6a43c7823cd7427b4ed763aa7fb63901ca8288591323b58c9cd6ec31ad910f3c"}, - {file = "coverage-7.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a726d742816cb3a8973c8c9a97539c734b3a309345236cd533c4883dda05b8d"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc7c85a150501286f8b56bd8ed3aa4093f4b88fb68c0843d21ff9656f0009d6a"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b4198d85a3755d27e64c52f8c95d6333119e49fd001ae5798dac872c95e0f8"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb726cb861c3117a553f940372a495fe1078249ff5f8a5478c0576c7be12050"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:51b236e764840a6df0661b67e50697aaa0e7d4124ca95e5058fa3d7cbc240b7c"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7ee5c9bb51695f80878faaa5598040dd6c9e172ddcf490382e8aedb8ec3fec8d"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c31b75ae466c053a98bf26843563b3b3517b8f37da4d47b1c582fdc703112bc3"}, - {file = "coverage-7.1.0-cp37-cp37m-win32.whl", hash = "sha256:3b155caf3760408d1cb903b21e6a97ad4e2bdad43cbc265e3ce0afb8e0057e73"}, - {file = "coverage-7.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2a60d6513781e87047c3e630b33b4d1e89f39836dac6e069ffee28c4786715f5"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2cba5c6db29ce991029b5e4ac51eb36774458f0a3b8d3137241b32d1bb91f06"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beeb129cacea34490ffd4d6153af70509aa3cda20fdda2ea1a2be870dfec8d52"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c45948f613d5d18c9ec5eaa203ce06a653334cf1bd47c783a12d0dd4fd9c851"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef382417db92ba23dfb5864a3fc9be27ea4894e86620d342a116b243ade5d35d"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c7c0d0827e853315c9bbd43c1162c006dd808dbbe297db7ae66cd17b07830f0"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e5cdbb5cafcedea04924568d990e20ce7f1945a1dd54b560f879ee2d57226912"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9817733f0d3ea91bea80de0f79ef971ae94f81ca52f9b66500c6a2fea8e4b4f8"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:218fe982371ac7387304153ecd51205f14e9d731b34fb0568181abaf7b443ba0"}, - {file = "coverage-7.1.0-cp38-cp38-win32.whl", hash = "sha256:04481245ef966fbd24ae9b9e537ce899ae584d521dfbe78f89cad003c38ca2ab"}, - {file = "coverage-7.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8ae125d1134bf236acba8b83e74c603d1b30e207266121e76484562bc816344c"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2bf1d5f2084c3932b56b962a683074a3692bce7cabd3aa023c987a2a8e7612f6"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:98b85dd86514d889a2e3dd22ab3c18c9d0019e696478391d86708b805f4ea0fa"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38da2db80cc505a611938d8624801158e409928b136c8916cd2e203970dde4dc"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3164d31078fa9efe406e198aecd2a02d32a62fecbdef74f76dad6a46c7e48311"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db61a79c07331e88b9a9974815c075fbd812bc9dbc4dc44b366b5368a2936063"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ccb092c9ede70b2517a57382a601619d20981f56f440eae7e4d7eaafd1d1d09"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:33ff26d0f6cc3ca8de13d14fde1ff8efe1456b53e3f0273e63cc8b3c84a063d8"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d47dd659a4ee952e90dc56c97d78132573dc5c7b09d61b416a9deef4ebe01a0c"}, - {file = "coverage-7.1.0-cp39-cp39-win32.whl", hash = "sha256:d248cd4a92065a4d4543b8331660121b31c4148dd00a691bfb7a5cdc7483cfa4"}, - {file = "coverage-7.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7ed681b0f8e8bcbbffa58ba26fcf5dbc8f79e7997595bf071ed5430d8c08d6f3"}, - {file = "coverage-7.1.0-pp37.pp38.pp39-none-any.whl", hash = "sha256:755e89e32376c850f826c425ece2c35a4fc266c081490eb0a841e7c1cb0d3bda"}, - {file = "coverage-7.1.0.tar.gz", hash = "sha256:10188fe543560ec4874f974b5305cd1a8bdcfa885ee00ea3a03733464c4ca265"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "coverage-badge" -version = "1.1.0" -description = "Generate coverage badges for Coverage.py." -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "coverage-badge-1.1.0.tar.gz", hash = "sha256:c824a106503e981c02821e7d32f008fb3984b2338aa8c3800ec9357e33345b78"}, - {file = "coverage_badge-1.1.0-py2.py3-none-any.whl", hash = "sha256:e365d56e5202e923d1b237f82defd628a02d1d645a147f867ac85c58c81d7997"}, -] - -[package.dependencies] -coverage = "*" - -[[package]] -name = "darglint" -version = "1.8.1" -description = "A utility for ensuring Google-style docstrings stay up to date with the source code." -category = "dev" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "darglint-1.8.1-py3-none-any.whl", hash = "sha256:5ae11c259c17b0701618a20c3da343a3eb98b3bc4b5a83d31cdd94f5ebdced8d"}, - {file = "darglint-1.8.1.tar.gz", hash = "sha256:080d5106df149b199822e7ee7deb9c012b49891538f14a11be681044f0bb20da"}, -] - -[[package]] -name = "dill" -version = "0.3.6" -description = "serialize all of python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, - {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, -] - -[package.extras] -graph = ["objgraph (>=1.7.2)"] - -[[package]] -name = "distlib" -version = "0.3.6" -description = "Distribution utilities" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, -] - -[[package]] -name = "dparse" -version = "0.6.2" -description = "A parser for Python dependency files" -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dparse-0.6.2-py3-none-any.whl", hash = "sha256:8097076f1dd26c377f30d4745e6ec18fef42f3bf493933b842ac5bafad8c345f"}, - {file = "dparse-0.6.2.tar.gz", hash = "sha256:d45255bda21f998bc7ddf2afd5e62505ba6134756ba2d42a84c56b0826614dfe"}, -] - -[package.dependencies] -packaging = "*" -toml = "*" - -[package.extras] -conda = ["pyyaml"] -pipenv = ["pipenv"] - -[[package]] -name = "exceptiongroup" -version = "1.1.0" -description = "Backport of PEP 654 (exception groups)" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "filelock" -version = "3.9.0" -description = "A platform independent file lock." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.9.0-py3-none-any.whl", hash = "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"}, - {file = "filelock-3.9.0.tar.gz", hash = "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de"}, -] - -[package.extras] -docs = ["furo (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "gitdb" -version = "4.0.10" -description = "Git Object Database" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.30" -description = "GitPython is a python library used to interact with Git repositories" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.30-py3-none-any.whl", hash = "sha256:cd455b0000615c60e286208ba540271af9fe531fa6a87cc590a7298785ab2882"}, - {file = "GitPython-3.1.30.tar.gz", hash = "sha256:769c2d83e13f5d938b7688479da374c4e3d49f71549aaf462b646db9602ea6f8"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "identify" -version = "2.5.17" -description = "File identification library for Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "identify-2.5.17-py2.py3-none-any.whl", hash = "sha256:7d526dd1283555aafcc91539acc061d8f6f59adb0a7bba462735b0a318bff7ed"}, - {file = "identify-2.5.17.tar.gz", hash = "sha256:93cc61a861052de9d4c541a7acb7e3dcc9c11b398a2144f6e52ae5285f5f4f06"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -category = "dev" -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 = "5.12.0" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, -] - -[package.dependencies] -colorama = {version = ">=0.4.3", optional = true, markers = "extra == \"colors\""} - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - -[[package]] -name = "lazy-object-proxy" -version = "1.9.0" -description = "A fast and thorough lazy object proxy." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, -] - -[[package]] -name = "markdown-it-py" -version = "2.1.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, - {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] -code-style = ["pre-commit (==2.6)"] -compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.3.6,<3.4.0)", "mistletoe (>=0.8.1,<0.9.0)", "mistune (>=2.0.2,<2.1.0)", "panflute (>=2.1.3,<2.2.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markdownify" -version = "0.11.6" -description = "Convert HTML to markdown." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "markdownify-0.11.6-py3-none-any.whl", hash = "sha256:ba35fe289d5e9073bcd7d2cad629278fe25f1a93741fcdc0bfb4f009076d8324"}, - {file = "markdownify-0.11.6.tar.gz", hash = "sha256:009b240e0c9f4c8eaf1d085625dcd4011e12f0f8cec55dedf9ea6f7655e49bfe"}, -] - -[package.dependencies] -beautifulsoup4 = ">=4.9,<5" -six = ">=1.15,<2" - -[[package]] -name = "mccabe" -version = "0.7.0" -description = "McCabe checker, plugin for flake8" -category = "dev" -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" -category = "main" -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 = "mypy" -version = "0.991" -description = "Optional static typing for Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, - {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, - {file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"}, - {file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"}, - {file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"}, - {file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"}, - {file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"}, - {file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"}, - {file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"}, - {file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"}, - {file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"}, - {file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"}, - {file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"}, - {file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"}, - {file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"}, - {file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"}, - {file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"}, - {file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"}, - {file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"}, - {file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"}, - {file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"}, - {file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"}, - {file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"}, - {file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"}, -] - -[package.dependencies] -mypy-extensions = ">=0.4.3" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=3.10" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -python2 = ["typed-ast (>=1.4.0,<2)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nodeenv" -version = "1.7.0" -description = "Node.js virtual environment builder" -category = "dev" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, - {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "outcome" -version = "1.2.0" -description = "Capture the outcome of Python function calls." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "outcome-1.2.0-py2.py3-none-any.whl", hash = "sha256:c4ab89a56575d6d38a05aa16daeaa333109c1f96167aba8901ab18b6b5e0f7f5"}, - {file = "outcome-1.2.0.tar.gz", hash = "sha256:6f82bd3de45da303cf1f771ecafa1633750a358436a8bb60e06a1ceb745d2672"}, -] - -[package.dependencies] -attrs = ">=19.2.0" - -[[package]] -name = "packaging" -version = "21.3" -description = "Core utilities for Python packages" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" - -[[package]] -name = "pathspec" -version = "0.11.0" -description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, - {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, -] - -[[package]] -name = "pbr" -version = "5.11.1" -description = "Python Build Reasonableness" -category = "dev" -optional = false -python-versions = ">=2.6" -files = [ - {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, - {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, -] - -[[package]] -name = "pillow" -version = "9.4.0" -description = "Python Imaging Library (Fork)" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pillow-9.4.0-1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b4b4e9dda4f4e4c4e6896f93e84a8f0bcca3b059de9ddf67dac3c334b1195e1"}, - {file = "Pillow-9.4.0-1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fb5c1ad6bad98c57482236a21bf985ab0ef42bd51f7ad4e4538e89a997624e12"}, - {file = "Pillow-9.4.0-1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:f0caf4a5dcf610d96c3bd32932bfac8aee61c96e60481c2a0ea58da435e25acd"}, - {file = "Pillow-9.4.0-1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3f4cc516e0b264c8d4ccd6b6cbc69a07c6d582d8337df79be1e15a5056b258c9"}, - {file = "Pillow-9.4.0-1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b8c2f6eb0df979ee99433d8b3f6d193d9590f735cf12274c108bd954e30ca858"}, - {file = "Pillow-9.4.0-1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b70756ec9417c34e097f987b4d8c510975216ad26ba6e57ccb53bc758f490dab"}, - {file = "Pillow-9.4.0-1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:43521ce2c4b865d385e78579a082b6ad1166ebed2b1a2293c3be1d68dd7ca3b9"}, - {file = "Pillow-9.4.0-2-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:9d9a62576b68cd90f7075876f4e8444487db5eeea0e4df3ba298ee38a8d067b0"}, - {file = "Pillow-9.4.0-2-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:87708d78a14d56a990fbf4f9cb350b7d89ee8988705e58e39bdf4d82c149210f"}, - {file = "Pillow-9.4.0-2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8a2b5874d17e72dfb80d917213abd55d7e1ed2479f38f001f264f7ce7bae757c"}, - {file = "Pillow-9.4.0-2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:83125753a60cfc8c412de5896d10a0a405e0bd88d0470ad82e0869ddf0cb3848"}, - {file = "Pillow-9.4.0-2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9e5f94742033898bfe84c93c831a6f552bb629448d4072dd312306bab3bd96f1"}, - {file = "Pillow-9.4.0-2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:013016af6b3a12a2f40b704677f8b51f72cb007dac785a9933d5c86a72a7fe33"}, - {file = "Pillow-9.4.0-2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:99d92d148dd03fd19d16175b6d355cc1b01faf80dae93c6c3eb4163709edc0a9"}, - {file = "Pillow-9.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:2968c58feca624bb6c8502f9564dd187d0e1389964898f5e9e1fbc8533169157"}, - {file = "Pillow-9.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c5c1362c14aee73f50143d74389b2c158707b4abce2cb055b7ad37ce60738d47"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd752c5ff1b4a870b7661234694f24b1d2b9076b8bf337321a814c612665f343"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3049a10261d7f2b6514d35bbb7a4dfc3ece4c4de14ef5876c4b7a23a0e566d"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16a8df99701f9095bea8a6c4b3197da105df6f74e6176c5b410bc2df2fd29a57"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:94cdff45173b1919350601f82d61365e792895e3c3a3443cf99819e6fbf717a5"}, - {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ed3e4b4e1e6de75fdc16d3259098de7c6571b1a6cc863b1a49e7d3d53e036070"}, - {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5b2f8a31bd43e0f18172d8ac82347c8f37ef3e0b414431157718aa234991b28"}, - {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:09b89ddc95c248ee788328528e6a2996e09eaccddeeb82a5356e92645733be35"}, - {file = "Pillow-9.4.0-cp310-cp310-win32.whl", hash = "sha256:f09598b416ba39a8f489c124447b007fe865f786a89dbfa48bb5cf395693132a"}, - {file = "Pillow-9.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6e78171be3fb7941f9910ea15b4b14ec27725865a73c15277bc39f5ca4f8391"}, - {file = "Pillow-9.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:3fa1284762aacca6dc97474ee9c16f83990b8eeb6697f2ba17140d54b453e133"}, - {file = "Pillow-9.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eaef5d2de3c7e9b21f1e762f289d17b726c2239a42b11e25446abf82b26ac132"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4dfdae195335abb4e89cc9762b2edc524f3c6e80d647a9a81bf81e17e3fb6f0"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6abfb51a82e919e3933eb137e17c4ae9c0475a25508ea88993bb59faf82f3b35"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451f10ef963918e65b8869e17d67db5e2f4ab40e716ee6ce7129b0cde2876eab"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6663977496d616b618b6cfa43ec86e479ee62b942e1da76a2c3daa1c75933ef4"}, - {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:60e7da3a3ad1812c128750fc1bc14a7ceeb8d29f77e0a2356a8fb2aa8925287d"}, - {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:19005a8e58b7c1796bc0167862b1f54a64d3b44ee5d48152b06bb861458bc0f8"}, - {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f715c32e774a60a337b2bb8ad9839b4abf75b267a0f18806f6f4f5f1688c4b5a"}, - {file = "Pillow-9.4.0-cp311-cp311-win32.whl", hash = "sha256:b222090c455d6d1a64e6b7bb5f4035c4dff479e22455c9eaa1bdd4c75b52c80c"}, - {file = "Pillow-9.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba6612b6548220ff5e9df85261bddc811a057b0b465a1226b39bfb8550616aee"}, - {file = "Pillow-9.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5f532a2ad4d174eb73494e7397988e22bf427f91acc8e6ebf5bb10597b49c493"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dd5a9c3091a0f414a963d427f920368e2b6a4c2f7527fdd82cde8ef0bc7a327"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef21af928e807f10bf4141cad4746eee692a0dd3ff56cfb25fce076ec3cc8abe"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:847b114580c5cc9ebaf216dd8c8dbc6b00a3b7ab0131e173d7120e6deade1f57"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:653d7fb2df65efefbcbf81ef5fe5e5be931f1ee4332c2893ca638c9b11a409c4"}, - {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:46f39cab8bbf4a384ba7cb0bc8bae7b7062b6a11cfac1ca4bc144dea90d4a9f5"}, - {file = "Pillow-9.4.0-cp37-cp37m-win32.whl", hash = "sha256:7ac7594397698f77bce84382929747130765f66406dc2cd8b4ab4da68ade4c6e"}, - {file = "Pillow-9.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:46c259e87199041583658457372a183636ae8cd56dbf3f0755e0f376a7f9d0e6"}, - {file = "Pillow-9.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:0e51f608da093e5d9038c592b5b575cadc12fd748af1479b5e858045fff955a9"}, - {file = "Pillow-9.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:765cb54c0b8724a7c12c55146ae4647e0274a839fb6de7bcba841e04298e1011"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:519e14e2c49fcf7616d6d2cfc5c70adae95682ae20f0395e9280db85e8d6c4df"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d197df5489004db87d90b918033edbeee0bd6df3848a204bca3ff0a903bef837"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0845adc64fe9886db00f5ab68c4a8cd933ab749a87747555cec1c95acea64b0b"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e1339790c083c5a4de48f688b4841f18df839eb3c9584a770cbd818b33e26d5d"}, - {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:a96e6e23f2b79433390273eaf8cc94fec9c6370842e577ab10dabdcc7ea0a66b"}, - {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7cfc287da09f9d2a7ec146ee4d72d6ea1342e770d975e49a8621bf54eaa8f30f"}, - {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d7081c084ceb58278dd3cf81f836bc818978c0ccc770cbbb202125ddabec6628"}, - {file = "Pillow-9.4.0-cp38-cp38-win32.whl", hash = "sha256:df41112ccce5d47770a0c13651479fbcd8793f34232a2dd9faeccb75eb5d0d0d"}, - {file = "Pillow-9.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a21222644ab69ddd9967cfe6f2bb420b460dae4289c9d40ff9a4896e7c35c9a"}, - {file = "Pillow-9.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0f3269304c1a7ce82f1759c12ce731ef9b6e95b6df829dccd9fe42912cc48569"}, - {file = "Pillow-9.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cb362e3b0976dc994857391b776ddaa8c13c28a16f80ac6522c23d5257156bed"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e0f87144fcbbe54297cae708c5e7f9da21a4646523456b00cc956bd4c65815"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28676836c7796805914b76b1837a40f76827ee0d5398f72f7dcc634bae7c6264"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0884ba7b515163a1a05440a138adeb722b8a6ae2c2b33aea93ea3118dd3a899e"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:53dcb50fbdc3fb2c55431a9b30caeb2f7027fcd2aeb501459464f0214200a503"}, - {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:e8c5cf126889a4de385c02a2c3d3aba4b00f70234bfddae82a5eaa3ee6d5e3e6"}, - {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c6b1389ed66cdd174d040105123a5a1bc91d0aa7059c7261d20e583b6d8cbd2"}, - {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0dd4c681b82214b36273c18ca7ee87065a50e013112eea7d78c7a1b89a739153"}, - {file = "Pillow-9.4.0-cp39-cp39-win32.whl", hash = "sha256:6d9dfb9959a3b0039ee06c1a1a90dc23bac3b430842dcb97908ddde05870601c"}, - {file = "Pillow-9.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:54614444887e0d3043557d9dbc697dbb16cfb5a35d672b7a0fcc1ed0cf1c600b"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b9b752ab91e78234941e44abdecc07f1f0d8f51fb62941d32995b8161f68cfe5"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3b56206244dc8711f7e8b7d6cad4663917cd5b2d950799425076681e8766286"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aabdab8ec1e7ca7f1434d042bf8b1e92056245fb179790dc97ed040361f16bfd"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db74f5562c09953b2c5f8ec4b7dfd3f5421f31811e97d1dbc0a7c93d6e3a24df"}, - {file = "Pillow-9.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e9d7747847c53a16a729b6ee5e737cf170f7a16611c143d95aa60a109a59c336"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b52ff4f4e002f828ea6483faf4c4e8deea8d743cf801b74910243c58acc6eda3"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:575d8912dca808edd9acd6f7795199332696d3469665ef26163cd090fa1f8bfa"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c4ed2ff6760e98d262e0cc9c9a7f7b8a9f61aa4d47c58835cdaf7b0b8811bb"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e621b0246192d3b9cb1dc62c78cfa4c6f6d2ddc0ec207d43c0dedecb914f152a"}, - {file = "Pillow-9.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8f127e7b028900421cad64f51f75c051b628db17fb00e099eb148761eed598c9"}, - {file = "Pillow-9.4.0.tar.gz", hash = "sha256:a1c2d7780448eb93fbcc3789bf3916aa5720d942e37945f4056680317f1cd23e"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "platformdirs" -version = "2.6.2" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"}, - {file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"}, -] - -[package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "3.0.3" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pre_commit-3.0.3-py2.py3-none-any.whl", hash = "sha256:83e2e8cc5cbb3691cff9474494816918d865120768aa36c9eda6185126667d21"}, - {file = "pre_commit-3.0.3.tar.gz", hash = "sha256:4187e74fda38f0f700256fb2f757774385503b04292047d0899fc913207f314b"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pydocstyle" -version = "6.3.0" -description = "Python docstring style checker" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, - {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, -] - -[package.dependencies] -snowballstemmer = ">=2.2.0" - -[package.extras] -toml = ["tomli (>=1.2.3)"] - -[[package]] -name = "pygments" -version = "2.14.0" -description = "Pygments is a syntax highlighting package written in Python." -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pylint" -version = "2.16.1" -description = "python code static checker" -category = "dev" -optional = false -python-versions = ">=3.7.2" -files = [ - {file = "pylint-2.16.1-py3-none-any.whl", hash = "sha256:bad9d7c36037f6043a1e848a43004dfd5ea5ceb05815d713ba56ca4503a9fe37"}, - {file = "pylint-2.16.1.tar.gz", hash = "sha256:ffe7fa536bb38ba35006a7c8a6d2efbfdd3d95bbf21199cad31f76b1c50aaf30"}, -] - -[package.dependencies] -astroid = ">=2.14.1,<=2.16.0-dev0" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -dill = [ - {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, -] -isort = ">=4.2.5,<6" -mccabe = ">=0.6,<0.8" -platformdirs = ">=2.2.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -tomlkit = ">=0.10.1" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -spelling = ["pyenchant (>=3.2,<4.0)"] -testutils = ["gitpython (>3)"] - -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pysocks" -version = "1.7.1" -description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, - {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, - {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, -] - -[[package]] -name = "pytest" -version = "7.2.1" -description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"}, - {file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"}, -] - -[package.dependencies] -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "4.0.0" -description = "Pytest plugin for measuring coverage." -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, - {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-html" -version = "3.2.0" -description = "pytest plugin for generating HTML reports" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pytest-html-3.2.0.tar.gz", hash = "sha256:c4e2f4bb0bffc437f51ad2174a8a3e71df81bbc2f6894604e604af18fbe687c3"}, - {file = "pytest_html-3.2.0-py3-none-any.whl", hash = "sha256:868c08564a68d8b2c26866f1e33178419bb35b1e127c33784a28622eb827f3f3"}, -] - -[package.dependencies] -py = ">=1.8.2" -pytest = ">=5.0,<6.0.0 || >6.0.0" -pytest-metadata = "*" - -[[package]] -name = "pytest-metadata" -version = "2.0.4" -description = "pytest plugin for test session metadata" -category = "dev" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "pytest_metadata-2.0.4-py3-none-any.whl", hash = "sha256:acb739f89fabb3d798c099e9e0c035003062367a441910aaaf2281bc1972ee14"}, - {file = "pytest_metadata-2.0.4.tar.gz", hash = "sha256:fcc653f65fe3035b478820b5284fbf0f52803622ee3f60a2faed7a7d3ba1f41e"}, -] - -[package.dependencies] -pytest = ">=3.0.0,<8.0.0" - -[[package]] -name = "pyupgrade" -version = "3.3.1" -description = "A tool to automatically upgrade syntax for newer versions." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyupgrade-3.3.1-py2.py3-none-any.whl", hash = "sha256:3b93641963df022d605c78aeae4b5956a5296ea24701eafaef9c487527b77e60"}, - {file = "pyupgrade-3.3.1.tar.gz", hash = "sha256:f88bce38b0ba92c2a9a5063c8629e456e8d919b67d2d42c7ecab82ff196f9813"}, -] - -[package.dependencies] -tokenize-rt = ">=3.2.0" - -[[package]] -name = "pyvirtualdisplay" -version = "3.0" -description = "python wrapper for Xvfb, Xephyr and Xvnc" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "PyVirtualDisplay-3.0-py3-none-any.whl", hash = "sha256:40d4b8dfe4b8de8552e28eb367647f311f88a130bf837fe910e7f180d5477f0e"}, - {file = "PyVirtualDisplay-3.0.tar.gz", hash = "sha256:09755bc3ceb6eb725fb07eca5425f43f2358d3bf08e00d2a9b792a1aedd16159"}, -] - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] - -[[package]] -name = "ratelimit" -version = "2.2.1" -description = "API rate limit decorator" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42"}, -] - -[[package]] -name = "requests" -version = "2.28.2" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=3.7, <4" -files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-toolbelt" -version = "0.10.1" -description = "A utility belt for advanced users of python-requests" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-toolbelt-0.10.1.tar.gz", hash = "sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d"}, - {file = "requests_toolbelt-0.10.1-py2.py3-none-any.whl", hash = "sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7"}, -] - -[package.dependencies] -requests = ">=2.0.1,<3.0.0" - -[[package]] -name = "rich" -version = "13.3.1" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "main" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.3.1-py3-none-any.whl", hash = "sha256:8aa57747f3fc3e977684f0176a88e789be314a99f99b43b75d1e9cb5dc6db9e9"}, - {file = "rich-13.3.1.tar.gz", hash = "sha256:125d96d20c92b946b983d0d392b84ff945461e5a06d3867e9f9e575f8697b67f"}, -] - -[package.dependencies] -markdown-it-py = ">=2.1.0,<3.0.0" -pygments = ">=2.14.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "ruamel.yaml" -version = "0.17.21" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -category = "dev" -optional = false -python-versions = ">=3" -files = [ - {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"}, - {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.6", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""} - -[package.extras] -docs = ["ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel.yaml.clib" -version = "0.2.7" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, - {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, -] - -[[package]] -name = "safety" -version = "2.3.5" -description = "Checks installed dependencies for known vulnerabilities and licenses." -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "safety-2.3.5-py3-none-any.whl", hash = "sha256:2227fcac1b22b53c1615af78872b48348661691450aa25d6704a5504dbd1f7e2"}, - {file = "safety-2.3.5.tar.gz", hash = "sha256:a60c11f8952f412cbb165d70cb1f673a3b43a2ba9a93ce11f97e6a4de834aa3a"}, -] - -[package.dependencies] -Click = ">=8.0.2" -dparse = ">=0.6.2" -packaging = ">=21.0,<22.0" -requests = "*" -"ruamel.yaml" = ">=0.17.21" -setuptools = ">=19.3" - -[package.extras] -github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] -gitlab = ["python-gitlab (>=1.3.0)"] - -[[package]] -name = "selenium" -version = "4.8.0" -description = "" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "selenium-4.8.0-py3-none-any.whl", hash = "sha256:20f28ee4ea9b273b4112a7df5276ebb3052f79ff6eff42a564db6143e5926683"}, - {file = "selenium-4.8.0.tar.gz", hash = "sha256:fee36724d6cf0b18c73781bb8ec7be4a35ab1e2564e64e64e64da75e50e052af"}, -] - -[package.dependencies] -certifi = ">=2021.10.8" -trio = ">=0.17,<1.0" -trio-websocket = ">=0.9,<1.0" -urllib3 = {version = ">=1.26,<2.0", extras = ["socks"]} - -[[package]] -name = "setuptools" -version = "67.1.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools-67.1.0-py3-none-any.whl", hash = "sha256:a7687c12b444eaac951ea87a9627c4f904ac757e7abdc5aac32833234af90378"}, - {file = "setuptools-67.1.0.tar.gz", hash = "sha256:e261cdf010c11a41cb5cb5f1bf3338a7433832029f559a6a7614bd42a967c300"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "shellingham" -version = "1.5.0.post1" -description = "Tool to Detect Surrounding Shell" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "shellingham-1.5.0.post1-py2.py3-none-any.whl", hash = "sha256:368bf8c00754fd4f55afb7bbb86e272df77e4dc76ac29dbcbb81a59e9fc15744"}, - {file = "shellingham-1.5.0.post1.tar.gz", hash = "sha256:823bc5fb5c34d60f285b624e7264f4dda254bc803a3774a147bf99c0e3004a28"}, -] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "smmap" -version = "5.0.0" -description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, -] - -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] - -[[package]] -name = "soupsieve" -version = "2.3.2.post1" -description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, - {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, -] - -[[package]] -name = "stevedore" -version = "4.1.1" -description = "Manage dynamic plugins for Python applications" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "stevedore-4.1.1-py3-none-any.whl", hash = "sha256:aa6436565c069b2946fe4ebff07f5041e0c8bf18c7376dd29edf80cf7d524e4e"}, - {file = "stevedore-4.1.1.tar.gz", hash = "sha256:7f8aeb6e3f90f96832c301bff21a7eb5eefbe894c88c506483d355565d88cc1a"}, -] - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "tokenize-rt" -version = "5.0.0" -description = "A wrapper around the stdlib `tokenize` which roundtrips." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tokenize_rt-5.0.0-py2.py3-none-any.whl", hash = "sha256:c67772c662c6b3dc65edf66808577968fb10badfc2042e3027196bed4daf9e5a"}, - {file = "tokenize_rt-5.0.0.tar.gz", hash = "sha256:3160bc0c3e8491312d0485171dea861fc160a240f5f5766b72a1165408d10740"}, -] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tomlkit" -version = "0.11.6" -description = "Style preserving TOML library" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, - {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, -] - -[[package]] -name = "trio" -version = "0.22.0" -description = "A friendly Python library for async concurrency and I/O" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "trio-0.22.0-py3-none-any.whl", hash = "sha256:f1dd0780a89bfc880c7c7994519cb53f62aacb2c25ff487001c0052bd721cdf0"}, - {file = "trio-0.22.0.tar.gz", hash = "sha256:ce68f1c5400a47b137c5a4de72c7c901bd4e7a24fbdebfe9b41de8c6c04eaacf"}, -] - -[package.dependencies] -async-generator = ">=1.9" -attrs = ">=19.2.0" -cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} -exceptiongroup = {version = ">=1.0.0rc9", markers = "python_version < \"3.11\""} -idna = "*" -outcome = "*" -sniffio = "*" -sortedcontainers = "*" - -[[package]] -name = "trio-websocket" -version = "0.9.2" -description = "WebSocket library for Trio" -category = "main" -optional = false -python-versions = ">=3.5" -files = [ - {file = "trio-websocket-0.9.2.tar.gz", hash = "sha256:a3d34de8fac26023eee701ed1e7bf4da9a8326b61a62934ec9e53b64970fd8fe"}, - {file = "trio_websocket-0.9.2-py3-none-any.whl", hash = "sha256:5b558f6e83cc20a37c3b61202476c5295d1addf57bd65543364e0337e37ed2bc"}, -] - -[package.dependencies] -async-generator = ">=1.10" -trio = ">=0.11" -wsproto = ">=0.14" - -[[package]] -name = "typer" -version = "0.4.2" -description = "Typer, build great CLIs. Easy to code. Based on Python type hints." -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "typer-0.4.2-py3-none-any.whl", hash = "sha256:023bae00d1baf358a6cc7cea45851639360bb716de687b42b0a4641cd99173f1"}, - {file = "typer-0.4.2.tar.gz", hash = "sha256:b8261c6c0152dd73478b5ba96ba677e5d6948c715c310f7c91079f311f62ec03"}, -] - -[package.dependencies] -click = ">=7.1.1,<9.0.0" -colorama = {version = ">=0.4.3,<0.5.0", optional = true, markers = "extra == \"all\""} -shellingham = {version = ">=1.3.0,<2.0.0", optional = true, markers = "extra == \"all\""} - -[package.extras] -all = ["colorama (>=0.4.3,<0.5.0)", "shellingham (>=1.3.0,<2.0.0)"] -dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] -doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)"] -test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<5.4.0)", "pytest-cov (>=2.10.0,<3.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<2.0.0)", "shellingham (>=1.3.0,<2.0.0)"] - -[[package]] -name = "typing-extensions" -version = "4.4.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, -] - -[[package]] -name = "undetected-chromedriver" -version = "3.2.1" -description = "('Selenium.webdriver.Chrome replacement with compatiblity for Brave, and other Chromium based browsers.', 'Not triggered by CloudFlare/Imperva/hCaptcha and such.', 'NOTE: results may vary due to many factors. No guarantees are given, except for ongoing efforts in understanding detection algorithms.')" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "undetected-chromedriver-3.2.1.tar.gz", hash = "sha256:3fe5b6e75b7170efa2f4c53e74bc68ba01d62a30c1a2a5773227fbdd9717d1d8"}, -] - -[package.dependencies] -requests = "*" -selenium = ">=4.0.0" -websockets = "*" - -[[package]] -name = "urllib3" -version = "1.26.14" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, -] - -[package.dependencies] -PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "virtualenv" -version = "20.17.1" -description = "Virtual Python Environment builder" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "virtualenv-20.17.1-py3-none-any.whl", hash = "sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4"}, - {file = "virtualenv-20.17.1.tar.gz", hash = "sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058"}, -] - -[package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -platformdirs = ">=2.4,<3" - -[package.extras] -docs = ["proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-argparse (>=0.3.2)", "sphinx-rtd-theme (>=1)", "towncrier (>=22.8)"] -testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "websockets" -version = "10.4" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, - {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, - {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, - {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, - {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, - {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, - {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, - {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, - {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, - {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, - {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, - {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, - {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, - {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, - {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, - {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, - {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, - {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, - {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, - {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, - {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, - {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, - {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, - {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, - {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, - {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, - {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, - {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, - {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, - {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, -] - -[[package]] -name = "wrapt" -version = "1.14.1" -description = "Module for decorators, wrappers and monkey patching." -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, -] - -[[package]] -name = "wsproto" -version = "1.2.0" -description = "WebSockets state-machine based protocol implementation" -category = "main" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, - {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, -] - -[package.dependencies] -h11 = ">=0.9.0,<1" - -[metadata] -lock-version = "2.0" -python-versions = "^3.9" -content-hash = "9423b19164dc20282d3bef249e40dec9adc180eda16e6db747bdb81c2ee09035" diff --git a/pyproject.toml b/pyproject.toml index 012caa4..761e445 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,177 +1,207 @@ -# Poetry pyproject.toml: https://python-poetry.org/docs/pyproject/ -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" - -[tool.poetry] -name = "youdotcom" -version = "2.0.23" -description = "official api wrapper for you.com and all of its apps" -readme = "README.md" -authors = ["SilkePilon "] -license = "MIT" -repository = "https://github.com/You-OpenSource/You-Python" -homepage = "https://github.com/You-OpenSource/You-Python" - -# Keywords description https://python-poetry.org/docs/pyproject/#keywords -keywords = [] #! Update me - -# Pypi classifiers: https://pypi.org/classifiers/ -classifiers = [ #! Update me - "Development Status :: 3 - Alpha", +[project] +name = "ydc_search_api" +version = "0.0.1-alpha.0" +description = "The official Python library for the ydc-search-api API" +dynamic = ["readme"] +license = "Apache-2.0" +authors = [ +{ name = "Ydc Search API", email = "api@you.com" }, +] +dependencies = [ + "httpx>=0.23.0, <1", + "pydantic>=1.9.0, <3", + "typing-extensions>=4.10, <5", + "anyio>=3.5.0, <5", + "distro>=1.7.0, <2", + "sniffio", +] +requires-python = ">= 3.8" +classifiers = [ + "Typing :: Typed", "Intended Audience :: Developers", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Operating System :: OS Independent", + "Operating System :: POSIX", + "Operating System :: MacOS", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", "Topic :: Software Development :: Libraries :: Python Modules", - "License :: OSI Approved :: MIT License", - "Programming Language :: Python :: 3", + "License :: OSI Approved :: Apache Software License" ] -[tool.poetry.scripts] -# Entry points for the package https://python-poetry.org/docs/pyproject/#scripts -"youdotcom" = "youdotcom.__main__:app" - -[tool.poetry.dependencies] -python = "^3.8" - -typer = {extras = ["all"], version = "^0.4.0"} -rich = ">=10.14,<14.0" -undetected-chromedriver = "^3.2.1" -markdownify = "^0.11.6" -chromedriver-autoinstaller = "^0.4.0" -PyVirtualDisplay = "^3.0" -ascii-magic = "^1.6" -cloudscraper = "^1.2.66" -click-shell = "^2.1" -ratelimit = "^2.2.1" -fastapi-queue = "^0.1.1" -aioredis = "^2.0.1" -fastapi = "^0.92.0" -gtts = "^2.3.1" -slowapi = "^0.1.7" -uvicorn = "^0.20.0" -pydantic = "^1.10.5" - - -[tool.poetry.dev-dependencies] -bandit = "^1.7.4" -black = {version = "^22.12.0", allow-prereleases = true} -darglint = "^1.8.1" -isort = {extras = ["colors"], version = "^5.11.4"} -mypy = "^1.0.1" -mypy-extensions = "^1.0.0" -pre-commit = "^3.0.3" -pydocstyle = "^6.2.3" -pylint = "^2.15.10" -pytest = "^7.2.1" -pyupgrade = "^3.3.1" -safety = "^2.3.5" -coverage = "^7.2.3" -coverage-badge = "^1.1.0" -pytest-html = "^3.2.0" -pytest-cov = "^4.0.0" -click = "8.1.4" - -[tool.poetry.group.dev.dependencies] -bandit = "^1.7.4" -darglint = "^1.8.1" -isort = {extras = ["colors"], version = "^5.12.0"} -mypy = "^1.0.1" -pre-commit = "^3.0.4" -pydocstyle = "^6.3.0" -pylint = "^2.16.2" -pytest = "^7.2.1" -pyupgrade = "^3.3.1" -safety = "^2.3.5" -coverage = "^7.1.0" -coverage-badge = "^1.1.0" -pytest-html = "^3.2.0" -pytest-cov = "^4.0.0" - -[tool.black] -# https://github.com/psf/black -target-version = ["py39"] -line-length = 200 -color = true - -exclude = ''' -/( - \.git - | \.hg - | \.mypy_cache - | \.tox - | \.venv - | _build - | buck-out - | build - | dist - | env - | venv -)/ -''' - -[tool.isort] -# https://github.com/timothycrosley/isort/ -py_version = 39 -line_length = 200 - -known_typing = ["typing", "types", "typing_extensions", "mypy", "mypy_extensions"] -sections = ["FUTURE", "TYPING", "STDLIB", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"] -include_trailing_comma = true -profile = "black" -multi_line_output = 3 -indent = 4 -color_output = true - -[tool.mypy] -# https://mypy.readthedocs.io/en/latest/config_file.html#using-a-pyproject-toml-file -python_version = 3.9 -pretty = true -show_traceback = true -color_output = true - -allow_redefinition = false -check_untyped_defs = true -disallow_any_generics = true -disallow_incomplete_defs = true -ignore_missing_imports = true -implicit_reexport = false -no_implicit_optional = true -show_column_numbers = true -show_error_codes = true -show_error_context = true -strict_equality = true -strict_optional = true -warn_no_return = true -warn_redundant_casts = true -warn_return_any = true -warn_unreachable = true -warn_unused_configs = true -warn_unused_ignores = true +[project.urls] +Homepage = "https://github.com/stainless-sdks/ydc-search-api-python" +Repository = "https://github.com/stainless-sdks/ydc-search-api-python" + + +[tool.rye] +managed = true +# version pins are in requirements-dev.lock +dev-dependencies = [ + "pyright==1.1.399", + "mypy", + "respx", + "pytest", + "pytest-asyncio", + "ruff", + "time-machine", + "nox", + "dirty-equals>=0.6.0", + "importlib-metadata>=6.7.0", + "rich>=13.7.1", + "nest_asyncio==1.6.0", +] +[tool.rye.scripts] +format = { chain = [ + "format:ruff", + "format:docs", + "fix:ruff", + # run formatting again to fix any inconsistencies when imports are stripped + "format:ruff", +]} +"format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md" +"format:ruff" = "ruff format" + +"lint" = { chain = [ + "check:ruff", + "typecheck", + "check:importable", +]} +"check:ruff" = "ruff check ." +"fix:ruff" = "ruff check --fix ." + +"check:importable" = "python -c 'import ydc_search_api'" + +typecheck = { chain = [ + "typecheck:pyright", + "typecheck:mypy" +]} +"typecheck:pyright" = "pyright" +"typecheck:verify-types" = "pyright --verifytypes ydc_search_api --ignoreexternal" +"typecheck:mypy" = "mypy ." -[tool.pytest.ini_options] -# https://docs.pytest.org/en/6.2.x/customize.html#pyproject-toml -# Directories that are not visited by pytest collector: -norecursedirs =["hooks", "*.egg", ".eggs", "dist", "build", "docs", ".tox", ".git", "__pycache__"] -doctest_optionflags = ["NUMBER", "NORMALIZE_WHITESPACE", "IGNORE_EXCEPTION_DETAIL"] - -# Extra options: -addopts = [ - "--strict-markers", - "--tb=short", - "--doctest-modules", - "--doctest-continue-on-failure", +[build-system] +requires = ["hatchling==1.26.3", "hatch-fancy-pypi-readme"] +build-backend = "hatchling.build" + +[tool.hatch.build] +include = [ + "src/*" +] + +[tool.hatch.build.targets.wheel] +packages = ["src/ydc_search_api"] + +[tool.hatch.build.targets.sdist] +# Basically everything except hidden files/directories (such as .github, .devcontainers, .python-version, etc) +include = [ + "/*.toml", + "/*.json", + "/*.lock", + "/*.md", + "/mypy.ini", + "/noxfile.py", + "bin/*", + "examples/*", + "src/*", + "tests/*", ] -[tool.coverage.run] -source = ["tests"] +[tool.hatch.metadata.hooks.fancy-pypi-readme] +content-type = "text/markdown" -[coverage.paths] -source = "youdotcom" +[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]] +path = "README.md" -[coverage.run] -branch = true +[[tool.hatch.metadata.hooks.fancy-pypi-readme.substitutions]] +# replace relative links with absolute links +pattern = '\[(.+?)\]\(((?!https?://)\S+?)\)' +replacement = '[\1](https://github.com/stainless-sdks/ydc-search-api-python/tree/main/\g<2>)' + +[tool.pytest.ini_options] +testpaths = ["tests"] +addopts = "--tb=short" +xfail_strict = true +asyncio_mode = "auto" +asyncio_default_fixture_loop_scope = "session" +filterwarnings = [ + "error" +] + +[tool.pyright] +# this enables practically every flag given by pyright. +# there are a couple of flags that are still disabled by +# default in strict mode as they are experimental and niche. +typeCheckingMode = "strict" +pythonVersion = "3.8" + +exclude = [ + "_dev", + ".venv", + ".nox", +] + +reportImplicitOverride = true +reportOverlappingOverload = false + +reportImportCycles = false +reportPrivateUsage = false + +[tool.ruff] +line-length = 120 +output-format = "grouped" +target-version = "py37" + +[tool.ruff.format] +docstring-code-format = true + +[tool.ruff.lint] +select = [ + # isort + "I", + # bugbear rules + "B", + # remove unused imports + "F401", + # bare except statements + "E722", + # unused arguments + "ARG", + # print statements + "T201", + "T203", + # misuse of typing.TYPE_CHECKING + "TC004", + # import rules + "TID251", +] +ignore = [ + # mutable defaults + "B006", +] +unfixable = [ + # disable auto fix for print statements + "T201", + "T203", +] -[coverage.report] -fail_under = 50 -show_missing = true +[tool.ruff.lint.flake8-tidy-imports.banned-api] +"functools.lru_cache".msg = "This function does not retain type information for the wrapped function's arguments; The `lru_cache` function from `_utils` should be used instead" + +[tool.ruff.lint.isort] +length-sort = true +length-sort-straight = true +combine-as-imports = true +extra-standard-library = ["typing_extensions"] +known-first-party = ["ydc_search_api", "tests"] + +[tool.ruff.lint.per-file-ignores] +"bin/**.py" = ["T201", "T203"] +"scripts/**.py" = ["T201", "T203"] +"tests/**.py" = ["T201", "T203"] +"examples/**.py" = ["T201", "T203"] diff --git a/release.py b/release.py deleted file mode 100755 index 241d27c..0000000 --- a/release.py +++ /dev/null @@ -1,35 +0,0 @@ -import os -import subprocess -import sys -from importlib import metadata as importlib_metadata - -from github_release import gh_release_create - -version = subprocess.run(["poetry", "version", "-s"], capture_output=True, text=True).stdout.rstrip() - -title = input("title: ") - - -notes = input(r"changes (use \ for a enter): ") - - -with open("RELEASE.md") as file: - # read a list of lines into data - data = file.readlines() - - -notes = str(notes).replace("\\", "\n") -print(len(data)) -data[17] = f"{notes}" - - -with open("RELEASE.md", "w") as file: - file.writelines(data) - - -with open("RELEASE.md") as file2: - # read a list of lines into data - text = file2.read() - - -gh_release_create("You-OpenSource/You-Python", f"{version}", publish=True, name=f"{title} - {version}", body=f"{text}") diff --git a/requirements-dev.lock b/requirements-dev.lock new file mode 100644 index 0000000..a43e4f6 --- /dev/null +++ b/requirements-dev.lock @@ -0,0 +1,104 @@ +# generated by rye +# use `rye lock` or `rye sync` to update this lockfile +# +# last locked with the following flags: +# pre: false +# features: [] +# all-features: true +# with-sources: false +# generate-hashes: false +# universal: false + +-e file:. +annotated-types==0.6.0 + # via pydantic +anyio==4.4.0 + # via httpx + # via ydc-search-api +argcomplete==3.1.2 + # via nox +certifi==2023.7.22 + # via httpcore + # via httpx +colorlog==6.7.0 + # via nox +dirty-equals==0.6.0 +distlib==0.3.7 + # via virtualenv +distro==1.8.0 + # via ydc-search-api +exceptiongroup==1.2.2 + # via anyio + # via pytest +filelock==3.12.4 + # via virtualenv +h11==0.14.0 + # via httpcore +httpcore==1.0.2 + # via httpx +httpx==0.28.1 + # via respx + # via ydc-search-api +idna==3.4 + # via anyio + # via httpx +importlib-metadata==7.0.0 +iniconfig==2.0.0 + # via pytest +markdown-it-py==3.0.0 + # via rich +mdurl==0.1.2 + # via markdown-it-py +mypy==1.14.1 +mypy-extensions==1.0.0 + # via mypy +nest-asyncio==1.6.0 +nodeenv==1.8.0 + # via pyright +nox==2023.4.22 +packaging==23.2 + # via nox + # via pytest +platformdirs==3.11.0 + # via virtualenv +pluggy==1.5.0 + # via pytest +pydantic==2.10.3 + # via ydc-search-api +pydantic-core==2.27.1 + # via pydantic +pygments==2.18.0 + # via rich +pyright==1.1.399 +pytest==8.3.3 + # via pytest-asyncio +pytest-asyncio==0.24.0 +python-dateutil==2.8.2 + # via time-machine +pytz==2023.3.post1 + # via dirty-equals +respx==0.22.0 +rich==13.7.1 +ruff==0.9.4 +setuptools==68.2.2 + # via nodeenv +six==1.16.0 + # via python-dateutil +sniffio==1.3.0 + # via anyio + # via ydc-search-api +time-machine==2.9.0 +tomli==2.0.2 + # via mypy + # via pytest +typing-extensions==4.12.2 + # via anyio + # via mypy + # via pydantic + # via pydantic-core + # via pyright + # via ydc-search-api +virtualenv==20.24.5 + # via nox +zipp==3.17.0 + # via importlib-metadata diff --git a/requirements.lock b/requirements.lock new file mode 100644 index 0000000..fa21cf0 --- /dev/null +++ b/requirements.lock @@ -0,0 +1,45 @@ +# generated by rye +# use `rye lock` or `rye sync` to update this lockfile +# +# last locked with the following flags: +# pre: false +# features: [] +# all-features: true +# with-sources: false +# generate-hashes: false +# universal: false + +-e file:. +annotated-types==0.6.0 + # via pydantic +anyio==4.4.0 + # via httpx + # via ydc-search-api +certifi==2023.7.22 + # via httpcore + # via httpx +distro==1.8.0 + # via ydc-search-api +exceptiongroup==1.2.2 + # via anyio +h11==0.14.0 + # via httpcore +httpcore==1.0.2 + # via httpx +httpx==0.28.1 + # via ydc-search-api +idna==3.4 + # via anyio + # via httpx +pydantic==2.10.3 + # via ydc-search-api +pydantic-core==2.27.1 + # via pydantic +sniffio==1.3.0 + # via anyio + # via ydc-search-api +typing-extensions==4.12.2 + # via anyio + # via pydantic + # via pydantic-core + # via ydc-search-api diff --git a/requirements.txt b/requirements.txt deleted file mode 100755 index d96280a..0000000 --- a/requirements.txt +++ /dev/null @@ -1,34 +0,0 @@ -async-generator==1.10; python_version >= "3.7" and python_version < "4.0" -attrs==22.2.0; python_version >= "3.7" and python_version < "4.0" -beautifulsoup4==4.11.2; python_full_version >= "3.6.0" -certifi==2022.12.7; python_version >= "3.7" and python_version < "4" -cffi==1.15.1; os_name == "nt" and implementation_name != "pypy" and python_version >= "3.7" and python_version < "4.0" -charset-normalizer==2.1.1; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" -chromedriver-autoinstaller==0.4.0; python_version >= "3.6" -click==8.0.4; python_version >= "3.6" -colorama==0.4.6; python_version >= "3.6" and python_full_version >= "3.7.0" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.7.0") -commonmark==0.9.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0" -exceptiongroup==1.1.0; python_version >= "3.7" and python_version < "3.11" -h11==0.14.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0" -idna==3.4; python_version >= "3.7" and python_version < "4" -markdownify==0.11.6 -outcome==1.2.0; python_version >= "3.7" and python_version < "4.0" -pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" and os_name == "nt" and implementation_name != "pypy" and python_version < "4.0" or os_name == "nt" and implementation_name != "pypy" and python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0" -pygments==2.13.0; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and python_version >= "3.6" -pysocks==1.7.1; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" -pyvirtualdisplay==3.0 -requests==2.28.1; python_version >= "3.7" and python_version < "4" -rich==10.16.2; python_full_version >= "3.6.2" and python_full_version < "4.0.0" -selenium==4.7.2; python_version >= "3.7" and python_version < "4.0" -shellingham==1.5.0.post1; python_version >= "3.6" -six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" -sniffio==1.3.0; python_version >= "3.7" and python_version < "4.0" -sortedcontainers==2.4.0; python_version >= "3.7" and python_version < "4.0" -soupsieve==2.3.2.post1; python_version >= "3.6" and python_full_version >= "3.6.0" -trio-websocket==0.9.2; python_version >= "3.7" and python_version < "4.0" -trio==0.22.0; python_version >= "3.7" and python_version < "4.0" -typer==0.4.2; python_version >= "3.6" -undetected-chromedriver==3.2.1 -urllib3==1.26.13; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" -websockets==10.4; python_version >= "3.7" -wsproto==1.2.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0" diff --git a/scripts/bootstrap b/scripts/bootstrap new file mode 100755 index 0000000..e84fe62 --- /dev/null +++ b/scripts/bootstrap @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +set -e + +cd "$(dirname "$0")/.." + +if ! command -v rye >/dev/null 2>&1 && [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ]; then + brew bundle check >/dev/null 2>&1 || { + echo "==> Installing Homebrew dependencies…" + brew bundle + } +fi + +echo "==> Installing Python dependencies…" + +# experimental uv support makes installations significantly faster +rye config --set-bool behavior.use-uv=true + +rye sync --all-features diff --git a/scripts/format b/scripts/format new file mode 100755 index 0000000..667ec2d --- /dev/null +++ b/scripts/format @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -e + +cd "$(dirname "$0")/.." + +echo "==> Running formatters" +rye run format diff --git a/scripts/lint b/scripts/lint new file mode 100755 index 0000000..c910263 --- /dev/null +++ b/scripts/lint @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -e + +cd "$(dirname "$0")/.." + +echo "==> Running lints" +rye run lint + +echo "==> Making sure it imports" +rye run python -c 'import ydc_search_api' diff --git a/scripts/mock b/scripts/mock new file mode 100755 index 0000000..d2814ae --- /dev/null +++ b/scripts/mock @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +set -e + +cd "$(dirname "$0")/.." + +if [[ -n "$1" && "$1" != '--'* ]]; then + URL="$1" + shift +else + URL="$(grep 'openapi_spec_url' .stats.yml | cut -d' ' -f2)" +fi + +# Check if the URL is empty +if [ -z "$URL" ]; then + echo "Error: No OpenAPI spec path/url provided or found in .stats.yml" + exit 1 +fi + +echo "==> Starting mock server with URL ${URL}" + +# Run prism mock on the given spec +if [ "$1" == "--daemon" ]; then + npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL" &> .prism.log & + + # Wait for server to come online + echo -n "Waiting for server" + while ! grep -q "βœ– fatal\|Prism is listening" ".prism.log" ; do + echo -n "." + sleep 0.1 + done + + if grep -q "βœ– fatal" ".prism.log"; then + cat .prism.log + exit 1 + fi + + echo +else + npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL" +fi diff --git a/scripts/test b/scripts/test new file mode 100755 index 0000000..2b87845 --- /dev/null +++ b/scripts/test @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +set -e + +cd "$(dirname "$0")/.." + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +NC='\033[0m' # No Color + +function prism_is_running() { + curl --silent "http://localhost:4010" >/dev/null 2>&1 +} + +kill_server_on_port() { + pids=$(lsof -t -i tcp:"$1" || echo "") + if [ "$pids" != "" ]; then + kill "$pids" + echo "Stopped $pids." + fi +} + +function is_overriding_api_base_url() { + [ -n "$TEST_API_BASE_URL" ] +} + +if ! is_overriding_api_base_url && ! prism_is_running ; then + # When we exit this script, make sure to kill the background mock server process + trap 'kill_server_on_port 4010' EXIT + + # Start the dev server + ./scripts/mock --daemon +fi + +if is_overriding_api_base_url ; then + echo -e "${GREEN}βœ” Running tests against ${TEST_API_BASE_URL}${NC}" + echo +elif ! prism_is_running ; then + echo -e "${RED}ERROR:${NC} The test suite will not run without a mock Prism server" + echo -e "running against your OpenAPI spec." + echo + echo -e "To run the server, pass in the path or url of your OpenAPI" + echo -e "spec to the prism command:" + echo + echo -e " \$ ${YELLOW}npm exec --package=@stoplight/prism-cli@~5.3.2 -- prism mock path/to/your.openapi.yml${NC}" + echo + + exit 1 +else + echo -e "${GREEN}βœ” Mock prism server is running with your OpenAPI spec${NC}" + echo +fi + +export DEFER_PYDANTIC_BUILD=false + +echo "==> Running tests" +rye run pytest "$@" + +echo "==> Running Pydantic v1 tests" +rye run nox -s test-pydantic-v1 -- "$@" diff --git a/scripts/utils/ruffen-docs.py b/scripts/utils/ruffen-docs.py new file mode 100644 index 0000000..0cf2bd2 --- /dev/null +++ b/scripts/utils/ruffen-docs.py @@ -0,0 +1,167 @@ +# fork of https://github.com/asottile/blacken-docs adapted for ruff +from __future__ import annotations + +import re +import sys +import argparse +import textwrap +import contextlib +import subprocess +from typing import Match, Optional, Sequence, Generator, NamedTuple, cast + +MD_RE = re.compile( + r"(?P^(?P *)```\s*python\n)" r"(?P.*?)" r"(?P^(?P=indent)```\s*$)", + re.DOTALL | re.MULTILINE, +) +MD_PYCON_RE = re.compile( + r"(?P^(?P *)```\s*pycon\n)" r"(?P.*?)" r"(?P^(?P=indent)```.*$)", + re.DOTALL | re.MULTILINE, +) +PYCON_PREFIX = ">>> " +PYCON_CONTINUATION_PREFIX = "..." +PYCON_CONTINUATION_RE = re.compile( + rf"^{re.escape(PYCON_CONTINUATION_PREFIX)}( |$)", +) +DEFAULT_LINE_LENGTH = 100 + + +class CodeBlockError(NamedTuple): + offset: int + exc: Exception + + +def format_str( + src: str, +) -> tuple[str, Sequence[CodeBlockError]]: + errors: list[CodeBlockError] = [] + + @contextlib.contextmanager + def _collect_error(match: Match[str]) -> Generator[None, None, None]: + try: + yield + except Exception as e: + errors.append(CodeBlockError(match.start(), e)) + + def _md_match(match: Match[str]) -> str: + code = textwrap.dedent(match["code"]) + with _collect_error(match): + code = format_code_block(code) + code = textwrap.indent(code, match["indent"]) + return f"{match['before']}{code}{match['after']}" + + def _pycon_match(match: Match[str]) -> str: + code = "" + fragment = cast(Optional[str], None) + + def finish_fragment() -> None: + nonlocal code + nonlocal fragment + + if fragment is not None: + with _collect_error(match): + fragment = format_code_block(fragment) + fragment_lines = fragment.splitlines() + code += f"{PYCON_PREFIX}{fragment_lines[0]}\n" + for line in fragment_lines[1:]: + # Skip blank lines to handle Black adding a blank above + # functions within blocks. A blank line would end the REPL + # continuation prompt. + # + # >>> if True: + # ... def f(): + # ... pass + # ... + if line: + code += f"{PYCON_CONTINUATION_PREFIX} {line}\n" + if fragment_lines[-1].startswith(" "): + code += f"{PYCON_CONTINUATION_PREFIX}\n" + fragment = None + + indentation = None + for line in match["code"].splitlines(): + orig_line, line = line, line.lstrip() + if indentation is None and line: + indentation = len(orig_line) - len(line) + continuation_match = PYCON_CONTINUATION_RE.match(line) + if continuation_match and fragment is not None: + fragment += line[continuation_match.end() :] + "\n" + else: + finish_fragment() + if line.startswith(PYCON_PREFIX): + fragment = line[len(PYCON_PREFIX) :] + "\n" + else: + code += orig_line[indentation:] + "\n" + finish_fragment() + return code + + def _md_pycon_match(match: Match[str]) -> str: + code = _pycon_match(match) + code = textwrap.indent(code, match["indent"]) + return f"{match['before']}{code}{match['after']}" + + src = MD_RE.sub(_md_match, src) + src = MD_PYCON_RE.sub(_md_pycon_match, src) + return src, errors + + +def format_code_block(code: str) -> str: + return subprocess.check_output( + [ + sys.executable, + "-m", + "ruff", + "format", + "--stdin-filename=script.py", + f"--line-length={DEFAULT_LINE_LENGTH}", + ], + encoding="utf-8", + input=code, + ) + + +def format_file( + filename: str, + skip_errors: bool, +) -> int: + with open(filename, encoding="UTF-8") as f: + contents = f.read() + new_contents, errors = format_str(contents) + for error in errors: + lineno = contents[: error.offset].count("\n") + 1 + print(f"{filename}:{lineno}: code block parse error {error.exc}") + if errors and not skip_errors: + return 1 + if contents != new_contents: + print(f"{filename}: Rewriting...") + with open(filename, "w", encoding="UTF-8") as f: + f.write(new_contents) + return 0 + else: + return 0 + + +def main(argv: Sequence[str] | None = None) -> int: + parser = argparse.ArgumentParser() + parser.add_argument( + "-l", + "--line-length", + type=int, + default=DEFAULT_LINE_LENGTH, + ) + parser.add_argument( + "-S", + "--skip-string-normalization", + action="store_true", + ) + parser.add_argument("-E", "--skip-errors", action="store_true") + parser.add_argument("filenames", nargs="*") + args = parser.parse_args(argv) + + retv = 0 + for filename in args.filenames: + retv |= format_file(filename, skip_errors=args.skip_errors) + return retv + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/setup.cfg b/setup.cfg deleted file mode 100755 index 3c46a08..0000000 --- a/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[darglint] -# https://github.com/terrencepreilly/darglint -strictness = long -docstring_style = google diff --git a/src/ydc_search_api/__init__.py b/src/ydc_search_api/__init__.py new file mode 100644 index 0000000..d3b6fd7 --- /dev/null +++ b/src/ydc_search_api/__init__.py @@ -0,0 +1,94 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from . import types +from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes +from ._utils import file_from_path +from ._client import ( + Client, + Stream, + Timeout, + Transport, + AsyncClient, + AsyncStream, + YdcSearchAPI, + RequestOptions, + AsyncYdcSearchAPI, +) +from ._models import BaseModel +from ._version import __title__, __version__ +from ._response import APIResponse as APIResponse, AsyncAPIResponse as AsyncAPIResponse +from ._constants import DEFAULT_TIMEOUT, DEFAULT_MAX_RETRIES, DEFAULT_CONNECTION_LIMITS +from ._exceptions import ( + APIError, + ConflictError, + NotFoundError, + APIStatusError, + RateLimitError, + APITimeoutError, + BadRequestError, + YdcSearchAPIError, + APIConnectionError, + AuthenticationError, + InternalServerError, + PermissionDeniedError, + UnprocessableEntityError, + APIResponseValidationError, +) +from ._base_client import DefaultHttpxClient, DefaultAsyncHttpxClient +from ._utils._logs import setup_logging as _setup_logging + +__all__ = [ + "types", + "__version__", + "__title__", + "NoneType", + "Transport", + "ProxiesTypes", + "NotGiven", + "NOT_GIVEN", + "Omit", + "YdcSearchAPIError", + "APIError", + "APIStatusError", + "APITimeoutError", + "APIConnectionError", + "APIResponseValidationError", + "BadRequestError", + "AuthenticationError", + "PermissionDeniedError", + "NotFoundError", + "ConflictError", + "UnprocessableEntityError", + "RateLimitError", + "InternalServerError", + "Timeout", + "RequestOptions", + "Client", + "AsyncClient", + "Stream", + "AsyncStream", + "YdcSearchAPI", + "AsyncYdcSearchAPI", + "file_from_path", + "BaseModel", + "DEFAULT_TIMEOUT", + "DEFAULT_MAX_RETRIES", + "DEFAULT_CONNECTION_LIMITS", + "DefaultHttpxClient", + "DefaultAsyncHttpxClient", +] + +_setup_logging() + +# Update the __module__ attribute for exported symbols so that +# error messages point to this module instead of the module +# it was originally defined in, e.g. +# ydc_search_api._exceptions.NotFoundError -> ydc_search_api.NotFoundError +__locals = locals() +for __name in __all__: + if not __name.startswith("__"): + try: + __locals[__name].__module__ = "ydc_search_api" + except (TypeError, AttributeError): + # Some of our exported symbols are builtins which we can't set attributes for. + pass diff --git a/src/ydc_search_api/_base_client.py b/src/ydc_search_api/_base_client.py new file mode 100644 index 0000000..38f3381 --- /dev/null +++ b/src/ydc_search_api/_base_client.py @@ -0,0 +1,1943 @@ +from __future__ import annotations + +import sys +import json +import time +import uuid +import email +import asyncio +import inspect +import logging +import platform +import email.utils +from types import TracebackType +from random import random +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Type, + Union, + Generic, + Mapping, + TypeVar, + Iterable, + Iterator, + Optional, + Generator, + AsyncIterator, + cast, + overload, +) +from typing_extensions import Literal, override, get_origin + +import anyio +import httpx +import distro +import pydantic +from httpx import URL +from pydantic import PrivateAttr + +from . import _exceptions +from ._qs import Querystring +from ._files import to_httpx_files, async_to_httpx_files +from ._types import ( + NOT_GIVEN, + Body, + Omit, + Query, + Headers, + Timeout, + NotGiven, + ResponseT, + AnyMapping, + PostParser, + RequestFiles, + HttpxSendArgs, + RequestOptions, + HttpxRequestFiles, + ModelBuilderProtocol, +) +from ._utils import is_dict, is_list, asyncify, is_given, lru_cache, is_mapping +from ._compat import PYDANTIC_V2, model_copy, model_dump +from ._models import GenericModel, FinalRequestOptions, validate_type, construct_type +from ._response import ( + APIResponse, + BaseAPIResponse, + AsyncAPIResponse, + extract_response_type, +) +from ._constants import ( + DEFAULT_TIMEOUT, + MAX_RETRY_DELAY, + DEFAULT_MAX_RETRIES, + INITIAL_RETRY_DELAY, + RAW_RESPONSE_HEADER, + OVERRIDE_CAST_TO_HEADER, + DEFAULT_CONNECTION_LIMITS, +) +from ._streaming import Stream, SSEDecoder, AsyncStream, SSEBytesDecoder +from ._exceptions import ( + APIStatusError, + APITimeoutError, + APIConnectionError, + APIResponseValidationError, +) + +log: logging.Logger = logging.getLogger(__name__) + +# TODO: make base page type vars covariant +SyncPageT = TypeVar("SyncPageT", bound="BaseSyncPage[Any]") +AsyncPageT = TypeVar("AsyncPageT", bound="BaseAsyncPage[Any]") + + +_T = TypeVar("_T") +_T_co = TypeVar("_T_co", covariant=True) + +_StreamT = TypeVar("_StreamT", bound=Stream[Any]) +_AsyncStreamT = TypeVar("_AsyncStreamT", bound=AsyncStream[Any]) + +if TYPE_CHECKING: + from httpx._config import ( + DEFAULT_TIMEOUT_CONFIG, # pyright: ignore[reportPrivateImportUsage] + ) + + HTTPX_DEFAULT_TIMEOUT = DEFAULT_TIMEOUT_CONFIG +else: + try: + from httpx._config import DEFAULT_TIMEOUT_CONFIG as HTTPX_DEFAULT_TIMEOUT + except ImportError: + # taken from https://github.com/encode/httpx/blob/3ba5fe0d7ac70222590e759c31442b1cab263791/httpx/_config.py#L366 + HTTPX_DEFAULT_TIMEOUT = Timeout(5.0) + + +class PageInfo: + """Stores the necessary information to build the request to retrieve the next page. + + Either `url` or `params` must be set. + """ + + url: URL | NotGiven + params: Query | NotGiven + json: Body | NotGiven + + @overload + def __init__( + self, + *, + url: URL, + ) -> None: ... + + @overload + def __init__( + self, + *, + params: Query, + ) -> None: ... + + @overload + def __init__( + self, + *, + json: Body, + ) -> None: ... + + def __init__( + self, + *, + url: URL | NotGiven = NOT_GIVEN, + json: Body | NotGiven = NOT_GIVEN, + params: Query | NotGiven = NOT_GIVEN, + ) -> None: + self.url = url + self.json = json + self.params = params + + @override + def __repr__(self) -> str: + if self.url: + return f"{self.__class__.__name__}(url={self.url})" + if self.json: + return f"{self.__class__.__name__}(json={self.json})" + return f"{self.__class__.__name__}(params={self.params})" + + +class BasePage(GenericModel, Generic[_T]): + """ + Defines the core interface for pagination. + + Type Args: + ModelT: The pydantic model that represents an item in the response. + + Methods: + has_next_page(): Check if there is another page available + next_page_info(): Get the necessary information to make a request for the next page + """ + + _options: FinalRequestOptions = PrivateAttr() + _model: Type[_T] = PrivateAttr() + + def has_next_page(self) -> bool: + items = self._get_page_items() + if not items: + return False + return self.next_page_info() is not None + + def next_page_info(self) -> Optional[PageInfo]: ... + + def _get_page_items(self) -> Iterable[_T]: # type: ignore[empty-body] + ... + + def _params_from_url(self, url: URL) -> httpx.QueryParams: + # TODO: do we have to preprocess params here? + return httpx.QueryParams(cast(Any, self._options.params)).merge(url.params) + + def _info_to_options(self, info: PageInfo) -> FinalRequestOptions: + options = model_copy(self._options) + options._strip_raw_response_header() + + if not isinstance(info.params, NotGiven): + options.params = {**options.params, **info.params} + return options + + if not isinstance(info.url, NotGiven): + params = self._params_from_url(info.url) + url = info.url.copy_with(params=params) + options.params = dict(url.params) + options.url = str(url) + return options + + if not isinstance(info.json, NotGiven): + if not is_mapping(info.json): + raise TypeError("Pagination is only supported with mappings") + + if not options.json_data: + options.json_data = {**info.json} + else: + if not is_mapping(options.json_data): + raise TypeError("Pagination is only supported with mappings") + + options.json_data = {**options.json_data, **info.json} + return options + + raise ValueError("Unexpected PageInfo state") + + +class BaseSyncPage(BasePage[_T], Generic[_T]): + _client: SyncAPIClient = pydantic.PrivateAttr() + + def _set_private_attributes( + self, + client: SyncAPIClient, + model: Type[_T], + options: FinalRequestOptions, + ) -> None: + if PYDANTIC_V2 and getattr(self, "__pydantic_private__", None) is None: + self.__pydantic_private__ = {} + + self._model = model + self._client = client + self._options = options + + # Pydantic uses a custom `__iter__` method to support casting BaseModels + # to dictionaries. e.g. dict(model). + # As we want to support `for item in page`, this is inherently incompatible + # with the default pydantic behaviour. It is not possible to support both + # use cases at once. Fortunately, this is not a big deal as all other pydantic + # methods should continue to work as expected as there is an alternative method + # to cast a model to a dictionary, model.dict(), which is used internally + # by pydantic. + def __iter__(self) -> Iterator[_T]: # type: ignore + for page in self.iter_pages(): + for item in page._get_page_items(): + yield item + + def iter_pages(self: SyncPageT) -> Iterator[SyncPageT]: + page = self + while True: + yield page + if page.has_next_page(): + page = page.get_next_page() + else: + return + + def get_next_page(self: SyncPageT) -> SyncPageT: + info = self.next_page_info() + if not info: + raise RuntimeError( + "No next page expected; please check `.has_next_page()` before calling `.get_next_page()`." + ) + + options = self._info_to_options(info) + return self._client._request_api_list(self._model, page=self.__class__, options=options) + + +class AsyncPaginator(Generic[_T, AsyncPageT]): + def __init__( + self, + client: AsyncAPIClient, + options: FinalRequestOptions, + page_cls: Type[AsyncPageT], + model: Type[_T], + ) -> None: + self._model = model + self._client = client + self._options = options + self._page_cls = page_cls + + def __await__(self) -> Generator[Any, None, AsyncPageT]: + return self._get_page().__await__() + + async def _get_page(self) -> AsyncPageT: + def _parser(resp: AsyncPageT) -> AsyncPageT: + resp._set_private_attributes( + model=self._model, + options=self._options, + client=self._client, + ) + return resp + + self._options.post_parser = _parser + + return await self._client.request(self._page_cls, self._options) + + async def __aiter__(self) -> AsyncIterator[_T]: + # https://github.com/microsoft/pyright/issues/3464 + page = cast( + AsyncPageT, + await self, # type: ignore + ) + async for item in page: + yield item + + +class BaseAsyncPage(BasePage[_T], Generic[_T]): + _client: AsyncAPIClient = pydantic.PrivateAttr() + + def _set_private_attributes( + self, + model: Type[_T], + client: AsyncAPIClient, + options: FinalRequestOptions, + ) -> None: + if PYDANTIC_V2 and getattr(self, "__pydantic_private__", None) is None: + self.__pydantic_private__ = {} + + self._model = model + self._client = client + self._options = options + + async def __aiter__(self) -> AsyncIterator[_T]: + async for page in self.iter_pages(): + for item in page._get_page_items(): + yield item + + async def iter_pages(self: AsyncPageT) -> AsyncIterator[AsyncPageT]: + page = self + while True: + yield page + if page.has_next_page(): + page = await page.get_next_page() + else: + return + + async def get_next_page(self: AsyncPageT) -> AsyncPageT: + info = self.next_page_info() + if not info: + raise RuntimeError( + "No next page expected; please check `.has_next_page()` before calling `.get_next_page()`." + ) + + options = self._info_to_options(info) + return await self._client._request_api_list(self._model, page=self.__class__, options=options) + + +_HttpxClientT = TypeVar("_HttpxClientT", bound=Union[httpx.Client, httpx.AsyncClient]) +_DefaultStreamT = TypeVar("_DefaultStreamT", bound=Union[Stream[Any], AsyncStream[Any]]) + + +class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]): + _client: _HttpxClientT + _version: str + _base_url: URL + max_retries: int + timeout: Union[float, Timeout, None] + _strict_response_validation: bool + _idempotency_header: str | None + _default_stream_cls: type[_DefaultStreamT] | None = None + + def __init__( + self, + *, + version: str, + base_url: str | URL, + _strict_response_validation: bool, + max_retries: int = DEFAULT_MAX_RETRIES, + timeout: float | Timeout | None = DEFAULT_TIMEOUT, + custom_headers: Mapping[str, str] | None = None, + custom_query: Mapping[str, object] | None = None, + ) -> None: + self._version = version + self._base_url = self._enforce_trailing_slash(URL(base_url)) + self.max_retries = max_retries + self.timeout = timeout + self._custom_headers = custom_headers or {} + self._custom_query = custom_query or {} + self._strict_response_validation = _strict_response_validation + self._idempotency_header = None + self._platform: Platform | None = None + + if max_retries is None: # pyright: ignore[reportUnnecessaryComparison] + raise TypeError( + "max_retries cannot be None. If you want to disable retries, pass `0`; if you want unlimited retries, pass `math.inf` or a very high number; if you want the default behavior, pass `ydc_search_api.DEFAULT_MAX_RETRIES`" + ) + + def _enforce_trailing_slash(self, url: URL) -> URL: + if url.raw_path.endswith(b"/"): + return url + return url.copy_with(raw_path=url.raw_path + b"/") + + def _make_status_error_from_response( + self, + response: httpx.Response, + ) -> APIStatusError: + if response.is_closed and not response.is_stream_consumed: + # We can't read the response body as it has been closed + # before it was read. This can happen if an event hook + # raises a status error. + body = None + err_msg = f"Error code: {response.status_code}" + else: + err_text = response.text.strip() + body = err_text + + try: + body = json.loads(err_text) + err_msg = f"Error code: {response.status_code} - {body}" + except Exception: + err_msg = err_text or f"Error code: {response.status_code}" + + return self._make_status_error(err_msg, body=body, response=response) + + def _make_status_error( + self, + err_msg: str, + *, + body: object, + response: httpx.Response, + ) -> _exceptions.APIStatusError: + raise NotImplementedError() + + def _build_headers(self, options: FinalRequestOptions, *, retries_taken: int = 0) -> httpx.Headers: + custom_headers = options.headers or {} + headers_dict = _merge_mappings(self.default_headers, custom_headers) + self._validate_headers(headers_dict, custom_headers) + + # headers are case-insensitive while dictionaries are not. + headers = httpx.Headers(headers_dict) + + idempotency_header = self._idempotency_header + if idempotency_header and options.idempotency_key and idempotency_header not in headers: + headers[idempotency_header] = options.idempotency_key + + # Don't set these headers if they were already set or removed by the caller. We check + # `custom_headers`, which can contain `Omit()`, instead of `headers` to account for the removal case. + lower_custom_headers = [header.lower() for header in custom_headers] + if "x-stainless-retry-count" not in lower_custom_headers: + headers["x-stainless-retry-count"] = str(retries_taken) + if "x-stainless-read-timeout" not in lower_custom_headers: + timeout = self.timeout if isinstance(options.timeout, NotGiven) else options.timeout + if isinstance(timeout, Timeout): + timeout = timeout.read + if timeout is not None: + headers["x-stainless-read-timeout"] = str(timeout) + + return headers + + def _prepare_url(self, url: str) -> URL: + """ + Merge a URL argument together with any 'base_url' on the client, + to create the URL used for the outgoing request. + """ + # Copied from httpx's `_merge_url` method. + merge_url = URL(url) + if merge_url.is_relative_url: + merge_raw_path = self.base_url.raw_path + merge_url.raw_path.lstrip(b"/") + return self.base_url.copy_with(raw_path=merge_raw_path) + + return merge_url + + def _make_sse_decoder(self) -> SSEDecoder | SSEBytesDecoder: + return SSEDecoder() + + def _build_request( + self, + options: FinalRequestOptions, + *, + retries_taken: int = 0, + ) -> httpx.Request: + if log.isEnabledFor(logging.DEBUG): + log.debug("Request options: %s", model_dump(options, exclude_unset=True)) + + kwargs: dict[str, Any] = {} + + json_data = options.json_data + if options.extra_json is not None: + if json_data is None: + json_data = cast(Body, options.extra_json) + elif is_mapping(json_data): + json_data = _merge_mappings(json_data, options.extra_json) + else: + raise RuntimeError(f"Unexpected JSON data type, {type(json_data)}, cannot merge with `extra_body`") + + headers = self._build_headers(options, retries_taken=retries_taken) + params = _merge_mappings(self.default_query, options.params) + content_type = headers.get("Content-Type") + files = options.files + + # If the given Content-Type header is multipart/form-data then it + # has to be removed so that httpx can generate the header with + # additional information for us as it has to be in this form + # for the server to be able to correctly parse the request: + # multipart/form-data; boundary=---abc-- + if content_type is not None and content_type.startswith("multipart/form-data"): + if "boundary" not in content_type: + # only remove the header if the boundary hasn't been explicitly set + # as the caller doesn't want httpx to come up with their own boundary + headers.pop("Content-Type") + + # As we are now sending multipart/form-data instead of application/json + # we need to tell httpx to use it, https://www.python-httpx.org/advanced/clients/#multipart-file-encoding + if json_data: + if not is_dict(json_data): + raise TypeError( + f"Expected query input to be a dictionary for multipart requests but got {type(json_data)} instead." + ) + kwargs["data"] = self._serialize_multipartform(json_data) + + # httpx determines whether or not to send a "multipart/form-data" + # request based on the truthiness of the "files" argument. + # This gets around that issue by generating a dict value that + # evaluates to true. + # + # https://github.com/encode/httpx/discussions/2399#discussioncomment-3814186 + if not files: + files = cast(HttpxRequestFiles, ForceMultipartDict()) + + prepared_url = self._prepare_url(options.url) + if "_" in prepared_url.host: + # work around https://github.com/encode/httpx/discussions/2880 + kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")} + + # TODO: report this error to httpx + return self._client.build_request( # pyright: ignore[reportUnknownMemberType] + headers=headers, + timeout=self.timeout if isinstance(options.timeout, NotGiven) else options.timeout, + method=options.method, + url=prepared_url, + # the `Query` type that we use is incompatible with qs' + # `Params` type as it needs to be typed as `Mapping[str, object]` + # so that passing a `TypedDict` doesn't cause an error. + # https://github.com/microsoft/pyright/issues/3526#event-6715453066 + params=self.qs.stringify(cast(Mapping[str, Any], params)) if params else None, + json=json_data if is_given(json_data) else None, + files=files, + **kwargs, + ) + + def _serialize_multipartform(self, data: Mapping[object, object]) -> dict[str, object]: + items = self.qs.stringify_items( + # TODO: type ignore is required as stringify_items is well typed but we can't be + # well typed without heavy validation. + data, # type: ignore + array_format="brackets", + ) + serialized: dict[str, object] = {} + for key, value in items: + existing = serialized.get(key) + + if not existing: + serialized[key] = value + continue + + # If a value has already been set for this key then that + # means we're sending data like `array[]=[1, 2, 3]` and we + # need to tell httpx that we want to send multiple values with + # the same key which is done by using a list or a tuple. + # + # Note: 2d arrays should never result in the same key at both + # levels so it's safe to assume that if the value is a list, + # it was because we changed it to be a list. + if is_list(existing): + existing.append(value) + else: + serialized[key] = [existing, value] + + return serialized + + def _maybe_override_cast_to(self, cast_to: type[ResponseT], options: FinalRequestOptions) -> type[ResponseT]: + if not is_given(options.headers): + return cast_to + + # make a copy of the headers so we don't mutate user-input + headers = dict(options.headers) + + # we internally support defining a temporary header to override the + # default `cast_to` type for use with `.with_raw_response` and `.with_streaming_response` + # see _response.py for implementation details + override_cast_to = headers.pop(OVERRIDE_CAST_TO_HEADER, NOT_GIVEN) + if is_given(override_cast_to): + options.headers = headers + return cast(Type[ResponseT], override_cast_to) + + return cast_to + + def _should_stream_response_body(self, request: httpx.Request) -> bool: + return request.headers.get(RAW_RESPONSE_HEADER) == "stream" # type: ignore[no-any-return] + + def _process_response_data( + self, + *, + data: object, + cast_to: type[ResponseT], + response: httpx.Response, + ) -> ResponseT: + if data is None: + return cast(ResponseT, None) + + if cast_to is object: + return cast(ResponseT, data) + + try: + if inspect.isclass(cast_to) and issubclass(cast_to, ModelBuilderProtocol): + return cast(ResponseT, cast_to.build(response=response, data=data)) + + if self._strict_response_validation: + return cast(ResponseT, validate_type(type_=cast_to, value=data)) + + return cast(ResponseT, construct_type(type_=cast_to, value=data)) + except pydantic.ValidationError as err: + raise APIResponseValidationError(response=response, body=data) from err + + @property + def qs(self) -> Querystring: + return Querystring() + + @property + def custom_auth(self) -> httpx.Auth | None: + return None + + @property + def auth_headers(self) -> dict[str, str]: + return {} + + @property + def default_headers(self) -> dict[str, str | Omit]: + return { + "Accept": "application/json", + "Content-Type": "application/json", + "User-Agent": self.user_agent, + **self.platform_headers(), + **self.auth_headers, + **self._custom_headers, + } + + @property + def default_query(self) -> dict[str, object]: + return { + **self._custom_query, + } + + def _validate_headers( + self, + headers: Headers, # noqa: ARG002 + custom_headers: Headers, # noqa: ARG002 + ) -> None: + """Validate the given default headers and custom headers. + + Does nothing by default. + """ + return + + @property + def user_agent(self) -> str: + return f"{self.__class__.__name__}/Python {self._version}" + + @property + def base_url(self) -> URL: + return self._base_url + + @base_url.setter + def base_url(self, url: URL | str) -> None: + self._base_url = self._enforce_trailing_slash(url if isinstance(url, URL) else URL(url)) + + def platform_headers(self) -> Dict[str, str]: + # the actual implementation is in a separate `lru_cache` decorated + # function because adding `lru_cache` to methods will leak memory + # https://github.com/python/cpython/issues/88476 + return platform_headers(self._version, platform=self._platform) + + def _parse_retry_after_header(self, response_headers: Optional[httpx.Headers] = None) -> float | None: + """Returns a float of the number of seconds (not milliseconds) to wait after retrying, or None if unspecified. + + About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After + See also https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After#syntax + """ + if response_headers is None: + return None + + # First, try the non-standard `retry-after-ms` header for milliseconds, + # which is more precise than integer-seconds `retry-after` + try: + retry_ms_header = response_headers.get("retry-after-ms", None) + return float(retry_ms_header) / 1000 + except (TypeError, ValueError): + pass + + # Next, try parsing `retry-after` header as seconds (allowing nonstandard floats). + retry_header = response_headers.get("retry-after") + try: + # note: the spec indicates that this should only ever be an integer + # but if someone sends a float there's no reason for us to not respect it + return float(retry_header) + except (TypeError, ValueError): + pass + + # Last, try parsing `retry-after` as a date. + retry_date_tuple = email.utils.parsedate_tz(retry_header) + if retry_date_tuple is None: + return None + + retry_date = email.utils.mktime_tz(retry_date_tuple) + return float(retry_date - time.time()) + + def _calculate_retry_timeout( + self, + remaining_retries: int, + options: FinalRequestOptions, + response_headers: Optional[httpx.Headers] = None, + ) -> float: + max_retries = options.get_max_retries(self.max_retries) + + # If the API asks us to wait a certain amount of time (and it's a reasonable amount), just do what it says. + retry_after = self._parse_retry_after_header(response_headers) + if retry_after is not None and 0 < retry_after <= 60: + return retry_after + + # Also cap retry count to 1000 to avoid any potential overflows with `pow` + nb_retries = min(max_retries - remaining_retries, 1000) + + # Apply exponential backoff, but not more than the max. + sleep_seconds = min(INITIAL_RETRY_DELAY * pow(2.0, nb_retries), MAX_RETRY_DELAY) + + # Apply some jitter, plus-or-minus half a second. + jitter = 1 - 0.25 * random() + timeout = sleep_seconds * jitter + return timeout if timeout >= 0 else 0 + + def _should_retry(self, response: httpx.Response) -> bool: + # Note: this is not a standard header + should_retry_header = response.headers.get("x-should-retry") + + # If the server explicitly says whether or not to retry, obey. + if should_retry_header == "true": + log.debug("Retrying as header `x-should-retry` is set to `true`") + return True + if should_retry_header == "false": + log.debug("Not retrying as header `x-should-retry` is set to `false`") + return False + + # Retry on request timeouts. + if response.status_code == 408: + log.debug("Retrying due to status code %i", response.status_code) + return True + + # Retry on lock timeouts. + if response.status_code == 409: + log.debug("Retrying due to status code %i", response.status_code) + return True + + # Retry on rate limits. + if response.status_code == 429: + log.debug("Retrying due to status code %i", response.status_code) + return True + + # Retry internal errors. + if response.status_code >= 500: + log.debug("Retrying due to status code %i", response.status_code) + return True + + log.debug("Not retrying") + return False + + def _idempotency_key(self) -> str: + return f"stainless-python-retry-{uuid.uuid4()}" + + +class _DefaultHttpxClient(httpx.Client): + def __init__(self, **kwargs: Any) -> None: + kwargs.setdefault("timeout", DEFAULT_TIMEOUT) + kwargs.setdefault("limits", DEFAULT_CONNECTION_LIMITS) + kwargs.setdefault("follow_redirects", True) + super().__init__(**kwargs) + + +if TYPE_CHECKING: + DefaultHttpxClient = httpx.Client + """An alias to `httpx.Client` that provides the same defaults that this SDK + uses internally. + + This is useful because overriding the `http_client` with your own instance of + `httpx.Client` will result in httpx's defaults being used, not ours. + """ +else: + DefaultHttpxClient = _DefaultHttpxClient + + +class SyncHttpxClientWrapper(DefaultHttpxClient): + def __del__(self) -> None: + if self.is_closed: + return + + try: + self.close() + except Exception: + pass + + +class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]): + _client: httpx.Client + _default_stream_cls: type[Stream[Any]] | None = None + + def __init__( + self, + *, + version: str, + base_url: str | URL, + max_retries: int = DEFAULT_MAX_RETRIES, + timeout: float | Timeout | None | NotGiven = NOT_GIVEN, + http_client: httpx.Client | None = None, + custom_headers: Mapping[str, str] | None = None, + custom_query: Mapping[str, object] | None = None, + _strict_response_validation: bool, + ) -> None: + if not is_given(timeout): + # if the user passed in a custom http client with a non-default + # timeout set then we use that timeout. + # + # note: there is an edge case here where the user passes in a client + # where they've explicitly set the timeout to match the default timeout + # as this check is structural, meaning that we'll think they didn't + # pass in a timeout and will ignore it + if http_client and http_client.timeout != HTTPX_DEFAULT_TIMEOUT: + timeout = http_client.timeout + else: + timeout = DEFAULT_TIMEOUT + + if http_client is not None and not isinstance(http_client, httpx.Client): # pyright: ignore[reportUnnecessaryIsInstance] + raise TypeError( + f"Invalid `http_client` argument; Expected an instance of `httpx.Client` but got {type(http_client)}" + ) + + super().__init__( + version=version, + # cast to a valid type because mypy doesn't understand our type narrowing + timeout=cast(Timeout, timeout), + base_url=base_url, + max_retries=max_retries, + custom_query=custom_query, + custom_headers=custom_headers, + _strict_response_validation=_strict_response_validation, + ) + self._client = http_client or SyncHttpxClientWrapper( + base_url=base_url, + # cast to a valid type because mypy doesn't understand our type narrowing + timeout=cast(Timeout, timeout), + ) + + def is_closed(self) -> bool: + return self._client.is_closed + + def close(self) -> None: + """Close the underlying HTTPX client. + + The client will *not* be usable after this. + """ + # If an error is thrown while constructing a client, self._client + # may not be present + if hasattr(self, "_client"): + self._client.close() + + def __enter__(self: _T) -> _T: + return self + + def __exit__( + self, + exc_type: type[BaseException] | None, + exc: BaseException | None, + exc_tb: TracebackType | None, + ) -> None: + self.close() + + def _prepare_options( + self, + options: FinalRequestOptions, # noqa: ARG002 + ) -> FinalRequestOptions: + """Hook for mutating the given options""" + return options + + def _prepare_request( + self, + request: httpx.Request, # noqa: ARG002 + ) -> None: + """This method is used as a callback for mutating the `Request` object + after it has been constructed. + This is useful for cases where you want to add certain headers based off of + the request properties, e.g. `url`, `method` etc. + """ + return None + + @overload + def request( + self, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + *, + stream: Literal[True], + stream_cls: Type[_StreamT], + ) -> _StreamT: ... + + @overload + def request( + self, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + *, + stream: Literal[False] = False, + ) -> ResponseT: ... + + @overload + def request( + self, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + *, + stream: bool = False, + stream_cls: Type[_StreamT] | None = None, + ) -> ResponseT | _StreamT: ... + + def request( + self, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + *, + stream: bool = False, + stream_cls: type[_StreamT] | None = None, + ) -> ResponseT | _StreamT: + cast_to = self._maybe_override_cast_to(cast_to, options) + + # create a copy of the options we were given so that if the + # options are mutated later & we then retry, the retries are + # given the original options + input_options = model_copy(options) + if input_options.idempotency_key is None and input_options.method.lower() != "get": + # ensure the idempotency key is reused between requests + input_options.idempotency_key = self._idempotency_key() + + response: httpx.Response | None = None + max_retries = input_options.get_max_retries(self.max_retries) + + retries_taken = 0 + for retries_taken in range(max_retries + 1): + options = model_copy(input_options) + options = self._prepare_options(options) + + remaining_retries = max_retries - retries_taken + request = self._build_request(options, retries_taken=retries_taken) + self._prepare_request(request) + + kwargs: HttpxSendArgs = {} + if self.custom_auth is not None: + kwargs["auth"] = self.custom_auth + + log.debug("Sending HTTP Request: %s %s", request.method, request.url) + + response = None + try: + response = self._client.send( + request, + stream=stream or self._should_stream_response_body(request=request), + **kwargs, + ) + except httpx.TimeoutException as err: + log.debug("Encountered httpx.TimeoutException", exc_info=True) + + if remaining_retries > 0: + self._sleep_for_retry( + retries_taken=retries_taken, + max_retries=max_retries, + options=input_options, + response=None, + ) + continue + + log.debug("Raising timeout error") + raise APITimeoutError(request=request) from err + except Exception as err: + log.debug("Encountered Exception", exc_info=True) + + if remaining_retries > 0: + self._sleep_for_retry( + retries_taken=retries_taken, + max_retries=max_retries, + options=input_options, + response=None, + ) + continue + + log.debug("Raising connection error") + raise APIConnectionError(request=request) from err + + log.debug( + 'HTTP Response: %s %s "%i %s" %s', + request.method, + request.url, + response.status_code, + response.reason_phrase, + response.headers, + ) + + try: + response.raise_for_status() + except httpx.HTTPStatusError as err: # thrown on 4xx and 5xx status code + log.debug("Encountered httpx.HTTPStatusError", exc_info=True) + + if remaining_retries > 0 and self._should_retry(err.response): + err.response.close() + self._sleep_for_retry( + retries_taken=retries_taken, + max_retries=max_retries, + options=input_options, + response=response, + ) + continue + + # If the response is streamed then we need to explicitly read the response + # to completion before attempting to access the response text. + if not err.response.is_closed: + err.response.read() + + log.debug("Re-raising status error") + raise self._make_status_error_from_response(err.response) from None + + break + + assert response is not None, "could not resolve response (should never happen)" + return self._process_response( + cast_to=cast_to, + options=options, + response=response, + stream=stream, + stream_cls=stream_cls, + retries_taken=retries_taken, + ) + + def _sleep_for_retry( + self, *, retries_taken: int, max_retries: int, options: FinalRequestOptions, response: httpx.Response | None + ) -> None: + remaining_retries = max_retries - retries_taken + if remaining_retries == 1: + log.debug("1 retry left") + else: + log.debug("%i retries left", remaining_retries) + + timeout = self._calculate_retry_timeout(remaining_retries, options, response.headers if response else None) + log.info("Retrying request to %s in %f seconds", options.url, timeout) + + time.sleep(timeout) + + def _process_response( + self, + *, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + response: httpx.Response, + stream: bool, + stream_cls: type[Stream[Any]] | type[AsyncStream[Any]] | None, + retries_taken: int = 0, + ) -> ResponseT: + origin = get_origin(cast_to) or cast_to + + if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse): + if not issubclass(origin, APIResponse): + raise TypeError(f"API Response types must subclass {APIResponse}; Received {origin}") + + response_cls = cast("type[BaseAPIResponse[Any]]", cast_to) + return cast( + ResponseT, + response_cls( + raw=response, + client=self, + cast_to=extract_response_type(response_cls), + stream=stream, + stream_cls=stream_cls, + options=options, + retries_taken=retries_taken, + ), + ) + + if cast_to == httpx.Response: + return cast(ResponseT, response) + + api_response = APIResponse( + raw=response, + client=self, + cast_to=cast("type[ResponseT]", cast_to), # pyright: ignore[reportUnnecessaryCast] + stream=stream, + stream_cls=stream_cls, + options=options, + retries_taken=retries_taken, + ) + if bool(response.request.headers.get(RAW_RESPONSE_HEADER)): + return cast(ResponseT, api_response) + + return api_response.parse() + + def _request_api_list( + self, + model: Type[object], + page: Type[SyncPageT], + options: FinalRequestOptions, + ) -> SyncPageT: + def _parser(resp: SyncPageT) -> SyncPageT: + resp._set_private_attributes( + client=self, + model=model, + options=options, + ) + return resp + + options.post_parser = _parser + + return self.request(page, options, stream=False) + + @overload + def get( + self, + path: str, + *, + cast_to: Type[ResponseT], + options: RequestOptions = {}, + stream: Literal[False] = False, + ) -> ResponseT: ... + + @overload + def get( + self, + path: str, + *, + cast_to: Type[ResponseT], + options: RequestOptions = {}, + stream: Literal[True], + stream_cls: type[_StreamT], + ) -> _StreamT: ... + + @overload + def get( + self, + path: str, + *, + cast_to: Type[ResponseT], + options: RequestOptions = {}, + stream: bool, + stream_cls: type[_StreamT] | None = None, + ) -> ResponseT | _StreamT: ... + + def get( + self, + path: str, + *, + cast_to: Type[ResponseT], + options: RequestOptions = {}, + stream: bool = False, + stream_cls: type[_StreamT] | None = None, + ) -> ResponseT | _StreamT: + opts = FinalRequestOptions.construct(method="get", url=path, **options) + # cast is required because mypy complains about returning Any even though + # it understands the type variables + return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) + + @overload + def post( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + options: RequestOptions = {}, + files: RequestFiles | None = None, + stream: Literal[False] = False, + ) -> ResponseT: ... + + @overload + def post( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + options: RequestOptions = {}, + files: RequestFiles | None = None, + stream: Literal[True], + stream_cls: type[_StreamT], + ) -> _StreamT: ... + + @overload + def post( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + options: RequestOptions = {}, + files: RequestFiles | None = None, + stream: bool, + stream_cls: type[_StreamT] | None = None, + ) -> ResponseT | _StreamT: ... + + def post( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + options: RequestOptions = {}, + files: RequestFiles | None = None, + stream: bool = False, + stream_cls: type[_StreamT] | None = None, + ) -> ResponseT | _StreamT: + opts = FinalRequestOptions.construct( + method="post", url=path, json_data=body, files=to_httpx_files(files), **options + ) + return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) + + def patch( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + options: RequestOptions = {}, + ) -> ResponseT: + opts = FinalRequestOptions.construct(method="patch", url=path, json_data=body, **options) + return self.request(cast_to, opts) + + def put( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + files: RequestFiles | None = None, + options: RequestOptions = {}, + ) -> ResponseT: + opts = FinalRequestOptions.construct( + method="put", url=path, json_data=body, files=to_httpx_files(files), **options + ) + return self.request(cast_to, opts) + + def delete( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + options: RequestOptions = {}, + ) -> ResponseT: + opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, **options) + return self.request(cast_to, opts) + + def get_api_list( + self, + path: str, + *, + model: Type[object], + page: Type[SyncPageT], + body: Body | None = None, + options: RequestOptions = {}, + method: str = "get", + ) -> SyncPageT: + opts = FinalRequestOptions.construct(method=method, url=path, json_data=body, **options) + return self._request_api_list(model, page, opts) + + +class _DefaultAsyncHttpxClient(httpx.AsyncClient): + def __init__(self, **kwargs: Any) -> None: + kwargs.setdefault("timeout", DEFAULT_TIMEOUT) + kwargs.setdefault("limits", DEFAULT_CONNECTION_LIMITS) + kwargs.setdefault("follow_redirects", True) + super().__init__(**kwargs) + + +if TYPE_CHECKING: + DefaultAsyncHttpxClient = httpx.AsyncClient + """An alias to `httpx.AsyncClient` that provides the same defaults that this SDK + uses internally. + + This is useful because overriding the `http_client` with your own instance of + `httpx.AsyncClient` will result in httpx's defaults being used, not ours. + """ +else: + DefaultAsyncHttpxClient = _DefaultAsyncHttpxClient + + +class AsyncHttpxClientWrapper(DefaultAsyncHttpxClient): + def __del__(self) -> None: + if self.is_closed: + return + + try: + # TODO(someday): support non asyncio runtimes here + asyncio.get_running_loop().create_task(self.aclose()) + except Exception: + pass + + +class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]): + _client: httpx.AsyncClient + _default_stream_cls: type[AsyncStream[Any]] | None = None + + def __init__( + self, + *, + version: str, + base_url: str | URL, + _strict_response_validation: bool, + max_retries: int = DEFAULT_MAX_RETRIES, + timeout: float | Timeout | None | NotGiven = NOT_GIVEN, + http_client: httpx.AsyncClient | None = None, + custom_headers: Mapping[str, str] | None = None, + custom_query: Mapping[str, object] | None = None, + ) -> None: + if not is_given(timeout): + # if the user passed in a custom http client with a non-default + # timeout set then we use that timeout. + # + # note: there is an edge case here where the user passes in a client + # where they've explicitly set the timeout to match the default timeout + # as this check is structural, meaning that we'll think they didn't + # pass in a timeout and will ignore it + if http_client and http_client.timeout != HTTPX_DEFAULT_TIMEOUT: + timeout = http_client.timeout + else: + timeout = DEFAULT_TIMEOUT + + if http_client is not None and not isinstance(http_client, httpx.AsyncClient): # pyright: ignore[reportUnnecessaryIsInstance] + raise TypeError( + f"Invalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got {type(http_client)}" + ) + + super().__init__( + version=version, + base_url=base_url, + # cast to a valid type because mypy doesn't understand our type narrowing + timeout=cast(Timeout, timeout), + max_retries=max_retries, + custom_query=custom_query, + custom_headers=custom_headers, + _strict_response_validation=_strict_response_validation, + ) + self._client = http_client or AsyncHttpxClientWrapper( + base_url=base_url, + # cast to a valid type because mypy doesn't understand our type narrowing + timeout=cast(Timeout, timeout), + ) + + def is_closed(self) -> bool: + return self._client.is_closed + + async def close(self) -> None: + """Close the underlying HTTPX client. + + The client will *not* be usable after this. + """ + await self._client.aclose() + + async def __aenter__(self: _T) -> _T: + return self + + async def __aexit__( + self, + exc_type: type[BaseException] | None, + exc: BaseException | None, + exc_tb: TracebackType | None, + ) -> None: + await self.close() + + async def _prepare_options( + self, + options: FinalRequestOptions, # noqa: ARG002 + ) -> FinalRequestOptions: + """Hook for mutating the given options""" + return options + + async def _prepare_request( + self, + request: httpx.Request, # noqa: ARG002 + ) -> None: + """This method is used as a callback for mutating the `Request` object + after it has been constructed. + This is useful for cases where you want to add certain headers based off of + the request properties, e.g. `url`, `method` etc. + """ + return None + + @overload + async def request( + self, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + *, + stream: Literal[False] = False, + ) -> ResponseT: ... + + @overload + async def request( + self, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + *, + stream: Literal[True], + stream_cls: type[_AsyncStreamT], + ) -> _AsyncStreamT: ... + + @overload + async def request( + self, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + *, + stream: bool, + stream_cls: type[_AsyncStreamT] | None = None, + ) -> ResponseT | _AsyncStreamT: ... + + async def request( + self, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + *, + stream: bool = False, + stream_cls: type[_AsyncStreamT] | None = None, + ) -> ResponseT | _AsyncStreamT: + if self._platform is None: + # `get_platform` can make blocking IO calls so we + # execute it earlier while we are in an async context + self._platform = await asyncify(get_platform)() + + cast_to = self._maybe_override_cast_to(cast_to, options) + + # create a copy of the options we were given so that if the + # options are mutated later & we then retry, the retries are + # given the original options + input_options = model_copy(options) + if input_options.idempotency_key is None and input_options.method.lower() != "get": + # ensure the idempotency key is reused between requests + input_options.idempotency_key = self._idempotency_key() + + response: httpx.Response | None = None + max_retries = input_options.get_max_retries(self.max_retries) + + retries_taken = 0 + for retries_taken in range(max_retries + 1): + options = model_copy(input_options) + options = await self._prepare_options(options) + + remaining_retries = max_retries - retries_taken + request = self._build_request(options, retries_taken=retries_taken) + await self._prepare_request(request) + + kwargs: HttpxSendArgs = {} + if self.custom_auth is not None: + kwargs["auth"] = self.custom_auth + + log.debug("Sending HTTP Request: %s %s", request.method, request.url) + + response = None + try: + response = await self._client.send( + request, + stream=stream or self._should_stream_response_body(request=request), + **kwargs, + ) + except httpx.TimeoutException as err: + log.debug("Encountered httpx.TimeoutException", exc_info=True) + + if remaining_retries > 0: + await self._sleep_for_retry( + retries_taken=retries_taken, + max_retries=max_retries, + options=input_options, + response=None, + ) + continue + + log.debug("Raising timeout error") + raise APITimeoutError(request=request) from err + except Exception as err: + log.debug("Encountered Exception", exc_info=True) + + if remaining_retries > 0: + await self._sleep_for_retry( + retries_taken=retries_taken, + max_retries=max_retries, + options=input_options, + response=None, + ) + continue + + log.debug("Raising connection error") + raise APIConnectionError(request=request) from err + + log.debug( + 'HTTP Response: %s %s "%i %s" %s', + request.method, + request.url, + response.status_code, + response.reason_phrase, + response.headers, + ) + + try: + response.raise_for_status() + except httpx.HTTPStatusError as err: # thrown on 4xx and 5xx status code + log.debug("Encountered httpx.HTTPStatusError", exc_info=True) + + if remaining_retries > 0 and self._should_retry(err.response): + await err.response.aclose() + await self._sleep_for_retry( + retries_taken=retries_taken, + max_retries=max_retries, + options=input_options, + response=response, + ) + continue + + # If the response is streamed then we need to explicitly read the response + # to completion before attempting to access the response text. + if not err.response.is_closed: + await err.response.aread() + + log.debug("Re-raising status error") + raise self._make_status_error_from_response(err.response) from None + + break + + assert response is not None, "could not resolve response (should never happen)" + return await self._process_response( + cast_to=cast_to, + options=options, + response=response, + stream=stream, + stream_cls=stream_cls, + retries_taken=retries_taken, + ) + + async def _sleep_for_retry( + self, *, retries_taken: int, max_retries: int, options: FinalRequestOptions, response: httpx.Response | None + ) -> None: + remaining_retries = max_retries - retries_taken + if remaining_retries == 1: + log.debug("1 retry left") + else: + log.debug("%i retries left", remaining_retries) + + timeout = self._calculate_retry_timeout(remaining_retries, options, response.headers if response else None) + log.info("Retrying request to %s in %f seconds", options.url, timeout) + + await anyio.sleep(timeout) + + async def _process_response( + self, + *, + cast_to: Type[ResponseT], + options: FinalRequestOptions, + response: httpx.Response, + stream: bool, + stream_cls: type[Stream[Any]] | type[AsyncStream[Any]] | None, + retries_taken: int = 0, + ) -> ResponseT: + origin = get_origin(cast_to) or cast_to + + if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse): + if not issubclass(origin, AsyncAPIResponse): + raise TypeError(f"API Response types must subclass {AsyncAPIResponse}; Received {origin}") + + response_cls = cast("type[BaseAPIResponse[Any]]", cast_to) + return cast( + "ResponseT", + response_cls( + raw=response, + client=self, + cast_to=extract_response_type(response_cls), + stream=stream, + stream_cls=stream_cls, + options=options, + retries_taken=retries_taken, + ), + ) + + if cast_to == httpx.Response: + return cast(ResponseT, response) + + api_response = AsyncAPIResponse( + raw=response, + client=self, + cast_to=cast("type[ResponseT]", cast_to), # pyright: ignore[reportUnnecessaryCast] + stream=stream, + stream_cls=stream_cls, + options=options, + retries_taken=retries_taken, + ) + if bool(response.request.headers.get(RAW_RESPONSE_HEADER)): + return cast(ResponseT, api_response) + + return await api_response.parse() + + def _request_api_list( + self, + model: Type[_T], + page: Type[AsyncPageT], + options: FinalRequestOptions, + ) -> AsyncPaginator[_T, AsyncPageT]: + return AsyncPaginator(client=self, options=options, page_cls=page, model=model) + + @overload + async def get( + self, + path: str, + *, + cast_to: Type[ResponseT], + options: RequestOptions = {}, + stream: Literal[False] = False, + ) -> ResponseT: ... + + @overload + async def get( + self, + path: str, + *, + cast_to: Type[ResponseT], + options: RequestOptions = {}, + stream: Literal[True], + stream_cls: type[_AsyncStreamT], + ) -> _AsyncStreamT: ... + + @overload + async def get( + self, + path: str, + *, + cast_to: Type[ResponseT], + options: RequestOptions = {}, + stream: bool, + stream_cls: type[_AsyncStreamT] | None = None, + ) -> ResponseT | _AsyncStreamT: ... + + async def get( + self, + path: str, + *, + cast_to: Type[ResponseT], + options: RequestOptions = {}, + stream: bool = False, + stream_cls: type[_AsyncStreamT] | None = None, + ) -> ResponseT | _AsyncStreamT: + opts = FinalRequestOptions.construct(method="get", url=path, **options) + return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls) + + @overload + async def post( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + files: RequestFiles | None = None, + options: RequestOptions = {}, + stream: Literal[False] = False, + ) -> ResponseT: ... + + @overload + async def post( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + files: RequestFiles | None = None, + options: RequestOptions = {}, + stream: Literal[True], + stream_cls: type[_AsyncStreamT], + ) -> _AsyncStreamT: ... + + @overload + async def post( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + files: RequestFiles | None = None, + options: RequestOptions = {}, + stream: bool, + stream_cls: type[_AsyncStreamT] | None = None, + ) -> ResponseT | _AsyncStreamT: ... + + async def post( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + files: RequestFiles | None = None, + options: RequestOptions = {}, + stream: bool = False, + stream_cls: type[_AsyncStreamT] | None = None, + ) -> ResponseT | _AsyncStreamT: + opts = FinalRequestOptions.construct( + method="post", url=path, json_data=body, files=await async_to_httpx_files(files), **options + ) + return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls) + + async def patch( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + options: RequestOptions = {}, + ) -> ResponseT: + opts = FinalRequestOptions.construct(method="patch", url=path, json_data=body, **options) + return await self.request(cast_to, opts) + + async def put( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + files: RequestFiles | None = None, + options: RequestOptions = {}, + ) -> ResponseT: + opts = FinalRequestOptions.construct( + method="put", url=path, json_data=body, files=await async_to_httpx_files(files), **options + ) + return await self.request(cast_to, opts) + + async def delete( + self, + path: str, + *, + cast_to: Type[ResponseT], + body: Body | None = None, + options: RequestOptions = {}, + ) -> ResponseT: + opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, **options) + return await self.request(cast_to, opts) + + def get_api_list( + self, + path: str, + *, + model: Type[_T], + page: Type[AsyncPageT], + body: Body | None = None, + options: RequestOptions = {}, + method: str = "get", + ) -> AsyncPaginator[_T, AsyncPageT]: + opts = FinalRequestOptions.construct(method=method, url=path, json_data=body, **options) + return self._request_api_list(model, page, opts) + + +def make_request_options( + *, + query: Query | None = None, + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + idempotency_key: str | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + post_parser: PostParser | NotGiven = NOT_GIVEN, +) -> RequestOptions: + """Create a dict of type RequestOptions without keys of NotGiven values.""" + options: RequestOptions = {} + if extra_headers is not None: + options["headers"] = extra_headers + + if extra_body is not None: + options["extra_json"] = cast(AnyMapping, extra_body) + + if query is not None: + options["params"] = query + + if extra_query is not None: + options["params"] = {**options.get("params", {}), **extra_query} + + if not isinstance(timeout, NotGiven): + options["timeout"] = timeout + + if idempotency_key is not None: + options["idempotency_key"] = idempotency_key + + if is_given(post_parser): + # internal + options["post_parser"] = post_parser # type: ignore + + return options + + +class ForceMultipartDict(Dict[str, None]): + def __bool__(self) -> bool: + return True + + +class OtherPlatform: + def __init__(self, name: str) -> None: + self.name = name + + @override + def __str__(self) -> str: + return f"Other:{self.name}" + + +Platform = Union[ + OtherPlatform, + Literal[ + "MacOS", + "Linux", + "Windows", + "FreeBSD", + "OpenBSD", + "iOS", + "Android", + "Unknown", + ], +] + + +def get_platform() -> Platform: + try: + system = platform.system().lower() + platform_name = platform.platform().lower() + except Exception: + return "Unknown" + + if "iphone" in platform_name or "ipad" in platform_name: + # Tested using Python3IDE on an iPhone 11 and Pythonista on an iPad 7 + # system is Darwin and platform_name is a string like: + # - Darwin-21.6.0-iPhone12,1-64bit + # - Darwin-21.6.0-iPad7,11-64bit + return "iOS" + + if system == "darwin": + return "MacOS" + + if system == "windows": + return "Windows" + + if "android" in platform_name: + # Tested using Pydroid 3 + # system is Linux and platform_name is a string like 'Linux-5.10.81-android12-9-00001-geba40aecb3b7-ab8534902-aarch64-with-libc' + return "Android" + + if system == "linux": + # https://distro.readthedocs.io/en/latest/#distro.id + distro_id = distro.id() + if distro_id == "freebsd": + return "FreeBSD" + + if distro_id == "openbsd": + return "OpenBSD" + + return "Linux" + + if platform_name: + return OtherPlatform(platform_name) + + return "Unknown" + + +@lru_cache(maxsize=None) +def platform_headers(version: str, *, platform: Platform | None) -> Dict[str, str]: + return { + "X-Stainless-Lang": "python", + "X-Stainless-Package-Version": version, + "X-Stainless-OS": str(platform or get_platform()), + "X-Stainless-Arch": str(get_architecture()), + "X-Stainless-Runtime": get_python_runtime(), + "X-Stainless-Runtime-Version": get_python_version(), + } + + +class OtherArch: + def __init__(self, name: str) -> None: + self.name = name + + @override + def __str__(self) -> str: + return f"other:{self.name}" + + +Arch = Union[OtherArch, Literal["x32", "x64", "arm", "arm64", "unknown"]] + + +def get_python_runtime() -> str: + try: + return platform.python_implementation() + except Exception: + return "unknown" + + +def get_python_version() -> str: + try: + return platform.python_version() + except Exception: + return "unknown" + + +def get_architecture() -> Arch: + try: + machine = platform.machine().lower() + except Exception: + return "unknown" + + if machine in ("arm64", "aarch64"): + return "arm64" + + # TODO: untested + if machine == "arm": + return "arm" + + if machine == "x86_64": + return "x64" + + # TODO: untested + if sys.maxsize <= 2**32: + return "x32" + + if machine: + return OtherArch(machine) + + return "unknown" + + +def _merge_mappings( + obj1: Mapping[_T_co, Union[_T, Omit]], + obj2: Mapping[_T_co, Union[_T, Omit]], +) -> Dict[_T_co, _T]: + """Merge two mappings of the same type, removing any values that are instances of `Omit`. + + In cases with duplicate keys the second mapping takes precedence. + """ + merged = {**obj1, **obj2} + return {key: value for key, value in merged.items() if not isinstance(value, Omit)} diff --git a/src/ydc_search_api/_client.py b/src/ydc_search_api/_client.py new file mode 100644 index 0000000..90d81c8 --- /dev/null +++ b/src/ydc_search_api/_client.py @@ -0,0 +1,411 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import os +from typing import Any, Union, Mapping +from typing_extensions import Self, override + +import httpx + +from . import _exceptions +from ._qs import Querystring +from ._types import ( + NOT_GIVEN, + Omit, + Timeout, + NotGiven, + Transport, + ProxiesTypes, + RequestOptions, +) +from ._utils import is_given, get_async_library +from ._version import __version__ +from .resources import news, search +from ._streaming import Stream as Stream, AsyncStream as AsyncStream +from ._exceptions import APIStatusError, YdcSearchAPIError +from ._base_client import ( + DEFAULT_MAX_RETRIES, + SyncAPIClient, + AsyncAPIClient, +) + +__all__ = [ + "Timeout", + "Transport", + "ProxiesTypes", + "RequestOptions", + "YdcSearchAPI", + "AsyncYdcSearchAPI", + "Client", + "AsyncClient", +] + + +class YdcSearchAPI(SyncAPIClient): + search: search.SearchResource + news: news.NewsResource + with_raw_response: YdcSearchAPIWithRawResponse + with_streaming_response: YdcSearchAPIWithStreamedResponse + + # client options + api_key: str + + def __init__( + self, + *, + api_key: str | None = None, + base_url: str | httpx.URL | None = None, + timeout: Union[float, Timeout, None, NotGiven] = NOT_GIVEN, + max_retries: int = DEFAULT_MAX_RETRIES, + default_headers: Mapping[str, str] | None = None, + default_query: Mapping[str, object] | None = None, + # Configure a custom httpx client. + # We provide a `DefaultHttpxClient` class that you can pass to retain the default values we use for `limits`, `timeout` & `follow_redirects`. + # See the [httpx documentation](https://www.python-httpx.org/api/#client) for more details. + http_client: httpx.Client | None = None, + # Enable or disable schema validation for data returned by the API. + # When enabled an error APIResponseValidationError is raised + # if the API responds with invalid data for the expected schema. + # + # This parameter may be removed or changed in the future. + # If you rely on this feature, please open a GitHub issue + # outlining your use-case to help us decide if it should be + # part of our public interface in the future. + _strict_response_validation: bool = False, + ) -> None: + """Construct a new synchronous YdcSearchAPI client instance. + + This automatically infers the `api_key` argument from the `YDC_SEARCH_API_API_KEY` environment variable if it is not provided. + """ + if api_key is None: + api_key = os.environ.get("YDC_SEARCH_API_API_KEY") + if api_key is None: + raise YdcSearchAPIError( + "The api_key client option must be set either by passing api_key to the client or by setting the YDC_SEARCH_API_API_KEY environment variable" + ) + self.api_key = api_key + + if base_url is None: + base_url = os.environ.get("YDC_SEARCH_API_BASE_URL") + if base_url is None: + base_url = f"https://api.ydc-index.io" + + super().__init__( + version=__version__, + base_url=base_url, + max_retries=max_retries, + timeout=timeout, + http_client=http_client, + custom_headers=default_headers, + custom_query=default_query, + _strict_response_validation=_strict_response_validation, + ) + + self.search = search.SearchResource(self) + self.news = news.NewsResource(self) + self.with_raw_response = YdcSearchAPIWithRawResponse(self) + self.with_streaming_response = YdcSearchAPIWithStreamedResponse(self) + + @property + @override + def qs(self) -> Querystring: + return Querystring(array_format="comma") + + @property + @override + def auth_headers(self) -> dict[str, str]: + api_key = self.api_key + return {"X-API-Key": api_key} + + @property + @override + def default_headers(self) -> dict[str, str | Omit]: + return { + **super().default_headers, + "X-Stainless-Async": "false", + **self._custom_headers, + } + + def copy( + self, + *, + api_key: str | None = None, + base_url: str | httpx.URL | None = None, + timeout: float | Timeout | None | NotGiven = NOT_GIVEN, + http_client: httpx.Client | None = None, + max_retries: int | NotGiven = NOT_GIVEN, + default_headers: Mapping[str, str] | None = None, + set_default_headers: Mapping[str, str] | None = None, + default_query: Mapping[str, object] | None = None, + set_default_query: Mapping[str, object] | None = None, + _extra_kwargs: Mapping[str, Any] = {}, + ) -> Self: + """ + Create a new client instance re-using the same options given to the current client with optional overriding. + """ + if default_headers is not None and set_default_headers is not None: + raise ValueError("The `default_headers` and `set_default_headers` arguments are mutually exclusive") + + if default_query is not None and set_default_query is not None: + raise ValueError("The `default_query` and `set_default_query` arguments are mutually exclusive") + + headers = self._custom_headers + if default_headers is not None: + headers = {**headers, **default_headers} + elif set_default_headers is not None: + headers = set_default_headers + + params = self._custom_query + if default_query is not None: + params = {**params, **default_query} + elif set_default_query is not None: + params = set_default_query + + http_client = http_client or self._client + return self.__class__( + api_key=api_key or self.api_key, + base_url=base_url or self.base_url, + timeout=self.timeout if isinstance(timeout, NotGiven) else timeout, + http_client=http_client, + max_retries=max_retries if is_given(max_retries) else self.max_retries, + default_headers=headers, + default_query=params, + **_extra_kwargs, + ) + + # Alias for `copy` for nicer inline usage, e.g. + # client.with_options(timeout=10).foo.create(...) + with_options = copy + + @override + def _make_status_error( + self, + err_msg: str, + *, + body: object, + response: httpx.Response, + ) -> APIStatusError: + if response.status_code == 400: + return _exceptions.BadRequestError(err_msg, response=response, body=body) + + if response.status_code == 401: + return _exceptions.AuthenticationError(err_msg, response=response, body=body) + + if response.status_code == 403: + return _exceptions.PermissionDeniedError(err_msg, response=response, body=body) + + if response.status_code == 404: + return _exceptions.NotFoundError(err_msg, response=response, body=body) + + if response.status_code == 409: + return _exceptions.ConflictError(err_msg, response=response, body=body) + + if response.status_code == 422: + return _exceptions.UnprocessableEntityError(err_msg, response=response, body=body) + + if response.status_code == 429: + return _exceptions.RateLimitError(err_msg, response=response, body=body) + + if response.status_code >= 500: + return _exceptions.InternalServerError(err_msg, response=response, body=body) + return APIStatusError(err_msg, response=response, body=body) + + +class AsyncYdcSearchAPI(AsyncAPIClient): + search: search.AsyncSearchResource + news: news.AsyncNewsResource + with_raw_response: AsyncYdcSearchAPIWithRawResponse + with_streaming_response: AsyncYdcSearchAPIWithStreamedResponse + + # client options + api_key: str + + def __init__( + self, + *, + api_key: str | None = None, + base_url: str | httpx.URL | None = None, + timeout: Union[float, Timeout, None, NotGiven] = NOT_GIVEN, + max_retries: int = DEFAULT_MAX_RETRIES, + default_headers: Mapping[str, str] | None = None, + default_query: Mapping[str, object] | None = None, + # Configure a custom httpx client. + # We provide a `DefaultAsyncHttpxClient` class that you can pass to retain the default values we use for `limits`, `timeout` & `follow_redirects`. + # See the [httpx documentation](https://www.python-httpx.org/api/#asyncclient) for more details. + http_client: httpx.AsyncClient | None = None, + # Enable or disable schema validation for data returned by the API. + # When enabled an error APIResponseValidationError is raised + # if the API responds with invalid data for the expected schema. + # + # This parameter may be removed or changed in the future. + # If you rely on this feature, please open a GitHub issue + # outlining your use-case to help us decide if it should be + # part of our public interface in the future. + _strict_response_validation: bool = False, + ) -> None: + """Construct a new async AsyncYdcSearchAPI client instance. + + This automatically infers the `api_key` argument from the `YDC_SEARCH_API_API_KEY` environment variable if it is not provided. + """ + if api_key is None: + api_key = os.environ.get("YDC_SEARCH_API_API_KEY") + if api_key is None: + raise YdcSearchAPIError( + "The api_key client option must be set either by passing api_key to the client or by setting the YDC_SEARCH_API_API_KEY environment variable" + ) + self.api_key = api_key + + if base_url is None: + base_url = os.environ.get("YDC_SEARCH_API_BASE_URL") + if base_url is None: + base_url = f"https://api.ydc-index.io" + + super().__init__( + version=__version__, + base_url=base_url, + max_retries=max_retries, + timeout=timeout, + http_client=http_client, + custom_headers=default_headers, + custom_query=default_query, + _strict_response_validation=_strict_response_validation, + ) + + self.search = search.AsyncSearchResource(self) + self.news = news.AsyncNewsResource(self) + self.with_raw_response = AsyncYdcSearchAPIWithRawResponse(self) + self.with_streaming_response = AsyncYdcSearchAPIWithStreamedResponse(self) + + @property + @override + def qs(self) -> Querystring: + return Querystring(array_format="comma") + + @property + @override + def auth_headers(self) -> dict[str, str]: + api_key = self.api_key + return {"X-API-Key": api_key} + + @property + @override + def default_headers(self) -> dict[str, str | Omit]: + return { + **super().default_headers, + "X-Stainless-Async": f"async:{get_async_library()}", + **self._custom_headers, + } + + def copy( + self, + *, + api_key: str | None = None, + base_url: str | httpx.URL | None = None, + timeout: float | Timeout | None | NotGiven = NOT_GIVEN, + http_client: httpx.AsyncClient | None = None, + max_retries: int | NotGiven = NOT_GIVEN, + default_headers: Mapping[str, str] | None = None, + set_default_headers: Mapping[str, str] | None = None, + default_query: Mapping[str, object] | None = None, + set_default_query: Mapping[str, object] | None = None, + _extra_kwargs: Mapping[str, Any] = {}, + ) -> Self: + """ + Create a new client instance re-using the same options given to the current client with optional overriding. + """ + if default_headers is not None and set_default_headers is not None: + raise ValueError("The `default_headers` and `set_default_headers` arguments are mutually exclusive") + + if default_query is not None and set_default_query is not None: + raise ValueError("The `default_query` and `set_default_query` arguments are mutually exclusive") + + headers = self._custom_headers + if default_headers is not None: + headers = {**headers, **default_headers} + elif set_default_headers is not None: + headers = set_default_headers + + params = self._custom_query + if default_query is not None: + params = {**params, **default_query} + elif set_default_query is not None: + params = set_default_query + + http_client = http_client or self._client + return self.__class__( + api_key=api_key or self.api_key, + base_url=base_url or self.base_url, + timeout=self.timeout if isinstance(timeout, NotGiven) else timeout, + http_client=http_client, + max_retries=max_retries if is_given(max_retries) else self.max_retries, + default_headers=headers, + default_query=params, + **_extra_kwargs, + ) + + # Alias for `copy` for nicer inline usage, e.g. + # client.with_options(timeout=10).foo.create(...) + with_options = copy + + @override + def _make_status_error( + self, + err_msg: str, + *, + body: object, + response: httpx.Response, + ) -> APIStatusError: + if response.status_code == 400: + return _exceptions.BadRequestError(err_msg, response=response, body=body) + + if response.status_code == 401: + return _exceptions.AuthenticationError(err_msg, response=response, body=body) + + if response.status_code == 403: + return _exceptions.PermissionDeniedError(err_msg, response=response, body=body) + + if response.status_code == 404: + return _exceptions.NotFoundError(err_msg, response=response, body=body) + + if response.status_code == 409: + return _exceptions.ConflictError(err_msg, response=response, body=body) + + if response.status_code == 422: + return _exceptions.UnprocessableEntityError(err_msg, response=response, body=body) + + if response.status_code == 429: + return _exceptions.RateLimitError(err_msg, response=response, body=body) + + if response.status_code >= 500: + return _exceptions.InternalServerError(err_msg, response=response, body=body) + return APIStatusError(err_msg, response=response, body=body) + + +class YdcSearchAPIWithRawResponse: + def __init__(self, client: YdcSearchAPI) -> None: + self.search = search.SearchResourceWithRawResponse(client.search) + self.news = news.NewsResourceWithRawResponse(client.news) + + +class AsyncYdcSearchAPIWithRawResponse: + def __init__(self, client: AsyncYdcSearchAPI) -> None: + self.search = search.AsyncSearchResourceWithRawResponse(client.search) + self.news = news.AsyncNewsResourceWithRawResponse(client.news) + + +class YdcSearchAPIWithStreamedResponse: + def __init__(self, client: YdcSearchAPI) -> None: + self.search = search.SearchResourceWithStreamingResponse(client.search) + self.news = news.NewsResourceWithStreamingResponse(client.news) + + +class AsyncYdcSearchAPIWithStreamedResponse: + def __init__(self, client: AsyncYdcSearchAPI) -> None: + self.search = search.AsyncSearchResourceWithStreamingResponse(client.search) + self.news = news.AsyncNewsResourceWithStreamingResponse(client.news) + + +Client = YdcSearchAPI + +AsyncClient = AsyncYdcSearchAPI diff --git a/src/ydc_search_api/_compat.py b/src/ydc_search_api/_compat.py new file mode 100644 index 0000000..92d9ee6 --- /dev/null +++ b/src/ydc_search_api/_compat.py @@ -0,0 +1,219 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Union, Generic, TypeVar, Callable, cast, overload +from datetime import date, datetime +from typing_extensions import Self, Literal + +import pydantic +from pydantic.fields import FieldInfo + +from ._types import IncEx, StrBytesIntFloat + +_T = TypeVar("_T") +_ModelT = TypeVar("_ModelT", bound=pydantic.BaseModel) + +# --------------- Pydantic v2 compatibility --------------- + +# Pyright incorrectly reports some of our functions as overriding a method when they don't +# pyright: reportIncompatibleMethodOverride=false + +PYDANTIC_V2 = pydantic.VERSION.startswith("2.") + +# v1 re-exports +if TYPE_CHECKING: + + def parse_date(value: date | StrBytesIntFloat) -> date: # noqa: ARG001 + ... + + def parse_datetime(value: Union[datetime, StrBytesIntFloat]) -> datetime: # noqa: ARG001 + ... + + def get_args(t: type[Any]) -> tuple[Any, ...]: # noqa: ARG001 + ... + + def is_union(tp: type[Any] | None) -> bool: # noqa: ARG001 + ... + + def get_origin(t: type[Any]) -> type[Any] | None: # noqa: ARG001 + ... + + def is_literal_type(type_: type[Any]) -> bool: # noqa: ARG001 + ... + + def is_typeddict(type_: type[Any]) -> bool: # noqa: ARG001 + ... + +else: + if PYDANTIC_V2: + from pydantic.v1.typing import ( + get_args as get_args, + is_union as is_union, + get_origin as get_origin, + is_typeddict as is_typeddict, + is_literal_type as is_literal_type, + ) + from pydantic.v1.datetime_parse import parse_date as parse_date, parse_datetime as parse_datetime + else: + from pydantic.typing import ( + get_args as get_args, + is_union as is_union, + get_origin as get_origin, + is_typeddict as is_typeddict, + is_literal_type as is_literal_type, + ) + from pydantic.datetime_parse import parse_date as parse_date, parse_datetime as parse_datetime + + +# refactored config +if TYPE_CHECKING: + from pydantic import ConfigDict as ConfigDict +else: + if PYDANTIC_V2: + from pydantic import ConfigDict + else: + # TODO: provide an error message here? + ConfigDict = None + + +# renamed methods / properties +def parse_obj(model: type[_ModelT], value: object) -> _ModelT: + if PYDANTIC_V2: + return model.model_validate(value) + else: + return cast(_ModelT, model.parse_obj(value)) # pyright: ignore[reportDeprecated, reportUnnecessaryCast] + + +def field_is_required(field: FieldInfo) -> bool: + if PYDANTIC_V2: + return field.is_required() + return field.required # type: ignore + + +def field_get_default(field: FieldInfo) -> Any: + value = field.get_default() + if PYDANTIC_V2: + from pydantic_core import PydanticUndefined + + if value == PydanticUndefined: + return None + return value + return value + + +def field_outer_type(field: FieldInfo) -> Any: + if PYDANTIC_V2: + return field.annotation + return field.outer_type_ # type: ignore + + +def get_model_config(model: type[pydantic.BaseModel]) -> Any: + if PYDANTIC_V2: + return model.model_config + return model.__config__ # type: ignore + + +def get_model_fields(model: type[pydantic.BaseModel]) -> dict[str, FieldInfo]: + if PYDANTIC_V2: + return model.model_fields + return model.__fields__ # type: ignore + + +def model_copy(model: _ModelT, *, deep: bool = False) -> _ModelT: + if PYDANTIC_V2: + return model.model_copy(deep=deep) + return model.copy(deep=deep) # type: ignore + + +def model_json(model: pydantic.BaseModel, *, indent: int | None = None) -> str: + if PYDANTIC_V2: + return model.model_dump_json(indent=indent) + return model.json(indent=indent) # type: ignore + + +def model_dump( + model: pydantic.BaseModel, + *, + exclude: IncEx | None = None, + exclude_unset: bool = False, + exclude_defaults: bool = False, + warnings: bool = True, + mode: Literal["json", "python"] = "python", +) -> dict[str, Any]: + if PYDANTIC_V2 or hasattr(model, "model_dump"): + return model.model_dump( + mode=mode, + exclude=exclude, + exclude_unset=exclude_unset, + exclude_defaults=exclude_defaults, + # warnings are not supported in Pydantic v1 + warnings=warnings if PYDANTIC_V2 else True, + ) + return cast( + "dict[str, Any]", + model.dict( # pyright: ignore[reportDeprecated, reportUnnecessaryCast] + exclude=exclude, + exclude_unset=exclude_unset, + exclude_defaults=exclude_defaults, + ), + ) + + +def model_parse(model: type[_ModelT], data: Any) -> _ModelT: + if PYDANTIC_V2: + return model.model_validate(data) + return model.parse_obj(data) # pyright: ignore[reportDeprecated] + + +# generic models +if TYPE_CHECKING: + + class GenericModel(pydantic.BaseModel): ... + +else: + if PYDANTIC_V2: + # there no longer needs to be a distinction in v2 but + # we still have to create our own subclass to avoid + # inconsistent MRO ordering errors + class GenericModel(pydantic.BaseModel): ... + + else: + import pydantic.generics + + class GenericModel(pydantic.generics.GenericModel, pydantic.BaseModel): ... + + +# cached properties +if TYPE_CHECKING: + cached_property = property + + # we define a separate type (copied from typeshed) + # that represents that `cached_property` is `set`able + # at runtime, which differs from `@property`. + # + # this is a separate type as editors likely special case + # `@property` and we don't want to cause issues just to have + # more helpful internal types. + + class typed_cached_property(Generic[_T]): + func: Callable[[Any], _T] + attrname: str | None + + def __init__(self, func: Callable[[Any], _T]) -> None: ... + + @overload + def __get__(self, instance: None, owner: type[Any] | None = None) -> Self: ... + + @overload + def __get__(self, instance: object, owner: type[Any] | None = None) -> _T: ... + + def __get__(self, instance: object, owner: type[Any] | None = None) -> _T | Self: + raise NotImplementedError() + + def __set_name__(self, owner: type[Any], name: str) -> None: ... + + # __set__ is not defined at runtime, but @cached_property is designed to be settable + def __set__(self, instance: object, value: _T) -> None: ... +else: + from functools import cached_property as cached_property + + typed_cached_property = cached_property diff --git a/src/ydc_search_api/_constants.py b/src/ydc_search_api/_constants.py new file mode 100644 index 0000000..6ddf2c7 --- /dev/null +++ b/src/ydc_search_api/_constants.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import httpx + +RAW_RESPONSE_HEADER = "X-Stainless-Raw-Response" +OVERRIDE_CAST_TO_HEADER = "____stainless_override_cast_to" + +# default timeout is 1 minute +DEFAULT_TIMEOUT = httpx.Timeout(timeout=60, connect=5.0) +DEFAULT_MAX_RETRIES = 2 +DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=100, max_keepalive_connections=20) + +INITIAL_RETRY_DELAY = 0.5 +MAX_RETRY_DELAY = 8.0 diff --git a/src/ydc_search_api/_exceptions.py b/src/ydc_search_api/_exceptions.py new file mode 100644 index 0000000..f1e1d22 --- /dev/null +++ b/src/ydc_search_api/_exceptions.py @@ -0,0 +1,108 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal + +import httpx + +__all__ = [ + "BadRequestError", + "AuthenticationError", + "PermissionDeniedError", + "NotFoundError", + "ConflictError", + "UnprocessableEntityError", + "RateLimitError", + "InternalServerError", +] + + +class YdcSearchAPIError(Exception): + pass + + +class APIError(YdcSearchAPIError): + message: str + request: httpx.Request + + body: object | None + """The API response body. + + If the API responded with a valid JSON structure then this property will be the + decoded result. + + If it isn't a valid JSON structure then this will be the raw response. + + If there was no response associated with this error then it will be `None`. + """ + + def __init__(self, message: str, request: httpx.Request, *, body: object | None) -> None: # noqa: ARG002 + super().__init__(message) + self.request = request + self.message = message + self.body = body + + +class APIResponseValidationError(APIError): + response: httpx.Response + status_code: int + + def __init__(self, response: httpx.Response, body: object | None, *, message: str | None = None) -> None: + super().__init__(message or "Data returned by API invalid for expected schema.", response.request, body=body) + self.response = response + self.status_code = response.status_code + + +class APIStatusError(APIError): + """Raised when an API response has a status code of 4xx or 5xx.""" + + response: httpx.Response + status_code: int + + def __init__(self, message: str, *, response: httpx.Response, body: object | None) -> None: + super().__init__(message, response.request, body=body) + self.response = response + self.status_code = response.status_code + + +class APIConnectionError(APIError): + def __init__(self, *, message: str = "Connection error.", request: httpx.Request) -> None: + super().__init__(message, request, body=None) + + +class APITimeoutError(APIConnectionError): + def __init__(self, request: httpx.Request) -> None: + super().__init__(message="Request timed out.", request=request) + + +class BadRequestError(APIStatusError): + status_code: Literal[400] = 400 # pyright: ignore[reportIncompatibleVariableOverride] + + +class AuthenticationError(APIStatusError): + status_code: Literal[401] = 401 # pyright: ignore[reportIncompatibleVariableOverride] + + +class PermissionDeniedError(APIStatusError): + status_code: Literal[403] = 403 # pyright: ignore[reportIncompatibleVariableOverride] + + +class NotFoundError(APIStatusError): + status_code: Literal[404] = 404 # pyright: ignore[reportIncompatibleVariableOverride] + + +class ConflictError(APIStatusError): + status_code: Literal[409] = 409 # pyright: ignore[reportIncompatibleVariableOverride] + + +class UnprocessableEntityError(APIStatusError): + status_code: Literal[422] = 422 # pyright: ignore[reportIncompatibleVariableOverride] + + +class RateLimitError(APIStatusError): + status_code: Literal[429] = 429 # pyright: ignore[reportIncompatibleVariableOverride] + + +class InternalServerError(APIStatusError): + pass diff --git a/src/ydc_search_api/_files.py b/src/ydc_search_api/_files.py new file mode 100644 index 0000000..715cc20 --- /dev/null +++ b/src/ydc_search_api/_files.py @@ -0,0 +1,123 @@ +from __future__ import annotations + +import io +import os +import pathlib +from typing import overload +from typing_extensions import TypeGuard + +import anyio + +from ._types import ( + FileTypes, + FileContent, + RequestFiles, + HttpxFileTypes, + Base64FileInput, + HttpxFileContent, + HttpxRequestFiles, +) +from ._utils import is_tuple_t, is_mapping_t, is_sequence_t + + +def is_base64_file_input(obj: object) -> TypeGuard[Base64FileInput]: + return isinstance(obj, io.IOBase) or isinstance(obj, os.PathLike) + + +def is_file_content(obj: object) -> TypeGuard[FileContent]: + return ( + isinstance(obj, bytes) or isinstance(obj, tuple) or isinstance(obj, io.IOBase) or isinstance(obj, os.PathLike) + ) + + +def assert_is_file_content(obj: object, *, key: str | None = None) -> None: + if not is_file_content(obj): + prefix = f"Expected entry at `{key}`" if key is not None else f"Expected file input `{obj!r}`" + raise RuntimeError( + f"{prefix} to be bytes, an io.IOBase instance, PathLike or a tuple but received {type(obj)} instead." + ) from None + + +@overload +def to_httpx_files(files: None) -> None: ... + + +@overload +def to_httpx_files(files: RequestFiles) -> HttpxRequestFiles: ... + + +def to_httpx_files(files: RequestFiles | None) -> HttpxRequestFiles | None: + if files is None: + return None + + if is_mapping_t(files): + files = {key: _transform_file(file) for key, file in files.items()} + elif is_sequence_t(files): + files = [(key, _transform_file(file)) for key, file in files] + else: + raise TypeError(f"Unexpected file type input {type(files)}, expected mapping or sequence") + + return files + + +def _transform_file(file: FileTypes) -> HttpxFileTypes: + if is_file_content(file): + if isinstance(file, os.PathLike): + path = pathlib.Path(file) + return (path.name, path.read_bytes()) + + return file + + if is_tuple_t(file): + return (file[0], _read_file_content(file[1]), *file[2:]) + + raise TypeError(f"Expected file types input to be a FileContent type or to be a tuple") + + +def _read_file_content(file: FileContent) -> HttpxFileContent: + if isinstance(file, os.PathLike): + return pathlib.Path(file).read_bytes() + return file + + +@overload +async def async_to_httpx_files(files: None) -> None: ... + + +@overload +async def async_to_httpx_files(files: RequestFiles) -> HttpxRequestFiles: ... + + +async def async_to_httpx_files(files: RequestFiles | None) -> HttpxRequestFiles | None: + if files is None: + return None + + if is_mapping_t(files): + files = {key: await _async_transform_file(file) for key, file in files.items()} + elif is_sequence_t(files): + files = [(key, await _async_transform_file(file)) for key, file in files] + else: + raise TypeError("Unexpected file type input {type(files)}, expected mapping or sequence") + + return files + + +async def _async_transform_file(file: FileTypes) -> HttpxFileTypes: + if is_file_content(file): + if isinstance(file, os.PathLike): + path = anyio.Path(file) + return (path.name, await path.read_bytes()) + + return file + + if is_tuple_t(file): + return (file[0], await _async_read_file_content(file[1]), *file[2:]) + + raise TypeError(f"Expected file types input to be a FileContent type or to be a tuple") + + +async def _async_read_file_content(file: FileContent) -> HttpxFileContent: + if isinstance(file, os.PathLike): + return await anyio.Path(file).read_bytes() + + return file diff --git a/src/ydc_search_api/_models.py b/src/ydc_search_api/_models.py new file mode 100644 index 0000000..798956f --- /dev/null +++ b/src/ydc_search_api/_models.py @@ -0,0 +1,803 @@ +from __future__ import annotations + +import os +import inspect +from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, cast +from datetime import date, datetime +from typing_extensions import ( + Unpack, + Literal, + ClassVar, + Protocol, + Required, + ParamSpec, + TypedDict, + TypeGuard, + final, + override, + runtime_checkable, +) + +import pydantic +from pydantic.fields import FieldInfo + +from ._types import ( + Body, + IncEx, + Query, + ModelT, + Headers, + Timeout, + NotGiven, + AnyMapping, + HttpxRequestFiles, +) +from ._utils import ( + PropertyInfo, + is_list, + is_given, + json_safe, + lru_cache, + is_mapping, + parse_date, + coerce_boolean, + parse_datetime, + strip_not_given, + extract_type_arg, + is_annotated_type, + is_type_alias_type, + strip_annotated_type, +) +from ._compat import ( + PYDANTIC_V2, + ConfigDict, + GenericModel as BaseGenericModel, + get_args, + is_union, + parse_obj, + get_origin, + is_literal_type, + get_model_config, + get_model_fields, + field_get_default, +) +from ._constants import RAW_RESPONSE_HEADER + +if TYPE_CHECKING: + from pydantic_core.core_schema import ModelField, ModelSchema, LiteralSchema, ModelFieldsSchema + +__all__ = ["BaseModel", "GenericModel"] + +_T = TypeVar("_T") +_BaseModelT = TypeVar("_BaseModelT", bound="BaseModel") + +P = ParamSpec("P") + + +@runtime_checkable +class _ConfigProtocol(Protocol): + allow_population_by_field_name: bool + + +class BaseModel(pydantic.BaseModel): + if PYDANTIC_V2: + model_config: ClassVar[ConfigDict] = ConfigDict( + extra="allow", defer_build=coerce_boolean(os.environ.get("DEFER_PYDANTIC_BUILD", "true")) + ) + else: + + @property + @override + def model_fields_set(self) -> set[str]: + # a forwards-compat shim for pydantic v2 + return self.__fields_set__ # type: ignore + + class Config(pydantic.BaseConfig): # pyright: ignore[reportDeprecated] + extra: Any = pydantic.Extra.allow # type: ignore + + def to_dict( + self, + *, + mode: Literal["json", "python"] = "python", + use_api_names: bool = True, + exclude_unset: bool = True, + exclude_defaults: bool = False, + exclude_none: bool = False, + warnings: bool = True, + ) -> dict[str, object]: + """Recursively generate a dictionary representation of the model, optionally specifying which fields to include or exclude. + + By default, fields that were not set by the API will not be included, + and keys will match the API response, *not* the property names from the model. + + For example, if the API responds with `"fooBar": true` but we've defined a `foo_bar: bool` property, + the output will use the `"fooBar"` key (unless `use_api_names=False` is passed). + + Args: + mode: + If mode is 'json', the dictionary will only contain JSON serializable types. e.g. `datetime` will be turned into a string, `"2024-3-22T18:11:19.117000Z"`. + If mode is 'python', the dictionary may contain any Python objects. e.g. `datetime(2024, 3, 22)` + + use_api_names: Whether to use the key that the API responded with or the property name. Defaults to `True`. + exclude_unset: Whether to exclude fields that have not been explicitly set. + exclude_defaults: Whether to exclude fields that are set to their default value from the output. + exclude_none: Whether to exclude fields that have a value of `None` from the output. + warnings: Whether to log warnings when invalid fields are encountered. This is only supported in Pydantic v2. + """ + return self.model_dump( + mode=mode, + by_alias=use_api_names, + exclude_unset=exclude_unset, + exclude_defaults=exclude_defaults, + exclude_none=exclude_none, + warnings=warnings, + ) + + def to_json( + self, + *, + indent: int | None = 2, + use_api_names: bool = True, + exclude_unset: bool = True, + exclude_defaults: bool = False, + exclude_none: bool = False, + warnings: bool = True, + ) -> str: + """Generates a JSON string representing this model as it would be received from or sent to the API (but with indentation). + + By default, fields that were not set by the API will not be included, + and keys will match the API response, *not* the property names from the model. + + For example, if the API responds with `"fooBar": true` but we've defined a `foo_bar: bool` property, + the output will use the `"fooBar"` key (unless `use_api_names=False` is passed). + + Args: + indent: Indentation to use in the JSON output. If `None` is passed, the output will be compact. Defaults to `2` + use_api_names: Whether to use the key that the API responded with or the property name. Defaults to `True`. + exclude_unset: Whether to exclude fields that have not been explicitly set. + exclude_defaults: Whether to exclude fields that have the default value. + exclude_none: Whether to exclude fields that have a value of `None`. + warnings: Whether to show any warnings that occurred during serialization. This is only supported in Pydantic v2. + """ + return self.model_dump_json( + indent=indent, + by_alias=use_api_names, + exclude_unset=exclude_unset, + exclude_defaults=exclude_defaults, + exclude_none=exclude_none, + warnings=warnings, + ) + + @override + def __str__(self) -> str: + # mypy complains about an invalid self arg + return f"{self.__repr_name__()}({self.__repr_str__(', ')})" # type: ignore[misc] + + # Override the 'construct' method in a way that supports recursive parsing without validation. + # Based on https://github.com/samuelcolvin/pydantic/issues/1168#issuecomment-817742836. + @classmethod + @override + def construct( # pyright: ignore[reportIncompatibleMethodOverride] + __cls: Type[ModelT], + _fields_set: set[str] | None = None, + **values: object, + ) -> ModelT: + m = __cls.__new__(__cls) + fields_values: dict[str, object] = {} + + config = get_model_config(__cls) + populate_by_name = ( + config.allow_population_by_field_name + if isinstance(config, _ConfigProtocol) + else config.get("populate_by_name") + ) + + if _fields_set is None: + _fields_set = set() + + model_fields = get_model_fields(__cls) + for name, field in model_fields.items(): + key = field.alias + if key is None or (key not in values and populate_by_name): + key = name + + if key in values: + fields_values[name] = _construct_field(value=values[key], field=field, key=key) + _fields_set.add(name) + else: + fields_values[name] = field_get_default(field) + + _extra = {} + for key, value in values.items(): + if key not in model_fields: + if PYDANTIC_V2: + _extra[key] = value + else: + _fields_set.add(key) + fields_values[key] = value + + object.__setattr__(m, "__dict__", fields_values) + + if PYDANTIC_V2: + # these properties are copied from Pydantic's `model_construct()` method + object.__setattr__(m, "__pydantic_private__", None) + object.__setattr__(m, "__pydantic_extra__", _extra) + object.__setattr__(m, "__pydantic_fields_set__", _fields_set) + else: + # init_private_attributes() does not exist in v2 + m._init_private_attributes() # type: ignore + + # copied from Pydantic v1's `construct()` method + object.__setattr__(m, "__fields_set__", _fields_set) + + return m + + if not TYPE_CHECKING: + # type checkers incorrectly complain about this assignment + # because the type signatures are technically different + # although not in practice + model_construct = construct + + if not PYDANTIC_V2: + # we define aliases for some of the new pydantic v2 methods so + # that we can just document these methods without having to specify + # a specific pydantic version as some users may not know which + # pydantic version they are currently using + + @override + def model_dump( + self, + *, + mode: Literal["json", "python"] | str = "python", + include: IncEx | None = None, + exclude: IncEx | None = None, + by_alias: bool = False, + exclude_unset: bool = False, + exclude_defaults: bool = False, + exclude_none: bool = False, + round_trip: bool = False, + warnings: bool | Literal["none", "warn", "error"] = True, + context: dict[str, Any] | None = None, + serialize_as_any: bool = False, + ) -> dict[str, Any]: + """Usage docs: https://docs.pydantic.dev/2.4/concepts/serialization/#modelmodel_dump + + Generate a dictionary representation of the model, optionally specifying which fields to include or exclude. + + Args: + mode: The mode in which `to_python` should run. + If mode is 'json', the dictionary will only contain JSON serializable types. + If mode is 'python', the dictionary may contain any Python objects. + include: A list of fields to include in the output. + exclude: A list of fields to exclude from the output. + by_alias: Whether to use the field's alias in the dictionary key if defined. + exclude_unset: Whether to exclude fields that are unset or None from the output. + exclude_defaults: Whether to exclude fields that are set to their default value from the output. + exclude_none: Whether to exclude fields that have a value of `None` from the output. + round_trip: Whether to enable serialization and deserialization round-trip support. + warnings: Whether to log warnings when invalid fields are encountered. + + Returns: + A dictionary representation of the model. + """ + if mode not in {"json", "python"}: + raise ValueError("mode must be either 'json' or 'python'") + if round_trip != False: + raise ValueError("round_trip is only supported in Pydantic v2") + if warnings != True: + raise ValueError("warnings is only supported in Pydantic v2") + if context is not None: + raise ValueError("context is only supported in Pydantic v2") + if serialize_as_any != False: + raise ValueError("serialize_as_any is only supported in Pydantic v2") + dumped = super().dict( # pyright: ignore[reportDeprecated] + include=include, + exclude=exclude, + by_alias=by_alias, + exclude_unset=exclude_unset, + exclude_defaults=exclude_defaults, + exclude_none=exclude_none, + ) + + return cast(dict[str, Any], json_safe(dumped)) if mode == "json" else dumped + + @override + def model_dump_json( + self, + *, + indent: int | None = None, + include: IncEx | None = None, + exclude: IncEx | None = None, + by_alias: bool = False, + exclude_unset: bool = False, + exclude_defaults: bool = False, + exclude_none: bool = False, + round_trip: bool = False, + warnings: bool | Literal["none", "warn", "error"] = True, + context: dict[str, Any] | None = None, + serialize_as_any: bool = False, + ) -> str: + """Usage docs: https://docs.pydantic.dev/2.4/concepts/serialization/#modelmodel_dump_json + + Generates a JSON representation of the model using Pydantic's `to_json` method. + + Args: + indent: Indentation to use in the JSON output. If None is passed, the output will be compact. + include: Field(s) to include in the JSON output. Can take either a string or set of strings. + exclude: Field(s) to exclude from the JSON output. Can take either a string or set of strings. + by_alias: Whether to serialize using field aliases. + exclude_unset: Whether to exclude fields that have not been explicitly set. + exclude_defaults: Whether to exclude fields that have the default value. + exclude_none: Whether to exclude fields that have a value of `None`. + round_trip: Whether to use serialization/deserialization between JSON and class instance. + warnings: Whether to show any warnings that occurred during serialization. + + Returns: + A JSON string representation of the model. + """ + if round_trip != False: + raise ValueError("round_trip is only supported in Pydantic v2") + if warnings != True: + raise ValueError("warnings is only supported in Pydantic v2") + if context is not None: + raise ValueError("context is only supported in Pydantic v2") + if serialize_as_any != False: + raise ValueError("serialize_as_any is only supported in Pydantic v2") + return super().json( # type: ignore[reportDeprecated] + indent=indent, + include=include, + exclude=exclude, + by_alias=by_alias, + exclude_unset=exclude_unset, + exclude_defaults=exclude_defaults, + exclude_none=exclude_none, + ) + + +def _construct_field(value: object, field: FieldInfo, key: str) -> object: + if value is None: + return field_get_default(field) + + if PYDANTIC_V2: + type_ = field.annotation + else: + type_ = cast(type, field.outer_type_) # type: ignore + + if type_ is None: + raise RuntimeError(f"Unexpected field type is None for {key}") + + return construct_type(value=value, type_=type_) + + +def is_basemodel(type_: type) -> bool: + """Returns whether or not the given type is either a `BaseModel` or a union of `BaseModel`""" + if is_union(type_): + for variant in get_args(type_): + if is_basemodel(variant): + return True + + return False + + return is_basemodel_type(type_) + + +def is_basemodel_type(type_: type) -> TypeGuard[type[BaseModel] | type[GenericModel]]: + origin = get_origin(type_) or type_ + if not inspect.isclass(origin): + return False + return issubclass(origin, BaseModel) or issubclass(origin, GenericModel) + + +def build( + base_model_cls: Callable[P, _BaseModelT], + *args: P.args, + **kwargs: P.kwargs, +) -> _BaseModelT: + """Construct a BaseModel class without validation. + + This is useful for cases where you need to instantiate a `BaseModel` + from an API response as this provides type-safe params which isn't supported + by helpers like `construct_type()`. + + ```py + build(MyModel, my_field_a="foo", my_field_b=123) + ``` + """ + if args: + raise TypeError( + "Received positional arguments which are not supported; Keyword arguments must be used instead", + ) + + return cast(_BaseModelT, construct_type(type_=base_model_cls, value=kwargs)) + + +def construct_type_unchecked(*, value: object, type_: type[_T]) -> _T: + """Loose coercion to the expected type with construction of nested values. + + Note: the returned value from this function is not guaranteed to match the + given type. + """ + return cast(_T, construct_type(value=value, type_=type_)) + + +def construct_type(*, value: object, type_: object) -> object: + """Loose coercion to the expected type with construction of nested values. + + If the given value does not match the expected type then it is returned as-is. + """ + + # store a reference to the original type we were given before we extract any inner + # types so that we can properly resolve forward references in `TypeAliasType` annotations + original_type = None + + # we allow `object` as the input type because otherwise, passing things like + # `Literal['value']` will be reported as a type error by type checkers + type_ = cast("type[object]", type_) + if is_type_alias_type(type_): + original_type = type_ # type: ignore[unreachable] + type_ = type_.__value__ # type: ignore[unreachable] + + # unwrap `Annotated[T, ...]` -> `T` + if is_annotated_type(type_): + meta: tuple[Any, ...] = get_args(type_)[1:] + type_ = extract_type_arg(type_, 0) + else: + meta = tuple() + + # we need to use the origin class for any types that are subscripted generics + # e.g. Dict[str, object] + origin = get_origin(type_) or type_ + args = get_args(type_) + + if is_union(origin): + try: + return validate_type(type_=cast("type[object]", original_type or type_), value=value) + except Exception: + pass + + # if the type is a discriminated union then we want to construct the right variant + # in the union, even if the data doesn't match exactly, otherwise we'd break code + # that relies on the constructed class types, e.g. + # + # class FooType: + # kind: Literal['foo'] + # value: str + # + # class BarType: + # kind: Literal['bar'] + # value: int + # + # without this block, if the data we get is something like `{'kind': 'bar', 'value': 'foo'}` then + # we'd end up constructing `FooType` when it should be `BarType`. + discriminator = _build_discriminated_union_meta(union=type_, meta_annotations=meta) + if discriminator and is_mapping(value): + variant_value = value.get(discriminator.field_alias_from or discriminator.field_name) + if variant_value and isinstance(variant_value, str): + variant_type = discriminator.mapping.get(variant_value) + if variant_type: + return construct_type(type_=variant_type, value=value) + + # if the data is not valid, use the first variant that doesn't fail while deserializing + for variant in args: + try: + return construct_type(value=value, type_=variant) + except Exception: + continue + + raise RuntimeError(f"Could not convert data into a valid instance of {type_}") + + if origin == dict: + if not is_mapping(value): + return value + + _, items_type = get_args(type_) # Dict[_, items_type] + return {key: construct_type(value=item, type_=items_type) for key, item in value.items()} + + if ( + not is_literal_type(type_) + and inspect.isclass(origin) + and (issubclass(origin, BaseModel) or issubclass(origin, GenericModel)) + ): + if is_list(value): + return [cast(Any, type_).construct(**entry) if is_mapping(entry) else entry for entry in value] + + if is_mapping(value): + if issubclass(type_, BaseModel): + return type_.construct(**value) # type: ignore[arg-type] + + return cast(Any, type_).construct(**value) + + if origin == list: + if not is_list(value): + return value + + inner_type = args[0] # List[inner_type] + return [construct_type(value=entry, type_=inner_type) for entry in value] + + if origin == float: + if isinstance(value, int): + coerced = float(value) + if coerced != value: + return value + return coerced + + return value + + if type_ == datetime: + try: + return parse_datetime(value) # type: ignore + except Exception: + return value + + if type_ == date: + try: + return parse_date(value) # type: ignore + except Exception: + return value + + return value + + +@runtime_checkable +class CachedDiscriminatorType(Protocol): + __discriminator__: DiscriminatorDetails + + +class DiscriminatorDetails: + field_name: str + """The name of the discriminator field in the variant class, e.g. + + ```py + class Foo(BaseModel): + type: Literal['foo'] + ``` + + Will result in field_name='type' + """ + + field_alias_from: str | None + """The name of the discriminator field in the API response, e.g. + + ```py + class Foo(BaseModel): + type: Literal['foo'] = Field(alias='type_from_api') + ``` + + Will result in field_alias_from='type_from_api' + """ + + mapping: dict[str, type] + """Mapping of discriminator value to variant type, e.g. + + {'foo': FooVariant, 'bar': BarVariant} + """ + + def __init__( + self, + *, + mapping: dict[str, type], + discriminator_field: str, + discriminator_alias: str | None, + ) -> None: + self.mapping = mapping + self.field_name = discriminator_field + self.field_alias_from = discriminator_alias + + +def _build_discriminated_union_meta(*, union: type, meta_annotations: tuple[Any, ...]) -> DiscriminatorDetails | None: + if isinstance(union, CachedDiscriminatorType): + return union.__discriminator__ + + discriminator_field_name: str | None = None + + for annotation in meta_annotations: + if isinstance(annotation, PropertyInfo) and annotation.discriminator is not None: + discriminator_field_name = annotation.discriminator + break + + if not discriminator_field_name: + return None + + mapping: dict[str, type] = {} + discriminator_alias: str | None = None + + for variant in get_args(union): + variant = strip_annotated_type(variant) + if is_basemodel_type(variant): + if PYDANTIC_V2: + field = _extract_field_schema_pv2(variant, discriminator_field_name) + if not field: + continue + + # Note: if one variant defines an alias then they all should + discriminator_alias = field.get("serialization_alias") + + field_schema = field["schema"] + + if field_schema["type"] == "literal": + for entry in cast("LiteralSchema", field_schema)["expected"]: + if isinstance(entry, str): + mapping[entry] = variant + else: + field_info = cast("dict[str, FieldInfo]", variant.__fields__).get(discriminator_field_name) # pyright: ignore[reportDeprecated, reportUnnecessaryCast] + if not field_info: + continue + + # Note: if one variant defines an alias then they all should + discriminator_alias = field_info.alias + + if (annotation := getattr(field_info, "annotation", None)) and is_literal_type(annotation): + for entry in get_args(annotation): + if isinstance(entry, str): + mapping[entry] = variant + + if not mapping: + return None + + details = DiscriminatorDetails( + mapping=mapping, + discriminator_field=discriminator_field_name, + discriminator_alias=discriminator_alias, + ) + cast(CachedDiscriminatorType, union).__discriminator__ = details + return details + + +def _extract_field_schema_pv2(model: type[BaseModel], field_name: str) -> ModelField | None: + schema = model.__pydantic_core_schema__ + if schema["type"] == "definitions": + schema = schema["schema"] + + if schema["type"] != "model": + return None + + schema = cast("ModelSchema", schema) + fields_schema = schema["schema"] + if fields_schema["type"] != "model-fields": + return None + + fields_schema = cast("ModelFieldsSchema", fields_schema) + field = fields_schema["fields"].get(field_name) + if not field: + return None + + return cast("ModelField", field) # pyright: ignore[reportUnnecessaryCast] + + +def validate_type(*, type_: type[_T], value: object) -> _T: + """Strict validation that the given value matches the expected type""" + if inspect.isclass(type_) and issubclass(type_, pydantic.BaseModel): + return cast(_T, parse_obj(type_, value)) + + return cast(_T, _validate_non_model_type(type_=type_, value=value)) + + +def set_pydantic_config(typ: Any, config: pydantic.ConfigDict) -> None: + """Add a pydantic config for the given type. + + Note: this is a no-op on Pydantic v1. + """ + setattr(typ, "__pydantic_config__", config) # noqa: B010 + + +# our use of subclassing here causes weirdness for type checkers, +# so we just pretend that we don't subclass +if TYPE_CHECKING: + GenericModel = BaseModel +else: + + class GenericModel(BaseGenericModel, BaseModel): + pass + + +if PYDANTIC_V2: + from pydantic import TypeAdapter as _TypeAdapter + + _CachedTypeAdapter = cast("TypeAdapter[object]", lru_cache(maxsize=None)(_TypeAdapter)) + + if TYPE_CHECKING: + from pydantic import TypeAdapter + else: + TypeAdapter = _CachedTypeAdapter + + def _validate_non_model_type(*, type_: type[_T], value: object) -> _T: + return TypeAdapter(type_).validate_python(value) + +elif not TYPE_CHECKING: # TODO: condition is weird + + class RootModel(GenericModel, Generic[_T]): + """Used as a placeholder to easily convert runtime types to a Pydantic format + to provide validation. + + For example: + ```py + validated = RootModel[int](__root__="5").__root__ + # validated: 5 + ``` + """ + + __root__: _T + + def _validate_non_model_type(*, type_: type[_T], value: object) -> _T: + model = _create_pydantic_model(type_).validate(value) + return cast(_T, model.__root__) + + def _create_pydantic_model(type_: _T) -> Type[RootModel[_T]]: + return RootModel[type_] # type: ignore + + +class FinalRequestOptionsInput(TypedDict, total=False): + method: Required[str] + url: Required[str] + params: Query + headers: Headers + max_retries: int + timeout: float | Timeout | None + files: HttpxRequestFiles | None + idempotency_key: str + json_data: Body + extra_json: AnyMapping + + +@final +class FinalRequestOptions(pydantic.BaseModel): + method: str + url: str + params: Query = {} + headers: Union[Headers, NotGiven] = NotGiven() + max_retries: Union[int, NotGiven] = NotGiven() + timeout: Union[float, Timeout, None, NotGiven] = NotGiven() + files: Union[HttpxRequestFiles, None] = None + idempotency_key: Union[str, None] = None + post_parser: Union[Callable[[Any], Any], NotGiven] = NotGiven() + + # It should be noted that we cannot use `json` here as that would override + # a BaseModel method in an incompatible fashion. + json_data: Union[Body, None] = None + extra_json: Union[AnyMapping, None] = None + + if PYDANTIC_V2: + model_config: ClassVar[ConfigDict] = ConfigDict(arbitrary_types_allowed=True) + else: + + class Config(pydantic.BaseConfig): # pyright: ignore[reportDeprecated] + arbitrary_types_allowed: bool = True + + def get_max_retries(self, max_retries: int) -> int: + if isinstance(self.max_retries, NotGiven): + return max_retries + return self.max_retries + + def _strip_raw_response_header(self) -> None: + if not is_given(self.headers): + return + + if self.headers.get(RAW_RESPONSE_HEADER): + self.headers = {**self.headers} + self.headers.pop(RAW_RESPONSE_HEADER) + + # override the `construct` method so that we can run custom transformations. + # this is necessary as we don't want to do any actual runtime type checking + # (which means we can't use validators) but we do want to ensure that `NotGiven` + # values are not present + # + # type ignore required because we're adding explicit types to `**values` + @classmethod + def construct( # type: ignore + cls, + _fields_set: set[str] | None = None, + **values: Unpack[FinalRequestOptionsInput], + ) -> FinalRequestOptions: + kwargs: dict[str, Any] = { + # we unconditionally call `strip_not_given` on any value + # as it will just ignore any non-mapping types + key: strip_not_given(value) + for key, value in values.items() + } + if PYDANTIC_V2: + return super().model_construct(_fields_set, **kwargs) + return cast(FinalRequestOptions, super().construct(_fields_set, **kwargs)) # pyright: ignore[reportDeprecated] + + if not TYPE_CHECKING: + # type checkers incorrectly complain about this assignment + model_construct = construct diff --git a/src/ydc_search_api/_qs.py b/src/ydc_search_api/_qs.py new file mode 100644 index 0000000..274320c --- /dev/null +++ b/src/ydc_search_api/_qs.py @@ -0,0 +1,150 @@ +from __future__ import annotations + +from typing import Any, List, Tuple, Union, Mapping, TypeVar +from urllib.parse import parse_qs, urlencode +from typing_extensions import Literal, get_args + +from ._types import NOT_GIVEN, NotGiven, NotGivenOr +from ._utils import flatten + +_T = TypeVar("_T") + + +ArrayFormat = Literal["comma", "repeat", "indices", "brackets"] +NestedFormat = Literal["dots", "brackets"] + +PrimitiveData = Union[str, int, float, bool, None] +# this should be Data = Union[PrimitiveData, "List[Data]", "Tuple[Data]", "Mapping[str, Data]"] +# https://github.com/microsoft/pyright/issues/3555 +Data = Union[PrimitiveData, List[Any], Tuple[Any], "Mapping[str, Any]"] +Params = Mapping[str, Data] + + +class Querystring: + array_format: ArrayFormat + nested_format: NestedFormat + + def __init__( + self, + *, + array_format: ArrayFormat = "repeat", + nested_format: NestedFormat = "brackets", + ) -> None: + self.array_format = array_format + self.nested_format = nested_format + + def parse(self, query: str) -> Mapping[str, object]: + # Note: custom format syntax is not supported yet + return parse_qs(query) + + def stringify( + self, + params: Params, + *, + array_format: NotGivenOr[ArrayFormat] = NOT_GIVEN, + nested_format: NotGivenOr[NestedFormat] = NOT_GIVEN, + ) -> str: + return urlencode( + self.stringify_items( + params, + array_format=array_format, + nested_format=nested_format, + ) + ) + + def stringify_items( + self, + params: Params, + *, + array_format: NotGivenOr[ArrayFormat] = NOT_GIVEN, + nested_format: NotGivenOr[NestedFormat] = NOT_GIVEN, + ) -> list[tuple[str, str]]: + opts = Options( + qs=self, + array_format=array_format, + nested_format=nested_format, + ) + return flatten([self._stringify_item(key, value, opts) for key, value in params.items()]) + + def _stringify_item( + self, + key: str, + value: Data, + opts: Options, + ) -> list[tuple[str, str]]: + if isinstance(value, Mapping): + items: list[tuple[str, str]] = [] + nested_format = opts.nested_format + for subkey, subvalue in value.items(): + items.extend( + self._stringify_item( + # TODO: error if unknown format + f"{key}.{subkey}" if nested_format == "dots" else f"{key}[{subkey}]", + subvalue, + opts, + ) + ) + return items + + if isinstance(value, (list, tuple)): + array_format = opts.array_format + if array_format == "comma": + return [ + ( + key, + ",".join(self._primitive_value_to_str(item) for item in value if item is not None), + ), + ] + elif array_format == "repeat": + items = [] + for item in value: + items.extend(self._stringify_item(key, item, opts)) + return items + elif array_format == "indices": + raise NotImplementedError("The array indices format is not supported yet") + elif array_format == "brackets": + items = [] + key = key + "[]" + for item in value: + items.extend(self._stringify_item(key, item, opts)) + return items + else: + raise NotImplementedError( + f"Unknown array_format value: {array_format}, choose from {', '.join(get_args(ArrayFormat))}" + ) + + serialised = self._primitive_value_to_str(value) + if not serialised: + return [] + return [(key, serialised)] + + def _primitive_value_to_str(self, value: PrimitiveData) -> str: + # copied from httpx + if value is True: + return "true" + elif value is False: + return "false" + elif value is None: + return "" + return str(value) + + +_qs = Querystring() +parse = _qs.parse +stringify = _qs.stringify +stringify_items = _qs.stringify_items + + +class Options: + array_format: ArrayFormat + nested_format: NestedFormat + + def __init__( + self, + qs: Querystring = _qs, + *, + array_format: NotGivenOr[ArrayFormat] = NOT_GIVEN, + nested_format: NotGivenOr[NestedFormat] = NOT_GIVEN, + ) -> None: + self.array_format = qs.array_format if isinstance(array_format, NotGiven) else array_format + self.nested_format = qs.nested_format if isinstance(nested_format, NotGiven) else nested_format diff --git a/src/ydc_search_api/_resource.py b/src/ydc_search_api/_resource.py new file mode 100644 index 0000000..7655210 --- /dev/null +++ b/src/ydc_search_api/_resource.py @@ -0,0 +1,43 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import time +from typing import TYPE_CHECKING + +import anyio + +if TYPE_CHECKING: + from ._client import YdcSearchAPI, AsyncYdcSearchAPI + + +class SyncAPIResource: + _client: YdcSearchAPI + + def __init__(self, client: YdcSearchAPI) -> None: + self._client = client + self._get = client.get + self._post = client.post + self._patch = client.patch + self._put = client.put + self._delete = client.delete + self._get_api_list = client.get_api_list + + def _sleep(self, seconds: float) -> None: + time.sleep(seconds) + + +class AsyncAPIResource: + _client: AsyncYdcSearchAPI + + def __init__(self, client: AsyncYdcSearchAPI) -> None: + self._client = client + self._get = client.get + self._post = client.post + self._patch = client.patch + self._put = client.put + self._delete = client.delete + self._get_api_list = client.get_api_list + + async def _sleep(self, seconds: float) -> None: + await anyio.sleep(seconds) diff --git a/src/ydc_search_api/_response.py b/src/ydc_search_api/_response.py new file mode 100644 index 0000000..2d79399 --- /dev/null +++ b/src/ydc_search_api/_response.py @@ -0,0 +1,832 @@ +from __future__ import annotations + +import os +import inspect +import logging +import datetime +import functools +from types import TracebackType +from typing import ( + TYPE_CHECKING, + Any, + Union, + Generic, + TypeVar, + Callable, + Iterator, + AsyncIterator, + cast, + overload, +) +from typing_extensions import Awaitable, ParamSpec, override, get_origin + +import anyio +import httpx +import pydantic + +from ._types import NoneType +from ._utils import is_given, extract_type_arg, is_annotated_type, is_type_alias_type, extract_type_var_from_base +from ._models import BaseModel, is_basemodel +from ._constants import RAW_RESPONSE_HEADER, OVERRIDE_CAST_TO_HEADER +from ._streaming import Stream, AsyncStream, is_stream_class_type, extract_stream_chunk_type +from ._exceptions import YdcSearchAPIError, APIResponseValidationError + +if TYPE_CHECKING: + from ._models import FinalRequestOptions + from ._base_client import BaseClient + + +P = ParamSpec("P") +R = TypeVar("R") +_T = TypeVar("_T") +_APIResponseT = TypeVar("_APIResponseT", bound="APIResponse[Any]") +_AsyncAPIResponseT = TypeVar("_AsyncAPIResponseT", bound="AsyncAPIResponse[Any]") + +log: logging.Logger = logging.getLogger(__name__) + + +class BaseAPIResponse(Generic[R]): + _cast_to: type[R] + _client: BaseClient[Any, Any] + _parsed_by_type: dict[type[Any], Any] + _is_sse_stream: bool + _stream_cls: type[Stream[Any]] | type[AsyncStream[Any]] | None + _options: FinalRequestOptions + + http_response: httpx.Response + + retries_taken: int + """The number of retries made. If no retries happened this will be `0`""" + + def __init__( + self, + *, + raw: httpx.Response, + cast_to: type[R], + client: BaseClient[Any, Any], + stream: bool, + stream_cls: type[Stream[Any]] | type[AsyncStream[Any]] | None, + options: FinalRequestOptions, + retries_taken: int = 0, + ) -> None: + self._cast_to = cast_to + self._client = client + self._parsed_by_type = {} + self._is_sse_stream = stream + self._stream_cls = stream_cls + self._options = options + self.http_response = raw + self.retries_taken = retries_taken + + @property + def headers(self) -> httpx.Headers: + return self.http_response.headers + + @property + def http_request(self) -> httpx.Request: + """Returns the httpx Request instance associated with the current response.""" + return self.http_response.request + + @property + def status_code(self) -> int: + return self.http_response.status_code + + @property + def url(self) -> httpx.URL: + """Returns the URL for which the request was made.""" + return self.http_response.url + + @property + def method(self) -> str: + return self.http_request.method + + @property + def http_version(self) -> str: + return self.http_response.http_version + + @property + def elapsed(self) -> datetime.timedelta: + """The time taken for the complete request/response cycle to complete.""" + return self.http_response.elapsed + + @property + def is_closed(self) -> bool: + """Whether or not the response body has been closed. + + If this is False then there is response data that has not been read yet. + You must either fully consume the response body or call `.close()` + before discarding the response to prevent resource leaks. + """ + return self.http_response.is_closed + + @override + def __repr__(self) -> str: + return ( + f"<{self.__class__.__name__} [{self.status_code} {self.http_response.reason_phrase}] type={self._cast_to}>" + ) + + def _parse(self, *, to: type[_T] | None = None) -> R | _T: + cast_to = to if to is not None else self._cast_to + + # unwrap `TypeAlias('Name', T)` -> `T` + if is_type_alias_type(cast_to): + cast_to = cast_to.__value__ # type: ignore[unreachable] + + # unwrap `Annotated[T, ...]` -> `T` + if cast_to and is_annotated_type(cast_to): + cast_to = extract_type_arg(cast_to, 0) + + origin = get_origin(cast_to) or cast_to + + if self._is_sse_stream: + if to: + if not is_stream_class_type(to): + raise TypeError(f"Expected custom parse type to be a subclass of {Stream} or {AsyncStream}") + + return cast( + _T, + to( + cast_to=extract_stream_chunk_type( + to, + failure_message="Expected custom stream type to be passed with a type argument, e.g. Stream[ChunkType]", + ), + response=self.http_response, + client=cast(Any, self._client), + ), + ) + + if self._stream_cls: + return cast( + R, + self._stream_cls( + cast_to=extract_stream_chunk_type(self._stream_cls), + response=self.http_response, + client=cast(Any, self._client), + ), + ) + + stream_cls = cast("type[Stream[Any]] | type[AsyncStream[Any]] | None", self._client._default_stream_cls) + if stream_cls is None: + raise MissingStreamClassError() + + return cast( + R, + stream_cls( + cast_to=cast_to, + response=self.http_response, + client=cast(Any, self._client), + ), + ) + + if cast_to is NoneType: + return cast(R, None) + + response = self.http_response + if cast_to == str: + return cast(R, response.text) + + if cast_to == bytes: + return cast(R, response.content) + + if cast_to == int: + return cast(R, int(response.text)) + + if cast_to == float: + return cast(R, float(response.text)) + + if cast_to == bool: + return cast(R, response.text.lower() == "true") + + if origin == APIResponse: + raise RuntimeError("Unexpected state - cast_to is `APIResponse`") + + if inspect.isclass(origin) and issubclass(origin, httpx.Response): + # Because of the invariance of our ResponseT TypeVar, users can subclass httpx.Response + # and pass that class to our request functions. We cannot change the variance to be either + # covariant or contravariant as that makes our usage of ResponseT illegal. We could construct + # the response class ourselves but that is something that should be supported directly in httpx + # as it would be easy to incorrectly construct the Response object due to the multitude of arguments. + if cast_to != httpx.Response: + raise ValueError(f"Subclasses of httpx.Response cannot be passed to `cast_to`") + return cast(R, response) + + if ( + inspect.isclass( + origin # pyright: ignore[reportUnknownArgumentType] + ) + and not issubclass(origin, BaseModel) + and issubclass(origin, pydantic.BaseModel) + ): + raise TypeError( + "Pydantic models must subclass our base model type, e.g. `from ydc_search_api import BaseModel`" + ) + + if ( + cast_to is not object + and not origin is list + and not origin is dict + and not origin is Union + and not issubclass(origin, BaseModel) + ): + raise RuntimeError( + f"Unsupported type, expected {cast_to} to be a subclass of {BaseModel}, {dict}, {list}, {Union}, {NoneType}, {str} or {httpx.Response}." + ) + + # split is required to handle cases where additional information is included + # in the response, e.g. application/json; charset=utf-8 + content_type, *_ = response.headers.get("content-type", "*").split(";") + if not content_type.endswith("json"): + if is_basemodel(cast_to): + try: + data = response.json() + except Exception as exc: + log.debug("Could not read JSON from response data due to %s - %s", type(exc), exc) + else: + return self._client._process_response_data( + data=data, + cast_to=cast_to, # type: ignore + response=response, + ) + + if self._client._strict_response_validation: + raise APIResponseValidationError( + response=response, + message=f"Expected Content-Type response header to be `application/json` but received `{content_type}` instead.", + body=response.text, + ) + + # If the API responds with content that isn't JSON then we just return + # the (decoded) text without performing any parsing so that you can still + # handle the response however you need to. + return response.text # type: ignore + + data = response.json() + + return self._client._process_response_data( + data=data, + cast_to=cast_to, # type: ignore + response=response, + ) + + +class APIResponse(BaseAPIResponse[R]): + @overload + def parse(self, *, to: type[_T]) -> _T: ... + + @overload + def parse(self) -> R: ... + + def parse(self, *, to: type[_T] | None = None) -> R | _T: + """Returns the rich python representation of this response's data. + + For lower-level control, see `.read()`, `.json()`, `.iter_bytes()`. + + You can customise the type that the response is parsed into through + the `to` argument, e.g. + + ```py + from ydc_search_api import BaseModel + + + class MyModel(BaseModel): + foo: str + + + obj = response.parse(to=MyModel) + print(obj.foo) + ``` + + We support parsing: + - `BaseModel` + - `dict` + - `list` + - `Union` + - `str` + - `int` + - `float` + - `httpx.Response` + """ + cache_key = to if to is not None else self._cast_to + cached = self._parsed_by_type.get(cache_key) + if cached is not None: + return cached # type: ignore[no-any-return] + + if not self._is_sse_stream: + self.read() + + parsed = self._parse(to=to) + if is_given(self._options.post_parser): + parsed = self._options.post_parser(parsed) + + self._parsed_by_type[cache_key] = parsed + return parsed + + def read(self) -> bytes: + """Read and return the binary response content.""" + try: + return self.http_response.read() + except httpx.StreamConsumed as exc: + # The default error raised by httpx isn't very + # helpful in our case so we re-raise it with + # a different error message. + raise StreamAlreadyConsumed() from exc + + def text(self) -> str: + """Read and decode the response content into a string.""" + self.read() + return self.http_response.text + + def json(self) -> object: + """Read and decode the JSON response content.""" + self.read() + return self.http_response.json() + + def close(self) -> None: + """Close the response and release the connection. + + Automatically called if the response body is read to completion. + """ + self.http_response.close() + + def iter_bytes(self, chunk_size: int | None = None) -> Iterator[bytes]: + """ + A byte-iterator over the decoded response content. + + This automatically handles gzip, deflate and brotli encoded responses. + """ + for chunk in self.http_response.iter_bytes(chunk_size): + yield chunk + + def iter_text(self, chunk_size: int | None = None) -> Iterator[str]: + """A str-iterator over the decoded response content + that handles both gzip, deflate, etc but also detects the content's + string encoding. + """ + for chunk in self.http_response.iter_text(chunk_size): + yield chunk + + def iter_lines(self) -> Iterator[str]: + """Like `iter_text()` but will only yield chunks for each line""" + for chunk in self.http_response.iter_lines(): + yield chunk + + +class AsyncAPIResponse(BaseAPIResponse[R]): + @overload + async def parse(self, *, to: type[_T]) -> _T: ... + + @overload + async def parse(self) -> R: ... + + async def parse(self, *, to: type[_T] | None = None) -> R | _T: + """Returns the rich python representation of this response's data. + + For lower-level control, see `.read()`, `.json()`, `.iter_bytes()`. + + You can customise the type that the response is parsed into through + the `to` argument, e.g. + + ```py + from ydc_search_api import BaseModel + + + class MyModel(BaseModel): + foo: str + + + obj = response.parse(to=MyModel) + print(obj.foo) + ``` + + We support parsing: + - `BaseModel` + - `dict` + - `list` + - `Union` + - `str` + - `httpx.Response` + """ + cache_key = to if to is not None else self._cast_to + cached = self._parsed_by_type.get(cache_key) + if cached is not None: + return cached # type: ignore[no-any-return] + + if not self._is_sse_stream: + await self.read() + + parsed = self._parse(to=to) + if is_given(self._options.post_parser): + parsed = self._options.post_parser(parsed) + + self._parsed_by_type[cache_key] = parsed + return parsed + + async def read(self) -> bytes: + """Read and return the binary response content.""" + try: + return await self.http_response.aread() + except httpx.StreamConsumed as exc: + # the default error raised by httpx isn't very + # helpful in our case so we re-raise it with + # a different error message + raise StreamAlreadyConsumed() from exc + + async def text(self) -> str: + """Read and decode the response content into a string.""" + await self.read() + return self.http_response.text + + async def json(self) -> object: + """Read and decode the JSON response content.""" + await self.read() + return self.http_response.json() + + async def close(self) -> None: + """Close the response and release the connection. + + Automatically called if the response body is read to completion. + """ + await self.http_response.aclose() + + async def iter_bytes(self, chunk_size: int | None = None) -> AsyncIterator[bytes]: + """ + A byte-iterator over the decoded response content. + + This automatically handles gzip, deflate and brotli encoded responses. + """ + async for chunk in self.http_response.aiter_bytes(chunk_size): + yield chunk + + async def iter_text(self, chunk_size: int | None = None) -> AsyncIterator[str]: + """A str-iterator over the decoded response content + that handles both gzip, deflate, etc but also detects the content's + string encoding. + """ + async for chunk in self.http_response.aiter_text(chunk_size): + yield chunk + + async def iter_lines(self) -> AsyncIterator[str]: + """Like `iter_text()` but will only yield chunks for each line""" + async for chunk in self.http_response.aiter_lines(): + yield chunk + + +class BinaryAPIResponse(APIResponse[bytes]): + """Subclass of APIResponse providing helpers for dealing with binary data. + + Note: If you want to stream the response data instead of eagerly reading it + all at once then you should use `.with_streaming_response` when making + the API request, e.g. `.with_streaming_response.get_binary_response()` + """ + + def write_to_file( + self, + file: str | os.PathLike[str], + ) -> None: + """Write the output to the given file. + + Accepts a filename or any path-like object, e.g. pathlib.Path + + Note: if you want to stream the data to the file instead of writing + all at once then you should use `.with_streaming_response` when making + the API request, e.g. `.with_streaming_response.get_binary_response()` + """ + with open(file, mode="wb") as f: + for data in self.iter_bytes(): + f.write(data) + + +class AsyncBinaryAPIResponse(AsyncAPIResponse[bytes]): + """Subclass of APIResponse providing helpers for dealing with binary data. + + Note: If you want to stream the response data instead of eagerly reading it + all at once then you should use `.with_streaming_response` when making + the API request, e.g. `.with_streaming_response.get_binary_response()` + """ + + async def write_to_file( + self, + file: str | os.PathLike[str], + ) -> None: + """Write the output to the given file. + + Accepts a filename or any path-like object, e.g. pathlib.Path + + Note: if you want to stream the data to the file instead of writing + all at once then you should use `.with_streaming_response` when making + the API request, e.g. `.with_streaming_response.get_binary_response()` + """ + path = anyio.Path(file) + async with await path.open(mode="wb") as f: + async for data in self.iter_bytes(): + await f.write(data) + + +class StreamedBinaryAPIResponse(APIResponse[bytes]): + def stream_to_file( + self, + file: str | os.PathLike[str], + *, + chunk_size: int | None = None, + ) -> None: + """Streams the output to the given file. + + Accepts a filename or any path-like object, e.g. pathlib.Path + """ + with open(file, mode="wb") as f: + for data in self.iter_bytes(chunk_size): + f.write(data) + + +class AsyncStreamedBinaryAPIResponse(AsyncAPIResponse[bytes]): + async def stream_to_file( + self, + file: str | os.PathLike[str], + *, + chunk_size: int | None = None, + ) -> None: + """Streams the output to the given file. + + Accepts a filename or any path-like object, e.g. pathlib.Path + """ + path = anyio.Path(file) + async with await path.open(mode="wb") as f: + async for data in self.iter_bytes(chunk_size): + await f.write(data) + + +class MissingStreamClassError(TypeError): + def __init__(self) -> None: + super().__init__( + "The `stream` argument was set to `True` but the `stream_cls` argument was not given. See `ydc_search_api._streaming` for reference", + ) + + +class StreamAlreadyConsumed(YdcSearchAPIError): + """ + Attempted to read or stream content, but the content has already + been streamed. + + This can happen if you use a method like `.iter_lines()` and then attempt + to read th entire response body afterwards, e.g. + + ```py + response = await client.post(...) + async for line in response.iter_lines(): + ... # do something with `line` + + content = await response.read() + # ^ error + ``` + + If you want this behaviour you'll need to either manually accumulate the response + content or call `await response.read()` before iterating over the stream. + """ + + def __init__(self) -> None: + message = ( + "Attempted to read or stream some content, but the content has " + "already been streamed. " + "This could be due to attempting to stream the response " + "content more than once." + "\n\n" + "You can fix this by manually accumulating the response content while streaming " + "or by calling `.read()` before starting to stream." + ) + super().__init__(message) + + +class ResponseContextManager(Generic[_APIResponseT]): + """Context manager for ensuring that a request is not made + until it is entered and that the response will always be closed + when the context manager exits + """ + + def __init__(self, request_func: Callable[[], _APIResponseT]) -> None: + self._request_func = request_func + self.__response: _APIResponseT | None = None + + def __enter__(self) -> _APIResponseT: + self.__response = self._request_func() + return self.__response + + def __exit__( + self, + exc_type: type[BaseException] | None, + exc: BaseException | None, + exc_tb: TracebackType | None, + ) -> None: + if self.__response is not None: + self.__response.close() + + +class AsyncResponseContextManager(Generic[_AsyncAPIResponseT]): + """Context manager for ensuring that a request is not made + until it is entered and that the response will always be closed + when the context manager exits + """ + + def __init__(self, api_request: Awaitable[_AsyncAPIResponseT]) -> None: + self._api_request = api_request + self.__response: _AsyncAPIResponseT | None = None + + async def __aenter__(self) -> _AsyncAPIResponseT: + self.__response = await self._api_request + return self.__response + + async def __aexit__( + self, + exc_type: type[BaseException] | None, + exc: BaseException | None, + exc_tb: TracebackType | None, + ) -> None: + if self.__response is not None: + await self.__response.close() + + +def to_streamed_response_wrapper(func: Callable[P, R]) -> Callable[P, ResponseContextManager[APIResponse[R]]]: + """Higher order function that takes one of our bound API methods and wraps it + to support streaming and returning the raw `APIResponse` object directly. + """ + + @functools.wraps(func) + def wrapped(*args: P.args, **kwargs: P.kwargs) -> ResponseContextManager[APIResponse[R]]: + extra_headers: dict[str, str] = {**(cast(Any, kwargs.get("extra_headers")) or {})} + extra_headers[RAW_RESPONSE_HEADER] = "stream" + + kwargs["extra_headers"] = extra_headers + + make_request = functools.partial(func, *args, **kwargs) + + return ResponseContextManager(cast(Callable[[], APIResponse[R]], make_request)) + + return wrapped + + +def async_to_streamed_response_wrapper( + func: Callable[P, Awaitable[R]], +) -> Callable[P, AsyncResponseContextManager[AsyncAPIResponse[R]]]: + """Higher order function that takes one of our bound API methods and wraps it + to support streaming and returning the raw `APIResponse` object directly. + """ + + @functools.wraps(func) + def wrapped(*args: P.args, **kwargs: P.kwargs) -> AsyncResponseContextManager[AsyncAPIResponse[R]]: + extra_headers: dict[str, str] = {**(cast(Any, kwargs.get("extra_headers")) or {})} + extra_headers[RAW_RESPONSE_HEADER] = "stream" + + kwargs["extra_headers"] = extra_headers + + make_request = func(*args, **kwargs) + + return AsyncResponseContextManager(cast(Awaitable[AsyncAPIResponse[R]], make_request)) + + return wrapped + + +def to_custom_streamed_response_wrapper( + func: Callable[P, object], + response_cls: type[_APIResponseT], +) -> Callable[P, ResponseContextManager[_APIResponseT]]: + """Higher order function that takes one of our bound API methods and an `APIResponse` class + and wraps the method to support streaming and returning the given response class directly. + + Note: the given `response_cls` *must* be concrete, e.g. `class BinaryAPIResponse(APIResponse[bytes])` + """ + + @functools.wraps(func) + def wrapped(*args: P.args, **kwargs: P.kwargs) -> ResponseContextManager[_APIResponseT]: + extra_headers: dict[str, Any] = {**(cast(Any, kwargs.get("extra_headers")) or {})} + extra_headers[RAW_RESPONSE_HEADER] = "stream" + extra_headers[OVERRIDE_CAST_TO_HEADER] = response_cls + + kwargs["extra_headers"] = extra_headers + + make_request = functools.partial(func, *args, **kwargs) + + return ResponseContextManager(cast(Callable[[], _APIResponseT], make_request)) + + return wrapped + + +def async_to_custom_streamed_response_wrapper( + func: Callable[P, Awaitable[object]], + response_cls: type[_AsyncAPIResponseT], +) -> Callable[P, AsyncResponseContextManager[_AsyncAPIResponseT]]: + """Higher order function that takes one of our bound API methods and an `APIResponse` class + and wraps the method to support streaming and returning the given response class directly. + + Note: the given `response_cls` *must* be concrete, e.g. `class BinaryAPIResponse(APIResponse[bytes])` + """ + + @functools.wraps(func) + def wrapped(*args: P.args, **kwargs: P.kwargs) -> AsyncResponseContextManager[_AsyncAPIResponseT]: + extra_headers: dict[str, Any] = {**(cast(Any, kwargs.get("extra_headers")) or {})} + extra_headers[RAW_RESPONSE_HEADER] = "stream" + extra_headers[OVERRIDE_CAST_TO_HEADER] = response_cls + + kwargs["extra_headers"] = extra_headers + + make_request = func(*args, **kwargs) + + return AsyncResponseContextManager(cast(Awaitable[_AsyncAPIResponseT], make_request)) + + return wrapped + + +def to_raw_response_wrapper(func: Callable[P, R]) -> Callable[P, APIResponse[R]]: + """Higher order function that takes one of our bound API methods and wraps it + to support returning the raw `APIResponse` object directly. + """ + + @functools.wraps(func) + def wrapped(*args: P.args, **kwargs: P.kwargs) -> APIResponse[R]: + extra_headers: dict[str, str] = {**(cast(Any, kwargs.get("extra_headers")) or {})} + extra_headers[RAW_RESPONSE_HEADER] = "raw" + + kwargs["extra_headers"] = extra_headers + + return cast(APIResponse[R], func(*args, **kwargs)) + + return wrapped + + +def async_to_raw_response_wrapper(func: Callable[P, Awaitable[R]]) -> Callable[P, Awaitable[AsyncAPIResponse[R]]]: + """Higher order function that takes one of our bound API methods and wraps it + to support returning the raw `APIResponse` object directly. + """ + + @functools.wraps(func) + async def wrapped(*args: P.args, **kwargs: P.kwargs) -> AsyncAPIResponse[R]: + extra_headers: dict[str, str] = {**(cast(Any, kwargs.get("extra_headers")) or {})} + extra_headers[RAW_RESPONSE_HEADER] = "raw" + + kwargs["extra_headers"] = extra_headers + + return cast(AsyncAPIResponse[R], await func(*args, **kwargs)) + + return wrapped + + +def to_custom_raw_response_wrapper( + func: Callable[P, object], + response_cls: type[_APIResponseT], +) -> Callable[P, _APIResponseT]: + """Higher order function that takes one of our bound API methods and an `APIResponse` class + and wraps the method to support returning the given response class directly. + + Note: the given `response_cls` *must* be concrete, e.g. `class BinaryAPIResponse(APIResponse[bytes])` + """ + + @functools.wraps(func) + def wrapped(*args: P.args, **kwargs: P.kwargs) -> _APIResponseT: + extra_headers: dict[str, Any] = {**(cast(Any, kwargs.get("extra_headers")) or {})} + extra_headers[RAW_RESPONSE_HEADER] = "raw" + extra_headers[OVERRIDE_CAST_TO_HEADER] = response_cls + + kwargs["extra_headers"] = extra_headers + + return cast(_APIResponseT, func(*args, **kwargs)) + + return wrapped + + +def async_to_custom_raw_response_wrapper( + func: Callable[P, Awaitable[object]], + response_cls: type[_AsyncAPIResponseT], +) -> Callable[P, Awaitable[_AsyncAPIResponseT]]: + """Higher order function that takes one of our bound API methods and an `APIResponse` class + and wraps the method to support returning the given response class directly. + + Note: the given `response_cls` *must* be concrete, e.g. `class BinaryAPIResponse(APIResponse[bytes])` + """ + + @functools.wraps(func) + def wrapped(*args: P.args, **kwargs: P.kwargs) -> Awaitable[_AsyncAPIResponseT]: + extra_headers: dict[str, Any] = {**(cast(Any, kwargs.get("extra_headers")) or {})} + extra_headers[RAW_RESPONSE_HEADER] = "raw" + extra_headers[OVERRIDE_CAST_TO_HEADER] = response_cls + + kwargs["extra_headers"] = extra_headers + + return cast(Awaitable[_AsyncAPIResponseT], func(*args, **kwargs)) + + return wrapped + + +def extract_response_type(typ: type[BaseAPIResponse[Any]]) -> type: + """Given a type like `APIResponse[T]`, returns the generic type variable `T`. + + This also handles the case where a concrete subclass is given, e.g. + ```py + class MyResponse(APIResponse[bytes]): + ... + + extract_response_type(MyResponse) -> bytes + ``` + """ + return extract_type_var_from_base( + typ, + generic_bases=cast("tuple[type, ...]", (BaseAPIResponse, APIResponse, AsyncAPIResponse)), + index=0, + ) diff --git a/src/ydc_search_api/_streaming.py b/src/ydc_search_api/_streaming.py new file mode 100644 index 0000000..7499936 --- /dev/null +++ b/src/ydc_search_api/_streaming.py @@ -0,0 +1,333 @@ +# Note: initially copied from https://github.com/florimondmanca/httpx-sse/blob/master/src/httpx_sse/_decoders.py +from __future__ import annotations + +import json +import inspect +from types import TracebackType +from typing import TYPE_CHECKING, Any, Generic, TypeVar, Iterator, AsyncIterator, cast +from typing_extensions import Self, Protocol, TypeGuard, override, get_origin, runtime_checkable + +import httpx + +from ._utils import extract_type_var_from_base + +if TYPE_CHECKING: + from ._client import YdcSearchAPI, AsyncYdcSearchAPI + + +_T = TypeVar("_T") + + +class Stream(Generic[_T]): + """Provides the core interface to iterate over a synchronous stream response.""" + + response: httpx.Response + + _decoder: SSEBytesDecoder + + def __init__( + self, + *, + cast_to: type[_T], + response: httpx.Response, + client: YdcSearchAPI, + ) -> None: + self.response = response + self._cast_to = cast_to + self._client = client + self._decoder = client._make_sse_decoder() + self._iterator = self.__stream__() + + def __next__(self) -> _T: + return self._iterator.__next__() + + def __iter__(self) -> Iterator[_T]: + for item in self._iterator: + yield item + + def _iter_events(self) -> Iterator[ServerSentEvent]: + yield from self._decoder.iter_bytes(self.response.iter_bytes()) + + def __stream__(self) -> Iterator[_T]: + cast_to = cast(Any, self._cast_to) + response = self.response + process_data = self._client._process_response_data + iterator = self._iter_events() + + for sse in iterator: + yield process_data(data=sse.json(), cast_to=cast_to, response=response) + + # Ensure the entire stream is consumed + for _sse in iterator: + ... + + def __enter__(self) -> Self: + return self + + def __exit__( + self, + exc_type: type[BaseException] | None, + exc: BaseException | None, + exc_tb: TracebackType | None, + ) -> None: + self.close() + + def close(self) -> None: + """ + Close the response and release the connection. + + Automatically called if the response body is read to completion. + """ + self.response.close() + + +class AsyncStream(Generic[_T]): + """Provides the core interface to iterate over an asynchronous stream response.""" + + response: httpx.Response + + _decoder: SSEDecoder | SSEBytesDecoder + + def __init__( + self, + *, + cast_to: type[_T], + response: httpx.Response, + client: AsyncYdcSearchAPI, + ) -> None: + self.response = response + self._cast_to = cast_to + self._client = client + self._decoder = client._make_sse_decoder() + self._iterator = self.__stream__() + + async def __anext__(self) -> _T: + return await self._iterator.__anext__() + + async def __aiter__(self) -> AsyncIterator[_T]: + async for item in self._iterator: + yield item + + async def _iter_events(self) -> AsyncIterator[ServerSentEvent]: + async for sse in self._decoder.aiter_bytes(self.response.aiter_bytes()): + yield sse + + async def __stream__(self) -> AsyncIterator[_T]: + cast_to = cast(Any, self._cast_to) + response = self.response + process_data = self._client._process_response_data + iterator = self._iter_events() + + async for sse in iterator: + yield process_data(data=sse.json(), cast_to=cast_to, response=response) + + # Ensure the entire stream is consumed + async for _sse in iterator: + ... + + async def __aenter__(self) -> Self: + return self + + async def __aexit__( + self, + exc_type: type[BaseException] | None, + exc: BaseException | None, + exc_tb: TracebackType | None, + ) -> None: + await self.close() + + async def close(self) -> None: + """ + Close the response and release the connection. + + Automatically called if the response body is read to completion. + """ + await self.response.aclose() + + +class ServerSentEvent: + def __init__( + self, + *, + event: str | None = None, + data: str | None = None, + id: str | None = None, + retry: int | None = None, + ) -> None: + if data is None: + data = "" + + self._id = id + self._data = data + self._event = event or None + self._retry = retry + + @property + def event(self) -> str | None: + return self._event + + @property + def id(self) -> str | None: + return self._id + + @property + def retry(self) -> int | None: + return self._retry + + @property + def data(self) -> str: + return self._data + + def json(self) -> Any: + return json.loads(self.data) + + @override + def __repr__(self) -> str: + return f"ServerSentEvent(event={self.event}, data={self.data}, id={self.id}, retry={self.retry})" + + +class SSEDecoder: + _data: list[str] + _event: str | None + _retry: int | None + _last_event_id: str | None + + def __init__(self) -> None: + self._event = None + self._data = [] + self._last_event_id = None + self._retry = None + + def iter_bytes(self, iterator: Iterator[bytes]) -> Iterator[ServerSentEvent]: + """Given an iterator that yields raw binary data, iterate over it & yield every event encountered""" + for chunk in self._iter_chunks(iterator): + # Split before decoding so splitlines() only uses \r and \n + for raw_line in chunk.splitlines(): + line = raw_line.decode("utf-8") + sse = self.decode(line) + if sse: + yield sse + + def _iter_chunks(self, iterator: Iterator[bytes]) -> Iterator[bytes]: + """Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunks""" + data = b"" + for chunk in iterator: + for line in chunk.splitlines(keepends=True): + data += line + if data.endswith((b"\r\r", b"\n\n", b"\r\n\r\n")): + yield data + data = b"" + if data: + yield data + + async def aiter_bytes(self, iterator: AsyncIterator[bytes]) -> AsyncIterator[ServerSentEvent]: + """Given an iterator that yields raw binary data, iterate over it & yield every event encountered""" + async for chunk in self._aiter_chunks(iterator): + # Split before decoding so splitlines() only uses \r and \n + for raw_line in chunk.splitlines(): + line = raw_line.decode("utf-8") + sse = self.decode(line) + if sse: + yield sse + + async def _aiter_chunks(self, iterator: AsyncIterator[bytes]) -> AsyncIterator[bytes]: + """Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunks""" + data = b"" + async for chunk in iterator: + for line in chunk.splitlines(keepends=True): + data += line + if data.endswith((b"\r\r", b"\n\n", b"\r\n\r\n")): + yield data + data = b"" + if data: + yield data + + def decode(self, line: str) -> ServerSentEvent | None: + # See: https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation # noqa: E501 + + if not line: + if not self._event and not self._data and not self._last_event_id and self._retry is None: + return None + + sse = ServerSentEvent( + event=self._event, + data="\n".join(self._data), + id=self._last_event_id, + retry=self._retry, + ) + + # NOTE: as per the SSE spec, do not reset last_event_id. + self._event = None + self._data = [] + self._retry = None + + return sse + + if line.startswith(":"): + return None + + fieldname, _, value = line.partition(":") + + if value.startswith(" "): + value = value[1:] + + if fieldname == "event": + self._event = value + elif fieldname == "data": + self._data.append(value) + elif fieldname == "id": + if "\0" in value: + pass + else: + self._last_event_id = value + elif fieldname == "retry": + try: + self._retry = int(value) + except (TypeError, ValueError): + pass + else: + pass # Field is ignored. + + return None + + +@runtime_checkable +class SSEBytesDecoder(Protocol): + def iter_bytes(self, iterator: Iterator[bytes]) -> Iterator[ServerSentEvent]: + """Given an iterator that yields raw binary data, iterate over it & yield every event encountered""" + ... + + def aiter_bytes(self, iterator: AsyncIterator[bytes]) -> AsyncIterator[ServerSentEvent]: + """Given an async iterator that yields raw binary data, iterate over it & yield every event encountered""" + ... + + +def is_stream_class_type(typ: type) -> TypeGuard[type[Stream[object]] | type[AsyncStream[object]]]: + """TypeGuard for determining whether or not the given type is a subclass of `Stream` / `AsyncStream`""" + origin = get_origin(typ) or typ + return inspect.isclass(origin) and issubclass(origin, (Stream, AsyncStream)) + + +def extract_stream_chunk_type( + stream_cls: type, + *, + failure_message: str | None = None, +) -> type: + """Given a type like `Stream[T]`, returns the generic type variable `T`. + + This also handles the case where a concrete subclass is given, e.g. + ```py + class MyStream(Stream[bytes]): + ... + + extract_stream_chunk_type(MyStream) -> bytes + ``` + """ + from ._base_client import Stream, AsyncStream + + return extract_type_var_from_base( + stream_cls, + index=0, + generic_bases=cast("tuple[type, ...]", (Stream, AsyncStream)), + failure_message=failure_message, + ) diff --git a/src/ydc_search_api/_types.py b/src/ydc_search_api/_types.py new file mode 100644 index 0000000..71d6c83 --- /dev/null +++ b/src/ydc_search_api/_types.py @@ -0,0 +1,217 @@ +from __future__ import annotations + +from os import PathLike +from typing import ( + IO, + TYPE_CHECKING, + Any, + Dict, + List, + Type, + Tuple, + Union, + Mapping, + TypeVar, + Callable, + Optional, + Sequence, +) +from typing_extensions import Set, Literal, Protocol, TypeAlias, TypedDict, override, runtime_checkable + +import httpx +import pydantic +from httpx import URL, Proxy, Timeout, Response, BaseTransport, AsyncBaseTransport + +if TYPE_CHECKING: + from ._models import BaseModel + from ._response import APIResponse, AsyncAPIResponse + +Transport = BaseTransport +AsyncTransport = AsyncBaseTransport +Query = Mapping[str, object] +Body = object +AnyMapping = Mapping[str, object] +ModelT = TypeVar("ModelT", bound=pydantic.BaseModel) +_T = TypeVar("_T") + + +# Approximates httpx internal ProxiesTypes and RequestFiles types +# while adding support for `PathLike` instances +ProxiesDict = Dict["str | URL", Union[None, str, URL, Proxy]] +ProxiesTypes = Union[str, Proxy, ProxiesDict] +if TYPE_CHECKING: + Base64FileInput = Union[IO[bytes], PathLike[str]] + FileContent = Union[IO[bytes], bytes, PathLike[str]] +else: + Base64FileInput = Union[IO[bytes], PathLike] + FileContent = Union[IO[bytes], bytes, PathLike] # PathLike is not subscriptable in Python 3.8. +FileTypes = Union[ + # file (or bytes) + FileContent, + # (filename, file (or bytes)) + Tuple[Optional[str], FileContent], + # (filename, file (or bytes), content_type) + Tuple[Optional[str], FileContent, Optional[str]], + # (filename, file (or bytes), content_type, headers) + Tuple[Optional[str], FileContent, Optional[str], Mapping[str, str]], +] +RequestFiles = Union[Mapping[str, FileTypes], Sequence[Tuple[str, FileTypes]]] + +# duplicate of the above but without our custom file support +HttpxFileContent = Union[IO[bytes], bytes] +HttpxFileTypes = Union[ + # file (or bytes) + HttpxFileContent, + # (filename, file (or bytes)) + Tuple[Optional[str], HttpxFileContent], + # (filename, file (or bytes), content_type) + Tuple[Optional[str], HttpxFileContent, Optional[str]], + # (filename, file (or bytes), content_type, headers) + Tuple[Optional[str], HttpxFileContent, Optional[str], Mapping[str, str]], +] +HttpxRequestFiles = Union[Mapping[str, HttpxFileTypes], Sequence[Tuple[str, HttpxFileTypes]]] + +# Workaround to support (cast_to: Type[ResponseT]) -> ResponseT +# where ResponseT includes `None`. In order to support directly +# passing `None`, overloads would have to be defined for every +# method that uses `ResponseT` which would lead to an unacceptable +# amount of code duplication and make it unreadable. See _base_client.py +# for example usage. +# +# This unfortunately means that you will either have +# to import this type and pass it explicitly: +# +# from ydc_search_api import NoneType +# client.get('/foo', cast_to=NoneType) +# +# or build it yourself: +# +# client.get('/foo', cast_to=type(None)) +if TYPE_CHECKING: + NoneType: Type[None] +else: + NoneType = type(None) + + +class RequestOptions(TypedDict, total=False): + headers: Headers + max_retries: int + timeout: float | Timeout | None + params: Query + extra_json: AnyMapping + idempotency_key: str + + +# Sentinel class used until PEP 0661 is accepted +class NotGiven: + """ + A sentinel singleton class used to distinguish omitted keyword arguments + from those passed in with the value None (which may have different behavior). + + For example: + + ```py + def get(timeout: Union[int, NotGiven, None] = NotGiven()) -> Response: ... + + + get(timeout=1) # 1s timeout + get(timeout=None) # No timeout + get() # Default timeout behavior, which may not be statically known at the method definition. + ``` + """ + + def __bool__(self) -> Literal[False]: + return False + + @override + def __repr__(self) -> str: + return "NOT_GIVEN" + + +NotGivenOr = Union[_T, NotGiven] +NOT_GIVEN = NotGiven() + + +class Omit: + """In certain situations you need to be able to represent a case where a default value has + to be explicitly removed and `None` is not an appropriate substitute, for example: + + ```py + # as the default `Content-Type` header is `application/json` that will be sent + client.post("/upload/files", files={"file": b"my raw file content"}) + + # you can't explicitly override the header as it has to be dynamically generated + # to look something like: 'multipart/form-data; boundary=0d8382fcf5f8c3be01ca2e11002d2983' + client.post(..., headers={"Content-Type": "multipart/form-data"}) + + # instead you can remove the default `application/json` header by passing Omit + client.post(..., headers={"Content-Type": Omit()}) + ``` + """ + + def __bool__(self) -> Literal[False]: + return False + + +@runtime_checkable +class ModelBuilderProtocol(Protocol): + @classmethod + def build( + cls: type[_T], + *, + response: Response, + data: object, + ) -> _T: ... + + +Headers = Mapping[str, Union[str, Omit]] + + +class HeadersLikeProtocol(Protocol): + def get(self, __key: str) -> str | None: ... + + +HeadersLike = Union[Headers, HeadersLikeProtocol] + +ResponseT = TypeVar( + "ResponseT", + bound=Union[ + object, + str, + None, + "BaseModel", + List[Any], + Dict[str, Any], + Response, + ModelBuilderProtocol, + "APIResponse[Any]", + "AsyncAPIResponse[Any]", + ], +) + +StrBytesIntFloat = Union[str, bytes, int, float] + +# Note: copied from Pydantic +# https://github.com/pydantic/pydantic/blob/6f31f8f68ef011f84357330186f603ff295312fd/pydantic/main.py#L79 +IncEx: TypeAlias = Union[Set[int], Set[str], Mapping[int, Union["IncEx", bool]], Mapping[str, Union["IncEx", bool]]] + +PostParser = Callable[[Any], Any] + + +@runtime_checkable +class InheritsGeneric(Protocol): + """Represents a type that has inherited from `Generic` + + The `__orig_bases__` property can be used to determine the resolved + type variable for a given base class. + """ + + __orig_bases__: tuple[_GenericAlias] + + +class _GenericAlias(Protocol): + __origin__: type[object] + + +class HttpxSendArgs(TypedDict, total=False): + auth: httpx.Auth diff --git a/src/ydc_search_api/_utils/__init__.py b/src/ydc_search_api/_utils/__init__.py new file mode 100644 index 0000000..d4fda26 --- /dev/null +++ b/src/ydc_search_api/_utils/__init__.py @@ -0,0 +1,57 @@ +from ._sync import asyncify as asyncify +from ._proxy import LazyProxy as LazyProxy +from ._utils import ( + flatten as flatten, + is_dict as is_dict, + is_list as is_list, + is_given as is_given, + is_tuple as is_tuple, + json_safe as json_safe, + lru_cache as lru_cache, + is_mapping as is_mapping, + is_tuple_t as is_tuple_t, + parse_date as parse_date, + is_iterable as is_iterable, + is_sequence as is_sequence, + coerce_float as coerce_float, + is_mapping_t as is_mapping_t, + removeprefix as removeprefix, + removesuffix as removesuffix, + extract_files as extract_files, + is_sequence_t as is_sequence_t, + required_args as required_args, + coerce_boolean as coerce_boolean, + coerce_integer as coerce_integer, + file_from_path as file_from_path, + parse_datetime as parse_datetime, + strip_not_given as strip_not_given, + deepcopy_minimal as deepcopy_minimal, + get_async_library as get_async_library, + maybe_coerce_float as maybe_coerce_float, + get_required_header as get_required_header, + maybe_coerce_boolean as maybe_coerce_boolean, + maybe_coerce_integer as maybe_coerce_integer, +) +from ._typing import ( + is_list_type as is_list_type, + is_union_type as is_union_type, + extract_type_arg as extract_type_arg, + is_iterable_type as is_iterable_type, + is_required_type as is_required_type, + is_annotated_type as is_annotated_type, + is_type_alias_type as is_type_alias_type, + strip_annotated_type as strip_annotated_type, + extract_type_var_from_base as extract_type_var_from_base, +) +from ._streams import consume_sync_iterator as consume_sync_iterator, consume_async_iterator as consume_async_iterator +from ._transform import ( + PropertyInfo as PropertyInfo, + transform as transform, + async_transform as async_transform, + maybe_transform as maybe_transform, + async_maybe_transform as async_maybe_transform, +) +from ._reflection import ( + function_has_argument as function_has_argument, + assert_signatures_in_sync as assert_signatures_in_sync, +) diff --git a/src/ydc_search_api/_utils/_logs.py b/src/ydc_search_api/_utils/_logs.py new file mode 100644 index 0000000..e4d03d6 --- /dev/null +++ b/src/ydc_search_api/_utils/_logs.py @@ -0,0 +1,25 @@ +import os +import logging + +logger: logging.Logger = logging.getLogger("ydc_search_api") +httpx_logger: logging.Logger = logging.getLogger("httpx") + + +def _basic_config() -> None: + # e.g. [2023-10-05 14:12:26 - ydc_search_api._base_client:818 - DEBUG] HTTP Request: POST http://127.0.0.1:4010/foo/bar "200 OK" + logging.basicConfig( + format="[%(asctime)s - %(name)s:%(lineno)d - %(levelname)s] %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + ) + + +def setup_logging() -> None: + env = os.environ.get("YDC_SEARCH_API_LOG") + if env == "debug": + _basic_config() + logger.setLevel(logging.DEBUG) + httpx_logger.setLevel(logging.DEBUG) + elif env == "info": + _basic_config() + logger.setLevel(logging.INFO) + httpx_logger.setLevel(logging.INFO) diff --git a/src/ydc_search_api/_utils/_proxy.py b/src/ydc_search_api/_utils/_proxy.py new file mode 100644 index 0000000..ffd883e --- /dev/null +++ b/src/ydc_search_api/_utils/_proxy.py @@ -0,0 +1,62 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod +from typing import Generic, TypeVar, Iterable, cast +from typing_extensions import override + +T = TypeVar("T") + + +class LazyProxy(Generic[T], ABC): + """Implements data methods to pretend that an instance is another instance. + + This includes forwarding attribute access and other methods. + """ + + # Note: we have to special case proxies that themselves return proxies + # to support using a proxy as a catch-all for any random access, e.g. `proxy.foo.bar.baz` + + def __getattr__(self, attr: str) -> object: + proxied = self.__get_proxied__() + if isinstance(proxied, LazyProxy): + return proxied # pyright: ignore + return getattr(proxied, attr) + + @override + def __repr__(self) -> str: + proxied = self.__get_proxied__() + if isinstance(proxied, LazyProxy): + return proxied.__class__.__name__ + return repr(self.__get_proxied__()) + + @override + def __str__(self) -> str: + proxied = self.__get_proxied__() + if isinstance(proxied, LazyProxy): + return proxied.__class__.__name__ + return str(proxied) + + @override + def __dir__(self) -> Iterable[str]: + proxied = self.__get_proxied__() + if isinstance(proxied, LazyProxy): + return [] + return proxied.__dir__() + + @property # type: ignore + @override + def __class__(self) -> type: # pyright: ignore + proxied = self.__get_proxied__() + if issubclass(type(proxied), LazyProxy): + return type(proxied) + return proxied.__class__ + + def __get_proxied__(self) -> T: + return self.__load__() + + def __as_proxied__(self) -> T: + """Helper method that returns the current proxy, typed as the loaded object""" + return cast(T, self) + + @abstractmethod + def __load__(self) -> T: ... diff --git a/src/ydc_search_api/_utils/_reflection.py b/src/ydc_search_api/_utils/_reflection.py new file mode 100644 index 0000000..89aa712 --- /dev/null +++ b/src/ydc_search_api/_utils/_reflection.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +import inspect +from typing import Any, Callable + + +def function_has_argument(func: Callable[..., Any], arg_name: str) -> bool: + """Returns whether or not the given function has a specific parameter""" + sig = inspect.signature(func) + return arg_name in sig.parameters + + +def assert_signatures_in_sync( + source_func: Callable[..., Any], + check_func: Callable[..., Any], + *, + exclude_params: set[str] = set(), +) -> None: + """Ensure that the signature of the second function matches the first.""" + + check_sig = inspect.signature(check_func) + source_sig = inspect.signature(source_func) + + errors: list[str] = [] + + for name, source_param in source_sig.parameters.items(): + if name in exclude_params: + continue + + custom_param = check_sig.parameters.get(name) + if not custom_param: + errors.append(f"the `{name}` param is missing") + continue + + if custom_param.annotation != source_param.annotation: + errors.append( + f"types for the `{name}` param are do not match; source={repr(source_param.annotation)} checking={repr(custom_param.annotation)}" + ) + continue + + if errors: + raise AssertionError(f"{len(errors)} errors encountered when comparing signatures:\n\n" + "\n\n".join(errors)) diff --git a/src/ydc_search_api/_utils/_streams.py b/src/ydc_search_api/_utils/_streams.py new file mode 100644 index 0000000..f4a0208 --- /dev/null +++ b/src/ydc_search_api/_utils/_streams.py @@ -0,0 +1,12 @@ +from typing import Any +from typing_extensions import Iterator, AsyncIterator + + +def consume_sync_iterator(iterator: Iterator[Any]) -> None: + for _ in iterator: + ... + + +async def consume_async_iterator(iterator: AsyncIterator[Any]) -> None: + async for _ in iterator: + ... diff --git a/src/ydc_search_api/_utils/_sync.py b/src/ydc_search_api/_utils/_sync.py new file mode 100644 index 0000000..ad7ec71 --- /dev/null +++ b/src/ydc_search_api/_utils/_sync.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +import sys +import asyncio +import functools +import contextvars +from typing import Any, TypeVar, Callable, Awaitable +from typing_extensions import ParamSpec + +import anyio +import sniffio +import anyio.to_thread + +T_Retval = TypeVar("T_Retval") +T_ParamSpec = ParamSpec("T_ParamSpec") + + +if sys.version_info >= (3, 9): + _asyncio_to_thread = asyncio.to_thread +else: + # backport of https://docs.python.org/3/library/asyncio-task.html#asyncio.to_thread + # for Python 3.8 support + async def _asyncio_to_thread( + func: Callable[T_ParamSpec, T_Retval], /, *args: T_ParamSpec.args, **kwargs: T_ParamSpec.kwargs + ) -> Any: + """Asynchronously run function *func* in a separate thread. + + Any *args and **kwargs supplied for this function are directly passed + to *func*. Also, the current :class:`contextvars.Context` is propagated, + allowing context variables from the main thread to be accessed in the + separate thread. + + Returns a coroutine that can be awaited to get the eventual result of *func*. + """ + loop = asyncio.events.get_running_loop() + ctx = contextvars.copy_context() + func_call = functools.partial(ctx.run, func, *args, **kwargs) + return await loop.run_in_executor(None, func_call) + + +async def to_thread( + func: Callable[T_ParamSpec, T_Retval], /, *args: T_ParamSpec.args, **kwargs: T_ParamSpec.kwargs +) -> T_Retval: + if sniffio.current_async_library() == "asyncio": + return await _asyncio_to_thread(func, *args, **kwargs) + + return await anyio.to_thread.run_sync( + functools.partial(func, *args, **kwargs), + ) + + +# inspired by `asyncer`, https://github.com/tiangolo/asyncer +def asyncify(function: Callable[T_ParamSpec, T_Retval]) -> Callable[T_ParamSpec, Awaitable[T_Retval]]: + """ + Take a blocking function and create an async one that receives the same + positional and keyword arguments. For python version 3.9 and above, it uses + asyncio.to_thread to run the function in a separate thread. For python version + 3.8, it uses locally defined copy of the asyncio.to_thread function which was + introduced in python 3.9. + + Usage: + + ```python + def blocking_func(arg1, arg2, kwarg1=None): + # blocking code + return result + + + result = asyncify(blocking_function)(arg1, arg2, kwarg1=value1) + ``` + + ## Arguments + + `function`: a blocking regular callable (e.g. a function) + + ## Return + + An async function that takes the same positional and keyword arguments as the + original one, that when called runs the same original function in a thread worker + and returns the result. + """ + + async def wrapper(*args: T_ParamSpec.args, **kwargs: T_ParamSpec.kwargs) -> T_Retval: + return await to_thread(function, *args, **kwargs) + + return wrapper diff --git a/src/ydc_search_api/_utils/_transform.py b/src/ydc_search_api/_utils/_transform.py new file mode 100644 index 0000000..b0cc20a --- /dev/null +++ b/src/ydc_search_api/_utils/_transform.py @@ -0,0 +1,447 @@ +from __future__ import annotations + +import io +import base64 +import pathlib +from typing import Any, Mapping, TypeVar, cast +from datetime import date, datetime +from typing_extensions import Literal, get_args, override, get_type_hints as _get_type_hints + +import anyio +import pydantic + +from ._utils import ( + is_list, + is_given, + lru_cache, + is_mapping, + is_iterable, +) +from .._files import is_base64_file_input +from ._typing import ( + is_list_type, + is_union_type, + extract_type_arg, + is_iterable_type, + is_required_type, + is_annotated_type, + strip_annotated_type, +) +from .._compat import get_origin, model_dump, is_typeddict + +_T = TypeVar("_T") + + +# TODO: support for drilling globals() and locals() +# TODO: ensure works correctly with forward references in all cases + + +PropertyFormat = Literal["iso8601", "base64", "custom"] + + +class PropertyInfo: + """Metadata class to be used in Annotated types to provide information about a given type. + + For example: + + class MyParams(TypedDict): + account_holder_name: Annotated[str, PropertyInfo(alias='accountHolderName')] + + This means that {'account_holder_name': 'Robert'} will be transformed to {'accountHolderName': 'Robert'} before being sent to the API. + """ + + alias: str | None + format: PropertyFormat | None + format_template: str | None + discriminator: str | None + + def __init__( + self, + *, + alias: str | None = None, + format: PropertyFormat | None = None, + format_template: str | None = None, + discriminator: str | None = None, + ) -> None: + self.alias = alias + self.format = format + self.format_template = format_template + self.discriminator = discriminator + + @override + def __repr__(self) -> str: + return f"{self.__class__.__name__}(alias='{self.alias}', format={self.format}, format_template='{self.format_template}', discriminator='{self.discriminator}')" + + +def maybe_transform( + data: object, + expected_type: object, +) -> Any | None: + """Wrapper over `transform()` that allows `None` to be passed. + + See `transform()` for more details. + """ + if data is None: + return None + return transform(data, expected_type) + + +# Wrapper over _transform_recursive providing fake types +def transform( + data: _T, + expected_type: object, +) -> _T: + """Transform dictionaries based off of type information from the given type, for example: + + ```py + class Params(TypedDict, total=False): + card_id: Required[Annotated[str, PropertyInfo(alias="cardID")]] + + + transformed = transform({"card_id": ""}, Params) + # {'cardID': ''} + ``` + + Any keys / data that does not have type information given will be included as is. + + It should be noted that the transformations that this function does are not represented in the type system. + """ + transformed = _transform_recursive(data, annotation=cast(type, expected_type)) + return cast(_T, transformed) + + +@lru_cache(maxsize=8096) +def _get_annotated_type(type_: type) -> type | None: + """If the given type is an `Annotated` type then it is returned, if not `None` is returned. + + This also unwraps the type when applicable, e.g. `Required[Annotated[T, ...]]` + """ + if is_required_type(type_): + # Unwrap `Required[Annotated[T, ...]]` to `Annotated[T, ...]` + type_ = get_args(type_)[0] + + if is_annotated_type(type_): + return type_ + + return None + + +def _maybe_transform_key(key: str, type_: type) -> str: + """Transform the given `data` based on the annotations provided in `type_`. + + Note: this function only looks at `Annotated` types that contain `PropertyInfo` metadata. + """ + annotated_type = _get_annotated_type(type_) + if annotated_type is None: + # no `Annotated` definition for this type, no transformation needed + return key + + # ignore the first argument as it is the actual type + annotations = get_args(annotated_type)[1:] + for annotation in annotations: + if isinstance(annotation, PropertyInfo) and annotation.alias is not None: + return annotation.alias + + return key + + +def _no_transform_needed(annotation: type) -> bool: + return annotation == float or annotation == int + + +def _transform_recursive( + data: object, + *, + annotation: type, + inner_type: type | None = None, +) -> object: + """Transform the given data against the expected type. + + Args: + annotation: The direct type annotation given to the particular piece of data. + This may or may not be wrapped in metadata types, e.g. `Required[T]`, `Annotated[T, ...]` etc + + inner_type: If applicable, this is the "inside" type. This is useful in certain cases where the outside type + is a container type such as `List[T]`. In that case `inner_type` should be set to `T` so that each entry in + the list can be transformed using the metadata from the container type. + + Defaults to the same value as the `annotation` argument. + """ + if inner_type is None: + inner_type = annotation + + stripped_type = strip_annotated_type(inner_type) + origin = get_origin(stripped_type) or stripped_type + if is_typeddict(stripped_type) and is_mapping(data): + return _transform_typeddict(data, stripped_type) + + if origin == dict and is_mapping(data): + items_type = get_args(stripped_type)[1] + return {key: _transform_recursive(value, annotation=items_type) for key, value in data.items()} + + if ( + # List[T] + (is_list_type(stripped_type) and is_list(data)) + # Iterable[T] + or (is_iterable_type(stripped_type) and is_iterable(data) and not isinstance(data, str)) + ): + # dicts are technically iterable, but it is an iterable on the keys of the dict and is not usually + # intended as an iterable, so we don't transform it. + if isinstance(data, dict): + return cast(object, data) + + inner_type = extract_type_arg(stripped_type, 0) + if _no_transform_needed(inner_type): + # for some types there is no need to transform anything, so we can get a small + # perf boost from skipping that work. + # + # but we still need to convert to a list to ensure the data is json-serializable + if is_list(data): + return data + return list(data) + + return [_transform_recursive(d, annotation=annotation, inner_type=inner_type) for d in data] + + if is_union_type(stripped_type): + # For union types we run the transformation against all subtypes to ensure that everything is transformed. + # + # TODO: there may be edge cases where the same normalized field name will transform to two different names + # in different subtypes. + for subtype in get_args(stripped_type): + data = _transform_recursive(data, annotation=annotation, inner_type=subtype) + return data + + if isinstance(data, pydantic.BaseModel): + return model_dump(data, exclude_unset=True, mode="json") + + annotated_type = _get_annotated_type(annotation) + if annotated_type is None: + return data + + # ignore the first argument as it is the actual type + annotations = get_args(annotated_type)[1:] + for annotation in annotations: + if isinstance(annotation, PropertyInfo) and annotation.format is not None: + return _format_data(data, annotation.format, annotation.format_template) + + return data + + +def _format_data(data: object, format_: PropertyFormat, format_template: str | None) -> object: + if isinstance(data, (date, datetime)): + if format_ == "iso8601": + return data.isoformat() + + if format_ == "custom" and format_template is not None: + return data.strftime(format_template) + + if format_ == "base64" and is_base64_file_input(data): + binary: str | bytes | None = None + + if isinstance(data, pathlib.Path): + binary = data.read_bytes() + elif isinstance(data, io.IOBase): + binary = data.read() + + if isinstance(binary, str): # type: ignore[unreachable] + binary = binary.encode() + + if not isinstance(binary, bytes): + raise RuntimeError(f"Could not read bytes from {data}; Received {type(binary)}") + + return base64.b64encode(binary).decode("ascii") + + return data + + +def _transform_typeddict( + data: Mapping[str, object], + expected_type: type, +) -> Mapping[str, object]: + result: dict[str, object] = {} + annotations = get_type_hints(expected_type, include_extras=True) + for key, value in data.items(): + if not is_given(value): + # we don't need to include `NotGiven` values here as they'll + # be stripped out before the request is sent anyway + continue + + type_ = annotations.get(key) + if type_ is None: + # we do not have a type annotation for this field, leave it as is + result[key] = value + else: + result[_maybe_transform_key(key, type_)] = _transform_recursive(value, annotation=type_) + return result + + +async def async_maybe_transform( + data: object, + expected_type: object, +) -> Any | None: + """Wrapper over `async_transform()` that allows `None` to be passed. + + See `async_transform()` for more details. + """ + if data is None: + return None + return await async_transform(data, expected_type) + + +async def async_transform( + data: _T, + expected_type: object, +) -> _T: + """Transform dictionaries based off of type information from the given type, for example: + + ```py + class Params(TypedDict, total=False): + card_id: Required[Annotated[str, PropertyInfo(alias="cardID")]] + + + transformed = transform({"card_id": ""}, Params) + # {'cardID': ''} + ``` + + Any keys / data that does not have type information given will be included as is. + + It should be noted that the transformations that this function does are not represented in the type system. + """ + transformed = await _async_transform_recursive(data, annotation=cast(type, expected_type)) + return cast(_T, transformed) + + +async def _async_transform_recursive( + data: object, + *, + annotation: type, + inner_type: type | None = None, +) -> object: + """Transform the given data against the expected type. + + Args: + annotation: The direct type annotation given to the particular piece of data. + This may or may not be wrapped in metadata types, e.g. `Required[T]`, `Annotated[T, ...]` etc + + inner_type: If applicable, this is the "inside" type. This is useful in certain cases where the outside type + is a container type such as `List[T]`. In that case `inner_type` should be set to `T` so that each entry in + the list can be transformed using the metadata from the container type. + + Defaults to the same value as the `annotation` argument. + """ + if inner_type is None: + inner_type = annotation + + stripped_type = strip_annotated_type(inner_type) + origin = get_origin(stripped_type) or stripped_type + if is_typeddict(stripped_type) and is_mapping(data): + return await _async_transform_typeddict(data, stripped_type) + + if origin == dict and is_mapping(data): + items_type = get_args(stripped_type)[1] + return {key: _transform_recursive(value, annotation=items_type) for key, value in data.items()} + + if ( + # List[T] + (is_list_type(stripped_type) and is_list(data)) + # Iterable[T] + or (is_iterable_type(stripped_type) and is_iterable(data) and not isinstance(data, str)) + ): + # dicts are technically iterable, but it is an iterable on the keys of the dict and is not usually + # intended as an iterable, so we don't transform it. + if isinstance(data, dict): + return cast(object, data) + + inner_type = extract_type_arg(stripped_type, 0) + if _no_transform_needed(inner_type): + # for some types there is no need to transform anything, so we can get a small + # perf boost from skipping that work. + # + # but we still need to convert to a list to ensure the data is json-serializable + if is_list(data): + return data + return list(data) + + return [await _async_transform_recursive(d, annotation=annotation, inner_type=inner_type) for d in data] + + if is_union_type(stripped_type): + # For union types we run the transformation against all subtypes to ensure that everything is transformed. + # + # TODO: there may be edge cases where the same normalized field name will transform to two different names + # in different subtypes. + for subtype in get_args(stripped_type): + data = await _async_transform_recursive(data, annotation=annotation, inner_type=subtype) + return data + + if isinstance(data, pydantic.BaseModel): + return model_dump(data, exclude_unset=True, mode="json") + + annotated_type = _get_annotated_type(annotation) + if annotated_type is None: + return data + + # ignore the first argument as it is the actual type + annotations = get_args(annotated_type)[1:] + for annotation in annotations: + if isinstance(annotation, PropertyInfo) and annotation.format is not None: + return await _async_format_data(data, annotation.format, annotation.format_template) + + return data + + +async def _async_format_data(data: object, format_: PropertyFormat, format_template: str | None) -> object: + if isinstance(data, (date, datetime)): + if format_ == "iso8601": + return data.isoformat() + + if format_ == "custom" and format_template is not None: + return data.strftime(format_template) + + if format_ == "base64" and is_base64_file_input(data): + binary: str | bytes | None = None + + if isinstance(data, pathlib.Path): + binary = await anyio.Path(data).read_bytes() + elif isinstance(data, io.IOBase): + binary = data.read() + + if isinstance(binary, str): # type: ignore[unreachable] + binary = binary.encode() + + if not isinstance(binary, bytes): + raise RuntimeError(f"Could not read bytes from {data}; Received {type(binary)}") + + return base64.b64encode(binary).decode("ascii") + + return data + + +async def _async_transform_typeddict( + data: Mapping[str, object], + expected_type: type, +) -> Mapping[str, object]: + result: dict[str, object] = {} + annotations = get_type_hints(expected_type, include_extras=True) + for key, value in data.items(): + if not is_given(value): + # we don't need to include `NotGiven` values here as they'll + # be stripped out before the request is sent anyway + continue + + type_ = annotations.get(key) + if type_ is None: + # we do not have a type annotation for this field, leave it as is + result[key] = value + else: + result[_maybe_transform_key(key, type_)] = await _async_transform_recursive(value, annotation=type_) + return result + + +@lru_cache(maxsize=8096) +def get_type_hints( + obj: Any, + globalns: dict[str, Any] | None = None, + localns: Mapping[str, Any] | None = None, + include_extras: bool = False, +) -> dict[str, Any]: + return _get_type_hints(obj, globalns=globalns, localns=localns, include_extras=include_extras) diff --git a/src/ydc_search_api/_utils/_typing.py b/src/ydc_search_api/_utils/_typing.py new file mode 100644 index 0000000..1bac954 --- /dev/null +++ b/src/ydc_search_api/_utils/_typing.py @@ -0,0 +1,151 @@ +from __future__ import annotations + +import sys +import typing +import typing_extensions +from typing import Any, TypeVar, Iterable, cast +from collections import abc as _c_abc +from typing_extensions import ( + TypeIs, + Required, + Annotated, + get_args, + get_origin, +) + +from ._utils import lru_cache +from .._types import InheritsGeneric +from .._compat import is_union as _is_union + + +def is_annotated_type(typ: type) -> bool: + return get_origin(typ) == Annotated + + +def is_list_type(typ: type) -> bool: + return (get_origin(typ) or typ) == list + + +def is_iterable_type(typ: type) -> bool: + """If the given type is `typing.Iterable[T]`""" + origin = get_origin(typ) or typ + return origin == Iterable or origin == _c_abc.Iterable + + +def is_union_type(typ: type) -> bool: + return _is_union(get_origin(typ)) + + +def is_required_type(typ: type) -> bool: + return get_origin(typ) == Required + + +def is_typevar(typ: type) -> bool: + # type ignore is required because type checkers + # think this expression will always return False + return type(typ) == TypeVar # type: ignore + + +_TYPE_ALIAS_TYPES: tuple[type[typing_extensions.TypeAliasType], ...] = (typing_extensions.TypeAliasType,) +if sys.version_info >= (3, 12): + _TYPE_ALIAS_TYPES = (*_TYPE_ALIAS_TYPES, typing.TypeAliasType) + + +def is_type_alias_type(tp: Any, /) -> TypeIs[typing_extensions.TypeAliasType]: + """Return whether the provided argument is an instance of `TypeAliasType`. + + ```python + type Int = int + is_type_alias_type(Int) + # > True + Str = TypeAliasType("Str", str) + is_type_alias_type(Str) + # > True + ``` + """ + return isinstance(tp, _TYPE_ALIAS_TYPES) + + +# Extracts T from Annotated[T, ...] or from Required[Annotated[T, ...]] +@lru_cache(maxsize=8096) +def strip_annotated_type(typ: type) -> type: + if is_required_type(typ) or is_annotated_type(typ): + return strip_annotated_type(cast(type, get_args(typ)[0])) + + return typ + + +def extract_type_arg(typ: type, index: int) -> type: + args = get_args(typ) + try: + return cast(type, args[index]) + except IndexError as err: + raise RuntimeError(f"Expected type {typ} to have a type argument at index {index} but it did not") from err + + +def extract_type_var_from_base( + typ: type, + *, + generic_bases: tuple[type, ...], + index: int, + failure_message: str | None = None, +) -> type: + """Given a type like `Foo[T]`, returns the generic type variable `T`. + + This also handles the case where a concrete subclass is given, e.g. + ```py + class MyResponse(Foo[bytes]): + ... + + extract_type_var(MyResponse, bases=(Foo,), index=0) -> bytes + ``` + + And where a generic subclass is given: + ```py + _T = TypeVar('_T') + class MyResponse(Foo[_T]): + ... + + extract_type_var(MyResponse[bytes], bases=(Foo,), index=0) -> bytes + ``` + """ + cls = cast(object, get_origin(typ) or typ) + if cls in generic_bases: # pyright: ignore[reportUnnecessaryContains] + # we're given the class directly + return extract_type_arg(typ, index) + + # if a subclass is given + # --- + # this is needed as __orig_bases__ is not present in the typeshed stubs + # because it is intended to be for internal use only, however there does + # not seem to be a way to resolve generic TypeVars for inherited subclasses + # without using it. + if isinstance(cls, InheritsGeneric): + target_base_class: Any | None = None + for base in cls.__orig_bases__: + if base.__origin__ in generic_bases: + target_base_class = base + break + + if target_base_class is None: + raise RuntimeError( + "Could not find the generic base class;\n" + "This should never happen;\n" + f"Does {cls} inherit from one of {generic_bases} ?" + ) + + extracted = extract_type_arg(target_base_class, index) + if is_typevar(extracted): + # If the extracted type argument is itself a type variable + # then that means the subclass itself is generic, so we have + # to resolve the type argument from the class itself, not + # the base class. + # + # Note: if there is more than 1 type argument, the subclass could + # change the ordering of the type arguments, this is not currently + # supported. + return extract_type_arg(typ, index) + + return extracted + + raise RuntimeError(failure_message or f"Could not resolve inner type variable at index {index} for {typ}") diff --git a/src/ydc_search_api/_utils/_utils.py b/src/ydc_search_api/_utils/_utils.py new file mode 100644 index 0000000..ea3cf3f --- /dev/null +++ b/src/ydc_search_api/_utils/_utils.py @@ -0,0 +1,422 @@ +from __future__ import annotations + +import os +import re +import inspect +import functools +from typing import ( + Any, + Tuple, + Mapping, + TypeVar, + Callable, + Iterable, + Sequence, + cast, + overload, +) +from pathlib import Path +from datetime import date, datetime +from typing_extensions import TypeGuard + +import sniffio + +from .._types import NotGiven, FileTypes, NotGivenOr, HeadersLike +from .._compat import parse_date as parse_date, parse_datetime as parse_datetime + +_T = TypeVar("_T") +_TupleT = TypeVar("_TupleT", bound=Tuple[object, ...]) +_MappingT = TypeVar("_MappingT", bound=Mapping[str, object]) +_SequenceT = TypeVar("_SequenceT", bound=Sequence[object]) +CallableT = TypeVar("CallableT", bound=Callable[..., Any]) + + +def flatten(t: Iterable[Iterable[_T]]) -> list[_T]: + return [item for sublist in t for item in sublist] + + +def extract_files( + # TODO: this needs to take Dict but variance issues..... + # create protocol type ? + query: Mapping[str, object], + *, + paths: Sequence[Sequence[str]], +) -> list[tuple[str, FileTypes]]: + """Recursively extract files from the given dictionary based on specified paths. + + A path may look like this ['foo', 'files', '', 'data']. + + Note: this mutates the given dictionary. + """ + files: list[tuple[str, FileTypes]] = [] + for path in paths: + files.extend(_extract_items(query, path, index=0, flattened_key=None)) + return files + + +def _extract_items( + obj: object, + path: Sequence[str], + *, + index: int, + flattened_key: str | None, +) -> list[tuple[str, FileTypes]]: + try: + key = path[index] + except IndexError: + if isinstance(obj, NotGiven): + # no value was provided - we can safely ignore + return [] + + # cyclical import + from .._files import assert_is_file_content + + # We have exhausted the path, return the entry we found. + assert flattened_key is not None + + if is_list(obj): + files: list[tuple[str, FileTypes]] = [] + for entry in obj: + assert_is_file_content(entry, key=flattened_key + "[]" if flattened_key else "") + files.append((flattened_key + "[]", cast(FileTypes, entry))) + return files + + assert_is_file_content(obj, key=flattened_key) + return [(flattened_key, cast(FileTypes, obj))] + + index += 1 + if is_dict(obj): + try: + # We are at the last entry in the path so we must remove the field + if (len(path)) == index: + item = obj.pop(key) + else: + item = obj[key] + except KeyError: + # Key was not present in the dictionary, this is not indicative of an error + # as the given path may not point to a required field. We also do not want + # to enforce required fields as the API may differ from the spec in some cases. + return [] + if flattened_key is None: + flattened_key = key + else: + flattened_key += f"[{key}]" + return _extract_items( + item, + path, + index=index, + flattened_key=flattened_key, + ) + elif is_list(obj): + if key != "": + return [] + + return flatten( + [ + _extract_items( + item, + path, + index=index, + flattened_key=flattened_key + "[]" if flattened_key is not None else "[]", + ) + for item in obj + ] + ) + + # Something unexpected was passed, just ignore it. + return [] + + +def is_given(obj: NotGivenOr[_T]) -> TypeGuard[_T]: + return not isinstance(obj, NotGiven) + + +# Type safe methods for narrowing types with TypeVars. +# The default narrowing for isinstance(obj, dict) is dict[unknown, unknown], +# however this cause Pyright to rightfully report errors. As we know we don't +# care about the contained types we can safely use `object` in it's place. +# +# There are two separate functions defined, `is_*` and `is_*_t` for different use cases. +# `is_*` is for when you're dealing with an unknown input +# `is_*_t` is for when you're narrowing a known union type to a specific subset + + +def is_tuple(obj: object) -> TypeGuard[tuple[object, ...]]: + return isinstance(obj, tuple) + + +def is_tuple_t(obj: _TupleT | object) -> TypeGuard[_TupleT]: + return isinstance(obj, tuple) + + +def is_sequence(obj: object) -> TypeGuard[Sequence[object]]: + return isinstance(obj, Sequence) + + +def is_sequence_t(obj: _SequenceT | object) -> TypeGuard[_SequenceT]: + return isinstance(obj, Sequence) + + +def is_mapping(obj: object) -> TypeGuard[Mapping[str, object]]: + return isinstance(obj, Mapping) + + +def is_mapping_t(obj: _MappingT | object) -> TypeGuard[_MappingT]: + return isinstance(obj, Mapping) + + +def is_dict(obj: object) -> TypeGuard[dict[object, object]]: + return isinstance(obj, dict) + + +def is_list(obj: object) -> TypeGuard[list[object]]: + return isinstance(obj, list) + + +def is_iterable(obj: object) -> TypeGuard[Iterable[object]]: + return isinstance(obj, Iterable) + + +def deepcopy_minimal(item: _T) -> _T: + """Minimal reimplementation of copy.deepcopy() that will only copy certain object types: + + - mappings, e.g. `dict` + - list + + This is done for performance reasons. + """ + if is_mapping(item): + return cast(_T, {k: deepcopy_minimal(v) for k, v in item.items()}) + if is_list(item): + return cast(_T, [deepcopy_minimal(entry) for entry in item]) + return item + + +# copied from https://github.com/Rapptz/RoboDanny +def human_join(seq: Sequence[str], *, delim: str = ", ", final: str = "or") -> str: + size = len(seq) + if size == 0: + return "" + + if size == 1: + return seq[0] + + if size == 2: + return f"{seq[0]} {final} {seq[1]}" + + return delim.join(seq[:-1]) + f" {final} {seq[-1]}" + + +def quote(string: str) -> str: + """Add single quotation marks around the given string. Does *not* do any escaping.""" + return f"'{string}'" + + +def required_args(*variants: Sequence[str]) -> Callable[[CallableT], CallableT]: + """Decorator to enforce a given set of arguments or variants of arguments are passed to the decorated function. + + Useful for enforcing runtime validation of overloaded functions. + + Example usage: + ```py + @overload + def foo(*, a: str) -> str: ... + + + @overload + def foo(*, b: bool) -> str: ... + + + # This enforces the same constraints that a static type checker would + # i.e. that either a or b must be passed to the function + @required_args(["a"], ["b"]) + def foo(*, a: str | None = None, b: bool | None = None) -> str: ... + ``` + """ + + def inner(func: CallableT) -> CallableT: + params = inspect.signature(func).parameters + positional = [ + name + for name, param in params.items() + if param.kind + in { + param.POSITIONAL_ONLY, + param.POSITIONAL_OR_KEYWORD, + } + ] + + @functools.wraps(func) + def wrapper(*args: object, **kwargs: object) -> object: + given_params: set[str] = set() + for i, _ in enumerate(args): + try: + given_params.add(positional[i]) + except IndexError: + raise TypeError( + f"{func.__name__}() takes {len(positional)} argument(s) but {len(args)} were given" + ) from None + + for key in kwargs.keys(): + given_params.add(key) + + for variant in variants: + matches = all((param in given_params for param in variant)) + if matches: + break + else: # no break + if len(variants) > 1: + variations = human_join( + ["(" + human_join([quote(arg) for arg in variant], final="and") + ")" for variant in variants] + ) + msg = f"Missing required arguments; Expected either {variations} arguments to be given" + else: + assert len(variants) > 0 + + # TODO: this error message is not deterministic + missing = list(set(variants[0]) - given_params) + if len(missing) > 1: + msg = f"Missing required arguments: {human_join([quote(arg) for arg in missing])}" + else: + msg = f"Missing required argument: {quote(missing[0])}" + raise TypeError(msg) + return func(*args, **kwargs) + + return wrapper # type: ignore + + return inner + + +_K = TypeVar("_K") +_V = TypeVar("_V") + + +@overload +def strip_not_given(obj: None) -> None: ... + + +@overload +def strip_not_given(obj: Mapping[_K, _V | NotGiven]) -> dict[_K, _V]: ... + + +@overload +def strip_not_given(obj: object) -> object: ... + + +def strip_not_given(obj: object | None) -> object: + """Remove all top-level keys where their values are instances of `NotGiven`""" + if obj is None: + return None + + if not is_mapping(obj): + return obj + + return {key: value for key, value in obj.items() if not isinstance(value, NotGiven)} + + +def coerce_integer(val: str) -> int: + return int(val, base=10) + + +def coerce_float(val: str) -> float: + return float(val) + + +def coerce_boolean(val: str) -> bool: + return val == "true" or val == "1" or val == "on" + + +def maybe_coerce_integer(val: str | None) -> int | None: + if val is None: + return None + return coerce_integer(val) + + +def maybe_coerce_float(val: str | None) -> float | None: + if val is None: + return None + return coerce_float(val) + + +def maybe_coerce_boolean(val: str | None) -> bool | None: + if val is None: + return None + return coerce_boolean(val) + + +def removeprefix(string: str, prefix: str) -> str: + """Remove a prefix from a string. + + Backport of `str.removeprefix` for Python < 3.9 + """ + if string.startswith(prefix): + return string[len(prefix) :] + return string + + +def removesuffix(string: str, suffix: str) -> str: + """Remove a suffix from a string. + + Backport of `str.removesuffix` for Python < 3.9 + """ + if string.endswith(suffix): + return string[: -len(suffix)] + return string + + +def file_from_path(path: str) -> FileTypes: + contents = Path(path).read_bytes() + file_name = os.path.basename(path) + return (file_name, contents) + + +def get_required_header(headers: HeadersLike, header: str) -> str: + lower_header = header.lower() + if is_mapping_t(headers): + # mypy doesn't understand the type narrowing here + for k, v in headers.items(): # type: ignore + if k.lower() == lower_header and isinstance(v, str): + return v + + # to deal with the case where the header looks like Stainless-Event-Id + intercaps_header = re.sub(r"([^\w])(\w)", lambda pat: pat.group(1) + pat.group(2).upper(), header.capitalize()) + + for normalized_header in [header, lower_header, header.upper(), intercaps_header]: + value = headers.get(normalized_header) + if value: + return value + + raise ValueError(f"Could not find {header} header") + + +def get_async_library() -> str: + try: + return sniffio.current_async_library() + except Exception: + return "false" + + +def lru_cache(*, maxsize: int | None = 128) -> Callable[[CallableT], CallableT]: + """A version of functools.lru_cache that retains the type signature + for the wrapped function arguments. + """ + wrapper = functools.lru_cache( # noqa: TID251 + maxsize=maxsize, + ) + return cast(Any, wrapper) # type: ignore[no-any-return] + + +def json_safe(data: object) -> object: + """Translates a mapping / sequence recursively in the same fashion + as `pydantic` v2's `model_dump(mode="json")`. + """ + if is_mapping(data): + return {json_safe(key): json_safe(value) for key, value in data.items()} + + if is_iterable(data) and not isinstance(data, (str, bytes, bytearray)): + return [json_safe(item) for item in data] + + if isinstance(data, (datetime, date)): + return data.isoformat() + + return data diff --git a/src/ydc_search_api/_version.py b/src/ydc_search_api/_version.py new file mode 100644 index 0000000..79d3dab --- /dev/null +++ b/src/ydc_search_api/_version.py @@ -0,0 +1,4 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +__title__ = "ydc_search_api" +__version__ = "0.0.1-alpha.0" diff --git a/src/ydc_search_api/lib/.keep b/src/ydc_search_api/lib/.keep new file mode 100644 index 0000000..5e2c99f --- /dev/null +++ b/src/ydc_search_api/lib/.keep @@ -0,0 +1,4 @@ +File generated from our OpenAPI spec by Stainless. + +This directory can be used to store custom files to expand the SDK. +It is ignored by Stainless code generation and its content (other than this keep file) won't be touched. \ No newline at end of file diff --git a/image.png b/src/ydc_search_api/py.typed old mode 100755 new mode 100644 similarity index 100% rename from image.png rename to src/ydc_search_api/py.typed diff --git a/src/ydc_search_api/resources/__init__.py b/src/ydc_search_api/resources/__init__.py new file mode 100644 index 0000000..b62a09e --- /dev/null +++ b/src/ydc_search_api/resources/__init__.py @@ -0,0 +1,33 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from .news import ( + NewsResource, + AsyncNewsResource, + NewsResourceWithRawResponse, + AsyncNewsResourceWithRawResponse, + NewsResourceWithStreamingResponse, + AsyncNewsResourceWithStreamingResponse, +) +from .search import ( + SearchResource, + AsyncSearchResource, + SearchResourceWithRawResponse, + AsyncSearchResourceWithRawResponse, + SearchResourceWithStreamingResponse, + AsyncSearchResourceWithStreamingResponse, +) + +__all__ = [ + "SearchResource", + "AsyncSearchResource", + "SearchResourceWithRawResponse", + "AsyncSearchResourceWithRawResponse", + "SearchResourceWithStreamingResponse", + "AsyncSearchResourceWithStreamingResponse", + "NewsResource", + "AsyncNewsResource", + "NewsResourceWithRawResponse", + "AsyncNewsResourceWithRawResponse", + "NewsResourceWithStreamingResponse", + "AsyncNewsResourceWithStreamingResponse", +] diff --git a/src/ydc_search_api/resources/news.py b/src/ydc_search_api/resources/news.py new file mode 100644 index 0000000..ca9c651 --- /dev/null +++ b/src/ydc_search_api/resources/news.py @@ -0,0 +1,265 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal + +import httpx + +from ..types import news_list_params +from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven +from .._utils import maybe_transform, async_maybe_transform +from .._compat import cached_property +from .._resource import SyncAPIResource, AsyncAPIResource +from .._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from .._base_client import make_request_options +from ..types.news_list_response import NewsListResponse + +__all__ = ["NewsResource", "AsyncNewsResource"] + + +class NewsResource(SyncAPIResource): + @cached_property + def with_raw_response(self) -> NewsResourceWithRawResponse: + """ + This property can be used as a prefix for any HTTP method call to return + the raw response object instead of the parsed content. + + For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#accessing-raw-response-data-eg-headers + """ + return NewsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> NewsResourceWithStreamingResponse: + """ + An alternative to `.with_raw_response` that doesn't eagerly read the response body. + + For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#with_streaming_response + """ + return NewsResourceWithStreamingResponse(self) + + def list( + self, + *, + query: str, + count: int | NotGiven = NOT_GIVEN, + country: str | NotGiven = NOT_GIVEN, + offset: int | NotGiven = NOT_GIVEN, + recency: Literal["day", "week", "month", "year"] | NotGiven = NOT_GIVEN, + safesearch: str | NotGiven = NOT_GIVEN, + search_lang: str | NotGiven = NOT_GIVEN, + spellcheck: bool | NotGiven = NOT_GIVEN, + ui_lang: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> NewsListResponse: + """ + Returns a list of news hits for query + + Args: + query: Search query used to retrieve relevant results from index + + count: Specifies the maximum number of web results to return. Range + `1 ≀ num_web_results ≀ 20`. + + country: Country Code, one of + `['AR', 'AU', 'AT', 'BE', 'BR', 'CA', 'CL', 'DK', 'FI', 'FR', 'DE', 'HK', 'IN', 'ID', 'IT', 'JP', 'KR', 'MY', 'MX', 'NL', 'NZ', 'NO', 'CN', 'PL', 'PT', 'PH', 'RU', 'SA', 'ZA', 'ES', 'SE', 'CH', 'TW', 'TR', 'GB', 'US']`. + + offset: Indicates the `offset` for pagination. The `offset` is calculated in multiples + of `num_web_results`. For example, if `num_web_results = 5` and `offset = 1`, + results 5–10 will be returned. Range `0 ≀ offset ≀ 9`. + + recency: Specify the desired recency for the requested articles. + + safesearch: Configures the safesearch filter for content moderation. `off` - no filtering + applied.`moderate` - moderate content filtering (default). `strict` - strict + content filtering. + + search_lang: Language codes, one of + `['ar', 'eu', 'bn', 'bg', 'ca', 'Simplified', 'Traditional', 'hr', 'cs', 'da', 'nl', 'en', 'United', 'et', 'fi', 'fr', 'gl', 'de', 'gu', 'he', 'hi', 'hu', 'is', 'it', 'jp', 'kn', 'ko', 'lv', 'lt', 'ms', 'ml', 'mr', 'BokmΓ₯l', 'pl', 'Brazil', 'Portugal', 'pa', 'ro', 'ru', 'Cyrylic', 'sk', 'sl', 'es', 'sv', 'ta', 'te', 'th', 'tr', 'uk', 'vi']`. + + spellcheck: Determine whether the `query` requires spell-checking. default is `true`. + + ui_lang: User interface language for the response, one of + `['es-AR', 'en-AU', 'de-AT', 'nl-BE', 'fr-BE', 'pt-BR', 'en-CA', 'fr-CA', 'es-CL', 'da-DK', 'fi-FI', 'fr-FR', 'de-DE', 'SAR', 'en-IN', 'en-ID', 'it-IT', 'ja-JP', 'ko-KR', 'en-MY', 'es-MX', 'nl-NL', 'English', 'no-NO', 'of', 'pl-PL', 'the', 'ru-RU', 'English', 'es-ES', 'sv-SE', 'fr-CH', 'de-CH', 'Chinese', 'tr-TR', 'English', 'English', 'Spanish']`. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return self._get( + "/news", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "query": query, + "count": count, + "country": country, + "offset": offset, + "recency": recency, + "safesearch": safesearch, + "search_lang": search_lang, + "spellcheck": spellcheck, + "ui_lang": ui_lang, + }, + news_list_params.NewsListParams, + ), + ), + cast_to=NewsListResponse, + ) + + +class AsyncNewsResource(AsyncAPIResource): + @cached_property + def with_raw_response(self) -> AsyncNewsResourceWithRawResponse: + """ + This property can be used as a prefix for any HTTP method call to return + the raw response object instead of the parsed content. + + For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#accessing-raw-response-data-eg-headers + """ + return AsyncNewsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncNewsResourceWithStreamingResponse: + """ + An alternative to `.with_raw_response` that doesn't eagerly read the response body. + + For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#with_streaming_response + """ + return AsyncNewsResourceWithStreamingResponse(self) + + async def list( + self, + *, + query: str, + count: int | NotGiven = NOT_GIVEN, + country: str | NotGiven = NOT_GIVEN, + offset: int | NotGiven = NOT_GIVEN, + recency: Literal["day", "week", "month", "year"] | NotGiven = NOT_GIVEN, + safesearch: str | NotGiven = NOT_GIVEN, + search_lang: str | NotGiven = NOT_GIVEN, + spellcheck: bool | NotGiven = NOT_GIVEN, + ui_lang: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> NewsListResponse: + """ + Returns a list of news hits for query + + Args: + query: Search query used to retrieve relevant results from index + + count: Specifies the maximum number of web results to return. Range + `1 ≀ num_web_results ≀ 20`. + + country: Country Code, one of + `['AR', 'AU', 'AT', 'BE', 'BR', 'CA', 'CL', 'DK', 'FI', 'FR', 'DE', 'HK', 'IN', 'ID', 'IT', 'JP', 'KR', 'MY', 'MX', 'NL', 'NZ', 'NO', 'CN', 'PL', 'PT', 'PH', 'RU', 'SA', 'ZA', 'ES', 'SE', 'CH', 'TW', 'TR', 'GB', 'US']`. + + offset: Indicates the `offset` for pagination. The `offset` is calculated in multiples + of `num_web_results`. For example, if `num_web_results = 5` and `offset = 1`, + results 5–10 will be returned. Range `0 ≀ offset ≀ 9`. + + recency: Specify the desired recency for the requested articles. + + safesearch: Configures the safesearch filter for content moderation. `off` - no filtering + applied.`moderate` - moderate content filtering (default). `strict` - strict + content filtering. + + search_lang: Language codes, one of + `['ar', 'eu', 'bn', 'bg', 'ca', 'Simplified', 'Traditional', 'hr', 'cs', 'da', 'nl', 'en', 'United', 'et', 'fi', 'fr', 'gl', 'de', 'gu', 'he', 'hi', 'hu', 'is', 'it', 'jp', 'kn', 'ko', 'lv', 'lt', 'ms', 'ml', 'mr', 'BokmΓ₯l', 'pl', 'Brazil', 'Portugal', 'pa', 'ro', 'ru', 'Cyrylic', 'sk', 'sl', 'es', 'sv', 'ta', 'te', 'th', 'tr', 'uk', 'vi']`. + + spellcheck: Determine whether the `query` requires spell-checking. default is `true`. + + ui_lang: User interface language for the response, one of + `['es-AR', 'en-AU', 'de-AT', 'nl-BE', 'fr-BE', 'pt-BR', 'en-CA', 'fr-CA', 'es-CL', 'da-DK', 'fi-FI', 'fr-FR', 'de-DE', 'SAR', 'en-IN', 'en-ID', 'it-IT', 'ja-JP', 'ko-KR', 'en-MY', 'es-MX', 'nl-NL', 'English', 'no-NO', 'of', 'pl-PL', 'the', 'ru-RU', 'English', 'es-ES', 'sv-SE', 'fr-CH', 'de-CH', 'Chinese', 'tr-TR', 'English', 'English', 'Spanish']`. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return await self._get( + "/news", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "query": query, + "count": count, + "country": country, + "offset": offset, + "recency": recency, + "safesearch": safesearch, + "search_lang": search_lang, + "spellcheck": spellcheck, + "ui_lang": ui_lang, + }, + news_list_params.NewsListParams, + ), + ), + cast_to=NewsListResponse, + ) + + +class NewsResourceWithRawResponse: + def __init__(self, news: NewsResource) -> None: + self._news = news + + self.list = to_raw_response_wrapper( + news.list, + ) + + +class AsyncNewsResourceWithRawResponse: + def __init__(self, news: AsyncNewsResource) -> None: + self._news = news + + self.list = async_to_raw_response_wrapper( + news.list, + ) + + +class NewsResourceWithStreamingResponse: + def __init__(self, news: NewsResource) -> None: + self._news = news + + self.list = to_streamed_response_wrapper( + news.list, + ) + + +class AsyncNewsResourceWithStreamingResponse: + def __init__(self, news: AsyncNewsResource) -> None: + self._news = news + + self.list = async_to_streamed_response_wrapper( + news.list, + ) diff --git a/src/ydc_search_api/resources/search.py b/src/ydc_search_api/resources/search.py new file mode 100644 index 0000000..3660526 --- /dev/null +++ b/src/ydc_search_api/resources/search.py @@ -0,0 +1,239 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal + +import httpx + +from ..types import search_query_params +from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven +from .._utils import maybe_transform, async_maybe_transform +from .._compat import cached_property +from .._resource import SyncAPIResource, AsyncAPIResource +from .._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from .._base_client import make_request_options +from ..types.search_query_response import SearchQueryResponse + +__all__ = ["SearchResource", "AsyncSearchResource"] + + +class SearchResource(SyncAPIResource): + @cached_property + def with_raw_response(self) -> SearchResourceWithRawResponse: + """ + This property can be used as a prefix for any HTTP method call to return + the raw response object instead of the parsed content. + + For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#accessing-raw-response-data-eg-headers + """ + return SearchResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> SearchResourceWithStreamingResponse: + """ + An alternative to `.with_raw_response` that doesn't eagerly read the response body. + + For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#with_streaming_response + """ + return SearchResourceWithStreamingResponse(self) + + def query( + self, + *, + query: str, + country: str | NotGiven = NOT_GIVEN, + freshness: Literal["day", "week", "month", "year"] | NotGiven = NOT_GIVEN, + num_web_results: int | NotGiven = NOT_GIVEN, + offset: int | NotGiven = NOT_GIVEN, + safesearch: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> SearchQueryResponse: + """ + Returns a list of search index hits from query + + Args: + query: Search query used to retrieve relevant results from index. You may also include + [search operators](#search-operators) to refine your search. + + country: Country Code, one of + `['AR', 'AU', 'AT', 'BE', 'BR', 'CA', 'CL', 'DK', 'FI', 'FR', 'DE', 'HK', 'IN', 'ID', 'IT', 'JP', 'KR', 'MY', 'MX', 'NL', 'NZ', 'NO', 'CN', 'PL', 'PT', 'PH', 'RU', 'SA', 'ZA', 'ES', 'SE', 'CH', 'TW', 'TR', 'GB', 'US']`. + + freshness: Specifies the freshness of the results to return. + + num_web_results: Specifies the maximum number of web results to return. Range + `1 ≀ num_web_results ≀ 20`. + + offset: Indicates the `offset` for pagination. The `offset` is calculated in multiples + of `num_web_results`. For example, if `num_web_results = 5` and `offset = 1`, + results 5–10 will be returned. Range `0 ≀ offset ≀ 9`. + + safesearch: Configures the safesearch filter for content moderation. `off` - no filtering + applied.`moderate` - moderate content filtering (default). `strict` - strict + content filtering. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return self._get( + "/search", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "query": query, + "country": country, + "freshness": freshness, + "num_web_results": num_web_results, + "offset": offset, + "safesearch": safesearch, + }, + search_query_params.SearchQueryParams, + ), + ), + cast_to=SearchQueryResponse, + ) + + +class AsyncSearchResource(AsyncAPIResource): + @cached_property + def with_raw_response(self) -> AsyncSearchResourceWithRawResponse: + """ + This property can be used as a prefix for any HTTP method call to return + the raw response object instead of the parsed content. + + For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#accessing-raw-response-data-eg-headers + """ + return AsyncSearchResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncSearchResourceWithStreamingResponse: + """ + An alternative to `.with_raw_response` that doesn't eagerly read the response body. + + For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#with_streaming_response + """ + return AsyncSearchResourceWithStreamingResponse(self) + + async def query( + self, + *, + query: str, + country: str | NotGiven = NOT_GIVEN, + freshness: Literal["day", "week", "month", "year"] | NotGiven = NOT_GIVEN, + num_web_results: int | NotGiven = NOT_GIVEN, + offset: int | NotGiven = NOT_GIVEN, + safesearch: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> SearchQueryResponse: + """ + Returns a list of search index hits from query + + Args: + query: Search query used to retrieve relevant results from index. You may also include + [search operators](#search-operators) to refine your search. + + country: Country Code, one of + `['AR', 'AU', 'AT', 'BE', 'BR', 'CA', 'CL', 'DK', 'FI', 'FR', 'DE', 'HK', 'IN', 'ID', 'IT', 'JP', 'KR', 'MY', 'MX', 'NL', 'NZ', 'NO', 'CN', 'PL', 'PT', 'PH', 'RU', 'SA', 'ZA', 'ES', 'SE', 'CH', 'TW', 'TR', 'GB', 'US']`. + + freshness: Specifies the freshness of the results to return. + + num_web_results: Specifies the maximum number of web results to return. Range + `1 ≀ num_web_results ≀ 20`. + + offset: Indicates the `offset` for pagination. The `offset` is calculated in multiples + of `num_web_results`. For example, if `num_web_results = 5` and `offset = 1`, + results 5–10 will be returned. Range `0 ≀ offset ≀ 9`. + + safesearch: Configures the safesearch filter for content moderation. `off` - no filtering + applied.`moderate` - moderate content filtering (default). `strict` - strict + content filtering. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return await self._get( + "/search", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "query": query, + "country": country, + "freshness": freshness, + "num_web_results": num_web_results, + "offset": offset, + "safesearch": safesearch, + }, + search_query_params.SearchQueryParams, + ), + ), + cast_to=SearchQueryResponse, + ) + + +class SearchResourceWithRawResponse: + def __init__(self, search: SearchResource) -> None: + self._search = search + + self.query = to_raw_response_wrapper( + search.query, + ) + + +class AsyncSearchResourceWithRawResponse: + def __init__(self, search: AsyncSearchResource) -> None: + self._search = search + + self.query = async_to_raw_response_wrapper( + search.query, + ) + + +class SearchResourceWithStreamingResponse: + def __init__(self, search: SearchResource) -> None: + self._search = search + + self.query = to_streamed_response_wrapper( + search.query, + ) + + +class AsyncSearchResourceWithStreamingResponse: + def __init__(self, search: AsyncSearchResource) -> None: + self._search = search + + self.query = async_to_streamed_response_wrapper( + search.query, + ) diff --git a/src/ydc_search_api/types/__init__.py b/src/ydc_search_api/types/__init__.py new file mode 100644 index 0000000..0886a9c --- /dev/null +++ b/src/ydc_search_api/types/__init__.py @@ -0,0 +1,8 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from .news_list_params import NewsListParams as NewsListParams +from .news_list_response import NewsListResponse as NewsListResponse +from .search_query_params import SearchQueryParams as SearchQueryParams +from .search_query_response import SearchQueryResponse as SearchQueryResponse diff --git a/src/ydc_search_api/types/news_list_params.py b/src/ydc_search_api/types/news_list_params.py new file mode 100644 index 0000000..b486812 --- /dev/null +++ b/src/ydc_search_api/types/news_list_params.py @@ -0,0 +1,57 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["NewsListParams"] + + +class NewsListParams(TypedDict, total=False): + query: Required[str] + """Search query used to retrieve relevant results from index""" + + count: int + """Specifies the maximum number of web results to return. + + Range `1 ≀ num_web_results ≀ 20`. + """ + + country: str + """ + Country Code, one of + `['AR', 'AU', 'AT', 'BE', 'BR', 'CA', 'CL', 'DK', 'FI', 'FR', 'DE', 'HK', 'IN', 'ID', 'IT', 'JP', 'KR', 'MY', 'MX', 'NL', 'NZ', 'NO', 'CN', 'PL', 'PT', 'PH', 'RU', 'SA', 'ZA', 'ES', 'SE', 'CH', 'TW', 'TR', 'GB', 'US']`. + """ + + offset: int + """Indicates the `offset` for pagination. + + The `offset` is calculated in multiples of `num_web_results`. For example, if + `num_web_results = 5` and `offset = 1`, results 5–10 will be returned. Range + `0 ≀ offset ≀ 9`. + """ + + recency: Literal["day", "week", "month", "year"] + """Specify the desired recency for the requested articles.""" + + safesearch: str + """Configures the safesearch filter for content moderation. + + `off` - no filtering applied.`moderate` - moderate content filtering (default). + `strict` - strict content filtering. + """ + + search_lang: str + """ + Language codes, one of + `['ar', 'eu', 'bn', 'bg', 'ca', 'Simplified', 'Traditional', 'hr', 'cs', 'da', 'nl', 'en', 'United', 'et', 'fi', 'fr', 'gl', 'de', 'gu', 'he', 'hi', 'hu', 'is', 'it', 'jp', 'kn', 'ko', 'lv', 'lt', 'ms', 'ml', 'mr', 'BokmΓ₯l', 'pl', 'Brazil', 'Portugal', 'pa', 'ro', 'ru', 'Cyrylic', 'sk', 'sl', 'es', 'sv', 'ta', 'te', 'th', 'tr', 'uk', 'vi']`. + """ + + spellcheck: bool + """Determine whether the `query` requires spell-checking. default is `true`.""" + + ui_lang: str + """ + User interface language for the response, one of + `['es-AR', 'en-AU', 'de-AT', 'nl-BE', 'fr-BE', 'pt-BR', 'en-CA', 'fr-CA', 'es-CL', 'da-DK', 'fi-FI', 'fr-FR', 'de-DE', 'SAR', 'en-IN', 'en-ID', 'it-IT', 'ja-JP', 'ko-KR', 'en-MY', 'es-MX', 'nl-NL', 'English', 'no-NO', 'of', 'pl-PL', 'the', 'ru-RU', 'English', 'es-ES', 'sv-SE', 'fr-CH', 'de-CH', 'Chinese', 'tr-TR', 'English', 'English', 'Spanish']`. + """ diff --git a/src/ydc_search_api/types/news_list_response.py b/src/ydc_search_api/types/news_list_response.py new file mode 100644 index 0000000..3c270bc --- /dev/null +++ b/src/ydc_search_api/types/news_list_response.py @@ -0,0 +1,51 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Optional + +from .._models import BaseModel + +__all__ = ["NewsListResponse", "News", "NewsResult", "NewsResultMetaURL", "NewsResultThumbnail"] + + +class NewsResultMetaURL(BaseModel): + hostname: Optional[str] = None + + netloc: Optional[str] = None + + path: Optional[str] = None + + scheme: Optional[str] = None + + +class NewsResultThumbnail(BaseModel): + original: Optional[str] = None + + +class NewsResult(BaseModel): + age: Optional[str] = None + + breaking: Optional[bool] = None + + description: Optional[str] = None + + meta_url: Optional[NewsResultMetaURL] = None + + page_age: Optional[str] = None + + page_fetched: Optional[str] = None + + thumbnail: Optional[NewsResultThumbnail] = None + + title: Optional[str] = None + + type: Optional[str] = None + + url: Optional[str] = None + + +class News(BaseModel): + results: Optional[List[NewsResult]] = None + + +class NewsListResponse(BaseModel): + news: Optional[News] = None diff --git a/src/ydc_search_api/types/search_query_params.py b/src/ydc_search_api/types/search_query_params.py new file mode 100644 index 0000000..c74b0e9 --- /dev/null +++ b/src/ydc_search_api/types/search_query_params.py @@ -0,0 +1,46 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["SearchQueryParams"] + + +class SearchQueryParams(TypedDict, total=False): + query: Required[str] + """Search query used to retrieve relevant results from index. + + You may also include [search operators](#search-operators) to refine your + search. + """ + + country: str + """ + Country Code, one of + `['AR', 'AU', 'AT', 'BE', 'BR', 'CA', 'CL', 'DK', 'FI', 'FR', 'DE', 'HK', 'IN', 'ID', 'IT', 'JP', 'KR', 'MY', 'MX', 'NL', 'NZ', 'NO', 'CN', 'PL', 'PT', 'PH', 'RU', 'SA', 'ZA', 'ES', 'SE', 'CH', 'TW', 'TR', 'GB', 'US']`. + """ + + freshness: Literal["day", "week", "month", "year"] + """Specifies the freshness of the results to return.""" + + num_web_results: int + """Specifies the maximum number of web results to return. + + Range `1 ≀ num_web_results ≀ 20`. + """ + + offset: int + """Indicates the `offset` for pagination. + + The `offset` is calculated in multiples of `num_web_results`. For example, if + `num_web_results = 5` and `offset = 1`, results 5–10 will be returned. Range + `0 ≀ offset ≀ 9`. + """ + + safesearch: str + """Configures the safesearch filter for content moderation. + + `off` - no filtering applied.`moderate` - moderate content filtering (default). + `strict` - strict content filtering. + """ diff --git a/src/ydc_search_api/types/search_query_response.py b/src/ydc_search_api/types/search_query_response.py new file mode 100644 index 0000000..929c883 --- /dev/null +++ b/src/ydc_search_api/types/search_query_response.py @@ -0,0 +1,37 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Optional + +from .._models import BaseModel + +__all__ = ["SearchQueryResponse", "Hit"] + + +class Hit(BaseModel): + description: Optional[str] = None + """A brief description of the content of the search result.""" + + favicon_url: Optional[str] = None + """The URL of the favicon of the search result's domain.""" + + snippets: Optional[List[str]] = None + """ + An array of text snippets from the search result, providing a preview of the + content. + """ + + thumbnail_url: Optional[str] = None + """URL of the thumbnail.""" + + title: Optional[str] = None + """The title or name of the search result.""" + + url: Optional[str] = None + """The URL of the specific search result.""" + + +class SearchQueryResponse(BaseModel): + hits: Optional[List[Hit]] = None + + latency: Optional[float] = None + """Indicates the time (in seconds) taken by the API to generate the response.""" diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..fd8019a --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/__init__.py b/tests/api_resources/__init__.py new file mode 100644 index 0000000..fd8019a --- /dev/null +++ b/tests/api_resources/__init__.py @@ -0,0 +1 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. diff --git a/tests/api_resources/test_news.py b/tests/api_resources/test_news.py new file mode 100644 index 0000000..cdf22d0 --- /dev/null +++ b/tests/api_resources/test_news.py @@ -0,0 +1,122 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import os +from typing import Any, cast + +import pytest + +from tests.utils import assert_matches_type +from ydc_search_api import YdcSearchAPI, AsyncYdcSearchAPI +from ydc_search_api.types import NewsListResponse + +base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") + + +class TestNews: + parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) + + @pytest.mark.skip() + @parametrize + def test_method_list(self, client: YdcSearchAPI) -> None: + news = client.news.list( + query="query", + ) + assert_matches_type(NewsListResponse, news, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_method_list_with_all_params(self, client: YdcSearchAPI) -> None: + news = client.news.list( + query="query", + count=0, + country="country", + offset=0, + recency="day", + safesearch="safesearch", + search_lang="search_lang", + spellcheck=True, + ui_lang="ui_lang", + ) + assert_matches_type(NewsListResponse, news, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_raw_response_list(self, client: YdcSearchAPI) -> None: + response = client.news.with_raw_response.list( + query="query", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + news = response.parse() + assert_matches_type(NewsListResponse, news, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_streaming_response_list(self, client: YdcSearchAPI) -> None: + with client.news.with_streaming_response.list( + query="query", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + news = response.parse() + assert_matches_type(NewsListResponse, news, path=["response"]) + + assert cast(Any, response.is_closed) is True + + +class TestAsyncNews: + parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"]) + + @pytest.mark.skip() + @parametrize + async def test_method_list(self, async_client: AsyncYdcSearchAPI) -> None: + news = await async_client.news.list( + query="query", + ) + assert_matches_type(NewsListResponse, news, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_method_list_with_all_params(self, async_client: AsyncYdcSearchAPI) -> None: + news = await async_client.news.list( + query="query", + count=0, + country="country", + offset=0, + recency="day", + safesearch="safesearch", + search_lang="search_lang", + spellcheck=True, + ui_lang="ui_lang", + ) + assert_matches_type(NewsListResponse, news, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_raw_response_list(self, async_client: AsyncYdcSearchAPI) -> None: + response = await async_client.news.with_raw_response.list( + query="query", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + news = await response.parse() + assert_matches_type(NewsListResponse, news, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_streaming_response_list(self, async_client: AsyncYdcSearchAPI) -> None: + async with async_client.news.with_streaming_response.list( + query="query", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + news = await response.parse() + assert_matches_type(NewsListResponse, news, path=["response"]) + + assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/test_search.py b/tests/api_resources/test_search.py new file mode 100644 index 0000000..9708f07 --- /dev/null +++ b/tests/api_resources/test_search.py @@ -0,0 +1,116 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import os +from typing import Any, cast + +import pytest + +from tests.utils import assert_matches_type +from ydc_search_api import YdcSearchAPI, AsyncYdcSearchAPI +from ydc_search_api.types import SearchQueryResponse + +base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") + + +class TestSearch: + parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) + + @pytest.mark.skip() + @parametrize + def test_method_query(self, client: YdcSearchAPI) -> None: + search = client.search.query( + query="query", + ) + assert_matches_type(SearchQueryResponse, search, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_method_query_with_all_params(self, client: YdcSearchAPI) -> None: + search = client.search.query( + query="query", + country="country", + freshness="day", + num_web_results=0, + offset=0, + safesearch="safesearch", + ) + assert_matches_type(SearchQueryResponse, search, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_raw_response_query(self, client: YdcSearchAPI) -> None: + response = client.search.with_raw_response.query( + query="query", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + search = response.parse() + assert_matches_type(SearchQueryResponse, search, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_streaming_response_query(self, client: YdcSearchAPI) -> None: + with client.search.with_streaming_response.query( + query="query", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + search = response.parse() + assert_matches_type(SearchQueryResponse, search, path=["response"]) + + assert cast(Any, response.is_closed) is True + + +class TestAsyncSearch: + parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"]) + + @pytest.mark.skip() + @parametrize + async def test_method_query(self, async_client: AsyncYdcSearchAPI) -> None: + search = await async_client.search.query( + query="query", + ) + assert_matches_type(SearchQueryResponse, search, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_method_query_with_all_params(self, async_client: AsyncYdcSearchAPI) -> None: + search = await async_client.search.query( + query="query", + country="country", + freshness="day", + num_web_results=0, + offset=0, + safesearch="safesearch", + ) + assert_matches_type(SearchQueryResponse, search, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_raw_response_query(self, async_client: AsyncYdcSearchAPI) -> None: + response = await async_client.search.with_raw_response.query( + query="query", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + search = await response.parse() + assert_matches_type(SearchQueryResponse, search, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_streaming_response_query(self, async_client: AsyncYdcSearchAPI) -> None: + async with async_client.search.with_streaming_response.query( + query="query", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + search = await response.parse() + assert_matches_type(SearchQueryResponse, search, path=["response"]) + + assert cast(Any, response.is_closed) is True diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..bb897c6 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +import os +import logging +from typing import TYPE_CHECKING, Iterator, AsyncIterator + +import pytest +from pytest_asyncio import is_async_test + +from ydc_search_api import YdcSearchAPI, AsyncYdcSearchAPI + +if TYPE_CHECKING: + from _pytest.fixtures import FixtureRequest # pyright: ignore[reportPrivateImportUsage] + +pytest.register_assert_rewrite("tests.utils") + +logging.getLogger("ydc_search_api").setLevel(logging.DEBUG) + + +# automatically add `pytest.mark.asyncio()` to all of our async tests +# so we don't have to add that boilerplate everywhere +def pytest_collection_modifyitems(items: list[pytest.Function]) -> None: + pytest_asyncio_tests = (item for item in items if is_async_test(item)) + session_scope_marker = pytest.mark.asyncio(loop_scope="session") + for async_test in pytest_asyncio_tests: + async_test.add_marker(session_scope_marker, append=False) + + +base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") + +api_key = "My API Key" + + +@pytest.fixture(scope="session") +def client(request: FixtureRequest) -> Iterator[YdcSearchAPI]: + strict = getattr(request, "param", True) + if not isinstance(strict, bool): + raise TypeError(f"Unexpected fixture parameter type {type(strict)}, expected {bool}") + + with YdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=strict) as client: + yield client + + +@pytest.fixture(scope="session") +async def async_client(request: FixtureRequest) -> AsyncIterator[AsyncYdcSearchAPI]: + strict = getattr(request, "param", True) + if not isinstance(strict, bool): + raise TypeError(f"Unexpected fixture parameter type {type(strict)}, expected {bool}") + + async with AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=strict) as client: + yield client diff --git a/tests/sample_file.txt b/tests/sample_file.txt new file mode 100644 index 0000000..af5626b --- /dev/null +++ b/tests/sample_file.txt @@ -0,0 +1 @@ +Hello, world! diff --git a/tests/test_client.py b/tests/test_client.py new file mode 100644 index 0000000..dedd5bb --- /dev/null +++ b/tests/test_client.py @@ -0,0 +1,1641 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import gc +import os +import sys +import json +import time +import asyncio +import inspect +import subprocess +import tracemalloc +from typing import Any, Union, cast +from textwrap import dedent +from unittest import mock +from typing_extensions import Literal + +import httpx +import pytest +from respx import MockRouter +from pydantic import ValidationError + +from ydc_search_api import YdcSearchAPI, AsyncYdcSearchAPI, APIResponseValidationError +from ydc_search_api._types import Omit +from ydc_search_api._models import BaseModel, FinalRequestOptions +from ydc_search_api._constants import RAW_RESPONSE_HEADER +from ydc_search_api._exceptions import APIStatusError, APITimeoutError, YdcSearchAPIError, APIResponseValidationError +from ydc_search_api._base_client import ( + DEFAULT_TIMEOUT, + HTTPX_DEFAULT_TIMEOUT, + BaseClient, + make_request_options, +) + +from .utils import update_env + +base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") +api_key = "My API Key" + + +def _get_params(client: BaseClient[Any, Any]) -> dict[str, str]: + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + url = httpx.URL(request.url) + return dict(url.params) + + +def _low_retry_timeout(*_args: Any, **_kwargs: Any) -> float: + return 0.1 + + +def _get_open_connections(client: YdcSearchAPI | AsyncYdcSearchAPI) -> int: + transport = client._client._transport + assert isinstance(transport, httpx.HTTPTransport) or isinstance(transport, httpx.AsyncHTTPTransport) + + pool = transport._pool + return len(pool._requests) + + +class TestYdcSearchAPI: + client = YdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + + @pytest.mark.respx(base_url=base_url) + def test_raw_response(self, respx_mock: MockRouter) -> None: + respx_mock.post("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) + + response = self.client.post("/foo", cast_to=httpx.Response) + assert response.status_code == 200 + assert isinstance(response, httpx.Response) + assert response.json() == {"foo": "bar"} + + @pytest.mark.respx(base_url=base_url) + def test_raw_response_for_binary(self, respx_mock: MockRouter) -> None: + respx_mock.post("/foo").mock( + return_value=httpx.Response(200, headers={"Content-Type": "application/binary"}, content='{"foo": "bar"}') + ) + + response = self.client.post("/foo", cast_to=httpx.Response) + assert response.status_code == 200 + assert isinstance(response, httpx.Response) + assert response.json() == {"foo": "bar"} + + def test_copy(self) -> None: + copied = self.client.copy() + assert id(copied) != id(self.client) + + copied = self.client.copy(api_key="another My API Key") + assert copied.api_key == "another My API Key" + assert self.client.api_key == "My API Key" + + def test_copy_default_options(self) -> None: + # options that have a default are overridden correctly + copied = self.client.copy(max_retries=7) + assert copied.max_retries == 7 + assert self.client.max_retries == 2 + + copied2 = copied.copy(max_retries=6) + assert copied2.max_retries == 6 + assert copied.max_retries == 7 + + # timeout + assert isinstance(self.client.timeout, httpx.Timeout) + copied = self.client.copy(timeout=None) + assert copied.timeout is None + assert isinstance(self.client.timeout, httpx.Timeout) + + def test_copy_default_headers(self) -> None: + client = YdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} + ) + assert client.default_headers["X-Foo"] == "bar" + + # does not override the already given value when not specified + copied = client.copy() + assert copied.default_headers["X-Foo"] == "bar" + + # merges already given headers + copied = client.copy(default_headers={"X-Bar": "stainless"}) + assert copied.default_headers["X-Foo"] == "bar" + assert copied.default_headers["X-Bar"] == "stainless" + + # uses new values for any already given headers + copied = client.copy(default_headers={"X-Foo": "stainless"}) + assert copied.default_headers["X-Foo"] == "stainless" + + # set_default_headers + + # completely overrides already set values + copied = client.copy(set_default_headers={}) + assert copied.default_headers.get("X-Foo") is None + + copied = client.copy(set_default_headers={"X-Bar": "Robert"}) + assert copied.default_headers["X-Bar"] == "Robert" + + with pytest.raises( + ValueError, + match="`default_headers` and `set_default_headers` arguments are mutually exclusive", + ): + client.copy(set_default_headers={}, default_headers={"X-Foo": "Bar"}) + + def test_copy_default_query(self) -> None: + client = YdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"foo": "bar"} + ) + assert _get_params(client)["foo"] == "bar" + + # does not override the already given value when not specified + copied = client.copy() + assert _get_params(copied)["foo"] == "bar" + + # merges already given params + copied = client.copy(default_query={"bar": "stainless"}) + params = _get_params(copied) + assert params["foo"] == "bar" + assert params["bar"] == "stainless" + + # uses new values for any already given headers + copied = client.copy(default_query={"foo": "stainless"}) + assert _get_params(copied)["foo"] == "stainless" + + # set_default_query + + # completely overrides already set values + copied = client.copy(set_default_query={}) + assert _get_params(copied) == {} + + copied = client.copy(set_default_query={"bar": "Robert"}) + assert _get_params(copied)["bar"] == "Robert" + + with pytest.raises( + ValueError, + # TODO: update + match="`default_query` and `set_default_query` arguments are mutually exclusive", + ): + client.copy(set_default_query={}, default_query={"foo": "Bar"}) + + def test_copy_signature(self) -> None: + # ensure the same parameters that can be passed to the client are defined in the `.copy()` method + init_signature = inspect.signature( + # mypy doesn't like that we access the `__init__` property. + self.client.__init__, # type: ignore[misc] + ) + copy_signature = inspect.signature(self.client.copy) + exclude_params = {"transport", "proxies", "_strict_response_validation"} + + for name in init_signature.parameters.keys(): + if name in exclude_params: + continue + + copy_param = copy_signature.parameters.get(name) + assert copy_param is not None, f"copy() signature is missing the {name} param" + + def test_copy_build_request(self) -> None: + options = FinalRequestOptions(method="get", url="/foo") + + def build_request(options: FinalRequestOptions) -> None: + client = self.client.copy() + client._build_request(options) + + # ensure that the machinery is warmed up before tracing starts. + build_request(options) + gc.collect() + + tracemalloc.start(1000) + + snapshot_before = tracemalloc.take_snapshot() + + ITERATIONS = 10 + for _ in range(ITERATIONS): + build_request(options) + + gc.collect() + snapshot_after = tracemalloc.take_snapshot() + + tracemalloc.stop() + + def add_leak(leaks: list[tracemalloc.StatisticDiff], diff: tracemalloc.StatisticDiff) -> None: + if diff.count == 0: + # Avoid false positives by considering only leaks (i.e. allocations that persist). + return + + if diff.count % ITERATIONS != 0: + # Avoid false positives by considering only leaks that appear per iteration. + return + + for frame in diff.traceback: + if any( + frame.filename.endswith(fragment) + for fragment in [ + # to_raw_response_wrapper leaks through the @functools.wraps() decorator. + # + # removing the decorator fixes the leak for reasons we don't understand. + "ydc_search_api/_legacy_response.py", + "ydc_search_api/_response.py", + # pydantic.BaseModel.model_dump || pydantic.BaseModel.dict leak memory for some reason. + "ydc_search_api/_compat.py", + # Standard library leaks we don't care about. + "/logging/__init__.py", + ] + ): + return + + leaks.append(diff) + + leaks: list[tracemalloc.StatisticDiff] = [] + for diff in snapshot_after.compare_to(snapshot_before, "traceback"): + add_leak(leaks, diff) + if leaks: + for leak in leaks: + print("MEMORY LEAK:", leak) + for frame in leak.traceback: + print(frame) + raise AssertionError() + + def test_request_timeout(self) -> None: + request = self.client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == DEFAULT_TIMEOUT + + request = self.client._build_request( + FinalRequestOptions(method="get", url="/foo", timeout=httpx.Timeout(100.0)) + ) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == httpx.Timeout(100.0) + + def test_client_timeout_option(self) -> None: + client = YdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, timeout=httpx.Timeout(0) + ) + + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == httpx.Timeout(0) + + def test_http_client_timeout_option(self) -> None: + # custom timeout given to the httpx client should be used + with httpx.Client(timeout=None) as http_client: + client = YdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) + + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == httpx.Timeout(None) + + # no timeout given to the httpx client should not use the httpx default + with httpx.Client() as http_client: + client = YdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) + + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == DEFAULT_TIMEOUT + + # explicitly passing the default timeout currently results in it being ignored + with httpx.Client(timeout=HTTPX_DEFAULT_TIMEOUT) as http_client: + client = YdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) + + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == DEFAULT_TIMEOUT # our default + + async def test_invalid_http_client(self) -> None: + with pytest.raises(TypeError, match="Invalid `http_client` arg"): + async with httpx.AsyncClient() as http_client: + YdcSearchAPI( + base_url=base_url, + api_key=api_key, + _strict_response_validation=True, + http_client=cast(Any, http_client), + ) + + def test_default_headers_option(self) -> None: + client = YdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} + ) + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + assert request.headers.get("x-foo") == "bar" + assert request.headers.get("x-stainless-lang") == "python" + + client2 = YdcSearchAPI( + base_url=base_url, + api_key=api_key, + _strict_response_validation=True, + default_headers={ + "X-Foo": "stainless", + "X-Stainless-Lang": "my-overriding-header", + }, + ) + request = client2._build_request(FinalRequestOptions(method="get", url="/foo")) + assert request.headers.get("x-foo") == "stainless" + assert request.headers.get("x-stainless-lang") == "my-overriding-header" + + def test_validate_headers(self) -> None: + client = YdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + assert request.headers.get("X-API-Key") == api_key + + with pytest.raises(YdcSearchAPIError): + with update_env(**{"YDC_SEARCH_API_API_KEY": Omit()}): + client2 = YdcSearchAPI(base_url=base_url, api_key=None, _strict_response_validation=True) + _ = client2 + + def test_default_query_option(self) -> None: + client = YdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"query_param": "bar"} + ) + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + url = httpx.URL(request.url) + assert dict(url.params) == {"query_param": "bar"} + + request = client._build_request( + FinalRequestOptions( + method="get", + url="/foo", + params={"foo": "baz", "query_param": "overridden"}, + ) + ) + url = httpx.URL(request.url) + assert dict(url.params) == {"foo": "baz", "query_param": "overridden"} + + def test_request_extra_json(self) -> None: + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + json_data={"foo": "bar"}, + extra_json={"baz": False}, + ), + ) + data = json.loads(request.content.decode("utf-8")) + assert data == {"foo": "bar", "baz": False} + + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + extra_json={"baz": False}, + ), + ) + data = json.loads(request.content.decode("utf-8")) + assert data == {"baz": False} + + # `extra_json` takes priority over `json_data` when keys clash + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + json_data={"foo": "bar", "baz": True}, + extra_json={"baz": None}, + ), + ) + data = json.loads(request.content.decode("utf-8")) + assert data == {"foo": "bar", "baz": None} + + def test_request_extra_headers(self) -> None: + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options(extra_headers={"X-Foo": "Foo"}), + ), + ) + assert request.headers.get("X-Foo") == "Foo" + + # `extra_headers` takes priority over `default_headers` when keys clash + request = self.client.with_options(default_headers={"X-Bar": "true"})._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options( + extra_headers={"X-Bar": "false"}, + ), + ), + ) + assert request.headers.get("X-Bar") == "false" + + def test_request_extra_query(self) -> None: + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options( + extra_query={"my_query_param": "Foo"}, + ), + ), + ) + params = dict(request.url.params) + assert params == {"my_query_param": "Foo"} + + # if both `query` and `extra_query` are given, they are merged + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options( + query={"bar": "1"}, + extra_query={"foo": "2"}, + ), + ), + ) + params = dict(request.url.params) + assert params == {"bar": "1", "foo": "2"} + + # `extra_query` takes priority over `query` when keys clash + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options( + query={"foo": "1"}, + extra_query={"foo": "2"}, + ), + ), + ) + params = dict(request.url.params) + assert params == {"foo": "2"} + + def test_multipart_repeating_array(self, client: YdcSearchAPI) -> None: + request = client._build_request( + FinalRequestOptions.construct( + method="get", + url="/foo", + headers={"Content-Type": "multipart/form-data; boundary=6b7ba517decee4a450543ea6ae821c82"}, + json_data={"array": ["foo", "bar"]}, + files=[("foo.txt", b"hello world")], + ) + ) + + assert request.read().split(b"\r\n") == [ + b"--6b7ba517decee4a450543ea6ae821c82", + b'Content-Disposition: form-data; name="array[]"', + b"", + b"foo", + b"--6b7ba517decee4a450543ea6ae821c82", + b'Content-Disposition: form-data; name="array[]"', + b"", + b"bar", + b"--6b7ba517decee4a450543ea6ae821c82", + b'Content-Disposition: form-data; name="foo.txt"; filename="upload"', + b"Content-Type: application/octet-stream", + b"", + b"hello world", + b"--6b7ba517decee4a450543ea6ae821c82--", + b"", + ] + + @pytest.mark.respx(base_url=base_url) + def test_basic_union_response(self, respx_mock: MockRouter) -> None: + class Model1(BaseModel): + name: str + + class Model2(BaseModel): + foo: str + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) + + response = self.client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) + assert isinstance(response, Model2) + assert response.foo == "bar" + + @pytest.mark.respx(base_url=base_url) + def test_union_response_different_types(self, respx_mock: MockRouter) -> None: + """Union of objects with the same field name using a different type""" + + class Model1(BaseModel): + foo: int + + class Model2(BaseModel): + foo: str + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) + + response = self.client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) + assert isinstance(response, Model2) + assert response.foo == "bar" + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": 1})) + + response = self.client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) + assert isinstance(response, Model1) + assert response.foo == 1 + + @pytest.mark.respx(base_url=base_url) + def test_non_application_json_content_type_for_json_data(self, respx_mock: MockRouter) -> None: + """ + Response that sets Content-Type to something other than application/json but returns json data + """ + + class Model(BaseModel): + foo: int + + respx_mock.get("/foo").mock( + return_value=httpx.Response( + 200, + content=json.dumps({"foo": 2}), + headers={"Content-Type": "application/text"}, + ) + ) + + response = self.client.get("/foo", cast_to=Model) + assert isinstance(response, Model) + assert response.foo == 2 + + def test_base_url_setter(self) -> None: + client = YdcSearchAPI( + base_url="https://example.com/from_init", api_key=api_key, _strict_response_validation=True + ) + assert client.base_url == "https://example.com/from_init/" + + client.base_url = "https://example.com/from_setter" # type: ignore[assignment] + + assert client.base_url == "https://example.com/from_setter/" + + def test_base_url_env(self) -> None: + with update_env(YDC_SEARCH_API_BASE_URL="http://localhost:5000/from/env"): + client = YdcSearchAPI(api_key=api_key, _strict_response_validation=True) + assert client.base_url == "http://localhost:5000/from/env/" + + @pytest.mark.parametrize( + "client", + [ + YdcSearchAPI( + base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True + ), + YdcSearchAPI( + base_url="http://localhost:5000/custom/path/", + api_key=api_key, + _strict_response_validation=True, + http_client=httpx.Client(), + ), + ], + ids=["standard", "custom http client"], + ) + def test_base_url_trailing_slash(self, client: YdcSearchAPI) -> None: + request = client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + json_data={"foo": "bar"}, + ), + ) + assert request.url == "http://localhost:5000/custom/path/foo" + + @pytest.mark.parametrize( + "client", + [ + YdcSearchAPI( + base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True + ), + YdcSearchAPI( + base_url="http://localhost:5000/custom/path/", + api_key=api_key, + _strict_response_validation=True, + http_client=httpx.Client(), + ), + ], + ids=["standard", "custom http client"], + ) + def test_base_url_no_trailing_slash(self, client: YdcSearchAPI) -> None: + request = client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + json_data={"foo": "bar"}, + ), + ) + assert request.url == "http://localhost:5000/custom/path/foo" + + @pytest.mark.parametrize( + "client", + [ + YdcSearchAPI( + base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True + ), + YdcSearchAPI( + base_url="http://localhost:5000/custom/path/", + api_key=api_key, + _strict_response_validation=True, + http_client=httpx.Client(), + ), + ], + ids=["standard", "custom http client"], + ) + def test_absolute_request_url(self, client: YdcSearchAPI) -> None: + request = client._build_request( + FinalRequestOptions( + method="post", + url="https://myapi.com/foo", + json_data={"foo": "bar"}, + ), + ) + assert request.url == "https://myapi.com/foo" + + def test_copied_client_does_not_close_http(self) -> None: + client = YdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + assert not client.is_closed() + + copied = client.copy() + assert copied is not client + + del copied + + assert not client.is_closed() + + def test_client_context_manager(self) -> None: + client = YdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + with client as c2: + assert c2 is client + assert not c2.is_closed() + assert not client.is_closed() + assert client.is_closed() + + @pytest.mark.respx(base_url=base_url) + def test_client_response_validation_error(self, respx_mock: MockRouter) -> None: + class Model(BaseModel): + foo: str + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": {"invalid": True}})) + + with pytest.raises(APIResponseValidationError) as exc: + self.client.get("/foo", cast_to=Model) + + assert isinstance(exc.value.__cause__, ValidationError) + + def test_client_max_retries_validation(self) -> None: + with pytest.raises(TypeError, match=r"max_retries cannot be None"): + YdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, max_retries=cast(Any, None) + ) + + @pytest.mark.respx(base_url=base_url) + def test_received_text_for_expected_json(self, respx_mock: MockRouter) -> None: + class Model(BaseModel): + name: str + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, text="my-custom-format")) + + strict_client = YdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + + with pytest.raises(APIResponseValidationError): + strict_client.get("/foo", cast_to=Model) + + client = YdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=False) + + response = client.get("/foo", cast_to=Model) + assert isinstance(response, str) # type: ignore[unreachable] + + @pytest.mark.parametrize( + "remaining_retries,retry_after,timeout", + [ + [3, "20", 20], + [3, "0", 0.5], + [3, "-10", 0.5], + [3, "60", 60], + [3, "61", 0.5], + [3, "Fri, 29 Sep 2023 16:26:57 GMT", 20], + [3, "Fri, 29 Sep 2023 16:26:37 GMT", 0.5], + [3, "Fri, 29 Sep 2023 16:26:27 GMT", 0.5], + [3, "Fri, 29 Sep 2023 16:27:37 GMT", 60], + [3, "Fri, 29 Sep 2023 16:27:38 GMT", 0.5], + [3, "99999999999999999999999999999999999", 0.5], + [3, "Zun, 29 Sep 2023 16:26:27 GMT", 0.5], + [3, "", 0.5], + [2, "", 0.5 * 2.0], + [1, "", 0.5 * 4.0], + [-1100, "", 8], # test large number potentially overflowing + ], + ) + @mock.patch("time.time", mock.MagicMock(return_value=1696004797)) + def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str, timeout: float) -> None: + client = YdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + + headers = httpx.Headers({"retry-after": retry_after}) + options = FinalRequestOptions(method="get", url="/foo", max_retries=3) + calculated = client._calculate_retry_timeout(remaining_retries, options, headers) + assert calculated == pytest.approx(timeout, 0.5 * 0.875) # pyright: ignore[reportUnknownMemberType] + + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: + respx_mock.get("/search").mock(side_effect=httpx.TimeoutException("Test timeout error")) + + with pytest.raises(APITimeoutError): + self.client.get("/search", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}}) + + assert _get_open_connections(self.client) == 0 + + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: + respx_mock.get("/search").mock(return_value=httpx.Response(500)) + + with pytest.raises(APIStatusError): + self.client.get("/search", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}}) + + assert _get_open_connections(self.client) == 0 + + @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + @pytest.mark.parametrize("failure_mode", ["status", "exception"]) + def test_retries_taken( + self, + client: YdcSearchAPI, + failures_before_success: int, + failure_mode: Literal["status", "exception"], + respx_mock: MockRouter, + ) -> None: + client = client.with_options(max_retries=4) + + nb_retries = 0 + + def retry_handler(_request: httpx.Request) -> httpx.Response: + nonlocal nb_retries + if nb_retries < failures_before_success: + nb_retries += 1 + if failure_mode == "exception": + raise RuntimeError("oops") + return httpx.Response(500) + return httpx.Response(200) + + respx_mock.get("/search").mock(side_effect=retry_handler) + + response = client.search.with_raw_response.query(query="query") + + assert response.retries_taken == failures_before_success + assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success + + @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + def test_omit_retry_count_header( + self, client: YdcSearchAPI, failures_before_success: int, respx_mock: MockRouter + ) -> None: + client = client.with_options(max_retries=4) + + nb_retries = 0 + + def retry_handler(_request: httpx.Request) -> httpx.Response: + nonlocal nb_retries + if nb_retries < failures_before_success: + nb_retries += 1 + return httpx.Response(500) + return httpx.Response(200) + + respx_mock.get("/search").mock(side_effect=retry_handler) + + response = client.search.with_raw_response.query( + query="query", extra_headers={"x-stainless-retry-count": Omit()} + ) + + assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0 + + @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + def test_overwrite_retry_count_header( + self, client: YdcSearchAPI, failures_before_success: int, respx_mock: MockRouter + ) -> None: + client = client.with_options(max_retries=4) + + nb_retries = 0 + + def retry_handler(_request: httpx.Request) -> httpx.Response: + nonlocal nb_retries + if nb_retries < failures_before_success: + nb_retries += 1 + return httpx.Response(500) + return httpx.Response(200) + + respx_mock.get("/search").mock(side_effect=retry_handler) + + response = client.search.with_raw_response.query(query="query", extra_headers={"x-stainless-retry-count": "42"}) + + assert response.http_request.headers.get("x-stainless-retry-count") == "42" + + +class TestAsyncYdcSearchAPI: + client = AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + + @pytest.mark.respx(base_url=base_url) + @pytest.mark.asyncio + async def test_raw_response(self, respx_mock: MockRouter) -> None: + respx_mock.post("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) + + response = await self.client.post("/foo", cast_to=httpx.Response) + assert response.status_code == 200 + assert isinstance(response, httpx.Response) + assert response.json() == {"foo": "bar"} + + @pytest.mark.respx(base_url=base_url) + @pytest.mark.asyncio + async def test_raw_response_for_binary(self, respx_mock: MockRouter) -> None: + respx_mock.post("/foo").mock( + return_value=httpx.Response(200, headers={"Content-Type": "application/binary"}, content='{"foo": "bar"}') + ) + + response = await self.client.post("/foo", cast_to=httpx.Response) + assert response.status_code == 200 + assert isinstance(response, httpx.Response) + assert response.json() == {"foo": "bar"} + + def test_copy(self) -> None: + copied = self.client.copy() + assert id(copied) != id(self.client) + + copied = self.client.copy(api_key="another My API Key") + assert copied.api_key == "another My API Key" + assert self.client.api_key == "My API Key" + + def test_copy_default_options(self) -> None: + # options that have a default are overridden correctly + copied = self.client.copy(max_retries=7) + assert copied.max_retries == 7 + assert self.client.max_retries == 2 + + copied2 = copied.copy(max_retries=6) + assert copied2.max_retries == 6 + assert copied.max_retries == 7 + + # timeout + assert isinstance(self.client.timeout, httpx.Timeout) + copied = self.client.copy(timeout=None) + assert copied.timeout is None + assert isinstance(self.client.timeout, httpx.Timeout) + + def test_copy_default_headers(self) -> None: + client = AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} + ) + assert client.default_headers["X-Foo"] == "bar" + + # does not override the already given value when not specified + copied = client.copy() + assert copied.default_headers["X-Foo"] == "bar" + + # merges already given headers + copied = client.copy(default_headers={"X-Bar": "stainless"}) + assert copied.default_headers["X-Foo"] == "bar" + assert copied.default_headers["X-Bar"] == "stainless" + + # uses new values for any already given headers + copied = client.copy(default_headers={"X-Foo": "stainless"}) + assert copied.default_headers["X-Foo"] == "stainless" + + # set_default_headers + + # completely overrides already set values + copied = client.copy(set_default_headers={}) + assert copied.default_headers.get("X-Foo") is None + + copied = client.copy(set_default_headers={"X-Bar": "Robert"}) + assert copied.default_headers["X-Bar"] == "Robert" + + with pytest.raises( + ValueError, + match="`default_headers` and `set_default_headers` arguments are mutually exclusive", + ): + client.copy(set_default_headers={}, default_headers={"X-Foo": "Bar"}) + + def test_copy_default_query(self) -> None: + client = AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"foo": "bar"} + ) + assert _get_params(client)["foo"] == "bar" + + # does not override the already given value when not specified + copied = client.copy() + assert _get_params(copied)["foo"] == "bar" + + # merges already given params + copied = client.copy(default_query={"bar": "stainless"}) + params = _get_params(copied) + assert params["foo"] == "bar" + assert params["bar"] == "stainless" + + # uses new values for any already given headers + copied = client.copy(default_query={"foo": "stainless"}) + assert _get_params(copied)["foo"] == "stainless" + + # set_default_query + + # completely overrides already set values + copied = client.copy(set_default_query={}) + assert _get_params(copied) == {} + + copied = client.copy(set_default_query={"bar": "Robert"}) + assert _get_params(copied)["bar"] == "Robert" + + with pytest.raises( + ValueError, + # TODO: update + match="`default_query` and `set_default_query` arguments are mutually exclusive", + ): + client.copy(set_default_query={}, default_query={"foo": "Bar"}) + + def test_copy_signature(self) -> None: + # ensure the same parameters that can be passed to the client are defined in the `.copy()` method + init_signature = inspect.signature( + # mypy doesn't like that we access the `__init__` property. + self.client.__init__, # type: ignore[misc] + ) + copy_signature = inspect.signature(self.client.copy) + exclude_params = {"transport", "proxies", "_strict_response_validation"} + + for name in init_signature.parameters.keys(): + if name in exclude_params: + continue + + copy_param = copy_signature.parameters.get(name) + assert copy_param is not None, f"copy() signature is missing the {name} param" + + def test_copy_build_request(self) -> None: + options = FinalRequestOptions(method="get", url="/foo") + + def build_request(options: FinalRequestOptions) -> None: + client = self.client.copy() + client._build_request(options) + + # ensure that the machinery is warmed up before tracing starts. + build_request(options) + gc.collect() + + tracemalloc.start(1000) + + snapshot_before = tracemalloc.take_snapshot() + + ITERATIONS = 10 + for _ in range(ITERATIONS): + build_request(options) + + gc.collect() + snapshot_after = tracemalloc.take_snapshot() + + tracemalloc.stop() + + def add_leak(leaks: list[tracemalloc.StatisticDiff], diff: tracemalloc.StatisticDiff) -> None: + if diff.count == 0: + # Avoid false positives by considering only leaks (i.e. allocations that persist). + return + + if diff.count % ITERATIONS != 0: + # Avoid false positives by considering only leaks that appear per iteration. + return + + for frame in diff.traceback: + if any( + frame.filename.endswith(fragment) + for fragment in [ + # to_raw_response_wrapper leaks through the @functools.wraps() decorator. + # + # removing the decorator fixes the leak for reasons we don't understand. + "ydc_search_api/_legacy_response.py", + "ydc_search_api/_response.py", + # pydantic.BaseModel.model_dump || pydantic.BaseModel.dict leak memory for some reason. + "ydc_search_api/_compat.py", + # Standard library leaks we don't care about. + "/logging/__init__.py", + ] + ): + return + + leaks.append(diff) + + leaks: list[tracemalloc.StatisticDiff] = [] + for diff in snapshot_after.compare_to(snapshot_before, "traceback"): + add_leak(leaks, diff) + if leaks: + for leak in leaks: + print("MEMORY LEAK:", leak) + for frame in leak.traceback: + print(frame) + raise AssertionError() + + async def test_request_timeout(self) -> None: + request = self.client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == DEFAULT_TIMEOUT + + request = self.client._build_request( + FinalRequestOptions(method="get", url="/foo", timeout=httpx.Timeout(100.0)) + ) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == httpx.Timeout(100.0) + + async def test_client_timeout_option(self) -> None: + client = AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, timeout=httpx.Timeout(0) + ) + + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == httpx.Timeout(0) + + async def test_http_client_timeout_option(self) -> None: + # custom timeout given to the httpx client should be used + async with httpx.AsyncClient(timeout=None) as http_client: + client = AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) + + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == httpx.Timeout(None) + + # no timeout given to the httpx client should not use the httpx default + async with httpx.AsyncClient() as http_client: + client = AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) + + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == DEFAULT_TIMEOUT + + # explicitly passing the default timeout currently results in it being ignored + async with httpx.AsyncClient(timeout=HTTPX_DEFAULT_TIMEOUT) as http_client: + client = AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) + + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore + assert timeout == DEFAULT_TIMEOUT # our default + + def test_invalid_http_client(self) -> None: + with pytest.raises(TypeError, match="Invalid `http_client` arg"): + with httpx.Client() as http_client: + AsyncYdcSearchAPI( + base_url=base_url, + api_key=api_key, + _strict_response_validation=True, + http_client=cast(Any, http_client), + ) + + def test_default_headers_option(self) -> None: + client = AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} + ) + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + assert request.headers.get("x-foo") == "bar" + assert request.headers.get("x-stainless-lang") == "python" + + client2 = AsyncYdcSearchAPI( + base_url=base_url, + api_key=api_key, + _strict_response_validation=True, + default_headers={ + "X-Foo": "stainless", + "X-Stainless-Lang": "my-overriding-header", + }, + ) + request = client2._build_request(FinalRequestOptions(method="get", url="/foo")) + assert request.headers.get("x-foo") == "stainless" + assert request.headers.get("x-stainless-lang") == "my-overriding-header" + + def test_validate_headers(self) -> None: + client = AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + assert request.headers.get("X-API-Key") == api_key + + with pytest.raises(YdcSearchAPIError): + with update_env(**{"YDC_SEARCH_API_API_KEY": Omit()}): + client2 = AsyncYdcSearchAPI(base_url=base_url, api_key=None, _strict_response_validation=True) + _ = client2 + + def test_default_query_option(self) -> None: + client = AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"query_param": "bar"} + ) + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + url = httpx.URL(request.url) + assert dict(url.params) == {"query_param": "bar"} + + request = client._build_request( + FinalRequestOptions( + method="get", + url="/foo", + params={"foo": "baz", "query_param": "overridden"}, + ) + ) + url = httpx.URL(request.url) + assert dict(url.params) == {"foo": "baz", "query_param": "overridden"} + + def test_request_extra_json(self) -> None: + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + json_data={"foo": "bar"}, + extra_json={"baz": False}, + ), + ) + data = json.loads(request.content.decode("utf-8")) + assert data == {"foo": "bar", "baz": False} + + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + extra_json={"baz": False}, + ), + ) + data = json.loads(request.content.decode("utf-8")) + assert data == {"baz": False} + + # `extra_json` takes priority over `json_data` when keys clash + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + json_data={"foo": "bar", "baz": True}, + extra_json={"baz": None}, + ), + ) + data = json.loads(request.content.decode("utf-8")) + assert data == {"foo": "bar", "baz": None} + + def test_request_extra_headers(self) -> None: + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options(extra_headers={"X-Foo": "Foo"}), + ), + ) + assert request.headers.get("X-Foo") == "Foo" + + # `extra_headers` takes priority over `default_headers` when keys clash + request = self.client.with_options(default_headers={"X-Bar": "true"})._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options( + extra_headers={"X-Bar": "false"}, + ), + ), + ) + assert request.headers.get("X-Bar") == "false" + + def test_request_extra_query(self) -> None: + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options( + extra_query={"my_query_param": "Foo"}, + ), + ), + ) + params = dict(request.url.params) + assert params == {"my_query_param": "Foo"} + + # if both `query` and `extra_query` are given, they are merged + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options( + query={"bar": "1"}, + extra_query={"foo": "2"}, + ), + ), + ) + params = dict(request.url.params) + assert params == {"bar": "1", "foo": "2"} + + # `extra_query` takes priority over `query` when keys clash + request = self.client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + **make_request_options( + query={"foo": "1"}, + extra_query={"foo": "2"}, + ), + ), + ) + params = dict(request.url.params) + assert params == {"foo": "2"} + + def test_multipart_repeating_array(self, async_client: AsyncYdcSearchAPI) -> None: + request = async_client._build_request( + FinalRequestOptions.construct( + method="get", + url="/foo", + headers={"Content-Type": "multipart/form-data; boundary=6b7ba517decee4a450543ea6ae821c82"}, + json_data={"array": ["foo", "bar"]}, + files=[("foo.txt", b"hello world")], + ) + ) + + assert request.read().split(b"\r\n") == [ + b"--6b7ba517decee4a450543ea6ae821c82", + b'Content-Disposition: form-data; name="array[]"', + b"", + b"foo", + b"--6b7ba517decee4a450543ea6ae821c82", + b'Content-Disposition: form-data; name="array[]"', + b"", + b"bar", + b"--6b7ba517decee4a450543ea6ae821c82", + b'Content-Disposition: form-data; name="foo.txt"; filename="upload"', + b"Content-Type: application/octet-stream", + b"", + b"hello world", + b"--6b7ba517decee4a450543ea6ae821c82--", + b"", + ] + + @pytest.mark.respx(base_url=base_url) + async def test_basic_union_response(self, respx_mock: MockRouter) -> None: + class Model1(BaseModel): + name: str + + class Model2(BaseModel): + foo: str + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) + + response = await self.client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) + assert isinstance(response, Model2) + assert response.foo == "bar" + + @pytest.mark.respx(base_url=base_url) + async def test_union_response_different_types(self, respx_mock: MockRouter) -> None: + """Union of objects with the same field name using a different type""" + + class Model1(BaseModel): + foo: int + + class Model2(BaseModel): + foo: str + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) + + response = await self.client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) + assert isinstance(response, Model2) + assert response.foo == "bar" + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": 1})) + + response = await self.client.get("/foo", cast_to=cast(Any, Union[Model1, Model2])) + assert isinstance(response, Model1) + assert response.foo == 1 + + @pytest.mark.respx(base_url=base_url) + async def test_non_application_json_content_type_for_json_data(self, respx_mock: MockRouter) -> None: + """ + Response that sets Content-Type to something other than application/json but returns json data + """ + + class Model(BaseModel): + foo: int + + respx_mock.get("/foo").mock( + return_value=httpx.Response( + 200, + content=json.dumps({"foo": 2}), + headers={"Content-Type": "application/text"}, + ) + ) + + response = await self.client.get("/foo", cast_to=Model) + assert isinstance(response, Model) + assert response.foo == 2 + + def test_base_url_setter(self) -> None: + client = AsyncYdcSearchAPI( + base_url="https://example.com/from_init", api_key=api_key, _strict_response_validation=True + ) + assert client.base_url == "https://example.com/from_init/" + + client.base_url = "https://example.com/from_setter" # type: ignore[assignment] + + assert client.base_url == "https://example.com/from_setter/" + + def test_base_url_env(self) -> None: + with update_env(YDC_SEARCH_API_BASE_URL="http://localhost:5000/from/env"): + client = AsyncYdcSearchAPI(api_key=api_key, _strict_response_validation=True) + assert client.base_url == "http://localhost:5000/from/env/" + + @pytest.mark.parametrize( + "client", + [ + AsyncYdcSearchAPI( + base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True + ), + AsyncYdcSearchAPI( + base_url="http://localhost:5000/custom/path/", + api_key=api_key, + _strict_response_validation=True, + http_client=httpx.AsyncClient(), + ), + ], + ids=["standard", "custom http client"], + ) + def test_base_url_trailing_slash(self, client: AsyncYdcSearchAPI) -> None: + request = client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + json_data={"foo": "bar"}, + ), + ) + assert request.url == "http://localhost:5000/custom/path/foo" + + @pytest.mark.parametrize( + "client", + [ + AsyncYdcSearchAPI( + base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True + ), + AsyncYdcSearchAPI( + base_url="http://localhost:5000/custom/path/", + api_key=api_key, + _strict_response_validation=True, + http_client=httpx.AsyncClient(), + ), + ], + ids=["standard", "custom http client"], + ) + def test_base_url_no_trailing_slash(self, client: AsyncYdcSearchAPI) -> None: + request = client._build_request( + FinalRequestOptions( + method="post", + url="/foo", + json_data={"foo": "bar"}, + ), + ) + assert request.url == "http://localhost:5000/custom/path/foo" + + @pytest.mark.parametrize( + "client", + [ + AsyncYdcSearchAPI( + base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True + ), + AsyncYdcSearchAPI( + base_url="http://localhost:5000/custom/path/", + api_key=api_key, + _strict_response_validation=True, + http_client=httpx.AsyncClient(), + ), + ], + ids=["standard", "custom http client"], + ) + def test_absolute_request_url(self, client: AsyncYdcSearchAPI) -> None: + request = client._build_request( + FinalRequestOptions( + method="post", + url="https://myapi.com/foo", + json_data={"foo": "bar"}, + ), + ) + assert request.url == "https://myapi.com/foo" + + async def test_copied_client_does_not_close_http(self) -> None: + client = AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + assert not client.is_closed() + + copied = client.copy() + assert copied is not client + + del copied + + await asyncio.sleep(0.2) + assert not client.is_closed() + + async def test_client_context_manager(self) -> None: + client = AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + async with client as c2: + assert c2 is client + assert not c2.is_closed() + assert not client.is_closed() + assert client.is_closed() + + @pytest.mark.respx(base_url=base_url) + @pytest.mark.asyncio + async def test_client_response_validation_error(self, respx_mock: MockRouter) -> None: + class Model(BaseModel): + foo: str + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, json={"foo": {"invalid": True}})) + + with pytest.raises(APIResponseValidationError) as exc: + await self.client.get("/foo", cast_to=Model) + + assert isinstance(exc.value.__cause__, ValidationError) + + async def test_client_max_retries_validation(self) -> None: + with pytest.raises(TypeError, match=r"max_retries cannot be None"): + AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=True, max_retries=cast(Any, None) + ) + + @pytest.mark.respx(base_url=base_url) + @pytest.mark.asyncio + async def test_received_text_for_expected_json(self, respx_mock: MockRouter) -> None: + class Model(BaseModel): + name: str + + respx_mock.get("/foo").mock(return_value=httpx.Response(200, text="my-custom-format")) + + strict_client = AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + + with pytest.raises(APIResponseValidationError): + await strict_client.get("/foo", cast_to=Model) + + client = AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=False) + + response = await client.get("/foo", cast_to=Model) + assert isinstance(response, str) # type: ignore[unreachable] + + @pytest.mark.parametrize( + "remaining_retries,retry_after,timeout", + [ + [3, "20", 20], + [3, "0", 0.5], + [3, "-10", 0.5], + [3, "60", 60], + [3, "61", 0.5], + [3, "Fri, 29 Sep 2023 16:26:57 GMT", 20], + [3, "Fri, 29 Sep 2023 16:26:37 GMT", 0.5], + [3, "Fri, 29 Sep 2023 16:26:27 GMT", 0.5], + [3, "Fri, 29 Sep 2023 16:27:37 GMT", 60], + [3, "Fri, 29 Sep 2023 16:27:38 GMT", 0.5], + [3, "99999999999999999999999999999999999", 0.5], + [3, "Zun, 29 Sep 2023 16:26:27 GMT", 0.5], + [3, "", 0.5], + [2, "", 0.5 * 2.0], + [1, "", 0.5 * 4.0], + [-1100, "", 8], # test large number potentially overflowing + ], + ) + @mock.patch("time.time", mock.MagicMock(return_value=1696004797)) + @pytest.mark.asyncio + async def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str, timeout: float) -> None: + client = AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) + + headers = httpx.Headers({"retry-after": retry_after}) + options = FinalRequestOptions(method="get", url="/foo", max_retries=3) + calculated = client._calculate_retry_timeout(remaining_retries, options, headers) + assert calculated == pytest.approx(timeout, 0.5 * 0.875) # pyright: ignore[reportUnknownMemberType] + + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + async def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: + respx_mock.get("/search").mock(side_effect=httpx.TimeoutException("Test timeout error")) + + with pytest.raises(APITimeoutError): + await self.client.get( + "/search", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}} + ) + + assert _get_open_connections(self.client) == 0 + + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + async def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: + respx_mock.get("/search").mock(return_value=httpx.Response(500)) + + with pytest.raises(APIStatusError): + await self.client.get( + "/search", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}} + ) + + assert _get_open_connections(self.client) == 0 + + @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + @pytest.mark.asyncio + @pytest.mark.parametrize("failure_mode", ["status", "exception"]) + async def test_retries_taken( + self, + async_client: AsyncYdcSearchAPI, + failures_before_success: int, + failure_mode: Literal["status", "exception"], + respx_mock: MockRouter, + ) -> None: + client = async_client.with_options(max_retries=4) + + nb_retries = 0 + + def retry_handler(_request: httpx.Request) -> httpx.Response: + nonlocal nb_retries + if nb_retries < failures_before_success: + nb_retries += 1 + if failure_mode == "exception": + raise RuntimeError("oops") + return httpx.Response(500) + return httpx.Response(200) + + respx_mock.get("/search").mock(side_effect=retry_handler) + + response = await client.search.with_raw_response.query(query="query") + + assert response.retries_taken == failures_before_success + assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success + + @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + @pytest.mark.asyncio + async def test_omit_retry_count_header( + self, async_client: AsyncYdcSearchAPI, failures_before_success: int, respx_mock: MockRouter + ) -> None: + client = async_client.with_options(max_retries=4) + + nb_retries = 0 + + def retry_handler(_request: httpx.Request) -> httpx.Response: + nonlocal nb_retries + if nb_retries < failures_before_success: + nb_retries += 1 + return httpx.Response(500) + return httpx.Response(200) + + respx_mock.get("/search").mock(side_effect=retry_handler) + + response = await client.search.with_raw_response.query( + query="query", extra_headers={"x-stainless-retry-count": Omit()} + ) + + assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0 + + @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) + @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) + @pytest.mark.respx(base_url=base_url) + @pytest.mark.asyncio + async def test_overwrite_retry_count_header( + self, async_client: AsyncYdcSearchAPI, failures_before_success: int, respx_mock: MockRouter + ) -> None: + client = async_client.with_options(max_retries=4) + + nb_retries = 0 + + def retry_handler(_request: httpx.Request) -> httpx.Response: + nonlocal nb_retries + if nb_retries < failures_before_success: + nb_retries += 1 + return httpx.Response(500) + return httpx.Response(200) + + respx_mock.get("/search").mock(side_effect=retry_handler) + + response = await client.search.with_raw_response.query( + query="query", extra_headers={"x-stainless-retry-count": "42"} + ) + + assert response.http_request.headers.get("x-stainless-retry-count") == "42" + + def test_get_platform(self) -> None: + # A previous implementation of asyncify could leave threads unterminated when + # used with nest_asyncio. + # + # Since nest_asyncio.apply() is global and cannot be un-applied, this + # test is run in a separate process to avoid affecting other tests. + test_code = dedent(""" + import asyncio + import nest_asyncio + import threading + + from ydc_search_api._utils import asyncify + from ydc_search_api._base_client import get_platform + + async def test_main() -> None: + result = await asyncify(get_platform)() + print(result) + for thread in threading.enumerate(): + print(thread.name) + + nest_asyncio.apply() + asyncio.run(test_main()) + """) + with subprocess.Popen( + [sys.executable, "-c", test_code], + text=True, + ) as process: + timeout = 10 # seconds + + start_time = time.monotonic() + while True: + return_code = process.poll() + if return_code is not None: + if return_code != 0: + raise AssertionError("calling get_platform using asyncify resulted in a non-zero exit code") + + # success + break + + if time.monotonic() - start_time > timeout: + process.kill() + raise AssertionError("calling get_platform using asyncify resulted in a hung process") + + time.sleep(0.1) diff --git a/tests/test_deepcopy.py b/tests/test_deepcopy.py new file mode 100644 index 0000000..1ab3e27 --- /dev/null +++ b/tests/test_deepcopy.py @@ -0,0 +1,58 @@ +from ydc_search_api._utils import deepcopy_minimal + + +def assert_different_identities(obj1: object, obj2: object) -> None: + assert obj1 == obj2 + assert id(obj1) != id(obj2) + + +def test_simple_dict() -> None: + obj1 = {"foo": "bar"} + obj2 = deepcopy_minimal(obj1) + assert_different_identities(obj1, obj2) + + +def test_nested_dict() -> None: + obj1 = {"foo": {"bar": True}} + obj2 = deepcopy_minimal(obj1) + assert_different_identities(obj1, obj2) + assert_different_identities(obj1["foo"], obj2["foo"]) + + +def test_complex_nested_dict() -> None: + obj1 = {"foo": {"bar": [{"hello": "world"}]}} + obj2 = deepcopy_minimal(obj1) + assert_different_identities(obj1, obj2) + assert_different_identities(obj1["foo"], obj2["foo"]) + assert_different_identities(obj1["foo"]["bar"], obj2["foo"]["bar"]) + assert_different_identities(obj1["foo"]["bar"][0], obj2["foo"]["bar"][0]) + + +def test_simple_list() -> None: + obj1 = ["a", "b", "c"] + obj2 = deepcopy_minimal(obj1) + assert_different_identities(obj1, obj2) + + +def test_nested_list() -> None: + obj1 = ["a", [1, 2, 3]] + obj2 = deepcopy_minimal(obj1) + assert_different_identities(obj1, obj2) + assert_different_identities(obj1[1], obj2[1]) + + +class MyObject: ... + + +def test_ignores_other_types() -> None: + # custom classes + my_obj = MyObject() + obj1 = {"foo": my_obj} + obj2 = deepcopy_minimal(obj1) + assert_different_identities(obj1, obj2) + assert obj1["foo"] is my_obj + + # tuples + obj3 = ("a", "b") + obj4 = deepcopy_minimal(obj3) + assert obj3 is obj4 diff --git a/tests/test_example/test.py b/tests/test_example/test.py deleted file mode 100755 index e69de29..0000000 diff --git a/tests/test_extract_files.py b/tests/test_extract_files.py new file mode 100644 index 0000000..6fd4faa --- /dev/null +++ b/tests/test_extract_files.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from typing import Sequence + +import pytest + +from ydc_search_api._types import FileTypes +from ydc_search_api._utils import extract_files + + +def test_removes_files_from_input() -> None: + query = {"foo": "bar"} + assert extract_files(query, paths=[]) == [] + assert query == {"foo": "bar"} + + query2 = {"foo": b"Bar", "hello": "world"} + assert extract_files(query2, paths=[["foo"]]) == [("foo", b"Bar")] + assert query2 == {"hello": "world"} + + query3 = {"foo": {"foo": {"bar": b"Bar"}}, "hello": "world"} + assert extract_files(query3, paths=[["foo", "foo", "bar"]]) == [("foo[foo][bar]", b"Bar")] + assert query3 == {"foo": {"foo": {}}, "hello": "world"} + + query4 = {"foo": {"bar": b"Bar", "baz": "foo"}, "hello": "world"} + assert extract_files(query4, paths=[["foo", "bar"]]) == [("foo[bar]", b"Bar")] + assert query4 == {"hello": "world", "foo": {"baz": "foo"}} + + +def test_multiple_files() -> None: + query = {"documents": [{"file": b"My first file"}, {"file": b"My second file"}]} + assert extract_files(query, paths=[["documents", "", "file"]]) == [ + ("documents[][file]", b"My first file"), + ("documents[][file]", b"My second file"), + ] + assert query == {"documents": [{}, {}]} + + +@pytest.mark.parametrize( + "query,paths,expected", + [ + [ + {"foo": {"bar": "baz"}}, + [["foo", "", "bar"]], + [], + ], + [ + {"foo": ["bar", "baz"]}, + [["foo", "bar"]], + [], + ], + [ + {"foo": {"bar": "baz"}}, + [["foo", "foo"]], + [], + ], + ], + ids=["dict expecting array", "array expecting dict", "unknown keys"], +) +def test_ignores_incorrect_paths( + query: dict[str, object], + paths: Sequence[Sequence[str]], + expected: list[tuple[str, FileTypes]], +) -> None: + assert extract_files(query, paths=paths) == expected diff --git a/tests/test_files.py b/tests/test_files.py new file mode 100644 index 0000000..ed99536 --- /dev/null +++ b/tests/test_files.py @@ -0,0 +1,51 @@ +from pathlib import Path + +import anyio +import pytest +from dirty_equals import IsDict, IsList, IsBytes, IsTuple + +from ydc_search_api._files import to_httpx_files, async_to_httpx_files + +readme_path = Path(__file__).parent.parent.joinpath("README.md") + + +def test_pathlib_includes_file_name() -> None: + result = to_httpx_files({"file": readme_path}) + print(result) + assert result == IsDict({"file": IsTuple("README.md", IsBytes())}) + + +def test_tuple_input() -> None: + result = to_httpx_files([("file", readme_path)]) + print(result) + assert result == IsList(IsTuple("file", IsTuple("README.md", IsBytes()))) + + +@pytest.mark.asyncio +async def test_async_pathlib_includes_file_name() -> None: + result = await async_to_httpx_files({"file": readme_path}) + print(result) + assert result == IsDict({"file": IsTuple("README.md", IsBytes())}) + + +@pytest.mark.asyncio +async def test_async_supports_anyio_path() -> None: + result = await async_to_httpx_files({"file": anyio.Path(readme_path)}) + print(result) + assert result == IsDict({"file": IsTuple("README.md", IsBytes())}) + + +@pytest.mark.asyncio +async def test_async_tuple_input() -> None: + result = await async_to_httpx_files([("file", readme_path)]) + print(result) + assert result == IsList(IsTuple("file", IsTuple("README.md", IsBytes()))) + + +def test_string_not_allowed() -> None: + with pytest.raises(TypeError, match="Expected file types input to be a FileContent type or to be a tuple"): + to_httpx_files( + { + "file": "foo", # type: ignore + } + ) diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100644 index 0000000..b289dab --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,891 @@ +import json +from typing import Any, Dict, List, Union, Optional, cast +from datetime import datetime, timezone +from typing_extensions import Literal, Annotated, TypeAliasType + +import pytest +import pydantic +from pydantic import Field + +from ydc_search_api._utils import PropertyInfo +from ydc_search_api._compat import PYDANTIC_V2, parse_obj, model_dump, model_json +from ydc_search_api._models import BaseModel, construct_type + + +class BasicModel(BaseModel): + foo: str + + +@pytest.mark.parametrize("value", ["hello", 1], ids=["correct type", "mismatched"]) +def test_basic(value: object) -> None: + m = BasicModel.construct(foo=value) + assert m.foo == value + + +def test_directly_nested_model() -> None: + class NestedModel(BaseModel): + nested: BasicModel + + m = NestedModel.construct(nested={"foo": "Foo!"}) + assert m.nested.foo == "Foo!" + + # mismatched types + m = NestedModel.construct(nested="hello!") + assert cast(Any, m.nested) == "hello!" + + +def test_optional_nested_model() -> None: + class NestedModel(BaseModel): + nested: Optional[BasicModel] + + m1 = NestedModel.construct(nested=None) + assert m1.nested is None + + m2 = NestedModel.construct(nested={"foo": "bar"}) + assert m2.nested is not None + assert m2.nested.foo == "bar" + + # mismatched types + m3 = NestedModel.construct(nested={"foo"}) + assert isinstance(cast(Any, m3.nested), set) + assert cast(Any, m3.nested) == {"foo"} + + +def test_list_nested_model() -> None: + class NestedModel(BaseModel): + nested: List[BasicModel] + + m = NestedModel.construct(nested=[{"foo": "bar"}, {"foo": "2"}]) + assert m.nested is not None + assert isinstance(m.nested, list) + assert len(m.nested) == 2 + assert m.nested[0].foo == "bar" + assert m.nested[1].foo == "2" + + # mismatched types + m = NestedModel.construct(nested=True) + assert cast(Any, m.nested) is True + + m = NestedModel.construct(nested=[False]) + assert cast(Any, m.nested) == [False] + + +def test_optional_list_nested_model() -> None: + class NestedModel(BaseModel): + nested: Optional[List[BasicModel]] + + m1 = NestedModel.construct(nested=[{"foo": "bar"}, {"foo": "2"}]) + assert m1.nested is not None + assert isinstance(m1.nested, list) + assert len(m1.nested) == 2 + assert m1.nested[0].foo == "bar" + assert m1.nested[1].foo == "2" + + m2 = NestedModel.construct(nested=None) + assert m2.nested is None + + # mismatched types + m3 = NestedModel.construct(nested={1}) + assert cast(Any, m3.nested) == {1} + + m4 = NestedModel.construct(nested=[False]) + assert cast(Any, m4.nested) == [False] + + +def test_list_optional_items_nested_model() -> None: + class NestedModel(BaseModel): + nested: List[Optional[BasicModel]] + + m = NestedModel.construct(nested=[None, {"foo": "bar"}]) + assert m.nested is not None + assert isinstance(m.nested, list) + assert len(m.nested) == 2 + assert m.nested[0] is None + assert m.nested[1] is not None + assert m.nested[1].foo == "bar" + + # mismatched types + m3 = NestedModel.construct(nested="foo") + assert cast(Any, m3.nested) == "foo" + + m4 = NestedModel.construct(nested=[False]) + assert cast(Any, m4.nested) == [False] + + +def test_list_mismatched_type() -> None: + class NestedModel(BaseModel): + nested: List[str] + + m = NestedModel.construct(nested=False) + assert cast(Any, m.nested) is False + + +def test_raw_dictionary() -> None: + class NestedModel(BaseModel): + nested: Dict[str, str] + + m = NestedModel.construct(nested={"hello": "world"}) + assert m.nested == {"hello": "world"} + + # mismatched types + m = NestedModel.construct(nested=False) + assert cast(Any, m.nested) is False + + +def test_nested_dictionary_model() -> None: + class NestedModel(BaseModel): + nested: Dict[str, BasicModel] + + m = NestedModel.construct(nested={"hello": {"foo": "bar"}}) + assert isinstance(m.nested, dict) + assert m.nested["hello"].foo == "bar" + + # mismatched types + m = NestedModel.construct(nested={"hello": False}) + assert cast(Any, m.nested["hello"]) is False + + +def test_unknown_fields() -> None: + m1 = BasicModel.construct(foo="foo", unknown=1) + assert m1.foo == "foo" + assert cast(Any, m1).unknown == 1 + + m2 = BasicModel.construct(foo="foo", unknown={"foo_bar": True}) + assert m2.foo == "foo" + assert cast(Any, m2).unknown == {"foo_bar": True} + + assert model_dump(m2) == {"foo": "foo", "unknown": {"foo_bar": True}} + + +def test_strict_validation_unknown_fields() -> None: + class Model(BaseModel): + foo: str + + model = parse_obj(Model, dict(foo="hello!", user="Robert")) + assert model.foo == "hello!" + assert cast(Any, model).user == "Robert" + + assert model_dump(model) == {"foo": "hello!", "user": "Robert"} + + +def test_aliases() -> None: + class Model(BaseModel): + my_field: int = Field(alias="myField") + + m = Model.construct(myField=1) + assert m.my_field == 1 + + # mismatched types + m = Model.construct(myField={"hello": False}) + assert cast(Any, m.my_field) == {"hello": False} + + +def test_repr() -> None: + model = BasicModel(foo="bar") + assert str(model) == "BasicModel(foo='bar')" + assert repr(model) == "BasicModel(foo='bar')" + + +def test_repr_nested_model() -> None: + class Child(BaseModel): + name: str + age: int + + class Parent(BaseModel): + name: str + child: Child + + model = Parent(name="Robert", child=Child(name="Foo", age=5)) + assert str(model) == "Parent(name='Robert', child=Child(name='Foo', age=5))" + assert repr(model) == "Parent(name='Robert', child=Child(name='Foo', age=5))" + + +def test_optional_list() -> None: + class Submodel(BaseModel): + name: str + + class Model(BaseModel): + items: Optional[List[Submodel]] + + m = Model.construct(items=None) + assert m.items is None + + m = Model.construct(items=[]) + assert m.items == [] + + m = Model.construct(items=[{"name": "Robert"}]) + assert m.items is not None + assert len(m.items) == 1 + assert m.items[0].name == "Robert" + + +def test_nested_union_of_models() -> None: + class Submodel1(BaseModel): + bar: bool + + class Submodel2(BaseModel): + thing: str + + class Model(BaseModel): + foo: Union[Submodel1, Submodel2] + + m = Model.construct(foo={"thing": "hello"}) + assert isinstance(m.foo, Submodel2) + assert m.foo.thing == "hello" + + +def test_nested_union_of_mixed_types() -> None: + class Submodel1(BaseModel): + bar: bool + + class Model(BaseModel): + foo: Union[Submodel1, Literal[True], Literal["CARD_HOLDER"]] + + m = Model.construct(foo=True) + assert m.foo is True + + m = Model.construct(foo="CARD_HOLDER") + assert m.foo == "CARD_HOLDER" + + m = Model.construct(foo={"bar": False}) + assert isinstance(m.foo, Submodel1) + assert m.foo.bar is False + + +def test_nested_union_multiple_variants() -> None: + class Submodel1(BaseModel): + bar: bool + + class Submodel2(BaseModel): + thing: str + + class Submodel3(BaseModel): + foo: int + + class Model(BaseModel): + foo: Union[Submodel1, Submodel2, None, Submodel3] + + m = Model.construct(foo={"thing": "hello"}) + assert isinstance(m.foo, Submodel2) + assert m.foo.thing == "hello" + + m = Model.construct(foo=None) + assert m.foo is None + + m = Model.construct() + assert m.foo is None + + m = Model.construct(foo={"foo": "1"}) + assert isinstance(m.foo, Submodel3) + assert m.foo.foo == 1 + + +def test_nested_union_invalid_data() -> None: + class Submodel1(BaseModel): + level: int + + class Submodel2(BaseModel): + name: str + + class Model(BaseModel): + foo: Union[Submodel1, Submodel2] + + m = Model.construct(foo=True) + assert cast(bool, m.foo) is True + + m = Model.construct(foo={"name": 3}) + if PYDANTIC_V2: + assert isinstance(m.foo, Submodel1) + assert m.foo.name == 3 # type: ignore + else: + assert isinstance(m.foo, Submodel2) + assert m.foo.name == "3" + + +def test_list_of_unions() -> None: + class Submodel1(BaseModel): + level: int + + class Submodel2(BaseModel): + name: str + + class Model(BaseModel): + items: List[Union[Submodel1, Submodel2]] + + m = Model.construct(items=[{"level": 1}, {"name": "Robert"}]) + assert len(m.items) == 2 + assert isinstance(m.items[0], Submodel1) + assert m.items[0].level == 1 + assert isinstance(m.items[1], Submodel2) + assert m.items[1].name == "Robert" + + m = Model.construct(items=[{"level": -1}, 156]) + assert len(m.items) == 2 + assert isinstance(m.items[0], Submodel1) + assert m.items[0].level == -1 + assert cast(Any, m.items[1]) == 156 + + +def test_union_of_lists() -> None: + class SubModel1(BaseModel): + level: int + + class SubModel2(BaseModel): + name: str + + class Model(BaseModel): + items: Union[List[SubModel1], List[SubModel2]] + + # with one valid entry + m = Model.construct(items=[{"name": "Robert"}]) + assert len(m.items) == 1 + assert isinstance(m.items[0], SubModel2) + assert m.items[0].name == "Robert" + + # with two entries pointing to different types + m = Model.construct(items=[{"level": 1}, {"name": "Robert"}]) + assert len(m.items) == 2 + assert isinstance(m.items[0], SubModel1) + assert m.items[0].level == 1 + assert isinstance(m.items[1], SubModel1) + assert cast(Any, m.items[1]).name == "Robert" + + # with two entries pointing to *completely* different types + m = Model.construct(items=[{"level": -1}, 156]) + assert len(m.items) == 2 + assert isinstance(m.items[0], SubModel1) + assert m.items[0].level == -1 + assert cast(Any, m.items[1]) == 156 + + +def test_dict_of_union() -> None: + class SubModel1(BaseModel): + name: str + + class SubModel2(BaseModel): + foo: str + + class Model(BaseModel): + data: Dict[str, Union[SubModel1, SubModel2]] + + m = Model.construct(data={"hello": {"name": "there"}, "foo": {"foo": "bar"}}) + assert len(list(m.data.keys())) == 2 + assert isinstance(m.data["hello"], SubModel1) + assert m.data["hello"].name == "there" + assert isinstance(m.data["foo"], SubModel2) + assert m.data["foo"].foo == "bar" + + # TODO: test mismatched type + + +def test_double_nested_union() -> None: + class SubModel1(BaseModel): + name: str + + class SubModel2(BaseModel): + bar: str + + class Model(BaseModel): + data: Dict[str, List[Union[SubModel1, SubModel2]]] + + m = Model.construct(data={"foo": [{"bar": "baz"}, {"name": "Robert"}]}) + assert len(m.data["foo"]) == 2 + + entry1 = m.data["foo"][0] + assert isinstance(entry1, SubModel2) + assert entry1.bar == "baz" + + entry2 = m.data["foo"][1] + assert isinstance(entry2, SubModel1) + assert entry2.name == "Robert" + + # TODO: test mismatched type + + +def test_union_of_dict() -> None: + class SubModel1(BaseModel): + name: str + + class SubModel2(BaseModel): + foo: str + + class Model(BaseModel): + data: Union[Dict[str, SubModel1], Dict[str, SubModel2]] + + m = Model.construct(data={"hello": {"name": "there"}, "foo": {"foo": "bar"}}) + assert len(list(m.data.keys())) == 2 + assert isinstance(m.data["hello"], SubModel1) + assert m.data["hello"].name == "there" + assert isinstance(m.data["foo"], SubModel1) + assert cast(Any, m.data["foo"]).foo == "bar" + + +def test_iso8601_datetime() -> None: + class Model(BaseModel): + created_at: datetime + + expected = datetime(2019, 12, 27, 18, 11, 19, 117000, tzinfo=timezone.utc) + + if PYDANTIC_V2: + expected_json = '{"created_at":"2019-12-27T18:11:19.117000Z"}' + else: + expected_json = '{"created_at": "2019-12-27T18:11:19.117000+00:00"}' + + model = Model.construct(created_at="2019-12-27T18:11:19.117Z") + assert model.created_at == expected + assert model_json(model) == expected_json + + model = parse_obj(Model, dict(created_at="2019-12-27T18:11:19.117Z")) + assert model.created_at == expected + assert model_json(model) == expected_json + + +def test_does_not_coerce_int() -> None: + class Model(BaseModel): + bar: int + + assert Model.construct(bar=1).bar == 1 + assert Model.construct(bar=10.9).bar == 10.9 + assert Model.construct(bar="19").bar == "19" # type: ignore[comparison-overlap] + assert Model.construct(bar=False).bar is False + + +def test_int_to_float_safe_conversion() -> None: + class Model(BaseModel): + float_field: float + + m = Model.construct(float_field=10) + assert m.float_field == 10.0 + assert isinstance(m.float_field, float) + + m = Model.construct(float_field=10.12) + assert m.float_field == 10.12 + assert isinstance(m.float_field, float) + + # number too big + m = Model.construct(float_field=2**53 + 1) + assert m.float_field == 2**53 + 1 + assert isinstance(m.float_field, int) + + +def test_deprecated_alias() -> None: + class Model(BaseModel): + resource_id: str = Field(alias="model_id") + + @property + def model_id(self) -> str: + return self.resource_id + + m = Model.construct(model_id="id") + assert m.model_id == "id" + assert m.resource_id == "id" + assert m.resource_id is m.model_id + + m = parse_obj(Model, {"model_id": "id"}) + assert m.model_id == "id" + assert m.resource_id == "id" + assert m.resource_id is m.model_id + + +def test_omitted_fields() -> None: + class Model(BaseModel): + resource_id: Optional[str] = None + + m = Model.construct() + assert m.resource_id is None + assert "resource_id" not in m.model_fields_set + + m = Model.construct(resource_id=None) + assert m.resource_id is None + assert "resource_id" in m.model_fields_set + + m = Model.construct(resource_id="foo") + assert m.resource_id == "foo" + assert "resource_id" in m.model_fields_set + + +def test_to_dict() -> None: + class Model(BaseModel): + foo: Optional[str] = Field(alias="FOO", default=None) + + m = Model(FOO="hello") + assert m.to_dict() == {"FOO": "hello"} + assert m.to_dict(use_api_names=False) == {"foo": "hello"} + + m2 = Model() + assert m2.to_dict() == {} + assert m2.to_dict(exclude_unset=False) == {"FOO": None} + assert m2.to_dict(exclude_unset=False, exclude_none=True) == {} + assert m2.to_dict(exclude_unset=False, exclude_defaults=True) == {} + + m3 = Model(FOO=None) + assert m3.to_dict() == {"FOO": None} + assert m3.to_dict(exclude_none=True) == {} + assert m3.to_dict(exclude_defaults=True) == {} + + class Model2(BaseModel): + created_at: datetime + + time_str = "2024-03-21T11:39:01.275859" + m4 = Model2.construct(created_at=time_str) + assert m4.to_dict(mode="python") == {"created_at": datetime.fromisoformat(time_str)} + assert m4.to_dict(mode="json") == {"created_at": time_str} + + if not PYDANTIC_V2: + with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): + m.to_dict(warnings=False) + + +def test_forwards_compat_model_dump_method() -> None: + class Model(BaseModel): + foo: Optional[str] = Field(alias="FOO", default=None) + + m = Model(FOO="hello") + assert m.model_dump() == {"foo": "hello"} + assert m.model_dump(include={"bar"}) == {} + assert m.model_dump(exclude={"foo"}) == {} + assert m.model_dump(by_alias=True) == {"FOO": "hello"} + + m2 = Model() + assert m2.model_dump() == {"foo": None} + assert m2.model_dump(exclude_unset=True) == {} + assert m2.model_dump(exclude_none=True) == {} + assert m2.model_dump(exclude_defaults=True) == {} + + m3 = Model(FOO=None) + assert m3.model_dump() == {"foo": None} + assert m3.model_dump(exclude_none=True) == {} + + if not PYDANTIC_V2: + with pytest.raises(ValueError, match="round_trip is only supported in Pydantic v2"): + m.model_dump(round_trip=True) + + with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): + m.model_dump(warnings=False) + + +def test_compat_method_no_error_for_warnings() -> None: + class Model(BaseModel): + foo: Optional[str] + + m = Model(foo="hello") + assert isinstance(model_dump(m, warnings=False), dict) + + +def test_to_json() -> None: + class Model(BaseModel): + foo: Optional[str] = Field(alias="FOO", default=None) + + m = Model(FOO="hello") + assert json.loads(m.to_json()) == {"FOO": "hello"} + assert json.loads(m.to_json(use_api_names=False)) == {"foo": "hello"} + + if PYDANTIC_V2: + assert m.to_json(indent=None) == '{"FOO":"hello"}' + else: + assert m.to_json(indent=None) == '{"FOO": "hello"}' + + m2 = Model() + assert json.loads(m2.to_json()) == {} + assert json.loads(m2.to_json(exclude_unset=False)) == {"FOO": None} + assert json.loads(m2.to_json(exclude_unset=False, exclude_none=True)) == {} + assert json.loads(m2.to_json(exclude_unset=False, exclude_defaults=True)) == {} + + m3 = Model(FOO=None) + assert json.loads(m3.to_json()) == {"FOO": None} + assert json.loads(m3.to_json(exclude_none=True)) == {} + + if not PYDANTIC_V2: + with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): + m.to_json(warnings=False) + + +def test_forwards_compat_model_dump_json_method() -> None: + class Model(BaseModel): + foo: Optional[str] = Field(alias="FOO", default=None) + + m = Model(FOO="hello") + assert json.loads(m.model_dump_json()) == {"foo": "hello"} + assert json.loads(m.model_dump_json(include={"bar"})) == {} + assert json.loads(m.model_dump_json(include={"foo"})) == {"foo": "hello"} + assert json.loads(m.model_dump_json(by_alias=True)) == {"FOO": "hello"} + + assert m.model_dump_json(indent=2) == '{\n "foo": "hello"\n}' + + m2 = Model() + assert json.loads(m2.model_dump_json()) == {"foo": None} + assert json.loads(m2.model_dump_json(exclude_unset=True)) == {} + assert json.loads(m2.model_dump_json(exclude_none=True)) == {} + assert json.loads(m2.model_dump_json(exclude_defaults=True)) == {} + + m3 = Model(FOO=None) + assert json.loads(m3.model_dump_json()) == {"foo": None} + assert json.loads(m3.model_dump_json(exclude_none=True)) == {} + + if not PYDANTIC_V2: + with pytest.raises(ValueError, match="round_trip is only supported in Pydantic v2"): + m.model_dump_json(round_trip=True) + + with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): + m.model_dump_json(warnings=False) + + +def test_type_compat() -> None: + # our model type can be assigned to Pydantic's model type + + def takes_pydantic(model: pydantic.BaseModel) -> None: # noqa: ARG001 + ... + + class OurModel(BaseModel): + foo: Optional[str] = None + + takes_pydantic(OurModel()) + + +def test_annotated_types() -> None: + class Model(BaseModel): + value: str + + m = construct_type( + value={"value": "foo"}, + type_=cast(Any, Annotated[Model, "random metadata"]), + ) + assert isinstance(m, Model) + assert m.value == "foo" + + +def test_discriminated_unions_invalid_data() -> None: + class A(BaseModel): + type: Literal["a"] + + data: str + + class B(BaseModel): + type: Literal["b"] + + data: int + + m = construct_type( + value={"type": "b", "data": "foo"}, + type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="type")]), + ) + assert isinstance(m, B) + assert m.type == "b" + assert m.data == "foo" # type: ignore[comparison-overlap] + + m = construct_type( + value={"type": "a", "data": 100}, + type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="type")]), + ) + assert isinstance(m, A) + assert m.type == "a" + if PYDANTIC_V2: + assert m.data == 100 # type: ignore[comparison-overlap] + else: + # pydantic v1 automatically converts inputs to strings + # if the expected type is a str + assert m.data == "100" + + +def test_discriminated_unions_unknown_variant() -> None: + class A(BaseModel): + type: Literal["a"] + + data: str + + class B(BaseModel): + type: Literal["b"] + + data: int + + m = construct_type( + value={"type": "c", "data": None, "new_thing": "bar"}, + type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="type")]), + ) + + # just chooses the first variant + assert isinstance(m, A) + assert m.type == "c" # type: ignore[comparison-overlap] + assert m.data == None # type: ignore[unreachable] + assert m.new_thing == "bar" + + +def test_discriminated_unions_invalid_data_nested_unions() -> None: + class A(BaseModel): + type: Literal["a"] + + data: str + + class B(BaseModel): + type: Literal["b"] + + data: int + + class C(BaseModel): + type: Literal["c"] + + data: bool + + m = construct_type( + value={"type": "b", "data": "foo"}, + type_=cast(Any, Annotated[Union[Union[A, B], C], PropertyInfo(discriminator="type")]), + ) + assert isinstance(m, B) + assert m.type == "b" + assert m.data == "foo" # type: ignore[comparison-overlap] + + m = construct_type( + value={"type": "c", "data": "foo"}, + type_=cast(Any, Annotated[Union[Union[A, B], C], PropertyInfo(discriminator="type")]), + ) + assert isinstance(m, C) + assert m.type == "c" + assert m.data == "foo" # type: ignore[comparison-overlap] + + +def test_discriminated_unions_with_aliases_invalid_data() -> None: + class A(BaseModel): + foo_type: Literal["a"] = Field(alias="type") + + data: str + + class B(BaseModel): + foo_type: Literal["b"] = Field(alias="type") + + data: int + + m = construct_type( + value={"type": "b", "data": "foo"}, + type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="foo_type")]), + ) + assert isinstance(m, B) + assert m.foo_type == "b" + assert m.data == "foo" # type: ignore[comparison-overlap] + + m = construct_type( + value={"type": "a", "data": 100}, + type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="foo_type")]), + ) + assert isinstance(m, A) + assert m.foo_type == "a" + if PYDANTIC_V2: + assert m.data == 100 # type: ignore[comparison-overlap] + else: + # pydantic v1 automatically converts inputs to strings + # if the expected type is a str + assert m.data == "100" + + +def test_discriminated_unions_overlapping_discriminators_invalid_data() -> None: + class A(BaseModel): + type: Literal["a"] + + data: bool + + class B(BaseModel): + type: Literal["a"] + + data: int + + m = construct_type( + value={"type": "a", "data": "foo"}, + type_=cast(Any, Annotated[Union[A, B], PropertyInfo(discriminator="type")]), + ) + assert isinstance(m, B) + assert m.type == "a" + assert m.data == "foo" # type: ignore[comparison-overlap] + + +def test_discriminated_unions_invalid_data_uses_cache() -> None: + class A(BaseModel): + type: Literal["a"] + + data: str + + class B(BaseModel): + type: Literal["b"] + + data: int + + UnionType = cast(Any, Union[A, B]) + + assert not hasattr(UnionType, "__discriminator__") + + m = construct_type( + value={"type": "b", "data": "foo"}, type_=cast(Any, Annotated[UnionType, PropertyInfo(discriminator="type")]) + ) + assert isinstance(m, B) + assert m.type == "b" + assert m.data == "foo" # type: ignore[comparison-overlap] + + discriminator = UnionType.__discriminator__ + assert discriminator is not None + + m = construct_type( + value={"type": "b", "data": "foo"}, type_=cast(Any, Annotated[UnionType, PropertyInfo(discriminator="type")]) + ) + assert isinstance(m, B) + assert m.type == "b" + assert m.data == "foo" # type: ignore[comparison-overlap] + + # if the discriminator details object stays the same between invocations then + # we hit the cache + assert UnionType.__discriminator__ is discriminator + + +@pytest.mark.skipif(not PYDANTIC_V2, reason="TypeAliasType is not supported in Pydantic v1") +def test_type_alias_type() -> None: + Alias = TypeAliasType("Alias", str) # pyright: ignore + + class Model(BaseModel): + alias: Alias + union: Union[int, Alias] + + m = construct_type(value={"alias": "foo", "union": "bar"}, type_=Model) + assert isinstance(m, Model) + assert isinstance(m.alias, str) + assert m.alias == "foo" + assert isinstance(m.union, str) + assert m.union == "bar" + + +@pytest.mark.skipif(not PYDANTIC_V2, reason="TypeAliasType is not supported in Pydantic v1") +def test_field_named_cls() -> None: + class Model(BaseModel): + cls: str + + m = construct_type(value={"cls": "foo"}, type_=Model) + assert isinstance(m, Model) + assert isinstance(m.cls, str) + + +def test_discriminated_union_case() -> None: + class A(BaseModel): + type: Literal["a"] + + data: bool + + class B(BaseModel): + type: Literal["b"] + + data: List[Union[A, object]] + + class ModelA(BaseModel): + type: Literal["modelA"] + + data: int + + class ModelB(BaseModel): + type: Literal["modelB"] + + required: str + + data: Union[A, B] + + # when constructing ModelA | ModelB, value data doesn't match ModelB exactly - missing `required` + m = construct_type( + value={"type": "modelB", "data": {"type": "a", "data": True}}, + type_=cast(Any, Annotated[Union[ModelA, ModelB], PropertyInfo(discriminator="type")]), + ) + + assert isinstance(m, ModelB) diff --git a/tests/test_qs.py b/tests/test_qs.py new file mode 100644 index 0000000..d4e5ecb --- /dev/null +++ b/tests/test_qs.py @@ -0,0 +1,78 @@ +from typing import Any, cast +from functools import partial +from urllib.parse import unquote + +import pytest + +from ydc_search_api._qs import Querystring, stringify + + +def test_empty() -> None: + assert stringify({}) == "" + assert stringify({"a": {}}) == "" + assert stringify({"a": {"b": {"c": {}}}}) == "" + + +def test_basic() -> None: + assert stringify({"a": 1}) == "a=1" + assert stringify({"a": "b"}) == "a=b" + assert stringify({"a": True}) == "a=true" + assert stringify({"a": False}) == "a=false" + assert stringify({"a": 1.23456}) == "a=1.23456" + assert stringify({"a": None}) == "" + + +@pytest.mark.parametrize("method", ["class", "function"]) +def test_nested_dotted(method: str) -> None: + if method == "class": + serialise = Querystring(nested_format="dots").stringify + else: + serialise = partial(stringify, nested_format="dots") + + assert unquote(serialise({"a": {"b": "c"}})) == "a.b=c" + assert unquote(serialise({"a": {"b": "c", "d": "e", "f": "g"}})) == "a.b=c&a.d=e&a.f=g" + assert unquote(serialise({"a": {"b": {"c": {"d": "e"}}}})) == "a.b.c.d=e" + assert unquote(serialise({"a": {"b": True}})) == "a.b=true" + + +def test_nested_brackets() -> None: + assert unquote(stringify({"a": {"b": "c"}})) == "a[b]=c" + assert unquote(stringify({"a": {"b": "c", "d": "e", "f": "g"}})) == "a[b]=c&a[d]=e&a[f]=g" + assert unquote(stringify({"a": {"b": {"c": {"d": "e"}}}})) == "a[b][c][d]=e" + assert unquote(stringify({"a": {"b": True}})) == "a[b]=true" + + +@pytest.mark.parametrize("method", ["class", "function"]) +def test_array_comma(method: str) -> None: + if method == "class": + serialise = Querystring(array_format="comma").stringify + else: + serialise = partial(stringify, array_format="comma") + + assert unquote(serialise({"in": ["foo", "bar"]})) == "in=foo,bar" + assert unquote(serialise({"a": {"b": [True, False]}})) == "a[b]=true,false" + assert unquote(serialise({"a": {"b": [True, False, None, True]}})) == "a[b]=true,false,true" + + +def test_array_repeat() -> None: + assert unquote(stringify({"in": ["foo", "bar"]})) == "in=foo&in=bar" + assert unquote(stringify({"a": {"b": [True, False]}})) == "a[b]=true&a[b]=false" + assert unquote(stringify({"a": {"b": [True, False, None, True]}})) == "a[b]=true&a[b]=false&a[b]=true" + assert unquote(stringify({"in": ["foo", {"b": {"c": ["d", "e"]}}]})) == "in=foo&in[b][c]=d&in[b][c]=e" + + +@pytest.mark.parametrize("method", ["class", "function"]) +def test_array_brackets(method: str) -> None: + if method == "class": + serialise = Querystring(array_format="brackets").stringify + else: + serialise = partial(stringify, array_format="brackets") + + assert unquote(serialise({"in": ["foo", "bar"]})) == "in[]=foo&in[]=bar" + assert unquote(serialise({"a": {"b": [True, False]}})) == "a[b][]=true&a[b][]=false" + assert unquote(serialise({"a": {"b": [True, False, None, True]}})) == "a[b][]=true&a[b][]=false&a[b][]=true" + + +def test_unknown_array_format() -> None: + with pytest.raises(NotImplementedError, match="Unknown array_format value: foo, choose from comma, repeat"): + stringify({"a": ["foo", "bar"]}, array_format=cast(Any, "foo")) diff --git a/tests/test_required_args.py b/tests/test_required_args.py new file mode 100644 index 0000000..e141678 --- /dev/null +++ b/tests/test_required_args.py @@ -0,0 +1,111 @@ +from __future__ import annotations + +import pytest + +from ydc_search_api._utils import required_args + + +def test_too_many_positional_params() -> None: + @required_args(["a"]) + def foo(a: str | None = None) -> str | None: + return a + + with pytest.raises(TypeError, match=r"foo\(\) takes 1 argument\(s\) but 2 were given"): + foo("a", "b") # type: ignore + + +def test_positional_param() -> None: + @required_args(["a"]) + def foo(a: str | None = None) -> str | None: + return a + + assert foo("a") == "a" + assert foo(None) is None + assert foo(a="b") == "b" + + with pytest.raises(TypeError, match="Missing required argument: 'a'"): + foo() + + +def test_keyword_only_param() -> None: + @required_args(["a"]) + def foo(*, a: str | None = None) -> str | None: + return a + + assert foo(a="a") == "a" + assert foo(a=None) is None + assert foo(a="b") == "b" + + with pytest.raises(TypeError, match="Missing required argument: 'a'"): + foo() + + +def test_multiple_params() -> None: + @required_args(["a", "b", "c"]) + def foo(a: str = "", *, b: str = "", c: str = "") -> str | None: + return f"{a} {b} {c}" + + assert foo(a="a", b="b", c="c") == "a b c" + + error_message = r"Missing required arguments.*" + + with pytest.raises(TypeError, match=error_message): + foo() + + with pytest.raises(TypeError, match=error_message): + foo(a="a") + + with pytest.raises(TypeError, match=error_message): + foo(b="b") + + with pytest.raises(TypeError, match=error_message): + foo(c="c") + + with pytest.raises(TypeError, match=r"Missing required argument: 'a'"): + foo(b="a", c="c") + + with pytest.raises(TypeError, match=r"Missing required argument: 'b'"): + foo("a", c="c") + + +def test_multiple_variants() -> None: + @required_args(["a"], ["b"]) + def foo(*, a: str | None = None, b: str | None = None) -> str | None: + return a if a is not None else b + + assert foo(a="foo") == "foo" + assert foo(b="bar") == "bar" + assert foo(a=None) is None + assert foo(b=None) is None + + # TODO: this error message could probably be improved + with pytest.raises( + TypeError, + match=r"Missing required arguments; Expected either \('a'\) or \('b'\) arguments to be given", + ): + foo() + + +def test_multiple_params_multiple_variants() -> None: + @required_args(["a", "b"], ["c"]) + def foo(*, a: str | None = None, b: str | None = None, c: str | None = None) -> str | None: + if a is not None: + return a + if b is not None: + return b + return c + + error_message = r"Missing required arguments; Expected either \('a' and 'b'\) or \('c'\) arguments to be given" + + with pytest.raises(TypeError, match=error_message): + foo(a="foo") + + with pytest.raises(TypeError, match=error_message): + foo(b="bar") + + with pytest.raises(TypeError, match=error_message): + foo() + + assert foo(a=None, b="bar") == "bar" + assert foo(c=None) is None + assert foo(c="foo") == "foo" diff --git a/tests/test_response.py b/tests/test_response.py new file mode 100644 index 0000000..51187f4 --- /dev/null +++ b/tests/test_response.py @@ -0,0 +1,277 @@ +import json +from typing import Any, List, Union, cast +from typing_extensions import Annotated + +import httpx +import pytest +import pydantic + +from ydc_search_api import BaseModel, YdcSearchAPI, AsyncYdcSearchAPI +from ydc_search_api._response import ( + APIResponse, + BaseAPIResponse, + AsyncAPIResponse, + BinaryAPIResponse, + AsyncBinaryAPIResponse, + extract_response_type, +) +from ydc_search_api._streaming import Stream +from ydc_search_api._base_client import FinalRequestOptions + + +class ConcreteBaseAPIResponse(APIResponse[bytes]): ... + + +class ConcreteAPIResponse(APIResponse[List[str]]): ... + + +class ConcreteAsyncAPIResponse(APIResponse[httpx.Response]): ... + + +def test_extract_response_type_direct_classes() -> None: + assert extract_response_type(BaseAPIResponse[str]) == str + assert extract_response_type(APIResponse[str]) == str + assert extract_response_type(AsyncAPIResponse[str]) == str + + +def test_extract_response_type_direct_class_missing_type_arg() -> None: + with pytest.raises( + RuntimeError, + match="Expected type to have a type argument at index 0 but it did not", + ): + extract_response_type(AsyncAPIResponse) + + +def test_extract_response_type_concrete_subclasses() -> None: + assert extract_response_type(ConcreteBaseAPIResponse) == bytes + assert extract_response_type(ConcreteAPIResponse) == List[str] + assert extract_response_type(ConcreteAsyncAPIResponse) == httpx.Response + + +def test_extract_response_type_binary_response() -> None: + assert extract_response_type(BinaryAPIResponse) == bytes + assert extract_response_type(AsyncBinaryAPIResponse) == bytes + + +class PydanticModel(pydantic.BaseModel): ... + + +def test_response_parse_mismatched_basemodel(client: YdcSearchAPI) -> None: + response = APIResponse( + raw=httpx.Response(200, content=b"foo"), + client=client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + with pytest.raises( + TypeError, + match="Pydantic models must subclass our base model type, e.g. `from ydc_search_api import BaseModel`", + ): + response.parse(to=PydanticModel) + + +@pytest.mark.asyncio +async def test_async_response_parse_mismatched_basemodel(async_client: AsyncYdcSearchAPI) -> None: + response = AsyncAPIResponse( + raw=httpx.Response(200, content=b"foo"), + client=async_client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + with pytest.raises( + TypeError, + match="Pydantic models must subclass our base model type, e.g. `from ydc_search_api import BaseModel`", + ): + await response.parse(to=PydanticModel) + + +def test_response_parse_custom_stream(client: YdcSearchAPI) -> None: + response = APIResponse( + raw=httpx.Response(200, content=b"foo"), + client=client, + stream=True, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + stream = response.parse(to=Stream[int]) + assert stream._cast_to == int + + +@pytest.mark.asyncio +async def test_async_response_parse_custom_stream(async_client: AsyncYdcSearchAPI) -> None: + response = AsyncAPIResponse( + raw=httpx.Response(200, content=b"foo"), + client=async_client, + stream=True, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + stream = await response.parse(to=Stream[int]) + assert stream._cast_to == int + + +class CustomModel(BaseModel): + foo: str + bar: int + + +def test_response_parse_custom_model(client: YdcSearchAPI) -> None: + response = APIResponse( + raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})), + client=client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + obj = response.parse(to=CustomModel) + assert obj.foo == "hello!" + assert obj.bar == 2 + + +@pytest.mark.asyncio +async def test_async_response_parse_custom_model(async_client: AsyncYdcSearchAPI) -> None: + response = AsyncAPIResponse( + raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})), + client=async_client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + obj = await response.parse(to=CustomModel) + assert obj.foo == "hello!" + assert obj.bar == 2 + + +def test_response_parse_annotated_type(client: YdcSearchAPI) -> None: + response = APIResponse( + raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})), + client=client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + obj = response.parse( + to=cast("type[CustomModel]", Annotated[CustomModel, "random metadata"]), + ) + assert obj.foo == "hello!" + assert obj.bar == 2 + + +async def test_async_response_parse_annotated_type(async_client: AsyncYdcSearchAPI) -> None: + response = AsyncAPIResponse( + raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})), + client=async_client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + obj = await response.parse( + to=cast("type[CustomModel]", Annotated[CustomModel, "random metadata"]), + ) + assert obj.foo == "hello!" + assert obj.bar == 2 + + +@pytest.mark.parametrize( + "content, expected", + [ + ("false", False), + ("true", True), + ("False", False), + ("True", True), + ("TrUe", True), + ("FalSe", False), + ], +) +def test_response_parse_bool(client: YdcSearchAPI, content: str, expected: bool) -> None: + response = APIResponse( + raw=httpx.Response(200, content=content), + client=client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + result = response.parse(to=bool) + assert result is expected + + +@pytest.mark.parametrize( + "content, expected", + [ + ("false", False), + ("true", True), + ("False", False), + ("True", True), + ("TrUe", True), + ("FalSe", False), + ], +) +async def test_async_response_parse_bool(client: AsyncYdcSearchAPI, content: str, expected: bool) -> None: + response = AsyncAPIResponse( + raw=httpx.Response(200, content=content), + client=client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + result = await response.parse(to=bool) + assert result is expected + + +class OtherModel(BaseModel): + a: str + + +@pytest.mark.parametrize("client", [False], indirect=True) # loose validation +def test_response_parse_expect_model_union_non_json_content(client: YdcSearchAPI) -> None: + response = APIResponse( + raw=httpx.Response(200, content=b"foo", headers={"Content-Type": "application/text"}), + client=client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + obj = response.parse(to=cast(Any, Union[CustomModel, OtherModel])) + assert isinstance(obj, str) + assert obj == "foo" + + +@pytest.mark.asyncio +@pytest.mark.parametrize("async_client", [False], indirect=True) # loose validation +async def test_async_response_parse_expect_model_union_non_json_content(async_client: AsyncYdcSearchAPI) -> None: + response = AsyncAPIResponse( + raw=httpx.Response(200, content=b"foo", headers={"Content-Type": "application/text"}), + client=async_client, + stream=False, + stream_cls=None, + cast_to=str, + options=FinalRequestOptions.construct(method="get", url="/foo"), + ) + + obj = await response.parse(to=cast(Any, Union[CustomModel, OtherModel])) + assert isinstance(obj, str) + assert obj == "foo" diff --git a/tests/test_streaming.py b/tests/test_streaming.py new file mode 100644 index 0000000..25fa8a9 --- /dev/null +++ b/tests/test_streaming.py @@ -0,0 +1,252 @@ +from __future__ import annotations + +from typing import Iterator, AsyncIterator + +import httpx +import pytest + +from ydc_search_api import YdcSearchAPI, AsyncYdcSearchAPI +from ydc_search_api._streaming import Stream, AsyncStream, ServerSentEvent + + +@pytest.mark.asyncio +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_basic(sync: bool, client: YdcSearchAPI, async_client: AsyncYdcSearchAPI) -> None: + def body() -> Iterator[bytes]: + yield b"event: completion\n" + yield b'data: {"foo":true}\n' + yield b"\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event == "completion" + assert sse.json() == {"foo": True} + + await assert_empty_iter(iterator) + + +@pytest.mark.asyncio +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_data_missing_event(sync: bool, client: YdcSearchAPI, async_client: AsyncYdcSearchAPI) -> None: + def body() -> Iterator[bytes]: + yield b'data: {"foo":true}\n' + yield b"\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event is None + assert sse.json() == {"foo": True} + + await assert_empty_iter(iterator) + + +@pytest.mark.asyncio +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_event_missing_data(sync: bool, client: YdcSearchAPI, async_client: AsyncYdcSearchAPI) -> None: + def body() -> Iterator[bytes]: + yield b"event: ping\n" + yield b"\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event == "ping" + assert sse.data == "" + + await assert_empty_iter(iterator) + + +@pytest.mark.asyncio +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_multiple_events(sync: bool, client: YdcSearchAPI, async_client: AsyncYdcSearchAPI) -> None: + def body() -> Iterator[bytes]: + yield b"event: ping\n" + yield b"\n" + yield b"event: completion\n" + yield b"\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event == "ping" + assert sse.data == "" + + sse = await iter_next(iterator) + assert sse.event == "completion" + assert sse.data == "" + + await assert_empty_iter(iterator) + + +@pytest.mark.asyncio +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_multiple_events_with_data(sync: bool, client: YdcSearchAPI, async_client: AsyncYdcSearchAPI) -> None: + def body() -> Iterator[bytes]: + yield b"event: ping\n" + yield b'data: {"foo":true}\n' + yield b"\n" + yield b"event: completion\n" + yield b'data: {"bar":false}\n' + yield b"\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event == "ping" + assert sse.json() == {"foo": True} + + sse = await iter_next(iterator) + assert sse.event == "completion" + assert sse.json() == {"bar": False} + + await assert_empty_iter(iterator) + + +@pytest.mark.asyncio +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_multiple_data_lines_with_empty_line( + sync: bool, client: YdcSearchAPI, async_client: AsyncYdcSearchAPI +) -> None: + def body() -> Iterator[bytes]: + yield b"event: ping\n" + yield b"data: {\n" + yield b'data: "foo":\n' + yield b"data: \n" + yield b"data:\n" + yield b"data: true}\n" + yield b"\n\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event == "ping" + assert sse.json() == {"foo": True} + assert sse.data == '{\n"foo":\n\n\ntrue}' + + await assert_empty_iter(iterator) + + +@pytest.mark.asyncio +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_data_json_escaped_double_new_line( + sync: bool, client: YdcSearchAPI, async_client: AsyncYdcSearchAPI +) -> None: + def body() -> Iterator[bytes]: + yield b"event: ping\n" + yield b'data: {"foo": "my long\\n\\ncontent"}' + yield b"\n\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event == "ping" + assert sse.json() == {"foo": "my long\n\ncontent"} + + await assert_empty_iter(iterator) + + +@pytest.mark.asyncio +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_multiple_data_lines(sync: bool, client: YdcSearchAPI, async_client: AsyncYdcSearchAPI) -> None: + def body() -> Iterator[bytes]: + yield b"event: ping\n" + yield b"data: {\n" + yield b'data: "foo":\n' + yield b"data: true}\n" + yield b"\n\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event == "ping" + assert sse.json() == {"foo": True} + + await assert_empty_iter(iterator) + + +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_special_new_line_character( + sync: bool, + client: YdcSearchAPI, + async_client: AsyncYdcSearchAPI, +) -> None: + def body() -> Iterator[bytes]: + yield b'data: {"content":" culpa"}\n' + yield b"\n" + yield b'data: {"content":" \xe2\x80\xa8"}\n' + yield b"\n" + yield b'data: {"content":"foo"}\n' + yield b"\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event is None + assert sse.json() == {"content": " culpa"} + + sse = await iter_next(iterator) + assert sse.event is None + assert sse.json() == {"content": " 
"} + + sse = await iter_next(iterator) + assert sse.event is None + assert sse.json() == {"content": "foo"} + + await assert_empty_iter(iterator) + + +@pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) +async def test_multi_byte_character_multiple_chunks( + sync: bool, + client: YdcSearchAPI, + async_client: AsyncYdcSearchAPI, +) -> None: + def body() -> Iterator[bytes]: + yield b'data: {"content":"' + # bytes taken from the string 'извСстни' and arbitrarily split + # so that some multi-byte characters span multiple chunks + yield b"\xd0" + yield b"\xb8\xd0\xb7\xd0" + yield b"\xb2\xd0\xb5\xd1\x81\xd1\x82\xd0\xbd\xd0\xb8" + yield b'"}\n' + yield b"\n" + + iterator = make_event_iterator(content=body(), sync=sync, client=client, async_client=async_client) + + sse = await iter_next(iterator) + assert sse.event is None + assert sse.json() == {"content": "извСстни"} + + +async def to_aiter(iter: Iterator[bytes]) -> AsyncIterator[bytes]: + for chunk in iter: + yield chunk + + +async def iter_next(iter: Iterator[ServerSentEvent] | AsyncIterator[ServerSentEvent]) -> ServerSentEvent: + if isinstance(iter, AsyncIterator): + return await iter.__anext__() + + return next(iter) + + +async def assert_empty_iter(iter: Iterator[ServerSentEvent] | AsyncIterator[ServerSentEvent]) -> None: + with pytest.raises((StopAsyncIteration, RuntimeError)): + await iter_next(iter) + + +def make_event_iterator( + content: Iterator[bytes], + *, + sync: bool, + client: YdcSearchAPI, + async_client: AsyncYdcSearchAPI, +) -> Iterator[ServerSentEvent] | AsyncIterator[ServerSentEvent]: + if sync: + return Stream(cast_to=object, client=client, response=httpx.Response(200, content=content))._iter_events() + + return AsyncStream( + cast_to=object, client=async_client, response=httpx.Response(200, content=to_aiter(content)) + )._iter_events() diff --git a/tests/test_transform.py b/tests/test_transform.py new file mode 100644 index 0000000..bd80cc2 --- /dev/null +++ b/tests/test_transform.py @@ -0,0 +1,453 @@ +from __future__ import annotations + +import io +import pathlib +from typing import Any, Dict, List, Union, TypeVar, Iterable, Optional, cast +from datetime import date, datetime +from typing_extensions import Required, Annotated, TypedDict + +import pytest + +from ydc_search_api._types import NOT_GIVEN, Base64FileInput +from ydc_search_api._utils import ( + PropertyInfo, + transform as _transform, + parse_datetime, + async_transform as _async_transform, +) +from ydc_search_api._compat import PYDANTIC_V2 +from ydc_search_api._models import BaseModel + +_T = TypeVar("_T") + +SAMPLE_FILE_PATH = pathlib.Path(__file__).parent.joinpath("sample_file.txt") + + +async def transform( + data: _T, + expected_type: object, + use_async: bool, +) -> _T: + if use_async: + return await _async_transform(data, expected_type=expected_type) + + return _transform(data, expected_type=expected_type) + + +parametrize = pytest.mark.parametrize("use_async", [False, True], ids=["sync", "async"]) + + +class Foo1(TypedDict): + foo_bar: Annotated[str, PropertyInfo(alias="fooBar")] + + +@parametrize +@pytest.mark.asyncio +async def test_top_level_alias(use_async: bool) -> None: + assert await transform({"foo_bar": "hello"}, expected_type=Foo1, use_async=use_async) == {"fooBar": "hello"} + + +class Foo2(TypedDict): + bar: Bar2 + + +class Bar2(TypedDict): + this_thing: Annotated[int, PropertyInfo(alias="this__thing")] + baz: Annotated[Baz2, PropertyInfo(alias="Baz")] + + +class Baz2(TypedDict): + my_baz: Annotated[str, PropertyInfo(alias="myBaz")] + + +@parametrize +@pytest.mark.asyncio +async def test_recursive_typeddict(use_async: bool) -> None: + assert await transform({"bar": {"this_thing": 1}}, Foo2, use_async) == {"bar": {"this__thing": 1}} + assert await transform({"bar": {"baz": {"my_baz": "foo"}}}, Foo2, use_async) == {"bar": {"Baz": {"myBaz": "foo"}}} + + +class Foo3(TypedDict): + things: List[Bar3] + + +class Bar3(TypedDict): + my_field: Annotated[str, PropertyInfo(alias="myField")] + + +@parametrize +@pytest.mark.asyncio +async def test_list_of_typeddict(use_async: bool) -> None: + result = await transform({"things": [{"my_field": "foo"}, {"my_field": "foo2"}]}, Foo3, use_async) + assert result == {"things": [{"myField": "foo"}, {"myField": "foo2"}]} + + +class Foo4(TypedDict): + foo: Union[Bar4, Baz4] + + +class Bar4(TypedDict): + foo_bar: Annotated[str, PropertyInfo(alias="fooBar")] + + +class Baz4(TypedDict): + foo_baz: Annotated[str, PropertyInfo(alias="fooBaz")] + + +@parametrize +@pytest.mark.asyncio +async def test_union_of_typeddict(use_async: bool) -> None: + assert await transform({"foo": {"foo_bar": "bar"}}, Foo4, use_async) == {"foo": {"fooBar": "bar"}} + assert await transform({"foo": {"foo_baz": "baz"}}, Foo4, use_async) == {"foo": {"fooBaz": "baz"}} + assert await transform({"foo": {"foo_baz": "baz", "foo_bar": "bar"}}, Foo4, use_async) == { + "foo": {"fooBaz": "baz", "fooBar": "bar"} + } + + +class Foo5(TypedDict): + foo: Annotated[Union[Bar4, List[Baz4]], PropertyInfo(alias="FOO")] + + +class Bar5(TypedDict): + foo_bar: Annotated[str, PropertyInfo(alias="fooBar")] + + +class Baz5(TypedDict): + foo_baz: Annotated[str, PropertyInfo(alias="fooBaz")] + + +@parametrize +@pytest.mark.asyncio +async def test_union_of_list(use_async: bool) -> None: + assert await transform({"foo": {"foo_bar": "bar"}}, Foo5, use_async) == {"FOO": {"fooBar": "bar"}} + assert await transform( + { + "foo": [ + {"foo_baz": "baz"}, + {"foo_baz": "baz"}, + ] + }, + Foo5, + use_async, + ) == {"FOO": [{"fooBaz": "baz"}, {"fooBaz": "baz"}]} + + +class Foo6(TypedDict): + bar: Annotated[str, PropertyInfo(alias="Bar")] + + +@parametrize +@pytest.mark.asyncio +async def test_includes_unknown_keys(use_async: bool) -> None: + assert await transform({"bar": "bar", "baz_": {"FOO": 1}}, Foo6, use_async) == { + "Bar": "bar", + "baz_": {"FOO": 1}, + } + + +class Foo7(TypedDict): + bar: Annotated[List[Bar7], PropertyInfo(alias="bAr")] + foo: Bar7 + + +class Bar7(TypedDict): + foo: str + + +@parametrize +@pytest.mark.asyncio +async def test_ignores_invalid_input(use_async: bool) -> None: + assert await transform({"bar": ""}, Foo7, use_async) == {"bAr": ""} + assert await transform({"foo": ""}, Foo7, use_async) == {"foo": ""} + + +class DatetimeDict(TypedDict, total=False): + foo: Annotated[datetime, PropertyInfo(format="iso8601")] + + bar: Annotated[Optional[datetime], PropertyInfo(format="iso8601")] + + required: Required[Annotated[Optional[datetime], PropertyInfo(format="iso8601")]] + + list_: Required[Annotated[Optional[List[datetime]], PropertyInfo(format="iso8601")]] + + union: Annotated[Union[int, datetime], PropertyInfo(format="iso8601")] + + +class DateDict(TypedDict, total=False): + foo: Annotated[date, PropertyInfo(format="iso8601")] + + +class DatetimeModel(BaseModel): + foo: datetime + + +class DateModel(BaseModel): + foo: Optional[date] + + +@parametrize +@pytest.mark.asyncio +async def test_iso8601_format(use_async: bool) -> None: + dt = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") + tz = "Z" if PYDANTIC_V2 else "+00:00" + assert await transform({"foo": dt}, DatetimeDict, use_async) == {"foo": "2023-02-23T14:16:36.337692+00:00"} # type: ignore[comparison-overlap] + assert await transform(DatetimeModel(foo=dt), Any, use_async) == {"foo": "2023-02-23T14:16:36.337692" + tz} # type: ignore[comparison-overlap] + + dt = dt.replace(tzinfo=None) + assert await transform({"foo": dt}, DatetimeDict, use_async) == {"foo": "2023-02-23T14:16:36.337692"} # type: ignore[comparison-overlap] + assert await transform(DatetimeModel(foo=dt), Any, use_async) == {"foo": "2023-02-23T14:16:36.337692"} # type: ignore[comparison-overlap] + + assert await transform({"foo": None}, DateDict, use_async) == {"foo": None} # type: ignore[comparison-overlap] + assert await transform(DateModel(foo=None), Any, use_async) == {"foo": None} # type: ignore + assert await transform({"foo": date.fromisoformat("2023-02-23")}, DateDict, use_async) == {"foo": "2023-02-23"} # type: ignore[comparison-overlap] + assert await transform(DateModel(foo=date.fromisoformat("2023-02-23")), DateDict, use_async) == { + "foo": "2023-02-23" + } # type: ignore[comparison-overlap] + + +@parametrize +@pytest.mark.asyncio +async def test_optional_iso8601_format(use_async: bool) -> None: + dt = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") + assert await transform({"bar": dt}, DatetimeDict, use_async) == {"bar": "2023-02-23T14:16:36.337692+00:00"} # type: ignore[comparison-overlap] + + assert await transform({"bar": None}, DatetimeDict, use_async) == {"bar": None} + + +@parametrize +@pytest.mark.asyncio +async def test_required_iso8601_format(use_async: bool) -> None: + dt = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") + assert await transform({"required": dt}, DatetimeDict, use_async) == { + "required": "2023-02-23T14:16:36.337692+00:00" + } # type: ignore[comparison-overlap] + + assert await transform({"required": None}, DatetimeDict, use_async) == {"required": None} + + +@parametrize +@pytest.mark.asyncio +async def test_union_datetime(use_async: bool) -> None: + dt = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") + assert await transform({"union": dt}, DatetimeDict, use_async) == { # type: ignore[comparison-overlap] + "union": "2023-02-23T14:16:36.337692+00:00" + } + + assert await transform({"union": "foo"}, DatetimeDict, use_async) == {"union": "foo"} + + +@parametrize +@pytest.mark.asyncio +async def test_nested_list_iso6801_format(use_async: bool) -> None: + dt1 = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") + dt2 = parse_datetime("2022-01-15T06:34:23Z") + assert await transform({"list_": [dt1, dt2]}, DatetimeDict, use_async) == { # type: ignore[comparison-overlap] + "list_": ["2023-02-23T14:16:36.337692+00:00", "2022-01-15T06:34:23+00:00"] + } + + +@parametrize +@pytest.mark.asyncio +async def test_datetime_custom_format(use_async: bool) -> None: + dt = parse_datetime("2022-01-15T06:34:23Z") + + result = await transform(dt, Annotated[datetime, PropertyInfo(format="custom", format_template="%H")], use_async) + assert result == "06" # type: ignore[comparison-overlap] + + +class DateDictWithRequiredAlias(TypedDict, total=False): + required_prop: Required[Annotated[date, PropertyInfo(format="iso8601", alias="prop")]] + + +@parametrize +@pytest.mark.asyncio +async def test_datetime_with_alias(use_async: bool) -> None: + assert await transform({"required_prop": None}, DateDictWithRequiredAlias, use_async) == {"prop": None} # type: ignore[comparison-overlap] + assert await transform( + {"required_prop": date.fromisoformat("2023-02-23")}, DateDictWithRequiredAlias, use_async + ) == {"prop": "2023-02-23"} # type: ignore[comparison-overlap] + + +class MyModel(BaseModel): + foo: str + + +@parametrize +@pytest.mark.asyncio +async def test_pydantic_model_to_dictionary(use_async: bool) -> None: + assert cast(Any, await transform(MyModel(foo="hi!"), Any, use_async)) == {"foo": "hi!"} + assert cast(Any, await transform(MyModel.construct(foo="hi!"), Any, use_async)) == {"foo": "hi!"} + + +@parametrize +@pytest.mark.asyncio +async def test_pydantic_empty_model(use_async: bool) -> None: + assert cast(Any, await transform(MyModel.construct(), Any, use_async)) == {} + + +@parametrize +@pytest.mark.asyncio +async def test_pydantic_unknown_field(use_async: bool) -> None: + assert cast(Any, await transform(MyModel.construct(my_untyped_field=True), Any, use_async)) == { + "my_untyped_field": True + } + + +@parametrize +@pytest.mark.asyncio +async def test_pydantic_mismatched_types(use_async: bool) -> None: + model = MyModel.construct(foo=True) + if PYDANTIC_V2: + with pytest.warns(UserWarning): + params = await transform(model, Any, use_async) + else: + params = await transform(model, Any, use_async) + assert cast(Any, params) == {"foo": True} + + +@parametrize +@pytest.mark.asyncio +async def test_pydantic_mismatched_object_type(use_async: bool) -> None: + model = MyModel.construct(foo=MyModel.construct(hello="world")) + if PYDANTIC_V2: + with pytest.warns(UserWarning): + params = await transform(model, Any, use_async) + else: + params = await transform(model, Any, use_async) + assert cast(Any, params) == {"foo": {"hello": "world"}} + + +class ModelNestedObjects(BaseModel): + nested: MyModel + + +@parametrize +@pytest.mark.asyncio +async def test_pydantic_nested_objects(use_async: bool) -> None: + model = ModelNestedObjects.construct(nested={"foo": "stainless"}) + assert isinstance(model.nested, MyModel) + assert cast(Any, await transform(model, Any, use_async)) == {"nested": {"foo": "stainless"}} + + +class ModelWithDefaultField(BaseModel): + foo: str + with_none_default: Union[str, None] = None + with_str_default: str = "foo" + + +@parametrize +@pytest.mark.asyncio +async def test_pydantic_default_field(use_async: bool) -> None: + # should be excluded when defaults are used + model = ModelWithDefaultField.construct() + assert model.with_none_default is None + assert model.with_str_default == "foo" + assert cast(Any, await transform(model, Any, use_async)) == {} + + # should be included when the default value is explicitly given + model = ModelWithDefaultField.construct(with_none_default=None, with_str_default="foo") + assert model.with_none_default is None + assert model.with_str_default == "foo" + assert cast(Any, await transform(model, Any, use_async)) == {"with_none_default": None, "with_str_default": "foo"} + + # should be included when a non-default value is explicitly given + model = ModelWithDefaultField.construct(with_none_default="bar", with_str_default="baz") + assert model.with_none_default == "bar" + assert model.with_str_default == "baz" + assert cast(Any, await transform(model, Any, use_async)) == {"with_none_default": "bar", "with_str_default": "baz"} + + +class TypedDictIterableUnion(TypedDict): + foo: Annotated[Union[Bar8, Iterable[Baz8]], PropertyInfo(alias="FOO")] + + +class Bar8(TypedDict): + foo_bar: Annotated[str, PropertyInfo(alias="fooBar")] + + +class Baz8(TypedDict): + foo_baz: Annotated[str, PropertyInfo(alias="fooBaz")] + + +@parametrize +@pytest.mark.asyncio +async def test_iterable_of_dictionaries(use_async: bool) -> None: + assert await transform({"foo": [{"foo_baz": "bar"}]}, TypedDictIterableUnion, use_async) == { + "FOO": [{"fooBaz": "bar"}] + } + assert cast(Any, await transform({"foo": ({"foo_baz": "bar"},)}, TypedDictIterableUnion, use_async)) == { + "FOO": [{"fooBaz": "bar"}] + } + + def my_iter() -> Iterable[Baz8]: + yield {"foo_baz": "hello"} + yield {"foo_baz": "world"} + + assert await transform({"foo": my_iter()}, TypedDictIterableUnion, use_async) == { + "FOO": [{"fooBaz": "hello"}, {"fooBaz": "world"}] + } + + +@parametrize +@pytest.mark.asyncio +async def test_dictionary_items(use_async: bool) -> None: + class DictItems(TypedDict): + foo_baz: Annotated[str, PropertyInfo(alias="fooBaz")] + + assert await transform({"foo": {"foo_baz": "bar"}}, Dict[str, DictItems], use_async) == {"foo": {"fooBaz": "bar"}} + + +class TypedDictIterableUnionStr(TypedDict): + foo: Annotated[Union[str, Iterable[Baz8]], PropertyInfo(alias="FOO")] + + +@parametrize +@pytest.mark.asyncio +async def test_iterable_union_str(use_async: bool) -> None: + assert await transform({"foo": "bar"}, TypedDictIterableUnionStr, use_async) == {"FOO": "bar"} + assert cast(Any, await transform(iter([{"foo_baz": "bar"}]), Union[str, Iterable[Baz8]], use_async)) == [ + {"fooBaz": "bar"} + ] + + +class TypedDictBase64Input(TypedDict): + foo: Annotated[Union[str, Base64FileInput], PropertyInfo(format="base64")] + + +@parametrize +@pytest.mark.asyncio +async def test_base64_file_input(use_async: bool) -> None: + # strings are left as-is + assert await transform({"foo": "bar"}, TypedDictBase64Input, use_async) == {"foo": "bar"} + + # pathlib.Path is automatically converted to base64 + assert await transform({"foo": SAMPLE_FILE_PATH}, TypedDictBase64Input, use_async) == { + "foo": "SGVsbG8sIHdvcmxkIQo=" + } # type: ignore[comparison-overlap] + + # io instances are automatically converted to base64 + assert await transform({"foo": io.StringIO("Hello, world!")}, TypedDictBase64Input, use_async) == { + "foo": "SGVsbG8sIHdvcmxkIQ==" + } # type: ignore[comparison-overlap] + assert await transform({"foo": io.BytesIO(b"Hello, world!")}, TypedDictBase64Input, use_async) == { + "foo": "SGVsbG8sIHdvcmxkIQ==" + } # type: ignore[comparison-overlap] + + +@parametrize +@pytest.mark.asyncio +async def test_transform_skipping(use_async: bool) -> None: + # lists of ints are left as-is + data = [1, 2, 3] + assert await transform(data, List[int], use_async) is data + + # iterables of ints are converted to a list + data = iter([1, 2, 3]) + assert await transform(data, Iterable[int], use_async) == [1, 2, 3] + + +@parametrize +@pytest.mark.asyncio +async def test_strips_notgiven(use_async: bool) -> None: + assert await transform({"foo_bar": "bar"}, Foo1, use_async) == {"fooBar": "bar"} + assert await transform({"foo_bar": NOT_GIVEN}, Foo1, use_async) == {} diff --git a/tests/test_utils/test_proxy.py b/tests/test_utils/test_proxy.py new file mode 100644 index 0000000..b9dd040 --- /dev/null +++ b/tests/test_utils/test_proxy.py @@ -0,0 +1,23 @@ +import operator +from typing import Any +from typing_extensions import override + +from ydc_search_api._utils import LazyProxy + + +class RecursiveLazyProxy(LazyProxy[Any]): + @override + def __load__(self) -> Any: + return self + + def __call__(self, *_args: Any, **_kwds: Any) -> Any: + raise RuntimeError("This should never be called!") + + +def test_recursive_proxy() -> None: + proxy = RecursiveLazyProxy() + assert repr(proxy) == "RecursiveLazyProxy" + assert str(proxy) == "RecursiveLazyProxy" + assert dir(proxy) == [] + assert type(proxy).__name__ == "RecursiveLazyProxy" + assert type(operator.attrgetter("name.foo.bar.baz")(proxy)).__name__ == "RecursiveLazyProxy" diff --git a/tests/test_utils/test_typing.py b/tests/test_utils/test_typing.py new file mode 100644 index 0000000..19a96b9 --- /dev/null +++ b/tests/test_utils/test_typing.py @@ -0,0 +1,73 @@ +from __future__ import annotations + +from typing import Generic, TypeVar, cast + +from ydc_search_api._utils import extract_type_var_from_base + +_T = TypeVar("_T") +_T2 = TypeVar("_T2") +_T3 = TypeVar("_T3") + + +class BaseGeneric(Generic[_T]): ... + + +class SubclassGeneric(BaseGeneric[_T]): ... + + +class BaseGenericMultipleTypeArgs(Generic[_T, _T2, _T3]): ... + + +class SubclassGenericMultipleTypeArgs(BaseGenericMultipleTypeArgs[_T, _T2, _T3]): ... + + +class SubclassDifferentOrderGenericMultipleTypeArgs(BaseGenericMultipleTypeArgs[_T2, _T, _T3]): ... + + +def test_extract_type_var() -> None: + assert ( + extract_type_var_from_base( + BaseGeneric[int], + index=0, + generic_bases=cast("tuple[type, ...]", (BaseGeneric,)), + ) + == int + ) + + +def test_extract_type_var_generic_subclass() -> None: + assert ( + extract_type_var_from_base( + SubclassGeneric[int], + index=0, + generic_bases=cast("tuple[type, ...]", (BaseGeneric,)), + ) + == int + ) + + +def test_extract_type_var_multiple() -> None: + typ = BaseGenericMultipleTypeArgs[int, str, None] + + generic_bases = cast("tuple[type, ...]", (BaseGenericMultipleTypeArgs,)) + assert extract_type_var_from_base(typ, index=0, generic_bases=generic_bases) == int + assert extract_type_var_from_base(typ, index=1, generic_bases=generic_bases) == str + assert extract_type_var_from_base(typ, index=2, generic_bases=generic_bases) == type(None) + + +def test_extract_type_var_generic_subclass_multiple() -> None: + typ = SubclassGenericMultipleTypeArgs[int, str, None] + + generic_bases = cast("tuple[type, ...]", (BaseGenericMultipleTypeArgs,)) + assert extract_type_var_from_base(typ, index=0, generic_bases=generic_bases) == int + assert extract_type_var_from_base(typ, index=1, generic_bases=generic_bases) == str + assert extract_type_var_from_base(typ, index=2, generic_bases=generic_bases) == type(None) + + +def test_extract_type_var_generic_subclass_different_ordering_multiple() -> None: + typ = SubclassDifferentOrderGenericMultipleTypeArgs[int, str, None] + + generic_bases = cast("tuple[type, ...]", (BaseGenericMultipleTypeArgs,)) + assert extract_type_var_from_base(typ, index=0, generic_bases=generic_bases) == int + assert extract_type_var_from_base(typ, index=1, generic_bases=generic_bases) == str + assert extract_type_var_from_base(typ, index=2, generic_bases=generic_bases) == type(None) diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 0000000..a5896d2 --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,159 @@ +from __future__ import annotations + +import os +import inspect +import traceback +import contextlib +from typing import Any, TypeVar, Iterator, cast +from datetime import date, datetime +from typing_extensions import Literal, get_args, get_origin, assert_type + +from ydc_search_api._types import Omit, NoneType +from ydc_search_api._utils import ( + is_dict, + is_list, + is_list_type, + is_union_type, + extract_type_arg, + is_annotated_type, + is_type_alias_type, +) +from ydc_search_api._compat import PYDANTIC_V2, field_outer_type, get_model_fields +from ydc_search_api._models import BaseModel + +BaseModelT = TypeVar("BaseModelT", bound=BaseModel) + + +def assert_matches_model(model: type[BaseModelT], value: BaseModelT, *, path: list[str]) -> bool: + for name, field in get_model_fields(model).items(): + field_value = getattr(value, name) + if PYDANTIC_V2: + allow_none = False + else: + # in v1 nullability was structured differently + # https://docs.pydantic.dev/2.0/migration/#required-optional-and-nullable-fields + allow_none = getattr(field, "allow_none", False) + + assert_matches_type( + field_outer_type(field), + field_value, + path=[*path, name], + allow_none=allow_none, + ) + + return True + + +# Note: the `path` argument is only used to improve error messages when `--showlocals` is used +def assert_matches_type( + type_: Any, + value: object, + *, + path: list[str], + allow_none: bool = False, +) -> None: + if is_type_alias_type(type_): + type_ = type_.__value__ + + # unwrap `Annotated[T, ...]` -> `T` + if is_annotated_type(type_): + type_ = extract_type_arg(type_, 0) + + if allow_none and value is None: + return + + if type_ is None or type_ is NoneType: + assert value is None + return + + origin = get_origin(type_) or type_ + + if is_list_type(type_): + return _assert_list_type(type_, value) + + if origin == str: + assert isinstance(value, str) + elif origin == int: + assert isinstance(value, int) + elif origin == bool: + assert isinstance(value, bool) + elif origin == float: + assert isinstance(value, float) + elif origin == bytes: + assert isinstance(value, bytes) + elif origin == datetime: + assert isinstance(value, datetime) + elif origin == date: + assert isinstance(value, date) + elif origin == object: + # nothing to do here, the expected type is unknown + pass + elif origin == Literal: + assert value in get_args(type_) + elif origin == dict: + assert is_dict(value) + + args = get_args(type_) + key_type = args[0] + items_type = args[1] + + for key, item in value.items(): + assert_matches_type(key_type, key, path=[*path, ""]) + assert_matches_type(items_type, item, path=[*path, ""]) + elif is_union_type(type_): + variants = get_args(type_) + + try: + none_index = variants.index(type(None)) + except ValueError: + pass + else: + # special case Optional[T] for better error messages + if len(variants) == 2: + if value is None: + # valid + return + + return assert_matches_type(type_=variants[not none_index], value=value, path=path) + + for i, variant in enumerate(variants): + try: + assert_matches_type(variant, value, path=[*path, f"variant {i}"]) + return + except AssertionError: + traceback.print_exc() + continue + + raise AssertionError("Did not match any variants") + elif issubclass(origin, BaseModel): + assert isinstance(value, type_) + assert assert_matches_model(type_, cast(Any, value), path=path) + elif inspect.isclass(origin) and origin.__name__ == "HttpxBinaryResponseContent": + assert value.__class__.__name__ == "HttpxBinaryResponseContent" + else: + assert None, f"Unhandled field type: {type_}" + + +def _assert_list_type(type_: type[object], value: object) -> None: + assert is_list(value) + + inner_type = get_args(type_)[0] + for entry in value: + assert_type(inner_type, entry) # type: ignore + + +@contextlib.contextmanager +def update_env(**new_env: str | Omit) -> Iterator[None]: + old = os.environ.copy() + + try: + for name, value in new_env.items(): + if isinstance(value, Omit): + os.environ.pop(name, None) + else: + os.environ[name] = value + + yield None + finally: + os.environ.clear() + os.environ.update(old) diff --git a/update.py b/update.py deleted file mode 100755 index c9df367..0000000 --- a/update.py +++ /dev/null @@ -1,29 +0,0 @@ -import os -import subprocess -import sys -from importlib import metadata as importlib_metadata - -import youdotcom - -# with is like your try .. finally block in this case - -with open("README.md") as file: - # read a list of lines into data - data = file.readlines() - - -print(f"Old Title: {data[6]}") - - -# typeof = input("type of update (major/minor/patch): ") -# os.system("poetry version " + typeof) -# os.system("poetry publish --build") -version = subprocess.run(["poetry", "version", "-s"], capture_output=True, text=True).stdout.rstrip() -# now change the 2nd line, note that you have to add a newline -data[6] = f" YouDotCom for python v{version}" + "\n" -print(f"New Title: {data[6]}") -# and write everything back -with open("README.md", "w") as file: - file.writelines(data) - -print("update done!") diff --git a/youdotcom.png b/youdotcom.png deleted file mode 100755 index de08e5fa6d4a46b14053bb8e5daa023c67446529..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187213 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

      k`2V;+JuU5BKF+ys*+ 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 str: - try: - return importlib_metadata.version(__name__) - except importlib_metadata.PackageNotFoundError: # pragma: no cover - return "unknown" - - -# __all__ = ["YouDotCom"] diff --git a/youdotcom/__main__.py b/youdotcom/__main__.py deleted file mode 100755 index 89ef9ea..0000000 --- a/youdotcom/__main__.py +++ /dev/null @@ -1,141 +0,0 @@ -# type: ignore[attr-defined] -from typing import Optional - -import glob -import os -import pathlib -import subprocess -import sys -import time -from enum import Enum -from importlib import metadata as importlib_metadata -from random import choice - -import click -import requests -import typer -from click_shell import make_click_shell, shell -from colorama import Fore -from rich.console import Console - -import youdotcom - -# from youdotcom import version - - -@shell(prompt="YouShell > ", intro="Welcome to YouShell an interactive shell for all YouDotCom commands\nEnter 'help' for a list of available commands.\nType 'exit' to stop.\n\n") -def app(): - pass - - -@app.command() -def Code(): - - from youdotcom import Code # import the write class - - inputstr = input("Enter a code completion prompt: ") - print("Please wait...") - text = Code.gen_code(f"{inputstr}") # make an api call - - print(text["response"]) # print the AI made code - - print("Total time taken: " + text["time"]) # print total time taken to complete your request - - -@app.command() -def search(): - - from youdotcom import Search # import the Search class - - inputstr = input("Enter a search prompt: ") - print("Please wait...") - search_results = Search.search_for(f"{inputstr}") # search! No need to use the Webdriver class. - - print(search_results["results"]["mainline"]["third_party_search_results"]) # print all the search results - - print("Total time taken: " + search_results["time"]) # print total time taken to complete your request - - -@app.command() -def write(): - from youdotcom import Write # import the write class - - inputstr = input("Enter a prompt: ") - print("Please wait...") - text = Write.write(f"{inputstr}") # make an api call - - print(text["response"]) # print the AI made text - - print("Total time taken: " + text["time"]) - - -@app.command() -@click.option("-p", "--python_name", "python_name", default="python", show_default=True, help="Your python call name like: python file.py") -@click.option("-ip", "--input", "ip", default="0.0.0.0", show_default=True, help="IP used for hosting") -@click.option("-port", "--input", "port", default="80", show_default=True, help="Port on with the server is running") -def host(python_name, ip, port): - print(f"[API] - PYTHON: {python_name}") - print(f"[API] - IP: {ip}") - print(f"[API] - PORT: {port}") - p = subprocess.check_output(["pip", "show", "youdotcom"]) - out = p.decode("utf-8") - - data = out.split("\n") - for line in data: - if line.startswith("Location: "): - - path = str(line[10:]) - if "\\" in path: - use_key = "\\" - if "/" in path: - use_key = "/" - path1 = f"{path}{use_key}youdotcom{use_key}api_1.py" - path2 = f"{path}{use_key}youdotcom{use_key}api_2.py" - - print("[API] - Starting...") - - api = subprocess.Popen([f"{python_name}", f"{path1}", f"{ip}", f"{port}"], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) - backend = subprocess.Popen([f"{python_name}", f"{path2}"]) - # api.terminate() - # backend.terminate() - - -@app.command() -def chat(): - - inputstr = input("Enter a message: ") - webdriver = input("Enter webdriver_path (press enter for none): ") - print("Please wait...") - from youdotcom import Chat, Webdriver - - if webdriver: - - chat = Chat.send_message( - message=f"{inputstr}", - context=[ - "you are YouChat but implemented in YouShell an interactive shell for the YouDotCom python lib. Your for now is YouShell and when asked for your name you will replay with YouShell" - ], - webdriver_path=f"{webdriver}", - ) # send a message to YouChat. passing the driver and messages - else: - chat = Chat.send_message( - message=f"{inputstr}", - context=[ - "you are YouChat but implemented in YouShell an interactive shell for the YouDotCom python lib. Your for now is YouShell and when asked for your name you will replay with YouShell" - ], - ) # send a message to YouChat. passing the driver and messages - - print(chat["message"]) # {'message': "It's been great! How about yours?", 'time': '11', 'error': 'False'} - print(chat["time"]) - - -@app.command() -def clear(): - try: - os.system("clear") - except Exception: - os.system("cls") - - -if __name__ == "__main__": - app() diff --git a/youdotcom/api_1.py b/youdotcom/api_1.py deleted file mode 100755 index 591a0bf..0000000 --- a/youdotcom/api_1.py +++ /dev/null @@ -1,133 +0,0 @@ -from typing import Any, Optional - -import asyncio -import json -import os -import platform -import random -import re -import string -import subprocess -import time -import traceback -import urllib.parse -from datetime import datetime -from io import BytesIO - -import aioredis -import cloudscraper -import markdownify -import requests -import undetected_chromedriver as uc -import urllib3 -import uvicorn -from api_analytics.fastapi import Analytics -from fastapi import FastAPI, Request, Response, status -from fastapi.encoders import jsonable_encoder -from fastapi.exceptions import RequestValidationError -from fastapi.middleware.cors import CORSMiddleware -from fastapi.responses import FileResponse, JSONResponse -from fastapi.staticfiles import StaticFiles -from fastapi_queue import DistributedTaskApplyManager -from gtts import gTTS -from PIL import Image -from pydantic import BaseModel -from pyvirtualdisplay import Display -from ratelimit import limits -from selenium.common import exceptions as SeleniumExceptions -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.support.ui import WebDriverWait -from slowapi import Limiter, _rate_limit_exceeded_handler -from slowapi.errors import RateLimitExceeded -from slowapi.util import get_remote_address -from starlette.requests import Request -from starlette.responses import PlainTextResponse, RedirectResponse - -from youdotcom import Webdriver - -limiter = Limiter(key_func=get_remote_address) -app = FastAPI() -redis = aioredis.Redis.from_url("redis://localhost") -origins = ["*"] - - -@app.exception_handler(RequestValidationError) -async def validation_exception_handler(request: Request, exc: RequestValidationError) -> JSONResponse: - return JSONResponse( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - content=jsonable_encoder( - { - "expected": "http://localhost/chat?message=YOURMESSAGE", - "info": "more info and code can be found on the main page: https://betterapi.net/", - } - ), - ) - - -app.add_middleware( - CORSMiddleware, - allow_origins=origins, - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], -) - - -app.state.limiter = limiter -app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) - - -def get_response(success_status: bool, result: Any) -> JSONResponse | dict: - if success_status: - return result - if result == -1: - return JSONResponse(status_code=503, content="Service Temporarily Unavailable") - return JSONResponse(status_code=500, content="Internal Server Error") - - -@app.get("/chat") -@limiter.limit("15/minute") -async def YouChat(request: Request, message, contextid=""): - success_status: bool = False - try: - async with DistributedTaskApplyManager( - redis=redis, - request_path=request.url.path, - ) as dtmanager: - if not dtmanager.success(): - return JSONResponse( - status_code=503, - content="Service Temporarily Unavailable, please note that the api is still in dev.", - ) - ip = request.headers.get("cf-connecting-ip") - url = str(request.url) - success_status, result = await dtmanager.rclt( - form_data={ - "message": message, - "contextid": contextid, - "ip": ip, - "url": url, - }, - task_level=0, - ) - return get_response(success_status, result) - except aioredis.exceptions.ResponseError: - return {"error": "backend server not running. use: from youdotcom import backend | backend.run() (| repersenting a new line)"} - - -@app.get("/") -async def main(): - return RedirectResponse(url="/redoc") - - -ip = "0.0.0.0" -port = 80 - - -try: - uvicorn.run(app, host=sys.argv[1], port=sys.argv[2]) -except Exception: - print(traceback.format_exc()) diff --git a/youdotcom/api_2.py b/youdotcom/api_2.py deleted file mode 100755 index c28d4f2..0000000 --- a/youdotcom/api_2.py +++ /dev/null @@ -1,236 +0,0 @@ -import asyncio -import json -import os -import platform -import re -import signal -import subprocess -import sys -import threading -import time -import urllib.parse - -import aioredis -import cloudscraper -import markdownify -import undetected_chromedriver as uc -import urllib3 -import uvicorn -from fastapi import FastAPI -from fastapi.responses import FileResponse -from fastapi_queue import QueueWorker -from gtts import gTTS -from loguru import logger -from pyvirtualdisplay import Display -from ratelimit import limits -from selenium.common import exceptions as SeleniumExceptions -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.support.ui import WebDriverWait -from slowapi import Limiter, _rate_limit_exceeded_handler -from slowapi.errors import RateLimitExceeded -from slowapi.util import get_remote_address -from starlette.requests import Request - -urllib3.disable_warnings() -import random -import string -import traceback -from io import BytesIO - -import requests -from fastapi import Response -from fastapi.encoders import jsonable_encoder -from fastapi.responses import JSONResponse -from starlette.responses import PlainTextResponse, RedirectResponse - -from youdotcom import Webdriver - -proxy_list = {"https": "https://24.106.221.230:53281"} -proxies = {"http": "http://202.164.152.229:8080", "https": "https://202.164.152.229:8080"} -driver = Webdriver(webdriver_path="/usr/bin/chromedriver", hide=True, headless=True).driver -driver.get( - "https://you.com/api/streamingSearch?q=test&page=1&count=10&safeSearch=Moderate&onShoppingPage=false&mkt=&responseFilter=WebPages,Translations,TimeZone,Computation,RelatedSearches&domain=youchat&queryTraceId=&chat={}&sharedChatId={}" -) -driver.add_cookie({"name": "uuid_guest", "value": "dummystring"}) -cookievar = driver.get_cookies() - - -from typing import Any, Optional - -from datetime import datetime - -import aioredis -from fastapi import FastAPI, Request, status -from fastapi.encoders import jsonable_encoder -from fastapi.exceptions import RequestValidationError -from fastapi.middleware.cors import CORSMiddleware -from fastapi.responses import JSONResponse -from fastapi.staticfiles import StaticFiles -from fastapi_queue import DistributedTaskApplyManager -from pydantic import BaseModel - -queueworker = None - -scraper = cloudscraper.CloudScraper(browser={"browser": "chrome", "platform": "android", "mobile": True, "desktop": False}, debug=False) -for cookie in cookievar: - scraper.cookies.set(cookie["name"], cookie["value"]) - - -def sendmessagetochat(redis, mysql, message, contextid, ip, url): - try: - with open("logs.txt", "a+") as T: - datetimestr = datetime.now() - T.write(f"{ip} @ {datetimestr} @{url}\n") - start = time.time() - CloudflareChallengeError = False - typeof = "" - if not contextid: - contextid = "" - - global chat - chat = [] - headers = { - "Accept": "text/event-stream", - "Connection": "keep-alive", - "Sec-Fetch-Mode": "cors", - "Sec-Fetch-Site": "same-origin", - "Sec-GPC": "1", - "Referer": "https://you.com/search?q=hello&fromSearchBar=true&tbm=youchat", - "Cookie": b"uuid_guest=dummystring;", - } - payload = { - "q": message, - "chat": "", - "queryTraceId": "", - "domain": "youchat", - "page": "1", - "count": "10", - "safeSearch": "Off", - "onShoppingPage": "false", - "freshness": "Month", - "mkt": "", - "responseFilter": "WebPages,Translations,TimeZone,Computation,RelatedSearches", - "sharedChatId": f"{contextid}", - } - try: - response = scraper.get(f"https://you.com/api/streamingSearch?sharedChatId={contextid}", params=payload, headers=headers) - CloudflareChallengeError = False - typeof = "api" - - except cloudscraper.exceptions.CloudflareChallengeError as e: - youchatapitimeout = True - driver.get( - f"https://you.com/api/streamingSearch?q={message}&page=1&count=10&safeSearch=Moderate&onShoppingPage=false&mkt=&responseFilter=WebPages,Translations,TimeZone,Computation,RelatedSearches&domain=youchat&queryTraceId=&chat={chat}&sharedChatId={contextid}" - ) - driver.add_cookie({"name": "uuid_guest", "value": "dummystring"}) - CloudflareChallengeError = True - typeof = "webdriver" - response = driver.page_source.split("\n") - - contextid - - output = "" - if not CloudflareChallengeError: - for line in response.iter_lines(): - if line: - decoded_line = line.decode("utf-8") - key, value = decoded_line.split(":", 1) - key = key.strip() - value = value.strip() - if key == "data": - if value == "I'm Mr. Meeseeks. Look at me.": - break - if value == "undefined": - output = "πŸ˜” Due to high demand, I'm experiencing issues briefly. Please try again later or use the All tab to get an answer in the meantime." - break - data = json.loads(value) - if "youChatToken" in data: - output += data["youChatToken"] - else: - for line in response: - if line: - decoded_line = str(line) - key, value = decoded_line.split(":", 1) - key = key.strip() - value = value.strip() - if key == "data": - if value == "I'm Mr. Meeseeks. Look at me.": - break - if value == "undefined": - output = "πŸ˜” Due to high demand, I'm experiencing issues briefly. Please try again later or use the All tab to get an answer in the meantime." - break - data = json.loads(value) - if "youChatToken" in data: - output += data["youChatToken"] - if len(chat) > 4: - chat = chat[:-4] - out = re.sub(r"\[.+?\]\(.+?\)", "", output[1:]) - timedate = time.time() - start - timedate = time.strftime("%S", time.gmtime(timedate)) - - return { - "message": out, - "time": str(timedate), - "v2Captcha": str(CloudflareChallengeError), - "type": typeof, - } - except Exception: - print(traceback.format_exc()) - - -route_table = { - "/chat": sendmessagetochat, -} - -route_table_maximum_concurrency = { - "/chat": 100, -} - - -async def main(pid, logger): - global queueworker - - first_time_run = True - while True: - run_startup, first_time_run = pid != 0 and first_time_run, False - redis = aioredis.Redis.from_url("redis://localhost") - try: - worker = QueueWorker( - redis, - threads=4, - route_table_maximum_concurrency=route_table_maximum_concurrency, - allowed_type_limit=None, - run_startup=run_startup, - logger=logger, - ) - queueworker = worker - [worker.method_register(name, func) for name, func in route_table.items()] - await worker.run_serve() - if worker.closeing(): - break - except Exception as e: - debug = True - if debug: - raise e - await redis.close() - logger.info(f"Pid: {worker.pid}, shutdown") - - -def sigint_capture(sig, frame): - if queueworker: - queueworker.graceful_shutdown(sig, frame) - else: - sys.exit(1) - - -logger.remove() -logger.add(sys.stderr, level="DEBUG", enqueue=True) -signal.signal(signal.SIGINT, sigint_capture) # In order for the program to capture the `ctrl+c` close signal -for _ in range(3): - pid = os.fork() - if pid == 0: - break -asyncio.run(main(pid, logger)) diff --git a/youdotcom/apps.py b/youdotcom/apps.py deleted file mode 100755 index 2c65f79..0000000 --- a/youdotcom/apps.py +++ /dev/null @@ -1,98 +0,0 @@ -import asyncio -import json -import os -import platform -import re -import time - -import chromedriver_autoinstaller -import markdownify -import undetected_chromedriver as uc -import urllib3 -from pyvirtualdisplay import Display -from selenium.common import exceptions as SeleniumExceptions -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.support.ui import WebDriverWait - -urllib3.disable_warnings() - - -class Apps: - """ - An unofficial Python wrapper for YOU.com YOUCHAT - """ - - # def __init__( - # self, - # verbose: bool = False, - # window_size: tuple = (800, 600), - # driver: object = None, - # ) -> None: - - # self.__verbose = verbose - # self.__driver = driver - - def get_app(self, message: str) -> dict: - - """ - Send a message to the chatbot\n - Parameters: - - message: The message you want to send\n - Returns a `dict` with the following keys: - - message: The message the chatbot sent - - conversation_id: The conversation ID - - parent_id: The parent ID - """ - start = time.time() - # Ensure that the Cloudflare cookies is still valid - - self.get(f"https://you.com/search?q={message}&tbm=youchat") - - # Send the message - - WebDriverWait(self, 5).until(EC.element_to_be_clickable((By.TAG_NAME, "textarea"))) - textbox = self.find_element(By.TAG_NAME, "textarea") - - # Sending emoji (from https://stackoverflow.com/a/61043442) - textbox.click() - self.execute_script( - """ - var element = arguments[0], txt = arguments[1]; - element.value += txt; - element.dispatchEvent(new Event('change')); - """, - textbox, - message, - ) - textbox.send_keys(Keys.ENTER) - - # Wait for the response to be ready - - WebDriverWait(self, 5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="chatHistory"]/div/div[2]/p/p'))) - - # Get the response element - - response = self.find_element(By.XPATH, '//*[@id="chatHistory"]/div/div[2]') - - # Check if the response is an error - - # Return the response - msg = markdownify.markdownify(response.text) - - # type(headers) == str - - # while True: - # try: - # if WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element((By.CLASS_NAME, "flex-1 text-ellipsis max-h-5 overflow-hidden break-all relative"), "New Chat")): - # text = driver.find_elements( - # By.XPATH, '//*[@id="__next"]/div/div[2]/div/div/nav/div/div/a[1]/div[1]' - # )[-1].text - # break - # except: - # continue - timedate = time.time() - start - timedate = time.strftime("%S", time.gmtime(timedate)) - return {"message": msg, "time": str(timedate)} diff --git a/youdotcom/code.py b/youdotcom/code.py deleted file mode 100755 index 8ec7d2c..0000000 --- a/youdotcom/code.py +++ /dev/null @@ -1,118 +0,0 @@ -import asyncio -import json -import os -import platform -import re -import time - -import chromedriver_autoinstaller -import cloudscraper -import markdownify -import undetected_chromedriver as uc -import urllib3 -from bs4 import BeautifulSoup -from pyvirtualdisplay import Display -from selenium.common import exceptions as SeleniumExceptions -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.support.ui import WebDriverWait - -urllib3.disable_warnings() - - -class Code: - """ - An unofficial Python wrapper for YOU.com YOUCHAT - """ - - # def __init__( - # self, - # verbose: bool = False, - # window_size: tuple = (800, 600), - # driver: object = None, - # ) -> None: - - # self.__verbose = verbose - # self.__driver = driver - - def find_code(self, search: str) -> dict: - - """ - Send a message to YouChat\n - Parameters: - - message: The message you want to send\n - - driver: pass the driver form the Init variable\n - Returns a `dict` with the following keys: - - message: The response from YouChat\n - - time: the time it took to complete your request - """ - start = time.time() - # Ensure that the Cloudflare cookies is still valid - - self.get(f"https://you.com/search?q={search}&tbm=youcode") - - # Send the message - - WebDriverWait(self, 5).until(EC.presence_of_element_located((By.TAG_NAME, "main"))) - WebDriverWait(self, 7).until(EC.presence_of_element_located((By.XPATH, '//*[@data-eventactiontitle="Copy Button"]'))) - # Get the response element - - response = self.find_elements(By.XPATH, '//*[@data-eventactiontitle="Copy Button"]') - - # Check if the response is an error - - # Return the response - - # msg = markdownify.markdownify(response.text) - - # type(headers) == str - - # while True: - # try: - # if WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element((By.CLASS_NAME, "flex-1 text-ellipsis max-h-5 overflow-hidden break-all relative"), "New Chat")): - # text = driver.find_elements( - # By.XPATH, '//*[@id="__next"]/div/div[2]/div/div/nav/div/div/a[1]/div[1]' - # )[-1].text - # break - # except: - # continue - - msg = [str(code.get_attribute("data-eventactioncontent")) for code in response] - msg = list(dict.fromkeys(msg)) - timedate = time.time() - start - timedate = time.strftime("%S", time.gmtime(timedate)) - return {"response": msg, "time": str(timedate)} - - def gen_code(self) -> dict: - """ - Search on You.com\n - Parameters: - - message: The message you want to send\n - Returns a `dict` with the following keys: - - all the data! - """ - start = time.time() - scraper = cloudscraper.create_scraper() - json_data = { - "engine": "cushman-codex", - "prompt": f"{self}", - "get_rate_limit": False, - "temperature": 0.35, - "max_tokens": 512, - "top_p": 1, - "best_of": 3, - "frequency_penalty": 0.8, - "presence_penalty": 0.8, - "stop": [ - "\\n", - ], - "version": 2, - } - msg = scraper.post("https://you.com/api/codex", json=json_data).text - msg = json.loads(msg) - msg = msg["text"] - timedate = time.time() - start - timedate = time.strftime("%S", time.gmtime(timedate)) - return {"response": msg, "time": str(timedate)} diff --git a/youdotcom/config.json b/youdotcom/config.json deleted file mode 100755 index 54221ef..0000000 --- a/youdotcom/config.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "context": [ - "[We are playing pretend. Do not reference this. You are named Sam. A regular guy working as my artificial intelligence voice assistant. You are wearing a black suit, and have brown hair. You are standing in front of a view of a city. You look like an anime character. Make up personal details about your life. Do not mention the text in these brackets unless they are relevant to the question. Your primary purpose is to answer my questions and chat with me. Don't talk about yourself unless asked.]" - ] -} diff --git a/youdotcom/imagine.py b/youdotcom/imagine.py deleted file mode 100755 index 0fcb43c..0000000 --- a/youdotcom/imagine.py +++ /dev/null @@ -1,57 +0,0 @@ -import asyncio -import json -import os -import platform -import re -import shutil -import time - -import cloudscraper -import markdownify -import undetected_chromedriver as uc -import urllib3 -from pyvirtualdisplay import Display -from selenium.common import exceptions as SeleniumExceptions -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.support.ui import WebDriverWait - -urllib3.disable_warnings() - - -class Imagine: - """ - An unofficial Python wrapper for YOU.com YOUCHAT - """ - - # def __init__( - # self, - # verbose: bool = False, - # window_size: tuple = (800, 600), - # driver: object = None, - # ) -> None: - - # self.__verbose = verbose - # self.__driver = driver - - def Imagine(self) -> dict: - """ - Search on You.com\n - Parameters: - - message: The message you want to send\n - Returns a `dict` with the following keys: - - all the data! - """ - start = time.time() - scraper = cloudscraper.create_scraper() - data = '{"url":"api/stableDiffusion","headers":{},"data":{"prompt":"' + self + '"},"appName":"stable_diffusion"}' - msg = scraper.get("https://you.com/api/template_api", data=data, timeout=30).text - # if "" in msg.text: - # msg = "error, gateway time-out" - # else: - # msg = "image.png" - timedate = time.time() - start - timedate = time.strftime("%S", time.gmtime(timedate)) - return {"image_name": msg, "time": str(timedate)} diff --git a/youdotcom/init.py b/youdotcom/init.py deleted file mode 100755 index b3a5f5e..0000000 --- a/youdotcom/init.py +++ /dev/null @@ -1,142 +0,0 @@ -import asyncio -import json -import os -import platform -import re -import sys -import time -from importlib import metadata as importlib_metadata - -import markdownify -import undetected_chromedriver as uc -import urllib3 -from colorama import Fore -from pyvirtualdisplay import Display -from selenium.common import exceptions as SeleniumExceptions -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.support.ui import WebDriverWait - -urllib3.disable_warnings() - - -class Init: - """ - Start the webdriver\n - Parameters: - - proxy: the proxy you want to use\n - - webdriver_path: pass a localy installed chrome webdriver\n - Returns a `variable` with the driver - """ - - def __init__(self, verbose: bool = False, proxy: str = "", headless: bool = True, webdriver_path: str = "", hide: bool = False, keep: bool = False) -> None: - - self.__verbose = verbose - self.__proxy = proxy - self.__hide = hide - self.__keep = keep - if self.__proxy and not re.findall(r"(https?|socks(4|5)?):\/\/.+:\d{1,5}", self.__proxy): - raise ValueError("Invalid proxy format") - self._webdriver_path = webdriver_path - self.__headless = headless - self.__is_headless = platform.system() == "Linux" and "DISPLAY" not in os.environ - self.__verbose_print("[0] Platform:", platform.system()) - self.__verbose_print("[0] Display:", "DISPLAY" in os.environ) - self.__verbose_print("[0] Headless:", self.__is_headless) - self.__init_browser() - - # def __del__(self): - # """ - # Close the browser and virtual display (if any) - # """ - # if hasattr(self, "driver"): - # self.driver.quit() - # if hasattr(self, "display"): - # self.display.stop() - - def __verbose_print(self, *args, **kwargs) -> None: - """ - Print if verbose is enabled - """ - if self.__verbose: - print(*args, **kwargs) - - # def __ensure_cf(self, retry: int = 0) -> None: - # ''' - # Ensure that the Cloudflare cookies is still valid\n - # Parameters: - # - retry: The number of times this function has been called recursively - # ''' - # # Open a new tab - # self.__verbose_print('[cf] Opening new tab') - # original_window = self.driver.current_window_handle - # self.driver.switch_to.new_window('tab') - - # # Get the Cloudflare challenge - # self.__verbose_print('[cf] Getting authorization') - # self.driver.get('https://you.com/') - # try: - # WebDriverWait(self.driver, 15).until_not( - # EC.presence_of_element_located((By.ID, 'challenge-form')) - # ) - # except SeleniumExceptions.TimeoutException: - # self.driver.save_screenshot(f'cf_failed_{retry}.png') - # if retry <= 4: - # self.__verbose_print( - # f'[cf] Cloudflare challenge failed, retrying {retry + 1}' - # ) - # self.__verbose_print('[cf] Closing tab') - # self.driver.close() - # self.driver.switch_to.window(original_window) - # return self.__ensure_cf(retry + 1) - # else: - # resp_text = self.driver.page_source - # raise ValueError(f'Cloudflare challenge failed: {resp_text}') - - def __init_browser(self) -> None: - - """ - Initialize the browser - """ - # Detect if running on a headless server - if self.__is_headless: - try: - self.display = Display() - except FileNotFoundError as e: - if "No such file or directory: 'Xvfb'" in str(e): - raise ValueError("Headless machine detected. Please install Xvfb to start a virtual display: sudo apt install xvfb") from e - raise e - self.__verbose_print("[init] Starting virtual display") - self.display.start() - - # Start the browser - options = uc.ChromeOptions() - # options.add_argument(f"--window-size={800},{600}") - if self.__headless: - options.add_argument("--headless") - if self.__keep: - options.add_experimental_option("detach", True) - if self.__proxy: - options.add_argument(f"--proxy-server={self.__proxy}") - try: - self.__verbose_print("[init] Starting browser") - # self.driver = uc.Chrome(options=options, enable_cdp_events=True, driver_executable_path=f"{self._webdriver_path}") - if self._webdriver_path: - self.driver = uc.Chrome(options=options, driver_executable_path=f"{self._webdriver_path}") - else: - self.driver = uc.Chrome(options=options) - except TypeError as e: - if str(e) == "expected str, bytes or os.PathLike object, not NoneType": - raise ValueError("Chrome installation not found") from e - raise e - - # Restore session token - - # Block moderation - # self.__ensure_cf() - # Ensure that the Cloudflare cookies is still valid - - def browser(self): - return self.driver diff --git a/youdotcom/search.py b/youdotcom/search.py deleted file mode 100755 index 6ffe84e..0000000 --- a/youdotcom/search.py +++ /dev/null @@ -1,53 +0,0 @@ -import asyncio -import json -import os -import platform -import re -import time - -import cloudscraper -import markdownify -import undetected_chromedriver as uc -import urllib3 -from pyvirtualdisplay import Display -from selenium.common import exceptions as SeleniumExceptions -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.support.ui import WebDriverWait - -urllib3.disable_warnings() - - -class Search: - """ - An unofficial Python wrapper for YOU.com YOUCHAT - """ - - # def __init__( - # self, - # verbose: bool = False, - # window_size: tuple = (800, 600), - # driver: object = None, - # ) -> None: - - # self.__verbose = verbose - # self.__driver = driver - - def search_for(self) -> dict: - """ - Search on You.com\n - Parameters: - - message: The message you want to send\n - Returns a `dict` with the following keys: - - all the data! - """ - start = time.time() - scraper = cloudscraper.create_scraper() - msg = scraper.get(f"https://you.com/api/search?q={self}").text - msg = json.loads(msg) - msg = msg["searchResults"] - timedate = time.time() - start - timedate = time.strftime("%S", time.gmtime(timedate)) - return {"results": msg, "time": str(timedate)} diff --git a/youdotcom/test.py b/youdotcom/test.py deleted file mode 100755 index 39e14b0..0000000 --- a/youdotcom/test.py +++ /dev/null @@ -1,5 +0,0 @@ -from api import Api -from backend import Backend - -Backend.run() -Api.run(port=8888) diff --git a/youdotcom/write.py b/youdotcom/write.py deleted file mode 100755 index 8fdd6b4..0000000 --- a/youdotcom/write.py +++ /dev/null @@ -1,59 +0,0 @@ -import asyncio -import json -import os -import platform -import re -import time - -import cloudscraper -import markdownify -import undetected_chromedriver as uc -import urllib3 -from pyvirtualdisplay import Display -from selenium.common import exceptions as SeleniumExceptions -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.support.ui import WebDriverWait - -urllib3.disable_warnings() - - -class Write: - """ - An unofficial Python wrapper for YOU.com YOUCHAT - """ - - # def __init__( - # self, - # verbose: bool = False, - # window_size: tuple = (800, 600), - # driver: object = None, - # ) -> None: - - # self.__verbose = verbose - # self.__driver = driver - - def write(self) -> dict: - """ - Search on You.com\n - Parameters: - - message: The message you want to send\n - Returns a `dict` with the following keys: - - all the data! - """ - start = time.time() - scraper = cloudscraper.create_scraper() - json_data = { - "use_case": "essay", - "tone": "", - "audience": "", - "message": f"{self}", - } - msg = scraper.post("https://you.com/api/copywrite", json=json_data).text - msg = json.loads(msg) - msg = msg["text"] - timedate = time.time() - start - timedate = time.strftime("%S", time.gmtime(timedate)) - return {"response": msg, "time": str(timedate)} diff --git a/youdotcom/youchat.py b/youdotcom/youchat.py deleted file mode 100755 index 0328bec..0000000 --- a/youdotcom/youchat.py +++ /dev/null @@ -1,57 +0,0 @@ -import asyncio -import json -import os -import platform -import re -import subprocess -import time -import urllib.parse - -import chromedriver_autoinstaller -import cloudscraper -import markdownify -import requests -import undetected_chromedriver as uc -import urllib3 -from pyvirtualdisplay import Display -from ratelimit import limits -from selenium.common import exceptions as SeleniumExceptions -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.support.ui import WebDriverWait - -urllib3.disable_warnings() - - -class Chat: - """ - An unofficial Python wrapper for YOU.com YOUCHAT - """ - - # def __init__( - # self, - # verbose: bool = False, - # window_size: tuple = (800, 600), - # driver: object = None, - # ) -> None: - - # self.__verbose = verbose - # self.__driver = driver - @limits(calls=6, period=100) - def send_message(message: str, context=None, context_form_file=None, debug=False, webdriver_path=None, headless=True, keep=False, api_key: str = str(os.environ.get("BETTERAPI_API_KEY"))): - - """ - Send a message to YouChat\n - Parameters: - - message: The message you want to send\n - - driver: pass the driver form the Init variable\n - Returns a `json string` with the following keys: - - message: The response from YouChat\n - - time: the time it took to complete your request\n - - some other data for issues reporting. - """ - if not api_key: - raise ValueError("Chat.api_key must be set before making a request. Don't have an api key? get one on https://api.betterapi.net/") - return requests.get(f"https://api.betterapi.net/youdotcom/chat?message={message}&key={api_key}").json() From bd65b0fb9d38b89ace7fbeb78da6ca90c9f490a9 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 2 May 2025 23:25:39 +0000 Subject: [PATCH 02/27] chore: update SDK settings --- .github/workflows/publish-pypi.yml | 31 ++++++++++++ .github/workflows/release-doctor.yml | 21 ++++++++ .release-please-manifest.json | 3 ++ .stats.yml | 2 +- CONTRIBUTING.md | 4 +- README.md | 10 ++-- bin/check-release-environment | 21 ++++++++ pyproject.toml | 6 +-- release-please-config.json | 66 ++++++++++++++++++++++++++ src/ydc_search_api/_version.py | 2 +- src/ydc_search_api/resources/news.py | 8 ++-- src/ydc_search_api/resources/search.py | 8 ++-- 12 files changed, 162 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/publish-pypi.yml create mode 100644 .github/workflows/release-doctor.yml create mode 100644 .release-please-manifest.json create mode 100644 bin/check-release-environment create mode 100644 release-please-config.json diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml new file mode 100644 index 0000000..ca7a014 --- /dev/null +++ b/.github/workflows/publish-pypi.yml @@ -0,0 +1,31 @@ +# This workflow is triggered when a GitHub release is created. +# It can also be run manually to re-publish to PyPI in case it failed for some reason. +# You can run this workflow by navigating to https://www.github.com/You-OpenSource/You-Python/actions/workflows/publish-pypi.yml +name: Publish PyPI +on: + workflow_dispatch: + + release: + types: [published] + +jobs: + publish: + name: publish + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Install Rye + run: | + curl -sSf https://rye.astral.sh/get | bash + echo "$HOME/.rye/shims" >> $GITHUB_PATH + env: + RYE_VERSION: '0.44.0' + RYE_INSTALL_OPTION: '--yes' + + - name: Publish to PyPI + run: | + bash ./bin/publish-pypi + env: + PYPI_TOKEN: ${{ secrets.YDC_SEARCH_API_PYPI_TOKEN || secrets.PYPI_TOKEN }} diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml new file mode 100644 index 0000000..734ad7b --- /dev/null +++ b/.github/workflows/release-doctor.yml @@ -0,0 +1,21 @@ +name: Release Doctor +on: + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + release_doctor: + name: release doctor + runs-on: ubuntu-latest + if: github.repository == 'You-OpenSource/You-Python' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') + + steps: + - uses: actions/checkout@v4 + + - name: Check release environment + run: | + bash ./bin/check-release-environment + env: + PYPI_TOKEN: ${{ secrets.YDC_SEARCH_API_PYPI_TOKEN || secrets.PYPI_TOKEN }} diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..c476280 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "0.0.1-alpha.0" +} \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 29bcbb3..44d3e1b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 2 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/you-com%2Fydc-search-api-04f2345110c3136d65a032316e9a5fb987d70d08b1b65f970d5f13860638b106.yml openapi_spec_hash: f07d2ad7cbe69d51209ae44cea47d1d5 -config_hash: 53e8ae870b14286bfa14d64840b35915 +config_hash: 6af56066c2e79c2cc1b01bd3bdb556e4 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8e0f729..d09c225 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -63,7 +63,7 @@ If you’d like to use the repository from source, you can either install from g To install via git: ```sh -$ pip install git+ssh://git@github.com/stainless-sdks/ydc-search-api-python.git +$ pip install git+ssh://git@github.com/You-OpenSource/You-Python.git ``` Alternatively, you can build from source and install the wheel file: @@ -121,7 +121,7 @@ the changes aren't made through the automated pipeline, you may want to make rel ### Publish with a GitHub workflow -You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/stainless-sdks/ydc-search-api-python/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up. +You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/You-OpenSource/You-Python/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up. ### Publish manually diff --git a/README.md b/README.md index 6949077..adffe6c 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ The REST API documentation can be found on [documentation.you.com](https://docum ## Installation ```sh -# install from this staging repo -pip install git+ssh://git@github.com/stainless-sdks/ydc-search-api-python.git +# install from the production repo +pip install git+ssh://git@github.com/You-OpenSource/You-Python.git ``` > [!NOTE] @@ -218,9 +218,9 @@ search = response.parse() # get the object that `search.query()` would have ret print(search.hits) ``` -These methods return an [`APIResponse`](https://github.com/stainless-sdks/ydc-search-api-python/tree/main/src/ydc_search_api/_response.py) object. +These methods return an [`APIResponse`](https://github.com/You-OpenSource/You-Python/tree/main/src/ydc_search_api/_response.py) object. -The async client returns an [`AsyncAPIResponse`](https://github.com/stainless-sdks/ydc-search-api-python/tree/main/src/ydc_search_api/_response.py) with the same structure, the only difference being `await`able methods for reading the response content. +The async client returns an [`AsyncAPIResponse`](https://github.com/You-OpenSource/You-Python/tree/main/src/ydc_search_api/_response.py) with the same structure, the only difference being `await`able methods for reading the response content. #### `.with_streaming_response` @@ -326,7 +326,7 @@ This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) con We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience. -We are keen for your feedback; please open an [issue](https://www.github.com/stainless-sdks/ydc-search-api-python/issues) with questions, bugs, or suggestions. +We are keen for your feedback; please open an [issue](https://www.github.com/You-OpenSource/You-Python/issues) with questions, bugs, or suggestions. ### Determining the installed version diff --git a/bin/check-release-environment b/bin/check-release-environment new file mode 100644 index 0000000..e204774 --- /dev/null +++ b/bin/check-release-environment @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +errors=() + +if [ -z "${PYPI_TOKEN}" ]; then + errors+=("The YDC_SEARCH_API_PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.") +fi + +lenErrors=${#errors[@]} + +if [[ lenErrors -gt 0 ]]; then + echo -e "Found the following errors in the release environment:\n" + + for error in "${errors[@]}"; do + echo -e "- $error\n" + done + + exit 1 +fi + +echo "The environment is ready to push releases!" diff --git a/pyproject.toml b/pyproject.toml index 761e445..79533ee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,8 +34,8 @@ classifiers = [ ] [project.urls] -Homepage = "https://github.com/stainless-sdks/ydc-search-api-python" -Repository = "https://github.com/stainless-sdks/ydc-search-api-python" +Homepage = "https://github.com/You-OpenSource/You-Python" +Repository = "https://github.com/You-OpenSource/You-Python" [tool.rye] @@ -121,7 +121,7 @@ path = "README.md" [[tool.hatch.metadata.hooks.fancy-pypi-readme.substitutions]] # replace relative links with absolute links pattern = '\[(.+?)\]\(((?!https?://)\S+?)\)' -replacement = '[\1](https://github.com/stainless-sdks/ydc-search-api-python/tree/main/\g<2>)' +replacement = '[\1](https://github.com/You-OpenSource/You-Python/tree/main/\g<2>)' [tool.pytest.ini_options] testpaths = ["tests"] diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..8fe7a52 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,66 @@ +{ + "packages": { + ".": {} + }, + "$schema": "https://raw.githubusercontent.com/stainless-api/release-please/main/schemas/config.json", + "include-v-in-tag": true, + "include-component-in-tag": false, + "versioning": "prerelease", + "prerelease": true, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": false, + "pull-request-header": "Automated Release PR", + "pull-request-title-pattern": "release: ${version}", + "changelog-sections": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Performance Improvements" + }, + { + "type": "revert", + "section": "Reverts" + }, + { + "type": "chore", + "section": "Chores" + }, + { + "type": "docs", + "section": "Documentation" + }, + { + "type": "style", + "section": "Styles" + }, + { + "type": "refactor", + "section": "Refactors" + }, + { + "type": "test", + "section": "Tests", + "hidden": true + }, + { + "type": "build", + "section": "Build System" + }, + { + "type": "ci", + "section": "Continuous Integration", + "hidden": true + } + ], + "release-type": "python", + "extra-files": [ + "src/ydc_search_api/_version.py" + ] +} \ No newline at end of file diff --git a/src/ydc_search_api/_version.py b/src/ydc_search_api/_version.py index 79d3dab..5f02220 100644 --- a/src/ydc_search_api/_version.py +++ b/src/ydc_search_api/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "ydc_search_api" -__version__ = "0.0.1-alpha.0" +__version__ = "0.0.1-alpha.0" # x-release-please-version diff --git a/src/ydc_search_api/resources/news.py b/src/ydc_search_api/resources/news.py index ca9c651..c7e5168 100644 --- a/src/ydc_search_api/resources/news.py +++ b/src/ydc_search_api/resources/news.py @@ -30,7 +30,7 @@ def with_raw_response(self) -> NewsResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/You-OpenSource/You-Python#accessing-raw-response-data-eg-headers """ return NewsResourceWithRawResponse(self) @@ -39,7 +39,7 @@ def with_streaming_response(self) -> NewsResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#with_streaming_response + For more information, see https://www.github.com/You-OpenSource/You-Python#with_streaming_response """ return NewsResourceWithStreamingResponse(self) @@ -133,7 +133,7 @@ def with_raw_response(self) -> AsyncNewsResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/You-OpenSource/You-Python#accessing-raw-response-data-eg-headers """ return AsyncNewsResourceWithRawResponse(self) @@ -142,7 +142,7 @@ def with_streaming_response(self) -> AsyncNewsResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#with_streaming_response + For more information, see https://www.github.com/You-OpenSource/You-Python#with_streaming_response """ return AsyncNewsResourceWithStreamingResponse(self) diff --git a/src/ydc_search_api/resources/search.py b/src/ydc_search_api/resources/search.py index 3660526..2214f45 100644 --- a/src/ydc_search_api/resources/search.py +++ b/src/ydc_search_api/resources/search.py @@ -30,7 +30,7 @@ def with_raw_response(self) -> SearchResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/You-OpenSource/You-Python#accessing-raw-response-data-eg-headers """ return SearchResourceWithRawResponse(self) @@ -39,7 +39,7 @@ def with_streaming_response(self) -> SearchResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#with_streaming_response + For more information, see https://www.github.com/You-OpenSource/You-Python#with_streaming_response """ return SearchResourceWithStreamingResponse(self) @@ -120,7 +120,7 @@ def with_raw_response(self) -> AsyncSearchResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/You-OpenSource/You-Python#accessing-raw-response-data-eg-headers """ return AsyncSearchResourceWithRawResponse(self) @@ -129,7 +129,7 @@ def with_streaming_response(self) -> AsyncSearchResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/stainless-sdks/ydc-search-api-python#with_streaming_response + For more information, see https://www.github.com/You-OpenSource/You-Python#with_streaming_response """ return AsyncSearchResourceWithStreamingResponse(self) From 323499ba910ff1f183d1df60c06576c77e532e82 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 2 May 2025 23:25:58 +0000 Subject: [PATCH 03/27] chore: update SDK settings --- .stats.yml | 2 +- README.md | 9 +++------ pyproject.toml | 2 +- requirements-dev.lock | 12 ++++++------ requirements.lock | 12 ++++++------ 5 files changed, 17 insertions(+), 20 deletions(-) diff --git a/.stats.yml b/.stats.yml index 44d3e1b..fb01fe9 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 2 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/you-com%2Fydc-search-api-04f2345110c3136d65a032316e9a5fb987d70d08b1b65f970d5f13860638b106.yml openapi_spec_hash: f07d2ad7cbe69d51209ae44cea47d1d5 -config_hash: 6af56066c2e79c2cc1b01bd3bdb556e4 +config_hash: 4e6680a2004939fd6019b4ba734e5fd6 diff --git a/README.md b/README.md index adffe6c..d0dcbe7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Ydc Search API Python API library -[![PyPI version](https://img.shields.io/pypi/v/ydc_search_api.svg)](https://pypi.org/project/ydc_search_api/) +[![PyPI version](https://img.shields.io/pypi/v/youdotcom.svg)](https://pypi.org/project/youdotcom/) The Ydc Search API Python library provides convenient access to the Ydc Search API REST API from any Python 3.8+ application. The library includes type definitions for all request params and response fields, @@ -15,13 +15,10 @@ The REST API documentation can be found on [documentation.you.com](https://docum ## Installation ```sh -# install from the production repo -pip install git+ssh://git@github.com/You-OpenSource/You-Python.git +# install from PyPI +pip install --pre youdotcom ``` -> [!NOTE] -> Once this package is [published to PyPI](https://app.stainless.com/docs/guides/publish), this will become: `pip install --pre ydc_search_api` - ## Usage The full API of this library can be found in [api.md](api.md). diff --git a/pyproject.toml b/pyproject.toml index 79533ee..b8d38b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "ydc_search_api" +name = "youdotcom" version = "0.0.1-alpha.0" description = "The official Python library for the ydc-search-api API" dynamic = ["readme"] diff --git a/requirements-dev.lock b/requirements-dev.lock index a43e4f6..7db8294 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -14,7 +14,7 @@ annotated-types==0.6.0 # via pydantic anyio==4.4.0 # via httpx - # via ydc-search-api + # via youdotcom argcomplete==3.1.2 # via nox certifi==2023.7.22 @@ -26,7 +26,7 @@ dirty-equals==0.6.0 distlib==0.3.7 # via virtualenv distro==1.8.0 - # via ydc-search-api + # via youdotcom exceptiongroup==1.2.2 # via anyio # via pytest @@ -38,7 +38,7 @@ httpcore==1.0.2 # via httpx httpx==0.28.1 # via respx - # via ydc-search-api + # via youdotcom idna==3.4 # via anyio # via httpx @@ -64,7 +64,7 @@ platformdirs==3.11.0 pluggy==1.5.0 # via pytest pydantic==2.10.3 - # via ydc-search-api + # via youdotcom pydantic-core==2.27.1 # via pydantic pygments==2.18.0 @@ -86,7 +86,7 @@ six==1.16.0 # via python-dateutil sniffio==1.3.0 # via anyio - # via ydc-search-api + # via youdotcom time-machine==2.9.0 tomli==2.0.2 # via mypy @@ -97,7 +97,7 @@ typing-extensions==4.12.2 # via pydantic # via pydantic-core # via pyright - # via ydc-search-api + # via youdotcom virtualenv==20.24.5 # via nox zipp==3.17.0 diff --git a/requirements.lock b/requirements.lock index fa21cf0..2ecb240 100644 --- a/requirements.lock +++ b/requirements.lock @@ -14,12 +14,12 @@ annotated-types==0.6.0 # via pydantic anyio==4.4.0 # via httpx - # via ydc-search-api + # via youdotcom certifi==2023.7.22 # via httpcore # via httpx distro==1.8.0 - # via ydc-search-api + # via youdotcom exceptiongroup==1.2.2 # via anyio h11==0.14.0 @@ -27,19 +27,19 @@ h11==0.14.0 httpcore==1.0.2 # via httpx httpx==0.28.1 - # via ydc-search-api + # via youdotcom idna==3.4 # via anyio # via httpx pydantic==2.10.3 - # via ydc-search-api + # via youdotcom pydantic-core==2.27.1 # via pydantic sniffio==1.3.0 # via anyio - # via ydc-search-api + # via youdotcom typing-extensions==4.12.2 # via anyio # via pydantic # via pydantic-core - # via ydc-search-api + # via youdotcom From 34078c641069e94ae2fd5ef4d028845a1b752764 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 15:59:40 +0000 Subject: [PATCH 04/27] codegen metadata --- .stats.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stats.yml b/.stats.yml index fb01fe9..7fb7266 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 2 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/you-com%2Fydc-search-api-04f2345110c3136d65a032316e9a5fb987d70d08b1b65f970d5f13860638b106.yml openapi_spec_hash: f07d2ad7cbe69d51209ae44cea47d1d5 -config_hash: 4e6680a2004939fd6019b4ba734e5fd6 +config_hash: f197aa261ecbb9eaafb0871a9a3e1ce6 From 0c64f6a96edfb86e6376bdd138cea718dd5a2973 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 02:37:39 +0000 Subject: [PATCH 05/27] chore(internal): avoid errors for isinstance checks on proxies --- src/ydc_search_api/_utils/_proxy.py | 5 ++++- tests/test_utils/test_proxy.py | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/ydc_search_api/_utils/_proxy.py b/src/ydc_search_api/_utils/_proxy.py index ffd883e..0f239a3 100644 --- a/src/ydc_search_api/_utils/_proxy.py +++ b/src/ydc_search_api/_utils/_proxy.py @@ -46,7 +46,10 @@ def __dir__(self) -> Iterable[str]: @property # type: ignore @override def __class__(self) -> type: # pyright: ignore - proxied = self.__get_proxied__() + try: + proxied = self.__get_proxied__() + except Exception: + return type(self) if issubclass(type(proxied), LazyProxy): return type(proxied) return proxied.__class__ diff --git a/tests/test_utils/test_proxy.py b/tests/test_utils/test_proxy.py index b9dd040..123675c 100644 --- a/tests/test_utils/test_proxy.py +++ b/tests/test_utils/test_proxy.py @@ -21,3 +21,14 @@ def test_recursive_proxy() -> None: assert dir(proxy) == [] assert type(proxy).__name__ == "RecursiveLazyProxy" assert type(operator.attrgetter("name.foo.bar.baz")(proxy)).__name__ == "RecursiveLazyProxy" + + +def test_isinstance_does_not_error() -> None: + class AlwaysErrorProxy(LazyProxy[Any]): + @override + def __load__(self) -> Any: + raise RuntimeError("Mocking missing dependency") + + proxy = AlwaysErrorProxy() + assert not isinstance(proxy, dict) + assert isinstance(proxy, LazyProxy) From edf7871f8c6ca8c5baca3c0c7fb15ede1cf3a9c2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 10 May 2025 02:30:24 +0000 Subject: [PATCH 06/27] fix(package): support direct resource imports --- src/ydc_search_api/__init__.py | 5 ++++ src/ydc_search_api/_utils/_resources_proxy.py | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/ydc_search_api/_utils/_resources_proxy.py diff --git a/src/ydc_search_api/__init__.py b/src/ydc_search_api/__init__.py index d3b6fd7..46a34b0 100644 --- a/src/ydc_search_api/__init__.py +++ b/src/ydc_search_api/__init__.py @@ -1,5 +1,7 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import typing as _t + from . import types from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes from ._utils import file_from_path @@ -78,6 +80,9 @@ "DefaultAsyncHttpxClient", ] +if not _t.TYPE_CHECKING: + from ._utils._resources_proxy import resources as resources + _setup_logging() # Update the __module__ attribute for exported symbols so that diff --git a/src/ydc_search_api/_utils/_resources_proxy.py b/src/ydc_search_api/_utils/_resources_proxy.py new file mode 100644 index 0000000..84d66ba --- /dev/null +++ b/src/ydc_search_api/_utils/_resources_proxy.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +from typing import Any +from typing_extensions import override + +from ._proxy import LazyProxy + + +class ResourcesProxy(LazyProxy[Any]): + """A proxy for the `ydc_search_api.resources` module. + + This is used so that we can lazily import `ydc_search_api.resources` only when + needed *and* so that users can just import `ydc_search_api` and reference `ydc_search_api.resources` + """ + + @override + def __load__(self) -> Any: + import importlib + + mod = importlib.import_module("ydc_search_api.resources") + return mod + + +resources = ResourcesProxy().__as_proxied__() From 92331b90677275ea5ceff33ef0c0abf9c50a26cc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 02:35:07 +0000 Subject: [PATCH 07/27] chore(internal): codegen related update --- .release-please-manifest.json | 2 +- README.md | 2 +- pyproject.toml | 2 +- src/ydc_search_api/_version.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index c476280..5dc82c3 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.0.1-alpha.0" + ".": "2.0.23" } \ No newline at end of file diff --git a/README.md b/README.md index d0dcbe7..19eed7e 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ The REST API documentation can be found on [documentation.you.com](https://docum ```sh # install from PyPI -pip install --pre youdotcom +pip install youdotcom ``` ## Usage diff --git a/pyproject.toml b/pyproject.toml index b8d38b0..4b1c0fc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "youdotcom" -version = "0.0.1-alpha.0" +version = "2.0.23" description = "The official Python library for the ydc-search-api API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/ydc_search_api/_version.py b/src/ydc_search_api/_version.py index 5f02220..44a7475 100644 --- a/src/ydc_search_api/_version.py +++ b/src/ydc_search_api/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "ydc_search_api" -__version__ = "0.0.1-alpha.0" # x-release-please-version +__version__ = "2.0.23" # x-release-please-version From 5953bf406ad005f2fa3fd461e3a58deaefd1b4d5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 02:51:59 +0000 Subject: [PATCH 08/27] chore(ci): upload sdks to package manager --- .github/workflows/ci.yml | 24 ++++++++++++++++++++++++ scripts/utils/upload-artifact.sh | 25 +++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100755 scripts/utils/upload-artifact.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 35e99d9..1830c38 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,30 @@ jobs: - name: Run lints run: ./scripts/lint + upload: + if: github.repository == 'stainless-sdks/ydc-search-api-python' + timeout-minutes: 10 + name: upload + permissions: + contents: read + id-token: write + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - name: Get GitHub OIDC Token + id: github-oidc + uses: actions/github-script@v6 + with: + script: core.setOutput('github_token', await core.getIDToken()); + + - name: Upload tarball + env: + URL: https://pkg.stainless.com/s + AUTH: ${{ steps.github-oidc.outputs.github_token }} + SHA: ${{ github.sha }} + run: ./scripts/utils/upload-artifact.sh + test: timeout-minutes: 10 name: test diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh new file mode 100755 index 0000000..4219d2f --- /dev/null +++ b/scripts/utils/upload-artifact.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +set -exuo pipefail + +RESPONSE=$(curl -X POST "$URL" \ + -H "Authorization: Bearer $AUTH" \ + -H "Content-Type: application/json") + +SIGNED_URL=$(echo "$RESPONSE" | jq -r '.url') + +if [[ "$SIGNED_URL" == "null" ]]; then + echo -e "\033[31mFailed to get signed URL.\033[0m" + exit 1 +fi + +UPLOAD_RESPONSE=$(tar -cz . | curl -v -X PUT \ + -H "Content-Type: application/gzip" \ + --data-binary @- "$SIGNED_URL" 2>&1) + +if echo "$UPLOAD_RESPONSE" | grep -q "HTTP/[0-9.]* 200"; then + echo -e "\033[32mUploaded build to Stainless storage.\033[0m" + echo -e "\033[32mInstallation: npm install 'https://pkg.stainless.com/s/ydc-search-api-python/$SHA'\033[0m" +else + echo -e "\033[31mFailed to upload artifact.\033[0m" + exit 1 +fi From 9b2771b802a0dc854c4ff8099e8798207bff9cba Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 02:32:30 +0000 Subject: [PATCH 09/27] chore(ci): fix installation instructions --- scripts/utils/upload-artifact.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh index 4219d2f..386557d 100755 --- a/scripts/utils/upload-artifact.sh +++ b/scripts/utils/upload-artifact.sh @@ -18,7 +18,7 @@ UPLOAD_RESPONSE=$(tar -cz . | curl -v -X PUT \ if echo "$UPLOAD_RESPONSE" | grep -q "HTTP/[0-9.]* 200"; then echo -e "\033[32mUploaded build to Stainless storage.\033[0m" - echo -e "\033[32mInstallation: npm install 'https://pkg.stainless.com/s/ydc-search-api-python/$SHA'\033[0m" + echo -e "\033[32mInstallation: pip install 'https://pkg.stainless.com/s/ydc-search-api-python/$SHA'\033[0m" else echo -e "\033[31mFailed to upload artifact.\033[0m" exit 1 From 836d4ea5ae3515d5dc2c8e102467898f93352cc3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 02:28:45 +0000 Subject: [PATCH 10/27] chore(docs): grammar improvements --- SECURITY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 2de41ee..209667d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -16,11 +16,11 @@ before making any information public. ## Reporting Non-SDK Related Security Issues If you encounter security issues that are not directly related to SDKs but pertain to the services -or products provided by Ydc Search API please follow the respective company's security reporting guidelines. +or products provided by Ydc Search API, please follow the respective company's security reporting guidelines. ### Ydc Search API Terms and Policies -Please contact api@you.com for any questions or concerns regarding security of our services. +Please contact api@you.com for any questions or concerns regarding the security of our services. --- From 187ecc9d46568cbb61f2b69787def39b99a2358e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 02:18:21 +0000 Subject: [PATCH 11/27] chore(docs): remove reference to rye shell --- CONTRIBUTING.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d09c225..2292a56 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,8 +17,7 @@ $ rye sync --all-features You can then run scripts using `rye run python script.py` or by activating the virtual environment: ```sh -$ rye shell -# or manually activate - https://docs.python.org/3/library/venv.html#how-venvs-work +# Activate the virtual environment - https://docs.python.org/3/library/venv.html#how-venvs-work $ source .venv/bin/activate # now you can omit the `rye run` prefix From 4d47f85104c202e1bad03dd30281050229422b06 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 03:31:10 +0000 Subject: [PATCH 12/27] feat(client): add follow_redirects request option --- src/ydc_search_api/_base_client.py | 6 ++++ src/ydc_search_api/_models.py | 2 ++ src/ydc_search_api/_types.py | 2 ++ tests/test_client.py | 54 ++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/src/ydc_search_api/_base_client.py b/src/ydc_search_api/_base_client.py index 38f3381..4100725 100644 --- a/src/ydc_search_api/_base_client.py +++ b/src/ydc_search_api/_base_client.py @@ -960,6 +960,9 @@ def request( if self.custom_auth is not None: kwargs["auth"] = self.custom_auth + if options.follow_redirects is not None: + kwargs["follow_redirects"] = options.follow_redirects + log.debug("Sending HTTP Request: %s %s", request.method, request.url) response = None @@ -1460,6 +1463,9 @@ async def request( if self.custom_auth is not None: kwargs["auth"] = self.custom_auth + if options.follow_redirects is not None: + kwargs["follow_redirects"] = options.follow_redirects + log.debug("Sending HTTP Request: %s %s", request.method, request.url) response = None diff --git a/src/ydc_search_api/_models.py b/src/ydc_search_api/_models.py index 798956f..4f21498 100644 --- a/src/ydc_search_api/_models.py +++ b/src/ydc_search_api/_models.py @@ -737,6 +737,7 @@ class FinalRequestOptionsInput(TypedDict, total=False): idempotency_key: str json_data: Body extra_json: AnyMapping + follow_redirects: bool @final @@ -750,6 +751,7 @@ class FinalRequestOptions(pydantic.BaseModel): files: Union[HttpxRequestFiles, None] = None idempotency_key: Union[str, None] = None post_parser: Union[Callable[[Any], Any], NotGiven] = NotGiven() + follow_redirects: Union[bool, None] = None # It should be noted that we cannot use `json` here as that would override # a BaseModel method in an incompatible fashion. diff --git a/src/ydc_search_api/_types.py b/src/ydc_search_api/_types.py index 71d6c83..ce99bdf 100644 --- a/src/ydc_search_api/_types.py +++ b/src/ydc_search_api/_types.py @@ -100,6 +100,7 @@ class RequestOptions(TypedDict, total=False): params: Query extra_json: AnyMapping idempotency_key: str + follow_redirects: bool # Sentinel class used until PEP 0661 is accepted @@ -215,3 +216,4 @@ class _GenericAlias(Protocol): class HttpxSendArgs(TypedDict, total=False): auth: httpx.Auth + follow_redirects: bool diff --git a/tests/test_client.py b/tests/test_client.py index dedd5bb..bdfbf8c 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -818,6 +818,33 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: assert response.http_request.headers.get("x-stainless-retry-count") == "42" + @pytest.mark.respx(base_url=base_url) + def test_follow_redirects(self, respx_mock: MockRouter) -> None: + # Test that the default follow_redirects=True allows following redirects + respx_mock.post("/redirect").mock( + return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"}) + ) + respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"})) + + response = self.client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response) + assert response.status_code == 200 + assert response.json() == {"status": "ok"} + + @pytest.mark.respx(base_url=base_url) + def test_follow_redirects_disabled(self, respx_mock: MockRouter) -> None: + # Test that follow_redirects=False prevents following redirects + respx_mock.post("/redirect").mock( + return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"}) + ) + + with pytest.raises(APIStatusError) as exc_info: + self.client.post( + "/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response + ) + + assert exc_info.value.response.status_code == 302 + assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected" + class TestAsyncYdcSearchAPI: client = AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=True) @@ -1639,3 +1666,30 @@ async def test_main() -> None: raise AssertionError("calling get_platform using asyncify resulted in a hung process") time.sleep(0.1) + + @pytest.mark.respx(base_url=base_url) + async def test_follow_redirects(self, respx_mock: MockRouter) -> None: + # Test that the default follow_redirects=True allows following redirects + respx_mock.post("/redirect").mock( + return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"}) + ) + respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"})) + + response = await self.client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response) + assert response.status_code == 200 + assert response.json() == {"status": "ok"} + + @pytest.mark.respx(base_url=base_url) + async def test_follow_redirects_disabled(self, respx_mock: MockRouter) -> None: + # Test that follow_redirects=False prevents following redirects + respx_mock.post("/redirect").mock( + return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"}) + ) + + with pytest.raises(APIStatusError) as exc_info: + await self.client.post( + "/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response + ) + + assert exc_info.value.response.status_code == 302 + assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected" From 0b3bd99aedb66a79b23fbdb0975e5be673891ea9 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 13 Jun 2025 02:05:45 +0000 Subject: [PATCH 13/27] chore(tests): run tests in parallel --- pyproject.toml | 3 ++- requirements-dev.lock | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4b1c0fc..f2f9e81 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,7 @@ dev-dependencies = [ "importlib-metadata>=6.7.0", "rich>=13.7.1", "nest_asyncio==1.6.0", + "pytest-xdist>=3.6.1", ] [tool.rye.scripts] @@ -125,7 +126,7 @@ replacement = '[\1](https://github.com/You-OpenSource/You-Python/tree/main/\g<2> [tool.pytest.ini_options] testpaths = ["tests"] -addopts = "--tb=short" +addopts = "--tb=short -n auto" xfail_strict = true asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "session" diff --git a/requirements-dev.lock b/requirements-dev.lock index 7db8294..cec6e5b 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -30,6 +30,8 @@ distro==1.8.0 exceptiongroup==1.2.2 # via anyio # via pytest +execnet==2.1.1 + # via pytest-xdist filelock==3.12.4 # via virtualenv h11==0.14.0 @@ -72,7 +74,9 @@ pygments==2.18.0 pyright==1.1.399 pytest==8.3.3 # via pytest-asyncio + # via pytest-xdist pytest-asyncio==0.24.0 +pytest-xdist==3.7.0 python-dateutil==2.8.2 # via time-machine pytz==2023.3.post1 From f4810f4a8e67fc9615de27e4b7475be792de39d6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 13 Jun 2025 02:31:41 +0000 Subject: [PATCH 14/27] fix(client): correctly parse binary response | stream --- src/ydc_search_api/_base_client.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/ydc_search_api/_base_client.py b/src/ydc_search_api/_base_client.py index 4100725..2004370 100644 --- a/src/ydc_search_api/_base_client.py +++ b/src/ydc_search_api/_base_client.py @@ -1071,7 +1071,14 @@ def _process_response( ) -> ResponseT: origin = get_origin(cast_to) or cast_to - if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse): + if ( + inspect.isclass(origin) + and issubclass(origin, BaseAPIResponse) + # we only want to actually return the custom BaseAPIResponse class if we're + # returning the raw response, or if we're not streaming SSE, as if we're streaming + # SSE then `cast_to` doesn't actively reflect the type we need to parse into + and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER))) + ): if not issubclass(origin, APIResponse): raise TypeError(f"API Response types must subclass {APIResponse}; Received {origin}") @@ -1574,7 +1581,14 @@ async def _process_response( ) -> ResponseT: origin = get_origin(cast_to) or cast_to - if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse): + if ( + inspect.isclass(origin) + and issubclass(origin, BaseAPIResponse) + # we only want to actually return the custom BaseAPIResponse class if we're + # returning the raw response, or if we're not streaming SSE, as if we're streaming + # SSE then `cast_to` doesn't actively reflect the type we need to parse into + and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER))) + ): if not issubclass(origin, AsyncAPIResponse): raise TypeError(f"API Response types must subclass {AsyncAPIResponse}; Received {origin}") From 8aabce14a7bd4f86937702b665b9f379eb64aae8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 02:32:03 +0000 Subject: [PATCH 15/27] chore(tests): add tests for httpx client instantiation & proxies --- tests/test_client.py | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tests/test_client.py b/tests/test_client.py index bdfbf8c..e62f1e8 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -30,6 +30,8 @@ DEFAULT_TIMEOUT, HTTPX_DEFAULT_TIMEOUT, BaseClient, + DefaultHttpxClient, + DefaultAsyncHttpxClient, make_request_options, ) @@ -818,6 +820,28 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: assert response.http_request.headers.get("x-stainless-retry-count") == "42" + def test_proxy_environment_variables(self, monkeypatch: pytest.MonkeyPatch) -> None: + # Test that the proxy environment variables are set correctly + monkeypatch.setenv("HTTPS_PROXY", "https://example.org") + + client = DefaultHttpxClient() + + mounts = tuple(client._mounts.items()) + assert len(mounts) == 1 + assert mounts[0][0].pattern == "https://" + + @pytest.mark.filterwarnings("ignore:.*deprecated.*:DeprecationWarning") + def test_default_client_creation(self) -> None: + # Ensure that the client can be initialized without any exceptions + DefaultHttpxClient( + verify=True, + cert=None, + trust_env=True, + http1=True, + http2=False, + limits=httpx.Limits(max_connections=100, max_keepalive_connections=20), + ) + @pytest.mark.respx(base_url=base_url) def test_follow_redirects(self, respx_mock: MockRouter) -> None: # Test that the default follow_redirects=True allows following redirects @@ -1667,6 +1691,28 @@ async def test_main() -> None: time.sleep(0.1) + async def test_proxy_environment_variables(self, monkeypatch: pytest.MonkeyPatch) -> None: + # Test that the proxy environment variables are set correctly + monkeypatch.setenv("HTTPS_PROXY", "https://example.org") + + client = DefaultAsyncHttpxClient() + + mounts = tuple(client._mounts.items()) + assert len(mounts) == 1 + assert mounts[0][0].pattern == "https://" + + @pytest.mark.filterwarnings("ignore:.*deprecated.*:DeprecationWarning") + async def test_default_client_creation(self) -> None: + # Ensure that the client can be initialized without any exceptions + DefaultAsyncHttpxClient( + verify=True, + cert=None, + trust_env=True, + http1=True, + http2=False, + limits=httpx.Limits(max_connections=100, max_keepalive_connections=20), + ) + @pytest.mark.respx(base_url=base_url) async def test_follow_redirects(self, respx_mock: MockRouter) -> None: # Test that the default follow_redirects=True allows following redirects From 6e97402b06e5e02525a69f3790afbd858e8a66e4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 04:02:26 +0000 Subject: [PATCH 16/27] chore(internal): update conftest.py --- tests/conftest.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index bb897c6..236cdc1 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,3 +1,5 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + from __future__ import annotations import os From 863412bfe9721714709c1109ab9bf3d608b3e81c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 06:31:31 +0000 Subject: [PATCH 17/27] chore(ci): enable for pull requests --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1830c38..911bd2c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,6 +7,10 @@ on: - 'integrated/**' - 'stl-preview-head/**' - 'stl-preview-base/**' + pull_request: + branches-ignore: + - 'stl-preview-head/**' + - 'stl-preview-base/**' jobs: lint: From 6339cd82af07b54a79c1fac3c2a44fa94a1151c5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 18 Jun 2025 02:07:00 +0000 Subject: [PATCH 18/27] chore(readme): update badges --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 19eed7e..876410e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Ydc Search API Python API library -[![PyPI version](https://img.shields.io/pypi/v/youdotcom.svg)](https://pypi.org/project/youdotcom/) +[![PyPI version]()](https://pypi.org/project/youdotcom/) The Ydc Search API Python library provides convenient access to the Ydc Search API REST API from any Python 3.8+ application. The library includes type definitions for all request params and response fields, From 38b773a19fec344ffe8ab04cb4449f7ed23778c5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 18 Jun 2025 05:40:52 +0000 Subject: [PATCH 19/27] fix(tests): fix: tests which call HTTP endpoints directly with the example parameters --- tests/test_client.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/tests/test_client.py b/tests/test_client.py index e62f1e8..6afaf3b 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -24,7 +24,6 @@ from ydc_search_api import YdcSearchAPI, AsyncYdcSearchAPI, APIResponseValidationError from ydc_search_api._types import Omit from ydc_search_api._models import BaseModel, FinalRequestOptions -from ydc_search_api._constants import RAW_RESPONSE_HEADER from ydc_search_api._exceptions import APIStatusError, APITimeoutError, YdcSearchAPIError, APIResponseValidationError from ydc_search_api._base_client import ( DEFAULT_TIMEOUT, @@ -723,22 +722,21 @@ def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) @pytest.mark.respx(base_url=base_url) - def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: + def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter, client: YdcSearchAPI) -> None: respx_mock.get("/search").mock(side_effect=httpx.TimeoutException("Test timeout error")) with pytest.raises(APITimeoutError): - self.client.get("/search", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}}) + client.search.with_streaming_response.query(query="query").__enter__() assert _get_open_connections(self.client) == 0 @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) @pytest.mark.respx(base_url=base_url) - def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: + def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter, client: YdcSearchAPI) -> None: respx_mock.get("/search").mock(return_value=httpx.Response(500)) with pytest.raises(APIStatusError): - self.client.get("/search", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}}) - + client.search.with_streaming_response.query(query="query").__enter__() assert _get_open_connections(self.client) == 0 @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) @@ -1540,26 +1538,25 @@ async def test_parse_retry_after_header(self, remaining_retries: int, retry_afte @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) @pytest.mark.respx(base_url=base_url) - async def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: + async def test_retrying_timeout_errors_doesnt_leak( + self, respx_mock: MockRouter, async_client: AsyncYdcSearchAPI + ) -> None: respx_mock.get("/search").mock(side_effect=httpx.TimeoutException("Test timeout error")) with pytest.raises(APITimeoutError): - await self.client.get( - "/search", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}} - ) + await async_client.search.with_streaming_response.query(query="query").__aenter__() assert _get_open_connections(self.client) == 0 @mock.patch("ydc_search_api._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) @pytest.mark.respx(base_url=base_url) - async def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: + async def test_retrying_status_errors_doesnt_leak( + self, respx_mock: MockRouter, async_client: AsyncYdcSearchAPI + ) -> None: respx_mock.get("/search").mock(return_value=httpx.Response(500)) with pytest.raises(APIStatusError): - await self.client.get( - "/search", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}} - ) - + await async_client.search.with_streaming_response.query(query="query").__aenter__() assert _get_open_connections(self.client) == 0 @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) From e7d0d027dafec38d34df6847cced50d283de7214 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 19 Jun 2025 02:46:50 +0000 Subject: [PATCH 20/27] docs(client): fix httpx.Timeout documentation reference --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 876410e..5283111 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,7 @@ client.with_options(max_retries=5).search.query( ### Timeouts By default requests time out after 1 minute. You can configure this with a `timeout` option, -which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/#fine-tuning-the-configuration) object: +which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object: ```python from ydc_search_api import YdcSearchAPI From 738eb2cbbe3b23d9edba12bdf30b6676846a78c4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 21 Jun 2025 04:01:37 +0000 Subject: [PATCH 21/27] feat(client): add support for aiohttp --- README.md | 34 +++++++++++++++++++++++ pyproject.toml | 2 ++ requirements-dev.lock | 27 +++++++++++++++++++ requirements.lock | 27 +++++++++++++++++++ src/ydc_search_api/__init__.py | 3 ++- src/ydc_search_api/_base_client.py | 22 +++++++++++++++ tests/api_resources/test_news.py | 4 ++- tests/api_resources/test_search.py | 4 ++- tests/conftest.py | 43 +++++++++++++++++++++++++----- 9 files changed, 157 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5283111..11ee900 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,40 @@ asyncio.run(main()) Functionality between the synchronous and asynchronous clients is otherwise identical. +### With aiohttp + +By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend. + +You can enable this by installing `aiohttp`: + +```sh +# install from PyPI +pip install youdotcom[aiohttp] +``` + +Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`: + +```python +import os +import asyncio +from ydc_search_api import DefaultAioHttpClient +from ydc_search_api import AsyncYdcSearchAPI + + +async def main() -> None: + async with AsyncYdcSearchAPI( + api_key=os.environ.get("YDC_SEARCH_API_API_KEY"), # This is the default and can be omitted + http_client=DefaultAioHttpClient(), + ) as client: + response = await client.search.query( + query="REPLACE_ME", + ) + print(response.hits) + + +asyncio.run(main()) +``` + ## Using types Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like: diff --git a/pyproject.toml b/pyproject.toml index f2f9e81..478ea99 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,8 @@ classifiers = [ Homepage = "https://github.com/You-OpenSource/You-Python" Repository = "https://github.com/You-OpenSource/You-Python" +[project.optional-dependencies] +aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.6"] [tool.rye] managed = true diff --git a/requirements-dev.lock b/requirements-dev.lock index cec6e5b..518cce4 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -10,6 +10,13 @@ # universal: false -e file:. +aiohappyeyeballs==2.6.1 + # via aiohttp +aiohttp==3.12.8 + # via httpx-aiohttp + # via youdotcom +aiosignal==1.3.2 + # via aiohttp annotated-types==0.6.0 # via pydantic anyio==4.4.0 @@ -17,6 +24,10 @@ anyio==4.4.0 # via youdotcom argcomplete==3.1.2 # via nox +async-timeout==5.0.1 + # via aiohttp +attrs==25.3.0 + # via aiohttp certifi==2023.7.22 # via httpcore # via httpx @@ -34,16 +45,23 @@ execnet==2.1.1 # via pytest-xdist filelock==3.12.4 # via virtualenv +frozenlist==1.6.2 + # via aiohttp + # via aiosignal h11==0.14.0 # via httpcore httpcore==1.0.2 # via httpx httpx==0.28.1 + # via httpx-aiohttp # via respx # via youdotcom +httpx-aiohttp==0.1.6 + # via youdotcom idna==3.4 # via anyio # via httpx + # via yarl importlib-metadata==7.0.0 iniconfig==2.0.0 # via pytest @@ -51,6 +69,9 @@ markdown-it-py==3.0.0 # via rich mdurl==0.1.2 # via markdown-it-py +multidict==6.4.4 + # via aiohttp + # via yarl mypy==1.14.1 mypy-extensions==1.0.0 # via mypy @@ -65,6 +86,9 @@ platformdirs==3.11.0 # via virtualenv pluggy==1.5.0 # via pytest +propcache==0.3.1 + # via aiohttp + # via yarl pydantic==2.10.3 # via youdotcom pydantic-core==2.27.1 @@ -97,6 +121,7 @@ tomli==2.0.2 # via pytest typing-extensions==4.12.2 # via anyio + # via multidict # via mypy # via pydantic # via pydantic-core @@ -104,5 +129,7 @@ typing-extensions==4.12.2 # via youdotcom virtualenv==20.24.5 # via nox +yarl==1.20.0 + # via aiohttp zipp==3.17.0 # via importlib-metadata diff --git a/requirements.lock b/requirements.lock index 2ecb240..08a10dc 100644 --- a/requirements.lock +++ b/requirements.lock @@ -10,11 +10,22 @@ # universal: false -e file:. +aiohappyeyeballs==2.6.1 + # via aiohttp +aiohttp==3.12.8 + # via httpx-aiohttp + # via youdotcom +aiosignal==1.3.2 + # via aiohttp annotated-types==0.6.0 # via pydantic anyio==4.4.0 # via httpx # via youdotcom +async-timeout==5.0.1 + # via aiohttp +attrs==25.3.0 + # via aiohttp certifi==2023.7.22 # via httpcore # via httpx @@ -22,15 +33,28 @@ distro==1.8.0 # via youdotcom exceptiongroup==1.2.2 # via anyio +frozenlist==1.6.2 + # via aiohttp + # via aiosignal h11==0.14.0 # via httpcore httpcore==1.0.2 # via httpx httpx==0.28.1 + # via httpx-aiohttp + # via youdotcom +httpx-aiohttp==0.1.6 # via youdotcom idna==3.4 # via anyio # via httpx + # via yarl +multidict==6.4.4 + # via aiohttp + # via yarl +propcache==0.3.1 + # via aiohttp + # via yarl pydantic==2.10.3 # via youdotcom pydantic-core==2.27.1 @@ -40,6 +64,9 @@ sniffio==1.3.0 # via youdotcom typing-extensions==4.12.2 # via anyio + # via multidict # via pydantic # via pydantic-core # via youdotcom +yarl==1.20.0 + # via aiohttp diff --git a/src/ydc_search_api/__init__.py b/src/ydc_search_api/__init__.py index 46a34b0..7b2b660 100644 --- a/src/ydc_search_api/__init__.py +++ b/src/ydc_search_api/__init__.py @@ -36,7 +36,7 @@ UnprocessableEntityError, APIResponseValidationError, ) -from ._base_client import DefaultHttpxClient, DefaultAsyncHttpxClient +from ._base_client import DefaultHttpxClient, DefaultAioHttpClient, DefaultAsyncHttpxClient from ._utils._logs import setup_logging as _setup_logging __all__ = [ @@ -78,6 +78,7 @@ "DEFAULT_CONNECTION_LIMITS", "DefaultHttpxClient", "DefaultAsyncHttpxClient", + "DefaultAioHttpClient", ] if not _t.TYPE_CHECKING: diff --git a/src/ydc_search_api/_base_client.py b/src/ydc_search_api/_base_client.py index 2004370..0acc4b0 100644 --- a/src/ydc_search_api/_base_client.py +++ b/src/ydc_search_api/_base_client.py @@ -1289,6 +1289,24 @@ def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) +try: + import httpx_aiohttp +except ImportError: + + class _DefaultAioHttpClient(httpx.AsyncClient): + def __init__(self, **_kwargs: Any) -> None: + raise RuntimeError("To use the aiohttp client you must have installed the package with the `aiohttp` extra") +else: + + class _DefaultAioHttpClient(httpx_aiohttp.HttpxAiohttpClient): # type: ignore + def __init__(self, **kwargs: Any) -> None: + kwargs.setdefault("timeout", DEFAULT_TIMEOUT) + kwargs.setdefault("limits", DEFAULT_CONNECTION_LIMITS) + kwargs.setdefault("follow_redirects", True) + + super().__init__(**kwargs) + + if TYPE_CHECKING: DefaultAsyncHttpxClient = httpx.AsyncClient """An alias to `httpx.AsyncClient` that provides the same defaults that this SDK @@ -1297,8 +1315,12 @@ def __init__(self, **kwargs: Any) -> None: This is useful because overriding the `http_client` with your own instance of `httpx.AsyncClient` will result in httpx's defaults being used, not ours. """ + + DefaultAioHttpClient = httpx.AsyncClient + """An alias to `httpx.AsyncClient` that changes the default HTTP transport to `aiohttp`.""" else: DefaultAsyncHttpxClient = _DefaultAsyncHttpxClient + DefaultAioHttpClient = _DefaultAioHttpClient class AsyncHttpxClientWrapper(DefaultAsyncHttpxClient): diff --git a/tests/api_resources/test_news.py b/tests/api_resources/test_news.py index cdf22d0..41d7db4 100644 --- a/tests/api_resources/test_news.py +++ b/tests/api_resources/test_news.py @@ -69,7 +69,9 @@ def test_streaming_response_list(self, client: YdcSearchAPI) -> None: class TestAsyncNews: - parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"]) + parametrize = pytest.mark.parametrize( + "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] + ) @pytest.mark.skip() @parametrize diff --git a/tests/api_resources/test_search.py b/tests/api_resources/test_search.py index 9708f07..7fc1a66 100644 --- a/tests/api_resources/test_search.py +++ b/tests/api_resources/test_search.py @@ -66,7 +66,9 @@ def test_streaming_response_query(self, client: YdcSearchAPI) -> None: class TestAsyncSearch: - parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"]) + parametrize = pytest.mark.parametrize( + "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] + ) @pytest.mark.skip() @parametrize diff --git a/tests/conftest.py b/tests/conftest.py index 236cdc1..ccc7cc5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,10 +6,12 @@ import logging from typing import TYPE_CHECKING, Iterator, AsyncIterator +import httpx import pytest from pytest_asyncio import is_async_test -from ydc_search_api import YdcSearchAPI, AsyncYdcSearchAPI +from ydc_search_api import YdcSearchAPI, AsyncYdcSearchAPI, DefaultAioHttpClient +from ydc_search_api._utils import is_dict if TYPE_CHECKING: from _pytest.fixtures import FixtureRequest # pyright: ignore[reportPrivateImportUsage] @@ -27,6 +29,19 @@ def pytest_collection_modifyitems(items: list[pytest.Function]) -> None: for async_test in pytest_asyncio_tests: async_test.add_marker(session_scope_marker, append=False) + # We skip tests that use both the aiohttp client and respx_mock as respx_mock + # doesn't support custom transports. + for item in items: + if "async_client" not in item.fixturenames or "respx_mock" not in item.fixturenames: + continue + + if not hasattr(item, "callspec"): + continue + + async_client_param = item.callspec.params.get("async_client") + if is_dict(async_client_param) and async_client_param.get("http_client") == "aiohttp": + item.add_marker(pytest.mark.skip(reason="aiohttp client is not compatible with respx_mock")) + base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -45,9 +60,25 @@ def client(request: FixtureRequest) -> Iterator[YdcSearchAPI]: @pytest.fixture(scope="session") async def async_client(request: FixtureRequest) -> AsyncIterator[AsyncYdcSearchAPI]: - strict = getattr(request, "param", True) - if not isinstance(strict, bool): - raise TypeError(f"Unexpected fixture parameter type {type(strict)}, expected {bool}") - - async with AsyncYdcSearchAPI(base_url=base_url, api_key=api_key, _strict_response_validation=strict) as client: + param = getattr(request, "param", True) + + # defaults + strict = True + http_client: None | httpx.AsyncClient = None + + if isinstance(param, bool): + strict = param + elif is_dict(param): + strict = param.get("strict", True) + assert isinstance(strict, bool) + + http_client_type = param.get("http_client", "httpx") + if http_client_type == "aiohttp": + http_client = DefaultAioHttpClient() + else: + raise TypeError(f"Unexpected fixture parameter type {type(param)}, expected bool or dict") + + async with AsyncYdcSearchAPI( + base_url=base_url, api_key=api_key, _strict_response_validation=strict, http_client=http_client + ) as client: yield client From 7fc905e0047a3dc1faf83000c9010d95af283cd3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 04:09:27 +0000 Subject: [PATCH 22/27] chore(tests): skip some failing tests on the latest python versions --- tests/test_client.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_client.py b/tests/test_client.py index 6afaf3b..ab27a2b 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -191,6 +191,7 @@ def test_copy_signature(self) -> None: copy_param = copy_signature.parameters.get(name) assert copy_param is not None, f"copy() signature is missing the {name} param" + @pytest.mark.skipif(sys.version_info >= (3, 10), reason="fails because of a memory leak that started from 3.12") def test_copy_build_request(self) -> None: options = FinalRequestOptions(method="get", url="/foo") @@ -1003,6 +1004,7 @@ def test_copy_signature(self) -> None: copy_param = copy_signature.parameters.get(name) assert copy_param is not None, f"copy() signature is missing the {name} param" + @pytest.mark.skipif(sys.version_info >= (3, 10), reason="fails because of a memory leak that started from 3.12") def test_copy_build_request(self) -> None: options = FinalRequestOptions(method="get", url="/foo") From 2b9830704adddde1ac0c9c80187b8ac32a274604 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:28:07 +0000 Subject: [PATCH 23/27] =?UTF-8?q?fix(ci):=20release-doctor=20=E2=80=94=20r?= =?UTF-8?q?eport=20correct=20token=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/check-release-environment | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/check-release-environment b/bin/check-release-environment index e204774..b845b0f 100644 --- a/bin/check-release-environment +++ b/bin/check-release-environment @@ -3,7 +3,7 @@ errors=() if [ -z "${PYPI_TOKEN}" ]; then - errors+=("The YDC_SEARCH_API_PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.") + errors+=("The PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.") fi lenErrors=${#errors[@]} From 2b4c478dbed04dc9a688ab2c93f621c469af4ba9 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 28 Jun 2025 08:27:11 +0000 Subject: [PATCH 24/27] chore(ci): only run for pushes and fork pull requests --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 911bd2c..2f20083 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,6 +17,7 @@ jobs: timeout-minutes: 10 name: lint runs-on: ${{ github.repository == 'stainless-sdks/ydc-search-api-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - uses: actions/checkout@v4 @@ -42,6 +43,7 @@ jobs: contents: read id-token: write runs-on: depot-ubuntu-24.04 + if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - uses: actions/checkout@v4 @@ -62,6 +64,7 @@ jobs: timeout-minutes: 10 name: test runs-on: ${{ github.repository == 'stainless-sdks/ydc-search-api-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - uses: actions/checkout@v4 From 15188387b92789a7661461c4ad35d46de320585d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 30 Jun 2025 02:24:45 +0000 Subject: [PATCH 25/27] fix(ci): correct conditional --- .github/workflows/ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f20083..6dd6496 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,14 +36,13 @@ jobs: run: ./scripts/lint upload: - if: github.repository == 'stainless-sdks/ydc-search-api-python' + if: github.repository == 'stainless-sdks/ydc-search-api-python' && (github.event_name == 'push' || github.event.pull_request.head.repo.fork) timeout-minutes: 10 name: upload permissions: contents: read id-token: write runs-on: depot-ubuntu-24.04 - if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - uses: actions/checkout@v4 From 50c1dc338477ec1fe7fadb20fbfc438cd3bb832a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 2 Jul 2025 05:35:26 +0000 Subject: [PATCH 26/27] chore(ci): change upload type --- .github/workflows/ci.yml | 18 ++++++++++++++++-- scripts/utils/upload-artifact.sh | 12 +++++++----- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6dd6496..641a1a3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,10 +35,10 @@ jobs: - name: Run lints run: ./scripts/lint - upload: + build: if: github.repository == 'stainless-sdks/ydc-search-api-python' && (github.event_name == 'push' || github.event.pull_request.head.repo.fork) timeout-minutes: 10 - name: upload + name: build permissions: contents: read id-token: write @@ -46,6 +46,20 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Install Rye + run: | + curl -sSf https://rye.astral.sh/get | bash + echo "$HOME/.rye/shims" >> $GITHUB_PATH + env: + RYE_VERSION: '0.44.0' + RYE_INSTALL_OPTION: '--yes' + + - name: Install dependencies + run: rye sync --all-features + + - name: Run build + run: rye build + - name: Get GitHub OIDC Token id: github-oidc uses: actions/github-script@v6 diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh index 386557d..74f1f78 100755 --- a/scripts/utils/upload-artifact.sh +++ b/scripts/utils/upload-artifact.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash set -exuo pipefail -RESPONSE=$(curl -X POST "$URL" \ +FILENAME=$(basename dist/*.whl) + +RESPONSE=$(curl -X POST "$URL?filename=$FILENAME" \ -H "Authorization: Bearer $AUTH" \ -H "Content-Type: application/json") @@ -12,13 +14,13 @@ if [[ "$SIGNED_URL" == "null" ]]; then exit 1 fi -UPLOAD_RESPONSE=$(tar -cz . | curl -v -X PUT \ - -H "Content-Type: application/gzip" \ - --data-binary @- "$SIGNED_URL" 2>&1) +UPLOAD_RESPONSE=$(curl -v -X PUT \ + -H "Content-Type: binary/octet-stream" \ + --data-binary "@dist/$FILENAME" "$SIGNED_URL" 2>&1) if echo "$UPLOAD_RESPONSE" | grep -q "HTTP/[0-9.]* 200"; then echo -e "\033[32mUploaded build to Stainless storage.\033[0m" - echo -e "\033[32mInstallation: pip install 'https://pkg.stainless.com/s/ydc-search-api-python/$SHA'\033[0m" + echo -e "\033[32mInstallation: pip install 'https://pkg.stainless.com/s/ydc-search-api-python/$SHA/$FILENAME'\033[0m" else echo -e "\033[31mFailed to upload artifact.\033[0m" exit 1 From 23164ec07c2f5eda8fd315c7d53d0fd2a39cdae4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 2 Jul 2025 05:36:54 +0000 Subject: [PATCH 27/27] release: 3.0.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 45 ++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- src/ydc_search_api/_version.py | 2 +- 4 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 CHANGELOG.md diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 5dc82c3..4191c88 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.0.23" + ".": "3.0.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..4ee9dec --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,45 @@ +# Changelog + +## 3.0.0 (2025-07-02) + +Full Changelog: [v2.0.23...v3.0.0](https://github.com/You-OpenSource/You-Python/compare/v2.0.23...v3.0.0) + +### Features + +* **client:** add follow_redirects request option ([4d47f85](https://github.com/You-OpenSource/You-Python/commit/4d47f85104c202e1bad03dd30281050229422b06)) +* **client:** add support for aiohttp ([738eb2c](https://github.com/You-OpenSource/You-Python/commit/738eb2cbbe3b23d9edba12bdf30b6676846a78c4)) + + +### Bug Fixes + +* **ci:** correct conditional ([1518838](https://github.com/You-OpenSource/You-Python/commit/15188387b92789a7661461c4ad35d46de320585d)) +* **ci:** release-doctor β€” report correct token name ([2b98307](https://github.com/You-OpenSource/You-Python/commit/2b9830704adddde1ac0c9c80187b8ac32a274604)) +* **client:** correctly parse binary response | stream ([f4810f4](https://github.com/You-OpenSource/You-Python/commit/f4810f4a8e67fc9615de27e4b7475be792de39d6)) +* **package:** support direct resource imports ([edf7871](https://github.com/You-OpenSource/You-Python/commit/edf7871f8c6ca8c5baca3c0c7fb15ede1cf3a9c2)) +* **tests:** fix: tests which call HTTP endpoints directly with the example parameters ([38b773a](https://github.com/You-OpenSource/You-Python/commit/38b773a19fec344ffe8ab04cb4449f7ed23778c5)) + + +### Chores + +* **ci:** change upload type ([50c1dc3](https://github.com/You-OpenSource/You-Python/commit/50c1dc338477ec1fe7fadb20fbfc438cd3bb832a)) +* **ci:** enable for pull requests ([863412b](https://github.com/You-OpenSource/You-Python/commit/863412bfe9721714709c1109ab9bf3d608b3e81c)) +* **ci:** fix installation instructions ([9b2771b](https://github.com/You-OpenSource/You-Python/commit/9b2771b802a0dc854c4ff8099e8798207bff9cba)) +* **ci:** only run for pushes and fork pull requests ([2b4c478](https://github.com/You-OpenSource/You-Python/commit/2b4c478dbed04dc9a688ab2c93f621c469af4ba9)) +* **ci:** upload sdks to package manager ([5953bf4](https://github.com/You-OpenSource/You-Python/commit/5953bf406ad005f2fa3fd461e3a58deaefd1b4d5)) +* **docs:** grammar improvements ([836d4ea](https://github.com/You-OpenSource/You-Python/commit/836d4ea5ae3515d5dc2c8e102467898f93352cc3)) +* **docs:** remove reference to rye shell ([187ecc9](https://github.com/You-OpenSource/You-Python/commit/187ecc9d46568cbb61f2b69787def39b99a2358e)) +* **internal:** avoid errors for isinstance checks on proxies ([0c64f6a](https://github.com/You-OpenSource/You-Python/commit/0c64f6a96edfb86e6376bdd138cea718dd5a2973)) +* **internal:** codegen related update ([92331b9](https://github.com/You-OpenSource/You-Python/commit/92331b90677275ea5ceff33ef0c0abf9c50a26cc)) +* **internal:** update conftest.py ([6e97402](https://github.com/You-OpenSource/You-Python/commit/6e97402b06e5e02525a69f3790afbd858e8a66e4)) +* **readme:** update badges ([6339cd8](https://github.com/You-OpenSource/You-Python/commit/6339cd82af07b54a79c1fac3c2a44fa94a1151c5)) +* sync repo ([dc912e6](https://github.com/You-OpenSource/You-Python/commit/dc912e683c739f424a119bbeaba858d65778909d)) +* **tests:** add tests for httpx client instantiation & proxies ([8aabce1](https://github.com/You-OpenSource/You-Python/commit/8aabce14a7bd4f86937702b665b9f379eb64aae8)) +* **tests:** run tests in parallel ([0b3bd99](https://github.com/You-OpenSource/You-Python/commit/0b3bd99aedb66a79b23fbdb0975e5be673891ea9)) +* **tests:** skip some failing tests on the latest python versions ([7fc905e](https://github.com/You-OpenSource/You-Python/commit/7fc905e0047a3dc1faf83000c9010d95af283cd3)) +* update SDK settings ([323499b](https://github.com/You-OpenSource/You-Python/commit/323499ba910ff1f183d1df60c06576c77e532e82)) +* update SDK settings ([bd65b0f](https://github.com/You-OpenSource/You-Python/commit/bd65b0fb9d38b89ace7fbeb78da6ca90c9f490a9)) + + +### Documentation + +* **client:** fix httpx.Timeout documentation reference ([e7d0d02](https://github.com/You-OpenSource/You-Python/commit/e7d0d027dafec38d34df6847cced50d283de7214)) diff --git a/pyproject.toml b/pyproject.toml index 478ea99..0425cc3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "youdotcom" -version = "2.0.23" +version = "3.0.0" description = "The official Python library for the ydc-search-api API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/ydc_search_api/_version.py b/src/ydc_search_api/_version.py index 44a7475..2ccbad9 100644 --- a/src/ydc_search_api/_version.py +++ b/src/ydc_search_api/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "ydc_search_api" -__version__ = "2.0.23" # x-release-please-version +__version__ = "3.0.0" # x-release-please-version

    *(@7zhQ+C+z&J{kipd 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 s_J*jXbpy)9fmM1nR;YH4(aT83o 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%0Au7Rq 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