fixes for python < 3.9
This commit is contained in:
parent
afe03f72f0
commit
3bcfa1bd1c
16
README.md
16
README.md
@ -1,7 +1,17 @@
|
||||
# pocketbase
|
||||
# PocketBase Python SDK
|
||||
|
||||
[](https://github.com/vaphes/pocketbase/actions/workflows/python-3.10.yml) [](https://github.com/vaphes/pocketbase/actions/workflows/python-3.9.yml) [](https://github.com/vaphes/pocketbase/actions/workflows/python-3.8.yml) [](https://github.com/vaphes/pocketbase/actions/workflows/python-3.7.yml)
|
||||
|
||||
Python client SDK for PocketBase database.
|
||||
Python client SDK for the <a href="https://pocketbase.io/">PocketBase</a> backend.
|
||||
|
||||
This is in early development, and at first is just a translations for the javascript lib.
|
||||
This is in early development, and at first is just a translations for <a href="https://github.com/pocketbase/js-sdk">the javascript lib</a>.
|
||||
|
||||
---
|
||||
|
||||
Install PocketBase using pip:
|
||||
|
||||
```shell
|
||||
$ pip install pocketbase
|
||||
```
|
||||
|
||||
<p align="center"><i>The PocketBase Python SDK is <a href="https://github.com/vaphes/pocketbase/blob/master/LICENCE.txt">MIT licensed</a> code.</p>
|
||||
@ -1,3 +1,3 @@
|
||||
__version__ = "0.1.1"
|
||||
from .__version__ import __description__, __title__, __version__
|
||||
|
||||
from .client import Client, ClientResponseError
|
||||
|
||||
3
pocketbase/__version__.py
Normal file
3
pocketbase/__version__.py
Normal file
@ -0,0 +1,3 @@
|
||||
__title__ = "pocketbase"
|
||||
__description__ = "PocketBase client SDK for python."
|
||||
__version__ = "0.1.1"
|
||||
@ -1,4 +1,4 @@
|
||||
from typing import Any, Union
|
||||
from typing import Union
|
||||
import datetime
|
||||
|
||||
from pocketbase.utils import to_datetime
|
||||
@ -10,7 +10,7 @@ class Admin(BaseModel):
|
||||
email: str
|
||||
last_reset_sent_at: Union[str, datetime.datetime]
|
||||
|
||||
def load(self, data: dict[str:Any]) -> None:
|
||||
def load(self, data: dict) -> None:
|
||||
super().load(data)
|
||||
self.avatar = data.get("avatar", 0)
|
||||
self.email = data.get("email", "")
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
from typing import Any, Optional
|
||||
from typing import Optional
|
||||
|
||||
from pocketbase.models.utils.base_model import BaseModel
|
||||
from pocketbase.models.utils.schema_field import SchemaField
|
||||
@ -14,7 +14,7 @@ class Collection(BaseModel):
|
||||
update_rule: Optional[str]
|
||||
delete_rule: Optional[str]
|
||||
|
||||
def load(self, data: dict[str:Any]) -> None:
|
||||
def load(self, data: dict) -> None:
|
||||
super().load(data)
|
||||
self.name = data.get("name", "")
|
||||
self.system = data.get("system", False)
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
from typing import Any
|
||||
from pocketbase.models.utils.base_model import BaseModel
|
||||
|
||||
|
||||
@ -7,7 +6,7 @@ class ExternalAuth(BaseModel):
|
||||
provider: str
|
||||
provider_id: str
|
||||
|
||||
def load(self, data: dict[str:Any]) -> None:
|
||||
def load(self, data: dict) -> None:
|
||||
super().load(data)
|
||||
self.user_id = data.get("userId", "")
|
||||
self.provider = data.get("provider", "")
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
from typing import Any
|
||||
|
||||
from pocketbase.models.utils.base_model import BaseModel
|
||||
|
||||
|
||||
@ -12,9 +10,9 @@ class LogRequest(BaseModel):
|
||||
user_ip: str
|
||||
referer: str
|
||||
user_agent: str
|
||||
meta: dict[str:Any]
|
||||
meta: dict
|
||||
|
||||
def load(self, data: dict[str:Any]) -> None:
|
||||
def load(self, data: dict) -> None:
|
||||
super().load(data)
|
||||
self.url = data.get("url", "")
|
||||
self.method = data.get("method", "")
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
from typing import Any
|
||||
|
||||
from pocketbase.models.utils.base_model import BaseModel
|
||||
from pocketbase.utils import camel_to_snake
|
||||
|
||||
@ -7,9 +5,9 @@ from pocketbase.utils import camel_to_snake
|
||||
class Record(BaseModel):
|
||||
collection_id: str
|
||||
collection_name: str
|
||||
expand: dict[str:Any]
|
||||
expand: dict
|
||||
|
||||
def load(self, data: dict[str:Any]) -> None:
|
||||
def load(self, data: dict) -> None:
|
||||
super().load(data)
|
||||
for key, value in data.items():
|
||||
key = camel_to_snake(key).replace("@", "")
|
||||
@ -22,7 +20,7 @@ class Record(BaseModel):
|
||||
self.load_expanded()
|
||||
|
||||
@classmethod
|
||||
def parse_expanded(cls, data: dict[str:Any]):
|
||||
def parse_expanded(cls, data: dict):
|
||||
return cls(data)
|
||||
|
||||
def load_expanded(self) -> None:
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
from typing import Any, Optional, Union
|
||||
from typing import Optional, Union
|
||||
import datetime
|
||||
|
||||
from pocketbase.utils import to_datetime
|
||||
@ -13,7 +13,7 @@ class User(BaseModel):
|
||||
last_verification_sent_at: Union[str, datetime.datetime]
|
||||
profile: Optional[Record]
|
||||
|
||||
def load(self, data: dict[str:Any]) -> None:
|
||||
def load(self, data: dict) -> None:
|
||||
super().load(data)
|
||||
self.email = data.get("email", "")
|
||||
self.verified = data.get("verified", "")
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
from abc import ABC
|
||||
from typing import Any, Union
|
||||
from typing import Union
|
||||
import datetime
|
||||
|
||||
from pocketbase.utils import to_datetime
|
||||
@ -10,11 +10,11 @@ class BaseModel(ABC):
|
||||
created: Union[str, datetime.datetime]
|
||||
updated: Union[str, datetime.datetime]
|
||||
|
||||
def __init__(self, data: dict[str:Any] = {}) -> None:
|
||||
def __init__(self, data: dict = {}) -> None:
|
||||
super().__init__()
|
||||
self.load(data)
|
||||
|
||||
def load(self, data: dict[str:Any]) -> None:
|
||||
def load(self, data: dict) -> None:
|
||||
"""Loads `data` into the current model."""
|
||||
self.id = data.pop("id", "")
|
||||
self.created = to_datetime(data.pop("created", ""))
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Any
|
||||
|
||||
|
||||
@dataclass
|
||||
@ -10,4 +9,4 @@ class SchemaField:
|
||||
system: bool = False
|
||||
required: bool = False
|
||||
unique: bool = False
|
||||
options: dict[str:Any] = field(default_factory=dict)
|
||||
options: dict = field(default_factory=dict)
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
from typing import Any
|
||||
from pocketbase.models.utils.base_model import BaseModel
|
||||
from pocketbase.services.utils.crud_service import CrudService
|
||||
from pocketbase.models.admin import Admin
|
||||
@ -16,7 +15,7 @@ class AdminAuthResponse:
|
||||
|
||||
|
||||
class Admins(CrudService):
|
||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
||||
def decode(self, data: dict) -> BaseModel:
|
||||
return Admin(data)
|
||||
|
||||
def base_crud_path(self) -> str:
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
from typing import Any
|
||||
|
||||
from pocketbase.services.utils.crud_service import CrudService
|
||||
from pocketbase.models.utils.base_model import BaseModel
|
||||
from pocketbase.models.collection import Collection
|
||||
|
||||
|
||||
class Collections(CrudService):
|
||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
||||
def decode(self, data: dict) -> BaseModel:
|
||||
return Collection(data)
|
||||
|
||||
def base_crud_path(self) -> str:
|
||||
@ -14,7 +12,7 @@ class Collections(CrudService):
|
||||
|
||||
def import_collections(
|
||||
self,
|
||||
collections: list[Collection],
|
||||
collections: list,
|
||||
delete_missing: bool = False,
|
||||
query_params: dict = {},
|
||||
) -> bool:
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
from typing import Any
|
||||
from urllib.parse import quote, urlencode
|
||||
|
||||
from pocketbase.services.utils.sub_crud_service import SubCrudService
|
||||
@ -7,7 +6,7 @@ from pocketbase.models.record import Record
|
||||
|
||||
|
||||
class Records(SubCrudService):
|
||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
||||
def decode(self, data: dict) -> BaseModel:
|
||||
return Record(data)
|
||||
|
||||
def base_crud_path(self, collection_id_or_name: str) -> str:
|
||||
|
||||
@ -35,7 +35,7 @@ class AuthMethodsList:
|
||||
|
||||
|
||||
class Users(CrudService):
|
||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
||||
def decode(self, data: dict) -> BaseModel:
|
||||
return User(data)
|
||||
|
||||
def base_crud_path(self) -> str:
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
from abc import ABC
|
||||
from urllib.parse import quote
|
||||
from typing import Any
|
||||
|
||||
|
||||
from pocketbase.models.utils.base_model import BaseModel
|
||||
from pocketbase.models.utils.list_result import ListResult
|
||||
@ -9,7 +7,7 @@ from pocketbase.services.utils.base_service import BaseService
|
||||
|
||||
|
||||
class BaseCrudService(BaseService, ABC):
|
||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
||||
def decode(self, data: dict) -> BaseModel:
|
||||
"""Response data decoder"""
|
||||
|
||||
def _get_full_list(
|
||||
@ -18,7 +16,7 @@ class BaseCrudService(BaseService, ABC):
|
||||
|
||||
result: list[BaseModel] = []
|
||||
|
||||
def request(result: list[BaseModel], page: int) -> list[Any]:
|
||||
def request(result: list[BaseModel], page: int) -> list:
|
||||
list = self._get_list(base_path, page, batch_size, query_params)
|
||||
items = list.items
|
||||
total_items = list.total_items
|
||||
|
||||
@ -1,25 +1,35 @@
|
||||
[project]
|
||||
name = "pocketbase"
|
||||
version = "0.1.1"
|
||||
description = "PocketBase client SDK for python."
|
||||
authors = ["Vithor Jaeger <vaphes@gmail.com>"]
|
||||
readme = "README.md"
|
||||
description = "PocketBase SDK for python."
|
||||
requires-python = ">=3.7"
|
||||
license = "MIT"
|
||||
authors = [
|
||||
{ name = "Vithor Jaeger", email = "vaphes@gmail.com" },
|
||||
]
|
||||
classifiers = [
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3 :: Only",
|
||||
"Programming Language :: Python :: 3.7",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
"Operating System :: OS Independent",
|
||||
"Intended Audience :: Developers",
|
||||
]
|
||||
keywords = "pocketbase client sdk"
|
||||
keywords = "pocketbase sdk"
|
||||
dependencies = ["httpx>=0.23.0"]
|
||||
dynamic = ["readme", "version"]
|
||||
|
||||
[project.urls]
|
||||
"Homepage" = "https://github.com/vaphes/pocketbase"
|
||||
"Source" = "https://github.com/vaphes/pocketbase"
|
||||
"Bug Tracker" = "https://github.com/vaphes/pocketbase/issues"
|
||||
|
||||
[tool.poetry]
|
||||
name = "pocketbase"
|
||||
version = "0.1.0"
|
||||
description = "PocketBase client SDK for python."
|
||||
version = "0.1.1"
|
||||
description = "PocketBase SDK for python."
|
||||
authors = ["Vithor Jaeger <vaphes@gmail.com>"]
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user