From 8e50e6120e852278561135b258e9582ca592e312 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 7 Apr 2021 23:10:44 +0800
Subject: [PATCH 001/737] Add test script, update README
---
README.md | 11 ++++++-----
test.sh | 4 ++++
2 files changed, 10 insertions(+), 5 deletions(-)
create mode 100755 test.sh
diff --git a/README.md b/README.md
index 901a2d10..cf5cae41 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,11 @@
# supabase-py
-[](https://gotrue-py.readthedocs.io/en/latest/?badge=latest)
+[](https://gotrue-py.readthedocs.io/en/latest/?badge=latest)
Supabase client for Python. This mirrors the design of [supabase-js](https://github.com/supabase/supabase-js/blob/master/README.md)
## 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
@@ -64,12 +65,10 @@ Currently the test suites are in a state of flux. We are expanding our clients t
-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
+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
-SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxMjYwOTMyMiwiZXhwIjoxOTI4MTg1MzIyfQ.XL9W5I_VRQ4iyQHVQmjG0BkwRfx6eVyYB3uAKcesukg" \
-SUPABASE_TEST_URL="https://tfsatoopsijgjhrqplra.supabase.co" \
-pytest -x
+./test.sh
```
### See issues for what to work on
@@ -115,6 +114,7 @@ user = supabase.auth.sign_in(email=random_email, password=random_password)
## Managing Data
#### Insertion of Data
+
```python
from supabase_py import create_client, Client
@@ -126,6 +126,7 @@ assert len(data.get("data", [])) > 0
```
#### Selection of Data
+
```python
from supabase_py import create_client, Client
diff --git a/test.sh b/test.sh
new file mode 100755
index 00000000..f7825d6c
--- /dev/null
+++ b/test.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxMjYwOTMyMiwiZXhwIjoxOTI4MTg1MzIyfQ.XL9W5I_VRQ4iyQHVQmjG0BkwRfx6eVyYB3uAKcesukg" \
+SUPABASE_TEST_URL="https://tfsatoopsijgjhrqplra.supabase.co" \
+pytest -x
From f468624041d133ea13a266d53ed4453391bb1250 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 7 Apr 2021 23:06:28 +0800
Subject: [PATCH 002/737] fix logic errors
---
supabase_py/lib/realtime_client.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/supabase_py/lib/realtime_client.py b/supabase_py/lib/realtime_client.py
index b89f8542..458e5947 100644
--- a/supabase_py/lib/realtime_client.py
+++ b/supabase_py/lib/realtime_client.py
@@ -14,12 +14,12 @@ def __init__(self, socket: Socket, schema: str, table_name: str):
self.subscription = socket.set_channel(topic)
def get_payload_records(self, payload: Any):
- records = {"new": {}, "old": {}}
+ records: dict = {"new": {}, "old": {}}
if payload.type == "INSERT" or payload.type == "UPDATE":
- records.new = payload.record
+ records["new"] = payload.record
convert_change_data(payload.columns, payload.record)
if payload.type == "UPDATE" or payload.type == "DELETE":
- records.old = payload.record
+ records["old"] = payload.record
convert_change_data(payload.columns, payload.old_record)
return records
From 723c96a7c35e0632932f4496284eca74fefab595 Mon Sep 17 00:00:00 2001
From: Tevfik
Date: Thu, 8 Apr 2021 09:23:50 +0200
Subject: [PATCH 003/737] Update README.md
Insertion of data code was not correct due to a copy paste error.
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 901a2d10..224aa74a 100644
--- a/README.md
+++ b/README.md
@@ -121,7 +121,7 @@ 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()
+data = supabase.table("countries").insert({"name":"Germany"}).execute()
assert len(data.get("data", [])) > 0
```
From 06a2a33489d593fcc21b1b8765ce1388934d460b Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 10 Apr 2021 21:29:11 +0800
Subject: [PATCH 004/737] Update CI to use test script
---
.github/workflows/ci-python.yml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/.github/workflows/ci-python.yml b/.github/workflows/ci-python.yml
index 077eef78..e58abf22 100644
--- a/.github/workflows/ci-python.yml
+++ b/.github/workflows/ci-python.yml
@@ -28,5 +28,4 @@ jobs:
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
+ run: ./test.sh
From e3fb34acc9f25dbf43781deb2de0091236f17a9c Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 10 Apr 2021 21:32:05 +0800
Subject: [PATCH 005/737] change test script to use poetry
---
test.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test.sh b/test.sh
index f7825d6c..85f94056 100755
--- a/test.sh
+++ b/test.sh
@@ -1,4 +1,4 @@
#!/bin/sh
SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxMjYwOTMyMiwiZXhwIjoxOTI4MTg1MzIyfQ.XL9W5I_VRQ4iyQHVQmjG0BkwRfx6eVyYB3uAKcesukg" \
SUPABASE_TEST_URL="https://tfsatoopsijgjhrqplra.supabase.co" \
-pytest -x
+poetry run pytest
From 268bfe507f356bd63819101cf240d88ed473c8e1 Mon Sep 17 00:00:00 2001
From: Ant Wilson
Date: Tue, 4 May 2021 13:38:57 +0800
Subject: [PATCH 006/737] add python version info for pip
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index d6c7f544..45e6f8b1 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ We are currently in Public Alpha. Watch "releases" of this repo to get notified
#### PyPi installation
-Now install the package.
+Now install the package. (for > Python 3.7)
```bash
pip install supabase-py
From e1c3b900e5ad476fe858bec72e08aab08e6b2648 Mon Sep 17 00:00:00 2001
From: Oliver Rice
Date: Wed, 19 May 2021 07:38:18 -0500
Subject: [PATCH 007/737] reduce test duplication via supabase client in pytest
fixture
---
tests/conftest.py | 15 +++++++++++++++
tests/test_client.py | 34 ++++++++++++----------------------
tests/test_dummy.py | 6 ++----
3 files changed, 29 insertions(+), 26 deletions(-)
create mode 100644 tests/conftest.py
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 00000000..05dc4b19
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,15 @@
+from __future__ import annotations
+
+import os
+
+import pytest
+
+from supabase_py import Client, create_client
+
+
+@pytest.fixture(scope="function")
+def supabase() -> Client:
+ url: str = os.environ.get("SUPABASE_TEST_URL")
+ key: str = os.environ.get("SUPABASE_TEST_KEY")
+ supabase: Client = create_client(url, key)
+ return supabase
diff --git a/tests/test_client.py b/tests/test_client.py
index 1cde4110..61ae5bcb 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -1,17 +1,22 @@
+from __future__ import annotations
+
import os
import random
import string
-from typing import Any, Dict
+from typing import TYPE_CHECKING, Any, Dict
import pytest
+if TYPE_CHECKING:
+ from supabase_py import Client, create_client
+
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]):
+def _assert_authenticated_user(data: Dict[str, Any]) -> None:
"""Raise assertion error if user is not logged in correctly."""
assert "access_token" in data
assert "refresh_token" in data
@@ -27,20 +32,15 @@ def _assert_authenticated_user(data: Dict[str, Any]):
)
@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):
+def test_incorrect_values_dont_instanciate_client(url: Any, key: Any) -> None:
"""Ensure we can't instanciate client with nonesense values."""
- from supabase_py import create_client, Client
+ from supabase_py import Client, create_client
_: Client = create_client(url, key)
-def test_client_auth():
+def test_client_auth(supabase: Client) -> None:
"""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)
@@ -56,13 +56,8 @@ def test_client_auth():
_assert_authenticated_user(user)
-def test_client_select():
+def test_client_select(supabase: Client) -> None:
"""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()
@@ -70,13 +65,8 @@ def test_client_select():
assert len(data.get("data", [])) > 0
-def test_client_insert():
+def test_client_insert(supabase: Client) -> None:
"""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", []))
diff --git a/tests/test_dummy.py b/tests/test_dummy.py
index c9fa8ef5..597b8184 100644
--- a/tests/test_dummy.py
+++ b/tests/test_dummy.py
@@ -1,8 +1,5 @@
import pytest
-import sys
-print(sys.path)
-
import supabase_py
"""
@@ -11,10 +8,11 @@
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")
-
From 0cf02da5cdc4aa25827343f1a0431e1cc0dfb779 Mon Sep 17 00:00:00 2001
From: Oliver Rice
Date: Wed, 19 May 2021 07:45:58 -0500
Subject: [PATCH 008/737] session scope for pytest client fixture
---
tests/conftest.py | 2 +-
tests/test_dummy.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/conftest.py b/tests/conftest.py
index 05dc4b19..a6d3c3be 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -7,7 +7,7 @@
from supabase_py import Client, create_client
-@pytest.fixture(scope="function")
+@pytest.fixture(scope="session")
def supabase() -> Client:
url: str = os.environ.get("SUPABASE_TEST_URL")
key: str = os.environ.get("SUPABASE_TEST_KEY")
diff --git a/tests/test_dummy.py b/tests/test_dummy.py
index 597b8184..677cc97f 100644
--- a/tests/test_dummy.py
+++ b/tests/test_dummy.py
@@ -9,10 +9,10 @@
"""
-def test_dummy():
+def test_dummy() -> None:
# Test auth component
assert True == True
-def test_client_initialziation():
+def test_client_initialziation() -> None:
client = supabase_py.Client("http://testwebsite.com", "atestapi")
From 6bc59458f52fa1af68fc100109fcd7cffb427177 Mon Sep 17 00:00:00 2001
From: Oliver Rice
Date: Wed, 19 May 2021 07:52:36 -0500
Subject: [PATCH 009/737] remove unused import
---
tests/test_client.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/test_client.py b/tests/test_client.py
index 61ae5bcb..54fee7ac 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -1,6 +1,5 @@
from __future__ import annotations
-import os
import random
import string
from typing import TYPE_CHECKING, Any, Dict
From ad53879450e88837d2fd71932c7f8dedd0328d94 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 22 May 2021 12:41:56 +0800
Subject: [PATCH 010/737] feature:add storage bucket client
---
supabase_py/client.py | 9 +-
supabase_py/lib/storage/storage_bucket_api.py | 98 +++++++++++++++++++
supabase_py/lib/supabase_storage_client.py | 26 +++++
tests/test_client.py | 22 +++++
tests/test_dummy.py | 4 +-
5 files changed, 154 insertions(+), 5 deletions(-)
create mode 100644 supabase_py/lib/storage/storage_bucket_api.py
create mode 100644 supabase_py/lib/supabase_storage_client.py
diff --git a/supabase_py/client.py b/supabase_py/client.py
index 83e698d3..9965c1ba 100644
--- a/supabase_py/client.py
+++ b/supabase_py/client.py
@@ -55,10 +55,11 @@ def __init__(
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.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,
diff --git a/supabase_py/lib/storage/storage_bucket_api.py b/supabase_py/lib/storage/storage_bucket_api.py
new file mode 100644
index 00000000..eecd6ccc
--- /dev/null
+++ b/supabase_py/lib/storage/storage_bucket_api.py
@@ -0,0 +1,98 @@
+from typing import Dict, Any
+
+import requests
+from requests import HTTPError
+
+
+class StorageBucketAPI:
+ """This class abstracts access to the endpoint to the Get, List, Empty, and Delete operations on a bucket"""
+
+ def __init__(self, url, headers):
+ self.url = url
+ self.headers = headers
+
+ def list_buckets(self) -> Dict[str, Any]:
+ """Retrieves the details of all storage buckets within an existing product."""
+ try:
+ response = requests.get(f"{self.url}/bucket", headers=self.headers)
+ response.raise_for_status()
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ print(f"Other error occurred: {err}") # Python 3.6
+ else:
+ return response.json()
+
+ def get_bucket(self, id: str) -> Dict[str, Any]:
+ """Retrieves the details of an existing storage bucket.
+
+ Parameters
+ ----------
+ id
+ The unique identifier of the bucket you would like to retrieve.
+ """
+ try:
+ response = requests.get(f"{self.url}/bucket/{id}", headers=self.headers)
+ response.raise_for_status()
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ print(f"Other error occurred: {err}") # Python 3.6
+ else:
+ return response.json()
+
+ def create_bucket(self, id: str) -> Dict[str, Any]:
+ """Creates a new storage bucket.
+
+ Parameters
+ ----------
+ id
+ A unique identifier for the bucket you are creating.
+ """
+ try:
+ response = requests.post(f"{self.url}/bucket", data={"id": id}, headers=self.headers)
+ response.raise_for_status()
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ print(f"Other error occurred: {err}") # Python 3.6
+ else:
+ return response.json()
+
+ def empty_bucket(self, id: str) -> Dict[str, Any]:
+ """Removes all objects inside a single bucket.
+
+ Parameters
+ ----------
+ id
+ The unique identifier of the bucket you would like to empty.
+ """
+ try:
+ response = requests.post(f"{self.url}/bucket/{id}/empty", data={}, headers=self.headers)
+ response.raise_for_status()
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ print(f"Other error occurred: {err}") # Python 3.6
+ else:
+ return response.json()
+
+ def delete_bucket(self, id: str) -> Dict[str, Any]:
+ """Deletes an existing bucket. Note that you cannot delete buckets with existing objects inside. You must first
+ `empty()` the bucket.
+
+ Parameters
+ ----------
+ id
+ The unique identifier of the bucket you would like to delete.
+ """
+ try:
+ response = requests.delete(f"{self.url}/bucket/{id}", data={}, headers=self.headers)
+
+ response.raise_for_status()
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ print(f"Other error occurred: {err}") # Python 3.6
+ else:
+ return response.json()
diff --git a/supabase_py/lib/supabase_storage_client.py b/supabase_py/lib/supabase_storage_client.py
new file mode 100644
index 00000000..99805676
--- /dev/null
+++ b/supabase_py/lib/supabase_storage_client.py
@@ -0,0 +1,26 @@
+from supabase_py.lib.storage.storage_bucket_api import StorageBucketAPI
+from supabase_py.lib.storage.storage_file_api import StorageFileApi
+
+
+class SupabaseStorageClient(StorageBucketAPI):
+ """
+ Manage the storage bucket and files
+
+ Examples
+ --------
+ >>> url = storage_file.create_signed_url("poll3o/test2.txt", 80) # signed url
+ >>> loop.run_until_complete(storage_file.download("poll3o/test2.txt")) #upload or download
+ >>> loop.run_until_complete(storage_file.upload("poll3o/test2.txt","path_file_upload"))
+ >>> list_buckets = storage.list_buckets()
+ >>> list_files = storage_file.list("pollo")
+ """
+
+ def __init__(self, url, headers):
+ super().__init__(url, headers)
+
+ def StorageFileApi(self, id_, replace=False):
+ return StorageFileApi(self.url, self.headers, id_, replace)
+
+ def StorageBucketAPI(self):
+ return StorageBucketAPI(self.url, self.headers)
+
diff --git a/tests/test_client.py b/tests/test_client.py
index 1cde4110..c9437f97 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -94,3 +94,25 @@ def test_client_insert():
assert current_length == previous_length + 1
# Check returned result for insert was valid.
assert result.get("status_code", 400) == 201
+
+
+def test_client_bucket():
+ """Ensure that the storage bucket operations work"""
+ from supabase_py import create_client, Client
+
+ url: str = os.environ.get("SUPABASE_TEST_URL")
+ key: str = os.environ.get("SUPABASE_TEST_KEY")
+ TEST_BUCKET_NAME = "atestbucket"
+ supabase: Client = create_client(url, key)
+ storage = supabase.storage()
+ storage_bucket = storage.StorageBucketAPI()
+ storage_bucket.create_bucket(TEST_BUCKET_NAME)
+ storage_bucket.list_buckets()
+ storage_bucket.get_bucket(TEST_BUCKET_NAME)
+ storage_bucket.empty_bucket()
+ storage_bucket.delete_bucket(TEST_BUCKET_NAME)
+
+
+
+
+
diff --git a/tests/test_dummy.py b/tests/test_dummy.py
index c9fa8ef5..05941a34 100644
--- a/tests/test_dummy.py
+++ b/tests/test_dummy.py
@@ -1,6 +1,7 @@
import pytest
import sys
+
print(sys.path)
import supabase_py
@@ -11,10 +12,11 @@
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")
-
From 2ff2c61ad357de8b44fa269269c2190dfb64fdc4 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 22 May 2021 17:38:21 +0800
Subject: [PATCH 011/737] Add storage bucket
---
supabase_py/client.py | 24 ++++++++++++++--------
supabase_py/lib/supabase_storage_client.py | 10 ++++-----
2 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/supabase_py/client.py b/supabase_py/client.py
index 9965c1ba..0fd3c2db 100644
--- a/supabase_py/client.py
+++ b/supabase_py/client.py
@@ -2,6 +2,8 @@
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 supabase_py.lib.supabase_storage_client import SupabaseStorageClient
+
from typing import Any, Dict
@@ -19,7 +21,10 @@ class Client:
"""Supabase client class."""
def __init__(
- self, supabase_url: str, supabase_key: str, **options,
+ self,
+ supabase_url: str,
+ supabase_key: str,
+ **options,
):
"""Instantiate the client.
@@ -49,10 +54,13 @@ def __init__(
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.storage_url = f"{supabase_url}/storage/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,
+ 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(
@@ -65,6 +73,10 @@ def __init__(
supabase_key=supabase_key,
)
+ def storage(self):
+ """Create instance of the storage client"""
+ return SupabaseStorageClient(self.storage_url, self._get_auth_headers())
+
def table(self, table_name: str) -> SupabaseQueryBuilder:
"""Perform a table operation.
@@ -134,13 +146,9 @@ def get_subscriptions(self):
return self.realtime.channels
@staticmethod
- def _init_realtime_client(
- realtime_url: str, supabase_key: str
- ) -> SupabaseRealtimeClient:
+ 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}}
- )
+ return SupabaseRealtimeClient(realtime_url, {"params": {"apikey": supabase_key}})
@staticmethod
def _init_supabase_auth_client(
diff --git a/supabase_py/lib/supabase_storage_client.py b/supabase_py/lib/supabase_storage_client.py
index 99805676..82528862 100644
--- a/supabase_py/lib/supabase_storage_client.py
+++ b/supabase_py/lib/supabase_storage_client.py
@@ -1,5 +1,6 @@
from supabase_py.lib.storage.storage_bucket_api import StorageBucketAPI
-from supabase_py.lib.storage.storage_file_api import StorageFileApi
+
+# from supabase_py.lib.storage.storage_file_api import StorageFileApi
class SupabaseStorageClient(StorageBucketAPI):
@@ -18,9 +19,8 @@ class SupabaseStorageClient(StorageBucketAPI):
def __init__(self, url, headers):
super().__init__(url, headers)
- def StorageFileApi(self, id_, replace=False):
- return StorageFileApi(self.url, self.headers, id_, replace)
-
+ # def StorageFileApi(self, id_, replace=False):
+ # return StorageFileApi(self.url, self.headers, id_, replace)
+
def StorageBucketAPI(self):
return StorageBucketAPI(self.url, self.headers)
-
From dd2ebe867fc168b3d27f856a5cef41a8f89ee386 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 22 May 2021 17:43:06 +0800
Subject: [PATCH 012/737] Remove unused comments
---
supabase_py/client.py | 2 +-
supabase_py/lib/supabase_storage_client.py | 2 --
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/supabase_py/client.py b/supabase_py/client.py
index 0fd3c2db..3482727a 100644
--- a/supabase_py/client.py
+++ b/supabase_py/client.py
@@ -67,7 +67,7 @@ def __init__(
# realtime_url=self.realtime_url,
# supabase_key=self.supabase_key,
# )
- # self.realtime = None
+ self.realtime = None
self.postgrest: PostgrestClient = self._init_postgrest_client(
rest_url=self.rest_url,
supabase_key=supabase_key,
diff --git a/supabase_py/lib/supabase_storage_client.py b/supabase_py/lib/supabase_storage_client.py
index 82528862..a3ad1811 100644
--- a/supabase_py/lib/supabase_storage_client.py
+++ b/supabase_py/lib/supabase_storage_client.py
@@ -1,7 +1,5 @@
from supabase_py.lib.storage.storage_bucket_api import StorageBucketAPI
-# from supabase_py.lib.storage.storage_file_api import StorageFileApi
-
class SupabaseStorageClient(StorageBucketAPI):
"""
From c8c31768c2ee0175a06071ff6780c2f55e7dabbd Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 22 May 2021 17:46:49 +0800
Subject: [PATCH 013/737] refactor: update test client
---
tests/test_client.py | 25 ++++++++++---------------
1 file changed, 10 insertions(+), 15 deletions(-)
diff --git a/tests/test_client.py b/tests/test_client.py
index c9437f97..bc42382f 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -22,9 +22,7 @@ def _assert_authenticated_user(data: Dict[str, Any]):
assert user.get("aud") == "authenticated"
-@pytest.mark.xfail(
- reason="None of these values should be able to instanciate a client object"
-)
+@pytest.mark.xfail(reason="None of these values should be able to instanciate 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):
@@ -97,6 +95,7 @@ def test_client_insert():
def test_client_bucket():
+
"""Ensure that the storage bucket operations work"""
from supabase_py import create_client, Client
@@ -104,15 +103,11 @@ def test_client_bucket():
key: str = os.environ.get("SUPABASE_TEST_KEY")
TEST_BUCKET_NAME = "atestbucket"
supabase: Client = create_client(url, key)
- storage = supabase.storage()
- storage_bucket = storage.StorageBucketAPI()
- storage_bucket.create_bucket(TEST_BUCKET_NAME)
- storage_bucket.list_buckets()
- storage_bucket.get_bucket(TEST_BUCKET_NAME)
- storage_bucket.empty_bucket()
- storage_bucket.delete_bucket(TEST_BUCKET_NAME)
-
-
-
-
-
+ # TODO[Joel] - Reinstate once permissions on test instance are updated
+ # storage = supabase.storage()
+ # storage_bucket = storage.StorageBucketAPI()
+ # storage_bucket.create_bucket(TEST_BUCKET_NAME)
+ # storage_bucket.list_buckets()
+ # storage_bucket.get_bucket(TEST_BUCKET_NAME)
+ # storage_bucket.empty_bucket(TEST_BUCKET_NAME)
+ # storage_bucket.delete_bucket(TEST_BUCKET_NAME)
From 17c1d6a86adf0d92a90eba91ed78e2faab600e40 Mon Sep 17 00:00:00 2001
From: Lee Yi Jie Joel
Date: Sun, 23 May 2021 00:24:09 +0800
Subject: [PATCH 014/737] refactor: update test client to use fixture
---
tests/test_client.py | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/tests/test_client.py b/tests/test_client.py
index 01031a90..0bff7e80 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -83,15 +83,10 @@ def test_client_insert(supabase: Client) -> None:
assert result.get("status_code", 400) == 201
-def test_client_bucket():
+def test_client_bucket(supabase: Client) -> None:
"""Ensure that the storage bucket operations work"""
- from supabase_py import create_client, Client
-
- url: str = os.environ.get("SUPABASE_TEST_URL")
- key: str = os.environ.get("SUPABASE_TEST_KEY")
TEST_BUCKET_NAME = "atestbucket"
- supabase: Client = create_client(url, key)
# TODO[Joel] - Reinstate once permissions on test instance are updated
# storage = supabase.storage()
# storage_bucket = storage.StorageBucketAPI()
From f980db111125d961ba905b8a65d3b1d0dd3c998c Mon Sep 17 00:00:00 2001
From: Oliver Rice
Date: Sat, 22 May 2021 13:09:29 -0500
Subject: [PATCH 015/737] enable pre-commit hooks for isort, autoflake, and
black base 3.7
---
.github/workflows/pre-commit_hooks.yaml | 25 +++++++++++++++++++++++
.pre-commit-config.yaml | 27 +++++++++++++++++++++++++
pyproject.toml | 1 +
3 files changed, 53 insertions(+)
create mode 100644 .github/workflows/pre-commit_hooks.yaml
create mode 100644 .pre-commit-config.yaml
diff --git a/.github/workflows/pre-commit_hooks.yaml b/.github/workflows/pre-commit_hooks.yaml
new file mode 100644
index 00000000..656d87f4
--- /dev/null
+++ b/.github/workflows/pre-commit_hooks.yaml
@@ -0,0 +1,25 @@
+name: pre-commit
+
+on: [push]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: checkout
+ uses: actions/checkout@v2
+
+ - name: setup python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.7
+
+ - name: install pre-commit
+ run: |
+ python -m pip install --upgrade pip
+ pip install pre-commit
+
+ - name: run static analysis
+ run: |
+ pre-commit run --all-files
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 00000000..2d0ecd8a
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,27 @@
+repos:
+
+- repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.0.1
+ hooks:
+ - id: trailing-whitespace
+ - id: check-added-large-files
+ - id: mixed-line-ending
+ args: ['--fix=lf']
+
+- repo: https://github.com/pre-commit/mirrors-isort
+ rev: v5.8.0
+ hooks:
+ - id: isort
+ args: ['--multi-line=3', '--trailing-comma', '--force-grid-wrap=0', '--use-parentheses', '--line-width=88']
+
+- repo: https://github.com/humitos/mirrors-autoflake.git
+ rev: v1.1
+ hooks:
+ - id: autoflake
+ args: ['--in-place', '--remove-all-unused-imports']
+
+- repo: https://github.com/ambv/black
+ rev: 21.5b1
+ hooks:
+ - id: black
+ language_version: python3.7
diff --git a/pyproject.toml b/pyproject.toml
index 01e36615..679d4704 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -14,6 +14,7 @@ pytest = "^6"
requests = "2.25.1"
[tool.poetry.dev-dependencies]
+pre_commit = "^2.1.0"
[build-system]
requires = [
From 77a2234da12c24ecb24c8e8fc1c2f05414daeac7 Mon Sep 17 00:00:00 2001
From: Oliver Rice
Date: Sat, 22 May 2021 13:16:13 -0500
Subject: [PATCH 016/737] apply pre-commit hooks & add __all__ in __init__.py
to prevent autoflake from removing imports
---
supabase_py/__init__.py | 11 ++++-------
supabase_py/client.py | 17 +++++++++++------
supabase_py/lib/__init__.py | 6 +++---
supabase_py/lib/query_builder.py | 2 --
tests/test_client.py | 2 +-
tests/test_dummy.py | 2 --
6 files changed, 19 insertions(+), 21 deletions(-)
diff --git a/supabase_py/__init__.py b/supabase_py/__init__.py
index 7139b52d..d8a42629 100644
--- a/supabase_py/__init__.py
+++ b/supabase_py/__init__.py
@@ -1,9 +1,6 @@
-# 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
-
+from supabase_py import client, lib
+from supabase_py.client import Client, create_client
__version__ = "0.0.2"
+
+__all__ = ["client", "lib", "Client", "create_client"]
diff --git a/supabase_py/client.py b/supabase_py/client.py
index 83e698d3..8bf7bad9 100644
--- a/supabase_py/client.py
+++ b/supabase_py/client.py
@@ -1,10 +1,10 @@
+from typing import Any, Dict
+
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
-
+from supabase_py.lib.realtime_client import SupabaseRealtimeClient
DEFAULT_OPTIONS = {
"schema": "public",
@@ -19,7 +19,10 @@ class Client:
"""Supabase client class."""
def __init__(
- self, supabase_url: str, supabase_key: str, **options,
+ self,
+ supabase_url: str,
+ supabase_key: str,
+ **options,
):
"""Instantiate the client.
@@ -52,7 +55,9 @@ def __init__(
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,
+ 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(
diff --git a/supabase_py/lib/__init__.py b/supabase_py/lib/__init__.py
index 286d8833..5e498c18 100644
--- a/supabase_py/lib/__init__.py
+++ b/supabase_py/lib/__init__.py
@@ -1,3 +1,3 @@
-from . import auth_client
-from . import query_builder
-from . import realtime_client
+from supabase_py.lib import auth_client, query_builder, realtime_client
+
+__all__ = ["auth_client", "query_builder", "realtime_client"]
diff --git a/supabase_py/lib/query_builder.py b/supabase_py/lib/query_builder.py
index 4677db22..843ade5c 100644
--- a/supabase_py/lib/query_builder.py
+++ b/supabase_py/lib/query_builder.py
@@ -5,8 +5,6 @@
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."""
diff --git a/tests/test_client.py b/tests/test_client.py
index 54fee7ac..bd0c92f6 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -7,7 +7,7 @@
import pytest
if TYPE_CHECKING:
- from supabase_py import Client, create_client
+ from supabase_py import Client
def _random_string(length: int = 10) -> str:
diff --git a/tests/test_dummy.py b/tests/test_dummy.py
index 677cc97f..54a1a871 100644
--- a/tests/test_dummy.py
+++ b/tests/test_dummy.py
@@ -1,5 +1,3 @@
-import pytest
-
import supabase_py
"""
From 9897a295136d3cbccb400367d88ace5ea8cd6784 Mon Sep 17 00:00:00 2001
From: Oliver Rice
Date: Sat, 22 May 2021 13:44:34 -0500
Subject: [PATCH 017/737] add badges for test CI and pypi version
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 45e6f8b1..9ffca101 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
# supabase-py
+[](https://github.com/supabase/supabase-py/actions)
+[](https://badge.fury.io/py/supabase-py)
[](https://gotrue-py.readthedocs.io/en/latest/?badge=latest)
Supabase client for Python. This mirrors the design of [supabase-js](https://github.com/supabase/supabase-js/blob/master/README.md)
From 45c2866739bbe20640de21b3b19439c440c750c1 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 26 May 2021 08:38:14 +0800
Subject: [PATCH 018/737] chore: update pre-commit hook
---
.github/workflows/pre-commit_hooks.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/pre-commit_hooks.yaml b/.github/workflows/pre-commit_hooks.yaml
index 656d87f4..da918515 100644
--- a/.github/workflows/pre-commit_hooks.yaml
+++ b/.github/workflows/pre-commit_hooks.yaml
@@ -1,6 +1,6 @@
name: pre-commit
-on: [push]
+on: [push, pull_request]
jobs:
build:
From 4776baae2b60218b3edf46f9fbe86ca87bce5237 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 26 May 2021 08:41:16 +0800
Subject: [PATCH 019/737] chore: apply formatters to unformatted files
---
supabase_py/client.py | 12 ++++++------
supabase_py/lib/storage/storage_bucket_api.py | 14 ++++++++++----
tests/test_client.py | 4 +++-
tests/test_dummy.py | 5 -----
4 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/supabase_py/client.py b/supabase_py/client.py
index d34a13c2..9a65370b 100644
--- a/supabase_py/client.py
+++ b/supabase_py/client.py
@@ -7,10 +7,6 @@
from supabase_py.lib.realtime_client import SupabaseRealtimeClient
from supabase_py.lib.supabase_storage_client import SupabaseStorageClient
-
-from typing import Any, Dict
-
-
DEFAULT_OPTIONS = {
"schema": "public",
"auto_refresh_token": True,
@@ -149,9 +145,13 @@ def get_subscriptions(self):
return self.realtime.channels
@staticmethod
- def _init_realtime_client(realtime_url: str, supabase_key: str) -> SupabaseRealtimeClient:
+ 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}})
+ return SupabaseRealtimeClient(
+ realtime_url, {"params": {"apikey": supabase_key}}
+ )
@staticmethod
def _init_supabase_auth_client(
diff --git a/supabase_py/lib/storage/storage_bucket_api.py b/supabase_py/lib/storage/storage_bucket_api.py
index eecd6ccc..0b6658d8 100644
--- a/supabase_py/lib/storage/storage_bucket_api.py
+++ b/supabase_py/lib/storage/storage_bucket_api.py
@@ -1,4 +1,4 @@
-from typing import Dict, Any
+from typing import Any, Dict
import requests
from requests import HTTPError
@@ -50,7 +50,9 @@ def create_bucket(self, id: str) -> Dict[str, Any]:
A unique identifier for the bucket you are creating.
"""
try:
- response = requests.post(f"{self.url}/bucket", data={"id": id}, headers=self.headers)
+ response = requests.post(
+ f"{self.url}/bucket", data={"id": id}, headers=self.headers
+ )
response.raise_for_status()
except HTTPError as http_err:
print(f"HTTP error occurred: {http_err}") # Python 3.6
@@ -68,7 +70,9 @@ def empty_bucket(self, id: str) -> Dict[str, Any]:
The unique identifier of the bucket you would like to empty.
"""
try:
- response = requests.post(f"{self.url}/bucket/{id}/empty", data={}, headers=self.headers)
+ response = requests.post(
+ f"{self.url}/bucket/{id}/empty", data={}, headers=self.headers
+ )
response.raise_for_status()
except HTTPError as http_err:
print(f"HTTP error occurred: {http_err}") # Python 3.6
@@ -87,7 +91,9 @@ def delete_bucket(self, id: str) -> Dict[str, Any]:
The unique identifier of the bucket you would like to delete.
"""
try:
- response = requests.delete(f"{self.url}/bucket/{id}", data={}, headers=self.headers)
+ response = requests.delete(
+ f"{self.url}/bucket/{id}", data={}, headers=self.headers
+ )
response.raise_for_status()
except HTTPError as http_err:
diff --git a/tests/test_client.py b/tests/test_client.py
index ba33fabb..f8de8c1b 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -26,7 +26,9 @@ def _assert_authenticated_user(data: Dict[str, Any]) -> None:
assert user.get("aud") == "authenticated"
-@pytest.mark.xfail(reason="None of these values should be able to instanciate a client object")
+@pytest.mark.xfail(
+ reason="None of these values should be able to instanciate 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) -> None:
diff --git a/tests/test_dummy.py b/tests/test_dummy.py
index fca09c2d..54a1a871 100644
--- a/tests/test_dummy.py
+++ b/tests/test_dummy.py
@@ -1,6 +1,3 @@
-import pytest
-
-
import supabase_py
"""
@@ -10,12 +7,10 @@
"""
-
def test_dummy() -> None:
# Test auth component
assert True == True
-
def test_client_initialziation() -> None:
client = supabase_py.Client("http://testwebsite.com", "atestapi")
From 24cc3fde998417a556b2009e7fbecfabaf470c1f Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sun, 13 Jun 2021 22:05:46 +0800
Subject: [PATCH 020/737] feat: add create_signed_url
---
supabase_py/lib/__init__.py | 1 +
supabase_py/lib/storage/__init__.py | 1 +
supabase_py/lib/storage/storage_file_api.py | 56 +++++++++++++++++++++
3 files changed, 58 insertions(+)
create mode 100644 supabase_py/lib/storage/__init__.py
create mode 100644 supabase_py/lib/storage/storage_file_api.py
diff --git a/supabase_py/lib/__init__.py b/supabase_py/lib/__init__.py
index 286d8833..34170d66 100644
--- a/supabase_py/lib/__init__.py
+++ b/supabase_py/lib/__init__.py
@@ -1,3 +1,4 @@
from . import auth_client
from . import query_builder
from . import realtime_client
+from . import storage
diff --git a/supabase_py/lib/storage/__init__.py b/supabase_py/lib/storage/__init__.py
new file mode 100644
index 00000000..d23a513d
--- /dev/null
+++ b/supabase_py/lib/storage/__init__.py
@@ -0,0 +1 @@
+from . import storage_file_api
diff --git a/supabase_py/lib/storage/storage_file_api.py b/supabase_py/lib/storage/storage_file_api.py
new file mode 100644
index 00000000..ed16057e
--- /dev/null
+++ b/supabase_py/lib/storage/storage_file_api.py
@@ -0,0 +1,56 @@
+import requests
+from requests import HTTPError
+
+
+class StorageFileApi:
+ def __init__(self, url: str, headers: dict, bucket_id: str):
+ """
+ Parameters
+ ----------
+ url
+ base url for all the operation
+ headers
+ the base authentication headers
+ bucket_id
+ the id of the bucket that we want to access, you can get the list of buckets with the SupabaseStorageClient.list_buckets()
+ """
+ self.url = url
+ self.headers = headers
+ self.bucket_id = bucket_id
+ # self.loop = asyncio.get_event_loop()
+ # self.replace = replace
+ pass
+
+ def create_signed_url(self, path: str, expires_in: int):
+ """
+ Parameters
+ ----------
+ path
+ file path to be downloaded, including the current file name.
+ expires_in
+ number of seconds until the signed URL expires.
+ """
+ try:
+ _path = self._get_final_path(path)
+ print(f"{self.url}/object/sign/{_path}")
+ response = requests.post(
+ f"{self.url}/object/sign/{_path}",
+ json={"expiresIn": str(expires_in)},
+ headers=self.headers,
+ )
+ data = response.json()
+ print(data)
+ data["signedURL"] = f"{self.url}{data['signedURL']}"
+ response.raise_for_status()
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ print(f"Other error occurred: {err}") # Python 3.6
+ else:
+ return data
+
+ def move(self, from_path: str, to_path: str):
+ pass
+
+ def _get_final_path(self, path: str):
+ return f"{self.bucket_id}/{path}"
From 41682adee5a7ec93c8382cf376cd4729c9360ffa Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sun, 13 Jun 2021 22:21:01 +0800
Subject: [PATCH 021/737] feat: Add more functions to storage file api
---
supabase_py/lib/storage/storage_file_api.py | 83 ++++++++++++++++++++-
1 file changed, 82 insertions(+), 1 deletion(-)
diff --git a/supabase_py/lib/storage/storage_file_api.py b/supabase_py/lib/storage/storage_file_api.py
index ed16057e..db9d2d46 100644
--- a/supabase_py/lib/storage/storage_file_api.py
+++ b/supabase_py/lib/storage/storage_file_api.py
@@ -3,6 +3,15 @@
class StorageFileApi:
+ DEFAULT_SEARCH_OPTIONS = {
+ "limit": 100,
+ "offset": 0,
+ "sortBy": {
+ "column": "name",
+ "order": "asc",
+ },
+ }
+
def __init__(self, url: str, headers: dict, bucket_id: str):
"""
Parameters
@@ -50,7 +59,79 @@ def create_signed_url(self, path: str, expires_in: int):
return data
def move(self, from_path: str, to_path: str):
- pass
+ """
+ Moves an existing file, optionally renaming it at the same time.
+ Parameters
+ ----------
+ from_path
+ The original file path, including the current file name. For example `folder/image.png`.
+ to_path
+ The new file path, including the new file name. For example `folder/image-copy.png`.
+ """
+ try:
+ response = requests.post(
+ f"{self.url}/object/move",
+ data={
+ "bucketId": self.bucket_id,
+ "sourceKey": from_path,
+ "destinationKey": to_path,
+ },
+ headers=self.headers,
+ )
+ response.raise_for_status()
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ print(f"Other error occurred: {err}") # Python 3.6
+ else:
+ return response.json()
+
+ def remove(self, paths: list):
+ """
+ Deletes files within the same bucket
+ Parameters
+ ----------
+ paths
+ An array or list of files to be deletes, including the path and file name. For example [`folder/image.png`].
+ """
+ try:
+ response = requests.delete(
+ f"{self.url}/object/{self.bucket_id}",
+ data={"prefixes": paths},
+ headers=self.headers,
+ )
+ response.raise_for_status()
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ raise err # Python 3.6
+ else:
+ return response.json()
+
+ def list(self, path: str = None, options: dict = {}):
+ """
+ Lists all the files within a bucket.
+ Parameters
+ ----------
+ path
+ The folder path.
+ options
+ Search options, including `limit`, `offset`, and `sortBy`.
+ """
+ try:
+ body = dict(self.DEFAULT_SEARCH_OPTIONS, **options)
+ headers = dict(self.headers, **{"Content-Type": "application/json"})
+ body["prefix"] = path if path else ""
+ getdata = requests.post(
+ f"{self.url}/object/list/{self.bucket_id}", json=body, headers=headers
+ )
+ getdata.raise_for_status()
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ raise err # Python 3.6
+ else:
+ return getdata.json()
def _get_final_path(self, path: str):
return f"{self.bucket_id}/{path}"
From 27e90f6bdfb64d5292a4db77c69f9b583be6aadf Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sun, 13 Jun 2021 23:57:18 +0800
Subject: [PATCH 022/737] fix: get create_signed_url working
---
supabase_py/client.py | 2 +-
supabase_py/lib/storage/storage_file_api.py | 19 ++++++++++++----
supabase_py/lib/storage_client.py | 21 ++++++++++++++++++
supabase_py/lib/supabase_storage_client.py | 24 ---------------------
4 files changed, 37 insertions(+), 29 deletions(-)
create mode 100644 supabase_py/lib/storage_client.py
delete mode 100644 supabase_py/lib/supabase_storage_client.py
diff --git a/supabase_py/client.py b/supabase_py/client.py
index 9a65370b..2b04c9ba 100644
--- a/supabase_py/client.py
+++ b/supabase_py/client.py
@@ -5,7 +5,7 @@
from supabase_py.lib.auth_client import SupabaseAuthClient
from supabase_py.lib.query_builder import SupabaseQueryBuilder
from supabase_py.lib.realtime_client import SupabaseRealtimeClient
-from supabase_py.lib.supabase_storage_client import SupabaseStorageClient
+from supabase_py.lib.storage_client import SupabaseStorageClient
DEFAULT_OPTIONS = {
"schema": "public",
diff --git a/supabase_py/lib/storage/storage_file_api.py b/supabase_py/lib/storage/storage_file_api.py
index db9d2d46..a65f8101 100644
--- a/supabase_py/lib/storage/storage_file_api.py
+++ b/supabase_py/lib/storage/storage_file_api.py
@@ -2,7 +2,7 @@
from requests import HTTPError
-class StorageFileApi:
+class StorageFileAPI:
DEFAULT_SEARCH_OPTIONS = {
"limit": 100,
"offset": 0,
@@ -28,7 +28,6 @@ def __init__(self, url: str, headers: dict, bucket_id: str):
self.bucket_id = bucket_id
# self.loop = asyncio.get_event_loop()
# self.replace = replace
- pass
def create_signed_url(self, path: str, expires_in: int):
"""
@@ -41,14 +40,12 @@ def create_signed_url(self, path: str, expires_in: int):
"""
try:
_path = self._get_final_path(path)
- print(f"{self.url}/object/sign/{_path}")
response = requests.post(
f"{self.url}/object/sign/{_path}",
json={"expiresIn": str(expires_in)},
headers=self.headers,
)
data = response.json()
- print(data)
data["signedURL"] = f"{self.url}{data['signedURL']}"
response.raise_for_status()
except HTTPError as http_err:
@@ -58,6 +55,20 @@ def create_signed_url(self, path: str, expires_in: int):
else:
return data
+ def get_public_url(self, path: str):
+ """
+ Parameters
+ ----------
+ path
+ file path to be downloaded, including the path and file name. For example `folder/image.png`.
+ """
+ try:
+ _path = self._get_final_path(path)
+ public_url = f"{self.url}/object/public/{_path}"
+ return public_url
+ except:
+ print("Public URL not found")
+
def move(self, from_path: str, to_path: str):
"""
Moves an existing file, optionally renaming it at the same time.
diff --git a/supabase_py/lib/storage_client.py b/supabase_py/lib/storage_client.py
new file mode 100644
index 00000000..27e9b7fe
--- /dev/null
+++ b/supabase_py/lib/storage_client.py
@@ -0,0 +1,21 @@
+from supabase_py.lib.storage.storage_bucket_api import StorageBucketAPI
+from supabase_py.lib.storage.storage_file_api import StorageFileAPI
+
+
+class SupabaseStorageClient(StorageBucketAPI):
+ """
+ Manage the storage bucket and files
+ Examples
+ --------
+ >>> url = storage_file.create_signed_url("something/test2.txt", 80) # signed url
+ >>> loop.run_until_complete(storage_file.download("something/test2.txt")) # upload or download
+ >>> loop.run_until_complete(storage_file.upload("something/test2.txt","path_file_upload"))
+ >>> list_buckets = storage.list_buckets()
+ >>> list_files = storage_file.list("something")
+ """
+
+ def __init__(self, url, headers):
+ super().__init__(url, headers)
+
+ def StorageFileAPI(self, id_):
+ return StorageFileAPI(self.url, self.headers, id_)
diff --git a/supabase_py/lib/supabase_storage_client.py b/supabase_py/lib/supabase_storage_client.py
deleted file mode 100644
index a3ad1811..00000000
--- a/supabase_py/lib/supabase_storage_client.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from supabase_py.lib.storage.storage_bucket_api import StorageBucketAPI
-
-
-class SupabaseStorageClient(StorageBucketAPI):
- """
- Manage the storage bucket and files
-
- Examples
- --------
- >>> url = storage_file.create_signed_url("poll3o/test2.txt", 80) # signed url
- >>> loop.run_until_complete(storage_file.download("poll3o/test2.txt")) #upload or download
- >>> loop.run_until_complete(storage_file.upload("poll3o/test2.txt","path_file_upload"))
- >>> list_buckets = storage.list_buckets()
- >>> list_files = storage_file.list("pollo")
- """
-
- def __init__(self, url, headers):
- super().__init__(url, headers)
-
- # def StorageFileApi(self, id_, replace=False):
- # return StorageFileApi(self.url, self.headers, id_, replace)
-
- def StorageBucketAPI(self):
- return StorageBucketAPI(self.url, self.headers)
From 0c8c70315420dccab03e35a54329838d7c3203dd Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 21 Jul 2021 14:44:37 +0800
Subject: [PATCH 023/737] Trigger pre-commit
---
docs/Makefile | 20 +++++++++++++++++++
docs/conf.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
docs/index.rst | 20 +++++++++++++++++++
docs/make.bat | 35 +++++++++++++++++++++++++++++++++
4 files changed, 127 insertions(+)
create mode 100644 docs/Makefile
create mode 100644 docs/conf.py
create mode 100644 docs/index.rst
create mode 100644 docs/make.bat
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..456308c2
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,52 @@
+# 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 = [
+]
+
+# 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']
\ No newline at end of file
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 00000000..14d7ae89
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,20 @@
+.. 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!
+====================================
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Contents:
+
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docs/make.bat b/docs/make.bat
new file mode 100644
index 00000000..2119f510
--- /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
From 95808c562fa99c90f8fd3661efbdb38225454c3d Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 21 Jul 2021 15:05:06 +0800
Subject: [PATCH 024/737] chore: format docs file with black
---
README.md | 2 +-
docs/conf.py | 17 ++++++++---------
docs/index.rst | 7 +++++++
3 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/README.md b/README.md
index 901a2d10..8c60b772 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# supabase-py
-[](https://gotrue-py.readthedocs.io/en/latest/?badge=latest)
+[](https://supabase.readthedocs.io/en/latest/?badge=latest)
Supabase client for Python. This mirrors the design of [supabase-js](https://github.com/supabase/supabase-js/blob/master/README.md)
diff --git a/docs/conf.py b/docs/conf.py
index 456308c2..26c7fd8d 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -17,9 +17,9 @@
# -- Project information -----------------------------------------------------
-project = 'supabase'
-copyright = '2021, Joel Lee'
-author = 'Joel Lee'
+project = "supabase"
+copyright = "2021, Joel Lee"
+author = "Joel Lee"
# -- General configuration ---------------------------------------------------
@@ -27,16 +27,15 @@
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
-extensions = [
-]
+extensions = ["myst_parser"]
# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+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']
+exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
# -- Options for HTML output -------------------------------------------------
@@ -44,9 +43,9 @@
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
-html_theme = 'alabaster'
+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']
\ No newline at end of file
+html_static_path = ["_static"]
diff --git a/docs/index.rst b/docs/index.rst
index 14d7ae89..42f4934c 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -18,3 +18,10 @@ Indices and tables
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
+
+
+Features
+--------
+* Auth
+* Realtime
+* Storage
\ No newline at end of file
From c8289d4e3c8dd0a2fe2bbafc259d8a9d41e83637 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 21 Jul 2021 15:22:40 +0800
Subject: [PATCH 025/737] docs: substitute CLRF
---
README.md | 1 -
docs/make.bat | 70 +++++++++++++++++++++++++--------------------------
2 files changed, 35 insertions(+), 36 deletions(-)
diff --git a/README.md b/README.md
index 91aa738b..8c005747 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,4 @@
# supabase-py
-=======
[](https://github.com/supabase/supabase-py/actions)
[](https://badge.fury.io/py/supabase-py)
diff --git a/docs/make.bat b/docs/make.bat
index 2119f510..922152e9 100644
--- a/docs/make.bat
+++ b/docs/make.bat
@@ -1,35 +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
+@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
From b518ad3adf05037d97e75cdf21d2913a72d53093 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 21 Jul 2021 15:37:39 +0800
Subject: [PATCH 026/737] chore: format __init__ using autoflake
---
supabase_py/lib/storage/__init__.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/supabase_py/lib/storage/__init__.py b/supabase_py/lib/storage/__init__.py
index d23a513d..e69de29b 100644
--- a/supabase_py/lib/storage/__init__.py
+++ b/supabase_py/lib/storage/__init__.py
@@ -1 +0,0 @@
-from . import storage_file_api
From e85d675044c484ae1772b76e07545fb13ab3eef1 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Thu, 22 Jul 2021 20:05:39 +0800
Subject: [PATCH 027/737] feat: add download function
---
supabase_py/lib/storage/storage_file_api.py | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/supabase_py/lib/storage/storage_file_api.py b/supabase_py/lib/storage/storage_file_api.py
index a65f8101..e9a046ca 100644
--- a/supabase_py/lib/storage/storage_file_api.py
+++ b/supabase_py/lib/storage/storage_file_api.py
@@ -82,7 +82,7 @@ def move(self, from_path: str, to_path: str):
try:
response = requests.post(
f"{self.url}/object/move",
- data={
+ json={
"bucketId": self.bucket_id,
"sourceKey": from_path,
"destinationKey": to_path,
@@ -133,6 +133,7 @@ def list(self, path: str = None, options: dict = {}):
body = dict(self.DEFAULT_SEARCH_OPTIONS, **options)
headers = dict(self.headers, **{"Content-Type": "application/json"})
body["prefix"] = path if path else ""
+
getdata = requests.post(
f"{self.url}/object/list/{self.bucket_id}", json=body, headers=headers
)
@@ -144,5 +145,23 @@ def list(self, path: str = None, options: dict = {}):
else:
return getdata.json()
+ def download(self, path: str):
+ """
+ Downloads a file.
+ Parameters
+ ----------
+ path The file path to be downloaded, including the path and file name. For example `folder/image.png`.
+ """
+ try:
+ _path = self._get_final_path(path)
+ response = requests.get(f"{self.url}/object/{_path}", headers=self.headers)
+
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ raise err # Python 3.6
+ else:
+ return response.content
+
def _get_final_path(self, path: str):
return f"{self.bucket_id}/{path}"
From 3070b5b2291df29afe76b6ddc38ab2c9b69b8720 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Thu, 22 Jul 2021 20:56:16 +0800
Subject: [PATCH 028/737] feat: add upload
---
supabase_py/lib/storage/storage_file_api.py | 34 +++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/supabase_py/lib/storage/storage_file_api.py b/supabase_py/lib/storage/storage_file_api.py
index e9a046ca..b88fd0ce 100644
--- a/supabase_py/lib/storage/storage_file_api.py
+++ b/supabase_py/lib/storage/storage_file_api.py
@@ -11,6 +11,11 @@ class StorageFileAPI:
"order": "asc",
},
}
+ DEFAULT_FILE_OPTIONS = {
+ "cacheControl": "3600",
+ "contentType": "text/plain;charset=UTF-8",
+ "upsert": "False",
+ }
def __init__(self, url: str, headers: dict, bucket_id: str):
"""
@@ -163,5 +168,34 @@ def download(self, path: str):
else:
return response.content
+ def upload(self, path: str, file: any, file_options: dict = None):
+ """
+ Uploads a file to an existing bucket.
+ Parameters
+ ----------
+ path
+ The relative file path including the bucket ID. Should be of the format `bucket/folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.
+ file
+ The File object to be stored in the bucket. or a async generator of chunks
+ file_options
+ HTTP headers. For example `cacheControl`
+ """
+ if file_options is None:
+ file_options = {}
+ headers = dict(self.headers, **file_options)
+ headers.update(self.DEFAULT_FILE_OPTIONS)
+ files = {"file": open(file, "rb")}
+ _path = self._get_final_path(path)
+ try:
+ resp = requests.post(
+ f"{self.url}/object/{_path}", data=files, headers=headers
+ )
+ except HTTPError as http_err:
+ print(f"HTTP error occurred: {http_err}") # Python 3.6
+ except Exception as err:
+ raise err # Python 3.6
+ else:
+ return resp
+
def _get_final_path(self, path: str):
return f"{self.bucket_id}/{path}"
From b74e4399c3d3def335f7c92588bf6437a3e80bfe Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Fri, 23 Jul 2021 14:09:18 +0800
Subject: [PATCH 029/737] feat: add docs for query_builder and storage_bucket
---
docs/conf.py | 2 +-
docs/index.rst | 9 ++++++++-
docs/query_builder.rst | 6 ++++++
docs/storage_bucket.rst | 6 ++++++
4 files changed, 21 insertions(+), 2 deletions(-)
create mode 100644 docs/query_builder.rst
create mode 100644 docs/storage_bucket.rst
diff --git a/docs/conf.py b/docs/conf.py
index 26c7fd8d..09622bbc 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -27,7 +27,7 @@
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
-extensions = ["myst_parser"]
+extensions = ["sphinx.ext.autodoc", "sphinx.ext.napoleon"]
# Add any paths that contain templates here, relative to this directory.
templates_path = ["_templates"]
diff --git a/docs/index.rst b/docs/index.rst
index 42f4934c..ffa0c490 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -6,10 +6,17 @@
Welcome to supabase's documentation!
====================================
+.. automodule:: supabase_py
+ :members:
+ :show-inheritance:
+
.. toctree::
:maxdepth: 2
:caption: Contents:
+ query_builder
+ storage_bucket
+
Indices and tables
@@ -24,4 +31,4 @@ Features
--------
* Auth
* Realtime
-* Storage
\ No newline at end of file
+* Storage
diff --git a/docs/query_builder.rst b/docs/query_builder.rst
new file mode 100644
index 00000000..7b6717eb
--- /dev/null
+++ b/docs/query_builder.rst
@@ -0,0 +1,6 @@
+Query Builder
+================
+
+.. automodule:: supabase_py.lib.query_builder
+ :members:
+ :show-inheritance:
diff --git a/docs/storage_bucket.rst b/docs/storage_bucket.rst
new file mode 100644
index 00000000..7feee821
--- /dev/null
+++ b/docs/storage_bucket.rst
@@ -0,0 +1,6 @@
+Storage Bucket
+================
+
+.. automodule:: supabase_py.lib.storage.storage_bucket_api
+ :members:
+ :show-inheritance:
From b022994c508cead611a1be915c669337c63c9eb1 Mon Sep 17 00:00:00 2001
From: Div Arora
Date: Wed, 18 Aug 2021 15:00:03 +0800
Subject: [PATCH 030/737] fix: missing json bodies in patch and put requests
---
supabase_py/lib/query_builder.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/supabase_py/lib/query_builder.py b/supabase_py/lib/query_builder.py
index 843ade5c..0c1740f2 100644
--- a/supabase_py/lib/query_builder.py
+++ b/supabase_py/lib/query_builder.py
@@ -18,8 +18,10 @@ def _execute_monkey_patch(self) -> Dict[str, Any]:
additional_kwargs = {"json": self.json}
elif method == "put":
func = requests.put
+ additional_kwargs = {"json": self.json}
elif method == "patch":
func = requests.patch
+ additional_kwargs = {"json": self.json}
elif method == "delete":
func = requests.delete
else:
From 528abb3bb7eb5ebd54e8fef12dc24a39a1a9bb24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C6=B0=C6=A1ng=20Quang=20M=E1=BA=A1nh?=
Date: Thu, 26 Aug 2021 15:09:30 +0700
Subject: [PATCH 031/737] Temporarily use postgrest-py git
---
pyproject.toml | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 679d4704..14e982e2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -7,7 +7,7 @@ license = "MIT"
[tool.poetry.dependencies]
python = "^3.7.1"
-postgrest-py = "0.4.0"
+postgrest-py = { git = "https://github.com/supabase/postgrest-py.git" }
realtime-py = "^0.1.2"
gotrue = "0.2.0"
pytest = "^6"
@@ -17,8 +17,5 @@ requests = "2.25.1"
pre_commit = "^2.1.0"
[build-system]
-requires = [
- "poetry>=0.12",
- "setuptools>=30.3.0,<50",
-]
+requires = ["poetry>=0.12", "setuptools>=30.3.0,<50"]
build-backend = "poetry.masonry.api"
From 04bf6ef1c854683b6ae1eb9b56b6273e147b2ed3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C6=B0=C6=A1ng=20Quang=20M=E1=BA=A1nh?=
Date: Fri, 27 Aug 2021 23:41:43 +0700
Subject: [PATCH 032/737] Update
---
supabase_py/client.py | 23 ++++++++++++++---------
supabase_py/lib/constants.py | 5 +++++
2 files changed, 19 insertions(+), 9 deletions(-)
create mode 100644 supabase_py/lib/constants.py
diff --git a/supabase_py/client.py b/supabase_py/client.py
index 2b04c9ba..a57a1529 100644
--- a/supabase_py/client.py
+++ b/supabase_py/client.py
@@ -3,6 +3,7 @@
from postgrest_py import PostgrestClient
from supabase_py.lib.auth_client import SupabaseAuthClient
+from supabase_py.lib.constants import DEFAULT_HEADERS
from supabase_py.lib.query_builder import SupabaseQueryBuilder
from supabase_py.lib.realtime_client import SupabaseRealtimeClient
from supabase_py.lib.storage_client import SupabaseStorageClient
@@ -13,6 +14,7 @@
"persist_session": True,
"detect_session_in_url": True,
"local_storage": {},
+ "headers": DEFAULT_HEADERS,
}
@@ -44,17 +46,15 @@ def __init__(
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,
- }
+
+ settings = {**DEFAULT_OPTIONS, **options}
+ settings["headers"].update(self._get_auth_headers())
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.storage_url = f"{supabase_url}/storage/v1"
self.schema: str = settings.pop("schema")
+
# Instantiate clients.
self.auth: SupabaseAuthClient = self._init_supabase_auth_client(
auth_url=self.auth_url,
@@ -69,7 +69,8 @@ def __init__(
self.realtime = None
self.postgrest: PostgrestClient = self._init_postgrest_client(
rest_url=self.rest_url,
- supabase_key=supabase_key,
+ supabase_key=self.supabase_key,
+ **settings,
)
def storage(self):
@@ -174,9 +175,13 @@ def _init_supabase_auth_client(
)
@staticmethod
- def _init_postgrest_client(rest_url: str, supabase_key: str) -> PostgrestClient:
+ def _init_postgrest_client(
+ rest_url: str,
+ supabase_key: str,
+ headers: Dict[str, str],
+ ) -> PostgrestClient:
"""Private helper for creating an instance of the Postgrest client."""
- client = PostgrestClient(rest_url)
+ client = PostgrestClient(rest_url, headers=headers)
client.auth(token=supabase_key)
return client
diff --git a/supabase_py/lib/constants.py b/supabase_py/lib/constants.py
new file mode 100644
index 00000000..0fd75e5d
--- /dev/null
+++ b/supabase_py/lib/constants.py
@@ -0,0 +1,5 @@
+from supabase_py import __version__
+
+DEFAULT_HEADERS = {
+ 'X-Client-Info': f'supabase-py/{__version__}'
+}
From 027bfb5657acfb97c24f64d729b6cd0321ac2547 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C6=B0=C6=A1ng=20Quang=20M=E1=BA=A1nh?=
Date: Fri, 27 Aug 2021 23:51:24 +0700
Subject: [PATCH 033/737] Fix circular imports
---
supabase_py/__init__.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/supabase_py/__init__.py b/supabase_py/__init__.py
index d8a42629..8ea17797 100644
--- a/supabase_py/__init__.py
+++ b/supabase_py/__init__.py
@@ -1,6 +1,6 @@
+__version__ = "0.0.2"
+
from supabase_py import client, lib
from supabase_py.client import Client, create_client
-__version__ = "0.0.2"
-
__all__ = ["client", "lib", "Client", "create_client"]
From 70e94965674446399fb52427bc63b6f1c410f281 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C6=B0=C6=A1ng=20Quang=20M=E1=BA=A1nh?=
Date: Fri, 27 Aug 2021 23:59:22 +0700
Subject: [PATCH 034/737] Fix unexpected keyword arguments
---
supabase_py/client.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/supabase_py/client.py b/supabase_py/client.py
index a57a1529..758fa764 100644
--- a/supabase_py/client.py
+++ b/supabase_py/client.py
@@ -179,6 +179,7 @@ def _init_postgrest_client(
rest_url: str,
supabase_key: str,
headers: Dict[str, str],
+ **kwargs, # other unused settings
) -> PostgrestClient:
"""Private helper for creating an instance of the Postgrest client."""
client = PostgrestClient(rest_url, headers=headers)
From f2e9ce0db342bc3e01482e6da2f239ee142f2cd0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C6=B0=C6=A1ng=20Quang=20M=E1=BA=A1nh?=
Date: Sat, 28 Aug 2021 00:02:58 +0700
Subject: [PATCH 035/737] Fix missing black as a dev dependency
---
pyproject.toml | 1 +
supabase_py/lib/constants.py | 4 +---
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 14e982e2..378673d2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -15,6 +15,7 @@ requests = "2.25.1"
[tool.poetry.dev-dependencies]
pre_commit = "^2.1.0"
+black = "^21.7b0"
[build-system]
requires = ["poetry>=0.12", "setuptools>=30.3.0,<50"]
diff --git a/supabase_py/lib/constants.py b/supabase_py/lib/constants.py
index 0fd75e5d..fc02b044 100644
--- a/supabase_py/lib/constants.py
+++ b/supabase_py/lib/constants.py
@@ -1,5 +1,3 @@
from supabase_py import __version__
-DEFAULT_HEADERS = {
- 'X-Client-Info': f'supabase-py/{__version__}'
-}
+DEFAULT_HEADERS = {"X-Client-Info": f"supabase-py/{__version__}"}
From 5f3d2ffa19db1089232b250a39bed0c86ef222d8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C6=B0=C6=A1ng=20Quang=20M=E1=BA=A1nh?=
Date: Fri, 10 Sep 2021 00:03:30 +0700
Subject: [PATCH 036/737] Use postgrest-py v0.5.0
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 378673d2..545e8fe6 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -7,7 +7,7 @@ license = "MIT"
[tool.poetry.dependencies]
python = "^3.7.1"
-postgrest-py = { git = "https://github.com/supabase/postgrest-py.git" }
+postgrest-py = "^0.5.0"
realtime-py = "^0.1.2"
gotrue = "0.2.0"
pytest = "^6"
From 9df7c32214386f27d441ce16599517ea6c36ef08 Mon Sep 17 00:00:00 2001
From: yishernc <44721502+yishernc@users.noreply.github.com>
Date: Wed, 22 Sep 2021 19:14:56 +0800
Subject: [PATCH 037/737] bump postgrest-py to latest version (0.5.0)
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 679d4704..a2182d39 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -7,7 +7,7 @@ license = "MIT"
[tool.poetry.dependencies]
python = "^3.7.1"
-postgrest-py = "0.4.0"
+postgrest-py = "0.5.0"
realtime-py = "^0.1.2"
gotrue = "0.2.0"
pytest = "^6"
From 9a34f2aea674e089c794b69550057915ae1b7dd5 Mon Sep 17 00:00:00 2001
From: Lee Yi Jie Joel
Date: Thu, 30 Sep 2021 11:10:22 -0500
Subject: [PATCH 038/737] chore: Create CONTRIBUTING.md for hacktoberfest
---
CONTRIBUTING.md | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
create mode 100644 CONTRIBUTING.md
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..559a740a
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,32 @@
+# 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. Consult
+[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
+information on using pull requests.
+
+## Report an issue
+
+Report all issues through [GitHub Issues](./issues).
+
+## File a feature request
+
+File your feature request 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.
+- 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/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
From b20703d3d4117c911092212a796e53eb2f5286ca Mon Sep 17 00:00:00 2001
From: Lee Yi Jie Joel
Date: Thu, 30 Sep 2021 11:32:36 -0500
Subject: [PATCH 039/737] Create CODE_OF_CONDUCT.md
---
CODE_OF_CONDUCT.md | 77 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
create mode 100644 CODE_OF_CONDUCT.md
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..9447d914
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,77 @@
+
+# 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 https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see
+https://www.contributor-covenant.org/faq
From fa1e79316d789c1d18d6f471e2247d32ff155471 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sun, 3 Oct 2021 19:30:03 -0500
Subject: [PATCH 040/737] chore: supabase_py -> supabase
---
README.md | 10 +++++-----
docs/index.rst | 2 +-
docs/query_builder.rst | 2 +-
docs/storage_bucket.rst | 2 +-
pyproject.toml | 4 ++--
supabase/__init__.py | 6 ++++++
{supabase_py => supabase}/client.py | 12 ++++++------
supabase/lib/__init__.py | 3 +++
{supabase_py => supabase}/lib/auth_client.py | 0
{supabase_py => supabase}/lib/constants.py | 2 +-
{supabase_py => supabase}/lib/query_builder.py | 0
{supabase_py => supabase}/lib/realtime_client.py | 0
{supabase_py => supabase}/lib/storage/__init__.py | 0
.../lib/storage/storage_bucket_api.py | 0
.../lib/storage/storage_file_api.py | 0
{supabase_py => supabase}/lib/storage_client.py | 4 ++--
{supabase_py => supabase}/request_builder.py | 0
supabase_py/__init__.py | 6 ------
supabase_py/lib/__init__.py | 3 ---
tests/conftest.py | 2 +-
tests/test_client.py | 4 ++--
tests/test_dummy.py | 6 +++---
22 files changed, 34 insertions(+), 34 deletions(-)
create mode 100644 supabase/__init__.py
rename {supabase_py => supabase}/client.py (95%)
create mode 100644 supabase/lib/__init__.py
rename {supabase_py => supabase}/lib/auth_client.py (100%)
rename {supabase_py => supabase}/lib/constants.py (65%)
rename {supabase_py => supabase}/lib/query_builder.py (100%)
rename {supabase_py => supabase}/lib/realtime_client.py (100%)
rename {supabase_py => supabase}/lib/storage/__init__.py (100%)
rename {supabase_py => supabase}/lib/storage/storage_bucket_api.py (100%)
rename {supabase_py => supabase}/lib/storage/storage_file_api.py (100%)
rename {supabase_py => supabase}/lib/storage_client.py (82%)
rename {supabase_py => supabase}/request_builder.py (100%)
delete mode 100644 supabase_py/__init__.py
delete mode 100644 supabase_py/lib/__init__.py
diff --git a/README.md b/README.md
index 8c005747..8a17b385 100644
--- a/README.md
+++ b/README.md
@@ -50,7 +50,7 @@ We can then read the keys in the python source code.
```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")
@@ -88,7 +88,7 @@ This is a sample of how you'd use supabase-py. Functions and tests are WIP
## Authenticate
```python
-from supabase_py import create_client, Client
+from supabase import create_client, Client
url: str = os.environ.get("SUPABASE_TEST_URL")
key: str = os.environ.get("SUPABASE_TEST_KEY")
@@ -102,7 +102,7 @@ user = supabase.auth.sign_up(email=random_email, password=random_password)
## Sign-in
```python
-from supabase_py import create_client, Client
+from supabase import create_client, Client
url: str = os.environ.get("SUPABASE_TEST_URL")
key: str = os.environ.get("SUPABASE_TEST_KEY")
@@ -118,7 +118,7 @@ user = supabase.auth.sign_in(email=random_email, password=random_password)
#### Insertion of Data
```python
-from supabase_py import create_client, Client
+from supabase import create_client, Client
url: str = os.environ.get("SUPABASE_TEST_URL")
key: str = os.environ.get("SUPABASE_TEST_KEY")
@@ -130,7 +130,7 @@ assert len(data.get("data", [])) > 0
#### Selection of Data
```python
-from supabase_py import create_client, Client
+from supabase import create_client, Client
url: str = os.environ.get("SUPABASE_TEST_URL")
key: str = os.environ.get("SUPABASE_TEST_KEY")
diff --git a/docs/index.rst b/docs/index.rst
index ffa0c490..21fe05d0 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -6,7 +6,7 @@
Welcome to supabase's documentation!
====================================
-.. automodule:: supabase_py
+.. automodule:: supabase
:members:
:show-inheritance:
diff --git a/docs/query_builder.rst b/docs/query_builder.rst
index 7b6717eb..27002456 100644
--- a/docs/query_builder.rst
+++ b/docs/query_builder.rst
@@ -1,6 +1,6 @@
Query Builder
================
-.. automodule:: supabase_py.lib.query_builder
+.. automodule:: supabase.lib.query_builder
:members:
:show-inheritance:
diff --git a/docs/storage_bucket.rst b/docs/storage_bucket.rst
index 7feee821..cc92cf1f 100644
--- a/docs/storage_bucket.rst
+++ b/docs/storage_bucket.rst
@@ -1,6 +1,6 @@
Storage Bucket
================
-.. automodule:: supabase_py.lib.storage.storage_bucket_api
+.. automodule:: supabase.lib.storage.storage_bucket_api
:members:
:show-inheritance:
diff --git a/pyproject.toml b/pyproject.toml
index 545e8fe6..8148307d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
-name = "supabase-py"
-version = "0.0.2"
+name = "supabase"
+version = "0.0.3"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden "]
license = "MIT"
diff --git a/supabase/__init__.py b/supabase/__init__.py
new file mode 100644
index 00000000..2a4007c2
--- /dev/null
+++ b/supabase/__init__.py
@@ -0,0 +1,6 @@
+__version__ = "0.0.2"
+
+from supabase import client, lib
+from supabase.client import Client, create_client
+
+__all__ = ["client", "lib", "Client", "create_client"]
diff --git a/supabase_py/client.py b/supabase/client.py
similarity index 95%
rename from supabase_py/client.py
rename to supabase/client.py
index 758fa764..e2981eb5 100644
--- a/supabase_py/client.py
+++ b/supabase/client.py
@@ -2,11 +2,11 @@
from postgrest_py import PostgrestClient
-from supabase_py.lib.auth_client import SupabaseAuthClient
-from supabase_py.lib.constants import DEFAULT_HEADERS
-from supabase_py.lib.query_builder import SupabaseQueryBuilder
-from supabase_py.lib.realtime_client import SupabaseRealtimeClient
-from supabase_py.lib.storage_client import SupabaseStorageClient
+from supabase.lib.auth_client import SupabaseAuthClient
+from supabase.lib.constants import DEFAULT_HEADERS
+from supabase.lib.query_builder import SupabaseQueryBuilder
+from supabase.lib.realtime_client import SupabaseRealtimeClient
+from supabase.lib.storage_client import SupabaseStorageClient
DEFAULT_OPTIONS = {
"schema": "public",
@@ -213,7 +213,7 @@ def create_client(supabase_url: str, supabase_key: str, **options) -> Client:
--------
Instanciating the client.
>>> import os
- >>> from supabase_py import create_client, Client
+ >>> from supabase import create_client, Client
>>>
>>> url: str = os.environ.get("SUPABASE_TEST_URL")
>>> key: str = os.environ.get("SUPABASE_TEST_KEY")
diff --git a/supabase/lib/__init__.py b/supabase/lib/__init__.py
new file mode 100644
index 00000000..7b96a426
--- /dev/null
+++ b/supabase/lib/__init__.py
@@ -0,0 +1,3 @@
+from supabase.lib import auth_client, query_builder, realtime_client
+
+__all__ = ["auth_client", "query_builder", "realtime_client"]
diff --git a/supabase_py/lib/auth_client.py b/supabase/lib/auth_client.py
similarity index 100%
rename from supabase_py/lib/auth_client.py
rename to supabase/lib/auth_client.py
diff --git a/supabase_py/lib/constants.py b/supabase/lib/constants.py
similarity index 65%
rename from supabase_py/lib/constants.py
rename to supabase/lib/constants.py
index fc02b044..ebba6e60 100644
--- a/supabase_py/lib/constants.py
+++ b/supabase/lib/constants.py
@@ -1,3 +1,3 @@
-from supabase_py import __version__
+from supabase import __version__
DEFAULT_HEADERS = {"X-Client-Info": f"supabase-py/{__version__}"}
diff --git a/supabase_py/lib/query_builder.py b/supabase/lib/query_builder.py
similarity index 100%
rename from supabase_py/lib/query_builder.py
rename to supabase/lib/query_builder.py
diff --git a/supabase_py/lib/realtime_client.py b/supabase/lib/realtime_client.py
similarity index 100%
rename from supabase_py/lib/realtime_client.py
rename to supabase/lib/realtime_client.py
diff --git a/supabase_py/lib/storage/__init__.py b/supabase/lib/storage/__init__.py
similarity index 100%
rename from supabase_py/lib/storage/__init__.py
rename to supabase/lib/storage/__init__.py
diff --git a/supabase_py/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
similarity index 100%
rename from supabase_py/lib/storage/storage_bucket_api.py
rename to supabase/lib/storage/storage_bucket_api.py
diff --git a/supabase_py/lib/storage/storage_file_api.py b/supabase/lib/storage/storage_file_api.py
similarity index 100%
rename from supabase_py/lib/storage/storage_file_api.py
rename to supabase/lib/storage/storage_file_api.py
diff --git a/supabase_py/lib/storage_client.py b/supabase/lib/storage_client.py
similarity index 82%
rename from supabase_py/lib/storage_client.py
rename to supabase/lib/storage_client.py
index 27e9b7fe..f7737174 100644
--- a/supabase_py/lib/storage_client.py
+++ b/supabase/lib/storage_client.py
@@ -1,5 +1,5 @@
-from supabase_py.lib.storage.storage_bucket_api import StorageBucketAPI
-from supabase_py.lib.storage.storage_file_api import StorageFileAPI
+from supabase.lib.storage.storage_bucket_api import StorageBucketAPI
+from supabase.lib.storage.storage_file_api import StorageFileAPI
class SupabaseStorageClient(StorageBucketAPI):
diff --git a/supabase_py/request_builder.py b/supabase/request_builder.py
similarity index 100%
rename from supabase_py/request_builder.py
rename to supabase/request_builder.py
diff --git a/supabase_py/__init__.py b/supabase_py/__init__.py
deleted file mode 100644
index 8ea17797..00000000
--- a/supabase_py/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-__version__ = "0.0.2"
-
-from supabase_py import client, lib
-from supabase_py.client import Client, create_client
-
-__all__ = ["client", "lib", "Client", "create_client"]
diff --git a/supabase_py/lib/__init__.py b/supabase_py/lib/__init__.py
deleted file mode 100644
index 5e498c18..00000000
--- a/supabase_py/lib/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from supabase_py.lib import auth_client, query_builder, realtime_client
-
-__all__ = ["auth_client", "query_builder", "realtime_client"]
diff --git a/tests/conftest.py b/tests/conftest.py
index a6d3c3be..5bc27b32 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -4,7 +4,7 @@
import pytest
-from supabase_py import Client, create_client
+from supabase import Client, create_client
@pytest.fixture(scope="session")
diff --git a/tests/test_client.py b/tests/test_client.py
index f8de8c1b..41db74ef 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -7,7 +7,7 @@
import pytest
if TYPE_CHECKING:
- from supabase_py import Client
+ from supabase import Client
def _random_string(length: int = 10) -> str:
@@ -33,7 +33,7 @@ def _assert_authenticated_user(data: Dict[str, Any]) -> None:
@pytest.mark.parametrize("key", ["", None, "valeefgpoqwjgpj", 139, -1, {}, []])
def test_incorrect_values_dont_instanciate_client(url: Any, key: Any) -> None:
"""Ensure we can't instanciate client with nonesense values."""
- from supabase_py import Client, create_client
+ from supabase import Client, create_client
_: Client = create_client(url, key)
diff --git a/tests/test_dummy.py b/tests/test_dummy.py
index 54a1a871..86b7e0f0 100644
--- a/tests/test_dummy.py
+++ b/tests/test_dummy.py
@@ -1,8 +1,8 @@
-import supabase_py
+import supabase
"""
Convert this flow into a test
-client = supabase_py.Client("", "")
+client = supabase.Client("", "")
client.auth.sign_up({"email": "anemail@gmail.com", "password": "apassword"})
"""
@@ -13,4 +13,4 @@ def test_dummy() -> None:
def test_client_initialziation() -> None:
- client = supabase_py.Client("http://testwebsite.com", "atestapi")
+ client = supabase.Client("http://testwebsite.com", "atestapi")
From 99139a9e43602a9371f19ef578206af7665ad818 Mon Sep 17 00:00:00 2001
From: Lee Yi Jie Joel
Date: Thu, 7 Oct 2021 11:16:44 -0500
Subject: [PATCH 041/737] Update __init__.py
---
supabase/__init__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 2a4007c2..6a3ad8e8 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.0.2"
+__version__ = "0.0.3"
from supabase import client, lib
from supabase.client import Client, create_client
From 33d1aae842c596a0091f33d516e196a5c16f54c6 Mon Sep 17 00:00:00 2001
From: Ian Tracey
Date: Mon, 11 Oct 2021 01:00:12 -0400
Subject: [PATCH 042/737] updates readme to install the correct package
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8a17b385..a3ee50bb 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ We are currently in Public Alpha. Watch "releases" of this repo to get notified
Now install the package. (for > Python 3.7)
```bash
-pip install supabase-py
+pip install supabase
```
#### Local installation
From 78d6b81df9bb24930aaf24d86f2bd582b987d77a Mon Sep 17 00:00:00 2001
From: anand2312
Date: Tue, 12 Oct 2021 22:16:09 +0530
Subject: [PATCH 043/737] chore: move pytest to dev-dependencies
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 8148307d..706b7acf 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -10,12 +10,12 @@ python = "^3.7.1"
postgrest-py = "^0.5.0"
realtime-py = "^0.1.2"
gotrue = "0.2.0"
-pytest = "^6"
requests = "2.25.1"
[tool.poetry.dev-dependencies]
pre_commit = "^2.1.0"
black = "^21.7b0"
+pytest = "^6.2.5"
[build-system]
requires = ["poetry>=0.12", "setuptools>=30.3.0,<50"]
From c0b4fe8a37f772bb7bbcdc4788329780ffc01bf6 Mon Sep 17 00:00:00 2001
From: anand2312
Date: Wed, 13 Oct 2021 12:57:57 +0530
Subject: [PATCH 044/737] chore: add httpx to deps
---
pyproject.toml | 1 +
1 file changed, 1 insertion(+)
diff --git a/pyproject.toml b/pyproject.toml
index 706b7acf..5a052c11 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -11,6 +11,7 @@ postgrest-py = "^0.5.0"
realtime-py = "^0.1.2"
gotrue = "0.2.0"
requests = "2.25.1"
+httpx = "^0.19.0"
[tool.poetry.dev-dependencies]
pre_commit = "^2.1.0"
From 247111641fdafcd51ad749414cb44b2d5414fe3f Mon Sep 17 00:00:00 2001
From: anand2312
Date: Wed, 13 Oct 2021 14:51:45 +0530
Subject: [PATCH 045/737] chore: remove language version pin for black
---
.pre-commit-config.yaml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2d0ecd8a..52ce9704 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -20,8 +20,7 @@ repos:
- id: autoflake
args: ['--in-place', '--remove-all-unused-imports']
-- repo: https://github.com/ambv/black
+- repo: https://github.com/psf/black
rev: 21.5b1
hooks:
- id: black
- language_version: python3.7
From e0748a8700818c4c2caaa538d36006c7212dcb29 Mon Sep 17 00:00:00 2001
From: anand2312
Date: Wed, 13 Oct 2021 14:52:34 +0530
Subject: [PATCH 046/737] feat: add async support to storage buckets API
---
supabase/lib/storage/storage_bucket_api.py | 124 +++++++++++----------
1 file changed, 63 insertions(+), 61 deletions(-)
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
index 0b6658d8..d7266047 100644
--- a/supabase/lib/storage/storage_bucket_api.py
+++ b/supabase/lib/storage/storage_bucket_api.py
@@ -1,29 +1,64 @@
-from typing import Any, Dict
+from __future__ import annotations
-import requests
-from requests import HTTPError
+from collections.abc import Awaitable
+from typing import Any, Literal, Optional, Union
+
+from httpx import AsyncClient, Client
+
+RequestMethod = Literal["GET", "POST", "PUT", "DELETE", "PATCH"]
+# dict is returned when the request was synchronous, awaitable when async, None if there was an error
+_SyncOrAsyncResponse = Union[dict[str, Any], Awaitable, None]
class StorageBucketAPI:
"""This class abstracts access to the endpoint to the Get, List, Empty, and Delete operations on a bucket"""
- def __init__(self, url, headers):
+ def __init__(
+ self, url: str, headers: dict[str, str], is_async: bool = False
+ ) -> None:
self.url = url
self.headers = headers
- def list_buckets(self) -> Dict[str, Any]:
- """Retrieves the details of all storage buckets within an existing product."""
- try:
- response = requests.get(f"{self.url}/bucket", headers=self.headers)
- response.raise_for_status()
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- print(f"Other error occurred: {err}") # Python 3.6
+ self._is_async = is_async
+
+ if is_async:
+ self._client = AsyncClient(headers=self.headers)
else:
- return response.json()
+ self._client = Client(headers=self.headers)
+
+ def _request(
+ self, method: RequestMethod, url: str, json: Optional[dict[Any, Any]] = None
+ ) -> Union[dict[Any, Any], Awaitable, None]:
+ if self._is_async:
+ return self._async_request(method, url, json)
+ else:
+ return self._sync_request(method, url, json)
+
+ def _sync_request(
+ self, method: RequestMethod, url: str, json: Optional[dict[Any, Any]] = None
+ ) -> Optional[dict[Any, Any]]:
+ if isinstance(self._client, AsyncClient): # only to appease the type checker
+ return
+
+ response = self._client.request(method, url, json=json)
+ response.raise_for_status()
+ return response.json()
- def get_bucket(self, id: str) -> Dict[str, Any]:
+ async def _async_request(
+ self, method: RequestMethod, url: str, json: Optional[dict[Any, Any]] = None
+ ) -> Optional[dict[Any, Any]]:
+ if isinstance(self._client, Client): # only to appease the type checker
+ return
+
+ response = await self._client.request(method, url, json=json)
+ response.raise_for_status()
+ return response.json()
+
+ def list_buckets(self) -> _SyncOrAsyncResponse:
+ """Retrieves the details of all storage buckets within an existing product."""
+ return self._request("GET", f"{self.url}/bucket")
+
+ def get_bucket(self, id: str) -> _SyncOrAsyncResponse:
"""Retrieves the details of an existing storage bucket.
Parameters
@@ -31,17 +66,11 @@ def get_bucket(self, id: str) -> Dict[str, Any]:
id
The unique identifier of the bucket you would like to retrieve.
"""
- try:
- response = requests.get(f"{self.url}/bucket/{id}", headers=self.headers)
- response.raise_for_status()
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- print(f"Other error occurred: {err}") # Python 3.6
- else:
- return response.json()
+ return self._request("GET", f"{self.url}/bucket/{id}")
- def create_bucket(self, id: str) -> Dict[str, Any]:
+ def create_bucket(
+ self, id: str, name: str, public: bool = False
+ ) -> _SyncOrAsyncResponse:
"""Creates a new storage bucket.
Parameters
@@ -49,19 +78,13 @@ def create_bucket(self, id: str) -> Dict[str, Any]:
id
A unique identifier for the bucket you are creating.
"""
- try:
- response = requests.post(
- f"{self.url}/bucket", data={"id": id}, headers=self.headers
- )
- response.raise_for_status()
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- print(f"Other error occurred: {err}") # Python 3.6
- else:
- return response.json()
+ return self._request(
+ "POST",
+ f"{self.url}/bucket",
+ json={"id": id, "name": name, "public": public},
+ )
- def empty_bucket(self, id: str) -> Dict[str, Any]:
+ def empty_bucket(self, id: str) -> _SyncOrAsyncResponse:
"""Removes all objects inside a single bucket.
Parameters
@@ -69,19 +92,9 @@ def empty_bucket(self, id: str) -> Dict[str, Any]:
id
The unique identifier of the bucket you would like to empty.
"""
- try:
- response = requests.post(
- f"{self.url}/bucket/{id}/empty", data={}, headers=self.headers
- )
- response.raise_for_status()
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- print(f"Other error occurred: {err}") # Python 3.6
- else:
- return response.json()
+ return self._request("POST", f"{self.url}/bucket/{id}/empty", json={})
- def delete_bucket(self, id: str) -> Dict[str, Any]:
+ def delete_bucket(self, id: str) -> _SyncOrAsyncResponse:
"""Deletes an existing bucket. Note that you cannot delete buckets with existing objects inside. You must first
`empty()` the bucket.
@@ -90,15 +103,4 @@ def delete_bucket(self, id: str) -> Dict[str, Any]:
id
The unique identifier of the bucket you would like to delete.
"""
- try:
- response = requests.delete(
- f"{self.url}/bucket/{id}", data={}, headers=self.headers
- )
-
- response.raise_for_status()
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- print(f"Other error occurred: {err}") # Python 3.6
- else:
- return response.json()
+ return self._request("DELETE", f"{self.url}/bucket/{id}", json={})
From 4d68841f16ab2c73b7ecb9974fe3654ea7e47d9d Mon Sep 17 00:00:00 2001
From: anand2312
Date: Wed, 13 Oct 2021 15:25:28 +0530
Subject: [PATCH 047/737] doc: add doc about more params to create_bucket
---
supabase/lib/storage/storage_bucket_api.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
index d7266047..3b893053 100644
--- a/supabase/lib/storage/storage_bucket_api.py
+++ b/supabase/lib/storage/storage_bucket_api.py
@@ -69,7 +69,7 @@ def get_bucket(self, id: str) -> _SyncOrAsyncResponse:
return self._request("GET", f"{self.url}/bucket/{id}")
def create_bucket(
- self, id: str, name: str, public: bool = False
+ self, id: str, name: str = None, public: bool = False
) -> _SyncOrAsyncResponse:
"""Creates a new storage bucket.
@@ -77,6 +77,10 @@ def create_bucket(
----------
id
A unique identifier for the bucket you are creating.
+ name
+ A name for the bucket you are creating. If not passed, the id is used as the name as well.
+ public
+ Whether the bucket you are creating should be publicly accessible. Defaults to False.
"""
return self._request(
"POST",
From b5f7316a1cb004db8ec9fd15245912e580443b98 Mon Sep 17 00:00:00 2001
From: anand2312
Date: Wed, 13 Oct 2021 19:41:52 +0530
Subject: [PATCH 048/737] chore: type the module
---
supabase/lib/storage/storage_bucket_api.py | 106 +++++++++++++++++----
1 file changed, 85 insertions(+), 21 deletions(-)
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
index 3b893053..10524a1c 100644
--- a/supabase/lib/storage/storage_bucket_api.py
+++ b/supabase/lib/storage/storage_bucket_api.py
@@ -1,13 +1,43 @@
from __future__ import annotations
from collections.abc import Awaitable
-from typing import Any, Literal, Optional, Union
+from dataclasses import dataclass
+from datetime import datetime
+from typing import Any, Literal, Optional, Type, Union
from httpx import AsyncClient, Client
-RequestMethod = Literal["GET", "POST", "PUT", "DELETE", "PATCH"]
-# dict is returned when the request was synchronous, awaitable when async, None if there was an error
-_SyncOrAsyncResponse = Union[dict[str, Any], Awaitable, None]
+__all__ = ["Bucket", "StorageBucketAPI"]
+
+_RequestMethod = Literal["GET", "POST", "PUT", "DELETE", "PATCH"]
+
+
+@dataclass
+class Bucket:
+ id: str
+ name: str
+ owner: str
+ public: bool
+ created_at: datetime
+ updated_at: datetime
+
+ def __post_init__(self) -> None:
+ # created_at and updated_at are returned by the API as ISO timestamps
+ # so we convert them to datetime objects
+ self.created_at = datetime.fromisoformat(self.created_at) # type: ignore
+ self.updated_at = datetime.fromisoformat(self.updated_at) # type: ignore
+
+
+ResponseType = Union[
+ dict[
+ str, str
+ ], # response from an endpoint without a custom response_class, example: create_bucket
+ list[
+ Bucket
+ ], # response from an endpoint which returns a list of objects, example: list_buckets
+ Bucket, # response from an endpoint which returns a single object, example: get_bucket
+ None,
+]
class StorageBucketAPI:
@@ -27,38 +57,70 @@ def __init__(
self._client = Client(headers=self.headers)
def _request(
- self, method: RequestMethod, url: str, json: Optional[dict[Any, Any]] = None
- ) -> Union[dict[Any, Any], Awaitable, None]:
+ self,
+ method: _RequestMethod,
+ url: str,
+ json: Optional[dict[Any, Any]] = None,
+ response_class: Optional[Type] = None,
+ ) -> Any:
if self._is_async:
- return self._async_request(method, url, json)
+ return self._async_request(method, url, json, response_class)
else:
- return self._sync_request(method, url, json)
+ return self._sync_request(method, url, json, response_class)
def _sync_request(
- self, method: RequestMethod, url: str, json: Optional[dict[Any, Any]] = None
- ) -> Optional[dict[Any, Any]]:
+ self,
+ method: _RequestMethod,
+ url: str,
+ json: Optional[dict[Any, Any]] = None,
+ response_class: Optional[Type] = None,
+ ) -> ResponseType:
if isinstance(self._client, AsyncClient): # only to appease the type checker
return
response = self._client.request(method, url, json=json)
response.raise_for_status()
- return response.json()
+
+ response_data = response.json()
+
+ if not response_class:
+ # if no response_class is specified, return the raw response
+ return response_data
+
+ if isinstance(response_data, list):
+ # if a list of objects are returned, convert each member to response_class
+ return [response_class(**item) for item in response_data]
+ else:
+ return response_class(**response_data)
async def _async_request(
- self, method: RequestMethod, url: str, json: Optional[dict[Any, Any]] = None
- ) -> Optional[dict[Any, Any]]:
+ self,
+ method: _RequestMethod,
+ url: str,
+ json: Optional[dict[Any, Any]] = None,
+ response_class: Optional[Type] = None,
+ ) -> ResponseType:
if isinstance(self._client, Client): # only to appease the type checker
return
response = await self._client.request(method, url, json=json)
response.raise_for_status()
- return response.json()
- def list_buckets(self) -> _SyncOrAsyncResponse:
+ response_data = response.json()
+
+ if not response_class:
+ return response_data
+
+ if isinstance(response_data, list):
+ return [response_class(**item) for item in response_data]
+ else:
+ return response_class(**response_data)
+
+ def list_buckets(self) -> Union[list[Bucket], Awaitable[list[Bucket]], None]:
"""Retrieves the details of all storage buckets within an existing product."""
- return self._request("GET", f"{self.url}/bucket")
+ return self._request("GET", f"{self.url}/bucket", response_class=Bucket)
- def get_bucket(self, id: str) -> _SyncOrAsyncResponse:
+ def get_bucket(self, id: str) -> Union[Bucket, Awaitable[Bucket], None]:
"""Retrieves the details of an existing storage bucket.
Parameters
@@ -66,11 +128,11 @@ def get_bucket(self, id: str) -> _SyncOrAsyncResponse:
id
The unique identifier of the bucket you would like to retrieve.
"""
- return self._request("GET", f"{self.url}/bucket/{id}")
+ return self._request("GET", f"{self.url}/bucket/{id}", response_class=Bucket)
def create_bucket(
self, id: str, name: str = None, public: bool = False
- ) -> _SyncOrAsyncResponse:
+ ) -> Union[dict[str, str], Awaitable[dict[str, str]]]:
"""Creates a new storage bucket.
Parameters
@@ -88,7 +150,7 @@ def create_bucket(
json={"id": id, "name": name, "public": public},
)
- def empty_bucket(self, id: str) -> _SyncOrAsyncResponse:
+ def empty_bucket(self, id: str) -> Union[dict[str, str], Awaitable[dict[str, str]]]:
"""Removes all objects inside a single bucket.
Parameters
@@ -98,7 +160,9 @@ def empty_bucket(self, id: str) -> _SyncOrAsyncResponse:
"""
return self._request("POST", f"{self.url}/bucket/{id}/empty", json={})
- def delete_bucket(self, id: str) -> _SyncOrAsyncResponse:
+ def delete_bucket(
+ self, id: str
+ ) -> Union[dict[str, str], Awaitable[dict[str, str]]]:
"""Deletes an existing bucket. Note that you cannot delete buckets with existing objects inside. You must first
`empty()` the bucket.
From 55e7eef29541c579599c325bc45026aac45f0ecc Mon Sep 17 00:00:00 2001
From: anand2312
Date: Wed, 13 Oct 2021 20:24:22 +0530
Subject: [PATCH 049/737] feat: create custom StorageException
---
supabase/lib/storage/storage_bucket_api.py | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
index 10524a1c..9ada5775 100644
--- a/supabase/lib/storage/storage_bucket_api.py
+++ b/supabase/lib/storage/storage_bucket_api.py
@@ -5,13 +5,17 @@
from datetime import datetime
from typing import Any, Literal, Optional, Type, Union
-from httpx import AsyncClient, Client
+from httpx import AsyncClient, Client, HTTPError
__all__ = ["Bucket", "StorageBucketAPI"]
_RequestMethod = Literal["GET", "POST", "PUT", "DELETE", "PATCH"]
+class StorageException(Exception):
+ """Error raised when an operation on the storage API fails."""
+
+
@dataclass
class Bucket:
id: str
@@ -79,7 +83,10 @@ def _sync_request(
return
response = self._client.request(method, url, json=json)
- response.raise_for_status()
+ try:
+ response.raise_for_status()
+ except HTTPError:
+ raise StorageException(response.json())
response_data = response.json()
@@ -104,7 +111,10 @@ async def _async_request(
return
response = await self._client.request(method, url, json=json)
- response.raise_for_status()
+ try:
+ response.raise_for_status()
+ except HTTPError:
+ raise StorageException(response.json())
response_data = response.json()
From 82eec60d5720da135d3b621abe85683d876aed08 Mon Sep 17 00:00:00 2001
From: anand2312
Date: Wed, 13 Oct 2021 20:33:48 +0530
Subject: [PATCH 050/737] fix: default value for `name` in create_bucket
---
supabase/lib/storage/storage_bucket_api.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
index 9ada5775..93291aab 100644
--- a/supabase/lib/storage/storage_bucket_api.py
+++ b/supabase/lib/storage/storage_bucket_api.py
@@ -157,7 +157,7 @@ def create_bucket(
return self._request(
"POST",
f"{self.url}/bucket",
- json={"id": id, "name": name, "public": public},
+ json={"id": id, "name": name or id, "public": public},
)
def empty_bucket(self, id: str) -> Union[dict[str, str], Awaitable[dict[str, str]]]:
From 72f23f05701c548a60cefa52bd396fb2c799e312 Mon Sep 17 00:00:00 2001
From: Lee Yi Jie Joel
Date: Thu, 14 Oct 2021 10:49:53 -0500
Subject: [PATCH 051/737] chore: add examples folder
---
examples/.gitkeep | 1 +
1 file changed, 1 insertion(+)
create mode 100644 examples/.gitkeep
diff --git a/examples/.gitkeep b/examples/.gitkeep
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/examples/.gitkeep
@@ -0,0 +1 @@
+
From a95dc8a9beaedb7f80289eb2c7c08a401bcd253f Mon Sep 17 00:00:00 2001
From: Lee Yi Jie Joel
Date: Thu, 14 Oct 2021 12:54:39 -0500
Subject: [PATCH 052/737] Update issue templates
---
.github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++++++++++++++++
.github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++
2 files changed, 58 insertions(+)
create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md
create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..dd84ea78
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,38 @@
+---
+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 '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. 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..bbcbbe7d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+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.
From 0ba494cf62c2923b3903cee1651be8abebb454d1 Mon Sep 17 00:00:00 2001
From: Juliano Fernandes
Date: Thu, 14 Oct 2021 01:30:30 -0300
Subject: [PATCH 053/737] build: add requests-toolbelt to the dependencies list
feat: add mime type to uploaded files
test: ensure upload files works properly
---
pyproject.toml | 1 +
supabase/lib/storage/storage_file_api.py | 11 ++++++---
tests/test_client.py | 30 ++++++++++++++++++++++++
3 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 706b7acf..b90d017c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -11,6 +11,7 @@ postgrest-py = "^0.5.0"
realtime-py = "^0.1.2"
gotrue = "0.2.0"
requests = "2.25.1"
+requests-toolbelt = "^0.9.1"
[tool.poetry.dev-dependencies]
pre_commit = "^2.1.0"
diff --git a/supabase/lib/storage/storage_file_api.py b/supabase/lib/storage/storage_file_api.py
index b88fd0ce..e5619bf4 100644
--- a/supabase/lib/storage/storage_file_api.py
+++ b/supabase/lib/storage/storage_file_api.py
@@ -1,5 +1,6 @@
import requests
from requests import HTTPError
+from requests_toolbelt import MultipartEncoder
class StorageFileAPI:
@@ -182,9 +183,13 @@ def upload(self, path: str, file: any, file_options: dict = None):
"""
if file_options is None:
file_options = {}
- headers = dict(self.headers, **file_options)
- headers.update(self.DEFAULT_FILE_OPTIONS)
- files = {"file": open(file, "rb")}
+ headers = dict(self.headers, **self.DEFAULT_FILE_OPTIONS)
+ headers.update(file_options)
+ filename = path.rsplit("/", maxsplit=1)[-1]
+ files = MultipartEncoder(
+ fields={"file": (filename, open(file, "rb"), headers["contentType"])}
+ )
+ headers["Content-Type"] = files.content_type
_path = self._get_final_path(path)
try:
resp = requests.post(
diff --git a/tests/test_client.py b/tests/test_client.py
index 41db74ef..820c6a59 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -97,3 +97,33 @@ def test_client_bucket(supabase: Client) -> None:
# storage_bucket.get_bucket(TEST_BUCKET_NAME)
# storage_bucket.empty_bucket(TEST_BUCKET_NAME)
# storage_bucket.delete_bucket(TEST_BUCKET_NAME)
+
+
+@pytest.mark.skip(reason="missing permissions on test instance")
+def test_client_upload_file(supabase: Client) -> None:
+ """Ensure we can upload files to a bucket"""
+
+ TEST_BUCKET_NAME = "atestbucket"
+
+ storage = supabase.storage()
+ storage_file = storage.StorageFileAPI(TEST_BUCKET_NAME)
+
+ filename = "test.jpeg"
+ filepath = f"tests/{filename}"
+ mimetype = "image/jpeg"
+ options = {"contentType": mimetype}
+
+ storage_file.upload(filename, filepath, options)
+ files = storage_file.list()
+ assert len(files) > 0
+
+ image_info = None
+ for item in files:
+ if item.get("name") == filename:
+ image_info = item
+ break
+
+ assert image_info is not None
+ assert image_info.get("metadata", {}).get("mimetype") == mimetype
+
+ storage_file.remove([filename])
From a09c375b3442ab0a4e48f336f3ab84203abb9f42 Mon Sep 17 00:00:00 2001
From: Sam Poder <39828164+sampoder@users.noreply.github.com>
Date: Sat, 16 Oct 2021 18:02:56 +0800
Subject: [PATCH 054/737] Remove Git Leftovers from Contributing
---
CONTRIBUTING.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 559a740a..354bc05d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -29,4 +29,3 @@ When making pull requests to the repository, make sure to follow these guideline
- In your PR's description, link to any related issues or pull requests to give reviewers the full context of your change.
- 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/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
From 981a410168004637c03691326016c356eb7767a6 Mon Sep 17 00:00:00 2001
From: anand2312
Date: Sat, 23 Oct 2021 10:12:42 +0530
Subject: [PATCH 055/737] chore: remove redundant comments
---
supabase/lib/storage/storage_bucket_api.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
index 93291aab..7112f2d5 100644
--- a/supabase/lib/storage/storage_bucket_api.py
+++ b/supabase/lib/storage/storage_bucket_api.py
@@ -91,11 +91,9 @@ def _sync_request(
response_data = response.json()
if not response_class:
- # if no response_class is specified, return the raw response
return response_data
if isinstance(response_data, list):
- # if a list of objects are returned, convert each member to response_class
return [response_class(**item) for item in response_data]
else:
return response_class(**response_data)
From 71fae8bc139f93e25f4400da16e6edc2bff98129 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 23 Oct 2021 12:17:00 -0500
Subject: [PATCH 056/737] tests: update test instance
---
test.sh | 4 ++--
tests/test_client.py | 15 +++++++--------
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/test.sh b/test.sh
index 85f94056..cb463e60 100755
--- a/test.sh
+++ b/test.sh
@@ -1,4 +1,4 @@
#!/bin/sh
-SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxMjYwOTMyMiwiZXhwIjoxOTI4MTg1MzIyfQ.XL9W5I_VRQ4iyQHVQmjG0BkwRfx6eVyYB3uAKcesukg" \
-SUPABASE_TEST_URL="https://tfsatoopsijgjhrqplra.supabase.co" \
+SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8" \
+SUPABASE_TEST_URL="https://ibrydvrsxoapzgtnhpso.supabase.co" \
poetry run pytest
diff --git a/tests/test_client.py b/tests/test_client.py
index 41db74ef..02ba7e63 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -89,11 +89,10 @@ def test_client_bucket(supabase: Client) -> None:
"""Ensure that the storage bucket operations work"""
TEST_BUCKET_NAME = "atestbucket"
- # TODO[Joel] - Reinstate once permissions on test instance are updated
- # storage = supabase.storage()
- # storage_bucket = storage.StorageBucketAPI()
- # storage_bucket.create_bucket(TEST_BUCKET_NAME)
- # storage_bucket.list_buckets()
- # storage_bucket.get_bucket(TEST_BUCKET_NAME)
- # storage_bucket.empty_bucket(TEST_BUCKET_NAME)
- # storage_bucket.delete_bucket(TEST_BUCKET_NAME)
+ storage = supabase.storage()
+ storage_bucket = storage.StorageBucketAPI()
+ storage_bucket.create_bucket(TEST_BUCKET_NAME)
+ storage_bucket.list_buckets()
+ storage_bucket.get_bucket(TEST_BUCKET_NAME)
+ storage_bucket.empty_bucket(TEST_BUCKET_NAME)
+ storage_bucket.delete_bucket(TEST_BUCKET_NAME)
From e3185b1cc39f87bbe43df1597ad6538501638e37 Mon Sep 17 00:00:00 2001
From: Lee Yi Jie Joel
Date: Sat, 23 Oct 2021 23:22:30 -0500
Subject: [PATCH 057/737] Update ci-python.yml
---
.github/workflows/ci-python.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/ci-python.yml b/.github/workflows/ci-python.yml
index e58abf22..ae073270 100644
--- a/.github/workflows/ci-python.yml
+++ b/.github/workflows/ci-python.yml
@@ -1,6 +1,6 @@
name: CI (Python)
-on: [push]
+on: [push, pull_request]
jobs:
build:
From 1883149302c0e0f697a0433b935fa8549717cbd4 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 23 Oct 2021 23:42:21 -0500
Subject: [PATCH 058/737] fix: ensure python37 compat
---
supabase/lib/storage/storage_bucket_api.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
index 7112f2d5..ae6382c4 100644
--- a/supabase/lib/storage/storage_bucket_api.py
+++ b/supabase/lib/storage/storage_bucket_api.py
@@ -3,13 +3,13 @@
from collections.abc import Awaitable
from dataclasses import dataclass
from datetime import datetime
-from typing import Any, Literal, Optional, Type, Union
+from typing import Any, Dict, List, Optional, Type, Union
from httpx import AsyncClient, Client, HTTPError
__all__ = ["Bucket", "StorageBucketAPI"]
-_RequestMethod = Literal["GET", "POST", "PUT", "DELETE", "PATCH"]
+_RequestMethod = str
class StorageException(Exception):
@@ -33,10 +33,10 @@ def __post_init__(self) -> None:
ResponseType = Union[
- dict[
+ Dict[
str, str
], # response from an endpoint without a custom response_class, example: create_bucket
- list[
+ List[
Bucket
], # response from an endpoint which returns a list of objects, example: list_buckets
Bucket, # response from an endpoint which returns a single object, example: get_bucket
@@ -80,7 +80,7 @@ def _sync_request(
response_class: Optional[Type] = None,
) -> ResponseType:
if isinstance(self._client, AsyncClient): # only to appease the type checker
- return
+ return None
response = self._client.request(method, url, json=json)
try:
From a9b29fbc8091ffe44c2ec99af0188a96a0335eac Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sun, 24 Oct 2021 00:10:05 -0500
Subject: [PATCH 059/737] fix: remove deadweight test
---
tests/test_client.py | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/tests/test_client.py b/tests/test_client.py
index 02ba7e63..6ae0b1f2 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -83,16 +83,3 @@ def test_client_insert(supabase: Client) -> None:
assert current_length == previous_length + 1
# Check returned result for insert was valid.
assert result.get("status_code", 400) == 201
-
-
-def test_client_bucket(supabase: Client) -> None:
-
- """Ensure that the storage bucket operations work"""
- TEST_BUCKET_NAME = "atestbucket"
- storage = supabase.storage()
- storage_bucket = storage.StorageBucketAPI()
- storage_bucket.create_bucket(TEST_BUCKET_NAME)
- storage_bucket.list_buckets()
- storage_bucket.get_bucket(TEST_BUCKET_NAME)
- storage_bucket.empty_bucket(TEST_BUCKET_NAME)
- storage_bucket.delete_bucket(TEST_BUCKET_NAME)
From d593f47fd906a51389cfe210bf4b16ecee1daa37 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 30 Oct 2021 16:00:12 -0500
Subject: [PATCH 060/737] feat: add header to query builder
---
supabase/lib/query_builder.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/supabase/lib/query_builder.py b/supabase/lib/query_builder.py
index 0c1740f2..26219a5d 100644
--- a/supabase/lib/query_builder.py
+++ b/supabase/lib/query_builder.py
@@ -29,6 +29,9 @@ def _execute_monkey_patch(self) -> Dict[str, Any]:
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)
+ import pdb
+
+ pdb.set_trace()
return {
"data": response.json(),
"status_code": response.status_code,
@@ -68,6 +71,7 @@ def __init__(self, url, headers, schema, realtime, table):
"Content-Type": "application/json",
"Accept-Profile": schema,
"Content-Profile": schema,
+ "Prefer": "return=representation",
**headers,
}
self.session = AsyncClient(base_url=url, headers=headers)
From befede6608cb17a4cf547ec6df1ae55fc3ba360e Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 30 Oct 2021 16:04:17 -0500
Subject: [PATCH 061/737] chore: remove debugging statements
---
supabase/lib/query_builder.py | 3 ---
1 file changed, 3 deletions(-)
diff --git a/supabase/lib/query_builder.py b/supabase/lib/query_builder.py
index 26219a5d..1eb3c556 100644
--- a/supabase/lib/query_builder.py
+++ b/supabase/lib/query_builder.py
@@ -29,9 +29,6 @@ def _execute_monkey_patch(self) -> Dict[str, Any]:
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)
- import pdb
-
- pdb.set_trace()
return {
"data": response.json(),
"status_code": response.status_code,
From 5dabf3cc4311d958b63adb3629bdd55b16572e3e Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Sun, 31 Oct 2021 01:01:28 +0200
Subject: [PATCH 062/737] Remove wrong return type hinting
---
supabase/client.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/supabase/client.py b/supabase/client.py
index e2981eb5..a3fe494b 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -77,7 +77,7 @@ def storage(self):
"""Create instance of the storage client"""
return SupabaseStorageClient(self.storage_url, self._get_auth_headers())
- def table(self, table_name: str) -> SupabaseQueryBuilder:
+ def table(self, table_name: str):
"""Perform a table operation.
Note that the supabase client uses the `from` method, but in Python,
@@ -86,7 +86,7 @@ def table(self, table_name: str) -> SupabaseQueryBuilder:
"""
return self.from_(table_name)
- def from_(self, table_name: str) -> SupabaseQueryBuilder:
+ def from_(self, table_name: str):
"""Perform a table operation.
See the `table` method.
From d863b8ea6085dfcfaa37837638c86ec8226803b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Sun, 31 Oct 2021 01:23:30 +0200
Subject: [PATCH 063/737] Add github dependency for postgrest-py until new
release
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index e70040e5..b5ad178c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -7,7 +7,7 @@ license = "MIT"
[tool.poetry.dependencies]
python = "^3.7.1"
-postgrest-py = "^0.5.0"
+postgrest-py = {git = "https://github.com/supabase-community/postgrest-py.git", rev = "master"}
realtime-py = "^0.1.2"
gotrue = "0.2.0"
requests = "2.25.1"
From aa1a34f3cda5fed8592d99f6671e16121e7045ab Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Sun, 31 Oct 2021 21:05:37 +0100
Subject: [PATCH 064/737] Fix upsert in Storage File API
---
supabase/lib/storage/storage_file_api.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/supabase/lib/storage/storage_file_api.py b/supabase/lib/storage/storage_file_api.py
index e5619bf4..d5310528 100644
--- a/supabase/lib/storage/storage_file_api.py
+++ b/supabase/lib/storage/storage_file_api.py
@@ -15,7 +15,7 @@ class StorageFileAPI:
DEFAULT_FILE_OPTIONS = {
"cacheControl": "3600",
"contentType": "text/plain;charset=UTF-8",
- "upsert": "False",
+ "x-upsert": "false",
}
def __init__(self, url: str, headers: dict, bucket_id: str):
From 083783f328cc56736fb6e3e4af527d7cdef00d61 Mon Sep 17 00:00:00 2001
From: Philipp Lackinger <40075339+Phillackinger@users.noreply.github.com>
Date: Sun, 14 Nov 2021 20:51:19 +0100
Subject: [PATCH 065/737] fixing badge in readme
using the right badge "supabase" instad of "supabase-py"
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index a3ee50bb..76a8e096 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# supabase-py
[](https://github.com/supabase/supabase-py/actions)
-[](https://badge.fury.io/py/supabase-py)
+[](https://badge.fury.io/py/supabase)
[](https://supabase.readthedocs.io/en/latest/?badge=latest)
Supabase client for Python. This mirrors the design of [supabase-js](https://github.com/supabase/supabase-js/blob/master/README.md)
From d4f010decffb8d11bd5714f310cf897d5ed07b76 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Mon, 15 Nov 2021 15:20:30 +0000
Subject: [PATCH 066/737] feat: unify http client to be httpx
---
pyproject.toml | 2 --
supabase/lib/query_builder.py | 14 ++++-----
supabase/lib/storage/storage_file_api.py | 38 +++++++++++++-----------
3 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index b5ad178c..0a631f62 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -10,8 +10,6 @@ python = "^3.7.1"
postgrest-py = {git = "https://github.com/supabase-community/postgrest-py.git", rev = "master"}
realtime-py = "^0.1.2"
gotrue = "0.2.0"
-requests = "2.25.1"
-requests-toolbelt = "^0.9.1"
httpx = "^0.19.0"
[tool.poetry.dev-dependencies]
diff --git a/supabase/lib/query_builder.py b/supabase/lib/query_builder.py
index 1eb3c556..b1c323be 100644
--- a/supabase/lib/query_builder.py
+++ b/supabase/lib/query_builder.py
@@ -1,6 +1,6 @@
from typing import Any, Dict
-import requests
+import httpx
from httpx import AsyncClient
from postgrest_py.client import PostgrestClient
from postgrest_py.request_builder import QueryRequestBuilder
@@ -11,19 +11,19 @@ def _execute_monkey_patch(self) -> Dict[str, Any]:
method: str = self.http_method.lower()
additional_kwargs: Dict[str, Any] = {}
if method == "get":
- func = requests.get
+ func = httpx.get
elif method == "post":
- func = requests.post
+ func = httpx.post
# Additionally requires the json body (e.g on insert, self.json==row).
additional_kwargs = {"json": self.json}
elif method == "put":
- func = requests.put
+ func = httpx.put
additional_kwargs = {"json": self.json}
elif method == "patch":
- func = requests.patch
+ func = httpx.patch
additional_kwargs = {"json": self.json}
elif method == "delete":
- func = requests.delete
+ func = httpx.delete
else:
raise NotImplementedError(f"Method '{method}' not recognised.")
url: str = str(self.session.base_url).rstrip("/")
@@ -36,7 +36,7 @@ def _execute_monkey_patch(self) -> Dict[str, Any]:
# NOTE(fedden): Here we monkey patch the otherwise async method and use the
-# requests module instead. Hopefully cleans things up a little
+# httpx sync methods. Hopefully cleans things up a little
# for the user as they are now not bound to async methods.
QueryRequestBuilder.execute = _execute_monkey_patch
diff --git a/supabase/lib/storage/storage_file_api.py b/supabase/lib/storage/storage_file_api.py
index d5310528..9c5d7c39 100644
--- a/supabase/lib/storage/storage_file_api.py
+++ b/supabase/lib/storage/storage_file_api.py
@@ -1,6 +1,7 @@
-import requests
-from requests import HTTPError
-from requests_toolbelt import MultipartEncoder
+from typing import Any
+
+import httpx
+from httpx import HTTPError
class StorageFileAPI:
@@ -46,7 +47,7 @@ def create_signed_url(self, path: str, expires_in: int):
"""
try:
_path = self._get_final_path(path)
- response = requests.post(
+ response = httpx.post(
f"{self.url}/object/sign/{_path}",
json={"expiresIn": str(expires_in)},
headers=self.headers,
@@ -86,7 +87,7 @@ def move(self, from_path: str, to_path: str):
The new file path, including the new file name. For example `folder/image-copy.png`.
"""
try:
- response = requests.post(
+ response = httpx.post(
f"{self.url}/object/move",
json={
"bucketId": self.bucket_id,
@@ -112,9 +113,10 @@ def remove(self, paths: list):
An array or list of files to be deletes, including the path and file name. For example [`folder/image.png`].
"""
try:
- response = requests.delete(
+ response = httpx.request(
+ "DELETE",
f"{self.url}/object/{self.bucket_id}",
- data={"prefixes": paths},
+ json={"prefixes": paths},
headers=self.headers,
)
response.raise_for_status()
@@ -139,9 +141,10 @@ def list(self, path: str = None, options: dict = {}):
body = dict(self.DEFAULT_SEARCH_OPTIONS, **options)
headers = dict(self.headers, **{"Content-Type": "application/json"})
body["prefix"] = path if path else ""
-
- getdata = requests.post(
- f"{self.url}/object/list/{self.bucket_id}", json=body, headers=headers
+ getdata = httpx.post(
+ f"{self.url}/object/list/{self.bucket_id}",
+ json=body,
+ headers=headers,
)
getdata.raise_for_status()
except HTTPError as http_err:
@@ -160,7 +163,7 @@ def download(self, path: str):
"""
try:
_path = self._get_final_path(path)
- response = requests.get(f"{self.url}/object/{_path}", headers=self.headers)
+ response = httpx.get(f"{self.url}/object/{_path}", headers=self.headers)
except HTTPError as http_err:
print(f"HTTP error occurred: {http_err}") # Python 3.6
@@ -169,7 +172,7 @@ def download(self, path: str):
else:
return response.content
- def upload(self, path: str, file: any, file_options: dict = None):
+ def upload(self, path: str, file: Any, file_options: dict = None):
"""
Uploads a file to an existing bucket.
Parameters
@@ -186,14 +189,13 @@ def upload(self, path: str, file: any, file_options: dict = None):
headers = dict(self.headers, **self.DEFAULT_FILE_OPTIONS)
headers.update(file_options)
filename = path.rsplit("/", maxsplit=1)[-1]
- files = MultipartEncoder(
- fields={"file": (filename, open(file, "rb"), headers["contentType"])}
- )
- headers["Content-Type"] = files.content_type
+ files = {"file": (filename, open(file, "rb"), headers["contentType"])}
_path = self._get_final_path(path)
try:
- resp = requests.post(
- f"{self.url}/object/{_path}", data=files, headers=headers
+ resp = httpx.post(
+ f"{self.url}/object/{_path}",
+ files=files,
+ headers=headers,
)
except HTTPError as http_err:
print(f"HTTP error occurred: {http_err}") # Python 3.6
From 41e1be4f82dfada45bbe61c1695dde9cd42c4571 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Mon, 15 Nov 2021 16:56:11 +0000
Subject: [PATCH 067/737] chore: point gotrue and postgrest to specific commit
---
pyproject.toml | 4 ++--
supabase/lib/auth_client.py | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 0a631f62..f7146db7 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -7,9 +7,9 @@ license = "MIT"
[tool.poetry.dependencies]
python = "^3.7.1"
-postgrest-py = {git = "https://github.com/supabase-community/postgrest-py.git", rev = "master"}
+postgrest-py = {git = "https://github.com/supabase-community/postgrest-py.git", rev = "ba83ba43c6cfba906fbb710d3913e5dc070fdde3"}
realtime-py = "^0.1.2"
-gotrue = "0.2.0"
+gotrue = {git = "https://github.com/supabase-community/gotrue-py.git", rev = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"}
httpx = "^0.19.0"
[tool.poetry.dev-dependencies]
diff --git a/supabase/lib/auth_client.py b/supabase/lib/auth_client.py
index b4ef411b..e91ced80 100644
--- a/supabase/lib/auth_client.py
+++ b/supabase/lib/auth_client.py
@@ -1,4 +1,4 @@
-from typing import Any, Dict, Optional
+from typing import Any, Dict
import gotrue
@@ -12,7 +12,7 @@ def __init__(
detect_session_in_url: bool = False,
auto_refresh_token: bool = False,
persist_session: bool = False,
- local_storage: Optional[Dict[str, Any]] = None,
+ local_storage: Dict[str, Any] = {},
headers: Dict[str, str] = {},
):
"""Instanciate SupabaseAuthClient instance."""
From 269dfad8514876936023bc58d5c2ac20c5b1ee91 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Mon, 15 Nov 2021 17:32:49 +0000
Subject: [PATCH 068/737] test: add phone None for avoid error
---
tests/test_client.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/tests/test_client.py b/tests/test_client.py
index 3b8cf16f..05cc6a4c 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -44,7 +44,11 @@ def test_client_auth(supabase: Client) -> None:
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)
+ user = supabase.auth.sign_up(
+ email=random_email,
+ password=random_password,
+ phone=None,
+ )
_assert_authenticated_user(user)
# Sign out.
supabase.auth.sign_out()
From 759142b9e5f7701f41b0e24c1875e103bec2760b Mon Sep 17 00:00:00 2001
From: Jeff Hale
Date: Tue, 7 Dec 2021 08:09:20 -0500
Subject: [PATCH 069/737] docstrings - fix typos
---
supabase/client.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/supabase/client.py b/supabase/client.py
index a3fe494b..20a62562 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -142,7 +142,7 @@ async def _close_subscription(self, subscription):
await self._closeChannel(subscription)
def get_subscriptions(self):
- """Return all channels the the client is subscribed to."""
+ """Return all channels the client is subscribed to."""
return self.realtime.channels
@staticmethod
@@ -197,7 +197,7 @@ def _get_auth_headers(self) -> Dict[str, str]:
def create_client(supabase_url: str, supabase_key: str, **options) -> Client:
- """Create client function to instanciate supabase client like JS runtime.
+ """Create client function to instantiate supabase client like JS runtime.
Parameters
----------
@@ -211,7 +211,7 @@ def create_client(supabase_url: str, supabase_key: str, **options) -> Client:
Examples
--------
- Instanciating the client.
+ Instantiating the client.
>>> import os
>>> from supabase import create_client, Client
>>>
From b228d2b4e460a79c622ec38ebde5a8352bcc110e Mon Sep 17 00:00:00 2001
From: Joseph Riddle
Date: Tue, 14 Dec 2021 16:56:05 -0800
Subject: [PATCH 070/737] Add typed client options
---
supabase/client.py | 52 ++++++++++++------------------
supabase/lib/client_options.py | 58 ++++++++++++++++++++++++++++++++++
supabase/lib/constants.py | 5 +--
supabase/lib/storage_client.py | 6 ++--
test.ps1 | 5 +++
tests/conftest.py | 6 ++--
tests/test_client_options.py | 39 +++++++++++++++++++++++
7 files changed, 133 insertions(+), 38 deletions(-)
create mode 100644 supabase/lib/client_options.py
create mode 100644 test.ps1
create mode 100644 tests/test_client_options.py
diff --git a/supabase/client.py b/supabase/client.py
index a3fe494b..002c8175 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -1,22 +1,15 @@
-from typing import Any, Dict
+from typing import Any, Coroutine, Dict
+from httpx import Response
from postgrest_py import PostgrestClient
+from postgrest_py.request_builder import RequestBuilder
from supabase.lib.auth_client import SupabaseAuthClient
-from supabase.lib.constants import DEFAULT_HEADERS
+from supabase.lib.client_options import ClientOptions
+from supabase.lib.constants import DEFAULT_OPTIONS
from supabase.lib.query_builder import SupabaseQueryBuilder
-from supabase.lib.realtime_client import SupabaseRealtimeClient
from supabase.lib.storage_client import SupabaseStorageClient
-DEFAULT_OPTIONS = {
- "schema": "public",
- "auto_refresh_token": True,
- "persist_session": True,
- "detect_session_in_url": True,
- "local_storage": {},
- "headers": DEFAULT_HEADERS,
-}
-
class Client:
"""Supabase client class."""
@@ -47,19 +40,19 @@ def __init__(
self.supabase_url = supabase_url
self.supabase_key = supabase_key
- settings = {**DEFAULT_OPTIONS, **options}
- settings["headers"].update(self._get_auth_headers())
+ settings = DEFAULT_OPTIONS.replace(**options)
+ settings.headers.update(self._get_auth_headers())
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.storage_url = f"{supabase_url}/storage/v1"
- self.schema: str = settings.pop("schema")
+ self.schema: str = settings.schema
# Instantiate clients.
self.auth: SupabaseAuthClient = self._init_supabase_auth_client(
auth_url=self.auth_url,
supabase_key=self.supabase_key,
- **settings,
+ client_options=settings,
)
# TODO(fedden): Bring up to parity with JS client.
# self.realtime: SupabaseRealtimeClient = self._init_realtime_client(
@@ -70,14 +63,14 @@ def __init__(
self.postgrest: PostgrestClient = self._init_postgrest_client(
rest_url=self.rest_url,
supabase_key=self.supabase_key,
- **settings,
+ headers=settings.headers,
)
- def storage(self):
+ def storage(self) -> SupabaseStorageClient:
"""Create instance of the storage client"""
return SupabaseStorageClient(self.storage_url, self._get_auth_headers())
- def table(self, table_name: str):
+ def table(self, table_name: str) -> RequestBuilder:
"""Perform a table operation.
Note that the supabase client uses the `from` method, but in Python,
@@ -86,7 +79,7 @@ def table(self, table_name: str):
"""
return self.from_(table_name)
- def from_(self, table_name: str):
+ def from_(self, table_name: str) -> RequestBuilder:
"""Perform a table operation.
See the `table` method.
@@ -100,7 +93,7 @@ def from_(self, table_name: str):
)
return query_builder.from_(table_name)
- def rpc(self, fn, params):
+ def rpc(self, fn, params) -> Coroutine[Any, Any, Response]:
"""Performs a stored procedure call.
Parameters
@@ -158,20 +151,16 @@ def _init_realtime_client(
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],
+ client_options: ClientOptions,
) -> 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,
+ auto_refresh_token=client_options.auto_refresh_token,
+ detect_session_in_url=client_options.detect_session_in_url,
+ persist_session=client_options.persist_session,
+ local_storage=client_options.local_storage,
+ headers=client_options.headers,
)
@staticmethod
@@ -179,7 +168,6 @@ def _init_postgrest_client(
rest_url: str,
supabase_key: str,
headers: Dict[str, str],
- **kwargs, # other unused settings
) -> PostgrestClient:
"""Private helper for creating an instance of the Postgrest client."""
client = PostgrestClient(rest_url, headers=headers)
diff --git a/supabase/lib/client_options.py b/supabase/lib/client_options.py
new file mode 100644
index 00000000..aecbd90f
--- /dev/null
+++ b/supabase/lib/client_options.py
@@ -0,0 +1,58 @@
+import copy
+import dataclasses
+from typing import Any, Callable, Dict, Optional
+
+from supabase import __version__
+
+
+DEFAULT_HEADERS = {"X-Client-Info": f"supabase-py/{__version__}"}
+
+
+@dataclasses.dataclass
+class ClientOptions:
+
+ """The Postgres schema which your tables belong to. Must be on the list of exposed schemas in Supabase. Defaults to 'public'."""
+
+ schema: str = "public"
+
+ """Optional headers for initializing the client."""
+ headers: Dict[str, str] = dataclasses.field(default_factory=DEFAULT_HEADERS.copy)
+
+ """Automatically refreshes the token for logged in users."""
+ auto_refresh_token: bool = True
+
+ """Whether to persist a logged in session to storage."""
+ persist_session: bool = True
+
+ """Detect a session from the URL. Used for OAuth login callbacks."""
+ detect_session_in_url: bool = True
+
+ """A storage provider. Used to store the logged in session."""
+ local_storage: Dict[str, Any] = dataclasses.field(default_factory=lambda: {})
+
+ """Options passed to the realtime-js instance"""
+ realtime: Optional[Dict[str, Any]] = None
+
+ """A custom `fetch` implementation."""
+ fetch: Optional[Callable] = None
+
+ def replace(
+ self,
+ schema: Optional[str] = None,
+ headers: Optional[Dict[str, str]] = None,
+ auto_refresh_token: Optional[bool] = None,
+ persist_session: Optional[bool] = None,
+ detect_session_in_url: Optional[bool] = None,
+ local_storage: Optional[Dict[str, Any]] = None,
+ realtime: Optional[Dict[str, Any]] = None,
+ fetch: Optional[Callable] = None,
+ ) -> "ClientOptions":
+ """Create a new SupabaseClientOptions with changes"""
+ changes = {
+ key: value
+ for key, value in locals().items()
+ if key != "self" and value is not None
+ }
+ client_options = dataclasses.replace(self, **changes)
+ client_options = copy.deepcopy(client_options)
+ return client_options
diff --git a/supabase/lib/constants.py b/supabase/lib/constants.py
index ebba6e60..af06f7bf 100644
--- a/supabase/lib/constants.py
+++ b/supabase/lib/constants.py
@@ -1,3 +1,4 @@
-from supabase import __version__
+from supabase.lib.client_options import ClientOptions
-DEFAULT_HEADERS = {"X-Client-Info": f"supabase-py/{__version__}"}
+
+DEFAULT_OPTIONS: ClientOptions = ClientOptions()
diff --git a/supabase/lib/storage_client.py b/supabase/lib/storage_client.py
index f7737174..06474c1e 100644
--- a/supabase/lib/storage_client.py
+++ b/supabase/lib/storage_client.py
@@ -1,3 +1,5 @@
+from typing import Dict
+
from supabase.lib.storage.storage_bucket_api import StorageBucketAPI
from supabase.lib.storage.storage_file_api import StorageFileAPI
@@ -14,8 +16,8 @@ class SupabaseStorageClient(StorageBucketAPI):
>>> list_files = storage_file.list("something")
"""
- def __init__(self, url, headers):
+ def __init__(self, url: str, headers: Dict[str, str]):
super().__init__(url, headers)
- def StorageFileAPI(self, id_):
+ def StorageFileAPI(self, id_: str):
return StorageFileAPI(self.url, self.headers, id_)
diff --git a/test.ps1 b/test.ps1
new file mode 100644
index 00000000..11e37137
--- /dev/null
+++ b/test.ps1
@@ -0,0 +1,5 @@
+powershell -Command {
+ $env:SUPABASE_TEST_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8";
+ $env:SUPABASE_TEST_URL = "https://ibrydvrsxoapzgtnhpso.supabase.co";
+ poetry run pytest;
+}
diff --git a/tests/conftest.py b/tests/conftest.py
index 5bc27b32..230684c3 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -9,7 +9,9 @@
@pytest.fixture(scope="session")
def supabase() -> Client:
- url: str = os.environ.get("SUPABASE_TEST_URL")
- key: str = os.environ.get("SUPABASE_TEST_KEY")
+ 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"
supabase: Client = create_client(url, key)
return supabase
diff --git a/tests/test_client_options.py b/tests/test_client_options.py
new file mode 100644
index 00000000..16db3892
--- /dev/null
+++ b/tests/test_client_options.py
@@ -0,0 +1,39 @@
+from supabase.lib.client_options import ClientOptions
+
+
+def test__client_options__replace__returns_updated_options():
+ options = ClientOptions(
+ schema="schema",
+ headers={"key": "value"},
+ auto_refresh_token=False,
+ persist_session=False,
+ detect_session_in_url=False,
+ local_storage={"key": "value"},
+ realtime={"key": "value"}
+ )
+
+ actual = options.replace(schema="new schema")
+ expected = ClientOptions(
+ schema="new schema",
+ headers={"key": "value"},
+ auto_refresh_token=False,
+ persist_session=False,
+ detect_session_in_url=False,
+ local_storage={"key": "value"},
+ realtime={"key": "value"}
+ )
+
+ assert actual == expected
+
+
+def test__client_options__replace__updates_only_new_options():
+ # Arrange
+ options = ClientOptions(local_storage={"key": "value"})
+ new_options = options.replace()
+
+ # Act
+ new_options.local_storage["key"] = "new_value"
+
+ # Assert
+ assert options.local_storage["key"] == "value"
+ assert new_options.local_storage["key"] == "new_value"
From 781214d1117f9d753cb046c7b117912c1efaaa8e Mon Sep 17 00:00:00 2001
From: Joseph Riddle
Date: Tue, 14 Dec 2021 17:17:39 -0800
Subject: [PATCH 071/737] Run pre-commit on all files
---
supabase/lib/client_options.py | 1 -
supabase/lib/constants.py | 1 -
tests/test_client_options.py | 4 ++--
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/supabase/lib/client_options.py b/supabase/lib/client_options.py
index aecbd90f..afe0732b 100644
--- a/supabase/lib/client_options.py
+++ b/supabase/lib/client_options.py
@@ -4,7 +4,6 @@
from supabase import __version__
-
DEFAULT_HEADERS = {"X-Client-Info": f"supabase-py/{__version__}"}
diff --git a/supabase/lib/constants.py b/supabase/lib/constants.py
index af06f7bf..49d99a0a 100644
--- a/supabase/lib/constants.py
+++ b/supabase/lib/constants.py
@@ -1,4 +1,3 @@
from supabase.lib.client_options import ClientOptions
-
DEFAULT_OPTIONS: ClientOptions = ClientOptions()
diff --git a/tests/test_client_options.py b/tests/test_client_options.py
index 16db3892..c386f26e 100644
--- a/tests/test_client_options.py
+++ b/tests/test_client_options.py
@@ -9,7 +9,7 @@ def test__client_options__replace__returns_updated_options():
persist_session=False,
detect_session_in_url=False,
local_storage={"key": "value"},
- realtime={"key": "value"}
+ realtime={"key": "value"},
)
actual = options.replace(schema="new schema")
@@ -20,7 +20,7 @@ def test__client_options__replace__returns_updated_options():
persist_session=False,
detect_session_in_url=False,
local_storage={"key": "value"},
- realtime={"key": "value"}
+ realtime={"key": "value"},
)
assert actual == expected
From 34fea3488a4afc59fb049ab636169d08a85529ba Mon Sep 17 00:00:00 2001
From: Joseph Riddle
Date: Wed, 15 Dec 2021 15:45:58 -0800
Subject: [PATCH 072/737] Add missing import to client.py
---
supabase/client.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/supabase/client.py b/supabase/client.py
index 002c8175..da097ab5 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -8,6 +8,7 @@
from supabase.lib.client_options import ClientOptions
from supabase.lib.constants import DEFAULT_OPTIONS
from supabase.lib.query_builder import SupabaseQueryBuilder
+from supabase.lib.realtime_client import SupabaseRealtimeClient
from supabase.lib.storage_client import SupabaseStorageClient
From 64134183c25f658032cf24b8d49d7379d8a37189 Mon Sep 17 00:00:00 2001
From: Joseph Riddle
Date: Wed, 15 Dec 2021 22:17:30 -0800
Subject: [PATCH 073/737] Implement sourcery suggestions to return values
directly
---
supabase/client.py | 3 +--
tests/conftest.py | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/supabase/client.py b/supabase/client.py
index da097ab5..36227341 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -178,11 +178,10 @@ def _init_postgrest_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] = {
+ return {
"apiKey": self.supabase_key,
"Authorization": f"Bearer {self.supabase_key}",
}
- return headers
def create_client(supabase_url: str, supabase_key: str, **options) -> Client:
diff --git a/tests/conftest.py b/tests/conftest.py
index 230684c3..568a211b 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -13,5 +13,4 @@ def supabase() -> Client:
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"
- supabase: Client = create_client(url, key)
- return supabase
+ return create_client(url, key)
From c11691fe053152ea672cb084980c7b6ed43fdf45 Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Thu, 16 Dec 2021 16:20:55 +0100
Subject: [PATCH 074/737] Add missing type hints
Co-authored-by: Anand <40204976+anand2312@users.noreply.github.com>
---
supabase/client.py | 2 +-
supabase/lib/storage_client.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/supabase/client.py b/supabase/client.py
index 36227341..5e11913d 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -94,7 +94,7 @@ def from_(self, table_name: str) -> RequestBuilder:
)
return query_builder.from_(table_name)
- def rpc(self, fn, params) -> Coroutine[Any, Any, Response]:
+ def rpc(self, fn: str, params: Dict[Any, Any]) -> Coroutine[Any, Any, Response]:
"""Performs a stored procedure call.
Parameters
diff --git a/supabase/lib/storage_client.py b/supabase/lib/storage_client.py
index 06474c1e..2f6fe8a9 100644
--- a/supabase/lib/storage_client.py
+++ b/supabase/lib/storage_client.py
@@ -19,5 +19,5 @@ class SupabaseStorageClient(StorageBucketAPI):
def __init__(self, url: str, headers: Dict[str, str]):
super().__init__(url, headers)
- def StorageFileAPI(self, id_: str):
+ def StorageFileAPI(self, id_: str) -> StorageFileAPI:
return StorageFileAPI(self.url, self.headers, id_)
From 86eae8b8d2bb942cc72a40487b50f2a168b3d76e Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Thu, 16 Dec 2021 16:22:13 +0100
Subject: [PATCH 075/737] Typo
---
supabase/lib/client_options.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/supabase/lib/client_options.py b/supabase/lib/client_options.py
index afe0732b..499655e7 100644
--- a/supabase/lib/client_options.py
+++ b/supabase/lib/client_options.py
@@ -29,7 +29,7 @@ class ClientOptions:
"""A storage provider. Used to store the logged in session."""
local_storage: Dict[str, Any] = dataclasses.field(default_factory=lambda: {})
- """Options passed to the realtime-js instance"""
+ """Options passed to the realtime-py instance"""
realtime: Optional[Dict[str, Any]] = None
"""A custom `fetch` implementation."""
From 6ce1cc0201a76e9a3cf0bb1ba973564798a548b7 Mon Sep 17 00:00:00 2001
From: Joseph Riddle
Date: Thu, 16 Dec 2021 13:05:28 -0800
Subject: [PATCH 076/737] Add py.typed (PEP561)
---
supabase/py.typed | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 supabase/py.typed
diff --git a/supabase/py.typed b/supabase/py.typed
new file mode 100644
index 00000000..e69de29b
From 5d51bb71860de9dad5f3ea1f9b507c143da3f70e Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 18 Dec 2021 19:34:45 +0800
Subject: [PATCH 077/737] chore: add maintainers file
---
supabase/lib/MAINTAINERS.md | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 supabase/lib/MAINTAINERS.md
diff --git a/supabase/lib/MAINTAINERS.md b/supabase/lib/MAINTAINERS.md
new file mode 100644
index 00000000..dcf2e3d4
--- /dev/null
+++ b/supabase/lib/MAINTAINERS.md
@@ -0,0 +1,14 @@
+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)
+
+- [anand2312](https://github.com/anand2312)
+- [dreinon](https://github.com/dreinon)
+- [J0](https://github.com/J0)
+- [leynier](https://github.com/leynier)
+
+# Emeritus Maintainers (in alphabetical order)
+
+- [fedden](https://github.com/fedden)
\ No newline at end of file
From a793398ea770c4f37d19a3a41b2f3ce2ff987e7e Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 18 Dec 2021 19:39:51 +0800
Subject: [PATCH 078/737] chore: update contributors.md
---
CONTRIBUTING.md | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 354bc05d..69d69bfc 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -9,9 +9,7 @@ In the interest of fostering an open and welcoming environment, please review an
## Code and copy reviews
All submissions, including submissions by project members, require review. We
-use GitHub pull requests for this purpose. Consult
-[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
-information on using pull requests.
+use GitHub pull requests for this purpose. After filing a pull request, please tag any two of the [current maintainers](./supabase/lib/MAINTAINERS.md) to request a review.
## Report an issue
From 66db7d3d45e898242551543dca85431aa2101060 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 18 Dec 2021 20:04:39 +0000
Subject: [PATCH 079/737] feat: use directly sync postgrest client and remove
unused code
---
supabase/client.py | 27 ++++------
supabase/lib/query_builder.py | 95 -----------------------------------
supabase/request_builder.py | 7 ---
tests/test_client.py | 10 ++--
4 files changed, 14 insertions(+), 125 deletions(-)
delete mode 100644 supabase/lib/query_builder.py
delete mode 100644 supabase/request_builder.py
diff --git a/supabase/client.py b/supabase/client.py
index 944e7767..05af06ef 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -1,13 +1,11 @@
from typing import Any, Coroutine, Dict
from httpx import Response
-from postgrest_py import PostgrestClient
-from postgrest_py.request_builder import RequestBuilder
+from postgrest_py import SyncPostgrestClient, SyncRequestBuilder
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.client_options import ClientOptions
from supabase.lib.constants import DEFAULT_OPTIONS
-from supabase.lib.query_builder import SupabaseQueryBuilder
from supabase.lib.realtime_client import SupabaseRealtimeClient
from supabase.lib.storage_client import SupabaseStorageClient
@@ -50,7 +48,7 @@ def __init__(
self.schema: str = settings.schema
# Instantiate clients.
- self.auth: SupabaseAuthClient = self._init_supabase_auth_client(
+ self.auth = self._init_supabase_auth_client(
auth_url=self.auth_url,
supabase_key=self.supabase_key,
client_options=settings,
@@ -61,7 +59,7 @@ def __init__(
# supabase_key=self.supabase_key,
# )
self.realtime = None
- self.postgrest: PostgrestClient = self._init_postgrest_client(
+ self.postgrest = self._init_postgrest_client(
rest_url=self.rest_url,
supabase_key=self.supabase_key,
headers=settings.headers,
@@ -71,7 +69,7 @@ def storage(self) -> SupabaseStorageClient:
"""Create instance of the storage client"""
return SupabaseStorageClient(self.storage_url, self._get_auth_headers())
- def table(self, table_name: str) -> RequestBuilder:
+ def table(self, table_name: str) -> SyncRequestBuilder:
"""Perform a table operation.
Note that the supabase client uses the `from` method, but in Python,
@@ -80,21 +78,14 @@ def table(self, table_name: str) -> RequestBuilder:
"""
return self.from_(table_name)
- def from_(self, table_name: str) -> RequestBuilder:
+ def from_(self, table_name: str) -> SyncRequestBuilder:
"""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)
+ return self.postgrest.from_(table_name)
- def rpc(self, fn: str, params: Dict[Any, Any]) -> Coroutine[Any, Any, Response]:
+ def rpc(self, fn: str, params: Dict[Any, Any]) -> Response:
"""Performs a stored procedure call.
Parameters
@@ -169,9 +160,9 @@ def _init_postgrest_client(
rest_url: str,
supabase_key: str,
headers: Dict[str, str],
- ) -> PostgrestClient:
+ ) -> SyncPostgrestClient:
"""Private helper for creating an instance of the Postgrest client."""
- client = PostgrestClient(rest_url, headers=headers)
+ client = SyncPostgrestClient(rest_url, headers=headers)
client.auth(token=supabase_key)
return client
diff --git a/supabase/lib/query_builder.py b/supabase/lib/query_builder.py
deleted file mode 100644
index b1c323be..00000000
--- a/supabase/lib/query_builder.py
+++ /dev/null
@@ -1,95 +0,0 @@
-from typing import Any, Dict
-
-import httpx
-from httpx import AsyncClient
-from postgrest_py.client import PostgrestClient
-from postgrest_py.request_builder import QueryRequestBuilder
-
-
-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 = httpx.get
- elif method == "post":
- func = httpx.post
- # Additionally requires the json body (e.g on insert, self.json==row).
- additional_kwargs = {"json": self.json}
- elif method == "put":
- func = httpx.put
- additional_kwargs = {"json": self.json}
- elif method == "patch":
- func = httpx.patch
- additional_kwargs = {"json": self.json}
- elif method == "delete":
- func = httpx.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
-# httpx sync methods. 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,
- "Prefer": "return=representation",
- **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/request_builder.py b/supabase/request_builder.py
deleted file mode 100644
index 1b51be55..00000000
--- a/supabase/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/tests/test_client.py b/tests/test_client.py
index 05cc6a4c..5019a55a 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -63,14 +63,14 @@ def test_client_select(supabase: Client) -> None:
"""Ensure we can select data from a table."""
# TODO(fedden): Add this set back in (and expand on it) when postgrest and
# realtime libs are working.
- data = supabase.table("countries").select("*").execute()
+ data, _ = supabase.table("countries").select("*").execute()
# Assert we pulled real data.
assert len(data.get("data", [])) > 0
def test_client_insert(supabase: Client) -> None:
"""Ensure we can select data from a table."""
- data = supabase.table("countries").select("*").execute()
+ data, _ = supabase.table("countries").select("*").execute()
# Assert we pulled real data.
previous_length: int = len(data.get("data", []))
new_row = {
@@ -80,8 +80,8 @@ def test_client_insert(supabase: Client) -> None:
"local_name": "test local name",
"continent": None,
}
- result = supabase.table("countries").insert(new_row).execute()
- data = supabase.table("countries").select("*").execute()
+ 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
@@ -105,7 +105,7 @@ def test_client_upload_file(supabase: Client) -> None:
storage_file.upload(filename, filepath, options)
files = storage_file.list()
- assert len(files) > 0
+ assert files
image_info = None
for item in files:
From 98ab987f35d7385bfd48c42b98901e77a1d8a684 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 18 Dec 2021 21:26:32 +0000
Subject: [PATCH 080/737] 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
---
.coveragerc | 5 +
.devcontainer/Dockerfile | 21 +
.devcontainer/devcontainer.json | 81 ++
.github/dependabot.yml | 7 +
.github/workflows/ci-python.yml | 31 -
.github/workflows/ci.yml | 66 ++
.github/workflows/pre-commit_hooks.yaml | 25 -
.gitignore | 145 ++-
.pre-commit-config.yaml | 68 +-
Makefile | 14 +
examples/.gitkeep | 1 -
poetry.lock | 1220 +++++++++++++++++++++++
poetry.toml | 2 -
pyproject.toml | 34 +-
supabase/client.py | 2 +-
supabase/lib/MAINTAINERS.md | 2 +-
supabase/lib/__init__.py | 4 +-
supabase/lib/client_options.py | 19 +-
18 files changed, 1642 insertions(+), 105 deletions(-)
create mode 100644 .coveragerc
create mode 100644 .devcontainer/Dockerfile
create mode 100644 .devcontainer/devcontainer.json
create mode 100644 .github/dependabot.yml
delete mode 100644 .github/workflows/ci-python.yml
create mode 100644 .github/workflows/ci.yml
delete mode 100644 .github/workflows/pre-commit_hooks.yaml
create mode 100644 Makefile
create mode 100644 poetry.lock
delete mode 100644 poetry.toml
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/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..04f73c9c
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,7 @@
+version: 2
+updates:
+ - package-ecosystem: "pip"
+ directory: "/"
+ schedule:
+ interval: "daily"
+ target-branch: "develop"
diff --git a/.github/workflows/ci-python.yml b/.github/workflows/ci-python.yml
deleted file mode 100644
index ae073270..00000000
--- a/.github/workflows/ci-python.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-name: CI (Python)
-
-on: [push, pull_request]
-
-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: ./test.sh
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000..f5fdc4fe
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,66 @@
+name: CI/CD
+
+on: [pull_request, push, workflow_dispatch]
+
+jobs:
+ test:
+ name: Test / OS ${{ matrix.os }} / Python ${{ matrix.python-version }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ python-version: [3.7, 3.8, 3.9, '3.10']
+ runs-on: ${{ matrix.os }}
+ steps:
+ - name: Clone Repository
+ uses: actions/checkout@v2
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v2
+ with:
+ python-version: ${{ matrix.python-version }}
+ - name: Set up Poetry
+ uses: abatilo/actions-poetry@v2.1.4
+ with:
+ poetry-version: 1.1.11
+ - name: Run Tests
+ run: make run_tests
+ - name: Upload Coverage
+ uses: codecov/codecov-action@v1
+
+ publish:
+ needs: test
+ if: ${{ !startsWith(github.event.head_commit.message, 'bump:') && github.ref == 'refs/heads/main' && github.event_name == 'push' }}
+ runs-on: ubuntu-latest
+ name: "Bump version, create changelog and publish"
+ steps:
+ - name: Clone Repository
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Create bump and changelog
+ uses: commitizen-tools/commitizen-action@master
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ branch: main
+ changelog_increment_filename: body.md
+ - name: Release
+ uses: softprops/action-gh-release@v1
+ with:
+ body_path: body.md
+ tag_name: ${{ env.REVISION }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Set up Python 3.9
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.9
+ - name: Set up Poetry
+ uses: abatilo/actions-poetry@v2.1.4
+ with:
+ poetry-version: 1.1.11
+ # - name: Publish
+ # env:
+ # PYPI_USERNAME: __token__
+ # PYPI_PASSWORD: ${{ secrets.PYPI_TOKEN }}
+ # run: |
+ # poetry install
+ # poetry publish --build -u $PYPI_USERNAME -p $PYPI_PASSWORD
diff --git a/.github/workflows/pre-commit_hooks.yaml b/.github/workflows/pre-commit_hooks.yaml
deleted file mode 100644
index da918515..00000000
--- a/.github/workflows/pre-commit_hooks.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: pre-commit
-
-on: [push, pull_request]
-
-jobs:
- build:
- runs-on: ubuntu-latest
-
- steps:
- - name: checkout
- uses: actions/checkout@v2
-
- - name: setup python
- uses: actions/setup-python@v2
- with:
- python-version: 3.7
-
- - name: install pre-commit
- run: |
- python -m pip install --upgrade pip
- pip install pre-commit
-
- - name: run static analysis
- run: |
- pre-commit run --all-files
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
index 52ce9704..d6f1c122 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,26 +1,52 @@
repos:
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.0.1
+ 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/pre-commit/pre-commit-hooks
- rev: v4.0.1
- hooks:
- - id: trailing-whitespace
- - id: check-added-large-files
- - id: mixed-line-ending
- args: ['--fix=lf']
+ - repo: https://github.com/pycqa/isort
+ rev: 5.10.1
+ hooks:
+ - id: isort
+ args:
+ [
+ "--profile",
+ "black",
+ "--multi-line=3",
+ "--trailing-comma",
+ "--force-grid-wrap=0",
+ "--use-parentheses",
+ "--line-width=88",
+ ]
-- repo: https://github.com/pre-commit/mirrors-isort
- rev: v5.8.0
- hooks:
- - id: isort
- args: ['--multi-line=3', '--trailing-comma', '--force-grid-wrap=0', '--use-parentheses', '--line-width=88']
+ - repo: https://github.com/myint/autoflake.git
+ rev: v1.4
+ hooks:
+ - id: autoflake
+ args:
+ [
+ "--in-place",
+ "--remove-all-unused-imports",
+ "--ignore-init-module-imports",
+ ]
-- repo: https://github.com/humitos/mirrors-autoflake.git
- rev: v1.1
- hooks:
- - id: autoflake
- args: ['--in-place', '--remove-all-unused-imports']
+ - repo: https://github.com/ambv/black
+ rev: 21.11b1
+ hooks:
+ - id: black
-- repo: https://github.com/psf/black
- rev: 21.5b1
- hooks:
- - id: black
+ - repo: https://github.com/asottile/pyupgrade
+ rev: v2.29.1
+ hooks:
+ - id: pyupgrade
+ args: ["--py37-plus", "--keep-runtime-typing"]
+
+ - repo: https://github.com/commitizen-tools/commitizen
+ rev: v2.20.0
+ hooks:
+ - id: commitizen
+ stages: [commit-msg]
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..9bc71e45
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,14 @@
+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
+
+tests_only:
+ poetry run pytest --cov=./ --cov-report=xml --cov-report=html -vv
diff --git a/examples/.gitkeep b/examples/.gitkeep
index 8b137891..e69de29b 100644
--- a/examples/.gitkeep
+++ b/examples/.gitkeep
@@ -1 +0,0 @@
-
diff --git a/poetry.lock b/poetry.lock
new file mode 100644
index 00000000..0b6aede7
--- /dev/null
+++ b/poetry.lock
@@ -0,0 +1,1220 @@
+[[package]]
+name = "anyio"
+version = "3.4.0"
+description = "High level compatibility layer for multiple asynchronous event loop implementations"
+category = "main"
+optional = false
+python-versions = ">=3.6.2"
+
+[package.dependencies]
+idna = ">=2.8"
+sniffio = ">=1.1"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
+
+[package.extras]
+doc = ["sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"]
+test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"]
+trio = ["trio (>=0.16)"]
+
+[[package]]
+name = "argcomplete"
+version = "1.12.3"
+description = "Bash tab completion for argparse"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
+
+[package.extras]
+test = ["coverage", "flake8", "pexpect", "wheel"]
+
+[[package]]
+name = "atomicwrites"
+version = "1.4.0"
+description = "Atomic file writes."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "attrs"
+version = "21.2.0"
+description = "Classes Without Boilerplate"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.extras]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+
+[[package]]
+name = "backports.entry-points-selectable"
+version = "1.1.1"
+description = "Compatibility shim providing selectable entry points for older implementations"
+category = "dev"
+optional = false
+python-versions = ">=2.7"
+
+[package.dependencies]
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-checkdocs (>=2.4)", "pytest-enabler (>=1.0.1)"]
+
+[[package]]
+name = "black"
+version = "21.12b0"
+description = "The uncompromising code formatter."
+category = "dev"
+optional = false
+python-versions = ">=3.6.2"
+
+[package.dependencies]
+click = ">=7.1.2"
+mypy-extensions = ">=0.4.3"
+pathspec = ">=0.9.0,<1"
+platformdirs = ">=2"
+tomli = ">=0.2.6,<2.0.0"
+typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""}
+typing-extensions = [
+ {version = ">=3.10.0.0", markers = "python_version < \"3.10\""},
+ {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""},
+]
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.7.4)"]
+jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
+python2 = ["typed-ast (>=1.4.3)"]
+uvloop = ["uvloop (>=0.15.2)"]
+
+[[package]]
+name = "certifi"
+version = "2021.10.8"
+description = "Python package for providing Mozilla's CA Bundle."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "cfgv"
+version = "3.3.1"
+description = "Validate configuration and produce human readable error messages."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[[package]]
+name = "charset-normalizer"
+version = "2.0.9"
+description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+category = "main"
+optional = false
+python-versions = ">=3.5.0"
+
+[package.extras]
+unicode_backport = ["unicodedata2"]
+
+[[package]]
+name = "click"
+version = "8.0.3"
+description = "Composable command line interface toolkit"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "commitizen"
+version = "2.20.2"
+description = "Python commitizen client tool"
+category = "dev"
+optional = false
+python-versions = ">=3.6.2,<4.0.0"
+
+[package.dependencies]
+argcomplete = ">=1.12.1,<2.0.0"
+colorama = ">=0.4.1,<0.5.0"
+decli = ">=0.5.2,<0.6.0"
+jinja2 = ">=2.10.3"
+packaging = ">=19,<22"
+pyyaml = ">=3.08"
+questionary = ">=1.4.0,<2.0.0"
+termcolor = ">=1.1,<2.0"
+tomlkit = ">=0.5.3,<1.0.0"
+typing-extensions = ">=4.0.1,<5.0.0"
+
+[[package]]
+name = "coverage"
+version = "6.2"
+description = "Code coverage measurement for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+tomli = {version = "*", optional = true, markers = "extra == \"toml\""}
+
+[package.extras]
+toml = ["tomli"]
+
+[[package]]
+name = "dataclasses"
+version = "0.6"
+description = "A backport of the dataclasses module for Python 3.6"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "decli"
+version = "0.5.2"
+description = "Minimal, easy-to-use, declarative cli tool"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "deprecation"
+version = "2.1.0"
+description = "A library to handle automated deprecations"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+packaging = "*"
+
+[[package]]
+name = "distlib"
+version = "0.3.4"
+description = "Distribution utilities"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "filelock"
+version = "3.4.0"
+description = "A platform independent file lock."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"]
+testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"]
+
+[[package]]
+name = "flake8"
+version = "4.0.1"
+description = "the modular source code checker: pep8 pyflakes and co"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+importlib-metadata = {version = "<4.3", markers = "python_version < \"3.8\""}
+mccabe = ">=0.6.0,<0.7.0"
+pycodestyle = ">=2.8.0,<2.9.0"
+pyflakes = ">=2.4.0,<2.5.0"
+
+[[package]]
+name = "gotrue"
+version = "0.2.0"
+description = "Python Client Library for GoTrue"
+category = "main"
+optional = false
+python-versions = "^3.7"
+develop = false
+
+[package.dependencies]
+requests = "^2.26.0"
+
+[package.source]
+type = "git"
+url = "https://github.com/supabase-community/gotrue-py.git"
+reference = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"
+resolved_reference = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"
+
+[[package]]
+name = "h11"
+version = "0.12.0"
+description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "httpcore"
+version = "0.13.7"
+description = "A minimal low-level HTTP client."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+anyio = ">=3.0.0,<4.0.0"
+h11 = ">=0.11,<0.13"
+sniffio = ">=1.0.0,<2.0.0"
+
+[package.extras]
+http2 = ["h2 (>=3,<5)"]
+
+[[package]]
+name = "httpx"
+version = "0.19.0"
+description = "The next generation HTTP client."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+certifi = "*"
+charset-normalizer = "*"
+httpcore = ">=0.13.3,<0.14.0"
+rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]}
+sniffio = "*"
+
+[package.extras]
+brotli = ["brotlicffi", "brotli"]
+http2 = ["h2 (>=3,<5)"]
+
+[[package]]
+name = "identify"
+version = "2.4.0"
+description = "File identification library for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.extras]
+license = ["ukkonen"]
+
+[[package]]
+name = "idna"
+version = "3.3"
+description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "importlib-metadata"
+version = "4.2.0"
+description = "Read metadata from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
+zipp = ">=0.5"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "iniconfig"
+version = "1.1.1"
+description = "iniconfig: brain-dead simple config-ini parsing"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "isort"
+version = "5.10.1"
+description = "A Python utility / library to sort Python imports."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1,<4.0"
+
+[package.extras]
+pipfile_deprecated_finder = ["pipreqs", "requirementslib"]
+requirements_deprecated_finder = ["pipreqs", "pip-api"]
+colors = ["colorama (>=0.4.3,<0.5.0)"]
+plugins = ["setuptools"]
+
+[[package]]
+name = "jinja2"
+version = "3.0.3"
+description = "A very fast and expressive template engine."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+MarkupSafe = ">=2.0"
+
+[package.extras]
+i18n = ["Babel (>=2.7)"]
+
+[[package]]
+name = "markupsafe"
+version = "2.0.1"
+description = "Safely add untrusted strings to HTML/XML markup."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "mccabe"
+version = "0.6.1"
+description = "McCabe checker, plugin for flake8"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "mypy-extensions"
+version = "0.4.3"
+description = "Experimental type system extensions for programs checked with the mypy typechecker."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "nodeenv"
+version = "1.6.0"
+description = "Node.js virtual environment builder"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "packaging"
+version = "21.3"
+description = "Core utilities for Python packages"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
+
+[[package]]
+name = "pathspec"
+version = "0.9.0"
+description = "Utility library for gitignore style pattern matching of file paths."
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[[package]]
+name = "platformdirs"
+version = "2.4.0"
+description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"]
+test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"]
+
+[[package]]
+name = "pluggy"
+version = "1.0.0"
+description = "plugin and hook calling mechanisms for python"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
+
+[[package]]
+name = "postgrest-py"
+version = "0.5.0"
+description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
+category = "main"
+optional = false
+python-versions = "^3.7"
+develop = false
+
+[package.dependencies]
+deprecation = "^2.1.0"
+httpx = ">=0.19,<0.22"
+
+[package.source]
+type = "git"
+url = "https://github.com/supabase-community/postgrest-py.git"
+reference = "3934fb2bd7c755962fa2fe490419d3e967e3555a"
+resolved_reference = "3934fb2bd7c755962fa2fe490419d3e967e3555a"
+
+[[package]]
+name = "pre-commit"
+version = "2.16.0"
+description = "A framework for managing and maintaining multi-language pre-commit hooks."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.dependencies]
+cfgv = ">=2.0.0"
+identify = ">=1.0.0"
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+nodeenv = ">=0.11.1"
+pyyaml = ">=5.1"
+toml = "*"
+virtualenv = ">=20.0.8"
+
+[[package]]
+name = "prompt-toolkit"
+version = "3.0.24"
+description = "Library for building powerful interactive command lines in Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6.2"
+
+[package.dependencies]
+wcwidth = "*"
+
+[[package]]
+name = "py"
+version = "1.11.0"
+description = "library with cross-python path, ini-parsing, io, code, log facilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "pycodestyle"
+version = "2.8.0"
+description = "Python style guide checker"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "pyflakes"
+version = "2.4.0"
+description = "passive checker of Python programs"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pyparsing"
+version = "3.0.6"
+description = "Python parsing module"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
+
+[[package]]
+name = "pytest"
+version = "6.2.5"
+description = "pytest: simple powerful testing with Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
+attrs = ">=19.2.0"
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+iniconfig = "*"
+packaging = "*"
+pluggy = ">=0.12,<2.0"
+py = ">=1.8.2"
+toml = "*"
+
+[package.extras]
+testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
+
+[[package]]
+name = "pytest-cov"
+version = "3.0.0"
+description = "Pytest plugin for measuring coverage."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+coverage = {version = ">=5.2.1", extras = ["toml"]}
+pytest = ">=4.6"
+
+[package.extras]
+testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"]
+
+[[package]]
+name = "python-dateutil"
+version = "2.8.2"
+description = "Extensions to the standard Python datetime module"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "pyyaml"
+version = "6.0"
+description = "YAML parser and emitter for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "questionary"
+version = "1.10.0"
+description = "Python library to build pretty command line user prompts ⭐️"
+category = "dev"
+optional = false
+python-versions = ">=3.6,<4.0"
+
+[package.dependencies]
+prompt_toolkit = ">=2.0,<4.0"
+
+[package.extras]
+docs = ["Sphinx (>=3.3,<4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)"]
+
+[[package]]
+name = "realtime-py"
+version = "0.1.3"
+description = ""
+category = "main"
+optional = false
+python-versions = ">=3.7,<4.0"
+
+[package.dependencies]
+dataclasses = ">=0.6,<0.7"
+python-dateutil = ">=2.8.1,<3.0.0"
+websockets = ">=9.1,<10.0"
+
+[[package]]
+name = "requests"
+version = "2.26.0"
+description = "Python HTTP for Humans."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""}
+idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""}
+urllib3 = ">=1.21.1,<1.27"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
+use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
+
+[[package]]
+name = "rfc3986"
+version = "1.5.0"
+description = "Validating URI References per RFC 3986"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+idna = {version = "*", optional = true, markers = "extra == \"idna2008\""}
+
+[package.extras]
+idna2008 = ["idna"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "sniffio"
+version = "1.2.0"
+description = "Sniff out which async library your code is running under"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "termcolor"
+version = "1.1.0"
+description = "ANSII Color formatting for output in terminal."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "toml"
+version = "0.10.2"
+description = "Python Library for Tom's Obvious, Minimal Language"
+category = "dev"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "tomli"
+version = "1.2.3"
+description = "A lil' TOML parser"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "tomlkit"
+version = "0.7.2"
+description = "Style preserving TOML library"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "typed-ast"
+version = "1.5.1"
+description = "a fork of Python 2 and 3 ast modules with type comment support"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "typing-extensions"
+version = "4.0.1"
+description = "Backported and Experimental Type Hints for Python 3.6+"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "urllib3"
+version = "1.26.7"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+brotli = ["brotlipy (>=0.6.0)"]
+secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
+[[package]]
+name = "virtualenv"
+version = "20.10.0"
+description = "Virtual Python Environment builder"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[package.dependencies]
+"backports.entry-points-selectable" = ">=1.0.4"
+distlib = ">=0.3.1,<1"
+filelock = ">=3.2,<4"
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+platformdirs = ">=2,<3"
+six = ">=1.9.0,<2"
+
+[package.extras]
+docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"]
+testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"]
+
+[[package]]
+name = "wcwidth"
+version = "0.2.5"
+description = "Measures the displayed width of unicode strings in a terminal"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "websockets"
+version = "9.1"
+description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
+category = "main"
+optional = false
+python-versions = ">=3.6.1"
+
+[[package]]
+name = "zipp"
+version = "3.6.0"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.7"
+content-hash = "ab37279f9c67d34259ee2ca641d76f2f4a34cd026f2e08ca94f21ccd623fe7ec"
+
+[metadata.files]
+anyio = [
+ {file = "anyio-3.4.0-py3-none-any.whl", hash = "sha256:2855a9423524abcdd652d942f8932fda1735210f77a6b392eafd9ff34d3fe020"},
+ {file = "anyio-3.4.0.tar.gz", hash = "sha256:24adc69309fb5779bc1e06158e143e0b6d2c56b302a3ac3de3083c705a6ed39d"},
+]
+argcomplete = [
+ {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
+ {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+]
+atomicwrites = [
+ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
+ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
+]
+attrs = [
+ {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
+ {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+]
+"backports.entry-points-selectable" = [
+ {file = "backports.entry_points_selectable-1.1.1-py2.py3-none-any.whl", hash = "sha256:7fceed9532a7aa2bd888654a7314f864a3c16a4e710b34a58cfc0f08114c663b"},
+ {file = "backports.entry_points_selectable-1.1.1.tar.gz", hash = "sha256:914b21a479fde881635f7af5adc7f6e38d6b274be32269070c53b698c60d5386"},
+]
+black = [
+ {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"},
+ {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"},
+]
+certifi = [
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
+]
+cfgv = [
+ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"},
+ {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"},
+]
+charset-normalizer = [
+ {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"},
+ {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"},
+]
+click = [
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+commitizen = [
+ {file = "commitizen-2.20.2-py3-none-any.whl", hash = "sha256:05e3feb5334a9841d48696543ad2e29a0aa475ca1de69ee249c28b8c264d3823"},
+ {file = "commitizen-2.20.2.tar.gz", hash = "sha256:4b8f5c0faa2603f05f4835dcaba318fbaa062e75c9041051547ff0d1e4bcead1"},
+]
+coverage = [
+ {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"},
+ {file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"},
+ {file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"},
+ {file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"},
+ {file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"},
+ {file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"},
+ {file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"},
+ {file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"},
+ {file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"},
+ {file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"},
+ {file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"},
+ {file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"},
+ {file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"},
+ {file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"},
+ {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"},
+ {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"},
+ {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"},
+ {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"},
+ {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"},
+ {file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"},
+ {file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"},
+ {file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"},
+ {file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"},
+ {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"},
+ {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"},
+ {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"},
+ {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"},
+ {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"},
+ {file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"},
+ {file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"},
+ {file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"},
+ {file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"},
+ {file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"},
+ {file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"},
+ {file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"},
+ {file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"},
+ {file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"},
+ {file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"},
+ {file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"},
+ {file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"},
+ {file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"},
+ {file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"},
+ {file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"},
+ {file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"},
+ {file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"},
+ {file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"},
+ {file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"},
+]
+dataclasses = [
+ {file = "dataclasses-0.6-py3-none-any.whl", hash = "sha256:454a69d788c7fda44efd71e259be79577822f5e3f53f029a22d08004e951dc9f"},
+ {file = "dataclasses-0.6.tar.gz", hash = "sha256:6988bd2b895eef432d562370bb707d540f32f7360ab13da45340101bc2307d84"},
+]
+decli = [
+ {file = "decli-0.5.2-py3-none-any.whl", hash = "sha256:d3207bc02d0169bf6ed74ccca09ce62edca0eb25b0ebf8bf4ae3fb8333e15ca0"},
+ {file = "decli-0.5.2.tar.gz", hash = "sha256:f2cde55034a75c819c630c7655a844c612f2598c42c21299160465df6ad463ad"},
+]
+deprecation = [
+ {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"},
+ {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"},
+]
+distlib = [
+ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"},
+ {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"},
+]
+filelock = [
+ {file = "filelock-3.4.0-py3-none-any.whl", hash = "sha256:2e139a228bcf56dd8b2274a65174d005c4a6b68540ee0bdbb92c76f43f29f7e8"},
+ {file = "filelock-3.4.0.tar.gz", hash = "sha256:93d512b32a23baf4cac44ffd72ccf70732aeff7b8050fcaf6d3ec406d954baf4"},
+]
+flake8 = [
+ {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
+ {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
+]
+gotrue = []
+h11 = [
+ {file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
+ {file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
+]
+httpcore = [
+ {file = "httpcore-0.13.7-py3-none-any.whl", hash = "sha256:369aa481b014cf046f7067fddd67d00560f2f00426e79569d99cb11245134af0"},
+ {file = "httpcore-0.13.7.tar.gz", hash = "sha256:036f960468759e633574d7c121afba48af6419615d36ab8ede979f1ad6276fa3"},
+]
+httpx = [
+ {file = "httpx-0.19.0-py3-none-any.whl", hash = "sha256:9bd728a6c5ec0a9e243932a9983d57d3cc4a87bb4f554e1360fce407f78f9435"},
+ {file = "httpx-0.19.0.tar.gz", hash = "sha256:92ecd2c00c688b529eda11cedb15161eaf02dee9116712f621c70d9a40b2cdd0"},
+]
+identify = [
+ {file = "identify-2.4.0-py2.py3-none-any.whl", hash = "sha256:eba31ca80258de6bb51453084bff4a923187cd2193b9c13710f2516ab30732cc"},
+ {file = "identify-2.4.0.tar.gz", hash = "sha256:a33ae873287e81651c7800ca309dc1f84679b763c9c8b30680e16fbfa82f0107"},
+]
+idna = [
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
+]
+importlib-metadata = [
+ {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"},
+ {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"},
+]
+iniconfig = [
+ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
+ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
+]
+isort = [
+ {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
+ {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
+]
+jinja2 = [
+ {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
+ {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
+]
+markupsafe = [
+ {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
+ {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
+]
+mccabe = [
+ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
+ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
+]
+mypy-extensions = [
+ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
+ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
+]
+nodeenv = [
+ {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"},
+ {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"},
+]
+packaging = [
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
+]
+pathspec = [
+ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"},
+ {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"},
+]
+platformdirs = [
+ {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"},
+ {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"},
+]
+pluggy = [
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
+]
+postgrest-py = []
+pre-commit = [
+ {file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"},
+ {file = "pre_commit-2.16.0.tar.gz", hash = "sha256:fe9897cac830aa7164dbd02a4e7b90cae49630451ce88464bca73db486ba9f65"},
+]
+prompt-toolkit = [
+ {file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"},
+ {file = "prompt_toolkit-3.0.24.tar.gz", hash = "sha256:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6"},
+]
+py = [
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
+]
+pycodestyle = [
+ {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
+ {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
+]
+pyflakes = [
+ {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
+ {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
+]
+pyparsing = [
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+]
+pytest = [
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
+]
+pytest-cov = [
+ {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"},
+ {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"},
+]
+python-dateutil = [
+ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
+ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
+]
+pyyaml = [
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
+]
+questionary = [
+ {file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"},
+ {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"},
+]
+realtime-py = [
+ {file = "realtime-py-0.1.3.tar.gz", hash = "sha256:218f8516d9a4e56c0feac9fae28c3571cdba74be1cb8616c2be029cb7df434f4"},
+ {file = "realtime_py-0.1.3-py3-none-any.whl", hash = "sha256:4f245094fa3cdf106efe538afbb61b6486369d3210d49af1923d285441315554"},
+]
+requests = [
+ {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
+ {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+]
+rfc3986 = [
+ {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
+ {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
+]
+six = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+sniffio = [
+ {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"},
+ {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"},
+]
+termcolor = [
+ {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"},
+]
+toml = [
+ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
+ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
+]
+tomli = [
+ {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"},
+ {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"},
+]
+tomlkit = [
+ {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"},
+ {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"},
+]
+typed-ast = [
+ {file = "typed_ast-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d8314c92414ce7481eee7ad42b353943679cf6f30237b5ecbf7d835519e1212"},
+ {file = "typed_ast-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b53ae5de5500529c76225d18eeb060efbcec90ad5e030713fe8dab0fb4531631"},
+ {file = "typed_ast-1.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:24058827d8f5d633f97223f5148a7d22628099a3d2efe06654ce872f46f07cdb"},
+ {file = "typed_ast-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a6d495c1ef572519a7bac9534dbf6d94c40e5b6a608ef41136133377bba4aa08"},
+ {file = "typed_ast-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:de4ecae89c7d8b56169473e08f6bfd2df7f95015591f43126e4ea7865928677e"},
+ {file = "typed_ast-1.5.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:256115a5bc7ea9e665c6314ed6671ee2c08ca380f9d5f130bd4d2c1f5848d695"},
+ {file = "typed_ast-1.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:7c42707ab981b6cf4b73490c16e9d17fcd5227039720ca14abe415d39a173a30"},
+ {file = "typed_ast-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:71dcda943a471d826ea930dd449ac7e76db7be778fcd722deb63642bab32ea3f"},
+ {file = "typed_ast-1.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4f30a2bcd8e68adbb791ce1567fdb897357506f7ea6716f6bbdd3053ac4d9471"},
+ {file = "typed_ast-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ca9e8300d8ba0b66d140820cf463438c8e7b4cdc6fd710c059bfcfb1531d03fb"},
+ {file = "typed_ast-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9caaf2b440efb39ecbc45e2fabde809cbe56272719131a6318fd9bf08b58e2cb"},
+ {file = "typed_ast-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9bcad65d66d594bffab8575f39420fe0ee96f66e23c4d927ebb4e24354ec1af"},
+ {file = "typed_ast-1.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:591bc04e507595887160ed7aa8d6785867fb86c5793911be79ccede61ae96f4d"},
+ {file = "typed_ast-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:a80d84f535642420dd17e16ae25bb46c7f4c16ee231105e7f3eb43976a89670a"},
+ {file = "typed_ast-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:38cf5c642fa808300bae1281460d4f9b7617cf864d4e383054a5ef336e344d32"},
+ {file = "typed_ast-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b6ab14c56bc9c7e3c30228a0a0b54b915b1579613f6e463ba6f4eb1382e7fd4"},
+ {file = "typed_ast-1.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2b8d7007f6280e36fa42652df47087ac7b0a7d7f09f9468f07792ba646aac2d"},
+ {file = "typed_ast-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:b6d17f37f6edd879141e64a5db17b67488cfeffeedad8c5cec0392305e9bc775"},
+ {file = "typed_ast-1.5.1.tar.gz", hash = "sha256:484137cab8ecf47e137260daa20bafbba5f4e3ec7fda1c1e69ab299b75fa81c5"},
+]
+typing-extensions = [
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+]
+urllib3 = [
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+]
+virtualenv = [
+ {file = "virtualenv-20.10.0-py2.py3-none-any.whl", hash = "sha256:4b02e52a624336eece99c96e3ab7111f469c24ba226a53ec474e8e787b365814"},
+ {file = "virtualenv-20.10.0.tar.gz", hash = "sha256:576d05b46eace16a9c348085f7d0dc8ef28713a2cabaa1cf0aea41e8f12c9218"},
+]
+wcwidth = [
+ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
+ {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
+]
+websockets = [
+ {file = "websockets-9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d144b350045c53c8ff09aa1cfa955012dd32f00c7e0862c199edcabb1a8b32da"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b4ad84b156cf50529b8ac5cc1638c2cf8680490e3fccb6121316c8c02620a2e4"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2cf04601633a4ec176b9cc3d3e73789c037641001dbfaf7c411f89cd3e04fcaf"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:5c8f0d82ea2468282e08b0cf5307f3ad022290ed50c45d5cb7767957ca782880"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:caa68c95bc1776d3521f81eeb4d5b9438be92514ec2a79fececda814099c8314"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d2c2d9b24d3c65b5a02cac12cbb4e4194e590314519ed49db2f67ef561c3cf58"},
+ {file = "websockets-9.1-cp36-cp36m-win32.whl", hash = "sha256:f31722f1c033c198aa4a39a01905951c00bd1c74f922e8afc1b1c62adbcdd56a"},
+ {file = "websockets-9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:3ddff38894c7857c476feb3538dd847514379d6dc844961dc99f04b0384b1b1b"},
+ {file = "websockets-9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:51d04df04ed9d08077d10ccbe21e6805791b78eac49d16d30a1f1fe2e44ba0af"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f68c352a68e5fdf1e97288d5cec9296664c590c25932a8476224124aaf90dbcd"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b43b13e5622c5a53ab12f3272e6f42f1ce37cd5b6684b2676cb365403295cd40"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9147868bb0cc01e6846606cd65cbf9c58598f187b96d14dd1ca17338b08793bb"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:836d14eb53b500fd92bd5db2fc5894f7c72b634f9c2a28f546f75967503d8e25"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:48c222feb3ced18f3dc61168ca18952a22fb88e5eb8902d2bf1b50faefdc34a2"},
+ {file = "websockets-9.1-cp37-cp37m-win32.whl", hash = "sha256:900589e19200be76dd7cbaa95e9771605b5ce3f62512d039fb3bc5da9014912a"},
+ {file = "websockets-9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ab5ee15d3462198c794c49ccd31773d8a2b8c17d622aa184f669d2b98c2f0857"},
+ {file = "websockets-9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85e701a6c316b7067f1e8675c638036a796fe5116783a4c932e7eb8e305a3ffe"},
+ {file = "websockets-9.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b2e71c4670ebe1067fa8632f0d081e47254ee2d3d409de54168b43b0ba9147e0"},
+ {file = "websockets-9.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:230a3506df6b5f446fed2398e58dcaafdff12d67fe1397dff196411a9e820d02"},
+ {file = "websockets-9.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:7df3596838b2a0c07c6f6d67752c53859a54993d4f062689fdf547cb56d0f84f"},
+ {file = "websockets-9.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:826ccf85d4514609219725ba4a7abd569228c2c9f1968e8be05be366f68291ec"},
+ {file = "websockets-9.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0dd4eb8e0bbf365d6f652711ce21b8fd2b596f873d32aabb0fbb53ec604418cc"},
+ {file = "websockets-9.1-cp38-cp38-win32.whl", hash = "sha256:1d0971cc7251aeff955aa742ec541ee8aaea4bb2ebf0245748fbec62f744a37e"},
+ {file = "websockets-9.1-cp38-cp38-win_amd64.whl", hash = "sha256:7189e51955f9268b2bdd6cc537e0faa06f8fffda7fb386e5922c6391de51b077"},
+ {file = "websockets-9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9e5fd6dbdf95d99bc03732ded1fc8ef22ebbc05999ac7e0c7bf57fe6e4e5ae2"},
+ {file = "websockets-9.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9e7fdc775fe7403dbd8bc883ba59576a6232eac96dacb56512daacf7af5d618d"},
+ {file = "websockets-9.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:597c28f3aa7a09e8c070a86b03107094ee5cdafcc0d55f2f2eac92faac8dc67d"},
+ {file = "websockets-9.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:ad893d889bc700a5835e0a95a3e4f2c39e91577ab232a3dc03c262a0f8fc4b5c"},
+ {file = "websockets-9.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:1d6b4fddb12ab9adf87b843cd4316c4bd602db8d5efd2fb83147f0458fe85135"},
+ {file = "websockets-9.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ebf459a1c069f9866d8569439c06193c586e72c9330db1390af7c6a0a32c4afd"},
+ {file = "websockets-9.1-cp39-cp39-win32.whl", hash = "sha256:be5fd35e99970518547edc906efab29afd392319f020c3c58b0e1a158e16ed20"},
+ {file = "websockets-9.1-cp39-cp39-win_amd64.whl", hash = "sha256:85db8090ba94e22d964498a47fdd933b8875a1add6ebc514c7ac8703eb97bbf0"},
+ {file = "websockets-9.1.tar.gz", hash = "sha256:276d2339ebf0df4f45df453923ebd2270b87900eda5dfd4a6b0cfa15f82111c3"},
+]
+zipp = [
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+]
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/pyproject.toml b/pyproject.toml
index f7146db7..3dd07910 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,20 +3,42 @@ name = "supabase"
version = "0.0.3"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden "]
+homepage = "https://github.com/supabase-community/supabase-py"
+repository = "https://github.com/supabase-community/supabase-py"
+documentation = "https://github.com/supabase-community/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 = {git = "https://github.com/supabase-community/postgrest-py.git", rev = "ba83ba43c6cfba906fbb710d3913e5dc070fdde3"}
+python = "^3.7"
+postgrest-py = {git = "https://github.com/supabase-community/postgrest-py.git", rev = "3934fb2bd7c755962fa2fe490419d3e967e3555a"}
realtime-py = "^0.1.2"
gotrue = {git = "https://github.com/supabase-community/gotrue-py.git", rev = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"}
httpx = "^0.19.0"
[tool.poetry.dev-dependencies]
-pre_commit = "^2.1.0"
-black = "^21.7b0"
+pre-commit = "^2.16.0"
+black = "^21.11b1"
pytest = "^6.2.5"
+flake8 = "^4.0.1"
+isort = "^5.9.3"
+pytest-cov = "^3.0.0"
+commitizen = "^2.20.0"
+
+[tool.commitizen]
+name = "cz_conventional_commits"
+version = "0.0.3"
+version_files = [
+ "supabase/__init__.py",
+ "pyproject.toml:version"
+]
+tag_format = "v$version"
[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/supabase/client.py b/supabase/client.py
index 05af06ef..6cf42e35 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -1,4 +1,4 @@
-from typing import Any, Coroutine, Dict
+from typing import Any, Dict
from httpx import Response
from postgrest_py import SyncPostgrestClient, SyncRequestBuilder
diff --git a/supabase/lib/MAINTAINERS.md b/supabase/lib/MAINTAINERS.md
index dcf2e3d4..f8bbf02d 100644
--- a/supabase/lib/MAINTAINERS.md
+++ b/supabase/lib/MAINTAINERS.md
@@ -11,4 +11,4 @@ See CONTRIBUTING.md for general contribution guidelines.
# Emeritus Maintainers (in alphabetical order)
-- [fedden](https://github.com/fedden)
\ No newline at end of file
+- [fedden](https://github.com/fedden)
diff --git a/supabase/lib/__init__.py b/supabase/lib/__init__.py
index 7b96a426..7931c631 100644
--- a/supabase/lib/__init__.py
+++ b/supabase/lib/__init__.py
@@ -1,3 +1,3 @@
-from supabase.lib import auth_client, query_builder, realtime_client
+from supabase.lib import auth_client, realtime_client, storage_client
-__all__ = ["auth_client", "query_builder", "realtime_client"]
+__all__ = ["auth_client", "realtime_client", "storage_client"]
diff --git a/supabase/lib/client_options.py b/supabase/lib/client_options.py
index 499655e7..2f9c577f 100644
--- a/supabase/lib/client_options.py
+++ b/supabase/lib/client_options.py
@@ -9,31 +9,32 @@
@dataclasses.dataclass
class ClientOptions:
-
- """The Postgres schema which your tables belong to. Must be on the list of exposed schemas in Supabase. Defaults to 'public'."""
-
schema: str = "public"
+ """
+ The Postgres schema which your tables belong to.
+ Must be on the list of exposed schemas in Supabase. Defaults to 'public'.
+ """
- """Optional headers for initializing the client."""
headers: Dict[str, str] = dataclasses.field(default_factory=DEFAULT_HEADERS.copy)
+ """Optional headers for initializing the client."""
- """Automatically refreshes the token for logged in users."""
auto_refresh_token: bool = True
+ """Automatically refreshes the token for logged in users."""
- """Whether to persist a logged in session to storage."""
persist_session: bool = True
+ """Whether to persist a logged in session to storage."""
- """Detect a session from the URL. Used for OAuth login callbacks."""
detect_session_in_url: bool = True
+ """Detect a session from the URL. Used for OAuth login callbacks."""
- """A storage provider. Used to store the logged in session."""
local_storage: Dict[str, Any] = dataclasses.field(default_factory=lambda: {})
+ """A storage provider. Used to store the logged in session."""
"""Options passed to the realtime-py instance"""
realtime: Optional[Dict[str, Any]] = None
- """A custom `fetch` implementation."""
fetch: Optional[Callable] = None
+ """A custom `fetch` implementation."""
def replace(
self,
From 01b663ea6ef1e0fd5c855dca2fcbd83e17fd0fdd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 18 Dec 2021 21:28:11 +0000
Subject: [PATCH 081/737] fix: error in Makefile
---
Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Makefile b/Makefile
index 9bc71e45..395e76f2 100644
--- a/Makefile
+++ b/Makefile
@@ -10,5 +10,7 @@ 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
From 77c870b75e93d3435da6a12705c3c6f78be94f90 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 18 Dec 2021 21:47:01 +0000
Subject: [PATCH 082/737] fix: export envs and fix tests
---
Makefile | 2 ++
test.ps1 | 4 +++-
test.sh | 4 ----
tests/test_client.py | 14 +++++++-------
4 files changed, 12 insertions(+), 12 deletions(-)
delete mode 100755 test.sh
diff --git a/Makefile b/Makefile
index 395e76f2..0fd32734 100644
--- a/Makefile
+++ b/Makefile
@@ -13,4 +13,6 @@ tests_pre_commit:
run_tests: tests
tests_only:
+ export SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8" &&\
+ export SUPABASE_TEST_URL="https://ibrydvrsxoapzgtnhpso.supabase.co" &&\
poetry run pytest --cov=./ --cov-report=xml --cov-report=html -vv
diff --git a/test.ps1 b/test.ps1
index 11e37137..45a43c9d 100644
--- a/test.ps1
+++ b/test.ps1
@@ -1,5 +1,7 @@
powershell -Command {
$env:SUPABASE_TEST_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8";
$env:SUPABASE_TEST_URL = "https://ibrydvrsxoapzgtnhpso.supabase.co";
- poetry run pytest;
+ poetry install;
+ poetry run pytest --cov=./ --cov-report=xml --cov-report=html -vv;
+ poetry run pre-commit run --all-files;
}
diff --git a/test.sh b/test.sh
deleted file mode 100755
index cb463e60..00000000
--- a/test.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8" \
-SUPABASE_TEST_URL="https://ibrydvrsxoapzgtnhpso.supabase.co" \
-poetry run pytest
diff --git a/tests/test_client.py b/tests/test_client.py
index 5019a55a..168a8484 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -41,8 +41,8 @@ def test_incorrect_values_dont_instanciate_client(url: Any, key: Any) -> None:
def test_client_auth(supabase: Client) -> None:
"""Ensure we can create an auth user, and login with it."""
# Create a random user login email and password.
- random_email: str = f"{_random_string(10)}@supamail.com"
- random_password: str = _random_string(20)
+ random_email = f"{_random_string(10)}@supamail.com"
+ random_password = _random_string(20)
# Sign up (and sign in).
user = supabase.auth.sign_up(
email=random_email,
@@ -65,14 +65,14 @@ def test_client_select(supabase: Client) -> None:
# realtime libs are working.
data, _ = supabase.table("countries").select("*").execute()
# Assert we pulled real data.
- assert len(data.get("data", [])) > 0
+ assert data
def test_client_insert(supabase: Client) -> None:
"""Ensure we can select data from a table."""
data, _ = supabase.table("countries").select("*").execute()
# Assert we pulled real data.
- previous_length: int = len(data.get("data", []))
+ previous_length = len(data)
new_row = {
"name": "test name",
"iso2": "test iso2",
@@ -81,12 +81,12 @@ def test_client_insert(supabase: Client) -> None:
"continent": None,
}
result, _ = supabase.table("countries").insert(new_row).execute()
+ # Check returned result for insert was valid.
+ assert result
data, _ = supabase.table("countries").select("*").execute()
- current_length: int = len(data.get("data", []))
+ current_length = len(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
@pytest.mark.skip(reason="missing permissions on test instance")
From 8bac8740857d77aa3494bf498f09640d8f03d654 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 18 Dec 2021 21:54:53 +0000
Subject: [PATCH 083/737] fix: github action max parallel in one
---
.github/workflows/ci.yml | 2 ++
tests/test_dummy.py | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f5fdc4fe..b6604f7c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -3,6 +3,8 @@ name: CI/CD
on: [pull_request, push, workflow_dispatch]
jobs:
+ strategy:
+ max-parallel: 1
test:
name: Test / OS ${{ matrix.os }} / Python ${{ matrix.python-version }}
strategy:
diff --git a/tests/test_dummy.py b/tests/test_dummy.py
index 86b7e0f0..cfef6744 100644
--- a/tests/test_dummy.py
+++ b/tests/test_dummy.py
@@ -9,8 +9,8 @@
def test_dummy() -> None:
# Test auth component
- assert True == True
+ assert True
def test_client_initialziation() -> None:
- client = supabase.Client("http://testwebsite.com", "atestapi")
+ _ = supabase.Client("http://testwebsite.com", "atestapi")
From 520f1d50afb58f825677686f2c1cc184d59b0f51 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 18 Dec 2021 21:56:12 +0000
Subject: [PATCH 084/737] fix: ci.yml max parallel config
---
.github/workflows/ci.yml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b6604f7c..73716eba 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -3,11 +3,10 @@ name: CI/CD
on: [pull_request, push, workflow_dispatch]
jobs:
- strategy:
- max-parallel: 1
test:
name: Test / OS ${{ matrix.os }} / Python ${{ matrix.python-version }}
strategy:
+ max-parallel: 1
matrix:
os: [ubuntu-latest]
python-version: [3.7, 3.8, 3.9, '3.10']
From 9f7237d25b4b6efae1652bba7a17a7902e08adb9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 18 Dec 2021 22:02:57 +0000
Subject: [PATCH 085/737] fix!: remove setup.py
---
setup.py | 6 ------
1 file changed, 6 deletions(-)
delete mode 100644 setup.py
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()
From 93c4a4e617bc23abd234d5891f97edae63401961 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 22 Dec 2021 17:43:13 +0000
Subject: [PATCH 086/737] 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]
---
poetry.lock | 18 ++++++++++--------
pyproject.toml | 2 +-
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 0b6aede7..5265acc9 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -264,7 +264,7 @@ python-versions = ">=3.6"
[[package]]
name = "httpcore"
-version = "0.13.7"
+version = "0.14.3"
description = "A minimal low-level HTTP client."
category = "main"
optional = false
@@ -272,6 +272,7 @@ python-versions = ">=3.6"
[package.dependencies]
anyio = ">=3.0.0,<4.0.0"
+certifi = "*"
h11 = ">=0.11,<0.13"
sniffio = ">=1.0.0,<2.0.0"
@@ -280,7 +281,7 @@ http2 = ["h2 (>=3,<5)"]
[[package]]
name = "httpx"
-version = "0.19.0"
+version = "0.21.1"
description = "The next generation HTTP client."
category = "main"
optional = false
@@ -289,12 +290,13 @@ python-versions = ">=3.6"
[package.dependencies]
certifi = "*"
charset-normalizer = "*"
-httpcore = ">=0.13.3,<0.14.0"
+httpcore = ">=0.14.0,<0.15.0"
rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]}
sniffio = "*"
[package.extras]
brotli = ["brotlicffi", "brotli"]
+cli = ["click (>=8.0.0,<9.0.0)", "rich (>=10.0.0,<11.0.0)", "pygments (>=2.0.0,<3.0.0)"]
http2 = ["h2 (>=3,<5)"]
[[package]]
@@ -771,7 +773,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "ab37279f9c67d34259ee2ca641d76f2f4a34cd026f2e08ca94f21ccd623fe7ec"
+content-hash = "a322d31a8975b745a07415393cc8af95d4fc4c875c759ad8dde1a3603617848c"
[metadata.files]
anyio = [
@@ -901,12 +903,12 @@ h11 = [
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
]
httpcore = [
- {file = "httpcore-0.13.7-py3-none-any.whl", hash = "sha256:369aa481b014cf046f7067fddd67d00560f2f00426e79569d99cb11245134af0"},
- {file = "httpcore-0.13.7.tar.gz", hash = "sha256:036f960468759e633574d7c121afba48af6419615d36ab8ede979f1ad6276fa3"},
+ {file = "httpcore-0.14.3-py3-none-any.whl", hash = "sha256:9a98d2416b78976fc5396ff1f6b26ae9885efbb3105d24eed490f20ab4c95ec1"},
+ {file = "httpcore-0.14.3.tar.gz", hash = "sha256:d10162a63265a0228d5807964bd964478cbdb5178f9a2eedfebb2faba27eef5d"},
]
httpx = [
- {file = "httpx-0.19.0-py3-none-any.whl", hash = "sha256:9bd728a6c5ec0a9e243932a9983d57d3cc4a87bb4f554e1360fce407f78f9435"},
- {file = "httpx-0.19.0.tar.gz", hash = "sha256:92ecd2c00c688b529eda11cedb15161eaf02dee9116712f621c70d9a40b2cdd0"},
+ {file = "httpx-0.21.1-py3-none-any.whl", hash = "sha256:208e5ef2ad4d105213463cfd541898ed9d11851b346473539a8425e644bb7c66"},
+ {file = "httpx-0.21.1.tar.gz", hash = "sha256:02af20df486b78892a614a7ccd4e4e86a5409ec4981ab0e422c579a887acad83"},
]
identify = [
{file = "identify-2.4.0-py2.py3-none-any.whl", hash = "sha256:eba31ca80258de6bb51453084bff4a923187cd2193b9c13710f2516ab30732cc"},
diff --git a/pyproject.toml b/pyproject.toml
index 3dd07910..b0176d78 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -19,7 +19,7 @@ python = "^3.7"
postgrest-py = {git = "https://github.com/supabase-community/postgrest-py.git", rev = "3934fb2bd7c755962fa2fe490419d3e967e3555a"}
realtime-py = "^0.1.2"
gotrue = {git = "https://github.com/supabase-community/gotrue-py.git", rev = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"}
-httpx = "^0.19.0"
+httpx = ">=0.19,<0.22"
[tool.poetry.dev-dependencies]
pre-commit = "^2.16.0"
From 5a0d20e1b977b461a5310b385e1bc1b9bdfd7176 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 22 Dec 2021 18:04:54 +0000
Subject: [PATCH 087/737] 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]
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 5265acc9..1cbd506b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -143,7 +143,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "commitizen"
-version = "2.20.2"
+version = "2.20.3"
description = "Python commitizen client tool"
category = "dev"
optional = false
@@ -773,7 +773,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "a322d31a8975b745a07415393cc8af95d4fc4c875c759ad8dde1a3603617848c"
+content-hash = "bdfff7d3ae2ccb7fb934049235d74c18558404dc8d8075b85c706b90405ae442"
[metadata.files]
anyio = [
@@ -821,8 +821,8 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
commitizen = [
- {file = "commitizen-2.20.2-py3-none-any.whl", hash = "sha256:05e3feb5334a9841d48696543ad2e29a0aa475ca1de69ee249c28b8c264d3823"},
- {file = "commitizen-2.20.2.tar.gz", hash = "sha256:4b8f5c0faa2603f05f4835dcaba318fbaa062e75c9041051547ff0d1e4bcead1"},
+ {file = "commitizen-2.20.3-py3-none-any.whl", hash = "sha256:f624b9b988b9a60c5ad815d515d350e99aa45e331b843536552de63939cd5f67"},
+ {file = "commitizen-2.20.3.tar.gz", hash = "sha256:86d8ac4db7a6b48f3d5799b070287ba4bb27726c0a71d1cbd7f62b48866e5be7"},
]
coverage = [
{file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"},
diff --git a/pyproject.toml b/pyproject.toml
index b0176d78..bed475a0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -28,7 +28,7 @@ pytest = "^6.2.5"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
-commitizen = "^2.20.0"
+commitizen = "^2.20.3"
[tool.commitizen]
name = "cz_conventional_commits"
From b0bc3defe13dbe26b4aa2255aea45c5c5280fe19 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 29 Dec 2021 20:42:45 +0800
Subject: [PATCH 088/737] chore: update file versions
---
CONTRIBUTING.md | 2 +-
supabase/lib/MAINTAINERS.md => MAINTAINERS.md | 0
pyproject.toml | 8 ++++----
supabase/__init__.py | 2 +-
4 files changed, 6 insertions(+), 6 deletions(-)
rename supabase/lib/MAINTAINERS.md => MAINTAINERS.md (100%)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 69d69bfc..fcce9a9a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -9,7 +9,7 @@ In the interest of fostering an open and welcoming environment, please review an
## 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](./supabase/lib/MAINTAINERS.md) to request a review.
+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
diff --git a/supabase/lib/MAINTAINERS.md b/MAINTAINERS.md
similarity index 100%
rename from supabase/lib/MAINTAINERS.md
rename to MAINTAINERS.md
diff --git a/pyproject.toml b/pyproject.toml
index bed475a0..3054925e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,8 +1,8 @@
[tool.poetry]
name = "supabase"
-version = "0.0.3"
+version = "0.1.0"
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"]
homepage = "https://github.com/supabase-community/supabase-py"
repository = "https://github.com/supabase-community/supabase-py"
documentation = "https://github.com/supabase-community/supabase-py"
@@ -16,9 +16,9 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-postgrest-py = {git = "https://github.com/supabase-community/postgrest-py.git", rev = "3934fb2bd7c755962fa2fe490419d3e967e3555a"}
+postgrest-py = "^0.6.0"
realtime-py = "^0.1.2"
-gotrue = {git = "https://github.com/supabase-community/gotrue-py.git", rev = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"}
+gotrue = "^0.3.0"
httpx = ">=0.19,<0.22"
[tool.poetry.dev-dependencies]
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 6a3ad8e8..0ae2bf3d 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.0.3"
+__version__ = "0.1.0"
from supabase import client, lib
from supabase.client import Client, create_client
From b2b3ff38d7d2d05a18b2fe95e79778deff367cae Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 29 Dec 2021 20:47:36 +0800
Subject: [PATCH 089/737] chore: update realtime version
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 3054925e..075d5187 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -17,7 +17,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
postgrest-py = "^0.6.0"
-realtime-py = "^0.1.2"
+realtime = "^0.0.3"
gotrue = "^0.3.0"
httpx = ">=0.19,<0.22"
From 4e7213773e24258d55b1bb54133f4657e86dfd5d Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 29 Dec 2021 20:50:56 +0800
Subject: [PATCH 090/737] chore: update poetry.lock
---
poetry.lock | 195 ++++++++++++++++++++++------------------------------
1 file changed, 84 insertions(+), 111 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 1cbd506b..f0325f3a 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -40,32 +40,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.3.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
-
-[[package]]
-name = "backports.entry-points-selectable"
-version = "1.1.1"
-description = "Compatibility shim providing selectable entry points for older implementations"
-category = "dev"
-optional = false
-python-versions = ">=2.7"
-
-[package.dependencies]
-importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-
-[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-checkdocs (>=2.4)", "pytest-enabler (>=1.0.1)"]
+tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
+tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
[[package]]
name = "black"
@@ -212,11 +197,11 @@ python-versions = "*"
[[package]]
name = "filelock"
-version = "3.4.0"
+version = "3.4.2"
description = "A platform independent file lock."
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"]
@@ -238,21 +223,15 @@ pyflakes = ">=2.4.0,<2.5.0"
[[package]]
name = "gotrue"
-version = "0.2.0"
+version = "0.3.0"
description = "Python Client Library for GoTrue"
category = "main"
optional = false
-python-versions = "^3.7"
-develop = false
+python-versions = ">=3.7,<4.0"
[package.dependencies]
-requests = "^2.26.0"
-
-[package.source]
-type = "git"
-url = "https://github.com/supabase-community/gotrue-py.git"
-reference = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"
-resolved_reference = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"
+httpx = ">=0.20,<0.22"
+pydantic = ">=1.8.2,<2.0.0"
[[package]]
name = "h11"
@@ -301,7 +280,7 @@ http2 = ["h2 (>=3,<5)"]
[[package]]
name = "identify"
-version = "2.4.0"
+version = "2.4.1"
description = "File identification library for Python"
category = "dev"
optional = false
@@ -423,11 +402,11 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[[package]]
name = "platformdirs"
-version = "2.4.0"
+version = "2.4.1"
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"]
@@ -450,23 +429,16 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.5.0"
+version = "0.6.0"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
-python-versions = "^3.7"
-develop = false
+python-versions = ">=3.7,<4.0"
[package.dependencies]
-deprecation = "^2.1.0"
+deprecation = ">=2.1.0,<3.0.0"
httpx = ">=0.19,<0.22"
-[package.source]
-type = "git"
-url = "https://github.com/supabase-community/postgrest-py.git"
-reference = "3934fb2bd7c755962fa2fe490419d3e967e3555a"
-resolved_reference = "3934fb2bd7c755962fa2fe490419d3e967e3555a"
-
[[package]]
name = "pre-commit"
version = "2.16.0"
@@ -511,6 +483,21 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "pydantic"
+version = "1.8.2"
+description = "Data validation and settings management using python 3.6 type hinting"
+category = "main"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.dependencies]
+typing-extensions = ">=3.7.4.3"
+
+[package.extras]
+dotenv = ["python-dotenv (>=0.10.4)"]
+email = ["email-validator (>=1.0.3)"]
+
[[package]]
name = "pyflakes"
version = "2.4.0"
@@ -601,8 +588,8 @@ prompt_toolkit = ">=2.0,<4.0"
docs = ["Sphinx (>=3.3,<4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)"]
[[package]]
-name = "realtime-py"
-version = "0.1.3"
+name = "realtime"
+version = "0.0.3"
description = ""
category = "main"
optional = false
@@ -613,24 +600,6 @@ dataclasses = ">=0.6,<0.7"
python-dateutil = ">=2.8.1,<3.0.0"
websockets = ">=9.1,<10.0"
-[[package]]
-name = "requests"
-version = "2.26.0"
-description = "Python HTTP for Humans."
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
-
-[package.dependencies]
-certifi = ">=2017.4.17"
-charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""}
-idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""}
-urllib3 = ">=1.21.1,<1.27"
-
-[package.extras]
-socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
-use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
-
[[package]]
name = "rfc3986"
version = "1.5.0"
@@ -687,11 +656,11 @@ python-versions = ">=3.6"
[[package]]
name = "tomlkit"
-version = "0.7.2"
+version = "0.8.0"
description = "Style preserving TOML library"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6,<4.0"
[[package]]
name = "typed-ast"
@@ -709,29 +678,15 @@ category = "main"
optional = false
python-versions = ">=3.6"
-[[package]]
-name = "urllib3"
-version = "1.26.7"
-description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
-
-[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
-secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
-socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
-
[[package]]
name = "virtualenv"
-version = "20.10.0"
+version = "20.11.2"
description = "Virtual Python Environment builder"
category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[package.dependencies]
-"backports.entry-points-selectable" = ">=1.0.4"
distlib = ">=0.3.1,<1"
filelock = ">=3.2,<4"
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
@@ -773,7 +728,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "bdfff7d3ae2ccb7fb934049235d74c18558404dc8d8075b85c706b90405ae442"
+content-hash = "3ff9a078913ddff65770db733917d723446ce71e8cb386eae3c604148bce8a05"
[metadata.files]
anyio = [
@@ -789,12 +744,8 @@ atomicwrites = [
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
-]
-"backports.entry-points-selectable" = [
- {file = "backports.entry_points_selectable-1.1.1-py2.py3-none-any.whl", hash = "sha256:7fceed9532a7aa2bd888654a7314f864a3c16a4e710b34a58cfc0f08114c663b"},
- {file = "backports.entry_points_selectable-1.1.1.tar.gz", hash = "sha256:914b21a479fde881635f7af5adc7f6e38d6b274be32269070c53b698c60d5386"},
+ {file = "attrs-21.3.0-py2.py3-none-any.whl", hash = "sha256:8f7335278dedd26b58c38e006338242cc0977f06d51579b2b8b87b9b33bff66c"},
+ {file = "attrs-21.3.0.tar.gz", hash = "sha256:50f3c9b216dc9021042f71b392859a773b904ce1a029077f58f6598272432045"},
]
black = [
{file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"},
@@ -890,14 +841,17 @@ distlib = [
{file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"},
]
filelock = [
- {file = "filelock-3.4.0-py3-none-any.whl", hash = "sha256:2e139a228bcf56dd8b2274a65174d005c4a6b68540ee0bdbb92c76f43f29f7e8"},
- {file = "filelock-3.4.0.tar.gz", hash = "sha256:93d512b32a23baf4cac44ffd72ccf70732aeff7b8050fcaf6d3ec406d954baf4"},
+ {file = "filelock-3.4.2-py3-none-any.whl", hash = "sha256:cf0fc6a2f8d26bd900f19bf33915ca70ba4dd8c56903eeb14e1e7a2fd7590146"},
+ {file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"},
]
flake8 = [
{file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
{file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
]
-gotrue = []
+gotrue = [
+ {file = "gotrue-0.3.0-py3-none-any.whl", hash = "sha256:e1f89e6a7852d597bad454981fdfaa4ff02bd722c960ff639167a5eae8eaf1da"},
+ {file = "gotrue-0.3.0.tar.gz", hash = "sha256:a5037f6d3b0117613a3ea94b85795333080b7126e4e73e91b8178260559882cd"},
+]
h11 = [
{file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
@@ -911,8 +865,8 @@ httpx = [
{file = "httpx-0.21.1.tar.gz", hash = "sha256:02af20df486b78892a614a7ccd4e4e86a5409ec4981ab0e422c579a887acad83"},
]
identify = [
- {file = "identify-2.4.0-py2.py3-none-any.whl", hash = "sha256:eba31ca80258de6bb51453084bff4a923187cd2193b9c13710f2516ab30732cc"},
- {file = "identify-2.4.0.tar.gz", hash = "sha256:a33ae873287e81651c7800ca309dc1f84679b763c9c8b30680e16fbfa82f0107"},
+ {file = "identify-2.4.1-py2.py3-none-any.whl", hash = "sha256:0192893ff68b03d37fed553e261d4a22f94ea974093aefb33b29df2ff35fed3c"},
+ {file = "identify-2.4.1.tar.gz", hash = "sha256:64d4885e539f505dd8ffb5e93c142a1db45480452b1594cacd3e91dca9a984e9"},
]
idna = [
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
@@ -1026,14 +980,17 @@ pathspec = [
{file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"},
]
platformdirs = [
- {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"},
- {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"},
+ {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"},
+ {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
-postgrest-py = []
+postgrest-py = [
+ {file = "postgrest-py-0.6.0.tar.gz", hash = "sha256:62d7c0599d997ccbeabe69b4d5dc3e53e30f02a5f0ff5216afa4efe4191114a8"},
+ {file = "postgrest_py-0.6.0-py3-none-any.whl", hash = "sha256:8e8b56debfcfe98abebf116ec99dc040ebb694b45fb9468d197b31acd23c0805"},
+]
pre-commit = [
{file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"},
{file = "pre_commit-2.16.0.tar.gz", hash = "sha256:fe9897cac830aa7164dbd02a4e7b90cae49630451ce88464bca73db486ba9f65"},
@@ -1050,6 +1007,30 @@ pycodestyle = [
{file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
{file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
]
+pydantic = [
+ {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"},
+ {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"},
+ {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"},
+ {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"},
+ {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"},
+ {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"},
+ {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"},
+ {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"},
+ {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"},
+ {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"},
+ {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"},
+ {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"},
+ {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"},
+ {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"},
+ {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"},
+ {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"},
+ {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"},
+ {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"},
+ {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"},
+ {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"},
+ {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"},
+ {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"},
+]
pyflakes = [
{file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
{file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
@@ -1109,13 +1090,9 @@ questionary = [
{file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"},
{file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"},
]
-realtime-py = [
- {file = "realtime-py-0.1.3.tar.gz", hash = "sha256:218f8516d9a4e56c0feac9fae28c3571cdba74be1cb8616c2be029cb7df434f4"},
- {file = "realtime_py-0.1.3-py3-none-any.whl", hash = "sha256:4f245094fa3cdf106efe538afbb61b6486369d3210d49af1923d285441315554"},
-]
-requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+realtime = [
+ {file = "realtime-0.0.3-py3-none-any.whl", hash = "sha256:3b977acd5c7c507804d6113cbc921d778451bd2a6112af40e74329338088a410"},
+ {file = "realtime-0.0.3.tar.gz", hash = "sha256:97c347e14330f77238b856383f70bb9a64688345dfda3ed27558cbfc5ac4d5bb"},
]
rfc3986 = [
{file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
@@ -1141,8 +1118,8 @@ tomli = [
{file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"},
]
tomlkit = [
- {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"},
- {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"},
+ {file = "tomlkit-0.8.0-py3-none-any.whl", hash = "sha256:b824e3466f1d475b2b5f1c392954c6cb7ea04d64354ff7300dc7c14257dc85db"},
+ {file = "tomlkit-0.8.0.tar.gz", hash = "sha256:29e84a855712dfe0e88a48f6d05c21118dbafb283bb2eed614d46f80deb8e9a1"},
]
typed-ast = [
{file = "typed_ast-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d8314c92414ce7481eee7ad42b353943679cf6f30237b5ecbf7d835519e1212"},
@@ -1169,13 +1146,9 @@ typing-extensions = [
{file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
{file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
-urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
-]
virtualenv = [
- {file = "virtualenv-20.10.0-py2.py3-none-any.whl", hash = "sha256:4b02e52a624336eece99c96e3ab7111f469c24ba226a53ec474e8e787b365814"},
- {file = "virtualenv-20.10.0.tar.gz", hash = "sha256:576d05b46eace16a9c348085f7d0dc8ef28713a2cabaa1cf0aea41e8f12c9218"},
+ {file = "virtualenv-20.11.2-py2.py3-none-any.whl", hash = "sha256:efd556cec612fd826dc7ef8ce26a6e4ba2395f494244919acd135fb5ceffa809"},
+ {file = "virtualenv-20.11.2.tar.gz", hash = "sha256:7f9e9c2e878d92a434e760058780b8d67a7c5ec016a66784fe4b0d5e50a4eb5c"},
]
wcwidth = [
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
From 4e8a5bc3f491e5a8ecbbc249c5f613099b56b4da Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 29 Dec 2021 20:53:32 +0800
Subject: [PATCH 091/737] refactor: realtime_py -> realtime
---
supabase/lib/realtime_client.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/supabase/lib/realtime_client.py b/supabase/lib/realtime_client.py
index 458e5947..83fe0173 100644
--- a/supabase/lib/realtime_client.py
+++ b/supabase/lib/realtime_client.py
@@ -1,7 +1,7 @@
from typing import Any, Callable
-from realtime_py.connection import Socket
-from realtime_py.transformers import convert_change_data
+from realtime.connection import Socket
+from realtime.transformers import convert_change_data
class SupabaseRealtimeClient:
From 0da9a98e67624bdc026a26afb0519f4f321ef021 Mon Sep 17 00:00:00 2001
From: Sourcery AI <>
Date: Wed, 29 Dec 2021 12:53:52 +0000
Subject: [PATCH 092/737] 'Refactored by Sourcery'
---
supabase/lib/realtime_client.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/supabase/lib/realtime_client.py b/supabase/lib/realtime_client.py
index 83fe0173..22792f11 100644
--- a/supabase/lib/realtime_client.py
+++ b/supabase/lib/realtime_client.py
@@ -15,10 +15,10 @@ def __init__(self, socket: Socket, schema: str, table_name: str):
def get_payload_records(self, payload: Any):
records: dict = {"new": {}, "old": {}}
- if payload.type == "INSERT" or payload.type == "UPDATE":
+ if payload.type in ["INSERT", "UPDATE"]:
records["new"] = payload.record
convert_change_data(payload.columns, payload.record)
- if payload.type == "UPDATE" or payload.type == "DELETE":
+ if payload.type in ["UPDATE", "DELETE"]:
records["old"] = payload.record
convert_change_data(payload.columns, payload.old_record)
return records
From ebe361f921fc3546a791fd127db2879e912b51c8 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 29 Dec 2021 21:31:12 +0800
Subject: [PATCH 093/737] chore: remove detect session in url
---
supabase/client.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/supabase/client.py b/supabase/client.py
index 6cf42e35..b210b693 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -149,7 +149,6 @@ def _init_supabase_auth_client(
return SupabaseAuthClient(
url=auth_url,
auto_refresh_token=client_options.auto_refresh_token,
- detect_session_in_url=client_options.detect_session_in_url,
persist_session=client_options.persist_session,
local_storage=client_options.local_storage,
headers=client_options.headers,
From e36d9a59c7e15e4f6a04e81d40de911047960b0a Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 29 Dec 2021 21:32:04 +0800
Subject: [PATCH 094/737] chore: remove detect session in url
---
supabase/lib/auth_client.py | 2 --
supabase/lib/client_options.py | 4 ----
tests/test_client_options.py | 2 --
3 files changed, 8 deletions(-)
diff --git a/supabase/lib/auth_client.py b/supabase/lib/auth_client.py
index e91ced80..f1166194 100644
--- a/supabase/lib/auth_client.py
+++ b/supabase/lib/auth_client.py
@@ -9,7 +9,6 @@ class SupabaseAuthClient(gotrue.Client):
def __init__(
self,
url: str,
- detect_session_in_url: bool = False,
auto_refresh_token: bool = False,
persist_session: bool = False,
local_storage: Dict[str, Any] = {},
@@ -19,7 +18,6 @@ def __init__(
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/lib/client_options.py b/supabase/lib/client_options.py
index 2f9c577f..02b9c1fa 100644
--- a/supabase/lib/client_options.py
+++ b/supabase/lib/client_options.py
@@ -24,9 +24,6 @@ class ClientOptions:
persist_session: bool = True
"""Whether to persist a logged in session to storage."""
- detect_session_in_url: bool = True
- """Detect a session from the URL. Used for OAuth login callbacks."""
-
local_storage: Dict[str, Any] = dataclasses.field(default_factory=lambda: {})
"""A storage provider. Used to store the logged in session."""
@@ -42,7 +39,6 @@ def replace(
headers: Optional[Dict[str, str]] = None,
auto_refresh_token: Optional[bool] = None,
persist_session: Optional[bool] = None,
- detect_session_in_url: Optional[bool] = None,
local_storage: Optional[Dict[str, Any]] = None,
realtime: Optional[Dict[str, Any]] = None,
fetch: Optional[Callable] = None,
diff --git a/tests/test_client_options.py b/tests/test_client_options.py
index c386f26e..cc55bc5d 100644
--- a/tests/test_client_options.py
+++ b/tests/test_client_options.py
@@ -7,7 +7,6 @@ def test__client_options__replace__returns_updated_options():
headers={"key": "value"},
auto_refresh_token=False,
persist_session=False,
- detect_session_in_url=False,
local_storage={"key": "value"},
realtime={"key": "value"},
)
@@ -18,7 +17,6 @@ def test__client_options__replace__returns_updated_options():
headers={"key": "value"},
auto_refresh_token=False,
persist_session=False,
- detect_session_in_url=False,
local_storage={"key": "value"},
realtime={"key": "value"},
)
From f4467b6a60f3bf9e9ea672c4db3ad6143594f9c0 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 29 Dec 2021 21:42:55 +0800
Subject: [PATCH 095/737] chore: revert gotrue to v0.2.0
---
poetry.lock | 111 +++++++++++++++++----------------
pyproject.toml | 2 +-
supabase/client.py | 1 +
supabase/lib/auth_client.py | 2 +
supabase/lib/client_options.py | 4 ++
tests/test_client_options.py | 2 +
6 files changed, 67 insertions(+), 55 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index f0325f3a..802d3051 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -40,17 +40,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.3.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "black"
@@ -223,15 +223,21 @@ pyflakes = ">=2.4.0,<2.5.0"
[[package]]
name = "gotrue"
-version = "0.3.0"
+version = "0.2.0"
description = "Python Client Library for GoTrue"
category = "main"
optional = false
-python-versions = ">=3.7,<4.0"
+python-versions = "^3.7"
+develop = false
[package.dependencies]
-httpx = ">=0.20,<0.22"
-pydantic = ">=1.8.2,<2.0.0"
+requests = "^2.26.0"
+
+[package.source]
+type = "git"
+url = "https://github.com/supabase-community/gotrue-py.git"
+reference = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"
+resolved_reference = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"
[[package]]
name = "h11"
@@ -483,21 +489,6 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-[[package]]
-name = "pydantic"
-version = "1.8.2"
-description = "Data validation and settings management using python 3.6 type hinting"
-category = "main"
-optional = false
-python-versions = ">=3.6.1"
-
-[package.dependencies]
-typing-extensions = ">=3.7.4.3"
-
-[package.extras]
-dotenv = ["python-dotenv (>=0.10.4)"]
-email = ["email-validator (>=1.0.3)"]
-
[[package]]
name = "pyflakes"
version = "2.4.0"
@@ -600,6 +591,24 @@ dataclasses = ">=0.6,<0.7"
python-dateutil = ">=2.8.1,<3.0.0"
websockets = ">=9.1,<10.0"
+[[package]]
+name = "requests"
+version = "2.26.0"
+description = "Python HTTP for Humans."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""}
+idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""}
+urllib3 = ">=1.21.1,<1.27"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
+use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
+
[[package]]
name = "rfc3986"
version = "1.5.0"
@@ -678,6 +687,19 @@ category = "main"
optional = false
python-versions = ">=3.6"
+[[package]]
+name = "urllib3"
+version = "1.26.7"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+brotli = ["brotlipy (>=0.6.0)"]
+secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
[[package]]
name = "virtualenv"
version = "20.11.2"
@@ -728,7 +750,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "3ff9a078913ddff65770db733917d723446ce71e8cb386eae3c604148bce8a05"
+content-hash = "ade2d73af908787d4b578473d8ece025da1e036166392eaaf16c295c388deedd"
[metadata.files]
anyio = [
@@ -744,8 +766,8 @@ atomicwrites = [
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.3.0-py2.py3-none-any.whl", hash = "sha256:8f7335278dedd26b58c38e006338242cc0977f06d51579b2b8b87b9b33bff66c"},
- {file = "attrs-21.3.0.tar.gz", hash = "sha256:50f3c9b216dc9021042f71b392859a773b904ce1a029077f58f6598272432045"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
black = [
{file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"},
@@ -848,10 +870,7 @@ flake8 = [
{file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
{file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
]
-gotrue = [
- {file = "gotrue-0.3.0-py3-none-any.whl", hash = "sha256:e1f89e6a7852d597bad454981fdfaa4ff02bd722c960ff639167a5eae8eaf1da"},
- {file = "gotrue-0.3.0.tar.gz", hash = "sha256:a5037f6d3b0117613a3ea94b85795333080b7126e4e73e91b8178260559882cd"},
-]
+gotrue = []
h11 = [
{file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
@@ -1007,30 +1026,6 @@ pycodestyle = [
{file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
{file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
]
-pydantic = [
- {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"},
- {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"},
- {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"},
- {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"},
- {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"},
- {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"},
- {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"},
- {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"},
- {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"},
- {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"},
- {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"},
- {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"},
- {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"},
- {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"},
- {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"},
- {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"},
- {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"},
- {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"},
- {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"},
- {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"},
- {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"},
- {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"},
-]
pyflakes = [
{file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
{file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
@@ -1094,6 +1089,10 @@ realtime = [
{file = "realtime-0.0.3-py3-none-any.whl", hash = "sha256:3b977acd5c7c507804d6113cbc921d778451bd2a6112af40e74329338088a410"},
{file = "realtime-0.0.3.tar.gz", hash = "sha256:97c347e14330f77238b856383f70bb9a64688345dfda3ed27558cbfc5ac4d5bb"},
]
+requests = [
+ {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
+ {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+]
rfc3986 = [
{file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
{file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
@@ -1146,6 +1145,10 @@ typing-extensions = [
{file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
{file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
+urllib3 = [
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+]
virtualenv = [
{file = "virtualenv-20.11.2-py2.py3-none-any.whl", hash = "sha256:efd556cec612fd826dc7ef8ce26a6e4ba2395f494244919acd135fb5ceffa809"},
{file = "virtualenv-20.11.2.tar.gz", hash = "sha256:7f9e9c2e878d92a434e760058780b8d67a7c5ec016a66784fe4b0d5e50a4eb5c"},
diff --git a/pyproject.toml b/pyproject.toml
index 075d5187..f15a0fb9 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -18,7 +18,7 @@ classifiers = [
python = "^3.7"
postgrest-py = "^0.6.0"
realtime = "^0.0.3"
-gotrue = "^0.3.0"
+gotrue = {git = "https://github.com/supabase-community/gotrue-py.git", rev = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"}
httpx = ">=0.19,<0.22"
[tool.poetry.dev-dependencies]
diff --git a/supabase/client.py b/supabase/client.py
index b210b693..6cf42e35 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -149,6 +149,7 @@ def _init_supabase_auth_client(
return SupabaseAuthClient(
url=auth_url,
auto_refresh_token=client_options.auto_refresh_token,
+ detect_session_in_url=client_options.detect_session_in_url,
persist_session=client_options.persist_session,
local_storage=client_options.local_storage,
headers=client_options.headers,
diff --git a/supabase/lib/auth_client.py b/supabase/lib/auth_client.py
index f1166194..e91ced80 100644
--- a/supabase/lib/auth_client.py
+++ b/supabase/lib/auth_client.py
@@ -9,6 +9,7 @@ class SupabaseAuthClient(gotrue.Client):
def __init__(
self,
url: str,
+ detect_session_in_url: bool = False,
auto_refresh_token: bool = False,
persist_session: bool = False,
local_storage: Dict[str, Any] = {},
@@ -18,6 +19,7 @@ def __init__(
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/lib/client_options.py b/supabase/lib/client_options.py
index 02b9c1fa..2f9c577f 100644
--- a/supabase/lib/client_options.py
+++ b/supabase/lib/client_options.py
@@ -24,6 +24,9 @@ class ClientOptions:
persist_session: bool = True
"""Whether to persist a logged in session to storage."""
+ detect_session_in_url: bool = True
+ """Detect a session from the URL. Used for OAuth login callbacks."""
+
local_storage: Dict[str, Any] = dataclasses.field(default_factory=lambda: {})
"""A storage provider. Used to store the logged in session."""
@@ -39,6 +42,7 @@ def replace(
headers: Optional[Dict[str, str]] = None,
auto_refresh_token: Optional[bool] = None,
persist_session: Optional[bool] = None,
+ detect_session_in_url: Optional[bool] = None,
local_storage: Optional[Dict[str, Any]] = None,
realtime: Optional[Dict[str, Any]] = None,
fetch: Optional[Callable] = None,
diff --git a/tests/test_client_options.py b/tests/test_client_options.py
index cc55bc5d..c386f26e 100644
--- a/tests/test_client_options.py
+++ b/tests/test_client_options.py
@@ -7,6 +7,7 @@ def test__client_options__replace__returns_updated_options():
headers={"key": "value"},
auto_refresh_token=False,
persist_session=False,
+ detect_session_in_url=False,
local_storage={"key": "value"},
realtime={"key": "value"},
)
@@ -17,6 +18,7 @@ def test__client_options__replace__returns_updated_options():
headers={"key": "value"},
auto_refresh_token=False,
persist_session=False,
+ detect_session_in_url=False,
local_storage={"key": "value"},
realtime={"key": "value"},
)
From 66f55e359feea8702acbbd8da6bf3a585f2451a9 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Wed, 29 Dec 2021 22:04:01 +0800
Subject: [PATCH 096/737] chore: revert gotrue version to 0.2.0
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index f15a0fb9..202574e4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -18,7 +18,7 @@ classifiers = [
python = "^3.7"
postgrest-py = "^0.6.0"
realtime = "^0.0.3"
-gotrue = {git = "https://github.com/supabase-community/gotrue-py.git", rev = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"}
+gotrue = "^0.2.0"
httpx = ">=0.19,<0.22"
[tool.poetry.dev-dependencies]
From 4f36efad9dc8fc7dd32c2fc6cc271842ec79ad11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Wed, 29 Dec 2021 15:34:25 +0000
Subject: [PATCH 097/737] 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
---
poetry.lock | 99 +++++++++++++++++-----------------
pyproject.toml | 4 +-
supabase/client.py | 22 ++++----
supabase/lib/auth_client.py | 31 +++++++----
supabase/lib/client_options.py | 36 ++++++-------
supabase/lib/constants.py | 3 --
tests/test_client.py | 16 +++---
tests/test_client_options.py | 20 ++++---
8 files changed, 120 insertions(+), 111 deletions(-)
delete mode 100644 supabase/lib/constants.py
diff --git a/poetry.lock b/poetry.lock
index 802d3051..afa4d35b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -223,21 +223,15 @@ pyflakes = ">=2.4.0,<2.5.0"
[[package]]
name = "gotrue"
-version = "0.2.0"
+version = "0.3.0"
description = "Python Client Library for GoTrue"
category = "main"
optional = false
-python-versions = "^3.7"
-develop = false
+python-versions = ">=3.7,<4.0"
[package.dependencies]
-requests = "^2.26.0"
-
-[package.source]
-type = "git"
-url = "https://github.com/supabase-community/gotrue-py.git"
-reference = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"
-resolved_reference = "9ba3192dbdccd2f02a4819b52dd6cf51095af7e7"
+httpx = ">=0.20,<0.22"
+pydantic = ">=1.8.2,<2.0.0"
[[package]]
name = "h11"
@@ -489,6 +483,21 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "pydantic"
+version = "1.8.2"
+description = "Data validation and settings management using python 3.6 type hinting"
+category = "main"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.dependencies]
+typing-extensions = ">=3.7.4.3"
+
+[package.extras]
+dotenv = ["python-dotenv (>=0.10.4)"]
+email = ["email-validator (>=1.0.3)"]
+
[[package]]
name = "pyflakes"
version = "2.4.0"
@@ -591,24 +600,6 @@ dataclasses = ">=0.6,<0.7"
python-dateutil = ">=2.8.1,<3.0.0"
websockets = ">=9.1,<10.0"
-[[package]]
-name = "requests"
-version = "2.26.0"
-description = "Python HTTP for Humans."
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
-
-[package.dependencies]
-certifi = ">=2017.4.17"
-charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""}
-idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""}
-urllib3 = ">=1.21.1,<1.27"
-
-[package.extras]
-socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
-use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
-
[[package]]
name = "rfc3986"
version = "1.5.0"
@@ -687,19 +678,6 @@ category = "main"
optional = false
python-versions = ">=3.6"
-[[package]]
-name = "urllib3"
-version = "1.26.7"
-description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
-
-[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
-secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
-socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
-
[[package]]
name = "virtualenv"
version = "20.11.2"
@@ -750,7 +728,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "ade2d73af908787d4b578473d8ece025da1e036166392eaaf16c295c388deedd"
+content-hash = "3ff9a078913ddff65770db733917d723446ce71e8cb386eae3c604148bce8a05"
[metadata.files]
anyio = [
@@ -870,7 +848,10 @@ flake8 = [
{file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
{file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
]
-gotrue = []
+gotrue = [
+ {file = "gotrue-0.3.0-py3-none-any.whl", hash = "sha256:e1f89e6a7852d597bad454981fdfaa4ff02bd722c960ff639167a5eae8eaf1da"},
+ {file = "gotrue-0.3.0.tar.gz", hash = "sha256:a5037f6d3b0117613a3ea94b85795333080b7126e4e73e91b8178260559882cd"},
+]
h11 = [
{file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
@@ -1026,6 +1007,30 @@ pycodestyle = [
{file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
{file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
]
+pydantic = [
+ {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"},
+ {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"},
+ {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"},
+ {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"},
+ {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"},
+ {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"},
+ {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"},
+ {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"},
+ {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"},
+ {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"},
+ {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"},
+ {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"},
+ {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"},
+ {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"},
+ {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"},
+ {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"},
+ {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"},
+ {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"},
+ {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"},
+ {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"},
+ {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"},
+ {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"},
+]
pyflakes = [
{file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
{file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
@@ -1089,10 +1094,6 @@ realtime = [
{file = "realtime-0.0.3-py3-none-any.whl", hash = "sha256:3b977acd5c7c507804d6113cbc921d778451bd2a6112af40e74329338088a410"},
{file = "realtime-0.0.3.tar.gz", hash = "sha256:97c347e14330f77238b856383f70bb9a64688345dfda3ed27558cbfc5ac4d5bb"},
]
-requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
-]
rfc3986 = [
{file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
{file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
@@ -1145,10 +1146,6 @@ typing-extensions = [
{file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
{file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
-urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
-]
virtualenv = [
{file = "virtualenv-20.11.2-py2.py3-none-any.whl", hash = "sha256:efd556cec612fd826dc7ef8ce26a6e4ba2395f494244919acd135fb5ceffa809"},
{file = "virtualenv-20.11.2.tar.gz", hash = "sha256:7f9e9c2e878d92a434e760058780b8d67a7c5ec016a66784fe4b0d5e50a4eb5c"},
diff --git a/pyproject.toml b/pyproject.toml
index 202574e4..022ddda1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -18,7 +18,7 @@ classifiers = [
python = "^3.7"
postgrest-py = "^0.6.0"
realtime = "^0.0.3"
-gotrue = "^0.2.0"
+gotrue = "^0.3.0"
httpx = ">=0.19,<0.22"
[tool.poetry.dev-dependencies]
@@ -32,7 +32,7 @@ commitizen = "^2.20.3"
[tool.commitizen]
name = "cz_conventional_commits"
-version = "0.0.3"
+version = "0.1.0"
version_files = [
"supabase/__init__.py",
"pyproject.toml:version"
diff --git a/supabase/client.py b/supabase/client.py
index 6cf42e35..2d05988a 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -5,7 +5,6 @@
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.client_options import ClientOptions
-from supabase.lib.constants import DEFAULT_OPTIONS
from supabase.lib.realtime_client import SupabaseRealtimeClient
from supabase.lib.storage_client import SupabaseStorageClient
@@ -17,7 +16,7 @@ def __init__(
self,
supabase_url: str,
supabase_key: str,
- **options,
+ options: ClientOptions = ClientOptions(),
):
"""Instantiate the client.
@@ -38,20 +37,18 @@ def __init__(
raise Exception("supabase_key is required")
self.supabase_url = supabase_url
self.supabase_key = supabase_key
-
- settings = DEFAULT_OPTIONS.replace(**options)
- settings.headers.update(self._get_auth_headers())
+ options.headers.update(self._get_auth_headers())
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.storage_url = f"{supabase_url}/storage/v1"
- self.schema: str = settings.schema
+ self.schema: str = options.schema
# Instantiate clients.
self.auth = self._init_supabase_auth_client(
auth_url=self.auth_url,
supabase_key=self.supabase_key,
- client_options=settings,
+ client_options=options,
)
# TODO(fedden): Bring up to parity with JS client.
# self.realtime: SupabaseRealtimeClient = self._init_realtime_client(
@@ -62,7 +59,7 @@ def __init__(
self.postgrest = self._init_postgrest_client(
rest_url=self.rest_url,
supabase_key=self.supabase_key,
- headers=settings.headers,
+ headers=options.headers,
)
def storage(self) -> SupabaseStorageClient:
@@ -149,7 +146,6 @@ def _init_supabase_auth_client(
return SupabaseAuthClient(
url=auth_url,
auto_refresh_token=client_options.auto_refresh_token,
- detect_session_in_url=client_options.detect_session_in_url,
persist_session=client_options.persist_session,
local_storage=client_options.local_storage,
headers=client_options.headers,
@@ -175,7 +171,11 @@ def _get_auth_headers(self) -> Dict[str, str]:
}
-def create_client(supabase_url: str, supabase_key: str, **options) -> Client:
+def create_client(
+ supabase_url: str,
+ supabase_key: str,
+ options: ClientOptions = ClientOptions(),
+) -> Client:
"""Create client function to instantiate supabase client like JS runtime.
Parameters
@@ -202,4 +202,4 @@ def create_client(supabase_url: str, supabase_key: str, **options) -> Client:
-------
Client
"""
- return Client(supabase_url=supabase_url, supabase_key=supabase_key, **options)
+ return Client(supabase_url=supabase_url, supabase_key=supabase_key, options=options)
diff --git a/supabase/lib/auth_client.py b/supabase/lib/auth_client.py
index e91ced80..ab3dbe3f 100644
--- a/supabase/lib/auth_client.py
+++ b/supabase/lib/auth_client.py
@@ -1,26 +1,39 @@
-from typing import Any, Dict
+from typing import Dict, Optional
-import gotrue
+from gotrue import (
+ CookieOptions,
+ SyncGoTrueAPI,
+ SyncGoTrueClient,
+ SyncMemoryStorage,
+ SyncSupportedStorage,
+)
+from gotrue.constants import COOKIE_OPTIONS
-class SupabaseAuthClient(gotrue.Client):
+class SupabaseAuthClient(SyncGoTrueClient):
"""SupabaseAuthClient"""
def __init__(
self,
+ *,
url: str,
- detect_session_in_url: bool = False,
- auto_refresh_token: bool = False,
- persist_session: bool = False,
- local_storage: Dict[str, Any] = {},
headers: Dict[str, str] = {},
+ auto_refresh_token: bool = True,
+ persist_session: bool = True,
+ local_storage: SyncSupportedStorage = SyncMemoryStorage(),
+ cookie_options: CookieOptions = CookieOptions.parse_obj(COOKIE_OPTIONS),
+ api: Optional[SyncGoTrueAPI] = None,
+ replace_default_headers: bool = False,
):
"""Instanciate SupabaseAuthClient instance."""
- super().__init__(
+ SyncGoTrueClient.__init__(
+ self,
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,
+ cookie_options=cookie_options,
+ api=api,
+ replace_default_headers=replace_default_headers,
)
diff --git a/supabase/lib/client_options.py b/supabase/lib/client_options.py
index 2f9c577f..f3cbffdd 100644
--- a/supabase/lib/client_options.py
+++ b/supabase/lib/client_options.py
@@ -1,13 +1,14 @@
-import copy
-import dataclasses
+from dataclasses import dataclass, field
from typing import Any, Callable, Dict, Optional
+from gotrue import SyncMemoryStorage, SyncSupportedStorage
+
from supabase import __version__
DEFAULT_HEADERS = {"X-Client-Info": f"supabase-py/{__version__}"}
-@dataclasses.dataclass
+@dataclass
class ClientOptions:
schema: str = "public"
"""
@@ -15,7 +16,7 @@ class ClientOptions:
Must be on the list of exposed schemas in Supabase. Defaults to 'public'.
"""
- headers: Dict[str, str] = dataclasses.field(default_factory=DEFAULT_HEADERS.copy)
+ headers: Dict[str, str] = field(default_factory=DEFAULT_HEADERS.copy)
"""Optional headers for initializing the client."""
auto_refresh_token: bool = True
@@ -24,14 +25,11 @@ class ClientOptions:
persist_session: bool = True
"""Whether to persist a logged in session to storage."""
- detect_session_in_url: bool = True
- """Detect a session from the URL. Used for OAuth login callbacks."""
-
- local_storage: Dict[str, Any] = dataclasses.field(default_factory=lambda: {})
+ local_storage: SyncSupportedStorage = field(default_factory=SyncMemoryStorage)
"""A storage provider. Used to store the logged in session."""
- """Options passed to the realtime-py instance"""
realtime: Optional[Dict[str, Any]] = None
+ """Options passed to the realtime-py instance"""
fetch: Optional[Callable] = None
"""A custom `fetch` implementation."""
@@ -42,17 +40,19 @@ def replace(
headers: Optional[Dict[str, str]] = None,
auto_refresh_token: Optional[bool] = None,
persist_session: Optional[bool] = None,
- detect_session_in_url: Optional[bool] = None,
- local_storage: Optional[Dict[str, Any]] = None,
+ local_storage: Optional[SyncSupportedStorage] = None,
realtime: Optional[Dict[str, Any]] = None,
fetch: Optional[Callable] = None,
) -> "ClientOptions":
"""Create a new SupabaseClientOptions with changes"""
- changes = {
- key: value
- for key, value in locals().items()
- if key != "self" and value is not None
- }
- client_options = dataclasses.replace(self, **changes)
- client_options = copy.deepcopy(client_options)
+ 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.local_storage = local_storage or self.local_storage
+ client_options.realtime = realtime or self.realtime
+ client_options.fetch = fetch or self.fetch
return client_options
diff --git a/supabase/lib/constants.py b/supabase/lib/constants.py
deleted file mode 100644
index 49d99a0a..00000000
--- a/supabase/lib/constants.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from supabase.lib.client_options import ClientOptions
-
-DEFAULT_OPTIONS: ClientOptions = ClientOptions()
diff --git a/tests/test_client.py b/tests/test_client.py
index 168a8484..2d0fa5d4 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -2,9 +2,10 @@
import random
import string
-from typing import TYPE_CHECKING, Any, Dict
+from typing import TYPE_CHECKING, Any, Union
import pytest
+from gotrue import Session, User
if TYPE_CHECKING:
from supabase import Client
@@ -15,15 +16,12 @@ def _random_string(length: int = 10) -> str:
return "".join(random.choices(string.ascii_uppercase + string.digits, k=length))
-def _assert_authenticated_user(data: Dict[str, Any]) -> None:
+def _assert_authenticated_user(data: Union[Session, User, str, None]) -> None:
"""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"
+ assert data is not None
+ assert isinstance(data, Session)
+ assert data.user is not None
+ assert data.user.aud == "authenticated"
@pytest.mark.xfail(
diff --git a/tests/test_client_options.py b/tests/test_client_options.py
index c386f26e..46273ec0 100644
--- a/tests/test_client_options.py
+++ b/tests/test_client_options.py
@@ -1,14 +1,17 @@
+from gotrue import SyncMemoryStorage
+
from supabase.lib.client_options import ClientOptions
def test__client_options__replace__returns_updated_options():
+ local_storage = SyncMemoryStorage()
+ local_storage.set_item("key", "value")
options = ClientOptions(
schema="schema",
headers={"key": "value"},
auto_refresh_token=False,
persist_session=False,
- detect_session_in_url=False,
- local_storage={"key": "value"},
+ local_storage=local_storage,
realtime={"key": "value"},
)
@@ -18,8 +21,7 @@ def test__client_options__replace__returns_updated_options():
headers={"key": "value"},
auto_refresh_token=False,
persist_session=False,
- detect_session_in_url=False,
- local_storage={"key": "value"},
+ local_storage=local_storage,
realtime={"key": "value"},
)
@@ -28,12 +30,14 @@ def test__client_options__replace__returns_updated_options():
def test__client_options__replace__updates_only_new_options():
# Arrange
- options = ClientOptions(local_storage={"key": "value"})
+ local_storage = SyncMemoryStorage()
+ local_storage.set_item("key", "value")
+ options = ClientOptions(local_storage=local_storage)
new_options = options.replace()
# Act
- new_options.local_storage["key"] = "new_value"
+ new_options.local_storage.set_item("key", "new_value")
# Assert
- assert options.local_storage["key"] == "value"
- assert new_options.local_storage["key"] == "new_value"
+ assert options.local_storage.get_item("key") == "new_value"
+ assert new_options.local_storage.get_item("key") == "new_value"
From 17db56ece0b7089d6c98ae0c0658db609346f6fe Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Sat, 1 Jan 2022 05:35:22 +0100
Subject: [PATCH 098/737] Remove __all__, export auth, storage, realtime
clients
---
supabase/__init__.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 0ae2bf3d..23bb17bf 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -2,5 +2,6 @@
from supabase import client, lib
from supabase.client import Client, create_client
-
-__all__ = ["client", "lib", "Client", "create_client"]
+from supabase.lib.storage_client import SupabaseStorageClient
+from supabase.lib.auth_client import SupabaseAuthClient
+from supabase.lib.realtime_client import SupabaseRealtimeClient
From 5924fed7eb75402d3795139fd93fa311d518f6c3 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 1 Jan 2022 21:54:35 +0800
Subject: [PATCH 099/737] chore: reorder imports
---
supabase/__init__.py | 2 +-
tests/test_client.py | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 23bb17bf..477f4bc1 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -2,6 +2,6 @@
from supabase import client, lib
from supabase.client import Client, create_client
-from supabase.lib.storage_client import SupabaseStorageClient
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.realtime_client import SupabaseRealtimeClient
+from supabase.lib.storage_client import SupabaseStorageClient
diff --git a/tests/test_client.py b/tests/test_client.py
index 2d0fa5d4..9282715f 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -36,6 +36,7 @@ def test_incorrect_values_dont_instanciate_client(url: Any, key: Any) -> None:
_: Client = create_client(url, key)
+@pytest.mark.skip(reason="TO FIX: Session does not terminate with test included.")
def test_client_auth(supabase: Client) -> None:
"""Ensure we can create an auth user, and login with it."""
# Create a random user login email and password.
From 6a56538dd13fa0da9126465700756ea8376a3925 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 1 Jan 2022 22:04:32 +0800
Subject: [PATCH 100/737] chore: update dependencies
---
poetry.lock | 96 +++++++++++++++++++++++++-------------------------
pyproject.toml | 2 +-
2 files changed, 49 insertions(+), 49 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index afa4d35b..0174850d 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -160,14 +160,6 @@ tomli = {version = "*", optional = true, markers = "extra == \"toml\""}
[package.extras]
toml = ["tomli"]
-[[package]]
-name = "dataclasses"
-version = "0.6"
-description = "A backport of the dataclasses module for Python 3.6"
-category = "main"
-optional = false
-python-versions = "*"
-
[[package]]
name = "decli"
version = "0.5.2"
@@ -485,7 +477,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pydantic"
-version = "1.8.2"
+version = "1.9.0"
description = "Data validation and settings management using python 3.6 type hinting"
category = "main"
optional = false
@@ -589,14 +581,13 @@ docs = ["Sphinx (>=3.3,<4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)", "sphinx-auto
[[package]]
name = "realtime"
-version = "0.0.3"
+version = "0.0.4"
description = ""
category = "main"
optional = false
python-versions = ">=3.7,<4.0"
[package.dependencies]
-dataclasses = ">=0.6,<0.7"
python-dateutil = ">=2.8.1,<3.0.0"
websockets = ">=9.1,<10.0"
@@ -680,7 +671,7 @@ python-versions = ">=3.6"
[[package]]
name = "virtualenv"
-version = "20.11.2"
+version = "20.12.1"
description = "Virtual Python Environment builder"
category = "dev"
optional = false
@@ -715,20 +706,20 @@ python-versions = ">=3.6.1"
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "3ff9a078913ddff65770db733917d723446ce71e8cb386eae3c604148bce8a05"
+content-hash = "08995076147c3bcf006e83f637a4ceb2589de4a0ab3040bdd276b2196450b6b4"
[metadata.files]
anyio = [
@@ -824,10 +815,6 @@ coverage = [
{file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"},
{file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"},
]
-dataclasses = [
- {file = "dataclasses-0.6-py3-none-any.whl", hash = "sha256:454a69d788c7fda44efd71e259be79577822f5e3f53f029a22d08004e951dc9f"},
- {file = "dataclasses-0.6.tar.gz", hash = "sha256:6988bd2b895eef432d562370bb707d540f32f7360ab13da45340101bc2307d84"},
-]
decli = [
{file = "decli-0.5.2-py3-none-any.whl", hash = "sha256:d3207bc02d0169bf6ed74ccca09ce62edca0eb25b0ebf8bf4ae3fb8333e15ca0"},
{file = "decli-0.5.2.tar.gz", hash = "sha256:f2cde55034a75c819c630c7655a844c612f2598c42c21299160465df6ad463ad"},
@@ -1008,28 +995,41 @@ pycodestyle = [
{file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
]
pydantic = [
- {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"},
- {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"},
- {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"},
- {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"},
- {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"},
- {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"},
- {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"},
- {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"},
- {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"},
- {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"},
- {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"},
- {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"},
- {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"},
- {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"},
- {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"},
- {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"},
- {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"},
- {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"},
- {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"},
- {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"},
- {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"},
- {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"},
+ {file = "pydantic-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cb23bcc093697cdea2708baae4f9ba0e972960a835af22560f6ae4e7e47d33f5"},
+ {file = "pydantic-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1d5278bd9f0eee04a44c712982343103bba63507480bfd2fc2790fa70cd64cf4"},
+ {file = "pydantic-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab624700dc145aa809e6f3ec93fb8e7d0f99d9023b713f6a953637429b437d37"},
+ {file = "pydantic-1.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c8d7da6f1c1049eefb718d43d99ad73100c958a5367d30b9321b092771e96c25"},
+ {file = "pydantic-1.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3c3b035103bd4e2e4a28da9da7ef2fa47b00ee4a9cf4f1a735214c1bcd05e0f6"},
+ {file = "pydantic-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3011b975c973819883842c5ab925a4e4298dffccf7782c55ec3580ed17dc464c"},
+ {file = "pydantic-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:086254884d10d3ba16da0588604ffdc5aab3f7f09557b998373e885c690dd398"},
+ {file = "pydantic-1.9.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0fe476769acaa7fcddd17cadd172b156b53546ec3614a4d880e5d29ea5fbce65"},
+ {file = "pydantic-1.9.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8e9dcf1ac499679aceedac7e7ca6d8641f0193c591a2d090282aaf8e9445a46"},
+ {file = "pydantic-1.9.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1e4c28f30e767fd07f2ddc6f74f41f034d1dd6bc526cd59e63a82fe8bb9ef4c"},
+ {file = "pydantic-1.9.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c86229333cabaaa8c51cf971496f10318c4734cf7b641f08af0a6fbf17ca3054"},
+ {file = "pydantic-1.9.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:c0727bda6e38144d464daec31dff936a82917f431d9c39c39c60a26567eae3ed"},
+ {file = "pydantic-1.9.0-cp36-cp36m-win_amd64.whl", hash = "sha256:dee5ef83a76ac31ab0c78c10bd7d5437bfdb6358c95b91f1ba7ff7b76f9996a1"},
+ {file = "pydantic-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9c9bdb3af48e242838f9f6e6127de9be7063aad17b32215ccc36a09c5cf1070"},
+ {file = "pydantic-1.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ee7e3209db1e468341ef41fe263eb655f67f5c5a76c924044314e139a1103a2"},
+ {file = "pydantic-1.9.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b6037175234850ffd094ca77bf60fb54b08b5b22bc85865331dd3bda7a02fa1"},
+ {file = "pydantic-1.9.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b2571db88c636d862b35090ccf92bf24004393f85c8870a37f42d9f23d13e032"},
+ {file = "pydantic-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8b5ac0f1c83d31b324e57a273da59197c83d1bb18171e512908fe5dc7278a1d6"},
+ {file = "pydantic-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bbbc94d0c94dd80b3340fc4f04fd4d701f4b038ebad72c39693c794fd3bc2d9d"},
+ {file = "pydantic-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e0896200b6a40197405af18828da49f067c2fa1f821491bc8f5bde241ef3f7d7"},
+ {file = "pydantic-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bdfdadb5994b44bd5579cfa7c9b0e1b0e540c952d56f627eb227851cda9db77"},
+ {file = "pydantic-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:574936363cd4b9eed8acdd6b80d0143162f2eb654d96cb3a8ee91d3e64bf4cf9"},
+ {file = "pydantic-1.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c556695b699f648c58373b542534308922c46a1cda06ea47bc9ca45ef5b39ae6"},
+ {file = "pydantic-1.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f947352c3434e8b937e3aa8f96f47bdfe6d92779e44bb3f41e4c213ba6a32145"},
+ {file = "pydantic-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5e48ef4a8b8c066c4a31409d91d7ca372a774d0212da2787c0d32f8045b1e034"},
+ {file = "pydantic-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:96f240bce182ca7fe045c76bcebfa0b0534a1bf402ed05914a6f1dadff91877f"},
+ {file = "pydantic-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:815ddebb2792efd4bba5488bc8fde09c29e8ca3227d27cf1c6990fc830fd292b"},
+ {file = "pydantic-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c5b77947b9e85a54848343928b597b4f74fc364b70926b3c4441ff52620640c"},
+ {file = "pydantic-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c68c3bc88dbda2a6805e9a142ce84782d3930f8fdd9655430d8576315ad97ce"},
+ {file = "pydantic-1.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a79330f8571faf71bf93667d3ee054609816f10a259a109a0738dac983b23c3"},
+ {file = "pydantic-1.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f5a64b64ddf4c99fe201ac2724daada8595ada0d102ab96d019c1555c2d6441d"},
+ {file = "pydantic-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a733965f1a2b4090a5238d40d983dcd78f3ecea221c7af1497b845a9709c1721"},
+ {file = "pydantic-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cc6a4cb8a118ffec2ca5fcb47afbacb4f16d0ab8b7350ddea5e8ef7bcc53a16"},
+ {file = "pydantic-1.9.0-py3-none-any.whl", hash = "sha256:085ca1de245782e9b46cefcf99deecc67d418737a1fd3f6a4f511344b613a5b3"},
+ {file = "pydantic-1.9.0.tar.gz", hash = "sha256:742645059757a56ecd886faf4ed2441b9c0cd406079c2b4bee51bcc3fbcd510a"},
]
pyflakes = [
{file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
@@ -1091,8 +1091,8 @@ questionary = [
{file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"},
]
realtime = [
- {file = "realtime-0.0.3-py3-none-any.whl", hash = "sha256:3b977acd5c7c507804d6113cbc921d778451bd2a6112af40e74329338088a410"},
- {file = "realtime-0.0.3.tar.gz", hash = "sha256:97c347e14330f77238b856383f70bb9a64688345dfda3ed27558cbfc5ac4d5bb"},
+ {file = "realtime-0.0.4-py3-none-any.whl", hash = "sha256:8c27f3c53b7e9487b4c5682d8b1ed9b1eb9bb3c6aa570b647499e3dc69e85d72"},
+ {file = "realtime-0.0.4.tar.gz", hash = "sha256:ca4edbbe4fd6f55adbc8ff88dc1d4d6efc7aa0c422fc525ba75270b0b761f4c4"},
]
rfc3986 = [
{file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
@@ -1147,8 +1147,8 @@ typing-extensions = [
{file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
virtualenv = [
- {file = "virtualenv-20.11.2-py2.py3-none-any.whl", hash = "sha256:efd556cec612fd826dc7ef8ce26a6e4ba2395f494244919acd135fb5ceffa809"},
- {file = "virtualenv-20.11.2.tar.gz", hash = "sha256:7f9e9c2e878d92a434e760058780b8d67a7c5ec016a66784fe4b0d5e50a4eb5c"},
+ {file = "virtualenv-20.12.1-py2.py3-none-any.whl", hash = "sha256:a5bb9afc076462ea736b0c060829ed6aef707413d0e5946294cc26e3c821436a"},
+ {file = "virtualenv-20.12.1.tar.gz", hash = "sha256:d51ae01ef49e7de4d2b9d85b4926ac5aabc3f3879a4b4e4c4a8027fa2f0e4f6a"},
]
wcwidth = [
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
@@ -1190,6 +1190,6 @@ websockets = [
{file = "websockets-9.1.tar.gz", hash = "sha256:276d2339ebf0df4f45df453923ebd2270b87900eda5dfd4a6b0cfa15f82111c3"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/pyproject.toml b/pyproject.toml
index 022ddda1..006afaf2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -17,7 +17,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
postgrest-py = "^0.6.0"
-realtime = "^0.0.3"
+realtime = "^0.0.4"
gotrue = "^0.3.0"
httpx = ">=0.19,<0.22"
From ba79875db3066f9eb52ac711b58ad47c831bad87 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Sat, 1 Jan 2022 22:11:32 +0800
Subject: [PATCH 101/737] chore: bump version to 0.1.1
---
pyproject.toml | 4 ++--
supabase/__init__.py | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 006afaf2..33c5dbc3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.1.0"
+version = "0.1.1"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
@@ -32,7 +32,7 @@ commitizen = "^2.20.3"
[tool.commitizen]
name = "cz_conventional_commits"
-version = "0.1.0"
+version = "0.1.1"
version_files = [
"supabase/__init__.py",
"pyproject.toml:version"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 477f4bc1..e6b6ae2d 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.1.0"
+__version__ = "0.1.1"
from supabase import client, lib
from supabase.client import Client, create_client
From 8b24de1bf7d3242627784e38cd7a46d075222a5f Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Sun, 2 Jan 2022 05:23:25 +0100
Subject: [PATCH 102/737] Chore: fix ci/cd badge in README
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 76a8e096..9153e3db 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# supabase-py
-[](https://github.com/supabase/supabase-py/actions)
+[](https://github.com/supabase-community/supabase-py/actions/workflows/ci.yml)
[](https://badge.fury.io/py/supabase)
[](https://supabase.readthedocs.io/en/latest/?badge=latest)
From 7206e73e638b98c98276cd806c0bf45fc74c0ffe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 1 Jan 2022 23:27:37 -0500
Subject: [PATCH 103/737] fix: set correct main branch in ci.yml
---
.github/workflows/ci.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 73716eba..c8b026f6 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -29,7 +29,7 @@ jobs:
publish:
needs: test
- if: ${{ !startsWith(github.event.head_commit.message, 'bump:') && github.ref == 'refs/heads/main' && github.event_name == 'push' }}
+ if: ${{ !startsWith(github.event.head_commit.message, 'bump:') && github.ref == 'refs/heads/develop' && github.event_name == 'push' }}
runs-on: ubuntu-latest
name: "Bump version, create changelog and publish"
steps:
From 01e3e811b312830c836ab79a4aa46ac7d53c39ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 1 Jan 2022 23:37:51 -0500
Subject: [PATCH 104/737] fix: set correct main branch in ci.yml
---
.github/workflows/ci.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c8b026f6..dd01d651 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -41,7 +41,7 @@ jobs:
uses: commitizen-tools/commitizen-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- branch: main
+ branch: develop
changelog_increment_filename: body.md
- name: Release
uses: softprops/action-gh-release@v1
From 8177ab57d2afdf7a97336080422de18b73535322 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Sun, 2 Jan 2022 04:43:49 +0000
Subject: [PATCH 105/737] =?UTF-8?q?bump:=20version=200.1.1=20=E2=86=92=201?=
=?UTF-8?q?.0.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CHANGELOG.md | 58 ++++++++++++++++++++++++++++++++++++++++++++
pyproject.toml | 4 +--
supabase/__init__.py | 2 +-
3 files changed, 61 insertions(+), 3 deletions(-)
create mode 100644 CHANGELOG.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..545647d4
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,58 @@
+## v1.0.0 (2022-01-02)
+
+### Fix
+
+- set correct main branch in ci.yml
+- set correct main branch in ci.yml
+- set correct main branch in ci.yml
+- update gotrue version and modify client options class
+- update gotrue version and modify client options class
+- remove setup.py
+- ci.yml max parallel config
+- github action max parallel in one
+- export envs and fix tests
+- error in Makefile
+- remove deadweight test
+- ensure python37 compat
+- default value for `name` in create_bucket
+
+### Refactor
+
+- realtime_py -> realtime
+
+### Feat
+
+- use directly sync postgrest client and remove unused code
+- use directly sync postgrest client and remove unused code
+- unify http client to be httpx
+- unify http client to be httpx
+- add header to query builder
+- upload files include mime type
+- add mime type to uploaded files
+- create custom StorageException
+
+## v0.0.3 (2021-10-13)
+
+### Feat
+
+- add async support to storage buckets API
+- add docs for query_builder and storage_bucket
+- add upload
+- add download function
+- Add more functions to storage file api
+- add create_signed_url
+
+### Fix
+
+- missing json bodies in patch and put requests
+- missing json bodies in patch and put requests
+- get create_signed_url working
+- resolve merge conflicts
+- resolve merge conflicts
+
+### Refactor
+
+- update test client to use fixture
+- update test client
+
+## v0.0.2 (2021-04-05)
diff --git a/pyproject.toml b/pyproject.toml
index 33c5dbc3..fef05768 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.1.1"
+version = "1.0.0"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
@@ -32,7 +32,7 @@ commitizen = "^2.20.3"
[tool.commitizen]
name = "cz_conventional_commits"
-version = "0.1.1"
+version = "1.0.0"
version_files = [
"supabase/__init__.py",
"pyproject.toml:version"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index e6b6ae2d..ccdfb420 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.1.1"
+__version__ = "1.0.0"
from supabase import client, lib
from supabase.client import Client, create_client
From ee0e9fd821a7b65ae147dd4701236f7744cc033b Mon Sep 17 00:00:00 2001
From: leynier
Date: Sun, 2 Jan 2022 00:01:45 -0500
Subject: [PATCH 106/737] =?UTF-8?q?Revert=20"bump:=20version=200.1.1=20?=
=?UTF-8?q?=E2=86=92=201.0.0"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit 8177ab57d2afdf7a97336080422de18b73535322.
---
CHANGELOG.md | 58 --------------------------------------------
pyproject.toml | 4 +--
supabase/__init__.py | 2 +-
3 files changed, 3 insertions(+), 61 deletions(-)
delete mode 100644 CHANGELOG.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 545647d4..00000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,58 +0,0 @@
-## v1.0.0 (2022-01-02)
-
-### Fix
-
-- set correct main branch in ci.yml
-- set correct main branch in ci.yml
-- set correct main branch in ci.yml
-- update gotrue version and modify client options class
-- update gotrue version and modify client options class
-- remove setup.py
-- ci.yml max parallel config
-- github action max parallel in one
-- export envs and fix tests
-- error in Makefile
-- remove deadweight test
-- ensure python37 compat
-- default value for `name` in create_bucket
-
-### Refactor
-
-- realtime_py -> realtime
-
-### Feat
-
-- use directly sync postgrest client and remove unused code
-- use directly sync postgrest client and remove unused code
-- unify http client to be httpx
-- unify http client to be httpx
-- add header to query builder
-- upload files include mime type
-- add mime type to uploaded files
-- create custom StorageException
-
-## v0.0.3 (2021-10-13)
-
-### Feat
-
-- add async support to storage buckets API
-- add docs for query_builder and storage_bucket
-- add upload
-- add download function
-- Add more functions to storage file api
-- add create_signed_url
-
-### Fix
-
-- missing json bodies in patch and put requests
-- missing json bodies in patch and put requests
-- get create_signed_url working
-- resolve merge conflicts
-- resolve merge conflicts
-
-### Refactor
-
-- update test client to use fixture
-- update test client
-
-## v0.0.2 (2021-04-05)
diff --git a/pyproject.toml b/pyproject.toml
index fef05768..33c5dbc3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "1.0.0"
+version = "0.1.1"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
@@ -32,7 +32,7 @@ commitizen = "^2.20.3"
[tool.commitizen]
name = "cz_conventional_commits"
-version = "1.0.0"
+version = "0.1.1"
version_files = [
"supabase/__init__.py",
"pyproject.toml:version"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index ccdfb420..e6b6ae2d 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "1.0.0"
+__version__ = "0.1.1"
from supabase import client, lib
from supabase.client import Client, create_client
From d36ee72e3d04ebac6f5f364505332f0873694c53 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 3 Jan 2022 00:34:58 +0100
Subject: [PATCH 107/737] chore: update dependencies
---
poetry.lock | 14 +++++++-------
pyproject.toml | 2 +-
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 0174850d..98218825 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -421,7 +421,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.6.0"
+version = "0.7.0"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
@@ -671,7 +671,7 @@ python-versions = ">=3.6"
[[package]]
name = "virtualenv"
-version = "20.12.1"
+version = "20.13.0"
description = "Virtual Python Environment builder"
category = "dev"
optional = false
@@ -719,7 +719,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "08995076147c3bcf006e83f637a4ceb2589de4a0ab3040bdd276b2196450b6b4"
+content-hash = "b3ed01f3b8aab4459e39e1ebdddfb63c931eb08df9bebe80acebe6b8da7dd44c"
[metadata.files]
anyio = [
@@ -975,8 +975,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
postgrest-py = [
- {file = "postgrest-py-0.6.0.tar.gz", hash = "sha256:62d7c0599d997ccbeabe69b4d5dc3e53e30f02a5f0ff5216afa4efe4191114a8"},
- {file = "postgrest_py-0.6.0-py3-none-any.whl", hash = "sha256:8e8b56debfcfe98abebf116ec99dc040ebb694b45fb9468d197b31acd23c0805"},
+ {file = "postgrest-py-0.7.0.tar.gz", hash = "sha256:fba00a778b2484b543f13433555814e6fcb3bbf13ace932ec67830201d5ffb54"},
+ {file = "postgrest_py-0.7.0-py3-none-any.whl", hash = "sha256:ffa5d68a31351c49e091d80bb41a048099c66741b01aaacf5bc4f1064022c384"},
]
pre-commit = [
{file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"},
@@ -1147,8 +1147,8 @@ typing-extensions = [
{file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
virtualenv = [
- {file = "virtualenv-20.12.1-py2.py3-none-any.whl", hash = "sha256:a5bb9afc076462ea736b0c060829ed6aef707413d0e5946294cc26e3c821436a"},
- {file = "virtualenv-20.12.1.tar.gz", hash = "sha256:d51ae01ef49e7de4d2b9d85b4926ac5aabc3f3879a4b4e4c4a8027fa2f0e4f6a"},
+ {file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"},
+ {file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"},
]
wcwidth = [
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
diff --git a/pyproject.toml b/pyproject.toml
index 33c5dbc3..dbc5ac02 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,7 +16,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-postgrest-py = "^0.6.0"
+postgrest-py = "0.7.0"
realtime = "^0.0.4"
gotrue = "^0.3.0"
httpx = ">=0.19,<0.22"
From 7c7d50b94a20fc3bd2bc2a579295035d0e5d07b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 3 Jan 2022 00:43:28 +0100
Subject: [PATCH 108/737] bump: version 0.1.1 -> 0.2.0
---
pyproject.toml | 4 ++--
supabase/__init__.py | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index dbc5ac02..9949727b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.1.1"
+version = "0.2.0"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
@@ -32,7 +32,7 @@ commitizen = "^2.20.3"
[tool.commitizen]
name = "cz_conventional_commits"
-version = "0.1.1"
+version = "0.2.0"
version_files = [
"supabase/__init__.py",
"pyproject.toml:version"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index e6b6ae2d..5ca6e719 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.1.1"
+__version__ = "0.2.0"
from supabase import client, lib
from supabase.client import Client, create_client
From 697b34deb3fb07ab6607839898938e105f7eabf7 Mon Sep 17 00:00:00 2001
From: Alif Ayatulloh Ar-Rizqy <45624651+alif-arrizqy@users.noreply.github.com>
Date: Thu, 6 Jan 2022 10:24:34 +0700
Subject: [PATCH 109/737] Update README.md
Add update of data
---
README.md | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/README.md b/README.md
index 9153e3db..09846326 100644
--- a/README.md
+++ b/README.md
@@ -140,6 +140,17 @@ data = supabase.table("countries").select("*").execute()
assert len(data.get("data", [])) > 0
```
+#### Update of Data
+
+```python
+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)
+data = supabase.table("countries").update({"country": "Indonesia", "capital_city": "Jakarta"}).eq("id", "1").execute()
+```
+
## Realtime Changes
```python
From c772994e56d03e30d343b59045af63cd0a636258 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 6 Jan 2022 23:28:25 +0000
Subject: [PATCH 110/737] 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]
---
poetry.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 98218825..6ce78750 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -252,7 +252,7 @@ http2 = ["h2 (>=3,<5)"]
[[package]]
name = "httpx"
-version = "0.21.1"
+version = "0.21.3"
description = "The next generation HTTP client."
category = "main"
optional = false
@@ -848,8 +848,8 @@ httpcore = [
{file = "httpcore-0.14.3.tar.gz", hash = "sha256:d10162a63265a0228d5807964bd964478cbdb5178f9a2eedfebb2faba27eef5d"},
]
httpx = [
- {file = "httpx-0.21.1-py3-none-any.whl", hash = "sha256:208e5ef2ad4d105213463cfd541898ed9d11851b346473539a8425e644bb7c66"},
- {file = "httpx-0.21.1.tar.gz", hash = "sha256:02af20df486b78892a614a7ccd4e4e86a5409ec4981ab0e422c579a887acad83"},
+ {file = "httpx-0.21.3-py3-none-any.whl", hash = "sha256:df9a0fd43fa79dbab411d83eb1ea6f7a525c96ad92e60c2d7f40388971b25777"},
+ {file = "httpx-0.21.3.tar.gz", hash = "sha256:7a3eb67ef0b8abbd6d9402248ef2f84a76080fa1c839f8662e6eb385640e445a"},
]
identify = [
{file = "identify-2.4.1-py2.py3-none-any.whl", hash = "sha256:0192893ff68b03d37fed553e261d4a22f94ea974093aefb33b29df2ff35fed3c"},
From e498781f528b64a59e2d0e52d87570b55654704a Mon Sep 17 00:00:00 2001
From: Lee Yi Jie Joel
Date: Mon, 17 Jan 2022 01:45:54 -0500
Subject: [PATCH 111/737] Update README.md
---
README.md | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/README.md b/README.md
index 09846326..1606282f 100644
--- a/README.md
+++ b/README.md
@@ -153,11 +153,6 @@ data = supabase.table("countries").update({"country": "Indonesia", "capital_city
## Realtime Changes
-```python
-subscription = supabase
- .table('countries')
- .on('*', lambda x: print(x))
- .subscribe()
-```
+Realtime changes are unfortunately still a WIP. Feel free to file PRs to [realtime-py](https://github.com/supabase-community/realtime-py)
See [Supabase Docs](https://supabase.io/docs/guides/client-libraries) for full list of examples
From 596257d3ebe36ec4f692809958b9f6ae41c79065 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Mon, 17 Jan 2022 06:48:32 +0000
Subject: [PATCH 112/737] chore(deps): update precommit rules
---
.pre-commit-config.yaml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index d6f1c122..5594114e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.0.1
+ rev: v4.1.0
hooks:
- id: trailing-whitespace
- id: check-added-large-files
@@ -35,18 +35,18 @@ repos:
]
- repo: https://github.com/ambv/black
- rev: 21.11b1
+ rev: 21.12b0
hooks:
- id: black
- repo: https://github.com/asottile/pyupgrade
- rev: v2.29.1
+ rev: v2.31.0
hooks:
- id: pyupgrade
args: ["--py37-plus", "--keep-runtime-typing"]
- repo: https://github.com/commitizen-tools/commitizen
- rev: v2.20.0
+ rev: v2.20.3
hooks:
- id: commitizen
stages: [commit-msg]
From f99db763ffe5bfe3d8980e9daec306fd3a581fa9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Mon, 17 Jan 2022 06:49:41 +0000
Subject: [PATCH 113/737] chore(ci-cd): fix github action
---
.github/workflows/ci.yml | 35 +--
poetry.lock | 543 ++++++++++++++++++++++++++++++++++++++-
pyproject.toml | 18 +-
3 files changed, 555 insertions(+), 41 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index dd01d651..a8252ece 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -21,7 +21,7 @@ jobs:
- name: Set up Poetry
uses: abatilo/actions-poetry@v2.1.4
with:
- poetry-version: 1.1.11
+ poetry-version: 1.1.12
- name: Run Tests
run: make run_tests
- name: Upload Coverage
@@ -29,39 +29,18 @@ jobs:
publish:
needs: test
- if: ${{ !startsWith(github.event.head_commit.message, 'bump:') && github.ref == 'refs/heads/develop' && github.event_name == 'push' }}
+ if: ${{ !startsWith(github.event.head_commit.message, 'bump:') && !startsWith(github.event.head_commit.message, 'chore') && github.ref == 'refs/heads/develop' && github.event_name == 'push' && github.repository_owner == 'supabase-community' }}
runs-on: ubuntu-latest
name: "Bump version, create changelog and publish"
steps:
- name: Clone Repository
uses: actions/checkout@v2
with:
+ ref: ${{ github.ref }}
fetch-depth: 0
- - name: Create bump and changelog
- uses: commitizen-tools/commitizen-action@master
+ - name: Python Semantic Release
+ uses: relekang/python-semantic-release@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- branch: develop
- changelog_increment_filename: body.md
- - name: Release
- uses: softprops/action-gh-release@v1
- with:
- body_path: body.md
- tag_name: ${{ env.REVISION }}
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Set up Python 3.9
- uses: actions/setup-python@v2
- with:
- python-version: 3.9
- - name: Set up Poetry
- uses: abatilo/actions-poetry@v2.1.4
- with:
- poetry-version: 1.1.11
- # - name: Publish
- # env:
- # PYPI_USERNAME: __token__
- # PYPI_PASSWORD: ${{ secrets.PYPI_TOKEN }}
- # run: |
- # poetry install
- # poetry publish --build -u $PYPI_USERNAME -p $PYPI_PASSWORD
+ repository_username: __token__
+ repository_password: ${{ secrets.PYPI_TOKEN }}
diff --git a/poetry.lock b/poetry.lock
index 6ce78750..22e92320 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -79,6 +79,19 @@ jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
python2 = ["typed-ast (>=1.4.3)"]
uvloop = ["uvloop (>=0.15.2)"]
+[[package]]
+name = "bleach"
+version = "4.1.0"
+description = "An easy safelist-based HTML-sanitizing tool."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+packaging = "*"
+six = ">=1.9.0"
+webencodings = "*"
+
[[package]]
name = "certifi"
version = "2021.10.8"
@@ -87,6 +100,17 @@ category = "main"
optional = false
python-versions = "*"
+[[package]]
+name = "cffi"
+version = "1.15.0"
+description = "Foreign Function Interface for Python calling C code."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pycparser = "*"
+
[[package]]
name = "cfgv"
version = "3.3.1"
@@ -118,6 +142,17 @@ python-versions = ">=3.6"
colorama = {version = "*", markers = "platform_system == \"Windows\""}
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+[[package]]
+name = "click-log"
+version = "0.3.2"
+description = "Logging integration for Click"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+click = "*"
+
[[package]]
name = "colorama"
version = "0.4.4"
@@ -160,6 +195,25 @@ tomli = {version = "*", optional = true, markers = "extra == \"toml\""}
[package.extras]
toml = ["tomli"]
+[[package]]
+name = "cryptography"
+version = "36.0.1"
+description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+cffi = ">=1.12"
+
+[package.extras]
+docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
+sdist = ["setuptools_rust (>=0.11.4)"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+
[[package]]
name = "decli"
version = "0.5.2"
@@ -187,6 +241,25 @@ category = "dev"
optional = false
python-versions = "*"
+[[package]]
+name = "docutils"
+version = "0.18.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "dotty-dict"
+version = "1.3.0"
+description = "Dictionary wrapper for quick access to deeply nested keys."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+setuptools_scm = "*"
+
[[package]]
name = "filelock"
version = "3.4.2"
@@ -213,6 +286,29 @@ mccabe = ">=0.6.0,<0.7.0"
pycodestyle = ">=2.8.0,<2.9.0"
pyflakes = ">=2.4.0,<2.5.0"
+[[package]]
+name = "gitdb"
+version = "4.0.9"
+description = "Git Object Database"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+smmap = ">=3.0.1,<6"
+
+[[package]]
+name = "gitpython"
+version = "3.1.26"
+description = "GitPython is a python library used to interact with Git repositories"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+gitdb = ">=4.0.1,<5"
+typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""}
+
[[package]]
name = "gotrue"
version = "0.3.0"
@@ -313,6 +409,14 @@ category = "dev"
optional = false
python-versions = "*"
+[[package]]
+name = "invoke"
+version = "1.6.0"
+description = "Pythonic task execution"
+category = "dev"
+optional = false
+python-versions = "*"
+
[[package]]
name = "isort"
version = "5.10.1"
@@ -327,6 +431,18 @@ requirements_deprecated_finder = ["pipreqs", "pip-api"]
colors = ["colorama (>=0.4.3,<0.5.0)"]
plugins = ["setuptools"]
+[[package]]
+name = "jeepney"
+version = "0.7.1"
+description = "Low-level, pure Python DBus protocol wrapper."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+test = ["pytest", "pytest-trio", "pytest-asyncio", "testpath", "trio", "async-timeout"]
+trio = ["trio", "async-generator"]
+
[[package]]
name = "jinja2"
version = "3.0.3"
@@ -341,6 +457,24 @@ MarkupSafe = ">=2.0"
[package.extras]
i18n = ["Babel (>=2.7)"]
+[[package]]
+name = "keyring"
+version = "23.5.0"
+description = "Store and access your passwords safely."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+importlib-metadata = ">=3.6"
+jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""}
+pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""}
+SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+
[[package]]
name = "markupsafe"
version = "2.0.1"
@@ -392,6 +526,17 @@ category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+[[package]]
+name = "pkginfo"
+version = "1.8.2"
+description = "Query metadatdata from sdists / bdists / installed packages."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.extras]
+testing = ["coverage", "nose"]
+
[[package]]
name = "platformdirs"
version = "2.4.1"
@@ -475,6 +620,14 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
[[package]]
name = "pydantic"
version = "1.9.0"
@@ -498,6 +651,14 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+[[package]]
+name = "pygments"
+version = "2.11.2"
+description = "Pygments is a syntax highlighting package written in Python."
+category = "dev"
+optional = false
+python-versions = ">=3.5"
+
[[package]]
name = "pyparsing"
version = "3.0.6"
@@ -557,6 +718,56 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
[package.dependencies]
six = ">=1.5"
+[[package]]
+name = "python-gitlab"
+version = "2.10.1"
+description = "Interact with GitLab API"
+category = "dev"
+optional = false
+python-versions = ">=3.6.0"
+
+[package.dependencies]
+requests = ">=2.25.0"
+requests-toolbelt = ">=0.9.1"
+
+[package.extras]
+autocompletion = ["argcomplete (>=1.10.0,<2)"]
+yaml = ["PyYaml (>=5.2)"]
+
+[[package]]
+name = "python-semantic-release"
+version = "7.23.0"
+description = "Automatic Semantic Versioning for Python projects"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+click = ">=7,<9"
+click-log = ">=0.3,<1"
+dotty-dict = ">=1.3.0,<2"
+gitpython = ">=3.0.8,<4"
+invoke = ">=1.4.1,<2"
+python-gitlab = ">=1.10,<3"
+requests = ">=2.25,<3"
+semver = ">=2.10,<3"
+tomlkit = "0.7.0"
+twine = ">=3,<4"
+
+[package.extras]
+dev = ["tox", "isort", "black"]
+docs = ["Sphinx (==1.3.6)"]
+mypy = ["mypy", "types-requests"]
+test = ["coverage (>=5,<6)", "pytest (>=5,<6)", "pytest-xdist (>=1,<2)", "pytest-mock (>=2,<3)", "responses (==0.13.3)", "mock (==1.3.0)"]
+
+[[package]]
+name = "pywin32-ctypes"
+version = "0.2.0"
+description = ""
+category = "dev"
+optional = false
+python-versions = "*"
+
[[package]]
name = "pyyaml"
version = "6.0"
@@ -579,6 +790,22 @@ prompt_toolkit = ">=2.0,<4.0"
[package.extras]
docs = ["Sphinx (>=3.3,<4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)"]
+[[package]]
+name = "readme-renderer"
+version = "32.0"
+description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+bleach = ">=2.1.0"
+docutils = ">=0.13.1"
+Pygments = ">=2.5.1"
+
+[package.extras]
+md = ["cmarkgfm (>=0.5.0,<0.7.0)"]
+
[[package]]
name = "realtime"
version = "0.0.4"
@@ -591,6 +818,35 @@ python-versions = ">=3.7,<4.0"
python-dateutil = ">=2.8.1,<3.0.0"
websockets = ">=9.1,<10.0"
+[[package]]
+name = "requests"
+version = "2.27.1"
+description = "Python HTTP for Humans."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""}
+idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""}
+urllib3 = ">=1.21.1,<1.27"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
+use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
+
+[[package]]
+name = "requests-toolbelt"
+version = "0.9.1"
+description = "A utility belt for advanced users of python-requests"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+requests = ">=2.0.1,<3.0.0"
+
[[package]]
name = "rfc3986"
version = "1.5.0"
@@ -605,6 +861,41 @@ idna = {version = "*", optional = true, markers = "extra == \"idna2008\""}
[package.extras]
idna2008 = ["idna"]
+[[package]]
+name = "secretstorage"
+version = "3.3.1"
+description = "Python bindings to FreeDesktop.org Secret Service API"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+cryptography = ">=2.0"
+jeepney = ">=0.6"
+
+[[package]]
+name = "semver"
+version = "2.13.0"
+description = "Python helper for Semantic Versioning (http://semver.org/)"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "setuptools-scm"
+version = "6.3.2"
+description = "the blessed package to manage your versions by scm tags"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+packaging = ">=20.0"
+tomli = ">=1.0.0"
+
+[package.extras]
+toml = ["setuptools (>=42)", "tomli (>=1.0.0)"]
+
[[package]]
name = "six"
version = "1.16.0"
@@ -613,6 +904,14 @@ category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+[[package]]
+name = "smmap"
+version = "5.0.0"
+description = "A pure Python implementation of a sliding window memory map manager"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
[[package]]
name = "sniffio"
version = "1.2.0"
@@ -647,11 +946,46 @@ python-versions = ">=3.6"
[[package]]
name = "tomlkit"
-version = "0.8.0"
+version = "0.7.0"
description = "Style preserving TOML library"
category = "dev"
optional = false
-python-versions = ">=3.6,<4.0"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "tqdm"
+version = "4.62.3"
+description = "Fast, Extensible Progress Meter"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+dev = ["py-make (>=0.1.0)", "twine", "wheel"]
+notebook = ["ipywidgets (>=6)"]
+telegram = ["requests"]
+
+[[package]]
+name = "twine"
+version = "3.7.1"
+description = "Collection of utilities for publishing packages on PyPI"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = ">=0.4.3"
+importlib-metadata = ">=3.6"
+keyring = ">=15.1"
+pkginfo = ">=1.8.1"
+readme-renderer = ">=21.0"
+requests = ">=2.20"
+requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0"
+rfc3986 = ">=1.4.0"
+tqdm = ">=4.14"
[[package]]
name = "typed-ast"
@@ -669,6 +1003,19 @@ category = "main"
optional = false
python-versions = ">=3.6"
+[[package]]
+name = "urllib3"
+version = "1.26.8"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+brotli = ["brotlipy (>=0.6.0)"]
+secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
[[package]]
name = "virtualenv"
version = "20.13.0"
@@ -696,6 +1043,14 @@ category = "dev"
optional = false
python-versions = "*"
+[[package]]
+name = "webencodings"
+version = "0.5.1"
+description = "Character encoding aliases for legacy web content"
+category = "dev"
+optional = false
+python-versions = "*"
+
[[package]]
name = "websockets"
version = "9.1"
@@ -719,7 +1074,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "b3ed01f3b8aab4459e39e1ebdddfb63c931eb08df9bebe80acebe6b8da7dd44c"
+content-hash = "4afeceeaf06dbfe514f648451e8c7cb3ab9938b356606e425dfa82034b736d52"
[metadata.files]
anyio = [
@@ -742,10 +1097,66 @@ black = [
{file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"},
{file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"},
]
+bleach = [
+ {file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"},
+ {file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"},
+]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
+cffi = [
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
+]
cfgv = [
{file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"},
{file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"},
@@ -758,6 +1169,10 @@ click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
{file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
+click-log = [
+ {file = "click-log-0.3.2.tar.gz", hash = "sha256:16fd1ca3fc6b16c98cea63acf1ab474ea8e676849dc669d86afafb0ed7003124"},
+ {file = "click_log-0.3.2-py2.py3-none-any.whl", hash = "sha256:eee14dc37cdf3072158570f00406572f9e03e414accdccfccd4c538df9ae322c"},
+]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
@@ -815,6 +1230,28 @@ coverage = [
{file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"},
{file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"},
]
+cryptography = [
+ {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
+ {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
+ {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
+ {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
+ {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
+ {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
+ {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
+]
decli = [
{file = "decli-0.5.2-py3-none-any.whl", hash = "sha256:d3207bc02d0169bf6ed74ccca09ce62edca0eb25b0ebf8bf4ae3fb8333e15ca0"},
{file = "decli-0.5.2.tar.gz", hash = "sha256:f2cde55034a75c819c630c7655a844c612f2598c42c21299160465df6ad463ad"},
@@ -827,6 +1264,13 @@ distlib = [
{file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"},
{file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"},
]
+docutils = [
+ {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"},
+ {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"},
+]
+dotty-dict = [
+ {file = "dotty_dict-1.3.0.tar.gz", hash = "sha256:eb0035a3629ecd84397a68f1f42f1e94abd1c34577a19cd3eacad331ee7cbaf0"},
+]
filelock = [
{file = "filelock-3.4.2-py3-none-any.whl", hash = "sha256:cf0fc6a2f8d26bd900f19bf33915ca70ba4dd8c56903eeb14e1e7a2fd7590146"},
{file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"},
@@ -835,6 +1279,14 @@ flake8 = [
{file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
{file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
]
+gitdb = [
+ {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"},
+ {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"},
+]
+gitpython = [
+ {file = "GitPython-3.1.26-py3-none-any.whl", hash = "sha256:26ac35c212d1f7b16036361ca5cff3ec66e11753a0d677fb6c48fa4e1a9dd8d6"},
+ {file = "GitPython-3.1.26.tar.gz", hash = "sha256:fc8868f63a2e6d268fb25f481995ba185a85a66fcad126f039323ff6635669ee"},
+]
gotrue = [
{file = "gotrue-0.3.0-py3-none-any.whl", hash = "sha256:e1f89e6a7852d597bad454981fdfaa4ff02bd722c960ff639167a5eae8eaf1da"},
{file = "gotrue-0.3.0.tar.gz", hash = "sha256:a5037f6d3b0117613a3ea94b85795333080b7126e4e73e91b8178260559882cd"},
@@ -867,14 +1319,27 @@ iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
+invoke = [
+ {file = "invoke-1.6.0-py2-none-any.whl", hash = "sha256:e6c9917a1e3e73e7ea91fdf82d5f151ccfe85bf30cc65cdb892444c02dbb5f74"},
+ {file = "invoke-1.6.0-py3-none-any.whl", hash = "sha256:769e90caeb1bd07d484821732f931f1ad8916a38e3f3e618644687fc09cb6317"},
+ {file = "invoke-1.6.0.tar.gz", hash = "sha256:374d1e2ecf78981da94bfaf95366216aaec27c2d6a7b7d5818d92da55aa258d3"},
+]
isort = [
{file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
{file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
]
+jeepney = [
+ {file = "jeepney-0.7.1-py3-none-any.whl", hash = "sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac"},
+ {file = "jeepney-0.7.1.tar.gz", hash = "sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f"},
+]
jinja2 = [
{file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
{file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
]
+keyring = [
+ {file = "keyring-23.5.0-py3-none-any.whl", hash = "sha256:b0d28928ac3ec8e42ef4cc227822647a19f1d544f21f96457965dc01cf555261"},
+ {file = "keyring-23.5.0.tar.gz", hash = "sha256:9012508e141a80bd1c0b6778d5c610dd9f8c464d75ac6774248500503f972fb9"},
+]
markupsafe = [
{file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
{file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
@@ -966,6 +1431,10 @@ pathspec = [
{file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"},
{file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"},
]
+pkginfo = [
+ {file = "pkginfo-1.8.2-py2.py3-none-any.whl", hash = "sha256:c24c487c6a7f72c66e816ab1796b96ac6c3d14d49338293d2141664330b55ffc"},
+ {file = "pkginfo-1.8.2.tar.gz", hash = "sha256:542e0d0b6750e2e21c20179803e40ab50598d8066d51097a0e382cba9eb02bff"},
+]
platformdirs = [
{file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"},
{file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"},
@@ -994,6 +1463,10 @@ pycodestyle = [
{file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
{file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
]
+pycparser = [
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
pydantic = [
{file = "pydantic-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cb23bcc093697cdea2708baae4f9ba0e972960a835af22560f6ae4e7e47d33f5"},
{file = "pydantic-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1d5278bd9f0eee04a44c712982343103bba63507480bfd2fc2790fa70cd64cf4"},
@@ -1035,6 +1508,10 @@ pyflakes = [
{file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
{file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
]
+pygments = [
+ {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
+ {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
+]
pyparsing = [
{file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
@@ -1051,6 +1528,18 @@ python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
+python-gitlab = [
+ {file = "python-gitlab-2.10.1.tar.gz", hash = "sha256:7afa7d7c062fa62c173190452265a30feefb844428efc58ea5244f3b9fc0d40f"},
+ {file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
+]
+python-semantic-release = [
+ {file = "python-semantic-release-7.23.0.tar.gz", hash = "sha256:48c33bf671dafa1257e7d955543856eb98486a3f976f586053556ae180d725da"},
+ {file = "python_semantic_release-7.23.0-py3-none-any.whl", hash = "sha256:5bf7fcdb28e5e9888c9a15a1168afe53302116a6874d818580d4c58db60283ab"},
+]
+pywin32-ctypes = [
+ {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
+ {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
+]
pyyaml = [
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
{file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
@@ -1090,18 +1579,46 @@ questionary = [
{file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"},
{file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"},
]
+readme-renderer = [
+ {file = "readme_renderer-32.0-py3-none-any.whl", hash = "sha256:a50a0f2123a4c1145ac6f420e1a348aafefcc9211c846e3d51df05fe3d865b7d"},
+ {file = "readme_renderer-32.0.tar.gz", hash = "sha256:b512beafa6798260c7d5af3e1b1f097e58bfcd9a575da7c4ddd5e037490a5b85"},
+]
realtime = [
{file = "realtime-0.0.4-py3-none-any.whl", hash = "sha256:8c27f3c53b7e9487b4c5682d8b1ed9b1eb9bb3c6aa570b647499e3dc69e85d72"},
{file = "realtime-0.0.4.tar.gz", hash = "sha256:ca4edbbe4fd6f55adbc8ff88dc1d4d6efc7aa0c422fc525ba75270b0b761f4c4"},
]
+requests = [
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
+]
+requests-toolbelt = [
+ {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"},
+ {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"},
+]
rfc3986 = [
{file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
{file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
]
+secretstorage = [
+ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"},
+ {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"},
+]
+semver = [
+ {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"},
+ {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"},
+]
+setuptools-scm = [
+ {file = "setuptools_scm-6.3.2-py3-none-any.whl", hash = "sha256:4c64444b1d49c4063ae60bfe1680f611c8b13833d556fd1d6050c0023162a119"},
+ {file = "setuptools_scm-6.3.2.tar.gz", hash = "sha256:a49aa8081eeb3514eb9728fa5040f2eaa962d6c6f4ec9c32f6c1fba88f88a0f2"},
+]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
+smmap = [
+ {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"},
+ {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"},
+]
sniffio = [
{file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"},
{file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"},
@@ -1118,8 +1635,16 @@ tomli = [
{file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"},
]
tomlkit = [
- {file = "tomlkit-0.8.0-py3-none-any.whl", hash = "sha256:b824e3466f1d475b2b5f1c392954c6cb7ea04d64354ff7300dc7c14257dc85db"},
- {file = "tomlkit-0.8.0.tar.gz", hash = "sha256:29e84a855712dfe0e88a48f6d05c21118dbafb283bb2eed614d46f80deb8e9a1"},
+ {file = "tomlkit-0.7.0-py2.py3-none-any.whl", hash = "sha256:6babbd33b17d5c9691896b0e68159215a9387ebfa938aa3ac42f4a4beeb2b831"},
+ {file = "tomlkit-0.7.0.tar.gz", hash = "sha256:ac57f29693fab3e309ea789252fcce3061e19110085aa31af5446ca749325618"},
+]
+tqdm = [
+ {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"},
+ {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"},
+]
+twine = [
+ {file = "twine-3.7.1-py3-none-any.whl", hash = "sha256:8c120845fc05270f9ee3e9d7ebbed29ea840e41f48cd059e04733f7e1d401345"},
+ {file = "twine-3.7.1.tar.gz", hash = "sha256:28460a3db6b4532bde6a5db6755cf2dce6c5020bada8a641bb2c5c7a9b1f35b8"},
]
typed-ast = [
{file = "typed_ast-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d8314c92414ce7481eee7ad42b353943679cf6f30237b5ecbf7d835519e1212"},
@@ -1146,6 +1671,10 @@ typing-extensions = [
{file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
{file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
+urllib3 = [
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+]
virtualenv = [
{file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"},
{file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"},
@@ -1154,6 +1683,10 @@ wcwidth = [
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
{file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
]
+webencodings = [
+ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
+ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
+]
websockets = [
{file = "websockets-9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d144b350045c53c8ff09aa1cfa955012dd32f00c7e0862c199edcabb1a8b32da"},
{file = "websockets-9.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b4ad84b156cf50529b8ac5cc1638c2cf8680490e3fccb6121316c8c02620a2e4"},
diff --git a/pyproject.toml b/pyproject.toml
index 9949727b..4d73e5bd 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,15 +29,17 @@ flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.20.3"
+python-semantic-release = "^7.23.0"
-[tool.commitizen]
-name = "cz_conventional_commits"
-version = "0.2.0"
-version_files = [
- "supabase/__init__.py",
- "pyproject.toml:version"
-]
-tag_format = "v$version"
+[tool.semantic_release]
+version_variable = "supabase/__init__.py:__version__"
+version_toml = "pyproject.toml:tool.poetry.version"
+major_on_zero = false
+commit_subject = "chore(release): bump version to v{version}"
+build_command = "curl -sSL https://install.python-poetry.org | python - && export PATH=\"/github/home/.local/bin:$PATH\" && poetry install && poetry build"
+upload_to_repository = false
+branch = "develop"
+changelog_components = "semantic_release.changelog.changelog_headers,semantic_release.changelog.compare_url"
[build-system]
requires = ["poetry-core>=1.0.0"]
From d5c4483a775efdc4b3845180ae890e4cb18916e2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Mon, 17 Jan 2022 06:50:04 +0000
Subject: [PATCH 114/737] chore: add badges to readme
---
README.md | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/README.md b/README.md
index 09846326..0bb8f958 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,16 @@
# supabase-py
-[](https://github.com/supabase-community/supabase-py/actions/workflows/ci.yml)
-[](https://badge.fury.io/py/supabase)
-[](https://supabase.readthedocs.io/en/latest/?badge=latest)
+[](https://opensource.org/licenses/MIT)
+[](https://github.com/supabase-community/supabase-py/actions/workflows/ci.yml)
+[](https://pypi.org/project/supabase)
+[](https://pypi.org/project/supabase)
+[](https://codecov.io/gh/supabase-community/supabase-py)
+[](https://github.com/supabase-community/supabase-py/commits)
+[](https://github.com/supabase-community/supabase-py/commits)
+[](https://github.com/supabase-community/supabase-py/stargazers)
+[](https://github.com/supabase-community/supabase-py/network/members)
+[](https://github.com/supabase-community/supabase-py)
+[](https://github.com/supabase-community/supabase-py/graphs/contributors)
Supabase client for Python. This mirrors the design of [supabase-js](https://github.com/supabase/supabase-js/blob/master/README.md)
@@ -21,7 +29,7 @@ We are currently in Public Alpha. Watch "releases" of this repo to get notified
**Recomended:** First activate your virtual environment, with your favourites system. For example, we like `poetry` and `conda`!
-#### PyPi installation
+### PyPi installation
Now install the package. (for > Python 3.7)
@@ -29,7 +37,7 @@ Now install the package. (for > Python 3.7)
pip install supabase
```
-#### Local installation
+### Local 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.
@@ -115,7 +123,7 @@ user = supabase.auth.sign_in(email=random_email, password=random_password)
## Managing Data
-#### Insertion of Data
+### Insertion of Data
```python
from supabase import create_client, Client
@@ -127,7 +135,7 @@ data = supabase.table("countries").insert({"name":"Germany"}).execute()
assert len(data.get("data", [])) > 0
```
-#### Selection of Data
+### Selection of Data
```python
from supabase import create_client, Client
@@ -140,7 +148,7 @@ data = supabase.table("countries").select("*").execute()
assert len(data.get("data", [])) > 0
```
-#### Update of Data
+### Update of Data
```python
from supabase import create_client, Client
From ed99717fdd611915b9a697db183a42795cf3e545 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Mon, 17 Jan 2022 07:51:32 -0500
Subject: [PATCH 115/737] fix: use requests for upload (#121)
* fix: use requests for upload
* 'Refactored by Sourcery'
Co-authored-by: Sourcery AI <>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 ++
supabase/lib/storage/storage_file_api.py | 19 ++++++++++++-------
3 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 22e92320..99f8da6c 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -822,7 +822,7 @@ websockets = ">=9.1,<10.0"
name = "requests"
version = "2.27.1"
description = "Python HTTP for Humans."
-category = "dev"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
@@ -840,7 +840,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
name = "requests-toolbelt"
version = "0.9.1"
description = "A utility belt for advanced users of python-requests"
-category = "dev"
+category = "main"
optional = false
python-versions = "*"
@@ -1007,7 +1007,7 @@ python-versions = ">=3.6"
name = "urllib3"
version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "dev"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
@@ -1074,7 +1074,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "4afeceeaf06dbfe514f648451e8c7cb3ab9938b356606e425dfa82034b736d52"
+content-hash = "c0ff5410d14f26d403fcf2d48daf5ad26b914c382afccffade59c9c37091ab85"
[metadata.files]
anyio = [
diff --git a/pyproject.toml b/pyproject.toml
index 4d73e5bd..b70a8a26 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -20,6 +20,8 @@ postgrest-py = "0.7.0"
realtime = "^0.0.4"
gotrue = "^0.3.0"
httpx = ">=0.19,<0.22"
+requests = "^2.27.1"
+requests-toolbelt = "^0.9.1"
[tool.poetry.dev-dependencies]
pre-commit = "^2.16.0"
diff --git a/supabase/lib/storage/storage_file_api.py b/supabase/lib/storage/storage_file_api.py
index 9c5d7c39..5af7f732 100644
--- a/supabase/lib/storage/storage_file_api.py
+++ b/supabase/lib/storage/storage_file_api.py
@@ -1,7 +1,10 @@
from typing import Any
import httpx
+import requests
from httpx import HTTPError
+from requests import HTTPError as RequestsHTTPError
+from requests_toolbelt import MultipartEncoder
class StorageFileAPI:
@@ -71,8 +74,7 @@ def get_public_url(self, path: str):
"""
try:
_path = self._get_final_path(path)
- public_url = f"{self.url}/object/public/{_path}"
- return public_url
+ return f"{self.url}/object/public/{_path}"
except:
print("Public URL not found")
@@ -140,7 +142,7 @@ def list(self, path: str = None, options: dict = {}):
try:
body = dict(self.DEFAULT_SEARCH_OPTIONS, **options)
headers = dict(self.headers, **{"Content-Type": "application/json"})
- body["prefix"] = path if path else ""
+ body["prefix"] = path or ""
getdata = httpx.post(
f"{self.url}/object/list/{self.bucket_id}",
json=body,
@@ -189,15 +191,18 @@ def upload(self, path: str, file: Any, file_options: dict = None):
headers = dict(self.headers, **self.DEFAULT_FILE_OPTIONS)
headers.update(file_options)
filename = path.rsplit("/", maxsplit=1)[-1]
- files = {"file": (filename, open(file, "rb"), headers["contentType"])}
+ files = MultipartEncoder(
+ fields={"file": (filename, open(file, "rb"), headers["contentType"])}
+ )
+ headers["Content-Type"] = files.content_type
_path = self._get_final_path(path)
try:
- resp = httpx.post(
+ resp = requests.post(
f"{self.url}/object/{_path}",
- files=files,
+ data=files,
headers=headers,
)
- except HTTPError as http_err:
+ except RequestsHTTPError as http_err:
print(f"HTTP error occurred: {http_err}") # Python 3.6
except Exception as err:
raise err # Python 3.6
From c07e6e40f5bd474304dd3950d20a3c0561439868 Mon Sep 17 00:00:00 2001
From: github-actions
Date: Mon, 17 Jan 2022 12:58:50 +0000
Subject: [PATCH 116/737] chore(release): bump version to v0.2.1
Automatically generated by python-semantic-release
---
CHANGELOG.md | 9 +++++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 11 insertions(+), 2 deletions(-)
create mode 100644 CHANGELOG.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..b1ddf2d2
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,9 @@
+# Changelog
+
+
+
+## v0.2.1 (2022-01-17)
+### Fix
+* Use requests for upload ([#121](https://github.com/supabase-community/supabase-py/issues/121)) ([`ed99717`](https://github.com/supabase-community/supabase-py/commit/ed99717fdd611915b9a697db183a42795cf3e545))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.2.0...v0.2.1)**
diff --git a/pyproject.toml b/pyproject.toml
index b70a8a26..6588b558 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.2.0"
+version = "0.2.1"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 5ca6e719..181ad268 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.2.0"
+__version__ = "0.2.1"
from supabase import client, lib
from supabase.client import Client, create_client
From eca34fa222c8f7be7c30586f74cbe9fe9df3018f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Mon, 17 Jan 2022 08:46:05 -0500
Subject: [PATCH 117/737] 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
---
.github/workflows/manual_pypi_publish.yml | 30 +++++++++++++
poetry.lock | 52 +++++++++++------------
pyproject.toml | 6 +--
3 files changed, 59 insertions(+), 29 deletions(-)
create mode 100644 .github/workflows/manual_pypi_publish.yml
diff --git a/.github/workflows/manual_pypi_publish.yml b/.github/workflows/manual_pypi_publish.yml
new file mode 100644
index 00000000..16cfb176
--- /dev/null
+++ b/.github/workflows/manual_pypi_publish.yml
@@ -0,0 +1,30 @@
+name: Manual PyPi Publish
+on:
+ workflow_dispatch:
+ inputs:
+ username:
+ description: PyPi Username
+ required: true
+ default: __token__
+ password:
+ description: PyPi Password
+ required: true
+jobs:
+ publish:
+ name: Manual PyPi Publish
+ runs-on: ubuntu-latest
+ steps:
+ - name: Clone Repository
+ uses: actions/checkout@v2
+ - name: Set up Python '3.10'
+ uses: actions/setup-python@v2
+ with:
+ python-version: '3.10'
+ - name: Set up Poetry
+ uses: abatilo/actions-poetry@v2.1.4
+ with:
+ poetry-version: 1.1.12
+ - name: Install dependencies
+ run: poetry install
+ - name: Publish to PyPi
+ run: poetry publish --build -u ${{ github.event.inputs.username }} -p ${{ github.event.inputs.password }}
diff --git a/poetry.lock b/poetry.lock
index 99f8da6c..f3a4edbb 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,6 +1,6 @@
[[package]]
name = "anyio"
-version = "3.4.0"
+version = "3.5.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
category = "main"
optional = false
@@ -12,7 +12,7 @@ sniffio = ">=1.1"
typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-doc = ["sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"]
+doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"]
test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"]
trio = ["trio (>=0.16)"]
@@ -121,7 +121,7 @@ python-versions = ">=3.6.1"
[[package]]
name = "charset-normalizer"
-version = "2.0.9"
+version = "2.0.10"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -163,7 +163,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "commitizen"
-version = "2.20.3"
+version = "2.20.4"
description = "Python commitizen client tool"
category = "dev"
optional = false
@@ -311,15 +311,15 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""
[[package]]
name = "gotrue"
-version = "0.3.0"
+version = "0.4.0"
description = "Python Client Library for GoTrue"
category = "main"
optional = false
python-versions = ">=3.7,<4.0"
[package.dependencies]
-httpx = ">=0.20,<0.22"
-pydantic = ">=1.8.2,<2.0.0"
+httpx = ">=0.21.3,<0.22.0"
+pydantic = ">=1.9.0,<2.0.0"
[[package]]
name = "h11"
@@ -331,7 +331,7 @@ python-versions = ">=3.6"
[[package]]
name = "httpcore"
-version = "0.14.3"
+version = "0.14.4"
description = "A minimal low-level HTTP client."
category = "main"
optional = false
@@ -368,7 +368,7 @@ http2 = ["h2 (>=3,<5)"]
[[package]]
name = "identify"
-version = "2.4.1"
+version = "2.4.4"
description = "File identification library for Python"
category = "dev"
optional = false
@@ -566,7 +566,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.7.0"
+version = "0.8.0"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
@@ -574,7 +574,7 @@ python-versions = ">=3.7,<4.0"
[package.dependencies]
deprecation = ">=2.1.0,<3.0.0"
-httpx = ">=0.19,<0.22"
+httpx = ">=0.20,<0.22"
[[package]]
name = "pre-commit"
@@ -1074,12 +1074,12 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "c0ff5410d14f26d403fcf2d48daf5ad26b914c382afccffade59c9c37091ab85"
+content-hash = "0165feb485709d2f8adfa4f7b228c6c3d914902897ee9576c17e211c705e2d59"
[metadata.files]
anyio = [
- {file = "anyio-3.4.0-py3-none-any.whl", hash = "sha256:2855a9423524abcdd652d942f8932fda1735210f77a6b392eafd9ff34d3fe020"},
- {file = "anyio-3.4.0.tar.gz", hash = "sha256:24adc69309fb5779bc1e06158e143e0b6d2c56b302a3ac3de3083c705a6ed39d"},
+ {file = "anyio-3.5.0-py3-none-any.whl", hash = "sha256:b5fa16c5ff93fa1046f2eeb5bbff2dad4d3514d6cda61d02816dba34fa8c3c2e"},
+ {file = "anyio-3.5.0.tar.gz", hash = "sha256:a0aeffe2fb1fdf374a8e4b471444f0f3ac4fb9f5a5b542b48824475e0042a5a6"},
]
argcomplete = [
{file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
@@ -1162,8 +1162,8 @@ cfgv = [
{file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"},
- {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"},
+ {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+ {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
]
click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -1178,8 +1178,8 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
commitizen = [
- {file = "commitizen-2.20.3-py3-none-any.whl", hash = "sha256:f624b9b988b9a60c5ad815d515d350e99aa45e331b843536552de63939cd5f67"},
- {file = "commitizen-2.20.3.tar.gz", hash = "sha256:86d8ac4db7a6b48f3d5799b070287ba4bb27726c0a71d1cbd7f62b48866e5be7"},
+ {file = "commitizen-2.20.4-py3-none-any.whl", hash = "sha256:8bd422319abcdbdbe620aea947b94a58c407996b80c724556c6d7f0e8ab07d49"},
+ {file = "commitizen-2.20.4.tar.gz", hash = "sha256:33fe190935412011a9e9e0a3fc80f4b874bc250461a9374b1169f2d86cb81901"},
]
coverage = [
{file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"},
@@ -1288,24 +1288,24 @@ gitpython = [
{file = "GitPython-3.1.26.tar.gz", hash = "sha256:fc8868f63a2e6d268fb25f481995ba185a85a66fcad126f039323ff6635669ee"},
]
gotrue = [
- {file = "gotrue-0.3.0-py3-none-any.whl", hash = "sha256:e1f89e6a7852d597bad454981fdfaa4ff02bd722c960ff639167a5eae8eaf1da"},
- {file = "gotrue-0.3.0.tar.gz", hash = "sha256:a5037f6d3b0117613a3ea94b85795333080b7126e4e73e91b8178260559882cd"},
+ {file = "gotrue-0.4.0-py3-none-any.whl", hash = "sha256:b30dd75f768af14139d65bc59c523891bf279b2247c1d6a7606693769dfac1d4"},
+ {file = "gotrue-0.4.0.tar.gz", hash = "sha256:0c338ba90c9ee127f7002f23a91271efefaa83050bdce6e3f6e6106c4eb8a84b"},
]
h11 = [
{file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
]
httpcore = [
- {file = "httpcore-0.14.3-py3-none-any.whl", hash = "sha256:9a98d2416b78976fc5396ff1f6b26ae9885efbb3105d24eed490f20ab4c95ec1"},
- {file = "httpcore-0.14.3.tar.gz", hash = "sha256:d10162a63265a0228d5807964bd964478cbdb5178f9a2eedfebb2faba27eef5d"},
+ {file = "httpcore-0.14.4-py3-none-any.whl", hash = "sha256:9410fe352bea732311f2b2bee0555c8cc5e62b9a73b9d3272fe125a2aa6eb28e"},
+ {file = "httpcore-0.14.4.tar.gz", hash = "sha256:d4305811f604d3c2e22869147392f134796976ff946c96a8cfba87f4e0171d83"},
]
httpx = [
{file = "httpx-0.21.3-py3-none-any.whl", hash = "sha256:df9a0fd43fa79dbab411d83eb1ea6f7a525c96ad92e60c2d7f40388971b25777"},
{file = "httpx-0.21.3.tar.gz", hash = "sha256:7a3eb67ef0b8abbd6d9402248ef2f84a76080fa1c839f8662e6eb385640e445a"},
]
identify = [
- {file = "identify-2.4.1-py2.py3-none-any.whl", hash = "sha256:0192893ff68b03d37fed553e261d4a22f94ea974093aefb33b29df2ff35fed3c"},
- {file = "identify-2.4.1.tar.gz", hash = "sha256:64d4885e539f505dd8ffb5e93c142a1db45480452b1594cacd3e91dca9a984e9"},
+ {file = "identify-2.4.4-py2.py3-none-any.whl", hash = "sha256:aa68609c7454dbcaae60a01ff6b8df1de9b39fe6e50b1f6107ec81dcda624aa6"},
+ {file = "identify-2.4.4.tar.gz", hash = "sha256:6b4b5031f69c48bf93a646b90de9b381c6b5f560df4cbe0ed3cf7650ae741e4d"},
]
idna = [
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
@@ -1444,8 +1444,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
postgrest-py = [
- {file = "postgrest-py-0.7.0.tar.gz", hash = "sha256:fba00a778b2484b543f13433555814e6fcb3bbf13ace932ec67830201d5ffb54"},
- {file = "postgrest_py-0.7.0-py3-none-any.whl", hash = "sha256:ffa5d68a31351c49e091d80bb41a048099c66741b01aaacf5bc4f1064022c384"},
+ {file = "postgrest-py-0.8.0.tar.gz", hash = "sha256:c1f290d77ba36eb9efc227c4e7eec7e41e793e5fe5d88907a187820255adb45c"},
+ {file = "postgrest_py-0.8.0-py3-none-any.whl", hash = "sha256:494abadaa89fc33669d241dee20e407a03ae54467dfe74e0a7aac1e735298182"},
]
pre-commit = [
{file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"},
diff --git a/pyproject.toml b/pyproject.toml
index 6588b558..c5a2845b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,10 +16,10 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-postgrest-py = "0.7.0"
+postgrest-py = "^0.8.0"
realtime = "^0.0.4"
-gotrue = "^0.3.0"
-httpx = ">=0.19,<0.22"
+gotrue = "^0.4.0"
+httpx = "^0.21.3"
requests = "^2.27.1"
requests-toolbelt = "^0.9.1"
From 1f7a19595d03189c728bf3d2b6e42e3c60002687 Mon Sep 17 00:00:00 2001
From: github-actions
Date: Mon, 17 Jan 2022 13:53:49 +0000
Subject: [PATCH 118/737] chore(release): bump version to v0.3.0
Automatically generated by python-semantic-release
---
CHANGELOG.md | 6 ++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b1ddf2d2..80618b3a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
+## v0.3.0 (2022-01-17)
+### Feature
+* Add manual action for publish on pypi and update postgrest and gotrue deps ([#124](https://github.com/supabase-community/supabase-py/issues/124)) ([`eca34fa`](https://github.com/supabase-community/supabase-py/commit/eca34fa222c8f7be7c30586f74cbe9fe9df3018f))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.2.1...v0.3.0)**
+
## v0.2.1 (2022-01-17)
### Fix
* Use requests for upload ([#121](https://github.com/supabase-community/supabase-py/issues/121)) ([`ed99717`](https://github.com/supabase-community/supabase-py/commit/ed99717fdd611915b9a697db183a42795cf3e545))
diff --git a/pyproject.toml b/pyproject.toml
index c5a2845b..883513a5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.2.1"
+version = "0.3.0"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 181ad268..124bec70 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.2.1"
+__version__ = "0.3.0"
from supabase import client, lib
from supabase.client import Client, create_client
From cd0e05c8a4f4f87dab8c9d0a19d64d27d00a1344 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 18 Jan 2022 18:57:49 -0500
Subject: [PATCH 119/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index f3a4edbb..382db2d3 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -578,7 +578,7 @@ httpx = ">=0.20,<0.22"
[[package]]
name = "pre-commit"
-version = "2.16.0"
+version = "2.17.0"
description = "A framework for managing and maintaining multi-language pre-commit hooks."
category = "dev"
optional = false
@@ -1074,7 +1074,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "0165feb485709d2f8adfa4f7b228c6c3d914902897ee9576c17e211c705e2d59"
+content-hash = "22e05c44245e61c899ca7853772166a571664f3d9ca7c1cad4148e3a8fd2b9bc"
[metadata.files]
anyio = [
@@ -1448,8 +1448,8 @@ postgrest-py = [
{file = "postgrest_py-0.8.0-py3-none-any.whl", hash = "sha256:494abadaa89fc33669d241dee20e407a03ae54467dfe74e0a7aac1e735298182"},
]
pre-commit = [
- {file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"},
- {file = "pre_commit-2.16.0.tar.gz", hash = "sha256:fe9897cac830aa7164dbd02a4e7b90cae49630451ce88464bca73db486ba9f65"},
+ {file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"},
+ {file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"},
]
prompt-toolkit = [
{file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"},
diff --git a/pyproject.toml b/pyproject.toml
index 883513a5..890ac623 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -24,7 +24,7 @@ requests = "^2.27.1"
requests-toolbelt = "^0.9.1"
[tool.poetry.dev-dependencies]
-pre-commit = "^2.16.0"
+pre-commit = "^2.17.0"
black = "^21.11b1"
pytest = "^6.2.5"
flake8 = "^4.0.1"
From c4521ccfcc28c383b2d044ed8d94a9b4c154ea27 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Thu, 20 Jan 2022 18:40:10 -0500
Subject: [PATCH 120/737] chore: set upload_to_repository to true
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 890ac623..ae82cccf 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -39,7 +39,7 @@ version_toml = "pyproject.toml:tool.poetry.version"
major_on_zero = false
commit_subject = "chore(release): bump version to v{version}"
build_command = "curl -sSL https://install.python-poetry.org | python - && export PATH=\"/github/home/.local/bin:$PATH\" && poetry install && poetry build"
-upload_to_repository = false
+upload_to_repository = true
branch = "develop"
changelog_components = "semantic_release.changelog.changelog_headers,semantic_release.changelog.compare_url"
From 729b2d9d4751eec42d78727f448df688e22814ca Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 20 Jan 2022 19:32:10 -0500
Subject: [PATCH 121/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 382db2d3..ed68717c 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -311,7 +311,7 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""
[[package]]
name = "gotrue"
-version = "0.4.0"
+version = "0.5.0"
description = "Python Client Library for GoTrue"
category = "main"
optional = false
@@ -1074,7 +1074,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "22e05c44245e61c899ca7853772166a571664f3d9ca7c1cad4148e3a8fd2b9bc"
+content-hash = "a51fda81b406e1207148c93065bc1ef2f2ddcab8d13bb9939ef11dc44d5d81ee"
[metadata.files]
anyio = [
@@ -1288,8 +1288,8 @@ gitpython = [
{file = "GitPython-3.1.26.tar.gz", hash = "sha256:fc8868f63a2e6d268fb25f481995ba185a85a66fcad126f039323ff6635669ee"},
]
gotrue = [
- {file = "gotrue-0.4.0-py3-none-any.whl", hash = "sha256:b30dd75f768af14139d65bc59c523891bf279b2247c1d6a7606693769dfac1d4"},
- {file = "gotrue-0.4.0.tar.gz", hash = "sha256:0c338ba90c9ee127f7002f23a91271efefaa83050bdce6e3f6e6106c4eb8a84b"},
+ {file = "gotrue-0.5.0-py3-none-any.whl", hash = "sha256:ed81289fd6a542caa05e6ab63d436561b7a04754783f4b9dd6b1114a04c146de"},
+ {file = "gotrue-0.5.0.tar.gz", hash = "sha256:b8a523a700809f89bc70ac4e465f5e610ac92793ca73b946bec665c30a764a8c"},
]
h11 = [
{file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
diff --git a/pyproject.toml b/pyproject.toml
index ae82cccf..a61eae81 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -18,7 +18,7 @@ classifiers = [
python = "^3.7"
postgrest-py = "^0.8.0"
realtime = "^0.0.4"
-gotrue = "^0.4.0"
+gotrue = ">=0.4,<0.6"
httpx = "^0.21.3"
requests = "^2.27.1"
requests-toolbelt = "^0.9.1"
From 086d92504f014079a125f5342c59d1d8bb7e795f Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Sat, 22 Jan 2022 01:24:15 +0100
Subject: [PATCH 122/737] 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 ( )
---
supabase/lib/storage/storage_file_api.py | 18 ++++++------------
1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/supabase/lib/storage/storage_file_api.py b/supabase/lib/storage/storage_file_api.py
index 5af7f732..b9f27513 100644
--- a/supabase/lib/storage/storage_file_api.py
+++ b/supabase/lib/storage/storage_file_api.py
@@ -1,10 +1,7 @@
from typing import Any
import httpx
-import requests
from httpx import HTTPError
-from requests import HTTPError as RequestsHTTPError
-from requests_toolbelt import MultipartEncoder
class StorageFileAPI:
@@ -17,8 +14,8 @@ class StorageFileAPI:
},
}
DEFAULT_FILE_OPTIONS = {
- "cacheControl": "3600",
- "contentType": "text/plain;charset=UTF-8",
+ "cache-control": "3600",
+ "content-type": "text/plain;charset=UTF-8",
"x-upsert": "false",
}
@@ -191,18 +188,15 @@ def upload(self, path: str, file: Any, file_options: dict = None):
headers = dict(self.headers, **self.DEFAULT_FILE_OPTIONS)
headers.update(file_options)
filename = path.rsplit("/", maxsplit=1)[-1]
- files = MultipartEncoder(
- fields={"file": (filename, open(file, "rb"), headers["contentType"])}
- )
- headers["Content-Type"] = files.content_type
+ files = {"file": (filename, open(file, "rb"), headers.pop("content-type"))}
_path = self._get_final_path(path)
try:
- resp = requests.post(
+ resp = httpx.post(
f"{self.url}/object/{_path}",
- data=files,
+ files=files,
headers=headers,
)
- except RequestsHTTPError as http_err:
+ except HTTPError as http_err:
print(f"HTTP error occurred: {http_err}") # Python 3.6
except Exception as err:
raise err # Python 3.6
From d0b297804483ddde8979f54fc8613d028afc890f Mon Sep 17 00:00:00 2001
From: github-actions
Date: Sat, 22 Jan 2022 00:31:53 +0000
Subject: [PATCH 123/737] chore(release): bump version to v0.3.1
Automatically generated by python-semantic-release
---
CHANGELOG.md | 6 ++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 80618b3a..6f5e3d71 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
+## v0.3.1 (2022-01-22)
+### Fix
+* Use httpx in storage file upload ([#130](https://github.com/supabase-community/supabase-py/issues/130)) ([`086d925`](https://github.com/supabase-community/supabase-py/commit/086d92504f014079a125f5342c59d1d8bb7e795f))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.3.0...v0.3.1)**
+
## v0.3.0 (2022-01-17)
### Feature
* Add manual action for publish on pypi and update postgrest and gotrue deps ([#124](https://github.com/supabase-community/supabase-py/issues/124)) ([`eca34fa`](https://github.com/supabase-community/supabase-py/commit/eca34fa222c8f7be7c30586f74cbe9fe9df3018f))
diff --git a/pyproject.toml b/pyproject.toml
index a61eae81..b3f200e6 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.3.0"
+version = "0.3.1"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 124bec70..4974261f 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.3.0"
+__version__ = "0.3.1"
from supabase import client, lib
from supabase.client import Client, create_client
From b8840cdc07cd7d53767fe2c321761558aecd5bd4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sat, 22 Jan 2022 08:15:25 +0000
Subject: [PATCH 124/737] fix: upgrade postgrest-py for fix order filter
---
poetry.lock | 36 +++++++++++++++++++-----------------
pyproject.toml | 6 ++----
2 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index ed68717c..d9ea3fe2 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -331,7 +331,7 @@ python-versions = ">=3.6"
[[package]]
name = "httpcore"
-version = "0.14.4"
+version = "0.14.5"
description = "A minimal low-level HTTP client."
category = "main"
optional = false
@@ -345,6 +345,7 @@ sniffio = ">=1.0.0,<2.0.0"
[package.extras]
http2 = ["h2 (>=3,<5)"]
+socks = ["socksio (>=1.0.0,<2.0.0)"]
[[package]]
name = "httpx"
@@ -566,7 +567,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.8.0"
+version = "0.8.1"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
@@ -661,7 +662,7 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "main"
optional = false
@@ -822,7 +823,7 @@ websockets = ">=9.1,<10.0"
name = "requests"
version = "2.27.1"
description = "Python HTTP for Humans."
-category = "main"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
@@ -840,7 +841,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
name = "requests-toolbelt"
version = "0.9.1"
description = "A utility belt for advanced users of python-requests"
-category = "main"
+category = "dev"
optional = false
python-versions = "*"
@@ -883,7 +884,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "setuptools-scm"
-version = "6.3.2"
+version = "6.4.2"
description = "the blessed package to manage your versions by scm tags"
category = "dev"
optional = false
@@ -894,7 +895,8 @@ packaging = ">=20.0"
tomli = ">=1.0.0"
[package.extras]
-toml = ["setuptools (>=42)", "tomli (>=1.0.0)"]
+test = ["pytest (>=6.2)", "virtualenv (>20)"]
+toml = ["setuptools (>=42)"]
[[package]]
name = "six"
@@ -1007,7 +1009,7 @@ python-versions = ">=3.6"
name = "urllib3"
version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "main"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
@@ -1074,7 +1076,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "a51fda81b406e1207148c93065bc1ef2f2ddcab8d13bb9939ef11dc44d5d81ee"
+content-hash = "c34f728f7a4c94925e2e20d93878a709b014273020a1752201675b3575deb3f0"
[metadata.files]
anyio = [
@@ -1296,8 +1298,8 @@ h11 = [
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
]
httpcore = [
- {file = "httpcore-0.14.4-py3-none-any.whl", hash = "sha256:9410fe352bea732311f2b2bee0555c8cc5e62b9a73b9d3272fe125a2aa6eb28e"},
- {file = "httpcore-0.14.4.tar.gz", hash = "sha256:d4305811f604d3c2e22869147392f134796976ff946c96a8cfba87f4e0171d83"},
+ {file = "httpcore-0.14.5-py3-none-any.whl", hash = "sha256:2621ee769d0236574df51b305c5f4c69ca8f0c7b215221ad247b1ee42a9a9de1"},
+ {file = "httpcore-0.14.5.tar.gz", hash = "sha256:435ab519628a6e2393f67812dea3ca5c6ad23b457412cd119295d9f906d96a2b"},
]
httpx = [
{file = "httpx-0.21.3-py3-none-any.whl", hash = "sha256:df9a0fd43fa79dbab411d83eb1ea6f7a525c96ad92e60c2d7f40388971b25777"},
@@ -1444,8 +1446,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
postgrest-py = [
- {file = "postgrest-py-0.8.0.tar.gz", hash = "sha256:c1f290d77ba36eb9efc227c4e7eec7e41e793e5fe5d88907a187820255adb45c"},
- {file = "postgrest_py-0.8.0-py3-none-any.whl", hash = "sha256:494abadaa89fc33669d241dee20e407a03ae54467dfe74e0a7aac1e735298182"},
+ {file = "postgrest-py-0.8.1.tar.gz", hash = "sha256:ba96ca118d6e27a422b6afd4ba1b415e6c1202b159db21a47a6cbe16d1310e4e"},
+ {file = "postgrest_py-0.8.1-py3-none-any.whl", hash = "sha256:acbc337b5aa8a4c2740ee8cb4c32c246479c5e7920d34aa30e316c65aa270e12"},
]
pre-commit = [
{file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"},
@@ -1513,8 +1515,8 @@ pygments = [
{file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
@@ -1608,8 +1610,8 @@ semver = [
{file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"},
]
setuptools-scm = [
- {file = "setuptools_scm-6.3.2-py3-none-any.whl", hash = "sha256:4c64444b1d49c4063ae60bfe1680f611c8b13833d556fd1d6050c0023162a119"},
- {file = "setuptools_scm-6.3.2.tar.gz", hash = "sha256:a49aa8081eeb3514eb9728fa5040f2eaa962d6c6f4ec9c32f6c1fba88f88a0f2"},
+ {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"},
+ {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
diff --git a/pyproject.toml b/pyproject.toml
index b3f200e6..5c1f0853 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,12 +16,10 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-postgrest-py = "^0.8.0"
+postgrest-py = "^0.8.1"
realtime = "^0.0.4"
-gotrue = ">=0.4,<0.6"
+gotrue = "^0.5.0"
httpx = "^0.21.3"
-requests = "^2.27.1"
-requests-toolbelt = "^0.9.1"
[tool.poetry.dev-dependencies]
pre-commit = "^2.17.0"
From e8f1cf585a32316d9db4490c25965f2642fa4b53 Mon Sep 17 00:00:00 2001
From: github-actions
Date: Sat, 22 Jan 2022 08:23:52 +0000
Subject: [PATCH 125/737] chore(release): bump version to v0.3.2
Automatically generated by python-semantic-release
---
CHANGELOG.md | 6 ++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6f5e3d71..68a7a4b7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
+## v0.3.2 (2022-01-22)
+### Fix
+* Upgrade postgrest-py for fix order filter ([`b8840cd`](https://github.com/supabase-community/supabase-py/commit/b8840cdc07cd7d53767fe2c321761558aecd5bd4))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.3.1...v0.3.2)**
+
## v0.3.1 (2022-01-22)
### Fix
* Use httpx in storage file upload ([#130](https://github.com/supabase-community/supabase-py/issues/130)) ([`086d925`](https://github.com/supabase-community/supabase-py/commit/086d92504f014079a125f5342c59d1d8bb7e795f))
diff --git a/pyproject.toml b/pyproject.toml
index 5c1f0853..7c570f9c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.3.1"
+version = "0.3.2"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 4974261f..74e0a0b4 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.3.1"
+__version__ = "0.3.2"
from supabase import client, lib
from supabase.client import Client, create_client
From 77c4997fd9bab4c6ad74f451c9cb43c8c1ef31c7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 24 Jan 2022 22:21:58 -0500
Subject: [PATCH 126/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index d9ea3fe2..e4a18a3b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -737,7 +737,7 @@ yaml = ["PyYaml (>=5.2)"]
[[package]]
name = "python-semantic-release"
-version = "7.23.0"
+version = "7.24.0"
description = "Automatic Semantic Versioning for Python projects"
category = "dev"
optional = false
@@ -1076,7 +1076,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "c34f728f7a4c94925e2e20d93878a709b014273020a1752201675b3575deb3f0"
+content-hash = "b85b3342eebef219bde16a1d4f10da465d785acc54acce743c6d2943ccb12e79"
[metadata.files]
anyio = [
@@ -1535,8 +1535,8 @@ python-gitlab = [
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
]
python-semantic-release = [
- {file = "python-semantic-release-7.23.0.tar.gz", hash = "sha256:48c33bf671dafa1257e7d955543856eb98486a3f976f586053556ae180d725da"},
- {file = "python_semantic_release-7.23.0-py3-none-any.whl", hash = "sha256:5bf7fcdb28e5e9888c9a15a1168afe53302116a6874d818580d4c58db60283ab"},
+ {file = "python-semantic-release-7.24.0.tar.gz", hash = "sha256:06221d7d2f811d451dfcfdb327c92e8ba9ba7c04b0602a73461b26a398fe543d"},
+ {file = "python_semantic_release-7.24.0-py3-none-any.whl", hash = "sha256:a7c6cba07de908cdf465982fb1d781b4fefb821db4c559d87045e1edde668f3f"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
diff --git a/pyproject.toml b/pyproject.toml
index 7c570f9c..ca928760 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,7 +29,7 @@ flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.20.3"
-python-semantic-release = "^7.23.0"
+python-semantic-release = "^7.24.0"
[tool.semantic_release]
version_variable = "supabase/__init__.py:__version__"
From 1480f2e23a95ea171ec12eb51ffd23b96fbbe48d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 30 Jan 2022 13:54:51 +0000
Subject: [PATCH 127/737] 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]
---
poetry.lock | 136 +++++++++++++++++++++++++++----------------------
pyproject.toml | 2 +-
2 files changed, 76 insertions(+), 62 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index e4a18a3b..021837e1 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -54,29 +54,25 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "black"
-version = "21.12b0"
+version = "22.1.0"
description = "The uncompromising code formatter."
category = "dev"
optional = false
python-versions = ">=3.6.2"
[package.dependencies]
-click = ">=7.1.2"
+click = ">=8.0.0"
mypy-extensions = ">=0.4.3"
-pathspec = ">=0.9.0,<1"
+pathspec = ">=0.9.0"
platformdirs = ">=2"
-tomli = ">=0.2.6,<2.0.0"
+tomli = ">=1.1.0"
typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""}
-typing-extensions = [
- {version = ">=3.10.0.0", markers = "python_version < \"3.10\""},
- {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""},
-]
+typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}
[package.extras]
colorama = ["colorama (>=0.4.3)"]
d = ["aiohttp (>=3.7.4)"]
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
-python2 = ["typed-ast (>=1.4.3)"]
uvloop = ["uvloop (>=0.15.2)"]
[[package]]
@@ -183,11 +179,11 @@ typing-extensions = ">=4.0.1,<5.0.0"
[[package]]
name = "coverage"
-version = "6.2"
+version = "6.3"
description = "Code coverage measurement for Python"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
tomli = {version = "*", optional = true, markers = "extra == \"toml\""}
@@ -1076,7 +1072,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "b85b3342eebef219bde16a1d4f10da465d785acc54acce743c6d2943ccb12e79"
+content-hash = "92ed2cb0cdba5d5738b765d454d3516e3c0746283a19d5a84c54a950c660b11f"
[metadata.files]
anyio = [
@@ -1096,8 +1092,29 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
black = [
- {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"},
- {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"},
+ {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"},
+ {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"},
+ {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"},
+ {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"},
+ {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"},
+ {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"},
+ {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"},
+ {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"},
+ {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"},
+ {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"},
+ {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"},
+ {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"},
+ {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"},
+ {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"},
+ {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"},
+ {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"},
+ {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"},
+ {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"},
+ {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"},
+ {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"},
+ {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"},
+ {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"},
+ {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"},
]
bleach = [
{file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"},
@@ -1184,53 +1201,50 @@ commitizen = [
{file = "commitizen-2.20.4.tar.gz", hash = "sha256:33fe190935412011a9e9e0a3fc80f4b874bc250461a9374b1169f2d86cb81901"},
]
coverage = [
- {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"},
- {file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"},
- {file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"},
- {file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"},
- {file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"},
- {file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"},
- {file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"},
- {file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"},
- {file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"},
- {file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"},
- {file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"},
- {file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"},
- {file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"},
- {file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"},
- {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"},
- {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"},
- {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"},
- {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"},
- {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"},
- {file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"},
- {file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"},
- {file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"},
- {file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"},
- {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"},
- {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"},
- {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"},
- {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"},
- {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"},
- {file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"},
- {file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"},
- {file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"},
- {file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"},
- {file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"},
- {file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"},
- {file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"},
- {file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"},
- {file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"},
- {file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"},
- {file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"},
- {file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"},
- {file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"},
- {file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"},
- {file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"},
- {file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"},
- {file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"},
- {file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"},
- {file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"},
+ {file = "coverage-6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e8071e7d9ba9f457fc674afc3de054450be2c9b195c470147fbbc082468d8ff7"},
+ {file = "coverage-6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86c91c511853dfda81c2cf2360502cb72783f4b7cebabef27869f00cbe1db07d"},
+ {file = "coverage-6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c4ce3b647bd1792d4394f5690d9df6dc035b00bcdbc5595099c01282a59ae01"},
+ {file = "coverage-6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a491e159294d756e7fc8462f98175e2d2225e4dbe062cca7d3e0d5a75ba6260"},
+ {file = "coverage-6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d008e0f67ac800b0ca04d7914b8501312c8c6c00ad8c7ba17754609fae1231a"},
+ {file = "coverage-6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4578728c36de2801c1deb1c6b760d31883e62e33f33c7ba8f982e609dc95167d"},
+ {file = "coverage-6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7ee317486593193e066fc5e98ac0ce712178c21529a85c07b7cb978171f25d53"},
+ {file = "coverage-6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2bc85664b06ba42d14bb74d6ddf19d8bfc520cb660561d2d9ce5786ae72f71b5"},
+ {file = "coverage-6.3-cp310-cp310-win32.whl", hash = "sha256:27a94db5dc098c25048b0aca155f5fac674f2cf1b1736c5272ba28ead2fc267e"},
+ {file = "coverage-6.3-cp310-cp310-win_amd64.whl", hash = "sha256:bde4aeabc0d1b2e52c4036c54440b1ad05beeca8113f47aceb4998bb7471e2c2"},
+ {file = "coverage-6.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:509c68c3e2015022aeda03b003dd68fa19987cdcf64e9d4edc98db41cfc45d30"},
+ {file = "coverage-6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e4ff163602c5c77e7bb4ea81ba5d3b793b4419f8acd296aae149370902cf4e92"},
+ {file = "coverage-6.3-cp311-cp311-win_amd64.whl", hash = "sha256:d1675db48490e5fa0b300f6329ecb8a9a37c29b9ab64fa9c964d34111788ca2d"},
+ {file = "coverage-6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7eed8459a2b81848cafb3280b39d7d49950d5f98e403677941c752e7e7ee47cb"},
+ {file = "coverage-6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b4285fde5286b946835a1a53bba3ad41ef74285ba9e8013e14b5ea93deaeafc"},
+ {file = "coverage-6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4748349734110fd32d46ff8897b561e6300d8989a494ad5a0a2e4f0ca974fc7"},
+ {file = "coverage-6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:823f9325283dc9565ba0aa2d240471a93ca8999861779b2b6c7aded45b58ee0f"},
+ {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fff16a30fdf57b214778eff86391301c4509e327a65b877862f7c929f10a4253"},
+ {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:da1a428bdbe71f9a8c270c7baab29e9552ac9d0e0cba5e7e9a4c9ee6465d258d"},
+ {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7d82c610a2e10372e128023c5baf9ce3d270f3029fe7274ff5bc2897c68f1318"},
+ {file = "coverage-6.3-cp37-cp37m-win32.whl", hash = "sha256:11e61c5548ecf74ea1f8b059730b049871f0e32b74f88bd0d670c20c819ad749"},
+ {file = "coverage-6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8e0c3525b1a182c8ffc9bca7e56b521e0c2b8b3e82f033c8e16d6d721f1b54d6"},
+ {file = "coverage-6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a189036c50dcd56100746139a459f0d27540fef95b09aba03e786540b8feaa5f"},
+ {file = "coverage-6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32168001f33025fd756884d56d01adebb34e6c8c0b3395ca8584cdcee9c7c9d2"},
+ {file = "coverage-6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5d79c9af3f410a2b5acad91258b4ae179ee9c83897eb9de69151b179b0227f5"},
+ {file = "coverage-6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:85c5fc9029043cf8b07f73fbb0a7ab6d3b717510c3b5642b77058ea55d7cacde"},
+ {file = "coverage-6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7596aa2f2b8fa5604129cfc9a27ad9beec0a96f18078cb424d029fdd707468d"},
+ {file = "coverage-6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ce443a3e6df90d692c38762f108fc4c88314bf477689f04de76b3f252e7a351c"},
+ {file = "coverage-6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:012157499ec4f135fc36cd2177e3d1a1840af9b236cbe80e9a5ccfc83d912a69"},
+ {file = "coverage-6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a34d313105cdd0d3644c56df2d743fe467270d6ab93b5d4a347eb9fec8924d6"},
+ {file = "coverage-6.3-cp38-cp38-win32.whl", hash = "sha256:6e78b1e25e5c5695dea012be473e442f7094d066925604be20b30713dbd47f89"},
+ {file = "coverage-6.3-cp38-cp38-win_amd64.whl", hash = "sha256:433b99f7b0613bdcdc0b00cc3d39ed6d756797e3b078d2c43f8a38288520aec6"},
+ {file = "coverage-6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ed3244b415725f08ca3bdf02ed681089fd95e9465099a21c8e2d9c5d6ca2606"},
+ {file = "coverage-6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab4fc4b866b279740e0d917402f0e9a08683e002f43fa408e9655818ed392196"},
+ {file = "coverage-6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8582e9280f8d0f38114fe95a92ae8d0790b56b099d728cc4f8a2e14b1c4a18c"},
+ {file = "coverage-6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c72bb4679283c6737f452eeb9b2a0e570acaef2197ad255fb20162adc80bea76"},
+ {file = "coverage-6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca29c352389ea27a24c79acd117abdd8a865c6eb01576b6f0990cd9a4e9c9f48"},
+ {file = "coverage-6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:152cc2624381df4e4e604e21bd8e95eb8059535f7b768c1fb8b8ae0b26f47ab0"},
+ {file = "coverage-6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:51372e24b1f7143ee2df6b45cff6a721f3abe93b1e506196f3ffa4155c2497f7"},
+ {file = "coverage-6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:72d9d186508325a456475dd05b1756f9a204c7086b07fffb227ef8cee03b1dc2"},
+ {file = "coverage-6.3-cp39-cp39-win32.whl", hash = "sha256:649df3641eb351cdfd0d5533c92fc9df507b6b2bf48a7ef8c71ab63cbc7b5c3c"},
+ {file = "coverage-6.3-cp39-cp39-win_amd64.whl", hash = "sha256:e67ccd53da5958ea1ec833a160b96357f90859c220a00150de011b787c27b98d"},
+ {file = "coverage-6.3-pp36.pp37.pp38-none-any.whl", hash = "sha256:27ac7cb84538e278e07569ceaaa6f807a029dc194b1c819a9820b9bb5dbf63ab"},
+ {file = "coverage-6.3.tar.gz", hash = "sha256:987a84ff98a309994ca77ed3cc4b92424f824278e48e4bf7d1bb79a63cfe2099"},
]
cryptography = [
{file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
diff --git a/pyproject.toml b/pyproject.toml
index ca928760..5ec31493 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -23,7 +23,7 @@ httpx = "^0.21.3"
[tool.poetry.dev-dependencies]
pre-commit = "^2.17.0"
-black = "^21.11b1"
+black = "^22.1"
pytest = "^6.2.5"
flake8 = "^4.0.1"
isort = "^5.9.3"
From a1e25e8df2d0e6e1b0dd981418f1e77769da072b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Sun, 30 Jan 2022 15:28:08 +0100
Subject: [PATCH 128/737] tests: move storage tests to its own file
---
tests/test_client.py | 60 -------------------------------------------
tests/test_storage.py | 38 +++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 60 deletions(-)
create mode 100644 tests/test_storage.py
diff --git a/tests/test_client.py b/tests/test_client.py
index 9282715f..2a3eecd0 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -56,63 +56,3 @@ def test_client_auth(supabase: Client) -> 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(supabase: Client) -> None:
- """Ensure we can select data from a table."""
- # 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 data
-
-
-def test_client_insert(supabase: Client) -> None:
- """Ensure we can select data from a table."""
- data, _ = supabase.table("countries").select("*").execute()
- # Assert we pulled real data.
- previous_length = len(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()
- # Check returned result for insert was valid.
- assert result
- data, _ = supabase.table("countries").select("*").execute()
- current_length = len(data)
- # Ensure we've added a row remotely.
- assert current_length == previous_length + 1
-
-
-@pytest.mark.skip(reason="missing permissions on test instance")
-def test_client_upload_file(supabase: Client) -> None:
- """Ensure we can upload files to a bucket"""
-
- TEST_BUCKET_NAME = "atestbucket"
-
- storage = supabase.storage()
- storage_file = storage.StorageFileAPI(TEST_BUCKET_NAME)
-
- filename = "test.jpeg"
- filepath = f"tests/{filename}"
- mimetype = "image/jpeg"
- options = {"contentType": mimetype}
-
- storage_file.upload(filename, filepath, options)
- files = storage_file.list()
- assert files
-
- image_info = None
- for item in files:
- if item.get("name") == filename:
- image_info = item
- break
-
- assert image_info is not None
- assert image_info.get("metadata", {}).get("mimetype") == mimetype
-
- storage_file.remove([filename])
diff --git a/tests/test_storage.py b/tests/test_storage.py
new file mode 100644
index 00000000..47bff4b4
--- /dev/null
+++ b/tests/test_storage.py
@@ -0,0 +1,38 @@
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+import pytest
+
+if TYPE_CHECKING:
+ from supabase import Client
+
+
+@pytest.mark.skip(reason="missing permissions on test instance")
+def test_client_upload_file(supabase: Client) -> None:
+ """Ensure we can upload files to a bucket"""
+
+ TEST_BUCKET_NAME = "atestbucket"
+
+ storage = supabase.storage()
+ storage_file = storage.StorageFileAPI(TEST_BUCKET_NAME)
+
+ filename = "test.jpeg"
+ filepath = f"tests/{filename}"
+ mimetype = "image/jpeg"
+ options = {"contentType": mimetype}
+
+ storage_file.upload(filename, filepath, options)
+ files = storage_file.list()
+ assert files
+
+ image_info = None
+ for item in files:
+ if item.get("name") == filename:
+ image_info = item
+ break
+
+ assert image_info is not None
+ assert image_info.get("metadata", {}).get("mimetype") == mimetype
+
+ storage_file.remove([filename])
From 203b65965f63b3be8358980e590b472b1e565a0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Sun, 30 Jan 2022 16:47:00 +0100
Subject: [PATCH 129/737] tests: move credentials to .env
---
Makefile | 11 +++++------
scripts/export_tests_credentials.sh | 12 ++++++++++++
tests/tests.env | 2 ++
3 files changed, 19 insertions(+), 6 deletions(-)
create mode 100644 scripts/export_tests_credentials.sh
create mode 100644 tests/tests.env
diff --git a/Makefile b/Makefile
index 0fd32734..cfb4740d 100644
--- a/Makefile
+++ b/Makefile
@@ -5,14 +5,13 @@ 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:
- export SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8" &&\
- export SUPABASE_TEST_URL="https://ibrydvrsxoapzgtnhpso.supabase.co" &&\
+ . scripts/export_tests_credentials.sh
poetry run pytest --cov=./ --cov-report=xml --cov-report=html -vv
+
+tests: install tests_only tests_pre_commit
+
+run_tests: tests
\ No newline at end of file
diff --git a/scripts/export_tests_credentials.sh b/scripts/export_tests_credentials.sh
new file mode 100644
index 00000000..2f6273be
--- /dev/null
+++ b/scripts/export_tests_credentials.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+unamestr=$(uname)
+if [ "$unamestr" = 'Linux' ]; then
+
+ export $(grep -v '^#' tests/tests.env | xargs -d '\n')
+
+elif [ "$unamestr" = 'FreeBSD' ]; then
+
+ export $(grep -v '^#' tests/tests.env | xargs -0)
+
+fi
diff --git a/tests/tests.env b/tests/tests.env
new file mode 100644
index 00000000..8a735746
--- /dev/null
+++ b/tests/tests.env
@@ -0,0 +1,2 @@
+SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8"
+SUPABASE_TEST_URL="https://ibrydvrsxoapzgtnhpso.supabase.co"
\ No newline at end of file
From 0860765037411b36b334fe95e4e89e55e8499d3a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Sun, 30 Jan 2022 18:06:37 +0100
Subject: [PATCH 130/737] tests: make tests import credentials automatically
---
Makefile | 1 -
poetry.lock | 17 ++++++++++++++++-
pyproject.toml | 1 +
scripts/export_tests_credentials.sh | 12 ------------
tests/conftest.py | 5 +++++
5 files changed, 22 insertions(+), 14 deletions(-)
delete mode 100644 scripts/export_tests_credentials.sh
diff --git a/Makefile b/Makefile
index cfb4740d..7573768f 100644
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,6 @@ tests_pre_commit:
poetry run pre-commit run --all-files
tests_only:
- . scripts/export_tests_credentials.sh
poetry run pytest --cov=./ --cov-report=xml --cov-report=html -vv
tests: install tests_only tests_pre_commit
diff --git a/poetry.lock b/poetry.lock
index 021837e1..5c077157 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -715,6 +715,17 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
[package.dependencies]
six = ">=1.5"
+[[package]]
+name = "python-dotenv"
+version = "0.19.2"
+description = "Read key-value pairs from a .env file and set them as environment variables"
+category = "dev"
+optional = false
+python-versions = ">=3.5"
+
+[package.extras]
+cli = ["click (>=5.0)"]
+
[[package]]
name = "python-gitlab"
version = "2.10.1"
@@ -1072,7 +1083,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "92ed2cb0cdba5d5738b765d454d3516e3c0746283a19d5a84c54a950c660b11f"
+content-hash = "83fac6208969427607985d042f3b5208e75fe7a42cf08843ce26768120cc7819"
[metadata.files]
anyio = [
@@ -1544,6 +1555,10 @@ python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
+python-dotenv = [
+ {file = "python-dotenv-0.19.2.tar.gz", hash = "sha256:a5de49a31e953b45ff2d2fd434bbc2670e8db5273606c1e737cc6b93eff3655f"},
+ {file = "python_dotenv-0.19.2-py2.py3-none-any.whl", hash = "sha256:32b2bdc1873fd3a3c346da1c6db83d0053c3c62f28f1f38516070c4c8971b1d3"},
+]
python-gitlab = [
{file = "python-gitlab-2.10.1.tar.gz", hash = "sha256:7afa7d7c062fa62c173190452265a30feefb844428efc58ea5244f3b9fc0d40f"},
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
diff --git a/pyproject.toml b/pyproject.toml
index 5ec31493..645aec53 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -30,6 +30,7 @@ isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.20.3"
python-semantic-release = "^7.24.0"
+python-dotenv = "^0.19.2"
[tool.semantic_release]
version_variable = "supabase/__init__.py:__version__"
diff --git a/scripts/export_tests_credentials.sh b/scripts/export_tests_credentials.sh
deleted file mode 100644
index 2f6273be..00000000
--- a/scripts/export_tests_credentials.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-unamestr=$(uname)
-if [ "$unamestr" = 'Linux' ]; then
-
- export $(grep -v '^#' tests/tests.env | xargs -d '\n')
-
-elif [ "$unamestr" = 'FreeBSD' ]; then
-
- export $(grep -v '^#' tests/tests.env | xargs -0)
-
-fi
diff --git a/tests/conftest.py b/tests/conftest.py
index 568a211b..86de164a 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -2,11 +2,16 @@
import os
+from dotenv import load_dotenv
import pytest
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")
From a157f78491b9a6a7c69643981e173bdf44e48b76 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Sun, 30 Jan 2022 18:06:52 +0100
Subject: [PATCH 131/737] tests: fix storage test
---
tests/test_image.svg | 15 +++++++++++++++
tests/test_storage.py | 14 ++++++--------
2 files changed, 21 insertions(+), 8 deletions(-)
create mode 100644 tests/test_image.svg
diff --git a/tests/test_image.svg b/tests/test_image.svg
new file mode 100644
index 00000000..ad802ac1
--- /dev/null
+++ b/tests/test_image.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/test_storage.py b/tests/test_storage.py
index 47bff4b4..357d4df1 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -2,13 +2,11 @@
from typing import TYPE_CHECKING
-import pytest
-
if TYPE_CHECKING:
from supabase import Client
+ from typing import List, Dict, Any
-@pytest.mark.skip(reason="missing permissions on test instance")
def test_client_upload_file(supabase: Client) -> None:
"""Ensure we can upload files to a bucket"""
@@ -17,14 +15,13 @@ def test_client_upload_file(supabase: Client) -> None:
storage = supabase.storage()
storage_file = storage.StorageFileAPI(TEST_BUCKET_NAME)
- filename = "test.jpeg"
+ filename = "test_image.svg"
filepath = f"tests/{filename}"
- mimetype = "image/jpeg"
- options = {"contentType": mimetype}
+ mimetype = "image/svg+xml"
+ options = {"content-type": mimetype}
storage_file.upload(filename, filepath, options)
- files = storage_file.list()
- assert files
+ files: List[Dict[str, Any]] = storage_file.list()
image_info = None
for item in files:
@@ -32,6 +29,7 @@ def test_client_upload_file(supabase: Client) -> None:
image_info = item
break
+ assert files
assert image_info is not None
assert image_info.get("metadata", {}).get("mimetype") == mimetype
From 0a7da42bbfe8b5c33f45621975bc2abd93866749 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Sun, 30 Jan 2022 18:07:28 +0100
Subject: [PATCH 132/737] tests: remove subclient tests
---
tests/test_client.py | 43 +------------------------------------------
1 file changed, 1 insertion(+), 42 deletions(-)
diff --git a/tests/test_client.py b/tests/test_client.py
index 2a3eecd0..891a1832 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -1,27 +1,8 @@
from __future__ import annotations
-import random
-import string
-from typing import TYPE_CHECKING, Any, Union
+from typing import Any
import pytest
-from gotrue import Session, User
-
-if TYPE_CHECKING:
- from supabase import Client
-
-
-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: Union[Session, User, str, None]) -> None:
- """Raise assertion error if user is not logged in correctly."""
- assert data is not None
- assert isinstance(data, Session)
- assert data.user is not None
- assert data.user.aud == "authenticated"
@pytest.mark.xfail(
@@ -34,25 +15,3 @@ def test_incorrect_values_dont_instanciate_client(url: Any, key: Any) -> None:
from supabase import Client, create_client
_: Client = create_client(url, key)
-
-
-@pytest.mark.skip(reason="TO FIX: Session does not terminate with test included.")
-def test_client_auth(supabase: Client) -> None:
- """Ensure we can create an auth user, and login with it."""
- # Create a random user login email and password.
- random_email = f"{_random_string(10)}@supamail.com"
- random_password = _random_string(20)
- # Sign up (and sign in).
- user = supabase.auth.sign_up(
- email=random_email,
- password=random_password,
- phone=None,
- )
- _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)
From 9a7d1ec821f30f5646de5574e28e67d75fac7acf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Sun, 30 Jan 2022 18:18:10 +0100
Subject: [PATCH 133/737] chore: apply pre-commit hooks
---
Makefile | 2 +-
tests/conftest.py | 4 ++--
tests/test_storage.py | 3 ++-
tests/tests.env | 2 +-
4 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/Makefile b/Makefile
index 7573768f..3b7385b4 100644
--- a/Makefile
+++ b/Makefile
@@ -13,4 +13,4 @@ tests_only:
tests: install tests_only tests_pre_commit
-run_tests: tests
\ No newline at end of file
+run_tests: tests
diff --git a/tests/conftest.py b/tests/conftest.py
index 86de164a..0f616ade 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -2,14 +2,14 @@
import os
-from dotenv import load_dotenv
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')
+ load_dotenv(dotenv_path="tests/tests.env")
@pytest.fixture(scope="session")
diff --git a/tests/test_storage.py b/tests/test_storage.py
index 357d4df1..3f773396 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -3,8 +3,9 @@
from typing import TYPE_CHECKING
if TYPE_CHECKING:
+ from typing import Any, Dict, List
+
from supabase import Client
- from typing import List, Dict, Any
def test_client_upload_file(supabase: Client) -> None:
diff --git a/tests/tests.env b/tests/tests.env
index 8a735746..6a02ab7f 100644
--- a/tests/tests.env
+++ b/tests/tests.env
@@ -1,2 +1,2 @@
SUPABASE_TEST_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8"
-SUPABASE_TEST_URL="https://ibrydvrsxoapzgtnhpso.supabase.co"
\ No newline at end of file
+SUPABASE_TEST_URL="https://ibrydvrsxoapzgtnhpso.supabase.co"
From bf615cfecd417932752f0884e86d2998ed8c2508 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Sun, 30 Jan 2022 19:42:23 +0100
Subject: [PATCH 134/737] tests: enhance dx in storage tests
---
tests/test_storage.py | 65 +++++++++++++++++++++++++++++++++----------
1 file changed, 50 insertions(+), 15 deletions(-)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index 3f773396..1f845163 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -1,6 +1,9 @@
from __future__ import annotations
from typing import TYPE_CHECKING
+from uuid import uuid4
+
+import pytest
if TYPE_CHECKING:
from typing import Any, Dict, List
@@ -8,30 +11,62 @@
from supabase import Client
-def test_client_upload_file(supabase: Client) -> None:
- """Ensure we can upload files to a bucket"""
+@pytest.fixture(scope="module")
+def bucket(supabase: Client) -> str:
+ """Creates a test bucket and yields its name, deleting the bucket when ended"""
+ bucket_id = f"pytest-{uuid4().hex[:8]}"
+ storage_client = supabase.storage()
+ storage_client.create_bucket(id=bucket_id)
- TEST_BUCKET_NAME = "atestbucket"
+ yield bucket_id
- storage = supabase.storage()
- storage_file = storage.StorageFileAPI(TEST_BUCKET_NAME)
+ storage_client.empty_bucket(bucket_id)
+ storage_client.delete_bucket(bucket_id)
+
+
+@pytest.fixture(scope="module", autouse=True)
+def delete_left_buckets(request, supabase: Client):
+ """Ensures no test buckets are left"""
+
+ def finalizer(supabase: Client = supabase):
+ storage_client = supabase.storage()
+ buckets_list = storage_client.list_buckets()
+ if not buckets_list:
+ return
+ test_buckets = [
+ bucket.id for bucket in buckets_list if bucket.id.startswith("pytest-")
+ ]
+ for bucket_id in test_buckets:
+ storage_client.empty_bucket(bucket_id)
+ storage_client.delete_bucket(bucket_id)
+
+ request.addfinalizer(finalizer)
- filename = "test_image.svg"
- filepath = f"tests/{filename}"
- mimetype = "image/svg+xml"
- options = {"content-type": mimetype}
- storage_file.upload(filename, filepath, options)
- files: List[Dict[str, Any]] = storage_file.list()
+@pytest.fixture
+def folder() -> str:
+ return uuid4().hex[:8]
+
+def test_client_upload_file(supabase: Client, bucket: str, folder: str) -> None:
+ """Ensure we can upload files to a bucket"""
+ storage = supabase.storage()
+ storage_file = storage.StorageFileAPI(bucket)
+
+ file_name = "test_image.svg"
+ file_path = f"tests/{file_name}"
+ bucket_file_path = f"{folder}/{file_name}"
+ mime_type = "image/svg+xml"
+ options = {"content-type": mime_type}
+
+ storage_file.upload(bucket_file_path, file_path, options)
+ files: List[Dict[str, Any]] = storage_file.list(folder)
image_info = None
for item in files:
- if item.get("name") == filename:
+ if item.get("name") == file_name:
image_info = item
break
assert files
assert image_info is not None
- assert image_info.get("metadata", {}).get("mimetype") == mimetype
-
- storage_file.remove([filename])
+ assert image_info.get("metadata", {}).get("mimetype") == mime_type
From f43ef6c587e48c0637828761907f369e6ee446aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Sun, 30 Jan 2022 19:42:43 +0100
Subject: [PATCH 135/737] chore: no need for max-parallel=1 anymore
---
.github/workflows/ci.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a8252ece..161e00a6 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -6,7 +6,6 @@ jobs:
test:
name: Test / OS ${{ matrix.os }} / Python ${{ matrix.python-version }}
strategy:
- max-parallel: 1
matrix:
os: [ubuntu-latest]
python-version: [3.7, 3.8, 3.9, '3.10']
From a59fefd55edcb2a915c208c88af6b0a144fc6433 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Sun, 30 Jan 2022 13:57:10 -0500
Subject: [PATCH 136/737] chore: reduce code amount
---
tests/test_storage.py | 19 +++++--------------
1 file changed, 5 insertions(+), 14 deletions(-)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index 1f845163..59dd89bc 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -30,15 +30,10 @@ def delete_left_buckets(request, supabase: Client):
def finalizer(supabase: Client = supabase):
storage_client = supabase.storage()
- buckets_list = storage_client.list_buckets()
- if not buckets_list:
- return
- test_buckets = [
- bucket.id for bucket in buckets_list if bucket.id.startswith("pytest-")
- ]
- for bucket_id in test_buckets:
- storage_client.empty_bucket(bucket_id)
- storage_client.delete_bucket(bucket_id)
+ for bucket in storage_client.list_buckets():
+ if bucket.id.startswith("pytest-"):
+ storage_client.empty_bucket(bucket.id)
+ storage_client.delete_bucket(bucket.id)
request.addfinalizer(finalizer)
@@ -61,11 +56,7 @@ def test_client_upload_file(supabase: Client, bucket: str, folder: str) -> None:
storage_file.upload(bucket_file_path, file_path, options)
files: List[Dict[str, Any]] = storage_file.list(folder)
- image_info = None
- for item in files:
- if item.get("name") == file_name:
- image_info = item
- break
+ image_info = next((f for f in files if f.get("name") == file_name), None)
assert files
assert image_info is not None
From 7db2e08358e6d75a15e912c7f76def85d2b84ab5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 31 Jan 2022 01:39:18 +0100
Subject: [PATCH 137/737] tests: Enhance storage tests
---
tests/test_image.svg | 15 ---------
tests/test_storage.py | 75 ++++++++++++++++++++++++++++++-------------
2 files changed, 53 insertions(+), 37 deletions(-)
delete mode 100644 tests/test_image.svg
diff --git a/tests/test_image.svg b/tests/test_image.svg
deleted file mode 100644
index ad802ac1..00000000
--- a/tests/test_image.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/test_storage.py b/tests/test_storage.py
index 59dd89bc..46ce772b 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -1,4 +1,5 @@
from __future__ import annotations
+from pathlib import Path
from typing import TYPE_CHECKING
from uuid import uuid4
@@ -11,19 +12,6 @@
from supabase import Client
-@pytest.fixture(scope="module")
-def bucket(supabase: Client) -> str:
- """Creates a test bucket and yields its name, deleting the bucket when ended"""
- bucket_id = f"pytest-{uuid4().hex[:8]}"
- storage_client = supabase.storage()
- storage_client.create_bucket(id=bucket_id)
-
- yield bucket_id
-
- storage_client.empty_bucket(bucket_id)
- storage_client.delete_bucket(bucket_id)
-
-
@pytest.fixture(scope="module", autouse=True)
def delete_left_buckets(request, supabase: Client):
"""Ensures no test buckets are left"""
@@ -38,24 +26,67 @@ def finalizer(supabase: Client = supabase):
request.addfinalizer(finalizer)
-@pytest.fixture
-def folder() -> str:
- return uuid4().hex[:8]
+@pytest.fixture(scope="module")
+def bucket(supabase: Client) -> str:
+ """Creates a test bucket which will be used in the whole storage tests run and deleted at the end"""
+ bucket_id = f"pytest-{uuid4().hex[:8]}"
+ storage_client = supabase.storage()
+ storage_client.create_bucket(id=bucket_id)
+ yield bucket_id
-def test_client_upload_file(supabase: Client, bucket: str, folder: str) -> None:
+ storage_client.empty_bucket(bucket_id)
+ storage_client.delete_bucket(bucket_id)
+
+
+@pytest.fixture
+def file(tmp_path: Path) -> Dict[str, str]:
+ """Creates a different test file (same content but different path) for each test"""
+ file_name = "test_image.svg"
+ file_content = (
+ b' '
+ b' '
+ b' '
+ b' '
+ b' '
+ )
+ bucket_folder = uuid4().hex[:8]
+ bucket_path = f"{bucket_folder}/{file_name}"
+ file_path = tmp_path / file_name
+ with open(file_path, "wb") as f:
+ f.write(file_content)
+
+ return {
+ "name": file_name,
+ "local_path": str(file_path),
+ "bucket_folder": bucket_folder,
+ "bucket_path": bucket_path,
+ "mime_type": "image/svg+xml",
+ }
+
+
+def test_client_upload_file(
+ supabase: Client, bucket: str, file: Dict[str, str]
+) -> None:
"""Ensure we can upload files to a bucket"""
storage = supabase.storage()
storage_file = storage.StorageFileAPI(bucket)
- file_name = "test_image.svg"
- file_path = f"tests/{file_name}"
- bucket_file_path = f"{folder}/{file_name}"
- mime_type = "image/svg+xml"
+ file_name = file["name"]
+ file_path = file["local_path"]
+ mime_type = file["mime_type"]
+ bucket_file_path = file["bucket_path"]
+ bucket_folder = file["bucket_folder"]
options = {"content-type": mime_type}
storage_file.upload(bucket_file_path, file_path, options)
- files: List[Dict[str, Any]] = storage_file.list(folder)
+ files: List[Dict[str, Any]] = storage_file.list(bucket_folder)
image_info = next((f for f in files if f.get("name") == file_name), None)
assert files
From 7c5fa1d4c6b7e78497f8878726a4ce6c2eca2973 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 31 Jan 2022 01:41:35 +0100
Subject: [PATCH 138/737] chore: Add todo to test methods which upload_file
test depends on
---
tests/test_storage.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index 46ce772b..eb4863fa 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -71,6 +71,9 @@ def file(tmp_path: Path) -> Dict[str, str]:
}
+# TODO: Test create_bucket, delete_bucket, empty_bucket, list_buckets, fileAPI.list before upload test
+
+
def test_client_upload_file(
supabase: Client, bucket: str, file: Dict[str, str]
) -> None:
From 1453fcdda8e331d3488182354b950966e66d5370 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 31 Jan 2022 01:49:29 +0100
Subject: [PATCH 139/737] chore: export StorageFileAPI for typing
---
supabase/__init__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 74e0a0b4..dc404cd6 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -4,4 +4,4 @@
from supabase.client import Client, create_client
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.realtime_client import SupabaseRealtimeClient
-from supabase.lib.storage_client import SupabaseStorageClient
+from supabase.lib.storage_client import SupabaseStorageClient, StorageFileAPI
From bc48965509fb187df980b0c910634027e628304a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 31 Jan 2022 01:54:59 +0100
Subject: [PATCH 140/737] tests: Enhance dx in storage tests
---
tests/test_storage.py | 32 +++++++++++++++++++++-----------
1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index eb4863fa..ffb3a183 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -9,15 +9,20 @@
if TYPE_CHECKING:
from typing import Any, Dict, List
- from supabase import Client
+ from supabase import Client, SupabaseStorageClient, StorageFileAPI
+
+
+@pytest.fixture(scope="module")
+def storage_client(supabase: Client) -> SupabaseStorageClient:
+ """Creates the storage client for the whole storage tests run"""
+ return supabase.storage()
@pytest.fixture(scope="module", autouse=True)
-def delete_left_buckets(request, supabase: Client):
+def delete_left_buckets(request, storage_client: SupabaseStorageClient):
"""Ensures no test buckets are left"""
- def finalizer(supabase: Client = supabase):
- storage_client = supabase.storage()
+ def finalizer():
for bucket in storage_client.list_buckets():
if bucket.id.startswith("pytest-"):
storage_client.empty_bucket(bucket.id)
@@ -27,10 +32,9 @@ def finalizer(supabase: Client = supabase):
@pytest.fixture(scope="module")
-def bucket(supabase: Client) -> str:
+def bucket(storage_client: SupabaseStorageClient) -> str:
"""Creates a test bucket which will be used in the whole storage tests run and deleted at the end"""
bucket_id = f"pytest-{uuid4().hex[:8]}"
- storage_client = supabase.storage()
storage_client.create_bucket(id=bucket_id)
yield bucket_id
@@ -39,6 +43,14 @@ def bucket(supabase: Client) -> str:
storage_client.delete_bucket(bucket_id)
+@pytest.fixture(scope="module")
+def storage_file_client(
+ storage_client: SupabaseStorageClient, bucket: str
+) -> StorageFileAPI:
+ """Creates the storage file client for the whole storage tests run"""
+ yield storage_client.StorageFileAPI(bucket)
+
+
@pytest.fixture
def file(tmp_path: Path) -> Dict[str, str]:
"""Creates a different test file (same content but different path) for each test"""
@@ -75,11 +87,9 @@ def file(tmp_path: Path) -> Dict[str, str]:
def test_client_upload_file(
- supabase: Client, bucket: str, file: Dict[str, str]
+ storage_file_client: StorageFileAPI, file: Dict[str, str]
) -> None:
"""Ensure we can upload files to a bucket"""
- storage = supabase.storage()
- storage_file = storage.StorageFileAPI(bucket)
file_name = file["name"]
file_path = file["local_path"]
@@ -88,8 +98,8 @@ def test_client_upload_file(
bucket_folder = file["bucket_folder"]
options = {"content-type": mime_type}
- storage_file.upload(bucket_file_path, file_path, options)
- files: List[Dict[str, Any]] = storage_file.list(bucket_folder)
+ storage_file_client.upload(bucket_file_path, file_path, options)
+ files: List[Dict[str, Any]] = storage_file_client.list(bucket_folder)
image_info = next((f for f in files if f.get("name") == file_name), None)
assert files
From 566a35587983361f2bb2bc5c58f3b82b02d6ed0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 31 Jan 2022 01:58:48 +0100
Subject: [PATCH 141/737] fix: sleep before listing buckets
---
tests/test_storage.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index ffb3a183..4f94d956 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -1,5 +1,6 @@
from __future__ import annotations
from pathlib import Path
+from time import sleep
from typing import TYPE_CHECKING
from uuid import uuid4
@@ -23,6 +24,7 @@ def delete_left_buckets(request, storage_client: SupabaseStorageClient):
"""Ensures no test buckets are left"""
def finalizer():
+ sleep(5)
for bucket in storage_client.list_buckets():
if bucket.id.startswith("pytest-"):
storage_client.empty_bucket(bucket.id)
From 127ef98d56eceef992b1ed9cfdc69b9701f3b92a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 31 Jan 2022 02:03:35 +0100
Subject: [PATCH 142/737] fix: increase sleep before listing
---
tests/test_storage.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index 4f94d956..1fe9da6e 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -24,7 +24,7 @@ def delete_left_buckets(request, storage_client: SupabaseStorageClient):
"""Ensures no test buckets are left"""
def finalizer():
- sleep(5)
+ sleep(15)
for bucket in storage_client.list_buckets():
if bucket.id.startswith("pytest-"):
storage_client.empty_bucket(bucket.id)
From 05542390751cd4d225238aba43c7d9e0a0ec9f59 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 31 Jan 2022 02:06:54 +0100
Subject: [PATCH 143/737] chore: Add comment to justify sleep in finalizer
---
tests/test_storage.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index 1fe9da6e..ba105d4a 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -24,6 +24,7 @@ def delete_left_buckets(request, storage_client: SupabaseStorageClient):
"""Ensures no test buckets are left"""
def finalizer():
+ # Sleep 15 seconds in order to let buckets be deleted before the double-check
sleep(15)
for bucket in storage_client.list_buckets():
if bucket.id.startswith("pytest-"):
From a3f159ba5056f9e1b5a24288f404713c3f1daee6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Mon, 31 Jan 2022 02:09:39 +0100
Subject: [PATCH 144/737] chore: Apply pre-commit hooks
---
supabase/__init__.py | 2 +-
tests/test_storage.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/supabase/__init__.py b/supabase/__init__.py
index dc404cd6..1f7d945d 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -4,4 +4,4 @@
from supabase.client import Client, create_client
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.realtime_client import SupabaseRealtimeClient
-from supabase.lib.storage_client import SupabaseStorageClient, StorageFileAPI
+from supabase.lib.storage_client import StorageFileAPI, SupabaseStorageClient
diff --git a/tests/test_storage.py b/tests/test_storage.py
index ba105d4a..7907667a 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -1,7 +1,7 @@
from __future__ import annotations
+
from pathlib import Path
from time import sleep
-
from typing import TYPE_CHECKING
from uuid import uuid4
@@ -10,7 +10,7 @@
if TYPE_CHECKING:
from typing import Any, Dict, List
- from supabase import Client, SupabaseStorageClient, StorageFileAPI
+ from supabase import Client, StorageFileAPI, SupabaseStorageClient
@pytest.fixture(scope="module")
From 6c96f16af27610e9dc63c9999462d3f410f09278 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Thu, 3 Feb 2022 10:25:12 +0100
Subject: [PATCH 145/737] chore: create uuid fixture and doc it well
---
tests/test_storage.py | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index 7907667a..c343d596 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -34,10 +34,17 @@ def finalizer():
request.addfinalizer(finalizer)
+@pytest.fixture
+def uuid() -> str:
+ # Get the first 8 digits part to make it shorter
+ uuid = uuid4().hex[:8]
+ return f"pytest-{uuid}"
+
+
@pytest.fixture(scope="module")
-def bucket(storage_client: SupabaseStorageClient) -> str:
+def bucket(storage_client: SupabaseStorageClient, uuid: str) -> str:
"""Creates a test bucket which will be used in the whole storage tests run and deleted at the end"""
- bucket_id = f"pytest-{uuid4().hex[:8]}"
+ bucket_id = uuid
storage_client.create_bucket(id=bucket_id)
yield bucket_id
@@ -55,7 +62,7 @@ def storage_file_client(
@pytest.fixture
-def file(tmp_path: Path) -> Dict[str, str]:
+def file(tmp_path: Path, uuid: str) -> Dict[str, str]:
"""Creates a different test file (same content but different path) for each test"""
file_name = "test_image.svg"
file_content = (
@@ -71,7 +78,7 @@ def file(tmp_path: Path) -> Dict[str, str]:
b' '
)
- bucket_folder = uuid4().hex[:8]
+ bucket_folder = uuid
bucket_path = f"{bucket_folder}/{file_name}"
file_path = tmp_path / file_name
with open(file_path, "wb") as f:
From ac9e9c4662ebbfe3af3610aba7cd7606f52b2af1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Thu, 3 Feb 2022 10:43:10 +0100
Subject: [PATCH 146/737] chore: replace builtin type annotations by typing
types
---
supabase/lib/storage/storage_bucket_api.py | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
index ae6382c4..c9e381b5 100644
--- a/supabase/lib/storage/storage_bucket_api.py
+++ b/supabase/lib/storage/storage_bucket_api.py
@@ -48,7 +48,7 @@ class StorageBucketAPI:
"""This class abstracts access to the endpoint to the Get, List, Empty, and Delete operations on a bucket"""
def __init__(
- self, url: str, headers: dict[str, str], is_async: bool = False
+ self, url: str, headers: Dict[str, str], is_async: bool = False
) -> None:
self.url = url
self.headers = headers
@@ -64,7 +64,7 @@ def _request(
self,
method: _RequestMethod,
url: str,
- json: Optional[dict[Any, Any]] = None,
+ json: Optional[Dict[Any, Any]] = None,
response_class: Optional[Type] = None,
) -> Any:
if self._is_async:
@@ -76,7 +76,7 @@ def _sync_request(
self,
method: _RequestMethod,
url: str,
- json: Optional[dict[Any, Any]] = None,
+ json: Optional[Dict[Any, Any]] = None,
response_class: Optional[Type] = None,
) -> ResponseType:
if isinstance(self._client, AsyncClient): # only to appease the type checker
@@ -102,7 +102,7 @@ async def _async_request(
self,
method: _RequestMethod,
url: str,
- json: Optional[dict[Any, Any]] = None,
+ json: Optional[Dict[Any, Any]] = None,
response_class: Optional[Type] = None,
) -> ResponseType:
if isinstance(self._client, Client): # only to appease the type checker
@@ -124,7 +124,7 @@ async def _async_request(
else:
return response_class(**response_data)
- def list_buckets(self) -> Union[list[Bucket], Awaitable[list[Bucket]], None]:
+ def list_buckets(self) -> Union[List[Bucket], Awaitable[List[Bucket]], None]:
"""Retrieves the details of all storage buckets within an existing product."""
return self._request("GET", f"{self.url}/bucket", response_class=Bucket)
@@ -140,7 +140,7 @@ def get_bucket(self, id: str) -> Union[Bucket, Awaitable[Bucket], None]:
def create_bucket(
self, id: str, name: str = None, public: bool = False
- ) -> Union[dict[str, str], Awaitable[dict[str, str]]]:
+ ) -> Union[Dict[str, str], Awaitable[Dict[str, str]]]:
"""Creates a new storage bucket.
Parameters
@@ -158,7 +158,7 @@ def create_bucket(
json={"id": id, "name": name or id, "public": public},
)
- def empty_bucket(self, id: str) -> Union[dict[str, str], Awaitable[dict[str, str]]]:
+ def empty_bucket(self, id: str) -> Union[Dict[str, str], Awaitable[Dict[str, str]]]:
"""Removes all objects inside a single bucket.
Parameters
@@ -170,7 +170,7 @@ def empty_bucket(self, id: str) -> Union[dict[str, str], Awaitable[dict[str, str
def delete_bucket(
self, id: str
- ) -> Union[dict[str, str], Awaitable[dict[str, str]]]:
+ ) -> Union[Dict[str, str], Awaitable[Dict[str, str]]]:
"""Deletes an existing bucket. Note that you cannot delete buckets with existing objects inside. You must first
`empty()` the bucket.
From 118862e45b59c1c865d0bdb5d147d0c300068b84 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Thu, 3 Feb 2022 11:12:58 +0100
Subject: [PATCH 147/737] tests: make uuid fixture a factory
---
tests/test_storage.py | 44 +++++++++++++++++++++++++++----------------
1 file changed, 28 insertions(+), 16 deletions(-)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index c343d596..c8a02654 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -1,6 +1,5 @@
from __future__ import annotations
-from pathlib import Path
from time import sleep
from typing import TYPE_CHECKING
from uuid import uuid4
@@ -8,11 +7,25 @@
import pytest
if TYPE_CHECKING:
- from typing import Any, Dict, List
+ from pathlib import Path
+ from typing import Any, Dict, List, Callable
from supabase import Client, StorageFileAPI, SupabaseStorageClient
+UUID_PREFIX = "pytest-"
+
+
+@pytest.fixture(scope="module")
+def uuid_factory() -> Callable[[], str]:
+ def method() -> str:
+ """Generate a UUID"""
+ uuid = uuid4().hex[:8] # Get the first 8 digits part to make it shorter
+ return f"{UUID_PREFIX}{uuid}"
+
+ return method
+
+
@pytest.fixture(scope="module")
def storage_client(supabase: Client) -> SupabaseStorageClient:
"""Creates the storage client for the whole storage tests run"""
@@ -20,31 +33,30 @@ def storage_client(supabase: Client) -> SupabaseStorageClient:
@pytest.fixture(scope="module", autouse=True)
-def delete_left_buckets(request, storage_client: SupabaseStorageClient):
+def delete_left_buckets(
+ request: pytest.FixtureRequest, storage_client: SupabaseStorageClient
+):
"""Ensures no test buckets are left"""
def finalizer():
# Sleep 15 seconds in order to let buckets be deleted before the double-check
sleep(15)
- for bucket in storage_client.list_buckets():
- if bucket.id.startswith("pytest-"):
+ buckets_list = storage_client.list_buckets()
+ if not buckets_list:
+ return
+
+ for bucket in buckets_list:
+ if bucket.id.startswith(UUID_PREFIX):
storage_client.empty_bucket(bucket.id)
storage_client.delete_bucket(bucket.id)
request.addfinalizer(finalizer)
-@pytest.fixture
-def uuid() -> str:
- # Get the first 8 digits part to make it shorter
- uuid = uuid4().hex[:8]
- return f"pytest-{uuid}"
-
-
@pytest.fixture(scope="module")
-def bucket(storage_client: SupabaseStorageClient, uuid: str) -> str:
+def bucket(storage_client: SupabaseStorageClient, uuid_factory: Callable[[], str]) -> str:
"""Creates a test bucket which will be used in the whole storage tests run and deleted at the end"""
- bucket_id = uuid
+ bucket_id = uuid_factory()
storage_client.create_bucket(id=bucket_id)
yield bucket_id
@@ -62,7 +74,7 @@ def storage_file_client(
@pytest.fixture
-def file(tmp_path: Path, uuid: str) -> Dict[str, str]:
+def file(tmp_path: Path, uuid_factory: Callable[[], str]) -> Dict[str, str]:
"""Creates a different test file (same content but different path) for each test"""
file_name = "test_image.svg"
file_content = (
@@ -78,7 +90,7 @@ def file(tmp_path: Path, uuid: str) -> Dict[str, str]:
b' '
)
- bucket_folder = uuid
+ bucket_folder = uuid_factory()
bucket_path = f"{bucket_folder}/{file_name}"
file_path = tmp_path / file_name
with open(file_path, "wb") as f:
From ea00e589c496095417105b044a8ddadd0a8d023c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Thu, 3 Feb 2022 11:20:05 +0100
Subject: [PATCH 148/737] chore: apply hooks formatting
---
tests/test_storage.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index c8a02654..d91cd89c 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -8,7 +8,7 @@
if TYPE_CHECKING:
from pathlib import Path
- from typing import Any, Dict, List, Callable
+ from typing import Any, Callable, Dict, List
from supabase import Client, StorageFileAPI, SupabaseStorageClient
@@ -54,7 +54,9 @@ def finalizer():
@pytest.fixture(scope="module")
-def bucket(storage_client: SupabaseStorageClient, uuid_factory: Callable[[], str]) -> str:
+def bucket(
+ storage_client: SupabaseStorageClient, uuid_factory: Callable[[], str]
+) -> str:
"""Creates a test bucket which will be used in the whole storage tests run and deleted at the end"""
bucket_id = uuid_factory()
storage_client.create_bucket(id=bucket_id)
From 0b6139797ffc4bc3cd992da37d7926e75eb7f746 Mon Sep 17 00:00:00 2001
From: github-actions
Date: Thu, 3 Feb 2022 10:28:28 +0000
Subject: [PATCH 149/737] chore(release): bump version to v0.3.3
Automatically generated by python-semantic-release
---
CHANGELOG.md | 7 +++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 68a7a4b7..7d3ca83a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@
+## v0.3.3 (2022-02-03)
+### Fix
+* Increase sleep before listing ([`127ef98`](https://github.com/supabase-community/supabase-py/commit/127ef98d56eceef992b1ed9cfdc69b9701f3b92a))
+* Sleep before listing buckets ([`566a355`](https://github.com/supabase-community/supabase-py/commit/566a35587983361f2bb2bc5c58f3b82b02d6ed0e))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.3.2...v0.3.3)**
+
## v0.3.2 (2022-01-22)
### Fix
* Upgrade postgrest-py for fix order filter ([`b8840cd`](https://github.com/supabase-community/supabase-py/commit/b8840cdc07cd7d53767fe2c321761558aecd5bd4))
diff --git a/pyproject.toml b/pyproject.toml
index 645aec53..41ea1cb5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.3.2"
+version = "0.3.3"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 1f7d945d..3d476841 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.3.2"
+__version__ = "0.3.3"
from supabase import client, lib
from supabase.client import Client, create_client
From 76922a743d605c9cc8affc7a5f07ea3f13eb3886 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Thu, 3 Feb 2022 12:40:40 +0100
Subject: [PATCH 150/737] tests: ignore 404 when double-checking bucket
deletion
---
supabase/__init__.py | 3 ++-
supabase/lib/__init__.py | 4 ++--
supabase/lib/storage/__init__.py | 2 ++
supabase/lib/storage/storage_bucket_api.py | 2 +-
tests/test_storage.py | 16 +++++++++++-----
5 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 3d476841..eedaec38 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -4,4 +4,5 @@
from supabase.client import Client, create_client
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.realtime_client import SupabaseRealtimeClient
-from supabase.lib.storage_client import StorageFileAPI, SupabaseStorageClient
+from supabase.lib.storage import StorageException, StorageFileAPI
+from supabase.lib.storage_client import SupabaseStorageClient
diff --git a/supabase/lib/__init__.py b/supabase/lib/__init__.py
index 7931c631..fb9af465 100644
--- a/supabase/lib/__init__.py
+++ b/supabase/lib/__init__.py
@@ -1,3 +1,3 @@
-from supabase.lib import auth_client, realtime_client, storage_client
+from supabase.lib import auth_client, realtime_client, storage, storage_client
-__all__ = ["auth_client", "realtime_client", "storage_client"]
+__all__ = ["auth_client", "realtime_client", "storage_client", "storage"]
diff --git a/supabase/lib/storage/__init__.py b/supabase/lib/storage/__init__.py
index e69de29b..242c1499 100644
--- a/supabase/lib/storage/__init__.py
+++ b/supabase/lib/storage/__init__.py
@@ -0,0 +1,2 @@
+from .storage_bucket_api import StorageBucketAPI, StorageException
+from .storage_file_api import StorageFileAPI
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
index c9e381b5..b7ee4eff 100644
--- a/supabase/lib/storage/storage_bucket_api.py
+++ b/supabase/lib/storage/storage_bucket_api.py
@@ -7,7 +7,7 @@
from httpx import AsyncClient, Client, HTTPError
-__all__ = ["Bucket", "StorageBucketAPI"]
+__all__ = ["Bucket", "StorageBucketAPI", "StorageException"]
_RequestMethod = str
diff --git a/tests/test_storage.py b/tests/test_storage.py
index d91cd89c..fd41ed77 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -1,11 +1,12 @@
from __future__ import annotations
-from time import sleep
from typing import TYPE_CHECKING
from uuid import uuid4
import pytest
+from supabase import StorageException
+
if TYPE_CHECKING:
from pathlib import Path
from typing import Any, Callable, Dict, List
@@ -39,16 +40,21 @@ def delete_left_buckets(
"""Ensures no test buckets are left"""
def finalizer():
- # Sleep 15 seconds in order to let buckets be deleted before the double-check
- sleep(15)
buckets_list = storage_client.list_buckets()
if not buckets_list:
return
for bucket in buckets_list:
if bucket.id.startswith(UUID_PREFIX):
- storage_client.empty_bucket(bucket.id)
- storage_client.delete_bucket(bucket.id)
+ try:
+ storage_client.empty_bucket(bucket.id)
+ storage_client.delete_bucket(bucket.id)
+ except StorageException as e:
+ # Ignore 404 responses since they mean the bucket was already deleted
+ response = e.args[0]
+ if response["status_code"] != 404:
+ raise e
+ continue
request.addfinalizer(finalizer)
From a5723d26c0e3b93df240c2d15d1e8d25a6dd1574 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dani=20Rein=C3=B3n?=
Date: Thu, 3 Feb 2022 12:43:41 +0100
Subject: [PATCH 151/737] chore: fix status_code casing
---
tests/test_storage.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index fd41ed77..e1e8fa42 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -52,7 +52,7 @@ def finalizer():
except StorageException as e:
# Ignore 404 responses since they mean the bucket was already deleted
response = e.args[0]
- if response["status_code"] != 404:
+ if response["statusCode"] != 404:
raise e
continue
From b6d21353d98910a3cba85be147f1b3f53ac2cf2d Mon Sep 17 00:00:00 2001
From: dreinon
Date: Thu, 3 Feb 2022 18:50:18 +0100
Subject: [PATCH 152/737] chore: rm environment variables from windows test
script
---
test.ps1 | 2 --
1 file changed, 2 deletions(-)
diff --git a/test.ps1 b/test.ps1
index 45a43c9d..e2dd982b 100644
--- a/test.ps1
+++ b/test.ps1
@@ -1,6 +1,4 @@
powershell -Command {
- $env:SUPABASE_TEST_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNTAwODQ4NywiZXhwIjoxOTUwNTg0NDg3fQ.l8IgkO7TQokGSc9OJoobXIVXsOXkilXl4Ak6SCX5qI8";
- $env:SUPABASE_TEST_URL = "https://ibrydvrsxoapzgtnhpso.supabase.co";
poetry install;
poetry run pytest --cov=./ --cov-report=xml --cov-report=html -vv;
poetry run pre-commit run --all-files;
From 2cae0df10f6ef43d4bd4e008b7129308c53c13f1 Mon Sep 17 00:00:00 2001
From: dreinon
Date: Fri, 4 Feb 2022 02:18:14 +0100
Subject: [PATCH 153/737] tests: track created buckets in a global variable to
only delete these
---
tests/test_storage.py | 42 ++++++++++++++++++++++--------------------
1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index e1e8fa42..b22dfbb1 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -14,15 +14,15 @@
from supabase import Client, StorageFileAPI, SupabaseStorageClient
-UUID_PREFIX = "pytest-"
+# Global variable to track the ids from the buckets created in the tests run
+temp_test_buckets_ids = []
@pytest.fixture(scope="module")
def uuid_factory() -> Callable[[], str]:
def method() -> str:
- """Generate a UUID"""
- uuid = uuid4().hex[:8] # Get the first 8 digits part to make it shorter
- return f"{UUID_PREFIX}{uuid}"
+ """Generate a 8 digits long UUID"""
+ return uuid4().hex[:8]
return method
@@ -37,24 +37,19 @@ def storage_client(supabase: Client) -> SupabaseStorageClient:
def delete_left_buckets(
request: pytest.FixtureRequest, storage_client: SupabaseStorageClient
):
- """Ensures no test buckets are left"""
+ """Ensures no test buckets are left when a test that created a bucket fails"""
def finalizer():
- buckets_list = storage_client.list_buckets()
- if not buckets_list:
- return
-
- for bucket in buckets_list:
- if bucket.id.startswith(UUID_PREFIX):
- try:
- storage_client.empty_bucket(bucket.id)
- storage_client.delete_bucket(bucket.id)
- except StorageException as e:
- # Ignore 404 responses since they mean the bucket was already deleted
- response = e.args[0]
- if response["statusCode"] != 404:
- raise e
- continue
+ for bucket in temp_test_buckets_ids:
+ try:
+ storage_client.empty_bucket(bucket.id)
+ storage_client.delete_bucket(bucket.id)
+ except StorageException as e:
+ # Ignore 404 responses since they mean the bucket was already deleted
+ response = e.args[0]
+ if response["statusCode"] != 404:
+ raise e
+ continue
request.addfinalizer(finalizer)
@@ -65,6 +60,11 @@ def bucket(
) -> str:
"""Creates a test bucket which will be used in the whole storage tests run and deleted at the end"""
bucket_id = uuid_factory()
+
+ # Store bucket_id in global list
+ global temp_test_buckets_ids
+ temp_test_buckets_ids.append(bucket_id)
+
storage_client.create_bucket(id=bucket_id)
yield bucket_id
@@ -72,6 +72,8 @@ def bucket(
storage_client.empty_bucket(bucket_id)
storage_client.delete_bucket(bucket_id)
+ temp_test_buckets_ids.remove(bucket_id)
+
@pytest.fixture(scope="module")
def storage_file_client(
From 69acec05de84809c1903b25b54b1a5fe668c10a2 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 4 Feb 2022 09:45:12 +0000
Subject: [PATCH 154/737] 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]
---
poetry.lock | 96 ++++++++++++++++++++++++++---------------------------
1 file changed, 47 insertions(+), 49 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 5c077157..b3cdadbe 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -179,7 +179,7 @@ typing-extensions = ">=4.0.1,<5.0.0"
[[package]]
name = "coverage"
-version = "6.3"
+version = "6.3.1"
description = "Code coverage measurement for Python"
category = "dev"
optional = false
@@ -563,7 +563,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.8.1"
+version = "0.8.2"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
@@ -571,7 +571,8 @@ python-versions = ">=3.7,<4.0"
[package.dependencies]
deprecation = ">=2.1.0,<3.0.0"
-httpx = ">=0.20,<0.22"
+httpx = ">=0.20,<0.23"
+pydantic = ">=1.9.0,<2.0.0"
[[package]]
name = "pre-commit"
@@ -1212,50 +1213,47 @@ commitizen = [
{file = "commitizen-2.20.4.tar.gz", hash = "sha256:33fe190935412011a9e9e0a3fc80f4b874bc250461a9374b1169f2d86cb81901"},
]
coverage = [
- {file = "coverage-6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e8071e7d9ba9f457fc674afc3de054450be2c9b195c470147fbbc082468d8ff7"},
- {file = "coverage-6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86c91c511853dfda81c2cf2360502cb72783f4b7cebabef27869f00cbe1db07d"},
- {file = "coverage-6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c4ce3b647bd1792d4394f5690d9df6dc035b00bcdbc5595099c01282a59ae01"},
- {file = "coverage-6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a491e159294d756e7fc8462f98175e2d2225e4dbe062cca7d3e0d5a75ba6260"},
- {file = "coverage-6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d008e0f67ac800b0ca04d7914b8501312c8c6c00ad8c7ba17754609fae1231a"},
- {file = "coverage-6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4578728c36de2801c1deb1c6b760d31883e62e33f33c7ba8f982e609dc95167d"},
- {file = "coverage-6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7ee317486593193e066fc5e98ac0ce712178c21529a85c07b7cb978171f25d53"},
- {file = "coverage-6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2bc85664b06ba42d14bb74d6ddf19d8bfc520cb660561d2d9ce5786ae72f71b5"},
- {file = "coverage-6.3-cp310-cp310-win32.whl", hash = "sha256:27a94db5dc098c25048b0aca155f5fac674f2cf1b1736c5272ba28ead2fc267e"},
- {file = "coverage-6.3-cp310-cp310-win_amd64.whl", hash = "sha256:bde4aeabc0d1b2e52c4036c54440b1ad05beeca8113f47aceb4998bb7471e2c2"},
- {file = "coverage-6.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:509c68c3e2015022aeda03b003dd68fa19987cdcf64e9d4edc98db41cfc45d30"},
- {file = "coverage-6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e4ff163602c5c77e7bb4ea81ba5d3b793b4419f8acd296aae149370902cf4e92"},
- {file = "coverage-6.3-cp311-cp311-win_amd64.whl", hash = "sha256:d1675db48490e5fa0b300f6329ecb8a9a37c29b9ab64fa9c964d34111788ca2d"},
- {file = "coverage-6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7eed8459a2b81848cafb3280b39d7d49950d5f98e403677941c752e7e7ee47cb"},
- {file = "coverage-6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b4285fde5286b946835a1a53bba3ad41ef74285ba9e8013e14b5ea93deaeafc"},
- {file = "coverage-6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4748349734110fd32d46ff8897b561e6300d8989a494ad5a0a2e4f0ca974fc7"},
- {file = "coverage-6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:823f9325283dc9565ba0aa2d240471a93ca8999861779b2b6c7aded45b58ee0f"},
- {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fff16a30fdf57b214778eff86391301c4509e327a65b877862f7c929f10a4253"},
- {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:da1a428bdbe71f9a8c270c7baab29e9552ac9d0e0cba5e7e9a4c9ee6465d258d"},
- {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7d82c610a2e10372e128023c5baf9ce3d270f3029fe7274ff5bc2897c68f1318"},
- {file = "coverage-6.3-cp37-cp37m-win32.whl", hash = "sha256:11e61c5548ecf74ea1f8b059730b049871f0e32b74f88bd0d670c20c819ad749"},
- {file = "coverage-6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8e0c3525b1a182c8ffc9bca7e56b521e0c2b8b3e82f033c8e16d6d721f1b54d6"},
- {file = "coverage-6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a189036c50dcd56100746139a459f0d27540fef95b09aba03e786540b8feaa5f"},
- {file = "coverage-6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32168001f33025fd756884d56d01adebb34e6c8c0b3395ca8584cdcee9c7c9d2"},
- {file = "coverage-6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5d79c9af3f410a2b5acad91258b4ae179ee9c83897eb9de69151b179b0227f5"},
- {file = "coverage-6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:85c5fc9029043cf8b07f73fbb0a7ab6d3b717510c3b5642b77058ea55d7cacde"},
- {file = "coverage-6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7596aa2f2b8fa5604129cfc9a27ad9beec0a96f18078cb424d029fdd707468d"},
- {file = "coverage-6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ce443a3e6df90d692c38762f108fc4c88314bf477689f04de76b3f252e7a351c"},
- {file = "coverage-6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:012157499ec4f135fc36cd2177e3d1a1840af9b236cbe80e9a5ccfc83d912a69"},
- {file = "coverage-6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a34d313105cdd0d3644c56df2d743fe467270d6ab93b5d4a347eb9fec8924d6"},
- {file = "coverage-6.3-cp38-cp38-win32.whl", hash = "sha256:6e78b1e25e5c5695dea012be473e442f7094d066925604be20b30713dbd47f89"},
- {file = "coverage-6.3-cp38-cp38-win_amd64.whl", hash = "sha256:433b99f7b0613bdcdc0b00cc3d39ed6d756797e3b078d2c43f8a38288520aec6"},
- {file = "coverage-6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ed3244b415725f08ca3bdf02ed681089fd95e9465099a21c8e2d9c5d6ca2606"},
- {file = "coverage-6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab4fc4b866b279740e0d917402f0e9a08683e002f43fa408e9655818ed392196"},
- {file = "coverage-6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8582e9280f8d0f38114fe95a92ae8d0790b56b099d728cc4f8a2e14b1c4a18c"},
- {file = "coverage-6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c72bb4679283c6737f452eeb9b2a0e570acaef2197ad255fb20162adc80bea76"},
- {file = "coverage-6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca29c352389ea27a24c79acd117abdd8a865c6eb01576b6f0990cd9a4e9c9f48"},
- {file = "coverage-6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:152cc2624381df4e4e604e21bd8e95eb8059535f7b768c1fb8b8ae0b26f47ab0"},
- {file = "coverage-6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:51372e24b1f7143ee2df6b45cff6a721f3abe93b1e506196f3ffa4155c2497f7"},
- {file = "coverage-6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:72d9d186508325a456475dd05b1756f9a204c7086b07fffb227ef8cee03b1dc2"},
- {file = "coverage-6.3-cp39-cp39-win32.whl", hash = "sha256:649df3641eb351cdfd0d5533c92fc9df507b6b2bf48a7ef8c71ab63cbc7b5c3c"},
- {file = "coverage-6.3-cp39-cp39-win_amd64.whl", hash = "sha256:e67ccd53da5958ea1ec833a160b96357f90859c220a00150de011b787c27b98d"},
- {file = "coverage-6.3-pp36.pp37.pp38-none-any.whl", hash = "sha256:27ac7cb84538e278e07569ceaaa6f807a029dc194b1c819a9820b9bb5dbf63ab"},
- {file = "coverage-6.3.tar.gz", hash = "sha256:987a84ff98a309994ca77ed3cc4b92424f824278e48e4bf7d1bb79a63cfe2099"},
+ {file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"},
+ {file = "coverage-6.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:621f6ea7260ea2ffdaec64fe5cb521669984f567b66f62f81445221d4754df4c"},
+ {file = "coverage-6.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f2436d6742c01136dd940ee158bfc7cf5ced3da7e4c949662b8703b5cd8145"},
+ {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de73fca6fb403dd72d4da517cfc49fcf791f74eee697d3219f6be29adf5af6ce"},
+ {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78fbb2be068a13a5d99dce9e1e7d168db880870f7bc73f876152130575bd6167"},
+ {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5a4551dfd09c3bd12fca8144d47fe7745275adf3229b7223c2f9e29a975ebda"},
+ {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7bff3a98f63b47464480de1b5bdd80c8fade0ba2832c9381253c9b74c4153c27"},
+ {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a06c358f4aed05fa1099c39decc8022261bb07dfadc127c08cfbd1391b09689e"},
+ {file = "coverage-6.3.1-cp310-cp310-win32.whl", hash = "sha256:9fff3ff052922cb99f9e52f63f985d4f7a54f6b94287463bc66b7cdf3eb41217"},
+ {file = "coverage-6.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:276b13cc085474e482566c477c25ed66a097b44c6e77132f3304ac0b039f83eb"},
+ {file = "coverage-6.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:56c4a409381ddd7bbff134e9756077860d4e8a583d310a6f38a2315b9ce301d0"},
+ {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eb494070aa060ceba6e4bbf44c1bc5fa97bfb883a0d9b0c9049415f9e944793"},
+ {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e15d424b8153756b7c903bde6d4610be0c3daca3986173c18dd5c1a1625e4cd"},
+ {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d47a897c1e91f33f177c21de897267b38fbb45f2cd8e22a710bcef1df09ac1"},
+ {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:25e73d4c81efa8ea3785274a2f7f3bfbbeccb6fcba2a0bdd3be9223371c37554"},
+ {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fac0bcc5b7e8169bffa87f0dcc24435446d329cbc2b5486d155c2e0f3b493ae1"},
+ {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:72128176fea72012063200b7b395ed8a57849282b207321124d7ff14e26988e8"},
+ {file = "coverage-6.3.1-cp37-cp37m-win32.whl", hash = "sha256:1bc6d709939ff262fd1432f03f080c5042dc6508b6e0d3d20e61dd045456a1a0"},
+ {file = "coverage-6.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:618eeba986cea7f621d8607ee378ecc8c2504b98b3fdc4952b30fe3578304687"},
+ {file = "coverage-6.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ed164af5c9078596cfc40b078c3b337911190d3faeac830c3f1274f26b8320"},
+ {file = "coverage-6.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:352c68e233409c31048a3725c446a9e48bbff36e39db92774d4f2380d630d8f8"},
+ {file = "coverage-6.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:448d7bde7ceb6c69e08474c2ddbc5b4cd13c9e4aa4a717467f716b5fc938a734"},
+ {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9fde6b90889522c220dd56a670102ceef24955d994ff7af2cb786b4ba8fe11e4"},
+ {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e647a0be741edbb529a72644e999acb09f2ad60465f80757da183528941ff975"},
+ {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a5cdc3adb4f8bb8d8f5e64c2e9e282bc12980ef055ec6da59db562ee9bdfefa"},
+ {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2dd70a167843b4b4b2630c0c56f1b586fe965b4f8ac5da05b6690344fd065c6b"},
+ {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ad0a117b8dc2061ce9461ea4c1b4799e55edceb236522c5b8f958ce9ed8fa9a"},
+ {file = "coverage-6.3.1-cp38-cp38-win32.whl", hash = "sha256:e92c7a5f7d62edff50f60a045dc9542bf939758c95b2fcd686175dd10ce0ed10"},
+ {file = "coverage-6.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:482fb42eea6164894ff82abbcf33d526362de5d1a7ed25af7ecbdddd28fc124f"},
+ {file = "coverage-6.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c5b81fb37db76ebea79aa963b76d96ff854e7662921ce742293463635a87a78d"},
+ {file = "coverage-6.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f923b9ab265136e57cc14794a15b9dcea07a9c578609cd5dbbfff28a0d15e6"},
+ {file = "coverage-6.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d296cbc8254a7dffdd7bcc2eb70be5a233aae7c01856d2d936f5ac4e8ac1f1"},
+ {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245ab82e8554fa88c4b2ab1e098ae051faac5af829efdcf2ce6b34dccd5567c"},
+ {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f2b05757c92ad96b33dbf8e8ec8d4ccb9af6ae3c9e9bd141c7cc44d20c6bcba"},
+ {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9e3dd806f34de38d4c01416344e98eab2437ac450b3ae39c62a0ede2f8b5e4ed"},
+ {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d651fde74a4d3122e5562705824507e2f5b2d3d57557f1916c4b27635f8fbe3f"},
+ {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:704f89b87c4f4737da2860695a18c852b78ec7279b24eedacab10b29067d3a38"},
+ {file = "coverage-6.3.1-cp39-cp39-win32.whl", hash = "sha256:2aed4761809640f02e44e16b8b32c1a5dee5e80ea30a0ff0912158bde9c501f2"},
+ {file = "coverage-6.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9976fb0a5709988778ac9bc44f3d50fccd989987876dfd7716dee28beed0a9fa"},
+ {file = "coverage-6.3.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:463e52616ea687fd323888e86bf25e864a3cc6335a043fad6bbb037dbf49bbe2"},
+ {file = "coverage-6.3.1.tar.gz", hash = "sha256:6c3f6158b02ac403868eea390930ae64e9a9a2a5bbfafefbb920d29258d9f2f8"},
]
cryptography = [
{file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
@@ -1471,8 +1469,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
postgrest-py = [
- {file = "postgrest-py-0.8.1.tar.gz", hash = "sha256:ba96ca118d6e27a422b6afd4ba1b415e6c1202b159db21a47a6cbe16d1310e4e"},
- {file = "postgrest_py-0.8.1-py3-none-any.whl", hash = "sha256:acbc337b5aa8a4c2740ee8cb4c32c246479c5e7920d34aa30e316c65aa270e12"},
+ {file = "postgrest-py-0.8.2.tar.gz", hash = "sha256:bce4b391abbca18c921554ff1e383c25b772b35686542e00415e617b9ba2a17a"},
+ {file = "postgrest_py-0.8.2-py3-none-any.whl", hash = "sha256:47c9981cc08ad7a235446fdd8c1bc5a54dbfd145939e5cebc6d88db9da844ac5"},
]
pre-commit = [
{file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"},
From 1feab46f2df64de014aa550952192366cc8055ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leynier=20Guti=C3=A9rrez=20Gonz=C3=A1lez?=
Date: Fri, 4 Feb 2022 08:08:28 -0500
Subject: [PATCH 155/737] feat: update postgrest-py from 0.8.1 to 0.8.2
From 5489e55ca483b4719656e3f78335d8f68a8f6802 Mon Sep 17 00:00:00 2001
From: github-actions
Date: Fri, 4 Feb 2022 13:11:18 +0000
Subject: [PATCH 156/737] chore(release): bump version to v0.4.0
Automatically generated by python-semantic-release
---
CHANGELOG.md | 6 ++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7d3ca83a..3603b7a3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
+## v0.4.0 (2022-02-04)
+### Feature
+* Update postgrest-py from 0.8.1 to 0.8.2 ([`1feab46`](https://github.com/supabase-community/supabase-py/commit/1feab46f2df64de014aa550952192366cc8055ef))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.3.3...v0.4.0)**
+
## v0.3.3 (2022-02-03)
### Fix
* Increase sleep before listing ([`127ef98`](https://github.com/supabase-community/supabase-py/commit/127ef98d56eceef992b1ed9cfdc69b9701f3b92a))
diff --git a/pyproject.toml b/pyproject.toml
index 41ea1cb5..ef74d0ea 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.3.3"
+version = "0.4.0"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index eedaec38..803b7793 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.3.3"
+__version__ = "0.4.0"
from supabase import client, lib
from supabase.client import Client, create_client
From 52f96799ab94b240a6ee1462f2a70d3c3641f433 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 4 Feb 2022 18:55:53 -0500
Subject: [PATCH 157/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 12 ++++++------
pyproject.toml | 2 +-
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index b3cdadbe..374d1f61 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -670,7 +670,7 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pytest"
-version = "6.2.5"
+version = "7.0.0"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -685,10 +685,10 @@ iniconfig = "*"
packaging = "*"
pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
-toml = "*"
+tomli = ">=1.0.0"
[package.extras]
-testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
+testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
[[package]]
name = "pytest-cov"
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "83fac6208969427607985d042f3b5208e75fe7a42cf08843ce26768120cc7819"
+content-hash = "58c67ad4c141eab19ccf56f6e971d62826ca8c6f337125ad538ffacb89c2f3bc"
[metadata.files]
anyio = [
@@ -1542,8 +1542,8 @@ pyparsing = [
{file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pytest = [
- {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
- {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
+ {file = "pytest-7.0.0-py3-none-any.whl", hash = "sha256:42901e6bd4bd4a0e533358a86e848427a49005a3256f657c5c8f8dd35ef137a9"},
+ {file = "pytest-7.0.0.tar.gz", hash = "sha256:dad48ffda394e5ad9aa3b7d7ddf339ed502e5e365b1350e0af65f4a602344b11"},
]
pytest-cov = [
{file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"},
diff --git a/pyproject.toml b/pyproject.toml
index ef74d0ea..390953c4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -24,7 +24,7 @@ httpx = "^0.21.3"
[tool.poetry.dev-dependencies]
pre-commit = "^2.17.0"
black = "^22.1"
-pytest = "^6.2.5"
+pytest = "^7.0.0"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
From b9a9c7973acfc43de6ae7547077617b59f0d78a0 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 7 Feb 2022 18:53:52 -0500
Subject: [PATCH 158/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 374d1f61..719158ef 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -159,7 +159,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "commitizen"
-version = "2.20.4"
+version = "2.20.5"
description = "Python commitizen client tool"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "58c67ad4c141eab19ccf56f6e971d62826ca8c6f337125ad538ffacb89c2f3bc"
+content-hash = "0088720dbb0977f9cdb2d9fb74bc7acbfb194cf27c521cf1d99bdedf7d39b116"
[metadata.files]
anyio = [
@@ -1209,8 +1209,8 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
commitizen = [
- {file = "commitizen-2.20.4-py3-none-any.whl", hash = "sha256:8bd422319abcdbdbe620aea947b94a58c407996b80c724556c6d7f0e8ab07d49"},
- {file = "commitizen-2.20.4.tar.gz", hash = "sha256:33fe190935412011a9e9e0a3fc80f4b874bc250461a9374b1169f2d86cb81901"},
+ {file = "commitizen-2.20.5-py3-none-any.whl", hash = "sha256:836229809351f38bbe616fd81dce70be7cf59b82e64a37b976171a9c9412e829"},
+ {file = "commitizen-2.20.5.tar.gz", hash = "sha256:abc14650e79b5366d200c5fcf484e4389337c05aaef0285d09329cc367eab836"},
]
coverage = [
{file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"},
diff --git a/pyproject.toml b/pyproject.toml
index 390953c4..6287fe92 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -28,7 +28,7 @@ pytest = "^7.0.0"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
-commitizen = "^2.20.3"
+commitizen = "^2.20.5"
python-semantic-release = "^7.24.0"
python-dotenv = "^0.19.2"
From 19f843faf7d1b2b6cc134dd86e0239ee6716a022 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 14 Feb 2022 09:39:01 -0500
Subject: [PATCH 159/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 719158ef..7045008f 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -670,7 +670,7 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pytest"
-version = "7.0.0"
+version = "7.0.1"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "0088720dbb0977f9cdb2d9fb74bc7acbfb194cf27c521cf1d99bdedf7d39b116"
+content-hash = "cb6a5ce0c8c3c6941f7b77e1e37361ad20efcfc12d8b13011e38963b784577bb"
[metadata.files]
anyio = [
@@ -1542,8 +1542,8 @@ pyparsing = [
{file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pytest = [
- {file = "pytest-7.0.0-py3-none-any.whl", hash = "sha256:42901e6bd4bd4a0e533358a86e848427a49005a3256f657c5c8f8dd35ef137a9"},
- {file = "pytest-7.0.0.tar.gz", hash = "sha256:dad48ffda394e5ad9aa3b7d7ddf339ed502e5e365b1350e0af65f4a602344b11"},
+ {file = "pytest-7.0.1-py3-none-any.whl", hash = "sha256:9ce3ff477af913ecf6321fe337b93a2c0dcf2a0a1439c43f5452112c1e4280db"},
+ {file = "pytest-7.0.1.tar.gz", hash = "sha256:e30905a0c131d3d94b89624a1cc5afec3e0ba2fbdb151867d8e0ebd49850f171"},
]
pytest-cov = [
{file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"},
diff --git a/pyproject.toml b/pyproject.toml
index 6287fe92..c77b9f9c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -24,7 +24,7 @@ httpx = "^0.21.3"
[tool.poetry.dev-dependencies]
pre-commit = "^2.17.0"
black = "^22.1"
-pytest = "^7.0.0"
+pytest = "^7.0.1"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
From e50f3ad469d0b50a36da5e4ef0cb34d4b2daeef3 Mon Sep 17 00:00:00 2001
From: cloudguruab
Date: Wed, 16 Feb 2022 17:18:32 -0500
Subject: [PATCH 160/737] FastAPI tutorial for Supabase-py project
---
examples/FastAPI/.gitignore | 4 +
examples/FastAPI/README.md | 113 ++
examples/FastAPI/__init__.py | 0
examples/FastAPI/config.py | 15 +
examples/FastAPI/data/__init__.py | 0
examples/FastAPI/data/credit_data.csv | 2001 +++++++++++++++++++++++++
examples/FastAPI/data/database.py | 18 +
examples/FastAPI/main.py | 104 ++
examples/FastAPI/requirements.txt | 35 +
9 files changed, 2290 insertions(+)
create mode 100644 examples/FastAPI/.gitignore
create mode 100644 examples/FastAPI/README.md
create mode 100644 examples/FastAPI/__init__.py
create mode 100644 examples/FastAPI/config.py
create mode 100644 examples/FastAPI/data/__init__.py
create mode 100644 examples/FastAPI/data/credit_data.csv
create mode 100644 examples/FastAPI/data/database.py
create mode 100644 examples/FastAPI/main.py
create mode 100644 examples/FastAPI/requirements.txt
diff --git a/examples/FastAPI/.gitignore b/examples/FastAPI/.gitignore
new file mode 100644
index 00000000..e5d259d9
--- /dev/null
+++ b/examples/FastAPI/.gitignore
@@ -0,0 +1,4 @@
+dump.rdb
+env/
+.env
+__pycache__
\ No newline at end of file
diff --git a/examples/FastAPI/README.md b/examples/FastAPI/README.md
new file mode 100644
index 00000000..579e768e
--- /dev/null
+++ b/examples/FastAPI/README.md
@@ -0,0 +1,113 @@
+### 🐴 Why
+This tutorial should serve as an example of using supabase api to connect to your database instance and build a service to periodically cache and serve consumer credit data on client request. This project covers redis as a caching mechanism, supabase to support our postgres instance, and fastapi for our framework, all deployed on Deta Cloud.
+
+See docs for more information,
+
+### ☂️ Setting up your environment
+
+Setup your virtual environment:
+
+```bash
+python3 -m venv env
+```
+
+Activating your environment
+
+```zsh
+source env/bin/activate
+```
+
+In the root directory run the following:
+
+```bash
+pip install -r requirements.txt
+```
+
+After setting up supabase you need to create a `.env` file with the following:
+
+```bash
+URL=
+KEY=
+LOCAL_REDIS_INSTANCE=redis://127.0.0.1:6379
+```
+
+### 🤖 Starting Redis in development environment
+
+To begin working with redis, run the following command, after completion open a new terminal window.
+
+```zsh
+redis-server
+```
+
+### 👾 Activating your development server
+
+To start your local server run the following command
+
+```zsh
+uvicorn main:app --reload
+```
+
+On success of the commad you should see;
+
+```zsh
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+INFO: Started reloader process [13385] using watchgod
+INFO: Started server process [13387]
+2022-02-11 19:32:12,509:INFO - Started server process [13387]
+INFO: Waiting for application startup.
+2022-02-11 19:32:12,509:INFO - Waiting for application startup.
+2022-02-11 19:32:12,510:INFO - 02/11/2022 07:32:12 PM | CONNECT_BEGIN: Attempting to connect to Redis server...
+2022-02-11 19:32:12,511:INFO - 02/11/2022 07:32:12 PM | CONNECT_SUCCESS: Redis client is connected to server.
+INFO: Application startup complete.
+2022-02-11 19:32:12,511:INFO - Application startup complete.
+```
+
+### 🎾 Endpoints
+
+Introduction to your application.
+```bash
+http "http://127.0.0.1:8000/"
+
+HTTP/1.1 200 OK
+content-length: 102
+content-type: application/json
+date: Wed, 16 Feb 2022 22:01:14 GMT
+server: uvicorn
+
+{
+ "👋 Hello": "Please refer to the readme documentation for more or visit http://localhost:8000/docs"
+}
+```
+
+Working with your redis cache, the following call will pull data
+from your supabase database, and cache it.
+
+The x-fastapi-cache header field indicates that this response was found in the Redis cache (a.k.a. a Hit).
+
+The only other possible value for this field is Miss. The expires field and max-age value in the cache-control field indicate that this response will be considered fresh for 604321 seconds(1 week). This is expected since it was specified in the @cache decorator.
+
+The etag field is an identifier that is created by converting the response data to a string and applying a hash function. If a request containing the if-none-match header is received, any etag value(s) included in the request will be used to determine if the data requested is the same as the data stored in the cache. If they are the same, a 304 NOT MODIFIED response will be sent. If they are not the same, the cached data will be sent with a 200 OK response.
+
+```bash
+# Command
+http "http://127.0.0.1:8000/cachedResults"
+
+# Response Headers
+HTTP/1.1 200 OK
+cache-control: max-age=604321
+content-length: 894
+content-type: application/json
+date: Wed, 16 Feb 2022 21:53:56 GMT
+etag: W/-9174636245072902018
+expires: Wed, 23 Feb 2022 21:45:57 GMT
+server: uvicorn
+x-supafast-cache: Hit
+```
+
+
+### Docs
+
+- [Installing Redis](https://redis.io/topics/quickstart)
+- [Setting up Supabase](https://supabase.com/docs/reference)
+- [Getting started with FastApi](https://fastapi.tiangolo.com/tutorial/)
+- [Tutorial Author](https://github.com/cloudguruab)
\ No newline at end of file
diff --git a/examples/FastAPI/__init__.py b/examples/FastAPI/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/examples/FastAPI/config.py b/examples/FastAPI/config.py
new file mode 100644
index 00000000..c723e774
--- /dev/null
+++ b/examples/FastAPI/config.py
@@ -0,0 +1,15 @@
+import os
+from dotenv import load_dotenv
+
+load_dotenv()
+
+class Config:
+ """
+ Root level configuration for project
+ """
+
+ URL = os.getenv('URL')
+
+ KEY = os.getenv('KEY')
+
+ REDIS_URL = os.getenv('LOCAL_REDIS_INSTANCE')
\ No newline at end of file
diff --git a/examples/FastAPI/data/__init__.py b/examples/FastAPI/data/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/examples/FastAPI/data/credit_data.csv b/examples/FastAPI/data/credit_data.csv
new file mode 100644
index 00000000..d5667156
--- /dev/null
+++ b/examples/FastAPI/data/credit_data.csv
@@ -0,0 +1,2001 @@
+clientid,income,age,loan,default
+1,66155.9251,59.01701507,8106.532131,0
+2,34415.15397,48.1171531,6564.745018,0
+3,57317.17006,63.10804949,8020.953296,0
+4,42709.5342,45.75197235,6103.64226,0
+5,66952.68885,18.58433593,8770.099235,1
+6,24904.06414,57.4716071,15.49859844,0
+7,48430.35961,26.80913242,5722.581981,0
+8,24500.14198,32.89754832,2971.00331,1
+9,40654.89254,55.49685254,4755.82528,0
+10,25075.87277,39.77637806,1409.230371,0
+11,64131.41537,25.67957535,4351.028971,0
+12,59436.84712,60.47193585,9254.244538,0
+13,61050.34608,26.35504385,5893.264659,0
+14,27267.99546,61.57677582,4759.787581,0
+15,63061.96017,39.20155289,1850.369377,0
+16,50501.72669,-28.21836132,3977.287432,0
+17,43548.65471,39.57453035,3935.544453,0
+18,43378.17519,60.84831794,3277.737553,0
+19,20542.36507,61.69057071,3157.44229,0
+20,58887.35755,26.07609302,4965.516066,0
+21,23000.784,31.76135417,1148.118057,0
+22,32197.6207,-52.42327992,4244.057136,0
+23,23329.31941,48.57697453,222.6222987,0
+24,27845.80089,51.9706241,4959.921226,0
+25,65301.98403,48.84092177,5465.267886,0
+26,47451.63012,27.03174131,5361.282716,0
+27,63287.03891,-36.49697551,9595.286289,0
+28,45727.45987,55.83992185,6376.822949,0
+29,59417.80541,,2082.625938,0
+30,58842.89131,54.51094756,10871.18679,0
+31,48528.8528,,6155.78467,0
+32,23526.30256,,2862.010139,0
+33,67252.90061,38.13190746,4221.303157,0
+34,58886.85129,38.66150424,7271.552032,0
+35,57584.97379,36.67202092,1728.423755,0
+36,26289.97231,20.66677873,341.146966,0
+37,25952.38147,58.1850173,2109.200772,0
+38,32464.09188,50.22500592,4326.705073,0
+39,60921.0631,18.84052576,968.8363827,0
+40,26578.53669,32.67604425,3489.843136,1
+41,66260.12156,32.89669307,7035.589107,0
+42,58787.45524,62.64130285,4167.786724,0
+43,62545.70871,49.04043324,4362.905812,0
+44,24381.95345,25.25233071,4227.018986,1
+45,67852.10587,47.32189906,5730.588251,0
+46,41725.61286,18.13003836,1185.2147,0
+47,41896.9716,47.25073103,4892.209734,0
+48,44379.72965,50.08867129,1814.335082,0
+49,28416.89938,57.9287193,1788.973736,0
+50,68427.16311,46.30824019,1658.070233,0
+51,35975.79493,35.70865177,6610.366179,0
+52,57596.3541,29.2460566,3344.384401,0
+53,29681.88309,54.95928719,1745.871674,0
+54,51656.93867,47.7150637,7158.13906,0
+55,24912.84268,49.3663712,267.6962986,0
+56,47761.82407,50.09815907,5549.799128,0
+57,22248.1792,23.44362417,4364.975281,1
+58,29724.47688,31.9685264,3075.345728,0
+59,52143.82367,20.83763392,2393.099679,0
+60,56577.72286,36.84780068,5947.421721,0
+61,37660.77072,53.74506047,2129.597165,0
+62,37403.7954,47.9441217,2044.047045,0
+63,31652.69373,62.02380247,5151.070445,0
+64,32727.70073,34.47487101,1087.919364,0
+65,69078.60481,25.10752405,4076.583914,0
+66,40622.19487,41.52718879,4949.902333,0
+67,37521.01717,60.54107743,8.012076247,0
+68,30735.8085,22.24209774,5946.822297,1
+69,24857.69488,21.59867635,2692.163459,0
+70,33180.20159,49.56597728,4621.997742,0
+71,66628.26009,52.38387344,5992.885092,0
+72,38564.93213,21.21649167,5604.16999,1
+73,33704.5085,33.18310623,5898.000893,1
+74,57018.48483,44.82571531,3507.252166,0
+75,40526.90279,28.60637596,2119.984911,0
+76,50827.98052,51.01293719,1765.983337,0
+77,40775.8116,60.28875683,1922.610022,0
+78,55467.15141,56.85133096,9226.902041,0
+79,38789.02939,61.22928543,7650.65521,0
+80,58074.84013,50.07492427,7388.02444,0
+81,57814.10634,43.8309231,7252.120004,0
+82,45190.72918,53.83952,7893.559889,0
+83,36801.90718,43.02794342,5406.344926,0
+84,68811.77942,24.03826535,4211.302611,0
+85,30483.29553,33.65644124,4514.00978,1
+86,44930.39417,19.77738585,7708.315625,1
+87,43671.45655,25.58503698,8066.697865,1
+88,27612.9148,19.21244819,1513.6242,0
+89,53607.32693,27.5617124,2378.766173,0
+90,33036.68312,25.06336742,958.9798221,0
+91,64275.83489,61.440913,7520.032053,0
+92,30673.8375,59.33383708,383.1075694,0
+93,58793.61431,56.49441041,4391.981054,0
+94,21053.49062,63.37940765,754.6018821,0
+95,42095.4222,55.36618805,1183.704568,0
+96,50360.67879,28.83954247,4217.166823,0
+97,41970.72448,63.16991394,1622.317392,0
+98,51663.41018,63.73571024,4147.888585,0
+99,53601.81244,20.24062127,9601.375482,1
+100,43439.98873,24.17947032,6879.306007,1
+101,51461.05317,36.65155863,7292.264177,0
+102,41285.17231,47.97630816,2313.825005,0
+103,62895.74977,49.92260372,2001.281514,0
+104,57296.16082,25.70848233,10601.08278,1
+105,60844.09249,45.655205,12072.25576,0
+106,47634.54955,44.29487133,141.7038179,0
+107,23998.32369,29.91003349,3928.303909,1
+108,63391.61597,34.73926766,190.8892748,0
+109,21534.55122,44.31503802,228.335387,0
+110,28255.65251,35.51401737,2109.242798,0
+111,36496.13393,19.51571649,165.5060901,0
+112,41631.6663,53.04765477,106.0907472,0
+113,68762.41666,20.99124336,2796.752303,0
+114,30075.26492,29.23505652,2628.577923,0
+115,41302.67418,38.66061858,1379.913124,0
+116,39703.75943,47.46874099,2403.478216,0
+117,63161.09204,59.67511498,804.0924415,0
+118,63062.1421,26.58577848,56.16616439,0
+119,34507.52791,38.58778339,1793.750255,0
+120,27954.70777,29.90452167,1627.041405,0
+121,37369.38206,35.34194884,3783.601151,0
+122,43912.06274,23.82192118,7757.136789,1
+123,22766.7745,29.32590147,1429.401762,0
+124,21603.3057,21.37503332,178.333871,0
+125,61952.90669,18.47742502,3635.600589,0
+126,36116.36509,22.53588419,1494.984568,0
+127,26157.77727,22.82693773,2295.811656,0
+128,26458.3832,59.52298674,552.3981664,0
+129,69156.30377,53.4108625,7364.735578,0
+130,39441.44476,46.75389592,1034.758838,0
+131,60119.06581,45.07696923,1810.96046,0
+132,55613.48546,24.37712877,4255.252137,0
+133,37049.38624,29.42301855,6056.817214,1
+134,23122.06493,53.30953584,4263.493031,0
+135,48790.13243,32.47562106,5519.09604,0
+136,59132.68516,48.34499296,4575.527635,0
+137,55305.57483,53.58227987,8176.707165,0
+138,26037.46364,24.78310779,3293.250879,1
+139,64899.80503,38.11601668,4654.249217,0
+140,27089.12432,21.2076896,5029.488782,1
+141,45341.47464,22.56956836,6525.218423,1
+142,24865.79807,37.30975294,4439.116154,0
+143,28239.54321,26.19220966,4189.832568,1
+144,52730.0805,50.23778499,5706.325323,0
+145,28982.05815,39.04840987,2898.761824,0
+146,36221.26601,26.10150042,5094.670084,1
+147,33551.12437,58.85692749,4333.360862,0
+148,43891.35597,49.1538267,5792.906333,0
+149,45148.88572,60.52500645,6455.391772,0
+150,58481.01216,40.83291823,5380.560596,0
+151,69579.92921,57.75624316,10868.24147,0
+152,52743.30857,44.04851651,2684.700671,0
+153,65635.66153,51.16771448,12701.60348,0
+154,34559.90704,29.11218199,3317.529874,0
+155,60218.53153,32.47188772,3157.961082,0
+156,51689.54854,46.15419152,9881.976006,0
+157,47541.61434,55.23458507,1611.216597,0
+158,62905.79302,27.90965196,11423.9363,1
+159,65632.60458,47.10576675,12498.04045,0
+160,31847.85372,41.41633576,2913.769931,0
+161,27947.44028,58.34845518,5514.117421,0
+162,62246.72725,31.08188451,406.7207693,0
+163,40154.68857,60.5296832,6013.152874,0
+164,58627.55488,33.11565325,1215.65256,0
+165,33441.05107,27.87348619,5282.72856,1
+166,55603.7868,43.83947279,1411.13008,0
+167,31046.37897,29.29739875,4907.674084,1
+168,44708.09987,21.10877357,2390.850597,0
+169,23340.2707,42.8286153,2707.760939,0
+170,24830.18197,28.97024523,2046.68505,0
+171,31422.74739,53.89808021,1686.835902,0
+172,60477.23385,60.40210646,10711.7009,0
+173,26039.02149,49.39040223,2056.752382,0
+174,36186.84807,50.50675221,1130.735265,0
+175,39772.11873,43.72544781,5492.893689,0
+176,34730.16407,63.37623301,818.5084419,0
+177,23118.48331,57.58105032,1746.936559,0
+178,50072.84763,33.01527275,8088.568019,1
+179,67465.06239,23.61105385,1802.616994,0
+180,38625.63201,19.6300378,5836.563381,1
+181,45227.48283,26.72316244,5521.507405,1
+182,64901.89773,44.93881585,9589.833525,0
+183,40543.91354,51.46087562,6507.850191,0
+184,27793.26672,60.51690847,382.2489041,0
+185,61167.77482,20.58363144,10396.61815,1
+186,64619.66462,26.04209269,9704.782409,1
+187,37593.75787,54.01041531,7274.325628,0
+188,35032.6496,56.72462562,135.9316845,0
+189,58364.46498,55.59654948,5809.899,0
+190,56945.81041,45.55402051,6388.369826,0
+191,27204.84855,29.07209672,3827.893915,1
+192,21648.26103,52.58703992,3558.527262,0
+193,31077.85689,44.2215167,4452.330679,0
+194,42522.92241,53.86865108,6790.850263,0
+195,31769.24772,44.77438059,1148.221436,0
+196,35556.77991,23.77743318,6361.973438,1
+197,52908.82424,53.69563592,9841.080553,0
+198,35045.13141,28.65328366,2382.466772,0
+199,44488.16448,33.43120549,2751.088843,0
+200,41679.93712,53.66990824,395.0007751,0
+201,54619.9472,52.42442217,10780.27188,0
+202,38053.62313,26.20688032,6110.572792,1
+203,64718.66178,37.27649201,1485.079935,0
+204,43159.08497,62.44209669,4350.019897,0
+205,29445.5105,28.44567748,1758.881865,0
+206,25817.38988,37.94548019,4115.484719,0
+207,66356.85674,61.52484883,10725.48473,0
+208,56676.158,46.67896953,2278.554349,0
+209,61000.04277,48.62361021,2160.784908,0
+210,58906.25169,42.04934198,9290.575345,0
+211,49589.15372,42.77525588,2627.405488,0
+212,40141.60354,56.15141838,845.3663713,0
+213,31659.72821,31.92815368,858.511388,0
+214,62658.22163,25.46316007,3343.367161,0
+215,39264.4835,37.02775284,5255.788283,0
+216,46643.12648,53.40508337,6440.861434,0
+217,30515.37212,20.16187772,415.240435,0
+218,65077.32203,50.97913471,11061.81189,0
+219,60871.869,61.2601442,4844.172224,0
+220,25011.1039,36.21518966,3834.042782,0
+221,68407.18551,60.93758158,597.9440655,0
+222,43727.43934,55.19259935,1170.556334,0
+223,45788.7471,41.26194623,5894.041317,0
+224,65705.01082,50.92843185,1969.794134,0
+225,32434.70251,41.35317101,2738.440496,0
+226,58121.66858,27.30180023,7531.101249,1
+227,62498.50725,31.9096908,3312.877622,0
+228,26090.72588,48.07852007,4255.626392,0
+229,64780.93854,20.22810118,8402.415586,1
+230,65588.40342,22.91821226,7879.738136,1
+231,65743.70367,52.3005041,7724.571414,0
+232,37164.52158,47.29545476,1445.802189,0
+233,65176.52978,48.96321098,2365.28749,0
+234,34615.54217,25.51438965,6476.760852,1
+235,59079.46505,58.6383316,10326.08977,0
+236,56267.17164,22.48613604,7329.243164,1
+237,34862.82129,54.96487331,6040.772062,0
+238,60521.3641,45.42499301,8035.883173,0
+239,42276.78291,57.93069619,8055.305084,0
+240,38451.17771,63.42145549,3441.261416,0
+241,45985.10865,53.5338888,7382.056426,0
+242,51000.42244,27.80299751,778.7326956,0
+243,31523.10777,40.44616794,5174.570569,0
+244,28648.67675,18.39696983,1870.925253,0
+245,27514.42796,21.8976978,3400.910744,1
+246,27441.00038,37.39906989,1455.047602,0
+247,67709.24159,50.41293228,5136.819308,0
+248,38600.70719,44.72279622,2749.080191,0
+249,30950.29541,26.31019433,5043.148637,1
+250,27083.82287,60.66665852,3286.212882,0
+251,21512.74527,24.7795283,2453.376121,0
+252,34796.00356,58.48789988,443.6665381,0
+253,27089.39284,51.29419704,1851.311563,0
+254,25259.40163,39.73976626,4341.008082,0
+255,47007.31358,45.01979643,4069.402646,0
+256,20358.66502,53.61518031,1064.686918,0
+257,67900.22653,43.51430384,7902.742965,0
+258,54418.47099,55.2220663,5630.741221,0
+259,51288.55469,29.92074847,6536.966363,1
+260,28199.60163,36.66870417,3871.688902,0
+261,22199.61514,60.10481888,1498.390919,0
+262,50514.46963,57.37965014,2003.65357,0
+263,34414.24034,54.5301724,617.5387522,0
+264,37633.08743,29.42141257,868.1624733,0
+265,55235.50407,47.00526014,4910.547658,0
+266,45587.55184,62.02213807,8366.614268,0
+267,52757.79494,53.08221445,2321.206314,0
+268,41174.80813,52.33937637,2888.44471,0
+269,25685.5352,39.00918946,490.7429211,0
+270,28145.303,55.54762961,4805.971549,0
+271,52094.21837,40.84450776,495.0211992,0
+272,33552.38598,25.15961094,6054.244126,1
+273,37400.93377,50.10848668,1693.137378,0
+274,21605.72509,23.2381696,2828.308618,1
+275,57562.89174,56.60056735,8508.835399,0
+276,62288.53961,25.60217264,10657.10612,1
+277,22767.2642,45.12328068,1205.786013,0
+278,20943.04333,19.81963119,4098.11579,1
+279,20622.8601,30.4140331,3518.452629,1
+280,48436.66463,49.02784977,5851.409789,0
+281,27574.63418,57.64370906,1017.39616,0
+282,62889.36214,33.2456503,6525.151793,0
+283,37683.20049,55.58721086,7414.552853,0
+284,54974.4555,61.98420323,8922.199717,0
+285,56326.08667,40.40545522,4816.776074,0
+286,65670.88344,50.00469847,3950.870172,0
+287,50730.73339,41.97006679,1879.059662,0
+288,64184.91579,46.44703643,1854.239613,0
+289,66179.32411,48.12079915,3646.93786,0
+290,24969.5268,45.12099322,3595.501942,0
+291,54925.51827,40.80560311,554.4883448,0
+292,67879.24802,43.59720866,10433.47435,0
+293,67787.52676,53.36234044,9607.498847,0
+294,31657.6193,37.77866429,1448.071984,0
+295,36559.13503,19.71617609,3030.267241,0
+296,57787.56566,22.64466921,6339.850844,0
+297,42521.72601,47.70428875,2661.612516,0
+298,51935.18063,21.49550533,5649.452468,0
+299,45677.87613,51.69305562,2966.246125,0
+300,51363.59581,21.0219966,761.4224042,0
+301,27218.56103,55.17101996,4145.003587,0
+302,43677.62922,32.55303035,6739.858598,1
+303,21533.59551,57.90168346,1971.55422,0
+304,28010.19093,55.36689966,3971.155479,0
+305,51589.28275,50.31346489,56.99097407,0
+306,50480.95269,27.08039063,8831.184365,1
+307,43957.35058,21.14484884,5416.357798,1
+308,61878.34655,33.00635954,567.6687734,0
+309,60153.33697,20.30086013,6472.347007,0
+310,33388.58334,62.00167495,4551.876889,0
+311,41310.40178,53.57694074,4481.162213,0
+312,25576.95393,51.93226805,1922.656626,0
+313,51455.09845,37.2856837,9447.117157,0
+314,48134.15693,47.96967523,2075.596112,0
+315,51348.5273,52.43673978,1507.891341,0
+316,20532.82373,54.62323385,1897.780821,0
+317,33297.21402,46.57996004,3674.74134,0
+318,55858.54924,25.86653378,5630.444972,0
+319,43777.51848,20.0109277,3601.299685,0
+320,27789.51906,58.51913348,186.8280739,0
+321,36132.42388,34.29426042,99.4495914,0
+322,20145.9886,21.28278372,839.8390632,0
+323,63108.70739,43.19394153,5757.848995,0
+324,26581.61453,61.95337375,5090.392774,0
+325,62040.88963,62.04980097,7643.631046,0
+326,69958.70554,30.5360199,8755.691977,1
+327,38082.51952,45.51997724,4213.465259,0
+328,45183.05418,33.89557822,5953.453524,1
+329,36242.44796,39.41547079,5688.994849,0
+330,44527.2589,42.09009228,4588.472286,0
+331,40496.25582,20.10545872,4834.603798,0
+332,24698.66931,48.91255747,2427.650788,0
+333,60560.30553,49.75058567,1994.621134,0
+334,48018.21146,50.20413902,6120.090021,0
+335,30216.25196,26.56371653,2116.53731,0
+336,61742.23995,44.87260781,8068.319704,0
+337,47288.42667,62.42846686,4004.988852,0
+338,24658.89932,59.43650057,590.5980812,0
+339,64644.3481,58.84065675,9848.171449,0
+340,57517.72414,52.48606979,4536.857209,0
+341,52945.54779,54.63191519,6262.007945,0
+342,36366.99041,47.19141009,371.040895,0
+343,62113.72957,27.884415,11928.50986,1
+344,62279.5195,26.66646905,6801.405893,0
+345,61799.08496,56.95796104,5619.217604,0
+346,50139.74001,30.26781235,7758.799823,1
+347,69566.68435,52.96708771,9875.037183,0
+348,44897.48837,51.35806105,5732.399032,0
+349,22572.30276,51.01624042,724.1931885,0
+350,37123.07964,19.9466845,5659.509278,1
+351,68744.78865,60.73005586,5207.883117,0
+352,21081.19418,52.38283326,2395.16535,0
+353,58828.29212,32.40292043,5947.645468,0
+354,46706.45886,18.83033629,7084.263509,1
+355,32312.85338,28.15532047,228.3308036,0
+356,60778.76502,43.01302298,10021.04922,0
+357,30948.04155,42.7513536,3995.807295,0
+358,60122.01157,62.90960494,7189.350735,0
+359,43321.68112,32.28625435,743.867141,0
+360,47904.34124,40.03927024,6183.514146,0
+361,58597.38325,53.28803374,2588.490266,0
+362,66091.90591,24.2041407,8743.509701,1
+363,47316.70138,27.06419772,1940.674044,0
+364,40872.63977,54.94806156,5312.491706,0
+365,35154.49348,52.89921324,4037.719604,0
+366,32222.81881,61.81061588,934.4771331,0
+367,40447.67296,22.49292385,1072.192659,0
+368,48463.20455,50.52642975,8120.25809,0
+369,42843.09913,28.63178613,839.869024,0
+370,50310.42244,53.03869686,8361.7191,0
+371,57565.19996,37.73785449,5353.561654,0
+372,55066.18297,55.7392007,9332.702666,0
+373,46065.94821,52.8386392,4947.308728,0
+374,38309.58566,55.4291345,3545.723971,0
+375,54472.14476,59.245985,10836.38309,0
+376,58695.0944,29.77440963,1826.516302,0
+377,54748.91231,31.59685864,5438.093693,0
+378,46328.17192,56.84083064,7879.676208,0
+379,49633.32747,38.98900889,7915.313443,0
+380,66339.78388,35.59190521,2350.891508,0
+381,62650.71966,33.48406627,6425.365364,0
+382,27646.78005,56.31166878,3132.148692,0
+383,21437.61575,45.73140049,2563.960873,0
+384,50648.19844,56.51730671,7110.755833,0
+385,29670.67184,53.55019966,2928.984088,0
+386,20258.53866,29.11553162,2767.8373,1
+387,34475.21797,42.30791846,3162.133837,0
+388,28926.43246,62.06525128,750.067107,0
+389,20660.66895,49.36388109,1756.037625,0
+390,24987.93409,49.06510864,3946.898246,0
+391,29672.56081,51.01980481,607.9094842,0
+392,23241.59989,40.84775603,457.1966172,0
+393,24217.22876,23.51076748,2104.384323,0
+394,65574.09334,23.51304252,3031.246326,0
+395,55994.45879,31.1392572,680.6196961,0
+396,67369.33212,57.63423984,2299.418172,0
+397,23305.77149,28.21752876,4521.004312,1
+398,35195.46635,49.6584056,2836.988178,0
+399,27135.07262,54.8364598,1387.248801,0
+400,24037.16514,23.31157432,2469.364426,0
+401,51625.31323,44.80884119,4592.24555,0
+402,50705.76626,53.20582216,1096.967075,0
+403,58079.1569,18.66302679,11540.04581,1
+404,62192.46707,46.0507889,1863.891003,0
+405,62553.66841,63.92497558,4641.704785,0
+406,68147.95732,22.98439448,12307.56232,1
+407,27619.66141,47.54050593,2774.832781,0
+408,65330.19284,28.58998731,4030.803692,0
+409,26680.14584,47.76173998,1671.184924,0
+410,46104.59891,51.05635889,2342.472921,0
+411,44904.59764,44.20668666,4953.773599,0
+412,52934.59443,50.40298165,3248.627718,0
+413,43509.75776,18.07533586,7363.037639,1
+414,22118.35733,63.01594669,3928.121846,0
+415,56275.41002,30.24987142,2224.88416,0
+416,48630.97953,27.02167736,5862.833029,1
+417,64272.7,37.77801477,4929.878818,0
+418,24349.00295,53.75252283,3890.47105,0
+419,34332.31526,36.5013709,1225.720223,0
+420,64940.24109,43.94104124,8196.930726,0
+421,30595.74801,40.91149463,3495.069881,0
+422,53422.21625,28.18853052,7441.759617,1
+423,69995.68558,52.71967321,2084.370861,0
+424,48270.79624,45.30585103,6232.280399,0
+425,27028.15559,48.10959467,331.3643087,0
+426,23519.86609,34.39370686,2368.381231,0
+427,37302.0834,35.01540389,2366.17424,0
+428,55601.27185,18.8429929,10533.45516,1
+429,62678.64545,25.83939413,333.4413981,0
+430,41602.43398,25.25986939,7005.079292,1
+431,27533.00133,46.76592846,1551.420288,0
+432,30594.17656,50.0438201,118.3421421,0
+433,47846.9459,24.41835729,3713.262688,0
+434,55273.275,25.41639103,10282.99745,1
+435,23086.25541,24.84996033,1256.40116,0
+436,29621.27488,32.45542329,5575.253691,1
+437,47533.92095,39.95519407,6637.770871,0
+438,62519.18418,44.40997496,2324.547705,0
+439,50878.95904,44.96512582,3257.012629,0
+440,58580.95951,56.62695134,4317.715478,0
+441,69445.64945,28.81827377,10643.40418,1
+442,60929.17235,60.05877767,11146.07446,0
+443,35496.6655,47.00274607,168.0547853,0
+444,33572.4235,57.44221936,3369.377023,0
+445,55306.91435,20.14031182,5272.535014,0
+446,34141.92764,47.15114867,3371.66431,0
+447,40453.89095,20.70989283,890.9395353,0
+448,69088.77742,53.93562663,11246.48815,0
+449,30885.6922,55.15075882,5216.354091,0
+450,58683.22632,24.8449593,271.7344685,0
+451,60675.81216,39.9639062,11617.74891,0
+452,68460.68003,35.77560039,949.9566247,0
+453,63653.83991,27.51536888,8866.527185,1
+454,42522.57576,18.32612216,5036.25528,0
+455,54140.42913,30.88889273,7896.223766,1
+456,47548.36262,47.83910014,6153.936564,0
+457,24114.01226,52.33581555,3900.829601,0
+458,20686.23909,33.28052356,3052.576691,1
+459,21412.30861,26.38271039,2639.710126,1
+460,69391.1466,63.80067091,2550.265147,0
+461,32319.26222,42.93199308,2733.420559,0
+462,52862.94714,47.33139712,9754.152239,0
+463,48383.27615,39.7047263,2763.263955,0
+464,36430.5384,38.22744175,5855.185594,0
+465,44268.89401,27.93317102,6043.143106,1
+466,63806.32925,56.6321662,114.4999674,0
+467,46195.77717,32.41359859,927.0675939,0
+468,23743.16077,42.73457772,3254.74895,0
+469,22089.83748,21.29670327,2584.022038,0
+470,54707.28851,44.23788146,10255.19011,0
+471,23203.64719,58.56887607,749.1453684,0
+472,25342.25068,40.36114009,871.5300911,0
+473,31645.63282,32.16327128,5193.838197,1
+474,32306.8084,21.90630584,3603.364078,0
+475,61262.81632,49.41303041,5564.163603,0
+476,26388.7273,19.37152054,1191.332138,0
+477,53009.42543,36.07447938,3589.253506,0
+478,58163.54068,58.7474847,2237.927764,0
+479,38665.03393,55.12592175,6152.004833,0
+480,25289.04722,53.34272481,3701.537602,0
+481,66049.93403,29.3157674,13172.6813,1
+482,56282.98253,62.3698886,8215.558384,0
+483,35778.61523,30.62820738,5544.654684,1
+484,29174.24031,18.52862799,665.5770001,0
+485,55934.43256,60.75524976,5643.179899,0
+486,32256.86152,20.09639947,2809.322185,0
+487,68052.80692,28.75880168,1415.718263,0
+488,26957.05387,55.26487741,4172.988238,0
+489,48685.04202,32.53325603,9698.582169,1
+490,38288.07108,28.73543162,1723.399373,0
+491,42468.02083,28.62581918,1902.26561,0
+492,55377.77303,46.91822152,6882.873416,0
+493,54231.70279,21.27421064,10156.14231,1
+494,53283.25871,49.00469291,4065.218795,0
+495,52534.78548,47.18361948,3810.131842,0
+496,47847.51563,26.65183777,8494.016431,1
+497,59998.25327,54.30892681,4659.535976,0
+498,58684.51301,31.73226475,5415.817417,0
+499,49114.78793,61.48152255,6388.85036,0
+500,57179.40201,21.37312158,2991.967351,0
+501,69395.11648,23.95138858,11047.68434,1
+502,43963.73801,41.55384223,4481.436861,0
+503,66326.47247,40.98032875,5602.160022,0
+504,35886.72684,34.66834878,843.749092,0
+505,35578.23411,42.394597,3640.848886,0
+506,48689.00043,36.56309217,3859.471823,0
+507,56510.83536,47.30828614,9255.439649,0
+508,50275.89996,41.81982332,5541.821255,0
+509,56665.49409,61.64512274,11159.79317,0
+510,42912.09054,60.58219753,4550.122853,0
+511,22169.72922,36.97071669,947.1996384,0
+512,35919.80732,27.30412443,1227.109484,0
+513,61987.68527,27.63108779,2618.243037,0
+514,30044.68352,49.77406378,1428.439625,0
+515,61528.27242,55.90302305,10897.90548,0
+516,31196.49177,47.17878489,987.2615366,0
+517,66003.95999,33.07351468,11207.49523,1
+518,56960.67384,25.51799914,4856.483454,0
+519,41315.10789,57.52009412,1378.909057,0
+520,64913.34384,26.76631122,9781.326722,1
+521,32804.90449,62.29439051,4961.25568,0
+522,25789.2098,26.49416967,2410.277414,0
+523,31908.35431,38.25251186,1857.461578,0
+524,56050.30258,23.97382954,6870.83901,1
+525,66505.77569,25.61824062,6571.197021,0
+526,57504.07174,55.71713443,8107.267645,0
+527,44619.11149,59.85248724,2474.977159,0
+528,21158.93529,54.30391261,3562.308296,0
+529,22765.19092,20.58742742,540.6177247,0
+530,25052.82026,45.57399348,3367.701923,0
+531,61006.1073,54.18129557,5850.770691,0
+532,62321.24247,45.8902828,10649.07205,0
+533,49604.54421,51.94400881,7045.919202,0
+534,48433.37349,28.53199734,789.6333613,0
+535,57590.28328,19.49710268,7676.310663,1
+536,62691.70137,25.06437924,8244.7489,1
+537,51121.65687,58.52718075,6471.628202,0
+538,22516.54035,55.51892667,4267.451902,0
+539,60857.23505,37.39428701,10486.74435,0
+540,62908.35748,51.14682721,3213.898146,0
+541,49665.63384,50.31921262,2713.885075,0
+542,65322.80107,41.45419509,2739.71999,0
+543,20598.92656,35.77115432,3872.402468,0
+544,55476.65698,52.0892028,4733.50583,0
+545,26218.49485,18.41623623,3343.816358,1
+546,40794.87023,38.04052822,6519.43706,0
+547,53719.65111,42.89010155,1670.737893,0
+548,20715.53563,27.53032143,369.5277394,0
+549,57163.8524,53.54481969,577.5307824,0
+550,33751.20531,25.30187719,6494.184336,1
+551,44832.56472,32.17826296,1256.253538,0
+552,51035.63346,58.99497729,2889.880195,0
+553,53493.48601,21.87474639,5030.8288,0
+554,58205.68,56.83783815,10035.60302,0
+555,47439.94076,22.34841947,7896.356942,1
+556,47586.22771,42.27500753,3343.056276,0
+557,26100.85126,62.31916468,960.1372514,0
+558,45326.40367,59.36251247,5142.110837,0
+559,24391.75623,47.0350985,2198.144889,0
+560,53741.37102,49.72943257,6513.150125,0
+561,40053.72227,27.93848013,44.5272461,0
+562,53033.86413,38.45755969,10427.4705,0
+563,25176.50201,53.54340881,3064.718488,0
+564,31210.84702,54.10490667,3853.088042,0
+565,23532.2763,59.63373699,1077.8404,0
+566,63776.77079,43.81065864,6697.971583,0
+567,52278.765,45.92897162,4269.136035,0
+568,56015.81322,32.50931024,2275.763425,0
+569,56110.93994,62.82941483,9351.006131,0
+570,57856.80823,33.68215095,8824.164747,1
+571,30187.09186,28.15508425,4462.823258,1
+572,30786.87193,47.06810554,3563.319789,0
+573,22279.29977,58.90732761,3141.338536,0
+574,42476.26553,46.43822313,8334.182008,0
+575,58147.79986,34.05864485,3951.189747,0
+576,36266.21187,55.54236272,3206.927665,0
+577,39045.49716,27.43322056,1165.492158,0
+578,64467.80368,63.40058921,521.5757014,0
+579,36594.80667,60.91256134,3492.334022,0
+580,58797.76286,53.40343367,8892.963303,0
+581,66653.27093,19.88705308,5180.71186,0
+582,48271.49838,21.66234102,6077.680287,1
+583,30991.43192,34.01002602,4589.267265,1
+584,45446.51834,19.30469183,8474.982464,1
+585,37142.73889,50.30304299,161.2375511,0
+586,58320.80889,20.25760534,10033.49168,1
+587,24825.54068,54.8174662,3650.196352,0
+588,20511.42944,27.19626825,931.7900744,0
+589,48326.32089,35.65219864,7168.707002,0
+590,55441.35879,48.05859911,10768.74784,0
+591,60496.90792,33.94567162,1115.154587,0
+592,25296.15423,44.35608995,1320.462443,0
+593,50414.32032,56.19400321,2468.171999,0
+594,67984.04038,27.46528093,1642.969471,0
+595,50382.39977,57.09693649,9183.842295,0
+596,49413.29854,18.64785258,2554.044352,0
+597,61464.82064,36.40826631,5099.08746,0
+598,53784.04957,24.39355435,2761.85138,0
+599,35993.28793,41.8750019,901.9277107,0
+600,63402.00468,47.22342889,7530.767633,0
+601,40484.97132,39.28143317,1093.679203,0
+602,26168.01227,41.94116976,3040.98135,0
+603,60044.28152,61.31265439,6823.434443,0
+604,23984.55095,51.14126769,4622.275198,0
+605,40359.70119,32.24500797,1783.697326,0
+606,33583.89108,62.13075546,1251.867366,0
+607,68038.79202,62.94812935,10108.79585,0
+608,45652.05927,53.674341,5408.212129,0
+609,34399.20978,31.764889,6019.834423,1
+610,57628.43892,23.98656393,5021.639683,0
+611,24294.67689,22.26309561,4360.053009,1
+612,52218.88251,37.54275677,9792.091531,0
+613,50061.76774,55.36104188,6145.131817,0
+614,49352.27422,57.54215563,3362.774486,0
+615,21087.35554,49.31063445,3353.693571,0
+616,23812.25268,42.76555932,2716.655819,0
+617,49395.16649,41.08490913,5927.574676,0
+618,33338.94399,46.59851354,2929.851424,0
+619,29668.32072,38.6837404,2042.436463,0
+620,45936.5972,41.99401029,8525.231909,0
+621,55948.06772,40.30301538,8569.220573,0
+622,53239.50071,63.51511514,4606.156805,0
+623,43694.03444,49.51503554,5049.635509,0
+624,24078.0725,38.49162835,3276.139948,0
+625,50258.55302,22.54284077,1086.246165,0
+626,41816.65683,48.91721362,4534.575973,0
+627,36892.71622,54.44842476,6463.647751,0
+628,23886.56761,34.44297279,4440.419617,1
+629,48757.76505,23.07603499,1833.581051,0
+630,34601.68266,33.85052236,2430.101618,0
+631,52986.00455,50.42376288,4928.607034,0
+632,50740.95102,21.72135886,784.5773121,0
+633,53096.9914,36.35007538,2663.052609,0
+634,38500.00065,53.93069108,7571.682318,0
+635,41004.26236,55.84909201,1016.141008,0
+636,63585.36459,49.33992697,1594.972682,0
+637,31823.68106,30.98355705,2290.430342,0
+638,26242.63362,32.59683185,1801.228195,0
+639,63531.24599,19.32910789,6917.508435,0
+640,64751.14654,53.63820349,2289.851251,0
+641,31091.2763,50.89554304,4071.083034,0
+642,66871.26736,62.68936364,3614.268185,0
+643,25098.65283,51.64706285,2611.848092,0
+644,33720.58922,47.24662629,1365.952209,0
+645,28182.52329,25.52961036,2285.956538,0
+646,27334.56971,42.67119449,2963.794432,0
+647,68694.84318,23.08141739,12731.89464,1
+648,46195.62167,26.62719845,2888.633728,0
+649,34488.20985,27.13153021,2156.314406,0
+650,57827.6631,23.97296825,10816.75901,1
+651,20346.46905,35.71607365,656.0331879,0
+652,60480.9758,53.42868783,3216.094541,0
+653,51915.67978,44.10910349,2282.911022,0
+654,54625.50698,31.69645567,8619.745177,1
+655,48305.42709,55.2125357,4833.47747,0
+656,28577.96451,21.42016018,1639.225639,0
+657,53400.82701,58.08168841,10418.19298,0
+658,43414.48789,44.45336282,7170.946724,0
+659,47526.23413,57.21959192,8957.330544,0
+660,46082.07216,55.15846717,2921.235379,0
+661,32195.59252,62.20165852,4980.013585,0
+662,49067.09129,60.54459807,7258.968492,0
+663,21293.47713,42.40494033,1368.691922,0
+664,52100.91739,23.18144363,4767.277192,0
+665,48334.38778,53.36775446,2234.443137,0
+666,58507.62355,48.97744804,694.1351678,0
+667,27521.04034,35.08659729,2699.851346,0
+668,63914.22537,26.34974189,139.3145719,0
+669,28598.83265,52.53369854,524.2010921,0
+670,23298.46675,48.65145986,1741.183919,0
+671,35697.55414,51.38821886,2907.958272,0
+672,40376.16358,38.92128904,3901.937984,0
+673,56534.96684,27.80794148,2161.083752,0
+674,36088.93861,41.71775901,6222.415273,0
+675,34158.63397,29.42114243,2911.408067,0
+676,29732.05762,38.87671243,3485.018026,0
+677,41736.20154,34.59649188,7602.613055,1
+678,42236.45609,24.6867331,4749.068675,0
+679,28796.85084,44.62864841,706.2289942,0
+680,55097.38848,33.92942424,9342.479427,1
+681,40916.56415,48.31974071,5219.804028,0
+682,20908.3351,28.81852198,3133.624447,1
+683,57999.77239,62.77011063,859.5892942,0
+684,57746.58159,63.62530548,727.194665,0
+685,55116.23451,41.46888524,10284.60679,0
+686,57765.52116,43.88730905,5445.22266,0
+687,45200.9928,43.90542902,7335.962568,0
+688,42435.18949,51.48952681,2766.280914,0
+689,46365.57352,41.85261305,5443.276307,0
+690,57187.70089,59.47191821,9390.672261,0
+691,66539.9276,57.70555929,12129.08223,0
+692,25244.7267,53.3790106,1278.999504,0
+693,54780.34561,61.38897114,8134.220408,0
+694,59253.12146,36.92041154,7327.283577,0
+695,48540.34154,21.23915762,1012.934993,0
+696,30415.10508,22.98363585,4362.083152,1
+697,48768.69924,25.92502563,500.5991056,0
+698,52299.21808,18.30974563,7880.685807,1
+699,42242.48912,34.22076686,2070.379381,0
+700,28218.96527,42.62439388,1305.082433,0
+701,40208.13186,61.37191328,459.0346888,0
+702,61419.67284,30.65182339,9921.672387,1
+703,51282.50524,26.55138677,8445.385343,1
+704,36017.90275,43.5236232,1526.392476,0
+705,57575.00979,33.80013512,9857.22995,1
+706,53330.76714,42.3772463,2343.497556,0
+707,39834.51984,63.31227526,699.9557764,0
+708,62469.42837,24.26485536,7286.550391,0
+709,40334.61673,45.88654158,6808.869955,0
+710,47542.8027,40.87333755,9448.209721,0
+711,55883.62286,27.37033802,974.5630674,0
+712,29163.01588,43.95617132,1469.129704,0
+713,47786.14106,29.7081893,7181.478553,1
+714,29736.3105,35.29839844,657.0484089,0
+715,50831.42753,24.35160252,9572.586884,1
+716,62030.046,46.53578454,7572.567589,0
+717,54049.01274,54.62035318,4569.647911,0
+718,34336.01759,35.83065171,3441.644524,0
+719,31895.71531,48.18590728,3423.346172,0
+720,51894.5401,59.0037683,6579.534007,0
+721,37616.71086,53.44466025,5732.240108,0
+722,22076.948,56.99543936,3948.143344,0
+723,56252.95371,57.27829057,7327.070282,0
+724,26316.75849,37.217654,923.0284413,0
+725,23120.87961,40.29672232,1417.846522,0
+726,39033.03271,59.67702219,5757.890479,0
+727,32420.81815,32.36179216,1494.212974,0
+728,68827.24433,25.30253079,1049.175477,0
+729,58092.20489,41.81365235,5277.74042,0
+730,43538.85612,46.32941211,8523.901116,0
+731,64040.48418,59.14480741,5408.727767,0
+732,34395.22922,25.54822433,2089.7325,0
+733,57405.51493,45.64443499,6914.75154,0
+734,22581.13397,40.54886181,34.28510582,0
+735,27952.94598,42.09749811,3965.251974,0
+736,54022.91284,26.5610123,10641.45144,1
+737,63546.16476,44.41273214,6170.239116,0
+738,60713.4303,56.03160353,396.2336776,0
+739,44519.32947,32.39165985,1446.468103,0
+740,40997.79899,55.58120391,7908.331843,0
+741,63661.38333,25.59552438,6095.308749,0
+742,34429.14674,39.7149896,2240.277404,0
+743,29181.86143,48.24064781,2529.612969,0
+744,52510.43824,40.27914024,1858.30824,0
+745,37536.34724,25.85667757,2634.358585,0
+746,35683.74495,44.49787917,4337.825559,0
+747,45622.29071,41.63254532,528.1812501,0
+748,67385.40318,29.03367936,6747.232379,0
+749,69411.79253,47.07372685,12176.78244,0
+750,48322.51407,29.26263398,7732.696396,1
+751,40836.58881,22.16826291,6994.487801,1
+752,38035.95133,60.65521047,4298.705028,0
+753,42696.97137,44.52967068,222.1964386,0
+754,24181.69479,22.30012538,1529.018868,0
+755,33194.40264,51.17971212,6615.387858,0
+756,32541.46153,34.40508616,780.8328568,0
+757,38381.41306,54.08337144,322.7241556,0
+758,25921.91253,58.42607932,5104.746789,0
+759,58810.97173,22.10938059,9099.724338,1
+760,63025.74408,56.56693154,2956.977746,0
+761,29954.00451,61.83684471,5774.07427,0
+762,40641.52302,37.66419864,5042.326368,0
+763,43940.9107,38.30598195,2855.379187,0
+764,65166.97287,25.65628186,8859.087469,1
+765,58820.38206,30.75231565,530.6578241,0
+766,50719.76308,43.20724465,4770.937668,0
+767,46766.59592,47.77517095,2383.407757,0
+768,67520.7596,45.41562414,13041.77945,0
+769,28386.25355,31.12533241,1718.943782,0
+770,68276.03076,34.51488127,4842.07796,0
+771,30731.72628,40.38884294,1129.562412,0
+772,30012.25109,54.94011866,3972.151405,0
+773,38075.31877,53.10735995,6928.943621,0
+774,55932.39657,44.39262234,4876.366909,0
+775,27966.24445,53.70027324,4445.203178,0
+776,53825.53674,49.71390438,5272.804792,0
+777,65451.49652,60.27638934,8129.048931,0
+778,39473.99586,42.30125384,6034.153228,0
+779,42344.80871,47.41810839,6800.246806,0
+780,36112.87441,60.5793527,3737.212187,0
+781,32720.5048,33.80450352,4367.26495,1
+782,27973.82656,49.67421964,403.4021354,0
+783,21306.03312,35.09416354,3791.023528,0
+784,36029.30158,52.64062442,2928.100439,0
+785,48457.96355,22.34492363,8108.172683,1
+786,46038.51066,39.03867278,6868.987805,0
+787,34247.15902,34.70098954,6458.790585,1
+788,64247.615,31.60316207,4513.203694,0
+789,62109.76709,41.24090602,2816.430158,0
+790,21481.80379,19.95945231,1137.657891,0
+791,20762.47447,25.32912274,2385.224837,0
+792,33756.52723,40.56759555,1169.835925,0
+793,54325.80727,29.63636931,6978.525057,1
+794,33197.8078,59.48684823,3993.146866,0
+795,56846.47423,30.28092755,5268.227475,0
+796,26542.93109,45.82942652,4233.089586,0
+797,53200.54815,59.6917193,3090.473119,0
+798,38073.4069,32.21450809,2284.005677,0
+799,43937.21904,56.40968222,3213.541963,0
+800,49284.81941,51.93972912,493.589997,0
+801,22869.32345,25.9064452,527.5515684,0
+802,60113.34254,40.77430558,8253.384569,0
+803,23613.25569,32.4735058,2469.234585,0
+804,68755.09442,53.22813215,10990.53375,0
+805,26449.32829,46.47915325,2952.123152,0
+806,42855.41611,47.12736998,4923.814846,0
+807,25686.77894,35.85071487,3728.397031,0
+808,67125.64924,36.05850519,7482.067369,0
+809,27427.78945,59.70451918,719.9466646,0
+810,37145.57306,53.19827894,1510.735507,0
+811,41702.60077,41.94405372,6105.727929,0
+812,20710.77596,49.55726981,3960.710873,0
+813,39124.16436,44.5571086,401.3267334,0
+814,32834.64674,60.58021867,4184.578203,0
+815,26267.2214,58.79376696,1136.117271,0
+816,41254.2282,28.94820475,6993.049441,1
+817,38268.6966,30.67684984,2522.057185,0
+818,37087.26876,57.5763008,6391.153194,0
+819,38458.13304,55.85685407,3644.30607,0
+820,40185.77567,31.00076808,1002.340574,0
+821,65481.94555,45.03857624,10614.24849,0
+822,57426.68048,20.1188451,2461.974406,0
+823,47903.31425,46.16901477,4283.226974,0
+824,34222.18775,52.24667845,3582.151364,0
+825,28481.2656,47.42132836,5302.179943,0
+826,43069.65215,41.24003469,4091.561292,0
+827,33093.96186,33.40317391,3852.992444,0
+828,61363.85606,62.13637386,9636.804731,0
+829,68100.73562,47.75294027,8124.59898,0
+830,50551.48034,56.7655671,5262.616088,0
+831,54421.05401,22.96153355,6229.836019,0
+832,32152.45974,57.48695513,3550.584889,0
+833,40230.97571,58.79409568,745.1947491,0
+834,53483.374,29.18999789,1459.668599,0
+835,65137.93776,42.13310957,10352.18177,0
+836,29496.59413,54.66582086,2216.975334,0
+837,45181.93371,48.0968023,2243.153992,0
+838,24994.7782,34.72335974,51.64026024,0
+839,54820.97401,20.56039647,10070.94905,1
+840,62955.60829,29.54950978,207.5438178,0
+841,52956.24608,25.14710192,959.0972148,0
+842,40366.20324,32.07200804,7410.792024,1
+843,60005.01013,40.19488899,10677.66802,0
+844,37598.38508,54.66392931,3641.808411,0
+845,61323.0009,60.16601647,8699.946682,0
+846,21243.9323,57.86806022,3438.979277,0
+847,62111.43441,25.97645859,499.2085782,0
+848,56524.87881,54.91097151,5296.940273,0
+849,51718.13696,34.35049974,1036.616804,0
+850,43205.63175,23.12587725,4835.274657,0
+851,26934.19744,35.9790102,4113.299167,0
+852,68966.82256,54.39248814,6690.635338,0
+853,31527.3472,59.02264656,2062.719158,0
+854,46839.06109,28.73335871,1498.200316,0
+855,32151.29686,42.91491157,4601.940086,0
+856,40831.80192,47.1495458,6429.593688,0
+857,30868.80482,58.13656775,4618.392184,0
+858,62988.82643,32.47461294,6924.901569,0
+859,65496.76748,61.95993475,11805.55577,0
+860,63032.62627,24.78843756,390.3358609,0
+861,27287.07454,18.69579873,4509.881422,1
+862,44299.37174,24.37145815,5154.909843,0
+863,44091.34923,30.48523032,1664.104927,0
+864,26617.03032,28.61650924,2727.241681,0
+865,21856.23353,47.72276785,1500.653745,0
+866,28072.60436,54.14254823,1.377629593,0
+867,35950.48845,35.47184697,2664.925675,0
+868,28982.11236,35.26825118,1440.499168,0
+869,51790.72645,41.15087779,1281.035729,0
+870,65000.81962,21.69969953,1114.914824,0
+871,29761.04601,21.85429135,3748.258124,1
+872,23081.45074,53.89681841,257.6612015,0
+873,60016.74099,22.73860251,1522.646768,0
+874,54619.15536,53.59786282,901.2777768,0
+875,66274.2081,36.37462344,10257.91839,0
+876,49380.65863,45.47104991,5425.280945,0
+877,46283.06746,48.28858511,2166.1231,0
+878,25554.69852,42.79692147,4229.914353,0
+879,36680.18192,22.14626261,4849.333785,1
+880,30383.67633,46.8319496,2153.607725,0
+881,67730.4437,26.30314698,8881.583636,1
+882,36446.72414,40.61685061,2927.675444,0
+883,33648.73899,60.97094456,1498.161255,0
+884,53852.79954,42.78285555,2089.909464,0
+885,61298.21867,48.28503024,9399.504602,0
+886,69465.74696,20.58523169,7983.705373,0
+887,39102.04171,29.30086538,4200.697505,0
+888,29366.58233,22.48404853,4049.253865,1
+889,67949.73807,34.47967882,1790.348617,0
+890,29468.85918,22.78963669,3703.953047,1
+891,56839.4019,36.55239093,9004.801714,0
+892,38277.93687,44.90919805,7405.80321,0
+893,49664.27072,39.94416069,5571.456364,0
+894,49972.01083,32.39698399,763.9541159,0
+895,27356.80095,63.48787362,2983.583322,0
+896,36840.60366,36.67458349,6557.940331,0
+897,51438.81407,46.01234316,6898.783719,0
+898,40614.72205,20.93267159,2649.695356,0
+899,56738.63732,63.37394217,3210.807048,0
+900,68004.68622,41.53109727,2698.047781,0
+901,44458.63729,52.08290527,1456.234944,0
+902,66801.19751,19.13513823,288.6467693,0
+903,48991.85368,18.6213071,7453.264268,1
+904,69430.93662,58.94091428,2648.220452,0
+905,27989.1111,27.80092017,1770.818279,0
+906,67675.80477,37.74039569,4396.076877,0
+907,47985.72247,33.55977398,8801.610127,1
+908,43388.20947,35.70435679,7007.154253,0
+909,63182.45567,25.58638213,3493.224567,0
+910,20568.89131,25.85385679,2257.064782,0
+911,25833.71723,19.20759964,3716.254685,1
+912,23087.3014,37.61963726,423.4183995,0
+913,36124.71783,25.05472696,6485.05748,1
+914,57330.61941,44.4456513,1058.039202,0
+915,47240.25312,55.00972136,4286.345614,0
+916,55730.62923,55.15643796,9286.357545,0
+917,61660.40132,48.89875823,1684.526564,0
+918,49746.88744,29.36146193,7354.129523,1
+919,23973.68759,55.28829775,95.46072238,0
+920,28085.4796,45.03212598,4431.280471,0
+921,33585.47474,60.37738544,3933.883012,0
+922,44179.3851,51.30649189,5888.375781,0
+923,56025.41973,29.39644446,4341.626699,0
+924,49369.70415,51.37341727,109.3796228,0
+925,26889.36474,62.62510846,675.7120311,0
+926,30873.21764,38.95273955,4076.87675,0
+927,30608.94324,46.47670398,2632.551811,0
+928,54878.08965,42.88355929,1504.473462,0
+929,32423.80685,63.18998659,2961.952368,0
+930,46608.36902,20.40499151,1521.868405,0
+931,65689.1897,28.10870743,255.072656,0
+932,49054.86027,54.06866362,1102.240361,0
+933,20310.57756,54.26474774,1279.113098,0
+934,66423.39933,18.87435711,1066.214601,0
+935,45783.15475,63.88504374,7492.90982,0
+936,62887.76267,42.8418414,6849.484223,0
+937,51088.21078,52.08587159,9097.112036,0
+938,66217.94485,19.08162361,745.0760945,0
+939,62799.75061,35.36149204,6752.586071,0
+940,45789.48752,36.29805129,4545.157459,0
+941,59727.40599,50.24148795,5203.325181,0
+942,35513.58955,60.80701767,6983.360741,0
+943,29178.97759,63.93073469,1664.386062,0
+944,67501.69225,49.63745902,7589.75999,0
+945,66255.02953,28.96002495,7475.212282,0
+946,63558.86409,36.35685466,9282.927735,0
+947,63441.71236,18.67128938,3119.412678,0
+948,64983.15424,27.29197161,9109.774342,1
+949,56946.64594,55.40901375,11175.84107,0
+950,52349.87246,35.52249918,5181.848501,0
+951,31473.45878,27.99340911,797.3459721,0
+952,59267.3392,34.91269907,5085.311919,0
+953,66809.17325,31.05454812,1316.187128,0
+954,48083.31155,39.15730598,9193.095264,0
+955,20629.3473,28.30686155,3310.410118,1
+956,25363.33106,31.39079116,3946.001447,1
+957,28873.67417,62.3285863,2224.469765,0
+958,41430.85526,33.68956136,5719.278116,1
+959,53612.13123,23.28296645,5976.896568,0
+960,51555.74026,57.26359177,9217.688669,0
+961,46564.3789,50.65129969,599.830324,0
+962,61200.42748,19.22777832,406.8518612,0
+963,29307.32077,61.16495696,481.8426971,0
+964,67687.18308,20.8043048,10506.32803,1
+965,52565.06574,55.69652935,372.9742533,0
+966,52920.14801,20.99096653,9521.769942,1
+967,34981.36783,23.48770889,5502.736031,1
+968,65210.8371,27.52843972,12607.95166,1
+969,60016.07961,54.31724029,2857.007414,0
+970,23066.96468,33.091353,1933.353568,0
+971,52603.87864,43.89546653,2043.089553,0
+972,20111.36326,53.49539456,1745.371922,0
+973,32759.70028,43.88045936,5211.32563,0
+974,30578.02016,55.36616174,3010.35024,0
+975,21211.58939,32.65119825,931.7810522,0
+976,53746.32658,29.35028859,9534.660206,1
+977,45214.10922,18.2999804,1779.727735,0
+978,58465.0497,20.12688854,11417.06009,1
+979,54422.97349,58.57139504,444.6137769,0
+980,62842.06439,62.19707882,107.5972315,0
+981,53005.13229,45.68722047,2539.336749,0
+982,40749.02818,26.85401291,6207.186165,1
+983,49804.41083,20.03986423,7235.194717,1
+984,37277.24612,26.63314682,6289.256076,1
+985,46883.20654,30.39988989,6342.567909,1
+986,31763.3692,35.60251728,3489.404122,0
+987,61013.18158,24.70761897,1791.542962,0
+988,41285.3589,22.91107059,532.1002558,0
+989,39133.89186,21.60323147,433.4584179,0
+990,62171.80256,24.2437831,1035.462496,0
+991,53638.64595,44.02737436,109.4788536,0
+992,49264.58489,58.11954711,3051.574267,0
+993,63114.49699,48.35108283,11890.75719,0
+994,58165.50622,45.72915357,4155.723767,0
+995,43029.80326,27.21015742,6894.165381,1
+996,21593.62266,51.54892278,458.0937244,0
+997,49104.76824,35.53851733,9452.217947,0
+998,65776.23241,39.79819134,2805.863745,0
+999,36192.14945,21.40240262,7236.17393,1
+1000,62165.86119,19.6025431,4739.948954,0
+1001,50793.35572,41.60188645,421.6403796,0
+1002,62422.20379,32.14522141,2841.633423,0
+1003,63166.99496,56.51003993,4058.789534,0
+1004,23717.56785,49.32576952,1530.090242,0
+1005,66797.66467,21.38042855,11921.19954,1
+1006,30272.20362,19.13244649,1440.072549,0
+1007,55741.19569,52.62685289,3181.780519,0
+1008,30742.57971,26.44933684,5685.653641,1
+1009,20491.56433,35.13483691,1579.168249,0
+1010,35620.41863,40.82467405,3611.295903,0
+1011,50206.13372,33.03111152,5826.462898,0
+1012,67935.45387,60.9422627,8267.326053,0
+1013,59223.3966,22.93963515,3901.402085,0
+1014,32657.26868,32.81218796,1796.270503,0
+1015,55931.65458,23.44133307,4053.519938,0
+1016,23694.77887,22.86428448,764.29719,0
+1017,44324.28637,23.18086641,2672.692026,0
+1018,34735.49175,62.35895581,1402.217854,0
+1019,67064.34474,22.58360992,1091.624816,0
+1020,42761.49268,45.04937391,610.6578471,0
+1021,49517.72233,31.5493175,7337.950431,1
+1022,54372.18266,29.97711781,839.1250812,0
+1023,29941.96837,48.35844947,3170.045654,0
+1024,68414.12078,51.04678129,6154.052457,0
+1025,23891.24457,51.02920468,3475.905423,0
+1026,47187.57155,24.22704766,7933.469449,1
+1027,39819.92094,63.38479701,3577.44769,0
+1028,50632.27924,53.62329948,1262.356066,0
+1029,39970.21125,40.36811516,7867.616836,0
+1030,55176.1396,49.4559101,7822.936091,0
+1031,50533.57195,56.63106428,117.7125869,0
+1032,52983.87446,42.58806976,5567.941087,0
+1033,31187.66993,30.99961612,593.1247798,0
+1034,34909.98223,25.56874133,2852.371795,0
+1035,53810.84766,51.43297298,9154.477015,0
+1036,55478.96737,53.76292004,6227.541774,0
+1037,60394.09487,57.68642247,8293.576747,0
+1038,36845.73868,51.93947954,1790.013566,0
+1039,60264.94065,54.72136343,2241.388144,0
+1040,52981.5086,18.30621644,3759.937234,0
+1041,50222.76242,21.42271292,8734.740617,1
+1042,59256.55596,38.57894462,9812.978717,0
+1043,43203.41422,40.90172418,7730.727575,0
+1044,46288.75641,23.59003818,6053.791581,1
+1045,58176.15493,52.17576009,9852.14111,0
+1046,25631.43473,47.63557696,4778.700543,0
+1047,58977.99765,30.33098269,9442.01161,1
+1048,25048.01599,54.65677518,2341.367858,0
+1049,33436.48901,34.66914689,5473.985551,1
+1050,23787.36705,36.3117126,3041.552908,0
+1051,69456.56777,48.05355678,13190.36589,0
+1052,65447.61161,39.63135194,3269.534327,0
+1053,68743.35318,56.38525158,2290.204289,0
+1054,36052.5776,49.49996087,2830.179862,0
+1055,24820.79247,38.24401685,51.94924278,0
+1056,26046.38417,54.62546358,4669.457353,0
+1057,60850.80244,59.99025632,7206.852593,0
+1058,69929.011,51.39444845,12427.8357,0
+1059,53298.49615,56.90970733,2106.709791,0
+1060,48818.38232,49.29612194,2312.421777,0
+1061,38042.08416,32.83899402,3495.856306,0
+1062,42119.82271,60.06420183,1930.566532,0
+1063,62247.87974,39.22965562,1870.715089,0
+1064,62252.08816,28.24617586,1699.680972,0
+1065,36973.08569,38.28030326,4144.448144,0
+1066,54217.23678,26.62937737,8836.775689,1
+1067,44218.76632,58.57925853,1693.920179,0
+1068,33274.05027,23.95343526,2244.883109,0
+1069,54656.54904,18.39382955,9911.134963,1
+1070,67593.51708,25.40544564,9864.078027,1
+1071,39472.70725,42.60886077,596.4811795,0
+1072,30572.44686,48.65184248,1847.09425,0
+1073,50447.69963,58.09854003,2443.768915,0
+1074,49198.65266,49.1924227,483.6201677,0
+1075,53768.22821,25.37750388,3696.953244,0
+1076,52809.54629,61.01331918,6276.830737,0
+1077,38011.72665,19.05789168,4625.193378,1
+1078,58910.29177,31.01396195,3671.923094,0
+1079,57914.73107,50.61159971,6715.857908,0
+1080,39494.76692,28.5471422,3544.156039,0
+1081,45918.87525,38.64211962,1910.329531,0
+1082,55649.05588,19.66450149,7660.346171,1
+1083,27136.6288,18.83362032,2253.190253,0
+1084,62724.63612,39.83537661,9255.137755,0
+1085,32921.84858,43.73305267,2553.212778,0
+1086,28482.64955,19.78378813,329.4500422,0
+1087,44170.22174,24.47037064,2168.751735,0
+1088,60664.3716,22.36445737,5873.410979,0
+1089,64501.93043,33.3579469,12147.31422,1
+1090,28237.51739,50.01555209,2728.189944,0
+1091,67420.59545,21.18529406,3668.994784,0
+1092,55642.99339,38.91090684,2841.697982,0
+1093,56086.05809,34.57920217,3990.85076,0
+1094,57676.73918,20.66561699,10504.66817,1
+1095,62535.63285,39.19407554,9490.26419,0
+1096,60686.76857,48.39930849,10614.13095,0
+1097,25032.30094,46.31058897,680.9047822,0
+1098,22228.34529,33.35945709,2187.213337,0
+1099,41435.15375,34.92571649,3702.171428,0
+1100,43955.4094,51.55828607,7833.477761,0
+1101,60063.69309,59.11464434,6766.294181,0
+1102,34635.74475,18.9473467,4859.235287,1
+1103,63944.32373,32.5243454,12213.94934,1
+1104,35403.42733,34.64541582,2929.359704,0
+1105,53654.07937,44.13723421,6587.775556,0
+1106,23508.23073,52.64034902,4622.841065,0
+1107,61869.46603,36.22730418,1040.493673,0
+1108,20674.89708,23.99988287,299.8251378,0
+1109,22127.92411,61.18878265,1777.828551,0
+1110,27408.72961,37.69173185,2591.028947,0
+1111,60720.7961,38.82036029,3278.179727,0
+1112,34760.01932,34.26030186,28.88253444,0
+1113,23057.36392,46.97181129,2487.165182,0
+1114,42380.99506,35.71681219,6832.684817,0
+1115,37887.54939,24.4157261,5061.777831,1
+1116,39988.74074,54.26870557,357.0881242,0
+1117,25026.50564,62.90692234,3845.741849,0
+1118,43588.08143,40.49564678,6453.057979,0
+1119,20897.42669,28.0293199,2940.42397,1
+1120,24904.62467,53.3197898,3376.907465,0
+1121,66068.63504,35.91878387,5626.86934,0
+1122,36126.23109,40.70791186,3805.802721,0
+1123,23626.72679,34.29335345,2173.76769,0
+1124,30200.24326,62.78257014,4871.677576,0
+1125,65569.78524,62.23215892,12494.26726,0
+1126,20617.26101,46.51750698,2224.068134,0
+1127,25817.45462,21.63047036,3682.861931,1
+1128,21448.82799,31.79518831,1989.182976,0
+1129,69370.17764,52.3746293,4605.918773,0
+1130,34145.79955,31.40079893,4074.952591,0
+1131,52651.25686,57.32024618,6529.019522,0
+1132,40069.33838,43.31346189,3646.051618,0
+1133,39246.54489,48.32205561,919.11464,0
+1134,56233.78954,57.99108565,9642.092538,0
+1135,49264.26833,19.00652627,801.779606,0
+1136,30451.63616,42.19713668,475.4205917,0
+1137,28726.9963,34.75143776,3675.833415,1
+1138,20113.25349,30.13257556,2507.64971,1
+1139,43434.77543,52.20588011,3672.109828,0
+1140,59208.71608,30.93115193,11479.43781,1
+1141,69310.95727,42.11060918,1590.325804,0
+1142,60567.42444,40.04122249,571.9329349,0
+1143,22048.89504,53.7982525,4199.024356,0
+1144,66733.71025,52.97784361,5366.640793,0
+1145,22209.00951,22.00626001,4096.783714,1
+1146,49032.66241,54.5560719,1777.953131,0
+1147,26558.36106,57.83336484,22.32793318,0
+1148,49255.45797,36.61814758,4951.915771,0
+1149,30218.15123,48.02147268,5914.516662,0
+1150,56317.08282,24.6534823,8045.440953,1
+1151,53825.43058,45.35669022,431.4501612,0
+1152,34927.99361,54.15294718,1957.057929,0
+1153,53287.38502,59.55992485,4432.665444,0
+1154,32032.55674,50.11743705,4582.938274,0
+1155,48405.72681,47.93288261,3766.614435,0
+1156,46132.91405,26.90939873,3216.491255,0
+1157,29049.07149,57.78255455,2562.695554,0
+1158,68550.68786,19.36118878,3879.672652,0
+1159,47474.8196,37.87464495,5083.728272,0
+1160,50021.65541,23.81667911,1054.268085,0
+1161,64089.13191,37.31044758,6272.78845,0
+1162,28451.70557,41.60107543,1042.850376,0
+1163,58132.47127,29.38094985,5491.035602,0
+1164,30961.16614,32.11428662,162.7955961,0
+1165,64162.64961,53.85556307,6938.01252,0
+1166,67470.11702,52.23263736,12715.29472,0
+1167,68263.76624,42.64295351,4124.330404,0
+1168,42889.33416,57.50669619,6340.708855,0
+1169,20155.79236,41.92236196,3489.957148,0
+1170,58178.61457,49.69279455,10948.49949,0
+1171,45735.45569,52.82103724,2944.537354,0
+1172,30037.20313,38.68492023,1247.012791,0
+1173,64392.51221,37.80218224,4513.243712,0
+1174,26291.3758,52.40154262,1094.177529,0
+1175,36008.381,20.62621639,3709.304431,0
+1176,54953.97966,44.69223602,365.6461852,0
+1177,28753.32549,49.40348027,4990.369091,0
+1178,41993.98432,36.19281642,6644.344214,0
+1179,56696.4586,57.52025339,9686.630307,0
+1180,51906.04616,36.5730408,10235.27261,0
+1181,30939.39338,47.8934448,6115.822333,0
+1182,38520.72397,56.67372097,4176.949955,0
+1183,33489.03986,25.97104402,3581.655047,0
+1184,52836.00643,38.25136318,5671.644328,0
+1185,51733.28751,24.91495145,7906.141179,1
+1186,41273.7715,32.09039538,3299.885072,0
+1187,68223.68431,28.99041509,7364.001945,0
+1188,28222.87891,40.33136779,613.2406201,0
+1189,21921.36108,62.3272301,1901.143922,0
+1190,38852.93302,27.05029416,7513.182864,1
+1191,59621.36764,54.15061886,7014.622708,0
+1192,41377.7456,45.86166157,5324.048185,0
+1193,54405.62497,57.1412841,6253.206677,0
+1194,60103.01157,56.05377209,2632.265613,0
+1195,67528.65421,52.88850155,7877.415131,0
+1196,61156.93738,31.80242595,3250.006084,0
+1197,42955.6946,45.41622917,2962.825186,0
+1198,46923.04677,36.3395338,3107.883782,0
+1199,24951.25749,62.04114048,2544.356003,0
+1200,26267.52942,34.49638622,59.46916335,0
+1201,64603.92088,33.06183178,11264.69116,1
+1202,34667.0204,18.85318928,2827.289402,0
+1203,66008.39707,19.42742577,9189.611514,1
+1204,45840.20762,32.27027963,5299.239719,0
+1205,32188.01624,49.42886416,4659.953325,0
+1206,50289.66475,24.0740542,6127.381688,1
+1207,36837.53085,54.72850399,1598.183569,0
+1208,28852.03381,44.21152393,5705.986163,0
+1209,68127.16681,47.9523112,12099.9703,0
+1210,41349.12251,53.85620698,8083.232201,0
+1211,69132.46258,33.47118164,7621.410219,0
+1212,38477.3256,27.34633178,289.576582,0
+1213,68291.15365,46.79353807,9577.955143,0
+1214,58074.60654,59.79866948,8551.259893,0
+1215,26867.10826,32.62229962,1730.151907,0
+1216,32348.45015,59.75238657,3229.820063,0
+1217,31044.39176,49.93586833,4465.872769,0
+1218,29279.74979,18.8130986,2291.988119,0
+1219,35145.10019,47.79338272,510.7399689,0
+1220,44405.28066,34.38252406,3917.876098,0
+1221,42059.6369,55.29068575,5310.271529,0
+1222,28612.20306,58.86168988,4948.48807,0
+1223,46546.70455,60.7597447,254.8435786,0
+1224,22832.32393,32.5164225,3318.407787,1
+1225,21565.92154,44.1265854,4136.761126,0
+1226,26078.21358,31.80688066,3665.880899,1
+1227,60503.54785,20.1184142,6766.53302,0
+1228,31233.30776,41.70405183,1662.453616,0
+1229,34505.80093,49.32442037,2151.696592,0
+1230,35485.11827,47.38887031,2482.04225,0
+1231,45986.3534,20.2872954,7112.926157,1
+1232,43308.17898,34.83136125,6777.198246,1
+1233,53284.11968,32.14321496,849.5451843,0
+1234,68398.28748,36.99394877,8106.859293,0
+1235,64743.70707,56.25701235,4304.929109,0
+1236,68412.60985,28.15512845,551.8430811,0
+1237,59695.10715,27.90329809,8889.928408,1
+1238,32406.57073,20.98656135,3394.65824,0
+1239,33184.19598,60.37477159,4580.097831,0
+1240,47688.25057,34.56708902,1377.018407,0
+1241,42591.59524,45.11655999,4602.245841,0
+1242,34051.52804,35.74565239,6224.152886,0
+1243,61800.03438,29.66579595,9143.611709,1
+1244,45360.71627,27.07574763,4569.994987,0
+1245,20252.12346,27.4416098,3360.059414,1
+1246,30134.7096,43.81722832,958.9980819,0
+1247,56217.3265,51.58228056,2866.5859,0
+1248,31722.73095,34.85181726,2877.756104,0
+1249,60178.44619,33.26140894,3203.615438,0
+1250,51144.24305,37.83799986,3411.656424,0
+1251,22449.07739,35.7657793,1187.42695,0
+1252,44932.87511,27.14705773,622.9128105,0
+1253,40929.48394,20.25460597,2352.287116,0
+1254,31092.26772,43.83220649,5617.993126,0
+1255,44743.55163,53.05626193,2574.707756,0
+1256,60770.22902,33.62672671,2242.82576,0
+1257,43528.48431,59.89202707,2264.725152,0
+1258,25008.94953,63.21714847,2941.028155,0
+1259,47433.41542,60.45516523,9139.14371,0
+1260,50064.34637,29.3425137,417.6331058,0
+1261,60348.41356,60.44679037,3037.968147,0
+1262,67471.1271,26.92335366,4448.412323,0
+1263,30492.87567,61.6792429,4834.738644,0
+1264,25640.07888,22.6564796,3105.443021,1
+1265,55040.75817,52.71448411,8352.061533,0
+1266,34476.70638,23.35098726,898.1339068,0
+1267,23345.86645,38.29017484,4548.110289,0
+1268,24426.02987,34.69642326,823.835162,0
+1269,65849.88967,30.96884689,5051.302388,0
+1270,60454.52565,41.05160496,7875.070926,0
+1271,22680.31843,55.09158789,1743.774685,0
+1272,44471.87373,19.61305844,5883.660558,1
+1273,46572.32,59.12164964,721.3416051,0
+1274,24369.84125,61.73937931,1366.536025,0
+1275,56830.27286,37.16311407,10462.74045,0
+1276,46942.99652,55.64154017,2187.065484,0
+1277,42521.79071,54.74892029,6745.817708,0
+1278,63188.32853,51.14162945,3960.855647,0
+1279,29410.17752,23.49816499,812.3235343,0
+1280,46668.62847,57.8349421,1833.48585,0
+1281,62693.26958,22.52686485,5321.712558,0
+1282,65307.12748,23.72316582,1906.79553,0
+1283,59589.06429,20.60976412,4191.715856,0
+1284,41019.54879,23.25425304,3005.826864,0
+1285,48058.87138,47.74535288,6527.990222,0
+1286,50208.53002,35.02765993,729.6044303,0
+1287,62526.88793,61.05217092,5835.542391,0
+1288,48192.18561,29.75531818,5026.474557,0
+1289,30884.05673,31.27786188,4099.902045,1
+1290,36965.74248,53.76235862,6333.391588,0
+1291,43536.03891,27.86690712,6427.726093,1
+1292,69181.66406,39.23658259,1173.740942,0
+1293,64233.0407,26.71456132,12104.53421,1
+1294,52593.51506,19.53498199,811.9078625,0
+1295,32282.25175,42.63495589,3345.941958,0
+1296,54077.84328,57.12066029,7149.066896,0
+1297,51595.35748,28.46181675,385.4033625,0
+1298,23097.37648,53.76303351,4517.579801,0
+1299,27407.0562,26.15943832,2949.931674,0
+1300,64395.29807,63.17131965,10054.63464,0
+1301,60432.21666,41.92232593,6300.868939,0
+1302,42990.98283,29.52880839,4665.581021,0
+1303,41581.88992,22.85122067,7895.112865,1
+1304,53289.06529,47.45984368,8047.140754,0
+1305,22372.50524,31.49304954,1118.926064,0
+1306,57119.73969,22.33448761,10211.72193,1
+1307,31112.05942,49.61600423,424.3521316,0
+1308,68936.32135,43.36505621,11073.1585,0
+1309,20436.33129,56.94096616,2356.18197,0
+1310,20583.61217,21.98976744,53.18620734,0
+1311,58988.3058,19.9765914,4728.259542,0
+1312,45311.83184,26.928215,3103.812228,0
+1313,60856.83099,37.07050063,10238.4963,0
+1314,45818.28325,48.45083936,8137.164403,0
+1315,20904.55548,41.0178787,2606.023776,0
+1316,49908.29187,29.55094038,2903.036128,0
+1317,55988.29528,31.08703947,7745.754809,1
+1318,62125.25811,21.08586764,5700.457195,0
+1319,48822.72096,60.94434946,599.347887,0
+1320,29976.8291,57.6661531,3796.03274,0
+1321,41944.26819,61.13506293,1203.700529,0
+1322,36970.36044,33.70459912,1268.506383,0
+1323,39992.71911,20.8266799,4999.202015,1
+1324,42450.54304,61.61424618,6210.280587,0
+1325,42146.93762,23.72052181,7367.258247,1
+1326,52841.51644,18.44602338,5957.386324,0
+1327,66418.95631,62.64878626,9340.544462,0
+1328,44047.66656,27.31337199,2096.917501,0
+1329,24821.21413,19.24390259,874.3242555,0
+1330,35583.61854,63.05439716,27.25248225,0
+1331,25289.60724,21.28056335,2130.793535,0
+1332,39770.12866,45.19093801,280.8785474,0
+1333,59511.1387,29.27411054,2520.514452,0
+1334,51211.65404,45.62856826,4093.360006,0
+1335,56530.49727,45.54492831,5957.993317,0
+1336,42604.46298,41.93638103,7942.168145,0
+1337,66642.00775,56.16766872,4958.067776,0
+1338,35527.83449,47.44952906,325.1195915,0
+1339,66896.76531,31.54546803,387.3944203,0
+1340,51980.35954,35.41570329,6243.04503,0
+1341,40081.42056,43.11674328,770.7775496,0
+1342,50167.67175,42.04748763,5592.651807,0
+1343,39545.95959,43.70086672,5787.658045,0
+1344,43372.39761,55.1945837,474.5253267,0
+1345,33084.16985,59.02910226,5762.469958,0
+1346,53187.97965,63.55816426,4879.846139,0
+1347,48290.88046,30.03676084,4902.975221,0
+1348,66078.76935,45.53632503,3664.621452,0
+1349,51547.16666,53.11192749,6563.41158,0
+1350,39393.14058,52.73927401,5415.054667,0
+1351,69592.01083,63.238625,13025.05657,0
+1352,54588.50119,31.07765403,2847.819173,0
+1353,44964.0106,48.41480327,693.2147138,0
+1354,46081.64555,50.06910454,1487.786041,0
+1355,45564.01535,22.28801022,715.8366044,0
+1356,62657.60254,28.17425706,5771.088254,0
+1357,67921.63211,35.85197819,1399.875472,0
+1358,59514.01238,57.01784581,2504.722649,0
+1359,48422.53611,41.85424768,3520.565901,0
+1360,22001.31745,31.61728481,2155.812173,0
+1361,52529.69877,18.81280424,9808.19094,1
+1362,24061.46316,34.51152011,3980.578783,1
+1363,23450.87213,34.40636966,1419.805523,0
+1364,32866.57824,44.88061703,6037.007733,0
+1365,30958.90796,43.60356595,1558.930765,0
+1366,27550.89527,29.73292642,3944.219318,1
+1367,36024.93789,51.80688647,4155.44929,0
+1368,46801.27429,34.60522061,5315.97382,0
+1369,27082.71898,60.27796277,4990.557123,0
+1370,65435.03538,19.84650416,12727.99755,1
+1371,59295.74108,51.34979947,493.7144299,0
+1372,45435.26724,21.04219778,2143.386972,0
+1373,61742.60958,34.55981004,326.9895676,0
+1374,31396.86601,34.99668137,3719.230135,0
+1375,35916.70415,53.54044336,6401.189486,0
+1376,43969.60416,25.48304865,7455.920157,1
+1377,60624.81537,39.85778773,6740.716136,0
+1378,69939.32968,55.63762125,2225.224533,0
+1379,69755.32016,44.54368228,13766.05124,0
+1380,69478.39876,22.65633974,10229.40788,1
+1381,34192.16052,27.9972893,5233.663228,1
+1382,57457.85794,50.71466253,3608.805202,0
+1383,63910.33466,56.63563264,8986.718948,0
+1384,26643.80899,19.28962851,1413.783224,0
+1385,23985.07542,24.4328115,2284.209129,0
+1386,63660.64881,50.28296012,7832.572411,0
+1387,44102.33009,21.0142084,842.5690773,0
+1388,29409.8059,41.61039681,3388.560923,0
+1389,49294.65931,37.25489393,4574.85478,0
+1390,39553.64738,53.69063324,7063.898036,0
+1391,68583.04105,57.08784007,2922.288685,0
+1392,31060.60626,53.27721306,3729.97465,0
+1393,29190.32462,60.29122269,5239.594773,0
+1394,63437.70015,54.62814035,11963.36422,0
+1395,35243.06323,35.62987754,748.9407179,0
+1396,36475.35353,63.3304318,413.3111631,0
+1397,63271.60883,23.34209813,11298.17219,1
+1398,45540.32552,59.31814027,1490.470251,0
+1399,68565.3855,21.21090931,1231.537368,0
+1400,20063.09958,24.27833881,2495.132991,1
+1401,44222.2622,55.86147245,7443.486707,0
+1402,67839.24446,47.78258022,5609.326602,0
+1403,54009.69228,49.40990043,884.7355047,0
+1404,52234.07535,47.98450551,9255.842934,0
+1405,28423.13147,61.67145866,5282.849182,0
+1406,52623.43759,50.41852689,1156.319703,0
+1407,25636.33357,55.7820572,1239.688258,0
+1408,60842.94116,60.25514261,6608.968795,0
+1409,36727.746,58.18465417,7287.540764,0
+1410,63830.74744,35.1387838,5271.626982,0
+1411,43108.41456,22.29196192,647.8793786,0
+1412,25285.26113,19.81954403,1027.577792,0
+1413,57646.24291,62.87074846,1452.493378,0
+1414,51027.56761,61.50629662,3313.30041,0
+1415,37389.77238,34.44216878,7365.938916,1
+1416,65017.59349,26.91783316,1017.166545,0
+1417,20595.93458,45.47522442,1330.067638,0
+1418,56445.47391,55.66152026,6875.579683,0
+1419,60864.32175,44.14129754,3704.032126,0
+1420,51231.01043,62.58516727,813.0279887,0
+1421,41103.13692,63.07950736,3644.301903,0
+1422,56267.05082,43.12014146,8238.115021,0
+1423,20774.84582,35.58814413,1347.331612,0
+1424,46424.22123,59.20610592,4087.180707,0
+1425,29909.554,62.72826528,4495.278753,0
+1426,62808.50507,56.77153074,6465.75059,0
+1427,41243.80514,52.07526842,4161.573148,0
+1428,46089.14789,63.29653317,1618.218357,0
+1429,69191.23338,57.38518469,6270.574035,0
+1430,60846.66501,32.67339488,8974.492021,1
+1431,66558.93437,48.51616071,3090.992455,0
+1432,27428.28187,54.32718563,1287.632081,0
+1433,60912.79896,60.68736389,3870.333893,0
+1434,28127.50945,41.48682721,3279.557824,0
+1435,64029.54348,36.15775109,1644.339177,0
+1436,61836.73562,29.54548658,10971.97464,1
+1437,37005.07185,58.89032024,1068.887398,0
+1438,56003.5734,18.25026519,3639.900038,0
+1439,58038.92625,54.00212561,538.2305227,0
+1440,29237.2562,24.59757384,23.91642787,0
+1441,33265.79055,21.58345902,5968.442038,1
+1442,66236.92716,35.91910784,2756.9723,0
+1443,41978.7125,52.53010216,1603.924862,0
+1444,63453.22313,23.91570541,10668.36351,1
+1445,24985.59066,50.1327548,2017.139948,0
+1446,53593.1132,62.88581,1428.189214,0
+1447,54179.72187,52.90507993,10028.01586,0
+1448,20126.41377,36.46094444,1432.355862,0
+1449,51180.83971,56.78991141,2875.44523,0
+1450,36455.70151,38.47891862,3437.076895,0
+1451,39188.94529,22.39910978,3545.162249,0
+1452,47852.9269,38.93593926,3295.320061,0
+1453,20014.48947,43.2022035,2426.306223,0
+1454,28630.00951,27.29153003,4406.995056,1
+1455,66688.91312,48.08527027,9690.308798,0
+1456,53226.19441,43.61874729,5686.643116,0
+1457,35609.47835,47.88639354,2574.093432,0
+1458,64065.68286,43.28767314,771.7174942,0
+1459,54935.65838,42.95419475,7921.83051,0
+1460,67800.58133,28.94329698,5035.139378,0
+1461,46893.33671,43.68609808,9131.864419,0
+1462,54648.96698,56.49055625,10674.77021,0
+1463,31410.50729,36.20457331,5797.292398,0
+1464,36989.58954,33.75563245,556.5559407,0
+1465,33198.12828,30.14201203,4285.386912,1
+1466,47704.38083,21.84036088,2717.079485,0
+1467,30569.5727,37.47767833,4752.557572,0
+1468,61398.68707,63.2944038,9008.154521,0
+1469,67750.82599,33.51874317,6855.986311,0
+1470,47637.86203,51.05145093,6708.673591,0
+1471,38357.51752,25.54630783,2548.413916,0
+1472,43156.30527,27.84683467,2413.011907,0
+1473,41101.54295,35.65403369,5240.114373,0
+1474,59475.49718,36.73713048,2628.262124,0
+1475,40708.91941,32.81676887,5532.343843,1
+1476,30391.4733,59.26477079,2072.634066,0
+1477,46024.14456,24.17451622,4318.377722,0
+1478,66529.48522,59.42979515,6337.674939,0
+1479,68115.98033,37.29177117,7458.559482,0
+1480,38423.08429,29.20911929,3676.568354,0
+1481,33227.28018,23.14898157,6470.410381,1
+1482,61674.45723,54.82930153,4054.551771,0
+1483,26931.06825,41.28060416,3668.646773,0
+1484,60040.99384,44.1414116,2659.694541,0
+1485,26181.24241,42.66303152,2618.973497,0
+1486,61552.21751,61.08761215,4042.539734,0
+1487,29705.07473,41.83413714,1912.205091,0
+1488,53934.81227,21.47434043,2085.817639,0
+1489,23007.38788,48.97252372,2296.795327,0
+1490,48552.84341,29.37808354,5650.889688,0
+1491,66370.88876,63.11349631,5176.361161,0
+1492,49140.26986,43.64116195,8832.651707,0
+1493,39684.9818,33.62885053,2590.928175,0
+1494,32025.40445,37.50658678,217.488528,0
+1495,55568.17946,42.75697379,6114.867546,0
+1496,45898.51352,24.6631496,5617.178645,1
+1497,39217.90992,30.10142049,864.6240529,0
+1498,34070.604,27.29405159,1401.685061,0
+1499,66768.36121,49.13087482,4255.367636,0
+1500,31400.85843,62.58585538,4464.404268,0
+1501,49335.75726,43.62837513,2549.620474,0
+1502,51774.05251,47.78184138,1508.761776,0
+1503,43064.64735,43.9394257,787.0471897,0
+1504,41226.13468,49.1241523,2155.660059,0
+1505,43044.51778,60.84842437,1661.71346,0
+1506,33546.29204,54.69847514,5347.295507,0
+1507,69209.33087,26.03284952,6284.833573,0
+1508,32291.54455,39.17461364,277.3875685,0
+1509,66274.0729,21.82560426,11576.54224,1
+1510,34102.7912,42.05373123,1269.254575,0
+1511,21144.56287,21.35588554,703.363923,0
+1512,41049.97459,49.84094132,5890.113644,0
+1513,36351.27773,33.863571,6619.832683,1
+1514,63144.45921,32.09867363,812.5725496,0
+1515,32086.91354,28.41077647,6362.390354,1
+1516,28873.16732,62.23474707,992.5777177,0
+1517,65359.29615,18.60512247,7707.240563,0
+1518,49064.28847,43.37234458,5636.35344,0
+1519,23763.06056,39.39309718,2950.314863,0
+1520,51845.94256,43.41943507,8750.832088,0
+1521,67035.32642,46.09920974,11276.62254,0
+1522,49240.7625,53.25457982,8004.35984,0
+1523,36132.32759,18.71333256,3009.39734,0
+1524,67006.80649,36.1980031,3692.169172,0
+1525,39453.64561,32.4015456,436.9352469,0
+1526,52205.60706,24.64014386,1135.152226,0
+1527,46319.4168,45.14678836,1523.072058,0
+1528,29398.72742,41.41217588,4673.766198,0
+1529,31135.60771,19.00967065,2457.91369,0
+1530,65603.81676,19.02164232,11775.35458,1
+1531,41362.50837,44.36380808,607.965612,0
+1532,60302.559,52.18494901,6509.698608,0
+1533,54468.27921,23.87681513,68.62545627,0
+1534,47683.71578,32.30653595,4752.287877,0
+1535,38160.1165,31.3281223,3429.901579,0
+1536,22925.81208,34.74104443,2547.279742,0
+1537,64087.85881,38.03717583,722.5195892,0
+1538,65824.51566,40.62192013,2643.106432,0
+1539,53451.93154,49.65761603,10529.72349,0
+1540,36455.48471,35.26034072,2464.162321,0
+1541,39573.34144,29.13702618,5785.884275,1
+1542,41052.36578,49.91170718,4652.951748,0
+1543,37895.18173,54.51514932,6071.340205,0
+1544,44827.23377,56.29849542,2639.916846,0
+1545,28341.08677,39.96176879,2248.242914,0
+1546,56887.2028,36.41703326,10969.59669,0
+1547,25146.59568,21.05419926,2890.652793,0
+1548,54739.16452,28.02186979,7218.968224,1
+1549,30497.20451,28.47694441,4573.59409,1
+1550,25358.89794,41.17179443,2220.2256,0
+1551,29993.5633,49.05577318,2749.585697,0
+1552,64675.77948,30.51510922,4628.603003,0
+1553,56256.03887,22.16050255,5452.244532,0
+1554,31702.3343,28.4226721,3587.722389,0
+1555,34113.11328,30.83356232,6360.154897,1
+1556,44666.01285,54.7025233,7548.444373,0
+1557,39421.36684,26.43064278,6111.961017,1
+1558,21683.19372,46.02739322,339.5922689,0
+1559,65697.59284,36.28615968,5644.653159,0
+1560,68657.7893,35.76410817,2427.949887,0
+1561,66981.413,27.48095465,6678.5628,0
+1562,45971.13349,27.39847292,4776.490486,0
+1563,42965.99275,45.19554599,8109.051409,0
+1564,50895.81034,18.95700206,5556.83987,0
+1565,46175.03194,36.91534391,1064.081875,0
+1566,44984.89912,51.74721229,4584.611816,0
+1567,66941.86486,22.54073556,12380.62471,1
+1568,31022.14485,39.17585766,6144.939436,0
+1569,46583.1996,32.70437491,6241.270508,1
+1570,56201.84143,43.27752018,8346.320922,0
+1571,31587.06486,56.32561627,2677.825713,0
+1572,40716.19089,25.80565159,2389.700759,0
+1573,64966.06564,28.37929369,11495.7311,1
+1574,68503.20589,19.28053543,3580.463677,0
+1575,33867.50226,30.15785425,5714.026374,1
+1576,54195.01517,39.30174824,6649.801459,0
+1577,50565.33709,62.65586538,693.1964169,0
+1578,57216.10102,31.82232807,3554.389365,0
+1579,29849.96714,39.92872415,3678.899676,0
+1580,29072.15179,38.47588837,1589.438432,0
+1581,29775.14222,21.03497172,3327.236235,0
+1582,46672.71314,54.54870377,1408.497717,0
+1583,66393.71115,58.61227209,9540.416626,0
+1584,29338.25645,25.69012912,5120.406797,1
+1585,67289.58568,26.72740046,13376.79771,1
+1586,45980.33434,31.94832367,5929.09803,1
+1587,34163.62565,45.78271792,6617.400172,0
+1588,52216.8158,23.637136,6803.333393,1
+1589,62313.27763,60.91730571,925.7955921,0
+1590,49205.6371,24.62202976,3393.856589,0
+1591,65688.7315,24.56447541,3673.870415,0
+1592,43489.82845,51.73379038,6501.041226,0
+1593,40966.67453,46.75507215,2393.524149,0
+1594,37261.44712,23.71839249,2075.519822,0
+1595,58775.40389,45.6972166,5673.599822,0
+1596,39395.83041,36.37047119,7557.873338,0
+1597,21144.16215,58.39219715,987.7941458,0
+1598,33126.13272,50.96395425,4169.992872,0
+1599,30931.50602,35.88248498,1074.787904,0
+1600,31936.94201,59.03712775,4087.995048,0
+1601,38157.02968,51.52814013,5628.012004,0
+1602,21032.81869,30.08246411,4024.089367,1
+1603,50238.53247,34.55520077,2567.615154,0
+1604,67346.66246,34.90151683,6752.122458,0
+1605,33261.64602,18.22962939,586.6510962,0
+1606,53113.0361,59.43689228,10080.52438,0
+1607,42749.99032,56.41909458,4626.538637,0
+1608,42108.19992,26.99135128,1020.978164,0
+1609,61344.53221,20.17553224,7172.654332,0
+1610,54738.68229,26.77192946,6210.728279,0
+1611,69695.15045,26.42448341,8418.25316,1
+1612,62507.35478,27.95702726,6590.77723,0
+1613,61922.77464,24.808657,1933.08292,0
+1614,58023.72377,42.75183866,2785.779563,0
+1615,27010.88377,36.60962245,2373.175255,0
+1616,21194.61617,25.91319002,1102.848094,0
+1617,68338.0974,34.33447148,12840.69671,1
+1618,67772.79368,41.51526086,5037.933861,0
+1619,67131.80269,58.06280852,2271.404537,0
+1620,33159.21728,42.34317793,2135.532137,0
+1621,66087.08847,51.14572202,11039.28872,0
+1622,60362.34427,24.69412307,10306.70536,1
+1623,54609.46518,18.41373634,5618.20457,0
+1624,63637.28183,26.85198754,9955.225362,1
+1625,40918.5703,37.18584542,3813.699268,0
+1626,51486.13032,33.55102974,3955.113351,0
+1627,44896.25649,48.61068103,3787.639141,0
+1628,24877.68441,29.82362039,1546.422886,0
+1629,52263.3555,34.29609224,10161.94667,1
+1630,42775.52551,39.22708316,6145.987757,0
+1631,67064.01367,18.17604345,8945.289469,1
+1632,50307.94468,51.91293237,7207.941173,0
+1633,37432.68096,22.66916169,4445.502385,0
+1634,30084.15883,18.45082514,737.2537244,0
+1635,61427.41464,20.10800883,2163.312487,0
+1636,54718.85279,29.52485768,2883.284107,0
+1637,47923.57551,57.21906913,6931.716435,0
+1638,22880.7276,18.42886766,1909.215139,0
+1639,46118.5501,23.97400067,2728.311486,0
+1640,35082.38569,41.15368948,2918.477721,0
+1641,38387.32228,30.0760336,6453.507839,1
+1642,57413.57224,43.9119505,9421.298413,0
+1643,28198.09734,62.43771619,4370.793619,0
+1644,50117.85704,32.82728384,3599.068821,0
+1645,34876.33293,53.41569725,3102.347059,0
+1646,64126.49168,19.29785353,4956.941565,0
+1647,41916.69268,48.14870817,6106.109586,0
+1648,50052.29293,27.4822349,5589.328271,0
+1649,39158.91751,41.29678218,6887.738421,0
+1650,62219.03754,19.5239827,5831.521429,0
+1651,67151.31861,51.65509895,3941.698673,0
+1652,46166.16313,25.99612062,901.7531177,0
+1653,23881.78651,32.89370972,1190.630105,0
+1654,48445.11312,38.97956768,8733.442215,0
+1655,32441.65201,58.70955658,840.7142066,0
+1656,33820.18651,61.05088434,4342.178111,0
+1657,61812.90135,52.96198773,3124.312409,0
+1658,25347.57266,61.64539487,2188.503086,0
+1659,33965.52371,43.91274646,3123.898738,0
+1660,23641.70268,56.81360339,4203.50356,0
+1661,50660.90425,52.16866404,7511.003494,0
+1662,44037.24398,58.44050724,5269.518403,0
+1663,51657.12396,35.41469759,609.3508858,0
+1664,46573.24438,53.11079369,5533.292189,0
+1665,26922.46222,44.15557121,3950.00079,0
+1666,48414.25154,21.95358986,2105.709505,0
+1667,43974.84053,47.43241103,8371.493105,0
+1668,65913.83201,22.7890518,12972.41836,1
+1669,64715.99897,60.93941035,11173.80845,0
+1670,25481.98791,48.36229289,4005.816148,0
+1671,54170.53261,37.44105072,1048.932372,0
+1672,51653.70474,19.877512,1853.419156,0
+1673,66054.50623,39.07713889,10321.0987,0
+1674,60019.44714,19.38241478,6978.347128,0
+1675,31523.95286,62.27492278,5697.021469,0
+1676,65660.94854,22.19499034,93.15264188,0
+1677,61893.48364,19.1799065,6038.162662,0
+1678,49230.09821,47.84611477,8375.729867,0
+1679,38337.82947,55.50695263,5691.09349,0
+1680,64016.43339,44.27695019,10048.39421,0
+1681,46308.64516,40.70646159,6815.485141,0
+1682,66209.14427,45.18819383,7134.656119,0
+1683,47770.71142,33.94936609,5366.868793,0
+1684,29856.48632,18.05587449,4731.816864,1
+1685,21451.49729,52.18401962,1719.038044,0
+1686,59673.17045,57.28667146,7533.679839,0
+1687,47481.42964,20.49522153,9402.876118,1
+1688,36219.77291,56.83890067,4280.794199,0
+1689,59458.70434,56.43017456,1513.327637,0
+1690,67010.84098,51.5222956,11646.91061,0
+1691,58693.41942,27.17628489,4033.153519,0
+1692,43041.04139,46.99845733,2245.505278,0
+1693,31920.41272,52.15906047,217.1879621,0
+1694,32771.12541,58.93258487,1853.68197,0
+1695,55487.14713,32.10271948,178.6924716,0
+1696,68406.80717,46.05627261,2491.460861,0
+1697,37277.12306,28.35490842,4242.640648,0
+1698,39762.52658,25.66994986,3809.347155,0
+1699,41674.24314,54.65833392,3203.204656,0
+1700,25789.74203,45.31621115,4442.33178,0
+1701,24575.05989,36.69002906,1667.748767,0
+1702,58082.3601,60.15632703,9175.667318,0
+1703,67881.8805,53.26011154,10503.57125,0
+1704,50115.0549,26.77897816,3447.002152,0
+1705,40443.20363,33.65929892,1857.252327,0
+1706,65824.83738,19.67324128,154.9456163,0
+1707,51199.86984,22.40357681,4064.818093,0
+1708,67032.28946,44.32616679,5487.820266,0
+1709,42205.6829,23.43490545,2444.737196,0
+1710,37730.36211,52.42988101,5273.559352,0
+1711,47398.31104,50.17342698,9041.878835,0
+1712,48933.20969,50.06578295,5071.371891,0
+1713,53078.85583,49.17618969,10566.35387,0
+1714,53236.993,57.93261219,703.6021978,0
+1715,58121.95469,58.36380871,5161.107409,0
+1716,57261.15139,40.23255914,2527.755923,0
+1717,52102.5909,19.37246483,8799.819842,1
+1718,45165.92595,37.90000438,5534.550798,0
+1719,58809.29247,37.45918855,5470.587846,0
+1720,36598.34047,41.96212964,6849.29481,0
+1721,62096.28261,25.02343215,8034.747774,1
+1722,68114.07098,47.19519398,4325.099268,0
+1723,67978.46685,23.45665138,7382.502551,0
+1724,26615.5243,53.35032216,3458.193614,0
+1725,51254.37001,50.6494071,8747.208629,0
+1726,34428.97264,27.3684103,6016.615091,1
+1727,60974.58714,33.89574856,6165.65882,0
+1728,63330.73455,30.23024362,5170.899852,0
+1729,58168.47407,27.47152114,2935.367657,0
+1730,59579.60921,51.1302136,2319.362857,0
+1731,52219.8955,47.67986773,6560.469542,0
+1732,28700.87259,28.79704182,5090.310491,1
+1733,27193.74305,21.40959607,4518.858351,1
+1734,67417.571,29.91098356,6478.402532,0
+1735,57341.43277,23.47849796,784.8948568,0
+1736,64056.53612,48.86906318,5982.805039,0
+1737,66370.69351,38.40550487,5906.034309,0
+1738,45045.43165,58.62369495,8489.405985,0
+1739,58609.13148,22.09757985,4270.532996,0
+1740,53289.06797,32.30020689,7395.513416,1
+1741,60309.32883,34.37905483,2343.073833,0
+1742,45139.48639,19.61720917,1743.691464,0
+1743,22815.64061,61.72656548,2749.079844,0
+1744,45215.01469,27.83884812,383.8501673,0
+1745,40568.07518,35.94146628,5990.318608,0
+1746,43721.25181,55.12770834,5923.392464,0
+1747,38129.75487,19.08440959,3964.729278,0
+1748,22547.96164,57.62641276,2957.295712,0
+1749,57468.05944,62.265046,8452.955624,0
+1750,25534.67352,37.87175619,1084.966942,0
+1751,26325.50339,56.35027775,3336.131472,0
+1752,65913.83084,36.47775765,11738.91571,0
+1753,67119.13596,18.05518851,2725.240313,0
+1754,62020.46813,56.65353651,114.2098881,0
+1755,37965.84934,27.8285796,299.0547059,0
+1756,62114.85602,30.74947746,12115.89231,1
+1757,36871.06176,46.03436164,792.7110544,0
+1758,65030.90935,36.70069066,2231.976166,0
+1759,23193.6046,41.93605652,548.5961163,0
+1760,59568.62432,40.55891909,7685.326744,0
+1761,50527.58417,26.65296268,5639.245689,0
+1762,60776.11021,34.20694181,10382.43968,1
+1763,61632.28271,34.43080878,3028.591328,0
+1764,45930.45265,49.99133072,7765.252827,0
+1765,25857.76559,41.75835442,1810.232339,0
+1766,55093.92123,55.17608333,6485.30159,0
+1767,42301.33448,19.50343568,1480.61489,0
+1768,51903.53425,59.76266204,8807.867971,0
+1769,64398.14616,35.5975403,1674.905633,0
+1770,41089.51083,57.62741738,997.1841685,0
+1771,36727.5509,24.59731819,794.5568182,0
+1772,38163.39454,63.25165246,454.3076768,0
+1773,35949.89641,56.7387456,3680.177028,0
+1774,44979.80219,32.5319016,6045.089487,1
+1775,48211.58184,30.55734418,2606.124698,0
+1776,28267.08995,54.6462767,965.3732272,0
+1777,33816.22334,60.24819138,5265.743252,0
+1778,33078.99598,36.32719969,6278.316279,0
+1779,36019.8172,42.84566569,2987.962123,0
+1780,34238.53029,63.43418801,6002.93511,0
+1781,62064.52068,22.82585726,2972.381023,0
+1782,44867.61524,55.81275256,366.1011044,0
+1783,37162.88822,28.87660671,3110.531147,0
+1784,65680.94802,62.77942662,8838.231305,0
+1785,58772.85748,46.50503835,7048.005343,0
+1786,32435.24811,43.06626362,5685.405228,0
+1787,58028.2132,50.09548172,5753.895027,0
+1788,60595.27533,62.22070887,4534.490222,0
+1789,36565.80389,19.89940228,1888.334736,0
+1790,20742.69697,61.59842116,2295.818094,0
+1791,46666.63801,18.74557575,7677.823856,1
+1792,32203.56694,61.16757056,838.0214411,0
+1793,36535.31539,29.87489182,271.7251877,0
+1794,28163.29507,58.00352914,2121.151956,0
+1795,39019.35774,31.79270886,3196.559769,0
+1796,24709.08325,54.74520391,1915.385594,0
+1797,43052.96856,31.52685355,488.9372735,0
+1798,25003.91611,53.41157775,2183.713426,0
+1799,46696.89266,34.199782,4732.498144,0
+1800,50112.4622,41.30463745,5067.032925,0
+1801,43265.90032,44.74331012,6194.07205,0
+1802,67802.69446,49.03798708,13443.47318,0
+1803,55408.70595,43.32280682,10300.28125,0
+1804,67048.893,55.05304129,10839.91376,0
+1805,40262.59764,51.79885818,6535.85195,0
+1806,46427.49918,61.84653541,5671.45056,0
+1807,46911.1971,23.43098081,4263.853588,0
+1808,57359.55243,34.79526286,10011.41068,1
+1809,34569.30464,63.64065153,6254.527617,0
+1810,52797.40104,21.12701044,1080.42349,0
+1811,56630.39526,57.97316146,8442.891373,0
+1812,45245.73975,35.82444267,1974.009904,0
+1813,20803.61454,61.89225017,758.4348491,0
+1814,57717.60679,48.79781292,3153.222829,0
+1815,20647.88765,20.32164556,725.4568686,0
+1816,59046.45715,36.82711952,8237.046829,0
+1817,62662.25883,25.29886488,1965.921357,0
+1818,33614.49461,46.47308182,4837.787511,0
+1819,48765.12887,50.07041654,5183.859126,0
+1820,57240.75694,41.57139076,313.6279418,0
+1821,49973.66646,43.91861469,363.899917,0
+1822,41255.93969,45.58326501,5296.907773,0
+1823,61129.72316,35.10917797,11302.76769,0
+1824,48938.58344,59.70792423,3028.834619,0
+1825,68648.2414,27.92001002,9425.707309,1
+1826,41250.82854,39.07818304,7651.577272,0
+1827,22415.65476,40.68729838,4371.715441,0
+1828,24112.49939,35.97133752,3285.499948,0
+1829,41692.60518,62.12124981,1708.712503,0
+1830,23516.7277,27.36269519,559.9053229,0
+1831,53812.22648,44.91915229,3245.041667,0
+1832,29750.2948,45.54445543,3627.987077,0
+1833,22633.67692,37.59693031,553.5208586,0
+1834,28713.83052,54.70084552,1936.813257,0
+1835,63321.90927,19.48791488,8092.98278,1
+1836,35276.58799,28.57213319,6820.315404,1
+1837,35914.60931,60.80509128,520.9960335,0
+1838,31568.14432,63.86398451,5067.410013,0
+1839,39934.06749,31.60796663,184.7443024,0
+1840,48614.84968,61.30129349,5984.950784,0
+1841,29838.12481,25.89508406,5913.649556,1
+1842,57745.35888,36.72961032,5540.464047,0
+1843,44447.5293,32.71813418,2714.403108,0
+1844,51768.00534,30.54451147,6632.036203,1
+1845,34891.14044,55.04893523,6152.314492,0
+1846,45382.8079,42.51634459,2742.454975,0
+1847,40719.49032,22.9269144,6415.086244,1
+1848,55145.78501,57.88245864,8968.678877,0
+1849,48752.42408,30.76336091,8934.785761,1
+1850,55763.42742,30.58544797,7913.837734,1
+1851,36431.16141,46.45279704,6783.361363,0
+1852,40522.82828,63.88714083,7720.780489,0
+1853,42465.66975,58.01657008,7314.976322,0
+1854,38561.94404,45.87983104,4831.111171,0
+1855,54957.44967,59.50636724,6976.463275,0
+1856,24822.06984,29.02037885,2361.166802,0
+1857,25252.48774,23.78830375,434.8674516,0
+1858,25671.74258,18.74645599,2272.14762,0
+1859,60672.14559,43.05590862,6279.687007,0
+1860,60729.94924,40.77350178,5006.850087,0
+1861,40240.72756,26.95900532,7498.630447,1
+1862,57513.81746,33.09201951,6921.491029,1
+1863,64287.39763,45.88390644,6301.594778,0
+1864,48428.03365,33.93239331,7718.479795,1
+1865,55313.83225,25.21256484,9733.113189,1
+1866,27045.39957,50.22120054,2503.7884,0
+1867,58216.07198,27.40448065,9581.833306,1
+1868,34722.96483,22.22338695,4073.411901,0
+1869,58503.77101,42.37251293,7050.432526,0
+1870,55299.78724,62.19314775,8052.381283,0
+1871,49501.90592,50.78811185,2226.81958,0
+1872,61765.70904,59.95587347,3649.643103,0
+1873,48430.99367,18.50809359,6069.649094,1
+1874,66366.95742,41.57616997,465.0115658,0
+1875,55320.78001,29.41721633,5990.716973,0
+1876,48774.28816,62.84084913,3728.483342,0
+1877,61679.95316,24.1914258,3060.030168,0
+1878,61485.1796,60.18819954,3211.670281,0
+1879,24402.44017,52.02759737,101.2185381,0
+1880,21258.90278,54.22456338,706.6197387,0
+1881,48763.68054,28.0602953,8172.052504,1
+1882,24406.89381,37.9053185,1733.403111,0
+1883,61693.58631,25.68422605,1568.863689,0
+1884,22748.03304,26.94071725,108.6299113,0
+1885,21479.94672,24.3142805,1098.073365,0
+1886,51286.6564,45.85982714,1134.234384,0
+1887,27153.66392,48.81803283,3177.517372,0
+1888,36370.49398,39.67078913,2855.2161,0
+1889,32400.54496,61.67923932,3591.797505,0
+1890,60434.16443,63.21861647,2474.248112,0
+1891,57303.47976,52.15536585,10491.63215,0
+1892,42994.68224,36.42561073,4453.824617,0
+1893,68339.80794,23.36532355,2505.868398,0
+1894,49292.30314,20.62232701,967.1345882,0
+1895,57802.4297,43.04172886,6796.590935,0
+1896,50779.38079,39.43591481,6859.836596,0
+1897,35993.98976,53.93902055,93.89580488,0
+1898,21771.12934,33.68777873,350.4455484,0
+1899,61414.80126,56.88918916,9743.609259,0
+1900,35784.66349,46.54787028,110.2028905,0
+1901,24791.1867,39.64327145,4844.680983,0
+1902,49048.75736,52.05179371,6363.113668,0
+1903,69852.05872,62.20231314,9246.265058,0
+1904,21217.74746,21.36568696,2690.768134,1
+1905,48031.06741,43.67016376,7826.325909,0
+1906,64072.31322,61.15839923,2426.008622,0
+1907,56689.4639,41.00340032,5740.591698,0
+1908,45769.25952,55.82719728,8236.476519,0
+1909,35020.48877,24.99191048,6832.803042,1
+1910,56751.92851,59.20442489,7877.330041,0
+1911,27363.6318,44.38642089,3215.263093,0
+1912,48455.71741,27.47626829,1780.507334,0
+1913,21424.09133,36.91843838,1795.223958,0
+1914,69992.33271,41.77123143,52.87219028,0
+1915,68110.23995,32.17157472,11029.66771,1
+1916,48015.55474,28.2417962,54.00824238,0
+1917,23102.21779,35.76168337,1779.574528,0
+1918,46134.85414,54.86544593,8716.611259,0
+1919,48547.96138,56.64147426,1940.870699,0
+1920,26095.02691,58.10209089,5143.490416,0
+1921,64057.84479,59.85843482,5774.281958,0
+1922,24454.19062,52.39086216,864.9687379,0
+1923,40506.94401,52.24151412,5961.531816,0
+1924,43421.04574,27.21744021,4705.757083,0
+1925,55881.5418,33.30668529,8383.074165,1
+1926,45917.60069,45.15712066,8253.273858,0
+1927,52901.90954,60.26135933,729.3773772,0
+1928,41183.82466,56.03236488,7606.993239,0
+1929,25379.91548,24.92908735,4693.111697,1
+1930,27514.08847,36.27868438,192.1446105,0
+1931,44241.283,19.98253883,8733.179295,1
+1932,29076.33771,41.2224627,286.2644342,0
+1933,60536.91287,32.32617541,3132.551831,0
+1934,47881.956,38.09981235,5575.635648,0
+1935,49144.37106,51.89382023,1633.03578,0
+1936,33707.80104,59.91764355,321.5789312,0
+1937,46442.28279,28.84595832,1484.561548,0
+1938,25602.95725,28.4463766,2214.922493,0
+1939,61236.39608,36.00169172,6562.903837,0
+1940,48187.34788,55.53300959,2003.41185,0
+1941,29933.20193,18.65902132,5953.521871,1
+1942,41027.90736,44.77193547,4369.218876,0
+1943,49990.66011,45.54275512,1896.754994,0
+1944,59792.50859,24.18749914,660.2414526,0
+1945,35879.51999,41.07293472,5335.403499,0
+1946,29102.22172,27.1292334,1890.447478,0
+1947,30047.81941,51.07732459,5768.742735,0
+1948,59299.16272,36.98427692,4944.056264,0
+1949,64484.0148,33.09942354,1391.601802,0
+1950,36352.42229,43.71886432,6239.247526,0
+1951,66034.7543,60.7262946,3913.782124,0
+1952,51650.27137,40.1050569,3743.003437,0
+1953,31898.15991,41.31715911,2015.182969,0
+1954,58780.2335,18.70173368,5029.707636,0
+1955,67754.10467,42.9807849,2989.950997,0
+1956,48500.26815,61.30480025,7054.606149,0
+1957,55704.79816,48.51661891,5594.332971,0
+1958,50458.9582,52.31456503,9852.889427,0
+1959,48263.00343,28.54960456,7798.793463,1
+1960,38755.16271,56.35542661,4244.498033,0
+1961,68131.6643,57.40525789,7813.23983,0
+1962,28991.42394,37.16515694,1249.347564,0
+1963,35108.55795,40.74341282,4002.991276,0
+1964,28858.59887,23.69458972,3764.815174,1
+1965,22800.79677,28.19825664,3740.900936,1
+1966,29572.9759,39.2304778,5006.253823,0
+1967,21982.01737,34.91551629,4265.173704,1
+1968,45576.83836,38.67104976,4952.653346,0
+1969,55068.66894,51.7573598,4852.766598,0
+1970,56441.01624,43.20699111,9043.756044,0
+1971,68047.92531,47.69451986,4023.064765,0
+1972,36275.73586,30.30818374,644.3841948,0
+1973,52389.36685,54.96931281,10398.82059,0
+1974,23678.37611,47.4664851,1779.814597,0
+1975,37707.64295,31.34404787,268.2909708,0
+1976,57753.56896,54.23591535,5067.449964,0
+1977,30529.96329,47.60440226,6046.840845,0
+1978,44022.26874,31.1926268,1707.67287,0
+1979,58533.88468,40.51896256,7832.443321,0
+1980,33702.53183,48.14840359,922.0365897,0
+1981,40236.87207,52.58077285,4354.314412,0
+1982,62619.15599,43.99946111,3959.611772,0
+1983,50738.36219,45.99319907,9719.562798,0
+1984,64466.76014,33.32714402,8537.369666,1
+1985,64636.40219,60.886966,2583.106425,0
+1986,22371.52219,39.14222532,2291.856428,0
+1987,67994.98847,38.62225938,7289.014109,0
+1988,49640.0047,20.54240863,5760.858734,0
+1989,42067.24645,24.27061152,4601.606183,0
+1990,43662.09269,25.25260926,7269.596897,1
+1991,34237.57542,34.10165393,2658.090632,0
+1992,26300.44655,45.53938522,2317.393678,0
+1993,30803.80616,23.25008412,623.0241528,0
+1994,54421.41016,26.8219284,3273.631823,0
+1995,24254.70079,37.75162224,2225.284643,0
+1996,59221.04487,48.51817941,1926.729397,0
+1997,69516.12757,23.16210447,3503.176156,0
+1998,44311.44926,28.0171669,5522.786693,1
+1999,43756.0566,63.97179584,1622.722598,0
+2000,69436.57955,56.15261703,7378.833599,0
diff --git a/examples/FastAPI/data/database.py b/examples/FastAPI/data/database.py
new file mode 100644
index 00000000..e01686c5
--- /dev/null
+++ b/examples/FastAPI/data/database.py
@@ -0,0 +1,18 @@
+import os
+from supabase import create_client, Client
+
+#variables for database and url configuration
+from config import Config
+
+class SupabaseDB:
+ """
+ class instance for database connection to supabase
+
+ :str: url: configuration for database url for data inside supafast project
+ :str: key: configuration for database secret key for authentication
+ :object: supabase: Supabase instance for connection to database environment
+ """
+
+ url: str = Config.URL
+ key: str = Config.KEY
+ supabase: Client = create_client(url, key)
\ No newline at end of file
diff --git a/examples/FastAPI/main.py b/examples/FastAPI/main.py
new file mode 100644
index 00000000..d99435d8
--- /dev/null
+++ b/examples/FastAPI/main.py
@@ -0,0 +1,104 @@
+from fastapi import FastAPI, Response, Request
+import json
+
+# database cursor to supabase
+from data.database import SupabaseDB
+
+# redis related imports
+from fastapi_redis_cache import cache_one_week, FastApiRedisCache
+
+# supabase client
+from config import Config
+from data.database import SupabaseDB
+
+# application factory
+app = FastAPI(title="Supafast Tutorial", debug=True)
+
+
+@app.on_event("startup")
+def onStart():
+ """
+ Helper function for on event handler in FastAPI. The event
+ passed in as a param checks for the startup event for the
+ current application. This then triggers our connection to our
+ redis cache via instance.
+
+ :rtype: Cache instance for application.
+ """
+
+ r = FastApiRedisCache()
+ r.init(
+ host_url=Config.REDIS_URL,
+ prefix="supafast-cache",
+ response_header="X-Supafast-Cache",
+ ignore_arg_types=[Request, Response, SupabaseDB.supabase]
+ )
+
+
+@app.get("/")
+def index():
+ """
+ Initial view or endpoint when visiting localhost:8000/
+
+ :rtype: Welcome and instruction for walkthrough via readme or localhost:8000/docs
+ """
+
+ return {"👋 Hello": "Please refer to the readme\
+ documentation for more or visit http://localhost:8000/docs"}
+
+
+@app.get("/getResult")
+def query():
+ """
+ Endpoing for testing data to be pulled from your supabase instance.
+
+ :rtype: 1st row of consumer credit data.
+ :endpoint: {
+ "data": [
+ {
+ "clientid": 1,
+ "income": 66155.9251,
+ "age": 59,
+ "loan": 8106.532131,
+ "default": "0"
+ }
+ ],
+ }
+ """
+
+ data = SupabaseDB.supabase.table('credit_data').select('*').limit(1).execute()
+ return data
+
+
+@app.get("/cachedResults")
+@cache_one_week()
+async def get_defaults(request: Request, response: Response):
+ """
+ asynchronous function call for grabbing load default specific data
+ by the first 10 rows of data from your supabase instance.
+
+ :rtype: Loan defaults for individuals by a certain age or older.
+ :endpoint:
+ HTTP/1.1 200 OK
+ cache-control: max-age=604321
+ content-length: 894
+ content-type: application/json
+ date: Wed, 16 Feb 2022 21:53:56 GMT
+ expires: Wed, 23 Feb 2022 21:45:57 GMT
+ server: uvicorn
+ x-supafast-cache: Hit
+
+ "data=[{'clientid': 1, 'income': 66155.9251, 'age': 59, 'loan': 8106.532131, 'default': '0'},
+ {'clientid': 2, 'income': 34415.15397, 'age': 48, 'loan': 6564.745018, 'default': '0'},
+ {'clientid': 3, 'income': 57317.17006, 'age': 63, 'loan': 8020.953296, 'default': '0'},
+ {'clientid': 4, 'income': 42709.5342, 'age': 46, 'loan': 6103.64226, 'default': '0'},
+ {'clientid': 5, 'income': 66952.68885, 'age': 19, 'loan': 8770.099235, 'default': '1'},
+ {'clientid': 6, 'income': 24904.06414, 'age': 57, 'loan': 15.49859844, 'default': '0'},
+ {'clientid': 7, 'income': 48430.35961, 'age': 27, 'loan': 5722.581981, 'default': '0'},
+ {'clientid': 8, 'income': 24500.14198, 'age': 33, 'loan': 2971.00331, 'default': '1'},
+ {'clientid': 9, 'income': 40654.89254, 'age': 55, 'loan': 4755.82528, 'default': '0'},
+ {'clientid': 10, 'income': 25075.87277, 'age': 40, 'loan': 1409.230371, 'default': '0'}] count=None"
+ """
+
+ data = SupabaseDB.supabase.table('credit_data').select('*').limit(10).execute()
+ return json.dumps(data, indent=4)
\ No newline at end of file
diff --git a/examples/FastAPI/requirements.txt b/examples/FastAPI/requirements.txt
new file mode 100644
index 00000000..3325ceb2
--- /dev/null
+++ b/examples/FastAPI/requirements.txt
@@ -0,0 +1,35 @@
+anyio==3.5.0
+asgiref==3.5.0
+certifi==2021.10.8
+charset-normalizer==2.0.11
+click==8.0.3
+Deprecated==1.2.13
+deprecation==2.1.0
+fastapi==0.73.0
+fastapi-redis-cache==0.2.5
+gotrue==0.5.0
+h11==0.12.0
+httpcore==0.14.7
+httptools==0.3.0
+httpx==0.21.3
+idna==3.3
+packaging==21.3
+postgrest-py==0.8.2
+pydantic==1.9.0
+pyparsing==3.0.7
+python-dateutil==2.8.2
+python-dotenv==0.19.2
+PyYAML==6.0
+realtime==0.0.4
+redis==4.1.3
+rfc3986==1.5.0
+six==1.16.0
+sniffio==1.2.0
+starlette==0.17.1
+supabase==0.4.0
+typing-extensions==4.0.1
+uvicorn==0.17.4
+uvloop==0.16.0
+watchgod==0.7
+websockets==9.1
+wrapt==1.13.3
From 912436c7752b034d8f26d47d55eff0077970e4c4 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 17 Feb 2022 19:38:20 -0500
Subject: [PATCH 161/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 7045008f..6f2dead7 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -159,7 +159,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "commitizen"
-version = "2.20.5"
+version = "2.21.0"
description = "Python commitizen client tool"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "cb6a5ce0c8c3c6941f7b77e1e37361ad20efcfc12d8b13011e38963b784577bb"
+content-hash = "d19750d448494ebd5a5967e3559d486c849945d44e83be9bff9a3831e37c4bbd"
[metadata.files]
anyio = [
@@ -1209,8 +1209,8 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
commitizen = [
- {file = "commitizen-2.20.5-py3-none-any.whl", hash = "sha256:836229809351f38bbe616fd81dce70be7cf59b82e64a37b976171a9c9412e829"},
- {file = "commitizen-2.20.5.tar.gz", hash = "sha256:abc14650e79b5366d200c5fcf484e4389337c05aaef0285d09329cc367eab836"},
+ {file = "commitizen-2.21.0-py3-none-any.whl", hash = "sha256:1d388afffa9c9c9729986a81501916d6134a88847a922a2a5563e04fe27de069"},
+ {file = "commitizen-2.21.0.tar.gz", hash = "sha256:afdc1aa16160426c5a0b13a8a4f3c222e0c815740711d774d32a896bd86f961c"},
]
coverage = [
{file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"},
diff --git a/pyproject.toml b/pyproject.toml
index c77b9f9c..39ec25da 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -28,7 +28,7 @@ pytest = "^7.0.1"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
-commitizen = "^2.20.5"
+commitizen = "^2.21.0"
python-semantic-release = "^7.24.0"
python-dotenv = "^0.19.2"
From 4d36a6ffb2b06393316331fcf83d15a55f857a7e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 17 Feb 2022 21:42:22 -0500
Subject: [PATCH 162/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 6f2dead7..665726a3 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -745,7 +745,7 @@ yaml = ["PyYaml (>=5.2)"]
[[package]]
name = "python-semantic-release"
-version = "7.24.0"
+version = "7.25.0"
description = "Automatic Semantic Versioning for Python projects"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "d19750d448494ebd5a5967e3559d486c849945d44e83be9bff9a3831e37c4bbd"
+content-hash = "98239567c238bb4ad7f4379d3cf7b8c26dfd32c9debe2c040ebb23f1690cb139"
[metadata.files]
anyio = [
@@ -1562,8 +1562,8 @@ python-gitlab = [
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
]
python-semantic-release = [
- {file = "python-semantic-release-7.24.0.tar.gz", hash = "sha256:06221d7d2f811d451dfcfdb327c92e8ba9ba7c04b0602a73461b26a398fe543d"},
- {file = "python_semantic_release-7.24.0-py3-none-any.whl", hash = "sha256:a7c6cba07de908cdf465982fb1d781b4fefb821db4c559d87045e1edde668f3f"},
+ {file = "python-semantic-release-7.25.0.tar.gz", hash = "sha256:12cee174e0a5552772b69c243f028a3a97d33d3b56a9ff281570e2afdcf937b3"},
+ {file = "python_semantic_release-7.25.0-py3-none-any.whl", hash = "sha256:ed1a74fb7bd6bf9d9e3d1d2da6b5288ee910fe805e68b97f67b49ea3cc1717b8"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
diff --git a/pyproject.toml b/pyproject.toml
index 39ec25da..227fc348 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,7 +29,7 @@ flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.21.0"
-python-semantic-release = "^7.24.0"
+python-semantic-release = "^7.25.0"
python-dotenv = "^0.19.2"
[tool.semantic_release]
From 67ca995f6da0afd30bd094272d9184ea6f86bd21 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 19 Feb 2022 20:31:24 +0000
Subject: [PATCH 163/737] 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]
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 665726a3..27a15ba5 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -563,7 +563,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.8.2"
+version = "0.9.0"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "98239567c238bb4ad7f4379d3cf7b8c26dfd32c9debe2c040ebb23f1690cb139"
+content-hash = "e12a10d352afe157bbeb583940a41a9a9e544d3b5c9ab364eee06a4b3f8fe633"
[metadata.files]
anyio = [
@@ -1469,8 +1469,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
postgrest-py = [
- {file = "postgrest-py-0.8.2.tar.gz", hash = "sha256:bce4b391abbca18c921554ff1e383c25b772b35686542e00415e617b9ba2a17a"},
- {file = "postgrest_py-0.8.2-py3-none-any.whl", hash = "sha256:47c9981cc08ad7a235446fdd8c1bc5a54dbfd145939e5cebc6d88db9da844ac5"},
+ {file = "postgrest-py-0.9.0.tar.gz", hash = "sha256:7e28f69b12a4614a7534a689fdadcad00b4011b3643164fed4d19039cde71e7b"},
+ {file = "postgrest_py-0.9.0-py3-none-any.whl", hash = "sha256:061d354c81ceeee3033da32b8340597ebda8f7ff5865177c695a73d3e894d3d0"},
]
pre-commit = [
{file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"},
diff --git a/pyproject.toml b/pyproject.toml
index 227fc348..a8d73374 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,7 +16,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-postgrest-py = "^0.8.1"
+postgrest-py = ">=0.8.1,<0.10.0"
realtime = "^0.0.4"
gotrue = "^0.5.0"
httpx = "^0.21.3"
From 21a69da238b043f48fba6d700830c40c6bcbf8fb Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Sat, 19 Feb 2022 21:52:08 +0100
Subject: [PATCH 164/737] feat: export APIResponse and APIError from
postgrest-py (#152)
* Update __init__.py
* Apply isort
---
supabase/__init__.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 803b7793..7ae71aeb 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,5 +1,7 @@
__version__ = "0.4.0"
+from postgrest_py import APIError, APIResponse
+
from supabase import client, lib
from supabase.client import Client, create_client
from supabase.lib.auth_client import SupabaseAuthClient
From ecffe6188259a86595dda63007e73a270e0d5349 Mon Sep 17 00:00:00 2001
From: github-actions
Date: Sat, 19 Feb 2022 20:54:58 +0000
Subject: [PATCH 165/737] chore(release): bump version to v0.5.0
Automatically generated by python-semantic-release
---
CHANGELOG.md | 6 ++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3603b7a3..0a9a1c6b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
+## v0.5.0 (2022-02-19)
+### Feature
+* Export APIResponse and APIError from postgrest-py ([#152](https://github.com/supabase-community/supabase-py/issues/152)) ([`21a69da`](https://github.com/supabase-community/supabase-py/commit/21a69da238b043f48fba6d700830c40c6bcbf8fb))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.4.0...v0.5.0)**
+
## v0.4.0 (2022-02-04)
### Feature
* Update postgrest-py from 0.8.1 to 0.8.2 ([`1feab46`](https://github.com/supabase-community/supabase-py/commit/1feab46f2df64de014aa550952192366cc8055ef))
diff --git a/pyproject.toml b/pyproject.toml
index a8d73374..c2643ee7 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.4.0"
+version = "0.5.0"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 7ae71aeb..2258fccc 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.4.0"
+__version__ = "0.5.0"
from postgrest_py import APIError, APIResponse
From dc3bb7ae9f420e74241c2914a27a9f568e020181 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 23 Feb 2022 01:16:07 -0500
Subject: [PATCH 166/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 92 +++++++++++++++++++++++++-------------------------
pyproject.toml | 2 +-
2 files changed, 47 insertions(+), 47 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 27a15ba5..285b4e22 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -159,7 +159,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "commitizen"
-version = "2.21.0"
+version = "2.21.2"
description = "Python commitizen client tool"
category = "dev"
optional = false
@@ -179,7 +179,7 @@ typing-extensions = ">=4.0.1,<5.0.0"
[[package]]
name = "coverage"
-version = "6.3.1"
+version = "6.3.2"
description = "Code coverage measurement for Python"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "e12a10d352afe157bbeb583940a41a9a9e544d3b5c9ab364eee06a4b3f8fe633"
+content-hash = "1ba2fe671ff4dd6d4cb0c07f995c08b508d8ecac7c041e41b37c58512986aca2"
[metadata.files]
anyio = [
@@ -1209,51 +1209,51 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
commitizen = [
- {file = "commitizen-2.21.0-py3-none-any.whl", hash = "sha256:1d388afffa9c9c9729986a81501916d6134a88847a922a2a5563e04fe27de069"},
- {file = "commitizen-2.21.0.tar.gz", hash = "sha256:afdc1aa16160426c5a0b13a8a4f3c222e0c815740711d774d32a896bd86f961c"},
+ {file = "commitizen-2.21.2-py3-none-any.whl", hash = "sha256:22e7904880eb435d8ddc92bf481d1ae99ebac775222989bb48b15da03ceb6238"},
+ {file = "commitizen-2.21.2.tar.gz", hash = "sha256:64fda8d9d679d2d3d2422c028cb641602fb672560a5485bee9773259f9c4f07c"},
]
coverage = [
- {file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"},
- {file = "coverage-6.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:621f6ea7260ea2ffdaec64fe5cb521669984f567b66f62f81445221d4754df4c"},
- {file = "coverage-6.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f2436d6742c01136dd940ee158bfc7cf5ced3da7e4c949662b8703b5cd8145"},
- {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de73fca6fb403dd72d4da517cfc49fcf791f74eee697d3219f6be29adf5af6ce"},
- {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78fbb2be068a13a5d99dce9e1e7d168db880870f7bc73f876152130575bd6167"},
- {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5a4551dfd09c3bd12fca8144d47fe7745275adf3229b7223c2f9e29a975ebda"},
- {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7bff3a98f63b47464480de1b5bdd80c8fade0ba2832c9381253c9b74c4153c27"},
- {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a06c358f4aed05fa1099c39decc8022261bb07dfadc127c08cfbd1391b09689e"},
- {file = "coverage-6.3.1-cp310-cp310-win32.whl", hash = "sha256:9fff3ff052922cb99f9e52f63f985d4f7a54f6b94287463bc66b7cdf3eb41217"},
- {file = "coverage-6.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:276b13cc085474e482566c477c25ed66a097b44c6e77132f3304ac0b039f83eb"},
- {file = "coverage-6.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:56c4a409381ddd7bbff134e9756077860d4e8a583d310a6f38a2315b9ce301d0"},
- {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eb494070aa060ceba6e4bbf44c1bc5fa97bfb883a0d9b0c9049415f9e944793"},
- {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e15d424b8153756b7c903bde6d4610be0c3daca3986173c18dd5c1a1625e4cd"},
- {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d47a897c1e91f33f177c21de897267b38fbb45f2cd8e22a710bcef1df09ac1"},
- {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:25e73d4c81efa8ea3785274a2f7f3bfbbeccb6fcba2a0bdd3be9223371c37554"},
- {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fac0bcc5b7e8169bffa87f0dcc24435446d329cbc2b5486d155c2e0f3b493ae1"},
- {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:72128176fea72012063200b7b395ed8a57849282b207321124d7ff14e26988e8"},
- {file = "coverage-6.3.1-cp37-cp37m-win32.whl", hash = "sha256:1bc6d709939ff262fd1432f03f080c5042dc6508b6e0d3d20e61dd045456a1a0"},
- {file = "coverage-6.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:618eeba986cea7f621d8607ee378ecc8c2504b98b3fdc4952b30fe3578304687"},
- {file = "coverage-6.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ed164af5c9078596cfc40b078c3b337911190d3faeac830c3f1274f26b8320"},
- {file = "coverage-6.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:352c68e233409c31048a3725c446a9e48bbff36e39db92774d4f2380d630d8f8"},
- {file = "coverage-6.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:448d7bde7ceb6c69e08474c2ddbc5b4cd13c9e4aa4a717467f716b5fc938a734"},
- {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9fde6b90889522c220dd56a670102ceef24955d994ff7af2cb786b4ba8fe11e4"},
- {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e647a0be741edbb529a72644e999acb09f2ad60465f80757da183528941ff975"},
- {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a5cdc3adb4f8bb8d8f5e64c2e9e282bc12980ef055ec6da59db562ee9bdfefa"},
- {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2dd70a167843b4b4b2630c0c56f1b586fe965b4f8ac5da05b6690344fd065c6b"},
- {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ad0a117b8dc2061ce9461ea4c1b4799e55edceb236522c5b8f958ce9ed8fa9a"},
- {file = "coverage-6.3.1-cp38-cp38-win32.whl", hash = "sha256:e92c7a5f7d62edff50f60a045dc9542bf939758c95b2fcd686175dd10ce0ed10"},
- {file = "coverage-6.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:482fb42eea6164894ff82abbcf33d526362de5d1a7ed25af7ecbdddd28fc124f"},
- {file = "coverage-6.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c5b81fb37db76ebea79aa963b76d96ff854e7662921ce742293463635a87a78d"},
- {file = "coverage-6.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f923b9ab265136e57cc14794a15b9dcea07a9c578609cd5dbbfff28a0d15e6"},
- {file = "coverage-6.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d296cbc8254a7dffdd7bcc2eb70be5a233aae7c01856d2d936f5ac4e8ac1f1"},
- {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245ab82e8554fa88c4b2ab1e098ae051faac5af829efdcf2ce6b34dccd5567c"},
- {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f2b05757c92ad96b33dbf8e8ec8d4ccb9af6ae3c9e9bd141c7cc44d20c6bcba"},
- {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9e3dd806f34de38d4c01416344e98eab2437ac450b3ae39c62a0ede2f8b5e4ed"},
- {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d651fde74a4d3122e5562705824507e2f5b2d3d57557f1916c4b27635f8fbe3f"},
- {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:704f89b87c4f4737da2860695a18c852b78ec7279b24eedacab10b29067d3a38"},
- {file = "coverage-6.3.1-cp39-cp39-win32.whl", hash = "sha256:2aed4761809640f02e44e16b8b32c1a5dee5e80ea30a0ff0912158bde9c501f2"},
- {file = "coverage-6.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9976fb0a5709988778ac9bc44f3d50fccd989987876dfd7716dee28beed0a9fa"},
- {file = "coverage-6.3.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:463e52616ea687fd323888e86bf25e864a3cc6335a043fad6bbb037dbf49bbe2"},
- {file = "coverage-6.3.1.tar.gz", hash = "sha256:6c3f6158b02ac403868eea390930ae64e9a9a2a5bbfafefbb920d29258d9f2f8"},
+ {file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"},
+ {file = "coverage-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac"},
+ {file = "coverage-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1"},
+ {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4"},
+ {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903"},
+ {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c"},
+ {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f"},
+ {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05"},
+ {file = "coverage-6.3.2-cp310-cp310-win32.whl", hash = "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39"},
+ {file = "coverage-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1"},
+ {file = "coverage-6.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa"},
+ {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518"},
+ {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7"},
+ {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6"},
+ {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad"},
+ {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359"},
+ {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4"},
+ {file = "coverage-6.3.2-cp37-cp37m-win32.whl", hash = "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca"},
+ {file = "coverage-6.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3"},
+ {file = "coverage-6.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d"},
+ {file = "coverage-6.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059"},
+ {file = "coverage-6.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512"},
+ {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca"},
+ {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d"},
+ {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0"},
+ {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6"},
+ {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2"},
+ {file = "coverage-6.3.2-cp38-cp38-win32.whl", hash = "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e"},
+ {file = "coverage-6.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1"},
+ {file = "coverage-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620"},
+ {file = "coverage-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d"},
+ {file = "coverage-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536"},
+ {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7"},
+ {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2"},
+ {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4"},
+ {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69"},
+ {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684"},
+ {file = "coverage-6.3.2-cp39-cp39-win32.whl", hash = "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4"},
+ {file = "coverage-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92"},
+ {file = "coverage-6.3.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf"},
+ {file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"},
]
cryptography = [
{file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
diff --git a/pyproject.toml b/pyproject.toml
index c2643ee7..f76b9804 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -28,7 +28,7 @@ pytest = "^7.0.1"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
-commitizen = "^2.21.0"
+commitizen = "^2.21.2"
python-semantic-release = "^7.25.0"
python-dotenv = "^0.19.2"
From c03ff4b3edd335c9d4e5de13f0f0e6d175ced8ea Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 23 Feb 2022 18:51:15 -0500
Subject: [PATCH 167/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 285b4e22..b98d7124 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -745,7 +745,7 @@ yaml = ["PyYaml (>=5.2)"]
[[package]]
name = "python-semantic-release"
-version = "7.25.0"
+version = "7.25.1"
description = "Automatic Semantic Versioning for Python projects"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "1ba2fe671ff4dd6d4cb0c07f995c08b508d8ecac7c041e41b37c58512986aca2"
+content-hash = "44e69aefb00ef2fc527b4ed7e364f010f983dac66910d09d88f031db5df75f30"
[metadata.files]
anyio = [
@@ -1562,8 +1562,8 @@ python-gitlab = [
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
]
python-semantic-release = [
- {file = "python-semantic-release-7.25.0.tar.gz", hash = "sha256:12cee174e0a5552772b69c243f028a3a97d33d3b56a9ff281570e2afdcf937b3"},
- {file = "python_semantic_release-7.25.0-py3-none-any.whl", hash = "sha256:ed1a74fb7bd6bf9d9e3d1d2da6b5288ee910fe805e68b97f67b49ea3cc1717b8"},
+ {file = "python-semantic-release-7.25.1.tar.gz", hash = "sha256:d786a0d45de363fc28b2ee19cc2f9f618ba5291c90eeff896e56dd652432129e"},
+ {file = "python_semantic_release-7.25.1-py3-none-any.whl", hash = "sha256:79626f689a8bda1d08aa5e526cf2bed8d7507b7b3d8f7d7225c7567c664dca6a"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
diff --git a/pyproject.toml b/pyproject.toml
index f76b9804..e1176b8d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,7 +29,7 @@ flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.21.2"
-python-semantic-release = "^7.25.0"
+python-semantic-release = "^7.25.1"
python-dotenv = "^0.19.2"
[tool.semantic_release]
From 4d43f3d6239c11682aab05b409e532a9ba7909f2 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 25 Feb 2022 00:48:07 +0100
Subject: [PATCH 168/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index b98d7124..48a7ac5d 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -745,7 +745,7 @@ yaml = ["PyYaml (>=5.2)"]
[[package]]
name = "python-semantic-release"
-version = "7.25.1"
+version = "7.25.2"
description = "Automatic Semantic Versioning for Python projects"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "44e69aefb00ef2fc527b4ed7e364f010f983dac66910d09d88f031db5df75f30"
+content-hash = "043b96280c8ddd0bfc43d1836832b66ad54a01d763d5e0edca5cf03d7a832c00"
[metadata.files]
anyio = [
@@ -1562,8 +1562,8 @@ python-gitlab = [
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
]
python-semantic-release = [
- {file = "python-semantic-release-7.25.1.tar.gz", hash = "sha256:d786a0d45de363fc28b2ee19cc2f9f618ba5291c90eeff896e56dd652432129e"},
- {file = "python_semantic_release-7.25.1-py3-none-any.whl", hash = "sha256:79626f689a8bda1d08aa5e526cf2bed8d7507b7b3d8f7d7225c7567c664dca6a"},
+ {file = "python-semantic-release-7.25.2.tar.gz", hash = "sha256:134294d3ee02a3aa464bf3c00c7777b0c84c6b3332fe234e8b7a087cbf3866d2"},
+ {file = "python_semantic_release-7.25.2-py3-none-any.whl", hash = "sha256:8b21bf503486bf13db048501da60362f9ab5adb88435fa431186bcbf24d431ef"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
diff --git a/pyproject.toml b/pyproject.toml
index e1176b8d..5809988d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,7 +29,7 @@ flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.21.2"
-python-semantic-release = "^7.25.1"
+python-semantic-release = "^7.25.2"
python-dotenv = "^0.19.2"
[tool.semantic_release]
From b9097e665b411ea53cad70b9c1cc893d61fe295f Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Fri, 25 Feb 2022 01:15:50 +0100
Subject: [PATCH 169/737] fix: Require 0.9.0>= postgrest dependency (#158)
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 5809988d..882b3906 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,7 +16,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-postgrest-py = ">=0.8.1,<0.10.0"
+postgrest-py = ">=0.9.0,<0.10.0"
realtime = "^0.0.4"
gotrue = "^0.5.0"
httpx = "^0.21.3"
From 65508642fe62aeba3f40c5f88367f39167950e37 Mon Sep 17 00:00:00 2001
From: github-actions
Date: Fri, 25 Feb 2022 00:18:53 +0000
Subject: [PATCH 170/737] chore(release): bump version to v0.5.1
Automatically generated by python-semantic-release
---
CHANGELOG.md | 6 ++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0a9a1c6b..757e90f4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
+## v0.5.1 (2022-02-25)
+### Fix
+* Require 0.9.0>= postgrest dependency ([#158](https://github.com/supabase-community/supabase-py/issues/158)) ([`b9097e6`](https://github.com/supabase-community/supabase-py/commit/b9097e665b411ea53cad70b9c1cc893d61fe295f))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.5.0...v0.5.1)**
+
## v0.5.0 (2022-02-19)
### Feature
* Export APIResponse and APIError from postgrest-py ([#152](https://github.com/supabase-community/supabase-py/issues/152)) ([`21a69da`](https://github.com/supabase-community/supabase-py/commit/21a69da238b043f48fba6d700830c40c6bcbf8fb))
diff --git a/pyproject.toml b/pyproject.toml
index 882b3906..4ca7bbf6 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.5.0"
+version = "0.5.1"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 2258fccc..80e150bd 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.5.0"
+__version__ = "0.5.1"
from postgrest_py import APIError, APIResponse
From b84e3c418b0b6666c0ba9f57714212b19bd9b9d0 Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Fri, 25 Feb 2022 01:28:15 +0100
Subject: [PATCH 171/737] chore: Update README.md to new api (#159)
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index a53162ba..8852a9bb 100644
--- a/README.md
+++ b/README.md
@@ -132,7 +132,7 @@ 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").insert({"name":"Germany"}).execute()
-assert len(data.get("data", [])) > 0
+assert len(data.data) > 0
```
### Selection of Data
@@ -145,7 +145,7 @@ 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
+assert len(data.data) > 0
```
### Update of Data
@@ -156,7 +156,7 @@ 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)
-data = supabase.table("countries").update({"country": "Indonesia", "capital_city": "Jakarta"}).eq("id", "1").execute()
+data = supabase.table("countries").update({"country": "Indonesia", "capital_city": "Jakarta"}).eq("id", 1).execute()
```
## Realtime Changes
From c8b75e05f3926873dfecf1718c1a530f19815d32 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 7 Mar 2022 19:32:27 -0500
Subject: [PATCH 172/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 48a7ac5d..9ebeb666 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -745,7 +745,7 @@ yaml = ["PyYaml (>=5.2)"]
[[package]]
name = "python-semantic-release"
-version = "7.25.2"
+version = "7.26.0"
description = "Automatic Semantic Versioning for Python projects"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "043b96280c8ddd0bfc43d1836832b66ad54a01d763d5e0edca5cf03d7a832c00"
+content-hash = "176f2c9669d8d004401699db5ee68bf306d4398700bbe8fe64192f20ac04e868"
[metadata.files]
anyio = [
@@ -1562,8 +1562,8 @@ python-gitlab = [
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
]
python-semantic-release = [
- {file = "python-semantic-release-7.25.2.tar.gz", hash = "sha256:134294d3ee02a3aa464bf3c00c7777b0c84c6b3332fe234e8b7a087cbf3866d2"},
- {file = "python_semantic_release-7.25.2-py3-none-any.whl", hash = "sha256:8b21bf503486bf13db048501da60362f9ab5adb88435fa431186bcbf24d431ef"},
+ {file = "python-semantic-release-7.26.0.tar.gz", hash = "sha256:9876885cf16af43d75610b4f46e27d5ad0f699c7d574dcfe0c6b62ab7d43458d"},
+ {file = "python_semantic_release-7.26.0-py3-none-any.whl", hash = "sha256:ddd7e2460c526264148d534658ea35aee265d615fe110cdf4e16abc6ffc22e50"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
diff --git a/pyproject.toml b/pyproject.toml
index 4ca7bbf6..7f08b2ac 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,7 +29,7 @@ flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.21.2"
-python-semantic-release = "^7.25.2"
+python-semantic-release = "^7.26.0"
python-dotenv = "^0.19.2"
[tool.semantic_release]
From ecfe5448c52c23e496767c5a9965f3b0430ff408 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 8 Mar 2022 04:58:19 +0100
Subject: [PATCH 173/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 9ebeb666..e83a3389 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -563,7 +563,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.9.0"
+version = "0.9.1"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
@@ -1469,8 +1469,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
postgrest-py = [
- {file = "postgrest-py-0.9.0.tar.gz", hash = "sha256:7e28f69b12a4614a7534a689fdadcad00b4011b3643164fed4d19039cde71e7b"},
- {file = "postgrest_py-0.9.0-py3-none-any.whl", hash = "sha256:061d354c81ceeee3033da32b8340597ebda8f7ff5865177c695a73d3e894d3d0"},
+ {file = "postgrest-py-0.9.1.tar.gz", hash = "sha256:236a1d01a6d60239c437904399d490ba0333d8f3d863ee6ea56d00f676684854"},
+ {file = "postgrest_py-0.9.1-py3-none-any.whl", hash = "sha256:48d8da626c4098b693ec1082f1d8e5fb17b0acc8e5edbe0decbf29b6a8d34ee9"},
]
pre-commit = [
{file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"},
From 8209345e336483031524cd51e18ef7b0b251a5f3 Mon Sep 17 00:00:00 2001
From: github-actions
Date: Tue, 8 Mar 2022 04:01:18 +0000
Subject: [PATCH 174/737] chore(release): bump version to v0.5.2
Automatically generated by python-semantic-release
---
CHANGELOG.md | 6 ++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 757e90f4..b15343bd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
+## v0.5.2 (2022-03-08)
+### Fix
+* Bump postgrest-py from 0.9.0 to 0.9.1 ([#164](https://github.com/supabase-community/supabase-py/issues/164)) ([`ecfe544`](https://github.com/supabase-community/supabase-py/commit/ecfe5448c52c23e496767c5a9965f3b0430ff408))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.5.1...v0.5.2)**
+
## v0.5.1 (2022-02-25)
### Fix
* Require 0.9.0>= postgrest dependency ([#158](https://github.com/supabase-community/supabase-py/issues/158)) ([`b9097e6`](https://github.com/supabase-community/supabase-py/commit/b9097e665b411ea53cad70b9c1cc893d61fe295f))
diff --git a/pyproject.toml b/pyproject.toml
index 7f08b2ac..6196751a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.5.1"
+version = "0.5.2"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 80e150bd..3ceb557f 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.5.1"
+__version__ = "0.5.2"
from postgrest_py import APIError, APIResponse
From 59ad801b2e51dc3c9d4cc82069bd19501f0bd923 Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Tue, 8 Mar 2022 05:13:38 +0100
Subject: [PATCH 175/737] fix: force postgrest version with fix (#165)
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 6196751a..3baf1673 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,7 +16,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-postgrest-py = ">=0.9.0,<0.10.0"
+postgrest-py = ">=0.9.1,<0.10.0"
realtime = "^0.0.4"
gotrue = "^0.5.0"
httpx = "^0.21.3"
From 47c2f9627ca8aeb6469e1a18e397ba90e5c92d44 Mon Sep 17 00:00:00 2001
From: github-actions
Date: Tue, 8 Mar 2022 04:16:29 +0000
Subject: [PATCH 176/737] chore(release): bump version to v0.5.3
Automatically generated by python-semantic-release
---
CHANGELOG.md | 6 ++++++
pyproject.toml | 2 +-
supabase/__init__.py | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b15343bd..992abbbc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
+## v0.5.3 (2022-03-08)
+### Fix
+* Force postgrest version with fix ([#165](https://github.com/supabase-community/supabase-py/issues/165)) ([`59ad801`](https://github.com/supabase-community/supabase-py/commit/59ad801b2e51dc3c9d4cc82069bd19501f0bd923))
+
+**[See all commits in this version](https://github.com/supabase-community/supabase-py/compare/v0.5.2...v0.5.3)**
+
## v0.5.2 (2022-03-08)
### Fix
* Bump postgrest-py from 0.9.0 to 0.9.1 ([#164](https://github.com/supabase-community/supabase-py/issues/164)) ([`ecfe544`](https://github.com/supabase-community/supabase-py/commit/ecfe5448c52c23e496767c5a9965f3b0430ff408))
diff --git a/pyproject.toml b/pyproject.toml
index 3baf1673..b71f3660 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "supabase"
-version = "0.5.2"
+version = "0.5.3"
description = "Supabase client for Python."
authors = ["Joel Lee ", "Leon Fedden ", "Daniel Reinón García ", "Leynier Gutiérrez González ", "Anand"]
homepage = "https://github.com/supabase-community/supabase-py"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 3ceb557f..8de6601f 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.5.2"
+__version__ = "0.5.3"
from postgrest_py import APIError, APIResponse
From 0a306d1629fc4fff8ee59495951dfde9478a8631 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 14 Mar 2022 19:36:35 -0400
Subject: [PATCH 177/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 10 +++++-----
pyproject.toml | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index e83a3389..9e079e82 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -670,11 +670,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pytest"
-version = "7.0.1"
+version = "7.1.0"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "176f2c9669d8d004401699db5ee68bf306d4398700bbe8fe64192f20ac04e868"
+content-hash = "9a35daba503e29d3164dd2b27434288828b22ce1c01460420bbd70dd038b53cb"
[metadata.files]
anyio = [
@@ -1542,8 +1542,8 @@ pyparsing = [
{file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pytest = [
- {file = "pytest-7.0.1-py3-none-any.whl", hash = "sha256:9ce3ff477af913ecf6321fe337b93a2c0dcf2a0a1439c43f5452112c1e4280db"},
- {file = "pytest-7.0.1.tar.gz", hash = "sha256:e30905a0c131d3d94b89624a1cc5afec3e0ba2fbdb151867d8e0ebd49850f171"},
+ {file = "pytest-7.1.0-py3-none-any.whl", hash = "sha256:b555252a95bbb2a37a97b5ac2eb050c436f7989993565f5e0c9128fcaacadd0e"},
+ {file = "pytest-7.1.0.tar.gz", hash = "sha256:f1089d218cfcc63a212c42896f1b7fbf096874d045e1988186861a1a87d27b47"},
]
pytest-cov = [
{file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"},
diff --git a/pyproject.toml b/pyproject.toml
index b71f3660..aeb17492 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -24,7 +24,7 @@ httpx = "^0.21.3"
[tool.poetry.dev-dependencies]
pre-commit = "^2.17.0"
black = "^22.1"
-pytest = "^7.0.1"
+pytest = "^7.1.0"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
From 1cdb9262a09af0c5799f63355ffdc6ec3012f4b5 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 14 Mar 2022 21:29:08 -0400
Subject: [PATCH 178/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 9e079e82..658ef8a6 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -563,7 +563,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.9.1"
+version = "0.10.0"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "9a35daba503e29d3164dd2b27434288828b22ce1c01460420bbd70dd038b53cb"
+content-hash = "567865e64c370ad355622eac7a888dc5ff715efceedd06a3cf4f80834a01e287"
[metadata.files]
anyio = [
@@ -1469,8 +1469,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
postgrest-py = [
- {file = "postgrest-py-0.9.1.tar.gz", hash = "sha256:236a1d01a6d60239c437904399d490ba0333d8f3d863ee6ea56d00f676684854"},
- {file = "postgrest_py-0.9.1-py3-none-any.whl", hash = "sha256:48d8da626c4098b693ec1082f1d8e5fb17b0acc8e5edbe0decbf29b6a8d34ee9"},
+ {file = "postgrest-py-0.10.0.tar.gz", hash = "sha256:8d4d9cbf0c153d777968c4137f77f2bcd18eb79e37b128680fefbe36fa74c3ed"},
+ {file = "postgrest_py-0.10.0-py3-none-any.whl", hash = "sha256:c30ec588b830d158a54209ae7c53959e3007b04907559e08277155030469734f"},
]
pre-commit = [
{file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"},
diff --git a/pyproject.toml b/pyproject.toml
index aeb17492..dfcf31c8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,7 +16,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-postgrest-py = ">=0.9.1,<0.10.0"
+postgrest-py = ">=0.9.1,<0.11.0"
realtime = "^0.0.4"
gotrue = "^0.5.0"
httpx = "^0.21.3"
From 00d92399fbf9640fe5738932f99302ca08c47a81 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 15 Mar 2022 19:35:03 -0400
Subject: [PATCH 179/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 10 +++++-----
pyproject.toml | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 658ef8a6..79cef08b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -745,7 +745,7 @@ yaml = ["PyYaml (>=5.2)"]
[[package]]
name = "python-semantic-release"
-version = "7.26.0"
+version = "7.27.0"
description = "Automatic Semantic Versioning for Python projects"
category = "dev"
optional = false
@@ -757,7 +757,7 @@ click-log = ">=0.3,<1"
dotty-dict = ">=1.3.0,<2"
gitpython = ">=3.0.8,<4"
invoke = ">=1.4.1,<2"
-python-gitlab = ">=1.10,<3"
+python-gitlab = ">=2,<4"
requests = ">=2.25,<3"
semver = ">=2.10,<3"
tomlkit = "0.7.0"
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "567865e64c370ad355622eac7a888dc5ff715efceedd06a3cf4f80834a01e287"
+content-hash = "a470599d4d4de2ad8a91dc85393e2689e764bb8807120bdd8bfce505e7ac4494"
[metadata.files]
anyio = [
@@ -1562,8 +1562,8 @@ python-gitlab = [
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
]
python-semantic-release = [
- {file = "python-semantic-release-7.26.0.tar.gz", hash = "sha256:9876885cf16af43d75610b4f46e27d5ad0f699c7d574dcfe0c6b62ab7d43458d"},
- {file = "python_semantic_release-7.26.0-py3-none-any.whl", hash = "sha256:ddd7e2460c526264148d534658ea35aee265d615fe110cdf4e16abc6ffc22e50"},
+ {file = "python-semantic-release-7.27.0.tar.gz", hash = "sha256:d115360703cc66a757f650f795fc1d8cd7fdf7688cb8645a36a713f5144b01ce"},
+ {file = "python_semantic_release-7.27.0-py3-none-any.whl", hash = "sha256:dd95785719b5c04fc63c29c2e363735d4d622b713b2b99b41bb0c6ded57311de"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
diff --git a/pyproject.toml b/pyproject.toml
index dfcf31c8..497454b2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,7 +29,7 @@ flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.21.2"
-python-semantic-release = "^7.26.0"
+python-semantic-release = "^7.27.0"
python-dotenv = "^0.19.2"
[tool.semantic_release]
From 64e23a158d4361062fe3fcd1b8709d1621bd2597 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 18 Mar 2022 09:59:41 -0400
Subject: [PATCH 180/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 79cef08b..9b7ce474 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -670,7 +670,7 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pytest"
-version = "7.1.0"
+version = "7.1.1"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "a470599d4d4de2ad8a91dc85393e2689e764bb8807120bdd8bfce505e7ac4494"
+content-hash = "6b404cd6f2a1b057dd428a276532e9919d62056802959dd9ce29eccdad29b993"
[metadata.files]
anyio = [
@@ -1542,8 +1542,8 @@ pyparsing = [
{file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pytest = [
- {file = "pytest-7.1.0-py3-none-any.whl", hash = "sha256:b555252a95bbb2a37a97b5ac2eb050c436f7989993565f5e0c9128fcaacadd0e"},
- {file = "pytest-7.1.0.tar.gz", hash = "sha256:f1089d218cfcc63a212c42896f1b7fbf096874d045e1988186861a1a87d27b47"},
+ {file = "pytest-7.1.1-py3-none-any.whl", hash = "sha256:92f723789a8fdd7180b6b06483874feca4c48a5c76968e03bb3e7f806a1869ea"},
+ {file = "pytest-7.1.1.tar.gz", hash = "sha256:841132caef6b1ad17a9afde46dc4f6cfa59a05f9555aae5151f73bdf2820ca63"},
]
pytest-cov = [
{file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"},
diff --git a/pyproject.toml b/pyproject.toml
index 497454b2..ebb8912f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -24,7 +24,7 @@ httpx = "^0.21.3"
[tool.poetry.dev-dependencies]
pre-commit = "^2.17.0"
black = "^22.1"
-pytest = "^7.1.0"
+pytest = "^7.1.1"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
From 1817e58f315bf6e6977dc901bed230e8aedefb1b Mon Sep 17 00:00:00 2001
From: cloudguruab
Date: Sun, 20 Mar 2022 23:48:35 -0400
Subject: [PATCH 181/737] dev: linted scripts and sorted imports
---
examples/FastAPI/config.py | 14 ++++---
examples/FastAPI/data/database.py | 12 +++---
examples/FastAPI/main.py | 66 +++++++++++++++----------------
3 files changed, 48 insertions(+), 44 deletions(-)
diff --git a/examples/FastAPI/config.py b/examples/FastAPI/config.py
index c723e774..cfc7ddd1 100644
--- a/examples/FastAPI/config.py
+++ b/examples/FastAPI/config.py
@@ -1,15 +1,17 @@
import os
+
from dotenv import load_dotenv
load_dotenv()
+
class Config:
"""
Root level configuration for project
"""
-
- URL = os.getenv('URL')
-
- KEY = os.getenv('KEY')
-
- REDIS_URL = os.getenv('LOCAL_REDIS_INSTANCE')
\ No newline at end of file
+
+ URL = os.getenv("URL")
+
+ KEY = os.getenv("KEY")
+
+ REDIS_URL = os.getenv("LOCAL_REDIS_INSTANCE")
diff --git a/examples/FastAPI/data/database.py b/examples/FastAPI/data/database.py
index e01686c5..7369077e 100644
--- a/examples/FastAPI/data/database.py
+++ b/examples/FastAPI/data/database.py
@@ -1,18 +1,20 @@
import os
-from supabase import create_client, Client
-#variables for database and url configuration
+from supabase import Client, create_client
+
+# variables for database and url configuration
from config import Config
+
class SupabaseDB:
"""
class instance for database connection to supabase
-
+
:str: url: configuration for database url for data inside supafast project
:str: key: configuration for database secret key for authentication
:object: supabase: Supabase instance for connection to database environment
"""
-
+
url: str = Config.URL
key: str = Config.KEY
- supabase: Client = create_client(url, key)
\ No newline at end of file
+ supabase: Client = create_client(url, key)
diff --git a/examples/FastAPI/main.py b/examples/FastAPI/main.py
index d99435d8..73491a54 100644
--- a/examples/FastAPI/main.py
+++ b/examples/FastAPI/main.py
@@ -1,14 +1,12 @@
-from fastapi import FastAPI, Response, Request
-import json
-
-# database cursor to supabase
-from data.database import SupabaseDB
+import json
+from fastapi import FastAPI, Request, Response
# redis related imports
-from fastapi_redis_cache import cache_one_week, FastApiRedisCache
+from fastapi_redis_cache import FastApiRedisCache, cache_one_week
# supabase client
from config import Config
+# database cursor to supabase
from data.database import SupabaseDB
# application factory
@@ -19,40 +17,42 @@
def onStart():
"""
Helper function for on event handler in FastAPI. The event
- passed in as a param checks for the startup event for the
+ passed in as a param checks for the startup event for the
current application. This then triggers our connection to our
redis cache via instance.
-
- :rtype: Cache instance for application.
+
+ :rtype: Cache instance for application.
"""
-
+
r = FastApiRedisCache()
r.init(
host_url=Config.REDIS_URL,
prefix="supafast-cache",
response_header="X-Supafast-Cache",
- ignore_arg_types=[Request, Response, SupabaseDB.supabase]
+ ignore_arg_types=[Request, Response, SupabaseDB.supabase],
)
@app.get("/")
-def index():
+def index():
"""
Initial view or endpoint when visiting localhost:8000/
-
+
:rtype: Welcome and instruction for walkthrough via readme or localhost:8000/docs
"""
-
- return {"👋 Hello": "Please refer to the readme\
- documentation for more or visit http://localhost:8000/docs"}
+
+ return {
+ "👋 Hello": "Please refer to the readme\
+ documentation for more or visit http://localhost:8000/docs"
+ }
@app.get("/getResult")
def query():
"""
Endpoing for testing data to be pulled from your supabase instance.
-
- :rtype: 1st row of consumer credit data.
+
+ :rtype: 1st row of consumer credit data.
:endpoint: {
"data": [
{
@@ -65,8 +65,8 @@ def query():
],
}
"""
-
- data = SupabaseDB.supabase.table('credit_data').select('*').limit(1).execute()
+
+ data = SupabaseDB.supabase.table("credit_data").select("*").limit(1).execute()
return data
@@ -76,9 +76,9 @@ async def get_defaults(request: Request, response: Response):
"""
asynchronous function call for grabbing load default specific data
by the first 10 rows of data from your supabase instance.
-
+
:rtype: Loan defaults for individuals by a certain age or older.
- :endpoint:
+ :endpoint:
HTTP/1.1 200 OK
cache-control: max-age=604321
content-length: 894
@@ -88,17 +88,17 @@ async def get_defaults(request: Request, response: Response):
server: uvicorn
x-supafast-cache: Hit
- "data=[{'clientid': 1, 'income': 66155.9251, 'age': 59, 'loan': 8106.532131, 'default': '0'},
- {'clientid': 2, 'income': 34415.15397, 'age': 48, 'loan': 6564.745018, 'default': '0'},
- {'clientid': 3, 'income': 57317.17006, 'age': 63, 'loan': 8020.953296, 'default': '0'},
- {'clientid': 4, 'income': 42709.5342, 'age': 46, 'loan': 6103.64226, 'default': '0'},
- {'clientid': 5, 'income': 66952.68885, 'age': 19, 'loan': 8770.099235, 'default': '1'},
- {'clientid': 6, 'income': 24904.06414, 'age': 57, 'loan': 15.49859844, 'default': '0'},
- {'clientid': 7, 'income': 48430.35961, 'age': 27, 'loan': 5722.581981, 'default': '0'},
- {'clientid': 8, 'income': 24500.14198, 'age': 33, 'loan': 2971.00331, 'default': '1'},
- {'clientid': 9, 'income': 40654.89254, 'age': 55, 'loan': 4755.82528, 'default': '0'},
+ "data=[{'clientid': 1, 'income': 66155.9251, 'age': 59, 'loan': 8106.532131, 'default': '0'},
+ {'clientid': 2, 'income': 34415.15397, 'age': 48, 'loan': 6564.745018, 'default': '0'},
+ {'clientid': 3, 'income': 57317.17006, 'age': 63, 'loan': 8020.953296, 'default': '0'},
+ {'clientid': 4, 'income': 42709.5342, 'age': 46, 'loan': 6103.64226, 'default': '0'},
+ {'clientid': 5, 'income': 66952.68885, 'age': 19, 'loan': 8770.099235, 'default': '1'},
+ {'clientid': 6, 'income': 24904.06414, 'age': 57, 'loan': 15.49859844, 'default': '0'},
+ {'clientid': 7, 'income': 48430.35961, 'age': 27, 'loan': 5722.581981, 'default': '0'},
+ {'clientid': 8, 'income': 24500.14198, 'age': 33, 'loan': 2971.00331, 'default': '1'},
+ {'clientid': 9, 'income': 40654.89254, 'age': 55, 'loan': 4755.82528, 'default': '0'},
{'clientid': 10, 'income': 25075.87277, 'age': 40, 'loan': 1409.230371, 'default': '0'}] count=None"
"""
- data = SupabaseDB.supabase.table('credit_data').select('*').limit(10).execute()
- return json.dumps(data, indent=4)
\ No newline at end of file
+ data = SupabaseDB.supabase.table("credit_data").select("*").limit(10).execute()
+ return json.dumps(data, indent=4)
From 106b4acb5be4957e804d43bf44f0e59b764874df Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 24 Mar 2022 23:48:17 -0400
Subject: [PATCH 182/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 9b7ce474..21c36d2f 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -718,7 +718,7 @@ six = ">=1.5"
[[package]]
name = "python-dotenv"
-version = "0.19.2"
+version = "0.20.0"
description = "Read key-value pairs from a .env file and set them as environment variables"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "6b404cd6f2a1b057dd428a276532e9919d62056802959dd9ce29eccdad29b993"
+content-hash = "1de76433d24eb3e48d4c570ccd9e1735d1a353e6efdb2ec59fbb08105cdfabfa"
[metadata.files]
anyio = [
@@ -1554,8 +1554,8 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
python-dotenv = [
- {file = "python-dotenv-0.19.2.tar.gz", hash = "sha256:a5de49a31e953b45ff2d2fd434bbc2670e8db5273606c1e737cc6b93eff3655f"},
- {file = "python_dotenv-0.19.2-py2.py3-none-any.whl", hash = "sha256:32b2bdc1873fd3a3c346da1c6db83d0053c3c62f28f1f38516070c4c8971b1d3"},
+ {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"},
+ {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"},
]
python-gitlab = [
{file = "python-gitlab-2.10.1.tar.gz", hash = "sha256:7afa7d7c062fa62c173190452265a30feefb844428efc58ea5244f3b9fc0d40f"},
diff --git a/pyproject.toml b/pyproject.toml
index ebb8912f..5a765e72 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -30,7 +30,7 @@ isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.21.2"
python-semantic-release = "^7.27.0"
-python-dotenv = "^0.19.2"
+python-dotenv = "^0.20.0"
[tool.semantic_release]
version_variable = "supabase/__init__.py:__version__"
From dd3b0b8451ff85d0091022fac512b022af90c777 Mon Sep 17 00:00:00 2001
From: cloudguruab
Date: Sun, 27 Mar 2022 15:44:34 -0400
Subject: [PATCH 183/737] 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.
---
examples/FastAPI/.gitignore | 2 +-
examples/FastAPI/README.md | 14 +-
examples/FastAPI/data/credit_data.csv | 4002 ++++++++++++-------------
examples/FastAPI/data/database.py | 6 +-
examples/FastAPI/main.py | 9 +-
5 files changed, 2016 insertions(+), 2017 deletions(-)
diff --git a/examples/FastAPI/.gitignore b/examples/FastAPI/.gitignore
index e5d259d9..db43a684 100644
--- a/examples/FastAPI/.gitignore
+++ b/examples/FastAPI/.gitignore
@@ -1,4 +1,4 @@
dump.rdb
env/
.env
-__pycache__
\ No newline at end of file
+__pycache__
diff --git a/examples/FastAPI/README.md b/examples/FastAPI/README.md
index 579e768e..6108bdbb 100644
--- a/examples/FastAPI/README.md
+++ b/examples/FastAPI/README.md
@@ -8,12 +8,12 @@ See docs for more information,
Setup your virtual environment:
```bash
-python3 -m venv env
+python3 -m venv env
```
Activating your environment
-```zsh
+```zsh
source env/bin/activate
```
@@ -64,7 +64,7 @@ INFO: Application startup complete.
### 🎾 Endpoints
-Introduction to your application.
+Introduction to your application.
```bash
http "http://127.0.0.1:8000/"
@@ -79,10 +79,10 @@ server: uvicorn
}
```
-Working with your redis cache, the following call will pull data
-from your supabase database, and cache it.
+Working with your redis cache, the following call will pull data
+from your supabase database, and cache it.
-The x-fastapi-cache header field indicates that this response was found in the Redis cache (a.k.a. a Hit).
+The x-fastapi-cache header field indicates that this response was found in the Redis cache (a.k.a. a Hit).
The only other possible value for this field is Miss. The expires field and max-age value in the cache-control field indicate that this response will be considered fresh for 604321 seconds(1 week). This is expected since it was specified in the @cache decorator.
@@ -110,4 +110,4 @@ x-supafast-cache: Hit
- [Installing Redis](https://redis.io/topics/quickstart)
- [Setting up Supabase](https://supabase.com/docs/reference)
- [Getting started with FastApi](https://fastapi.tiangolo.com/tutorial/)
-- [Tutorial Author](https://github.com/cloudguruab)
\ No newline at end of file
+- [Tutorial Author](https://github.com/cloudguruab)
diff --git a/examples/FastAPI/data/credit_data.csv b/examples/FastAPI/data/credit_data.csv
index d5667156..5165a9b7 100644
--- a/examples/FastAPI/data/credit_data.csv
+++ b/examples/FastAPI/data/credit_data.csv
@@ -1,2001 +1,2001 @@
-clientid,income,age,loan,default
-1,66155.9251,59.01701507,8106.532131,0
-2,34415.15397,48.1171531,6564.745018,0
-3,57317.17006,63.10804949,8020.953296,0
-4,42709.5342,45.75197235,6103.64226,0
-5,66952.68885,18.58433593,8770.099235,1
-6,24904.06414,57.4716071,15.49859844,0
-7,48430.35961,26.80913242,5722.581981,0
-8,24500.14198,32.89754832,2971.00331,1
-9,40654.89254,55.49685254,4755.82528,0
-10,25075.87277,39.77637806,1409.230371,0
-11,64131.41537,25.67957535,4351.028971,0
-12,59436.84712,60.47193585,9254.244538,0
-13,61050.34608,26.35504385,5893.264659,0
-14,27267.99546,61.57677582,4759.787581,0
-15,63061.96017,39.20155289,1850.369377,0
-16,50501.72669,-28.21836132,3977.287432,0
-17,43548.65471,39.57453035,3935.544453,0
-18,43378.17519,60.84831794,3277.737553,0
-19,20542.36507,61.69057071,3157.44229,0
-20,58887.35755,26.07609302,4965.516066,0
-21,23000.784,31.76135417,1148.118057,0
-22,32197.6207,-52.42327992,4244.057136,0
-23,23329.31941,48.57697453,222.6222987,0
-24,27845.80089,51.9706241,4959.921226,0
-25,65301.98403,48.84092177,5465.267886,0
-26,47451.63012,27.03174131,5361.282716,0
-27,63287.03891,-36.49697551,9595.286289,0
-28,45727.45987,55.83992185,6376.822949,0
-29,59417.80541,,2082.625938,0
-30,58842.89131,54.51094756,10871.18679,0
-31,48528.8528,,6155.78467,0
-32,23526.30256,,2862.010139,0
-33,67252.90061,38.13190746,4221.303157,0
-34,58886.85129,38.66150424,7271.552032,0
-35,57584.97379,36.67202092,1728.423755,0
-36,26289.97231,20.66677873,341.146966,0
-37,25952.38147,58.1850173,2109.200772,0
-38,32464.09188,50.22500592,4326.705073,0
-39,60921.0631,18.84052576,968.8363827,0
-40,26578.53669,32.67604425,3489.843136,1
-41,66260.12156,32.89669307,7035.589107,0
-42,58787.45524,62.64130285,4167.786724,0
-43,62545.70871,49.04043324,4362.905812,0
-44,24381.95345,25.25233071,4227.018986,1
-45,67852.10587,47.32189906,5730.588251,0
-46,41725.61286,18.13003836,1185.2147,0
-47,41896.9716,47.25073103,4892.209734,0
-48,44379.72965,50.08867129,1814.335082,0
-49,28416.89938,57.9287193,1788.973736,0
-50,68427.16311,46.30824019,1658.070233,0
-51,35975.79493,35.70865177,6610.366179,0
-52,57596.3541,29.2460566,3344.384401,0
-53,29681.88309,54.95928719,1745.871674,0
-54,51656.93867,47.7150637,7158.13906,0
-55,24912.84268,49.3663712,267.6962986,0
-56,47761.82407,50.09815907,5549.799128,0
-57,22248.1792,23.44362417,4364.975281,1
-58,29724.47688,31.9685264,3075.345728,0
-59,52143.82367,20.83763392,2393.099679,0
-60,56577.72286,36.84780068,5947.421721,0
-61,37660.77072,53.74506047,2129.597165,0
-62,37403.7954,47.9441217,2044.047045,0
-63,31652.69373,62.02380247,5151.070445,0
-64,32727.70073,34.47487101,1087.919364,0
-65,69078.60481,25.10752405,4076.583914,0
-66,40622.19487,41.52718879,4949.902333,0
-67,37521.01717,60.54107743,8.012076247,0
-68,30735.8085,22.24209774,5946.822297,1
-69,24857.69488,21.59867635,2692.163459,0
-70,33180.20159,49.56597728,4621.997742,0
-71,66628.26009,52.38387344,5992.885092,0
-72,38564.93213,21.21649167,5604.16999,1
-73,33704.5085,33.18310623,5898.000893,1
-74,57018.48483,44.82571531,3507.252166,0
-75,40526.90279,28.60637596,2119.984911,0
-76,50827.98052,51.01293719,1765.983337,0
-77,40775.8116,60.28875683,1922.610022,0
-78,55467.15141,56.85133096,9226.902041,0
-79,38789.02939,61.22928543,7650.65521,0
-80,58074.84013,50.07492427,7388.02444,0
-81,57814.10634,43.8309231,7252.120004,0
-82,45190.72918,53.83952,7893.559889,0
-83,36801.90718,43.02794342,5406.344926,0
-84,68811.77942,24.03826535,4211.302611,0
-85,30483.29553,33.65644124,4514.00978,1
-86,44930.39417,19.77738585,7708.315625,1
-87,43671.45655,25.58503698,8066.697865,1
-88,27612.9148,19.21244819,1513.6242,0
-89,53607.32693,27.5617124,2378.766173,0
-90,33036.68312,25.06336742,958.9798221,0
-91,64275.83489,61.440913,7520.032053,0
-92,30673.8375,59.33383708,383.1075694,0
-93,58793.61431,56.49441041,4391.981054,0
-94,21053.49062,63.37940765,754.6018821,0
-95,42095.4222,55.36618805,1183.704568,0
-96,50360.67879,28.83954247,4217.166823,0
-97,41970.72448,63.16991394,1622.317392,0
-98,51663.41018,63.73571024,4147.888585,0
-99,53601.81244,20.24062127,9601.375482,1
-100,43439.98873,24.17947032,6879.306007,1
-101,51461.05317,36.65155863,7292.264177,0
-102,41285.17231,47.97630816,2313.825005,0
-103,62895.74977,49.92260372,2001.281514,0
-104,57296.16082,25.70848233,10601.08278,1
-105,60844.09249,45.655205,12072.25576,0
-106,47634.54955,44.29487133,141.7038179,0
-107,23998.32369,29.91003349,3928.303909,1
-108,63391.61597,34.73926766,190.8892748,0
-109,21534.55122,44.31503802,228.335387,0
-110,28255.65251,35.51401737,2109.242798,0
-111,36496.13393,19.51571649,165.5060901,0
-112,41631.6663,53.04765477,106.0907472,0
-113,68762.41666,20.99124336,2796.752303,0
-114,30075.26492,29.23505652,2628.577923,0
-115,41302.67418,38.66061858,1379.913124,0
-116,39703.75943,47.46874099,2403.478216,0
-117,63161.09204,59.67511498,804.0924415,0
-118,63062.1421,26.58577848,56.16616439,0
-119,34507.52791,38.58778339,1793.750255,0
-120,27954.70777,29.90452167,1627.041405,0
-121,37369.38206,35.34194884,3783.601151,0
-122,43912.06274,23.82192118,7757.136789,1
-123,22766.7745,29.32590147,1429.401762,0
-124,21603.3057,21.37503332,178.333871,0
-125,61952.90669,18.47742502,3635.600589,0
-126,36116.36509,22.53588419,1494.984568,0
-127,26157.77727,22.82693773,2295.811656,0
-128,26458.3832,59.52298674,552.3981664,0
-129,69156.30377,53.4108625,7364.735578,0
-130,39441.44476,46.75389592,1034.758838,0
-131,60119.06581,45.07696923,1810.96046,0
-132,55613.48546,24.37712877,4255.252137,0
-133,37049.38624,29.42301855,6056.817214,1
-134,23122.06493,53.30953584,4263.493031,0
-135,48790.13243,32.47562106,5519.09604,0
-136,59132.68516,48.34499296,4575.527635,0
-137,55305.57483,53.58227987,8176.707165,0
-138,26037.46364,24.78310779,3293.250879,1
-139,64899.80503,38.11601668,4654.249217,0
-140,27089.12432,21.2076896,5029.488782,1
-141,45341.47464,22.56956836,6525.218423,1
-142,24865.79807,37.30975294,4439.116154,0
-143,28239.54321,26.19220966,4189.832568,1
-144,52730.0805,50.23778499,5706.325323,0
-145,28982.05815,39.04840987,2898.761824,0
-146,36221.26601,26.10150042,5094.670084,1
-147,33551.12437,58.85692749,4333.360862,0
-148,43891.35597,49.1538267,5792.906333,0
-149,45148.88572,60.52500645,6455.391772,0
-150,58481.01216,40.83291823,5380.560596,0
-151,69579.92921,57.75624316,10868.24147,0
-152,52743.30857,44.04851651,2684.700671,0
-153,65635.66153,51.16771448,12701.60348,0
-154,34559.90704,29.11218199,3317.529874,0
-155,60218.53153,32.47188772,3157.961082,0
-156,51689.54854,46.15419152,9881.976006,0
-157,47541.61434,55.23458507,1611.216597,0
-158,62905.79302,27.90965196,11423.9363,1
-159,65632.60458,47.10576675,12498.04045,0
-160,31847.85372,41.41633576,2913.769931,0
-161,27947.44028,58.34845518,5514.117421,0
-162,62246.72725,31.08188451,406.7207693,0
-163,40154.68857,60.5296832,6013.152874,0
-164,58627.55488,33.11565325,1215.65256,0
-165,33441.05107,27.87348619,5282.72856,1
-166,55603.7868,43.83947279,1411.13008,0
-167,31046.37897,29.29739875,4907.674084,1
-168,44708.09987,21.10877357,2390.850597,0
-169,23340.2707,42.8286153,2707.760939,0
-170,24830.18197,28.97024523,2046.68505,0
-171,31422.74739,53.89808021,1686.835902,0
-172,60477.23385,60.40210646,10711.7009,0
-173,26039.02149,49.39040223,2056.752382,0
-174,36186.84807,50.50675221,1130.735265,0
-175,39772.11873,43.72544781,5492.893689,0
-176,34730.16407,63.37623301,818.5084419,0
-177,23118.48331,57.58105032,1746.936559,0
-178,50072.84763,33.01527275,8088.568019,1
-179,67465.06239,23.61105385,1802.616994,0
-180,38625.63201,19.6300378,5836.563381,1
-181,45227.48283,26.72316244,5521.507405,1
-182,64901.89773,44.93881585,9589.833525,0
-183,40543.91354,51.46087562,6507.850191,0
-184,27793.26672,60.51690847,382.2489041,0
-185,61167.77482,20.58363144,10396.61815,1
-186,64619.66462,26.04209269,9704.782409,1
-187,37593.75787,54.01041531,7274.325628,0
-188,35032.6496,56.72462562,135.9316845,0
-189,58364.46498,55.59654948,5809.899,0
-190,56945.81041,45.55402051,6388.369826,0
-191,27204.84855,29.07209672,3827.893915,1
-192,21648.26103,52.58703992,3558.527262,0
-193,31077.85689,44.2215167,4452.330679,0
-194,42522.92241,53.86865108,6790.850263,0
-195,31769.24772,44.77438059,1148.221436,0
-196,35556.77991,23.77743318,6361.973438,1
-197,52908.82424,53.69563592,9841.080553,0
-198,35045.13141,28.65328366,2382.466772,0
-199,44488.16448,33.43120549,2751.088843,0
-200,41679.93712,53.66990824,395.0007751,0
-201,54619.9472,52.42442217,10780.27188,0
-202,38053.62313,26.20688032,6110.572792,1
-203,64718.66178,37.27649201,1485.079935,0
-204,43159.08497,62.44209669,4350.019897,0
-205,29445.5105,28.44567748,1758.881865,0
-206,25817.38988,37.94548019,4115.484719,0
-207,66356.85674,61.52484883,10725.48473,0
-208,56676.158,46.67896953,2278.554349,0
-209,61000.04277,48.62361021,2160.784908,0
-210,58906.25169,42.04934198,9290.575345,0
-211,49589.15372,42.77525588,2627.405488,0
-212,40141.60354,56.15141838,845.3663713,0
-213,31659.72821,31.92815368,858.511388,0
-214,62658.22163,25.46316007,3343.367161,0
-215,39264.4835,37.02775284,5255.788283,0
-216,46643.12648,53.40508337,6440.861434,0
-217,30515.37212,20.16187772,415.240435,0
-218,65077.32203,50.97913471,11061.81189,0
-219,60871.869,61.2601442,4844.172224,0
-220,25011.1039,36.21518966,3834.042782,0
-221,68407.18551,60.93758158,597.9440655,0
-222,43727.43934,55.19259935,1170.556334,0
-223,45788.7471,41.26194623,5894.041317,0
-224,65705.01082,50.92843185,1969.794134,0
-225,32434.70251,41.35317101,2738.440496,0
-226,58121.66858,27.30180023,7531.101249,1
-227,62498.50725,31.9096908,3312.877622,0
-228,26090.72588,48.07852007,4255.626392,0
-229,64780.93854,20.22810118,8402.415586,1
-230,65588.40342,22.91821226,7879.738136,1
-231,65743.70367,52.3005041,7724.571414,0
-232,37164.52158,47.29545476,1445.802189,0
-233,65176.52978,48.96321098,2365.28749,0
-234,34615.54217,25.51438965,6476.760852,1
-235,59079.46505,58.6383316,10326.08977,0
-236,56267.17164,22.48613604,7329.243164,1
-237,34862.82129,54.96487331,6040.772062,0
-238,60521.3641,45.42499301,8035.883173,0
-239,42276.78291,57.93069619,8055.305084,0
-240,38451.17771,63.42145549,3441.261416,0
-241,45985.10865,53.5338888,7382.056426,0
-242,51000.42244,27.80299751,778.7326956,0
-243,31523.10777,40.44616794,5174.570569,0
-244,28648.67675,18.39696983,1870.925253,0
-245,27514.42796,21.8976978,3400.910744,1
-246,27441.00038,37.39906989,1455.047602,0
-247,67709.24159,50.41293228,5136.819308,0
-248,38600.70719,44.72279622,2749.080191,0
-249,30950.29541,26.31019433,5043.148637,1
-250,27083.82287,60.66665852,3286.212882,0
-251,21512.74527,24.7795283,2453.376121,0
-252,34796.00356,58.48789988,443.6665381,0
-253,27089.39284,51.29419704,1851.311563,0
-254,25259.40163,39.73976626,4341.008082,0
-255,47007.31358,45.01979643,4069.402646,0
-256,20358.66502,53.61518031,1064.686918,0
-257,67900.22653,43.51430384,7902.742965,0
-258,54418.47099,55.2220663,5630.741221,0
-259,51288.55469,29.92074847,6536.966363,1
-260,28199.60163,36.66870417,3871.688902,0
-261,22199.61514,60.10481888,1498.390919,0
-262,50514.46963,57.37965014,2003.65357,0
-263,34414.24034,54.5301724,617.5387522,0
-264,37633.08743,29.42141257,868.1624733,0
-265,55235.50407,47.00526014,4910.547658,0
-266,45587.55184,62.02213807,8366.614268,0
-267,52757.79494,53.08221445,2321.206314,0
-268,41174.80813,52.33937637,2888.44471,0
-269,25685.5352,39.00918946,490.7429211,0
-270,28145.303,55.54762961,4805.971549,0
-271,52094.21837,40.84450776,495.0211992,0
-272,33552.38598,25.15961094,6054.244126,1
-273,37400.93377,50.10848668,1693.137378,0
-274,21605.72509,23.2381696,2828.308618,1
-275,57562.89174,56.60056735,8508.835399,0
-276,62288.53961,25.60217264,10657.10612,1
-277,22767.2642,45.12328068,1205.786013,0
-278,20943.04333,19.81963119,4098.11579,1
-279,20622.8601,30.4140331,3518.452629,1
-280,48436.66463,49.02784977,5851.409789,0
-281,27574.63418,57.64370906,1017.39616,0
-282,62889.36214,33.2456503,6525.151793,0
-283,37683.20049,55.58721086,7414.552853,0
-284,54974.4555,61.98420323,8922.199717,0
-285,56326.08667,40.40545522,4816.776074,0
-286,65670.88344,50.00469847,3950.870172,0
-287,50730.73339,41.97006679,1879.059662,0
-288,64184.91579,46.44703643,1854.239613,0
-289,66179.32411,48.12079915,3646.93786,0
-290,24969.5268,45.12099322,3595.501942,0
-291,54925.51827,40.80560311,554.4883448,0
-292,67879.24802,43.59720866,10433.47435,0
-293,67787.52676,53.36234044,9607.498847,0
-294,31657.6193,37.77866429,1448.071984,0
-295,36559.13503,19.71617609,3030.267241,0
-296,57787.56566,22.64466921,6339.850844,0
-297,42521.72601,47.70428875,2661.612516,0
-298,51935.18063,21.49550533,5649.452468,0
-299,45677.87613,51.69305562,2966.246125,0
-300,51363.59581,21.0219966,761.4224042,0
-301,27218.56103,55.17101996,4145.003587,0
-302,43677.62922,32.55303035,6739.858598,1
-303,21533.59551,57.90168346,1971.55422,0
-304,28010.19093,55.36689966,3971.155479,0
-305,51589.28275,50.31346489,56.99097407,0
-306,50480.95269,27.08039063,8831.184365,1
-307,43957.35058,21.14484884,5416.357798,1
-308,61878.34655,33.00635954,567.6687734,0
-309,60153.33697,20.30086013,6472.347007,0
-310,33388.58334,62.00167495,4551.876889,0
-311,41310.40178,53.57694074,4481.162213,0
-312,25576.95393,51.93226805,1922.656626,0
-313,51455.09845,37.2856837,9447.117157,0
-314,48134.15693,47.96967523,2075.596112,0
-315,51348.5273,52.43673978,1507.891341,0
-316,20532.82373,54.62323385,1897.780821,0
-317,33297.21402,46.57996004,3674.74134,0
-318,55858.54924,25.86653378,5630.444972,0
-319,43777.51848,20.0109277,3601.299685,0
-320,27789.51906,58.51913348,186.8280739,0
-321,36132.42388,34.29426042,99.4495914,0
-322,20145.9886,21.28278372,839.8390632,0
-323,63108.70739,43.19394153,5757.848995,0
-324,26581.61453,61.95337375,5090.392774,0
-325,62040.88963,62.04980097,7643.631046,0
-326,69958.70554,30.5360199,8755.691977,1
-327,38082.51952,45.51997724,4213.465259,0
-328,45183.05418,33.89557822,5953.453524,1
-329,36242.44796,39.41547079,5688.994849,0
-330,44527.2589,42.09009228,4588.472286,0
-331,40496.25582,20.10545872,4834.603798,0
-332,24698.66931,48.91255747,2427.650788,0
-333,60560.30553,49.75058567,1994.621134,0
-334,48018.21146,50.20413902,6120.090021,0
-335,30216.25196,26.56371653,2116.53731,0
-336,61742.23995,44.87260781,8068.319704,0
-337,47288.42667,62.42846686,4004.988852,0
-338,24658.89932,59.43650057,590.5980812,0
-339,64644.3481,58.84065675,9848.171449,0
-340,57517.72414,52.48606979,4536.857209,0
-341,52945.54779,54.63191519,6262.007945,0
-342,36366.99041,47.19141009,371.040895,0
-343,62113.72957,27.884415,11928.50986,1
-344,62279.5195,26.66646905,6801.405893,0
-345,61799.08496,56.95796104,5619.217604,0
-346,50139.74001,30.26781235,7758.799823,1
-347,69566.68435,52.96708771,9875.037183,0
-348,44897.48837,51.35806105,5732.399032,0
-349,22572.30276,51.01624042,724.1931885,0
-350,37123.07964,19.9466845,5659.509278,1
-351,68744.78865,60.73005586,5207.883117,0
-352,21081.19418,52.38283326,2395.16535,0
-353,58828.29212,32.40292043,5947.645468,0
-354,46706.45886,18.83033629,7084.263509,1
-355,32312.85338,28.15532047,228.3308036,0
-356,60778.76502,43.01302298,10021.04922,0
-357,30948.04155,42.7513536,3995.807295,0
-358,60122.01157,62.90960494,7189.350735,0
-359,43321.68112,32.28625435,743.867141,0
-360,47904.34124,40.03927024,6183.514146,0
-361,58597.38325,53.28803374,2588.490266,0
-362,66091.90591,24.2041407,8743.509701,1
-363,47316.70138,27.06419772,1940.674044,0
-364,40872.63977,54.94806156,5312.491706,0
-365,35154.49348,52.89921324,4037.719604,0
-366,32222.81881,61.81061588,934.4771331,0
-367,40447.67296,22.49292385,1072.192659,0
-368,48463.20455,50.52642975,8120.25809,0
-369,42843.09913,28.63178613,839.869024,0
-370,50310.42244,53.03869686,8361.7191,0
-371,57565.19996,37.73785449,5353.561654,0
-372,55066.18297,55.7392007,9332.702666,0
-373,46065.94821,52.8386392,4947.308728,0
-374,38309.58566,55.4291345,3545.723971,0
-375,54472.14476,59.245985,10836.38309,0
-376,58695.0944,29.77440963,1826.516302,0
-377,54748.91231,31.59685864,5438.093693,0
-378,46328.17192,56.84083064,7879.676208,0
-379,49633.32747,38.98900889,7915.313443,0
-380,66339.78388,35.59190521,2350.891508,0
-381,62650.71966,33.48406627,6425.365364,0
-382,27646.78005,56.31166878,3132.148692,0
-383,21437.61575,45.73140049,2563.960873,0
-384,50648.19844,56.51730671,7110.755833,0
-385,29670.67184,53.55019966,2928.984088,0
-386,20258.53866,29.11553162,2767.8373,1
-387,34475.21797,42.30791846,3162.133837,0
-388,28926.43246,62.06525128,750.067107,0
-389,20660.66895,49.36388109,1756.037625,0
-390,24987.93409,49.06510864,3946.898246,0
-391,29672.56081,51.01980481,607.9094842,0
-392,23241.59989,40.84775603,457.1966172,0
-393,24217.22876,23.51076748,2104.384323,0
-394,65574.09334,23.51304252,3031.246326,0
-395,55994.45879,31.1392572,680.6196961,0
-396,67369.33212,57.63423984,2299.418172,0
-397,23305.77149,28.21752876,4521.004312,1
-398,35195.46635,49.6584056,2836.988178,0
-399,27135.07262,54.8364598,1387.248801,0
-400,24037.16514,23.31157432,2469.364426,0
-401,51625.31323,44.80884119,4592.24555,0
-402,50705.76626,53.20582216,1096.967075,0
-403,58079.1569,18.66302679,11540.04581,1
-404,62192.46707,46.0507889,1863.891003,0
-405,62553.66841,63.92497558,4641.704785,0
-406,68147.95732,22.98439448,12307.56232,1
-407,27619.66141,47.54050593,2774.832781,0
-408,65330.19284,28.58998731,4030.803692,0
-409,26680.14584,47.76173998,1671.184924,0
-410,46104.59891,51.05635889,2342.472921,0
-411,44904.59764,44.20668666,4953.773599,0
-412,52934.59443,50.40298165,3248.627718,0
-413,43509.75776,18.07533586,7363.037639,1
-414,22118.35733,63.01594669,3928.121846,0
-415,56275.41002,30.24987142,2224.88416,0
-416,48630.97953,27.02167736,5862.833029,1
-417,64272.7,37.77801477,4929.878818,0
-418,24349.00295,53.75252283,3890.47105,0
-419,34332.31526,36.5013709,1225.720223,0
-420,64940.24109,43.94104124,8196.930726,0
-421,30595.74801,40.91149463,3495.069881,0
-422,53422.21625,28.18853052,7441.759617,1
-423,69995.68558,52.71967321,2084.370861,0
-424,48270.79624,45.30585103,6232.280399,0
-425,27028.15559,48.10959467,331.3643087,0
-426,23519.86609,34.39370686,2368.381231,0
-427,37302.0834,35.01540389,2366.17424,0
-428,55601.27185,18.8429929,10533.45516,1
-429,62678.64545,25.83939413,333.4413981,0
-430,41602.43398,25.25986939,7005.079292,1
-431,27533.00133,46.76592846,1551.420288,0
-432,30594.17656,50.0438201,118.3421421,0
-433,47846.9459,24.41835729,3713.262688,0
-434,55273.275,25.41639103,10282.99745,1
-435,23086.25541,24.84996033,1256.40116,0
-436,29621.27488,32.45542329,5575.253691,1
-437,47533.92095,39.95519407,6637.770871,0
-438,62519.18418,44.40997496,2324.547705,0
-439,50878.95904,44.96512582,3257.012629,0
-440,58580.95951,56.62695134,4317.715478,0
-441,69445.64945,28.81827377,10643.40418,1
-442,60929.17235,60.05877767,11146.07446,0
-443,35496.6655,47.00274607,168.0547853,0
-444,33572.4235,57.44221936,3369.377023,0
-445,55306.91435,20.14031182,5272.535014,0
-446,34141.92764,47.15114867,3371.66431,0
-447,40453.89095,20.70989283,890.9395353,0
-448,69088.77742,53.93562663,11246.48815,0
-449,30885.6922,55.15075882,5216.354091,0
-450,58683.22632,24.8449593,271.7344685,0
-451,60675.81216,39.9639062,11617.74891,0
-452,68460.68003,35.77560039,949.9566247,0
-453,63653.83991,27.51536888,8866.527185,1
-454,42522.57576,18.32612216,5036.25528,0
-455,54140.42913,30.88889273,7896.223766,1
-456,47548.36262,47.83910014,6153.936564,0
-457,24114.01226,52.33581555,3900.829601,0
-458,20686.23909,33.28052356,3052.576691,1
-459,21412.30861,26.38271039,2639.710126,1
-460,69391.1466,63.80067091,2550.265147,0
-461,32319.26222,42.93199308,2733.420559,0
-462,52862.94714,47.33139712,9754.152239,0
-463,48383.27615,39.7047263,2763.263955,0
-464,36430.5384,38.22744175,5855.185594,0
-465,44268.89401,27.93317102,6043.143106,1
-466,63806.32925,56.6321662,114.4999674,0
-467,46195.77717,32.41359859,927.0675939,0
-468,23743.16077,42.73457772,3254.74895,0
-469,22089.83748,21.29670327,2584.022038,0
-470,54707.28851,44.23788146,10255.19011,0
-471,23203.64719,58.56887607,749.1453684,0
-472,25342.25068,40.36114009,871.5300911,0
-473,31645.63282,32.16327128,5193.838197,1
-474,32306.8084,21.90630584,3603.364078,0
-475,61262.81632,49.41303041,5564.163603,0
-476,26388.7273,19.37152054,1191.332138,0
-477,53009.42543,36.07447938,3589.253506,0
-478,58163.54068,58.7474847,2237.927764,0
-479,38665.03393,55.12592175,6152.004833,0
-480,25289.04722,53.34272481,3701.537602,0
-481,66049.93403,29.3157674,13172.6813,1
-482,56282.98253,62.3698886,8215.558384,0
-483,35778.61523,30.62820738,5544.654684,1
-484,29174.24031,18.52862799,665.5770001,0
-485,55934.43256,60.75524976,5643.179899,0
-486,32256.86152,20.09639947,2809.322185,0
-487,68052.80692,28.75880168,1415.718263,0
-488,26957.05387,55.26487741,4172.988238,0
-489,48685.04202,32.53325603,9698.582169,1
-490,38288.07108,28.73543162,1723.399373,0
-491,42468.02083,28.62581918,1902.26561,0
-492,55377.77303,46.91822152,6882.873416,0
-493,54231.70279,21.27421064,10156.14231,1
-494,53283.25871,49.00469291,4065.218795,0
-495,52534.78548,47.18361948,3810.131842,0
-496,47847.51563,26.65183777,8494.016431,1
-497,59998.25327,54.30892681,4659.535976,0
-498,58684.51301,31.73226475,5415.817417,0
-499,49114.78793,61.48152255,6388.85036,0
-500,57179.40201,21.37312158,2991.967351,0
-501,69395.11648,23.95138858,11047.68434,1
-502,43963.73801,41.55384223,4481.436861,0
-503,66326.47247,40.98032875,5602.160022,0
-504,35886.72684,34.66834878,843.749092,0
-505,35578.23411,42.394597,3640.848886,0
-506,48689.00043,36.56309217,3859.471823,0
-507,56510.83536,47.30828614,9255.439649,0
-508,50275.89996,41.81982332,5541.821255,0
-509,56665.49409,61.64512274,11159.79317,0
-510,42912.09054,60.58219753,4550.122853,0
-511,22169.72922,36.97071669,947.1996384,0
-512,35919.80732,27.30412443,1227.109484,0
-513,61987.68527,27.63108779,2618.243037,0
-514,30044.68352,49.77406378,1428.439625,0
-515,61528.27242,55.90302305,10897.90548,0
-516,31196.49177,47.17878489,987.2615366,0
-517,66003.95999,33.07351468,11207.49523,1
-518,56960.67384,25.51799914,4856.483454,0
-519,41315.10789,57.52009412,1378.909057,0
-520,64913.34384,26.76631122,9781.326722,1
-521,32804.90449,62.29439051,4961.25568,0
-522,25789.2098,26.49416967,2410.277414,0
-523,31908.35431,38.25251186,1857.461578,0
-524,56050.30258,23.97382954,6870.83901,1
-525,66505.77569,25.61824062,6571.197021,0
-526,57504.07174,55.71713443,8107.267645,0
-527,44619.11149,59.85248724,2474.977159,0
-528,21158.93529,54.30391261,3562.308296,0
-529,22765.19092,20.58742742,540.6177247,0
-530,25052.82026,45.57399348,3367.701923,0
-531,61006.1073,54.18129557,5850.770691,0
-532,62321.24247,45.8902828,10649.07205,0
-533,49604.54421,51.94400881,7045.919202,0
-534,48433.37349,28.53199734,789.6333613,0
-535,57590.28328,19.49710268,7676.310663,1
-536,62691.70137,25.06437924,8244.7489,1
-537,51121.65687,58.52718075,6471.628202,0
-538,22516.54035,55.51892667,4267.451902,0
-539,60857.23505,37.39428701,10486.74435,0
-540,62908.35748,51.14682721,3213.898146,0
-541,49665.63384,50.31921262,2713.885075,0
-542,65322.80107,41.45419509,2739.71999,0
-543,20598.92656,35.77115432,3872.402468,0
-544,55476.65698,52.0892028,4733.50583,0
-545,26218.49485,18.41623623,3343.816358,1
-546,40794.87023,38.04052822,6519.43706,0
-547,53719.65111,42.89010155,1670.737893,0
-548,20715.53563,27.53032143,369.5277394,0
-549,57163.8524,53.54481969,577.5307824,0
-550,33751.20531,25.30187719,6494.184336,1
-551,44832.56472,32.17826296,1256.253538,0
-552,51035.63346,58.99497729,2889.880195,0
-553,53493.48601,21.87474639,5030.8288,0
-554,58205.68,56.83783815,10035.60302,0
-555,47439.94076,22.34841947,7896.356942,1
-556,47586.22771,42.27500753,3343.056276,0
-557,26100.85126,62.31916468,960.1372514,0
-558,45326.40367,59.36251247,5142.110837,0
-559,24391.75623,47.0350985,2198.144889,0
-560,53741.37102,49.72943257,6513.150125,0
-561,40053.72227,27.93848013,44.5272461,0
-562,53033.86413,38.45755969,10427.4705,0
-563,25176.50201,53.54340881,3064.718488,0
-564,31210.84702,54.10490667,3853.088042,0
-565,23532.2763,59.63373699,1077.8404,0
-566,63776.77079,43.81065864,6697.971583,0
-567,52278.765,45.92897162,4269.136035,0
-568,56015.81322,32.50931024,2275.763425,0
-569,56110.93994,62.82941483,9351.006131,0
-570,57856.80823,33.68215095,8824.164747,1
-571,30187.09186,28.15508425,4462.823258,1
-572,30786.87193,47.06810554,3563.319789,0
-573,22279.29977,58.90732761,3141.338536,0
-574,42476.26553,46.43822313,8334.182008,0
-575,58147.79986,34.05864485,3951.189747,0
-576,36266.21187,55.54236272,3206.927665,0
-577,39045.49716,27.43322056,1165.492158,0
-578,64467.80368,63.40058921,521.5757014,0
-579,36594.80667,60.91256134,3492.334022,0
-580,58797.76286,53.40343367,8892.963303,0
-581,66653.27093,19.88705308,5180.71186,0
-582,48271.49838,21.66234102,6077.680287,1
-583,30991.43192,34.01002602,4589.267265,1
-584,45446.51834,19.30469183,8474.982464,1
-585,37142.73889,50.30304299,161.2375511,0
-586,58320.80889,20.25760534,10033.49168,1
-587,24825.54068,54.8174662,3650.196352,0
-588,20511.42944,27.19626825,931.7900744,0
-589,48326.32089,35.65219864,7168.707002,0
-590,55441.35879,48.05859911,10768.74784,0
-591,60496.90792,33.94567162,1115.154587,0
-592,25296.15423,44.35608995,1320.462443,0
-593,50414.32032,56.19400321,2468.171999,0
-594,67984.04038,27.46528093,1642.969471,0
-595,50382.39977,57.09693649,9183.842295,0
-596,49413.29854,18.64785258,2554.044352,0
-597,61464.82064,36.40826631,5099.08746,0
-598,53784.04957,24.39355435,2761.85138,0
-599,35993.28793,41.8750019,901.9277107,0
-600,63402.00468,47.22342889,7530.767633,0
-601,40484.97132,39.28143317,1093.679203,0
-602,26168.01227,41.94116976,3040.98135,0
-603,60044.28152,61.31265439,6823.434443,0
-604,23984.55095,51.14126769,4622.275198,0
-605,40359.70119,32.24500797,1783.697326,0
-606,33583.89108,62.13075546,1251.867366,0
-607,68038.79202,62.94812935,10108.79585,0
-608,45652.05927,53.674341,5408.212129,0
-609,34399.20978,31.764889,6019.834423,1
-610,57628.43892,23.98656393,5021.639683,0
-611,24294.67689,22.26309561,4360.053009,1
-612,52218.88251,37.54275677,9792.091531,0
-613,50061.76774,55.36104188,6145.131817,0
-614,49352.27422,57.54215563,3362.774486,0
-615,21087.35554,49.31063445,3353.693571,0
-616,23812.25268,42.76555932,2716.655819,0
-617,49395.16649,41.08490913,5927.574676,0
-618,33338.94399,46.59851354,2929.851424,0
-619,29668.32072,38.6837404,2042.436463,0
-620,45936.5972,41.99401029,8525.231909,0
-621,55948.06772,40.30301538,8569.220573,0
-622,53239.50071,63.51511514,4606.156805,0
-623,43694.03444,49.51503554,5049.635509,0
-624,24078.0725,38.49162835,3276.139948,0
-625,50258.55302,22.54284077,1086.246165,0
-626,41816.65683,48.91721362,4534.575973,0
-627,36892.71622,54.44842476,6463.647751,0
-628,23886.56761,34.44297279,4440.419617,1
-629,48757.76505,23.07603499,1833.581051,0
-630,34601.68266,33.85052236,2430.101618,0
-631,52986.00455,50.42376288,4928.607034,0
-632,50740.95102,21.72135886,784.5773121,0
-633,53096.9914,36.35007538,2663.052609,0
-634,38500.00065,53.93069108,7571.682318,0
-635,41004.26236,55.84909201,1016.141008,0
-636,63585.36459,49.33992697,1594.972682,0
-637,31823.68106,30.98355705,2290.430342,0
-638,26242.63362,32.59683185,1801.228195,0
-639,63531.24599,19.32910789,6917.508435,0
-640,64751.14654,53.63820349,2289.851251,0
-641,31091.2763,50.89554304,4071.083034,0
-642,66871.26736,62.68936364,3614.268185,0
-643,25098.65283,51.64706285,2611.848092,0
-644,33720.58922,47.24662629,1365.952209,0
-645,28182.52329,25.52961036,2285.956538,0
-646,27334.56971,42.67119449,2963.794432,0
-647,68694.84318,23.08141739,12731.89464,1
-648,46195.62167,26.62719845,2888.633728,0
-649,34488.20985,27.13153021,2156.314406,0
-650,57827.6631,23.97296825,10816.75901,1
-651,20346.46905,35.71607365,656.0331879,0
-652,60480.9758,53.42868783,3216.094541,0
-653,51915.67978,44.10910349,2282.911022,0
-654,54625.50698,31.69645567,8619.745177,1
-655,48305.42709,55.2125357,4833.47747,0
-656,28577.96451,21.42016018,1639.225639,0
-657,53400.82701,58.08168841,10418.19298,0
-658,43414.48789,44.45336282,7170.946724,0
-659,47526.23413,57.21959192,8957.330544,0
-660,46082.07216,55.15846717,2921.235379,0
-661,32195.59252,62.20165852,4980.013585,0
-662,49067.09129,60.54459807,7258.968492,0
-663,21293.47713,42.40494033,1368.691922,0
-664,52100.91739,23.18144363,4767.277192,0
-665,48334.38778,53.36775446,2234.443137,0
-666,58507.62355,48.97744804,694.1351678,0
-667,27521.04034,35.08659729,2699.851346,0
-668,63914.22537,26.34974189,139.3145719,0
-669,28598.83265,52.53369854,524.2010921,0
-670,23298.46675,48.65145986,1741.183919,0
-671,35697.55414,51.38821886,2907.958272,0
-672,40376.16358,38.92128904,3901.937984,0
-673,56534.96684,27.80794148,2161.083752,0
-674,36088.93861,41.71775901,6222.415273,0
-675,34158.63397,29.42114243,2911.408067,0
-676,29732.05762,38.87671243,3485.018026,0
-677,41736.20154,34.59649188,7602.613055,1
-678,42236.45609,24.6867331,4749.068675,0
-679,28796.85084,44.62864841,706.2289942,0
-680,55097.38848,33.92942424,9342.479427,1
-681,40916.56415,48.31974071,5219.804028,0
-682,20908.3351,28.81852198,3133.624447,1
-683,57999.77239,62.77011063,859.5892942,0
-684,57746.58159,63.62530548,727.194665,0
-685,55116.23451,41.46888524,10284.60679,0
-686,57765.52116,43.88730905,5445.22266,0
-687,45200.9928,43.90542902,7335.962568,0
-688,42435.18949,51.48952681,2766.280914,0
-689,46365.57352,41.85261305,5443.276307,0
-690,57187.70089,59.47191821,9390.672261,0
-691,66539.9276,57.70555929,12129.08223,0
-692,25244.7267,53.3790106,1278.999504,0
-693,54780.34561,61.38897114,8134.220408,0
-694,59253.12146,36.92041154,7327.283577,0
-695,48540.34154,21.23915762,1012.934993,0
-696,30415.10508,22.98363585,4362.083152,1
-697,48768.69924,25.92502563,500.5991056,0
-698,52299.21808,18.30974563,7880.685807,1
-699,42242.48912,34.22076686,2070.379381,0
-700,28218.96527,42.62439388,1305.082433,0
-701,40208.13186,61.37191328,459.0346888,0
-702,61419.67284,30.65182339,9921.672387,1
-703,51282.50524,26.55138677,8445.385343,1
-704,36017.90275,43.5236232,1526.392476,0
-705,57575.00979,33.80013512,9857.22995,1
-706,53330.76714,42.3772463,2343.497556,0
-707,39834.51984,63.31227526,699.9557764,0
-708,62469.42837,24.26485536,7286.550391,0
-709,40334.61673,45.88654158,6808.869955,0
-710,47542.8027,40.87333755,9448.209721,0
-711,55883.62286,27.37033802,974.5630674,0
-712,29163.01588,43.95617132,1469.129704,0
-713,47786.14106,29.7081893,7181.478553,1
-714,29736.3105,35.29839844,657.0484089,0
-715,50831.42753,24.35160252,9572.586884,1
-716,62030.046,46.53578454,7572.567589,0
-717,54049.01274,54.62035318,4569.647911,0
-718,34336.01759,35.83065171,3441.644524,0
-719,31895.71531,48.18590728,3423.346172,0
-720,51894.5401,59.0037683,6579.534007,0
-721,37616.71086,53.44466025,5732.240108,0
-722,22076.948,56.99543936,3948.143344,0
-723,56252.95371,57.27829057,7327.070282,0
-724,26316.75849,37.217654,923.0284413,0
-725,23120.87961,40.29672232,1417.846522,0
-726,39033.03271,59.67702219,5757.890479,0
-727,32420.81815,32.36179216,1494.212974,0
-728,68827.24433,25.30253079,1049.175477,0
-729,58092.20489,41.81365235,5277.74042,0
-730,43538.85612,46.32941211,8523.901116,0
-731,64040.48418,59.14480741,5408.727767,0
-732,34395.22922,25.54822433,2089.7325,0
-733,57405.51493,45.64443499,6914.75154,0
-734,22581.13397,40.54886181,34.28510582,0
-735,27952.94598,42.09749811,3965.251974,0
-736,54022.91284,26.5610123,10641.45144,1
-737,63546.16476,44.41273214,6170.239116,0
-738,60713.4303,56.03160353,396.2336776,0
-739,44519.32947,32.39165985,1446.468103,0
-740,40997.79899,55.58120391,7908.331843,0
-741,63661.38333,25.59552438,6095.308749,0
-742,34429.14674,39.7149896,2240.277404,0
-743,29181.86143,48.24064781,2529.612969,0
-744,52510.43824,40.27914024,1858.30824,0
-745,37536.34724,25.85667757,2634.358585,0
-746,35683.74495,44.49787917,4337.825559,0
-747,45622.29071,41.63254532,528.1812501,0
-748,67385.40318,29.03367936,6747.232379,0
-749,69411.79253,47.07372685,12176.78244,0
-750,48322.51407,29.26263398,7732.696396,1
-751,40836.58881,22.16826291,6994.487801,1
-752,38035.95133,60.65521047,4298.705028,0
-753,42696.97137,44.52967068,222.1964386,0
-754,24181.69479,22.30012538,1529.018868,0
-755,33194.40264,51.17971212,6615.387858,0
-756,32541.46153,34.40508616,780.8328568,0
-757,38381.41306,54.08337144,322.7241556,0
-758,25921.91253,58.42607932,5104.746789,0
-759,58810.97173,22.10938059,9099.724338,1
-760,63025.74408,56.56693154,2956.977746,0
-761,29954.00451,61.83684471,5774.07427,0
-762,40641.52302,37.66419864,5042.326368,0
-763,43940.9107,38.30598195,2855.379187,0
-764,65166.97287,25.65628186,8859.087469,1
-765,58820.38206,30.75231565,530.6578241,0
-766,50719.76308,43.20724465,4770.937668,0
-767,46766.59592,47.77517095,2383.407757,0
-768,67520.7596,45.41562414,13041.77945,0
-769,28386.25355,31.12533241,1718.943782,0
-770,68276.03076,34.51488127,4842.07796,0
-771,30731.72628,40.38884294,1129.562412,0
-772,30012.25109,54.94011866,3972.151405,0
-773,38075.31877,53.10735995,6928.943621,0
-774,55932.39657,44.39262234,4876.366909,0
-775,27966.24445,53.70027324,4445.203178,0
-776,53825.53674,49.71390438,5272.804792,0
-777,65451.49652,60.27638934,8129.048931,0
-778,39473.99586,42.30125384,6034.153228,0
-779,42344.80871,47.41810839,6800.246806,0
-780,36112.87441,60.5793527,3737.212187,0
-781,32720.5048,33.80450352,4367.26495,1
-782,27973.82656,49.67421964,403.4021354,0
-783,21306.03312,35.09416354,3791.023528,0
-784,36029.30158,52.64062442,2928.100439,0
-785,48457.96355,22.34492363,8108.172683,1
-786,46038.51066,39.03867278,6868.987805,0
-787,34247.15902,34.70098954,6458.790585,1
-788,64247.615,31.60316207,4513.203694,0
-789,62109.76709,41.24090602,2816.430158,0
-790,21481.80379,19.95945231,1137.657891,0
-791,20762.47447,25.32912274,2385.224837,0
-792,33756.52723,40.56759555,1169.835925,0
-793,54325.80727,29.63636931,6978.525057,1
-794,33197.8078,59.48684823,3993.146866,0
-795,56846.47423,30.28092755,5268.227475,0
-796,26542.93109,45.82942652,4233.089586,0
-797,53200.54815,59.6917193,3090.473119,0
-798,38073.4069,32.21450809,2284.005677,0
-799,43937.21904,56.40968222,3213.541963,0
-800,49284.81941,51.93972912,493.589997,0
-801,22869.32345,25.9064452,527.5515684,0
-802,60113.34254,40.77430558,8253.384569,0
-803,23613.25569,32.4735058,2469.234585,0
-804,68755.09442,53.22813215,10990.53375,0
-805,26449.32829,46.47915325,2952.123152,0
-806,42855.41611,47.12736998,4923.814846,0
-807,25686.77894,35.85071487,3728.397031,0
-808,67125.64924,36.05850519,7482.067369,0
-809,27427.78945,59.70451918,719.9466646,0
-810,37145.57306,53.19827894,1510.735507,0
-811,41702.60077,41.94405372,6105.727929,0
-812,20710.77596,49.55726981,3960.710873,0
-813,39124.16436,44.5571086,401.3267334,0
-814,32834.64674,60.58021867,4184.578203,0
-815,26267.2214,58.79376696,1136.117271,0
-816,41254.2282,28.94820475,6993.049441,1
-817,38268.6966,30.67684984,2522.057185,0
-818,37087.26876,57.5763008,6391.153194,0
-819,38458.13304,55.85685407,3644.30607,0
-820,40185.77567,31.00076808,1002.340574,0
-821,65481.94555,45.03857624,10614.24849,0
-822,57426.68048,20.1188451,2461.974406,0
-823,47903.31425,46.16901477,4283.226974,0
-824,34222.18775,52.24667845,3582.151364,0
-825,28481.2656,47.42132836,5302.179943,0
-826,43069.65215,41.24003469,4091.561292,0
-827,33093.96186,33.40317391,3852.992444,0
-828,61363.85606,62.13637386,9636.804731,0
-829,68100.73562,47.75294027,8124.59898,0
-830,50551.48034,56.7655671,5262.616088,0
-831,54421.05401,22.96153355,6229.836019,0
-832,32152.45974,57.48695513,3550.584889,0
-833,40230.97571,58.79409568,745.1947491,0
-834,53483.374,29.18999789,1459.668599,0
-835,65137.93776,42.13310957,10352.18177,0
-836,29496.59413,54.66582086,2216.975334,0
-837,45181.93371,48.0968023,2243.153992,0
-838,24994.7782,34.72335974,51.64026024,0
-839,54820.97401,20.56039647,10070.94905,1
-840,62955.60829,29.54950978,207.5438178,0
-841,52956.24608,25.14710192,959.0972148,0
-842,40366.20324,32.07200804,7410.792024,1
-843,60005.01013,40.19488899,10677.66802,0
-844,37598.38508,54.66392931,3641.808411,0
-845,61323.0009,60.16601647,8699.946682,0
-846,21243.9323,57.86806022,3438.979277,0
-847,62111.43441,25.97645859,499.2085782,0
-848,56524.87881,54.91097151,5296.940273,0
-849,51718.13696,34.35049974,1036.616804,0
-850,43205.63175,23.12587725,4835.274657,0
-851,26934.19744,35.9790102,4113.299167,0
-852,68966.82256,54.39248814,6690.635338,0
-853,31527.3472,59.02264656,2062.719158,0
-854,46839.06109,28.73335871,1498.200316,0
-855,32151.29686,42.91491157,4601.940086,0
-856,40831.80192,47.1495458,6429.593688,0
-857,30868.80482,58.13656775,4618.392184,0
-858,62988.82643,32.47461294,6924.901569,0
-859,65496.76748,61.95993475,11805.55577,0
-860,63032.62627,24.78843756,390.3358609,0
-861,27287.07454,18.69579873,4509.881422,1
-862,44299.37174,24.37145815,5154.909843,0
-863,44091.34923,30.48523032,1664.104927,0
-864,26617.03032,28.61650924,2727.241681,0
-865,21856.23353,47.72276785,1500.653745,0
-866,28072.60436,54.14254823,1.377629593,0
-867,35950.48845,35.47184697,2664.925675,0
-868,28982.11236,35.26825118,1440.499168,0
-869,51790.72645,41.15087779,1281.035729,0
-870,65000.81962,21.69969953,1114.914824,0
-871,29761.04601,21.85429135,3748.258124,1
-872,23081.45074,53.89681841,257.6612015,0
-873,60016.74099,22.73860251,1522.646768,0
-874,54619.15536,53.59786282,901.2777768,0
-875,66274.2081,36.37462344,10257.91839,0
-876,49380.65863,45.47104991,5425.280945,0
-877,46283.06746,48.28858511,2166.1231,0
-878,25554.69852,42.79692147,4229.914353,0
-879,36680.18192,22.14626261,4849.333785,1
-880,30383.67633,46.8319496,2153.607725,0
-881,67730.4437,26.30314698,8881.583636,1
-882,36446.72414,40.61685061,2927.675444,0
-883,33648.73899,60.97094456,1498.161255,0
-884,53852.79954,42.78285555,2089.909464,0
-885,61298.21867,48.28503024,9399.504602,0
-886,69465.74696,20.58523169,7983.705373,0
-887,39102.04171,29.30086538,4200.697505,0
-888,29366.58233,22.48404853,4049.253865,1
-889,67949.73807,34.47967882,1790.348617,0
-890,29468.85918,22.78963669,3703.953047,1
-891,56839.4019,36.55239093,9004.801714,0
-892,38277.93687,44.90919805,7405.80321,0
-893,49664.27072,39.94416069,5571.456364,0
-894,49972.01083,32.39698399,763.9541159,0
-895,27356.80095,63.48787362,2983.583322,0
-896,36840.60366,36.67458349,6557.940331,0
-897,51438.81407,46.01234316,6898.783719,0
-898,40614.72205,20.93267159,2649.695356,0
-899,56738.63732,63.37394217,3210.807048,0
-900,68004.68622,41.53109727,2698.047781,0
-901,44458.63729,52.08290527,1456.234944,0
-902,66801.19751,19.13513823,288.6467693,0
-903,48991.85368,18.6213071,7453.264268,1
-904,69430.93662,58.94091428,2648.220452,0
-905,27989.1111,27.80092017,1770.818279,0
-906,67675.80477,37.74039569,4396.076877,0
-907,47985.72247,33.55977398,8801.610127,1
-908,43388.20947,35.70435679,7007.154253,0
-909,63182.45567,25.58638213,3493.224567,0
-910,20568.89131,25.85385679,2257.064782,0
-911,25833.71723,19.20759964,3716.254685,1
-912,23087.3014,37.61963726,423.4183995,0
-913,36124.71783,25.05472696,6485.05748,1
-914,57330.61941,44.4456513,1058.039202,0
-915,47240.25312,55.00972136,4286.345614,0
-916,55730.62923,55.15643796,9286.357545,0
-917,61660.40132,48.89875823,1684.526564,0
-918,49746.88744,29.36146193,7354.129523,1
-919,23973.68759,55.28829775,95.46072238,0
-920,28085.4796,45.03212598,4431.280471,0
-921,33585.47474,60.37738544,3933.883012,0
-922,44179.3851,51.30649189,5888.375781,0
-923,56025.41973,29.39644446,4341.626699,0
-924,49369.70415,51.37341727,109.3796228,0
-925,26889.36474,62.62510846,675.7120311,0
-926,30873.21764,38.95273955,4076.87675,0
-927,30608.94324,46.47670398,2632.551811,0
-928,54878.08965,42.88355929,1504.473462,0
-929,32423.80685,63.18998659,2961.952368,0
-930,46608.36902,20.40499151,1521.868405,0
-931,65689.1897,28.10870743,255.072656,0
-932,49054.86027,54.06866362,1102.240361,0
-933,20310.57756,54.26474774,1279.113098,0
-934,66423.39933,18.87435711,1066.214601,0
-935,45783.15475,63.88504374,7492.90982,0
-936,62887.76267,42.8418414,6849.484223,0
-937,51088.21078,52.08587159,9097.112036,0
-938,66217.94485,19.08162361,745.0760945,0
-939,62799.75061,35.36149204,6752.586071,0
-940,45789.48752,36.29805129,4545.157459,0
-941,59727.40599,50.24148795,5203.325181,0
-942,35513.58955,60.80701767,6983.360741,0
-943,29178.97759,63.93073469,1664.386062,0
-944,67501.69225,49.63745902,7589.75999,0
-945,66255.02953,28.96002495,7475.212282,0
-946,63558.86409,36.35685466,9282.927735,0
-947,63441.71236,18.67128938,3119.412678,0
-948,64983.15424,27.29197161,9109.774342,1
-949,56946.64594,55.40901375,11175.84107,0
-950,52349.87246,35.52249918,5181.848501,0
-951,31473.45878,27.99340911,797.3459721,0
-952,59267.3392,34.91269907,5085.311919,0
-953,66809.17325,31.05454812,1316.187128,0
-954,48083.31155,39.15730598,9193.095264,0
-955,20629.3473,28.30686155,3310.410118,1
-956,25363.33106,31.39079116,3946.001447,1
-957,28873.67417,62.3285863,2224.469765,0
-958,41430.85526,33.68956136,5719.278116,1
-959,53612.13123,23.28296645,5976.896568,0
-960,51555.74026,57.26359177,9217.688669,0
-961,46564.3789,50.65129969,599.830324,0
-962,61200.42748,19.22777832,406.8518612,0
-963,29307.32077,61.16495696,481.8426971,0
-964,67687.18308,20.8043048,10506.32803,1
-965,52565.06574,55.69652935,372.9742533,0
-966,52920.14801,20.99096653,9521.769942,1
-967,34981.36783,23.48770889,5502.736031,1
-968,65210.8371,27.52843972,12607.95166,1
-969,60016.07961,54.31724029,2857.007414,0
-970,23066.96468,33.091353,1933.353568,0
-971,52603.87864,43.89546653,2043.089553,0
-972,20111.36326,53.49539456,1745.371922,0
-973,32759.70028,43.88045936,5211.32563,0
-974,30578.02016,55.36616174,3010.35024,0
-975,21211.58939,32.65119825,931.7810522,0
-976,53746.32658,29.35028859,9534.660206,1
-977,45214.10922,18.2999804,1779.727735,0
-978,58465.0497,20.12688854,11417.06009,1
-979,54422.97349,58.57139504,444.6137769,0
-980,62842.06439,62.19707882,107.5972315,0
-981,53005.13229,45.68722047,2539.336749,0
-982,40749.02818,26.85401291,6207.186165,1
-983,49804.41083,20.03986423,7235.194717,1
-984,37277.24612,26.63314682,6289.256076,1
-985,46883.20654,30.39988989,6342.567909,1
-986,31763.3692,35.60251728,3489.404122,0
-987,61013.18158,24.70761897,1791.542962,0
-988,41285.3589,22.91107059,532.1002558,0
-989,39133.89186,21.60323147,433.4584179,0
-990,62171.80256,24.2437831,1035.462496,0
-991,53638.64595,44.02737436,109.4788536,0
-992,49264.58489,58.11954711,3051.574267,0
-993,63114.49699,48.35108283,11890.75719,0
-994,58165.50622,45.72915357,4155.723767,0
-995,43029.80326,27.21015742,6894.165381,1
-996,21593.62266,51.54892278,458.0937244,0
-997,49104.76824,35.53851733,9452.217947,0
-998,65776.23241,39.79819134,2805.863745,0
-999,36192.14945,21.40240262,7236.17393,1
-1000,62165.86119,19.6025431,4739.948954,0
-1001,50793.35572,41.60188645,421.6403796,0
-1002,62422.20379,32.14522141,2841.633423,0
-1003,63166.99496,56.51003993,4058.789534,0
-1004,23717.56785,49.32576952,1530.090242,0
-1005,66797.66467,21.38042855,11921.19954,1
-1006,30272.20362,19.13244649,1440.072549,0
-1007,55741.19569,52.62685289,3181.780519,0
-1008,30742.57971,26.44933684,5685.653641,1
-1009,20491.56433,35.13483691,1579.168249,0
-1010,35620.41863,40.82467405,3611.295903,0
-1011,50206.13372,33.03111152,5826.462898,0
-1012,67935.45387,60.9422627,8267.326053,0
-1013,59223.3966,22.93963515,3901.402085,0
-1014,32657.26868,32.81218796,1796.270503,0
-1015,55931.65458,23.44133307,4053.519938,0
-1016,23694.77887,22.86428448,764.29719,0
-1017,44324.28637,23.18086641,2672.692026,0
-1018,34735.49175,62.35895581,1402.217854,0
-1019,67064.34474,22.58360992,1091.624816,0
-1020,42761.49268,45.04937391,610.6578471,0
-1021,49517.72233,31.5493175,7337.950431,1
-1022,54372.18266,29.97711781,839.1250812,0
-1023,29941.96837,48.35844947,3170.045654,0
-1024,68414.12078,51.04678129,6154.052457,0
-1025,23891.24457,51.02920468,3475.905423,0
-1026,47187.57155,24.22704766,7933.469449,1
-1027,39819.92094,63.38479701,3577.44769,0
-1028,50632.27924,53.62329948,1262.356066,0
-1029,39970.21125,40.36811516,7867.616836,0
-1030,55176.1396,49.4559101,7822.936091,0
-1031,50533.57195,56.63106428,117.7125869,0
-1032,52983.87446,42.58806976,5567.941087,0
-1033,31187.66993,30.99961612,593.1247798,0
-1034,34909.98223,25.56874133,2852.371795,0
-1035,53810.84766,51.43297298,9154.477015,0
-1036,55478.96737,53.76292004,6227.541774,0
-1037,60394.09487,57.68642247,8293.576747,0
-1038,36845.73868,51.93947954,1790.013566,0
-1039,60264.94065,54.72136343,2241.388144,0
-1040,52981.5086,18.30621644,3759.937234,0
-1041,50222.76242,21.42271292,8734.740617,1
-1042,59256.55596,38.57894462,9812.978717,0
-1043,43203.41422,40.90172418,7730.727575,0
-1044,46288.75641,23.59003818,6053.791581,1
-1045,58176.15493,52.17576009,9852.14111,0
-1046,25631.43473,47.63557696,4778.700543,0
-1047,58977.99765,30.33098269,9442.01161,1
-1048,25048.01599,54.65677518,2341.367858,0
-1049,33436.48901,34.66914689,5473.985551,1
-1050,23787.36705,36.3117126,3041.552908,0
-1051,69456.56777,48.05355678,13190.36589,0
-1052,65447.61161,39.63135194,3269.534327,0
-1053,68743.35318,56.38525158,2290.204289,0
-1054,36052.5776,49.49996087,2830.179862,0
-1055,24820.79247,38.24401685,51.94924278,0
-1056,26046.38417,54.62546358,4669.457353,0
-1057,60850.80244,59.99025632,7206.852593,0
-1058,69929.011,51.39444845,12427.8357,0
-1059,53298.49615,56.90970733,2106.709791,0
-1060,48818.38232,49.29612194,2312.421777,0
-1061,38042.08416,32.83899402,3495.856306,0
-1062,42119.82271,60.06420183,1930.566532,0
-1063,62247.87974,39.22965562,1870.715089,0
-1064,62252.08816,28.24617586,1699.680972,0
-1065,36973.08569,38.28030326,4144.448144,0
-1066,54217.23678,26.62937737,8836.775689,1
-1067,44218.76632,58.57925853,1693.920179,0
-1068,33274.05027,23.95343526,2244.883109,0
-1069,54656.54904,18.39382955,9911.134963,1
-1070,67593.51708,25.40544564,9864.078027,1
-1071,39472.70725,42.60886077,596.4811795,0
-1072,30572.44686,48.65184248,1847.09425,0
-1073,50447.69963,58.09854003,2443.768915,0
-1074,49198.65266,49.1924227,483.6201677,0
-1075,53768.22821,25.37750388,3696.953244,0
-1076,52809.54629,61.01331918,6276.830737,0
-1077,38011.72665,19.05789168,4625.193378,1
-1078,58910.29177,31.01396195,3671.923094,0
-1079,57914.73107,50.61159971,6715.857908,0
-1080,39494.76692,28.5471422,3544.156039,0
-1081,45918.87525,38.64211962,1910.329531,0
-1082,55649.05588,19.66450149,7660.346171,1
-1083,27136.6288,18.83362032,2253.190253,0
-1084,62724.63612,39.83537661,9255.137755,0
-1085,32921.84858,43.73305267,2553.212778,0
-1086,28482.64955,19.78378813,329.4500422,0
-1087,44170.22174,24.47037064,2168.751735,0
-1088,60664.3716,22.36445737,5873.410979,0
-1089,64501.93043,33.3579469,12147.31422,1
-1090,28237.51739,50.01555209,2728.189944,0
-1091,67420.59545,21.18529406,3668.994784,0
-1092,55642.99339,38.91090684,2841.697982,0
-1093,56086.05809,34.57920217,3990.85076,0
-1094,57676.73918,20.66561699,10504.66817,1
-1095,62535.63285,39.19407554,9490.26419,0
-1096,60686.76857,48.39930849,10614.13095,0
-1097,25032.30094,46.31058897,680.9047822,0
-1098,22228.34529,33.35945709,2187.213337,0
-1099,41435.15375,34.92571649,3702.171428,0
-1100,43955.4094,51.55828607,7833.477761,0
-1101,60063.69309,59.11464434,6766.294181,0
-1102,34635.74475,18.9473467,4859.235287,1
-1103,63944.32373,32.5243454,12213.94934,1
-1104,35403.42733,34.64541582,2929.359704,0
-1105,53654.07937,44.13723421,6587.775556,0
-1106,23508.23073,52.64034902,4622.841065,0
-1107,61869.46603,36.22730418,1040.493673,0
-1108,20674.89708,23.99988287,299.8251378,0
-1109,22127.92411,61.18878265,1777.828551,0
-1110,27408.72961,37.69173185,2591.028947,0
-1111,60720.7961,38.82036029,3278.179727,0
-1112,34760.01932,34.26030186,28.88253444,0
-1113,23057.36392,46.97181129,2487.165182,0
-1114,42380.99506,35.71681219,6832.684817,0
-1115,37887.54939,24.4157261,5061.777831,1
-1116,39988.74074,54.26870557,357.0881242,0
-1117,25026.50564,62.90692234,3845.741849,0
-1118,43588.08143,40.49564678,6453.057979,0
-1119,20897.42669,28.0293199,2940.42397,1
-1120,24904.62467,53.3197898,3376.907465,0
-1121,66068.63504,35.91878387,5626.86934,0
-1122,36126.23109,40.70791186,3805.802721,0
-1123,23626.72679,34.29335345,2173.76769,0
-1124,30200.24326,62.78257014,4871.677576,0
-1125,65569.78524,62.23215892,12494.26726,0
-1126,20617.26101,46.51750698,2224.068134,0
-1127,25817.45462,21.63047036,3682.861931,1
-1128,21448.82799,31.79518831,1989.182976,0
-1129,69370.17764,52.3746293,4605.918773,0
-1130,34145.79955,31.40079893,4074.952591,0
-1131,52651.25686,57.32024618,6529.019522,0
-1132,40069.33838,43.31346189,3646.051618,0
-1133,39246.54489,48.32205561,919.11464,0
-1134,56233.78954,57.99108565,9642.092538,0
-1135,49264.26833,19.00652627,801.779606,0
-1136,30451.63616,42.19713668,475.4205917,0
-1137,28726.9963,34.75143776,3675.833415,1
-1138,20113.25349,30.13257556,2507.64971,1
-1139,43434.77543,52.20588011,3672.109828,0
-1140,59208.71608,30.93115193,11479.43781,1
-1141,69310.95727,42.11060918,1590.325804,0
-1142,60567.42444,40.04122249,571.9329349,0
-1143,22048.89504,53.7982525,4199.024356,0
-1144,66733.71025,52.97784361,5366.640793,0
-1145,22209.00951,22.00626001,4096.783714,1
-1146,49032.66241,54.5560719,1777.953131,0
-1147,26558.36106,57.83336484,22.32793318,0
-1148,49255.45797,36.61814758,4951.915771,0
-1149,30218.15123,48.02147268,5914.516662,0
-1150,56317.08282,24.6534823,8045.440953,1
-1151,53825.43058,45.35669022,431.4501612,0
-1152,34927.99361,54.15294718,1957.057929,0
-1153,53287.38502,59.55992485,4432.665444,0
-1154,32032.55674,50.11743705,4582.938274,0
-1155,48405.72681,47.93288261,3766.614435,0
-1156,46132.91405,26.90939873,3216.491255,0
-1157,29049.07149,57.78255455,2562.695554,0
-1158,68550.68786,19.36118878,3879.672652,0
-1159,47474.8196,37.87464495,5083.728272,0
-1160,50021.65541,23.81667911,1054.268085,0
-1161,64089.13191,37.31044758,6272.78845,0
-1162,28451.70557,41.60107543,1042.850376,0
-1163,58132.47127,29.38094985,5491.035602,0
-1164,30961.16614,32.11428662,162.7955961,0
-1165,64162.64961,53.85556307,6938.01252,0
-1166,67470.11702,52.23263736,12715.29472,0
-1167,68263.76624,42.64295351,4124.330404,0
-1168,42889.33416,57.50669619,6340.708855,0
-1169,20155.79236,41.92236196,3489.957148,0
-1170,58178.61457,49.69279455,10948.49949,0
-1171,45735.45569,52.82103724,2944.537354,0
-1172,30037.20313,38.68492023,1247.012791,0
-1173,64392.51221,37.80218224,4513.243712,0
-1174,26291.3758,52.40154262,1094.177529,0
-1175,36008.381,20.62621639,3709.304431,0
-1176,54953.97966,44.69223602,365.6461852,0
-1177,28753.32549,49.40348027,4990.369091,0
-1178,41993.98432,36.19281642,6644.344214,0
-1179,56696.4586,57.52025339,9686.630307,0
-1180,51906.04616,36.5730408,10235.27261,0
-1181,30939.39338,47.8934448,6115.822333,0
-1182,38520.72397,56.67372097,4176.949955,0
-1183,33489.03986,25.97104402,3581.655047,0
-1184,52836.00643,38.25136318,5671.644328,0
-1185,51733.28751,24.91495145,7906.141179,1
-1186,41273.7715,32.09039538,3299.885072,0
-1187,68223.68431,28.99041509,7364.001945,0
-1188,28222.87891,40.33136779,613.2406201,0
-1189,21921.36108,62.3272301,1901.143922,0
-1190,38852.93302,27.05029416,7513.182864,1
-1191,59621.36764,54.15061886,7014.622708,0
-1192,41377.7456,45.86166157,5324.048185,0
-1193,54405.62497,57.1412841,6253.206677,0
-1194,60103.01157,56.05377209,2632.265613,0
-1195,67528.65421,52.88850155,7877.415131,0
-1196,61156.93738,31.80242595,3250.006084,0
-1197,42955.6946,45.41622917,2962.825186,0
-1198,46923.04677,36.3395338,3107.883782,0
-1199,24951.25749,62.04114048,2544.356003,0
-1200,26267.52942,34.49638622,59.46916335,0
-1201,64603.92088,33.06183178,11264.69116,1
-1202,34667.0204,18.85318928,2827.289402,0
-1203,66008.39707,19.42742577,9189.611514,1
-1204,45840.20762,32.27027963,5299.239719,0
-1205,32188.01624,49.42886416,4659.953325,0
-1206,50289.66475,24.0740542,6127.381688,1
-1207,36837.53085,54.72850399,1598.183569,0
-1208,28852.03381,44.21152393,5705.986163,0
-1209,68127.16681,47.9523112,12099.9703,0
-1210,41349.12251,53.85620698,8083.232201,0
-1211,69132.46258,33.47118164,7621.410219,0
-1212,38477.3256,27.34633178,289.576582,0
-1213,68291.15365,46.79353807,9577.955143,0
-1214,58074.60654,59.79866948,8551.259893,0
-1215,26867.10826,32.62229962,1730.151907,0
-1216,32348.45015,59.75238657,3229.820063,0
-1217,31044.39176,49.93586833,4465.872769,0
-1218,29279.74979,18.8130986,2291.988119,0
-1219,35145.10019,47.79338272,510.7399689,0
-1220,44405.28066,34.38252406,3917.876098,0
-1221,42059.6369,55.29068575,5310.271529,0
-1222,28612.20306,58.86168988,4948.48807,0
-1223,46546.70455,60.7597447,254.8435786,0
-1224,22832.32393,32.5164225,3318.407787,1
-1225,21565.92154,44.1265854,4136.761126,0
-1226,26078.21358,31.80688066,3665.880899,1
-1227,60503.54785,20.1184142,6766.53302,0
-1228,31233.30776,41.70405183,1662.453616,0
-1229,34505.80093,49.32442037,2151.696592,0
-1230,35485.11827,47.38887031,2482.04225,0
-1231,45986.3534,20.2872954,7112.926157,1
-1232,43308.17898,34.83136125,6777.198246,1
-1233,53284.11968,32.14321496,849.5451843,0
-1234,68398.28748,36.99394877,8106.859293,0
-1235,64743.70707,56.25701235,4304.929109,0
-1236,68412.60985,28.15512845,551.8430811,0
-1237,59695.10715,27.90329809,8889.928408,1
-1238,32406.57073,20.98656135,3394.65824,0
-1239,33184.19598,60.37477159,4580.097831,0
-1240,47688.25057,34.56708902,1377.018407,0
-1241,42591.59524,45.11655999,4602.245841,0
-1242,34051.52804,35.74565239,6224.152886,0
-1243,61800.03438,29.66579595,9143.611709,1
-1244,45360.71627,27.07574763,4569.994987,0
-1245,20252.12346,27.4416098,3360.059414,1
-1246,30134.7096,43.81722832,958.9980819,0
-1247,56217.3265,51.58228056,2866.5859,0
-1248,31722.73095,34.85181726,2877.756104,0
-1249,60178.44619,33.26140894,3203.615438,0
-1250,51144.24305,37.83799986,3411.656424,0
-1251,22449.07739,35.7657793,1187.42695,0
-1252,44932.87511,27.14705773,622.9128105,0
-1253,40929.48394,20.25460597,2352.287116,0
-1254,31092.26772,43.83220649,5617.993126,0
-1255,44743.55163,53.05626193,2574.707756,0
-1256,60770.22902,33.62672671,2242.82576,0
-1257,43528.48431,59.89202707,2264.725152,0
-1258,25008.94953,63.21714847,2941.028155,0
-1259,47433.41542,60.45516523,9139.14371,0
-1260,50064.34637,29.3425137,417.6331058,0
-1261,60348.41356,60.44679037,3037.968147,0
-1262,67471.1271,26.92335366,4448.412323,0
-1263,30492.87567,61.6792429,4834.738644,0
-1264,25640.07888,22.6564796,3105.443021,1
-1265,55040.75817,52.71448411,8352.061533,0
-1266,34476.70638,23.35098726,898.1339068,0
-1267,23345.86645,38.29017484,4548.110289,0
-1268,24426.02987,34.69642326,823.835162,0
-1269,65849.88967,30.96884689,5051.302388,0
-1270,60454.52565,41.05160496,7875.070926,0
-1271,22680.31843,55.09158789,1743.774685,0
-1272,44471.87373,19.61305844,5883.660558,1
-1273,46572.32,59.12164964,721.3416051,0
-1274,24369.84125,61.73937931,1366.536025,0
-1275,56830.27286,37.16311407,10462.74045,0
-1276,46942.99652,55.64154017,2187.065484,0
-1277,42521.79071,54.74892029,6745.817708,0
-1278,63188.32853,51.14162945,3960.855647,0
-1279,29410.17752,23.49816499,812.3235343,0
-1280,46668.62847,57.8349421,1833.48585,0
-1281,62693.26958,22.52686485,5321.712558,0
-1282,65307.12748,23.72316582,1906.79553,0
-1283,59589.06429,20.60976412,4191.715856,0
-1284,41019.54879,23.25425304,3005.826864,0
-1285,48058.87138,47.74535288,6527.990222,0
-1286,50208.53002,35.02765993,729.6044303,0
-1287,62526.88793,61.05217092,5835.542391,0
-1288,48192.18561,29.75531818,5026.474557,0
-1289,30884.05673,31.27786188,4099.902045,1
-1290,36965.74248,53.76235862,6333.391588,0
-1291,43536.03891,27.86690712,6427.726093,1
-1292,69181.66406,39.23658259,1173.740942,0
-1293,64233.0407,26.71456132,12104.53421,1
-1294,52593.51506,19.53498199,811.9078625,0
-1295,32282.25175,42.63495589,3345.941958,0
-1296,54077.84328,57.12066029,7149.066896,0
-1297,51595.35748,28.46181675,385.4033625,0
-1298,23097.37648,53.76303351,4517.579801,0
-1299,27407.0562,26.15943832,2949.931674,0
-1300,64395.29807,63.17131965,10054.63464,0
-1301,60432.21666,41.92232593,6300.868939,0
-1302,42990.98283,29.52880839,4665.581021,0
-1303,41581.88992,22.85122067,7895.112865,1
-1304,53289.06529,47.45984368,8047.140754,0
-1305,22372.50524,31.49304954,1118.926064,0
-1306,57119.73969,22.33448761,10211.72193,1
-1307,31112.05942,49.61600423,424.3521316,0
-1308,68936.32135,43.36505621,11073.1585,0
-1309,20436.33129,56.94096616,2356.18197,0
-1310,20583.61217,21.98976744,53.18620734,0
-1311,58988.3058,19.9765914,4728.259542,0
-1312,45311.83184,26.928215,3103.812228,0
-1313,60856.83099,37.07050063,10238.4963,0
-1314,45818.28325,48.45083936,8137.164403,0
-1315,20904.55548,41.0178787,2606.023776,0
-1316,49908.29187,29.55094038,2903.036128,0
-1317,55988.29528,31.08703947,7745.754809,1
-1318,62125.25811,21.08586764,5700.457195,0
-1319,48822.72096,60.94434946,599.347887,0
-1320,29976.8291,57.6661531,3796.03274,0
-1321,41944.26819,61.13506293,1203.700529,0
-1322,36970.36044,33.70459912,1268.506383,0
-1323,39992.71911,20.8266799,4999.202015,1
-1324,42450.54304,61.61424618,6210.280587,0
-1325,42146.93762,23.72052181,7367.258247,1
-1326,52841.51644,18.44602338,5957.386324,0
-1327,66418.95631,62.64878626,9340.544462,0
-1328,44047.66656,27.31337199,2096.917501,0
-1329,24821.21413,19.24390259,874.3242555,0
-1330,35583.61854,63.05439716,27.25248225,0
-1331,25289.60724,21.28056335,2130.793535,0
-1332,39770.12866,45.19093801,280.8785474,0
-1333,59511.1387,29.27411054,2520.514452,0
-1334,51211.65404,45.62856826,4093.360006,0
-1335,56530.49727,45.54492831,5957.993317,0
-1336,42604.46298,41.93638103,7942.168145,0
-1337,66642.00775,56.16766872,4958.067776,0
-1338,35527.83449,47.44952906,325.1195915,0
-1339,66896.76531,31.54546803,387.3944203,0
-1340,51980.35954,35.41570329,6243.04503,0
-1341,40081.42056,43.11674328,770.7775496,0
-1342,50167.67175,42.04748763,5592.651807,0
-1343,39545.95959,43.70086672,5787.658045,0
-1344,43372.39761,55.1945837,474.5253267,0
-1345,33084.16985,59.02910226,5762.469958,0
-1346,53187.97965,63.55816426,4879.846139,0
-1347,48290.88046,30.03676084,4902.975221,0
-1348,66078.76935,45.53632503,3664.621452,0
-1349,51547.16666,53.11192749,6563.41158,0
-1350,39393.14058,52.73927401,5415.054667,0
-1351,69592.01083,63.238625,13025.05657,0
-1352,54588.50119,31.07765403,2847.819173,0
-1353,44964.0106,48.41480327,693.2147138,0
-1354,46081.64555,50.06910454,1487.786041,0
-1355,45564.01535,22.28801022,715.8366044,0
-1356,62657.60254,28.17425706,5771.088254,0
-1357,67921.63211,35.85197819,1399.875472,0
-1358,59514.01238,57.01784581,2504.722649,0
-1359,48422.53611,41.85424768,3520.565901,0
-1360,22001.31745,31.61728481,2155.812173,0
-1361,52529.69877,18.81280424,9808.19094,1
-1362,24061.46316,34.51152011,3980.578783,1
-1363,23450.87213,34.40636966,1419.805523,0
-1364,32866.57824,44.88061703,6037.007733,0
-1365,30958.90796,43.60356595,1558.930765,0
-1366,27550.89527,29.73292642,3944.219318,1
-1367,36024.93789,51.80688647,4155.44929,0
-1368,46801.27429,34.60522061,5315.97382,0
-1369,27082.71898,60.27796277,4990.557123,0
-1370,65435.03538,19.84650416,12727.99755,1
-1371,59295.74108,51.34979947,493.7144299,0
-1372,45435.26724,21.04219778,2143.386972,0
-1373,61742.60958,34.55981004,326.9895676,0
-1374,31396.86601,34.99668137,3719.230135,0
-1375,35916.70415,53.54044336,6401.189486,0
-1376,43969.60416,25.48304865,7455.920157,1
-1377,60624.81537,39.85778773,6740.716136,0
-1378,69939.32968,55.63762125,2225.224533,0
-1379,69755.32016,44.54368228,13766.05124,0
-1380,69478.39876,22.65633974,10229.40788,1
-1381,34192.16052,27.9972893,5233.663228,1
-1382,57457.85794,50.71466253,3608.805202,0
-1383,63910.33466,56.63563264,8986.718948,0
-1384,26643.80899,19.28962851,1413.783224,0
-1385,23985.07542,24.4328115,2284.209129,0
-1386,63660.64881,50.28296012,7832.572411,0
-1387,44102.33009,21.0142084,842.5690773,0
-1388,29409.8059,41.61039681,3388.560923,0
-1389,49294.65931,37.25489393,4574.85478,0
-1390,39553.64738,53.69063324,7063.898036,0
-1391,68583.04105,57.08784007,2922.288685,0
-1392,31060.60626,53.27721306,3729.97465,0
-1393,29190.32462,60.29122269,5239.594773,0
-1394,63437.70015,54.62814035,11963.36422,0
-1395,35243.06323,35.62987754,748.9407179,0
-1396,36475.35353,63.3304318,413.3111631,0
-1397,63271.60883,23.34209813,11298.17219,1
-1398,45540.32552,59.31814027,1490.470251,0
-1399,68565.3855,21.21090931,1231.537368,0
-1400,20063.09958,24.27833881,2495.132991,1
-1401,44222.2622,55.86147245,7443.486707,0
-1402,67839.24446,47.78258022,5609.326602,0
-1403,54009.69228,49.40990043,884.7355047,0
-1404,52234.07535,47.98450551,9255.842934,0
-1405,28423.13147,61.67145866,5282.849182,0
-1406,52623.43759,50.41852689,1156.319703,0
-1407,25636.33357,55.7820572,1239.688258,0
-1408,60842.94116,60.25514261,6608.968795,0
-1409,36727.746,58.18465417,7287.540764,0
-1410,63830.74744,35.1387838,5271.626982,0
-1411,43108.41456,22.29196192,647.8793786,0
-1412,25285.26113,19.81954403,1027.577792,0
-1413,57646.24291,62.87074846,1452.493378,0
-1414,51027.56761,61.50629662,3313.30041,0
-1415,37389.77238,34.44216878,7365.938916,1
-1416,65017.59349,26.91783316,1017.166545,0
-1417,20595.93458,45.47522442,1330.067638,0
-1418,56445.47391,55.66152026,6875.579683,0
-1419,60864.32175,44.14129754,3704.032126,0
-1420,51231.01043,62.58516727,813.0279887,0
-1421,41103.13692,63.07950736,3644.301903,0
-1422,56267.05082,43.12014146,8238.115021,0
-1423,20774.84582,35.58814413,1347.331612,0
-1424,46424.22123,59.20610592,4087.180707,0
-1425,29909.554,62.72826528,4495.278753,0
-1426,62808.50507,56.77153074,6465.75059,0
-1427,41243.80514,52.07526842,4161.573148,0
-1428,46089.14789,63.29653317,1618.218357,0
-1429,69191.23338,57.38518469,6270.574035,0
-1430,60846.66501,32.67339488,8974.492021,1
-1431,66558.93437,48.51616071,3090.992455,0
-1432,27428.28187,54.32718563,1287.632081,0
-1433,60912.79896,60.68736389,3870.333893,0
-1434,28127.50945,41.48682721,3279.557824,0
-1435,64029.54348,36.15775109,1644.339177,0
-1436,61836.73562,29.54548658,10971.97464,1
-1437,37005.07185,58.89032024,1068.887398,0
-1438,56003.5734,18.25026519,3639.900038,0
-1439,58038.92625,54.00212561,538.2305227,0
-1440,29237.2562,24.59757384,23.91642787,0
-1441,33265.79055,21.58345902,5968.442038,1
-1442,66236.92716,35.91910784,2756.9723,0
-1443,41978.7125,52.53010216,1603.924862,0
-1444,63453.22313,23.91570541,10668.36351,1
-1445,24985.59066,50.1327548,2017.139948,0
-1446,53593.1132,62.88581,1428.189214,0
-1447,54179.72187,52.90507993,10028.01586,0
-1448,20126.41377,36.46094444,1432.355862,0
-1449,51180.83971,56.78991141,2875.44523,0
-1450,36455.70151,38.47891862,3437.076895,0
-1451,39188.94529,22.39910978,3545.162249,0
-1452,47852.9269,38.93593926,3295.320061,0
-1453,20014.48947,43.2022035,2426.306223,0
-1454,28630.00951,27.29153003,4406.995056,1
-1455,66688.91312,48.08527027,9690.308798,0
-1456,53226.19441,43.61874729,5686.643116,0
-1457,35609.47835,47.88639354,2574.093432,0
-1458,64065.68286,43.28767314,771.7174942,0
-1459,54935.65838,42.95419475,7921.83051,0
-1460,67800.58133,28.94329698,5035.139378,0
-1461,46893.33671,43.68609808,9131.864419,0
-1462,54648.96698,56.49055625,10674.77021,0
-1463,31410.50729,36.20457331,5797.292398,0
-1464,36989.58954,33.75563245,556.5559407,0
-1465,33198.12828,30.14201203,4285.386912,1
-1466,47704.38083,21.84036088,2717.079485,0
-1467,30569.5727,37.47767833,4752.557572,0
-1468,61398.68707,63.2944038,9008.154521,0
-1469,67750.82599,33.51874317,6855.986311,0
-1470,47637.86203,51.05145093,6708.673591,0
-1471,38357.51752,25.54630783,2548.413916,0
-1472,43156.30527,27.84683467,2413.011907,0
-1473,41101.54295,35.65403369,5240.114373,0
-1474,59475.49718,36.73713048,2628.262124,0
-1475,40708.91941,32.81676887,5532.343843,1
-1476,30391.4733,59.26477079,2072.634066,0
-1477,46024.14456,24.17451622,4318.377722,0
-1478,66529.48522,59.42979515,6337.674939,0
-1479,68115.98033,37.29177117,7458.559482,0
-1480,38423.08429,29.20911929,3676.568354,0
-1481,33227.28018,23.14898157,6470.410381,1
-1482,61674.45723,54.82930153,4054.551771,0
-1483,26931.06825,41.28060416,3668.646773,0
-1484,60040.99384,44.1414116,2659.694541,0
-1485,26181.24241,42.66303152,2618.973497,0
-1486,61552.21751,61.08761215,4042.539734,0
-1487,29705.07473,41.83413714,1912.205091,0
-1488,53934.81227,21.47434043,2085.817639,0
-1489,23007.38788,48.97252372,2296.795327,0
-1490,48552.84341,29.37808354,5650.889688,0
-1491,66370.88876,63.11349631,5176.361161,0
-1492,49140.26986,43.64116195,8832.651707,0
-1493,39684.9818,33.62885053,2590.928175,0
-1494,32025.40445,37.50658678,217.488528,0
-1495,55568.17946,42.75697379,6114.867546,0
-1496,45898.51352,24.6631496,5617.178645,1
-1497,39217.90992,30.10142049,864.6240529,0
-1498,34070.604,27.29405159,1401.685061,0
-1499,66768.36121,49.13087482,4255.367636,0
-1500,31400.85843,62.58585538,4464.404268,0
-1501,49335.75726,43.62837513,2549.620474,0
-1502,51774.05251,47.78184138,1508.761776,0
-1503,43064.64735,43.9394257,787.0471897,0
-1504,41226.13468,49.1241523,2155.660059,0
-1505,43044.51778,60.84842437,1661.71346,0
-1506,33546.29204,54.69847514,5347.295507,0
-1507,69209.33087,26.03284952,6284.833573,0
-1508,32291.54455,39.17461364,277.3875685,0
-1509,66274.0729,21.82560426,11576.54224,1
-1510,34102.7912,42.05373123,1269.254575,0
-1511,21144.56287,21.35588554,703.363923,0
-1512,41049.97459,49.84094132,5890.113644,0
-1513,36351.27773,33.863571,6619.832683,1
-1514,63144.45921,32.09867363,812.5725496,0
-1515,32086.91354,28.41077647,6362.390354,1
-1516,28873.16732,62.23474707,992.5777177,0
-1517,65359.29615,18.60512247,7707.240563,0
-1518,49064.28847,43.37234458,5636.35344,0
-1519,23763.06056,39.39309718,2950.314863,0
-1520,51845.94256,43.41943507,8750.832088,0
-1521,67035.32642,46.09920974,11276.62254,0
-1522,49240.7625,53.25457982,8004.35984,0
-1523,36132.32759,18.71333256,3009.39734,0
-1524,67006.80649,36.1980031,3692.169172,0
-1525,39453.64561,32.4015456,436.9352469,0
-1526,52205.60706,24.64014386,1135.152226,0
-1527,46319.4168,45.14678836,1523.072058,0
-1528,29398.72742,41.41217588,4673.766198,0
-1529,31135.60771,19.00967065,2457.91369,0
-1530,65603.81676,19.02164232,11775.35458,1
-1531,41362.50837,44.36380808,607.965612,0
-1532,60302.559,52.18494901,6509.698608,0
-1533,54468.27921,23.87681513,68.62545627,0
-1534,47683.71578,32.30653595,4752.287877,0
-1535,38160.1165,31.3281223,3429.901579,0
-1536,22925.81208,34.74104443,2547.279742,0
-1537,64087.85881,38.03717583,722.5195892,0
-1538,65824.51566,40.62192013,2643.106432,0
-1539,53451.93154,49.65761603,10529.72349,0
-1540,36455.48471,35.26034072,2464.162321,0
-1541,39573.34144,29.13702618,5785.884275,1
-1542,41052.36578,49.91170718,4652.951748,0
-1543,37895.18173,54.51514932,6071.340205,0
-1544,44827.23377,56.29849542,2639.916846,0
-1545,28341.08677,39.96176879,2248.242914,0
-1546,56887.2028,36.41703326,10969.59669,0
-1547,25146.59568,21.05419926,2890.652793,0
-1548,54739.16452,28.02186979,7218.968224,1
-1549,30497.20451,28.47694441,4573.59409,1
-1550,25358.89794,41.17179443,2220.2256,0
-1551,29993.5633,49.05577318,2749.585697,0
-1552,64675.77948,30.51510922,4628.603003,0
-1553,56256.03887,22.16050255,5452.244532,0
-1554,31702.3343,28.4226721,3587.722389,0
-1555,34113.11328,30.83356232,6360.154897,1
-1556,44666.01285,54.7025233,7548.444373,0
-1557,39421.36684,26.43064278,6111.961017,1
-1558,21683.19372,46.02739322,339.5922689,0
-1559,65697.59284,36.28615968,5644.653159,0
-1560,68657.7893,35.76410817,2427.949887,0
-1561,66981.413,27.48095465,6678.5628,0
-1562,45971.13349,27.39847292,4776.490486,0
-1563,42965.99275,45.19554599,8109.051409,0
-1564,50895.81034,18.95700206,5556.83987,0
-1565,46175.03194,36.91534391,1064.081875,0
-1566,44984.89912,51.74721229,4584.611816,0
-1567,66941.86486,22.54073556,12380.62471,1
-1568,31022.14485,39.17585766,6144.939436,0
-1569,46583.1996,32.70437491,6241.270508,1
-1570,56201.84143,43.27752018,8346.320922,0
-1571,31587.06486,56.32561627,2677.825713,0
-1572,40716.19089,25.80565159,2389.700759,0
-1573,64966.06564,28.37929369,11495.7311,1
-1574,68503.20589,19.28053543,3580.463677,0
-1575,33867.50226,30.15785425,5714.026374,1
-1576,54195.01517,39.30174824,6649.801459,0
-1577,50565.33709,62.65586538,693.1964169,0
-1578,57216.10102,31.82232807,3554.389365,0
-1579,29849.96714,39.92872415,3678.899676,0
-1580,29072.15179,38.47588837,1589.438432,0
-1581,29775.14222,21.03497172,3327.236235,0
-1582,46672.71314,54.54870377,1408.497717,0
-1583,66393.71115,58.61227209,9540.416626,0
-1584,29338.25645,25.69012912,5120.406797,1
-1585,67289.58568,26.72740046,13376.79771,1
-1586,45980.33434,31.94832367,5929.09803,1
-1587,34163.62565,45.78271792,6617.400172,0
-1588,52216.8158,23.637136,6803.333393,1
-1589,62313.27763,60.91730571,925.7955921,0
-1590,49205.6371,24.62202976,3393.856589,0
-1591,65688.7315,24.56447541,3673.870415,0
-1592,43489.82845,51.73379038,6501.041226,0
-1593,40966.67453,46.75507215,2393.524149,0
-1594,37261.44712,23.71839249,2075.519822,0
-1595,58775.40389,45.6972166,5673.599822,0
-1596,39395.83041,36.37047119,7557.873338,0
-1597,21144.16215,58.39219715,987.7941458,0
-1598,33126.13272,50.96395425,4169.992872,0
-1599,30931.50602,35.88248498,1074.787904,0
-1600,31936.94201,59.03712775,4087.995048,0
-1601,38157.02968,51.52814013,5628.012004,0
-1602,21032.81869,30.08246411,4024.089367,1
-1603,50238.53247,34.55520077,2567.615154,0
-1604,67346.66246,34.90151683,6752.122458,0
-1605,33261.64602,18.22962939,586.6510962,0
-1606,53113.0361,59.43689228,10080.52438,0
-1607,42749.99032,56.41909458,4626.538637,0
-1608,42108.19992,26.99135128,1020.978164,0
-1609,61344.53221,20.17553224,7172.654332,0
-1610,54738.68229,26.77192946,6210.728279,0
-1611,69695.15045,26.42448341,8418.25316,1
-1612,62507.35478,27.95702726,6590.77723,0
-1613,61922.77464,24.808657,1933.08292,0
-1614,58023.72377,42.75183866,2785.779563,0
-1615,27010.88377,36.60962245,2373.175255,0
-1616,21194.61617,25.91319002,1102.848094,0
-1617,68338.0974,34.33447148,12840.69671,1
-1618,67772.79368,41.51526086,5037.933861,0
-1619,67131.80269,58.06280852,2271.404537,0
-1620,33159.21728,42.34317793,2135.532137,0
-1621,66087.08847,51.14572202,11039.28872,0
-1622,60362.34427,24.69412307,10306.70536,1
-1623,54609.46518,18.41373634,5618.20457,0
-1624,63637.28183,26.85198754,9955.225362,1
-1625,40918.5703,37.18584542,3813.699268,0
-1626,51486.13032,33.55102974,3955.113351,0
-1627,44896.25649,48.61068103,3787.639141,0
-1628,24877.68441,29.82362039,1546.422886,0
-1629,52263.3555,34.29609224,10161.94667,1
-1630,42775.52551,39.22708316,6145.987757,0
-1631,67064.01367,18.17604345,8945.289469,1
-1632,50307.94468,51.91293237,7207.941173,0
-1633,37432.68096,22.66916169,4445.502385,0
-1634,30084.15883,18.45082514,737.2537244,0
-1635,61427.41464,20.10800883,2163.312487,0
-1636,54718.85279,29.52485768,2883.284107,0
-1637,47923.57551,57.21906913,6931.716435,0
-1638,22880.7276,18.42886766,1909.215139,0
-1639,46118.5501,23.97400067,2728.311486,0
-1640,35082.38569,41.15368948,2918.477721,0
-1641,38387.32228,30.0760336,6453.507839,1
-1642,57413.57224,43.9119505,9421.298413,0
-1643,28198.09734,62.43771619,4370.793619,0
-1644,50117.85704,32.82728384,3599.068821,0
-1645,34876.33293,53.41569725,3102.347059,0
-1646,64126.49168,19.29785353,4956.941565,0
-1647,41916.69268,48.14870817,6106.109586,0
-1648,50052.29293,27.4822349,5589.328271,0
-1649,39158.91751,41.29678218,6887.738421,0
-1650,62219.03754,19.5239827,5831.521429,0
-1651,67151.31861,51.65509895,3941.698673,0
-1652,46166.16313,25.99612062,901.7531177,0
-1653,23881.78651,32.89370972,1190.630105,0
-1654,48445.11312,38.97956768,8733.442215,0
-1655,32441.65201,58.70955658,840.7142066,0
-1656,33820.18651,61.05088434,4342.178111,0
-1657,61812.90135,52.96198773,3124.312409,0
-1658,25347.57266,61.64539487,2188.503086,0
-1659,33965.52371,43.91274646,3123.898738,0
-1660,23641.70268,56.81360339,4203.50356,0
-1661,50660.90425,52.16866404,7511.003494,0
-1662,44037.24398,58.44050724,5269.518403,0
-1663,51657.12396,35.41469759,609.3508858,0
-1664,46573.24438,53.11079369,5533.292189,0
-1665,26922.46222,44.15557121,3950.00079,0
-1666,48414.25154,21.95358986,2105.709505,0
-1667,43974.84053,47.43241103,8371.493105,0
-1668,65913.83201,22.7890518,12972.41836,1
-1669,64715.99897,60.93941035,11173.80845,0
-1670,25481.98791,48.36229289,4005.816148,0
-1671,54170.53261,37.44105072,1048.932372,0
-1672,51653.70474,19.877512,1853.419156,0
-1673,66054.50623,39.07713889,10321.0987,0
-1674,60019.44714,19.38241478,6978.347128,0
-1675,31523.95286,62.27492278,5697.021469,0
-1676,65660.94854,22.19499034,93.15264188,0
-1677,61893.48364,19.1799065,6038.162662,0
-1678,49230.09821,47.84611477,8375.729867,0
-1679,38337.82947,55.50695263,5691.09349,0
-1680,64016.43339,44.27695019,10048.39421,0
-1681,46308.64516,40.70646159,6815.485141,0
-1682,66209.14427,45.18819383,7134.656119,0
-1683,47770.71142,33.94936609,5366.868793,0
-1684,29856.48632,18.05587449,4731.816864,1
-1685,21451.49729,52.18401962,1719.038044,0
-1686,59673.17045,57.28667146,7533.679839,0
-1687,47481.42964,20.49522153,9402.876118,1
-1688,36219.77291,56.83890067,4280.794199,0
-1689,59458.70434,56.43017456,1513.327637,0
-1690,67010.84098,51.5222956,11646.91061,0
-1691,58693.41942,27.17628489,4033.153519,0
-1692,43041.04139,46.99845733,2245.505278,0
-1693,31920.41272,52.15906047,217.1879621,0
-1694,32771.12541,58.93258487,1853.68197,0
-1695,55487.14713,32.10271948,178.6924716,0
-1696,68406.80717,46.05627261,2491.460861,0
-1697,37277.12306,28.35490842,4242.640648,0
-1698,39762.52658,25.66994986,3809.347155,0
-1699,41674.24314,54.65833392,3203.204656,0
-1700,25789.74203,45.31621115,4442.33178,0
-1701,24575.05989,36.69002906,1667.748767,0
-1702,58082.3601,60.15632703,9175.667318,0
-1703,67881.8805,53.26011154,10503.57125,0
-1704,50115.0549,26.77897816,3447.002152,0
-1705,40443.20363,33.65929892,1857.252327,0
-1706,65824.83738,19.67324128,154.9456163,0
-1707,51199.86984,22.40357681,4064.818093,0
-1708,67032.28946,44.32616679,5487.820266,0
-1709,42205.6829,23.43490545,2444.737196,0
-1710,37730.36211,52.42988101,5273.559352,0
-1711,47398.31104,50.17342698,9041.878835,0
-1712,48933.20969,50.06578295,5071.371891,0
-1713,53078.85583,49.17618969,10566.35387,0
-1714,53236.993,57.93261219,703.6021978,0
-1715,58121.95469,58.36380871,5161.107409,0
-1716,57261.15139,40.23255914,2527.755923,0
-1717,52102.5909,19.37246483,8799.819842,1
-1718,45165.92595,37.90000438,5534.550798,0
-1719,58809.29247,37.45918855,5470.587846,0
-1720,36598.34047,41.96212964,6849.29481,0
-1721,62096.28261,25.02343215,8034.747774,1
-1722,68114.07098,47.19519398,4325.099268,0
-1723,67978.46685,23.45665138,7382.502551,0
-1724,26615.5243,53.35032216,3458.193614,0
-1725,51254.37001,50.6494071,8747.208629,0
-1726,34428.97264,27.3684103,6016.615091,1
-1727,60974.58714,33.89574856,6165.65882,0
-1728,63330.73455,30.23024362,5170.899852,0
-1729,58168.47407,27.47152114,2935.367657,0
-1730,59579.60921,51.1302136,2319.362857,0
-1731,52219.8955,47.67986773,6560.469542,0
-1732,28700.87259,28.79704182,5090.310491,1
-1733,27193.74305,21.40959607,4518.858351,1
-1734,67417.571,29.91098356,6478.402532,0
-1735,57341.43277,23.47849796,784.8948568,0
-1736,64056.53612,48.86906318,5982.805039,0
-1737,66370.69351,38.40550487,5906.034309,0
-1738,45045.43165,58.62369495,8489.405985,0
-1739,58609.13148,22.09757985,4270.532996,0
-1740,53289.06797,32.30020689,7395.513416,1
-1741,60309.32883,34.37905483,2343.073833,0
-1742,45139.48639,19.61720917,1743.691464,0
-1743,22815.64061,61.72656548,2749.079844,0
-1744,45215.01469,27.83884812,383.8501673,0
-1745,40568.07518,35.94146628,5990.318608,0
-1746,43721.25181,55.12770834,5923.392464,0
-1747,38129.75487,19.08440959,3964.729278,0
-1748,22547.96164,57.62641276,2957.295712,0
-1749,57468.05944,62.265046,8452.955624,0
-1750,25534.67352,37.87175619,1084.966942,0
-1751,26325.50339,56.35027775,3336.131472,0
-1752,65913.83084,36.47775765,11738.91571,0
-1753,67119.13596,18.05518851,2725.240313,0
-1754,62020.46813,56.65353651,114.2098881,0
-1755,37965.84934,27.8285796,299.0547059,0
-1756,62114.85602,30.74947746,12115.89231,1
-1757,36871.06176,46.03436164,792.7110544,0
-1758,65030.90935,36.70069066,2231.976166,0
-1759,23193.6046,41.93605652,548.5961163,0
-1760,59568.62432,40.55891909,7685.326744,0
-1761,50527.58417,26.65296268,5639.245689,0
-1762,60776.11021,34.20694181,10382.43968,1
-1763,61632.28271,34.43080878,3028.591328,0
-1764,45930.45265,49.99133072,7765.252827,0
-1765,25857.76559,41.75835442,1810.232339,0
-1766,55093.92123,55.17608333,6485.30159,0
-1767,42301.33448,19.50343568,1480.61489,0
-1768,51903.53425,59.76266204,8807.867971,0
-1769,64398.14616,35.5975403,1674.905633,0
-1770,41089.51083,57.62741738,997.1841685,0
-1771,36727.5509,24.59731819,794.5568182,0
-1772,38163.39454,63.25165246,454.3076768,0
-1773,35949.89641,56.7387456,3680.177028,0
-1774,44979.80219,32.5319016,6045.089487,1
-1775,48211.58184,30.55734418,2606.124698,0
-1776,28267.08995,54.6462767,965.3732272,0
-1777,33816.22334,60.24819138,5265.743252,0
-1778,33078.99598,36.32719969,6278.316279,0
-1779,36019.8172,42.84566569,2987.962123,0
-1780,34238.53029,63.43418801,6002.93511,0
-1781,62064.52068,22.82585726,2972.381023,0
-1782,44867.61524,55.81275256,366.1011044,0
-1783,37162.88822,28.87660671,3110.531147,0
-1784,65680.94802,62.77942662,8838.231305,0
-1785,58772.85748,46.50503835,7048.005343,0
-1786,32435.24811,43.06626362,5685.405228,0
-1787,58028.2132,50.09548172,5753.895027,0
-1788,60595.27533,62.22070887,4534.490222,0
-1789,36565.80389,19.89940228,1888.334736,0
-1790,20742.69697,61.59842116,2295.818094,0
-1791,46666.63801,18.74557575,7677.823856,1
-1792,32203.56694,61.16757056,838.0214411,0
-1793,36535.31539,29.87489182,271.7251877,0
-1794,28163.29507,58.00352914,2121.151956,0
-1795,39019.35774,31.79270886,3196.559769,0
-1796,24709.08325,54.74520391,1915.385594,0
-1797,43052.96856,31.52685355,488.9372735,0
-1798,25003.91611,53.41157775,2183.713426,0
-1799,46696.89266,34.199782,4732.498144,0
-1800,50112.4622,41.30463745,5067.032925,0
-1801,43265.90032,44.74331012,6194.07205,0
-1802,67802.69446,49.03798708,13443.47318,0
-1803,55408.70595,43.32280682,10300.28125,0
-1804,67048.893,55.05304129,10839.91376,0
-1805,40262.59764,51.79885818,6535.85195,0
-1806,46427.49918,61.84653541,5671.45056,0
-1807,46911.1971,23.43098081,4263.853588,0
-1808,57359.55243,34.79526286,10011.41068,1
-1809,34569.30464,63.64065153,6254.527617,0
-1810,52797.40104,21.12701044,1080.42349,0
-1811,56630.39526,57.97316146,8442.891373,0
-1812,45245.73975,35.82444267,1974.009904,0
-1813,20803.61454,61.89225017,758.4348491,0
-1814,57717.60679,48.79781292,3153.222829,0
-1815,20647.88765,20.32164556,725.4568686,0
-1816,59046.45715,36.82711952,8237.046829,0
-1817,62662.25883,25.29886488,1965.921357,0
-1818,33614.49461,46.47308182,4837.787511,0
-1819,48765.12887,50.07041654,5183.859126,0
-1820,57240.75694,41.57139076,313.6279418,0
-1821,49973.66646,43.91861469,363.899917,0
-1822,41255.93969,45.58326501,5296.907773,0
-1823,61129.72316,35.10917797,11302.76769,0
-1824,48938.58344,59.70792423,3028.834619,0
-1825,68648.2414,27.92001002,9425.707309,1
-1826,41250.82854,39.07818304,7651.577272,0
-1827,22415.65476,40.68729838,4371.715441,0
-1828,24112.49939,35.97133752,3285.499948,0
-1829,41692.60518,62.12124981,1708.712503,0
-1830,23516.7277,27.36269519,559.9053229,0
-1831,53812.22648,44.91915229,3245.041667,0
-1832,29750.2948,45.54445543,3627.987077,0
-1833,22633.67692,37.59693031,553.5208586,0
-1834,28713.83052,54.70084552,1936.813257,0
-1835,63321.90927,19.48791488,8092.98278,1
-1836,35276.58799,28.57213319,6820.315404,1
-1837,35914.60931,60.80509128,520.9960335,0
-1838,31568.14432,63.86398451,5067.410013,0
-1839,39934.06749,31.60796663,184.7443024,0
-1840,48614.84968,61.30129349,5984.950784,0
-1841,29838.12481,25.89508406,5913.649556,1
-1842,57745.35888,36.72961032,5540.464047,0
-1843,44447.5293,32.71813418,2714.403108,0
-1844,51768.00534,30.54451147,6632.036203,1
-1845,34891.14044,55.04893523,6152.314492,0
-1846,45382.8079,42.51634459,2742.454975,0
-1847,40719.49032,22.9269144,6415.086244,1
-1848,55145.78501,57.88245864,8968.678877,0
-1849,48752.42408,30.76336091,8934.785761,1
-1850,55763.42742,30.58544797,7913.837734,1
-1851,36431.16141,46.45279704,6783.361363,0
-1852,40522.82828,63.88714083,7720.780489,0
-1853,42465.66975,58.01657008,7314.976322,0
-1854,38561.94404,45.87983104,4831.111171,0
-1855,54957.44967,59.50636724,6976.463275,0
-1856,24822.06984,29.02037885,2361.166802,0
-1857,25252.48774,23.78830375,434.8674516,0
-1858,25671.74258,18.74645599,2272.14762,0
-1859,60672.14559,43.05590862,6279.687007,0
-1860,60729.94924,40.77350178,5006.850087,0
-1861,40240.72756,26.95900532,7498.630447,1
-1862,57513.81746,33.09201951,6921.491029,1
-1863,64287.39763,45.88390644,6301.594778,0
-1864,48428.03365,33.93239331,7718.479795,1
-1865,55313.83225,25.21256484,9733.113189,1
-1866,27045.39957,50.22120054,2503.7884,0
-1867,58216.07198,27.40448065,9581.833306,1
-1868,34722.96483,22.22338695,4073.411901,0
-1869,58503.77101,42.37251293,7050.432526,0
-1870,55299.78724,62.19314775,8052.381283,0
-1871,49501.90592,50.78811185,2226.81958,0
-1872,61765.70904,59.95587347,3649.643103,0
-1873,48430.99367,18.50809359,6069.649094,1
-1874,66366.95742,41.57616997,465.0115658,0
-1875,55320.78001,29.41721633,5990.716973,0
-1876,48774.28816,62.84084913,3728.483342,0
-1877,61679.95316,24.1914258,3060.030168,0
-1878,61485.1796,60.18819954,3211.670281,0
-1879,24402.44017,52.02759737,101.2185381,0
-1880,21258.90278,54.22456338,706.6197387,0
-1881,48763.68054,28.0602953,8172.052504,1
-1882,24406.89381,37.9053185,1733.403111,0
-1883,61693.58631,25.68422605,1568.863689,0
-1884,22748.03304,26.94071725,108.6299113,0
-1885,21479.94672,24.3142805,1098.073365,0
-1886,51286.6564,45.85982714,1134.234384,0
-1887,27153.66392,48.81803283,3177.517372,0
-1888,36370.49398,39.67078913,2855.2161,0
-1889,32400.54496,61.67923932,3591.797505,0
-1890,60434.16443,63.21861647,2474.248112,0
-1891,57303.47976,52.15536585,10491.63215,0
-1892,42994.68224,36.42561073,4453.824617,0
-1893,68339.80794,23.36532355,2505.868398,0
-1894,49292.30314,20.62232701,967.1345882,0
-1895,57802.4297,43.04172886,6796.590935,0
-1896,50779.38079,39.43591481,6859.836596,0
-1897,35993.98976,53.93902055,93.89580488,0
-1898,21771.12934,33.68777873,350.4455484,0
-1899,61414.80126,56.88918916,9743.609259,0
-1900,35784.66349,46.54787028,110.2028905,0
-1901,24791.1867,39.64327145,4844.680983,0
-1902,49048.75736,52.05179371,6363.113668,0
-1903,69852.05872,62.20231314,9246.265058,0
-1904,21217.74746,21.36568696,2690.768134,1
-1905,48031.06741,43.67016376,7826.325909,0
-1906,64072.31322,61.15839923,2426.008622,0
-1907,56689.4639,41.00340032,5740.591698,0
-1908,45769.25952,55.82719728,8236.476519,0
-1909,35020.48877,24.99191048,6832.803042,1
-1910,56751.92851,59.20442489,7877.330041,0
-1911,27363.6318,44.38642089,3215.263093,0
-1912,48455.71741,27.47626829,1780.507334,0
-1913,21424.09133,36.91843838,1795.223958,0
-1914,69992.33271,41.77123143,52.87219028,0
-1915,68110.23995,32.17157472,11029.66771,1
-1916,48015.55474,28.2417962,54.00824238,0
-1917,23102.21779,35.76168337,1779.574528,0
-1918,46134.85414,54.86544593,8716.611259,0
-1919,48547.96138,56.64147426,1940.870699,0
-1920,26095.02691,58.10209089,5143.490416,0
-1921,64057.84479,59.85843482,5774.281958,0
-1922,24454.19062,52.39086216,864.9687379,0
-1923,40506.94401,52.24151412,5961.531816,0
-1924,43421.04574,27.21744021,4705.757083,0
-1925,55881.5418,33.30668529,8383.074165,1
-1926,45917.60069,45.15712066,8253.273858,0
-1927,52901.90954,60.26135933,729.3773772,0
-1928,41183.82466,56.03236488,7606.993239,0
-1929,25379.91548,24.92908735,4693.111697,1
-1930,27514.08847,36.27868438,192.1446105,0
-1931,44241.283,19.98253883,8733.179295,1
-1932,29076.33771,41.2224627,286.2644342,0
-1933,60536.91287,32.32617541,3132.551831,0
-1934,47881.956,38.09981235,5575.635648,0
-1935,49144.37106,51.89382023,1633.03578,0
-1936,33707.80104,59.91764355,321.5789312,0
-1937,46442.28279,28.84595832,1484.561548,0
-1938,25602.95725,28.4463766,2214.922493,0
-1939,61236.39608,36.00169172,6562.903837,0
-1940,48187.34788,55.53300959,2003.41185,0
-1941,29933.20193,18.65902132,5953.521871,1
-1942,41027.90736,44.77193547,4369.218876,0
-1943,49990.66011,45.54275512,1896.754994,0
-1944,59792.50859,24.18749914,660.2414526,0
-1945,35879.51999,41.07293472,5335.403499,0
-1946,29102.22172,27.1292334,1890.447478,0
-1947,30047.81941,51.07732459,5768.742735,0
-1948,59299.16272,36.98427692,4944.056264,0
-1949,64484.0148,33.09942354,1391.601802,0
-1950,36352.42229,43.71886432,6239.247526,0
-1951,66034.7543,60.7262946,3913.782124,0
-1952,51650.27137,40.1050569,3743.003437,0
-1953,31898.15991,41.31715911,2015.182969,0
-1954,58780.2335,18.70173368,5029.707636,0
-1955,67754.10467,42.9807849,2989.950997,0
-1956,48500.26815,61.30480025,7054.606149,0
-1957,55704.79816,48.51661891,5594.332971,0
-1958,50458.9582,52.31456503,9852.889427,0
-1959,48263.00343,28.54960456,7798.793463,1
-1960,38755.16271,56.35542661,4244.498033,0
-1961,68131.6643,57.40525789,7813.23983,0
-1962,28991.42394,37.16515694,1249.347564,0
-1963,35108.55795,40.74341282,4002.991276,0
-1964,28858.59887,23.69458972,3764.815174,1
-1965,22800.79677,28.19825664,3740.900936,1
-1966,29572.9759,39.2304778,5006.253823,0
-1967,21982.01737,34.91551629,4265.173704,1
-1968,45576.83836,38.67104976,4952.653346,0
-1969,55068.66894,51.7573598,4852.766598,0
-1970,56441.01624,43.20699111,9043.756044,0
-1971,68047.92531,47.69451986,4023.064765,0
-1972,36275.73586,30.30818374,644.3841948,0
-1973,52389.36685,54.96931281,10398.82059,0
-1974,23678.37611,47.4664851,1779.814597,0
-1975,37707.64295,31.34404787,268.2909708,0
-1976,57753.56896,54.23591535,5067.449964,0
-1977,30529.96329,47.60440226,6046.840845,0
-1978,44022.26874,31.1926268,1707.67287,0
-1979,58533.88468,40.51896256,7832.443321,0
-1980,33702.53183,48.14840359,922.0365897,0
-1981,40236.87207,52.58077285,4354.314412,0
-1982,62619.15599,43.99946111,3959.611772,0
-1983,50738.36219,45.99319907,9719.562798,0
-1984,64466.76014,33.32714402,8537.369666,1
-1985,64636.40219,60.886966,2583.106425,0
-1986,22371.52219,39.14222532,2291.856428,0
-1987,67994.98847,38.62225938,7289.014109,0
-1988,49640.0047,20.54240863,5760.858734,0
-1989,42067.24645,24.27061152,4601.606183,0
-1990,43662.09269,25.25260926,7269.596897,1
-1991,34237.57542,34.10165393,2658.090632,0
-1992,26300.44655,45.53938522,2317.393678,0
-1993,30803.80616,23.25008412,623.0241528,0
-1994,54421.41016,26.8219284,3273.631823,0
-1995,24254.70079,37.75162224,2225.284643,0
-1996,59221.04487,48.51817941,1926.729397,0
-1997,69516.12757,23.16210447,3503.176156,0
-1998,44311.44926,28.0171669,5522.786693,1
-1999,43756.0566,63.97179584,1622.722598,0
-2000,69436.57955,56.15261703,7378.833599,0
+clientid,income,age,loan,default
+1,66155.9251,59.01701507,8106.532131,0
+2,34415.15397,48.1171531,6564.745018,0
+3,57317.17006,63.10804949,8020.953296,0
+4,42709.5342,45.75197235,6103.64226,0
+5,66952.68885,18.58433593,8770.099235,1
+6,24904.06414,57.4716071,15.49859844,0
+7,48430.35961,26.80913242,5722.581981,0
+8,24500.14198,32.89754832,2971.00331,1
+9,40654.89254,55.49685254,4755.82528,0
+10,25075.87277,39.77637806,1409.230371,0
+11,64131.41537,25.67957535,4351.028971,0
+12,59436.84712,60.47193585,9254.244538,0
+13,61050.34608,26.35504385,5893.264659,0
+14,27267.99546,61.57677582,4759.787581,0
+15,63061.96017,39.20155289,1850.369377,0
+16,50501.72669,-28.21836132,3977.287432,0
+17,43548.65471,39.57453035,3935.544453,0
+18,43378.17519,60.84831794,3277.737553,0
+19,20542.36507,61.69057071,3157.44229,0
+20,58887.35755,26.07609302,4965.516066,0
+21,23000.784,31.76135417,1148.118057,0
+22,32197.6207,-52.42327992,4244.057136,0
+23,23329.31941,48.57697453,222.6222987,0
+24,27845.80089,51.9706241,4959.921226,0
+25,65301.98403,48.84092177,5465.267886,0
+26,47451.63012,27.03174131,5361.282716,0
+27,63287.03891,-36.49697551,9595.286289,0
+28,45727.45987,55.83992185,6376.822949,0
+29,59417.80541,,2082.625938,0
+30,58842.89131,54.51094756,10871.18679,0
+31,48528.8528,,6155.78467,0
+32,23526.30256,,2862.010139,0
+33,67252.90061,38.13190746,4221.303157,0
+34,58886.85129,38.66150424,7271.552032,0
+35,57584.97379,36.67202092,1728.423755,0
+36,26289.97231,20.66677873,341.146966,0
+37,25952.38147,58.1850173,2109.200772,0
+38,32464.09188,50.22500592,4326.705073,0
+39,60921.0631,18.84052576,968.8363827,0
+40,26578.53669,32.67604425,3489.843136,1
+41,66260.12156,32.89669307,7035.589107,0
+42,58787.45524,62.64130285,4167.786724,0
+43,62545.70871,49.04043324,4362.905812,0
+44,24381.95345,25.25233071,4227.018986,1
+45,67852.10587,47.32189906,5730.588251,0
+46,41725.61286,18.13003836,1185.2147,0
+47,41896.9716,47.25073103,4892.209734,0
+48,44379.72965,50.08867129,1814.335082,0
+49,28416.89938,57.9287193,1788.973736,0
+50,68427.16311,46.30824019,1658.070233,0
+51,35975.79493,35.70865177,6610.366179,0
+52,57596.3541,29.2460566,3344.384401,0
+53,29681.88309,54.95928719,1745.871674,0
+54,51656.93867,47.7150637,7158.13906,0
+55,24912.84268,49.3663712,267.6962986,0
+56,47761.82407,50.09815907,5549.799128,0
+57,22248.1792,23.44362417,4364.975281,1
+58,29724.47688,31.9685264,3075.345728,0
+59,52143.82367,20.83763392,2393.099679,0
+60,56577.72286,36.84780068,5947.421721,0
+61,37660.77072,53.74506047,2129.597165,0
+62,37403.7954,47.9441217,2044.047045,0
+63,31652.69373,62.02380247,5151.070445,0
+64,32727.70073,34.47487101,1087.919364,0
+65,69078.60481,25.10752405,4076.583914,0
+66,40622.19487,41.52718879,4949.902333,0
+67,37521.01717,60.54107743,8.012076247,0
+68,30735.8085,22.24209774,5946.822297,1
+69,24857.69488,21.59867635,2692.163459,0
+70,33180.20159,49.56597728,4621.997742,0
+71,66628.26009,52.38387344,5992.885092,0
+72,38564.93213,21.21649167,5604.16999,1
+73,33704.5085,33.18310623,5898.000893,1
+74,57018.48483,44.82571531,3507.252166,0
+75,40526.90279,28.60637596,2119.984911,0
+76,50827.98052,51.01293719,1765.983337,0
+77,40775.8116,60.28875683,1922.610022,0
+78,55467.15141,56.85133096,9226.902041,0
+79,38789.02939,61.22928543,7650.65521,0
+80,58074.84013,50.07492427,7388.02444,0
+81,57814.10634,43.8309231,7252.120004,0
+82,45190.72918,53.83952,7893.559889,0
+83,36801.90718,43.02794342,5406.344926,0
+84,68811.77942,24.03826535,4211.302611,0
+85,30483.29553,33.65644124,4514.00978,1
+86,44930.39417,19.77738585,7708.315625,1
+87,43671.45655,25.58503698,8066.697865,1
+88,27612.9148,19.21244819,1513.6242,0
+89,53607.32693,27.5617124,2378.766173,0
+90,33036.68312,25.06336742,958.9798221,0
+91,64275.83489,61.440913,7520.032053,0
+92,30673.8375,59.33383708,383.1075694,0
+93,58793.61431,56.49441041,4391.981054,0
+94,21053.49062,63.37940765,754.6018821,0
+95,42095.4222,55.36618805,1183.704568,0
+96,50360.67879,28.83954247,4217.166823,0
+97,41970.72448,63.16991394,1622.317392,0
+98,51663.41018,63.73571024,4147.888585,0
+99,53601.81244,20.24062127,9601.375482,1
+100,43439.98873,24.17947032,6879.306007,1
+101,51461.05317,36.65155863,7292.264177,0
+102,41285.17231,47.97630816,2313.825005,0
+103,62895.74977,49.92260372,2001.281514,0
+104,57296.16082,25.70848233,10601.08278,1
+105,60844.09249,45.655205,12072.25576,0
+106,47634.54955,44.29487133,141.7038179,0
+107,23998.32369,29.91003349,3928.303909,1
+108,63391.61597,34.73926766,190.8892748,0
+109,21534.55122,44.31503802,228.335387,0
+110,28255.65251,35.51401737,2109.242798,0
+111,36496.13393,19.51571649,165.5060901,0
+112,41631.6663,53.04765477,106.0907472,0
+113,68762.41666,20.99124336,2796.752303,0
+114,30075.26492,29.23505652,2628.577923,0
+115,41302.67418,38.66061858,1379.913124,0
+116,39703.75943,47.46874099,2403.478216,0
+117,63161.09204,59.67511498,804.0924415,0
+118,63062.1421,26.58577848,56.16616439,0
+119,34507.52791,38.58778339,1793.750255,0
+120,27954.70777,29.90452167,1627.041405,0
+121,37369.38206,35.34194884,3783.601151,0
+122,43912.06274,23.82192118,7757.136789,1
+123,22766.7745,29.32590147,1429.401762,0
+124,21603.3057,21.37503332,178.333871,0
+125,61952.90669,18.47742502,3635.600589,0
+126,36116.36509,22.53588419,1494.984568,0
+127,26157.77727,22.82693773,2295.811656,0
+128,26458.3832,59.52298674,552.3981664,0
+129,69156.30377,53.4108625,7364.735578,0
+130,39441.44476,46.75389592,1034.758838,0
+131,60119.06581,45.07696923,1810.96046,0
+132,55613.48546,24.37712877,4255.252137,0
+133,37049.38624,29.42301855,6056.817214,1
+134,23122.06493,53.30953584,4263.493031,0
+135,48790.13243,32.47562106,5519.09604,0
+136,59132.68516,48.34499296,4575.527635,0
+137,55305.57483,53.58227987,8176.707165,0
+138,26037.46364,24.78310779,3293.250879,1
+139,64899.80503,38.11601668,4654.249217,0
+140,27089.12432,21.2076896,5029.488782,1
+141,45341.47464,22.56956836,6525.218423,1
+142,24865.79807,37.30975294,4439.116154,0
+143,28239.54321,26.19220966,4189.832568,1
+144,52730.0805,50.23778499,5706.325323,0
+145,28982.05815,39.04840987,2898.761824,0
+146,36221.26601,26.10150042,5094.670084,1
+147,33551.12437,58.85692749,4333.360862,0
+148,43891.35597,49.1538267,5792.906333,0
+149,45148.88572,60.52500645,6455.391772,0
+150,58481.01216,40.83291823,5380.560596,0
+151,69579.92921,57.75624316,10868.24147,0
+152,52743.30857,44.04851651,2684.700671,0
+153,65635.66153,51.16771448,12701.60348,0
+154,34559.90704,29.11218199,3317.529874,0
+155,60218.53153,32.47188772,3157.961082,0
+156,51689.54854,46.15419152,9881.976006,0
+157,47541.61434,55.23458507,1611.216597,0
+158,62905.79302,27.90965196,11423.9363,1
+159,65632.60458,47.10576675,12498.04045,0
+160,31847.85372,41.41633576,2913.769931,0
+161,27947.44028,58.34845518,5514.117421,0
+162,62246.72725,31.08188451,406.7207693,0
+163,40154.68857,60.5296832,6013.152874,0
+164,58627.55488,33.11565325,1215.65256,0
+165,33441.05107,27.87348619,5282.72856,1
+166,55603.7868,43.83947279,1411.13008,0
+167,31046.37897,29.29739875,4907.674084,1
+168,44708.09987,21.10877357,2390.850597,0
+169,23340.2707,42.8286153,2707.760939,0
+170,24830.18197,28.97024523,2046.68505,0
+171,31422.74739,53.89808021,1686.835902,0
+172,60477.23385,60.40210646,10711.7009,0
+173,26039.02149,49.39040223,2056.752382,0
+174,36186.84807,50.50675221,1130.735265,0
+175,39772.11873,43.72544781,5492.893689,0
+176,34730.16407,63.37623301,818.5084419,0
+177,23118.48331,57.58105032,1746.936559,0
+178,50072.84763,33.01527275,8088.568019,1
+179,67465.06239,23.61105385,1802.616994,0
+180,38625.63201,19.6300378,5836.563381,1
+181,45227.48283,26.72316244,5521.507405,1
+182,64901.89773,44.93881585,9589.833525,0
+183,40543.91354,51.46087562,6507.850191,0
+184,27793.26672,60.51690847,382.2489041,0
+185,61167.77482,20.58363144,10396.61815,1
+186,64619.66462,26.04209269,9704.782409,1
+187,37593.75787,54.01041531,7274.325628,0
+188,35032.6496,56.72462562,135.9316845,0
+189,58364.46498,55.59654948,5809.899,0
+190,56945.81041,45.55402051,6388.369826,0
+191,27204.84855,29.07209672,3827.893915,1
+192,21648.26103,52.58703992,3558.527262,0
+193,31077.85689,44.2215167,4452.330679,0
+194,42522.92241,53.86865108,6790.850263,0
+195,31769.24772,44.77438059,1148.221436,0
+196,35556.77991,23.77743318,6361.973438,1
+197,52908.82424,53.69563592,9841.080553,0
+198,35045.13141,28.65328366,2382.466772,0
+199,44488.16448,33.43120549,2751.088843,0
+200,41679.93712,53.66990824,395.0007751,0
+201,54619.9472,52.42442217,10780.27188,0
+202,38053.62313,26.20688032,6110.572792,1
+203,64718.66178,37.27649201,1485.079935,0
+204,43159.08497,62.44209669,4350.019897,0
+205,29445.5105,28.44567748,1758.881865,0
+206,25817.38988,37.94548019,4115.484719,0
+207,66356.85674,61.52484883,10725.48473,0
+208,56676.158,46.67896953,2278.554349,0
+209,61000.04277,48.62361021,2160.784908,0
+210,58906.25169,42.04934198,9290.575345,0
+211,49589.15372,42.77525588,2627.405488,0
+212,40141.60354,56.15141838,845.3663713,0
+213,31659.72821,31.92815368,858.511388,0
+214,62658.22163,25.46316007,3343.367161,0
+215,39264.4835,37.02775284,5255.788283,0
+216,46643.12648,53.40508337,6440.861434,0
+217,30515.37212,20.16187772,415.240435,0
+218,65077.32203,50.97913471,11061.81189,0
+219,60871.869,61.2601442,4844.172224,0
+220,25011.1039,36.21518966,3834.042782,0
+221,68407.18551,60.93758158,597.9440655,0
+222,43727.43934,55.19259935,1170.556334,0
+223,45788.7471,41.26194623,5894.041317,0
+224,65705.01082,50.92843185,1969.794134,0
+225,32434.70251,41.35317101,2738.440496,0
+226,58121.66858,27.30180023,7531.101249,1
+227,62498.50725,31.9096908,3312.877622,0
+228,26090.72588,48.07852007,4255.626392,0
+229,64780.93854,20.22810118,8402.415586,1
+230,65588.40342,22.91821226,7879.738136,1
+231,65743.70367,52.3005041,7724.571414,0
+232,37164.52158,47.29545476,1445.802189,0
+233,65176.52978,48.96321098,2365.28749,0
+234,34615.54217,25.51438965,6476.760852,1
+235,59079.46505,58.6383316,10326.08977,0
+236,56267.17164,22.48613604,7329.243164,1
+237,34862.82129,54.96487331,6040.772062,0
+238,60521.3641,45.42499301,8035.883173,0
+239,42276.78291,57.93069619,8055.305084,0
+240,38451.17771,63.42145549,3441.261416,0
+241,45985.10865,53.5338888,7382.056426,0
+242,51000.42244,27.80299751,778.7326956,0
+243,31523.10777,40.44616794,5174.570569,0
+244,28648.67675,18.39696983,1870.925253,0
+245,27514.42796,21.8976978,3400.910744,1
+246,27441.00038,37.39906989,1455.047602,0
+247,67709.24159,50.41293228,5136.819308,0
+248,38600.70719,44.72279622,2749.080191,0
+249,30950.29541,26.31019433,5043.148637,1
+250,27083.82287,60.66665852,3286.212882,0
+251,21512.74527,24.7795283,2453.376121,0
+252,34796.00356,58.48789988,443.6665381,0
+253,27089.39284,51.29419704,1851.311563,0
+254,25259.40163,39.73976626,4341.008082,0
+255,47007.31358,45.01979643,4069.402646,0
+256,20358.66502,53.61518031,1064.686918,0
+257,67900.22653,43.51430384,7902.742965,0
+258,54418.47099,55.2220663,5630.741221,0
+259,51288.55469,29.92074847,6536.966363,1
+260,28199.60163,36.66870417,3871.688902,0
+261,22199.61514,60.10481888,1498.390919,0
+262,50514.46963,57.37965014,2003.65357,0
+263,34414.24034,54.5301724,617.5387522,0
+264,37633.08743,29.42141257,868.1624733,0
+265,55235.50407,47.00526014,4910.547658,0
+266,45587.55184,62.02213807,8366.614268,0
+267,52757.79494,53.08221445,2321.206314,0
+268,41174.80813,52.33937637,2888.44471,0
+269,25685.5352,39.00918946,490.7429211,0
+270,28145.303,55.54762961,4805.971549,0
+271,52094.21837,40.84450776,495.0211992,0
+272,33552.38598,25.15961094,6054.244126,1
+273,37400.93377,50.10848668,1693.137378,0
+274,21605.72509,23.2381696,2828.308618,1
+275,57562.89174,56.60056735,8508.835399,0
+276,62288.53961,25.60217264,10657.10612,1
+277,22767.2642,45.12328068,1205.786013,0
+278,20943.04333,19.81963119,4098.11579,1
+279,20622.8601,30.4140331,3518.452629,1
+280,48436.66463,49.02784977,5851.409789,0
+281,27574.63418,57.64370906,1017.39616,0
+282,62889.36214,33.2456503,6525.151793,0
+283,37683.20049,55.58721086,7414.552853,0
+284,54974.4555,61.98420323,8922.199717,0
+285,56326.08667,40.40545522,4816.776074,0
+286,65670.88344,50.00469847,3950.870172,0
+287,50730.73339,41.97006679,1879.059662,0
+288,64184.91579,46.44703643,1854.239613,0
+289,66179.32411,48.12079915,3646.93786,0
+290,24969.5268,45.12099322,3595.501942,0
+291,54925.51827,40.80560311,554.4883448,0
+292,67879.24802,43.59720866,10433.47435,0
+293,67787.52676,53.36234044,9607.498847,0
+294,31657.6193,37.77866429,1448.071984,0
+295,36559.13503,19.71617609,3030.267241,0
+296,57787.56566,22.64466921,6339.850844,0
+297,42521.72601,47.70428875,2661.612516,0
+298,51935.18063,21.49550533,5649.452468,0
+299,45677.87613,51.69305562,2966.246125,0
+300,51363.59581,21.0219966,761.4224042,0
+301,27218.56103,55.17101996,4145.003587,0
+302,43677.62922,32.55303035,6739.858598,1
+303,21533.59551,57.90168346,1971.55422,0
+304,28010.19093,55.36689966,3971.155479,0
+305,51589.28275,50.31346489,56.99097407,0
+306,50480.95269,27.08039063,8831.184365,1
+307,43957.35058,21.14484884,5416.357798,1
+308,61878.34655,33.00635954,567.6687734,0
+309,60153.33697,20.30086013,6472.347007,0
+310,33388.58334,62.00167495,4551.876889,0
+311,41310.40178,53.57694074,4481.162213,0
+312,25576.95393,51.93226805,1922.656626,0
+313,51455.09845,37.2856837,9447.117157,0
+314,48134.15693,47.96967523,2075.596112,0
+315,51348.5273,52.43673978,1507.891341,0
+316,20532.82373,54.62323385,1897.780821,0
+317,33297.21402,46.57996004,3674.74134,0
+318,55858.54924,25.86653378,5630.444972,0
+319,43777.51848,20.0109277,3601.299685,0
+320,27789.51906,58.51913348,186.8280739,0
+321,36132.42388,34.29426042,99.4495914,0
+322,20145.9886,21.28278372,839.8390632,0
+323,63108.70739,43.19394153,5757.848995,0
+324,26581.61453,61.95337375,5090.392774,0
+325,62040.88963,62.04980097,7643.631046,0
+326,69958.70554,30.5360199,8755.691977,1
+327,38082.51952,45.51997724,4213.465259,0
+328,45183.05418,33.89557822,5953.453524,1
+329,36242.44796,39.41547079,5688.994849,0
+330,44527.2589,42.09009228,4588.472286,0
+331,40496.25582,20.10545872,4834.603798,0
+332,24698.66931,48.91255747,2427.650788,0
+333,60560.30553,49.75058567,1994.621134,0
+334,48018.21146,50.20413902,6120.090021,0
+335,30216.25196,26.56371653,2116.53731,0
+336,61742.23995,44.87260781,8068.319704,0
+337,47288.42667,62.42846686,4004.988852,0
+338,24658.89932,59.43650057,590.5980812,0
+339,64644.3481,58.84065675,9848.171449,0
+340,57517.72414,52.48606979,4536.857209,0
+341,52945.54779,54.63191519,6262.007945,0
+342,36366.99041,47.19141009,371.040895,0
+343,62113.72957,27.884415,11928.50986,1
+344,62279.5195,26.66646905,6801.405893,0
+345,61799.08496,56.95796104,5619.217604,0
+346,50139.74001,30.26781235,7758.799823,1
+347,69566.68435,52.96708771,9875.037183,0
+348,44897.48837,51.35806105,5732.399032,0
+349,22572.30276,51.01624042,724.1931885,0
+350,37123.07964,19.9466845,5659.509278,1
+351,68744.78865,60.73005586,5207.883117,0
+352,21081.19418,52.38283326,2395.16535,0
+353,58828.29212,32.40292043,5947.645468,0
+354,46706.45886,18.83033629,7084.263509,1
+355,32312.85338,28.15532047,228.3308036,0
+356,60778.76502,43.01302298,10021.04922,0
+357,30948.04155,42.7513536,3995.807295,0
+358,60122.01157,62.90960494,7189.350735,0
+359,43321.68112,32.28625435,743.867141,0
+360,47904.34124,40.03927024,6183.514146,0
+361,58597.38325,53.28803374,2588.490266,0
+362,66091.90591,24.2041407,8743.509701,1
+363,47316.70138,27.06419772,1940.674044,0
+364,40872.63977,54.94806156,5312.491706,0
+365,35154.49348,52.89921324,4037.719604,0
+366,32222.81881,61.81061588,934.4771331,0
+367,40447.67296,22.49292385,1072.192659,0
+368,48463.20455,50.52642975,8120.25809,0
+369,42843.09913,28.63178613,839.869024,0
+370,50310.42244,53.03869686,8361.7191,0
+371,57565.19996,37.73785449,5353.561654,0
+372,55066.18297,55.7392007,9332.702666,0
+373,46065.94821,52.8386392,4947.308728,0
+374,38309.58566,55.4291345,3545.723971,0
+375,54472.14476,59.245985,10836.38309,0
+376,58695.0944,29.77440963,1826.516302,0
+377,54748.91231,31.59685864,5438.093693,0
+378,46328.17192,56.84083064,7879.676208,0
+379,49633.32747,38.98900889,7915.313443,0
+380,66339.78388,35.59190521,2350.891508,0
+381,62650.71966,33.48406627,6425.365364,0
+382,27646.78005,56.31166878,3132.148692,0
+383,21437.61575,45.73140049,2563.960873,0
+384,50648.19844,56.51730671,7110.755833,0
+385,29670.67184,53.55019966,2928.984088,0
+386,20258.53866,29.11553162,2767.8373,1
+387,34475.21797,42.30791846,3162.133837,0
+388,28926.43246,62.06525128,750.067107,0
+389,20660.66895,49.36388109,1756.037625,0
+390,24987.93409,49.06510864,3946.898246,0
+391,29672.56081,51.01980481,607.9094842,0
+392,23241.59989,40.84775603,457.1966172,0
+393,24217.22876,23.51076748,2104.384323,0
+394,65574.09334,23.51304252,3031.246326,0
+395,55994.45879,31.1392572,680.6196961,0
+396,67369.33212,57.63423984,2299.418172,0
+397,23305.77149,28.21752876,4521.004312,1
+398,35195.46635,49.6584056,2836.988178,0
+399,27135.07262,54.8364598,1387.248801,0
+400,24037.16514,23.31157432,2469.364426,0
+401,51625.31323,44.80884119,4592.24555,0
+402,50705.76626,53.20582216,1096.967075,0
+403,58079.1569,18.66302679,11540.04581,1
+404,62192.46707,46.0507889,1863.891003,0
+405,62553.66841,63.92497558,4641.704785,0
+406,68147.95732,22.98439448,12307.56232,1
+407,27619.66141,47.54050593,2774.832781,0
+408,65330.19284,28.58998731,4030.803692,0
+409,26680.14584,47.76173998,1671.184924,0
+410,46104.59891,51.05635889,2342.472921,0
+411,44904.59764,44.20668666,4953.773599,0
+412,52934.59443,50.40298165,3248.627718,0
+413,43509.75776,18.07533586,7363.037639,1
+414,22118.35733,63.01594669,3928.121846,0
+415,56275.41002,30.24987142,2224.88416,0
+416,48630.97953,27.02167736,5862.833029,1
+417,64272.7,37.77801477,4929.878818,0
+418,24349.00295,53.75252283,3890.47105,0
+419,34332.31526,36.5013709,1225.720223,0
+420,64940.24109,43.94104124,8196.930726,0
+421,30595.74801,40.91149463,3495.069881,0
+422,53422.21625,28.18853052,7441.759617,1
+423,69995.68558,52.71967321,2084.370861,0
+424,48270.79624,45.30585103,6232.280399,0
+425,27028.15559,48.10959467,331.3643087,0
+426,23519.86609,34.39370686,2368.381231,0
+427,37302.0834,35.01540389,2366.17424,0
+428,55601.27185,18.8429929,10533.45516,1
+429,62678.64545,25.83939413,333.4413981,0
+430,41602.43398,25.25986939,7005.079292,1
+431,27533.00133,46.76592846,1551.420288,0
+432,30594.17656,50.0438201,118.3421421,0
+433,47846.9459,24.41835729,3713.262688,0
+434,55273.275,25.41639103,10282.99745,1
+435,23086.25541,24.84996033,1256.40116,0
+436,29621.27488,32.45542329,5575.253691,1
+437,47533.92095,39.95519407,6637.770871,0
+438,62519.18418,44.40997496,2324.547705,0
+439,50878.95904,44.96512582,3257.012629,0
+440,58580.95951,56.62695134,4317.715478,0
+441,69445.64945,28.81827377,10643.40418,1
+442,60929.17235,60.05877767,11146.07446,0
+443,35496.6655,47.00274607,168.0547853,0
+444,33572.4235,57.44221936,3369.377023,0
+445,55306.91435,20.14031182,5272.535014,0
+446,34141.92764,47.15114867,3371.66431,0
+447,40453.89095,20.70989283,890.9395353,0
+448,69088.77742,53.93562663,11246.48815,0
+449,30885.6922,55.15075882,5216.354091,0
+450,58683.22632,24.8449593,271.7344685,0
+451,60675.81216,39.9639062,11617.74891,0
+452,68460.68003,35.77560039,949.9566247,0
+453,63653.83991,27.51536888,8866.527185,1
+454,42522.57576,18.32612216,5036.25528,0
+455,54140.42913,30.88889273,7896.223766,1
+456,47548.36262,47.83910014,6153.936564,0
+457,24114.01226,52.33581555,3900.829601,0
+458,20686.23909,33.28052356,3052.576691,1
+459,21412.30861,26.38271039,2639.710126,1
+460,69391.1466,63.80067091,2550.265147,0
+461,32319.26222,42.93199308,2733.420559,0
+462,52862.94714,47.33139712,9754.152239,0
+463,48383.27615,39.7047263,2763.263955,0
+464,36430.5384,38.22744175,5855.185594,0
+465,44268.89401,27.93317102,6043.143106,1
+466,63806.32925,56.6321662,114.4999674,0
+467,46195.77717,32.41359859,927.0675939,0
+468,23743.16077,42.73457772,3254.74895,0
+469,22089.83748,21.29670327,2584.022038,0
+470,54707.28851,44.23788146,10255.19011,0
+471,23203.64719,58.56887607,749.1453684,0
+472,25342.25068,40.36114009,871.5300911,0
+473,31645.63282,32.16327128,5193.838197,1
+474,32306.8084,21.90630584,3603.364078,0
+475,61262.81632,49.41303041,5564.163603,0
+476,26388.7273,19.37152054,1191.332138,0
+477,53009.42543,36.07447938,3589.253506,0
+478,58163.54068,58.7474847,2237.927764,0
+479,38665.03393,55.12592175,6152.004833,0
+480,25289.04722,53.34272481,3701.537602,0
+481,66049.93403,29.3157674,13172.6813,1
+482,56282.98253,62.3698886,8215.558384,0
+483,35778.61523,30.62820738,5544.654684,1
+484,29174.24031,18.52862799,665.5770001,0
+485,55934.43256,60.75524976,5643.179899,0
+486,32256.86152,20.09639947,2809.322185,0
+487,68052.80692,28.75880168,1415.718263,0
+488,26957.05387,55.26487741,4172.988238,0
+489,48685.04202,32.53325603,9698.582169,1
+490,38288.07108,28.73543162,1723.399373,0
+491,42468.02083,28.62581918,1902.26561,0
+492,55377.77303,46.91822152,6882.873416,0
+493,54231.70279,21.27421064,10156.14231,1
+494,53283.25871,49.00469291,4065.218795,0
+495,52534.78548,47.18361948,3810.131842,0
+496,47847.51563,26.65183777,8494.016431,1
+497,59998.25327,54.30892681,4659.535976,0
+498,58684.51301,31.73226475,5415.817417,0
+499,49114.78793,61.48152255,6388.85036,0
+500,57179.40201,21.37312158,2991.967351,0
+501,69395.11648,23.95138858,11047.68434,1
+502,43963.73801,41.55384223,4481.436861,0
+503,66326.47247,40.98032875,5602.160022,0
+504,35886.72684,34.66834878,843.749092,0
+505,35578.23411,42.394597,3640.848886,0
+506,48689.00043,36.56309217,3859.471823,0
+507,56510.83536,47.30828614,9255.439649,0
+508,50275.89996,41.81982332,5541.821255,0
+509,56665.49409,61.64512274,11159.79317,0
+510,42912.09054,60.58219753,4550.122853,0
+511,22169.72922,36.97071669,947.1996384,0
+512,35919.80732,27.30412443,1227.109484,0
+513,61987.68527,27.63108779,2618.243037,0
+514,30044.68352,49.77406378,1428.439625,0
+515,61528.27242,55.90302305,10897.90548,0
+516,31196.49177,47.17878489,987.2615366,0
+517,66003.95999,33.07351468,11207.49523,1
+518,56960.67384,25.51799914,4856.483454,0
+519,41315.10789,57.52009412,1378.909057,0
+520,64913.34384,26.76631122,9781.326722,1
+521,32804.90449,62.29439051,4961.25568,0
+522,25789.2098,26.49416967,2410.277414,0
+523,31908.35431,38.25251186,1857.461578,0
+524,56050.30258,23.97382954,6870.83901,1
+525,66505.77569,25.61824062,6571.197021,0
+526,57504.07174,55.71713443,8107.267645,0
+527,44619.11149,59.85248724,2474.977159,0
+528,21158.93529,54.30391261,3562.308296,0
+529,22765.19092,20.58742742,540.6177247,0
+530,25052.82026,45.57399348,3367.701923,0
+531,61006.1073,54.18129557,5850.770691,0
+532,62321.24247,45.8902828,10649.07205,0
+533,49604.54421,51.94400881,7045.919202,0
+534,48433.37349,28.53199734,789.6333613,0
+535,57590.28328,19.49710268,7676.310663,1
+536,62691.70137,25.06437924,8244.7489,1
+537,51121.65687,58.52718075,6471.628202,0
+538,22516.54035,55.51892667,4267.451902,0
+539,60857.23505,37.39428701,10486.74435,0
+540,62908.35748,51.14682721,3213.898146,0
+541,49665.63384,50.31921262,2713.885075,0
+542,65322.80107,41.45419509,2739.71999,0
+543,20598.92656,35.77115432,3872.402468,0
+544,55476.65698,52.0892028,4733.50583,0
+545,26218.49485,18.41623623,3343.816358,1
+546,40794.87023,38.04052822,6519.43706,0
+547,53719.65111,42.89010155,1670.737893,0
+548,20715.53563,27.53032143,369.5277394,0
+549,57163.8524,53.54481969,577.5307824,0
+550,33751.20531,25.30187719,6494.184336,1
+551,44832.56472,32.17826296,1256.253538,0
+552,51035.63346,58.99497729,2889.880195,0
+553,53493.48601,21.87474639,5030.8288,0
+554,58205.68,56.83783815,10035.60302,0
+555,47439.94076,22.34841947,7896.356942,1
+556,47586.22771,42.27500753,3343.056276,0
+557,26100.85126,62.31916468,960.1372514,0
+558,45326.40367,59.36251247,5142.110837,0
+559,24391.75623,47.0350985,2198.144889,0
+560,53741.37102,49.72943257,6513.150125,0
+561,40053.72227,27.93848013,44.5272461,0
+562,53033.86413,38.45755969,10427.4705,0
+563,25176.50201,53.54340881,3064.718488,0
+564,31210.84702,54.10490667,3853.088042,0
+565,23532.2763,59.63373699,1077.8404,0
+566,63776.77079,43.81065864,6697.971583,0
+567,52278.765,45.92897162,4269.136035,0
+568,56015.81322,32.50931024,2275.763425,0
+569,56110.93994,62.82941483,9351.006131,0
+570,57856.80823,33.68215095,8824.164747,1
+571,30187.09186,28.15508425,4462.823258,1
+572,30786.87193,47.06810554,3563.319789,0
+573,22279.29977,58.90732761,3141.338536,0
+574,42476.26553,46.43822313,8334.182008,0
+575,58147.79986,34.05864485,3951.189747,0
+576,36266.21187,55.54236272,3206.927665,0
+577,39045.49716,27.43322056,1165.492158,0
+578,64467.80368,63.40058921,521.5757014,0
+579,36594.80667,60.91256134,3492.334022,0
+580,58797.76286,53.40343367,8892.963303,0
+581,66653.27093,19.88705308,5180.71186,0
+582,48271.49838,21.66234102,6077.680287,1
+583,30991.43192,34.01002602,4589.267265,1
+584,45446.51834,19.30469183,8474.982464,1
+585,37142.73889,50.30304299,161.2375511,0
+586,58320.80889,20.25760534,10033.49168,1
+587,24825.54068,54.8174662,3650.196352,0
+588,20511.42944,27.19626825,931.7900744,0
+589,48326.32089,35.65219864,7168.707002,0
+590,55441.35879,48.05859911,10768.74784,0
+591,60496.90792,33.94567162,1115.154587,0
+592,25296.15423,44.35608995,1320.462443,0
+593,50414.32032,56.19400321,2468.171999,0
+594,67984.04038,27.46528093,1642.969471,0
+595,50382.39977,57.09693649,9183.842295,0
+596,49413.29854,18.64785258,2554.044352,0
+597,61464.82064,36.40826631,5099.08746,0
+598,53784.04957,24.39355435,2761.85138,0
+599,35993.28793,41.8750019,901.9277107,0
+600,63402.00468,47.22342889,7530.767633,0
+601,40484.97132,39.28143317,1093.679203,0
+602,26168.01227,41.94116976,3040.98135,0
+603,60044.28152,61.31265439,6823.434443,0
+604,23984.55095,51.14126769,4622.275198,0
+605,40359.70119,32.24500797,1783.697326,0
+606,33583.89108,62.13075546,1251.867366,0
+607,68038.79202,62.94812935,10108.79585,0
+608,45652.05927,53.674341,5408.212129,0
+609,34399.20978,31.764889,6019.834423,1
+610,57628.43892,23.98656393,5021.639683,0
+611,24294.67689,22.26309561,4360.053009,1
+612,52218.88251,37.54275677,9792.091531,0
+613,50061.76774,55.36104188,6145.131817,0
+614,49352.27422,57.54215563,3362.774486,0
+615,21087.35554,49.31063445,3353.693571,0
+616,23812.25268,42.76555932,2716.655819,0
+617,49395.16649,41.08490913,5927.574676,0
+618,33338.94399,46.59851354,2929.851424,0
+619,29668.32072,38.6837404,2042.436463,0
+620,45936.5972,41.99401029,8525.231909,0
+621,55948.06772,40.30301538,8569.220573,0
+622,53239.50071,63.51511514,4606.156805,0
+623,43694.03444,49.51503554,5049.635509,0
+624,24078.0725,38.49162835,3276.139948,0
+625,50258.55302,22.54284077,1086.246165,0
+626,41816.65683,48.91721362,4534.575973,0
+627,36892.71622,54.44842476,6463.647751,0
+628,23886.56761,34.44297279,4440.419617,1
+629,48757.76505,23.07603499,1833.581051,0
+630,34601.68266,33.85052236,2430.101618,0
+631,52986.00455,50.42376288,4928.607034,0
+632,50740.95102,21.72135886,784.5773121,0
+633,53096.9914,36.35007538,2663.052609,0
+634,38500.00065,53.93069108,7571.682318,0
+635,41004.26236,55.84909201,1016.141008,0
+636,63585.36459,49.33992697,1594.972682,0
+637,31823.68106,30.98355705,2290.430342,0
+638,26242.63362,32.59683185,1801.228195,0
+639,63531.24599,19.32910789,6917.508435,0
+640,64751.14654,53.63820349,2289.851251,0
+641,31091.2763,50.89554304,4071.083034,0
+642,66871.26736,62.68936364,3614.268185,0
+643,25098.65283,51.64706285,2611.848092,0
+644,33720.58922,47.24662629,1365.952209,0
+645,28182.52329,25.52961036,2285.956538,0
+646,27334.56971,42.67119449,2963.794432,0
+647,68694.84318,23.08141739,12731.89464,1
+648,46195.62167,26.62719845,2888.633728,0
+649,34488.20985,27.13153021,2156.314406,0
+650,57827.6631,23.97296825,10816.75901,1
+651,20346.46905,35.71607365,656.0331879,0
+652,60480.9758,53.42868783,3216.094541,0
+653,51915.67978,44.10910349,2282.911022,0
+654,54625.50698,31.69645567,8619.745177,1
+655,48305.42709,55.2125357,4833.47747,0
+656,28577.96451,21.42016018,1639.225639,0
+657,53400.82701,58.08168841,10418.19298,0
+658,43414.48789,44.45336282,7170.946724,0
+659,47526.23413,57.21959192,8957.330544,0
+660,46082.07216,55.15846717,2921.235379,0
+661,32195.59252,62.20165852,4980.013585,0
+662,49067.09129,60.54459807,7258.968492,0
+663,21293.47713,42.40494033,1368.691922,0
+664,52100.91739,23.18144363,4767.277192,0
+665,48334.38778,53.36775446,2234.443137,0
+666,58507.62355,48.97744804,694.1351678,0
+667,27521.04034,35.08659729,2699.851346,0
+668,63914.22537,26.34974189,139.3145719,0
+669,28598.83265,52.53369854,524.2010921,0
+670,23298.46675,48.65145986,1741.183919,0
+671,35697.55414,51.38821886,2907.958272,0
+672,40376.16358,38.92128904,3901.937984,0
+673,56534.96684,27.80794148,2161.083752,0
+674,36088.93861,41.71775901,6222.415273,0
+675,34158.63397,29.42114243,2911.408067,0
+676,29732.05762,38.87671243,3485.018026,0
+677,41736.20154,34.59649188,7602.613055,1
+678,42236.45609,24.6867331,4749.068675,0
+679,28796.85084,44.62864841,706.2289942,0
+680,55097.38848,33.92942424,9342.479427,1
+681,40916.56415,48.31974071,5219.804028,0
+682,20908.3351,28.81852198,3133.624447,1
+683,57999.77239,62.77011063,859.5892942,0
+684,57746.58159,63.62530548,727.194665,0
+685,55116.23451,41.46888524,10284.60679,0
+686,57765.52116,43.88730905,5445.22266,0
+687,45200.9928,43.90542902,7335.962568,0
+688,42435.18949,51.48952681,2766.280914,0
+689,46365.57352,41.85261305,5443.276307,0
+690,57187.70089,59.47191821,9390.672261,0
+691,66539.9276,57.70555929,12129.08223,0
+692,25244.7267,53.3790106,1278.999504,0
+693,54780.34561,61.38897114,8134.220408,0
+694,59253.12146,36.92041154,7327.283577,0
+695,48540.34154,21.23915762,1012.934993,0
+696,30415.10508,22.98363585,4362.083152,1
+697,48768.69924,25.92502563,500.5991056,0
+698,52299.21808,18.30974563,7880.685807,1
+699,42242.48912,34.22076686,2070.379381,0
+700,28218.96527,42.62439388,1305.082433,0
+701,40208.13186,61.37191328,459.0346888,0
+702,61419.67284,30.65182339,9921.672387,1
+703,51282.50524,26.55138677,8445.385343,1
+704,36017.90275,43.5236232,1526.392476,0
+705,57575.00979,33.80013512,9857.22995,1
+706,53330.76714,42.3772463,2343.497556,0
+707,39834.51984,63.31227526,699.9557764,0
+708,62469.42837,24.26485536,7286.550391,0
+709,40334.61673,45.88654158,6808.869955,0
+710,47542.8027,40.87333755,9448.209721,0
+711,55883.62286,27.37033802,974.5630674,0
+712,29163.01588,43.95617132,1469.129704,0
+713,47786.14106,29.7081893,7181.478553,1
+714,29736.3105,35.29839844,657.0484089,0
+715,50831.42753,24.35160252,9572.586884,1
+716,62030.046,46.53578454,7572.567589,0
+717,54049.01274,54.62035318,4569.647911,0
+718,34336.01759,35.83065171,3441.644524,0
+719,31895.71531,48.18590728,3423.346172,0
+720,51894.5401,59.0037683,6579.534007,0
+721,37616.71086,53.44466025,5732.240108,0
+722,22076.948,56.99543936,3948.143344,0
+723,56252.95371,57.27829057,7327.070282,0
+724,26316.75849,37.217654,923.0284413,0
+725,23120.87961,40.29672232,1417.846522,0
+726,39033.03271,59.67702219,5757.890479,0
+727,32420.81815,32.36179216,1494.212974,0
+728,68827.24433,25.30253079,1049.175477,0
+729,58092.20489,41.81365235,5277.74042,0
+730,43538.85612,46.32941211,8523.901116,0
+731,64040.48418,59.14480741,5408.727767,0
+732,34395.22922,25.54822433,2089.7325,0
+733,57405.51493,45.64443499,6914.75154,0
+734,22581.13397,40.54886181,34.28510582,0
+735,27952.94598,42.09749811,3965.251974,0
+736,54022.91284,26.5610123,10641.45144,1
+737,63546.16476,44.41273214,6170.239116,0
+738,60713.4303,56.03160353,396.2336776,0
+739,44519.32947,32.39165985,1446.468103,0
+740,40997.79899,55.58120391,7908.331843,0
+741,63661.38333,25.59552438,6095.308749,0
+742,34429.14674,39.7149896,2240.277404,0
+743,29181.86143,48.24064781,2529.612969,0
+744,52510.43824,40.27914024,1858.30824,0
+745,37536.34724,25.85667757,2634.358585,0
+746,35683.74495,44.49787917,4337.825559,0
+747,45622.29071,41.63254532,528.1812501,0
+748,67385.40318,29.03367936,6747.232379,0
+749,69411.79253,47.07372685,12176.78244,0
+750,48322.51407,29.26263398,7732.696396,1
+751,40836.58881,22.16826291,6994.487801,1
+752,38035.95133,60.65521047,4298.705028,0
+753,42696.97137,44.52967068,222.1964386,0
+754,24181.69479,22.30012538,1529.018868,0
+755,33194.40264,51.17971212,6615.387858,0
+756,32541.46153,34.40508616,780.8328568,0
+757,38381.41306,54.08337144,322.7241556,0
+758,25921.91253,58.42607932,5104.746789,0
+759,58810.97173,22.10938059,9099.724338,1
+760,63025.74408,56.56693154,2956.977746,0
+761,29954.00451,61.83684471,5774.07427,0
+762,40641.52302,37.66419864,5042.326368,0
+763,43940.9107,38.30598195,2855.379187,0
+764,65166.97287,25.65628186,8859.087469,1
+765,58820.38206,30.75231565,530.6578241,0
+766,50719.76308,43.20724465,4770.937668,0
+767,46766.59592,47.77517095,2383.407757,0
+768,67520.7596,45.41562414,13041.77945,0
+769,28386.25355,31.12533241,1718.943782,0
+770,68276.03076,34.51488127,4842.07796,0
+771,30731.72628,40.38884294,1129.562412,0
+772,30012.25109,54.94011866,3972.151405,0
+773,38075.31877,53.10735995,6928.943621,0
+774,55932.39657,44.39262234,4876.366909,0
+775,27966.24445,53.70027324,4445.203178,0
+776,53825.53674,49.71390438,5272.804792,0
+777,65451.49652,60.27638934,8129.048931,0
+778,39473.99586,42.30125384,6034.153228,0
+779,42344.80871,47.41810839,6800.246806,0
+780,36112.87441,60.5793527,3737.212187,0
+781,32720.5048,33.80450352,4367.26495,1
+782,27973.82656,49.67421964,403.4021354,0
+783,21306.03312,35.09416354,3791.023528,0
+784,36029.30158,52.64062442,2928.100439,0
+785,48457.96355,22.34492363,8108.172683,1
+786,46038.51066,39.03867278,6868.987805,0
+787,34247.15902,34.70098954,6458.790585,1
+788,64247.615,31.60316207,4513.203694,0
+789,62109.76709,41.24090602,2816.430158,0
+790,21481.80379,19.95945231,1137.657891,0
+791,20762.47447,25.32912274,2385.224837,0
+792,33756.52723,40.56759555,1169.835925,0
+793,54325.80727,29.63636931,6978.525057,1
+794,33197.8078,59.48684823,3993.146866,0
+795,56846.47423,30.28092755,5268.227475,0
+796,26542.93109,45.82942652,4233.089586,0
+797,53200.54815,59.6917193,3090.473119,0
+798,38073.4069,32.21450809,2284.005677,0
+799,43937.21904,56.40968222,3213.541963,0
+800,49284.81941,51.93972912,493.589997,0
+801,22869.32345,25.9064452,527.5515684,0
+802,60113.34254,40.77430558,8253.384569,0
+803,23613.25569,32.4735058,2469.234585,0
+804,68755.09442,53.22813215,10990.53375,0
+805,26449.32829,46.47915325,2952.123152,0
+806,42855.41611,47.12736998,4923.814846,0
+807,25686.77894,35.85071487,3728.397031,0
+808,67125.64924,36.05850519,7482.067369,0
+809,27427.78945,59.70451918,719.9466646,0
+810,37145.57306,53.19827894,1510.735507,0
+811,41702.60077,41.94405372,6105.727929,0
+812,20710.77596,49.55726981,3960.710873,0
+813,39124.16436,44.5571086,401.3267334,0
+814,32834.64674,60.58021867,4184.578203,0
+815,26267.2214,58.79376696,1136.117271,0
+816,41254.2282,28.94820475,6993.049441,1
+817,38268.6966,30.67684984,2522.057185,0
+818,37087.26876,57.5763008,6391.153194,0
+819,38458.13304,55.85685407,3644.30607,0
+820,40185.77567,31.00076808,1002.340574,0
+821,65481.94555,45.03857624,10614.24849,0
+822,57426.68048,20.1188451,2461.974406,0
+823,47903.31425,46.16901477,4283.226974,0
+824,34222.18775,52.24667845,3582.151364,0
+825,28481.2656,47.42132836,5302.179943,0
+826,43069.65215,41.24003469,4091.561292,0
+827,33093.96186,33.40317391,3852.992444,0
+828,61363.85606,62.13637386,9636.804731,0
+829,68100.73562,47.75294027,8124.59898,0
+830,50551.48034,56.7655671,5262.616088,0
+831,54421.05401,22.96153355,6229.836019,0
+832,32152.45974,57.48695513,3550.584889,0
+833,40230.97571,58.79409568,745.1947491,0
+834,53483.374,29.18999789,1459.668599,0
+835,65137.93776,42.13310957,10352.18177,0
+836,29496.59413,54.66582086,2216.975334,0
+837,45181.93371,48.0968023,2243.153992,0
+838,24994.7782,34.72335974,51.64026024,0
+839,54820.97401,20.56039647,10070.94905,1
+840,62955.60829,29.54950978,207.5438178,0
+841,52956.24608,25.14710192,959.0972148,0
+842,40366.20324,32.07200804,7410.792024,1
+843,60005.01013,40.19488899,10677.66802,0
+844,37598.38508,54.66392931,3641.808411,0
+845,61323.0009,60.16601647,8699.946682,0
+846,21243.9323,57.86806022,3438.979277,0
+847,62111.43441,25.97645859,499.2085782,0
+848,56524.87881,54.91097151,5296.940273,0
+849,51718.13696,34.35049974,1036.616804,0
+850,43205.63175,23.12587725,4835.274657,0
+851,26934.19744,35.9790102,4113.299167,0
+852,68966.82256,54.39248814,6690.635338,0
+853,31527.3472,59.02264656,2062.719158,0
+854,46839.06109,28.73335871,1498.200316,0
+855,32151.29686,42.91491157,4601.940086,0
+856,40831.80192,47.1495458,6429.593688,0
+857,30868.80482,58.13656775,4618.392184,0
+858,62988.82643,32.47461294,6924.901569,0
+859,65496.76748,61.95993475,11805.55577,0
+860,63032.62627,24.78843756,390.3358609,0
+861,27287.07454,18.69579873,4509.881422,1
+862,44299.37174,24.37145815,5154.909843,0
+863,44091.34923,30.48523032,1664.104927,0
+864,26617.03032,28.61650924,2727.241681,0
+865,21856.23353,47.72276785,1500.653745,0
+866,28072.60436,54.14254823,1.377629593,0
+867,35950.48845,35.47184697,2664.925675,0
+868,28982.11236,35.26825118,1440.499168,0
+869,51790.72645,41.15087779,1281.035729,0
+870,65000.81962,21.69969953,1114.914824,0
+871,29761.04601,21.85429135,3748.258124,1
+872,23081.45074,53.89681841,257.6612015,0
+873,60016.74099,22.73860251,1522.646768,0
+874,54619.15536,53.59786282,901.2777768,0
+875,66274.2081,36.37462344,10257.91839,0
+876,49380.65863,45.47104991,5425.280945,0
+877,46283.06746,48.28858511,2166.1231,0
+878,25554.69852,42.79692147,4229.914353,0
+879,36680.18192,22.14626261,4849.333785,1
+880,30383.67633,46.8319496,2153.607725,0
+881,67730.4437,26.30314698,8881.583636,1
+882,36446.72414,40.61685061,2927.675444,0
+883,33648.73899,60.97094456,1498.161255,0
+884,53852.79954,42.78285555,2089.909464,0
+885,61298.21867,48.28503024,9399.504602,0
+886,69465.74696,20.58523169,7983.705373,0
+887,39102.04171,29.30086538,4200.697505,0
+888,29366.58233,22.48404853,4049.253865,1
+889,67949.73807,34.47967882,1790.348617,0
+890,29468.85918,22.78963669,3703.953047,1
+891,56839.4019,36.55239093,9004.801714,0
+892,38277.93687,44.90919805,7405.80321,0
+893,49664.27072,39.94416069,5571.456364,0
+894,49972.01083,32.39698399,763.9541159,0
+895,27356.80095,63.48787362,2983.583322,0
+896,36840.60366,36.67458349,6557.940331,0
+897,51438.81407,46.01234316,6898.783719,0
+898,40614.72205,20.93267159,2649.695356,0
+899,56738.63732,63.37394217,3210.807048,0
+900,68004.68622,41.53109727,2698.047781,0
+901,44458.63729,52.08290527,1456.234944,0
+902,66801.19751,19.13513823,288.6467693,0
+903,48991.85368,18.6213071,7453.264268,1
+904,69430.93662,58.94091428,2648.220452,0
+905,27989.1111,27.80092017,1770.818279,0
+906,67675.80477,37.74039569,4396.076877,0
+907,47985.72247,33.55977398,8801.610127,1
+908,43388.20947,35.70435679,7007.154253,0
+909,63182.45567,25.58638213,3493.224567,0
+910,20568.89131,25.85385679,2257.064782,0
+911,25833.71723,19.20759964,3716.254685,1
+912,23087.3014,37.61963726,423.4183995,0
+913,36124.71783,25.05472696,6485.05748,1
+914,57330.61941,44.4456513,1058.039202,0
+915,47240.25312,55.00972136,4286.345614,0
+916,55730.62923,55.15643796,9286.357545,0
+917,61660.40132,48.89875823,1684.526564,0
+918,49746.88744,29.36146193,7354.129523,1
+919,23973.68759,55.28829775,95.46072238,0
+920,28085.4796,45.03212598,4431.280471,0
+921,33585.47474,60.37738544,3933.883012,0
+922,44179.3851,51.30649189,5888.375781,0
+923,56025.41973,29.39644446,4341.626699,0
+924,49369.70415,51.37341727,109.3796228,0
+925,26889.36474,62.62510846,675.7120311,0
+926,30873.21764,38.95273955,4076.87675,0
+927,30608.94324,46.47670398,2632.551811,0
+928,54878.08965,42.88355929,1504.473462,0
+929,32423.80685,63.18998659,2961.952368,0
+930,46608.36902,20.40499151,1521.868405,0
+931,65689.1897,28.10870743,255.072656,0
+932,49054.86027,54.06866362,1102.240361,0
+933,20310.57756,54.26474774,1279.113098,0
+934,66423.39933,18.87435711,1066.214601,0
+935,45783.15475,63.88504374,7492.90982,0
+936,62887.76267,42.8418414,6849.484223,0
+937,51088.21078,52.08587159,9097.112036,0
+938,66217.94485,19.08162361,745.0760945,0
+939,62799.75061,35.36149204,6752.586071,0
+940,45789.48752,36.29805129,4545.157459,0
+941,59727.40599,50.24148795,5203.325181,0
+942,35513.58955,60.80701767,6983.360741,0
+943,29178.97759,63.93073469,1664.386062,0
+944,67501.69225,49.63745902,7589.75999,0
+945,66255.02953,28.96002495,7475.212282,0
+946,63558.86409,36.35685466,9282.927735,0
+947,63441.71236,18.67128938,3119.412678,0
+948,64983.15424,27.29197161,9109.774342,1
+949,56946.64594,55.40901375,11175.84107,0
+950,52349.87246,35.52249918,5181.848501,0
+951,31473.45878,27.99340911,797.3459721,0
+952,59267.3392,34.91269907,5085.311919,0
+953,66809.17325,31.05454812,1316.187128,0
+954,48083.31155,39.15730598,9193.095264,0
+955,20629.3473,28.30686155,3310.410118,1
+956,25363.33106,31.39079116,3946.001447,1
+957,28873.67417,62.3285863,2224.469765,0
+958,41430.85526,33.68956136,5719.278116,1
+959,53612.13123,23.28296645,5976.896568,0
+960,51555.74026,57.26359177,9217.688669,0
+961,46564.3789,50.65129969,599.830324,0
+962,61200.42748,19.22777832,406.8518612,0
+963,29307.32077,61.16495696,481.8426971,0
+964,67687.18308,20.8043048,10506.32803,1
+965,52565.06574,55.69652935,372.9742533,0
+966,52920.14801,20.99096653,9521.769942,1
+967,34981.36783,23.48770889,5502.736031,1
+968,65210.8371,27.52843972,12607.95166,1
+969,60016.07961,54.31724029,2857.007414,0
+970,23066.96468,33.091353,1933.353568,0
+971,52603.87864,43.89546653,2043.089553,0
+972,20111.36326,53.49539456,1745.371922,0
+973,32759.70028,43.88045936,5211.32563,0
+974,30578.02016,55.36616174,3010.35024,0
+975,21211.58939,32.65119825,931.7810522,0
+976,53746.32658,29.35028859,9534.660206,1
+977,45214.10922,18.2999804,1779.727735,0
+978,58465.0497,20.12688854,11417.06009,1
+979,54422.97349,58.57139504,444.6137769,0
+980,62842.06439,62.19707882,107.5972315,0
+981,53005.13229,45.68722047,2539.336749,0
+982,40749.02818,26.85401291,6207.186165,1
+983,49804.41083,20.03986423,7235.194717,1
+984,37277.24612,26.63314682,6289.256076,1
+985,46883.20654,30.39988989,6342.567909,1
+986,31763.3692,35.60251728,3489.404122,0
+987,61013.18158,24.70761897,1791.542962,0
+988,41285.3589,22.91107059,532.1002558,0
+989,39133.89186,21.60323147,433.4584179,0
+990,62171.80256,24.2437831,1035.462496,0
+991,53638.64595,44.02737436,109.4788536,0
+992,49264.58489,58.11954711,3051.574267,0
+993,63114.49699,48.35108283,11890.75719,0
+994,58165.50622,45.72915357,4155.723767,0
+995,43029.80326,27.21015742,6894.165381,1
+996,21593.62266,51.54892278,458.0937244,0
+997,49104.76824,35.53851733,9452.217947,0
+998,65776.23241,39.79819134,2805.863745,0
+999,36192.14945,21.40240262,7236.17393,1
+1000,62165.86119,19.6025431,4739.948954,0
+1001,50793.35572,41.60188645,421.6403796,0
+1002,62422.20379,32.14522141,2841.633423,0
+1003,63166.99496,56.51003993,4058.789534,0
+1004,23717.56785,49.32576952,1530.090242,0
+1005,66797.66467,21.38042855,11921.19954,1
+1006,30272.20362,19.13244649,1440.072549,0
+1007,55741.19569,52.62685289,3181.780519,0
+1008,30742.57971,26.44933684,5685.653641,1
+1009,20491.56433,35.13483691,1579.168249,0
+1010,35620.41863,40.82467405,3611.295903,0
+1011,50206.13372,33.03111152,5826.462898,0
+1012,67935.45387,60.9422627,8267.326053,0
+1013,59223.3966,22.93963515,3901.402085,0
+1014,32657.26868,32.81218796,1796.270503,0
+1015,55931.65458,23.44133307,4053.519938,0
+1016,23694.77887,22.86428448,764.29719,0
+1017,44324.28637,23.18086641,2672.692026,0
+1018,34735.49175,62.35895581,1402.217854,0
+1019,67064.34474,22.58360992,1091.624816,0
+1020,42761.49268,45.04937391,610.6578471,0
+1021,49517.72233,31.5493175,7337.950431,1
+1022,54372.18266,29.97711781,839.1250812,0
+1023,29941.96837,48.35844947,3170.045654,0
+1024,68414.12078,51.04678129,6154.052457,0
+1025,23891.24457,51.02920468,3475.905423,0
+1026,47187.57155,24.22704766,7933.469449,1
+1027,39819.92094,63.38479701,3577.44769,0
+1028,50632.27924,53.62329948,1262.356066,0
+1029,39970.21125,40.36811516,7867.616836,0
+1030,55176.1396,49.4559101,7822.936091,0
+1031,50533.57195,56.63106428,117.7125869,0
+1032,52983.87446,42.58806976,5567.941087,0
+1033,31187.66993,30.99961612,593.1247798,0
+1034,34909.98223,25.56874133,2852.371795,0
+1035,53810.84766,51.43297298,9154.477015,0
+1036,55478.96737,53.76292004,6227.541774,0
+1037,60394.09487,57.68642247,8293.576747,0
+1038,36845.73868,51.93947954,1790.013566,0
+1039,60264.94065,54.72136343,2241.388144,0
+1040,52981.5086,18.30621644,3759.937234,0
+1041,50222.76242,21.42271292,8734.740617,1
+1042,59256.55596,38.57894462,9812.978717,0
+1043,43203.41422,40.90172418,7730.727575,0
+1044,46288.75641,23.59003818,6053.791581,1
+1045,58176.15493,52.17576009,9852.14111,0
+1046,25631.43473,47.63557696,4778.700543,0
+1047,58977.99765,30.33098269,9442.01161,1
+1048,25048.01599,54.65677518,2341.367858,0
+1049,33436.48901,34.66914689,5473.985551,1
+1050,23787.36705,36.3117126,3041.552908,0
+1051,69456.56777,48.05355678,13190.36589,0
+1052,65447.61161,39.63135194,3269.534327,0
+1053,68743.35318,56.38525158,2290.204289,0
+1054,36052.5776,49.49996087,2830.179862,0
+1055,24820.79247,38.24401685,51.94924278,0
+1056,26046.38417,54.62546358,4669.457353,0
+1057,60850.80244,59.99025632,7206.852593,0
+1058,69929.011,51.39444845,12427.8357,0
+1059,53298.49615,56.90970733,2106.709791,0
+1060,48818.38232,49.29612194,2312.421777,0
+1061,38042.08416,32.83899402,3495.856306,0
+1062,42119.82271,60.06420183,1930.566532,0
+1063,62247.87974,39.22965562,1870.715089,0
+1064,62252.08816,28.24617586,1699.680972,0
+1065,36973.08569,38.28030326,4144.448144,0
+1066,54217.23678,26.62937737,8836.775689,1
+1067,44218.76632,58.57925853,1693.920179,0
+1068,33274.05027,23.95343526,2244.883109,0
+1069,54656.54904,18.39382955,9911.134963,1
+1070,67593.51708,25.40544564,9864.078027,1
+1071,39472.70725,42.60886077,596.4811795,0
+1072,30572.44686,48.65184248,1847.09425,0
+1073,50447.69963,58.09854003,2443.768915,0
+1074,49198.65266,49.1924227,483.6201677,0
+1075,53768.22821,25.37750388,3696.953244,0
+1076,52809.54629,61.01331918,6276.830737,0
+1077,38011.72665,19.05789168,4625.193378,1
+1078,58910.29177,31.01396195,3671.923094,0
+1079,57914.73107,50.61159971,6715.857908,0
+1080,39494.76692,28.5471422,3544.156039,0
+1081,45918.87525,38.64211962,1910.329531,0
+1082,55649.05588,19.66450149,7660.346171,1
+1083,27136.6288,18.83362032,2253.190253,0
+1084,62724.63612,39.83537661,9255.137755,0
+1085,32921.84858,43.73305267,2553.212778,0
+1086,28482.64955,19.78378813,329.4500422,0
+1087,44170.22174,24.47037064,2168.751735,0
+1088,60664.3716,22.36445737,5873.410979,0
+1089,64501.93043,33.3579469,12147.31422,1
+1090,28237.51739,50.01555209,2728.189944,0
+1091,67420.59545,21.18529406,3668.994784,0
+1092,55642.99339,38.91090684,2841.697982,0
+1093,56086.05809,34.57920217,3990.85076,0
+1094,57676.73918,20.66561699,10504.66817,1
+1095,62535.63285,39.19407554,9490.26419,0
+1096,60686.76857,48.39930849,10614.13095,0
+1097,25032.30094,46.31058897,680.9047822,0
+1098,22228.34529,33.35945709,2187.213337,0
+1099,41435.15375,34.92571649,3702.171428,0
+1100,43955.4094,51.55828607,7833.477761,0
+1101,60063.69309,59.11464434,6766.294181,0
+1102,34635.74475,18.9473467,4859.235287,1
+1103,63944.32373,32.5243454,12213.94934,1
+1104,35403.42733,34.64541582,2929.359704,0
+1105,53654.07937,44.13723421,6587.775556,0
+1106,23508.23073,52.64034902,4622.841065,0
+1107,61869.46603,36.22730418,1040.493673,0
+1108,20674.89708,23.99988287,299.8251378,0
+1109,22127.92411,61.18878265,1777.828551,0
+1110,27408.72961,37.69173185,2591.028947,0
+1111,60720.7961,38.82036029,3278.179727,0
+1112,34760.01932,34.26030186,28.88253444,0
+1113,23057.36392,46.97181129,2487.165182,0
+1114,42380.99506,35.71681219,6832.684817,0
+1115,37887.54939,24.4157261,5061.777831,1
+1116,39988.74074,54.26870557,357.0881242,0
+1117,25026.50564,62.90692234,3845.741849,0
+1118,43588.08143,40.49564678,6453.057979,0
+1119,20897.42669,28.0293199,2940.42397,1
+1120,24904.62467,53.3197898,3376.907465,0
+1121,66068.63504,35.91878387,5626.86934,0
+1122,36126.23109,40.70791186,3805.802721,0
+1123,23626.72679,34.29335345,2173.76769,0
+1124,30200.24326,62.78257014,4871.677576,0
+1125,65569.78524,62.23215892,12494.26726,0
+1126,20617.26101,46.51750698,2224.068134,0
+1127,25817.45462,21.63047036,3682.861931,1
+1128,21448.82799,31.79518831,1989.182976,0
+1129,69370.17764,52.3746293,4605.918773,0
+1130,34145.79955,31.40079893,4074.952591,0
+1131,52651.25686,57.32024618,6529.019522,0
+1132,40069.33838,43.31346189,3646.051618,0
+1133,39246.54489,48.32205561,919.11464,0
+1134,56233.78954,57.99108565,9642.092538,0
+1135,49264.26833,19.00652627,801.779606,0
+1136,30451.63616,42.19713668,475.4205917,0
+1137,28726.9963,34.75143776,3675.833415,1
+1138,20113.25349,30.13257556,2507.64971,1
+1139,43434.77543,52.20588011,3672.109828,0
+1140,59208.71608,30.93115193,11479.43781,1
+1141,69310.95727,42.11060918,1590.325804,0
+1142,60567.42444,40.04122249,571.9329349,0
+1143,22048.89504,53.7982525,4199.024356,0
+1144,66733.71025,52.97784361,5366.640793,0
+1145,22209.00951,22.00626001,4096.783714,1
+1146,49032.66241,54.5560719,1777.953131,0
+1147,26558.36106,57.83336484,22.32793318,0
+1148,49255.45797,36.61814758,4951.915771,0
+1149,30218.15123,48.02147268,5914.516662,0
+1150,56317.08282,24.6534823,8045.440953,1
+1151,53825.43058,45.35669022,431.4501612,0
+1152,34927.99361,54.15294718,1957.057929,0
+1153,53287.38502,59.55992485,4432.665444,0
+1154,32032.55674,50.11743705,4582.938274,0
+1155,48405.72681,47.93288261,3766.614435,0
+1156,46132.91405,26.90939873,3216.491255,0
+1157,29049.07149,57.78255455,2562.695554,0
+1158,68550.68786,19.36118878,3879.672652,0
+1159,47474.8196,37.87464495,5083.728272,0
+1160,50021.65541,23.81667911,1054.268085,0
+1161,64089.13191,37.31044758,6272.78845,0
+1162,28451.70557,41.60107543,1042.850376,0
+1163,58132.47127,29.38094985,5491.035602,0
+1164,30961.16614,32.11428662,162.7955961,0
+1165,64162.64961,53.85556307,6938.01252,0
+1166,67470.11702,52.23263736,12715.29472,0
+1167,68263.76624,42.64295351,4124.330404,0
+1168,42889.33416,57.50669619,6340.708855,0
+1169,20155.79236,41.92236196,3489.957148,0
+1170,58178.61457,49.69279455,10948.49949,0
+1171,45735.45569,52.82103724,2944.537354,0
+1172,30037.20313,38.68492023,1247.012791,0
+1173,64392.51221,37.80218224,4513.243712,0
+1174,26291.3758,52.40154262,1094.177529,0
+1175,36008.381,20.62621639,3709.304431,0
+1176,54953.97966,44.69223602,365.6461852,0
+1177,28753.32549,49.40348027,4990.369091,0
+1178,41993.98432,36.19281642,6644.344214,0
+1179,56696.4586,57.52025339,9686.630307,0
+1180,51906.04616,36.5730408,10235.27261,0
+1181,30939.39338,47.8934448,6115.822333,0
+1182,38520.72397,56.67372097,4176.949955,0
+1183,33489.03986,25.97104402,3581.655047,0
+1184,52836.00643,38.25136318,5671.644328,0
+1185,51733.28751,24.91495145,7906.141179,1
+1186,41273.7715,32.09039538,3299.885072,0
+1187,68223.68431,28.99041509,7364.001945,0
+1188,28222.87891,40.33136779,613.2406201,0
+1189,21921.36108,62.3272301,1901.143922,0
+1190,38852.93302,27.05029416,7513.182864,1
+1191,59621.36764,54.15061886,7014.622708,0
+1192,41377.7456,45.86166157,5324.048185,0
+1193,54405.62497,57.1412841,6253.206677,0
+1194,60103.01157,56.05377209,2632.265613,0
+1195,67528.65421,52.88850155,7877.415131,0
+1196,61156.93738,31.80242595,3250.006084,0
+1197,42955.6946,45.41622917,2962.825186,0
+1198,46923.04677,36.3395338,3107.883782,0
+1199,24951.25749,62.04114048,2544.356003,0
+1200,26267.52942,34.49638622,59.46916335,0
+1201,64603.92088,33.06183178,11264.69116,1
+1202,34667.0204,18.85318928,2827.289402,0
+1203,66008.39707,19.42742577,9189.611514,1
+1204,45840.20762,32.27027963,5299.239719,0
+1205,32188.01624,49.42886416,4659.953325,0
+1206,50289.66475,24.0740542,6127.381688,1
+1207,36837.53085,54.72850399,1598.183569,0
+1208,28852.03381,44.21152393,5705.986163,0
+1209,68127.16681,47.9523112,12099.9703,0
+1210,41349.12251,53.85620698,8083.232201,0
+1211,69132.46258,33.47118164,7621.410219,0
+1212,38477.3256,27.34633178,289.576582,0
+1213,68291.15365,46.79353807,9577.955143,0
+1214,58074.60654,59.79866948,8551.259893,0
+1215,26867.10826,32.62229962,1730.151907,0
+1216,32348.45015,59.75238657,3229.820063,0
+1217,31044.39176,49.93586833,4465.872769,0
+1218,29279.74979,18.8130986,2291.988119,0
+1219,35145.10019,47.79338272,510.7399689,0
+1220,44405.28066,34.38252406,3917.876098,0
+1221,42059.6369,55.29068575,5310.271529,0
+1222,28612.20306,58.86168988,4948.48807,0
+1223,46546.70455,60.7597447,254.8435786,0
+1224,22832.32393,32.5164225,3318.407787,1
+1225,21565.92154,44.1265854,4136.761126,0
+1226,26078.21358,31.80688066,3665.880899,1
+1227,60503.54785,20.1184142,6766.53302,0
+1228,31233.30776,41.70405183,1662.453616,0
+1229,34505.80093,49.32442037,2151.696592,0
+1230,35485.11827,47.38887031,2482.04225,0
+1231,45986.3534,20.2872954,7112.926157,1
+1232,43308.17898,34.83136125,6777.198246,1
+1233,53284.11968,32.14321496,849.5451843,0
+1234,68398.28748,36.99394877,8106.859293,0
+1235,64743.70707,56.25701235,4304.929109,0
+1236,68412.60985,28.15512845,551.8430811,0
+1237,59695.10715,27.90329809,8889.928408,1
+1238,32406.57073,20.98656135,3394.65824,0
+1239,33184.19598,60.37477159,4580.097831,0
+1240,47688.25057,34.56708902,1377.018407,0
+1241,42591.59524,45.11655999,4602.245841,0
+1242,34051.52804,35.74565239,6224.152886,0
+1243,61800.03438,29.66579595,9143.611709,1
+1244,45360.71627,27.07574763,4569.994987,0
+1245,20252.12346,27.4416098,3360.059414,1
+1246,30134.7096,43.81722832,958.9980819,0
+1247,56217.3265,51.58228056,2866.5859,0
+1248,31722.73095,34.85181726,2877.756104,0
+1249,60178.44619,33.26140894,3203.615438,0
+1250,51144.24305,37.83799986,3411.656424,0
+1251,22449.07739,35.7657793,1187.42695,0
+1252,44932.87511,27.14705773,622.9128105,0
+1253,40929.48394,20.25460597,2352.287116,0
+1254,31092.26772,43.83220649,5617.993126,0
+1255,44743.55163,53.05626193,2574.707756,0
+1256,60770.22902,33.62672671,2242.82576,0
+1257,43528.48431,59.89202707,2264.725152,0
+1258,25008.94953,63.21714847,2941.028155,0
+1259,47433.41542,60.45516523,9139.14371,0
+1260,50064.34637,29.3425137,417.6331058,0
+1261,60348.41356,60.44679037,3037.968147,0
+1262,67471.1271,26.92335366,4448.412323,0
+1263,30492.87567,61.6792429,4834.738644,0
+1264,25640.07888,22.6564796,3105.443021,1
+1265,55040.75817,52.71448411,8352.061533,0
+1266,34476.70638,23.35098726,898.1339068,0
+1267,23345.86645,38.29017484,4548.110289,0
+1268,24426.02987,34.69642326,823.835162,0
+1269,65849.88967,30.96884689,5051.302388,0
+1270,60454.52565,41.05160496,7875.070926,0
+1271,22680.31843,55.09158789,1743.774685,0
+1272,44471.87373,19.61305844,5883.660558,1
+1273,46572.32,59.12164964,721.3416051,0
+1274,24369.84125,61.73937931,1366.536025,0
+1275,56830.27286,37.16311407,10462.74045,0
+1276,46942.99652,55.64154017,2187.065484,0
+1277,42521.79071,54.74892029,6745.817708,0
+1278,63188.32853,51.14162945,3960.855647,0
+1279,29410.17752,23.49816499,812.3235343,0
+1280,46668.62847,57.8349421,1833.48585,0
+1281,62693.26958,22.52686485,5321.712558,0
+1282,65307.12748,23.72316582,1906.79553,0
+1283,59589.06429,20.60976412,4191.715856,0
+1284,41019.54879,23.25425304,3005.826864,0
+1285,48058.87138,47.74535288,6527.990222,0
+1286,50208.53002,35.02765993,729.6044303,0
+1287,62526.88793,61.05217092,5835.542391,0
+1288,48192.18561,29.75531818,5026.474557,0
+1289,30884.05673,31.27786188,4099.902045,1
+1290,36965.74248,53.76235862,6333.391588,0
+1291,43536.03891,27.86690712,6427.726093,1
+1292,69181.66406,39.23658259,1173.740942,0
+1293,64233.0407,26.71456132,12104.53421,1
+1294,52593.51506,19.53498199,811.9078625,0
+1295,32282.25175,42.63495589,3345.941958,0
+1296,54077.84328,57.12066029,7149.066896,0
+1297,51595.35748,28.46181675,385.4033625,0
+1298,23097.37648,53.76303351,4517.579801,0
+1299,27407.0562,26.15943832,2949.931674,0
+1300,64395.29807,63.17131965,10054.63464,0
+1301,60432.21666,41.92232593,6300.868939,0
+1302,42990.98283,29.52880839,4665.581021,0
+1303,41581.88992,22.85122067,7895.112865,1
+1304,53289.06529,47.45984368,8047.140754,0
+1305,22372.50524,31.49304954,1118.926064,0
+1306,57119.73969,22.33448761,10211.72193,1
+1307,31112.05942,49.61600423,424.3521316,0
+1308,68936.32135,43.36505621,11073.1585,0
+1309,20436.33129,56.94096616,2356.18197,0
+1310,20583.61217,21.98976744,53.18620734,0
+1311,58988.3058,19.9765914,4728.259542,0
+1312,45311.83184,26.928215,3103.812228,0
+1313,60856.83099,37.07050063,10238.4963,0
+1314,45818.28325,48.45083936,8137.164403,0
+1315,20904.55548,41.0178787,2606.023776,0
+1316,49908.29187,29.55094038,2903.036128,0
+1317,55988.29528,31.08703947,7745.754809,1
+1318,62125.25811,21.08586764,5700.457195,0
+1319,48822.72096,60.94434946,599.347887,0
+1320,29976.8291,57.6661531,3796.03274,0
+1321,41944.26819,61.13506293,1203.700529,0
+1322,36970.36044,33.70459912,1268.506383,0
+1323,39992.71911,20.8266799,4999.202015,1
+1324,42450.54304,61.61424618,6210.280587,0
+1325,42146.93762,23.72052181,7367.258247,1
+1326,52841.51644,18.44602338,5957.386324,0
+1327,66418.95631,62.64878626,9340.544462,0
+1328,44047.66656,27.31337199,2096.917501,0
+1329,24821.21413,19.24390259,874.3242555,0
+1330,35583.61854,63.05439716,27.25248225,0
+1331,25289.60724,21.28056335,2130.793535,0
+1332,39770.12866,45.19093801,280.8785474,0
+1333,59511.1387,29.27411054,2520.514452,0
+1334,51211.65404,45.62856826,4093.360006,0
+1335,56530.49727,45.54492831,5957.993317,0
+1336,42604.46298,41.93638103,7942.168145,0
+1337,66642.00775,56.16766872,4958.067776,0
+1338,35527.83449,47.44952906,325.1195915,0
+1339,66896.76531,31.54546803,387.3944203,0
+1340,51980.35954,35.41570329,6243.04503,0
+1341,40081.42056,43.11674328,770.7775496,0
+1342,50167.67175,42.04748763,5592.651807,0
+1343,39545.95959,43.70086672,5787.658045,0
+1344,43372.39761,55.1945837,474.5253267,0
+1345,33084.16985,59.02910226,5762.469958,0
+1346,53187.97965,63.55816426,4879.846139,0
+1347,48290.88046,30.03676084,4902.975221,0
+1348,66078.76935,45.53632503,3664.621452,0
+1349,51547.16666,53.11192749,6563.41158,0
+1350,39393.14058,52.73927401,5415.054667,0
+1351,69592.01083,63.238625,13025.05657,0
+1352,54588.50119,31.07765403,2847.819173,0
+1353,44964.0106,48.41480327,693.2147138,0
+1354,46081.64555,50.06910454,1487.786041,0
+1355,45564.01535,22.28801022,715.8366044,0
+1356,62657.60254,28.17425706,5771.088254,0
+1357,67921.63211,35.85197819,1399.875472,0
+1358,59514.01238,57.01784581,2504.722649,0
+1359,48422.53611,41.85424768,3520.565901,0
+1360,22001.31745,31.61728481,2155.812173,0
+1361,52529.69877,18.81280424,9808.19094,1
+1362,24061.46316,34.51152011,3980.578783,1
+1363,23450.87213,34.40636966,1419.805523,0
+1364,32866.57824,44.88061703,6037.007733,0
+1365,30958.90796,43.60356595,1558.930765,0
+1366,27550.89527,29.73292642,3944.219318,1
+1367,36024.93789,51.80688647,4155.44929,0
+1368,46801.27429,34.60522061,5315.97382,0
+1369,27082.71898,60.27796277,4990.557123,0
+1370,65435.03538,19.84650416,12727.99755,1
+1371,59295.74108,51.34979947,493.7144299,0
+1372,45435.26724,21.04219778,2143.386972,0
+1373,61742.60958,34.55981004,326.9895676,0
+1374,31396.86601,34.99668137,3719.230135,0
+1375,35916.70415,53.54044336,6401.189486,0
+1376,43969.60416,25.48304865,7455.920157,1
+1377,60624.81537,39.85778773,6740.716136,0
+1378,69939.32968,55.63762125,2225.224533,0
+1379,69755.32016,44.54368228,13766.05124,0
+1380,69478.39876,22.65633974,10229.40788,1
+1381,34192.16052,27.9972893,5233.663228,1
+1382,57457.85794,50.71466253,3608.805202,0
+1383,63910.33466,56.63563264,8986.718948,0
+1384,26643.80899,19.28962851,1413.783224,0
+1385,23985.07542,24.4328115,2284.209129,0
+1386,63660.64881,50.28296012,7832.572411,0
+1387,44102.33009,21.0142084,842.5690773,0
+1388,29409.8059,41.61039681,3388.560923,0
+1389,49294.65931,37.25489393,4574.85478,0
+1390,39553.64738,53.69063324,7063.898036,0
+1391,68583.04105,57.08784007,2922.288685,0
+1392,31060.60626,53.27721306,3729.97465,0
+1393,29190.32462,60.29122269,5239.594773,0
+1394,63437.70015,54.62814035,11963.36422,0
+1395,35243.06323,35.62987754,748.9407179,0
+1396,36475.35353,63.3304318,413.3111631,0
+1397,63271.60883,23.34209813,11298.17219,1
+1398,45540.32552,59.31814027,1490.470251,0
+1399,68565.3855,21.21090931,1231.537368,0
+1400,20063.09958,24.27833881,2495.132991,1
+1401,44222.2622,55.86147245,7443.486707,0
+1402,67839.24446,47.78258022,5609.326602,0
+1403,54009.69228,49.40990043,884.7355047,0
+1404,52234.07535,47.98450551,9255.842934,0
+1405,28423.13147,61.67145866,5282.849182,0
+1406,52623.43759,50.41852689,1156.319703,0
+1407,25636.33357,55.7820572,1239.688258,0
+1408,60842.94116,60.25514261,6608.968795,0
+1409,36727.746,58.18465417,7287.540764,0
+1410,63830.74744,35.1387838,5271.626982,0
+1411,43108.41456,22.29196192,647.8793786,0
+1412,25285.26113,19.81954403,1027.577792,0
+1413,57646.24291,62.87074846,1452.493378,0
+1414,51027.56761,61.50629662,3313.30041,0
+1415,37389.77238,34.44216878,7365.938916,1
+1416,65017.59349,26.91783316,1017.166545,0
+1417,20595.93458,45.47522442,1330.067638,0
+1418,56445.47391,55.66152026,6875.579683,0
+1419,60864.32175,44.14129754,3704.032126,0
+1420,51231.01043,62.58516727,813.0279887,0
+1421,41103.13692,63.07950736,3644.301903,0
+1422,56267.05082,43.12014146,8238.115021,0
+1423,20774.84582,35.58814413,1347.331612,0
+1424,46424.22123,59.20610592,4087.180707,0
+1425,29909.554,62.72826528,4495.278753,0
+1426,62808.50507,56.77153074,6465.75059,0
+1427,41243.80514,52.07526842,4161.573148,0
+1428,46089.14789,63.29653317,1618.218357,0
+1429,69191.23338,57.38518469,6270.574035,0
+1430,60846.66501,32.67339488,8974.492021,1
+1431,66558.93437,48.51616071,3090.992455,0
+1432,27428.28187,54.32718563,1287.632081,0
+1433,60912.79896,60.68736389,3870.333893,0
+1434,28127.50945,41.48682721,3279.557824,0
+1435,64029.54348,36.15775109,1644.339177,0
+1436,61836.73562,29.54548658,10971.97464,1
+1437,37005.07185,58.89032024,1068.887398,0
+1438,56003.5734,18.25026519,3639.900038,0
+1439,58038.92625,54.00212561,538.2305227,0
+1440,29237.2562,24.59757384,23.91642787,0
+1441,33265.79055,21.58345902,5968.442038,1
+1442,66236.92716,35.91910784,2756.9723,0
+1443,41978.7125,52.53010216,1603.924862,0
+1444,63453.22313,23.91570541,10668.36351,1
+1445,24985.59066,50.1327548,2017.139948,0
+1446,53593.1132,62.88581,1428.189214,0
+1447,54179.72187,52.90507993,10028.01586,0
+1448,20126.41377,36.46094444,1432.355862,0
+1449,51180.83971,56.78991141,2875.44523,0
+1450,36455.70151,38.47891862,3437.076895,0
+1451,39188.94529,22.39910978,3545.162249,0
+1452,47852.9269,38.93593926,3295.320061,0
+1453,20014.48947,43.2022035,2426.306223,0
+1454,28630.00951,27.29153003,4406.995056,1
+1455,66688.91312,48.08527027,9690.308798,0
+1456,53226.19441,43.61874729,5686.643116,0
+1457,35609.47835,47.88639354,2574.093432,0
+1458,64065.68286,43.28767314,771.7174942,0
+1459,54935.65838,42.95419475,7921.83051,0
+1460,67800.58133,28.94329698,5035.139378,0
+1461,46893.33671,43.68609808,9131.864419,0
+1462,54648.96698,56.49055625,10674.77021,0
+1463,31410.50729,36.20457331,5797.292398,0
+1464,36989.58954,33.75563245,556.5559407,0
+1465,33198.12828,30.14201203,4285.386912,1
+1466,47704.38083,21.84036088,2717.079485,0
+1467,30569.5727,37.47767833,4752.557572,0
+1468,61398.68707,63.2944038,9008.154521,0
+1469,67750.82599,33.51874317,6855.986311,0
+1470,47637.86203,51.05145093,6708.673591,0
+1471,38357.51752,25.54630783,2548.413916,0
+1472,43156.30527,27.84683467,2413.011907,0
+1473,41101.54295,35.65403369,5240.114373,0
+1474,59475.49718,36.73713048,2628.262124,0
+1475,40708.91941,32.81676887,5532.343843,1
+1476,30391.4733,59.26477079,2072.634066,0
+1477,46024.14456,24.17451622,4318.377722,0
+1478,66529.48522,59.42979515,6337.674939,0
+1479,68115.98033,37.29177117,7458.559482,0
+1480,38423.08429,29.20911929,3676.568354,0
+1481,33227.28018,23.14898157,6470.410381,1
+1482,61674.45723,54.82930153,4054.551771,0
+1483,26931.06825,41.28060416,3668.646773,0
+1484,60040.99384,44.1414116,2659.694541,0
+1485,26181.24241,42.66303152,2618.973497,0
+1486,61552.21751,61.08761215,4042.539734,0
+1487,29705.07473,41.83413714,1912.205091,0
+1488,53934.81227,21.47434043,2085.817639,0
+1489,23007.38788,48.97252372,2296.795327,0
+1490,48552.84341,29.37808354,5650.889688,0
+1491,66370.88876,63.11349631,5176.361161,0
+1492,49140.26986,43.64116195,8832.651707,0
+1493,39684.9818,33.62885053,2590.928175,0
+1494,32025.40445,37.50658678,217.488528,0
+1495,55568.17946,42.75697379,6114.867546,0
+1496,45898.51352,24.6631496,5617.178645,1
+1497,39217.90992,30.10142049,864.6240529,0
+1498,34070.604,27.29405159,1401.685061,0
+1499,66768.36121,49.13087482,4255.367636,0
+1500,31400.85843,62.58585538,4464.404268,0
+1501,49335.75726,43.62837513,2549.620474,0
+1502,51774.05251,47.78184138,1508.761776,0
+1503,43064.64735,43.9394257,787.0471897,0
+1504,41226.13468,49.1241523,2155.660059,0
+1505,43044.51778,60.84842437,1661.71346,0
+1506,33546.29204,54.69847514,5347.295507,0
+1507,69209.33087,26.03284952,6284.833573,0
+1508,32291.54455,39.17461364,277.3875685,0
+1509,66274.0729,21.82560426,11576.54224,1
+1510,34102.7912,42.05373123,1269.254575,0
+1511,21144.56287,21.35588554,703.363923,0
+1512,41049.97459,49.84094132,5890.113644,0
+1513,36351.27773,33.863571,6619.832683,1
+1514,63144.45921,32.09867363,812.5725496,0
+1515,32086.91354,28.41077647,6362.390354,1
+1516,28873.16732,62.23474707,992.5777177,0
+1517,65359.29615,18.60512247,7707.240563,0
+1518,49064.28847,43.37234458,5636.35344,0
+1519,23763.06056,39.39309718,2950.314863,0
+1520,51845.94256,43.41943507,8750.832088,0
+1521,67035.32642,46.09920974,11276.62254,0
+1522,49240.7625,53.25457982,8004.35984,0
+1523,36132.32759,18.71333256,3009.39734,0
+1524,67006.80649,36.1980031,3692.169172,0
+1525,39453.64561,32.4015456,436.9352469,0
+1526,52205.60706,24.64014386,1135.152226,0
+1527,46319.4168,45.14678836,1523.072058,0
+1528,29398.72742,41.41217588,4673.766198,0
+1529,31135.60771,19.00967065,2457.91369,0
+1530,65603.81676,19.02164232,11775.35458,1
+1531,41362.50837,44.36380808,607.965612,0
+1532,60302.559,52.18494901,6509.698608,0
+1533,54468.27921,23.87681513,68.62545627,0
+1534,47683.71578,32.30653595,4752.287877,0
+1535,38160.1165,31.3281223,3429.901579,0
+1536,22925.81208,34.74104443,2547.279742,0
+1537,64087.85881,38.03717583,722.5195892,0
+1538,65824.51566,40.62192013,2643.106432,0
+1539,53451.93154,49.65761603,10529.72349,0
+1540,36455.48471,35.26034072,2464.162321,0
+1541,39573.34144,29.13702618,5785.884275,1
+1542,41052.36578,49.91170718,4652.951748,0
+1543,37895.18173,54.51514932,6071.340205,0
+1544,44827.23377,56.29849542,2639.916846,0
+1545,28341.08677,39.96176879,2248.242914,0
+1546,56887.2028,36.41703326,10969.59669,0
+1547,25146.59568,21.05419926,2890.652793,0
+1548,54739.16452,28.02186979,7218.968224,1
+1549,30497.20451,28.47694441,4573.59409,1
+1550,25358.89794,41.17179443,2220.2256,0
+1551,29993.5633,49.05577318,2749.585697,0
+1552,64675.77948,30.51510922,4628.603003,0
+1553,56256.03887,22.16050255,5452.244532,0
+1554,31702.3343,28.4226721,3587.722389,0
+1555,34113.11328,30.83356232,6360.154897,1
+1556,44666.01285,54.7025233,7548.444373,0
+1557,39421.36684,26.43064278,6111.961017,1
+1558,21683.19372,46.02739322,339.5922689,0
+1559,65697.59284,36.28615968,5644.653159,0
+1560,68657.7893,35.76410817,2427.949887,0
+1561,66981.413,27.48095465,6678.5628,0
+1562,45971.13349,27.39847292,4776.490486,0
+1563,42965.99275,45.19554599,8109.051409,0
+1564,50895.81034,18.95700206,5556.83987,0
+1565,46175.03194,36.91534391,1064.081875,0
+1566,44984.89912,51.74721229,4584.611816,0
+1567,66941.86486,22.54073556,12380.62471,1
+1568,31022.14485,39.17585766,6144.939436,0
+1569,46583.1996,32.70437491,6241.270508,1
+1570,56201.84143,43.27752018,8346.320922,0
+1571,31587.06486,56.32561627,2677.825713,0
+1572,40716.19089,25.80565159,2389.700759,0
+1573,64966.06564,28.37929369,11495.7311,1
+1574,68503.20589,19.28053543,3580.463677,0
+1575,33867.50226,30.15785425,5714.026374,1
+1576,54195.01517,39.30174824,6649.801459,0
+1577,50565.33709,62.65586538,693.1964169,0
+1578,57216.10102,31.82232807,3554.389365,0
+1579,29849.96714,39.92872415,3678.899676,0
+1580,29072.15179,38.47588837,1589.438432,0
+1581,29775.14222,21.03497172,3327.236235,0
+1582,46672.71314,54.54870377,1408.497717,0
+1583,66393.71115,58.61227209,9540.416626,0
+1584,29338.25645,25.69012912,5120.406797,1
+1585,67289.58568,26.72740046,13376.79771,1
+1586,45980.33434,31.94832367,5929.09803,1
+1587,34163.62565,45.78271792,6617.400172,0
+1588,52216.8158,23.637136,6803.333393,1
+1589,62313.27763,60.91730571,925.7955921,0
+1590,49205.6371,24.62202976,3393.856589,0
+1591,65688.7315,24.56447541,3673.870415,0
+1592,43489.82845,51.73379038,6501.041226,0
+1593,40966.67453,46.75507215,2393.524149,0
+1594,37261.44712,23.71839249,2075.519822,0
+1595,58775.40389,45.6972166,5673.599822,0
+1596,39395.83041,36.37047119,7557.873338,0
+1597,21144.16215,58.39219715,987.7941458,0
+1598,33126.13272,50.96395425,4169.992872,0
+1599,30931.50602,35.88248498,1074.787904,0
+1600,31936.94201,59.03712775,4087.995048,0
+1601,38157.02968,51.52814013,5628.012004,0
+1602,21032.81869,30.08246411,4024.089367,1
+1603,50238.53247,34.55520077,2567.615154,0
+1604,67346.66246,34.90151683,6752.122458,0
+1605,33261.64602,18.22962939,586.6510962,0
+1606,53113.0361,59.43689228,10080.52438,0
+1607,42749.99032,56.41909458,4626.538637,0
+1608,42108.19992,26.99135128,1020.978164,0
+1609,61344.53221,20.17553224,7172.654332,0
+1610,54738.68229,26.77192946,6210.728279,0
+1611,69695.15045,26.42448341,8418.25316,1
+1612,62507.35478,27.95702726,6590.77723,0
+1613,61922.77464,24.808657,1933.08292,0
+1614,58023.72377,42.75183866,2785.779563,0
+1615,27010.88377,36.60962245,2373.175255,0
+1616,21194.61617,25.91319002,1102.848094,0
+1617,68338.0974,34.33447148,12840.69671,1
+1618,67772.79368,41.51526086,5037.933861,0
+1619,67131.80269,58.06280852,2271.404537,0
+1620,33159.21728,42.34317793,2135.532137,0
+1621,66087.08847,51.14572202,11039.28872,0
+1622,60362.34427,24.69412307,10306.70536,1
+1623,54609.46518,18.41373634,5618.20457,0
+1624,63637.28183,26.85198754,9955.225362,1
+1625,40918.5703,37.18584542,3813.699268,0
+1626,51486.13032,33.55102974,3955.113351,0
+1627,44896.25649,48.61068103,3787.639141,0
+1628,24877.68441,29.82362039,1546.422886,0
+1629,52263.3555,34.29609224,10161.94667,1
+1630,42775.52551,39.22708316,6145.987757,0
+1631,67064.01367,18.17604345,8945.289469,1
+1632,50307.94468,51.91293237,7207.941173,0
+1633,37432.68096,22.66916169,4445.502385,0
+1634,30084.15883,18.45082514,737.2537244,0
+1635,61427.41464,20.10800883,2163.312487,0
+1636,54718.85279,29.52485768,2883.284107,0
+1637,47923.57551,57.21906913,6931.716435,0
+1638,22880.7276,18.42886766,1909.215139,0
+1639,46118.5501,23.97400067,2728.311486,0
+1640,35082.38569,41.15368948,2918.477721,0
+1641,38387.32228,30.0760336,6453.507839,1
+1642,57413.57224,43.9119505,9421.298413,0
+1643,28198.09734,62.43771619,4370.793619,0
+1644,50117.85704,32.82728384,3599.068821,0
+1645,34876.33293,53.41569725,3102.347059,0
+1646,64126.49168,19.29785353,4956.941565,0
+1647,41916.69268,48.14870817,6106.109586,0
+1648,50052.29293,27.4822349,5589.328271,0
+1649,39158.91751,41.29678218,6887.738421,0
+1650,62219.03754,19.5239827,5831.521429,0
+1651,67151.31861,51.65509895,3941.698673,0
+1652,46166.16313,25.99612062,901.7531177,0
+1653,23881.78651,32.89370972,1190.630105,0
+1654,48445.11312,38.97956768,8733.442215,0
+1655,32441.65201,58.70955658,840.7142066,0
+1656,33820.18651,61.05088434,4342.178111,0
+1657,61812.90135,52.96198773,3124.312409,0
+1658,25347.57266,61.64539487,2188.503086,0
+1659,33965.52371,43.91274646,3123.898738,0
+1660,23641.70268,56.81360339,4203.50356,0
+1661,50660.90425,52.16866404,7511.003494,0
+1662,44037.24398,58.44050724,5269.518403,0
+1663,51657.12396,35.41469759,609.3508858,0
+1664,46573.24438,53.11079369,5533.292189,0
+1665,26922.46222,44.15557121,3950.00079,0
+1666,48414.25154,21.95358986,2105.709505,0
+1667,43974.84053,47.43241103,8371.493105,0
+1668,65913.83201,22.7890518,12972.41836,1
+1669,64715.99897,60.93941035,11173.80845,0
+1670,25481.98791,48.36229289,4005.816148,0
+1671,54170.53261,37.44105072,1048.932372,0
+1672,51653.70474,19.877512,1853.419156,0
+1673,66054.50623,39.07713889,10321.0987,0
+1674,60019.44714,19.38241478,6978.347128,0
+1675,31523.95286,62.27492278,5697.021469,0
+1676,65660.94854,22.19499034,93.15264188,0
+1677,61893.48364,19.1799065,6038.162662,0
+1678,49230.09821,47.84611477,8375.729867,0
+1679,38337.82947,55.50695263,5691.09349,0
+1680,64016.43339,44.27695019,10048.39421,0
+1681,46308.64516,40.70646159,6815.485141,0
+1682,66209.14427,45.18819383,7134.656119,0
+1683,47770.71142,33.94936609,5366.868793,0
+1684,29856.48632,18.05587449,4731.816864,1
+1685,21451.49729,52.18401962,1719.038044,0
+1686,59673.17045,57.28667146,7533.679839,0
+1687,47481.42964,20.49522153,9402.876118,1
+1688,36219.77291,56.83890067,4280.794199,0
+1689,59458.70434,56.43017456,1513.327637,0
+1690,67010.84098,51.5222956,11646.91061,0
+1691,58693.41942,27.17628489,4033.153519,0
+1692,43041.04139,46.99845733,2245.505278,0
+1693,31920.41272,52.15906047,217.1879621,0
+1694,32771.12541,58.93258487,1853.68197,0
+1695,55487.14713,32.10271948,178.6924716,0
+1696,68406.80717,46.05627261,2491.460861,0
+1697,37277.12306,28.35490842,4242.640648,0
+1698,39762.52658,25.66994986,3809.347155,0
+1699,41674.24314,54.65833392,3203.204656,0
+1700,25789.74203,45.31621115,4442.33178,0
+1701,24575.05989,36.69002906,1667.748767,0
+1702,58082.3601,60.15632703,9175.667318,0
+1703,67881.8805,53.26011154,10503.57125,0
+1704,50115.0549,26.77897816,3447.002152,0
+1705,40443.20363,33.65929892,1857.252327,0
+1706,65824.83738,19.67324128,154.9456163,0
+1707,51199.86984,22.40357681,4064.818093,0
+1708,67032.28946,44.32616679,5487.820266,0
+1709,42205.6829,23.43490545,2444.737196,0
+1710,37730.36211,52.42988101,5273.559352,0
+1711,47398.31104,50.17342698,9041.878835,0
+1712,48933.20969,50.06578295,5071.371891,0
+1713,53078.85583,49.17618969,10566.35387,0
+1714,53236.993,57.93261219,703.6021978,0
+1715,58121.95469,58.36380871,5161.107409,0
+1716,57261.15139,40.23255914,2527.755923,0
+1717,52102.5909,19.37246483,8799.819842,1
+1718,45165.92595,37.90000438,5534.550798,0
+1719,58809.29247,37.45918855,5470.587846,0
+1720,36598.34047,41.96212964,6849.29481,0
+1721,62096.28261,25.02343215,8034.747774,1
+1722,68114.07098,47.19519398,4325.099268,0
+1723,67978.46685,23.45665138,7382.502551,0
+1724,26615.5243,53.35032216,3458.193614,0
+1725,51254.37001,50.6494071,8747.208629,0
+1726,34428.97264,27.3684103,6016.615091,1
+1727,60974.58714,33.89574856,6165.65882,0
+1728,63330.73455,30.23024362,5170.899852,0
+1729,58168.47407,27.47152114,2935.367657,0
+1730,59579.60921,51.1302136,2319.362857,0
+1731,52219.8955,47.67986773,6560.469542,0
+1732,28700.87259,28.79704182,5090.310491,1
+1733,27193.74305,21.40959607,4518.858351,1
+1734,67417.571,29.91098356,6478.402532,0
+1735,57341.43277,23.47849796,784.8948568,0
+1736,64056.53612,48.86906318,5982.805039,0
+1737,66370.69351,38.40550487,5906.034309,0
+1738,45045.43165,58.62369495,8489.405985,0
+1739,58609.13148,22.09757985,4270.532996,0
+1740,53289.06797,32.30020689,7395.513416,1
+1741,60309.32883,34.37905483,2343.073833,0
+1742,45139.48639,19.61720917,1743.691464,0
+1743,22815.64061,61.72656548,2749.079844,0
+1744,45215.01469,27.83884812,383.8501673,0
+1745,40568.07518,35.94146628,5990.318608,0
+1746,43721.25181,55.12770834,5923.392464,0
+1747,38129.75487,19.08440959,3964.729278,0
+1748,22547.96164,57.62641276,2957.295712,0
+1749,57468.05944,62.265046,8452.955624,0
+1750,25534.67352,37.87175619,1084.966942,0
+1751,26325.50339,56.35027775,3336.131472,0
+1752,65913.83084,36.47775765,11738.91571,0
+1753,67119.13596,18.05518851,2725.240313,0
+1754,62020.46813,56.65353651,114.2098881,0
+1755,37965.84934,27.8285796,299.0547059,0
+1756,62114.85602,30.74947746,12115.89231,1
+1757,36871.06176,46.03436164,792.7110544,0
+1758,65030.90935,36.70069066,2231.976166,0
+1759,23193.6046,41.93605652,548.5961163,0
+1760,59568.62432,40.55891909,7685.326744,0
+1761,50527.58417,26.65296268,5639.245689,0
+1762,60776.11021,34.20694181,10382.43968,1
+1763,61632.28271,34.43080878,3028.591328,0
+1764,45930.45265,49.99133072,7765.252827,0
+1765,25857.76559,41.75835442,1810.232339,0
+1766,55093.92123,55.17608333,6485.30159,0
+1767,42301.33448,19.50343568,1480.61489,0
+1768,51903.53425,59.76266204,8807.867971,0
+1769,64398.14616,35.5975403,1674.905633,0
+1770,41089.51083,57.62741738,997.1841685,0
+1771,36727.5509,24.59731819,794.5568182,0
+1772,38163.39454,63.25165246,454.3076768,0
+1773,35949.89641,56.7387456,3680.177028,0
+1774,44979.80219,32.5319016,6045.089487,1
+1775,48211.58184,30.55734418,2606.124698,0
+1776,28267.08995,54.6462767,965.3732272,0
+1777,33816.22334,60.24819138,5265.743252,0
+1778,33078.99598,36.32719969,6278.316279,0
+1779,36019.8172,42.84566569,2987.962123,0
+1780,34238.53029,63.43418801,6002.93511,0
+1781,62064.52068,22.82585726,2972.381023,0
+1782,44867.61524,55.81275256,366.1011044,0
+1783,37162.88822,28.87660671,3110.531147,0
+1784,65680.94802,62.77942662,8838.231305,0
+1785,58772.85748,46.50503835,7048.005343,0
+1786,32435.24811,43.06626362,5685.405228,0
+1787,58028.2132,50.09548172,5753.895027,0
+1788,60595.27533,62.22070887,4534.490222,0
+1789,36565.80389,19.89940228,1888.334736,0
+1790,20742.69697,61.59842116,2295.818094,0
+1791,46666.63801,18.74557575,7677.823856,1
+1792,32203.56694,61.16757056,838.0214411,0
+1793,36535.31539,29.87489182,271.7251877,0
+1794,28163.29507,58.00352914,2121.151956,0
+1795,39019.35774,31.79270886,3196.559769,0
+1796,24709.08325,54.74520391,1915.385594,0
+1797,43052.96856,31.52685355,488.9372735,0
+1798,25003.91611,53.41157775,2183.713426,0
+1799,46696.89266,34.199782,4732.498144,0
+1800,50112.4622,41.30463745,5067.032925,0
+1801,43265.90032,44.74331012,6194.07205,0
+1802,67802.69446,49.03798708,13443.47318,0
+1803,55408.70595,43.32280682,10300.28125,0
+1804,67048.893,55.05304129,10839.91376,0
+1805,40262.59764,51.79885818,6535.85195,0
+1806,46427.49918,61.84653541,5671.45056,0
+1807,46911.1971,23.43098081,4263.853588,0
+1808,57359.55243,34.79526286,10011.41068,1
+1809,34569.30464,63.64065153,6254.527617,0
+1810,52797.40104,21.12701044,1080.42349,0
+1811,56630.39526,57.97316146,8442.891373,0
+1812,45245.73975,35.82444267,1974.009904,0
+1813,20803.61454,61.89225017,758.4348491,0
+1814,57717.60679,48.79781292,3153.222829,0
+1815,20647.88765,20.32164556,725.4568686,0
+1816,59046.45715,36.82711952,8237.046829,0
+1817,62662.25883,25.29886488,1965.921357,0
+1818,33614.49461,46.47308182,4837.787511,0
+1819,48765.12887,50.07041654,5183.859126,0
+1820,57240.75694,41.57139076,313.6279418,0
+1821,49973.66646,43.91861469,363.899917,0
+1822,41255.93969,45.58326501,5296.907773,0
+1823,61129.72316,35.10917797,11302.76769,0
+1824,48938.58344,59.70792423,3028.834619,0
+1825,68648.2414,27.92001002,9425.707309,1
+1826,41250.82854,39.07818304,7651.577272,0
+1827,22415.65476,40.68729838,4371.715441,0
+1828,24112.49939,35.97133752,3285.499948,0
+1829,41692.60518,62.12124981,1708.712503,0
+1830,23516.7277,27.36269519,559.9053229,0
+1831,53812.22648,44.91915229,3245.041667,0
+1832,29750.2948,45.54445543,3627.987077,0
+1833,22633.67692,37.59693031,553.5208586,0
+1834,28713.83052,54.70084552,1936.813257,0
+1835,63321.90927,19.48791488,8092.98278,1
+1836,35276.58799,28.57213319,6820.315404,1
+1837,35914.60931,60.80509128,520.9960335,0
+1838,31568.14432,63.86398451,5067.410013,0
+1839,39934.06749,31.60796663,184.7443024,0
+1840,48614.84968,61.30129349,5984.950784,0
+1841,29838.12481,25.89508406,5913.649556,1
+1842,57745.35888,36.72961032,5540.464047,0
+1843,44447.5293,32.71813418,2714.403108,0
+1844,51768.00534,30.54451147,6632.036203,1
+1845,34891.14044,55.04893523,6152.314492,0
+1846,45382.8079,42.51634459,2742.454975,0
+1847,40719.49032,22.9269144,6415.086244,1
+1848,55145.78501,57.88245864,8968.678877,0
+1849,48752.42408,30.76336091,8934.785761,1
+1850,55763.42742,30.58544797,7913.837734,1
+1851,36431.16141,46.45279704,6783.361363,0
+1852,40522.82828,63.88714083,7720.780489,0
+1853,42465.66975,58.01657008,7314.976322,0
+1854,38561.94404,45.87983104,4831.111171,0
+1855,54957.44967,59.50636724,6976.463275,0
+1856,24822.06984,29.02037885,2361.166802,0
+1857,25252.48774,23.78830375,434.8674516,0
+1858,25671.74258,18.74645599,2272.14762,0
+1859,60672.14559,43.05590862,6279.687007,0
+1860,60729.94924,40.77350178,5006.850087,0
+1861,40240.72756,26.95900532,7498.630447,1
+1862,57513.81746,33.09201951,6921.491029,1
+1863,64287.39763,45.88390644,6301.594778,0
+1864,48428.03365,33.93239331,7718.479795,1
+1865,55313.83225,25.21256484,9733.113189,1
+1866,27045.39957,50.22120054,2503.7884,0
+1867,58216.07198,27.40448065,9581.833306,1
+1868,34722.96483,22.22338695,4073.411901,0
+1869,58503.77101,42.37251293,7050.432526,0
+1870,55299.78724,62.19314775,8052.381283,0
+1871,49501.90592,50.78811185,2226.81958,0
+1872,61765.70904,59.95587347,3649.643103,0
+1873,48430.99367,18.50809359,6069.649094,1
+1874,66366.95742,41.57616997,465.0115658,0
+1875,55320.78001,29.41721633,5990.716973,0
+1876,48774.28816,62.84084913,3728.483342,0
+1877,61679.95316,24.1914258,3060.030168,0
+1878,61485.1796,60.18819954,3211.670281,0
+1879,24402.44017,52.02759737,101.2185381,0
+1880,21258.90278,54.22456338,706.6197387,0
+1881,48763.68054,28.0602953,8172.052504,1
+1882,24406.89381,37.9053185,1733.403111,0
+1883,61693.58631,25.68422605,1568.863689,0
+1884,22748.03304,26.94071725,108.6299113,0
+1885,21479.94672,24.3142805,1098.073365,0
+1886,51286.6564,45.85982714,1134.234384,0
+1887,27153.66392,48.81803283,3177.517372,0
+1888,36370.49398,39.67078913,2855.2161,0
+1889,32400.54496,61.67923932,3591.797505,0
+1890,60434.16443,63.21861647,2474.248112,0
+1891,57303.47976,52.15536585,10491.63215,0
+1892,42994.68224,36.42561073,4453.824617,0
+1893,68339.80794,23.36532355,2505.868398,0
+1894,49292.30314,20.62232701,967.1345882,0
+1895,57802.4297,43.04172886,6796.590935,0
+1896,50779.38079,39.43591481,6859.836596,0
+1897,35993.98976,53.93902055,93.89580488,0
+1898,21771.12934,33.68777873,350.4455484,0
+1899,61414.80126,56.88918916,9743.609259,0
+1900,35784.66349,46.54787028,110.2028905,0
+1901,24791.1867,39.64327145,4844.680983,0
+1902,49048.75736,52.05179371,6363.113668,0
+1903,69852.05872,62.20231314,9246.265058,0
+1904,21217.74746,21.36568696,2690.768134,1
+1905,48031.06741,43.67016376,7826.325909,0
+1906,64072.31322,61.15839923,2426.008622,0
+1907,56689.4639,41.00340032,5740.591698,0
+1908,45769.25952,55.82719728,8236.476519,0
+1909,35020.48877,24.99191048,6832.803042,1
+1910,56751.92851,59.20442489,7877.330041,0
+1911,27363.6318,44.38642089,3215.263093,0
+1912,48455.71741,27.47626829,1780.507334,0
+1913,21424.09133,36.91843838,1795.223958,0
+1914,69992.33271,41.77123143,52.87219028,0
+1915,68110.23995,32.17157472,11029.66771,1
+1916,48015.55474,28.2417962,54.00824238,0
+1917,23102.21779,35.76168337,1779.574528,0
+1918,46134.85414,54.86544593,8716.611259,0
+1919,48547.96138,56.64147426,1940.870699,0
+1920,26095.02691,58.10209089,5143.490416,0
+1921,64057.84479,59.85843482,5774.281958,0
+1922,24454.19062,52.39086216,864.9687379,0
+1923,40506.94401,52.24151412,5961.531816,0
+1924,43421.04574,27.21744021,4705.757083,0
+1925,55881.5418,33.30668529,8383.074165,1
+1926,45917.60069,45.15712066,8253.273858,0
+1927,52901.90954,60.26135933,729.3773772,0
+1928,41183.82466,56.03236488,7606.993239,0
+1929,25379.91548,24.92908735,4693.111697,1
+1930,27514.08847,36.27868438,192.1446105,0
+1931,44241.283,19.98253883,8733.179295,1
+1932,29076.33771,41.2224627,286.2644342,0
+1933,60536.91287,32.32617541,3132.551831,0
+1934,47881.956,38.09981235,5575.635648,0
+1935,49144.37106,51.89382023,1633.03578,0
+1936,33707.80104,59.91764355,321.5789312,0
+1937,46442.28279,28.84595832,1484.561548,0
+1938,25602.95725,28.4463766,2214.922493,0
+1939,61236.39608,36.00169172,6562.903837,0
+1940,48187.34788,55.53300959,2003.41185,0
+1941,29933.20193,18.65902132,5953.521871,1
+1942,41027.90736,44.77193547,4369.218876,0
+1943,49990.66011,45.54275512,1896.754994,0
+1944,59792.50859,24.18749914,660.2414526,0
+1945,35879.51999,41.07293472,5335.403499,0
+1946,29102.22172,27.1292334,1890.447478,0
+1947,30047.81941,51.07732459,5768.742735,0
+1948,59299.16272,36.98427692,4944.056264,0
+1949,64484.0148,33.09942354,1391.601802,0
+1950,36352.42229,43.71886432,6239.247526,0
+1951,66034.7543,60.7262946,3913.782124,0
+1952,51650.27137,40.1050569,3743.003437,0
+1953,31898.15991,41.31715911,2015.182969,0
+1954,58780.2335,18.70173368,5029.707636,0
+1955,67754.10467,42.9807849,2989.950997,0
+1956,48500.26815,61.30480025,7054.606149,0
+1957,55704.79816,48.51661891,5594.332971,0
+1958,50458.9582,52.31456503,9852.889427,0
+1959,48263.00343,28.54960456,7798.793463,1
+1960,38755.16271,56.35542661,4244.498033,0
+1961,68131.6643,57.40525789,7813.23983,0
+1962,28991.42394,37.16515694,1249.347564,0
+1963,35108.55795,40.74341282,4002.991276,0
+1964,28858.59887,23.69458972,3764.815174,1
+1965,22800.79677,28.19825664,3740.900936,1
+1966,29572.9759,39.2304778,5006.253823,0
+1967,21982.01737,34.91551629,4265.173704,1
+1968,45576.83836,38.67104976,4952.653346,0
+1969,55068.66894,51.7573598,4852.766598,0
+1970,56441.01624,43.20699111,9043.756044,0
+1971,68047.92531,47.69451986,4023.064765,0
+1972,36275.73586,30.30818374,644.3841948,0
+1973,52389.36685,54.96931281,10398.82059,0
+1974,23678.37611,47.4664851,1779.814597,0
+1975,37707.64295,31.34404787,268.2909708,0
+1976,57753.56896,54.23591535,5067.449964,0
+1977,30529.96329,47.60440226,6046.840845,0
+1978,44022.26874,31.1926268,1707.67287,0
+1979,58533.88468,40.51896256,7832.443321,0
+1980,33702.53183,48.14840359,922.0365897,0
+1981,40236.87207,52.58077285,4354.314412,0
+1982,62619.15599,43.99946111,3959.611772,0
+1983,50738.36219,45.99319907,9719.562798,0
+1984,64466.76014,33.32714402,8537.369666,1
+1985,64636.40219,60.886966,2583.106425,0
+1986,22371.52219,39.14222532,2291.856428,0
+1987,67994.98847,38.62225938,7289.014109,0
+1988,49640.0047,20.54240863,5760.858734,0
+1989,42067.24645,24.27061152,4601.606183,0
+1990,43662.09269,25.25260926,7269.596897,1
+1991,34237.57542,34.10165393,2658.090632,0
+1992,26300.44655,45.53938522,2317.393678,0
+1993,30803.80616,23.25008412,623.0241528,0
+1994,54421.41016,26.8219284,3273.631823,0
+1995,24254.70079,37.75162224,2225.284643,0
+1996,59221.04487,48.51817941,1926.729397,0
+1997,69516.12757,23.16210447,3503.176156,0
+1998,44311.44926,28.0171669,5522.786693,1
+1999,43756.0566,63.97179584,1622.722598,0
+2000,69436.57955,56.15261703,7378.833599,0
diff --git a/examples/FastAPI/data/database.py b/examples/FastAPI/data/database.py
index 7369077e..80e67dec 100644
--- a/examples/FastAPI/data/database.py
+++ b/examples/FastAPI/data/database.py
@@ -1,10 +1,8 @@
-import os
-
-from supabase import Client, create_client
-
# variables for database and url configuration
from config import Config
+from supabase import Client, create_client
+
class SupabaseDB:
"""
diff --git a/examples/FastAPI/main.py b/examples/FastAPI/main.py
index 73491a54..7921d3f8 100644
--- a/examples/FastAPI/main.py
+++ b/examples/FastAPI/main.py
@@ -1,13 +1,14 @@
import json
-from fastapi import FastAPI, Request, Response
-# redis related imports
-from fastapi_redis_cache import FastApiRedisCache, cache_one_week
-
# supabase client
from config import Config
+
# database cursor to supabase
from data.database import SupabaseDB
+from fastapi import FastAPI, Request, Response
+
+# redis related imports
+from fastapi_redis_cache import FastApiRedisCache, cache_one_week
# application factory
app = FastAPI(title="Supafast Tutorial", debug=True)
From bf9de1d9ec39985aef3e6ff665ef73f1f8f5ac64 Mon Sep 17 00:00:00 2001
From: Sourcery AI <>
Date: Sun, 27 Mar 2022 19:46:08 +0000
Subject: [PATCH 184/737] 'Refactored by Sourcery'
---
examples/FastAPI/main.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/examples/FastAPI/main.py b/examples/FastAPI/main.py
index 7921d3f8..b6c2022a 100644
--- a/examples/FastAPI/main.py
+++ b/examples/FastAPI/main.py
@@ -67,8 +67,7 @@ def query():
}
"""
- data = SupabaseDB.supabase.table("credit_data").select("*").limit(1).execute()
- return data
+ return SupabaseDB.supabase.table("credit_data").select("*").limit(1).execute()
@app.get("/cachedResults")
From 80ceab3130e53ef56789cbbb4223289af9edf0ef Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 28 Mar 2022 23:34:04 +0000
Subject: [PATCH 185/737] 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]
---
poetry.lock | 52 +++++++++++++++++++++++++-------------------------
pyproject.toml | 2 +-
2 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 21c36d2f..7df12381 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -54,7 +54,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "black"
-version = "22.1.0"
+version = "22.3.0"
description = "The uncompromising code formatter."
category = "dev"
optional = false
@@ -65,7 +65,7 @@ click = ">=8.0.0"
mypy-extensions = ">=0.4.3"
pathspec = ">=0.9.0"
platformdirs = ">=2"
-tomli = ">=1.1.0"
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""}
typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "1de76433d24eb3e48d4c570ccd9e1735d1a353e6efdb2ec59fbb08105cdfabfa"
+content-hash = "b2c27083044d9262936e7c0045a7e31e8153a2a70189721fbeb14319aec88956"
[metadata.files]
anyio = [
@@ -1104,29 +1104,29 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
black = [
- {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"},
- {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"},
- {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"},
- {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"},
- {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"},
- {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"},
- {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"},
- {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"},
- {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"},
- {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"},
- {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"},
- {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"},
- {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"},
- {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"},
- {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"},
- {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"},
- {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"},
- {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"},
- {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"},
- {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"},
- {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"},
- {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"},
- {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"},
+ {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"},
+ {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"},
+ {file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"},
+ {file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"},
+ {file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"},
+ {file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"},
+ {file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"},
+ {file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"},
+ {file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"},
+ {file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"},
+ {file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"},
+ {file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"},
+ {file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"},
+ {file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"},
+ {file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"},
+ {file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"},
+ {file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"},
+ {file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"},
+ {file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"},
+ {file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"},
+ {file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"},
+ {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"},
+ {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"},
]
bleach = [
{file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"},
diff --git a/pyproject.toml b/pyproject.toml
index 5a765e72..2a313c7b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -23,7 +23,7 @@ httpx = "^0.21.3"
[tool.poetry.dev-dependencies]
pre-commit = "^2.17.0"
-black = "^22.1"
+black = "^22.3"
pytest = "^7.1.1"
flake8 = "^4.0.1"
isort = "^5.9.3"
From 9e9942b7e86314682ea4c98c9a0043bab78f18ad Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Thu, 31 Mar 2022 16:18:12 +0200
Subject: [PATCH 186/737] feat: add magic
---
pyproject.toml | 1 +
supabase/client.py | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/pyproject.toml b/pyproject.toml
index 5a765e72..d2de1b90 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -20,6 +20,7 @@ postgrest-py = ">=0.9.1,<0.11.0"
realtime = "^0.0.4"
gotrue = "^0.5.0"
httpx = "^0.21.3"
+supafunc="^0.1.0"
[tool.poetry.dev-dependencies]
pre-commit = "^2.17.0"
diff --git a/supabase/client.py b/supabase/client.py
index 2d05988a..4cb40c0a 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -1,7 +1,9 @@
+import re
from typing import Any, Dict
from httpx import Response
from postgrest_py import SyncPostgrestClient, SyncRequestBuilder
+from supafunc import FunctionsClient
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.client_options import ClientOptions
@@ -42,6 +44,14 @@ def __init__(
self.realtime_url: str = f"{supabase_url}/realtime/v1".replace("http", "ws")
self.auth_url: str = f"{supabase_url}/auth/v1"
self.storage_url = f"{supabase_url}/storage/v1"
+ is_platform = re.search(r"(supabase\.co)|(supabase\.in)", supabase_url)
+ if is_platform:
+ url_parts = supabase_url.split(".")
+ self.functions_url = (
+ f"{url_parts[0]}.functions.{url_parts[1]}.{url_parts[2]}"
+ )
+ else:
+ self.functions_url = f"{supabase_url}/functions/v1"
self.schema: str = options.schema
# Instantiate clients.
@@ -62,6 +72,9 @@ def __init__(
headers=options.headers,
)
+ def functions(self):
+ return FunctionsClient(self.functions_url, self._get_auth_headers())
+
def storage(self) -> SupabaseStorageClient:
"""Create instance of the storage client"""
return SupabaseStorageClient(self.storage_url, self._get_auth_headers())
From 728ad555b1c42b6ddc68b255cc111f4ed37bff83 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Thu, 31 Mar 2022 17:05:20 +0200
Subject: [PATCH 187/737] chore: update deps
---
poetry.lock | 405 ++++++++++++++++++++++++-------------------------
pyproject.toml | 2 +-
2 files changed, 199 insertions(+), 208 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 21c36d2f..859999ed 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -54,7 +54,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "black"
-version = "22.1.0"
+version = "22.3.0"
description = "The uncompromising code formatter."
category = "dev"
optional = false
@@ -65,7 +65,7 @@ click = ">=8.0.0"
mypy-extensions = ">=0.4.3"
pathspec = ">=0.9.0"
platformdirs = ">=2"
-tomli = ">=1.1.0"
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""}
typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}
@@ -117,7 +117,7 @@ python-versions = ">=3.6.1"
[[package]]
name = "charset-normalizer"
-version = "2.0.10"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -128,11 +128,11 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.1.1"
description = "Composable command line interface toolkit"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -140,7 +140,7 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "click-log"
-version = "0.3.2"
+version = "0.4.0"
description = "Logging integration for Click"
category = "dev"
optional = false
@@ -159,7 +159,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "commitizen"
-version = "2.21.2"
+version = "2.23.0"
description = "Python commitizen client tool"
category = "dev"
optional = false
@@ -193,7 +193,7 @@ toml = ["tomli"]
[[package]]
name = "cryptography"
-version = "36.0.1"
+version = "36.0.2"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "dev"
optional = false
@@ -258,7 +258,7 @@ setuptools_scm = "*"
[[package]]
name = "filelock"
-version = "3.4.2"
+version = "3.6.0"
description = "A platform independent file lock."
category = "dev"
optional = false
@@ -295,7 +295,7 @@ smmap = ">=3.0.1,<6"
[[package]]
name = "gitpython"
-version = "3.1.26"
+version = "3.1.27"
description = "GitPython is a python library used to interact with Git repositories"
category = "dev"
optional = false
@@ -327,7 +327,7 @@ python-versions = ">=3.6"
[[package]]
name = "httpcore"
-version = "0.14.5"
+version = "0.14.7"
description = "A minimal low-level HTTP client."
category = "main"
optional = false
@@ -365,11 +365,11 @@ http2 = ["h2 (>=3,<5)"]
[[package]]
name = "identify"
-version = "2.4.4"
+version = "2.4.12"
description = "File identification library for Python"
category = "dev"
optional = false
-python-versions = ">=3.6.1"
+python-versions = ">=3.7"
[package.extras]
license = ["ukkonen"]
@@ -408,7 +408,7 @@ python-versions = "*"
[[package]]
name = "invoke"
-version = "1.6.0"
+version = "1.7.0"
description = "Pythonic task execution"
category = "dev"
optional = false
@@ -442,11 +442,11 @@ trio = ["trio", "async-generator"]
[[package]]
name = "jinja2"
-version = "3.0.3"
+version = "3.1.1"
description = "A very fast and expressive template engine."
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
MarkupSafe = ">=2.0"
@@ -474,11 +474,11 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[[package]]
name = "markupsafe"
-version = "2.0.1"
+version = "2.1.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "mccabe"
@@ -536,7 +536,7 @@ testing = ["coverage", "nose"]
[[package]]
name = "platformdirs"
-version = "2.4.1"
+version = "2.5.1"
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
category = "dev"
optional = false
@@ -593,7 +593,7 @@ virtualenv = ">=20.0.8"
[[package]]
name = "prompt-toolkit"
-version = "3.0.24"
+version = "3.0.28"
description = "Library for building powerful interactive command lines in Python"
category = "dev"
optional = false
@@ -729,18 +729,18 @@ cli = ["click (>=5.0)"]
[[package]]
name = "python-gitlab"
-version = "2.10.1"
+version = "3.3.0"
description = "Interact with GitLab API"
category = "dev"
optional = false
-python-versions = ">=3.6.0"
+python-versions = ">=3.7.0"
[package.dependencies]
requests = ">=2.25.0"
requests-toolbelt = ">=0.9.1"
[package.extras]
-autocompletion = ["argcomplete (>=1.10.0,<2)"]
+autocompletion = ["argcomplete (>=1.10.0,<3)"]
yaml = ["PyYaml (>=5.2)"]
[[package]]
@@ -801,7 +801,7 @@ docs = ["Sphinx (>=3.3,<4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)", "sphinx-auto
[[package]]
name = "readme-renderer"
-version = "32.0"
+version = "34.0"
description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse"
category = "dev"
optional = false
@@ -813,7 +813,7 @@ docutils = ">=0.13.1"
Pygments = ">=2.5.1"
[package.extras]
-md = ["cmarkgfm (>=0.5.0,<0.7.0)"]
+md = ["cmarkgfm (>=0.8.0)"]
[[package]]
name = "realtime"
@@ -930,6 +930,17 @@ category = "main"
optional = false
python-versions = ">=3.5"
+[[package]]
+name = "supafunc"
+version = "0.1.3"
+description = "Functions library for Supabase"
+category = "main"
+optional = false
+python-versions = ">=3.7,<4.0"
+
+[package.dependencies]
+httpx = ">=0.21.3,<0.22.0"
+
[[package]]
name = "termcolor"
version = "1.1.0"
@@ -948,11 +959,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "tomli"
-version = "1.2.3"
+version = "2.0.1"
description = "A lil' TOML parser"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "tomlkit"
@@ -964,7 +975,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "tqdm"
-version = "4.62.3"
+version = "4.63.1"
description = "Fast, Extensible Progress Meter"
category = "dev"
optional = false
@@ -980,7 +991,7 @@ telegram = ["requests"]
[[package]]
name = "twine"
-version = "3.7.1"
+version = "3.8.0"
description = "Collection of utilities for publishing packages on PyPI"
category = "dev"
optional = false
@@ -996,10 +1007,11 @@ requests = ">=2.20"
requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0"
rfc3986 = ">=1.4.0"
tqdm = ">=4.14"
+urllib3 = ">=1.26.0"
[[package]]
name = "typed-ast"
-version = "1.5.1"
+version = "1.5.2"
description = "a fork of Python 2 and 3 ast modules with type comment support"
category = "dev"
optional = false
@@ -1007,7 +1019,7 @@ python-versions = ">=3.6"
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -1015,20 +1027,20 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "virtualenv"
-version = "20.13.0"
+version = "20.14.0"
description = "Virtual Python Environment builder"
category = "dev"
optional = false
@@ -1084,7 +1096,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "1de76433d24eb3e48d4c570ccd9e1735d1a353e6efdb2ec59fbb08105cdfabfa"
+content-hash = "96d71d912b047145562b2647a2d2712feb5d400274de665d86673797bc0e91e2"
[metadata.files]
anyio = [
@@ -1104,29 +1116,29 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
black = [
- {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"},
- {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"},
- {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"},
- {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"},
- {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"},
- {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"},
- {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"},
- {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"},
- {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"},
- {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"},
- {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"},
- {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"},
- {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"},
- {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"},
- {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"},
- {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"},
- {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"},
- {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"},
- {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"},
- {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"},
- {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"},
- {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"},
- {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"},
+ {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"},
+ {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"},
+ {file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"},
+ {file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"},
+ {file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"},
+ {file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"},
+ {file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"},
+ {file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"},
+ {file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"},
+ {file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"},
+ {file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"},
+ {file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"},
+ {file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"},
+ {file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"},
+ {file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"},
+ {file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"},
+ {file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"},
+ {file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"},
+ {file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"},
+ {file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"},
+ {file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"},
+ {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"},
+ {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"},
]
bleach = [
{file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"},
@@ -1193,24 +1205,24 @@ cfgv = [
{file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
- {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.1.1-py3-none-any.whl", hash = "sha256:5e0d195c2067da3136efb897449ec1e9e6c98282fbf30d7f9e164af9be901a6b"},
+ {file = "click-8.1.1.tar.gz", hash = "sha256:7ab900e38149c9872376e8f9b5986ddcaf68c0f413cf73678a0bca5547e6f976"},
]
click-log = [
- {file = "click-log-0.3.2.tar.gz", hash = "sha256:16fd1ca3fc6b16c98cea63acf1ab474ea8e676849dc669d86afafb0ed7003124"},
- {file = "click_log-0.3.2-py2.py3-none-any.whl", hash = "sha256:eee14dc37cdf3072158570f00406572f9e03e414accdccfccd4c538df9ae322c"},
+ {file = "click-log-0.4.0.tar.gz", hash = "sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975"},
+ {file = "click_log-0.4.0-py2.py3-none-any.whl", hash = "sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
commitizen = [
- {file = "commitizen-2.21.2-py3-none-any.whl", hash = "sha256:22e7904880eb435d8ddc92bf481d1ae99ebac775222989bb48b15da03ceb6238"},
- {file = "commitizen-2.21.2.tar.gz", hash = "sha256:64fda8d9d679d2d3d2422c028cb641602fb672560a5485bee9773259f9c4f07c"},
+ {file = "commitizen-2.23.0-py3-none-any.whl", hash = "sha256:11497f3733f30f7a5408a9118e031bd53344c996d656550289a83fa3b6d511cc"},
+ {file = "commitizen-2.23.0.tar.gz", hash = "sha256:5685d44ac235e3da0a02592e11c92aeebcf4864e059a6f5a59382207264fb671"},
]
coverage = [
{file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"},
@@ -1256,26 +1268,26 @@ coverage = [
{file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"},
]
cryptography = [
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
- {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
- {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
- {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb"},
+ {file = "cryptography-36.0.2-cp36-abi3-win32.whl", hash = "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6"},
+ {file = "cryptography-36.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3"},
+ {file = "cryptography-36.0.2.tar.gz", hash = "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9"},
]
decli = [
{file = "decli-0.5.2-py3-none-any.whl", hash = "sha256:d3207bc02d0169bf6ed74ccca09ce62edca0eb25b0ebf8bf4ae3fb8333e15ca0"},
@@ -1297,8 +1309,8 @@ dotty-dict = [
{file = "dotty_dict-1.3.0.tar.gz", hash = "sha256:eb0035a3629ecd84397a68f1f42f1e94abd1c34577a19cd3eacad331ee7cbaf0"},
]
filelock = [
- {file = "filelock-3.4.2-py3-none-any.whl", hash = "sha256:cf0fc6a2f8d26bd900f19bf33915ca70ba4dd8c56903eeb14e1e7a2fd7590146"},
- {file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"},
+ {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"},
+ {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"},
]
flake8 = [
{file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
@@ -1309,8 +1321,8 @@ gitdb = [
{file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"},
]
gitpython = [
- {file = "GitPython-3.1.26-py3-none-any.whl", hash = "sha256:26ac35c212d1f7b16036361ca5cff3ec66e11753a0d677fb6c48fa4e1a9dd8d6"},
- {file = "GitPython-3.1.26.tar.gz", hash = "sha256:fc8868f63a2e6d268fb25f481995ba185a85a66fcad126f039323ff6635669ee"},
+ {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"},
+ {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"},
]
gotrue = [
{file = "gotrue-0.5.0-py3-none-any.whl", hash = "sha256:ed81289fd6a542caa05e6ab63d436561b7a04754783f4b9dd6b1114a04c146de"},
@@ -1321,16 +1333,16 @@ h11 = [
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
]
httpcore = [
- {file = "httpcore-0.14.5-py3-none-any.whl", hash = "sha256:2621ee769d0236574df51b305c5f4c69ca8f0c7b215221ad247b1ee42a9a9de1"},
- {file = "httpcore-0.14.5.tar.gz", hash = "sha256:435ab519628a6e2393f67812dea3ca5c6ad23b457412cd119295d9f906d96a2b"},
+ {file = "httpcore-0.14.7-py3-none-any.whl", hash = "sha256:47d772f754359e56dd9d892d9593b6f9870a37aeb8ba51e9a88b09b3d68cfade"},
+ {file = "httpcore-0.14.7.tar.gz", hash = "sha256:7503ec1c0f559066e7e39bc4003fd2ce023d01cf51793e3c173b864eb456ead1"},
]
httpx = [
{file = "httpx-0.21.3-py3-none-any.whl", hash = "sha256:df9a0fd43fa79dbab411d83eb1ea6f7a525c96ad92e60c2d7f40388971b25777"},
{file = "httpx-0.21.3.tar.gz", hash = "sha256:7a3eb67ef0b8abbd6d9402248ef2f84a76080fa1c839f8662e6eb385640e445a"},
]
identify = [
- {file = "identify-2.4.4-py2.py3-none-any.whl", hash = "sha256:aa68609c7454dbcaae60a01ff6b8df1de9b39fe6e50b1f6107ec81dcda624aa6"},
- {file = "identify-2.4.4.tar.gz", hash = "sha256:6b4b5031f69c48bf93a646b90de9b381c6b5f560df4cbe0ed3cf7650ae741e4d"},
+ {file = "identify-2.4.12-py2.py3-none-any.whl", hash = "sha256:5f06b14366bd1facb88b00540a1de05b69b310cbc2654db3c7e07fa3a4339323"},
+ {file = "identify-2.4.12.tar.gz", hash = "sha256:3f3244a559290e7d3deb9e9adc7b33594c1bc85a9dd82e0f1be519bf12a1ec17"},
]
idna = [
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
@@ -1345,9 +1357,8 @@ iniconfig = [
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
invoke = [
- {file = "invoke-1.6.0-py2-none-any.whl", hash = "sha256:e6c9917a1e3e73e7ea91fdf82d5f151ccfe85bf30cc65cdb892444c02dbb5f74"},
- {file = "invoke-1.6.0-py3-none-any.whl", hash = "sha256:769e90caeb1bd07d484821732f931f1ad8916a38e3f3e618644687fc09cb6317"},
- {file = "invoke-1.6.0.tar.gz", hash = "sha256:374d1e2ecf78981da94bfaf95366216aaec27c2d6a7b7d5818d92da55aa258d3"},
+ {file = "invoke-1.7.0-py3-none-any.whl", hash = "sha256:a5159fc63dba6ca2a87a1e33d282b99cea69711b03c64a35bb4e1c53c6c4afa0"},
+ {file = "invoke-1.7.0.tar.gz", hash = "sha256:e332e49de40463f2016315f51df42313855772be86435686156bc18f45b5cc6c"},
]
isort = [
{file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
@@ -1358,83 +1369,54 @@ jeepney = [
{file = "jeepney-0.7.1.tar.gz", hash = "sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f"},
]
jinja2 = [
- {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
- {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
+ {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"},
+ {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"},
]
keyring = [
{file = "keyring-23.5.0-py3-none-any.whl", hash = "sha256:b0d28928ac3ec8e42ef4cc227822647a19f1d544f21f96457965dc01cf555261"},
{file = "keyring-23.5.0.tar.gz", hash = "sha256:9012508e141a80bd1c0b6778d5c610dd9f8c464d75ac6774248500503f972fb9"},
]
markupsafe = [
- {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
- {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
+ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
]
mccabe = [
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
@@ -1461,8 +1443,8 @@ pkginfo = [
{file = "pkginfo-1.8.2.tar.gz", hash = "sha256:542e0d0b6750e2e21c20179803e40ab50598d8066d51097a0e382cba9eb02bff"},
]
platformdirs = [
- {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"},
- {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"},
+ {file = "platformdirs-2.5.1-py3-none-any.whl", hash = "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227"},
+ {file = "platformdirs-2.5.1.tar.gz", hash = "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -1477,8 +1459,8 @@ pre-commit = [
{file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"},
]
prompt-toolkit = [
- {file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"},
- {file = "prompt_toolkit-3.0.24.tar.gz", hash = "sha256:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6"},
+ {file = "prompt_toolkit-3.0.28-py3-none-any.whl", hash = "sha256:30129d870dcb0b3b6a53efdc9d0a83ea96162ffd28ffe077e94215b233dc670c"},
+ {file = "prompt_toolkit-3.0.28.tar.gz", hash = "sha256:9f1cd16b1e86c2968f2519d7fb31dd9d669916f515612c269d14e9ed52b51650"},
]
py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
@@ -1558,8 +1540,8 @@ python-dotenv = [
{file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"},
]
python-gitlab = [
- {file = "python-gitlab-2.10.1.tar.gz", hash = "sha256:7afa7d7c062fa62c173190452265a30feefb844428efc58ea5244f3b9fc0d40f"},
- {file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
+ {file = "python-gitlab-3.3.0.tar.gz", hash = "sha256:fef25d41a62f91da82ee20f72a728b9c69eef34cf0a3005cdbb9a0b471d5b498"},
+ {file = "python_gitlab-3.3.0-py3-none-any.whl", hash = "sha256:ab1fd4c98a206f22f01f832bc58f24a09952089b7bbf67cdaee6308e7797503f"},
]
python-semantic-release = [
{file = "python-semantic-release-7.27.0.tar.gz", hash = "sha256:d115360703cc66a757f650f795fc1d8cd7fdf7688cb8645a36a713f5144b01ce"},
@@ -1609,8 +1591,8 @@ questionary = [
{file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"},
]
readme-renderer = [
- {file = "readme_renderer-32.0-py3-none-any.whl", hash = "sha256:a50a0f2123a4c1145ac6f420e1a348aafefcc9211c846e3d51df05fe3d865b7d"},
- {file = "readme_renderer-32.0.tar.gz", hash = "sha256:b512beafa6798260c7d5af3e1b1f097e58bfcd9a575da7c4ddd5e037490a5b85"},
+ {file = "readme_renderer-34.0-py3-none-any.whl", hash = "sha256:262510fe6aae81ed4e94d8b169077f325614c0b1a45916a80442c6576264a9c2"},
+ {file = "readme_renderer-34.0.tar.gz", hash = "sha256:dfb4d17f21706d145f7473e0b61ca245ba58e810cf9b2209a48239677f82e5b0"},
]
realtime = [
{file = "realtime-0.0.4-py3-none-any.whl", hash = "sha256:8c27f3c53b7e9487b4c5682d8b1ed9b1eb9bb3c6aa570b647499e3dc69e85d72"},
@@ -1652,6 +1634,10 @@ sniffio = [
{file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"},
{file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"},
]
+supafunc = [
+ {file = "supafunc-0.1.3-py3-none-any.whl", hash = "sha256:9bf0625fb745aef1fcb195a05257a95a74f4269643c780a4b0b3ad1ac264c679"},
+ {file = "supafunc-0.1.3.tar.gz", hash = "sha256:b0e98e32d0017f11317a89d4e5a6acecf0a3a54bcc62695f98dda16318991ea3"},
+]
termcolor = [
{file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"},
]
@@ -1660,53 +1646,58 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
tomli = [
- {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"},
- {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"},
+ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
+ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
]
tomlkit = [
{file = "tomlkit-0.7.0-py2.py3-none-any.whl", hash = "sha256:6babbd33b17d5c9691896b0e68159215a9387ebfa938aa3ac42f4a4beeb2b831"},
{file = "tomlkit-0.7.0.tar.gz", hash = "sha256:ac57f29693fab3e309ea789252fcce3061e19110085aa31af5446ca749325618"},
]
tqdm = [
- {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"},
- {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"},
+ {file = "tqdm-4.63.1-py2.py3-none-any.whl", hash = "sha256:6461b009d6792008d0000e1b0c7ca50195ec78c0e808a3a6b668a56a3236c3a5"},
+ {file = "tqdm-4.63.1.tar.gz", hash = "sha256:4230a49119a416c88cc47d0d2d32d5d90f1a282d5e497d49801950704e49863d"},
]
twine = [
- {file = "twine-3.7.1-py3-none-any.whl", hash = "sha256:8c120845fc05270f9ee3e9d7ebbed29ea840e41f48cd059e04733f7e1d401345"},
- {file = "twine-3.7.1.tar.gz", hash = "sha256:28460a3db6b4532bde6a5db6755cf2dce6c5020bada8a641bb2c5c7a9b1f35b8"},
+ {file = "twine-3.8.0-py3-none-any.whl", hash = "sha256:d0550fca9dc19f3d5e8eadfce0c227294df0a2a951251a4385797c8a6198b7c8"},
+ {file = "twine-3.8.0.tar.gz", hash = "sha256:8efa52658e0ae770686a13b675569328f1fba9837e5de1867bfe5f46a9aefe19"},
]
typed-ast = [
- {file = "typed_ast-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d8314c92414ce7481eee7ad42b353943679cf6f30237b5ecbf7d835519e1212"},
- {file = "typed_ast-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b53ae5de5500529c76225d18eeb060efbcec90ad5e030713fe8dab0fb4531631"},
- {file = "typed_ast-1.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:24058827d8f5d633f97223f5148a7d22628099a3d2efe06654ce872f46f07cdb"},
- {file = "typed_ast-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a6d495c1ef572519a7bac9534dbf6d94c40e5b6a608ef41136133377bba4aa08"},
- {file = "typed_ast-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:de4ecae89c7d8b56169473e08f6bfd2df7f95015591f43126e4ea7865928677e"},
- {file = "typed_ast-1.5.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:256115a5bc7ea9e665c6314ed6671ee2c08ca380f9d5f130bd4d2c1f5848d695"},
- {file = "typed_ast-1.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:7c42707ab981b6cf4b73490c16e9d17fcd5227039720ca14abe415d39a173a30"},
- {file = "typed_ast-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:71dcda943a471d826ea930dd449ac7e76db7be778fcd722deb63642bab32ea3f"},
- {file = "typed_ast-1.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4f30a2bcd8e68adbb791ce1567fdb897357506f7ea6716f6bbdd3053ac4d9471"},
- {file = "typed_ast-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ca9e8300d8ba0b66d140820cf463438c8e7b4cdc6fd710c059bfcfb1531d03fb"},
- {file = "typed_ast-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9caaf2b440efb39ecbc45e2fabde809cbe56272719131a6318fd9bf08b58e2cb"},
- {file = "typed_ast-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9bcad65d66d594bffab8575f39420fe0ee96f66e23c4d927ebb4e24354ec1af"},
- {file = "typed_ast-1.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:591bc04e507595887160ed7aa8d6785867fb86c5793911be79ccede61ae96f4d"},
- {file = "typed_ast-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:a80d84f535642420dd17e16ae25bb46c7f4c16ee231105e7f3eb43976a89670a"},
- {file = "typed_ast-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:38cf5c642fa808300bae1281460d4f9b7617cf864d4e383054a5ef336e344d32"},
- {file = "typed_ast-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b6ab14c56bc9c7e3c30228a0a0b54b915b1579613f6e463ba6f4eb1382e7fd4"},
- {file = "typed_ast-1.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2b8d7007f6280e36fa42652df47087ac7b0a7d7f09f9468f07792ba646aac2d"},
- {file = "typed_ast-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:b6d17f37f6edd879141e64a5db17b67488cfeffeedad8c5cec0392305e9bc775"},
- {file = "typed_ast-1.5.1.tar.gz", hash = "sha256:484137cab8ecf47e137260daa20bafbba5f4e3ec7fda1c1e69ab299b75fa81c5"},
+ {file = "typed_ast-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266"},
+ {file = "typed_ast-1.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596"},
+ {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985"},
+ {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76"},
+ {file = "typed_ast-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a"},
+ {file = "typed_ast-1.5.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837"},
+ {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78"},
+ {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e"},
+ {file = "typed_ast-1.5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d"},
+ {file = "typed_ast-1.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd"},
+ {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88"},
+ {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7"},
+ {file = "typed_ast-1.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30"},
+ {file = "typed_ast-1.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4"},
+ {file = "typed_ast-1.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca"},
+ {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb"},
+ {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b"},
+ {file = "typed_ast-1.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7"},
+ {file = "typed_ast-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098"},
+ {file = "typed_ast-1.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344"},
+ {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e"},
+ {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e"},
+ {file = "typed_ast-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5"},
+ {file = "typed_ast-1.5.2.tar.gz", hash = "sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
virtualenv = [
- {file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"},
- {file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"},
+ {file = "virtualenv-20.14.0-py2.py3-none-any.whl", hash = "sha256:1e8588f35e8b42c6ec6841a13c5e88239de1e6e4e4cedfd3916b306dc826ec66"},
+ {file = "virtualenv-20.14.0.tar.gz", hash = "sha256:8e5b402037287126e81ccde9432b95a8be5b19d36584f64957060a3488c11ca8"},
]
wcwidth = [
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
diff --git a/pyproject.toml b/pyproject.toml
index d2de1b90..4648044d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -20,7 +20,7 @@ postgrest-py = ">=0.9.1,<0.11.0"
realtime = "^0.0.4"
gotrue = "^0.5.0"
httpx = "^0.21.3"
-supafunc="^0.1.0"
+supafunc = "^0.1.3"
[tool.poetry.dev-dependencies]
pre-commit = "^2.17.0"
From 8fc1a695fe1986f917639afadcf09b2adf8a412c Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Thu, 31 Mar 2022 17:14:28 +0200
Subject: [PATCH 188/737] chore:update import
---
supabase/client.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/supabase/client.py b/supabase/client.py
index 4cb40c0a..57584b23 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -3,7 +3,6 @@
from httpx import Response
from postgrest_py import SyncPostgrestClient, SyncRequestBuilder
-from supafunc import FunctionsClient
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.client_options import ClientOptions
From e4327695e64bc0297c6ba33bd1e3cf37a1cf9976 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 1 Apr 2022 06:39:09 -0400
Subject: [PATCH 189/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 7df12381..1eb07574 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -159,7 +159,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "commitizen"
-version = "2.21.2"
+version = "2.23.0"
description = "Python commitizen client tool"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "b2c27083044d9262936e7c0045a7e31e8153a2a70189721fbeb14319aec88956"
+content-hash = "7f69c35003feaf0e166d33fe7214ba7a8833b254a987d65e85b2ff386d213dde"
[metadata.files]
anyio = [
@@ -1209,8 +1209,8 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
commitizen = [
- {file = "commitizen-2.21.2-py3-none-any.whl", hash = "sha256:22e7904880eb435d8ddc92bf481d1ae99ebac775222989bb48b15da03ceb6238"},
- {file = "commitizen-2.21.2.tar.gz", hash = "sha256:64fda8d9d679d2d3d2422c028cb641602fb672560a5485bee9773259f9c4f07c"},
+ {file = "commitizen-2.23.0-py3-none-any.whl", hash = "sha256:11497f3733f30f7a5408a9118e031bd53344c996d656550289a83fa3b6d511cc"},
+ {file = "commitizen-2.23.0.tar.gz", hash = "sha256:5685d44ac235e3da0a02592e11c92aeebcf4864e059a6f5a59382207264fb671"},
]
coverage = [
{file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"},
diff --git a/pyproject.toml b/pyproject.toml
index 2a313c7b..ab604371 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -28,7 +28,7 @@ pytest = "^7.1.1"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
-commitizen = "^2.21.2"
+commitizen = "^2.23.0"
python-semantic-release = "^7.27.0"
python-dotenv = "^0.20.0"
From b60dc8a3d014afe27420cfb7ceb13640303ca082 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Apr 2022 12:45:02 -0400
Subject: [PATCH 190/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 10 +++++-----
pyproject.toml | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 1eb07574..2640fe1b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -576,11 +576,11 @@ pydantic = ">=1.9.0,<2.0.0"
[[package]]
name = "pre-commit"
-version = "2.17.0"
+version = "2.18.1"
description = "A framework for managing and maintaining multi-language pre-commit hooks."
category = "dev"
optional = false
-python-versions = ">=3.6.1"
+python-versions = ">=3.7"
[package.dependencies]
cfgv = ">=2.0.0"
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "7f69c35003feaf0e166d33fe7214ba7a8833b254a987d65e85b2ff386d213dde"
+content-hash = "9f6e536c5511435557dd696f98abafb5951facca4aa46802dd80f3c9b5b2f69f"
[metadata.files]
anyio = [
@@ -1473,8 +1473,8 @@ postgrest-py = [
{file = "postgrest_py-0.10.0-py3-none-any.whl", hash = "sha256:c30ec588b830d158a54209ae7c53959e3007b04907559e08277155030469734f"},
]
pre-commit = [
- {file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"},
- {file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"},
+ {file = "pre_commit-2.18.1-py2.py3-none-any.whl", hash = "sha256:02226e69564ebca1a070bd1f046af866aa1c318dbc430027c50ab832ed2b73f2"},
+ {file = "pre_commit-2.18.1.tar.gz", hash = "sha256:5d445ee1fa8738d506881c5d84f83c62bb5be6b2838e32207433647e8e5ebe10"},
]
prompt-toolkit = [
{file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"},
diff --git a/pyproject.toml b/pyproject.toml
index ab604371..373fc302 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -22,7 +22,7 @@ gotrue = "^0.5.0"
httpx = "^0.21.3"
[tool.poetry.dev-dependencies]
-pre-commit = "^2.17.0"
+pre-commit = "^2.18.1"
black = "^22.3"
pytest = "^7.1.1"
flake8 = "^4.0.1"
From 02d33e6af301f4e514067ce865dedd9d78b8a09b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Apr 2022 12:45:23 -0400
Subject: [PATCH 191/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 2640fe1b..ce656a5b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -563,7 +563,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.10.0"
+version = "0.10.1"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
@@ -1469,8 +1469,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
postgrest-py = [
- {file = "postgrest-py-0.10.0.tar.gz", hash = "sha256:8d4d9cbf0c153d777968c4137f77f2bcd18eb79e37b128680fefbe36fa74c3ed"},
- {file = "postgrest_py-0.10.0-py3-none-any.whl", hash = "sha256:c30ec588b830d158a54209ae7c53959e3007b04907559e08277155030469734f"},
+ {file = "postgrest-py-0.10.1.tar.gz", hash = "sha256:bc1daa88c1e74fbc8dd3060511625c847236bb57def712eea81b7fd056751155"},
+ {file = "postgrest_py-0.10.1-py3-none-any.whl", hash = "sha256:8702abc9e7e89aaa0ecc8606a1c4e295053050e41a0e402e56e25fe66cd857ff"},
]
pre-commit = [
{file = "pre_commit-2.18.1-py2.py3-none-any.whl", hash = "sha256:02226e69564ebca1a070bd1f046af866aa1c318dbc430027c50ab832ed2b73f2"},
From 590724a6e8451e9f0ce486dbdf30f2527271e514 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Apr 2022 12:47:39 -0400
Subject: [PATCH 192/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 18 +++++++++---------
pyproject.toml | 2 +-
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index ce656a5b..70cb255a 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -745,7 +745,7 @@ yaml = ["PyYaml (>=5.2)"]
[[package]]
name = "python-semantic-release"
-version = "7.27.0"
+version = "7.28.0"
description = "Automatic Semantic Versioning for Python projects"
category = "dev"
optional = false
@@ -760,7 +760,7 @@ invoke = ">=1.4.1,<2"
python-gitlab = ">=2,<4"
requests = ">=2.25,<3"
semver = ">=2.10,<3"
-tomlkit = "0.7.0"
+tomlkit = ">=0.10.0,<0.11.0"
twine = ">=3,<4"
[package.extras]
@@ -956,11 +956,11 @@ python-versions = ">=3.6"
[[package]]
name = "tomlkit"
-version = "0.7.0"
+version = "0.10.1"
description = "Style preserving TOML library"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6,<4.0"
[[package]]
name = "tqdm"
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "9f6e536c5511435557dd696f98abafb5951facca4aa46802dd80f3c9b5b2f69f"
+content-hash = "05bb33c3ac09951f7368d23fa0b5d7477c44cbd7432467dadf245d0837f84563"
[metadata.files]
anyio = [
@@ -1562,8 +1562,8 @@ python-gitlab = [
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
]
python-semantic-release = [
- {file = "python-semantic-release-7.27.0.tar.gz", hash = "sha256:d115360703cc66a757f650f795fc1d8cd7fdf7688cb8645a36a713f5144b01ce"},
- {file = "python_semantic_release-7.27.0-py3-none-any.whl", hash = "sha256:dd95785719b5c04fc63c29c2e363735d4d622b713b2b99b41bb0c6ded57311de"},
+ {file = "python-semantic-release-7.28.0.tar.gz", hash = "sha256:3f80f6a66d195ddd2e5a43c18d42174ee038d4dd77f959c00ab1df9bb9ccf654"},
+ {file = "python_semantic_release-7.28.0-py3-none-any.whl", hash = "sha256:446fdf4143648b7ef6d791233dcce01b1e46c6aa9fc9fd4b48f8ef5b49580a30"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
@@ -1664,8 +1664,8 @@ tomli = [
{file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"},
]
tomlkit = [
- {file = "tomlkit-0.7.0-py2.py3-none-any.whl", hash = "sha256:6babbd33b17d5c9691896b0e68159215a9387ebfa938aa3ac42f4a4beeb2b831"},
- {file = "tomlkit-0.7.0.tar.gz", hash = "sha256:ac57f29693fab3e309ea789252fcce3061e19110085aa31af5446ca749325618"},
+ {file = "tomlkit-0.10.1-py3-none-any.whl", hash = "sha256:3eba517439dcb2f84cf39f4f85fd2c3398309823a3c75ac3e73003638daf7915"},
+ {file = "tomlkit-0.10.1.tar.gz", hash = "sha256:3c517894eadef53e9072d343d37e4427b8f0b6200a70b7c9a19b2ebd1f53b951"},
]
tqdm = [
{file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"},
diff --git a/pyproject.toml b/pyproject.toml
index 373fc302..14bc7f4d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,7 +29,7 @@ flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.23.0"
-python-semantic-release = "^7.27.0"
+python-semantic-release = "^7.28.0"
python-dotenv = "^0.20.0"
[tool.semantic_release]
From 6b0797a864fa8dfe25a989216e469e8b0829e336 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 14 Apr 2022 22:22:42 -0400
Subject: [PATCH 193/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 70cb255a..2e0164b9 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -745,7 +745,7 @@ yaml = ["PyYaml (>=5.2)"]
[[package]]
name = "python-semantic-release"
-version = "7.28.0"
+version = "7.28.1"
description = "Automatic Semantic Versioning for Python projects"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "05bb33c3ac09951f7368d23fa0b5d7477c44cbd7432467dadf245d0837f84563"
+content-hash = "0e6041b7fe09702403d822dbcb1e7bf8b5da99648e544ac344211d1e3bb24e8c"
[metadata.files]
anyio = [
@@ -1562,8 +1562,8 @@ python-gitlab = [
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
]
python-semantic-release = [
- {file = "python-semantic-release-7.28.0.tar.gz", hash = "sha256:3f80f6a66d195ddd2e5a43c18d42174ee038d4dd77f959c00ab1df9bb9ccf654"},
- {file = "python_semantic_release-7.28.0-py3-none-any.whl", hash = "sha256:446fdf4143648b7ef6d791233dcce01b1e46c6aa9fc9fd4b48f8ef5b49580a30"},
+ {file = "python-semantic-release-7.28.1.tar.gz", hash = "sha256:d7f82b3d4c06b304d07689b8a1c7d0d448ff07c2ab81cd810c4f2f900f24c599"},
+ {file = "python_semantic_release-7.28.1-py3-none-any.whl", hash = "sha256:319c3e811d6e10bc3f0e967419eae0e5e9ba1e6745aa2fd94dd24e3995541ca2"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
diff --git a/pyproject.toml b/pyproject.toml
index 14bc7f4d..cdf85207 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,7 +29,7 @@ flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
commitizen = "^2.23.0"
-python-semantic-release = "^7.28.0"
+python-semantic-release = "^7.28.1"
python-dotenv = "^0.20.0"
[tool.semantic_release]
From fb0c13721aaf69d6a7b162d1a2024fdc7df77c36 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 15 Apr 2022 19:37:33 -0400
Subject: [PATCH 194/737] 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]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
pyproject.toml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 2e0164b9..2f9006a0 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -159,7 +159,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "commitizen"
-version = "2.23.0"
+version = "2.24.0"
description = "Python commitizen client tool"
category = "dev"
optional = false
@@ -1084,7 +1084,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "0e6041b7fe09702403d822dbcb1e7bf8b5da99648e544ac344211d1e3bb24e8c"
+content-hash = "6238b7635c95cd0e5783da4ef3ae412f26a5b2d9b906aca170489de1b04aaf9d"
[metadata.files]
anyio = [
@@ -1209,8 +1209,8 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
commitizen = [
- {file = "commitizen-2.23.0-py3-none-any.whl", hash = "sha256:11497f3733f30f7a5408a9118e031bd53344c996d656550289a83fa3b6d511cc"},
- {file = "commitizen-2.23.0.tar.gz", hash = "sha256:5685d44ac235e3da0a02592e11c92aeebcf4864e059a6f5a59382207264fb671"},
+ {file = "commitizen-2.24.0-py3-none-any.whl", hash = "sha256:08901b176eac6a224761d613b58fb8b19bc7d00a49282a4d4bc39e3bdb3afb50"},
+ {file = "commitizen-2.24.0.tar.gz", hash = "sha256:c867c26a394b255a93a8a225dae793dd361b25160be39015d2aa75d730728295"},
]
coverage = [
{file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"},
diff --git a/pyproject.toml b/pyproject.toml
index cdf85207..4aaea982 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -28,7 +28,7 @@ pytest = "^7.1.1"
flake8 = "^4.0.1"
isort = "^5.9.3"
pytest-cov = "^3.0.0"
-commitizen = "^2.23.0"
+commitizen = "^2.24.0"
python-semantic-release = "^7.28.1"
python-dotenv = "^0.20.0"
From 2e2a10e997572c3c00753aa7e8826e85571f9725 Mon Sep 17 00:00:00 2001
From: Sergio
Date: Fri, 15 Apr 2022 19:21:01 -0700
Subject: [PATCH 195/737] add deletion example to readme
---
README.md | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/README.md b/README.md
index 8852a9bb..d8746138 100644
--- a/README.md
+++ b/README.md
@@ -159,6 +159,18 @@ supabase: Client = create_client(url, key)
data = supabase.table("countries").update({"country": "Indonesia", "capital_city": "Jakarta"}).eq("id", 1).execute()
```
+### Deletion of Data
+
+```python
+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)
+data = supabase.table("countries").delete().eq("id", 1).execute()
+```
+
+
## Realtime Changes
Realtime changes are unfortunately still a WIP. Feel free to file PRs to [realtime-py](https://github.com/supabase-community/realtime-py)
From 00e85f3ebf1a572f96e456edfcb4f68254159d6d Mon Sep 17 00:00:00 2001
From: anand2312 <40204976+anand2312@users.noreply.github.com>
Date: Tue, 19 Apr 2022 08:45:36 +0400
Subject: [PATCH 196/737] chore: bump deps, use relative imports
---
.pre-commit-config.yaml | 4 ++--
poetry.lock | 23 +++++++++++++++++++----
pyproject.toml | 3 ++-
supabase/__init__.py | 16 +++++++---------
supabase/__version__.py | 1 +
supabase/client.py | 5 ++---
6 files changed, 33 insertions(+), 19 deletions(-)
create mode 100644 supabase/__version__.py
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 5594114e..8c23a604 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -34,8 +34,8 @@ repos:
"--ignore-init-module-imports",
]
- - repo: https://github.com/ambv/black
- rev: 21.12b0
+ - repo: https://github.com/psf/black
+ rev: "22.3.0"
hooks:
- id: black
diff --git a/poetry.lock b/poetry.lock
index 2f9006a0..fbc821e4 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -563,7 +563,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "postgrest-py"
-version = "0.10.1"
+version = "0.10.2"
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
category = "main"
optional = false
@@ -930,6 +930,17 @@ category = "main"
optional = false
python-versions = ">=3.5"
+[[package]]
+name = "storage3"
+version = "0.2.0"
+description = "Supabase Storage client for Python."
+category = "main"
+optional = false
+python-versions = ">=3.7,<4.0"
+
+[package.dependencies]
+httpx = ">=0.19,<0.22"
+
[[package]]
name = "termcolor"
version = "1.1.0"
@@ -1084,7 +1095,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "6238b7635c95cd0e5783da4ef3ae412f26a5b2d9b906aca170489de1b04aaf9d"
+content-hash = "3c0b49a407000a7464d0ab108173302bfff2499789ed209a1e428a6ab00e9f84"
[metadata.files]
anyio = [
@@ -1469,8 +1480,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
postgrest-py = [
- {file = "postgrest-py-0.10.1.tar.gz", hash = "sha256:bc1daa88c1e74fbc8dd3060511625c847236bb57def712eea81b7fd056751155"},
- {file = "postgrest_py-0.10.1-py3-none-any.whl", hash = "sha256:8702abc9e7e89aaa0ecc8606a1c4e295053050e41a0e402e56e25fe66cd857ff"},
+ {file = "postgrest-py-0.10.2.tar.gz", hash = "sha256:14e49007245f78a1ecc8bfbc108c0590d8523c4abe1ba29d20d8cbff2efcabe2"},
+ {file = "postgrest_py-0.10.2-py3-none-any.whl", hash = "sha256:46c4998efd9f3e67f954d21b565c3ab3c6cca03934a0121f2a0964b87436229c"},
]
pre-commit = [
{file = "pre_commit-2.18.1-py2.py3-none-any.whl", hash = "sha256:02226e69564ebca1a070bd1f046af866aa1c318dbc430027c50ab832ed2b73f2"},
@@ -1652,6 +1663,10 @@ sniffio = [
{file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"},
{file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"},
]
+storage3 = [
+ {file = "storage3-0.2.0-py3-none-any.whl", hash = "sha256:256eed8eb2d267c293a686363f50f3fdcbefa6fc9a39ec8c375122b1b9889100"},
+ {file = "storage3-0.2.0.tar.gz", hash = "sha256:97947b2a6d9959495296570b674095b0c5353b405d557911b6a5567b510f0251"},
+]
termcolor = [
{file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"},
]
diff --git a/pyproject.toml b/pyproject.toml
index 4aaea982..216980be 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,10 +16,11 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-postgrest-py = ">=0.9.1,<0.11.0"
+postgrest-py = ">=0.10.2,<0.11.0"
realtime = "^0.0.4"
gotrue = "^0.5.0"
httpx = "^0.21.3"
+storage3 = "^0.2.0"
[tool.poetry.dev-dependencies]
pre-commit = "^2.18.1"
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 8de6601f..91b3aa66 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,10 +1,8 @@
-__version__ = "0.5.3"
+from postgrest import APIError, APIResponse
-from postgrest_py import APIError, APIResponse
-
-from supabase import client, lib
-from supabase.client import Client, create_client
-from supabase.lib.auth_client import SupabaseAuthClient
-from supabase.lib.realtime_client import SupabaseRealtimeClient
-from supabase.lib.storage import StorageException, StorageFileAPI
-from supabase.lib.storage_client import SupabaseStorageClient
+from .__version__ import __version__
+from .client import Client, create_client
+from .lib.auth_client import SupabaseAuthClient
+from .lib.realtime_client import SupabaseRealtimeClient
+from .lib.storage import StorageException, StorageFileAPI
+from .lib.storage_client import SupabaseStorageClient
diff --git a/supabase/__version__.py b/supabase/__version__.py
new file mode 100644
index 00000000..43a1e95b
--- /dev/null
+++ b/supabase/__version__.py
@@ -0,0 +1 @@
+__version__ = "0.5.3"
diff --git a/supabase/client.py b/supabase/client.py
index 2d05988a..6b4044cd 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -1,7 +1,6 @@
from typing import Any, Dict
-from httpx import Response
-from postgrest_py import SyncPostgrestClient, SyncRequestBuilder
+from postgrest import SyncFilterRequestBuilder, SyncPostgrestClient, SyncRequestBuilder
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.client_options import ClientOptions
@@ -82,7 +81,7 @@ def from_(self, table_name: str) -> SyncRequestBuilder:
"""
return self.postgrest.from_(table_name)
- def rpc(self, fn: str, params: Dict[Any, Any]) -> Response:
+ def rpc(self, fn: str, params: Dict[Any, Any]) -> SyncFilterRequestBuilder:
"""Performs a stored procedure call.
Parameters
From 77dda5400419663b092b8ce60b80292d76d5fe52 Mon Sep 17 00:00:00 2001
From: anand2312 <40204976+anand2312@users.noreply.github.com>
Date: Tue, 19 Apr 2022 09:08:16 +0400
Subject: [PATCH 197/737] chore: switch to storage3
---
supabase/__init__.py | 3 +-
supabase/client.py | 62 +++---
supabase/lib/__init__.py | 4 +-
supabase/lib/storage/__init__.py | 2 -
supabase/lib/storage/storage_bucket_api.py | 182 ------------------
supabase/lib/storage/storage_file_api.py | 207 ---------------------
supabase/lib/storage_client.py | 23 ---
tests/test_client.py | 2 +-
tests/test_storage.py | 30 +--
9 files changed, 51 insertions(+), 464 deletions(-)
delete mode 100644 supabase/lib/storage/__init__.py
delete mode 100644 supabase/lib/storage/storage_bucket_api.py
delete mode 100644 supabase/lib/storage/storage_file_api.py
delete mode 100644 supabase/lib/storage_client.py
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 91b3aa66..26bb2022 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,8 +1,7 @@
from postgrest import APIError, APIResponse
+from storage3.utils import StorageException
from .__version__ import __version__
from .client import Client, create_client
from .lib.auth_client import SupabaseAuthClient
from .lib.realtime_client import SupabaseRealtimeClient
-from .lib.storage import StorageException, StorageFileAPI
-from .lib.storage_client import SupabaseStorageClient
diff --git a/supabase/client.py b/supabase/client.py
index 6b4044cd..5bcf96df 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -1,11 +1,11 @@
from typing import Any, Dict
from postgrest import SyncFilterRequestBuilder, SyncPostgrestClient, SyncRequestBuilder
+from storage3 import SyncStorageClient
+from storage3 import create_client as create_storage_client
from supabase.lib.auth_client import SupabaseAuthClient
from supabase.lib.client_options import ClientOptions
-from supabase.lib.realtime_client import SupabaseRealtimeClient
-from supabase.lib.storage_client import SupabaseStorageClient
class Client:
@@ -61,9 +61,11 @@ def __init__(
headers=options.headers,
)
- def storage(self) -> SupabaseStorageClient:
+ def storage(self) -> SyncStorageClient:
"""Create instance of the storage client"""
- return SupabaseStorageClient(self.storage_url, self._get_auth_headers())
+ return create_storage_client(
+ self.storage_url, self._get_auth_headers(), is_async=False
+ )
def table(self, table_name: str) -> SyncRequestBuilder:
"""Perform a table operation.
@@ -93,9 +95,9 @@ def rpc(self, fn: str, params: Dict[Any, Any]) -> SyncFilterRequestBuilder:
Returns
-------
- Response
- Returns the HTTP Response object which results from executing the
- call.
+ SyncFilterRequestBuilder
+ Returns a filter builder. This lets you apply filters on the response
+ of an RPC.
"""
return self.postgrest.rpc(fn, params)
@@ -111,29 +113,29 @@ def rpc(self, fn: str, params: Dict[Any, Any]) -> SyncFilterRequestBuilder:
# 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 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}}
- )
+ # 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 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(
diff --git a/supabase/lib/__init__.py b/supabase/lib/__init__.py
index fb9af465..c80327a6 100644
--- a/supabase/lib/__init__.py
+++ b/supabase/lib/__init__.py
@@ -1,3 +1,3 @@
-from supabase.lib import auth_client, realtime_client, storage, storage_client
+from supabase.lib import auth_client, realtime_client
-__all__ = ["auth_client", "realtime_client", "storage_client", "storage"]
+__all__ = ["auth_client", "realtime_client"]
diff --git a/supabase/lib/storage/__init__.py b/supabase/lib/storage/__init__.py
deleted file mode 100644
index 242c1499..00000000
--- a/supabase/lib/storage/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from .storage_bucket_api import StorageBucketAPI, StorageException
-from .storage_file_api import StorageFileAPI
diff --git a/supabase/lib/storage/storage_bucket_api.py b/supabase/lib/storage/storage_bucket_api.py
deleted file mode 100644
index b7ee4eff..00000000
--- a/supabase/lib/storage/storage_bucket_api.py
+++ /dev/null
@@ -1,182 +0,0 @@
-from __future__ import annotations
-
-from collections.abc import Awaitable
-from dataclasses import dataclass
-from datetime import datetime
-from typing import Any, Dict, List, Optional, Type, Union
-
-from httpx import AsyncClient, Client, HTTPError
-
-__all__ = ["Bucket", "StorageBucketAPI", "StorageException"]
-
-_RequestMethod = str
-
-
-class StorageException(Exception):
- """Error raised when an operation on the storage API fails."""
-
-
-@dataclass
-class Bucket:
- id: str
- name: str
- owner: str
- public: bool
- created_at: datetime
- updated_at: datetime
-
- def __post_init__(self) -> None:
- # created_at and updated_at are returned by the API as ISO timestamps
- # so we convert them to datetime objects
- self.created_at = datetime.fromisoformat(self.created_at) # type: ignore
- self.updated_at = datetime.fromisoformat(self.updated_at) # type: ignore
-
-
-ResponseType = Union[
- Dict[
- str, str
- ], # response from an endpoint without a custom response_class, example: create_bucket
- List[
- Bucket
- ], # response from an endpoint which returns a list of objects, example: list_buckets
- Bucket, # response from an endpoint which returns a single object, example: get_bucket
- None,
-]
-
-
-class StorageBucketAPI:
- """This class abstracts access to the endpoint to the Get, List, Empty, and Delete operations on a bucket"""
-
- def __init__(
- self, url: str, headers: Dict[str, str], is_async: bool = False
- ) -> None:
- self.url = url
- self.headers = headers
-
- self._is_async = is_async
-
- if is_async:
- self._client = AsyncClient(headers=self.headers)
- else:
- self._client = Client(headers=self.headers)
-
- def _request(
- self,
- method: _RequestMethod,
- url: str,
- json: Optional[Dict[Any, Any]] = None,
- response_class: Optional[Type] = None,
- ) -> Any:
- if self._is_async:
- return self._async_request(method, url, json, response_class)
- else:
- return self._sync_request(method, url, json, response_class)
-
- def _sync_request(
- self,
- method: _RequestMethod,
- url: str,
- json: Optional[Dict[Any, Any]] = None,
- response_class: Optional[Type] = None,
- ) -> ResponseType:
- if isinstance(self._client, AsyncClient): # only to appease the type checker
- return None
-
- response = self._client.request(method, url, json=json)
- try:
- response.raise_for_status()
- except HTTPError:
- raise StorageException(response.json())
-
- response_data = response.json()
-
- if not response_class:
- return response_data
-
- if isinstance(response_data, list):
- return [response_class(**item) for item in response_data]
- else:
- return response_class(**response_data)
-
- async def _async_request(
- self,
- method: _RequestMethod,
- url: str,
- json: Optional[Dict[Any, Any]] = None,
- response_class: Optional[Type] = None,
- ) -> ResponseType:
- if isinstance(self._client, Client): # only to appease the type checker
- return
-
- response = await self._client.request(method, url, json=json)
- try:
- response.raise_for_status()
- except HTTPError:
- raise StorageException(response.json())
-
- response_data = response.json()
-
- if not response_class:
- return response_data
-
- if isinstance(response_data, list):
- return [response_class(**item) for item in response_data]
- else:
- return response_class(**response_data)
-
- def list_buckets(self) -> Union[List[Bucket], Awaitable[List[Bucket]], None]:
- """Retrieves the details of all storage buckets within an existing product."""
- return self._request("GET", f"{self.url}/bucket", response_class=Bucket)
-
- def get_bucket(self, id: str) -> Union[Bucket, Awaitable[Bucket], None]:
- """Retrieves the details of an existing storage bucket.
-
- Parameters
- ----------
- id
- The unique identifier of the bucket you would like to retrieve.
- """
- return self._request("GET", f"{self.url}/bucket/{id}", response_class=Bucket)
-
- def create_bucket(
- self, id: str, name: str = None, public: bool = False
- ) -> Union[Dict[str, str], Awaitable[Dict[str, str]]]:
- """Creates a new storage bucket.
-
- Parameters
- ----------
- id
- A unique identifier for the bucket you are creating.
- name
- A name for the bucket you are creating. If not passed, the id is used as the name as well.
- public
- Whether the bucket you are creating should be publicly accessible. Defaults to False.
- """
- return self._request(
- "POST",
- f"{self.url}/bucket",
- json={"id": id, "name": name or id, "public": public},
- )
-
- def empty_bucket(self, id: str) -> Union[Dict[str, str], Awaitable[Dict[str, str]]]:
- """Removes all objects inside a single bucket.
-
- Parameters
- ----------
- id
- The unique identifier of the bucket you would like to empty.
- """
- return self._request("POST", f"{self.url}/bucket/{id}/empty", json={})
-
- def delete_bucket(
- self, id: str
- ) -> Union[Dict[str, str], Awaitable[Dict[str, str]]]:
- """Deletes an existing bucket. Note that you cannot delete buckets with existing objects inside. You must first
- `empty()` the bucket.
-
- Parameters
- ----------
- id
- The unique identifier of the bucket you would like to delete.
- """
- return self._request("DELETE", f"{self.url}/bucket/{id}", json={})
diff --git a/supabase/lib/storage/storage_file_api.py b/supabase/lib/storage/storage_file_api.py
deleted file mode 100644
index b9f27513..00000000
--- a/supabase/lib/storage/storage_file_api.py
+++ /dev/null
@@ -1,207 +0,0 @@
-from typing import Any
-
-import httpx
-from httpx import HTTPError
-
-
-class StorageFileAPI:
- DEFAULT_SEARCH_OPTIONS = {
- "limit": 100,
- "offset": 0,
- "sortBy": {
- "column": "name",
- "order": "asc",
- },
- }
- DEFAULT_FILE_OPTIONS = {
- "cache-control": "3600",
- "content-type": "text/plain;charset=UTF-8",
- "x-upsert": "false",
- }
-
- def __init__(self, url: str, headers: dict, bucket_id: str):
- """
- Parameters
- ----------
- url
- base url for all the operation
- headers
- the base authentication headers
- bucket_id
- the id of the bucket that we want to access, you can get the list of buckets with the SupabaseStorageClient.list_buckets()
- """
- self.url = url
- self.headers = headers
- self.bucket_id = bucket_id
- # self.loop = asyncio.get_event_loop()
- # self.replace = replace
-
- def create_signed_url(self, path: str, expires_in: int):
- """
- Parameters
- ----------
- path
- file path to be downloaded, including the current file name.
- expires_in
- number of seconds until the signed URL expires.
- """
- try:
- _path = self._get_final_path(path)
- response = httpx.post(
- f"{self.url}/object/sign/{_path}",
- json={"expiresIn": str(expires_in)},
- headers=self.headers,
- )
- data = response.json()
- data["signedURL"] = f"{self.url}{data['signedURL']}"
- response.raise_for_status()
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- print(f"Other error occurred: {err}") # Python 3.6
- else:
- return data
-
- def get_public_url(self, path: str):
- """
- Parameters
- ----------
- path
- file path to be downloaded, including the path and file name. For example `folder/image.png`.
- """
- try:
- _path = self._get_final_path(path)
- return f"{self.url}/object/public/{_path}"
- except:
- print("Public URL not found")
-
- def move(self, from_path: str, to_path: str):
- """
- Moves an existing file, optionally renaming it at the same time.
- Parameters
- ----------
- from_path
- The original file path, including the current file name. For example `folder/image.png`.
- to_path
- The new file path, including the new file name. For example `folder/image-copy.png`.
- """
- try:
- response = httpx.post(
- f"{self.url}/object/move",
- json={
- "bucketId": self.bucket_id,
- "sourceKey": from_path,
- "destinationKey": to_path,
- },
- headers=self.headers,
- )
- response.raise_for_status()
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- print(f"Other error occurred: {err}") # Python 3.6
- else:
- return response.json()
-
- def remove(self, paths: list):
- """
- Deletes files within the same bucket
- Parameters
- ----------
- paths
- An array or list of files to be deletes, including the path and file name. For example [`folder/image.png`].
- """
- try:
- response = httpx.request(
- "DELETE",
- f"{self.url}/object/{self.bucket_id}",
- json={"prefixes": paths},
- headers=self.headers,
- )
- response.raise_for_status()
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- raise err # Python 3.6
- else:
- return response.json()
-
- def list(self, path: str = None, options: dict = {}):
- """
- Lists all the files within a bucket.
- Parameters
- ----------
- path
- The folder path.
- options
- Search options, including `limit`, `offset`, and `sortBy`.
- """
- try:
- body = dict(self.DEFAULT_SEARCH_OPTIONS, **options)
- headers = dict(self.headers, **{"Content-Type": "application/json"})
- body["prefix"] = path or ""
- getdata = httpx.post(
- f"{self.url}/object/list/{self.bucket_id}",
- json=body,
- headers=headers,
- )
- getdata.raise_for_status()
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- raise err # Python 3.6
- else:
- return getdata.json()
-
- def download(self, path: str):
- """
- Downloads a file.
- Parameters
- ----------
- path The file path to be downloaded, including the path and file name. For example `folder/image.png`.
- """
- try:
- _path = self._get_final_path(path)
- response = httpx.get(f"{self.url}/object/{_path}", headers=self.headers)
-
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- raise err # Python 3.6
- else:
- return response.content
-
- def upload(self, path: str, file: Any, file_options: dict = None):
- """
- Uploads a file to an existing bucket.
- Parameters
- ----------
- path
- The relative file path including the bucket ID. Should be of the format `bucket/folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.
- file
- The File object to be stored in the bucket. or a async generator of chunks
- file_options
- HTTP headers. For example `cacheControl`
- """
- if file_options is None:
- file_options = {}
- headers = dict(self.headers, **self.DEFAULT_FILE_OPTIONS)
- headers.update(file_options)
- filename = path.rsplit("/", maxsplit=1)[-1]
- files = {"file": (filename, open(file, "rb"), headers.pop("content-type"))}
- _path = self._get_final_path(path)
- try:
- resp = httpx.post(
- f"{self.url}/object/{_path}",
- files=files,
- headers=headers,
- )
- except HTTPError as http_err:
- print(f"HTTP error occurred: {http_err}") # Python 3.6
- except Exception as err:
- raise err # Python 3.6
- else:
- return resp
-
- def _get_final_path(self, path: str):
- return f"{self.bucket_id}/{path}"
diff --git a/supabase/lib/storage_client.py b/supabase/lib/storage_client.py
deleted file mode 100644
index 2f6fe8a9..00000000
--- a/supabase/lib/storage_client.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from typing import Dict
-
-from supabase.lib.storage.storage_bucket_api import StorageBucketAPI
-from supabase.lib.storage.storage_file_api import StorageFileAPI
-
-
-class SupabaseStorageClient(StorageBucketAPI):
- """
- Manage the storage bucket and files
- Examples
- --------
- >>> url = storage_file.create_signed_url("something/test2.txt", 80) # signed url
- >>> loop.run_until_complete(storage_file.download("something/test2.txt")) # upload or download
- >>> loop.run_until_complete(storage_file.upload("something/test2.txt","path_file_upload"))
- >>> list_buckets = storage.list_buckets()
- >>> list_files = storage_file.list("something")
- """
-
- def __init__(self, url: str, headers: Dict[str, str]):
- super().__init__(url, headers)
-
- def StorageFileAPI(self, id_: str) -> StorageFileAPI:
- return StorageFileAPI(self.url, self.headers, id_)
diff --git a/tests/test_client.py b/tests/test_client.py
index 891a1832..37a50783 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -11,7 +11,7 @@
@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) -> None:
- """Ensure we can't instanciate client with nonesense values."""
+ """Ensure we can't instanciate client with nonsense values."""
from supabase import Client, create_client
_: Client = create_client(url, key)
diff --git a/tests/test_storage.py b/tests/test_storage.py
index b22dfbb1..2d0eeff4 100644
--- a/tests/test_storage.py
+++ b/tests/test_storage.py
@@ -1,17 +1,19 @@
from __future__ import annotations
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Generator
from uuid import uuid4
import pytest
+from storage3 import SyncStorageClient
+from storage3._sync.file_api import SyncBucketProxy
from supabase import StorageException
if TYPE_CHECKING:
from pathlib import Path
- from typing import Any, Callable, Dict, List
+ from typing import Callable, Dict
- from supabase import Client, StorageFileAPI, SupabaseStorageClient
+ from supabase import Client
# Global variable to track the ids from the buckets created in the tests run
@@ -28,22 +30,22 @@ def method() -> str:
@pytest.fixture(scope="module")
-def storage_client(supabase: Client) -> SupabaseStorageClient:
+def storage_client(supabase: Client) -> SyncStorageClient:
"""Creates the storage client for the whole storage tests run"""
return supabase.storage()
@pytest.fixture(scope="module", autouse=True)
def delete_left_buckets(
- request: pytest.FixtureRequest, storage_client: SupabaseStorageClient
+ request: pytest.FixtureRequest, storage_client: SyncStorageClient
):
"""Ensures no test buckets are left when a test that created a bucket fails"""
def finalizer():
for bucket in temp_test_buckets_ids:
try:
- storage_client.empty_bucket(bucket.id)
- storage_client.delete_bucket(bucket.id)
+ storage_client.empty_bucket(bucket)
+ storage_client.delete_bucket(bucket)
except StorageException as e:
# Ignore 404 responses since they mean the bucket was already deleted
response = e.args[0]
@@ -55,9 +57,7 @@ def finalizer():
@pytest.fixture(scope="module")
-def bucket(
- storage_client: SupabaseStorageClient, uuid_factory: Callable[[], str]
-) -> str:
+def bucket(storage_client: SyncStorageClient, uuid_factory: Callable[[], str]):
"""Creates a test bucket which will be used in the whole storage tests run and deleted at the end"""
bucket_id = uuid_factory()
@@ -77,10 +77,10 @@ def bucket(
@pytest.fixture(scope="module")
def storage_file_client(
- storage_client: SupabaseStorageClient, bucket: str
-) -> StorageFileAPI:
+ storage_client: SyncStorageClient, bucket: str
+) -> Generator[SyncBucketProxy, None, None]:
"""Creates the storage file client for the whole storage tests run"""
- yield storage_client.StorageFileAPI(bucket)
+ yield storage_client.from_(bucket)
@pytest.fixture
@@ -119,7 +119,7 @@ def file(tmp_path: Path, uuid_factory: Callable[[], str]) -> Dict[str, str]:
def test_client_upload_file(
- storage_file_client: StorageFileAPI, file: Dict[str, str]
+ storage_file_client: SyncBucketProxy, file: Dict[str, str]
) -> None:
"""Ensure we can upload files to a bucket"""
@@ -131,7 +131,7 @@ def test_client_upload_file(
options = {"content-type": mime_type}
storage_file_client.upload(bucket_file_path, file_path, options)
- files: List[Dict[str, Any]] = storage_file_client.list(bucket_folder)
+ files = storage_file_client.list(bucket_folder)
image_info = next((f for f in files if f.get("name") == file_name), None)
assert files
From 626b09477064b2187d1db26b20a45b14c194bc3c Mon Sep 17 00:00:00 2001
From: anand2312 <40204976+anand2312@users.noreply.github.com>
Date: Tue, 19 Apr 2022 09:08:55 +0400
Subject: [PATCH 198/737] 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.
---
supabase/__init__.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/supabase/__init__.py b/supabase/__init__.py
index 26bb2022..39d1fd2c 100644
--- a/supabase/__init__.py
+++ b/supabase/__init__.py
@@ -1,4 +1,5 @@
-from postgrest import APIError, APIResponse
+from postgrest import APIError as PostgrestAPIError
+from postgrest import APIResponse as PostgrestAPIResponse
from storage3.utils import StorageException
from .__version__ import __version__
From cb5b4b251d5504feb0d6e94e1aa058bf5fc7a646 Mon Sep 17 00:00:00 2001
From: anand2312 <40204976+anand2312@users.noreply.github.com>
Date: Tue, 19 Apr 2022 09:40:14 +0400
Subject: [PATCH 199/737] fix: correct path to version
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 216980be..1c5e30d8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -34,7 +34,7 @@ python-semantic-release = "^7.28.1"
python-dotenv = "^0.20.0"
[tool.semantic_release]
-version_variable = "supabase/__init__.py:__version__"
+version_variable = "supabase/__version__.py:__version__"
version_toml = "pyproject.toml:tool.poetry.version"
major_on_zero = false
commit_subject = "chore(release): bump version to v{version}"
From c3e33a55f26dd98417f9efae8436fa8617774f9a Mon Sep 17 00:00:00 2001
From: anand2312 <40204976+anand2312@users.noreply.github.com>
Date: Tue, 19 Apr 2022 09:52:03 +0400
Subject: [PATCH 200/737] 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.
---
supabase/client.py | 13 +++++--------
supabase/lib/storage_client.py | 11 +++++++++++
2 files changed, 16 insertions(+), 8 deletions(-)
create mode 100644 supabase/lib/storage_client.py
diff --git a/supabase/client.py b/supabase/client.py
index 5bcf96df..52e0ad59 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -1,11 +1,10 @@
from typing import Any, Dict
from postgrest import SyncFilterRequestBuilder, SyncPostgrestClient, SyncRequestBuilder
-from storage3 import SyncStorageClient
-from storage3 import create_client as create_storage_client
-from supabase.lib.auth_client import SupabaseAuthClient
-from supabase.lib.client_options import ClientOptions
+from .lib.auth_client import SupabaseAuthClient
+from .lib.client_options import ClientOptions
+from .lib.storage_client import SupabaseStorageClient
class Client:
@@ -61,11 +60,9 @@ def __init__(
headers=options.headers,
)
- def storage(self) -> SyncStorageClient:
+ def storage(self) -> SupabaseStorageClient:
"""Create instance of the storage client"""
- return create_storage_client(
- self.storage_url, self._get_auth_headers(), is_async=False
- )
+ return SupabaseStorageClient(self.storage_url, self._get_auth_headers())
def table(self, table_name: str) -> SyncRequestBuilder:
"""Perform a table operation.
diff --git a/supabase/lib/storage_client.py b/supabase/lib/storage_client.py
new file mode 100644
index 00000000..a43e8300
--- /dev/null
+++ b/supabase/lib/storage_client.py
@@ -0,0 +1,11 @@
+from deprecation import deprecated
+from storage3 import SyncStorageClient
+from storage3._sync.file_api import SyncBucketProxy
+
+
+class SupabaseStorageClient(SyncStorageClient):
+ """Manage storage buckets and files."""
+
+ @deprecated("0.5.4", "0.6.0", details="Use `.from_()` instead")
+ def StorageFileAPI(self, id_: str) -> SyncBucketProxy:
+ return super().from_(id_)
From 54cd34e0b0d6af7e477fefeab38f7ccb6ce2f81a Mon Sep 17 00:00:00 2001
From: anand2312 <40204976+anand2312@users.noreply.github.com>
Date: Tue, 19 Apr 2022 10:07:27 +0400
Subject: [PATCH 201/737] fix: typo in docstring
---
supabase/client.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/supabase/client.py b/supabase/client.py
index 52e0ad59..0a779146 100644
--- a/supabase/client.py
+++ b/supabase/client.py
@@ -69,7 +69,7 @@ def table(self, table_name: str) -> SyncRequestBuilder:
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.
+ Alternatively you can use the `.from_()` method.
"""
return self.from_(table_name)
From 422c7221f8bc4c17d0c434f18fb8d19f9ef3095a Mon Sep 17 00:00:00 2001
From: dreinon <67071425+dreinon@users.noreply.github.com>
Date: Sat, 30 Apr 2022 22:28:59 +0200
Subject: [PATCH 202/737] chore: delete storage tests
---
tests/test_storage.py | 139 ------------------------------------------
1 file changed, 139 deletions(-)
delete mode 100644 tests/test_storage.py
diff --git a/tests/test_storage.py b/tests/test_storage.py
deleted file mode 100644
index 2d0eeff4..00000000
--- a/tests/test_storage.py
+++ /dev/null
@@ -1,139 +0,0 @@
-from __future__ import annotations
-
-from typing import TYPE_CHECKING, Generator
-from uuid import uuid4
-
-import pytest
-from storage3 import SyncStorageClient
-from storage3._sync.file_api import SyncBucketProxy
-
-from supabase import StorageException
-
-if TYPE_CHECKING:
- from pathlib import Path
- from typing import Callable, Dict
-
- from supabase import Client
-
-
-# Global variable to track the ids from the buckets created in the tests run
-temp_test_buckets_ids = []
-
-
-@pytest.fixture(scope="module")
-def uuid_factory() -> Callable[[], str]:
- def method() -> str:
- """Generate a 8 digits long UUID"""
- return uuid4().hex[:8]
-
- return method
-
-
-@pytest.fixture(scope="module")
-def storage_client(supabase: Client) -> SyncStorageClient:
- """Creates the storage client for the whole storage tests run"""
- return supabase.storage()
-
-
-@pytest.fixture(scope="module", autouse=True)
-def delete_left_buckets(
- request: pytest.FixtureRequest, storage_client: SyncStorageClient
-):
- """Ensures no test buckets are left when a test that created a bucket fails"""
-
- def finalizer():
- for bucket in temp_test_buckets_ids:
- try:
- storage_client.empty_bucket(bucket)
- storage_client.delete_bucket(bucket)
- except StorageException as e:
- # Ignore 404 responses since they mean the bucket was already deleted
- response = e.args[0]
- if response["statusCode"] != 404:
- raise e
- continue
-
- request.addfinalizer(finalizer)
-
-
-@pytest.fixture(scope="module")
-def bucket(storage_client: SyncStorageClient, uuid_factory: Callable[[], str]):
- """Creates a test bucket which will be used in the whole storage tests run and deleted at the end"""
- bucket_id = uuid_factory()
-
- # Store bucket_id in global list
- global temp_test_buckets_ids
- temp_test_buckets_ids.append(bucket_id)
-
- storage_client.create_bucket(id=bucket_id)
-
- yield bucket_id
-
- storage_client.empty_bucket(bucket_id)
- storage_client.delete_bucket(bucket_id)
-
- temp_test_buckets_ids.remove(bucket_id)
-
-
-@pytest.fixture(scope="module")
-def storage_file_client(
- storage_client: SyncStorageClient, bucket: str
-) -> Generator[SyncBucketProxy, None, None]:
- """Creates the storage file client for the whole storage tests run"""
- yield storage_client.from_(bucket)
-
-
-@pytest.fixture
-def file(tmp_path: Path, uuid_factory: Callable[[], str]) -> Dict[str, str]:
- """Creates a different test file (same content but different path) for each test"""
- file_name = "test_image.svg"
- file_content = (
- b'