3 Commits

Author SHA1 Message Date
Vithor Jaeger
bda1d2846d Revert "Add example of file upload to record (#9)"
This reverts commit 428d18c387.
2022-11-25 20:45:26 -04:00
Martin
428d18c387 Add example of file upload to record (#9) 2022-11-25 20:44:11 -04:00
Martin
00c9365b5f Port of PR #6 to branch 0.8.0 (#7)
* Switch from JSON to multipart file encoding for file upload

File upload is detected when body data contains a value of class FileUpload
Remaining JSON is converted to FormData
Enitre message is sent as multipart

* Switch from JSON to multipart file encoding for file upload (#6)

File upload is detected when body data contains a value of class FileUpload
Remaining JSON is converted to FormData
Enitre message is sent as multipart
2022-11-24 09:35:21 -04:00
3 changed files with 33 additions and 0 deletions

View File

@@ -1,4 +1,6 @@
from __future__ import annotations
from pocketbase.stores.base_auth_store import BaseAuthStore
from pocketbase.models import FileUpload
from typing import Any, Dict
from urllib.parse import quote, urlencode
@@ -71,6 +73,21 @@ class Client:
params = config.get("params", None)
headers = config.get("headers", 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:
response = httpx.request(
method=method,
@@ -78,6 +95,8 @@ class Client:
params=params,
headers=headers,
json=body,
data=data,
files=files,
timeout=120,
)
except Exception as e:

View File

@@ -3,3 +3,4 @@ from .collection import Collection
from .external_auth import ExternalAuth
from .log_request import LogRequest
from .record import Record
from .file_upload import FileUpload

View 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),)