Compare commits
2 Commits
v0.3.0-bet
...
v0.3.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7bb6e97880 | ||
|
|
c8297852ce |
@@ -36,7 +36,7 @@ result = client.records.get_list(
|
|||||||
user_data = client.users.auth_via_email("test@example.com", "123456")
|
user_data = client.users.auth_via_email("test@example.com", "123456")
|
||||||
|
|
||||||
# or as admin
|
# or as admin
|
||||||
admin_data = client.admins.auth_via_email("test@example.com", "123456")
|
admin_data = client.admins.auth_with_password("test@example.com", "123456")
|
||||||
|
|
||||||
# and much more...
|
# and much more...
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
from pocketbase.services.admins import Admins
|
||||||
|
from pocketbase.stores.base_auth_store import BaseAuthStore
|
||||||
|
from pocketbase.services.settings import Settings
|
||||||
|
from pocketbase.services.users import Users
|
||||||
|
from pocketbase.services.records import Records
|
||||||
|
from pocketbase.services.realtime import Realtime
|
||||||
|
from pocketbase.services.logs import Logs
|
||||||
|
from pocketbase.services.collections import Collections
|
||||||
|
from pocketbase.models import FileUpload
|
||||||
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
from pocketbase.services.admins import Admins
|
|
||||||
from pocketbase.services.collections import Collections
|
|
||||||
from pocketbase.services.logs import Logs
|
|
||||||
from pocketbase.services.realtime import Realtime
|
|
||||||
from pocketbase.services.records import Records
|
|
||||||
from pocketbase.services.users import Users
|
|
||||||
from pocketbase.services.settings import Settings
|
|
||||||
from pocketbase.stores.base_auth_store import BaseAuthStore
|
|
||||||
|
|
||||||
|
|
||||||
class ClientResponseError(Exception):
|
class ClientResponseError(Exception):
|
||||||
url: str = ""
|
url: str = ""
|
||||||
@@ -82,6 +82,21 @@ class Client:
|
|||||||
params = config.get("params", None)
|
params = config.get("params", None)
|
||||||
headers = config.get("headers", None)
|
headers = config.get("headers", None)
|
||||||
body = config.get("body", None)
|
body = config.get("body", None)
|
||||||
|
# handle requests including files as multipart:
|
||||||
|
data = {}
|
||||||
|
files = ()
|
||||||
|
for k, v in (body if isinstance(body, dict) else {}).items():
|
||||||
|
if isinstance(v, FileUpload):
|
||||||
|
files += v.get(k)
|
||||||
|
else:
|
||||||
|
data[k] = v
|
||||||
|
if len(files) > 0:
|
||||||
|
# discard body, switch to multipart encoding
|
||||||
|
body = None
|
||||||
|
else:
|
||||||
|
# discard files+data (do not use multipart encoding)
|
||||||
|
files = None
|
||||||
|
data = None
|
||||||
try:
|
try:
|
||||||
response = httpx.request(
|
response = httpx.request(
|
||||||
method=method,
|
method=method,
|
||||||
@@ -89,6 +104,8 @@ class Client:
|
|||||||
params=params,
|
params=params,
|
||||||
headers=headers,
|
headers=headers,
|
||||||
json=body,
|
json=body,
|
||||||
|
data=data,
|
||||||
|
files=files,
|
||||||
timeout=120,
|
timeout=120,
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -4,3 +4,4 @@ from .external_auth import ExternalAuth
|
|||||||
from .log_request import LogRequest
|
from .log_request import LogRequest
|
||||||
from .record import Record
|
from .record import Record
|
||||||
from .user import User
|
from .user import User
|
||||||
|
from .file_upload import FileUpload
|
||||||
|
|||||||
13
pocketbase/models/file_upload.py
Normal file
13
pocketbase/models/file_upload.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
from httpx._types import FileTypes
|
||||||
|
from typing import Sequence, Union
|
||||||
|
FileUploadTypes = Union[FileTypes, Sequence[FileTypes]]
|
||||||
|
|
||||||
|
|
||||||
|
class FileUpload:
|
||||||
|
def __init__(self, *args):
|
||||||
|
self.files: FileUploadTypes = args
|
||||||
|
|
||||||
|
def get(self, key: str):
|
||||||
|
if isinstance(self.files[0], Sequence):
|
||||||
|
return tuple((key, i) for i in self.files)
|
||||||
|
return ((key, self.files),)
|
||||||
@@ -31,7 +31,7 @@ class Admins(CrudService):
|
|||||||
self.client.auth_store.save(token, admin)
|
self.client.auth_store.save(token, admin)
|
||||||
return AdminAuthResponse(token=token, admin=admin, **response_data)
|
return AdminAuthResponse(token=token, admin=admin, **response_data)
|
||||||
|
|
||||||
def auth_via_email(
|
def auth_with_password(
|
||||||
self, email: str, password: str, body_params: dict = {}, query_params: dict = {}
|
self, email: str, password: str, body_params: dict = {}, query_params: dict = {}
|
||||||
) -> AdminAuthResponse:
|
) -> AdminAuthResponse:
|
||||||
"""
|
"""
|
||||||
@@ -40,9 +40,9 @@ class Admins(CrudService):
|
|||||||
|
|
||||||
On success this method automatically updates the client's AuthStore data.
|
On success this method automatically updates the client's AuthStore data.
|
||||||
"""
|
"""
|
||||||
body_params.update({"email": email, "password": password})
|
body_params.update({"identity": email, "password": password})
|
||||||
response_data = self.client.send(
|
response_data = self.client.send(
|
||||||
self.base_crud_path() + "/auth-via-email",
|
self.base_crud_path() + "/auth-with-password",
|
||||||
{
|
{
|
||||||
"method": "POST",
|
"method": "POST",
|
||||||
"params": query_params,
|
"params": query_params,
|
||||||
|
|||||||
Reference in New Issue
Block a user