diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 00000000..dde2e410 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,5 @@ +[run] +omit = + docs/* + examples/* + tests/* diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..6a9e8da9 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,21 @@ +# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.203.0/containers/python-3/.devcontainer/base.Dockerfile + +# [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster +ARG VARIANT="3.10-bullseye" +FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT} + +# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10 +ARG NODE_VERSION="none" +RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi + +# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image. +# COPY requirements.txt /tmp/pip-tmp/ +# RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \ +# && rm -rf /tmp/pip-tmp + +# [Optional] Uncomment this section to install additional OS packages. +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends + +# [Optional] Uncomment this line to install global node packages. +# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g " 2>&1 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..63e38c42 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,81 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.203.0/containers/python-3 +{ + "name": "Python 3", + "runArgs": [ + "--init" + ], + "build": { + "dockerfile": "Dockerfile", + "context": "..", + "args": { + // Update 'VARIANT' to pick a Python version: 3, 3.10, 3.9, 3.8, 3.7, 3.6 + // Append -bullseye or -buster to pin to an OS version. + // Use -bullseye variants on local on arm64/Apple Silicon. + "VARIANT": "3.10-bullseye", + // Options + "NODE_VERSION": "lts/*" + } + }, + // Set *default* container specific settings.json values on container create. + "settings": { + "python.pythonPath": "/usr/local/bin/python", + "python.languageServer": "Pylance", + "python.linting.enabled": true, + "python.linting.flake8Enabled": true, + "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8", + "python.formatting.blackPath": "/usr/local/py-utils/bin/black", + "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf", + "python.linting.banditPath": "/usr/local/py-utils/bin/bandit", + "python.linting.flake8Path": "/usr/local/py-utils/bin/flake8", + "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", + "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle", + "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle", + "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint", + "python.analysis.diagnosticMode": "workspace", + "files.exclude": { + "**/.ipynb_checkpoints": true, + "**/.pytest_cache": true, + "**/*pycache*": true + }, + "python.formatting.provider": "black", + "python.linting.flake8Args": [ + "--max-line-length=88", + "--extend-ignore=E203" + ], + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": true + }, + "python.sortImports.args": [ + "--multi-line=3", + "--trailing-comma", + "--force-grid-wrap=0", + "--use-parentheses", + "--line-width=88", + ] + }, + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance", + "ms-azuretools.vscode-docker", + "donjayamanne.githistory", + "felipecaputo.git-project-manager", + "github.copilot-nightly", + "eamodio.gitlens", + "davidanson.vscode-markdownlint" + ], + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "pip3 install --user -r requirements.txt", + // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "vscode", + "features": { + "docker-in-docker": "latest", + "git": "latest", + "git-lfs": "latest", + "github-cli": "latest" + } +} diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..5fb75ee1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,42 @@ +______________________________________________________________________ + +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +______________________________________________________________________ + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: + +1. Go to '...' +1. Click on '....' +1. Scroll down to '....' +1. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + +- OS: \[e.g. iOS\] +- Browser \[e.g. chrome, safari\] +- Version \[e.g. 22\] + +**Smartphone (please complete the following information):** + +- Device: \[e.g. iPhone6\] +- OS: \[e.g. iOS8.1\] +- Browser \[e.g. stock browser, safari\] +- Version \[e.g. 22\] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..de0e1945 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,21 @@ +______________________________________________________________________ + +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +______________________________________________________________________ + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when \[...\] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..40e405ae --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + target-branch: "main" + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "daily" + target-branch: "main" diff --git a/.github/workflows/ci-python.yml b/.github/workflows/ci-python.yml deleted file mode 100644 index 077eef78..00000000 --- a/.github/workflows/ci-python.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: CI (Python) - -on: [push] - -jobs: - build: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: [3.7, 3.8] - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Cache Pip - uses: actions/cache@v2 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }} - restore-keys: | - ${{ runner.os }}-pip- - ${{ runner.os }}- - - name: Install dependencies - run: | - pip install poetry - poetry install - - name: Test with Pytest - run: | - SUPABASE_TEST_URL="https://tfsatoopsijgjhrqplra.supabase.co" SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxMjYwOTMyMiwiZXhwIjoxOTI4MTg1MzIyfQ.XL9W5I_VRQ4iyQHVQmjG0BkwRfx6eVyYB3uAKcesukg" poetry run pytest diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..1c3e558e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,109 @@ +name: CI/CD + +on: + push: + paths-ignore: + - '.github/**' + - '.devcontainer/**' + - 'CHANGELOG.md' + - 'MAINTAINERS.md' + branches: + - main + pull_request: + workflow_dispatch: + +permissions: + contents: read + id-token: write + +jobs: + test: + name: Test / OS ${{ matrix.os }} / Python ${{ matrix.python-version }} + strategy: + matrix: + os: [ubuntu-latest] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + runs-on: ${{ matrix.os }} + steps: + - name: Clone Repository + uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Set up Poetry + run: pipx install poetry==1.8.5 --python python${{ matrix.python-version }} + + - name: Run Tests + run: poetry run tests + + - name: Upload coverage to Coveralls + uses: coverallsapp/github-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + flag-name: run-${{ join(matrix.*, '-') }} + parallel: true + + finish_tests: + needs: test + name: Upload tests coveralls results + if: ${{ always() }} + runs-on: ubuntu-latest + steps: + - name: Coveralls Finished + uses: coverallsapp/github-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel-finished: true + carryforward: "run-ubuntu-latest-3.9,run-ubuntu-latest-3.10,run-ubuntu-latest-3.11,run-ubuntu-latest-3.12,run-ubuntu-latest-3.13" + + release-please: + needs: test + if: ${{ github.ref == 'refs/heads/main' && github.event_name == 'push' && github.repository_owner == 'supabase' }} + runs-on: ubuntu-latest + name: "Bump version and create changelog" + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + contents: write # needed for github actions bot to write to repo + pull-requests: write + steps: + - uses: googleapis/release-please-action@v4 + id: release + with: + target-branch: ${{ github.ref_name }} + publish: + needs: release-please + if: ${{ startsWith(github.event.head_commit.message, 'chore(main)') && github.ref == 'refs/heads/main' && github.event_name == 'push' && github.repository_owner == 'supabase' }} + runs-on: ubuntu-latest + name: "Publish to PyPi" + environment: + name: pypi + url: https://pypi.org/p/supabase + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + contents: write # needed for github actions bot to write to repo + steps: + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + + - name: Clone Repository + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + fetch-depth: 0 + + - name: Set up Poetry + run: pipx install poetry==1.8.5 --python python3.11 + + - name: Install dependencies + run: poetry install + + - name: Build package dist directory + run: poetry build + + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.github/workflows/conventional-commits-lint.js b/.github/workflows/conventional-commits-lint.js new file mode 100644 index 00000000..35db22f5 --- /dev/null +++ b/.github/workflows/conventional-commits-lint.js @@ -0,0 +1,92 @@ +"use strict"; + +const fs = require("fs"); + +const TITLE_PATTERN = + /^(?[^:!(]+)(?\([^)]+\))?(?[!])?:.+$/; +const RELEASE_AS_DIRECTIVE = /^\s*Release-As:/im; +const BREAKING_CHANGE_DIRECTIVE = /^\s*BREAKING[ \t]+CHANGE:/im; + +const ALLOWED_CONVENTIONAL_COMMIT_PREFIXES = [ + "revert", + "feat", + "fix", + "ci", + "docs", + "chore", + "style", + "test", + "refactor", +]; + +const object = process.argv[2]; +const payload = JSON.parse(fs.readFileSync(process.stdin.fd, "utf-8")); + +let validate = []; + +if (object === "pr") { + validate.push({ + title: payload.pull_request.title, + content: payload.pull_request.body, + }); +} else if (object === "push") { + validate.push( + ...payload.commits + .map((commit) => ({ + title: commit.message.split("\n")[0], + content: commit.message, + })) + .filter(({ title }) => !title.startsWith("Merge branch ") && !title.startsWith("Revert ")), + ); +} else { + console.error( + `Unknown object for first argument "${object}", use 'pr' or 'push'.`, + ); + process.exit(0); +} + +let failed = false; + +validate.forEach((payload) => { + if (payload.title) { + const match = payload.title.match(TITLE_PATTERN); + if (!match) { + return + } + + const { groups } = match + + if (groups) { + if ( + !ALLOWED_CONVENTIONAL_COMMIT_PREFIXES.find( + (prefix) => prefix === groups.prefix, + ) + ) { + console.error( + `PR (or a commit in it) is using a disallowed conventional commit prefix ("${groups.prefix}"). Only ${ALLOWED_CONVENTIONAL_COMMIT_PREFIXES.join(", ")} are allowed. Make sure the prefix is lowercase!`, + ); + failed = true; + } + } else { + console.error( + "PR or commit title must match conventional commit structure.", + ); + failed = true; + } + } + + if (payload.content) { + if (payload.content.match(RELEASE_AS_DIRECTIVE)) { + console.error( + "PR descriptions or commit messages must not contain Release-As conventional commit directives.", + ); + failed = true; + } + } +}); + +if (failed) { + process.exit(1); +} + +process.exit(0); diff --git a/.github/workflows/conventional-commits.yml b/.github/workflows/conventional-commits.yml new file mode 100644 index 00000000..9d7b00e2 --- /dev/null +++ b/.github/workflows/conventional-commits.yml @@ -0,0 +1,46 @@ +name: Check pull requests + +on: + push: + branches-ignore: # Run the checks on all branches but the protected ones + - main + - release/* + + pull_request: + branches: + - main + - release/* + types: + - opened + - edited + - reopened + - ready_for_review + +permissions: + contents: read + +jobs: + check-conventional-commits: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: | + .github + + - if: ${{ github.event_name == 'pull_request' }} + run: | + set -ex + + node .github/workflows/conventional-commits-lint.js pr < + This issue is stale because it has been open for 365 days with no activity. + stale-pr-message: > + This pull request is stale because it has been open for 365 days with no activity. + close-issue-message: > + This issue has been marked as stale and closed due to inactivity. + close-pr-message: > + This pull request has been marked as stale and closed due to inactivity. diff --git a/.gitignore b/.gitignore index 6b956958..ac38f83b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ -poetry.lock - +.mypy_cache/ +__pycache__/ tags -## Vim stuff + # Swap [._]*.s[a-v][a-z] !*.svg # comment out if you don't need vector files @@ -21,7 +21,6 @@ Sessionx.vim tags # Persistent undo [._]*.un~ -.idea # Byte-compiled / optimized / DLL files __pycache__/ @@ -44,7 +43,6 @@ parts/ sdist/ var/ wheels/ -pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg @@ -74,6 +72,7 @@ coverage.xml *.py,cover .hypothesis/ .pytest_cache/ +cover/ # Translations *.mo @@ -96,6 +95,7 @@ instance/ docs/_build/ # PyBuilder +.pybuilder/ target/ # Jupyter Notebook @@ -106,7 +106,9 @@ profile_default/ ipython_config.py # pyenv -.python-version +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. @@ -151,3 +153,134 @@ dmypy.json # Pyre type checker .pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# Editors +.vscode/ +.idea/ + +# Vagrant +.vagrant/ + +# Mac/OSX +.DS_Store + +# Windows +Thumbs.db + +# Source for the following rules: https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib64/ +parts/ +sdist/ +var/ +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 + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..88e95c7d --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,53 @@ +exclude: '^.*\.(md|MD)$' +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: trailing-whitespace + - id: check-added-large-files + - id: end-of-file-fixer + - id: mixed-line-ending + args: ["--fix=lf"] + + - repo: https://github.com/pycqa/isort + rev: 6.0.0 + hooks: + - id: isort + args: + [ + "--profile", + "black", + "--multi-line=3", + "--trailing-comma", + "--force-grid-wrap=0", + "--use-parentheses", + "--line-width=88", + ] + + - repo: https://github.com/myint/autoflake.git + rev: v2.3.1 + hooks: + - id: autoflake + args: + [ + "--in-place", + "--remove-all-unused-imports", + "--ignore-init-module-imports", + ] + + - repo: https://github.com/psf/black + rev: "24.4.0" + hooks: + - id: black + + - repo: https://github.com/asottile/pyupgrade + rev: v3.15.2 + hooks: + - id: pyupgrade + args: ["--py37-plus", "--keep-runtime-typing"] + + - repo: https://github.com/commitizen-tools/commitizen + rev: v3.22.0 + hooks: + - id: commitizen + stages: [commit-msg] diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 00000000..84541506 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "2.15.1" +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..4091acfc --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4524 @@ +# CHANGELOG + +## [2.15.1](https://github.com/supabase/supabase-py/compare/v2.15.0...v2.15.1) (2025-04-28) + + +### Bug Fixes + +* **postgrest:** add missing count, head, and get params ([#1098](https://github.com/supabase/supabase-py/issues/1098)) ([e9c219e](https://github.com/supabase/supabase-py/commit/e9c219ebda5282db521c180fad108f7227ba6fa6)) +* **realtime:** bump realtime from 2.4.2 to 2.4.3 ([#1112](https://github.com/supabase/supabase-py/issues/1112)) ([1d429c6](https://github.com/supabase/supabase-py/commit/1d429c65556a6d9bf356edd3d92305cbda01cdf3)) +* remove return type from postgrest methods ([#1110](https://github.com/supabase/supabase-py/issues/1110)) ([6664f42](https://github.com/supabase/supabase-py/commit/6664f42157702d5c0f446682c80b3c37181303d3)) + +## [2.15.0](https://github.com/supabase/supabase-py/compare/v2.14.0...v2.15.0) (2025-03-26) + + +### Features + +* **postgrest:** bump postgrest from 0.19.3 to 1.0.0 ([#1074](https://github.com/supabase/supabase-py/issues/1074)) ([5e59df6](https://github.com/supabase/supabase-py/commit/5e59df6bfae71c6c84c839ec779494b59090e2ee)) + + +### Bug Fixes + +* **auth:** bump gotrue from 2.11.4 to 2.12.0 ([#1087](https://github.com/supabase/supabase-py/issues/1087)) ([da3ed9c](https://github.com/supabase/supabase-py/commit/da3ed9cdd709a09ca545e27189c870926aace5f6)) +* **functions:** bump supafunc from 0.9.3 to 0.9.4 ([#1088](https://github.com/supabase/supabase-py/issues/1088)) ([0340c8e](https://github.com/supabase/supabase-py/commit/0340c8eeb0f80c1dc7d24306625a27346eef10b5)) +* **postgrest:** bump postgrest from 1.0.0 to 1.0.1 ([#1083](https://github.com/supabase/supabase-py/issues/1083)) ([44d2ca5](https://github.com/supabase/supabase-py/commit/44d2ca56eb7d33245023a620d03fbb9184818ea1)) +* **realtime:** bump realtime from 2.4.0 to 2.4.1 ([#1066](https://github.com/supabase/supabase-py/issues/1066)) ([1f92945](https://github.com/supabase/supabase-py/commit/1f92945a134de22eedc7911c80ed0607624e5b0c)) +* **realtime:** bump realtime from 2.4.1 to 2.4.2 ([#1089](https://github.com/supabase/supabase-py/issues/1089)) ([7816d7f](https://github.com/supabase/supabase-py/commit/7816d7f40e0591da57679c60a1bd48177f351937)) +* schema method should use postgres method directly ([#1082](https://github.com/supabase/supabase-py/issues/1082)) ([b992324](https://github.com/supabase/supabase-py/commit/b9923249d91d5dd4c6817f593202aca9e31f7563)) + +## [2.14.0](https://github.com/supabase/supabase-py/compare/v2.13.0...v2.14.0) (2025-03-20) + + +### Features + +* **realtime:** bump realtime from 2.3.0 to 2.4.0 ([#1059](https://github.com/supabase/supabase-py/issues/1059)) ([9cdf7fa](https://github.com/supabase/supabase-py/commit/9cdf7fa4621f62f673c584aa712807b1eea3d334)) + + +### Bug Fixes + +* **auth:** bump gotrue from 2.11.3 to 2.11.4 ([#1060](https://github.com/supabase/supabase-py/issues/1060)) ([a8600fd](https://github.com/supabase/supabase-py/commit/a8600fd9e38c2d9297b0631f6d9e55dfdf5951ca)) + +## [2.13.0](https://github.com/supabase/supabase-py/compare/v2.12.0...v2.13.0) (2025-02-04) + + +### Features + +* **realtime:** bump realtime from 2.2.0 to 2.3.0 ([#1049](https://github.com/supabase/supabase-py/issues/1049)) ([2347401](https://github.com/supabase/supabase-py/commit/23474017701560c361e3cb2d8fe49f238a8fc9d0)) + + +### Bug Fixes + +* **auth:** bump gotrue from 2.11.2 to 2.11.3 ([#1051](https://github.com/supabase/supabase-py/issues/1051)) ([4a2bb9e](https://github.com/supabase/supabase-py/commit/4a2bb9e73e8979e1c28ec9df788f4291c9e59c82)) +* **functions:** bump supafunc from 0.9.2 to 0.9.3 ([#1052](https://github.com/supabase/supabase-py/issues/1052)) ([29fed38](https://github.com/supabase/supabase-py/commit/29fed38015ff51fb1543f5efc7c34b5fd75ac0e4)) +* **storage:** bump storage3 from 0.11.1 to 0.11.3 ([#1050](https://github.com/supabase/supabase-py/issues/1050)) ([8c5d48f](https://github.com/supabase/supabase-py/commit/8c5d48f51f21658cf1e495d0e9f01906b5040fbd)) +* update SupabaseAuthClient to use super instead of calling base class ([#1045](https://github.com/supabase/supabase-py/issues/1045)) ([3efb4a6](https://github.com/supabase/supabase-py/commit/3efb4a678b6f2585622d1870410445e74e2b6c49)) + +## [2.12.0](https://github.com/supabase/supabase-py/compare/v2.11.0...v2.12.0) (2025-01-24) + + +### Features + +* **realtime:** bump realtime from 2.1.0 to 2.2.0 ([#1037](https://github.com/supabase/supabase-py/issues/1037)) ([0e5eed6](https://github.com/supabase/supabase-py/commit/0e5eed6f47096e21f8f1e0b94bcae121e21afdc0)) + + +### Bug Fixes + +* **auth:** bump gotrue from 2.11.1 to 2.11.2 ([#1036](https://github.com/supabase/supabase-py/issues/1036)) ([f7c87b9](https://github.com/supabase/supabase-py/commit/f7c87b90108d3d448718ea1f8c92de2492735253)) +* **functions:** bump supafunc from 0.9.0 to 0.9.2 ([#1029](https://github.com/supabase/supabase-py/issues/1029)) ([f53f7ff](https://github.com/supabase/supabase-py/commit/f53f7ff58cb75b7b9aa5172eb6319b01f1f40407)) +* **postgrest:** bump postgrest from 0.19.1 to 0.19.3 ([#1040](https://github.com/supabase/supabase-py/issues/1040)) ([c117a57](https://github.com/supabase/supabase-py/commit/c117a57a3f06d31499c194fa17cd48e87a5ea234)) +* **storage:** bump storage3 from 0.11.0 to 0.11.1 ([#1035](https://github.com/supabase/supabase-py/issues/1035)) ([17942a2](https://github.com/supabase/supabase-py/commit/17942a2a6a6537d0ed36c06ffd62d224f094b39a)) + +## [2.11.0](https://github.com/supabase/supabase-py/compare/v2.10.0...v2.11.0) (2024-12-30) + + +### Features + +* **auth:** bump gotrue from 2.10.0 to 2.11.0 ([#1005](https://github.com/supabase/supabase-py/issues/1005)) ([721de30](https://github.com/supabase/supabase-py/commit/721de30e5b4b582de9c371f28ebc4d27b57b4780)) +* **auth:** bump gotrue from 2.11.0 to 2.11.1 ([#1021](https://github.com/supabase/supabase-py/issues/1021)) ([17e8a66](https://github.com/supabase/supabase-py/commit/17e8a662de051e5805530544860e526074b55c0e)) +* **functions:** bump supafunc from 0.7.0 to 0.8.0 ([#1006](https://github.com/supabase/supabase-py/issues/1006)) ([bfc4a5c](https://github.com/supabase/supabase-py/commit/bfc4a5c1e36d3db57d71cf04bcb37faf199f687e)) +* **functions:** bump supafunc from 0.8.0 to 0.9.0 ([#1008](https://github.com/supabase/supabase-py/issues/1008)) ([19ab5df](https://github.com/supabase/supabase-py/commit/19ab5df525d87b59650a15eb97c9c7ac6346be91)) +* **postgrest:** bump postgrest from 0.18.0 to 0.19.0 ([#1004](https://github.com/supabase/supabase-py/issues/1004)) ([d7861b0](https://github.com/supabase/supabase-py/commit/d7861b0c4daf2a225abc14207b166d1121d29a62)) +* **postgrest:** bump postgrest from 0.19.0 to 0.19.1 ([#1022](https://github.com/supabase/supabase-py/issues/1022)) ([9a8b72f](https://github.com/supabase/supabase-py/commit/9a8b72fe3d08a4ad522c518b14485f5686d82ffa)) +* **realtime:** bump realtime from 2.0.6 to 2.1.0 ([#1019](https://github.com/supabase/supabase-py/issues/1019)) ([f251d52](https://github.com/supabase/supabase-py/commit/f251d520af57a89e21850658c786eb669a4762a8)) +* **storage:** bump storage3 from 0.10.0 to 0.11.0 ([#1020](https://github.com/supabase/supabase-py/issues/1020)) ([fb7a7e1](https://github.com/supabase/supabase-py/commit/fb7a7e12577d9718071edfe05077208cbeab5b7c)) +* **storage:** bump storage3 from 0.9.0 to 0.10.0 ([#1003](https://github.com/supabase/supabase-py/issues/1003)) ([718edc3](https://github.com/supabase/supabase-py/commit/718edc3892600ca3126f35503599cf0815f9c6c5)) + + +### Bug Fixes + +* remove project reference ([#999](https://github.com/supabase/supabase-py/issues/999)) ([e126d04](https://github.com/supabase/supabase-py/commit/e126d04d26f89c274511d151284eb12fa213cdd1)) + +## [2.10.0](https://github.com/supabase/supabase-py/compare/v2.9.1...v2.10.0) (2024-11-04) + + +### Features + +* **auth:** bump gotrue from 2.9.3 to 2.10.0 ([#984](https://github.com/supabase/supabase-py/issues/984)) ([34f86e6](https://github.com/supabase/supabase-py/commit/34f86e6320ec6043014fc59e75e8bffd43dab2ee)) +* **functions:** bump supafunc from 0.6.2 to 0.7.0 ([#982](https://github.com/supabase/supabase-py/issues/982)) ([bd630d5](https://github.com/supabase/supabase-py/commit/bd630d5071fa72aebd3efdd9c3ff194cab7420e0)) +* **postgrest:** bump postgrest from 0.17.2 to 0.18.0 ([#981](https://github.com/supabase/supabase-py/issues/981)) ([9b5cc07](https://github.com/supabase/supabase-py/commit/9b5cc07a2ee68a03bb4c854b38b675f9b2d032a7)) +* **storage:** bump storage3 from 0.8.2 to 0.9.0 ([#979](https://github.com/supabase/supabase-py/issues/979)) ([38d40e5](https://github.com/supabase/supabase-py/commit/38d40e53eb3897eadb111c55c40fb9b52a019297)) + +## [2.9.1](https://github.com/supabase/supabase-py/compare/v2.9.0...v2.9.1) (2024-10-18) + + +### Bug Fixes + +* **auth:** bump gotrue from 2.9.1 to 2.9.2 ([#957](https://github.com/supabase/supabase-py/issues/957)) ([e9feb48](https://github.com/supabase/supabase-py/commit/e9feb487f017c1d1aa0bbd0583c25016be9ad470)) +* **auth:** raise the minimum version of gotrue to 2.9.0 ([#963](https://github.com/supabase/supabase-py/issues/963)) ([fce8839](https://github.com/supabase/supabase-py/commit/fce8839d73208507b61af2b083fed4bf4602f71b)) +* **deps:** bump gotrue from 2.9.2 to 2.9.3 ([#969](https://github.com/supabase/supabase-py/issues/969)) ([5bb8e36](https://github.com/supabase/supabase-py/commit/5bb8e36021ca5dd48e2bfce3463e429e0b770e0c)) +* **deps:** bump postgrest from 0.17.1 to 0.17.2 ([#972](https://github.com/supabase/supabase-py/issues/972)) ([fcea7f4](https://github.com/supabase/supabase-py/commit/fcea7f4f9ba067adca340b4f6acfbd09167952e2)) +* **deps:** bump realtime from 2.0.5 to 2.0.6 ([#968](https://github.com/supabase/supabase-py/issues/968)) ([aba0ced](https://github.com/supabase/supabase-py/commit/aba0cedd0ec02626819dfe0b6ff4b74d93cc1186)) +* **deps:** bump storage3 from 0.8.1 to 0.8.2 ([#970](https://github.com/supabase/supabase-py/issues/970)) ([05abdaa](https://github.com/supabase/supabase-py/commit/05abdaae0b9ee877ef2db34cd41fc818eb9a7574)) +* **deps:** bump supafunc from 0.6.1 to 0.6.2 ([#971](https://github.com/supabase/supabase-py/issues/971)) ([de1d105](https://github.com/supabase/supabase-py/commit/de1d105444620f6fa905965cb79220b56ad0d06a)) +* remove typing-extensions ([#965](https://github.com/supabase/supabase-py/issues/965)) ([c2eed40](https://github.com/supabase/supabase-py/commit/c2eed40a9e51001d51197272e7f04d732c48a0cb)) +* schema access optimization ([#966](https://github.com/supabase/supabase-py/issues/966)) ([8f1300e](https://github.com/supabase/supabase-py/commit/8f1300eed555903733b62fb7ed2959328fba03fe)) +* Types to use Option[T] ([#960](https://github.com/supabase/supabase-py/issues/960)) ([c36d80f](https://github.com/supabase/supabase-py/commit/c36d80f4776d5ad53e90344670f643fb07d685bc)) + +## [2.9.0](https://github.com/supabase/supabase-py/compare/v2.8.1...v2.9.0) (2024-10-04) + + +### Features + +* Proxy support ([#950](https://github.com/supabase/supabase-py/issues/950)) ([2a89a7c](https://github.com/supabase/supabase-py/commit/2a89a7c7f6daface72741ed336e6ececb13c7b1e)) + + +### Bug Fixes + +* **functions:** bump supafunc from 0.6.0 to 0.6.1 ([#954](https://github.com/supabase/supabase-py/issues/954)) ([1834069](https://github.com/supabase/supabase-py/commit/18340690c58c217875511a11f40fc5e85001748b)) +* **postgrest:** bump postgrest from 0.17.0 to 0.17.1 ([#952](https://github.com/supabase/supabase-py/issues/952)) ([ec19cd4](https://github.com/supabase/supabase-py/commit/ec19cd4da0895a561ccc73f9f12228f70ced71b4)) +* **storage:** bump storage3 from 0.8.0 to 0.8.1 ([#953](https://github.com/supabase/supabase-py/issues/953)) ([b739b97](https://github.com/supabase/supabase-py/commit/b739b979014527a24a4efdf60e986821dde1c10a)) + +## [2.8.1](https://github.com/supabase/supabase-py/compare/v2.8.0...v2.8.1) (2024-09-30) + + +### Bug Fixes + +* **auth:** bump gotrue from 2.9.0 to 2.9.1 ([#948](https://github.com/supabase/supabase-py/issues/948)) ([90db548](https://github.com/supabase/supabase-py/commit/90db5480eec3fe403cfd3b161c6a37f121ef6706)) +* **deps:** change version constraints on managed dependencies ([#945](https://github.com/supabase/supabase-py/issues/945)) ([d4f9307](https://github.com/supabase/supabase-py/commit/d4f9307dd2f244dad3cbcafce549e0bf3f963571)) +* storage type for async client options ([#944](https://github.com/supabase/supabase-py/issues/944)) ([28a9c9f](https://github.com/supabase/supabase-py/commit/28a9c9f063ad3d70dd58dd588eecbac6e9621fc1)) + +## [2.8.0](https://github.com/supabase/supabase-py/compare/v2.7.4...v2.8.0) (2024-09-29) + + +### Features + +* **auth:** bump gotrue from 2.7.0 to 2.8.0 ([#916](https://github.com/supabase/supabase-py/issues/916)) ([ae97452](https://github.com/supabase/supabase-py/commit/ae9745247b271b3d2e9ef5ab28da04a68ffdc9bc)) +* **auth:** bump gotrue from 2.8.1 to 2.9.0 ([#940](https://github.com/supabase/supabase-py/issues/940)) ([9c6c433](https://github.com/supabase/supabase-py/commit/9c6c4333c3a102e0436fbd99dcaf2b38899a1d2d)) +* **deps:** bump postgrest from 0.16.11 to 0.17.0 ([#939](https://github.com/supabase/supabase-py/issues/939)) ([17bcf6d](https://github.com/supabase/supabase-py/commit/17bcf6ddcc123924fd24a7ba424ef6c9ee3adde4)) +* **functions:** bump supafunc from 0.5.1 to 0.6.0 ([#942](https://github.com/supabase/supabase-py/issues/942)) ([c1513a9](https://github.com/supabase/supabase-py/commit/c1513a972a82bf6ffeb1e5fce9458157e7c68b18)) +* set default flow_type to pkce ([#931](https://github.com/supabase/supabase-py/issues/931)) ([acbaae5](https://github.com/supabase/supabase-py/commit/acbaae5393d689535ace3d9e43b65392b9f94be6)) +* **storage:** bump storage3 from 0.7.7 to 0.8.0 ([#941](https://github.com/supabase/supabase-py/issues/941)) ([4060f47](https://github.com/supabase/supabase-py/commit/4060f4722b50341d870971fc37fb6c053d43f15b)) + + +### Bug Fixes + +* async client options default values ([#937](https://github.com/supabase/supabase-py/issues/937)) ([1e02178](https://github.com/supabase/supabase-py/commit/1e02178d3a62225d8230c36ca134cc01e02c9daa)) +* async set_auth for realtime in auth event listener ([#930](https://github.com/supabase/supabase-py/issues/930)) ([5e34512](https://github.com/supabase/supabase-py/commit/5e34512448bf037d1d002ebe162e415e707054b5)) +* **deps:** bump gotrue from 2.8.0 to 2.8.1 ([#923](https://github.com/supabase/supabase-py/issues/923)) ([eb7b466](https://github.com/supabase/supabase-py/commit/eb7b466838ba31bbe28af11144aff80cc94873fc)) +* **deps:** bump realtime from 2.0.2 to 2.0.5 ([#936](https://github.com/supabase/supabase-py/issues/936)) ([e1e0fb2](https://github.com/supabase/supabase-py/commit/e1e0fb25a62e7ca1819d327cdae00760d5cf64e2)) +* **realtime:** enable auto_reconnect option from supabase client ([#938](https://github.com/supabase/supabase-py/issues/938)) ([3eb18e3](https://github.com/supabase/supabase-py/commit/3eb18e3b31ad88fe89be01343212f57b7149b4fd)) +* update exports from init file ([#928](https://github.com/supabase/supabase-py/issues/928)) ([7a6199e](https://github.com/supabase/supabase-py/commit/7a6199e1c532fc46662d0b33b166b6db3456fec5)) + +## [2.7.4](https://github.com/supabase/supabase-py/compare/v2.7.3...v2.7.4) (2024-08-29) + + +### Bug Fixes + +* add `verify` argument to `_init_supabase_auth_client()` ([#913](https://github.com/supabase/supabase-py/issues/913)) ([cb6743b](https://github.com/supabase/supabase-py/commit/cb6743bab3505d3e107fdab6a26edced79867af8)) + +## [2.7.3](https://github.com/supabase/supabase-py/compare/v2.7.2...v2.7.3) (2024-08-22) + + +### Bug Fixes + +* bump postgrest from 0.16.10 to 0.16.11 ([#910](https://github.com/supabase/supabase-py/issues/910)) ([495ae1d](https://github.com/supabase/supabase-py/commit/495ae1d8f8d95c1daac68110040c49734846a499)) +* bump realtime from 2.0.1 to 2.0.2 ([#906](https://github.com/supabase/supabase-py/issues/906)) ([d81e2dc](https://github.com/supabase/supabase-py/commit/d81e2dc0fdd65b8808b7b905a3ab2c84b650fa2a)) + +## [2.7.2](https://github.com/supabase/supabase-py/compare/v2.7.1...v2.7.2) (2024-08-19) + + +### Bug Fixes + +* **realtime:** update realtime for fixing NotConnectedError ([#902](https://github.com/supabase/supabase-py/issues/902)) ([67dbaf2](https://github.com/supabase/supabase-py/commit/67dbaf2ac479944d3faf8d8eaa6db17590db5a45)) + +## [2.7.1](https://github.com/supabase/supabase-py/compare/v2.7.0...v2.7.1) (2024-08-16) + + +### Bug Fixes + +* remove old SupabaseRealtimeClient import ([#896](https://github.com/supabase/supabase-py/issues/896)) ([579f499](https://github.com/supabase/supabase-py/commit/579f49970a01036bd0cba67a2b58b49c62876b33)) + +## [2.7.0](https://github.com/supabase/supabase-py/compare/v2.6.0...v2.7.0) (2024-08-16) + + +### Features + +* **realtime:** add realtime V2 ([#886](https://github.com/supabase/supabase-py/issues/886)) ([08496eb](https://github.com/supabase/supabase-py/commit/08496eb4c1c203d2806fc44753f3bddc4b463db0)) + +## v2.6.0 (2024-07-24) + +### Chore + +* chore(deps): bump supafunc from 0.4.7 to 0.5.0 (#866) ([`7201089`](https://github.com/supabase-community/supabase-py/commit/72010899dbd1eff9da490895bf1d7ad449c2c147)) + +* chore(deps-dev): bump pytest from 8.2.2 to 8.3.1 (#865) ([`ccdb442`](https://github.com/supabase-community/supabase-py/commit/ccdb442577b073c51ed31a328b7d683ae65dca12)) + +* chore(deps-dev): bump commitizen from 3.27.0 to 3.28.0 (#862) ([`877a7e0`](https://github.com/supabase-community/supabase-py/commit/877a7e0cc2b3a61936443aa00986cc6676e51c9c)) + +* chore(deps): bump gotrue from 2.5.5 to 2.6.0 (#861) ([`bf1a2a6`](https://github.com/supabase-community/supabase-py/commit/bf1a2a64aedc3becf6c6db1d7e22f5934bdeed43)) + +### Feature + +* feat: add edge functions timeout (#846) ([`c4fe829`](https://github.com/supabase-community/supabase-py/commit/c4fe829430fe04053010cf5faf564dbd484378fa)) + +### Unknown + +* Update README.md (#820) ([`53ed4fe`](https://github.com/supabase-community/supabase-py/commit/53ed4fec676538378eb079a1c073398dba34f569)) + +## v2.5.3 (2024-07-16) + +### Chore + +* chore(release): bump version to v2.5.3 ([`475bd18`](https://github.com/supabase-community/supabase-py/commit/475bd184d0dd89b5f97fb994d5c038ca8616f208)) + +### Fix + +* fix: missing await in async create_client (#859) ([`07c75ee`](https://github.com/supabase-community/supabase-py/commit/07c75eef93f61e4e815781f6b9cdbd197be1f64b)) + +## v2.5.2 (2024-07-16) + +### Chore + +* chore(release): bump version to v2.5.2 ([`e437159`](https://github.com/supabase-community/supabase-py/commit/e43715910f0188cbc8265692514139d462153b92)) + +* chore(deps): bump postgrest from 0.16.8 to 0.16.9 (#858) ([`aab9c3e`](https://github.com/supabase-community/supabase-py/commit/aab9c3eaaaf549a6c58051bef0e0253889b7ddd3)) + +* chore(deps): bump storage3 from 0.7.6 to 0.7.7 (#857) ([`1c57f11`](https://github.com/supabase-community/supabase-py/commit/1c57f113345ca9c59f1ef7017e4578a9c6d3b666)) + +* chore(deps): bump supafunc from 0.4.6 to 0.4.7 (#856) ([`e86ca82`](https://github.com/supabase-community/supabase-py/commit/e86ca8203a759dd56415f3dab35f08a76539bc71)) + +* chore(deps): bump gotrue from 2.5.4 to 2.5.5 (#855) ([`544dd41`](https://github.com/supabase-community/supabase-py/commit/544dd4167e7d07557aa8049bf1fbc6e79d6a9ad8)) + +* chore(deps-dev): bump zipp from 3.18.1 to 3.19.1 in the pip group across 1 directory (#854) ([`b339e83`](https://github.com/supabase-community/supabase-py/commit/b339e832bb3b1c5c77644c799266286117c3b6ac)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.8.4 to 9.8.5 (#853) ([`989668b`](https://github.com/supabase-community/supabase-py/commit/989668b50e530cf74f2dfa8571c3af41cc552906)) + +* chore(deps-dev): bump python-semantic-release from 9.8.4 to 9.8.5 (#852) ([`592fe8e`](https://github.com/supabase-community/supabase-py/commit/592fe8ef6ce24ac09f42b31ce80b81d651fd33d1)) + +* chore(deps): bump certifi from 2024.2.2 to 2024.7.4 in the pip group across 1 directory (#849) ([`ac5f04d`](https://github.com/supabase-community/supabase-py/commit/ac5f04d68b0970f0c1488ef930d0ad8a4088d809)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.8.3 to 9.8.4 (#848) ([`f846a94`](https://github.com/supabase-community/supabase-py/commit/f846a94db3044716b46eb1f96ef38c6a38496112)) + +* chore(deps-dev): bump python-semantic-release from 9.8.3 to 9.8.4 (#847) ([`419b5e0`](https://github.com/supabase-community/supabase-py/commit/419b5e09634b6ee41c1fa77b577e8371377d4078)) + +* chore(deps): bump gotrue from 2.5.3 to 2.5.4 (#842) ([`55c2581`](https://github.com/supabase-community/supabase-py/commit/55c258173843153d9286919e8b8f4cd4fc56faab)) + +* chore(deps): bump gotrue from 2.5.2 to 2.5.3 (#841) ([`50c3d3a`](https://github.com/supabase-community/supabase-py/commit/50c3d3a662707d468a67b4450984f0b79eb195a2)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.8.1 to 9.8.3 (#836) ([`c7fa816`](https://github.com/supabase-community/supabase-py/commit/c7fa816e0aa13df02ece206f4d7973dc645c5229)) + +* chore(deps): bump gotrue from 2.4.4 to 2.5.2 (#840) ([`e8d3463`](https://github.com/supabase-community/supabase-py/commit/e8d34638d90524dc03b805c138a8665270e853cf)) + +* chore(deps-dev): bump python-semantic-release from 9.8.1 to 9.8.3 (#835) ([`dc958bc`](https://github.com/supabase-community/supabase-py/commit/dc958bc45565b17b0ea6f3204fccd7e6c6deb97f)) + +* chore(deps): bump realtime from 1.0.5 to 1.0.6 (#832) ([`39e746d`](https://github.com/supabase-community/supabase-py/commit/39e746df09e2d0171bf9f95b1dd44bbc833237d0)) + +* chore(deps-dev): bump urllib3 from 2.2.1 to 2.2.2 in the pip group across 1 directory (#831) ([`8ee2946`](https://github.com/supabase-community/supabase-py/commit/8ee2946d072350ed155d532f3700a992c8a8ea89)) + +### Fix + +* fix: resolve user session inside of the create factory method (#851) ([`4635994`](https://github.com/supabase-community/supabase-py/commit/4635994764c91b34d77ad84e113f374d5404ca98)) + +## v2.5.1 (2024-06-11) + +### Chore + +* chore(release): bump version to v2.5.1 ([`2cf1242`](https://github.com/supabase-community/supabase-py/commit/2cf12420c3d3d8dfd1488db3953f254fed9d96d6)) + +* chore(deps): bump supafunc from 0.4.5 to 0.4.6 (#826) ([`3558813`](https://github.com/supabase-community/supabase-py/commit/35588132f652b086c2ddb8f50d31cdc4d37bb5b3)) + +* chore(deps-dev): bump pytest from 8.2.1 to 8.2.2 (#825) ([`a0103b4`](https://github.com/supabase-community/supabase-py/commit/a0103b4251cdf4fa615f9e52c1ab1e9ada453311)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.8.0 to 9.8.1 (#823) ([`d45df9b`](https://github.com/supabase-community/supabase-py/commit/d45df9b790125e546ce53500c96ca4ba6e088b85)) + +* chore(deps): bump storage3 from 0.7.4 to 0.7.6 (#822) ([`dcb0992`](https://github.com/supabase-community/supabase-py/commit/dcb09926267e2901d341ff275f3b0d3dd504d33f)) + +* chore(deps-dev): bump python-semantic-release from 9.7.3 to 9.8.1 (#821) ([`f271d5b`](https://github.com/supabase-community/supabase-py/commit/f271d5bbf4efa08b109049c22add2fc0676ec898)) + +* chore(deps): bump postgrest from 0.16.4 to 0.16.8 (#819) ([`b0cb1a5`](https://github.com/supabase-community/supabase-py/commit/b0cb1a5b257cfeba056a602b26c6fe0cc46c67a9)) + +* chore(deps): bump gotrue from 2.4.2 to 2.4.4 (#817) ([`9f91f7d`](https://github.com/supabase-community/supabase-py/commit/9f91f7da974025b0c590329d7324e4a3c0e153cd)) + +* chore(deps): bump realtime from 1.0.4 to 1.0.5 (#812) ([`035c0f4`](https://github.com/supabase-community/supabase-py/commit/035c0f479d6f1fd470df0d02e488d2d77484652e)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.7.3 to 9.8.0 (#810) ([`683a820`](https://github.com/supabase-community/supabase-py/commit/683a820e29fe38037c3ce138c611f59c7a0bf0f1)) + +* chore(deps-dev): bump commitizen from 3.26.0 to 3.27.0 (#807) ([`bebb676`](https://github.com/supabase-community/supabase-py/commit/bebb6767c8cd70eb2a128775366a532a2e5b7127)) + +### Fix + +* fix: add "verify" flag to the creation of client ([`0c51cf0`](https://github.com/supabase-community/supabase-py/commit/0c51cf0d51e843e13f116561bedcf24c1ff3dad4)) + +## v2.5.0 (2024-05-28) + +### Chore + +* chore(release): bump version to v2.5.0 ([`f462e3a`](https://github.com/supabase-community/supabase-py/commit/f462e3a9e167771c7a7c12d3d8be6e1d6ad4c5ba)) + +### Feature + +* feat: add schema method to the client (#809) ([`d6a5df9`](https://github.com/supabase-community/supabase-py/commit/d6a5df9d48ee9384071541781084dde422f58f72)) + +## v2.4.6 (2024-05-22) + +### Chore + +* chore(release): bump version to v2.4.6 ([`8468c2e`](https://github.com/supabase-community/supabase-py/commit/8468c2e665a3f5f27d456843e71d23f906c4f665)) + +* chore(deps-dev): bump requests from 2.31.0 to 2.32.0 in the pip group across 1 directory (#804) ([`2972d76`](https://github.com/supabase-community/supabase-py/commit/2972d760870f1583ffdfe20e6b7b0f9f52c239eb)) + +* chore(deps-dev): bump commitizen from 3.25.0 to 3.26.0 (#803) ([`ee0cc80`](https://github.com/supabase-community/supabase-py/commit/ee0cc8063e312b7fe0d282e04692093672133b97)) + +* chore(deps-dev): bump pytest from 8.2.0 to 8.2.1 (#802) ([`5f87f29`](https://github.com/supabase-community/supabase-py/commit/5f87f29bf575190ceaa31a12402f0b64fde9cb03)) + +* chore(deps-dev): bump python-semantic-release from 9.7.1 to 9.7.3 (#800) ([`1a81218`](https://github.com/supabase-community/supabase-py/commit/1a81218e53b3e40e9933ee79e97fbe1b6923f454)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.7.1 to 9.7.3 (#799) ([`ef184a8`](https://github.com/supabase-community/supabase-py/commit/ef184a86502e88bf2b1d4263ddfb3c89d8f47a32)) + +* chore(deps-dev): bump python-semantic-release from 9.6.0 to 9.7.1 (#795) ([`fee2b5e`](https://github.com/supabase-community/supabase-py/commit/fee2b5e7ea013d06fb4e0dc6492ec053974fba10)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.6.0 to 9.7.1 (#794) ([`18e0743`](https://github.com/supabase-community/supabase-py/commit/18e0743fd1a33d71443d7a25d43ae7995c80f977)) + +### Fix + +* fix: refactor create_client functions to call constructor directly (#805) ([`46c201f`](https://github.com/supabase-community/supabase-py/commit/46c201f8f52ce26f66bf5a22e4702785b2aa2be0)) + +## v2.4.5 (2024-05-01) + +### Chore + +* chore(release): bump version to v2.4.5 ([`ee65975`](https://github.com/supabase-community/supabase-py/commit/ee659752b3142a8d958f455d1c3fde17887d5a65)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.5.0 to 9.6.0 (#787) ([`719e43b`](https://github.com/supabase-community/supabase-py/commit/719e43b33df63447796ac27195bbf6374acaa984)) + +### Fix + +* fix(deps-dev): commitizen from 3.24.0 to 3.25.0 (#788) ([`5e8074a`](https://github.com/supabase-community/supabase-py/commit/5e8074a0fffd757bf597b7d4a0d7f310011547c2)) + +## v2.4.4 (2024-05-01) + +### Chore + +* chore(release): bump version to v2.4.4 ([`e2676ee`](https://github.com/supabase-community/supabase-py/commit/e2676ee0f4b9498f8f5512fda72bc3fdb7075250)) + +* chore(deps-dev): bump python-semantic-release from 9.5.0 to 9.6.0 (#785) ([`fbbf3d5`](https://github.com/supabase-community/supabase-py/commit/fbbf3d5e3137d44bf252c753871c42cdf344a7f1)) + +* chore(deps-dev): bump pytest from 8.1.1 to 8.2.0 (#784) ([`f1727a0`](https://github.com/supabase-community/supabase-py/commit/f1727a005dbfadbab1b85a210ce7dbf820983851)) + +* chore(deps-dev): bump python-semantic-release from 9.4.2 to 9.5.0 (#778) ([`4828e3b`](https://github.com/supabase-community/supabase-py/commit/4828e3b55611e264f41972eba3cd06de787fd4ad)) + +* chore(deps-dev): bump black from 24.4.0 to 24.4.2 (#782) ([`105adca`](https://github.com/supabase-community/supabase-py/commit/105adca0a59bb7565ecf156480c65b11648e9722)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.4.2 to 9.5.0 (#779) ([`59b73eb`](https://github.com/supabase-community/supabase-py/commit/59b73ebcaf98264135c9b467ab0d9786fd9af55e)) + +* chore(deps-dev): bump commitizen from 3.22.0 to 3.24.0 (#776) ([`8a64d83`](https://github.com/supabase-community/supabase-py/commit/8a64d8349f2e6049fcc56b814c2ae96c092fea30)) + +* chore: update .pre-commit-config.yaml (#772) ([`f893cc8`](https://github.com/supabase-community/supabase-py/commit/f893cc815dae9f969e3fbf6fbc84da64d8312d58)) + +* chore: add import async client (#760) ([`ad2fe1c`](https://github.com/supabase-community/supabase-py/commit/ad2fe1cbe86b5645fb88ff6c9d3ea9eb0c281ed3)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.4.1 to 9.4.2 (#769) ([`4a67fc2`](https://github.com/supabase-community/supabase-py/commit/4a67fc208254e9a30b35d359355c79001cbc2f40)) + +* chore(deps-dev): bump python-semantic-release from 9.4.1 to 9.4.2 (#768) ([`6fcf11a`](https://github.com/supabase-community/supabase-py/commit/6fcf11a8678571cf253c6ce03783349f6dec8ff4)) + +### Fix + +* fix(deps): bump postgrest from 0.16.3 to 0.16.4 with timeout fix (#786) ([`5cb84a5`](https://github.com/supabase-community/supabase-py/commit/5cb84a5e5df9ed7e5978a6b817369d39712183fc)) + +### Unknown + +* Add stale bot (#774) ([`2c67a13`](https://github.com/supabase-community/supabase-py/commit/2c67a1305e4d5c2bee95a98667d83b27c32f5703)) + +## v2.4.3 (2024-04-17) + +### Chore + +* chore(release): bump version to v2.4.3 ([`d3656a6`](https://github.com/supabase-community/supabase-py/commit/d3656a6664f34c948128b01b01677b9510b8a35f)) + +### Fix + +* fix(user auth context): do not overwrite provided client options Authorization header (#766) ([`4214c43`](https://github.com/supabase-community/supabase-py/commit/4214c43350d4d0028e7d7cb742c944efcbd32da5)) + +## v2.4.2 (2024-04-14) + +### Chore + +* chore(release): bump version to v2.4.2 ([`bb24ce0`](https://github.com/supabase-community/supabase-py/commit/bb24ce0787981d23991a5e4ad90cc057ca869f50)) + +* chore(deps-dev): bump black from 24.3.0 to 24.4.0 (#765) ([`23d97ce`](https://github.com/supabase-community/supabase-py/commit/23d97ce2e5f10c22502b16b61f0a2bb102060ced)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.3.1 to 9.4.1 (#758) ([`d1ea76e`](https://github.com/supabase-community/supabase-py/commit/d1ea76ed78eaa0c28ea0a4a5ab026faccb50ad13)) + +* chore(deps-dev): bump python-semantic-release from 9.3.1 to 9.4.1 (#759) ([`32e465b`](https://github.com/supabase-community/supabase-py/commit/32e465b7f89262af635c3e0c92db60aef6a974ff)) + +* chore(deps-dev): bump commitizen from 3.20.0 to 3.22.0 (#761) ([`583d0d5`](https://github.com/supabase-community/supabase-py/commit/583d0d56c21fed4cd95ae773aa659713e2522a7b)) + +* chore(deps): bump idna from 3.6 to 3.7 (#763) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`0871967`](https://github.com/supabase-community/supabase-py/commit/08719676cab9538c32c45b2f6dcd16702f2c540f)) + +### Fix + +* fix: Update minimum postgrest dep for imports (#767) ([`ac2d62d`](https://github.com/supabase-community/supabase-py/commit/ac2d62de335497e7dabcd3ca4d05d80713493f2e)) + +* fix: remove default mutable argument from client creation (#764) ([`5e46177`](https://github.com/supabase-community/supabase-py/commit/5e461777d34c1a038a02f72ca5d2dc7bb1109026)) + +### Unknown + +* remove mdformat-gfm (#750) ([`73c1958`](https://github.com/supabase-community/supabase-py/commit/73c1958be30b276e7b3cea154c6f62a6b292772b)) + +## v2.4.1 (2024-03-26) + +### Chore + +* chore(release): bump version to v2.4.1 ([`9e6ea08`](https://github.com/supabase-community/supabase-py/commit/9e6ea08bb11cd913108e96f335671ae0e551ff56)) + +* chore(deps): bump realtime from 1.0.2 to 1.0.3 (#748) ([`44afe58`](https://github.com/supabase-community/supabase-py/commit/44afe58a60dcadda8f249726161babecfab63297)) + +* chore(deps): bump gotrue from 2.4.1 to 2.4.2 (#747) ([`fb8bb8a`](https://github.com/supabase-community/supabase-py/commit/fb8bb8acca4985baa7a6a83d94b5e695c4e49277)) + +* chore(deps): bump postgrest from 0.16.1 to 0.16.2 (#746) ([`90f9fa3`](https://github.com/supabase-community/supabase-py/commit/90f9fa3d291e4fe81b1b5737e4ddd72608d74f74)) + +* chore(deps): bump storage3 from 0.7.3 to 0.7.4 (#745) ([`97d2977`](https://github.com/supabase-community/supabase-py/commit/97d2977b289b4f758dcbebd42615db70dc4bee6d)) + +* chore(deps): bump supafunc from 0.4.0 to 0.4.5 (#742) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`a49db52`](https://github.com/supabase-community/supabase-py/commit/a49db52e4e45fa7300fe54f7a11da80c8f5441d5)) + +* chore(deps-dev): bump pytest-cov from 4.1.0 to 5.0.0 (#744) ([`451b9ae`](https://github.com/supabase-community/supabase-py/commit/451b9ae48cf570f52fc0976ef68047107578228f)) + +* chore(deps-dev): bump python-semantic-release from 9.3.0 to 9.3.1 (#743) ([`d597397`](https://github.com/supabase-community/supabase-py/commit/d5973979d5f75683785dead6840fce6ebc1a0e94)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.3.0 to 9.3.1 (#741) ([`8f42f53`](https://github.com/supabase-community/supabase-py/commit/8f42f53bbd8b2f638bc8d480b9c8a4fd1ec39f28)) + +* chore: add python 3.12 to the test suite (#739) ([`6a3d83e`](https://github.com/supabase-community/supabase-py/commit/6a3d83efb0c9b07adc947e3099f131c483076854)) + +* chore(deps-dev): bump commitizen from 3.16.0 to 3.20.0 (#732) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`465be93`](https://github.com/supabase-community/supabase-py/commit/465be93b09d59443908f5ae34f0d5bf1ca4b548c)) + +* chore(deps-dev): bump black from 24.2.0 to 24.3.0 (#728) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`768eae3`](https://github.com/supabase-community/supabase-py/commit/768eae394b2cb2e637f7e14cad243564eaf20626)) + +* chore(deps-dev): bump python-semantic-release from 9.2.2 to 9.3.0 (#735) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`ecf0fe7`](https://github.com/supabase-community/supabase-py/commit/ecf0fe7222c22859498c4f9eb919cb9b0304c2d8)) + +* chore: Ignore paths on push to CI (#738) ([`a23f288`](https://github.com/supabase-community/supabase-py/commit/a23f288e0988c88e93c748da467afde5d94a9fe1)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.2.2 to 9.3.0 (#736) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`6c89405`](https://github.com/supabase-community/supabase-py/commit/6c89405753d98b77f6a601f3e266d28c2f08f8aa)) + +* chore(deps-dev): bump pytest from 8.0.2 to 8.1.1 (#723) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`16b0fb8`](https://github.com/supabase-community/supabase-py/commit/16b0fb826dea21a1e7d0fba3d041b5d32c5fed23)) + +* chore(deps-dev): bump python-semantic-release from 9.1.1 to 9.2.2 (#733) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`09f9ab1`](https://github.com/supabase-community/supabase-py/commit/09f9ab1701b94e9d6065e78bb9305e1a0afefee6)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 9.1.1 to 9.2.2 (#731) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`0f242af`](https://github.com/supabase-community/supabase-py/commit/0f242afeea1d5cd0f41aa36c0c60c527809c308e)) + +* chore(deps): bump storage3 from 0.7.0 to 0.7.3 (#724) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`00414ff`](https://github.com/supabase-community/supabase-py/commit/00414ffb0858312a890844ac4e40e6f6f1b07dd3)) + +* chore: update CODEOWNERS to use python-maintainers (#722) ([`d3362f3`](https://github.com/supabase-community/supabase-py/commit/d3362f3c591939db9d9a67b345e729390236eeba)) + +* chore(deps): bump supafunc from 0.3.3 to 0.4.0 (#714) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`4591e57`](https://github.com/supabase-community/supabase-py/commit/4591e571c5dec6ba03ab8b72a3222f78f709629c)) + +* chore(deps): bump codecov/codecov-action from 3 to 4 (#711) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`7f2ac03`](https://github.com/supabase-community/supabase-py/commit/7f2ac03926ee9073196facfcdcfbdcb199b5fbc4)) + +* chore(deps): bump python-semantic-release/python-semantic-release from 8.0.0 to 9.1.1 (#712) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`819ba63`](https://github.com/supabase-community/supabase-py/commit/819ba630b836f9ac850c3b2c2d5be01c0e1af934)) + +* chore(deps): bump gotrue from 2.1.0 to 2.4.1 (#713) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`a3707e7`](https://github.com/supabase-community/supabase-py/commit/a3707e79e789bc654f5c2298c4e1d10042eb9eb7)) + +### Fix + +* fix: update httpx dependency (#749) ([`fadbc4b`](https://github.com/supabase-community/supabase-py/commit/fadbc4b41fc7ef2dc92929c28150901ea700f83f)) + +### Unknown + +* ignore paths on ci (#737) ([`9ad4290`](https://github.com/supabase-community/supabase-py/commit/9ad42905f52a5cd8c7f93c64272260d85ecebeb2)) + +* Adhere to github flavoured markdown syntax (#695) ([`954d243`](https://github.com/supabase-community/supabase-py/commit/954d2437b9086f85e2d76a06e8ebce61dfe04237)) + +## v2.4.0 (2024-02-28) + +### Chore + +* chore(release): bump version to v2.4.0 ([`dece7d2`](https://github.com/supabase-community/supabase-py/commit/dece7d2649b457a17036efa52e780bc3eb38a3f4)) + +### Feature + +* feat: add actions to dependabot (#710) ([`4661668`](https://github.com/supabase-community/supabase-py/commit/4661668d90a04599813f7083ed1c13af1cd96c96)) + +## v2.3.8 (2024-02-28) + +### Chore + +* chore(release): bump version to v2.3.8 ([`d4e3d1b`](https://github.com/supabase-community/supabase-py/commit/d4e3d1b11e5376b1dc9a1171600ad57abef06522)) + +### Fix + +* fix: update postgrest and dev dependencies (#709) ([`f0f3079`](https://github.com/supabase-community/supabase-py/commit/f0f3079c90e848cb0da62d9cfcf77c0398113c2a)) + +## v2.3.7 (2024-02-26) + +### Chore + +* chore(release): bump version to v2.3.7 ([`9023c02`](https://github.com/supabase-community/supabase-py/commit/9023c025c96575723356f04b68375cf37f21ecd4)) + +### Fix + +* fix: Update rpc return type (#702) ([`4130d20`](https://github.com/supabase-community/supabase-py/commit/4130d20139b8b9f29da0503a0268d4903750e326)) + +## v2.3.6 (2024-02-22) + +### Chore + +* chore(release): bump version to v2.3.6 ([`9357140`](https://github.com/supabase-community/supabase-py/commit/93571406054e8290fa3252892c57741744ba96f8)) + +* chore(deps-dev): bump commitizen from 3.13.0 to 3.15.0 (#694) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`c881898`](https://github.com/supabase-community/supabase-py/commit/c88189862d6b1b4fa1639920dee141aee9198014)) + +* chore(deps-dev): bump black from 23.12.1 to 24.2.0 (#687) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`98face3`](https://github.com/supabase-community/supabase-py/commit/98face304a6afa7a91a97cf9b92977034e9b92af)) + +* chore(deps-dev): bump pytest from 8.0.0 to 8.0.1 (#692) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`45a9ffd`](https://github.com/supabase-community/supabase-py/commit/45a9ffd01d7c7a0b5fef124fd77be8ab23aa9541)) + +### Fix + +* fix: Export Core Supabase Classes and Functions Explicitly via __all__ (#691) + +Co-authored-by: Andrew Smith <a.smith@silentworks.co.uk> ([`5d04c4c`](https://github.com/supabase-community/supabase-py/commit/5d04c4c7612a55d8a58a9df54afa4cc13a54b918)) + +## v2.3.5 (2024-02-15) + +### Chore + +* chore(release): bump version to v2.3.5 ([`2bd19f3`](https://github.com/supabase-community/supabase-py/commit/2bd19f3c86cd0679c3ea335a3d02c3e160175880)) + +* chore(deps-dev): bump pytest from 7.4.4 to 8.0.0 (#677) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`e3383c3`](https://github.com/supabase-community/supabase-py/commit/e3383c393e05668a4206cd9d5db027fe960763ac)) + +* chore(deps-dev): bump python-dotenv from 1.0.0 to 1.0.1 (#675) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`abdb15c`](https://github.com/supabase-community/supabase-py/commit/abdb15c7463c4d49588dc83f6935eccf50dc2f5a)) + +### Fix + +* fix: add missing ClientOptions to the main init file (#688) ([`bd5f617`](https://github.com/supabase-community/supabase-py/commit/bd5f61716e44035acda91ab9f88d7370dee1f481)) + +### Unknown + +* docs (sunbase-py) updated setup instructions, PR guidelines, added resources & links (#690) ([`846d8e7`](https://github.com/supabase-community/supabase-py/commit/846d8e73bb05311030e62c87c15907967581ac9e)) + +* Update action versions in CI/CD (#679) ([`13bed26`](https://github.com/supabase-community/supabase-py/commit/13bed26e676242f020caad48f24c9db993c1cfc4)) + +## v2.3.4 (2024-01-15) + +### Chore + +* chore(release): bump version to v2.3.4 ([`225964c`](https://github.com/supabase-community/supabase-py/commit/225964cf1e6edab101ca4b04832d3315458aa6b2)) + +* chore(deps-dev): bump jinja2 from 3.1.2 to 3.1.3 (#661) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`dcbd7b4`](https://github.com/supabase-community/supabase-py/commit/dcbd7b47700b3b0d0e13f518e4542d5a2adc7ac9)) + +* chore(deps): bump postgrest from 0.13.1 to 0.13.2 (#662) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`82c4305`](https://github.com/supabase-community/supabase-py/commit/82c4305dcb572a372ecdadd653056d530f308f28)) + +### Fix + +* fix: update to latest postgrest (#669) ([`40cc767`](https://github.com/supabase-community/supabase-py/commit/40cc7672aa5308713e03f5464cd72cb8890817ec)) + +## v2.3.3 (2024-01-11) + +### Chore + +* chore(release): bump version to v2.3.3 ([`ff00bde`](https://github.com/supabase-community/supabase-py/commit/ff00bdef05cfac7c84245ec12e4f8ee8a33c0729)) + +* chore: remove init client code from every usage example ([`b0c5ac7`](https://github.com/supabase-community/supabase-py/commit/b0c5ac7a5f1f0a7906ba781dcc24c2afbd6346f9)) + +* chore(deps-dev): bump gitpython from 3.1.40 to 3.1.41 (#659) + +Signed-off-by: dependabot[bot] <support@github.com> +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`b3fd488`](https://github.com/supabase-community/supabase-py/commit/b3fd4887e11813118a465fe57c6c28830c31466f)) + +### Fix + +* fix: add correct token to new requests when a user is signed in ([`c74b65b`](https://github.com/supabase-community/supabase-py/commit/c74b65b76d28082422cdfbc9d5c43972eb37d846)) + +## v2.3.2 (2024-01-10) + +### Chore + +* chore(release): bump version to v2.3.2 ([`158f17a`](https://github.com/supabase-community/supabase-py/commit/158f17a4a5cfcbe0fee42c852b93e40b916e29a3)) + +### Fix + +* fix: Add AsyncMemoryStorage to AsyncClient options + +Co-authored-by: Andrew Smith <a.smith@silentworks.co.uk> ([`732e931`](https://github.com/supabase-community/supabase-py/commit/732e9317834043d3ac350a94d61116849007ac93)) + +## v2.3.1 (2024-01-05) + +### Chore + +* chore(release): bump version to v2.3.1 ([`272349e`](https://github.com/supabase-community/supabase-py/commit/272349ee768ab220c195d790990d7774811a0884)) + +### Fix + +* fix: update httpx and other dev dependencies (#653) ([`e26e217`](https://github.com/supabase-community/supabase-py/commit/e26e2178d0b83ba2084cce82cd22fe8fce913800)) + +### Unknown + +* Update MAINTAINERS.md (#651) ([`39f4aa8`](https://github.com/supabase-community/supabase-py/commit/39f4aa88dfed3b7329e7d13675735b013eb34d21)) + +* Update MAINTAINERS.md ([`fa03108`](https://github.com/supabase-community/supabase-py/commit/fa0310873132cceb32581e96f019300bfb644d5b)) + +## v2.3.0 (2023-12-15) + +### Chore + +* chore(release): bump version to v2.3.0 ([`f340c08`](https://github.com/supabase-community/supabase-py/commit/f340c08189c917263c325dc989a00a3669ba29af)) + +* chore: move roadmap below usage ([`52756a2`](https://github.com/supabase-community/supabase-py/commit/52756a2640199ef817897f91a973b24a95e26bd8)) + +### Feature + +* feat: update readme (#644) ([`46e0690`](https://github.com/supabase-community/supabase-py/commit/46e0690a1ae125aa6ab82befeb05c32fd8c6dd45)) + +### Unknown + +* Update README.md ([`45af4fb`](https://github.com/supabase-community/supabase-py/commit/45af4fb967e97325e7e5963a5aaf507669fd1084)) + +* Update README.md with completed tasks and rename to auth-py (#643) ([`d87fd0c`](https://github.com/supabase-community/supabase-py/commit/d87fd0cfe0029e4aae1d0cd7209c8769763d8224)) + +* Update README.md ([`f571d0e`](https://github.com/supabase-community/supabase-py/commit/f571d0e7f8217e65c3105db9df1ca627c4a8e3f6)) + +* Update README.md ([`d9d076c`](https://github.com/supabase-community/supabase-py/commit/d9d076c0b87b1900bccb7bb0bf7876115659dd85)) + +* Update README.md ([`d9e300a`](https://github.com/supabase-community/supabase-py/commit/d9e300adee62bed7fb74b4aac074b3456e98f9dc)) + +## v2.2.1 (2023-12-10) + +### Chore + +* chore(release): bump version to v2.2.1 ([`9ec606c`](https://github.com/supabase-community/supabase-py/commit/9ec606c5539bdf3e5531c26be3df783db6b28483)) + +### Fix + +* fix: upgrade gotrue and realtime dependencies (#637) ([`2554b66`](https://github.com/supabase-community/supabase-py/commit/2554b66b514bfc85c4c283430d95327cc9e8c4ab)) + +* fix: upgrade gotrue and realtime dependencies ([`4eb6dfe`](https://github.com/supabase-community/supabase-py/commit/4eb6dfe896e28d4801e1560cbf43348b1da74ee2)) + +## v2.2.0 (2023-12-01) + +### Chore + +* chore(release): bump version to v2.2.0 ([`88954c2`](https://github.com/supabase-community/supabase-py/commit/88954c26c7e89838476f22428cf4a798eca96e09)) + +### Feature + +* feat: add create method to handle token headers (#630) ([`fd612a0`](https://github.com/supabase-community/supabase-py/commit/fd612a00c8e8e8f9efdf700161358b09ed15a793)) + +* feat: add create method to handle token headers ([`4f47306`](https://github.com/supabase-community/supabase-py/commit/4f473069821066d622ff2ae4e9a668c6759af78a)) + +## v2.1.1 (2023-11-30) + +### Chore + +* chore(release): bump version to v2.1.1 ([`b9240d8`](https://github.com/supabase-community/supabase-py/commit/b9240d8ce29a584a0a016f502e352083063dd7db)) + +* chore(deps): bump gotrue from 1.3.0 to 2.0.0 (#628) ([`247b309`](https://github.com/supabase-community/supabase-py/commit/247b3091925347258348c200daec04a7b90c908b)) + +* chore(deps): bump gotrue from 1.3.0 to 2.0.0 + +Bumps [gotrue](https://github.com/supabase-community/gotrue-py) from 1.3.0 to 2.0.0. +- [Release notes](https://github.com/supabase-community/gotrue-py/releases) +- [Changelog](https://github.com/supabase-community/gotrue-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/gotrue-py/compare/v1.3.0...v2.0.0) + +--- +updated-dependencies: +- dependency-name: gotrue + dependency-type: direct:production + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`c1c0ac0`](https://github.com/supabase-community/supabase-py/commit/c1c0ac0b48d148653fa9aa0d8c3c980bc60282ac)) + +* chore(deps): bump gotrue from 1.3.0 to 1.3.1 (#626) ([`1d268a0`](https://github.com/supabase-community/supabase-py/commit/1d268a04e233991fb8b8f0fba65cf06aef247515)) + +* chore(deps): bump gotrue from 1.3.0 to 1.3.1 + +Bumps [gotrue](https://github.com/supabase-community/gotrue-py) from 1.3.0 to 1.3.1. +- [Release notes](https://github.com/supabase-community/gotrue-py/releases) +- [Changelog](https://github.com/supabase-community/gotrue-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/gotrue-py/compare/v1.3.0...v1.3.1) + +--- +updated-dependencies: +- dependency-name: gotrue + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`0ec8371`](https://github.com/supabase-community/supabase-py/commit/0ec83716f693ae5b0a3e167dfed13f5941c5f6be)) + +### Fix + +* fix: remove deprecated .functions() method (#629) ([`243324d`](https://github.com/supabase-community/supabase-py/commit/243324d37650c9540bab0b14b6d550f06e10f1d0)) + +* fix: remove deprecated .functions() method ([`e9f8010`](https://github.com/supabase-community/supabase-py/commit/e9f801040c7d62489e3648c0302018f69ed865f8)) + +### Unknown + +* add: complete string (#624) ([`b41c453`](https://github.com/supabase-community/supabase-py/commit/b41c453e0e65229b53d9640e660a58226ab2d7d9)) + +* add: complete string + +Incomplete String in `### Download a file` ([`7f7beec`](https://github.com/supabase-community/supabase-py/commit/7f7beecd009e8b79fb15d33ba3dfc934975f2f50)) + +## v2.1.0 (2023-11-23) + +### Chore + +* chore(release): bump version to v2.1.0 ([`92541a2`](https://github.com/supabase-community/supabase-py/commit/92541a22ad431cc50f19242f2be4eb2cda90b50d)) + +* chore(deps): bump storage3 from 0.6.1 to 0.7.0 (#620) ([`f0dbe94`](https://github.com/supabase-community/supabase-py/commit/f0dbe94126d4f88bc158784b3cb2fdab784cae15)) + +* chore(deps): bump storage3 from 0.6.1 to 0.7.0 + +Bumps [storage3](https://github.com/supabase-community/storage-py) from 0.6.1 to 0.7.0. +- [Release notes](https://github.com/supabase-community/storage-py/releases) +- [Changelog](https://github.com/supabase-community/storage-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/storage-py/compare/v0.6.1...v0.7.0) + +--- +updated-dependencies: +- dependency-name: storage3 + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`38a7ded`](https://github.com/supabase-community/supabase-py/commit/38a7ded3f3a04dcf2ed16c581716bbe1ef2c469f)) + +### Feature + +* feat: add async client (#619) ([`ee64181`](https://github.com/supabase-community/supabase-py/commit/ee64181c9bb27f4974636b5f87219059e44deadb)) + +* feat: add async client ([`6097109`](https://github.com/supabase-community/supabase-py/commit/6097109c590a650601644f973116a2ee865c3024)) + +### Fix + +* fix: format code with pre-commit ([`9f36f9d`](https://github.com/supabase-community/supabase-py/commit/9f36f9db2f125c01c8240475011588d11997e021)) + +### Unknown + +* Update lock file ([`c34d5c6`](https://github.com/supabase-community/supabase-py/commit/c34d5c6b01db0a6e2984637092c8f4ae5ea1498c)) + +* Update supabase/_async/client.py + +Co-authored-by: Joel Lee <lee.yi.jie.joel@gmail.com> ([`068b601`](https://github.com/supabase-community/supabase-py/commit/068b601f1ceb326f5266b67264a9c1bac7301497)) + +## v2.0.3 (2023-11-01) + +### Chore + +* chore(release): bump version to v2.0.3 ([`f76ac69`](https://github.com/supabase-community/supabase-py/commit/f76ac69bb12d65e5321ec1753a97020e3583ed19)) + +### Fix + +* fix: add flow_type to client options (#610) ([`344850d`](https://github.com/supabase-community/supabase-py/commit/344850d60ce06996f46242421665b4044f0ebb73)) + +* fix: add flow_type to client options ([`f1d8cba`](https://github.com/supabase-community/supabase-py/commit/f1d8cbaab5cce1defe067b698a003f234731e95d)) + +## v2.0.2 (2023-11-01) + +### Chore + +* chore(release): bump version to v2.0.2 ([`ca79bbd`](https://github.com/supabase-community/supabase-py/commit/ca79bbdc614f0aea0b61e7a194e9ea6d4c12a01d)) + +### Fix + +* fix: gotrue-py version update (#609) ([`a7502b1`](https://github.com/supabase-community/supabase-py/commit/a7502b156c9c943b5b17620c5d0f9c7ab25ea8ab)) + +* fix: gotrue-py version update ([`8b3345a`](https://github.com/supabase-community/supabase-py/commit/8b3345a1730d8c3d5a3c88b247e24f9eb52acc0f)) + +## v2.0.1 (2023-10-31) + +### Chore + +* chore(release): bump version to v2.0.1 ([`cc9e641`](https://github.com/supabase-community/supabase-py/commit/cc9e6412ae1860572b5f8d8d066680aadadf55d4)) + +* chore: upgrade to the latest functions-py (#607) ([`d02f41f`](https://github.com/supabase-community/supabase-py/commit/d02f41f353a73f63ac19a1d2366236e993b54a82)) + +* chore: upgrade to the latest functions-py ([`bf3dca0`](https://github.com/supabase-community/supabase-py/commit/bf3dca0e39ac9bb3bcf5b922eca692c70ccdcbd3)) + +* chore(deps): bump supafunc from 0.3.0 to 0.3.1 (#606) ([`4ef1ea0`](https://github.com/supabase-community/supabase-py/commit/4ef1ea0461fa96e193fdd2fafdb23d1183c914e9)) + +* chore(deps): bump supafunc from 0.3.0 to 0.3.1 + +Bumps [supafunc](https://github.com/supabase-community/functions-py) from 0.3.0 to 0.3.1. +- [Release notes](https://github.com/supabase-community/functions-py/releases) +- [Changelog](https://github.com/supabase-community/functions-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/functions-py/compare/v0.3.0...v0.3.1) + +--- +updated-dependencies: +- dependency-name: supafunc + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`1af3eae`](https://github.com/supabase-community/supabase-py/commit/1af3eae133015220c5c96f360c76aa926710156a)) + +### Fix + +* fix: functions-py version update (#608) ([`2f7c69f`](https://github.com/supabase-community/supabase-py/commit/2f7c69fadda8ab8492ecb181f144bfd294b71cc6)) + +* fix: functions-py version update ([`f5ba014`](https://github.com/supabase-community/supabase-py/commit/f5ba014dbf0be055ab132279a2bb95970d2f2834)) + +## v2.0.0 (2023-10-29) + +### Breaking + +* feat(functions-py): update functions-py version + +BREAKING CHANGE: Functions now raise exceptions on errors ([`10e9c47`](https://github.com/supabase-community/supabase-py/commit/10e9c4740a371812124068013f2420a637a981b4)) + +### Chore + +* chore(release): bump version to v2.0.0 ([`04e1ae2`](https://github.com/supabase-community/supabase-py/commit/04e1ae2a131227fc4351d5a9cda9ad064f51f76b)) + +* chore(deps-dev): bump pytest from 7.4.2 to 7.4.3 (#603) ([`8f9ce5c`](https://github.com/supabase-community/supabase-py/commit/8f9ce5c882e9246d777da919372969689d275257)) + +* chore(deps-dev): bump pytest from 7.4.2 to 7.4.3 + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.2 to 7.4.3. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.2...7.4.3) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`2774796`](https://github.com/supabase-community/supabase-py/commit/2774796e2b5e9978f637f89af473eff52c5b4cb1)) + +* chore(deps): bump postgrest from 0.12.0 to 0.13.0 (#600) ([`d10c178`](https://github.com/supabase-community/supabase-py/commit/d10c178ab6d921a55aa838bdbb2e031b6b6b74c7)) + +* chore(deps): bump postgrest from 0.12.0 to 0.13.0 + +Bumps [postgrest](https://github.com/supabase-community/postgrest-py) from 0.12.0 to 0.13.0. +- [Release notes](https://github.com/supabase-community/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/postgrest-py/compare/v0.12.0...v0.13.0) + +--- +updated-dependencies: +- dependency-name: postgrest + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`e5e7789`](https://github.com/supabase-community/supabase-py/commit/e5e77898fd34798028092e1e17617f093179c334)) + +* chore(deps-dev): bump black from 23.9.1 to 23.10.1 (#601) ([`4824430`](https://github.com/supabase-community/supabase-py/commit/4824430a098c913601629a2b5fd02004be8a5d07)) + +* chore(deps-dev): bump black from 23.9.1 to 23.10.1 + +Bumps [black](https://github.com/psf/black) from 23.9.1 to 23.10.1. +- [Release notes](https://github.com/psf/black/releases) +- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) +- [Commits](https://github.com/psf/black/compare/23.9.1...23.10.1) + +--- +updated-dependencies: +- dependency-name: black + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`6ac4657`](https://github.com/supabase-community/supabase-py/commit/6ac465745f338dac27f0cc7676f780dd42310ac9)) + +* chore(deps-dev): bump python-semantic-release from 8.1.1 to 8.3.0 (#599) ([`813f85c`](https://github.com/supabase-community/supabase-py/commit/813f85c4ff121d4975e3dca55893864c16c0be4f)) + +* chore(deps-dev): bump python-semantic-release from 8.1.1 to 8.3.0 + +Bumps [python-semantic-release](https://github.com/python-semantic-release/python-semantic-release) from 8.1.1 to 8.3.0. +- [Release notes](https://github.com/python-semantic-release/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/python-semantic-release/python-semantic-release/compare/v8.1.1...v8.3.0) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`b756260`](https://github.com/supabase-community/supabase-py/commit/b756260779c7635daefe95639089324d9522070f)) + +* chore(deps-dev): bump commitizen from 3.10.0 to 3.12.0 (#596) ([`6967839`](https://github.com/supabase-community/supabase-py/commit/69678398b3a9f8f2bdfb69bfed899d5d6b91c532)) + +* chore(deps-dev): bump commitizen from 3.10.0 to 3.12.0 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 3.10.0 to 3.12.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/3.10.0...3.12.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`e692a83`](https://github.com/supabase-community/supabase-py/commit/e692a831d32f676fbd7b37245d76401768a41f1b)) + +* chore(deps-dev): bump urllib3 from 2.0.6 to 2.0.7 (#592) ([`f12bdc2`](https://github.com/supabase-community/supabase-py/commit/f12bdc2405a6c3864fb8b73b6984697f516e6dd2)) + +* chore(deps-dev): bump urllib3 from 2.0.6 to 2.0.7 + +Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.6 to 2.0.7. +- [Release notes](https://github.com/urllib3/urllib3/releases) +- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) +- [Commits](https://github.com/urllib3/urllib3/compare/2.0.6...2.0.7) + +--- +updated-dependencies: +- dependency-name: urllib3 + dependency-type: indirect +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`3621fa5`](https://github.com/supabase-community/supabase-py/commit/3621fa5d0ddd755c2e0d5df165ea731d0e30043f)) + +* chore(deps-dev): bump pre-commit from 3.4.0 to 3.5.0 (#589) ([`d21a0e5`](https://github.com/supabase-community/supabase-py/commit/d21a0e5d85163ae5ad9211465dd5070c7e67afcb)) + +* chore(deps-dev): bump pre-commit from 3.4.0 to 3.5.0 + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.4.0 to 3.5.0. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.4.0...v3.5.0) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`d78fb0f`](https://github.com/supabase-community/supabase-py/commit/d78fb0f5dc3d634ed7fe5a4bea1b8ec3a41e6bf5)) + +* chore(deps-dev): bump gitpython from 3.1.35 to 3.1.37 + +Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.35 to 3.1.37. +- [Release notes](https://github.com/gitpython-developers/GitPython/releases) +- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES) +- [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.35...3.1.37) + +--- +updated-dependencies: +- dependency-name: gitpython + dependency-type: indirect +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`76caacd`](https://github.com/supabase-community/supabase-py/commit/76caacd06b7d4c8acce51e18739cb7e33332aab2)) + +* chore(deps-dev): bump urllib3 from 2.0.4 to 2.0.6 + +Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.4 to 2.0.6. +- [Release notes](https://github.com/urllib3/urllib3/releases) +- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) +- [Commits](https://github.com/urllib3/urllib3/compare/2.0.4...2.0.6) + +--- +updated-dependencies: +- dependency-name: urllib3 + dependency-type: indirect +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`b940713`](https://github.com/supabase-community/supabase-py/commit/b94071318dcb57f4f5a1564618822b32fd7529f3)) + +* chore(deps): bump storage3 from 0.6.0 to 0.6.1 + +Bumps [storage3](https://github.com/supabase-community/storage-py) from 0.6.0 to 0.6.1. +- [Release notes](https://github.com/supabase-community/storage-py/releases) +- [Changelog](https://github.com/supabase-community/storage-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/storage-py/compare/v0.6.0...v0.6.1) + +--- +updated-dependencies: +- dependency-name: storage3 + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`05a110a`](https://github.com/supabase-community/supabase-py/commit/05a110ae03579d3c826d0749065749567f0df596)) + +* chore(deps): bump postgrest from 0.11.0 to 0.12.0 + +Bumps [postgrest](https://github.com/supabase-community/postgrest-py) from 0.11.0 to 0.12.0. +- [Release notes](https://github.com/supabase-community/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/postgrest-py/compare/v0.11.0...v0.12.0) + +--- +updated-dependencies: +- dependency-name: postgrest + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`27b7842`](https://github.com/supabase-community/supabase-py/commit/27b7842d88ebee6e0452b817007f3ef0f52f57f8)) + +* chore(deps): bump gotrue from 1.1.1 to 1.2.0 + +Bumps [gotrue](https://github.com/supabase-community/gotrue-py) from 1.1.1 to 1.2.0. +- [Release notes](https://github.com/supabase-community/gotrue-py/releases) +- [Changelog](https://github.com/supabase-community/gotrue-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/gotrue-py/compare/v1.1.1...v1.2.0) + +--- +updated-dependencies: +- dependency-name: gotrue + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`125f7d6`](https://github.com/supabase-community/supabase-py/commit/125f7d63971a6ac077487e413e0206984e0d9e2a)) + +### Feature + +* feat(functions-py): update functions-py version (#605) ([`b92c984`](https://github.com/supabase-community/supabase-py/commit/b92c984053ea9897e8b0e3a15f0685e6bd73c18a)) + +### Unknown + +* Merge pull request #586 from supabase-community/dependabot/pip/gitpython-3.1.37 + +chore(deps-dev): bump gitpython from 3.1.35 to 3.1.37 ([`4199c9a`](https://github.com/supabase-community/supabase-py/commit/4199c9aaa699a4be124af1ab70ea621278c59eb7)) + +* Merge pull request #585 from devinem4/patch-1 + +README / Storage -- Update `delete` file to `remove` file ([`a0a4eda`](https://github.com/supabase-community/supabase-py/commit/a0a4eda3759e0173bf397acf0f7d2e69fbf03d7d)) + +* Update README.md + +Swap `delete` out, `remove` in ([`9b1fd17`](https://github.com/supabase-community/supabase-py/commit/9b1fd171a7e28102b10ead7a9057bbb18f1ac90f)) + +* Merge pull request #578 from supabase-community/dependabot/pip/urllib3-2.0.6 + +chore(deps-dev): bump urllib3 from 2.0.4 to 2.0.6 ([`173dd46`](https://github.com/supabase-community/supabase-py/commit/173dd46d272c18b1286b34fa267513db3eed8500)) + +* Merge pull request #577 from supabase-community/dependabot/pip/main/storage3-0.6.1 + +chore(deps): bump storage3 from 0.6.0 to 0.6.1 ([`47b381c`](https://github.com/supabase-community/supabase-py/commit/47b381ce1cdf5524f60375112a6771f883322f09)) + +* Merge pull request #583 from supabase-community/dependabot/pip/main/postgrest-0.12.0 + +chore(deps): bump postgrest from 0.11.0 to 0.12.0 ([`9a085f7`](https://github.com/supabase-community/supabase-py/commit/9a085f7ca23e9fb2d22793cffd49696b78fe6854)) + +* Merge pull request #582 from supabase-community/dependabot/pip/main/gotrue-1.2.0 + +chore(deps): bump gotrue from 1.1.1 to 1.2.0 ([`eaa31ef`](https://github.com/supabase-community/supabase-py/commit/eaa31ef6304f187f14cfe74925c1be3b10728ebb)) + +## v1.2.0 (2023-10-04) + +### Chore + +* chore(release): bump version to v1.2.0 ([`1ddb4e3`](https://github.com/supabase-community/supabase-py/commit/1ddb4e3e01c65b7c5009e8e01db79d4c4ec1cedc)) + +### Feature + +* feat: add functions property ([`5191baf`](https://github.com/supabase-community/supabase-py/commit/5191baf0d01ad4c6abd2b9f02a126a4697ef8562)) + +### Fix + +* fix: add deprecation import ([`b7692cb`](https://github.com/supabase-community/supabase-py/commit/b7692cb7a0e1df49c30af0888c6c403a0cee59f4)) + +### Test + +* test: remove call to functions ([`5f052ee`](https://github.com/supabase-community/supabase-py/commit/5f052ee0d064e67b68f27fc77a08a0c6d4fc2257)) + +### Unknown + +* Merge pull request #579 from supabase-community/j0/convert_functions_into_property + +feat: add functions property ([`7cf9f84`](https://github.com/supabase-community/supabase-py/commit/7cf9f847c9475637c8cf5f2105a5ee181d28af55)) + +* Update client.py ([`c283c8c`](https://github.com/supabase-community/supabase-py/commit/c283c8c39033fd4094c4fd22b2255f39f9be907d)) + +## v1.1.1 (2023-10-02) + +### Chore + +* chore(release): bump version to v1.1.1 ([`11b014d`](https://github.com/supabase-community/supabase-py/commit/11b014d503574333b72f829e7013fd641f75cd89)) + +### Fix + +* fix: remove fetch from clientoptions (#481) + +* fix: remove fetch from clientoptions + +* chore: re-run tests + +* chore: remove unused import ([`2829aea`](https://github.com/supabase-community/supabase-py/commit/2829aeaa9757080f9b8bd76a19fe1bb27ae4dcc2)) + +## v1.1.0 (2023-09-29) + +### Chore + +* chore(release): bump version to v1.1.0 ([`0bb7830`](https://github.com/supabase-community/supabase-py/commit/0bb783030fe9587ecb93d190ef973f3a666f358b)) + +* chore(deps): bump postgrest from 0.10.8 to 0.11.0 + +Bumps [postgrest](https://github.com/supabase-community/postgrest-py) from 0.10.8 to 0.11.0. +- [Release notes](https://github.com/supabase-community/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/postgrest-py/compare/v0.10.8...v0.11.0) + +--- +updated-dependencies: +- dependency-name: postgrest + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`1af5611`](https://github.com/supabase-community/supabase-py/commit/1af5611f83b59b0bbd9921fe0357c2100434c5f8)) + +### Feature + +* feat: narrow the auth event listening ([`dc07c5d`](https://github.com/supabase-community/supabase-py/commit/dc07c5d3ded8860dc37d75f3d3e50716253b4fc5)) + +### Unknown + +* Merge pull request #573 from supabase-community/silentworks/narrow-auth-events-listening + +feat: narrow the auth event listening ([`0a080d0`](https://github.com/supabase-community/supabase-py/commit/0a080d0af261c6ca8ee2919a446cc17e15dc8e1b)) + +* 'Refactored by Sourcery' (#574) + +Co-authored-by: Sourcery AI <> ([`5e5b1e4`](https://github.com/supabase-community/supabase-py/commit/5e5b1e4ddd81c86a97fe74cfaacdcf0eabb26dcf)) + +* Fix trailing whitespace in ci.yml ([`a098bc4`](https://github.com/supabase-community/supabase-py/commit/a098bc45720ad11664270cff1808e1639b0c81e7)) + +* Merge pull request #572 from supabase-community/silentworks/add-push-event + +Add push event back as it borked CI ([`d1f4574`](https://github.com/supabase-community/supabase-py/commit/d1f45740fbe7176ac2cce9eb3ac81ef3743c04ef)) + +* Add push event back as it borked CI ([`c121122`](https://github.com/supabase-community/supabase-py/commit/c121122e16991c0f0d7b4d262f53ea62d6e17318)) + +* Merge pull request #571 from supabase-community/silentworks/remove-push-event + +Remove push even from workflow ([`c5b346f`](https://github.com/supabase-community/supabase-py/commit/c5b346fcffebee8bb6e0b6b4f9d20783cfce7220)) + +* Remove push even from workflow ([`7a054fe`](https://github.com/supabase-community/supabase-py/commit/7a054fe7594365e0c1371a322b057a909474a5bb)) + +* Merge pull request #570 from supabase-community/dependabot/pip/main/postgrest-0.11.0 + +chore(deps): bump postgrest from 0.10.8 to 0.11.0 ([`576abbb`](https://github.com/supabase-community/supabase-py/commit/576abbb45b6bca891efa2c48ab48bab6fdc78380)) + +* Merge pull request #569 from supabase-community/silentworks/update-dependabot-target-branch + +Update dependabot target branch ([`5f87d78`](https://github.com/supabase-community/supabase-py/commit/5f87d78656d01b528070066342b37dde6919ad12)) + +* Update dependabot target branch ([`7b62b17`](https://github.com/supabase-community/supabase-py/commit/7b62b17c03562e6f12d7b5e4eb3923fe4a10149f)) + +## v1.0.6 (2023-09-28) + +### Chore + +* chore(release): bump version to v1.0.6 ([`7f431b9`](https://github.com/supabase-community/supabase-py/commit/7f431b99f4aa61052383a258f376eb6155811150)) + +### Fix + +* fix: correct semantic release variable names ([`c6a03e2`](https://github.com/supabase-community/supabase-py/commit/c6a03e2ac9f63966cc91787506e978f2ca28a212)) + +### Unknown + +* Merge pull request #568 from supabase-community/silentworks/fix-semantic-releases-variable-names + +fix: correct semantic release variable names ([`c846275`](https://github.com/supabase-community/supabase-py/commit/c846275475169df866e336648ffeea6d0e6188a0)) + +* Merge pull request #567 from supabase-community/silentworks/ignore-md-files-pre-commit + +Ignore line endings of markdown files ([`19dba24`](https://github.com/supabase-community/supabase-py/commit/19dba24ce5d8cb949b36e65b9fdce272187b2344)) + +* Ignore line endings of markdown files ([`3ec2b41`](https://github.com/supabase-community/supabase-py/commit/3ec2b4128aaa60f038f4a23147f3cb4ec7c56509)) + +## v1.0.5 (2023-09-28) + +### Chore + +* chore: update CODEOWNERS ([`970f604`](https://github.com/supabase-community/supabase-py/commit/970f604a854dc382d0399ebdb77d09d8c54a9fec)) + +* chore(deps-dev): bump commitizen from 3.9.0 to 3.10.0 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 3.9.0 to 3.10.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/3.9.0...3.10.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`dbb3950`](https://github.com/supabase-community/supabase-py/commit/dbb395060976bf6049160da6b5d67629dd027e3b)) + +* chore(deps): bump storage3 from 0.5.4 to 0.6.0 + +Bumps [storage3](https://github.com/supabase-community/storage-py) from 0.5.4 to 0.6.0. +- [Release notes](https://github.com/supabase-community/storage-py/releases) +- [Changelog](https://github.com/supabase-community/storage-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/storage-py/compare/v0.5.4...v0.6.0) + +--- +updated-dependencies: +- dependency-name: storage3 + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`0e2975c`](https://github.com/supabase-community/supabase-py/commit/0e2975c8672b3e8bab8d34d635f096ebed1ee3fb)) + +* chore(deps): bump gotrue from 1.1.0 to 1.1.1 + +Bumps [gotrue](https://github.com/supabase-community/gotrue-py) from 1.1.0 to 1.1.1. +- [Release notes](https://github.com/supabase-community/gotrue-py/releases) +- [Changelog](https://github.com/supabase-community/gotrue-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/gotrue-py/compare/v1.1.0...v1.1.1) + +--- +updated-dependencies: +- dependency-name: gotrue + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`3c8f15d`](https://github.com/supabase-community/supabase-py/commit/3c8f15d02ca641fc5d706188d36ef31d65120cd9)) + +* chore(deps-dev): bump python-semantic-release from 7.34.6 to 8.1.1 + +Bumps [python-semantic-release](https://github.com/python-semantic-release/python-semantic-release) from 7.34.6 to 8.1.1. +- [Release notes](https://github.com/python-semantic-release/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/python-semantic-release/python-semantic-release/compare/v7.34.6...v8.1.1) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`2a61ef3`](https://github.com/supabase-community/supabase-py/commit/2a61ef3cfaf8c1e820b6f50de96a8736cd7ae442)) + +* chore(deps-dev): bump black from 23.7.0 to 23.9.1 + +Bumps [black](https://github.com/psf/black) from 23.7.0 to 23.9.1. +- [Release notes](https://github.com/psf/black/releases) +- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) +- [Commits](https://github.com/psf/black/compare/23.7.0...23.9.1) + +--- +updated-dependencies: +- dependency-name: black + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`03f516d`](https://github.com/supabase-community/supabase-py/commit/03f516d3368884ea29a3f18012d15b55cf696d26)) + +* chore(deps-dev): bump commitizen from 3.6.0 to 3.9.0 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 3.6.0 to 3.9.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/3.6.0...3.9.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`1db9694`](https://github.com/supabase-community/supabase-py/commit/1db9694a4d2dca41bf94c529c93b888ddd2be134)) + +* chore(deps-dev): bump pytest from 7.4.0 to 7.4.2 + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.0 to 7.4.2. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.0...7.4.2) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`c715dfd`](https://github.com/supabase-community/supabase-py/commit/c715dfd47a118ea9d6b970020f9d746d84dfe8ce)) + +* chore(deps): bump gotrue from 1.0.4 to 1.1.0 + +Bumps [gotrue](https://github.com/supabase-community/gotrue-py) from 1.0.4 to 1.1.0. +- [Release notes](https://github.com/supabase-community/gotrue-py/releases) +- [Changelog](https://github.com/supabase-community/gotrue-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/gotrue-py/compare/v1.0.4...v1.1.0) + +--- +updated-dependencies: +- dependency-name: gotrue + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`5c1d405`](https://github.com/supabase-community/supabase-py/commit/5c1d405135d9c6636ac08d9b19baf000b78ee79b)) + +* chore(deps-dev): bump gitpython from 3.1.34 to 3.1.35 + +Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.34 to 3.1.35. +- [Release notes](https://github.com/gitpython-developers/GitPython/releases) +- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES) +- [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.34...3.1.35) + +--- +updated-dependencies: +- dependency-name: gitpython + dependency-type: indirect +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`8b01e16`](https://github.com/supabase-community/supabase-py/commit/8b01e1655f138f671f7d017a909912a06a789768)) + +* chore(deps-dev): bump pre-commit from 3.3.3 to 3.4.0 + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.3.3 to 3.4.0. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.3.3...v3.4.0) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`1d1a67d`](https://github.com/supabase-community/supabase-py/commit/1d1a67dfc791b20e705938d7d9aec0c8d8a8322f)) + +* chore(deps-dev): bump gitpython from 3.1.32 to 3.1.34 + +Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.32 to 3.1.34. +- [Release notes](https://github.com/gitpython-developers/GitPython/releases) +- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES) +- [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.32...3.1.34) + +--- +updated-dependencies: +- dependency-name: gitpython + dependency-type: indirect +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`d8f5be5`](https://github.com/supabase-community/supabase-py/commit/d8f5be544dc260da1582249812cd3310d865f1d6)) + +### Fix + +* fix: revert python-semantic-release branch to main ([`29c0502`](https://github.com/supabase-community/supabase-py/commit/29c05024debca9cee0a305c730eb2094da993dda)) + +* fix: change release branch to develop ([`896a921`](https://github.com/supabase-community/supabase-py/commit/896a921a2a69722278b0a8b0b7c9c8b3118ce9c8)) + +* fix: revert version bump so dependabot can do it ([`322fa23`](https://github.com/supabase-community/supabase-py/commit/322fa232001651f95852201b621f1aa25c07ec07)) + +* fix: update poetry lock ([`640669e`](https://github.com/supabase-community/supabase-py/commit/640669e127809bd275adc1616c545029bf100831)) + +* fix: patch semantic ci ([`7c82a9e`](https://github.com/supabase-community/supabase-py/commit/7c82a9e7fc1f0dece1d8dc2b66dad3eea1d1630d)) + +### Unknown + +* 1.0.5 + +Automatically generated by python-semantic-release ([`6568a2f`](https://github.com/supabase-community/supabase-py/commit/6568a2f6789be7d36934b63b8e087f2815ee4d7f)) + +* Merge pull request #566 from supabase-community/silentworks/update-clone-repo-step + +Add token secret to clone repo step ([`3419bc9`](https://github.com/supabase-community/supabase-py/commit/3419bc9325b973053a9c0b4ea5ba049428131c1c)) + +* Add token secret to clone repo step ([`b5c8a5c`](https://github.com/supabase-community/supabase-py/commit/b5c8a5c36c900eaa95c5bf40cdf241e584229568)) + +* Merge pull request #564 from supabase-community/J0/add-silentworks + +chore: update CODEOWNERS ([`f97eb12`](https://github.com/supabase-community/supabase-py/commit/f97eb1253a8eb06035ada8837604ee46cbe8e79b)) + +* Merge pull request #565 from supabase-community/silentworks/update-token-variable + +Add new token variable ([`116b805`](https://github.com/supabase-community/supabase-py/commit/116b805575c4cfc4d7880896ed06a08a2fd52089)) + +* Add new token variable ([`52695c0`](https://github.com/supabase-community/supabase-py/commit/52695c0ef41774355aba7af15b9d1085b99d1141)) + +* Merge pull request #561 from supabase-community/dependabot/pip/develop/commitizen-3.10.0 + +chore(deps-dev): bump commitizen from 3.9.0 to 3.10.0 ([`8f1093f`](https://github.com/supabase-community/supabase-py/commit/8f1093fa5cf0c0282ceaf0fe836ee72536b8a1a9)) + +* Merge pull request #563 from supabase-community/silentworks/add-to-maintainers + +Add myself to maintainers ([`69036be`](https://github.com/supabase-community/supabase-py/commit/69036bea3f0f0be0a5b1237e7f291f228b6ce2ea)) + +* Update CI to check against main branch ([`96b469b`](https://github.com/supabase-community/supabase-py/commit/96b469b851c9e74ccf444fd59f0fadd54706d8a4)) + +* Add myself to maintainers ([`187e7c6`](https://github.com/supabase-community/supabase-py/commit/187e7c6d5325b3e864061da0f976340b79ca6718)) + +* Change branch to main ([`5673bba`](https://github.com/supabase-community/supabase-py/commit/5673bba2606513da4351dfbca8c23ff31922355c)) + +* Merge pull request #562 from supabase-community/dependabot/pip/develop/storage3-0.6.0 + +chore(deps): bump storage3 from 0.5.4 to 0.6.0 ([`be3373f`](https://github.com/supabase-community/supabase-py/commit/be3373f31aa165f3455f6c642046fcc3e57214c3)) + +* Merge pull request #558 from supabase-community/dependabot/pip/develop/gotrue-1.1.1 + +chore(deps): bump gotrue from 1.1.0 to 1.1.1 ([`0ca4144`](https://github.com/supabase-community/supabase-py/commit/0ca414405005ff5278df8774e8a961eb64c56daa)) + +* Merge pull request #560 from supabase-community/feat/update-auth-headers-for-postgrest + +Fix issue of RLS not working with Postgrest and Storage ([`b403b89`](https://github.com/supabase-community/supabase-py/commit/b403b89f6ed3b6bcad06724071d42c1185c73e91)) + +* Lazy initialize storage client ([`189582d`](https://github.com/supabase-community/supabase-py/commit/189582dfde133047e6de12292d64471e514cf030)) + +* Ran the pre-commit hooks ([`552a326`](https://github.com/supabase-community/supabase-py/commit/552a326519787ec6c5fda22f784e1fb8ae768f45)) + +* Fix issue of RLS not working with Postgrest ([`fb484dc`](https://github.com/supabase-community/supabase-py/commit/fb484dccde361b56d1bc079db578a8a4dcc959f4)) + +* Merge pull request #555 from supabase-community/dependabot/pip/develop/python-semantic-release-8.1.1 + +chore(deps-dev): bump python-semantic-release from 7.34.6 to 8.1.1 ([`a56913c`](https://github.com/supabase-community/supabase-py/commit/a56913c8ecd610f2be42deddae43c43d06160765)) + +* Merge pull request #553 from supabase-community/J0/add-code-owners + +chore: add CODEOWNERS ([`772dffd`](https://github.com/supabase-community/supabase-py/commit/772dffdfe9179aac8dd6d60f16366c4bef90790a)) + +* Update ci.yml ([`e56c901`](https://github.com/supabase-community/supabase-py/commit/e56c90155de33185e1c85852ea46d687ad1146ae)) + +* Create CODEOWNERS ([`799654d`](https://github.com/supabase-community/supabase-py/commit/799654dc9122724d62f5582495bfb1c646e01705)) + +* Merge pull request #549 from supabase-community/dependabot/pip/develop/black-23.9.1 + +chore(deps-dev): bump black from 23.7.0 to 23.9.1 ([`1ef07cd`](https://github.com/supabase-community/supabase-py/commit/1ef07cdddd8ddff58e04d6456bdad60f949b63f8)) + +* Merge pull request #554 from supabase-community/dependabot/pip/develop/commitizen-3.9.0 + +chore(deps-dev): bump commitizen from 3.6.0 to 3.9.0 ([`a4267d7`](https://github.com/supabase-community/supabase-py/commit/a4267d7b06093e016600171ab0a220ba1938939f)) + +* Merge pull request #541 from supabase-community/dependabot/pip/develop/pytest-7.4.2 + +chore(deps-dev): bump pytest from 7.4.0 to 7.4.2 ([`d576811`](https://github.com/supabase-community/supabase-py/commit/d57681100107a5217b0d878d23071406df3a2980)) + +* Merge pull request #545 from supabase-community/dependabot/pip/develop/gotrue-1.1.0 + +chore(deps): bump gotrue from 1.0.4 to 1.1.0 ([`9172f26`](https://github.com/supabase-community/supabase-py/commit/9172f26a0bbbe62c07cb5df132b16a019b377f00)) + +* Merge pull request #543 from supabase-community/dependabot/pip/gitpython-3.1.35 + +chore(deps-dev): bump gitpython from 3.1.34 to 3.1.35 ([`d2b721f`](https://github.com/supabase-community/supabase-py/commit/d2b721f74fa6fe6edca546c973e154361050e6b5)) + +* Merge pull request #537 from supabase-community/dependabot/pip/develop/pre-commit-3.4.0 + +chore(deps-dev): bump pre-commit from 3.3.3 to 3.4.0 ([`a3ad08a`](https://github.com/supabase-community/supabase-py/commit/a3ad08a099779ed3482547a2eaeb6596e1486aac)) + +* Merge pull request #540 from supabase-community/dependabot/pip/gitpython-3.1.34 + +chore(deps-dev): bump gitpython from 3.1.32 to 3.1.34 ([`f174ba1`](https://github.com/supabase-community/supabase-py/commit/f174ba12fe209c4b58f5c0eff0fb048767572b24)) + +* Merge pull request #524 from supabase-community/j0/patch_semantic_release + +fix: change release branch to develop ([`f1378f0`](https://github.com/supabase-community/supabase-py/commit/f1378f0bd861b9db422cac0f51e152812b8fabde)) + +* Merge pull request #523 from supabase-community/j0/patch_semantic_release + +fix: patch semver in ci ([`c906873`](https://github.com/supabase-community/supabase-py/commit/c9068733fc448a59b416d902d0083f4b20484253)) + +## v1.0.4 (2023-08-04) + +### Chore + +* chore: bump version ([`081a08c`](https://github.com/supabase-community/supabase-py/commit/081a08cb46b21c503b1a7c6a8f24bb270b2543f6)) + +* chore(deps-dev): bump black from 23.3.0 to 23.7.0 + +Bumps [black](https://github.com/psf/black) from 23.3.0 to 23.7.0. +- [Release notes](https://github.com/psf/black/releases) +- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) +- [Commits](https://github.com/psf/black/compare/23.3.0...23.7.0) + +--- +updated-dependencies: +- dependency-name: black + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`e7433b1`](https://github.com/supabase-community/supabase-py/commit/e7433b148db71f69b48ba919fcf9546164cd7eb3)) + +* chore(deps): bump storage3 from 0.5.2 to 0.5.3 + +Bumps [storage3](https://github.com/supabase-community/storage-py) from 0.5.2 to 0.5.3. +- [Release notes](https://github.com/supabase-community/storage-py/releases) +- [Changelog](https://github.com/supabase-community/storage-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/storage-py/compare/v0.5.2...v0.5.3) + +--- +updated-dependencies: +- dependency-name: storage3 + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`8f22490`](https://github.com/supabase-community/supabase-py/commit/8f22490ef3d4b3be130e152d9a16bae5afa8189e)) + +* chore(deps): bump python-semantic-release from 7.34.6 to 8.0.3 + +Bumps [python-semantic-release](https://github.com/python-semantic-release/python-semantic-release) from 7.34.6 to 8.0.3. +- [Release notes](https://github.com/python-semantic-release/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/python-semantic-release/python-semantic-release/compare/v7.34.6...v8.0.3) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`e2bc1a4`](https://github.com/supabase-community/supabase-py/commit/e2bc1a41d8dac3d0f5c5476b596ce4e349f1560c)) + +* chore: update poetry.lock ([`fa715bb`](https://github.com/supabase-community/supabase-py/commit/fa715bb983e65c9a83b11653c6540fd9f445d9db)) + +* chore(release): bump version to v1.0.3 ([`d4a2b06`](https://github.com/supabase-community/supabase-py/commit/d4a2b06920603b01eea980fbff37b5062f73d5eb)) + +* chore(deps-dev): bump commitizen from 2.42.1 to 3.5.2 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.42.1 to 3.5.2. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.42.1...3.5.2) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`f9a77e8`](https://github.com/supabase-community/supabase-py/commit/f9a77e8be7e0867b9c7cb60a272273409ddda543)) + +* chore(deps): bump python-semantic-release from 7.34.4 to 7.34.6 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.34.4 to 7.34.6. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.34.4...v7.34.6) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`0ba42bd`](https://github.com/supabase-community/supabase-py/commit/0ba42bd7caf9616cfc6539b896b590e82f408bed)) + +* chore(deps-dev): bump pytest from 7.3.2 to 7.4.0 + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.3.2 to 7.4.0. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.3.2...7.4.0) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`be2bc72`](https://github.com/supabase-community/supabase-py/commit/be2bc72758714549129d46d60917052acc72b68d)) + +* chore(deps-dev): bump pre-commit from 3.2.1 to 3.3.3 + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.2.1 to 3.3.3. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.2.1...v3.3.3) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`034eaa9`](https://github.com/supabase-community/supabase-py/commit/034eaa9e3821ff50a2064a7fcabe50e5ab6692eb)) + +* chore(deps): bump python-semantic-release from 7.34.3 to 7.34.4 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.34.3 to 7.34.4. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.34.3...v7.34.4) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`371af9f`](https://github.com/supabase-community/supabase-py/commit/371af9f2b25722020442df8c689ea18eee3fcc32)) + +* chore: fixed some types ([`c0da631`](https://github.com/supabase-community/supabase-py/commit/c0da631a51285e7ac60868ac47b8f5a567510f31)) + +* chore(deps-dev): bump pytest-cov from 4.0.0 to 4.1.0 + +Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 4.0.0 to 4.1.0. +- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v4.0.0...v4.1.0) + +--- +updated-dependencies: +- dependency-name: pytest-cov + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`5fdb936`](https://github.com/supabase-community/supabase-py/commit/5fdb9366ddb6f078605cb4edeac5618d0a8f16b3)) + +* chore(deps-dev): bump pytest from 7.3.1 to 7.3.2 + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.3.1 to 7.3.2. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.3.1...7.3.2) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`7826c05`](https://github.com/supabase-community/supabase-py/commit/7826c05e308aec9fb6ecb9c175a1ec55d8362170)) + +* chore: fix whitespace ([`59ecfe3`](https://github.com/supabase-community/supabase-py/commit/59ecfe3202234ad599462ca24ee0a33441dd81d0)) + +* chore(deps): bump python-semantic-release from 7.34.2 to 7.34.3 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.34.2 to 7.34.3. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.34.2...v7.34.3) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`8d17a1c`](https://github.com/supabase-community/supabase-py/commit/8d17a1c198c4979990ac371407174f20564fbc9f)) + +* chore(deps): bump gotrue from 1.0.1 to 1.0.2 + +Bumps [gotrue](https://github.com/supabase-community/gotrue-py) from 1.0.1 to 1.0.2. +- [Release notes](https://github.com/supabase-community/gotrue-py/releases) +- [Changelog](https://github.com/supabase-community/gotrue-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/gotrue-py/compare/v1.0.1...v1.0.2) + +--- +updated-dependencies: +- dependency-name: gotrue + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`1db5e07`](https://github.com/supabase-community/supabase-py/commit/1db5e07ca924b754cfa80c488d01c80a8c1d7290)) + +* chore(deps): bump python-semantic-release from 7.33.2 to 7.34.2 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.33.2 to 7.34.2. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.33.2...v7.34.2) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`a518665`](https://github.com/supabase-community/supabase-py/commit/a518665374a542c250680a9a15ea711da0b1ed28)) + +* chore(deps): bump requests from 2.28.2 to 2.31.0 + +Bumps [requests](https://github.com/psf/requests) from 2.28.2 to 2.31.0. +- [Release notes](https://github.com/psf/requests/releases) +- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) +- [Commits](https://github.com/psf/requests/compare/v2.28.2...v2.31.0) + +--- +updated-dependencies: +- dependency-name: requests + dependency-type: indirect +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`3886af5`](https://github.com/supabase-community/supabase-py/commit/3886af5431abb9209ffb535d58d3799b4822147e)) + +* chore(deps-dev): bump pytest from 7.2.2 to 7.3.1 + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.2 to 7.3.1. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.2.2...7.3.1) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`dacfa0b`](https://github.com/supabase-community/supabase-py/commit/dacfa0bcccb7dd4d98728cc00dd7a7e042e82223)) + +### Fix + +* fix: update tests ([`9a91667`](https://github.com/supabase-community/supabase-py/commit/9a9166788792b683f43ea3336c7d1c803d7cf8c4)) + +* fix: use correct functions url ([`ebed2b8`](https://github.com/supabase-community/supabase-py/commit/ebed2b804aa91fb29c11f95b6c761de3a6565ca7)) + +* fix: incorrect example and document fault RLS ([`a20a164`](https://github.com/supabase-community/supabase-py/commit/a20a164e700c22482ce4d82beafedece33cfe4c7)) + +### Unknown + +* Merge pull request #514 from supabase-community/j0/bump-versoin + +feat: bump version to v1.0.4 ([`d53fa64`](https://github.com/supabase-community/supabase-py/commit/d53fa64ab4c2862f4108ce95d397aa6a1f7409c5)) + +* Merge pull request #491 from supabase-community/dependabot/pip/develop/black-23.7.0 + +chore(deps-dev): bump black from 23.3.0 to 23.7.0 ([`c5830a7`](https://github.com/supabase-community/supabase-py/commit/c5830a7ec3ac9020d96216a57eeddfe0497a9a27)) + +* Merge pull request #506 from supabase-community/dependabot/pip/develop/storage3-0.5.3 + +chore(deps): bump storage3 from 0.5.2 to 0.5.3 ([`cc582a3`](https://github.com/supabase-community/supabase-py/commit/cc582a3fd1dbc0840dcf7ea6b3ec0afa53bf3e9a)) + +* Merge pull request #501 from supabase-community/dependabot/pip/develop/python-semantic-release-8.0.3 + +chore(deps): bump python-semantic-release from 7.34.6 to 8.0.3 ([`8e9c8fe`](https://github.com/supabase-community/supabase-py/commit/8e9c8fe99d87f3e3cefb40f035c6a1e2c9075d9d)) + +* Merge pull request #500 from mrpbennett/patch-1 + +Update README.md ([`7fabdca`](https://github.com/supabase-community/supabase-py/commit/7fabdca2534bb133512ad881c4989999e04da495)) + +* Update README.md + +Adding `upsert` into Readme ([`b5ade74`](https://github.com/supabase-community/supabase-py/commit/b5ade7496e8b0a8e013ee593ffcb781b838df5e5)) + +* Merge pull request #505 from jv-aquino/develop + +Add Storage Examples ([`ef933ce`](https://github.com/supabase-community/supabase-py/commit/ef933ce8d96cb7e5d337a6b4f14ec4b00a8efede)) + +* Merge pull request #1 from jv-aquino/update-storage-docs + +Add Storage examples ([`d92d331`](https://github.com/supabase-community/supabase-py/commit/d92d331d806a0822a624fc1f2f5ae2f916f9e26a)) + +* Add Storage examples ([`fca8ceb`](https://github.com/supabase-community/supabase-py/commit/fca8ceb484c4811f561c9d67321441784f5b7f93)) + +* Merge pull request #485 from supabase-community/j0/update-poetry-locka + +chore: update poetry.lock ([`cb8566a`](https://github.com/supabase-community/supabase-py/commit/cb8566a30803c50873c5dd01868d790b99fb396c)) + +* Merge pull request #484 from supabase-community/j0/fix-sem-release + +chore(release): bump version to v1.0.3 ([`aec0400`](https://github.com/supabase-community/supabase-py/commit/aec040026f243556d9857e6f083d004c2b59ed5a)) + +* Merge pull request #480 from supabase-community/dependabot/pip/develop/commitizen-3.5.2 + +chore(deps-dev): bump commitizen from 2.42.1 to 3.5.2 ([`86fa302`](https://github.com/supabase-community/supabase-py/commit/86fa302e9bcbac8300912bd55e0a4c11de6ea796)) + +* Merge pull request #473 from supabase-community/dependabot/pip/develop/python-semantic-release-7.34.6 + +chore(deps): bump python-semantic-release from 7.34.4 to 7.34.6 ([`0185e1d`](https://github.com/supabase-community/supabase-py/commit/0185e1debde0caeecbaa22dbf73d3e3437ccb891)) + +* Merge pull request #477 from supabase-community/dependabot/pip/develop/pytest-7.4.0 + +chore(deps-dev): bump pytest from 7.3.2 to 7.4.0 ([`8ee264e`](https://github.com/supabase-community/supabase-py/commit/8ee264e97fd9a3f6bdbc0281468c7c67416a97b6)) + +* Merge pull request #461 from supabase-community/dependabot/pip/develop/pre-commit-3.3.3 + +chore(deps-dev): bump pre-commit from 3.2.1 to 3.3.3 ([`0c023e9`](https://github.com/supabase-community/supabase-py/commit/0c023e9ef78ca97a9f5a00f906869e446ce1c5c7)) + +* Merge pull request #469 from supabase-community/dependabot/pip/develop/python-semantic-release-7.34.4 + +chore(deps): bump python-semantic-release from 7.34.3 to 7.34.4 ([`f2aebd6`](https://github.com/supabase-community/supabase-py/commit/f2aebd6d48bba567d6f9684f756c18e7449a8fe3)) + +* Merge pull request #471 from Ananya2001-an/chore-typing + +chore: fixed some types ([`e5fc57a`](https://github.com/supabase-community/supabase-py/commit/e5fc57ad201a203ff26145ad383dcacd56e9fdb6)) + +* Merge pull request #467 from supabase-community/anand/fix-functions-url + +fix: use correct functions url ([`8e341c7`](https://github.com/supabase-community/supabase-py/commit/8e341c7fd0c7ebffbc39a469486d6ffb9d83b2c6)) + +* Merge pull request #466 from supabase-community/anand/fix-readme + +fix: incorrect example and document fault RLS ([`be72d5c`](https://github.com/supabase-community/supabase-py/commit/be72d5cb4a47241d7912415227658b0a418ef874)) + +* Merge pull request #446 from supabase-community/dependabot/pip/develop/pytest-cov-4.1.0 + +chore(deps-dev): bump pytest-cov from 4.0.0 to 4.1.0 ([`5c75244`](https://github.com/supabase-community/supabase-py/commit/5c752443277de0a4a8dfd7d0d113f0d177efc81f)) + +* Merge pull request #459 from supabase-community/dependabot/pip/develop/pytest-7.3.2 + +chore(deps-dev): bump pytest from 7.3.1 to 7.3.2 ([`2ffe6d6`](https://github.com/supabase-community/supabase-py/commit/2ffe6d633d99265dee056ecab0aeeb6d523f6c65)) + +* Merge pull request #458 from danhdevelop/develop + +fix wrong pytest configuration ([`ac119f4`](https://github.com/supabase-community/supabase-py/commit/ac119f441d764c9290b8fa39f81b46da984b91a8)) + +* fix wrong pytest configuration ([`e971e8c`](https://github.com/supabase-community/supabase-py/commit/e971e8c45b822a78805e3a68f2f414fea906bd1b)) + +* Merge pull request #460 from supabase-community/j0/patch_whitespace + +chore: fix whitespace ([`eeec890`](https://github.com/supabase-community/supabase-py/commit/eeec890347610e95d20b5d0ecdd74cce2e927f47)) + +* Merge pull request #455 from supabase-community/dependabot/pip/develop/python-semantic-release-7.34.3 + +chore(deps): bump python-semantic-release from 7.34.2 to 7.34.3 ([`ca95307`](https://github.com/supabase-community/supabase-py/commit/ca95307b561c128eeedeb31cc8b2795fbe83f019)) + +* Merge pull request #450 from supabase-community/J0/add-todos-to-readme + +chore: add todos to README, potentially handoff ([`673ae1a`](https://github.com/supabase-community/supabase-py/commit/673ae1aac7c54c65b9be80317775f00e7c581165)) + +* Update README.md ([`9260a93`](https://github.com/supabase-community/supabase-py/commit/9260a93efa33c203896de7fe2e500c383bd8e0b2)) + +* Merge pull request #454 from supabase-community/dependabot/pip/develop/gotrue-1.0.2 + +chore(deps): bump gotrue from 1.0.1 to 1.0.2 ([`4b81424`](https://github.com/supabase-community/supabase-py/commit/4b81424e667646c41d5884ce5cd37964052b9bb9)) + +* Merge pull request #449 from supabase-community/dependabot/pip/develop/python-semantic-release-7.34.2 + +chore(deps): bump python-semantic-release from 7.33.2 to 7.34.2 ([`0a3db2d`](https://github.com/supabase-community/supabase-py/commit/0a3db2d103e3eed36ff37ce634b3b81fe3e1a8f8)) + +* Merge pull request #429 from iRaySpace/iRaySpace-patch-1 + +Update README.md ([`d5d4b12`](https://github.com/supabase-community/supabase-py/commit/d5d4b128222e7ec2df39f52867961160e141bc65)) + +* Update README.md ([`3c0d7f9`](https://github.com/supabase-community/supabase-py/commit/3c0d7f961a53a4699c98957c955e7a3a539fd1ec)) + +* Merge pull request #445 from supabase-community/dependabot/pip/requests-2.31.0 + +chore(deps): bump requests from 2.28.2 to 2.31.0 ([`573f2c2`](https://github.com/supabase-community/supabase-py/commit/573f2c23b17f5c33f2f2fea7755098d5f6365454)) + +* Merge pull request #414 from supabase-community/dependabot/pip/develop/pytest-7.3.1 + +chore(deps-dev): bump pytest from 7.2.2 to 7.3.1 ([`2bba842`](https://github.com/supabase-community/supabase-py/commit/2bba842449ccd0b5f933198c343f54c5a67db7ed)) + +* Merge pull request #410 from dschenkelman/patch-1 + +Fix sample for sign in with username + password ([`606b55d`](https://github.com/supabase-community/supabase-py/commit/606b55dae1d6a50f663fe6227f7f89f209df237e)) + +* Fix sample for sign in with username + password ([`ad9353f`](https://github.com/supabase-community/supabase-py/commit/ad9353f588e4e0f0978c382b4e644c74120e2c3f)) + +## v1.0.3 (2023-04-03) + +### Chore + +* chore(deps-dev): bump pre-commit from 3.2.0 to 3.2.1 + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.2.0 to 3.2.1. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.2.0...v3.2.1) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`7f0bc28`](https://github.com/supabase-community/supabase-py/commit/7f0bc283110a18a627fdb1b452d2f8fbc4630c27)) + +* chore(deps-dev): bump pre-commit from 3.1.1 to 3.2.0 + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.1.1 to 3.2.0. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.1.1...v3.2.0) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`0d679f6`](https://github.com/supabase-community/supabase-py/commit/0d679f66b19d94b3ecacec3be36b9a2278e21a48)) + +### Fix + +* fix: update lockfile ([`c4df68f`](https://github.com/supabase-community/supabase-py/commit/c4df68f78ada8e58930eaf9878a34630c58009fb)) + +* fix: bump supabase-py versions ([`094a321`](https://github.com/supabase-community/supabase-py/commit/094a321e08fba273ea3673453f8b59067b414ee7)) + +### Unknown + +* Merge pull request #406 from supabase-community/j0/1_0_3 + +fix: bump supabase-py version to v1.0.3 ([`c41b582`](https://github.com/supabase-community/supabase-py/commit/c41b58227a38e538910b4c336500387403a68523)) + +* Merge pull request #398 from supabase-community/dependabot/pip/develop/pre-commit-3.2.1 + +chore(deps-dev): bump pre-commit from 3.2.0 to 3.2.1 ([`7024834`](https://github.com/supabase-community/supabase-py/commit/7024834d2e5628220cc2ece9fdc9c5fa4fc12eca)) + +* Merge pull request #396 from supabase-community/dependabot/pip/develop/pre-commit-3.2.0 + +chore(deps-dev): bump pre-commit from 3.1.1 to 3.2.0 ([`b22729c`](https://github.com/supabase-community/supabase-py/commit/b22729c50808bbc1c4a4ab407b47ff4db6fe0850)) + +## v1.0.2 (2023-03-09) + +### Chore + +* chore(deps-dev): bump storage3 from 0.5.1 to 0.5.2 ([`3bd5a8e`](https://github.com/supabase-community/supabase-py/commit/3bd5a8ea40c629bcc191d27e6f2b621a6f7f9a71)) + +* chore(deps-dev): bump python-dotenv from 0.21.1 to 1.0.0 + +Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.21.1 to 1.0.0. +- [Release notes](https://github.com/theskumar/python-dotenv/releases) +- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md) +- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.21.1...v1.0.0) + +--- +updated-dependencies: +- dependency-name: python-dotenv + dependency-type: direct:development + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`798b9c4`](https://github.com/supabase-community/supabase-py/commit/798b9c4896d767cab6ca465afa6aeec3718b6813)) + +* chore(deps-dev): bump pytest from 7.2.1 to 7.2.2 + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.1 to 7.2.2. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.2.1...7.2.2) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`3970c2b`](https://github.com/supabase-community/supabase-py/commit/3970c2b45ebca67eb58574aa2f40d3e932b17161)) + +* chore(deps-dev): bump pre-commit from 3.1.0 to 3.1.1 + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.1.0 to 3.1.1. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.1.0...v3.1.1) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`efec31f`](https://github.com/supabase-community/supabase-py/commit/efec31f178e8376ad9a77dd6578b48fa88575635)) + +* chore: bump supa version ([`54172da`](https://github.com/supabase-community/supabase-py/commit/54172daea25f1f51dce4ab3977572218114a8c9c)) + +* chore(deps): bump storage3 from 0.5.0 to 0.5.1 + +Bumps [storage3](https://github.com/supabase-community/storage-py) from 0.5.0 to 0.5.1. +- [Release notes](https://github.com/supabase-community/storage-py/releases) +- [Changelog](https://github.com/supabase-community/storage-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/storage-py/commits) + +--- +updated-dependencies: +- dependency-name: storage3 + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`87440c4`](https://github.com/supabase-community/supabase-py/commit/87440c4daa6088ce274ea88078633e20e3ab2a2c)) + +* chore: fix typo ([`73975d0`](https://github.com/supabase-community/supabase-py/commit/73975d01342cfe321a0f9108f2ffcc8e4d07ecf1)) + +* chore: bump storage version ([`da1a05b`](https://github.com/supabase-community/supabase-py/commit/da1a05b885fbb4f935643e57592b31ddc6eeb442)) + +### Fix + +* fix: bump version ([`57b340b`](https://github.com/supabase-community/supabase-py/commit/57b340be359f2049fdaa69a9d7c2ed84d90880dc)) + +* fix: add shadow method ([`7e7cc36`](https://github.com/supabase-community/supabase-py/commit/7e7cc36f2011bd899ad3329602faddbbeddce6c2)) + +### Unknown + +* Merge pull request #381 from supabase-community/j0/add_storage_timeout + +fix: add storage client timeout ([`28fe522`](https://github.com/supabase-community/supabase-py/commit/28fe5229708fefc2c277fb068a4ed9ee4fcbc23c)) + +* Merge branch 'j0/add_storage_timeout' of github.com:supabase-community/supabase-py into j0/add_storage_timeout ([`51d7792`](https://github.com/supabase-community/supabase-py/commit/51d7792b2475a69dda65ca81d0bcac441a1bab5a)) + +* Merge branch 'develop' into j0/add_storage_timeout ([`226d68f`](https://github.com/supabase-community/supabase-py/commit/226d68ff08b2f6c12828ecf5bfd7d66262a5bd22)) + +* Merge pull request #389 from tzvc/develop + +chore(deps): bump storage3 from 0.5.1 to 0.5.2 ([`cded695`](https://github.com/supabase-community/supabase-py/commit/cded6952a669da30ca19740481c200a1bcd1facb)) + +* Remake lockfile ([`50c5336`](https://github.com/supabase-community/supabase-py/commit/50c5336d1d465d267ea2421ce6f7a7d8462eed2b)) + +* Merge pull request #384 from supabase-community/dependabot/pip/develop/python-dotenv-1.0.0 + +chore(deps-dev): bump python-dotenv from 0.21.1 to 1.0.0 ([`876a7f1`](https://github.com/supabase-community/supabase-py/commit/876a7f1cf8a0c08e4b2741ce6f58e224c5225f0f)) + +* Merge pull request #388 from supabase-community/dependabot/pip/develop/pytest-7.2.2 + +chore(deps-dev): bump pytest from 7.2.1 to 7.2.2 ([`d345129`](https://github.com/supabase-community/supabase-py/commit/d345129fb68f9b6ffa2bbd1e5d4240ca62d0df12)) + +* Merge pull request #386 from supabase-community/dependabot/pip/develop/pre-commit-3.1.1 + +chore(deps-dev): bump pre-commit from 3.1.0 to 3.1.1 ([`a17322c`](https://github.com/supabase-community/supabase-py/commit/a17322c7f4cc433277b377c5b13f8da10fcc8957)) + +* Merge pull request #385 from supabase-community/j0/1_0_1 + +chore: bump supabase version to 1.0.1 ([`84e2f69`](https://github.com/supabase-community/supabase-py/commit/84e2f696adb31e434c0776cc2702a605a7083b17)) + +* Merge pull request #382 from supabase-community/dependabot/pip/develop/storage3-0.5.1 + +chore(deps): bump storage3 from 0.5.0 to 0.5.1 ([`aa00e9f`](https://github.com/supabase-community/supabase-py/commit/aa00e9fe829ce01e2c5817916efdc5f702d443d1)) + +## v1.0.1 (2023-02-19) + +### Chore + +* chore(deps-dev): bump commitizen from 2.41.0 to 2.42.0 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.41.0 to 2.42.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.41.0...v2.42.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`d4a3ad0`](https://github.com/supabase-community/supabase-py/commit/d4a3ad02b408842b70be84289fcb3813171812ef)) + +* chore: bump version ([`d5749bd`](https://github.com/supabase-community/supabase-py/commit/d5749bd7a21cf52f2bfa271cef2ee5b43f589a1d)) + +* chore(deps): bump python-semantic-release from 7.33.1 to 7.33.2 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.33.1 to 7.33.2. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.33.1...v7.33.2) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`6d98f55`](https://github.com/supabase-community/supabase-py/commit/6d98f5505a60b7feb611a46c6e5e7ab6081a9325)) + +* chore(deps): bump cryptography from 39.0.0 to 39.0.1 + +Bumps [cryptography](https://github.com/pyca/cryptography) from 39.0.0 to 39.0.1. +- [Release notes](https://github.com/pyca/cryptography/releases) +- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pyca/cryptography/compare/39.0.0...39.0.1) + +--- +updated-dependencies: +- dependency-name: cryptography + dependency-type: indirect +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`c5b79ae`](https://github.com/supabase-community/supabase-py/commit/c5b79aead792076fe6d0c0b96fc09358b19c64ca)) + +* chore(deps): bump postgrest-py from 0.10.3 to 0.10.4 + +Bumps [postgrest-py](https://github.com/supabase-community/postgrest-py) from 0.10.3 to 0.10.4. +- [Release notes](https://github.com/supabase-community/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/postgrest-py/commits) + +--- +updated-dependencies: +- dependency-name: postgrest-py + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`8803e64`](https://github.com/supabase-community/supabase-py/commit/8803e64a07d8c9a74918c9d89b5df6f906553b04)) + +* chore(deps-dev): bump commitizen from 2.40.0 to 2.41.0 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.40.0 to 2.41.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.40.0...v2.41.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`db623e3`](https://github.com/supabase-community/supabase-py/commit/db623e3aba6f822331dd9e93aa887d5264c0059e)) + +* chore(deps-dev): bump pre-commit from 2.21.0 to 3.0.4 + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.21.0 to 3.0.4. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.21.0...v3.0.4) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`6416aed`](https://github.com/supabase-community/supabase-py/commit/6416aed05f057b266a9548a3c952c7fb9dd28bb8)) + +* chore(deps): bump python-semantic-release from 7.33.0 to 7.33.1 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.33.0 to 7.33.1. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.33.0...v7.33.1) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`d313646`](https://github.com/supabase-community/supabase-py/commit/d3136460541d3932c5c685f5cddf042c9e233412)) + +* chore(deps-dev): bump black from 22.12.0 to 23.1.0 + +Bumps [black](https://github.com/psf/black) from 22.12.0 to 23.1.0. +- [Release notes](https://github.com/psf/black/releases) +- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) +- [Commits](https://github.com/psf/black/compare/22.12.0...23.1.0) + +--- +updated-dependencies: +- dependency-name: black + dependency-type: direct:development + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`58c4411`](https://github.com/supabase-community/supabase-py/commit/58c441163e27bc150e2cd35716de13197617f109)) + +### Fix + +* fix: update postgrest version ([`61d68c3`](https://github.com/supabase-community/supabase-py/commit/61d68c38e59fe1e88cdcf5fe1e8669496808bd58)) + +* fix: pass through timeout ([`8921e32`](https://github.com/supabase-community/supabase-py/commit/8921e3241b849cd88ed9f800e3cb888706d0705c)) + +### Unknown + +* Merge pull request #380 from supabase-community/j0/bump-version + +chore: bump version to 1.0.1 ([`20cc55d`](https://github.com/supabase-community/supabase-py/commit/20cc55de83436ed54b496f3c8d73597f85e011da)) + +* Merge pull request #374 from supabase-community/dependabot/pip/develop/commitizen-2.42.0 + +chore(deps-dev): bump commitizen from 2.41.0 to 2.42.0 ([`9337f11`](https://github.com/supabase-community/supabase-py/commit/9337f119a31ce517755fea60c92b62a3e70cc6ac)) + +* Merge pull request #379 from supabase-community/dependabot/pip/develop/python-semantic-release-7.33.2 + +chore(deps): bump python-semantic-release from 7.33.1 to 7.33.2 ([`26ba43b`](https://github.com/supabase-community/supabase-py/commit/26ba43b384d5c639580e487529107a867518eac4)) + +* Merge pull request #369 from supabase-community/j0/pass_through_timeout_to_postgrest + +fix: pass through timeout ([`abd1abb`](https://github.com/supabase-community/supabase-py/commit/abd1abb0eff990ce0749e40903a2010aa6dde905)) + +* Merge pull request #364 from supabase-community/dependabot/pip/cryptography-39.0.1 + +chore(deps): bump cryptography from 39.0.0 to 39.0.1 ([`6700ab5`](https://github.com/supabase-community/supabase-py/commit/6700ab5d7d3259babe3aecf9181dfd25414f3364)) + +* Merge pull request #363 from supabase-community/dependabot/pip/develop/postgrest-py-0.10.4 + +chore(deps): bump postgrest-py from 0.10.3 to 0.10.4 ([`424b3da`](https://github.com/supabase-community/supabase-py/commit/424b3da8f3af42e7260de0f882203629cfa6bd4e)) + +* Merge pull request #366 from supabase-community/dependabot/pip/develop/commitizen-2.41.0 + +chore(deps-dev): bump commitizen from 2.40.0 to 2.41.0 ([`62c9834`](https://github.com/supabase-community/supabase-py/commit/62c98341632be1f500d10e1abedb4182009061c3)) + +* Merge pull request #362 from supabase-community/dependabot/pip/develop/pre-commit-3.0.4 + +chore(deps-dev): bump pre-commit from 2.21.0 to 3.0.4 ([`061d1b1`](https://github.com/supabase-community/supabase-py/commit/061d1b19df238b96851ec7230486d60a0770117f)) + +* Merge pull request #356 from supabase-community/dependabot/pip/develop/python-semantic-release-7.33.1 + +chore(deps): bump python-semantic-release from 7.33.0 to 7.33.1 ([`3d7e146`](https://github.com/supabase-community/supabase-py/commit/3d7e14692fffc8b34a3021a6cbb9fc489c2d13f9)) + +* Merge pull request #359 from alon710/patch-1 + +Update README.md ([`e85b0ce`](https://github.com/supabase-community/supabase-py/commit/e85b0ce2da9cdb66f8720588db25d6d912732e26)) + +* Update README.md ([`a98cccc`](https://github.com/supabase-community/supabase-py/commit/a98cccc3ded141818e6170727386034c9d747ec2)) + +* Merge pull request #357 from supabase-community/dependabot/pip/develop/black-23.1.0 + +chore(deps-dev): bump black from 22.12.0 to 23.1.0 ([`0d87538`](https://github.com/supabase-community/supabase-py/commit/0d87538813bc164726eb8e99e852e0a4278f3977)) + +## v1.0.0 (2023-02-05) + +### Chore + +* chore: fix import ([`62e73d5`](https://github.com/supabase-community/supabase-py/commit/62e73d55f264b5bfd04e7281a7b3154d23c27dfa)) + +* chore: bump pre-commit ([`323d29c`](https://github.com/supabase-community/supabase-py/commit/323d29c958a6ce6d1da839f60cb8eba1ef918152)) + +* chore: update ci ([`de3d072`](https://github.com/supabase-community/supabase-py/commit/de3d0727aeb0caade08e1c21239806d4e7a90638)) + +* chore: bump version ([`982fe19`](https://github.com/supabase-community/supabase-py/commit/982fe190855f8957bb0fa56f7bce0cc10fa26359)) + +* chore: bump versions ([`b08f02d`](https://github.com/supabase-community/supabase-py/commit/b08f02d110ce3bccdb81612cde4127faca0331f0)) + +* chore(deps): bump postgrest-py from 0.10.3 to 0.10.4 + +Bumps [postgrest-py](https://github.com/supabase-community/postgrest-py) from 0.10.3 to 0.10.4. +- [Release notes](https://github.com/supabase-community/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/postgrest-py/commits) + +--- +updated-dependencies: +- dependency-name: postgrest-py + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`ecf981c`](https://github.com/supabase-community/supabase-py/commit/ecf981c1ed4e20159bb1bcb37e508052b918882d)) + +* chore(deps-dev): bump commitizen from 2.39.1 to 2.40.0 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.39.1 to 2.40.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.39.1...v2.40.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`a08dfbe`](https://github.com/supabase-community/supabase-py/commit/a08dfbe8fb422d5d2540bf62b7a210a60c92827d)) + +* chore(deps): bump python-semantic-release from 7.32.2 to 7.33.0 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.32.2 to 7.33.0. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.32.2...v7.33.0) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`28db9f4`](https://github.com/supabase-community/supabase-py/commit/28db9f4dc1a5d48e338886280741bd707cdd2e3c)) + +* chore(deps): bump storage3 from 0.3.5 to 0.4.0 + +Bumps [storage3](https://github.com/supabase-community/storage-py) from 0.3.5 to 0.4.0. +- [Release notes](https://github.com/supabase-community/storage-py/releases) +- [Changelog](https://github.com/supabase-community/storage-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/storage-py/compare/v0.3.5...v0.4.0) + +--- +updated-dependencies: +- dependency-name: storage3 + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`d9a5bdc`](https://github.com/supabase-community/supabase-py/commit/d9a5bdc00119ef8c0e3c6ddc46c3aa92026e9ffd)) + +* chore: update README ([`29a94e3`](https://github.com/supabase-community/supabase-py/commit/29a94e360c45dd7bf0059cee3ace2e4553f57aab)) + +* chore: update ci ([`7b8c062`](https://github.com/supabase-community/supabase-py/commit/7b8c062fced05602db2bdd0ded4b760ba53fb7f3)) + +* chore: remove examples ([`e00211b`](https://github.com/supabase-community/supabase-py/commit/e00211b46177421081f58a3bdbc4cf20e8b130d9)) + +* chore: update lockfile ([`1afb00e`](https://github.com/supabase-community/supabase-py/commit/1afb00e990f9797a57df57082806545357a84b85)) + +* chore(deps): bump python-semantic-release from 7.32.1 to 7.32.2 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.32.1 to 7.32.2. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.32.1...v7.32.2) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`d752730`](https://github.com/supabase-community/supabase-py/commit/d752730735a5b01ef72b47d28adb9710eb1909fc)) + +* chore(deps-dev): bump commitizen from 2.35.0 to 2.37.0 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.35.0 to 2.37.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.35.0...v2.37.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`13a1a59`](https://github.com/supabase-community/supabase-py/commit/13a1a59e7691656924f3ef5cdf9ced3165a4ae89)) + +* chore(deps-dev): bump pytest from 7.1.3 to 7.2.0 + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.1.3 to 7.2.0. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.1.3...7.2.0) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`dcda932`](https://github.com/supabase-community/supabase-py/commit/dcda9326dca9c367f0d2a7f3074db602c72fd2fa)) + +### Documentation + +* docs: update readme to show hidden parts: +Installation, Usage etc. have been hidden ([`16397d9`](https://github.com/supabase-community/supabase-py/commit/16397d9591de73bf570f1bbce213ae55a91188e4)) + +### Fix + +* fix: move over syncclient ([`f389e77`](https://github.com/supabase-community/supabase-py/commit/f389e77054444f51f015abfb422284ca355f1488)) + +* fix: add missing import ([`46cc96a`](https://github.com/supabase-community/supabase-py/commit/46cc96aabe0c3b7aba0ca23c581dc0bf8c52176f)) + +* fix: update auth client options ([`c46c3a5`](https://github.com/supabase-community/supabase-py/commit/c46c3a503de3c18ec95f3ddbc4c463b6e6bf3393)) + +* fix: update readme ([`8765c72`](https://github.com/supabase-community/supabase-py/commit/8765c7244c2d75fc123fc5eb04a47417f165b964)) + +### Unknown + +* Merge pull request #360 from supabase-community/j0/bump-versions + +chore: publish v1.0.0 with new versions of sublibs. py37 is deprecated ([`1cd6d87`](https://github.com/supabase-community/supabase-py/commit/1cd6d872341ab2ca99a7e52e8f60ab1eef3454a1)) + +* Merge pull request #352 from supabase-community/dependabot/pip/develop/postgrest-py-0.10.4 + +chore(deps): bump postgrest-py from 0.10.3 to 0.10.4 ([`93a9ef9`](https://github.com/supabase-community/supabase-py/commit/93a9ef98390c6798c9fd42a9d20a9e89d2c60e10)) + +* Merge pull request #353 from ShantanuNair/patch-1 + +Update poetry.lock; Remove dataclasses dependency ([`e62e95d`](https://github.com/supabase-community/supabase-py/commit/e62e95d422b02b5dda094bc95233318868f6675b)) + +* Update poetry.lock; Remove dataclasses dependency + +- Dataclasses is no longer needed. It is a dependency needed only for Python < 3.7. Realtime, however requires Python >= 3.7, and so this dep isn't needed. + - Already removed in realtime https://github.com/supabase-community/realtime-py/pull/48 +- Fixes https://github.com/supabase-community/supabase-py/issues/33#issuecomment-1399638278 This issue comes up when using this library in AWS Lambda with serverless framework plugin serverless-python-requirements and this lock file makes it hard to deploy to Lambda with environments Python >= 3.7. ([`398a0a3`](https://github.com/supabase-community/supabase-py/commit/398a0a35d29bdf32515124ff59142ec383543774)) + +* Merge pull request #350 from supabase-community/dependabot/pip/develop/commitizen-2.40.0 + +chore(deps-dev): bump commitizen from 2.39.1 to 2.40.0 ([`202c070`](https://github.com/supabase-community/supabase-py/commit/202c070a94a4028c43eab0b3dcfb19a363dc92ae)) + +* Merge pull request #349 from supabase-community/dependabot/pip/develop/python-semantic-release-7.33.0 + +chore(deps): bump python-semantic-release from 7.32.2 to 7.33.0 ([`d8a44ba`](https://github.com/supabase-community/supabase-py/commit/d8a44ba8d4d7343b94e3f32f1ae89b6a6249aa53)) + +* Merge pull request #347 from supabase-community/dependabot/pip/develop/storage3-0.4.0 + +chore(deps): bump storage3 from 0.3.5 to 0.4.0 ([`ed2b4f7`](https://github.com/supabase-community/supabase-py/commit/ed2b4f76b85308364a572e2d5d123252e11e5810)) + +* Merge pull request #348 from supabase-community/j0/update-poetry + +chore: update poetry lockfile ([`25c145b`](https://github.com/supabase-community/supabase-py/commit/25c145b83ad0371ca7280ade174bba6fcc811bb3)) + +* Merge pull request #294 from supabase-community/dependabot/pip/develop/python-semantic-release-7.32.2 + +chore(deps): bump python-semantic-release from 7.32.1 to 7.32.2 ([`3227d4a`](https://github.com/supabase-community/supabase-py/commit/3227d4a23bc69712e13f1347017bc0d473ae99a7)) + +* Merge pull request #315 from t-huyeng/fix-readme + +docs: update readme to show hidden parts ([`d7099db`](https://github.com/supabase-community/supabase-py/commit/d7099db6ef129eeb72171e864449eee4864bb30c)) + +* Merge pull request #309 from wellsilver/patch-1 + +Fix grammar in readme ([`b2cddf0`](https://github.com/supabase-community/supabase-py/commit/b2cddf0277c627391d2dc42db9a3cd6e50552bb6)) + +* Update README.md ([`e73042c`](https://github.com/supabase-community/supabase-py/commit/e73042c5767a74f5919a5011c00d26b1921b3f31)) + +* replace a for I missed at line 42 ([`77ef300`](https://github.com/supabase-community/supabase-py/commit/77ef300f11674f056c7ee132a476ff8328fa6d55)) + +* Make line 42 better ([`8975705`](https://github.com/supabase-community/supabase-py/commit/8975705f0c634e0bc2702d1853f0b37aef39ac6a)) + +* Expand the note to also hide the text for the broken link ([`14e6ad1`](https://github.com/supabase-community/supabase-py/commit/14e6ad1683027fe78ceb6007199024c35d6c869f)) + +* Make the broken link into a note (for when its fixed) ([`76845bb`](https://github.com/supabase-community/supabase-py/commit/76845bbfa7f64ed1d6b84ba7648c8eea5b28935f)) + +* Better progress sheet ([`93eeaf0`](https://github.com/supabase-community/supabase-py/commit/93eeaf04b7f17f14b8173b25d39b2412b44780e6)) + +* fix spelling error ([`35ab103`](https://github.com/supabase-community/supabase-py/commit/35ab1033c2fa316522c960699a3f4a3a5a05be4a)) + +* Merge pull request #310 from bweisel/patch-1 + +Fix broken link in README ([`38e26d5`](https://github.com/supabase-community/supabase-py/commit/38e26d5e8c6085bc74a27ccc06aea981e44e8b5a)) + +* Fix broken link in README + +https://github.com/supabase-community/supabase-py/issues/304 ([`966903c`](https://github.com/supabase-community/supabase-py/commit/966903c93c3573dd3353ff71bac196f0ff1a1b5b)) + +* Merge pull request #296 from timkpaine/tkp/conda + +add conda package instructions to readme ([`b34828a`](https://github.com/supabase-community/supabase-py/commit/b34828afb7115a5b2c5b60aab1e962eb3904fb1d)) + +* add conda package instructions to readme ([`32b5a58`](https://github.com/supabase-community/supabase-py/commit/32b5a5889486c71e5b6f8aeabce3b5955b53c238)) + +* Merge pull request #302 from supabase-community/J0/update-readme + +chore: Update README.md ([`d18cc32`](https://github.com/supabase-community/supabase-py/commit/d18cc320f6e25697609ab93a26406a5a501b757c)) + +* Update README.md ([`b13a2c3`](https://github.com/supabase-community/supabase-py/commit/b13a2c3ce8d65b482ef638b86f0194341eb6aa70)) + +* Update README.md ([`be68dd4`](https://github.com/supabase-community/supabase-py/commit/be68dd4d2f2b48f6a25a043b2355d1cdad541242)) + +* Merge pull request #298 from supabase-community/dependabot/pip/develop/commitizen-2.37.0 + +chore(deps-dev): bump commitizen from 2.35.0 to 2.37.0 ([`1f12755`](https://github.com/supabase-community/supabase-py/commit/1f1275585f7dbd7e77d1908ab86e7be027483a1f)) + +* Merge pull request #297 from supabase-community/dependabot/pip/develop/pytest-7.2.0 + +chore(deps-dev): bump pytest from 7.1.3 to 7.2.0 ([`1b54ef7`](https://github.com/supabase-community/supabase-py/commit/1b54ef747da626b6e7e51e3fe84c297f016fd8ed)) + +* Merge pull request #289 from rawandahmad698/develop + +Custom exception class, URL & Key validation using RegEx, typo fixes. ([`f9b5ac1`](https://github.com/supabase-community/supabase-py/commit/f9b5ac12e135dfc5d2ea81bcff0d5e22e581eac4)) + +* Format fixes ([`5362864`](https://github.com/supabase-community/supabase-py/commit/5362864e005b892987940d26462585cc7d514cd8)) + +* Format fixes ([`2c1c0ef`](https://github.com/supabase-community/supabase-py/commit/2c1c0efca8fa87c222ccc6d999977a94afba4a99)) + +* Update test_function_configuration.py ([`0f0f65c`](https://github.com/supabase-community/supabase-py/commit/0f0f65ca76e24a1bfae80d793c3bcef3b99c263d)) + +* Update test_function_configuration.py ([`8244244`](https://github.com/supabase-community/supabase-py/commit/8244244638bcb2bfe17c5718e28f453dce46132f)) + +* Update test_function_configuration.py ([`84b7a71`](https://github.com/supabase-community/supabase-py/commit/84b7a7164b7ed837a0129ac0a31eda399f9b0bea)) + +* Fix tests ([`7ca812b`](https://github.com/supabase-community/supabase-py/commit/7ca812b7e781bd3cbf8f7257a168ab2fb6fd7c6a)) + +* Fix test_client.py grammar. ([`7f6ff50`](https://github.com/supabase-community/supabase-py/commit/7f6ff50ff1a4b9fe42e5e30c4ef4fc22ac401f6a)) + +* Fix client_options.py ([`d247c7e`](https://github.com/supabase-community/supabase-py/commit/d247c7e2819c424fb42659d4eceb5371c705e537)) + +* Custom exception class, typo fixes. ([`d80f982`](https://github.com/supabase-community/supabase-py/commit/d80f98247209453ae31cf96881c45a100ad9e09a)) + +* Merge pull request #287 from cadnce/develop + +Replaced makefile with poetry scripts ([`8e98ee2`](https://github.com/supabase-community/supabase-py/commit/8e98ee2d14f5ae0091e365eb89a309fc837a7b79)) + +* format scripts ([`77bf12a`](https://github.com/supabase-community/supabase-py/commit/77bf12a8ea908ac65bf663d67aad88b5b20d0c4f)) + +* Oops ([`d9da922`](https://github.com/supabase-community/supabase-py/commit/d9da92279baac5aff516f669303966a7e980bda4)) + +* Replaced makefile with poetry scripts ([`f194c51`](https://github.com/supabase-community/supabase-py/commit/f194c51132d771f8d0c166935400b4129521a6b9)) + +* Merge pull request #290 from RamiroND/patch-2 + +Updated URL ([`0a71887`](https://github.com/supabase-community/supabase-py/commit/0a7188793dbdc8629af60b4e9bf4066ff30c0168)) + +* Updated URL ([`e159dae`](https://github.com/supabase-community/supabase-py/commit/e159dae4a533c3a63aadb492fc8ee9db462060ef)) + +## v0.7.1 (2022-10-11) + +### Chore + +* chore(release): bump version to v0.7.1 + +Automatically generated by python-semantic-release ([`5f860ac`](https://github.com/supabase-community/supabase-py/commit/5f860ac5dc3e8201ce633c9fd36ee2cac9992183)) + +* chore(deps): bump supafunc from 0.2.0 to 0.2.1 + +Bumps [supafunc]() from 0.2.0 to 0.2.1. + +--- +updated-dependencies: +- dependency-name: supafunc + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`a6f4441`](https://github.com/supabase-community/supabase-py/commit/a6f4441f51a20c6e169d29dbe1bea01a9a6cb205)) + +### Fix + +* fix: resolve merge conflicts ([`36b71f3`](https://github.com/supabase-community/supabase-py/commit/36b71f3aab452e504fa400c629a8023661540e88)) + +* fix: update packages and resolve security vuln ([`ec94092`](https://github.com/supabase-community/supabase-py/commit/ec94092189d0309fa4f1a7cfb6015ddacc1601c5)) + +### Unknown + +* Merge pull request #286 from supabase-community/dependabot/pip/develop/supafunc-0.2.1 + +chore(deps): bump supafunc from 0.2.0 to 0.2.1 ([`3097532`](https://github.com/supabase-community/supabase-py/commit/309753238dbc57ecc649b84eb20d198de7219323)) + +## v0.7.0 (2022-10-10) + +### Chore + +* chore(release): bump version to v0.7.0 + +Automatically generated by python-semantic-release ([`9bb261d`](https://github.com/supabase-community/supabase-py/commit/9bb261d167bfeaf363b167efad0e04b19c6e88d3)) + +* chore(deps): bump python-semantic-release from 7.28.1 to 7.32.1 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.28.1 to 7.32.1. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.28.1...v7.32.1) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`b8cad0f`](https://github.com/supabase-community/supabase-py/commit/b8cad0fe167329a3d49622a8c8607b6830e5deca)) + +* chore: run hooks ([`9775ce9`](https://github.com/supabase-community/supabase-py/commit/9775ce9ed886e63644fa9c5915167aa6dff4066f)) + +* chore(deps-dev): bump black from 22.8.0 to 22.10.0 + +Bumps [black](https://github.com/psf/black) from 22.8.0 to 22.10.0. +- [Release notes](https://github.com/psf/black/releases) +- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) +- [Commits](https://github.com/psf/black/compare/22.8.0...22.10.0) + +--- +updated-dependencies: +- dependency-name: black + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`3edfd60`](https://github.com/supabase-community/supabase-py/commit/3edfd605f03eb474c6364e758d9d8e970c886a8a)) + +* chore(deps-dev): bump commitizen from 2.27.1 to 2.35.0 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.27.1 to 2.35.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.27.1...v2.35.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`91f6a10`](https://github.com/supabase-community/supabase-py/commit/91f6a10b3d318ac50b6bc63af656b0a43543ec17)) + +### Fix + +* fix: remove .gitkeep ([`1ade301`](https://github.com/supabase-community/supabase-py/commit/1ade30162326fa57b9c237af7b597fc056febc62)) + +* fix: update lock ([`4ad573a`](https://github.com/supabase-community/supabase-py/commit/4ad573ae18a46ca33799d5e8c0a277c45fd47833)) + +* fix: update isort version ([`1a41ac7`](https://github.com/supabase-community/supabase-py/commit/1a41ac7addd17834e88f5206b910f4a0991be8e0)) + +* fix: run isort on client ([`7a56ab4`](https://github.com/supabase-community/supabase-py/commit/7a56ab4df5cbd1275626d80af0b7c23e05c1b8fb)) + +* fix: update supafunc version ([`7c92edf`](https://github.com/supabase-community/supabase-py/commit/7c92edfc7d8932f74f07f91967f03ba12f271848)) + +### Unknown + +* Merge pull request #179 from supabase-community/j0_add_magic + +feat: Add functions ([`31ca8d2`](https://github.com/supabase-community/supabase-py/commit/31ca8d29a1cc6bd48eb6562df44ad95557bb9969)) + +* Update supabase/client.py + +Co-authored-by: Anand <40204976+anand2312@users.noreply.github.com> ([`47ac882`](https://github.com/supabase-community/supabase-py/commit/47ac88237ea83df8575b5502b1b36342335a401e)) + +* tests: add test for local dev url ([`bc3eb4c`](https://github.com/supabase-community/supabase-py/commit/bc3eb4ce2d1b7993751a68d95749f5945a8ad674)) + +* Merge branch 'develop' into j0_add_magic ([`61b15f0`](https://github.com/supabase-community/supabase-py/commit/61b15f08b8c1fa050712c2472aef66df0bdbab03)) + +* Merge pull request #283 from supabase-community/dependabot/pip/develop/python-semantic-release-7.32.1 + +chore(deps): bump python-semantic-release from 7.28.1 to 7.32.1 ([`0fdb70d`](https://github.com/supabase-community/supabase-py/commit/0fdb70dcc459edc3a6da7ae22df366e155ee5044)) + +* Merge branch 'develop' into j0_add_magic ([`0e9334e`](https://github.com/supabase-community/supabase-py/commit/0e9334e9ecf545101f3f6737e01580e6445d8142)) + +* Merge pull request #284 from supabase-community/dependabot/pip/develop/black-22.10.0 + +chore(deps-dev): bump black from 22.8.0 to 22.10.0 ([`f6f893c`](https://github.com/supabase-community/supabase-py/commit/f6f893c5cff2f059a357d30d83a85d1a02b4acc3)) + +* Merge pull request #277 from supabase-community/dependabot/pip/develop/commitizen-2.35.0 + +chore(deps-dev): bump commitizen from 2.27.1 to 2.35.0 ([`8c654d7`](https://github.com/supabase-community/supabase-py/commit/8c654d7a44de6bda5d7588de01e91a0d912f7212)) + +## v0.6.0 (2022-10-07) + +### Chore + +* chore(release): bump version to v0.6.0 + +Automatically generated by python-semantic-release ([`84c69d5`](https://github.com/supabase-community/supabase-py/commit/84c69d5c58143f84e7f6e812ffe1efa6291518a3)) + +* chore: trigger release ([`d01a456`](https://github.com/supabase-community/supabase-py/commit/d01a45665babe9814013aac1560dc5ac4b7e8c6d)) + +* chore(deps-dev): bump python-dotenv from 0.20.0 to 0.21.0 + +Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.20.0 to 0.21.0. +- [Release notes](https://github.com/theskumar/python-dotenv/releases) +- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md) +- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.20.0...v0.21.0) + +--- +updated-dependencies: +- dependency-name: python-dotenv + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`a254982`](https://github.com/supabase-community/supabase-py/commit/a254982fd18ccc18b20da094c1d0f1b011990998)) + +* chore(deps-dev): bump pytest-cov from 3.0.0 to 4.0.0 + +Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 3.0.0 to 4.0.0. +- [Release notes](https://github.com/pytest-dev/pytest-cov/releases) +- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v3.0.0...v4.0.0) + +--- +updated-dependencies: +- dependency-name: pytest-cov + dependency-type: direct:development + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`4414a8d`](https://github.com/supabase-community/supabase-py/commit/4414a8d80d61f8833cf983031505382671789da1)) + +* chore(deps-dev): bump flake8 from 4.0.1 to 5.0.4 + +Bumps [flake8](https://github.com/pycqa/flake8) from 4.0.1 to 5.0.4. +- [Release notes](https://github.com/pycqa/flake8/releases) +- [Commits](https://github.com/pycqa/flake8/compare/4.0.1...5.0.4) + +--- +updated-dependencies: +- dependency-name: flake8 + dependency-type: direct:development + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`fba47ef`](https://github.com/supabase-community/supabase-py/commit/fba47ef714a5f433ff4d3068293cf649b955c612)) + +* chore: adds new python blog to readme ([`3171a02`](https://github.com/supabase-community/supabase-py/commit/3171a023fc5f3b3c66b1ede5b6293b62b0a0da12)) + +### Feature + +* feat: setting timeout for postgrest-py client. Closes #225 ([`258ddf1`](https://github.com/supabase-community/supabase-py/commit/258ddf12e2c5df8b30175c7a295934bc0f78133d)) + +* feat: setting timeout for postgrest-py client. Closes #225 ([`709ad8d`](https://github.com/supabase-community/supabase-py/commit/709ad8dd12f5654ba44c34b5a03e9d0c191a09e3)) + +* feat: setting timeout for postgrest-py client. Closes #225 ([`4769dc4`](https://github.com/supabase-community/supabase-py/commit/4769dc4aa8fef866e1173cd3d1e39923ba0aadd6)) + +* feat: setting timeout for postgrest-py client. Closes #225 ([`a910474`](https://github.com/supabase-community/supabase-py/commit/a910474b6827f1e9dbf9f0dd5f127788ca6da29d)) + +* feat: added timeout to options (#225) ([`136ce25`](https://github.com/supabase-community/supabase-py/commit/136ce2576c859cf87175778e1569e073bb67aa63)) + +* feat: added timeout to options ([`069ada2`](https://github.com/supabase-community/supabase-py/commit/069ada2f14c44e96f20e60c31ad1fdb8d9beb9e4)) + +* feat: setting timeout for postgrest-py client (#225) ([`de5aba3`](https://github.com/supabase-community/supabase-py/commit/de5aba359ad21fd35f4e222f4693913b9777618e)) + +### Unknown + +* Merge pull request #236 from mohnish7/pr/234 + +Continuation of Pr/234: ran isort and black for tests ([`fff264f`](https://github.com/supabase-community/supabase-py/commit/fff264f2f22a01a1fbc5c8fbc9a0a3e5cebcf9c2)) + +* ran isort and black + +First time contributing to an open source project, so please let me know if anything is wrong. I ran isort and black as requested by J0 ([`754bc06`](https://github.com/supabase-community/supabase-py/commit/754bc06d73c91c2f0efc3915cdd323febc389cdd)) + +* Revert "feat: added timeout to options" + +This reverts commit 069ada2f14c44e96f20e60c31ad1fdb8d9beb9e4. ([`3f51884`](https://github.com/supabase-community/supabase-py/commit/3f518849385928f258d3ca5152c6ffb6da7d8e71)) + +* Merge pull request #281 from supabase-community/dependabot/pip/develop/python-dotenv-0.21.0 + +chore(deps-dev): bump python-dotenv from 0.20.0 to 0.21.0 ([`c490f87`](https://github.com/supabase-community/supabase-py/commit/c490f87c01bac4a886ea7957fa05834f72ee4e52)) + +* Merge pull request #282 from supabase-community/dependabot/pip/develop/pytest-cov-4.0.0 + +chore(deps-dev): bump pytest-cov from 3.0.0 to 4.0.0 ([`5efd68a`](https://github.com/supabase-community/supabase-py/commit/5efd68abf94611230edb4d56d3909c9bc11f0163)) + +* Merge pull request #252 from supabase-community/dependabot/pip/develop/flake8-5.0.4 + +chore(deps-dev): bump flake8 from 4.0.1 to 5.0.4 ([`47863f8`](https://github.com/supabase-community/supabase-py/commit/47863f828972ffb8bd75c3bf810ddc8f44b1beef)) + +* Merge pull request #275 from ZetiMente/develop + +update realtime ([`01d83a4`](https://github.com/supabase-community/supabase-py/commit/01d83a4f7d0395def36650901820552b9f662877)) + +* update realtime ([`1929ff2`](https://github.com/supabase-community/supabase-py/commit/1929ff213000276fd5c11c0f7ea480d63cd3c39f)) + +## v0.5.8 (2022-06-27) + +### Chore + +* chore(release): bump version to v0.5.8 + +Automatically generated by python-semantic-release ([`b2e623d`](https://github.com/supabase-community/supabase-py/commit/b2e623dcdf8742bce12d965f94418ce50965af33)) + +* chore: force storage latest version ([`d63e421`](https://github.com/supabase-community/supabase-py/commit/d63e421e9f4cc1f255c30cadd355bcdb10c74318)) + +* chore(deps): bump python-semantic-release from 7.28.1 to 7.29.1 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.28.1 to 7.29.1. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.28.1...v7.29.1) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`91c6f40`](https://github.com/supabase-community/supabase-py/commit/91c6f40d08b767365878451f867f77326b5763c4)) + +### Fix + +* fix: downgrade python-semantic-release, fix end of file at README and force latest storage version + +fix: downgrade python-semantic-release, fix end of file at README and force latest storage version ([`9c4bfba`](https://github.com/supabase-community/supabase-py/commit/9c4bfbab5539fbe242bbb728e7ad03037a79563a)) + +### Style + +* style: fix end of file at README ([`125ccd0`](https://github.com/supabase-community/supabase-py/commit/125ccd0acc83419d9019f757ddeba6deb33deb63)) + +### Unknown + +* Revert "chore(deps): bump python-semantic-release from 7.28.1 to 7.29.1" + +This reverts commit 91c6f40d08b767365878451f867f77326b5763c4. ([`2f2f6e2`](https://github.com/supabase-community/supabase-py/commit/2f2f6e289c3841013d0571687fe2b604f6e174eb)) + +* Merge pull request #223 from RamiroND/patch-1 + +Added H2 with Python and Supabase Resources ([`049c91a`](https://github.com/supabase-community/supabase-py/commit/049c91ac60bb08a960f8b0e7e3304c1900a6b597)) + +* Updated urls to supabase.com ([`f618a44`](https://github.com/supabase-community/supabase-py/commit/f618a442182edea1daa7d1fd1d066d68432220a9)) + +* Added H2 with Python and Supabase Resources ([`b7ca664`](https://github.com/supabase-community/supabase-py/commit/b7ca6649471eb77e2a0c9ec2d255edfe6accd805)) + +## v0.5.7 (2022-06-08) + +### Chore + +* chore(release): bump version to v0.5.7 + +Automatically generated by python-semantic-release ([`c61b752`](https://github.com/supabase-community/supabase-py/commit/c61b752fc2a24da8d955710990ad9f5fcc08c78d)) + +* chore(deps): bump storage3 from 0.3.1 to 0.3.4 + +Bumps [storage3](https://github.com/supabase-community/storage-py) from 0.3.1 to 0.3.4. +- [Release notes](https://github.com/supabase-community/storage-py/releases) +- [Changelog](https://github.com/supabase-community/storage-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/storage-py/compare/v0.3.1...v0.3.4) + +--- +updated-dependencies: +- dependency-name: storage3 + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`2fd2618`](https://github.com/supabase-community/supabase-py/commit/2fd261891b1ce8bed101e1884fb091dfc1be54bc)) + +* chore(deps-dev): bump commitizen from 2.25.0 to 2.27.1 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.25.0 to 2.27.1. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.25.0...v2.27.1) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`2e3015f`](https://github.com/supabase-community/supabase-py/commit/2e3015f26d40417ef44c5ad24aee9f6a9f0e05c7)) + +* chore(deps): bump httpx from 0.21.3 to 0.23.0 in /examples/FastAPI + +Bumps [httpx](https://github.com/encode/httpx) from 0.21.3 to 0.23.0. +- [Release notes](https://github.com/encode/httpx/releases) +- [Changelog](https://github.com/encode/httpx/blob/master/CHANGELOG.md) +- [Commits](https://github.com/encode/httpx/compare/0.21.3...0.23.0) + +--- +updated-dependencies: +- dependency-name: httpx + dependency-type: direct:production +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`8850c79`](https://github.com/supabase-community/supabase-py/commit/8850c7928900ac72b5ee9d96f5c3010320371c32)) + +* chore(deps-dev): bump python-semantic-release from 7.28.1 to 7.29.1 + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.28.1 to 7.29.1. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.28.1...v7.29.1) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`a690898`](https://github.com/supabase-community/supabase-py/commit/a6908981933ad52332489efe084331cf84e9d368)) + +* chore(deps-dev): bump commitizen from 2.24.0 to 2.25.0 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.24.0 to 2.25.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.24.0...v2.25.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`ee7522e`](https://github.com/supabase-community/supabase-py/commit/ee7522e81378d2e5bd79d6c313d0d3adc831a36d)) + +* chore(deps-dev): bump pre-commit from 2.18.1 to 2.19.0 + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.18.1 to 2.19.0. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.18.1...v2.19.0) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`87b852f`](https://github.com/supabase-community/supabase-py/commit/87b852f6aa5d34704a759decab0e102e15a47d84)) + +### Fix + +* fix: lock python-semantic-release version ([`0a81c6f`](https://github.com/supabase-community/supabase-py/commit/0a81c6f84877b1c0d13a8214493f21a3afded4ba)) + +* fix: force release ([`cfa5a55`](https://github.com/supabase-community/supabase-py/commit/cfa5a5533afcc500be787e2e4fa1de78dce5aaa5)) + +* fix: pass schema to postgrest init ([`912a442`](https://github.com/supabase-community/supabase-py/commit/912a4420e9dc9c098cd49ad5cb7631ac86cb2b89)) + +### Style + +* style: reformat client.py using black ([`c71261f`](https://github.com/supabase-community/supabase-py/commit/c71261feccfa3037a8461e6e66bd4d57ca6207ea)) + +### Unknown + +* Merge pull request #213 from supabase-community/dependabot/pip/develop/commitizen-2.27.1 + +chore(deps-dev): bump commitizen from 2.25.0 to 2.27.1 ([`32a92d8`](https://github.com/supabase-community/supabase-py/commit/32a92d895469c03233838d717f23f126d5fab4db)) + +* Merge pull request #216 from supabase-community/dependabot/pip/examples/FastAPI/httpx-0.23.0 + +chore(deps): bump httpx from 0.21.3 to 0.23.0 in /examples/FastAPI ([`15a545a`](https://github.com/supabase-community/supabase-py/commit/15a545ada10f1ed94d18bdfd815dc236e368e3b3)) + +* Merge pull request #218 from Morioki/schema-fix + +fix: pass schema to postgrest initialization ([`6f2b516`](https://github.com/supabase-community/supabase-py/commit/6f2b51633f81447764f911ebeef6353aaa6bfdea)) + +* Merge pull request #215 from supabase-community/dependabot/pip/develop/python-semantic-release-7.29.1 + +chore(deps-dev): bump python-semantic-release from 7.28.1 to 7.29.1 ([`53a6c95`](https://github.com/supabase-community/supabase-py/commit/53a6c95b5cd4f1a107bd9d0a3e10162442a0dbe5)) + +* Merge pull request #206 from supabase-community/dependabot/pip/develop/commitizen-2.25.0 + +chore(deps-dev): bump commitizen from 2.24.0 to 2.25.0 ([`d8bffa4`](https://github.com/supabase-community/supabase-py/commit/d8bffa4d6718d004b5770013a273d47899bfe279)) + +* Merge pull request #204 from supabase-community/dependabot/pip/develop/pre-commit-2.19.0 + +chore(deps-dev): bump pre-commit from 2.18.1 to 2.19.0 ([`61bc486`](https://github.com/supabase-community/supabase-py/commit/61bc4862139749eade05592e2145253f3853ed25)) + +## v0.5.6 (2022-05-06) + +### Chore + +* chore(release): bump version to v0.5.6 + +Automatically generated by python-semantic-release ([`1f3be9c`](https://github.com/supabase-community/supabase-py/commit/1f3be9cb5e433fb6b2ff47b766e732bcf0e8c524)) + +### Fix + +* fix: export SupabaseStorageClient ([`8539a4e`](https://github.com/supabase-community/supabase-py/commit/8539a4eeb6109712a600e92736fa5a0a3df343c8)) + +## v0.5.5 (2022-05-01) + +### Chore + +* chore(release): bump version to v0.5.5 + +Automatically generated by python-semantic-release ([`2d29556`](https://github.com/supabase-community/supabase-py/commit/2d29556f8ca92b47842a93210c06eb968ea702b7)) + +* chore: bump storage3 version for js parity ([`086cbcc`](https://github.com/supabase-community/supabase-py/commit/086cbcc9b58ea7084f42bf45b36490cb19e936f7)) + +### Fix + +* fix: bump storage3 ([`f557000`](https://github.com/supabase-community/supabase-py/commit/f557000ff4b0ad3304a6a058e49a0e07979cc09c)) + +### Unknown + +* Merge pull request #202 from supabase-community/bump-deps + +fix: bump storage3 version for js parity ([`ff08d02`](https://github.com/supabase-community/supabase-py/commit/ff08d02505cc962ea130a689323ab89b670b913e)) + +## v0.5.4 (2022-04-30) + +### Chore + +* chore(release): bump version to v0.5.4 + +Automatically generated by python-semantic-release ([`2c1d87c`](https://github.com/supabase-community/supabase-py/commit/2c1d87cca2f03ce3ba42354316a3c1ebd3a42979)) + +* chore: bump pytest version ([`90835f1`](https://github.com/supabase-community/supabase-py/commit/90835f1c223246ed1cb344869b47c20edb26190c)) + +* chore: bump storage3 version ([`29dd945`](https://github.com/supabase-community/supabase-py/commit/29dd945af8b6a2e8b6ceb22795a8d9b1503f3ec9)) + +* chore: delete storage tests ([`422c722`](https://github.com/supabase-community/supabase-py/commit/422c7221f8bc4c17d0c434f18fb8d19f9ef3095a)) + +* chore: deprecate StorageClient.StorageFileAPI + +As the commit message says, we deprecate this method in favour of +StorageClient.from_. This method name now conforms to PEP8. ([`c3e33a5`](https://github.com/supabase-community/supabase-py/commit/c3e33a55f26dd98417f9efae8436fa8617774f9a)) + +* chore: remove ambiguous name for postgrest types + +Re-exporting postgrest.APIError from the supabase library could cause +confusion, as it is not a general supabase API error but a postgrest +error. ([`626b094`](https://github.com/supabase-community/supabase-py/commit/626b09477064b2187d1db26b20a45b14c194bc3c)) + +* chore: switch to storage3 ([`77dda54`](https://github.com/supabase-community/supabase-py/commit/77dda5400419663b092b8ce60b80292d76d5fe52)) + +* chore: bump deps, use relative imports ([`00e85f3`](https://github.com/supabase-community/supabase-py/commit/00e85f3ebf1a572f96e456edfcb4f68254159d6d)) + +* chore(deps-dev): bump commitizen from 2.23.0 to 2.24.0 (#189) + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.23.0 to 2.24.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.23.0...v2.24.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`fb0c137`](https://github.com/supabase-community/supabase-py/commit/fb0c13721aaf69d6a7b162d1a2024fdc7df77c36)) + +* chore(deps-dev): bump python-semantic-release from 7.28.0 to 7.28.1 (#188) + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.28.0 to 7.28.1. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.28.0...v7.28.1) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`6b0797a`](https://github.com/supabase-community/supabase-py/commit/6b0797a864fa8dfe25a989216e469e8b0829e336)) + +* chore(deps-dev): bump python-semantic-release from 7.27.0 to 7.28.0 (#186) + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.27.0 to 7.28.0. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.27.0...v7.28.0) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`590724a`](https://github.com/supabase-community/supabase-py/commit/590724a6e8451e9f0ce486dbdf30f2527271e514)) + +* chore(deps): bump postgrest-py from 0.10.0 to 0.10.1 (#184) + +Bumps [postgrest-py](https://github.com/supabase/postgrest-py) from 0.10.0 to 0.10.1. +- [Release notes](https://github.com/supabase/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase/postgrest-py/compare/v0.10.0...v0.10.1) + +--- +updated-dependencies: +- dependency-name: postgrest-py + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`02d33e6`](https://github.com/supabase-community/supabase-py/commit/02d33e6af301f4e514067ce865dedd9d78b8a09b)) + +* chore(deps-dev): bump pre-commit from 2.17.0 to 2.18.1 (#182) + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.17.0 to 2.18.1. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.17.0...v2.18.1) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`b60dc8a`](https://github.com/supabase-community/supabase-py/commit/b60dc8a3d014afe27420cfb7ceb13640303ca082)) + +* chore(deps-dev): bump commitizen from 2.21.2 to 2.23.0 (#178) + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.21.2 to 2.23.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.21.2...v2.23.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`e432769`](https://github.com/supabase-community/supabase-py/commit/e4327695e64bc0297c6ba33bd1e3cf37a1cf9976)) + +* chore(deps-dev): bump black from 22.1.0 to 22.3.0 + +Bumps [black](https://github.com/psf/black) from 22.1.0 to 22.3.0. +- [Release notes](https://github.com/psf/black/releases) +- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) +- [Commits](https://github.com/psf/black/compare/22.1.0...22.3.0) + +--- +updated-dependencies: +- dependency-name: black + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`80ceab3`](https://github.com/supabase-community/supabase-py/commit/80ceab3130e53ef56789cbbb4223289af9edf0ef)) + +* chore: update deps ([`728ad55`](https://github.com/supabase-community/supabase-py/commit/728ad555b1c42b6ddc68b255cc111f4ed37bff83)) + +* chore(deps-dev): bump python-dotenv from 0.19.2 to 0.20.0 (#174) + +Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.19.2 to 0.20.0. +- [Release notes](https://github.com/theskumar/python-dotenv/releases) +- [Changelog](https://github.com/theskumar/python-dotenv/blob/master/CHANGELOG.md) +- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.19.2...v0.20.0) + +--- +updated-dependencies: +- dependency-name: python-dotenv + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`106b4ac`](https://github.com/supabase-community/supabase-py/commit/106b4acb5be4957e804d43bf44f0e59b764874df)) + +* chore(deps-dev): bump pytest from 7.1.0 to 7.1.1 (#172) + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.1.0 to 7.1.1. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.1.0...7.1.1) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`64e23a1`](https://github.com/supabase-community/supabase-py/commit/64e23a158d4361062fe3fcd1b8709d1621bd2597)) + +* chore(deps-dev): bump python-semantic-release from 7.26.0 to 7.27.0 (#170) + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.26.0 to 7.27.0. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.26.0...v7.27.0) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`00d9239`](https://github.com/supabase-community/supabase-py/commit/00d92399fbf9640fe5738932f99302ca08c47a81)) + +* chore(deps): bump postgrest-py from 0.9.1 to 0.10.0 (#169) + +Bumps [postgrest-py](https://github.com/supabase/postgrest-py) from 0.9.1 to 0.10.0. +- [Release notes](https://github.com/supabase/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase/postgrest-py/compare/v0.9.1...v0.10.0) + +--- +updated-dependencies: +- dependency-name: postgrest-py + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`1cdb926`](https://github.com/supabase-community/supabase-py/commit/1cdb9262a09af0c5799f63355ffdc6ec3012f4b5)) + +* chore(deps-dev): bump pytest from 7.0.1 to 7.1.0 (#168) + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.0.1 to 7.1.0. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.0.1...7.1.0) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`0a306d1`](https://github.com/supabase-community/supabase-py/commit/0a306d1629fc4fff8ee59495951dfde9478a8631)) + +### Ci + +* ci(fix): bump poetry version ([`395f6fe`](https://github.com/supabase-community/supabase-py/commit/395f6fe819c5336f420b13077e40f64636883019)) + +### Feature + +* feat: add magic ([`9e9942b`](https://github.com/supabase-community/supabase-py/commit/9e9942b7e86314682ea4c98c9a0043bab78f18ad)) + +### Fix + +* fix: typo in docstring ([`54cd34e`](https://github.com/supabase-community/supabase-py/commit/54cd34e0b0d6af7e477fefeab38f7ccb6ce2f81a)) + +* fix: correct path to version ([`cb5b4b2`](https://github.com/supabase-community/supabase-py/commit/cb5b4b251d5504feb0d6e94e1aa058bf5fc7a646)) + +### Unknown + +* Merge pull request #194 from supabase-community/bump-deps + +feat: use storage3 client and bump deps ([`aea8015`](https://github.com/supabase-community/supabase-py/commit/aea8015c92454c46a9b42ad3da204297b30dec8c)) + +* Merge pull request #190 from SergioB-dev/serg/update-readme + +add deletion example to readme ([`38ed4d3`](https://github.com/supabase-community/supabase-py/commit/38ed4d395ea78aa29fa9071cbc94e680ba169c95)) + +* add deletion example to readme ([`2e2a10e`](https://github.com/supabase-community/supabase-py/commit/2e2a10e997572c3c00753aa7e8826e85571f9725)) + +* Merge pull request #177 from supabase-community/dependabot/pip/develop/black-22.3.0 + +chore(deps-dev): bump black from 22.1.0 to 22.3.0 ([`609627e`](https://github.com/supabase-community/supabase-py/commit/609627e2a9601e83be18afe3f4d0b0fd7e26681e)) + +* chore:update import ([`8fc1a69`](https://github.com/supabase-community/supabase-py/commit/8fc1a695fe1986f917639afadcf09b2adf8a412c)) + +* Merge pull request #149 from supabase-community/sourcery/pull-148 + +FastAPI tutorial for Supabase-py project (Sourcery refactored) ([`c633b4a`](https://github.com/supabase-community/supabase-py/commit/c633b4a32b803dac94dd07bbcc81ca22656fb824)) + +* 'Refactored by Sourcery' ([`bf9de1d`](https://github.com/supabase-community/supabase-py/commit/bf9de1d9ec39985aef3e6ff665ef73f1f8f5ac64)) + +* Chg: Update to FastAPI tutorial for Supabase-py project. + +Located in the examples directory you can now interact with +a real world usecase of setting/using redis instance, supabase, +and more. ([`dd3b0b8`](https://github.com/supabase-community/supabase-py/commit/dd3b0b8451ff85d0091022fac512b022af90c777)) + +* Merge branch 'develop' of https://github.com/cloudguruab/supabase-py into cloudguruab-FastApi-63 ([`3a41023`](https://github.com/supabase-community/supabase-py/commit/3a41023445bead064368ace9a3aaefa9b3bf8c3c)) + +* dev: linted scripts and sorted imports ([`1817e58`](https://github.com/supabase-community/supabase-py/commit/1817e58f315bf6e6977dc901bed230e8aedefb1b)) + +* FastAPI tutorial for Supabase-py project ([`e50f3ad`](https://github.com/supabase-community/supabase-py/commit/e50f3ad469d0b50a36da5e4ef0cb34d4b2daeef3)) + +## v0.5.3 (2022-03-08) + +### Chore + +* chore(release): bump version to v0.5.3 + +Automatically generated by python-semantic-release ([`47c2f96`](https://github.com/supabase-community/supabase-py/commit/47c2f9627ca8aeb6469e1a18e397ba90e5c92d44)) + +### Fix + +* fix: force postgrest version with fix (#165) ([`59ad801`](https://github.com/supabase-community/supabase-py/commit/59ad801b2e51dc3c9d4cc82069bd19501f0bd923)) + +## v0.5.2 (2022-03-08) + +### Build + +* build(deps-dev): bump python-semantic-release from 7.25.2 to 7.26.0 (#163) + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.25.2 to 7.26.0. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.25.2...v7.26.0) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`c8b75e0`](https://github.com/supabase-community/supabase-py/commit/c8b75e05f3926873dfecf1718c1a530f19815d32)) + +### Chore + +* chore(release): bump version to v0.5.2 + +Automatically generated by python-semantic-release ([`8209345`](https://github.com/supabase-community/supabase-py/commit/8209345e336483031524cd51e18ef7b0b251a5f3)) + +* chore: Update README.md to new api (#159) ([`b84e3c4`](https://github.com/supabase-community/supabase-py/commit/b84e3c418b0b6666c0ba9f57714212b19bd9b9d0)) + +### Fix + +* fix: bump postgrest-py from 0.9.0 to 0.9.1 (#164) + +Bumps [postgrest-py](https://github.com/supabase/postgrest-py) from 0.9.0 to 0.9.1. +- [Release notes](https://github.com/supabase/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase/postgrest-py/compare/v0.9.0...v0.9.1) + +--- +updated-dependencies: +- dependency-name: postgrest-py + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`ecfe544`](https://github.com/supabase-community/supabase-py/commit/ecfe5448c52c23e496767c5a9965f3b0430ff408)) + +## v0.5.1 (2022-02-25) + +### Build + +* build(deps-dev): bump python-semantic-release from 7.25.1 to 7.25.2 (#157) + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.25.1 to 7.25.2. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.25.1...v7.25.2) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`4d43f3d`](https://github.com/supabase-community/supabase-py/commit/4d43f3d6239c11682aab05b409e532a9ba7909f2)) + +* build(deps-dev): bump python-semantic-release from 7.25.0 to 7.25.1 (#156) + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.25.0 to 7.25.1. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.25.0...v7.25.1) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`c03ff4b`](https://github.com/supabase-community/supabase-py/commit/c03ff4b3edd335c9d4e5de13f0f0e6d175ced8ea)) + +* build(deps-dev): bump commitizen from 2.21.0 to 2.21.2 (#155) + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.21.0 to 2.21.2. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.21.0...v2.21.2) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`dc3bb7a`](https://github.com/supabase-community/supabase-py/commit/dc3bb7ae9f420e74241c2914a27a9f568e020181)) + +### Chore + +* chore(release): bump version to v0.5.1 + +Automatically generated by python-semantic-release ([`6550864`](https://github.com/supabase-community/supabase-py/commit/65508642fe62aeba3f40c5f88367f39167950e37)) + +### Fix + +* fix: Require 0.9.0>= postgrest dependency (#158) ([`b9097e6`](https://github.com/supabase-community/supabase-py/commit/b9097e665b411ea53cad70b9c1cc893d61fe295f)) + +## v0.5.0 (2022-02-19) + +### Build + +* build(deps): bump postgrest-py from 0.8.2 to 0.9.0 + +Bumps [postgrest-py](https://github.com/supabase/postgrest-py) from 0.8.2 to 0.9.0. +- [Release notes](https://github.com/supabase/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase/postgrest-py/compare/v0.8.2...v0.9.0) + +--- +updated-dependencies: +- dependency-name: postgrest-py + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`67ca995`](https://github.com/supabase-community/supabase-py/commit/67ca995f6da0afd30bd094272d9184ea6f86bd21)) + +* build(deps-dev): bump python-semantic-release from 7.24.0 to 7.25.0 (#150) + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.24.0 to 7.25.0. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.24.0...v7.25.0) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`4d36a6f`](https://github.com/supabase-community/supabase-py/commit/4d36a6ffb2b06393316331fcf83d15a55f857a7e)) + +* build(deps-dev): bump commitizen from 2.20.5 to 2.21.0 (#151) + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.20.5 to 2.21.0. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.20.5...v2.21.0) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`912436c`](https://github.com/supabase-community/supabase-py/commit/912436c7752b034d8f26d47d55eff0077970e4c4)) + +* build(deps-dev): bump pytest from 7.0.0 to 7.0.1 (#144) + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.0.0 to 7.0.1. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/7.0.0...7.0.1) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`19f843f`](https://github.com/supabase-community/supabase-py/commit/19f843faf7d1b2b6cc134dd86e0239ee6716a022)) + +* build(deps-dev): bump commitizen from 2.20.4 to 2.20.5 (#143) + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.20.4 to 2.20.5. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.20.4...v2.20.5) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`b9a9c79`](https://github.com/supabase-community/supabase-py/commit/b9a9c7973acfc43de6ae7547077617b59f0d78a0)) + +* build(deps-dev): bump pytest from 6.2.5 to 7.0.0 (#142) + +Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.2.5 to 7.0.0. +- [Release notes](https://github.com/pytest-dev/pytest/releases) +- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) +- [Commits](https://github.com/pytest-dev/pytest/compare/6.2.5...7.0.0) + +--- +updated-dependencies: +- dependency-name: pytest + dependency-type: direct:development + update-type: version-update:semver-major +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`52f9679`](https://github.com/supabase-community/supabase-py/commit/52f96799ab94b240a6ee1462f2a70d3c3641f433)) + +### Chore + +* chore(release): bump version to v0.5.0 + +Automatically generated by python-semantic-release ([`ecffe61`](https://github.com/supabase-community/supabase-py/commit/ecffe6188259a86595dda63007e73a270e0d5349)) + +### Feature + +* feat: export APIResponse and APIError from postgrest-py (#152) + +* Update __init__.py + +* Apply isort ([`21a69da`](https://github.com/supabase-community/supabase-py/commit/21a69da238b043f48fba6d700830c40c6bcbf8fb)) + +### Unknown + +* Merge pull request #153 from supabase-community/dependabot/pip/develop/postgrest-py-0.9.0 + +build(deps): bump postgrest-py from 0.8.2 to 0.9.0 ([`3588eba`](https://github.com/supabase-community/supabase-py/commit/3588eba5549b3f19df0850695012d2f20cf94b27)) + +## v0.4.0 (2022-02-04) + +### Build + +* build(deps): bump postgrest-py from 0.8.1 to 0.8.2 + +Bumps [postgrest-py](https://github.com/supabase/postgrest-py) from 0.8.1 to 0.8.2. +- [Release notes](https://github.com/supabase/postgrest-py/releases) +- [Changelog](https://github.com/supabase-community/postgrest-py/blob/master/CHANGELOG.md) +- [Commits](https://github.com/supabase/postgrest-py/compare/v0.8.1...v0.8.2) + +--- +updated-dependencies: +- dependency-name: postgrest-py + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`69acec0`](https://github.com/supabase-community/supabase-py/commit/69acec05de84809c1903b25b54b1a5fe668c10a2)) + +### Chore + +* chore(release): bump version to v0.4.0 + +Automatically generated by python-semantic-release ([`5489e55`](https://github.com/supabase-community/supabase-py/commit/5489e55ca483b4719656e3f78335d8f68a8f6802)) + +* chore: rm environment variables from windows test script ([`b6d2135`](https://github.com/supabase-community/supabase-py/commit/b6d21353d98910a3cba85be147f1b3f53ac2cf2d)) + +* chore: fix status_code casing ([`a5723d2`](https://github.com/supabase-community/supabase-py/commit/a5723d26c0e3b93df240c2d15d1e8d25a6dd1574)) + +### Feature + +* feat: update postgrest-py from 0.8.1 to 0.8.2 ([`1feab46`](https://github.com/supabase-community/supabase-py/commit/1feab46f2df64de014aa550952192366cc8055ef)) + +### Unknown + +* Merge pull request #135 from supabase-community/dependabot/pip/develop/postgrest-py-0.8.2 + +build(deps): bump postgrest-py from 0.8.1 to 0.8.2 ([`3409399`](https://github.com/supabase-community/supabase-py/commit/34093999321cf8c96da6be1e866127a90c94aa1f)) + +* Merge pull request #140 from supabase-community/fix-storage-tests + +tests: ignore 404 when double-checking bucket deletion ([`53eeaed`](https://github.com/supabase-community/supabase-py/commit/53eeaedee7c4f7153cd47626d3f43d977930d59d)) + +* tests: track created buckets in a global variable to only delete these ([`2cae0df`](https://github.com/supabase-community/supabase-py/commit/2cae0df10f6ef43d4bd4e008b7129308c53c13f1)) + +* tests: ignore 404 when double-checking bucket deletion ([`76922a7`](https://github.com/supabase-community/supabase-py/commit/76922a743d605c9cc8affc7a5f07ea3f13eb3886)) + +## v0.3.3 (2022-02-03) + +### Build + +* build(deps-dev): bump black from 21.12b0 to 22.1.0 + +Bumps [black](https://github.com/psf/black) from 21.12b0 to 22.1.0. +- [Release notes](https://github.com/psf/black/releases) +- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) +- [Commits](https://github.com/psf/black/commits/22.1.0) + +--- +updated-dependencies: +- dependency-name: black + dependency-type: direct:development +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`1480f2e`](https://github.com/supabase-community/supabase-py/commit/1480f2e23a95ea171ec12eb51ffd23b96fbbe48d)) + +* build(deps-dev): bump python-semantic-release from 7.23.0 to 7.24.0 (#132) + +Bumps [python-semantic-release](https://github.com/relekang/python-semantic-release) from 7.23.0 to 7.24.0. +- [Release notes](https://github.com/relekang/python-semantic-release/releases) +- [Changelog](https://github.com/relekang/python-semantic-release/blob/master/CHANGELOG.md) +- [Commits](https://github.com/relekang/python-semantic-release/compare/v7.23.0...v7.24.0) + +--- +updated-dependencies: +- dependency-name: python-semantic-release + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`77c4997`](https://github.com/supabase-community/supabase-py/commit/77c4997fd9bab4c6ad74f451c9cb43c8c1ef31c7)) + +### Chore + +* chore(release): bump version to v0.3.3 + +Automatically generated by python-semantic-release ([`0b61397`](https://github.com/supabase-community/supabase-py/commit/0b6139797ffc4bc3cd992da37d7926e75eb7f746)) + +* chore: apply hooks formatting ([`ea00e58`](https://github.com/supabase-community/supabase-py/commit/ea00e589c496095417105b044a8ddadd0a8d023c)) + +* chore: replace builtin type annotations by typing types ([`ac9e9c4`](https://github.com/supabase-community/supabase-py/commit/ac9e9c4662ebbfe3af3610aba7cd7606f52b2af1)) + +* chore: create uuid fixture and doc it well ([`6c96f16`](https://github.com/supabase-community/supabase-py/commit/6c96f16af27610e9dc63c9999462d3f410f09278)) + +* chore: Apply pre-commit hooks ([`a3f159b`](https://github.com/supabase-community/supabase-py/commit/a3f159ba5056f9e1b5a24288f404713c3f1daee6)) + +* chore: Add comment to justify sleep in finalizer ([`0554239`](https://github.com/supabase-community/supabase-py/commit/05542390751cd4d225238aba43c7d9e0a0ec9f59)) + +* chore: export StorageFileAPI for typing ([`1453fcd`](https://github.com/supabase-community/supabase-py/commit/1453fcdda8e331d3488182354b950966e66d5370)) + +* chore: Add todo to test methods which upload_file test depends on ([`7c5fa1d`](https://github.com/supabase-community/supabase-py/commit/7c5fa1d4c6b7e78497f8878726a4ce6c2eca2973)) + +* chore: reduce code amount ([`a59fefd`](https://github.com/supabase-community/supabase-py/commit/a59fefd55edcb2a915c208c88af6b0a144fc6433)) + +* chore: no need for max-parallel=1 anymore ([`f43ef6c`](https://github.com/supabase-community/supabase-py/commit/f43ef6c587e48c0637828761907f369e6ee446aa)) + +* chore: apply pre-commit hooks ([`9a7d1ec`](https://github.com/supabase-community/supabase-py/commit/9a7d1ec821f30f5646de5574e28e67d75fac7acf)) + +### Fix + +* fix: increase sleep before listing ([`127ef98`](https://github.com/supabase-community/supabase-py/commit/127ef98d56eceef992b1ed9cfdc69b9701f3b92a)) + +* fix: sleep before listing buckets ([`566a355`](https://github.com/supabase-community/supabase-py/commit/566a35587983361f2bb2bc5c58f3b82b02d6ed0e)) + +### Unknown + +* Merge pull request #137 from supabase-community/move-subclients-tests-to-subclients + +tests: move subclients tests to subclients ([`1d5aa55`](https://github.com/supabase-community/supabase-py/commit/1d5aa555b5a2626e93c1e5a1e78653ab2ce88923)) + +* tests: make uuid fixture a factory ([`118862e`](https://github.com/supabase-community/supabase-py/commit/118862e45b59c1c865d0bdb5d147d0c300068b84)) + +* tests: Enhance dx in storage tests ([`bc48965`](https://github.com/supabase-community/supabase-py/commit/bc48965509fb187df980b0c910634027e628304a)) + +* tests: Enhance storage tests ([`7db2e08`](https://github.com/supabase-community/supabase-py/commit/7db2e08358e6d75a15e912c7f76def85d2b84ab5)) + +* Merge pull request #138 from supabase-community/move-subclients-tests-to-subclients-code-reduced + +chore: reduce code amount ([`d7a0eb8`](https://github.com/supabase-community/supabase-py/commit/d7a0eb89aba0dddf0e6dc96f04c0b7b235c9a1e0)) + +* tests: enhance dx in storage tests ([`bf615cf`](https://github.com/supabase-community/supabase-py/commit/bf615cfecd417932752f0884e86d2998ed8c2508)) + +* tests: remove subclient tests ([`0a7da42`](https://github.com/supabase-community/supabase-py/commit/0a7da42bbfe8b5c33f45621975bc2abd93866749)) + +* tests: fix storage test ([`a157f78`](https://github.com/supabase-community/supabase-py/commit/a157f78491b9a6a7c69643981e173bdf44e48b76)) + +* tests: make tests import credentials automatically ([`0860765`](https://github.com/supabase-community/supabase-py/commit/0860765037411b36b334fe95e4e89e55e8499d3a)) + +* tests: move credentials to .env ([`203b659`](https://github.com/supabase-community/supabase-py/commit/203b65965f63b3be8358980e590b472b1e565a0b)) + +* tests: move storage tests to its own file ([`a1e25e8`](https://github.com/supabase-community/supabase-py/commit/a1e25e8df2d0e6e1b0dd981418f1e77769da072b)) + +* Merge pull request #134 from supabase-community/dependabot/pip/develop/black-22.1.0 + +build(deps-dev): bump black from 21.12b0 to 22.1.0 ([`2cd8826`](https://github.com/supabase-community/supabase-py/commit/2cd8826740499e1d4a6b661bcd41bdfda60ca35f)) + +## v0.3.2 (2022-01-22) + +### Chore + +* chore(release): bump version to v0.3.2 + +Automatically generated by python-semantic-release ([`e8f1cf5`](https://github.com/supabase-community/supabase-py/commit/e8f1cf585a32316d9db4490c25965f2642fa4b53)) + +### Fix + +* fix: upgrade postgrest-py for fix order filter ([`b8840cd`](https://github.com/supabase-community/supabase-py/commit/b8840cdc07cd7d53767fe2c321761558aecd5bd4)) + +## v0.3.1 (2022-01-22) + +### Build + +* build(deps): bump gotrue from 0.4.0 to 0.5.0 (#129) + +Bumps [gotrue](https://github.com/supabase-community/gotrue-py) from 0.4.0 to 0.5.0. +- [Release notes](https://github.com/supabase-community/gotrue-py/releases) +- [Changelog](https://github.com/supabase-community/gotrue-py/blob/main/CHANGELOG.md) +- [Commits](https://github.com/supabase-community/gotrue-py/compare/v0.4.0...v0.5.0) + +--- +updated-dependencies: +- dependency-name: gotrue + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`729b2d9`](https://github.com/supabase-community/supabase-py/commit/729b2d9d4751eec42d78727f448df688e22814ca)) + +* build(deps-dev): bump pre-commit from 2.16.0 to 2.17.0 (#128) + +Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.16.0 to 2.17.0. +- [Release notes](https://github.com/pre-commit/pre-commit/releases) +- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md) +- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.16.0...v2.17.0) + +--- +updated-dependencies: +- dependency-name: pre-commit + dependency-type: direct:development + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> + +Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ([`cd0e05c`](https://github.com/supabase-community/supabase-py/commit/cd0e05c8a4f4f87dab8c9d0a19d64d27d00a1344)) + +### Chore + +* chore(release): bump version to v0.3.1 + +Automatically generated by python-semantic-release ([`d0b2978`](https://github.com/supabase-community/supabase-py/commit/d0b297804483ddde8979f54fc8613d028afc890f)) + +* chore: set upload_to_repository to true ([`c4521cc`](https://github.com/supabase-community/supabase-py/commit/c4521ccfcc28c383b2d044ed8d94a9b4c154ea27)) + +### Fix + +* fix: use httpx in storage file upload (#130) + +* chore: format headers like js client (https://github.com/supabase/storage-js/blob/904d1b9e5804dac21e736b9a5a4b12424c093ffb/src/lib/StorageFileApi.ts#L83-L84) + +* chore: use httpx in update + +* fix: replace [ ] by ( ) ([`086d925`](https://github.com/supabase-community/supabase-py/commit/086d92504f014079a125f5342c59d1d8bb7e795f)) + +## v0.3.0 (2022-01-17) + +### Chore + +* chore(release): bump version to v0.3.0 + +Automatically generated by python-semantic-release ([`1f7a195`](https://github.com/supabase-community/supabase-py/commit/1f7a19595d03189c728bf3d2b6e42e3c60002687)) + +### Feature + +* feat: add manual action for publish on pypi and update postgrest and gotrue deps (#124) + +* chore: add manual action for publish on pypi + +* feat(deps): upgrade postgrest and gotrue ([`eca34fa`](https://github.com/supabase-community/supabase-py/commit/eca34fa222c8f7be7c30586f74cbe9fe9df3018f)) + +## v0.2.1 (2022-01-17) + +### Build + +* build(deps): bump httpx from 0.21.1 to 0.21.3 + +Bumps [httpx](https://github.com/encode/httpx) from 0.21.1 to 0.21.3. +- [Release notes](https://github.com/encode/httpx/releases) +- [Changelog](https://github.com/encode/httpx/blob/master/CHANGELOG.md) +- [Commits](https://github.com/encode/httpx/compare/0.21.1...0.21.3) + +--- +updated-dependencies: +- dependency-name: httpx + dependency-type: direct:production + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`c772994`](https://github.com/supabase-community/supabase-py/commit/c772994e56d03e30d343b59045af63cd0a636258)) + +### Chore + +* chore(release): bump version to v0.2.1 + +Automatically generated by python-semantic-release ([`c07e6e4`](https://github.com/supabase-community/supabase-py/commit/c07e6e40f5bd474304dd3950d20a3c0561439868)) + +* chore: add badges to readme ([`d5c4483`](https://github.com/supabase-community/supabase-py/commit/d5c4483a775efdc4b3845180ae890e4cb18916e2)) + +* chore(ci-cd): fix github action ([`f99db76`](https://github.com/supabase-community/supabase-py/commit/f99db763ffe5bfe3d8980e9daec306fd3a581fa9)) + +* chore(deps): update precommit rules ([`596257d`](https://github.com/supabase-community/supabase-py/commit/596257d3ebe36ec4f692809958b9f6ae41c79065)) + +### Fix + +* fix: use requests for upload (#121) + +* fix: use requests for upload + +* 'Refactored by Sourcery' + +Co-authored-by: Sourcery AI <> ([`ed99717`](https://github.com/supabase-community/supabase-py/commit/ed99717fdd611915b9a697db183a42795cf3e545)) + +### Unknown + +* Merge pull request #120 from supabase-community/chore/fix-ci-cd-and-update-precommit-rules-and-add-badges-to-readme + +chore: fix ci cd, update precommit rules and add badges to readme ([`4b2a181`](https://github.com/supabase-community/supabase-py/commit/4b2a181c8685c0e5b83e29f0ff3cb0782452e944)) + +* Update README.md ([`e498781`](https://github.com/supabase-community/supabase-py/commit/e498781f528b64a59e2d0e52d87570b55654704a)) + +* Merge pull request #114 from alif-arrizqy/patch-1 + +Update README.md ([`3471478`](https://github.com/supabase-community/supabase-py/commit/3471478baca65e682f959286d229e73bd6c7e3f8)) + +* Update README.md + +Add update of data ([`697b34d`](https://github.com/supabase-community/supabase-py/commit/697b34deb3fb07ab6607839898938e105f7eabf7)) + +* Merge pull request #116 from supabase-community/dependabot/pip/develop/httpx-0.21.3 + +build(deps): bump httpx from 0.21.1 to 0.21.3 ([`1f1c713`](https://github.com/supabase-community/supabase-py/commit/1f1c713d86b086cf8d2f97deadd6b5f4edee42ed)) + +## v0.2.0 (2022-01-03) + +### Chore + +* chore: update dependencies ([`d36ee72`](https://github.com/supabase-community/supabase-py/commit/d36ee72e3d04ebac6f5f364505332f0873694c53)) + +### Unknown + +* bump: version 0.1.1 -> 0.2.0 ([`7c7d50b`](https://github.com/supabase-community/supabase-py/commit/7c7d50b94a20fc3bd2bc2a579295035d0e5d07b6)) + +## v0.1.1 (2022-01-02) + +### Breaking + +* fix!: remove setup.py ([`9f7237d`](https://github.com/supabase-community/supabase-py/commit/9f7237d25b4b6efae1652bba7a17a7902e08adb9)) + +### Build + +* build(deps-dev): bump commitizen from 2.20.2 to 2.20.3 + +Bumps [commitizen](https://github.com/commitizen-tools/commitizen) from 2.20.2 to 2.20.3. +- [Release notes](https://github.com/commitizen-tools/commitizen/releases) +- [Changelog](https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md) +- [Commits](https://github.com/commitizen-tools/commitizen/compare/v2.20.2...v2.20.3) + +--- +updated-dependencies: +- dependency-name: commitizen + dependency-type: direct:development + update-type: version-update:semver-patch +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`5a0d20e`](https://github.com/supabase-community/supabase-py/commit/5a0d20e1b977b461a5310b385e1bc1b9bdfd7176)) + +* build(deps): bump httpx from 0.19.0 to 0.21.1 + +Bumps [httpx](https://github.com/encode/httpx) from 0.19.0 to 0.21.1. +- [Release notes](https://github.com/encode/httpx/releases) +- [Changelog](https://github.com/encode/httpx/blob/master/CHANGELOG.md) +- [Commits](https://github.com/encode/httpx/compare/0.19.0...0.21.1) + +--- +updated-dependencies: +- dependency-name: httpx + dependency-type: direct:production + update-type: version-update:semver-minor +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`93c4a4e`](https://github.com/supabase-community/supabase-py/commit/93c4a4e617bc23abd234d5891f97edae63401961)) + +* build: add requests-toolbelt to the dependencies list + +feat: add mime type to uploaded files + +test: ensure upload files works properly ([`0ba494c`](https://github.com/supabase-community/supabase-py/commit/0ba494cf62c2923b3903cee1651be8abebb454d1)) + +### Chore + +* chore: bump version to 0.1.1 ([`ba79875`](https://github.com/supabase-community/supabase-py/commit/ba79875db3066f9eb52ac711b58ad47c831bad87)) + +* chore: update dependencies ([`6a56538`](https://github.com/supabase-community/supabase-py/commit/6a56538dd13fa0da9126465700756ea8376a3925)) + +* chore: reorder imports ([`5924fed`](https://github.com/supabase-community/supabase-py/commit/5924fed7eb75402d3795139fd93fa311d518f6c3)) + +* chore: revert gotrue version to 0.2.0 ([`66f55e3`](https://github.com/supabase-community/supabase-py/commit/66f55e359feea8702acbbd8da6bf3a585f2451a9)) + +* chore: revert gotrue to v0.2.0 ([`f4467b6`](https://github.com/supabase-community/supabase-py/commit/f4467b6a60f3bf9e9ea672c4db3ad6143594f9c0)) + +* chore: remove detect session in url ([`e36d9a5`](https://github.com/supabase-community/supabase-py/commit/e36d9a59c7e15e4f6a04e81d40de911047960b0a)) + +* chore: remove detect session in url ([`ebe361f`](https://github.com/supabase-community/supabase-py/commit/ebe361f921fc3546a791fd127db2879e912b51c8)) + +* chore: update poetry.lock ([`4e72137`](https://github.com/supabase-community/supabase-py/commit/4e7213773e24258d55b1bb54133f4657e86dfd5d)) + +* chore: update realtime version ([`b2b3ff3`](https://github.com/supabase-community/supabase-py/commit/b2b3ff38d7d2d05a18b2fe95e79778deff367cae)) + +* chore: update file versions ([`b0bc3de`](https://github.com/supabase-community/supabase-py/commit/b0bc3defe13dbe26b4aa2255aea45c5c5280fe19)) + +* chore: see the details + +- add Makefile +- improve precommit rules +- add config for coverage report +- add config for devcontainer +- run new precommit rules + +All those changes was be applied in gotrue-py ([`98ab987`](https://github.com/supabase-community/supabase-py/commit/98ab987f35d7385bfd48c42b98901e77a1d8a684)) + +* chore: update contributors.md ([`a793398`](https://github.com/supabase-community/supabase-py/commit/a793398ea770c4f37d19a3a41b2f3ce2ff987e7e)) + +* chore: add maintainers file ([`5d51bb7`](https://github.com/supabase-community/supabase-py/commit/5d51bb71860de9dad5f3ea1f9b507c143da3f70e)) + +* chore: point gotrue and postgrest to specific commit ([`41e1be4`](https://github.com/supabase-community/supabase-py/commit/41e1be4f82dfada45bbe61c1695dde9cd42c4571)) + +* chore: remove debugging statements ([`befede6`](https://github.com/supabase-community/supabase-py/commit/befede6608cb17a4cf547ec6df1ae55fc3ba360e)) + +* chore: remove redundant comments ([`981a410`](https://github.com/supabase-community/supabase-py/commit/981a410168004637c03691326016c356eb7767a6)) + +* chore: type the module ([`b5f7316`](https://github.com/supabase-community/supabase-py/commit/b5f7316a1cb004db8ec9fd15245912e580443b98)) + +* chore: remove language version pin for black ([`2471116`](https://github.com/supabase-community/supabase-py/commit/247111641fdafcd51ad749414cb44b2d5414fe3f)) + +* chore: add httpx to deps ([`c0b4fe8`](https://github.com/supabase-community/supabase-py/commit/c0b4fe8a37f772bb7bbcdc4788329780ffc01bf6)) + +* chore: add examples folder ([`72f23f0`](https://github.com/supabase-community/supabase-py/commit/72f23f05701c548a60cefa52bd396fb2c799e312)) + +### Feature + +* feat: use directly sync postgrest client and remove unused code ([`66db7d3`](https://github.com/supabase-community/supabase-py/commit/66db7d3d45e898242551543dca85431aa2101060)) + +* feat: unify http client to be httpx ([`d4f010d`](https://github.com/supabase-community/supabase-py/commit/d4f010decffb8d11bd5714f310cf897d5ed07b76)) + +* feat: add header to query builder ([`d593f47`](https://github.com/supabase-community/supabase-py/commit/d593f47fd906a51389cfe210bf4b16ecee1daa37)) + +* feat: create custom StorageException ([`55e7eef`](https://github.com/supabase-community/supabase-py/commit/55e7eef29541c579599c325bc45026aac45f0ecc)) + +* feat: add async support to storage buckets API ([`e0748a8`](https://github.com/supabase-community/supabase-py/commit/e0748a8700818c4c2caaa538d36006c7212dcb29)) + +### Fix + +* fix: set correct main branch in ci.yml ([`01e3e81`](https://github.com/supabase-community/supabase-py/commit/01e3e811b312830c836ab79a4aa46ac7d53c39ad)) + +* fix: set correct main branch in ci.yml ([`7206e73`](https://github.com/supabase-community/supabase-py/commit/7206e73e638b98c98276cd806c0bf45fc74c0ffe)) + +* fix: update gotrue version and modify client options class + +Now client options class does not make a deep copy +in the replace method because local storage is an +abstract class and not dict like before ([`4f36efa`](https://github.com/supabase-community/supabase-py/commit/4f36efad9dc8fc7dd32c2fc6cc271842ec79ad11)) + +* fix: ci.yml max parallel config ([`520f1d5`](https://github.com/supabase-community/supabase-py/commit/520f1d50afb58f825677686f2c1cc184d59b0f51)) + +* fix: github action max parallel in one ([`8bac874`](https://github.com/supabase-community/supabase-py/commit/8bac8740857d77aa3494bf498f09640d8f03d654)) + +* fix: export envs and fix tests ([`77c870b`](https://github.com/supabase-community/supabase-py/commit/77c870b75e93d3435da6a12705c3c6f78be94f90)) + +* fix: error in Makefile ([`01b663e`](https://github.com/supabase-community/supabase-py/commit/01b663ea6ef1e0fd5c855dca2fcbd83e17fd0fdd)) + +* fix: remove deadweight test ([`a9b29fb`](https://github.com/supabase-community/supabase-py/commit/a9b29fbc8091ffe44c2ec99af0188a96a0335eac)) + +* fix: ensure python37 compat ([`1883149`](https://github.com/supabase-community/supabase-py/commit/1883149302c0e0f697a0433b935fa8549717cbd4)) + +* fix: default value for `name` in create_bucket ([`82eec60`](https://github.com/supabase-community/supabase-py/commit/82eec60d5720da135d3b621abe85683d876aed08)) + +### Refactor + +* refactor: realtime_py -> realtime ([`4e8a5bc`](https://github.com/supabase-community/supabase-py/commit/4e8a5bc3f491e5a8ecbbc249c5f613099b56b4da)) + +### Test + +* test: add phone None for avoid error ([`269dfad`](https://github.com/supabase-community/supabase-py/commit/269dfad8514876936023bc58d5c2ac20c5b1ee91)) + +### Unknown + +* Revert "bump: version 0.1.1 → 1.0.0" + +This reverts commit 8177ab57d2afdf7a97336080422de18b73535322. ([`ee0e9fd`](https://github.com/supabase-community/supabase-py/commit/ee0e9fd821a7b65ae147dd4701236f7744cc033b)) + +* bump: version 0.1.1 → 1.0.0 ([`8177ab5`](https://github.com/supabase-community/supabase-py/commit/8177ab57d2afdf7a97336080422de18b73535322)) + +* Merge pull request #111 from supabase-community/fix/set-correct-main-branch-in-ci.yml + +fix: set correct main branch in ci.yml ([`cf54fd8`](https://github.com/supabase-community/supabase-py/commit/cf54fd8c4b6810557320325ae159184124aa20f0)) + +* Chore: fix ci/cd badge in README ([`8b24de1`](https://github.com/supabase-community/supabase-py/commit/8b24de1bf7d3242627784e38cd7a46d075222a5f)) + +* Merge pull request #108 from supabase-community/jl--add-new-release + +Update Files For new release ([`ed59912`](https://github.com/supabase-community/supabase-py/commit/ed599123eaf4cb53bf3338c010e0fd42b12ebc23)) + +* Merge pull request #110 from leynier/jl--add-new-release + +fix: update gotrue version and modify client options class ([`6fdd914`](https://github.com/supabase-community/supabase-py/commit/6fdd9141ef2eb10e673cda6f857642f181624d73)) + +* Remove __all__, export auth, storage, realtime clients ([`17db56e`](https://github.com/supabase-community/supabase-py/commit/17db56ece0b7089d6c98ae0c0658db609346f6fe)) + +* Merge branch 'jl--add-new-release' of github.com:supabase/supabase-py into jl--add-new-release ([`c97079f`](https://github.com/supabase-community/supabase-py/commit/c97079fe90cd2cf34a8156f1d790c09d7624db26)) + +* Merge pull request #109 from supabase-community/sourcery/jl--add-new-release + +Update Files For new release (Sourcery refactored) ([`117ddda`](https://github.com/supabase-community/supabase-py/commit/117dddaeb2e263057c33cd1475c14b924891632d)) + +* 'Refactored by Sourcery' ([`0da9a98`](https://github.com/supabase-community/supabase-py/commit/0da9a98e67624bdc026a26afb0519f4f321ef021)) + +* Merge pull request #103 from supabase-community/dependabot/pip/develop/commitizen-2.20.3 + +build(deps-dev): bump commitizen from 2.20.2 to 2.20.3 ([`f29bada`](https://github.com/supabase-community/supabase-py/commit/f29bada68a6caf5615368c39ee7a607111706c67)) + +* Merge pull request #104 from supabase-community/dependabot/pip/develop/httpx-0.21.1 + +build(deps): bump httpx from 0.19.0 to 0.21.1 ([`066f12b`](https://github.com/supabase-community/supabase-py/commit/066f12b818c40a937acbdbe09c2dc378320121b5)) + +* Merge pull request #101 from leynier/add-support-for-synchronous-rpc-calls + +feat: use directly sync postgrest client and remove unused code ([`95cfc93`](https://github.com/supabase-community/supabase-py/commit/95cfc9380b0459ac0505f78137103efb39abe1a5)) + +* Merge pull request #100 from supabase-community/j0--add-maintainers.md + +Add maintainers file ([`e5b18d1`](https://github.com/supabase-community/supabase-py/commit/e5b18d12c4cfa8637fb22cea495c1625c58687b9)) + +* Merge pull request #96 from joeriddles/add-client-options + +Add typed client options ([`5b5850f`](https://github.com/supabase-community/supabase-py/commit/5b5850fdffbc5aec032d37a1201b82be13cb3c7e)) + +* Add py.typed (PEP561) ([`6ce1cc0`](https://github.com/supabase-community/supabase-py/commit/6ce1cc0201a76e9a3cf0bb1ba973564798a548b7)) + +* Typo ([`86eae8b`](https://github.com/supabase-community/supabase-py/commit/86eae8b8d2bb942cc72a40487b50f2a168b3d76e)) + +* Add missing type hints + +Co-authored-by: Anand <40204976+anand2312@users.noreply.github.com> ([`c11691f`](https://github.com/supabase-community/supabase-py/commit/c11691fe053152ea672cb084980c7b6ed43fdf45)) + +* Implement sourcery suggestions to return values directly ([`6413418`](https://github.com/supabase-community/supabase-py/commit/64134183c25f658032cf24b8d49d7379d8a37189)) + +* Add missing import to client.py ([`34fea34`](https://github.com/supabase-community/supabase-py/commit/34fea3488a4afc59fb049ab636169d08a85529ba)) + +* Run pre-commit on all files ([`781214d`](https://github.com/supabase-community/supabase-py/commit/781214d1117f9d753cb046c7b117912c1efaaa8e)) + +* Add typed client options ([`b228d2b`](https://github.com/supabase-community/supabase-py/commit/b228d2b4e460a79c622ec38ebde5a8352bcc110e)) + +* Merge pull request #91 from discdiver/patch-1 + +docstrings - fix typos ([`2c7e530`](https://github.com/supabase-community/supabase-py/commit/2c7e5308146ca93d41315add90bcc86a7e686c4d)) + +* docstrings - fix typos ([`759142b`](https://github.com/supabase-community/supabase-py/commit/759142b9e5f7701f41b0e24c1875e103bec2760b)) + +* Merge pull request #83 from leynier/feat/unify-http-client-to-be-httpx + +feat: unify http client to be httpx ([`55e8f84`](https://github.com/supabase-community/supabase-py/commit/55e8f840fe1dae0e3951e878df7f4ad7181a239f)) + +* Merge pull request #81 from Phillackinger/patch-1 + +fixing pypi badge in readme ([`de2027e`](https://github.com/supabase-community/supabase-py/commit/de2027ed80e3320b6521bb540ab9e6ecc940fe52)) + +* fixing badge in readme + +using the right badge "supabase" instad of "supabase-py" ([`083783f`](https://github.com/supabase-community/supabase-py/commit/083783f328cc56736fb6e3e4af527d7cdef00d61)) + +* Merge pull request #79 from dreinon/patch-1 + +Fix upsert in Storage File API ([`2e37064`](https://github.com/supabase-community/supabase-py/commit/2e370641f57540f7d56d99da6b8e4325ce31fdac)) + +* Fix upsert in Storage File API ([`aa1a34f`](https://github.com/supabase-community/supabase-py/commit/aa1a34f3cda5fed8592d99f6671e16121e7045ab)) + +* Merge pull request #77 from dreinon/develop + +Add github dependency for postgrest-py until new release ([`8b257cc`](https://github.com/supabase-community/supabase-py/commit/8b257ccea136c3bb4bf7200cda0dac96eb98f9ed)) + +* Add github dependency for postgrest-py until new release ([`d863b8e`](https://github.com/supabase-community/supabase-py/commit/d863b8ea6085dfcfaa37837638c86ec8226803b6)) + +* Merge pull request #76 from dreinon/patch-1 + +Remove wrong return type hinting ([`87282f0`](https://github.com/supabase-community/supabase-py/commit/87282f0e9731e30aa6d73f758a9fb06d80735b17)) + +* Remove wrong return type hinting ([`5dabf3c`](https://github.com/supabase-community/supabase-py/commit/5dabf3cc4311d958b63adb3629bdd55b16572e3e)) + +* Merge pull request #75 from supabase-community/j0_patch_query_request_headers + +Add header to query builder ([`e6e9cc2`](https://github.com/supabase-community/supabase-py/commit/e6e9cc2d2459d66da81a35dff7c6bc6d968840ff)) + +* Merge pull request #67 from julianolf/feature/upload-file-include-mimetype + +feat: upload files include mime type ([`8ca2c76`](https://github.com/supabase-community/supabase-py/commit/8ca2c760c0fef5dc832467a731e67dcf54877e2e)) + +* Merge branch 'develop' into feature/upload-file-include-mimetype ([`cfd9101`](https://github.com/supabase-community/supabase-py/commit/cfd9101b79fc67668f1a454864e70d264aa3835f)) + +* Merge pull request #74 from supabase-community/j0_fix_test_instance_settings + +Update Test instance settings ([`1676a33`](https://github.com/supabase-community/supabase-py/commit/1676a336f3e92734b6cb0939deefbf0f65477ce9)) + +* tests: update test instance ([`71fae8b`](https://github.com/supabase-community/supabase-py/commit/71fae8bc139f93e25f4400da16e6edc2bff98129)) + +* Merge branch 'develop' into feature/upload-file-include-mimetype ([`7fbfa61`](https://github.com/supabase-community/supabase-py/commit/7fbfa6171dcab6b1df4a2c46b4295d1b6c8b312c)) + +* Update ci-python.yml ([`e3185b1`](https://github.com/supabase-community/supabase-py/commit/e3185b1cc39f87bbe43df1597ad6538501638e37)) + +* Merge pull request #61 from anand2312/async-storagebuckets + +Async storage buckets ([`6469ad5`](https://github.com/supabase-community/supabase-py/commit/6469ad56fd18398e48237c98cc0deb01494afd0e)) + +* doc: add doc about more params to create_bucket ([`4d68841`](https://github.com/supabase-community/supabase-py/commit/4d68841f16ab2c73b7ecb9974fe3654ea7e47d9d)) + +* Merge pull request #68 from sampoder/patch-1 + +Remove Git Leftovers from Contributing ([`e6d12a1`](https://github.com/supabase-community/supabase-py/commit/e6d12a1e5af68de193974de1b43fc43e9d0f50a1)) + +* Remove Git Leftovers from Contributing ([`a09c375`](https://github.com/supabase-community/supabase-py/commit/a09c375b3442ab0a4e48f336f3ab84203abb9f42)) + +* Update issue templates ([`a95dc8a`](https://github.com/supabase-community/supabase-py/commit/a95dc8a9beaedb7f80289eb2c7c08a401bcd253f)) + +* Merge pull request #64 from supabase-community/J0-add-examples-folder + +chore: add examples folder ([`f8898ca`](https://github.com/supabase-community/supabase-py/commit/f8898ca3efe40b358d0e1b1107aa45e9d90251fd)) + +## v0.0.3 (2021-10-13) + +### Chore + +* chore: move pytest to dev-dependencies ([`78d6b81`](https://github.com/supabase-community/supabase-py/commit/78d6b81df9bb24930aaf24d86f2bd582b987d77a)) + +* chore: supabase_py -> supabase ([`fa1e793`](https://github.com/supabase-community/supabase-py/commit/fa1e79316d789c1d18d6f471e2247d32ff155471)) + +* chore: Create CONTRIBUTING.md for hacktoberfest ([`9a34f2a`](https://github.com/supabase-community/supabase-py/commit/9a34f2aea674e089c794b69550057915ae1b7dd5)) + +* chore: format __init__ using autoflake ([`b518ad3`](https://github.com/supabase-community/supabase-py/commit/b518ad3adf05037d97e75cdf21d2913a72d53093)) + +* chore: apply formatters to unformatted files ([`4776baa`](https://github.com/supabase-community/supabase-py/commit/4776baae2b60218b3edf46f9fbe86ca87bce5237)) + +* chore: update pre-commit hook ([`45c2866`](https://github.com/supabase-community/supabase-py/commit/45c2866739bbe20640de21b3b19439c440c750c1)) + +* chore: format docs file with black ([`95808c5`](https://github.com/supabase-community/supabase-py/commit/95808c562fa99c90f8fd3661efbdb38225454c3d)) + +### Documentation + +* docs: substitute CLRF ([`c8289d4`](https://github.com/supabase-community/supabase-py/commit/c8289d4e3c8dd0a2fe2bbafc259d8a9d41e83637)) + +* docs: resolve second merge conflict ([`1e2ea57`](https://github.com/supabase-community/supabase-py/commit/1e2ea57fa9c212dd927e6b2af906329622ee8b8d)) + +* docs: fix merge conflict ([`07f6e21`](https://github.com/supabase-community/supabase-py/commit/07f6e21077bd07ba458cae9080783af73bb4dbf4)) + +### Feature + +* feat: add upload ([`3070b5b`](https://github.com/supabase-community/supabase-py/commit/3070b5b2291df29afe76b6ddc38ab2c9b69b8720)) + +* feat: add download function ([`e85d675`](https://github.com/supabase-community/supabase-py/commit/e85d675044c484ae1772b76e07545fb13ab3eef1)) + +* feat: Add more functions to storage file api ([`41682ad`](https://github.com/supabase-community/supabase-py/commit/41682adee5a7ec93c8382cf376cd4729c9360ffa)) + +* feat: add create_signed_url ([`24cc3fd`](https://github.com/supabase-community/supabase-py/commit/24cc3fde998417a556b2009e7fbecfabaf470c1f)) + +* feat: add docs for query_builder and storage_bucket ([`b74e439`](https://github.com/supabase-community/supabase-py/commit/b74e4399c3d3def335f7c92588bf6437a3e80bfe)) + +### Fix + +* fix: missing json bodies in patch and put requests ([`b022994`](https://github.com/supabase-community/supabase-py/commit/b022994c508cead611a1be915c669337c63c9eb1)) + +* fix: get create_signed_url working ([`27e90f6`](https://github.com/supabase-community/supabase-py/commit/27e90f6bdfb64d5292a4db77c69f9b583be6aadf)) + +* fix: resolve merge conflicts ([`047e680`](https://github.com/supabase-community/supabase-py/commit/047e6800149d5ef622068204c4b56d9699ea82fd)) + +* fix: resolve merge conflicts ([`39815fe`](https://github.com/supabase-community/supabase-py/commit/39815fed202bfa132c85c530a33eed1f56ea20c1)) + +### Refactor + +* refactor: update test client to use fixture ([`17c1d6a`](https://github.com/supabase-community/supabase-py/commit/17c1d6a86adf0d92a90eba91ed78e2faab600e40)) + +* refactor: update test client ([`c8c3176`](https://github.com/supabase-community/supabase-py/commit/c8c31768c2ee0175a06071ff6780c2f55e7dabbd)) + +### Unknown + +* Merge pull request #60 from anand2312/develop + +chore: move pytest to dev-dependencies ([`6b76a9a`](https://github.com/supabase-community/supabase-py/commit/6b76a9a2b318891c5c850f200d5077c50706375e)) + +* Merge pull request #59 from ianrtracey/develop + +updates readme to install the latest package ([`c099a7a`](https://github.com/supabase-community/supabase-py/commit/c099a7a97893d4043d449e0b7433160efec901b0)) + +* updates readme to install the correct package ([`33d1aae`](https://github.com/supabase-community/supabase-py/commit/33d1aae842c596a0091f33d516e196a5c16f54c6)) + +* Merge pull request #55 from supabase-community/j0_rename_supabase_py + +Rename Supabase_py to Supabase ([`74e3cf1`](https://github.com/supabase-community/supabase-py/commit/74e3cf1b806d34adf4c6d88540f4535e336e0135)) + +* Update __init__.py ([`99139a9`](https://github.com/supabase-community/supabase-py/commit/99139a9e43602a9371f19ef578206af7665ad818)) + +* Create CODE_OF_CONDUCT.md ([`b20703d`](https://github.com/supabase-community/supabase-py/commit/b20703d3d4117c911092212a796e53eb2f5286ca)) + +* Merge pull request #52 from supabase-community/j0_hacktoberfest + +chore: Create CONTRIBUTING.md for hacktoberfest ([`9e609bd`](https://github.com/supabase-community/supabase-py/commit/9e609bd589ed4c2cb5fa9ddfbb41f48d0823e4bb)) + +* Merge pull request #43 from lqmanh/features/add-default-headers + +Add some default headers to wrapped client libs ([`57511be`](https://github.com/supabase-community/supabase-py/commit/57511befc9c9c6370888977c1f1a1532a3381ee3)) + +* Merge branch 'develop' into features/add-default-headers ([`4f64827`](https://github.com/supabase-community/supabase-py/commit/4f64827262f163a31d0f8bf98b58d9f6f916e4b8)) + +* Merge pull request #47 from yishernc/develop + +bump postgrest-py to latest version (0.5.0) ([`ec494dc`](https://github.com/supabase-community/supabase-py/commit/ec494dcdb0c8872cbbd12b693e7b2047c192c999)) + +* bump postgrest-py to latest version (0.5.0) ([`9df7c32`](https://github.com/supabase-community/supabase-py/commit/9df7c32214386f27d441ce16599517ea6c36ef08)) + +* Use postgrest-py v0.5.0 ([`5f3d2ff`](https://github.com/supabase-community/supabase-py/commit/5f3d2ffa19db1089232b250a39bed0c86ef222d8)) + +* Fix missing black as a dev dependency ([`f2e9ce0`](https://github.com/supabase-community/supabase-py/commit/f2e9ce0db342bc3e01482e6da2f239ee142f2cd0)) + +* Fix unexpected keyword arguments ([`70e9496`](https://github.com/supabase-community/supabase-py/commit/70e94965674446399fb52427bc63b6f1c410f281)) + +* Fix circular imports ([`027bfb5`](https://github.com/supabase-community/supabase-py/commit/027bfb5657acfb97c24f64d729b6cd0321ac2547)) + +* Update ([`04bf6ef`](https://github.com/supabase-community/supabase-py/commit/04bf6ef1c854683b6ae1eb9b56b6273e147b2ed3)) + +* Temporarily use postgrest-py git ([`528abb3`](https://github.com/supabase-community/supabase-py/commit/528abb3bb7eb5ebd54e8fef12dc24a39a1a9bb24)) + +* Merge pull request #41 from supabase/da/fix-missing-obj-bodies + +fix: missing json bodies in patch and put requests ([`9b68a97`](https://github.com/supabase-community/supabase-py/commit/9b68a9799980753046b562d3e194edbc0dbaa33d)) + +* Merge pull request #31 from supabase/j0_add_storage_file_api + +Add Storage File API ([`bb98157`](https://github.com/supabase-community/supabase-py/commit/bb98157ec7db10f4aa8c3651d3cc9e49c9d8e6d5)) + +* Merge branch 'develop' into j0_add_storage_file_api ([`78fbe77`](https://github.com/supabase-community/supabase-py/commit/78fbe77ad5c0b5196226572203b2a1e4d20dc644)) + +* Merge pull request #35 from supabase/j0_add_docs + +Add Initial Sphinx Documentation ([`08d5fe4`](https://github.com/supabase-community/supabase-py/commit/08d5fe434c29d201b997f3a852ed36df95d5e10b)) + +* Merge branch 'develop' into j0_add_docs ([`4f9b847`](https://github.com/supabase-community/supabase-py/commit/4f9b847fe9f5eec6bc01580d9e8ada01da04bb60)) + +* Merge pull request #29 from supabase/j0_test_precommit + +Format unformatted files ([`5f7b3bb`](https://github.com/supabase-community/supabase-py/commit/5f7b3bb7aa648db19fde33892fb345e36ed0fb25)) + +* Merge pull request #28 from olirice/precommit_hooks + +Add pre-commit hooks enforcing a standard style ([`434d6ba`](https://github.com/supabase-community/supabase-py/commit/434d6baf2ccc3a21773a4be4b0ef5baf9bbc25fa)) + +* Merge branch 'develop' into precommit_hooks ([`6f0e6d6`](https://github.com/supabase-community/supabase-py/commit/6f0e6d699edca05713ba6556313707437ea308b4)) + +* Merge pull request #27 from supabase/j0_add_storage_bucket + +Add Storage Bucket API ([`256f65d`](https://github.com/supabase-community/supabase-py/commit/256f65dcc820bd1c0bc3413c644fd37ce3d2a64a)) + +* Merge branch 'develop' into j0_add_storage_bucket ([`e306249`](https://github.com/supabase-community/supabase-py/commit/e3062496553924c9582f6b3abc28e0cbd4c20420)) + +* Remove unused comments ([`dd2ebe8`](https://github.com/supabase-community/supabase-py/commit/dd2ebe867fc168b3d27f856a5cef41a8f89ee386)) + +* Add storage bucket ([`2ff2c61`](https://github.com/supabase-community/supabase-py/commit/2ff2c61ad357de8b44fa269269c2190dfb64fdc4)) + +* feature:add storage bucket client ([`ad53879`](https://github.com/supabase-community/supabase-py/commit/ad53879450e88837d2fd71932c7f8dedd0328d94)) + +* Merge branch 'develop' of github.com:supabase/supabase-py into develop ([`9463c98`](https://github.com/supabase-community/supabase-py/commit/9463c98faeae0133f024ad387eb0c4747df8babb)) + +* Merge branch 'develop' of github.com:supabase/supabase-py into develop ([`8dc7fe8`](https://github.com/supabase-community/supabase-py/commit/8dc7fe8252f3f52bcec1d604e8af695266cb23dc)) + +* fix logic errors ([`f468624`](https://github.com/supabase-community/supabase-py/commit/f468624041d133ea13a266d53ed4453391bb1250)) + +* add badges for test CI and pypi version ([`9897a29`](https://github.com/supabase-community/supabase-py/commit/9897a295136d3cbccb400367d88ace5ea8cd6784)) + +* apply pre-commit hooks & add __all__ in __init__.py to prevent autoflake from removing imports ([`77a2234`](https://github.com/supabase-community/supabase-py/commit/77a2234da12c24ecb24c8e8fc1c2f05414daeac7)) + +* enable pre-commit hooks for isort, autoflake, and black base 3.7 ([`f980db1`](https://github.com/supabase-community/supabase-py/commit/f980db111125d961ba905b8a65d3b1d0dd3c998c)) + +* Merge pull request #25 from olirice/client_in_fixture + +Reduce test code duplication via supabase Client in pytest fixture ([`873b85b`](https://github.com/supabase-community/supabase-py/commit/873b85bcf71f9e26b3ec612cee5cd33eb8591bce)) + +* remove unused import ([`6bc5945`](https://github.com/supabase-community/supabase-py/commit/6bc59458f52fa1af68fc100109fcd7cffb427177)) + +* session scope for pytest client fixture ([`0cf02da`](https://github.com/supabase-community/supabase-py/commit/0cf02da5cdc4aa25827343f1a0431e1cc0dfb779)) + +* reduce test duplication via supabase client in pytest fixture ([`e1c3b90`](https://github.com/supabase-community/supabase-py/commit/e1c3b900e5ad476fe858bec72e08aab08e6b2648)) + +* add python version info for pip ([`268bfe5`](https://github.com/supabase-community/supabase-py/commit/268bfe507f356bd63819101cf240d88ed473c8e1)) + +* Merge pull request #18 from supabase/j0_add_test_script + +Add test script ([`bf3b49a`](https://github.com/supabase-community/supabase-py/commit/bf3b49a8e6cfc79a588734db9f91f150c6314600)) + +* change test script to use poetry ([`e3fb34a`](https://github.com/supabase-community/supabase-py/commit/e3fb34acc9f25dbf43781deb2de0091236f17a9c)) + +* Update CI to use test script ([`06a2a33`](https://github.com/supabase-community/supabase-py/commit/06a2a33489d593fcc21b1b8765ce1388934d460b)) + +* Add test script, update README ([`8e50e61`](https://github.com/supabase-community/supabase-py/commit/8e50e6120e852278561135b258e9582ca592e312)) + +* Merge pull request #19 from taloglu/patch-1 + +Update README.md ([`985eaeb`](https://github.com/supabase-community/supabase-py/commit/985eaebd24705230283e995c8bb8bbb224746da0)) + +* Update README.md + +Insertion of data code was not correct due to a copy paste error. ([`723c96a`](https://github.com/supabase-community/supabase-py/commit/723c96a7c35e0632932f4496284eca74fefab595)) + +* Trigger pre-commit ([`0c8c703`](https://github.com/supabase-community/supabase-py/commit/0c8c70315420dccab03e35a54329838d7c3203dd)) + +* Merge pull request #17 from supabase/develop + +Update README.md ([`ffde413`](https://github.com/supabase-community/supabase-py/commit/ffde413d6ae7be014e2152682308a0e48c9e3657)) + +## v0.0.2 (2021-04-05) + +### Unknown + +* Update README.md ([`d54e5dd`](https://github.com/supabase-community/supabase-py/commit/d54e5dd30fa241ee4208435cadb99765220db25f)) + +* Merge pull request #16 from supabase/develop + +Hotfix for version/author ([`075910f`](https://github.com/supabase-community/supabase-py/commit/075910f37068ee8632c5621a212a0168d3b9e9c4)) + +* Merge pull request #15 from supabase/feature/update-version-and-author + +update version and add author ([`2bde44d`](https://github.com/supabase-community/supabase-py/commit/2bde44debbc17b4cf78c7a3cbd539cebd96a2e58)) + +* update version and add author ([`65d9a85`](https://github.com/supabase-community/supabase-py/commit/65d9a855293f9c9f1effe162ff9c02705dd4f788)) + +* Merge pull request #14 from supabase/develop + +Stable release ([`051fa9b`](https://github.com/supabase-community/supabase-py/commit/051fa9bfe0b8a0dec527b1390f43400ac1e8ba03)) + +* Merge pull request #13 from supabase/j0_readme_updates + +Minor Updates to README ([`dabee85`](https://github.com/supabase-community/supabase-py/commit/dabee852cd8a030a1aa03619209e4d7b3d8124f8)) + +* update readme ([`0e77c95`](https://github.com/supabase-community/supabase-py/commit/0e77c9569f1aab537fe4eb4eeaf3fd3ce152d58e)) + +* Minor Updates to README ([`b11118e`](https://github.com/supabase-community/supabase-py/commit/b11118ecfa73c6f721598f5f406850e49b87e86d)) + +* Merge pull request #7 from supabase/feature/update-to-latest-gotrue-py + +Update to latest gotrue-py, monkey patch for sync behaviour, add working tests ([`fd842a1`](https://github.com/supabase-community/supabase-py/commit/fd842a1eb491187f52cf1be66a91956f92d1250a)) + +* adding env vars ([`1b0ebda`](https://github.com/supabase-community/supabase-py/commit/1b0ebda94b9b94960792f2eeba3b0d4c9830d8d6)) + +* add requests ([`c52e015`](https://github.com/supabase-community/supabase-py/commit/c52e0159477568fd91e80fc3dce8cd4d0d8cb5f6)) + +* dont commit lockfile ([`f15b8d8`](https://github.com/supabase-community/supabase-py/commit/f15b8d8fef9344d4e8c5070f14d9c62b68ac017e)) + +* try older ver ([`2d40cf3`](https://github.com/supabase-community/supabase-py/commit/2d40cf365a594083464dfab06087f502fe5fe562)) + +* add new insert test ([`186bce6`](https://github.com/supabase-community/supabase-py/commit/186bce6f5890bf405e6b4df97449f5fadbe4a598)) + +* support insertion ([`2241ee7`](https://github.com/supabase-community/supabase-py/commit/2241ee771c40bd16ffb866a261943221c03610f7)) + +* add hotfix for real-time client ([`4617e4c`](https://github.com/supabase-community/supabase-py/commit/4617e4c546509cf6b6b35bbad321cdfd8565e8ca)) + +* remove asyncio-pytest module, and add working test ([`7ca1582`](https://github.com/supabase-community/supabase-py/commit/7ca1582703525801ecbdd5e918dc191d3758c855)) + +* monkey patch the execute method to make it sync ([`30042a9`](https://github.com/supabase-community/supabase-py/commit/30042a9b0c0dce8713131fd61740e1049a551b9c)) + +* trying to get postgrest working ([`5e65ebf`](https://github.com/supabase-community/supabase-py/commit/5e65ebf10d55304214be534bb435cb71e424b4fd)) + +* ensure the query builder enables chaining properly ([`d20cb3c`](https://github.com/supabase-community/supabase-py/commit/d20cb3cd0230f7863934cc40a29ec68fcb798087)) + +* comment out test that cannot work yet and add TODO to return to this ([`4be2cd8`](https://github.com/supabase-community/supabase-py/commit/4be2cd8427d7c8b8324bdf25647e772765f62a3c)) + +* clean up docstring ([`ad8563f`](https://github.com/supabase-community/supabase-py/commit/ad8563f07c0ce0a05838bace99d1d0837b0eb1ab)) + +* bump version ([`aa76f04`](https://github.com/supabase-community/supabase-py/commit/aa76f04809a41ca1c87c1c012a51d420ac0100f5)) + +* get first test to pass ([`0a68449`](https://github.com/supabase-community/supabase-py/commit/0a68449c64854bb544fab09f75028d8ad2ac748d)) + +* update kwargs ([`1cfc1e2`](https://github.com/supabase-community/supabase-py/commit/1cfc1e28a2a413d326e8328bc5d15c3633d38994)) + +* removing uncesscessary wrapping code ([`014882d`](https://github.com/supabase-community/supabase-py/commit/014882d29d6907db62a7312fe35933966b891d20)) + +* Remove erroneous === ([`23b944b`](https://github.com/supabase-community/supabase-py/commit/23b944b0287df966348a6168f92bd2aaa2b86b92)) + +* Merge pull request #6 from supabase/j0_fix_realtime + +Add transformers ([`08f395d`](https://github.com/supabase-community/supabase-py/commit/08f395d1eee8b484da0b7fd1b9c7bf40468082d7)) + +* Add transformers ([`ee3b532`](https://github.com/supabase-community/supabase-py/commit/ee3b532422b1053cd2d82bae7866d1de57d2123c)) + +* Merge pull request #5 from J0/master + +Miscellaneous updates from downstream ([`19f6e8e`](https://github.com/supabase-community/supabase-py/commit/19f6e8e0c2a1c96e00cdad6ff8818bb05babf7a1)) + +* Merge branch 'master' into master ([`1ac7232`](https://github.com/supabase-community/supabase-py/commit/1ac7232022e9628f96d09135a5279b9dd983007c)) + +* Wrap postgrest-py (#4) ([`3c560de`](https://github.com/supabase-community/supabase-py/commit/3c560de6c7b7cc96055249fee25515b87ca22ea7)) + +* Merge pull request #1 from fedden/master + +Upstream merge of the fork^2 of supabase-py ([`0dc431d`](https://github.com/supabase-community/supabase-py/commit/0dc431da1b1f2de55abab0804b574158d40bc68a)) + +* spelling ([`ccb88f8`](https://github.com/supabase-community/supabase-py/commit/ccb88f8a9ea44472b3ab6f219fa1feed45a28185)) + +* more doc ([`255bb71`](https://github.com/supabase-community/supabase-py/commit/255bb71e3562562d703919d37aabe799b47f6ab6)) + +* improve documentation ([`b641029`](https://github.com/supabase-community/supabase-py/commit/b641029966928ff2dc9882621afd8ddc5313aca7)) + +* return dicts ([`4c13a4f`](https://github.com/supabase-community/supabase-py/commit/4c13a4f6bb48f9dedd83eee0c1435bcd7eef7f8e)) + +* improve documetnation and add test (doesnt pass yet) ([`97100ad`](https://github.com/supabase-community/supabase-py/commit/97100ad33fc01c1feaddfbb45e82fa2d844ab056)) + +* add new tests ([`0b7a164`](https://github.com/supabase-community/supabase-py/commit/0b7a164386afebb0fdb7dd25f501e257eba615b0)) + +* ignore vim stuff ([`1df7fc9`](https://github.com/supabase-community/supabase-py/commit/1df7fc9dbb351a67a9301d2e8baf252c2351bde6)) + +* remove whitespace ([`0739a2f`](https://github.com/supabase-community/supabase-py/commit/0739a2f9766efa2b271c157a7e18a7249fcd345b)) + +* tests pass ([`d524e0c`](https://github.com/supabase-community/supabase-py/commit/d524e0c7f217cf0e445925123f91da8257965be0)) + +* stepping through code, slightly changing codebase to reflect python idioms, adding realtime-py as a depedancy ([`20d2404`](https://github.com/supabase-community/supabase-py/commit/20d24049c57ef02ce738bca92cf6e4c414be4f7e)) + +* add setuptools ([`290bebb`](https://github.com/supabase-community/supabase-py/commit/290bebbb497e62eec1bbdcdf98c1be21483d2897)) + +* change import ([`db71ab4`](https://github.com/supabase-community/supabase-py/commit/db71ab49e162ebdfcc7647d183fbd123016ff846)) + +* rm unused library ([`c1bc0b1`](https://github.com/supabase-community/supabase-py/commit/c1bc0b1cd826cd689b25461dbc549ed83286bf95)) + +* add shim ([`6c9e99c`](https://github.com/supabase-community/supabase-py/commit/6c9e99c5e23f3a30715405acc828c362e36672ec)) + +* improve readme ([`9248cf2`](https://github.com/supabase-community/supabase-py/commit/9248cf207c8e8f2418b9148803b0d865f76ec78a)) + +* cleaning up a little and making more pythonic ([`97f9162`](https://github.com/supabase-community/supabase-py/commit/97f9162763ea9f1b10c6f22c9763b900821b21d2)) + +* add setup.py to enable "pip install -e . " installs ([`7edf954`](https://github.com/supabase-community/supabase-py/commit/7edf954424075bac1f31b796144cbb62e4df6d49)) + +* add version to package ([`30b486a`](https://github.com/supabase-community/supabase-py/commit/30b486a1915d04e8092ba4bcacd759c37e4f7297)) + +* ignore vim tags ([`b1417b7`](https://github.com/supabase-community/supabase-py/commit/b1417b7c6b6cb91006edf7debd2c0342d38fa552)) + +* Document client and query builder ([`e06b143`](https://github.com/supabase-community/supabase-py/commit/e06b1437ad8af3ccf85c5064024682dba481244c)) + +* Enable and manually test auth ([`85c4b52`](https://github.com/supabase-community/supabase-py/commit/85c4b527efef21f8e78b8a34d1e08478739ca042)) + +* Update README.md ([`0884897`](https://github.com/supabase-community/supabase-py/commit/0884897bd400d6d130c06956237d86dbf8c5ec86)) + +* Add realtime methods ([`2a9c171`](https://github.com/supabase-community/supabase-py/commit/2a9c171e0dcd42ec8fb381d30767aad7f96207f8)) + +* Rename files to align with python convention ([`afa8189`](https://github.com/supabase-community/supabase-py/commit/afa8189cb82257130fee9f4f48a8907560a91b4f)) + +* Add _from functions, refactor ([`20106ce`](https://github.com/supabase-community/supabase-py/commit/20106ce2c0ff10d356cc179f1b597efebc0d5b38)) + +* Refactor and format with black ([`2fc2747`](https://github.com/supabase-community/supabase-py/commit/2fc2747f109d28e27b8a01e5a803bff70f04eab2)) + +* Add auth client wrapper ([`bd5d03b`](https://github.com/supabase-community/supabase-py/commit/bd5d03b0cd389f468cdcb0c9e22840012ca18a5a)) + +* Add supporting files ([`f0f6d06`](https://github.com/supabase-community/supabase-py/commit/f0f6d069d0fbda7bc4d73b6249d26ded98ed247c)) + +* Update imports ([`3b0bb60`](https://github.com/supabase-community/supabase-py/commit/3b0bb609052bf241990866f4937094442f3b87c5)) + +* Add rpc function ([`adfb623`](https://github.com/supabase-community/supabase-py/commit/adfb623ea8ab4fa1d8233b38abb86cfecd0ce740)) + +* Add method stubs ([`09e731f`](https://github.com/supabase-community/supabase-py/commit/09e731f97116bf2e698302f7ba2aac0968648e35)) + +* Initial commit ([`c0aa913`](https://github.com/supabase-community/supabase-py/commit/c0aa9135c1a457c5ad00d3b143b5e2688ff940ef)) + +* Update README.md ([`050e280`](https://github.com/supabase-community/supabase-py/commit/050e280c41f51b94efee75e2cc87d7acccd0551d)) + +* Setup project ([`45630e0`](https://github.com/supabase-community/supabase-py/commit/45630e0aba85ae84c57861c52e141521690fd11e)) + +* Update README.md ([`dc55ead`](https://github.com/supabase-community/supabase-py/commit/dc55eadcad213ae2a2c3f3452922b6f75ca0e0b4)) + +* Initial commit ([`56f27bc`](https://github.com/supabase-community/supabase-py/commit/56f27bcb4bb3d3fa37383e7261fc58c26471d01a)) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..5a9abb5e --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make 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 within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +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 \[INSERT EMAIL ADDRESS\]. 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 + +For answers to common questions about this code of conduct, see + + +[homepage]: https://www.contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..b813dad7 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,27 @@ +# Contributing + +We highly appreciate feedback and contributions from the community! If you'd like to contribute to this project, please make sure to review and follow the guidelines below. + +## Code of conduct + +In the interest of fostering an open and welcoming environment, please review and follow our [code of conduct](./CODE_OF_CONDUCT.md). + +## Code and copy reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. After filing a pull request, please tag any two of the [current maintainers](./MAINTAINERS.md) to request a review. + +## Report an issue/File a feature request + +Before opening a new issue or request, please take a moment to check the existing issues and discussions to see if your topic has already been addressed. This helps us avoid duplicate issues and keeps the conversation focused. + +Report all issues and file all feature requests through [GitHub Issues](./issues). + +## Create a pull request + +When making pull requests to the repository, make sure to follow these guidelines for both bug fixes and new features: + +- Before creating a pull request, file a GitHub Issue so that maintainers and the community can discuss the problem and potential solutions before you spend time on an implementation. +- In your PR's description, link to any related issues or pull requests to give reviewers the full context of your change. To link to an existing issue or pull request in your PR, use the # symbol followed by the issue or PR number. For example, to link to issue number 123, you would write #123 in your PR's description. GitHub will automatically create a link to the issue. +- For commit messages, follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format. + - For example, if you update documentation for a specific extension, your commit message might be: `docs(extension-name) updated installation documentation`. diff --git a/LICENSE b/LICENSE index 8191ed13..ddeba6a0 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 Joel Lee +Copyright (c) 2020 Supabase Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/MAINTAINERS.md b/MAINTAINERS.md new file mode 100644 index 00000000..c828c08f --- /dev/null +++ b/MAINTAINERS.md @@ -0,0 +1,18 @@ +# Maintainers + +This page lists all active maintainers of this repository. If you were a maintainer and would like to add your name to the Emeritus list, please send us a PR. + +See CONTRIBUTING.md for general contribution guidelines. + +## Maintainers (in alphabetical order) + +- [olirice](https://github.com/olirice) +- [silentworks](https://github.com/silentworks) + +## Emeritus Maintainers (in alphabetical order) + +- [anand2312](https://github.com/anand2312) +- [dreinon](https://github.com/dreinon) +- [fedden](https://github.com/fedden) +- [J0](https://github.com/J0) +- [leynier](https://github.com/leynier) diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..ab5214c2 --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ +install: + poetry install + +install_poetry: + curl -sSL https://install.python-poetry.org | python - + poetry install + +tests: install tests_only tests_pre_commit + +tests_pre_commit: + poetry run pre-commit run --all-files + +run_tests: tests + +tests_only: + poetry run pytest --cov=./ --cov-report=xml --cov-report=html -vv + +build_sync: + poetry run unasync supabase tests + sed -i 's/asyncio.create_task(self.realtime.set_auth(access_token))//g' supabase/_sync/client.py + sed -i 's/asynch/synch/g' supabase/_sync/auth_client.py + sed -i 's/Async/Sync/g' supabase/_sync/auth_client.py + sed -i 's/Async/Sync/g' supabase/_sync/client.py diff --git a/README.md b/README.md index 901a2d10..2013d3c4 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,72 @@ -# supabase-py +# `supabase-py` -[![Documentation Status](https://readthedocs.org/projects/gotrue-py/badge/?version=latest)](https://gotrue-py.readthedocs.io/en/latest/?badge=latest) +Python client for [Supabase](https://supabase.com) -Supabase client for Python. This mirrors the design of [supabase-js](https://github.com/supabase/supabase-js/blob/master/README.md) +- Documentation: [supabase.com/docs](https://supabase.com/docs/reference/python/introduction) +- Usage: + - [GitHub OAuth in your Python Flask app](https://supabase.com/blog/oauth2-login-python-flask-apps) + - [Python data loading with Supabase](https://supabase.com/blog/loading-data-supabase-python) + +> [!NOTE] +> Do you want to help us shape the future of this library? [We're hiring](https://jobs.ashbyhq.com/supabase/85d07345-47c6-4980-82e2-57782f83ab4e). -## Status -- [x] Alpha: We are testing Supabase with a closed set of customers -- [x] Public Alpha: Anyone can sign up over at [app.supabase.io](https://app.supabase.io). But go easy on us, there are a few kinks. -- [ ] Public Beta: Stable enough for most non-enterprise use-cases -- [ ] Public: Production-ready +## Set up a Local Development Environment -We are currently in Public Alpha. Watch "releases" of this repo to get notified of major updates. +### Clone the Repository -Watch this repo +```bash +git clone https://github.com/supabase/supabase-py.git +cd supabase-py +``` -## Installation +### Create and Activate a Virtual Environment -**Recomended:** First activate your virtual environment, with your favourites system. For example, we like `poetry` and `conda`! +We recommend activating your virtual environment. For example, we like `poetry` and `conda`! Click [here](https://docs.python.org/3/library/venv.html) for more about Python virtual environments and working with [conda](https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#activating-an-environment) and [poetry](https://python-poetry.org/docs/basic-usage/). -#### PyPi installation +Using venv (Python 3 built-in): + +```bash +python3 -m venv env +source env/bin/activate # On Windows, use .\env\Scripts\activate +``` -Now install the package. +Using conda: ```bash -pip install supabase-py +conda create --name supabase-py +conda activate supabase-py ``` -#### Local installation +### PyPi installation -You can also installing from after cloning this repo. Install like below to install in Development Mode, which means when you edit the source code the changes will be reflected in your python module. +Install the package (for Python >= 3.9): ```bash -pip install -e . +# with pip +pip install supabase + +# with conda +conda install -c conda-forge supabase ``` +### Local installation + +You can also install locally after cloning this repo. Install Development mode with `pip install -e`, which makes it editable, so when you edit the source code the changes will be reflected in your python module. + ## Usage -It's usually best practice to set your api key environment variables in some way that version control doesn't track them, e.g don't put them in your python modules! Set the key and url for the supabase instance in the shell, or better yet, use a dotenv file. Heres how to set the variables in the shell. +Set your Supabase environment variables in a dotenv file, or using the shell: ```bash export SUPABASE_URL="my-url-to-my-awesome-supabase-instance" export SUPABASE_KEY="my-supa-dupa-secret-supabase-api-key" ``` -We can then read the keys in the python source code. +Init client: ```python import os -from supabase_py import create_client, Client +from supabase import create_client, Client url: str = os.environ.get("SUPABASE_URL") key: str = os.environ.get("SUPABASE_KEY") @@ -56,94 +75,217 @@ supabase: Client = create_client(url, key) Use the supabase client to interface with your database. -### Running Tests +### Sign-up -Currently the test suites are in a state of flux. We are expanding our clients tests to ensure things are working, and for now can connect to this test instance, that is populated with the following table: +```python +user = supabase.auth.sign_up({ "email": users_email, "password": users_password }) +``` -

- -

+### Sign-in + +```python +user = supabase.auth.sign_in_with_password({ "email": users_email, "password": users_password }) +``` -The above test database is a blank supabase instance that has populated the `countries` table with the built in countries script that can be found in the supabase UI. You can launch the test scripts and point to the above test database with the +### Insert Data -```bash -SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxMjYwOTMyMiwiZXhwIjoxOTI4MTg1MzIyfQ.XL9W5I_VRQ4iyQHVQmjG0BkwRfx6eVyYB3uAKcesukg" \ -SUPABASE_TEST_URL="https://tfsatoopsijgjhrqplra.supabase.co" \ -pytest -x +```python +data = supabase.table("countries").insert({"name":"Germany"}).execute() + +# Assert we pulled real data. +assert len(data.data) > 0 ``` -### See issues for what to work on +### Select Data -Rough roadmap: +```python +data = supabase.table("countries").select("*").eq("country", "IL").execute() -- [ ] Wrap [Postgrest-py](https://github.com/supabase/postgrest-py/) -- [ ] Wrap [Realtime-py](https://github.com/supabase/realtime-py) -- [x] Wrap [Gotrue-py](https://github.com/J0/gotrue-py) +# Assert we pulled real data. +assert len(data.data) > 0 +``` -### Client Library +### Update Data -This is a sample of how you'd use supabase-py. Functions and tests are WIP +```python +data = supabase.table("countries").update({"country": "Indonesia", "capital_city": "Jakarta"}).eq("id", 1).execute() +``` -## Authenticate +### Update data with duplicate keys ```python -from supabase_py import create_client, Client +country = { + "country": "United Kingdom", + "capital_city": "London" # This was missing when it was added +} -url: str = os.environ.get("SUPABASE_TEST_URL") -key: str = os.environ.get("SUPABASE_TEST_KEY") -supabase: Client = create_client(url, key) -# Create a random user login email and password. -random_email: str = "3hf82fijf92@supamail.com" -random_password: str = "fqj13bnf2hiu23h" -user = supabase.auth.sign_up(email=random_email, password=random_password) +data = supabase.table("countries").upsert(country).execute() +assert len(data.data) > 0 ``` -## Sign-in +### Delete Data ```python -from supabase_py import create_client, Client +data = supabase.table("countries").delete().eq("id", 1).execute() +``` -url: str = os.environ.get("SUPABASE_TEST_URL") -key: str = os.environ.get("SUPABASE_TEST_KEY") -supabase: Client = create_client(url, key) -# Sign in using the user email and password. -random_email: str = "3hf82fijf92@supamail.com" -random_password: str = "fqj13bnf2hiu23h" -user = supabase.auth.sign_in(email=random_email, password=random_password) +### Call Edge Functions + +```python +def test_func(): + try: + resp = supabase.functions.invoke("hello-world", invoke_options={'body':{}}) + return resp + except (FunctionsRelayError, FunctionsHttpError) as exception: + err = exception.to_dict() + print(err.get("message")) ``` -## Managing Data +### Download a file from Storage -#### Insertion of Data ```python -from supabase_py import create_client, Client +bucket_name: str = "photos" -url: str = os.environ.get("SUPABASE_TEST_URL") -key: str = os.environ.get("SUPABASE_TEST_KEY") -supabase: Client = create_client(url, key) -data = supabase.table("countries").select("*").execute() -assert len(data.get("data", [])) > 0 +data = supabase.storage.from_(bucket_name).download("photo1.png") ``` -#### Selection of Data +### Upload a file + ```python -from supabase_py import create_client, Client +bucket_name: str = "photos" +new_file = getUserFile() -url: str = os.environ.get("SUPABASE_TEST_URL") -key: str = os.environ.get("SUPABASE_TEST_KEY") -supabase: Client = create_client(url, key) -data = supabase.table("countries").select("*").execute() -# Assert we pulled real data. -assert len(data.get("data", [])) > 0 +data = supabase.storage.from_(bucket_name).upload("/user1/profile.png", new_file) +``` + +### Remove a file + +```python +bucket_name: str = "photos" + +data = supabase.storage.from_(bucket_name).remove(["old_photo.png", "image5.jpg"]) +``` + +### List all files + +```python +bucket_name: str = "charts" + +data = supabase.storage.from_(bucket_name).list() ``` -## Realtime Changes +### Move and rename files ```python -subscription = supabase - .table('countries') - .on('*', lambda x: print(x)) - .subscribe() +bucket_name: str = "charts" +old_file_path: str = "generic/graph1.png" +new_file_path: str = "important/revenue.png" + +data = supabase.storage.from_(bucket_name).move(old_file_path, new_file_path) +``` + + +## Roadmap + +- [x] Wrap [Postgrest-py](https://github.com/supabase/postgrest-py/) + - [x] Add remaining filters + - [x] Add support for EXPLAIN + - [ ] Add proper error handling + - [x] Use `sanitize_param()` to sanitize inputs. + - [x] Fix client-side timeouts for long running queries. + - [x] Enable HTTP2 by default. + - [x] Enable follow redirects by default. + - [x] Enable keep-alive by default. + - [x] Enable running with unverified SSL via `verify=False`. + - [x] Add Stalebot. + - [x] Update CI (linters, etc). + - [x] Check cyclomatic complexity and fix if needed (mccabe, prospector). + +- [ ] Wrap [Realtime-py](https://github.com/supabase/realtime-py) + - [ ] Integrate with Supabase-py + - [ ] Support WALRUS + - [ ] Support broadcast (to check if already supported) + - [x] Add `close()` method to close a socket. + - [x] Add Stalebot. + - [x] Update CI (linters, etc). + - [x] Check cyclomatic complexity and fix if needed (mccabe, prospector). + +- [x] Wrap [auth-py](https://github.com/supabase/auth-py) + - [x] Remove references to GoTrue-js v1 and do a proper release + - [ ] Test and document common flows (e.g. sign in with OAuth, sign in with OTP) + - [ ] Add MFA methods + - [x] Add SSO methods + - [x] Add Proof Key for Code Exchange (PKCE) methods. Unlike the JS library, we do not currently plan to support Magic Link (PKCE). Please use the [token hash](https://supabase.com/docs/guides/auth/server-side/email-based-auth-with-pkce-flow-for-ssr#create-api-endpoint-for-handling-tokenhash) in tandem with `verifyOTP` instead. + - [x] Add `is_anonymous` boolean property. + - [x] Add `sign_in_with_id_token()` method. + - [x] Add `sign_in_with_sso()` method. + - [x] Enable HTTP2 by default. + - [x] Enable follow redirects by default. + - [x] Enable keep-alive by default. + - [x] Enable running with unverified SSL via `verify=False`. + - [x] Add Stalebot. + - [x] Update CI (linters, etc). + - [x] Check cyclomatic complexity and fix if needed (mccabe, prospector). + +- [x] Wrap [storage-py](https://github.com/supabase/storage-py) + - [ ] Support resumable uploads + - [x] Setup testing environment + - [x] Fix client-side timeouts for long running operations. + - [x] Enable HTTP2 by default. + - [x] Enable follow redirects by default. + - [x] Enable keep-alive by default. + - [x] Enable running with unverified SSL via `verify=False`. + - [x] Add Stalebot. + - [x] Update CI (linters, etc). + - [x] Check cyclomatic complexity and fix if needed (mccabe, prospector). + - [x] Document how to properly upload different file types (e.g. jpeg/png and download it) + +- [x] Wrap [functions-py](https://github.com/supabase/functions-py) + - [x] Fix client-side timeouts for long running functions. + - [x] Enable HTTP2 by default. + - [x] Enable follow redirects by default. + - [x] Enable keep-alive by default. + - [x] Enable running with unverified SSL via `verify=False`. + - [x] Add Regions support. + - [x] Add Stalebot. + - [x] Update CI (linters, etc). + - [x] Check cyclomatic complexity and fix if needed (mccabe, prospector). + + +### Overall Tasks + +- [x] Add async support across the entire library +- [ ] Add FastAPI helper library (external to supabase-py) +- [ ] Add `django-supabase-postgrest` (external to supabase-py) + +## Contributing + +Contributing to the Python libraries are a great way to get involved with the Supabase community. Reach out to us on [Discord](https://discord.supabase.com) or on our [Github Discussions](https://github.com/orgs/supabase/discussions) page if you want to get involved. + +### Running Tests + +Currently, the test suites are in a state of flux. We are expanding our clients' tests to ensure things are working, and for now can connect to this test instance, which is populated with the following table: + +

+ +

+ +The above test database is a blank supabase instance that has populated the `countries` table with the built-in countries script that can be found in the supabase UI. You can launch the test scripts and point to the above test database by running + +```bash +./test.sh ``` -See [Supabase Docs](https://supabase.io/docs/guides/client-libraries) for full list of examples +## Badges + +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg?label=license)](https://opensource.org/licenses/MIT) +[![CI](https://github.com/supabase/supabase-py/actions/workflows/ci.yml/badge.svg)](https://github.com/supabase/supabase-py/actions/workflows/ci.yml) +[![Python](https://img.shields.io/pypi/pyversions/supabase)](https://pypi.org/project/supabase) +[![Version](https://img.shields.io/pypi/v/supabase?color=%2334D058)](https://pypi.org/project/supabase) +[![Codecov](https://codecov.io/gh/supabase/supabase-py/branch/develop/graph/badge.svg)](https://codecov.io/gh/supabase/supabase-py) +[![Last commit](https://img.shields.io/github/last-commit/supabase/supabase-py.svg?style=flat)](https://github.com/supabase/supabase-py/commits) +[![GitHub commit activity](https://img.shields.io/github/commit-activity/m/supabase/supabase-py)](https://github.com/supabase/supabase-py/commits) +[![Github Stars](https://img.shields.io/github/stars/supabase/supabase-py?style=flat&logo=github)](https://github.com/supabase/supabase-py/stargazers) +[![Github Forks](https://img.shields.io/github/forks/supabase/supabase-py?style=flat&logo=github)](https://github.com/supabase/supabase-py/network/members) +[![Github Watchers](https://img.shields.io/github/watchers/supabase/supabase-py?style=flat&logo=github)](https://github.com/supabase/supabase-py) +[![GitHub contributors](https://img.shields.io/github/contributors/supabase/supabase-py)](https://github.com/supabase/supabase-py/graphs/contributors) diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d4bb2cbb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..09622bbc --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,51 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = "supabase" +copyright = "2021, Joel Lee" +author = "Joel Lee" + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ["sphinx.ext.autodoc", "sphinx.ext.napoleon"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "alabaster" + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..21fe05d0 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,34 @@ +.. supabase documentation master file, created by + sphinx-quickstart on Wed Jul 21 14:39:24 2021. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to supabase's documentation! +==================================== + +.. automodule:: supabase + :members: + :show-inheritance: + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + query_builder + storage_bucket + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + + +Features +-------- +* Auth +* Realtime +* Storage diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..922152e9 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/query_builder.rst b/docs/query_builder.rst new file mode 100644 index 00000000..27002456 --- /dev/null +++ b/docs/query_builder.rst @@ -0,0 +1,6 @@ +Query Builder +================ + +.. automodule:: supabase.lib.query_builder + :members: + :show-inheritance: diff --git a/docs/storage_bucket.rst b/docs/storage_bucket.rst new file mode 100644 index 00000000..cc92cf1f --- /dev/null +++ b/docs/storage_bucket.rst @@ -0,0 +1,6 @@ +Storage Bucket +================ + +.. automodule:: supabase.lib.storage.storage_bucket_api + :members: + :show-inheritance: diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..88e05405 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,2220 @@ +# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, + {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, +] + +[[package]] +name = "aiohttp" +version = "3.11.18" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:96264854fedbea933a9ca4b7e0c745728f01380691687b7365d18d9e977179c4"}, + {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9602044ff047043430452bc3a2089743fa85da829e6fc9ee0025351d66c332b6"}, + {file = "aiohttp-3.11.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5691dc38750fcb96a33ceef89642f139aa315c8a193bbd42a0c33476fd4a1609"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554c918ec43f8480b47a5ca758e10e793bd7410b83701676a4782672d670da55"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a4076a2b3ba5b004b8cffca6afe18a3b2c5c9ef679b4d1e9859cf76295f8d4f"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:767a97e6900edd11c762be96d82d13a1d7c4fc4b329f054e88b57cdc21fded94"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0ddc9337a0fb0e727785ad4f41163cc314376e82b31846d3835673786420ef1"}, + {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f414f37b244f2a97e79b98d48c5ff0789a0b4b4609b17d64fa81771ad780e415"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fdb239f47328581e2ec7744ab5911f97afb10752332a6dd3d98e14e429e1a9e7"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f2c50bad73ed629cc326cc0f75aed8ecfb013f88c5af116f33df556ed47143eb"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a8d8f20c39d3fa84d1c28cdb97f3111387e48209e224408e75f29c6f8e0861d"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:106032eaf9e62fd6bc6578c8b9e6dc4f5ed9a5c1c7fb2231010a1b4304393421"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:b491e42183e8fcc9901d8dcd8ae644ff785590f1727f76ca86e731c61bfe6643"}, + {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad8c745ff9460a16b710e58e06a9dec11ebc0d8f4dd82091cefb579844d69868"}, + {file = "aiohttp-3.11.18-cp310-cp310-win32.whl", hash = "sha256:8e57da93e24303a883146510a434f0faf2f1e7e659f3041abc4e3fb3f6702a9f"}, + {file = "aiohttp-3.11.18-cp310-cp310-win_amd64.whl", hash = "sha256:cc93a4121d87d9f12739fc8fab0a95f78444e571ed63e40bfc78cd5abe700ac9"}, + {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:427fdc56ccb6901ff8088544bde47084845ea81591deb16f957897f0f0ba1be9"}, + {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c828b6d23b984255b85b9b04a5b963a74278b7356a7de84fda5e3b76866597b"}, + {file = "aiohttp-3.11.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c2eaa145bb36b33af1ff2860820ba0589e165be4ab63a49aebfd0981c173b66"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d518ce32179f7e2096bf4e3e8438cf445f05fedd597f252de9f54c728574756"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0700055a6e05c2f4711011a44364020d7a10fbbcd02fbf3e30e8f7e7fddc8717"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bd1cde83e4684324e6ee19adfc25fd649d04078179890be7b29f76b501de8e4"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73b8870fe1c9a201b8c0d12c94fe781b918664766728783241a79e0468427e4f"}, + {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25557982dd36b9e32c0a3357f30804e80790ec2c4d20ac6bcc598533e04c6361"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e889c9df381a2433802991288a61e5a19ceb4f61bd14f5c9fa165655dcb1fd1"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9ea345fda05bae217b6cce2acf3682ce3b13d0d16dd47d0de7080e5e21362421"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9f26545b9940c4b46f0a9388fd04ee3ad7064c4017b5a334dd450f616396590e"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3a621d85e85dccabd700294494d7179ed1590b6d07a35709bb9bd608c7f5dd1d"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9c23fd8d08eb9c2af3faeedc8c56e134acdaf36e2117ee059d7defa655130e5f"}, + {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9e6b0e519067caa4fd7fb72e3e8002d16a68e84e62e7291092a5433763dc0dd"}, + {file = "aiohttp-3.11.18-cp311-cp311-win32.whl", hash = "sha256:122f3e739f6607e5e4c6a2f8562a6f476192a682a52bda8b4c6d4254e1138f4d"}, + {file = "aiohttp-3.11.18-cp311-cp311-win_amd64.whl", hash = "sha256:e6f3c0a3a1e73e88af384b2e8a0b9f4fb73245afd47589df2afcab6b638fa0e6"}, + {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:63d71eceb9cad35d47d71f78edac41fcd01ff10cacaa64e473d1aec13fa02df2"}, + {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d1929da615840969929e8878d7951b31afe0bac883d84418f92e5755d7b49508"}, + {file = "aiohttp-3.11.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d0aebeb2392f19b184e3fdd9e651b0e39cd0f195cdb93328bd124a1d455cd0e"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3849ead845e8444f7331c284132ab314b4dac43bfae1e3cf350906d4fff4620f"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e8452ad6b2863709f8b3d615955aa0807bc093c34b8e25b3b52097fe421cb7f"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b8d2b42073611c860a37f718b3d61ae8b4c2b124b2e776e2c10619d920350ec"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fbf91f6a0ac317c0a07eb328a1384941872f6761f2e6f7208b63c4cc0a7ff6"}, + {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ff5625413fec55216da5eaa011cf6b0a2ed67a565914a212a51aa3755b0009"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7f33a92a2fde08e8c6b0c61815521324fc1612f397abf96eed86b8e31618fdb4"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:11d5391946605f445ddafda5eab11caf310f90cdda1fd99865564e3164f5cff9"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3cc314245deb311364884e44242e00c18b5896e4fe6d5f942e7ad7e4cb640adb"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0f421843b0f70740772228b9e8093289924359d306530bcd3926f39acbe1adda"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e220e7562467dc8d589e31c1acd13438d82c03d7f385c9cd41a3f6d1d15807c1"}, + {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ab2ef72f8605046115bc9aa8e9d14fd49086d405855f40b79ed9e5c1f9f4faea"}, + {file = "aiohttp-3.11.18-cp312-cp312-win32.whl", hash = "sha256:12a62691eb5aac58d65200c7ae94d73e8a65c331c3a86a2e9670927e94339ee8"}, + {file = "aiohttp-3.11.18-cp312-cp312-win_amd64.whl", hash = "sha256:364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8"}, + {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811"}, + {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804"}, + {file = "aiohttp-3.11.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000"}, + {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261"}, + {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7"}, + {file = "aiohttp-3.11.18-cp313-cp313-win32.whl", hash = "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78"}, + {file = "aiohttp-3.11.18-cp313-cp313-win_amd64.whl", hash = "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01"}, + {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:469ac32375d9a716da49817cd26f1916ec787fc82b151c1c832f58420e6d3533"}, + {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3cec21dd68924179258ae14af9f5418c1ebdbba60b98c667815891293902e5e0"}, + {file = "aiohttp-3.11.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b426495fb9140e75719b3ae70a5e8dd3a79def0ae3c6c27e012fc59f16544a4a"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad2f41203e2808616292db5d7170cccf0c9f9c982d02544443c7eb0296e8b0c7"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bc0ae0a5e9939e423e065a3e5b00b24b8379f1db46046d7ab71753dfc7dd0e1"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe7cdd3f7d1df43200e1c80f1aed86bb36033bf65e3c7cf46a2b97a253ef8798"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5199be2a2f01ffdfa8c3a6f5981205242986b9e63eb8ae03fd18f736e4840721"}, + {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ccec9e72660b10f8e283e91aa0295975c7bd85c204011d9f5eb69310555cf30"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1596ebf17e42e293cbacc7a24c3e0dc0f8f755b40aff0402cb74c1ff6baec1d3"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eab7b040a8a873020113ba814b7db7fa935235e4cbaf8f3da17671baa1024863"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5d61df4a05476ff891cff0030329fee4088d40e4dc9b013fac01bc3c745542c2"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:46533e6792e1410f9801d09fd40cbbff3f3518d1b501d6c3c5b218f427f6ff08"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c1b90407ced992331dd6d4f1355819ea1c274cc1ee4d5b7046c6761f9ec11829"}, + {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a2fd04ae4971b914e54fe459dd7edbbd3f2ba875d69e057d5e3c8e8cac094935"}, + {file = "aiohttp-3.11.18-cp39-cp39-win32.whl", hash = "sha256:b2f317d1678002eee6fe85670039fb34a757972284614638f82b903a03feacdc"}, + {file = "aiohttp-3.11.18-cp39-cp39-win_amd64.whl", hash = "sha256:5e7007b8d1d09bce37b54111f593d173691c530b80f27c6493b928dabed9e6ef"}, + {file = "aiohttp-3.11.18.tar.gz", hash = "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.3.0" +aiosignal = ">=1.1.2" +async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" + +[package.extras] +speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] + +[[package]] +name = "aiosignal" +version = "1.3.2" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, + {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.9.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, + {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "argcomplete" +version = "3.5.3" +description = "Bash tab completion for argparse" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "argcomplete-3.5.3-py3-none-any.whl", hash = "sha256:2ab2c4a215c59fd6caaff41a869480a23e8f6a5f910b266c1808037f4e375b61"}, + {file = "argcomplete-3.5.3.tar.gz", hash = "sha256:c12bf50eded8aebb298c7b7da7a5ff3ee24dffd9f5281867dfe1424b58c55392"}, +] + +[package.extras] +test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] + +[[package]] +name = "async-timeout" +version = "5.0.1" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, +] + +[[package]] +name = "attrs" +version = "25.3.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, + {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, +] + +[package.extras] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] + +[[package]] +name = "black" +version = "25.1.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32"}, + {file = "black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da"}, + {file = "black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7"}, + {file = "black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9"}, + {file = "black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0"}, + {file = "black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299"}, + {file = "black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096"}, + {file = "black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2"}, + {file = "black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b"}, + {file = "black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc"}, + {file = "black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f"}, + {file = "black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba"}, + {file = "black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f"}, + {file = "black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3"}, + {file = "black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171"}, + {file = "black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18"}, + {file = "black-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1ee0a0c330f7b5130ce0caed9936a904793576ef4d2b98c40835d6a65afa6a0"}, + {file = "black-25.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3df5f1bf91d36002b0a75389ca8663510cf0531cca8aa5c1ef695b46d98655f"}, + {file = "black-25.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e6827d563a2c820772b32ce8a42828dc6790f095f441beef18f96aa6f8294e"}, + {file = "black-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:bacabb307dca5ebaf9c118d2d2f6903da0d62c9faa82bd21a33eecc319559355"}, + {file = "black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717"}, + {file = "black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.10)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "certifi" +version = "2025.1.31" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, +] + +[[package]] +name = "click" +version = "8.1.8" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "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" +groups = ["main", "dev"] +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +markers = {main = "sys_platform == \"win32\""} + +[[package]] +name = "commitizen" +version = "4.6.0" +description = "Python commitizen client tool" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["dev"] +files = [ + {file = "commitizen-4.6.0-py3-none-any.whl", hash = "sha256:d8861707b553c03c8b1993b7abd9e036384fdd1c57f95f6f38d5f215c53041a9"}, + {file = "commitizen-4.6.0.tar.gz", hash = "sha256:cc1c9f8937e59a7c54321443aa49dd246e07b829e305c7cbff1d7f7e32e449fe"}, +] + +[package.dependencies] +argcomplete = ">=1.12.1,<3.6" +charset-normalizer = ">=2.1.0,<4" +colorama = ">=0.4.1,<1.0" +decli = ">=0.6.0,<1.0" +importlib_metadata = {version = ">=8.0.0,<9", markers = "python_version < \"3.10\""} +jinja2 = ">=2.10.3" +packaging = ">=19" +pyyaml = ">=3.08" +questionary = ">=2.0,<3.0" +termcolor = ">=1.1,<3" +tomlkit = ">=0.5.3,<1.0.0" +typing-extensions = {version = ">=4.0.1,<5.0.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "coverage" +version = "7.7.1" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "coverage-7.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:553ba93f8e3c70e1b0031e4dfea36aba4e2b51fe5770db35e99af8dc5c5a9dfe"}, + {file = "coverage-7.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:44683f2556a56c9a6e673b583763096b8efbd2df022b02995609cf8e64fc8ae0"}, + {file = "coverage-7.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02fad4f8faa4153db76f9246bc95c1d99f054f4e0a884175bff9155cf4f856cb"}, + {file = "coverage-7.7.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c181ceba2e6808ede1e964f7bdc77bd8c7eb62f202c63a48cc541e5ffffccb6"}, + {file = "coverage-7.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b5b207a8b08c6a934b214e364cab2fa82663d4af18981a6c0a9e95f8df7602"}, + {file = "coverage-7.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:25fe40967717bad0ce628a0223f08a10d54c9d739e88c9cbb0f77b5959367542"}, + {file = "coverage-7.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:881cae0f9cbd928c9c001487bb3dcbfd0b0af3ef53ae92180878591053be0cb3"}, + {file = "coverage-7.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c90e9141e9221dd6fbc16a2727a5703c19443a8d9bf7d634c792fa0287cee1ab"}, + {file = "coverage-7.7.1-cp310-cp310-win32.whl", hash = "sha256:ae13ed5bf5542d7d4a0a42ff5160e07e84adc44eda65ddaa635c484ff8e55917"}, + {file = "coverage-7.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:171e9977c6a5d2b2be9efc7df1126fd525ce7cad0eb9904fe692da007ba90d81"}, + {file = "coverage-7.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1165490be0069e34e4f99d08e9c5209c463de11b471709dfae31e2a98cbd49fd"}, + {file = "coverage-7.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:44af11c00fd3b19b8809487630f8a0039130d32363239dfd15238e6d37e41a48"}, + {file = "coverage-7.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fbba59022e7c20124d2f520842b75904c7b9f16c854233fa46575c69949fb5b9"}, + {file = "coverage-7.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af94fb80e4f159f4d93fb411800448ad87b6039b0500849a403b73a0d36bb5ae"}, + {file = "coverage-7.7.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eae79f8e3501133aa0e220bbc29573910d096795882a70e6f6e6637b09522133"}, + {file = "coverage-7.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e33426a5e1dc7743dd54dfd11d3a6c02c5d127abfaa2edd80a6e352b58347d1a"}, + {file = "coverage-7.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b559adc22486937786731dac69e57296cb9aede7e2687dfc0d2696dbd3b1eb6b"}, + {file = "coverage-7.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b838a91e84e1773c3436f6cc6996e000ed3ca5721799e7789be18830fad009a2"}, + {file = "coverage-7.7.1-cp311-cp311-win32.whl", hash = "sha256:2c492401bdb3a85824669d6a03f57b3dfadef0941b8541f035f83bbfc39d4282"}, + {file = "coverage-7.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:1e6f867379fd033a0eeabb1be0cffa2bd660582b8b0c9478895c509d875a9d9e"}, + {file = "coverage-7.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eff187177d8016ff6addf789dcc421c3db0d014e4946c1cc3fbf697f7852459d"}, + {file = "coverage-7.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2444fbe1ba1889e0b29eb4d11931afa88f92dc507b7248f45be372775b3cef4f"}, + {file = "coverage-7.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:177d837339883c541f8524683e227adcaea581eca6bb33823a2a1fdae4c988e1"}, + {file = "coverage-7.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15d54ecef1582b1d3ec6049b20d3c1a07d5e7f85335d8a3b617c9960b4f807e0"}, + {file = "coverage-7.7.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c82b27c56478d5e1391f2e7b2e7f588d093157fa40d53fd9453a471b1191f2"}, + {file = "coverage-7.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:315ff74b585110ac3b7ab631e89e769d294f303c6d21302a816b3554ed4c81af"}, + {file = "coverage-7.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4dd532dac197d68c478480edde74fd4476c6823355987fd31d01ad9aa1e5fb59"}, + {file = "coverage-7.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:385618003e3d608001676bb35dc67ae3ad44c75c0395d8de5780af7bb35be6b2"}, + {file = "coverage-7.7.1-cp312-cp312-win32.whl", hash = "sha256:63306486fcb5a827449464f6211d2991f01dfa2965976018c9bab9d5e45a35c8"}, + {file = "coverage-7.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:37351dc8123c154fa05b7579fdb126b9f8b1cf42fd6f79ddf19121b7bdd4aa04"}, + {file = "coverage-7.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:eebd927b86761a7068a06d3699fd6c20129becf15bb44282db085921ea0f1585"}, + {file = "coverage-7.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2a79c4a09765d18311c35975ad2eb1ac613c0401afdd9cb1ca4110aeb5dd3c4c"}, + {file = "coverage-7.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b1c65a739447c5ddce5b96c0a388fd82e4bbdff7251396a70182b1d83631019"}, + {file = "coverage-7.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:392cc8fd2b1b010ca36840735e2a526fcbd76795a5d44006065e79868cc76ccf"}, + {file = "coverage-7.7.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bb47cc9f07a59a451361a850cb06d20633e77a9118d05fd0f77b1864439461b"}, + {file = "coverage-7.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b4c144c129343416a49378e05c9451c34aae5ccf00221e4fa4f487db0816ee2f"}, + {file = "coverage-7.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bc96441c9d9ca12a790b5ae17d2fa6654da4b3962ea15e0eabb1b1caed094777"}, + {file = "coverage-7.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3d03287eb03186256999539d98818c425c33546ab4901028c8fa933b62c35c3a"}, + {file = "coverage-7.7.1-cp313-cp313-win32.whl", hash = "sha256:8fed429c26b99641dc1f3a79179860122b22745dd9af36f29b141e178925070a"}, + {file = "coverage-7.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:092b134129a8bb940c08b2d9ceb4459af5fb3faea77888af63182e17d89e1cf1"}, + {file = "coverage-7.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3154b369141c3169b8133973ac00f63fcf8d6dbcc297d788d36afbb7811e511"}, + {file = "coverage-7.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:264ff2bcce27a7f455b64ac0dfe097680b65d9a1a293ef902675fa8158d20b24"}, + {file = "coverage-7.7.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba8480ebe401c2f094d10a8c4209b800a9b77215b6c796d16b6ecdf665048950"}, + {file = "coverage-7.7.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:520af84febb6bb54453e7fbb730afa58c7178fd018c398a8fcd8e269a79bf96d"}, + {file = "coverage-7.7.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88d96127ae01ff571d465d4b0be25c123789cef88ba0879194d673fdea52f54e"}, + {file = "coverage-7.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0ce92c5a9d7007d838456f4b77ea159cb628187a137e1895331e530973dcf862"}, + {file = "coverage-7.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:0dab4ef76d7b14f432057fdb7a0477e8bffca0ad39ace308be6e74864e632271"}, + {file = "coverage-7.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7e688010581dbac9cab72800e9076e16f7cccd0d89af5785b70daa11174e94de"}, + {file = "coverage-7.7.1-cp313-cp313t-win32.whl", hash = "sha256:e52eb31ae3afacdacfe50705a15b75ded67935770c460d88c215a9c0c40d0e9c"}, + {file = "coverage-7.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a6b6b3bd121ee2ec4bd35039319f3423d0be282b9752a5ae9f18724bc93ebe7c"}, + {file = "coverage-7.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34a3bf6b92e6621fc4dcdaab353e173ccb0ca9e4bfbcf7e49a0134c86c9cd303"}, + {file = "coverage-7.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6874929d624d3a670f676efafbbc747f519a6121b581dd41d012109e70a5ebd"}, + {file = "coverage-7.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ba5ff236c87a7b7aa1441a216caf44baee14cbfbd2256d306f926d16b026578"}, + {file = "coverage-7.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:452735fafe8ff5918236d5fe1feac322b359e57692269c75151f9b4ee4b7e1bc"}, + {file = "coverage-7.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5f99a93cecf799738e211f9746dc83749b5693538fbfac279a61682ba309387"}, + {file = "coverage-7.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:11dd6f52c2a7ce8bf0a5f3b6e4a8eb60e157ffedc3c4b4314a41c1dfbd26ce58"}, + {file = "coverage-7.7.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:b52edb940d087e2a96e73c1523284a2e94a4e66fa2ea1e2e64dddc67173bad94"}, + {file = "coverage-7.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d2e73e2ac468536197e6b3ab79bc4a5c9da0f078cd78cfcc7fe27cf5d1195ef0"}, + {file = "coverage-7.7.1-cp39-cp39-win32.whl", hash = "sha256:18f544356bceef17cc55fcf859e5664f06946c1b68efcea6acdc50f8f6a6e776"}, + {file = "coverage-7.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:d66ff48ab3bb6f762a153e29c0fc1eb5a62a260217bc64470d7ba602f5886d20"}, + {file = "coverage-7.7.1-pp39.pp310.pp311-none-any.whl", hash = "sha256:5b7b02e50d54be6114cc4f6a3222fec83164f7c42772ba03b520138859b5fde1"}, + {file = "coverage-7.7.1-py3-none-any.whl", hash = "sha256:822fa99dd1ac686061e1219b67868e25d9757989cf2259f735a4802497d6da31"}, + {file = "coverage-7.7.1.tar.gz", hash = "sha256:199a1272e642266b90c9f40dec7fd3d307b51bf639fa0d15980dc0b3246c1393"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] + +[[package]] +name = "decli" +version = "0.6.2" +description = "Minimal, easy-to-use, declarative cli tool" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "decli-0.6.2-py3-none-any.whl", hash = "sha256:2fc84106ce9a8f523ed501ca543bdb7e416c064917c12a59ebdc7f311a97b7ed"}, + {file = "decli-0.6.2.tar.gz", hash = "sha256:36f71eb55fd0093895efb4f416ec32b7f6e00147dda448e3365cf73ceab42d6f"}, +] + +[[package]] +name = "deprecation" +version = "2.1.0" +description = "A library to handle automated deprecations" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, + {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"}, +] + +[package.dependencies] +packaging = "*" + +[[package]] +name = "distlib" +version = "0.3.9" +description = "Distribution utilities" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +groups = ["main", "dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "filelock" +version = "3.18.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, + {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] + +[[package]] +name = "flake8" +version = "7.1.2" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +groups = ["dev"] +files = [ + {file = "flake8-7.1.2-py2.py3-none-any.whl", hash = "sha256:1cbc62e65536f65e6d754dfe6f1bada7f5cf392d6f5db3c2b85892466c3e7c1a"}, + {file = "flake8-7.1.2.tar.gz", hash = "sha256:c586ffd0b41540951ae41af572e6790dbd49fc12b3aa2541685d253d9bd504bd"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.12.0,<2.13.0" +pyflakes = ">=3.2.0,<3.3.0" + +[[package]] +name = "frozenlist" +version = "1.5.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, + {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, + {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, + {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, + {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, + {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, + {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, + {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, + {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, + {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, + {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, + {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, + {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, + {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, + {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, +] + +[[package]] +name = "gotrue" +version = "2.12.0" +description = "Python Client Library for Supabase Auth" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "gotrue-2.12.0-py3-none-any.whl", hash = "sha256:de94928eebb42d7d9672dbe4fbd0b51140a45051a31626a06dad2ad44a9a976a"}, + {file = "gotrue-2.12.0.tar.gz", hash = "sha256:b9ea164ee52964d8364c550cde16dd0e9576241a4cffeaa52eca339f61d1d14b"}, +] + +[package.dependencies] +httpx = {version = ">=0.26,<0.29", extras = ["http2"]} +pydantic = ">=1.10,<3" +pyjwt = ">=2.10.1,<3.0.0" +pytest-mock = ">=3.14.0,<4.0.0" + +[[package]] +name = "h11" +version = "0.16.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, +] + +[[package]] +name = "h2" +version = "4.2.0" +description = "Pure-Python HTTP/2 protocol implementation" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "h2-4.2.0-py3-none-any.whl", hash = "sha256:479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0"}, + {file = "h2-4.2.0.tar.gz", hash = "sha256:c8a52129695e88b1a0578d8d2cc6842bbd79128ac685463b887ee278126ad01f"}, +] + +[package.dependencies] +hpack = ">=4.1,<5" +hyperframe = ">=6.1,<7" + +[[package]] +name = "hpack" +version = "4.1.0" +description = "Pure-Python HPACK header encoding" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496"}, + {file = "hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca"}, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.16" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +h2 = {version = ">=3,<5", optional = true, markers = "extra == \"http2\""} +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "hyperframe" +version = "6.1.0" +description = "Pure-Python HTTP/2 framing" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5"}, + {file = "hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08"}, +] + +[[package]] +name = "identify" +version = "2.6.9" +description = "File identification library for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "identify-2.6.9-py2.py3-none-any.whl", hash = "sha256:c98b4322da415a8e5a70ff6e51fbc2d2932c015532d77e9f8537b4ba7813b150"}, + {file = "identify-2.6.9.tar.gz", hash = "sha256:d40dfe3142a1421d8518e3d3985ef5ac42890683e32306ad614a29490abeb6bf"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "importlib-metadata" +version = "8.6.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version < \"3.10\"" +files = [ + {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, + {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, +] + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] + +[[package]] +name = "iniconfig" +version = "2.1.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, +] + +[[package]] +name = "isort" +version = "6.0.1" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.9.0" +groups = ["dev"] +files = [ + {file = "isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615"}, + {file = "isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450"}, +] + +[package.extras] +colors = ["colorama"] +plugins = ["setuptools"] + +[[package]] +name = "jinja2" +version = "3.1.6" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "multidict" +version = "6.2.0" +description = "multidict implementation" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "multidict-6.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b9f6392d98c0bd70676ae41474e2eecf4c7150cb419237a41f8f96043fcb81d1"}, + {file = "multidict-6.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3501621d5e86f1a88521ea65d5cad0a0834c77b26f193747615b7c911e5422d2"}, + {file = "multidict-6.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:32ed748ff9ac682eae7859790d3044b50e3076c7d80e17a44239683769ff485e"}, + {file = "multidict-6.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc826b9a8176e686b67aa60fd6c6a7047b0461cae5591ea1dc73d28f72332a8a"}, + {file = "multidict-6.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:214207dcc7a6221d9942f23797fe89144128a71c03632bf713d918db99bd36de"}, + {file = "multidict-6.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05fefbc3cddc4e36da209a5e49f1094bbece9a581faa7f3589201fd95df40e5d"}, + {file = "multidict-6.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e851e6363d0dbe515d8de81fd544a2c956fdec6f8a049739562286727d4a00c3"}, + {file = "multidict-6.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32c9b4878f48be3e75808ea7e499d6223b1eea6d54c487a66bc10a1871e3dc6a"}, + {file = "multidict-6.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7243c5a6523c5cfeca76e063efa5f6a656d1d74c8b1fc64b2cd1e84e507f7e2a"}, + {file = "multidict-6.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0e5a644e50ef9fb87878d4d57907f03a12410d2aa3b93b3acdf90a741df52c49"}, + {file = "multidict-6.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0dc25a3293c50744796e87048de5e68996104d86d940bb24bc3ec31df281b191"}, + {file = "multidict-6.2.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a49994481b99cd7dedde07f2e7e93b1d86c01c0fca1c32aded18f10695ae17eb"}, + {file = "multidict-6.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:641cf2e3447c9ecff2f7aa6e9eee9eaa286ea65d57b014543a4911ff2799d08a"}, + {file = "multidict-6.2.0-cp310-cp310-win32.whl", hash = "sha256:0c383d28857f66f5aebe3e91d6cf498da73af75fbd51cedbe1adfb85e90c0460"}, + {file = "multidict-6.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:a33273a541f1e1a8219b2a4ed2de355848ecc0254264915b9290c8d2de1c74e1"}, + {file = "multidict-6.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:84e87a7d75fa36839a3a432286d719975362d230c70ebfa0948549cc38bd5b46"}, + {file = "multidict-6.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8de4d42dffd5ced9117af2ce66ba8722402541a3aa98ffdf78dde92badb68932"}, + {file = "multidict-6.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7d91a230c7f8af86c904a5a992b8c064b66330544693fd6759c3d6162382ecf"}, + {file = "multidict-6.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f6cad071960ba1914fa231677d21b1b4a3acdcce463cee41ea30bc82e6040cf"}, + {file = "multidict-6.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f74f2fc51555f4b037ef278efc29a870d327053aba5cb7d86ae572426c7cccc"}, + {file = "multidict-6.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14ed9ed1bfedd72a877807c71113deac292bf485159a29025dfdc524c326f3e1"}, + {file = "multidict-6.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac3fcf9a2d369bd075b2c2965544036a27ccd277fc3c04f708338cc57533081"}, + {file = "multidict-6.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fc6af8e39f7496047c7876314f4317736eac82bf85b54c7c76cf1a6f8e35d98"}, + {file = "multidict-6.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5f8cb1329f42fadfb40d6211e5ff568d71ab49be36e759345f91c69d1033d633"}, + {file = "multidict-6.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5389445f0173c197f4a3613713b5fb3f3879df1ded2a1a2e4bc4b5b9c5441b7e"}, + {file = "multidict-6.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:94a7bb972178a8bfc4055db80c51efd24baefaced5e51c59b0d598a004e8305d"}, + {file = "multidict-6.2.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da51d8928ad8b4244926fe862ba1795f0b6e68ed8c42cd2f822d435db9c2a8f4"}, + {file = "multidict-6.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:063be88bd684782a0715641de853e1e58a2f25b76388538bd62d974777ce9bc2"}, + {file = "multidict-6.2.0-cp311-cp311-win32.whl", hash = "sha256:52b05e21ff05729fbea9bc20b3a791c3c11da61649ff64cce8257c82a020466d"}, + {file = "multidict-6.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1e2a2193d3aa5cbf5758f6d5680a52aa848e0cf611da324f71e5e48a9695cc86"}, + {file = "multidict-6.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:437c33561edb6eb504b5a30203daf81d4a9b727e167e78b0854d9a4e18e8950b"}, + {file = "multidict-6.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9f49585f4abadd2283034fc605961f40c638635bc60f5162276fec075f2e37a4"}, + {file = "multidict-6.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5dd7106d064d05896ce28c97da3f46caa442fe5a43bc26dfb258e90853b39b44"}, + {file = "multidict-6.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e25b11a0417475f093d0f0809a149aff3943c2c56da50fdf2c3c88d57fe3dfbd"}, + {file = "multidict-6.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac380cacdd3b183338ba63a144a34e9044520a6fb30c58aa14077157a033c13e"}, + {file = "multidict-6.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61d5541f27533f803a941d3a3f8a3d10ed48c12cf918f557efcbf3cd04ef265c"}, + {file = "multidict-6.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:facaf11f21f3a4c51b62931feb13310e6fe3475f85e20d9c9fdce0d2ea561b87"}, + {file = "multidict-6.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:095a2eabe8c43041d3e6c2cb8287a257b5f1801c2d6ebd1dd877424f1e89cf29"}, + {file = "multidict-6.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0cc398350ef31167e03f3ca7c19313d4e40a662adcb98a88755e4e861170bdd"}, + {file = "multidict-6.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7c611345bbe7cb44aabb877cb94b63e86f2d0db03e382667dbd037866d44b4f8"}, + {file = "multidict-6.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8cd1a0644ccaf27e9d2f6d9c9474faabee21f0578fe85225cc5af9a61e1653df"}, + {file = "multidict-6.2.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:89b3857652183b8206a891168af47bac10b970d275bba1f6ee46565a758c078d"}, + {file = "multidict-6.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:125dd82b40f8c06d08d87b3510beaccb88afac94e9ed4a6f6c71362dc7dbb04b"}, + {file = "multidict-6.2.0-cp312-cp312-win32.whl", hash = "sha256:76b34c12b013d813e6cb325e6bd4f9c984db27758b16085926bbe7ceeaace626"}, + {file = "multidict-6.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:0b183a959fb88ad1be201de2c4bdf52fa8e46e6c185d76201286a97b6f5ee65c"}, + {file = "multidict-6.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5c5e7d2e300d5cb3b2693b6d60d3e8c8e7dd4ebe27cd17c9cb57020cac0acb80"}, + {file = "multidict-6.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:256d431fe4583c5f1e0f2e9c4d9c22f3a04ae96009b8cfa096da3a8723db0a16"}, + {file = "multidict-6.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a3c0ff89fe40a152e77b191b83282c9664357dce3004032d42e68c514ceff27e"}, + {file = "multidict-6.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef7d48207926edbf8b16b336f779c557dd8f5a33035a85db9c4b0febb0706817"}, + {file = "multidict-6.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c099d3899b14e1ce52262eb82a5f5cb92157bb5106bf627b618c090a0eadc"}, + {file = "multidict-6.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e16e7297f29a544f49340012d6fc08cf14de0ab361c9eb7529f6a57a30cbfda1"}, + {file = "multidict-6.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:042028348dc5a1f2be6c666437042a98a5d24cee50380f4c0902215e5ec41844"}, + {file = "multidict-6.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08549895e6a799bd551cf276f6e59820aa084f0f90665c0f03dd3a50db5d3c48"}, + {file = "multidict-6.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ccfd74957ef53fa7380aaa1c961f523d582cd5e85a620880ffabd407f8202c0"}, + {file = "multidict-6.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:83b78c680d4b15d33042d330c2fa31813ca3974197bddb3836a5c635a5fd013f"}, + {file = "multidict-6.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b4c153863dd6569f6511845922c53e39c8d61f6e81f228ad5443e690fca403de"}, + {file = "multidict-6.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:98aa8325c7f47183b45588af9c434533196e241be0a4e4ae2190b06d17675c02"}, + {file = "multidict-6.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9e658d1373c424457ddf6d55ec1db93c280b8579276bebd1f72f113072df8a5d"}, + {file = "multidict-6.2.0-cp313-cp313-win32.whl", hash = "sha256:3157126b028c074951839233647bd0e30df77ef1fedd801b48bdcad242a60f4e"}, + {file = "multidict-6.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:2e87f1926e91855ae61769ba3e3f7315120788c099677e0842e697b0bfb659f2"}, + {file = "multidict-6.2.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:2529ddbdaa424b2c6c2eb668ea684dd6b75b839d0ad4b21aad60c168269478d7"}, + {file = "multidict-6.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:13551d0e2d7201f0959725a6a769b6f7b9019a168ed96006479c9ac33fe4096b"}, + {file = "multidict-6.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d1996ee1330e245cd3aeda0887b4409e3930524c27642b046e4fae88ffa66c5e"}, + {file = "multidict-6.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c537da54ce4ff7c15e78ab1292e5799d0d43a2108e006578a57f531866f64025"}, + {file = "multidict-6.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f249badb360b0b4d694307ad40f811f83df4da8cef7b68e429e4eea939e49dd"}, + {file = "multidict-6.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48d39b1824b8d6ea7de878ef6226efbe0773f9c64333e1125e0efcfdd18a24c7"}, + {file = "multidict-6.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b99aac6bb2c37db336fa03a39b40ed4ef2818bf2dfb9441458165ebe88b793af"}, + {file = "multidict-6.2.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07bfa8bc649783e703263f783f73e27fef8cd37baaad4389816cf6a133141331"}, + {file = "multidict-6.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b2c00ad31fbc2cbac85d7d0fcf90853b2ca2e69d825a2d3f3edb842ef1544a2c"}, + {file = "multidict-6.2.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:0d57a01a2a9fa00234aace434d8c131f0ac6e0ac6ef131eda5962d7e79edfb5b"}, + {file = "multidict-6.2.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:abf5b17bc0cf626a8a497d89ac691308dbd825d2ac372aa990b1ca114e470151"}, + {file = "multidict-6.2.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:f7716f7e7138252d88607228ce40be22660d6608d20fd365d596e7ca0738e019"}, + {file = "multidict-6.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d5a36953389f35f0a4e88dc796048829a2f467c9197265504593f0e420571547"}, + {file = "multidict-6.2.0-cp313-cp313t-win32.whl", hash = "sha256:e653d36b1bf48fa78c7fcebb5fa679342e025121ace8c87ab05c1cefd33b34fc"}, + {file = "multidict-6.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ca23db5fb195b5ef4fd1f77ce26cadefdf13dba71dab14dadd29b34d457d7c44"}, + {file = "multidict-6.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b4f3d66dd0354b79761481fc15bdafaba0b9d9076f1f42cc9ce10d7fcbda205a"}, + {file = "multidict-6.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e2a2d6749e1ff2c9c76a72c6530d5baa601205b14e441e6d98011000f47a7ac"}, + {file = "multidict-6.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cca83a629f77402cfadd58352e394d79a61c8015f1694b83ab72237ec3941f88"}, + {file = "multidict-6.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:781b5dd1db18c9e9eacc419027b0acb5073bdec9de1675c0be25ceb10e2ad133"}, + {file = "multidict-6.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf8d370b2fea27fb300825ec3984334f7dd54a581bde6456799ba3776915a656"}, + {file = "multidict-6.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25bb96338512e2f46f615a2bb7c6012fe92a4a5ebd353e5020836a7e33120349"}, + {file = "multidict-6.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19e2819b0b468174de25c0ceed766606a07cedeab132383f1e83b9a4e96ccb4f"}, + {file = "multidict-6.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6aed763b6a1b28c46c055692836879328f0b334a6d61572ee4113a5d0c859872"}, + {file = "multidict-6.2.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a1133414b771619aa3c3000701c11b2e4624a7f492f12f256aedde97c28331a2"}, + {file = "multidict-6.2.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:639556758c36093b35e2e368ca485dada6afc2bd6a1b1207d85ea6dfc3deab27"}, + {file = "multidict-6.2.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:163f4604e76639f728d127293d24c3e208b445b463168af3d031b92b0998bb90"}, + {file = "multidict-6.2.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2325105e16d434749e1be8022f942876a936f9bece4ec41ae244e3d7fae42aaf"}, + {file = "multidict-6.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e4371591e621579cb6da8401e4ea405b33ff25a755874a3567c4075ca63d56e2"}, + {file = "multidict-6.2.0-cp39-cp39-win32.whl", hash = "sha256:d1175b0e0d6037fab207f05774a176d71210ebd40b1c51f480a04b65ec5c786d"}, + {file = "multidict-6.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad81012b24b88aad4c70b2cbc2dad84018783221b7f923e926f4690ff8569da3"}, + {file = "multidict-6.2.0-py3-none-any.whl", hash = "sha256:5d26547423e5e71dcc562c4acdc134b900640a39abd9066d7326a7cc2324c530"}, + {file = "multidict-6.2.0.tar.gz", hash = "sha256:0085b0afb2446e57050140240a8595846ed64d1cbd26cef936bfab3192c673b8"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} + +[[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" +groups = ["dev"] +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.3.7" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, + {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "postgrest" +version = "1.0.1" +description = "PostgREST client for Python. This library provides an ORM interface to PostgREST." +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "postgrest-1.0.1-py3-none-any.whl", hash = "sha256:fcc0518d68d924198c41c8cbaa70c342c641cb49311be33ba4fc74b4e742f22e"}, + {file = "postgrest-1.0.1.tar.gz", hash = "sha256:0d6556dadfd8392147d98aad097fe7bf0196602e28a58eee5e9bde4390bb573f"}, +] + +[package.dependencies] +deprecation = ">=2.1.0,<3.0.0" +httpx = {version = ">=0.26,<0.29", extras = ["http2"]} +pydantic = ">=1.9,<3.0" +strenum = {version = ">=0.4.9,<0.5.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "pre-commit" +version = "4.2.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd"}, + {file = "pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "prompt-toolkit" +version = "3.0.50" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.8.0" +groups = ["dev"] +files = [ + {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, + {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "propcache" +version = "0.3.0" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "propcache-0.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:efa44f64c37cc30c9f05932c740a8b40ce359f51882c70883cc95feac842da4d"}, + {file = "propcache-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2383a17385d9800b6eb5855c2f05ee550f803878f344f58b6e194de08b96352c"}, + {file = "propcache-0.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3e7420211f5a65a54675fd860ea04173cde60a7cc20ccfbafcccd155225f8bc"}, + {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3302c5287e504d23bb0e64d2a921d1eb4a03fb93a0a0aa3b53de059f5a5d737d"}, + {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7e2e068a83552ddf7a39a99488bcba05ac13454fb205c847674da0352602082f"}, + {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d913d36bdaf368637b4f88d554fb9cb9d53d6920b9c5563846555938d5450bf"}, + {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ee1983728964d6070ab443399c476de93d5d741f71e8f6e7880a065f878e0b9"}, + {file = "propcache-0.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36ca5e9a21822cc1746023e88f5c0af6fce3af3b85d4520efb1ce4221bed75cc"}, + {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9ecde3671e62eeb99e977f5221abcf40c208f69b5eb986b061ccec317c82ebd0"}, + {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d383bf5e045d7f9d239b38e6acadd7b7fdf6c0087259a84ae3475d18e9a2ae8b"}, + {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8cb625bcb5add899cb8ba7bf716ec1d3e8f7cdea9b0713fa99eadf73b6d4986f"}, + {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5fa159dcee5dba00c1def3231c249cf261185189205073bde13797e57dd7540a"}, + {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7080b0159ce05f179cfac592cda1a82898ca9cd097dacf8ea20ae33474fbb25"}, + {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ed7161bccab7696a473fe7ddb619c1d75963732b37da4618ba12e60899fefe4f"}, + {file = "propcache-0.3.0-cp310-cp310-win32.whl", hash = "sha256:bf0d9a171908f32d54f651648c7290397b8792f4303821c42a74e7805bfb813c"}, + {file = "propcache-0.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:42924dc0c9d73e49908e35bbdec87adedd651ea24c53c29cac103ede0ea1d340"}, + {file = "propcache-0.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9ddd49258610499aab83b4f5b61b32e11fce873586282a0e972e5ab3bcadee51"}, + {file = "propcache-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2578541776769b500bada3f8a4eeaf944530516b6e90c089aa368266ed70c49e"}, + {file = "propcache-0.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8074c5dd61c8a3e915fa8fc04754fa55cfa5978200d2daa1e2d4294c1f136aa"}, + {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b58229a844931bca61b3a20efd2be2a2acb4ad1622fc026504309a6883686fbf"}, + {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e45377d5d6fefe1677da2a2c07b024a6dac782088e37c0b1efea4cfe2b1be19b"}, + {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ec5060592d83454e8063e487696ac3783cc48c9a329498bafae0d972bc7816c9"}, + {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15010f29fbed80e711db272909a074dc79858c6d28e2915704cfc487a8ac89c6"}, + {file = "propcache-0.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a254537b9b696ede293bfdbc0a65200e8e4507bc9f37831e2a0318a9b333c85c"}, + {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2b975528998de037dfbc10144b8aed9b8dd5a99ec547f14d1cb7c5665a43f075"}, + {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:19d36bb351ad5554ff20f2ae75f88ce205b0748c38b146c75628577020351e3c"}, + {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6032231d4a5abd67c7f71168fd64a47b6b451fbcb91c8397c2f7610e67683810"}, + {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6985a593417cdbc94c7f9c3403747335e450c1599da1647a5af76539672464d3"}, + {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6a1948df1bb1d56b5e7b0553c0fa04fd0e320997ae99689488201f19fa90d2e7"}, + {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8319293e85feadbbfe2150a5659dbc2ebc4afdeaf7d98936fb9a2f2ba0d4c35c"}, + {file = "propcache-0.3.0-cp311-cp311-win32.whl", hash = "sha256:63f26258a163c34542c24808f03d734b338da66ba91f410a703e505c8485791d"}, + {file = "propcache-0.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:cacea77ef7a2195f04f9279297684955e3d1ae4241092ff0cfcef532bb7a1c32"}, + {file = "propcache-0.3.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e53d19c2bf7d0d1e6998a7e693c7e87300dd971808e6618964621ccd0e01fe4e"}, + {file = "propcache-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a61a68d630e812b67b5bf097ab84e2cd79b48c792857dc10ba8a223f5b06a2af"}, + {file = "propcache-0.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fb91d20fa2d3b13deea98a690534697742029f4fb83673a3501ae6e3746508b5"}, + {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67054e47c01b7b349b94ed0840ccae075449503cf1fdd0a1fdd98ab5ddc2667b"}, + {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:997e7b8f173a391987df40f3b52c423e5850be6f6df0dcfb5376365440b56667"}, + {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d663fd71491dde7dfdfc899d13a067a94198e90695b4321084c6e450743b8c7"}, + {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8884ba1a0fe7210b775106b25850f5e5a9dc3c840d1ae9924ee6ea2eb3acbfe7"}, + {file = "propcache-0.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa806bbc13eac1ab6291ed21ecd2dd426063ca5417dd507e6be58de20e58dfcf"}, + {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6f4d7a7c0aff92e8354cceca6fe223973ddf08401047920df0fcb24be2bd5138"}, + {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:9be90eebc9842a93ef8335291f57b3b7488ac24f70df96a6034a13cb58e6ff86"}, + {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:bf15fc0b45914d9d1b706f7c9c4f66f2b7b053e9517e40123e137e8ca8958b3d"}, + {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5a16167118677d94bb48bfcd91e420088854eb0737b76ec374b91498fb77a70e"}, + {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:41de3da5458edd5678b0f6ff66691507f9885f5fe6a0fb99a5d10d10c0fd2d64"}, + {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:728af36011bb5d344c4fe4af79cfe186729efb649d2f8b395d1572fb088a996c"}, + {file = "propcache-0.3.0-cp312-cp312-win32.whl", hash = "sha256:6b5b7fd6ee7b54e01759f2044f936dcf7dea6e7585f35490f7ca0420fe723c0d"}, + {file = "propcache-0.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:2d15bc27163cd4df433e75f546b9ac31c1ba7b0b128bfb1b90df19082466ff57"}, + {file = "propcache-0.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a2b9bf8c79b660d0ca1ad95e587818c30ccdb11f787657458d6f26a1ea18c568"}, + {file = "propcache-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b0c1a133d42c6fc1f5fbcf5c91331657a1ff822e87989bf4a6e2e39b818d0ee9"}, + {file = "propcache-0.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bb2f144c6d98bb5cbc94adeb0447cfd4c0f991341baa68eee3f3b0c9c0e83767"}, + {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1323cd04d6e92150bcc79d0174ce347ed4b349d748b9358fd2e497b121e03c8"}, + {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b812b3cb6caacd072276ac0492d249f210006c57726b6484a1e1805b3cfeea0"}, + {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:742840d1d0438eb7ea4280f3347598f507a199a35a08294afdcc560c3739989d"}, + {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c6e7e4f9167fddc438cd653d826f2222222564daed4116a02a184b464d3ef05"}, + {file = "propcache-0.3.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a94ffc66738da99232ddffcf7910e0f69e2bbe3a0802e54426dbf0714e1c2ffe"}, + {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3c6ec957025bf32b15cbc6b67afe233c65b30005e4c55fe5768e4bb518d712f1"}, + {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:549722908de62aa0b47a78b90531c022fa6e139f9166be634f667ff45632cc92"}, + {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5d62c4f6706bff5d8a52fd51fec6069bef69e7202ed481486c0bc3874912c787"}, + {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:24c04f8fbf60094c531667b8207acbae54146661657a1b1be6d3ca7773b7a545"}, + {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7c5f5290799a3f6539cc5e6f474c3e5c5fbeba74a5e1e5be75587746a940d51e"}, + {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4fa0e7c9c3cf7c276d4f6ab9af8adddc127d04e0fcabede315904d2ff76db626"}, + {file = "propcache-0.3.0-cp313-cp313-win32.whl", hash = "sha256:ee0bd3a7b2e184e88d25c9baa6a9dc609ba25b76daae942edfb14499ac7ec374"}, + {file = "propcache-0.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1c8f7d896a16da9455f882870a507567d4f58c53504dc2d4b1e1d386dfe4588a"}, + {file = "propcache-0.3.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e560fd75aaf3e5693b91bcaddd8b314f4d57e99aef8a6c6dc692f935cc1e6bbf"}, + {file = "propcache-0.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:65a37714b8ad9aba5780325228598a5b16c47ba0f8aeb3dc0514701e4413d7c0"}, + {file = "propcache-0.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:07700939b2cbd67bfb3b76a12e1412405d71019df00ca5697ce75e5ef789d829"}, + {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c0fdbdf6983526e269e5a8d53b7ae3622dd6998468821d660d0daf72779aefa"}, + {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:794c3dd744fad478b6232289c866c25406ecdfc47e294618bdf1697e69bd64a6"}, + {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4544699674faf66fb6b4473a1518ae4999c1b614f0b8297b1cef96bac25381db"}, + {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fddb8870bdb83456a489ab67c6b3040a8d5a55069aa6f72f9d872235fbc52f54"}, + {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f857034dc68d5ceb30fb60afb6ff2103087aea10a01b613985610e007053a121"}, + {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:02df07041e0820cacc8f739510078f2aadcfd3fc57eaeeb16d5ded85c872c89e"}, + {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f47d52fd9b2ac418c4890aad2f6d21a6b96183c98021f0a48497a904199f006e"}, + {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9ff4e9ecb6e4b363430edf2c6e50173a63e0820e549918adef70515f87ced19a"}, + {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ecc2920630283e0783c22e2ac94427f8cca29a04cfdf331467d4f661f4072dac"}, + {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:c441c841e82c5ba7a85ad25986014be8d7849c3cfbdb6004541873505929a74e"}, + {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c929916cbdb540d3407c66f19f73387f43e7c12fa318a66f64ac99da601bcdf"}, + {file = "propcache-0.3.0-cp313-cp313t-win32.whl", hash = "sha256:0c3e893c4464ebd751b44ae76c12c5f5c1e4f6cbd6fbf67e3783cd93ad221863"}, + {file = "propcache-0.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:75e872573220d1ee2305b35c9813626e620768248425f58798413e9c39741f46"}, + {file = "propcache-0.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:03c091bb752349402f23ee43bb2bff6bd80ccab7c9df6b88ad4322258d6960fc"}, + {file = "propcache-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:46ed02532cb66612d42ae5c3929b5e98ae330ea0f3900bc66ec5f4862069519b"}, + {file = "propcache-0.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:11ae6a8a01b8a4dc79093b5d3ca2c8a4436f5ee251a9840d7790dccbd96cb649"}, + {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df03cd88f95b1b99052b52b1bb92173229d7a674df0ab06d2b25765ee8404bce"}, + {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03acd9ff19021bd0567582ac88f821b66883e158274183b9e5586f678984f8fe"}, + {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd54895e4ae7d32f1e3dd91261df46ee7483a735017dc6f987904f194aa5fd14"}, + {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a67e5c04e3119594d8cfae517f4b9330c395df07ea65eab16f3d559b7068fe"}, + {file = "propcache-0.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee25f1ac091def37c4b59d192bbe3a206298feeb89132a470325bf76ad122a1e"}, + {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58e6d2a5a7cb3e5f166fd58e71e9a4ff504be9dc61b88167e75f835da5764d07"}, + {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:be90c94570840939fecedf99fa72839aed70b0ced449b415c85e01ae67422c90"}, + {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:49ea05212a529c2caffe411e25a59308b07d6e10bf2505d77da72891f9a05641"}, + {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:119e244ab40f70a98c91906d4c1f4c5f2e68bd0b14e7ab0a06922038fae8a20f"}, + {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:507c5357a8d8b4593b97fb669c50598f4e6cccbbf77e22fa9598aba78292b4d7"}, + {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8526b0941ec5a40220fc4dfde76aed58808e2b309c03e9fa8e2260083ef7157f"}, + {file = "propcache-0.3.0-cp39-cp39-win32.whl", hash = "sha256:7cedd25e5f678f7738da38037435b340694ab34d424938041aa630d8bac42663"}, + {file = "propcache-0.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:bf4298f366ca7e1ad1d21bbb58300a6985015909964077afd37559084590c929"}, + {file = "propcache-0.3.0-py3-none-any.whl", hash = "sha256:67dda3c7325691c2081510e92c561f465ba61b975f481735aefdfc845d2cd043"}, + {file = "propcache-0.3.0.tar.gz", hash = "sha256:a8fd93de4e1d278046345f49e2238cdb298589325849b2645d4a94c53faeffc5"}, +] + +[[package]] +name = "pycodestyle" +version = "2.12.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, + {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, +] + +[[package]] +name = "pydantic" +version = "2.10.6" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, + {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.27.2" +typing-extensions = ">=4.12.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic-core" +version = "2.27.2" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, + {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pyflakes" +version = "3.2.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, +] + +[[package]] +name = "pyjwt" +version = "2.10.1" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, + {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pytest" +version = "8.3.5" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, + {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.26.0" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pytest_asyncio-0.26.0-py3-none-any.whl", hash = "sha256:7b51ed894f4fbea1340262bdae5135797ebbe21d8638978e35d31c6d19f72fb0"}, + {file = "pytest_asyncio-0.26.0.tar.gz", hash = "sha256:c4df2a697648241ff39e7f0e4a73050b03f123f760673956cf0d72a4990e312f"}, +] + +[package.dependencies] +pytest = ">=8.2,<9" +typing-extensions = {version = ">=4.12", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + +[[package]] +name = "pytest-cov" +version = "6.1.1" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pytest_cov-6.1.1-py3-none-any.whl", hash = "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde"}, + {file = "pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a"}, +] + +[package.dependencies] +coverage = {version = ">=7.5", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[package]] +name = "pytest-mock" +version = "3.14.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, + {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, +] + +[package.dependencies] +pytest = ">=6.2.5" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.1.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d"}, + {file = "python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "questionary" +version = "2.1.0" +description = "Python library to build pretty command line user prompts ⭐️" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "questionary-2.1.0-py3-none-any.whl", hash = "sha256:44174d237b68bc828e4878c763a9ad6790ee61990e0ae72927694ead57bab8ec"}, + {file = "questionary-2.1.0.tar.gz", hash = "sha256:6302cdd645b19667d8f6e6634774e9538bfcd1aad9be287e743d96cacaf95587"}, +] + +[package.dependencies] +prompt_toolkit = ">=2.0,<4.0" + +[[package]] +name = "realtime" +version = "2.4.3" +description = "" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "realtime-2.4.3-py3-none-any.whl", hash = "sha256:09ff3b61ac928413a27765640b67362380eaddba84a7037a17972a64b1ac52f7"}, + {file = "realtime-2.4.3.tar.gz", hash = "sha256:152febabc822ce60e11f202842c5aa6858ae4bd04920bfd6a00c1dd492f426b0"}, +] + +[package.dependencies] +aiohttp = ">=3.11.18,<4.0.0" +python-dateutil = ">=2.8.1,<3.0.0" +typing-extensions = ">=4.13.2,<5.0.0" +websockets = ">=11,<15" + +[[package]] +name = "setuptools" +version = "72.2.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "setuptools-72.2.0-py3-none-any.whl", hash = "sha256:f11dd94b7bae3a156a95ec151f24e4637fb4fa19c878e4d191bfb8b2d82728c4"}, + {file = "setuptools-72.2.0.tar.gz", hash = "sha256:80aacbf633704e9c8bfa1d99fa5dd4dc59573efcf9e4042c13d3bcef91ac2ef9"}, +] + +[package.extras] +core = ["importlib-metadata (>=6) ; python_version < \"3.10\"", "importlib-resources (>=5.10.2) ; python_version < \"3.9\"", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "ordered-set (>=3.1.1)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.11.*)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-ruff (<0.4) ; platform_system == \"Windows\"", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "pytest-ruff (>=0.3.2) ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "storage3" +version = "0.11.3" +description = "Supabase Storage client for Python." +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "storage3-0.11.3-py3-none-any.whl", hash = "sha256:090c42152217d5d39bd94af3ddeb60c8982f3a283dcd90b53d058f2db33e6007"}, + {file = "storage3-0.11.3.tar.gz", hash = "sha256:883637132aad36d9d92b7c497a8a56dff7c51f15faf2ff7acbccefbbd5e97347"}, +] + +[package.dependencies] +httpx = {version = ">=0.26,<0.29", extras = ["http2"]} +python-dateutil = ">=2.8.2,<3.0.0" + +[[package]] +name = "strenum" +version = "0.4.15" +description = "An Enum that inherits from str." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "StrEnum-0.4.15-py3-none-any.whl", hash = "sha256:a30cda4af7cc6b5bf52c8055bc4bf4b2b6b14a93b574626da33df53cf7740659"}, + {file = "StrEnum-0.4.15.tar.gz", hash = "sha256:878fb5ab705442070e4dd1929bb5e2249511c0bcf2b0eeacf3bcd80875c82eff"}, +] + +[package.extras] +docs = ["myst-parser[linkify]", "sphinx", "sphinx-rtd-theme"] +release = ["twine"] +test = ["pylint", "pytest", "pytest-black", "pytest-cov", "pytest-pylint"] + +[[package]] +name = "supafunc" +version = "0.9.4" +description = "Library for Supabase Functions" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "supafunc-0.9.4-py3-none-any.whl", hash = "sha256:2b34a794fb7930953150a434cdb93c24a04cf526b2f51a9e60b2be0b86d44fb2"}, + {file = "supafunc-0.9.4.tar.gz", hash = "sha256:68824a9a7bcccf5ab1e038cda632ba47cba27f2a7dc606014206b56f5a071de2"}, +] + +[package.dependencies] +httpx = {version = ">=0.26,<0.29", extras = ["http2"]} +strenum = ">=0.4.15,<0.5.0" + +[[package]] +name = "termcolor" +version = "2.5.0" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, + {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "tokenize-rt" +version = "6.1.0" +description = "A wrapper around the stdlib `tokenize` which roundtrips." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "tokenize_rt-6.1.0-py2.py3-none-any.whl", hash = "sha256:d706141cdec4aa5f358945abe36b911b8cbdc844545da99e811250c0cee9b6fc"}, + {file = "tokenize_rt-6.1.0.tar.gz", hash = "sha256:e8ee836616c0877ab7c7b54776d2fefcc3bde714449a206762425ae114b53c86"}, +] + +[[package]] +name = "tomli" +version = "2.2.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] +markers = {main = "python_version < \"3.11\"", dev = "python_full_version <= \"3.11.0a6\""} + +[[package]] +name = "tomlkit" +version = "0.13.2" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, +] + +[[package]] +name = "typer" +version = "0.4.2" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.6" +groups = ["dev"] +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" + +[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.13.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, + {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, +] +markers = {dev = "python_version < \"3.11\""} + +[[package]] +name = "unasync" +version = "0.6.0" +description = "The async transformation code." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "unasync-0.6.0-py3-none-any.whl", hash = "sha256:9cf7aaaea9737e417d8949bf9be55dc25fdb4ef1f4edc21b58f76ff0d2b9d73f"}, + {file = "unasync-0.6.0.tar.gz", hash = "sha256:a9d01ace3e1068b20550ab15b7f9723b15b8bcde728bc1770bcb578374c7ee58"}, +] + +[package.dependencies] +setuptools = "*" +tokenize-rt = "*" + +[[package]] +name = "unasync-cli" +version = "0.0.1" +description = "Command line interface for unasync. Fork of https://github.com/leynier/unasync-cli/" +optional = false +python-versions = "^3.8.18" +groups = ["dev"] +files = [] +develop = false + +[package.dependencies] +setuptools = "^72.1.0" +typer = "^0.4.0" +unasync = "^0.6.0" + +[package.source] +type = "git" +url = "https://github.com/supabase-community/unasync-cli.git" +reference = "main" +resolved_reference = "6a082ee36d5e8941622b70f6cbcaf8e7a5be339d" + +[[package]] +name = "virtualenv" +version = "20.29.3" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "virtualenv-20.29.3-py3-none-any.whl", hash = "sha256:3e3d00f5807e83b234dfb6122bf37cfadf4be216c53a49ac059d02414f819170"}, + {file = "virtualenv-20.29.3.tar.gz", hash = "sha256:95e39403fcf3940ac45bc717597dba16110b74506131845d9b687d5e73d947ac"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] + +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + +[[package]] +name = "websockets" +version = "14.2" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "websockets-14.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e8179f95323b9ab1c11723e5d91a89403903f7b001828161b480a7810b334885"}, + {file = "websockets-14.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0d8c3e2cdb38f31d8bd7d9d28908005f6fa9def3324edb9bf336d7e4266fd397"}, + {file = "websockets-14.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:714a9b682deb4339d39ffa674f7b674230227d981a37d5d174a4a83e3978a610"}, + {file = "websockets-14.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e53c72052f2596fb792a7acd9704cbc549bf70fcde8a99e899311455974ca3"}, + {file = "websockets-14.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3fbd68850c837e57373d95c8fe352203a512b6e49eaae4c2f4088ef8cf21980"}, + {file = "websockets-14.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b27ece32f63150c268593d5fdb82819584831a83a3f5809b7521df0685cd5d8"}, + {file = "websockets-14.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4daa0faea5424d8713142b33825fff03c736f781690d90652d2c8b053345b0e7"}, + {file = "websockets-14.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:bc63cee8596a6ec84d9753fd0fcfa0452ee12f317afe4beae6b157f0070c6c7f"}, + {file = "websockets-14.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a570862c325af2111343cc9b0257b7119b904823c675b22d4ac547163088d0d"}, + {file = "websockets-14.2-cp310-cp310-win32.whl", hash = "sha256:75862126b3d2d505e895893e3deac0a9339ce750bd27b4ba515f008b5acf832d"}, + {file = "websockets-14.2-cp310-cp310-win_amd64.whl", hash = "sha256:cc45afb9c9b2dc0852d5c8b5321759cf825f82a31bfaf506b65bf4668c96f8b2"}, + {file = "websockets-14.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3bdc8c692c866ce5fefcaf07d2b55c91d6922ac397e031ef9b774e5b9ea42166"}, + {file = "websockets-14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c93215fac5dadc63e51bcc6dceca72e72267c11def401d6668622b47675b097f"}, + {file = "websockets-14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c9b6535c0e2cf8a6bf938064fb754aaceb1e6a4a51a80d884cd5db569886910"}, + {file = "websockets-14.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a52a6d7cf6938e04e9dceb949d35fbdf58ac14deea26e685ab6368e73744e4c"}, + {file = "websockets-14.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f05702e93203a6ff5226e21d9b40c037761b2cfb637187c9802c10f58e40473"}, + {file = "websockets-14.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22441c81a6748a53bfcb98951d58d1af0661ab47a536af08920d129b4d1c3473"}, + {file = "websockets-14.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd9b868d78b194790e6236d9cbc46d68aba4b75b22497eb4ab64fa640c3af56"}, + {file = "websockets-14.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1a5a20d5843886d34ff8c57424cc65a1deda4375729cbca4cb6b3353f3ce4142"}, + {file = "websockets-14.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:34277a29f5303d54ec6468fb525d99c99938607bc96b8d72d675dee2b9f5bf1d"}, + {file = "websockets-14.2-cp311-cp311-win32.whl", hash = "sha256:02687db35dbc7d25fd541a602b5f8e451a238ffa033030b172ff86a93cb5dc2a"}, + {file = "websockets-14.2-cp311-cp311-win_amd64.whl", hash = "sha256:862e9967b46c07d4dcd2532e9e8e3c2825e004ffbf91a5ef9dde519ee2effb0b"}, + {file = "websockets-14.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f20522e624d7ffbdbe259c6b6a65d73c895045f76a93719aa10cd93b3de100c"}, + {file = "websockets-14.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:647b573f7d3ada919fd60e64d533409a79dcf1ea21daeb4542d1d996519ca967"}, + {file = "websockets-14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6af99a38e49f66be5a64b1e890208ad026cda49355661549c507152113049990"}, + {file = "websockets-14.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:091ab63dfc8cea748cc22c1db2814eadb77ccbf82829bac6b2fbe3401d548eda"}, + {file = "websockets-14.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b374e8953ad477d17e4851cdc66d83fdc2db88d9e73abf755c94510ebddceb95"}, + {file = "websockets-14.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a39d7eceeea35db85b85e1169011bb4321c32e673920ae9c1b6e0978590012a3"}, + {file = "websockets-14.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0a6f3efd47ffd0d12080594f434faf1cd2549b31e54870b8470b28cc1d3817d9"}, + {file = "websockets-14.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:065ce275e7c4ffb42cb738dd6b20726ac26ac9ad0a2a48e33ca632351a737267"}, + {file = "websockets-14.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e9d0e53530ba7b8b5e389c02282f9d2aa47581514bd6049d3a7cffe1385cf5fe"}, + {file = "websockets-14.2-cp312-cp312-win32.whl", hash = "sha256:20e6dd0984d7ca3037afcb4494e48c74ffb51e8013cac71cf607fffe11df7205"}, + {file = "websockets-14.2-cp312-cp312-win_amd64.whl", hash = "sha256:44bba1a956c2c9d268bdcdf234d5e5ff4c9b6dc3e300545cbe99af59dda9dcce"}, + {file = "websockets-14.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6f1372e511c7409a542291bce92d6c83320e02c9cf392223272287ce55bc224e"}, + {file = "websockets-14.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4da98b72009836179bb596a92297b1a61bb5a830c0e483a7d0766d45070a08ad"}, + {file = "websockets-14.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8a86a269759026d2bde227652b87be79f8a734e582debf64c9d302faa1e9f03"}, + {file = "websockets-14.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86cf1aaeca909bf6815ea714d5c5736c8d6dd3a13770e885aafe062ecbd04f1f"}, + {file = "websockets-14.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b0f6c3ba3b1240f602ebb3971d45b02cc12bd1845466dd783496b3b05783a5"}, + {file = "websockets-14.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:669c3e101c246aa85bc8534e495952e2ca208bd87994650b90a23d745902db9a"}, + {file = "websockets-14.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eabdb28b972f3729348e632ab08f2a7b616c7e53d5414c12108c29972e655b20"}, + {file = "websockets-14.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2066dc4cbcc19f32c12a5a0e8cc1b7ac734e5b64ac0a325ff8353451c4b15ef2"}, + {file = "websockets-14.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ab95d357cd471df61873dadf66dd05dd4709cae001dd6342edafc8dc6382f307"}, + {file = "websockets-14.2-cp313-cp313-win32.whl", hash = "sha256:a9e72fb63e5f3feacdcf5b4ff53199ec8c18d66e325c34ee4c551ca748623bbc"}, + {file = "websockets-14.2-cp313-cp313-win_amd64.whl", hash = "sha256:b439ea828c4ba99bb3176dc8d9b933392a2413c0f6b149fdcba48393f573377f"}, + {file = "websockets-14.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7cd5706caec1686c5d233bc76243ff64b1c0dc445339bd538f30547e787c11fe"}, + {file = "websockets-14.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec607328ce95a2f12b595f7ae4c5d71bf502212bddcea528290b35c286932b12"}, + {file = "websockets-14.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da85651270c6bfb630136423037dd4975199e5d4114cae6d3066641adcc9d1c7"}, + {file = "websockets-14.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ecadc7ce90accf39903815697917643f5b7cfb73c96702318a096c00aa71f5"}, + {file = "websockets-14.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1979bee04af6a78608024bad6dfcc0cc930ce819f9e10342a29a05b5320355d0"}, + {file = "websockets-14.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dddacad58e2614a24938a50b85969d56f88e620e3f897b7d80ac0d8a5800258"}, + {file = "websockets-14.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:89a71173caaf75fa71a09a5f614f450ba3ec84ad9fca47cb2422a860676716f0"}, + {file = "websockets-14.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6af6a4b26eea4fc06c6818a6b962a952441e0e39548b44773502761ded8cc1d4"}, + {file = "websockets-14.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:80c8efa38957f20bba0117b48737993643204645e9ec45512579132508477cfc"}, + {file = "websockets-14.2-cp39-cp39-win32.whl", hash = "sha256:2e20c5f517e2163d76e2729104abc42639c41cf91f7b1839295be43302713661"}, + {file = "websockets-14.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4c8cef610e8d7c70dea92e62b6814a8cd24fbd01d7103cc89308d2bfe1659ef"}, + {file = "websockets-14.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d7d9cafbccba46e768be8a8ad4635fa3eae1ffac4c6e7cb4eb276ba41297ed29"}, + {file = "websockets-14.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c76193c1c044bd1e9b3316dcc34b174bbf9664598791e6fb606d8d29000e070c"}, + {file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd475a974d5352390baf865309fe37dec6831aafc3014ffac1eea99e84e83fc2"}, + {file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c6c0097a41968b2e2b54ed3424739aab0b762ca92af2379f152c1aef0187e1c"}, + {file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d7ff794c8b36bc402f2e07c0b2ceb4a2424147ed4785ff03e2a7af03711d60a"}, + {file = "websockets-14.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dec254fcabc7bd488dab64846f588fc5b6fe0d78f641180030f8ea27b76d72c3"}, + {file = "websockets-14.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bbe03eb853e17fd5b15448328b4ec7fb2407d45fb0245036d06a3af251f8e48f"}, + {file = "websockets-14.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3c4aa3428b904d5404a0ed85f3644d37e2cb25996b7f096d77caeb0e96a3b42"}, + {file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577a4cebf1ceaf0b65ffc42c54856214165fb8ceeba3935852fc33f6b0c55e7f"}, + {file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad1c1d02357b7665e700eca43a31d52814ad9ad9b89b58118bdabc365454b574"}, + {file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f390024a47d904613577df83ba700bd189eedc09c57af0a904e5c39624621270"}, + {file = "websockets-14.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3c1426c021c38cf92b453cdf371228d3430acd775edee6bac5a4d577efc72365"}, + {file = "websockets-14.2-py3-none-any.whl", hash = "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b"}, + {file = "websockets-14.2.tar.gz", hash = "sha256:5059ed9c54945efb321f097084b4c7e52c246f2c869815876a69d1efc4ad6eb5"}, +] + +[[package]] +name = "yarl" +version = "1.18.3" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690"}, + {file = "yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6"}, + {file = "yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a"}, + {file = "yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1"}, + {file = "yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285"}, + {file = "yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2"}, + {file = "yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8"}, + {file = "yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d"}, + {file = "yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1"}, + {file = "yarl-1.18.3-cp39-cp39-win32.whl", hash = "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5"}, + {file = "yarl-1.18.3-cp39-cp39-win_amd64.whl", hash = "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9"}, + {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"}, + {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.0" + +[[package]] +name = "zipp" +version = "3.21.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version < \"3.10\"" +files = [ + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + +[metadata] +lock-version = "2.1" +python-versions = "^3.9" +content-hash = "3c78ced00a88bf3b004c1d6b116b54458c63a0bee49f7bd334a2bb4417318db3" diff --git a/poetry.toml b/poetry.toml deleted file mode 100644 index ab1033bd..00000000 --- a/poetry.toml +++ /dev/null @@ -1,2 +0,0 @@ -[virtualenvs] -in-project = true diff --git a/poetry_scripts.py b/poetry_scripts.py new file mode 100644 index 00000000..c6a38eab --- /dev/null +++ b/poetry_scripts.py @@ -0,0 +1,16 @@ +import subprocess + + +def run_cmd(cmd): + subprocess.run(cmd, shell=True, check=True) + + +def run_tests(): + # Install requirements + run_cmd("poetry install") + + # Run pre-commit tests + run_cmd("poetry run pre-commit run --all-files") + + # Generate coverage report + run_cmd("poetry run pytest --cov=./ --cov-report=xml --cov-report=html -vv") diff --git a/pyproject.toml b/pyproject.toml index 01e36615..52fe80f4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,23 +1,48 @@ [tool.poetry] -name = "supabase-py" -version = "0.0.2" +name = "supabase" +version = "2.15.1" # {x-release-please-version} description = "Supabase client for Python." -authors = ["Joel Lee ", "Leon Fedden "] +authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand", "Andrew Smith "] +homepage = "https://github.com/supabase/supabase-py" +repository = "https://github.com/supabase/supabase-py" +documentation = "https://github.com/supabase/supabase-py" +readme = "README.md" license = "MIT" +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent" +] [tool.poetry.dependencies] -python = "^3.7.1" -postgrest-py = "0.4.0" -realtime-py = "^0.1.2" -gotrue = "0.2.0" -pytest = "^6" -requests = "2.25.1" +python = "^3.9" +postgrest = ">0.19,<1.1" +realtime = ">=2.4.0 <2.5.0" +gotrue = "^2.11.0" +httpx = ">=0.26,<0.29" +storage3 = ">=0.10,<0.12" +supafunc = "^0.9" [tool.poetry.dev-dependencies] +pre-commit = "^4.1.0" +black = "^25.1" +pytest = "^8.3.5" +flake8 = "^7.1.2" +isort = "^6.0.1" +pytest-cov = "^6.1.1" +commitizen = "^4.6.0" +python-dotenv = "^1.1.0" + +[tool.poetry.scripts] +tests = 'poetry_scripts:run_tests' + +[tool.poetry.group.dev.dependencies] +unasync-cli = { git = "https://github.com/supabase-community/unasync-cli.git", branch = "main" } +pytest-asyncio = ">=0.24,<0.27" + +[tool.pytest.ini_options] +asyncio_mode = "auto" [build-system] -requires = [ - "poetry>=0.12", - "setuptools>=30.3.0,<50", -] -build-backend = "poetry.masonry.api" +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 00000000..14e52cca --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,9 @@ +{ + "last-release-sha": "7236ed62c37fb57c3feac23b416fc6d9d153dd68", + "packages": { + ".": { + "changelog-path": "CHANGELOG.md", + "release-type": "python" + } + } +} diff --git a/setup.py b/setup.py deleted file mode 100644 index bac24a43..00000000 --- a/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env python - -import setuptools - -if __name__ == "__main__": - setuptools.setup() diff --git a/supabase/__init__.py b/supabase/__init__.py new file mode 100644 index 00000000..adf895a2 --- /dev/null +++ b/supabase/__init__.py @@ -0,0 +1,74 @@ +from gotrue.errors import ( + AuthApiError, + AuthError, + AuthImplicitGrantRedirectError, + AuthInvalidCredentialsError, + AuthRetryableError, + AuthSessionMissingError, + AuthUnknownError, + AuthWeakPasswordError, +) +from postgrest import APIError as PostgrestAPIError +from postgrest import APIResponse as PostgrestAPIResponse +from realtime import AuthorizationError, NotConnectedError +from storage3.utils import StorageException +from supafunc.errors import FunctionsError, FunctionsHttpError, FunctionsRelayError + +# Async Client +from ._async.auth_client import AsyncSupabaseAuthClient as ASupabaseAuthClient +from ._async.client import AsyncClient +from ._async.client import AsyncClient as AClient +from ._async.client import AsyncStorageClient as ASupabaseStorageClient +from ._async.client import SupabaseException as ASupabaseException +from ._async.client import create_client as acreate_client +from ._async.client import create_client as create_async_client + +# Sync Client +from ._sync.auth_client import SyncSupabaseAuthClient as SupabaseAuthClient +from ._sync.client import SupabaseException +from ._sync.client import SyncClient as Client +from ._sync.client import SyncStorageClient as SupabaseStorageClient +from ._sync.client import create_client + +# Lib +from .lib.client_options import AsyncClientOptions +from .lib.client_options import AsyncClientOptions as AClientOptions +from .lib.client_options import SyncClientOptions as ClientOptions + +# Version +from .version import __version__ + +__all__ = ( + "acreate_client", + "create_async_client", + "AClient", + "ASupabaseAuthClient", + "ASupabaseStorageClient", + "AClientOptions", + "AsyncClient", + "AsyncClientOptions", + "create_client", + "Client", + "SupabaseAuthClient", + "SupabaseStorageClient", + "ClientOptions", + "PostgrestAPIError", + "PostgrestAPIResponse", + "StorageException", + "__version__", + "AuthApiError", + "AuthError", + "AuthImplicitGrantRedirectError", + "AuthInvalidCredentialsError", + "AuthRetryableError", + "AuthSessionMissingError", + "AuthWeakPasswordError", + "AuthUnknownError", + "FunctionsHttpError", + "FunctionsRelayError", + "FunctionsError", + "AuthorizationError", + "NotConnectedError", + "SupabaseException", + "ASupabaseException", +) diff --git a/supabase/_async/__init__.py b/supabase/_async/__init__.py new file mode 100644 index 00000000..9d48db4f --- /dev/null +++ b/supabase/_async/__init__.py @@ -0,0 +1 @@ +from __future__ import annotations diff --git a/supabase/_async/auth_client.py b/supabase/_async/auth_client.py new file mode 100644 index 00000000..6557b4a8 --- /dev/null +++ b/supabase/_async/auth_client.py @@ -0,0 +1,58 @@ +from typing import Dict, Optional + +from gotrue import ( + AsyncGoTrueClient, + AsyncMemoryStorage, + AsyncSupportedStorage, + AuthFlowType, +) +from gotrue.http_clients import AsyncClient + + +class AsyncSupabaseAuthClient(AsyncGoTrueClient): + """Supabase Auth Client for asynchronous operations.""" + + def __init__( + self, + *, + url: str, + headers: Optional[Dict[str, str]] = None, + storage_key: Optional[str] = None, + auto_refresh_token: bool = True, + persist_session: bool = True, + storage: AsyncSupportedStorage = AsyncMemoryStorage(), + http_client: Optional[AsyncClient] = None, + flow_type: AuthFlowType = "implicit", + verify: bool = True, + proxy: Optional[str] = None, + ): + """ + Instantiate a SupabaseAuthClient instance. + + Args: + url (str): The URL of the Supabase instance. + headers (Optional[Dict[str, str]]): Optional headers to include in requests. + storage_key (Optional[str]): Key to store session information. + auto_refresh_token (bool): Whether to automatically refresh the token. Defaults to True. + persist_session (bool): Whether to persist the session. Defaults to True. + storage (AsyncSupportedStorage): Storage mechanism. Defaults to AsyncMemoryStorage(). + http_client (Optional[AsyncClient]): HTTP client for making requests. Defaults to None. + flow_type (AuthFlowType): Type of authentication flow. Defaults to "implicit". + verify (bool): Whether to verify SSL certificates. Defaults to True. + proxy (Optional[str]): Proxy URL. Defaults to None. + """ + if headers is None: + headers = {} + + super().__init__( + url=url, + headers=headers, + storage_key=storage_key, + auto_refresh_token=auto_refresh_token, + persist_session=persist_session, + storage=storage, + http_client=http_client, + flow_type=flow_type, + verify=verify, + proxy=proxy, + ) diff --git a/supabase/_async/client.py b/supabase/_async/client.py new file mode 100644 index 00000000..885e3ac4 --- /dev/null +++ b/supabase/_async/client.py @@ -0,0 +1,342 @@ +import asyncio +import re +from typing import Any, Dict, Optional, Union + +from gotrue import AsyncMemoryStorage +from gotrue.types import AuthChangeEvent, Session +from httpx import Timeout +from postgrest import ( + AsyncPostgrestClient, +) +from postgrest.constants import DEFAULT_POSTGREST_CLIENT_TIMEOUT +from postgrest.types import CountMethod +from realtime import AsyncRealtimeChannel, AsyncRealtimeClient, RealtimeChannelOptions +from storage3 import AsyncStorageClient +from storage3.constants import DEFAULT_TIMEOUT as DEFAULT_STORAGE_CLIENT_TIMEOUT +from supafunc import AsyncFunctionsClient + +from ..lib.client_options import AsyncClientOptions as ClientOptions +from .auth_client import AsyncSupabaseAuthClient + + +# Create an exception class when user does not provide a valid url or key. +class SupabaseException(Exception): + def __init__(self, message: str): + self.message = message + super().__init__(self.message) + + +class AsyncClient: + """Supabase client class.""" + + def __init__( + self, + supabase_url: str, + supabase_key: str, + options: Optional[ClientOptions] = None, + ): + """Instantiate the client. + + Parameters + ---------- + supabase_url: str + The URL to the Supabase instance that should be connected to. + supabase_key: str + The API key to the Supabase instance that should be connected to. + **options + Any extra settings to be optionally specified - also see the + `DEFAULT_OPTIONS` dict. + """ + + if not supabase_url: + raise SupabaseException("supabase_url is required") + if not supabase_key: + raise SupabaseException("supabase_key is required") + + # Check if the url and key are valid + if not re.match(r"^(https?)://.+", supabase_url): + raise SupabaseException("Invalid URL") + + # Check if the key is a valid JWT + if not re.match( + r"^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$", supabase_key + ): + raise SupabaseException("Invalid API key") + + if options is None: + options = ClientOptions(storage=AsyncMemoryStorage()) + + self.supabase_url = supabase_url + self.supabase_key = supabase_key + self.options = options + options.headers.update(self._get_auth_headers()) + self.rest_url = f"{supabase_url}/rest/v1" + self.realtime_url = f"{supabase_url}/realtime/v1".replace("http", "ws") + self.auth_url = f"{supabase_url}/auth/v1" + self.storage_url = f"{supabase_url}/storage/v1" + self.functions_url = f"{supabase_url}/functions/v1" + + # Instantiate clients. + self.auth = self._init_supabase_auth_client( + auth_url=self.auth_url, + client_options=options, + ) + self.realtime = self._init_realtime_client( + realtime_url=self.realtime_url, + supabase_key=self.supabase_key, + options=options.realtime if options else None, + ) + self._postgrest = None + self._storage = None + self._functions = None + self.auth.on_auth_state_change(self._listen_to_auth_events) + + @classmethod + async def create( + cls, + supabase_url: str, + supabase_key: str, + options: Optional[ClientOptions] = None, + ): + auth_header = options.headers.get("Authorization") if options else None + client = cls(supabase_url, supabase_key, options) + + if auth_header is None: + try: + session = await client.auth.get_session() + session_access_token = client._create_auth_header(session.access_token) + except Exception as err: + session_access_token = None + + client.options.headers.update( + client._get_auth_headers(session_access_token) + ) + + return client + + def table(self, table_name: str): + """Perform a table operation. + + Note that the supabase client uses the `from` method, but in Python, + this is a reserved keyword, so we have elected to use the name `table`. + Alternatively you can use the `.from_()` method. + """ + return self.from_(table_name) + + def schema(self, schema: str): + """Select a schema to query or perform an function (rpc) call. + + The schema needs to be on the list of exposed schemas inside Supabase. + """ + return self.postgrest.schema(schema) + + def from_(self, table_name: str): + """Perform a table operation. + + See the `table` method. + """ + return self.postgrest.from_(table_name) + + def rpc( + self, + fn: str, + params: Optional[Dict[Any, Any]] = None, + count: Optional[CountMethod] = None, + head: bool = False, + get: bool = False, + ): + """Performs a stored procedure call. + + Parameters + ---------- + fn : callable + The stored procedure call to be executed. + params : dict of any + Parameters passed into the stored procedure call. + count: The method to use to get the count of rows returned. + head: When set to `true`, `data` will not be returned. Useful if you only need the count. + get: When set to `true`, the function will be called with read-only access mode. + + Returns + ------- + AsyncFilterRequestBuilder + Returns a filter builder. This lets you apply filters on the response + of an RPC. + """ + if params is None: + params = {} + return self.postgrest.rpc(fn, params, count, head, get) + + @property + def postgrest(self): + if self._postgrest is None: + self._postgrest = self._init_postgrest_client( + rest_url=self.rest_url, + headers=self.options.headers, + schema=self.options.schema, + timeout=self.options.postgrest_client_timeout, + ) + + return self._postgrest + + @property + def storage(self): + if self._storage is None: + self._storage = self._init_storage_client( + storage_url=self.storage_url, + headers=self.options.headers, + storage_client_timeout=self.options.storage_client_timeout, + ) + return self._storage + + @property + def functions(self): + if self._functions is None: + self._functions = AsyncFunctionsClient( + self.functions_url, + self.options.headers, + self.options.function_client_timeout, + ) + return self._functions + + def channel( + self, topic: str, params: RealtimeChannelOptions = {} + ) -> AsyncRealtimeChannel: + """Creates a Realtime channel with Broadcast, Presence, and Postgres Changes.""" + return self.realtime.channel(topic, params) + + def get_channels(self): + """Returns all realtime channels.""" + return self.realtime.get_channels() + + async def remove_channel(self, channel: AsyncRealtimeChannel): + """Unsubscribes and removes Realtime channel from Realtime client.""" + await self.realtime.remove_channel(channel) + + async def remove_all_channels(self): + """Unsubscribes and removes all Realtime channels from Realtime client.""" + await self.realtime.remove_all_channels() + + @staticmethod + def _init_realtime_client( + realtime_url: str, supabase_key: str, options: Optional[Dict[str, Any]] = None + ) -> AsyncRealtimeClient: + if options is None: + options = {} + """Private method for creating an instance of the realtime-py client.""" + return AsyncRealtimeClient(realtime_url, token=supabase_key, **options) + + @staticmethod + def _init_storage_client( + storage_url: str, + headers: Dict[str, str], + storage_client_timeout: int = DEFAULT_STORAGE_CLIENT_TIMEOUT, + verify: bool = True, + proxy: Optional[str] = None, + ) -> AsyncStorageClient: + return AsyncStorageClient( + storage_url, headers, storage_client_timeout, verify, proxy + ) + + @staticmethod + def _init_supabase_auth_client( + auth_url: str, + client_options: ClientOptions, + verify: bool = True, + proxy: Optional[str] = None, + ) -> AsyncSupabaseAuthClient: + """Creates a wrapped instance of the GoTrue Client.""" + return AsyncSupabaseAuthClient( + url=auth_url, + auto_refresh_token=client_options.auto_refresh_token, + persist_session=client_options.persist_session, + storage=client_options.storage, + headers=client_options.headers, + flow_type=client_options.flow_type, + verify=verify, + proxy=proxy, + ) + + @staticmethod + def _init_postgrest_client( + rest_url: str, + headers: Dict[str, str], + schema: str, + timeout: Union[int, float, Timeout] = DEFAULT_POSTGREST_CLIENT_TIMEOUT, + verify: bool = True, + proxy: Optional[str] = None, + ) -> AsyncPostgrestClient: + """Private helper for creating an instance of the Postgrest client.""" + return AsyncPostgrestClient( + rest_url, + headers=headers, + schema=schema, + timeout=timeout, + verify=verify, + proxy=proxy, + ) + + def _create_auth_header(self, token: str): + return f"Bearer {token}" + + def _get_auth_headers(self, authorization: Optional[str] = None) -> Dict[str, str]: + if authorization is None: + authorization = self.options.headers.get( + "Authorization", self._create_auth_header(self.supabase_key) + ) + + """Helper method to get auth headers.""" + return { + "apiKey": self.supabase_key, + "Authorization": authorization, + } + + def _listen_to_auth_events( + self, event: AuthChangeEvent, session: Optional[Session] + ): + access_token = self.supabase_key + if event in ["SIGNED_IN", "TOKEN_REFRESHED", "SIGNED_OUT"]: + # reset postgrest and storage instance on event change + self._postgrest = None + self._storage = None + self._functions = None + access_token = session.access_token if session else self.supabase_key + + self.options.headers["Authorization"] = self._create_auth_header(access_token) + asyncio.create_task(self.realtime.set_auth(access_token)) + + +async def create_client( + supabase_url: str, + supabase_key: str, + options: Optional[ClientOptions] = None, +) -> AsyncClient: + """Create client function to instantiate supabase client like JS runtime. + + Parameters + ---------- + supabase_url: str + The URL to the Supabase instance that should be connected to. + supabase_key: str + The API key to the Supabase instance that should be connected to. + **options + Any extra settings to be optionally specified - also see the + `DEFAULT_OPTIONS` dict. + + Examples + -------- + Instantiating the client. + >>> import os + >>> from supabase import create_client, Client + >>> + >>> url: str = os.environ.get("SUPABASE_TEST_URL") + >>> key: str = os.environ.get("SUPABASE_TEST_KEY") + >>> supabase: Client = create_client(url, key) + + Returns + ------- + Client + """ + return await AsyncClient.create( + supabase_url=supabase_url, supabase_key=supabase_key, options=options + ) diff --git a/supabase/_sync/__init__.py b/supabase/_sync/__init__.py new file mode 100644 index 00000000..9d48db4f --- /dev/null +++ b/supabase/_sync/__init__.py @@ -0,0 +1 @@ +from __future__ import annotations diff --git a/supabase/_sync/auth_client.py b/supabase/_sync/auth_client.py new file mode 100644 index 00000000..cd2836c3 --- /dev/null +++ b/supabase/_sync/auth_client.py @@ -0,0 +1,58 @@ +from typing import Dict, Optional + +from gotrue import ( + AuthFlowType, + SyncGoTrueClient, + SyncMemoryStorage, + SyncSupportedStorage, +) +from gotrue.http_clients import SyncClient + + +class SyncSupabaseAuthClient(SyncGoTrueClient): + """Supabase Auth Client for synchronous operations.""" + + def __init__( + self, + *, + url: str, + headers: Optional[Dict[str, str]] = None, + storage_key: Optional[str] = None, + auto_refresh_token: bool = True, + persist_session: bool = True, + storage: SyncSupportedStorage = SyncMemoryStorage(), + http_client: Optional[SyncClient] = None, + flow_type: AuthFlowType = "implicit", + verify: bool = True, + proxy: Optional[str] = None, + ): + """ + Instantiate a SupabaseAuthClient instance. + + Args: + url (str): The URL of the Supabase instance. + headers (Optional[Dict[str, str]]): Optional headers to include in requests. + storage_key (Optional[str]): Key to store session information. + auto_refresh_token (bool): Whether to automatically refresh the token. Defaults to True. + persist_session (bool): Whether to persist the session. Defaults to True. + storage (SyncSupportedStorage): Storage mechanism. Defaults to SyncMemoryStorage(). + http_client (Optional[SyncClient]): HTTP client for making requests. Defaults to None. + flow_type (AuthFlowType): Type of authentication flow. Defaults to "implicit". + verify (bool): Whether to verify SSL certificates. Defaults to True. + proxy (Optional[str]): Proxy URL. Defaults to None. + """ + if headers is None: + headers = {} + + super().__init__( + url=url, + headers=headers, + storage_key=storage_key, + auto_refresh_token=auto_refresh_token, + persist_session=persist_session, + storage=storage, + http_client=http_client, + flow_type=flow_type, + verify=verify, + proxy=proxy, + ) diff --git a/supabase/_sync/client.py b/supabase/_sync/client.py new file mode 100644 index 00000000..e728a9ec --- /dev/null +++ b/supabase/_sync/client.py @@ -0,0 +1,340 @@ +import re +from typing import Any, Dict, Optional, Union + +from gotrue import SyncMemoryStorage +from gotrue.types import AuthChangeEvent, Session +from httpx import Timeout +from postgrest import ( + SyncPostgrestClient, +) +from postgrest.constants import DEFAULT_POSTGREST_CLIENT_TIMEOUT +from postgrest.types import CountMethod +from realtime import RealtimeChannelOptions, SyncRealtimeChannel, SyncRealtimeClient +from storage3 import SyncStorageClient +from storage3.constants import DEFAULT_TIMEOUT as DEFAULT_STORAGE_CLIENT_TIMEOUT +from supafunc import SyncFunctionsClient + +from ..lib.client_options import SyncClientOptions as ClientOptions +from .auth_client import SyncSupabaseAuthClient + + +# Create an exception class when user does not provide a valid url or key. +class SupabaseException(Exception): + def __init__(self, message: str): + self.message = message + super().__init__(self.message) + + +class SyncClient: + """Supabase client class.""" + + def __init__( + self, + supabase_url: str, + supabase_key: str, + options: Optional[ClientOptions] = None, + ): + """Instantiate the client. + + Parameters + ---------- + supabase_url: str + The URL to the Supabase instance that should be connected to. + supabase_key: str + The API key to the Supabase instance that should be connected to. + **options + Any extra settings to be optionally specified - also see the + `DEFAULT_OPTIONS` dict. + """ + + if not supabase_url: + raise SupabaseException("supabase_url is required") + if not supabase_key: + raise SupabaseException("supabase_key is required") + + # Check if the url and key are valid + if not re.match(r"^(https?)://.+", supabase_url): + raise SupabaseException("Invalid URL") + + # Check if the key is a valid JWT + if not re.match( + r"^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$", supabase_key + ): + raise SupabaseException("Invalid API key") + + if options is None: + options = ClientOptions(storage=SyncMemoryStorage()) + + self.supabase_url = supabase_url + self.supabase_key = supabase_key + self.options = options + options.headers.update(self._get_auth_headers()) + self.rest_url = f"{supabase_url}/rest/v1" + self.realtime_url = f"{supabase_url}/realtime/v1".replace("http", "ws") + self.auth_url = f"{supabase_url}/auth/v1" + self.storage_url = f"{supabase_url}/storage/v1" + self.functions_url = f"{supabase_url}/functions/v1" + + # Instantiate clients. + self.auth = self._init_supabase_auth_client( + auth_url=self.auth_url, + client_options=options, + ) + self.realtime = self._init_realtime_client( + realtime_url=self.realtime_url, + supabase_key=self.supabase_key, + options=options.realtime if options else None, + ) + self._postgrest = None + self._storage = None + self._functions = None + self.auth.on_auth_state_change(self._listen_to_auth_events) + + @classmethod + def create( + cls, + supabase_url: str, + supabase_key: str, + options: Optional[ClientOptions] = None, + ): + auth_header = options.headers.get("Authorization") if options else None + client = cls(supabase_url, supabase_key, options) + + if auth_header is None: + try: + session = client.auth.get_session() + session_access_token = client._create_auth_header(session.access_token) + except Exception as err: + session_access_token = None + + client.options.headers.update( + client._get_auth_headers(session_access_token) + ) + + return client + + def table(self, table_name: str): + """Perform a table operation. + + Note that the supabase client uses the `from` method, but in Python, + this is a reserved keyword, so we have elected to use the name `table`. + Alternatively you can use the `.from_()` method. + """ + return self.from_(table_name) + + def schema(self, schema: str): + """Select a schema to query or perform an function (rpc) call. + + The schema needs to be on the list of exposed schemas inside Supabase. + """ + return self.postgrest.schema(schema) + + def from_(self, table_name: str): + """Perform a table operation. + + See the `table` method. + """ + return self.postgrest.from_(table_name) + + def rpc( + self, + fn: str, + params: Optional[Dict[Any, Any]] = None, + count: Optional[CountMethod] = None, + head: bool = False, + get: bool = False, + ): + """Performs a stored procedure call. + + Parameters + ---------- + fn : callable + The stored procedure call to be executed. + params : dict of any + Parameters passed into the stored procedure call. + count: The method to use to get the count of rows returned. + head: When set to `true`, `data` will not be returned. Useful if you only need the count. + get: When set to `true`, the function will be called with read-only access mode. + + Returns + ------- + SyncFilterRequestBuilder + Returns a filter builder. This lets you apply filters on the response + of an RPC. + """ + if params is None: + params = {} + return self.postgrest.rpc(fn, params, count, head, get) + + @property + def postgrest(self): + if self._postgrest is None: + self._postgrest = self._init_postgrest_client( + rest_url=self.rest_url, + headers=self.options.headers, + schema=self.options.schema, + timeout=self.options.postgrest_client_timeout, + ) + + return self._postgrest + + @property + def storage(self): + if self._storage is None: + self._storage = self._init_storage_client( + storage_url=self.storage_url, + headers=self.options.headers, + storage_client_timeout=self.options.storage_client_timeout, + ) + return self._storage + + @property + def functions(self): + if self._functions is None: + self._functions = SyncFunctionsClient( + self.functions_url, + self.options.headers, + self.options.function_client_timeout, + ) + return self._functions + + def channel( + self, topic: str, params: RealtimeChannelOptions = {} + ) -> SyncRealtimeChannel: + """Creates a Realtime channel with Broadcast, Presence, and Postgres Changes.""" + return self.realtime.channel(topic, params) + + def get_channels(self): + """Returns all realtime channels.""" + return self.realtime.get_channels() + + def remove_channel(self, channel: SyncRealtimeChannel): + """Unsubscribes and removes Realtime channel from Realtime client.""" + self.realtime.remove_channel(channel) + + def remove_all_channels(self): + """Unsubscribes and removes all Realtime channels from Realtime client.""" + self.realtime.remove_all_channels() + + @staticmethod + def _init_realtime_client( + realtime_url: str, supabase_key: str, options: Optional[Dict[str, Any]] = None + ) -> SyncRealtimeClient: + if options is None: + options = {} + """Private method for creating an instance of the realtime-py client.""" + return SyncRealtimeClient(realtime_url, token=supabase_key, **options) + + @staticmethod + def _init_storage_client( + storage_url: str, + headers: Dict[str, str], + storage_client_timeout: int = DEFAULT_STORAGE_CLIENT_TIMEOUT, + verify: bool = True, + proxy: Optional[str] = None, + ) -> SyncStorageClient: + return SyncStorageClient( + storage_url, headers, storage_client_timeout, verify, proxy + ) + + @staticmethod + def _init_supabase_auth_client( + auth_url: str, + client_options: ClientOptions, + verify: bool = True, + proxy: Optional[str] = None, + ) -> SyncSupabaseAuthClient: + """Creates a wrapped instance of the GoTrue Client.""" + return SyncSupabaseAuthClient( + url=auth_url, + auto_refresh_token=client_options.auto_refresh_token, + persist_session=client_options.persist_session, + storage=client_options.storage, + headers=client_options.headers, + flow_type=client_options.flow_type, + verify=verify, + proxy=proxy, + ) + + @staticmethod + def _init_postgrest_client( + rest_url: str, + headers: Dict[str, str], + schema: str, + timeout: Union[int, float, Timeout] = DEFAULT_POSTGREST_CLIENT_TIMEOUT, + verify: bool = True, + proxy: Optional[str] = None, + ) -> SyncPostgrestClient: + """Private helper for creating an instance of the Postgrest client.""" + return SyncPostgrestClient( + rest_url, + headers=headers, + schema=schema, + timeout=timeout, + verify=verify, + proxy=proxy, + ) + + def _create_auth_header(self, token: str): + return f"Bearer {token}" + + def _get_auth_headers(self, authorization: Optional[str] = None) -> Dict[str, str]: + if authorization is None: + authorization = self.options.headers.get( + "Authorization", self._create_auth_header(self.supabase_key) + ) + + """Helper method to get auth headers.""" + return { + "apiKey": self.supabase_key, + "Authorization": authorization, + } + + def _listen_to_auth_events( + self, event: AuthChangeEvent, session: Optional[Session] + ): + access_token = self.supabase_key + if event in ["SIGNED_IN", "TOKEN_REFRESHED", "SIGNED_OUT"]: + # reset postgrest and storage instance on event change + self._postgrest = None + self._storage = None + self._functions = None + access_token = session.access_token if session else self.supabase_key + + self.options.headers["Authorization"] = self._create_auth_header(access_token) + + +def create_client( + supabase_url: str, + supabase_key: str, + options: Optional[ClientOptions] = None, +) -> SyncClient: + """Create client function to instantiate supabase client like JS runtime. + + Parameters + ---------- + supabase_url: str + The URL to the Supabase instance that should be connected to. + supabase_key: str + The API key to the Supabase instance that should be connected to. + **options + Any extra settings to be optionally specified - also see the + `DEFAULT_OPTIONS` dict. + + Examples + -------- + Instantiating the client. + >>> import os + >>> from supabase import create_client, Client + >>> + >>> url: str = os.environ.get("SUPABASE_TEST_URL") + >>> key: str = os.environ.get("SUPABASE_TEST_KEY") + >>> supabase: Client = create_client(url, key) + + Returns + ------- + Client + """ + return SyncClient.create( + supabase_url=supabase_url, supabase_key=supabase_key, options=options + ) diff --git a/supabase/client.py b/supabase/client.py new file mode 100644 index 00000000..363fa37b --- /dev/null +++ b/supabase/client.py @@ -0,0 +1,68 @@ +from gotrue.errors import ( + AuthApiError, + AuthError, + AuthImplicitGrantRedirectError, + AuthInvalidCredentialsError, + AuthRetryableError, + AuthSessionMissingError, + AuthUnknownError, + AuthWeakPasswordError, +) +from postgrest import APIError as PostgrestAPIError +from postgrest import APIResponse as PostgrestAPIResponse +from realtime import AuthorizationError, NotConnectedError +from storage3.utils import StorageException +from supafunc.errors import FunctionsError, FunctionsHttpError, FunctionsRelayError + +# Async Client +from ._async.auth_client import AsyncSupabaseAuthClient +from ._async.client import AsyncClient +from ._async.client import AsyncStorageClient as AsyncSupabaseStorageClient +from ._async.client import create_client as acreate_client +from ._async.client import create_client as create_async_client + +# Sync Client +from ._sync.auth_client import SyncSupabaseAuthClient as SupabaseAuthClient +from ._sync.client import SyncClient as Client +from ._sync.client import SyncStorageClient as SupabaseStorageClient +from ._sync.client import create_client + +# Lib +from .lib.client_options import AsyncClientOptions +from .lib.client_options import AsyncClientOptions as AClientOptions +from .lib.client_options import SyncClientOptions as ClientOptions + +# Version +from .version import __version__ + +__all__ = [ + "AsyncSupabaseAuthClient", + "acreate_client", + "create_async_client", + "AClientOptions", + "AsyncClient", + "AsyncClientOptions", + "AsyncSupabaseStorageClient", + "SupabaseAuthClient", + "create_client", + "Client", + "ClientOptions", + "SupabaseStorageClient", + "PostgrestAPIError", + "PostgrestAPIResponse", + "StorageException", + "__version__", + "AuthApiError", + "AuthError", + "AuthImplicitGrantRedirectError", + "AuthInvalidCredentialsError", + "AuthRetryableError", + "AuthSessionMissingError", + "AuthWeakPasswordError", + "AuthUnknownError", + "FunctionsHttpError", + "FunctionsRelayError", + "FunctionsError", + "AuthorizationError", + "NotConnectedError", +] diff --git a/supabase/lib/__init__.py b/supabase/lib/__init__.py new file mode 100644 index 00000000..9c3bbcfd --- /dev/null +++ b/supabase/lib/__init__.py @@ -0,0 +1,3 @@ +from supabase._async import auth_client + +__all__ = ["auth_client"] diff --git a/supabase/lib/client_options.py b/supabase/lib/client_options.py new file mode 100644 index 00000000..47498c13 --- /dev/null +++ b/supabase/lib/client_options.py @@ -0,0 +1,174 @@ +from dataclasses import dataclass, field +from typing import Dict, Optional, Union + +from gotrue import ( + AsyncMemoryStorage, + AsyncSupportedStorage, + AuthFlowType, + SyncMemoryStorage, + SyncSupportedStorage, +) +from httpx import Timeout +from postgrest.constants import DEFAULT_POSTGREST_CLIENT_TIMEOUT +from storage3.constants import DEFAULT_TIMEOUT as DEFAULT_STORAGE_CLIENT_TIMEOUT +from supafunc.utils import DEFAULT_FUNCTION_CLIENT_TIMEOUT + +from supabase.types import RealtimeClientOptions + +from ..version import __version__ + +DEFAULT_HEADERS = {"X-Client-Info": f"supabase-py/{__version__}"} + + +@dataclass +class ClientOptions: + schema: str = "public" + """ + The Postgres schema which your tables belong to. + Must be on the list of exposed schemas in Supabase. Defaults to 'public'. + """ + + headers: Dict[str, str] = field(default_factory=DEFAULT_HEADERS.copy) + """Optional headers for initializing the client.""" + + auto_refresh_token: bool = True + """Automatically refreshes the token for logged in users.""" + + persist_session: bool = True + """Whether to persist a logged in session to storage.""" + + storage: SyncSupportedStorage = field(default_factory=SyncMemoryStorage) + """A storage provider. Used to store the logged in session.""" + + realtime: Optional[RealtimeClientOptions] = None + """Options passed to the realtime-py instance""" + + postgrest_client_timeout: Union[int, float, Timeout] = ( + DEFAULT_POSTGREST_CLIENT_TIMEOUT + ) + """Timeout passed to the SyncPostgrestClient instance.""" + + storage_client_timeout: Union[int, float, Timeout] = DEFAULT_STORAGE_CLIENT_TIMEOUT + """Timeout passed to the SyncStorageClient instance""" + + function_client_timeout: Union[int, float, Timeout] = ( + DEFAULT_FUNCTION_CLIENT_TIMEOUT + ) + """Timeout passed to the SyncFunctionsClient instance.""" + + flow_type: AuthFlowType = "pkce" + """flow type to use for authentication""" + + def replace( + self, + schema: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + auto_refresh_token: Optional[bool] = None, + persist_session: Optional[bool] = None, + storage: Optional[SyncSupportedStorage] = None, + realtime: Optional[RealtimeClientOptions] = None, + postgrest_client_timeout: Union[ + int, float, Timeout + ] = DEFAULT_POSTGREST_CLIENT_TIMEOUT, + storage_client_timeout: Union[ + int, float, Timeout + ] = DEFAULT_STORAGE_CLIENT_TIMEOUT, + flow_type: Optional[AuthFlowType] = None, + ) -> "ClientOptions": + """Create a new SupabaseClientOptions with changes""" + client_options = ClientOptions() + client_options.schema = schema or self.schema + client_options.headers = headers or self.headers + client_options.auto_refresh_token = ( + auto_refresh_token or self.auto_refresh_token + ) + client_options.persist_session = persist_session or self.persist_session + client_options.storage = storage or self.storage + client_options.realtime = realtime or self.realtime + client_options.postgrest_client_timeout = ( + postgrest_client_timeout or self.postgrest_client_timeout + ) + client_options.storage_client_timeout = ( + storage_client_timeout or self.storage_client_timeout + ) + client_options.flow_type = flow_type or self.flow_type + return client_options + + +@dataclass +class AsyncClientOptions(ClientOptions): + storage: AsyncSupportedStorage = field(default_factory=AsyncMemoryStorage) + """A storage provider. Used to store the logged in session.""" + + def replace( + self, + schema: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + auto_refresh_token: Optional[bool] = None, + persist_session: Optional[bool] = None, + storage: Optional[AsyncSupportedStorage] = None, + realtime: Optional[RealtimeClientOptions] = None, + postgrest_client_timeout: Union[ + int, float, Timeout + ] = DEFAULT_POSTGREST_CLIENT_TIMEOUT, + storage_client_timeout: Union[ + int, float, Timeout + ] = DEFAULT_STORAGE_CLIENT_TIMEOUT, + flow_type: Optional[AuthFlowType] = None, + ) -> "AsyncClientOptions": + """Create a new SupabaseClientOptions with changes""" + client_options = AsyncClientOptions() + client_options.schema = schema or self.schema + client_options.headers = headers or self.headers + client_options.auto_refresh_token = ( + auto_refresh_token or self.auto_refresh_token + ) + client_options.persist_session = persist_session or self.persist_session + client_options.storage = storage or self.storage + client_options.realtime = realtime or self.realtime + client_options.postgrest_client_timeout = ( + postgrest_client_timeout or self.postgrest_client_timeout + ) + client_options.storage_client_timeout = ( + storage_client_timeout or self.storage_client_timeout + ) + client_options.flow_type = flow_type or self.flow_type + return client_options + + +@dataclass +class SyncClientOptions(ClientOptions): + def replace( + self, + schema: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + auto_refresh_token: Optional[bool] = None, + persist_session: Optional[bool] = None, + storage: Optional[SyncSupportedStorage] = None, + realtime: Optional[RealtimeClientOptions] = None, + postgrest_client_timeout: Union[ + int, float, Timeout + ] = DEFAULT_POSTGREST_CLIENT_TIMEOUT, + storage_client_timeout: Union[ + int, float, Timeout + ] = DEFAULT_STORAGE_CLIENT_TIMEOUT, + flow_type: Optional[AuthFlowType] = None, + ) -> "SyncClientOptions": + """Create a new SupabaseClientOptions with changes""" + client_options = SyncClientOptions() + client_options.schema = schema or self.schema + client_options.headers = headers or self.headers + client_options.auto_refresh_token = ( + auto_refresh_token or self.auto_refresh_token + ) + client_options.persist_session = persist_session or self.persist_session + client_options.storage = storage or self.storage + client_options.realtime = realtime or self.realtime + client_options.postgrest_client_timeout = ( + postgrest_client_timeout or self.postgrest_client_timeout + ) + client_options.storage_client_timeout = ( + storage_client_timeout or self.storage_client_timeout + ) + client_options.flow_type = flow_type or self.flow_type + return client_options diff --git a/supabase/py.typed b/supabase/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/supabase/types.py b/supabase/types.py new file mode 100644 index 00000000..4f774531 --- /dev/null +++ b/supabase/types.py @@ -0,0 +1,8 @@ +from typing import TypedDict + + +class RealtimeClientOptions(TypedDict, total=False): + auto_reconnect: bool + hb_interval: int + max_retries: int + initial_backoff: float diff --git a/supabase/version.py b/supabase/version.py new file mode 100644 index 00000000..0067bc1f --- /dev/null +++ b/supabase/version.py @@ -0,0 +1 @@ +__version__ = "2.15.1" # {x-release-please-version} diff --git a/supabase_py/__init__.py b/supabase_py/__init__.py deleted file mode 100644 index 7139b52d..00000000 --- a/supabase_py/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# Retain module level imports for structured imports in tests etc. -from . import lib -from . import client - -# Open up the client and function as an easy import. -from .client import Client, create_client - - -__version__ = "0.0.2" diff --git a/supabase_py/client.py b/supabase_py/client.py deleted file mode 100644 index 83e698d3..00000000 --- a/supabase_py/client.py +++ /dev/null @@ -1,208 +0,0 @@ -from postgrest_py import PostgrestClient -from supabase_py.lib.auth_client import SupabaseAuthClient -from supabase_py.lib.realtime_client import SupabaseRealtimeClient -from supabase_py.lib.query_builder import SupabaseQueryBuilder - -from typing import Any, Dict - - -DEFAULT_OPTIONS = { - "schema": "public", - "auto_refresh_token": True, - "persist_session": True, - "detect_session_in_url": True, - "local_storage": {}, -} - - -class Client: - """Supabase client class.""" - - def __init__( - self, supabase_url: str, supabase_key: str, **options, - ): - """Instantiate the client. - - Parameters - ---------- - supabase_url: str - The URL to the Supabase instance that should be connected to. - supabase_key: str - The API key to the Supabase instance that should be connected to. - **options - Any extra settings to be optionally specified - also see the - `DEFAULT_OPTIONS` dict. - """ - - if not supabase_url: - raise Exception("supabase_url is required") - if not supabase_key: - raise Exception("supabase_key is required") - self.supabase_url = supabase_url - self.supabase_key = supabase_key - # Start with defaults, write headers and prioritise user overwrites. - settings: Dict[str, Any] = { - **DEFAULT_OPTIONS, - "headers": self._get_auth_headers(), - **options, - } - self.rest_url: str = f"{supabase_url}/rest/v1" - self.realtime_url: str = f"{supabase_url}/realtime/v1".replace("http", "ws") - self.auth_url: str = f"{supabase_url}/auth/v1" - self.schema: str = settings.pop("schema") - # Instantiate clients. - self.auth: SupabaseAuthClient = self._init_supabase_auth_client( - auth_url=self.auth_url, supabase_key=self.supabase_key, **settings, - ) - # TODO(fedden): Bring up to parity with JS client. - # self.realtime: SupabaseRealtimeClient = self._init_realtime_client( - # realtime_url=self.realtime_url, supabase_key=self.supabase_key, - # ) - self.realtime = None - self.postgrest: PostgrestClient = self._init_postgrest_client( - rest_url=self.rest_url, - supabase_key=supabase_key, - ) - - def table(self, table_name: str) -> SupabaseQueryBuilder: - """Perform a table operation. - - Note that the supabase client uses the `from` method, but in Python, - this is a reserved keyword so we have elected to use the name `table`. - Alternatively you can use the `._from()` method. - """ - return self.from_(table_name) - - def from_(self, table_name: str) -> SupabaseQueryBuilder: - """Perform a table operation. - - See the `table` method. - """ - query_builder = SupabaseQueryBuilder( - url=f"{self.rest_url}/{table_name}", - headers=self._get_auth_headers(), - schema=self.schema, - realtime=self.realtime, - table=table_name, - ) - return query_builder.from_(table_name) - - def rpc(self, fn, params): - """Performs a stored procedure call. - - Parameters - ---------- - fn : callable - The stored procedure call to be executed. - params : dict of any - Parameters passed into the stored procedure call. - - Returns - ------- - Response - Returns the HTTP Response object which results from executing the - call. - """ - return self.postgrest.rpc(fn, params) - - # async def remove_subscription_helper(resolve): - # try: - # await self._close_subscription(subscription) - # open_subscriptions = len(self.get_subscriptions()) - # if not open_subscriptions: - # error = await self.realtime.disconnect() - # if error: - # return {"error": None, "data": { open_subscriptions}} - # except Exception as e: - # raise e - # return remove_subscription_helper(subscription) - - async def _close_subscription(self, subscription): - """Close a given subscription - - Parameters - ---------- - subscription - The name of the channel - """ - if not subscription.closed: - await self._closeChannel(subscription) - - def get_subscriptions(self): - """Return all channels the the client is subscribed to.""" - return self.realtime.channels - - @staticmethod - def _init_realtime_client( - realtime_url: str, supabase_key: str - ) -> SupabaseRealtimeClient: - """Private method for creating an instance of the realtime-py client.""" - return SupabaseRealtimeClient( - realtime_url, {"params": {"apikey": supabase_key}} - ) - - @staticmethod - def _init_supabase_auth_client( - auth_url: str, - supabase_key: str, - detect_session_in_url: bool, - auto_refresh_token: bool, - persist_session: bool, - local_storage: Dict[str, Any], - headers: Dict[str, str], - ) -> SupabaseAuthClient: - """Creates a wrapped instance of the GoTrue Client.""" - return SupabaseAuthClient( - url=auth_url, - auto_refresh_token=auto_refresh_token, - detect_session_in_url=detect_session_in_url, - persist_session=persist_session, - local_storage=local_storage, - headers=headers, - ) - - @staticmethod - def _init_postgrest_client(rest_url: str, supabase_key: str) -> PostgrestClient: - """Private helper for creating an instance of the Postgrest client.""" - client = PostgrestClient(rest_url) - client.auth(token=supabase_key) - return client - - def _get_auth_headers(self) -> Dict[str, str]: - """Helper method to get auth headers.""" - # What's the corresponding method to get the token - headers: Dict[str, str] = { - "apiKey": self.supabase_key, - "Authorization": f"Bearer {self.supabase_key}", - } - return headers - - -def create_client(supabase_url: str, supabase_key: str, **options) -> Client: - """Create client function to instanciate supabase client like JS runtime. - - Parameters - ---------- - supabase_url: str - The URL to the Supabase instance that should be connected to. - supabase_key: str - The API key to the Supabase instance that should be connected to. - **options - Any extra settings to be optionally specified - also see the - `DEFAULT_OPTIONS` dict. - - Examples - -------- - Instanciating the client. - >>> import os - >>> from supabase_py import create_client, Client - >>> - >>> url: str = os.environ.get("SUPABASE_TEST_URL") - >>> key: str = os.environ.get("SUPABASE_TEST_KEY") - >>> supabase: Client = create_client(url, key) - - Returns - ------- - Client - """ - return Client(supabase_url=supabase_url, supabase_key=supabase_key, **options) diff --git a/supabase_py/lib/__init__.py b/supabase_py/lib/__init__.py deleted file mode 100644 index 286d8833..00000000 --- a/supabase_py/lib/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from . import auth_client -from . import query_builder -from . import realtime_client diff --git a/supabase_py/lib/auth_client.py b/supabase_py/lib/auth_client.py deleted file mode 100644 index b4ef411b..00000000 --- a/supabase_py/lib/auth_client.py +++ /dev/null @@ -1,26 +0,0 @@ -from typing import Any, Dict, Optional - -import gotrue - - -class SupabaseAuthClient(gotrue.Client): - """SupabaseAuthClient""" - - def __init__( - self, - url: str, - detect_session_in_url: bool = False, - auto_refresh_token: bool = False, - persist_session: bool = False, - local_storage: Optional[Dict[str, Any]] = None, - headers: Dict[str, str] = {}, - ): - """Instanciate SupabaseAuthClient instance.""" - super().__init__( - url=url, - headers=headers, - detect_session_in_url=detect_session_in_url, - auto_refresh_token=auto_refresh_token, - persist_session=persist_session, - local_storage=local_storage, - ) diff --git a/supabase_py/lib/query_builder.py b/supabase_py/lib/query_builder.py deleted file mode 100644 index 4677db22..00000000 --- a/supabase_py/lib/query_builder.py +++ /dev/null @@ -1,94 +0,0 @@ -from typing import Any, Dict - -import requests -from httpx import AsyncClient -from postgrest_py.client import PostgrestClient -from postgrest_py.request_builder import QueryRequestBuilder - -from .realtime_client import SupabaseRealtimeClient - - -def _execute_monkey_patch(self) -> Dict[str, Any]: - """Temporary method to enable syncronous client code.""" - method: str = self.http_method.lower() - additional_kwargs: Dict[str, Any] = {} - if method == "get": - func = requests.get - elif method == "post": - func = requests.post - # Additionally requires the json body (e.g on insert, self.json==row). - additional_kwargs = {"json": self.json} - elif method == "put": - func = requests.put - elif method == "patch": - func = requests.patch - elif method == "delete": - func = requests.delete - else: - raise NotImplementedError(f"Method '{method}' not recognised.") - url: str = str(self.session.base_url).rstrip("/") - query: str = str(self.session.params) - response = func(f"{url}?{query}", headers=self.session.headers, **additional_kwargs) - return { - "data": response.json(), - "status_code": response.status_code, - } - - -# NOTE(fedden): Here we monkey patch the otherwise async method and use the -# requests module instead. Hopefully cleans things up a little -# for the user as they are now not bound to async methods. -QueryRequestBuilder.execute = _execute_monkey_patch - - -class SupabaseQueryBuilder(PostgrestClient): - def __init__(self, url, headers, schema, realtime, table): - """ - Subscribe to realtime changes in your database. - - Parameters - ---------- - url - Base URL of the Supabase Instance that the client library is acting on - headers - authentication/authorization headers which are passed in. - schema - schema of table that we are building queries for - realtime - realtime-py client - table - Name of table to look out for operations on - Returns - ------- - None - """ - super().__init__(base_url=url) - headers = { - "Accept": "application/json", - "Content-Type": "application/json", - "Accept-Profile": schema, - "Content-Profile": schema, - **headers, - } - self.session = AsyncClient(base_url=url, headers=headers) - # self._subscription = SupabaseRealtimeClient(realtime, schema, table) - # self._realtime = realtime - - def on(self, event, callback): - """Subscribe to realtime changes in your database. - - Parameters - ---------- - event - the event which we are looking out for. - callback - function to be execute when the event is received - - Returns - ------- - SupabaseRealtimeClient - Returns an instance of a SupabaseRealtimeClient to allow for chaining. - """ - if not self._realtime.connected: - self._realtime.connect() - return self._subscription.on(event, callback) diff --git a/supabase_py/lib/realtime_client.py b/supabase_py/lib/realtime_client.py deleted file mode 100644 index b89f8542..00000000 --- a/supabase_py/lib/realtime_client.py +++ /dev/null @@ -1,51 +0,0 @@ -from typing import Any, Callable - -from realtime_py.connection import Socket -from realtime_py.transformers import convert_change_data - - -class SupabaseRealtimeClient: - def __init__(self, socket: Socket, schema: str, table_name: str): - topic = ( - f"realtime:{schema}" - if table_name == "*" - else f"realtime:{schema}:{table_name}" - ) - self.subscription = socket.set_channel(topic) - - def get_payload_records(self, payload: Any): - records = {"new": {}, "old": {}} - if payload.type == "INSERT" or payload.type == "UPDATE": - records.new = payload.record - convert_change_data(payload.columns, payload.record) - if payload.type == "UPDATE" or payload.type == "DELETE": - records.old = payload.record - convert_change_data(payload.columns, payload.old_record) - return records - - def on(self, event, callback: Callable[..., Any]): - def cb(payload): - enriched_payload = { - "schema": payload.schema, - "table": payload.table, - "commit_timestamp": payload.commit_timestamp, - "event_type": payload.type, - "new": {}, - "old": {}, - } - enriched_payload = {**enriched_payload, **self.get_payload_records(payload)} - callback(enriched_payload) - - self.subscription.join().on(event, cb) - return self - - def subscribe(self, callback: Callable[..., Any]): - # TODO: Handle state change callbacks for error and close - self.subscription.join().on("ok", callback("SUBSCRIBED")) - self.subscription.join().on( - "error", lambda x: callback("SUBSCRIPTION_ERROR", x) - ) - self.subscription.join().on( - "timeout", lambda: callback("RETRYING_AFTER_TIMEOUT") - ) - return self.subscription diff --git a/supabase_py/request_builder.py b/supabase_py/request_builder.py deleted file mode 100644 index 1b51be55..00000000 --- a/supabase_py/request_builder.py +++ /dev/null @@ -1,7 +0,0 @@ -from httpx import AsyncClient -from postgrest_py.request_builder import RequestBuilder - - -class SupabaseRequestBuilder(RequestBuilder): - def __init__(self, session: AsyncClient, path: str): - super().__init__(session, path) diff --git a/test.ps1 b/test.ps1 new file mode 100644 index 00000000..e2dd982b --- /dev/null +++ b/test.ps1 @@ -0,0 +1,5 @@ +powershell -Command { + poetry install; + poetry run pytest --cov=./ --cov-report=xml --cov-report=html -vv; + poetry run pre-commit run --all-files; +} diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/_async/test_client.py b/tests/_async/test_client.py new file mode 100644 index 00000000..ad7f913a --- /dev/null +++ b/tests/_async/test_client.py @@ -0,0 +1,86 @@ +import os +from unittest.mock import AsyncMock, MagicMock + +from supabase import AClient, ASupabaseException, create_async_client + + +async def test_incorrect_values_dont_instantiate_client() -> None: + """Ensure we can't instantiate client with invalid values.""" + try: + client: AClient = create_async_client(None, None) + except ASupabaseException: + pass + + +async def test_supabase_exception() -> None: + try: + raise ASupabaseException("err") + except ASupabaseException: + pass + + +async def test_postgrest_client() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = await create_async_client(url, key) + assert client.table("sample") + + +async def test_rpc_client() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = await create_async_client(url, key) + assert client.rpc("test_fn") + + +async def test_function_initialization() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = await create_async_client(url, key) + assert client.functions + + +async def test_schema_update() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = await create_async_client(url, key) + assert client.postgrest + assert client.schema("new_schema") + + +async def test_updates_the_authorization_header_on_auth_events() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = await create_async_client(url, key) + + assert client.options.headers.get("apiKey") == key + assert client.options.headers.get("Authorization") == f"Bearer {key}" + + mock_session = MagicMock(access_token="secretuserjwt") + realtime_mock = AsyncMock() + client.realtime = realtime_mock + + client._listen_to_auth_events("SIGNED_IN", mock_session) + + updated_authorization = f"Bearer {mock_session.access_token}" + + assert client.options.headers.get("apiKey") == key + assert client.options.headers.get("Authorization") == updated_authorization + + assert client.postgrest.session.headers.get("apiKey") == key + assert ( + client.postgrest.session.headers.get("Authorization") == updated_authorization + ) + + assert client.auth._headers.get("apiKey") == key + assert client.auth._headers.get("Authorization") == updated_authorization + + assert client.storage.session.headers.get("apiKey") == key + assert client.storage.session.headers.get("Authorization") == updated_authorization + + realtime_mock.set_auth.assert_called_once_with(mock_session.access_token) diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 00000000..0f616ade --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,21 @@ +from __future__ import annotations + +import os + +import pytest +from dotenv import load_dotenv + +from supabase import Client, create_client + + +def pytest_configure(config) -> None: + load_dotenv(dotenv_path="tests/tests.env") + + +@pytest.fixture(scope="session") +def supabase() -> Client: + url = os.environ.get("SUPABASE_TEST_URL") + assert url is not None, "Must provide SUPABASE_TEST_URL environment variable" + key = os.environ.get("SUPABASE_TEST_KEY") + assert key is not None, "Must provide SUPABASE_TEST_KEY environment variable" + return create_client(url, key) diff --git a/tests/test_client.py b/tests/test_client.py index 1cde4110..d8f0be0c 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,96 +1,121 @@ +from __future__ import annotations + import os -import random -import string -from typing import Any, Dict +from typing import Any +from unittest.mock import MagicMock import pytest - -def _random_string(length: int = 10) -> str: - """Generate random string.""" - return "".join(random.choices(string.ascii_uppercase + string.digits, k=length)) - - -def _assert_authenticated_user(data: Dict[str, Any]): - """Raise assertion error if user is not logged in correctly.""" - assert "access_token" in data - assert "refresh_token" in data - assert data.get("status_code") == 200 - user = data.get("user") - assert user is not None - assert user.get("id") is not None - assert user.get("aud") == "authenticated" +from supabase import Client, ClientOptions, SupabaseException, create_client @pytest.mark.xfail( - reason="None of these values should be able to instanciate a client object" + reason="None of these values should be able to instantiate a client object" ) @pytest.mark.parametrize("url", ["", None, "valeefgpoqwjgpj", 139, -1, {}, []]) @pytest.mark.parametrize("key", ["", None, "valeefgpoqwjgpj", 139, -1, {}, []]) -def test_incorrect_values_dont_instanciate_client(url: Any, key: Any): - """Ensure we can't instanciate client with nonesense values.""" - from supabase_py import create_client, Client - - _: Client = create_client(url, key) - - -def test_client_auth(): - """Ensure we can create an auth user, and login with it.""" - from supabase_py import create_client, Client - - url: str = os.environ.get("SUPABASE_TEST_URL") - key: str = os.environ.get("SUPABASE_TEST_KEY") - supabase: Client = create_client(url, key) - # Create a random user login email and password. - random_email: str = f"{_random_string(10)}@supamail.com" - random_password: str = _random_string(20) - # Sign up (and sign in). - user = supabase.auth.sign_up(email=random_email, password=random_password) - _assert_authenticated_user(user) - # Sign out. - supabase.auth.sign_out() - assert supabase.auth.user() is None - assert supabase.auth.session() is None - # Sign in (explicitly this time). - user = supabase.auth.sign_in(email=random_email, password=random_password) - _assert_authenticated_user(user) - - -def test_client_select(): - """Ensure we can select data from a table.""" - from supabase_py import create_client, Client - - url: str = os.environ.get("SUPABASE_TEST_URL") - key: str = os.environ.get("SUPABASE_TEST_KEY") - supabase: Client = create_client(url, key) - # TODO(fedden): Add this set back in (and expand on it) when postgrest and - # realtime libs are working. - data = supabase.table("countries").select("*").execute() - # Assert we pulled real data. - assert len(data.get("data", [])) > 0 - - -def test_client_insert(): - """Ensure we can select data from a table.""" - from supabase_py import create_client, Client - - url: str = os.environ.get("SUPABASE_TEST_URL") - key: str = os.environ.get("SUPABASE_TEST_KEY") - supabase: Client = create_client(url, key) - data = supabase.table("countries").select("*").execute() - # Assert we pulled real data. - previous_length: int = len(data.get("data", [])) - new_row = { - "name": "test name", - "iso2": "test iso2", - "iso3": "test iso3", - "local_name": "test local name", - "continent": None, - } - result = supabase.table("countries").insert(new_row).execute() - data = supabase.table("countries").select("*").execute() - current_length: int = len(data.get("data", [])) - # Ensure we've added a row remotely. - assert current_length == previous_length + 1 - # Check returned result for insert was valid. - assert result.get("status_code", 400) == 201 +def test_incorrect_values_dont_instantiate_client(url: Any, key: Any) -> None: + """Ensure we can't instantiate client with invalid values.""" + try: + _: Client = create_client(url, key) + except SupabaseException as e: + pass + + +def test_function_initialization() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = create_client(url, key) + assert client.functions + + +def test_postgrest_schema() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = create_client(url, key) + assert client.postgrest + assert client.postgrest.schema("new_schema") + + +def test_rpc_client() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = create_client(url, key) + assert client.rpc("test_fn") + + +def test_uses_key_as_authorization_header_by_default() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = create_client(url, key) + + assert client.options.headers.get("apiKey") == key + assert client.options.headers.get("Authorization") == f"Bearer {key}" + + assert client.postgrest.session.headers.get("apiKey") == key + assert client.postgrest.session.headers.get("Authorization") == f"Bearer {key}" + + assert client.auth._headers.get("apiKey") == key + assert client.auth._headers.get("Authorization") == f"Bearer {key}" + + assert client.storage.session.headers.get("apiKey") == key + assert client.storage.session.headers.get("Authorization") == f"Bearer {key}" + + +def test_supports_setting_a_global_authorization_header() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + authorization = f"Bearer secretuserjwt" + + options = ClientOptions(headers={"Authorization": authorization}) + + client = create_client(url, key, options) + + assert client.options.headers.get("apiKey") == key + assert client.options.headers.get("Authorization") == authorization + + assert client.postgrest.session.headers.get("apiKey") == key + assert client.postgrest.session.headers.get("Authorization") == authorization + + assert client.auth._headers.get("apiKey") == key + assert client.auth._headers.get("Authorization") == authorization + + assert client.storage.session.headers.get("apiKey") == key + assert client.storage.session.headers.get("Authorization") == authorization + + +def test_updates_the_authorization_header_on_auth_events() -> None: + url = os.environ.get("SUPABASE_TEST_URL") + key = os.environ.get("SUPABASE_TEST_KEY") + + client = create_client(url, key) + + assert client.options.headers.get("apiKey") == key + assert client.options.headers.get("Authorization") == f"Bearer {key}" + + mock_session = MagicMock(access_token="secretuserjwt") + realtime_mock = MagicMock() + client.realtime = realtime_mock + + client._listen_to_auth_events("SIGNED_IN", mock_session) + + updated_authorization = f"Bearer {mock_session.access_token}" + + assert client.options.headers.get("apiKey") == key + assert client.options.headers.get("Authorization") == updated_authorization + + assert client.postgrest.session.headers.get("apiKey") == key + assert ( + client.postgrest.session.headers.get("Authorization") == updated_authorization + ) + + assert client.auth._headers.get("apiKey") == key + assert client.auth._headers.get("Authorization") == updated_authorization + + assert client.storage.session.headers.get("apiKey") == key + assert client.storage.session.headers.get("Authorization") == updated_authorization diff --git a/tests/test_client_options.py b/tests/test_client_options.py new file mode 100644 index 00000000..67d59a29 --- /dev/null +++ b/tests/test_client_options.py @@ -0,0 +1,69 @@ +from gotrue import SyncMemoryStorage + +from supabase import AClientOptions, ClientOptions + + +class TestClientOptions: + + def test_replace_returns_updated_aclient_options(self): + storage = SyncMemoryStorage() + storage.set_item("key", "value") + options = AClientOptions( + schema="schema", + headers={"key": "value"}, + auto_refresh_token=False, + persist_session=False, + storage=storage, + realtime={"key": "value"}, + ) + + actual = options.replace(schema="new schema") + expected = AClientOptions( + schema="new schema", + headers={"key": "value"}, + auto_refresh_token=False, + persist_session=False, + storage=storage, + realtime={"key": "value"}, + ) + + assert actual == expected + + def test_replace_returns_updated_options(self): + storage = SyncMemoryStorage() + storage.set_item("key", "value") + options = ClientOptions( + schema="schema", + headers={"key": "value"}, + auto_refresh_token=False, + persist_session=False, + storage=storage, + realtime={"key": "value"}, + ) + + actual = options.replace(schema="new schema") + assert actual + expected = ClientOptions( + schema="new schema", + headers={"key": "value"}, + auto_refresh_token=False, + persist_session=False, + storage=storage, + realtime={"key": "value"}, + ) + + assert actual == expected + + def test_replace_updates_only_new_options(self): + # Arrange + storage = SyncMemoryStorage() + storage.set_item("key", "value") + options = ClientOptions(storage=storage) + new_options = options.replace() + + # Act + new_options.storage.set_item("key", "new_value") + + # Assert + assert options.storage.get_item("key") == "new_value" + assert new_options.storage.get_item("key") == "new_value" diff --git a/tests/test_dummy.py b/tests/test_dummy.py deleted file mode 100644 index c9fa8ef5..00000000 --- a/tests/test_dummy.py +++ /dev/null @@ -1,20 +0,0 @@ -import pytest - -import sys -print(sys.path) - -import supabase_py - -""" -Convert this flow into a test -client = supabase_py.Client("", "") -client.auth.sign_up({"email": "anemail@gmail.com", "password": "apassword"}) -""" - -def test_dummy(): - # Test auth component - assert True == True - -def test_client_initialziation(): - client = supabase_py.Client("http://testwebsite.com", "atestapi") - diff --git a/tests/test_function_configuration.py b/tests/test_function_configuration.py new file mode 100644 index 00000000..0e451d03 --- /dev/null +++ b/tests/test_function_configuration.py @@ -0,0 +1,14 @@ +import supabase + + +def test_functions_client_initialization() -> None: + ref = "ooqqmozurnggtljmjkii" + url = f"https://{ref}.supabase.co" + # Sample JWT Key + key = "xxxxxxxxxxxxxx.xxxxxxxxxxxxxxx.xxxxxxxxxxxxxxx" + sp = supabase.Client(url, key) + assert sp.functions_url == f"https://{ref}.supabase.co/functions/v1" + + url = "https://localhost:54322" + sp_local = supabase.Client(url, key) + assert sp_local.functions_url == f"{url}/functions/v1" diff --git a/tests/test_realtime.py b/tests/test_realtime.py new file mode 100644 index 00000000..d137b1fe --- /dev/null +++ b/tests/test_realtime.py @@ -0,0 +1,27 @@ +import supabase + + +def test_realtime_client_initialization() -> None: + ref = "ooqqmozurnggtljmjkii" + url = f"https://{ref}.supabase.co" + # Sample JWT Key + key = "xxxxxxxxxxxxxx.xxxxxxxxxxxxxxx.xxxxxxxxxxxxxxx" + sp = supabase.Client(url, key) + assert sp.realtime_url == f"wss://{ref}.supabase.co/realtime/v1" + + url = "http://localhost:54322" + sp_local = supabase.Client(url, key) + assert sp_local.realtime_url == f"ws://localhost:54322/realtime/v1" + + +def test_sync_realtime(): + ref = "ooqqmozurnggtljmjkii" + url = f"https://{ref}.supabase.co" + # Sample JWT Key + key = "xxxxxxxxxxxxxx.xxxxxxxxxxxxxxx.xxxxxxxxxxxxxxx" + sp = supabase.Client(url, key) + + try: + channel = sp.realtime.channel("test") + except NotImplementedError: + pass diff --git a/tests/tests.env b/tests/tests.env new file mode 100644 index 00000000..ce0af74a --- /dev/null +++ b/tests/tests.env @@ -0,0 +1,2 @@ +SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8" +SUPABASE_TEST_URL="https://fakesupabaseref.supabase.co"