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)
|
[](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
|
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
|
import datetime
|
||||||
|
|
||||||
from pocketbase.utils import to_datetime
|
from pocketbase.utils import to_datetime
|
||||||
@ -10,7 +10,7 @@ class Admin(BaseModel):
|
|||||||
email: str
|
email: str
|
||||||
last_reset_sent_at: Union[str, datetime.datetime]
|
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)
|
super().load(data)
|
||||||
self.avatar = data.get("avatar", 0)
|
self.avatar = data.get("avatar", 0)
|
||||||
self.email = data.get("email", "")
|
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.base_model import BaseModel
|
||||||
from pocketbase.models.utils.schema_field import SchemaField
|
from pocketbase.models.utils.schema_field import SchemaField
|
||||||
@ -14,7 +14,7 @@ class Collection(BaseModel):
|
|||||||
update_rule: Optional[str]
|
update_rule: Optional[str]
|
||||||
delete_rule: Optional[str]
|
delete_rule: Optional[str]
|
||||||
|
|
||||||
def load(self, data: dict[str:Any]) -> None:
|
def load(self, data: dict) -> None:
|
||||||
super().load(data)
|
super().load(data)
|
||||||
self.name = data.get("name", "")
|
self.name = data.get("name", "")
|
||||||
self.system = data.get("system", False)
|
self.system = data.get("system", False)
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
from typing import Any
|
|
||||||
from pocketbase.models.utils.base_model import BaseModel
|
from pocketbase.models.utils.base_model import BaseModel
|
||||||
|
|
||||||
|
|
||||||
@ -7,7 +6,7 @@ class ExternalAuth(BaseModel):
|
|||||||
provider: str
|
provider: str
|
||||||
provider_id: str
|
provider_id: str
|
||||||
|
|
||||||
def load(self, data: dict[str:Any]) -> None:
|
def load(self, data: dict) -> None:
|
||||||
super().load(data)
|
super().load(data)
|
||||||
self.user_id = data.get("userId", "")
|
self.user_id = data.get("userId", "")
|
||||||
self.provider = data.get("provider", "")
|
self.provider = data.get("provider", "")
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
from typing import Any
|
|
||||||
|
|
||||||
from pocketbase.models.utils.base_model import BaseModel
|
from pocketbase.models.utils.base_model import BaseModel
|
||||||
|
|
||||||
|
|
||||||
@ -12,9 +10,9 @@ class LogRequest(BaseModel):
|
|||||||
user_ip: str
|
user_ip: str
|
||||||
referer: str
|
referer: str
|
||||||
user_agent: 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)
|
super().load(data)
|
||||||
self.url = data.get("url", "")
|
self.url = data.get("url", "")
|
||||||
self.method = data.get("method", "")
|
self.method = data.get("method", "")
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
from typing import Any
|
|
||||||
|
|
||||||
from pocketbase.models.utils.base_model import BaseModel
|
from pocketbase.models.utils.base_model import BaseModel
|
||||||
from pocketbase.utils import camel_to_snake
|
from pocketbase.utils import camel_to_snake
|
||||||
|
|
||||||
@ -7,9 +5,9 @@ from pocketbase.utils import camel_to_snake
|
|||||||
class Record(BaseModel):
|
class Record(BaseModel):
|
||||||
collection_id: str
|
collection_id: str
|
||||||
collection_name: 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)
|
super().load(data)
|
||||||
for key, value in data.items():
|
for key, value in data.items():
|
||||||
key = camel_to_snake(key).replace("@", "")
|
key = camel_to_snake(key).replace("@", "")
|
||||||
@ -22,7 +20,7 @@ class Record(BaseModel):
|
|||||||
self.load_expanded()
|
self.load_expanded()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def parse_expanded(cls, data: dict[str:Any]):
|
def parse_expanded(cls, data: dict):
|
||||||
return cls(data)
|
return cls(data)
|
||||||
|
|
||||||
def load_expanded(self) -> None:
|
def load_expanded(self) -> None:
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
from typing import Any, Optional, Union
|
from typing import Optional, Union
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from pocketbase.utils import to_datetime
|
from pocketbase.utils import to_datetime
|
||||||
@ -13,7 +13,7 @@ class User(BaseModel):
|
|||||||
last_verification_sent_at: Union[str, datetime.datetime]
|
last_verification_sent_at: Union[str, datetime.datetime]
|
||||||
profile: Optional[Record]
|
profile: Optional[Record]
|
||||||
|
|
||||||
def load(self, data: dict[str:Any]) -> None:
|
def load(self, data: dict) -> None:
|
||||||
super().load(data)
|
super().load(data)
|
||||||
self.email = data.get("email", "")
|
self.email = data.get("email", "")
|
||||||
self.verified = data.get("verified", "")
|
self.verified = data.get("verified", "")
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
from abc import ABC
|
from abc import ABC
|
||||||
from typing import Any, Union
|
from typing import Union
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from pocketbase.utils import to_datetime
|
from pocketbase.utils import to_datetime
|
||||||
@ -10,11 +10,11 @@ class BaseModel(ABC):
|
|||||||
created: Union[str, datetime.datetime]
|
created: Union[str, datetime.datetime]
|
||||||
updated: 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__()
|
super().__init__()
|
||||||
self.load(data)
|
self.load(data)
|
||||||
|
|
||||||
def load(self, data: dict[str:Any]) -> None:
|
def load(self, data: dict) -> None:
|
||||||
"""Loads `data` into the current model."""
|
"""Loads `data` into the current model."""
|
||||||
self.id = data.pop("id", "")
|
self.id = data.pop("id", "")
|
||||||
self.created = to_datetime(data.pop("created", ""))
|
self.created = to_datetime(data.pop("created", ""))
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -10,4 +9,4 @@ class SchemaField:
|
|||||||
system: bool = False
|
system: bool = False
|
||||||
required: bool = False
|
required: bool = False
|
||||||
unique: 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.models.utils.base_model import BaseModel
|
||||||
from pocketbase.services.utils.crud_service import CrudService
|
from pocketbase.services.utils.crud_service import CrudService
|
||||||
from pocketbase.models.admin import Admin
|
from pocketbase.models.admin import Admin
|
||||||
@ -16,7 +15,7 @@ class AdminAuthResponse:
|
|||||||
|
|
||||||
|
|
||||||
class Admins(CrudService):
|
class Admins(CrudService):
|
||||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
def decode(self, data: dict) -> BaseModel:
|
||||||
return Admin(data)
|
return Admin(data)
|
||||||
|
|
||||||
def base_crud_path(self) -> str:
|
def base_crud_path(self) -> str:
|
||||||
|
|||||||
@ -1,12 +1,10 @@
|
|||||||
from typing import Any
|
|
||||||
|
|
||||||
from pocketbase.services.utils.crud_service import CrudService
|
from pocketbase.services.utils.crud_service import CrudService
|
||||||
from pocketbase.models.utils.base_model import BaseModel
|
from pocketbase.models.utils.base_model import BaseModel
|
||||||
from pocketbase.models.collection import Collection
|
from pocketbase.models.collection import Collection
|
||||||
|
|
||||||
|
|
||||||
class Collections(CrudService):
|
class Collections(CrudService):
|
||||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
def decode(self, data: dict) -> BaseModel:
|
||||||
return Collection(data)
|
return Collection(data)
|
||||||
|
|
||||||
def base_crud_path(self) -> str:
|
def base_crud_path(self) -> str:
|
||||||
@ -14,7 +12,7 @@ class Collections(CrudService):
|
|||||||
|
|
||||||
def import_collections(
|
def import_collections(
|
||||||
self,
|
self,
|
||||||
collections: list[Collection],
|
collections: list,
|
||||||
delete_missing: bool = False,
|
delete_missing: bool = False,
|
||||||
query_params: dict = {},
|
query_params: dict = {},
|
||||||
) -> bool:
|
) -> bool:
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
from typing import Any
|
|
||||||
from urllib.parse import quote, urlencode
|
from urllib.parse import quote, urlencode
|
||||||
|
|
||||||
from pocketbase.services.utils.sub_crud_service import SubCrudService
|
from pocketbase.services.utils.sub_crud_service import SubCrudService
|
||||||
@ -7,7 +6,7 @@ from pocketbase.models.record import Record
|
|||||||
|
|
||||||
|
|
||||||
class Records(SubCrudService):
|
class Records(SubCrudService):
|
||||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
def decode(self, data: dict) -> BaseModel:
|
||||||
return Record(data)
|
return Record(data)
|
||||||
|
|
||||||
def base_crud_path(self, collection_id_or_name: str) -> str:
|
def base_crud_path(self, collection_id_or_name: str) -> str:
|
||||||
|
|||||||
@ -35,7 +35,7 @@ class AuthMethodsList:
|
|||||||
|
|
||||||
|
|
||||||
class Users(CrudService):
|
class Users(CrudService):
|
||||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
def decode(self, data: dict) -> BaseModel:
|
||||||
return User(data)
|
return User(data)
|
||||||
|
|
||||||
def base_crud_path(self) -> str:
|
def base_crud_path(self) -> str:
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
from abc import ABC
|
from abc import ABC
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
|
|
||||||
from pocketbase.models.utils.base_model import BaseModel
|
from pocketbase.models.utils.base_model import BaseModel
|
||||||
from pocketbase.models.utils.list_result import ListResult
|
from pocketbase.models.utils.list_result import ListResult
|
||||||
@ -9,7 +7,7 @@ from pocketbase.services.utils.base_service import BaseService
|
|||||||
|
|
||||||
|
|
||||||
class BaseCrudService(BaseService, ABC):
|
class BaseCrudService(BaseService, ABC):
|
||||||
def decode(self, data: dict[str:Any]) -> BaseModel:
|
def decode(self, data: dict) -> BaseModel:
|
||||||
"""Response data decoder"""
|
"""Response data decoder"""
|
||||||
|
|
||||||
def _get_full_list(
|
def _get_full_list(
|
||||||
@ -18,7 +16,7 @@ class BaseCrudService(BaseService, ABC):
|
|||||||
|
|
||||||
result: list[BaseModel] = []
|
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)
|
list = self._get_list(base_path, page, batch_size, query_params)
|
||||||
items = list.items
|
items = list.items
|
||||||
total_items = list.total_items
|
total_items = list.total_items
|
||||||
|
|||||||
@ -1,25 +1,35 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "pocketbase"
|
name = "pocketbase"
|
||||||
version = "0.1.1"
|
description = "PocketBase SDK for python."
|
||||||
description = "PocketBase client SDK for python."
|
|
||||||
authors = ["Vithor Jaeger <vaphes@gmail.com>"]
|
|
||||||
readme = "README.md"
|
|
||||||
requires-python = ">=3.7"
|
requires-python = ">=3.7"
|
||||||
|
license = "MIT"
|
||||||
|
authors = [
|
||||||
|
{ name = "Vithor Jaeger", email = "vaphes@gmail.com" },
|
||||||
|
]
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Programming Language :: Python :: 3",
|
"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",
|
"License :: OSI Approved :: MIT License",
|
||||||
"Operating System :: OS Independent",
|
"Operating System :: OS Independent",
|
||||||
|
"Intended Audience :: Developers",
|
||||||
]
|
]
|
||||||
keywords = "pocketbase client sdk"
|
keywords = "pocketbase sdk"
|
||||||
|
dependencies = ["httpx>=0.23.0"]
|
||||||
|
dynamic = ["readme", "version"]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
"Homepage" = "https://github.com/vaphes/pocketbase"
|
"Homepage" = "https://github.com/vaphes/pocketbase"
|
||||||
|
"Source" = "https://github.com/vaphes/pocketbase"
|
||||||
"Bug Tracker" = "https://github.com/vaphes/pocketbase/issues"
|
"Bug Tracker" = "https://github.com/vaphes/pocketbase/issues"
|
||||||
|
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "pocketbase"
|
name = "pocketbase"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
description = "PocketBase client SDK for python."
|
description = "PocketBase SDK for python."
|
||||||
authors = ["Vithor Jaeger <vaphes@gmail.com>"]
|
authors = ["Vithor Jaeger <vaphes@gmail.com>"]
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user