Name | firedantic-mixin JSON |
Version |
1.0.8
JSON |
| download |
home_page | |
Summary | Quick mixin to provide basic features to firedantic |
upload_time | 2023-10-07 22:23:58 |
maintainer | |
docs_url | None |
author | patrick o'leary |
requires_python | >=3.11,<4.0 |
license | CC-BY-4.0 |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
## Firedantic Order by / Select / Limit
### Objective
This is a quick 'monkeypatch' / mixin for Firedantic to provide missing capabilities
Based on the issue https://github.com/ioxiocom/firedantic/issues/43
Firedantic is a pydantic wrapper for Google Firestore, it's actually quite handy, however it is missing some design / direction and strategy.
Currently is no select, order_by capabilities, which limits (a function also missing) you to filter and listing, reducing the ability to use it for most needs.
Attempts to influence and encourage direction are met with hostility from the maintainer(s).
This had driven the direction of this solution to use a monkey patch and extension to allow for easy integration.
### Installation
Standard install, note - vs _
```
poetry add firedantic-mixin
```
Usage
```python
from firedantic_mixin.mixin import FiredanticMonkey
```
### How to use
Simply swap the super class of firedantic.Model for FiredanticMonkey
<table>
<tr><th>Firedantic standard</th><th> Firedantic mixin</th></tr>
<tr><td>
```python
from firedantic import Model
class Orders(Model):
__collection__ = "Monkey-Orders"
item : str
quantity : int
price: float
```
</td><td>
```python
from firedantic_mixin.mixin import FiredanticMonkey
class Orders(FiredanticMonkey):
__collection__ = "Monkey-Orders"
item : str
quantity : int
price: float
```
</td></tr>
</table>
This opens up the ability to do standard compound tasks by returning [Firestores BaseQuery](https://cloud.google.com/python/docs/reference/firestore/latest/google.cloud.firestore_v1.base_query.BaseQuery)
```python
# return just item and price fields, order by price
query = Orders.select(['item', 'price']).\
order_by("price", Query.ASCENDING)
results = list(query.stream())
```
Results will be [Firestores DocumentSnapshots](https://cloud.google.com/python/docs/reference/firestore/latest/google.cloud.firestore_v1.base_document.DocumentSnapshot) to go back to a Firedantic model simply do:
```python
models = Orders.to_dantic(results)
```
### What else can you now do?
As you have direct access to BasicQuery as part of the model
```python
Orders.query() # returns a BaseQuery
Orders.query({"price": {">": 1}}) # filtering
Orders.query().offset(20).limit(10) # pagination
Orders.select(['item', 'price']) # field selects
Orders.query().order_by("price", Query.ASCENDING) # ordering by
```
There is currently less than 70 lines of code that just opens this up and makes it usable.
Raw data
{
"_id": null,
"home_page": "",
"name": "firedantic-mixin",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.11,<4.0",
"maintainer_email": "",
"keywords": "",
"author": "patrick o'leary",
"author_email": "pjaol@pjaol.com",
"download_url": "https://files.pythonhosted.org/packages/1f/d7/c55fcc3b2a9ea20f94ffd840d133d021de8db2f38ffb6eb9f99580d331dd/firedantic_mixin-1.0.8.tar.gz",
"platform": null,
"description": "## Firedantic Order by / Select / Limit\n\n\n### Objective \nThis is a quick 'monkeypatch' / mixin for Firedantic to provide missing capabilities\nBased on the issue https://github.com/ioxiocom/firedantic/issues/43\n\nFiredantic is a pydantic wrapper for Google Firestore, it's actually quite handy, however it is missing some design / direction and strategy. \n\nCurrently is no select, order_by capabilities, which limits (a function also missing) you to filter and listing, reducing the ability to use it for most needs. \n\nAttempts to influence and encourage direction are met with hostility from the maintainer(s).\nThis had driven the direction of this solution to use a monkey patch and extension to allow for easy integration. \n\n### Installation \n\nStandard install, note - vs _\n\n```\npoetry add firedantic-mixin\n```\n\nUsage\n```python\nfrom firedantic_mixin.mixin import FiredanticMonkey\n```\n\n### How to use\n\nSimply swap the super class of firedantic.Model for FiredanticMonkey\n\n<table>\n<tr><th>Firedantic standard</th><th> Firedantic mixin</th></tr>\n<tr><td>\n\n ```python\n from firedantic import Model\n\n class Orders(Model): \n __collection__ = \"Monkey-Orders\"\n \n item : str\n quantity : int\n price: float\n\n```\n\n</td><td>\n\n```python\nfrom firedantic_mixin.mixin import FiredanticMonkey\n\nclass Orders(FiredanticMonkey): \n \n __collection__ = \"Monkey-Orders\"\n \n item : str\n quantity : int\n price: float\n\n```\n</td></tr>\n</table>\n\nThis opens up the ability to do standard compound tasks by returning [Firestores BaseQuery](https://cloud.google.com/python/docs/reference/firestore/latest/google.cloud.firestore_v1.base_query.BaseQuery)\n\n```python\n\n# return just item and price fields, order by price\nquery = Orders.select(['item', 'price']).\\\n order_by(\"price\", Query.ASCENDING)\n\nresults = list(query.stream())\n\n```\n\nResults will be [Firestores DocumentSnapshots](https://cloud.google.com/python/docs/reference/firestore/latest/google.cloud.firestore_v1.base_document.DocumentSnapshot) to go back to a Firedantic model simply do: \n\n```python\n\nmodels = Orders.to_dantic(results)\n\n```\n\n### What else can you now do? \n\nAs you have direct access to BasicQuery as part of the model\n\n\n```python\n\nOrders.query() # returns a BaseQuery\nOrders.query({\"price\": {\">\": 1}}) # filtering\n\nOrders.query().offset(20).limit(10) # pagination\n\nOrders.select(['item', 'price']) # field selects\n\nOrders.query().order_by(\"price\", Query.ASCENDING) # ordering by \n\n```\n\nThere is currently less than 70 lines of code that just opens this up and makes it usable.\n",
"bugtrack_url": null,
"license": "CC-BY-4.0",
"summary": "Quick mixin to provide basic features to firedantic",
"version": "1.0.8",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "22cd660565bd71a1dbb18fab9730e7bddcb8d21770e451e4b5b30c0c887c40ce",
"md5": "8d452c7286e6646062ca6a6ff6a59630",
"sha256": "1e476145b033937d888a6a2e0349833938666c8287e76a22387b05fe4ca72a86"
},
"downloads": -1,
"filename": "firedantic_mixin-1.0.8-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8d452c7286e6646062ca6a6ff6a59630",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11,<4.0",
"size": 8504,
"upload_time": "2023-10-07T22:23:57",
"upload_time_iso_8601": "2023-10-07T22:23:57.301462Z",
"url": "https://files.pythonhosted.org/packages/22/cd/660565bd71a1dbb18fab9730e7bddcb8d21770e451e4b5b30c0c887c40ce/firedantic_mixin-1.0.8-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1fd7c55fcc3b2a9ea20f94ffd840d133d021de8db2f38ffb6eb9f99580d331dd",
"md5": "09b35b83923f9aea4e85f246c7517f6a",
"sha256": "b56f34223b5a7a7d578dc30659e07bb274e928affd74e6150c776bfaff8970dc"
},
"downloads": -1,
"filename": "firedantic_mixin-1.0.8.tar.gz",
"has_sig": false,
"md5_digest": "09b35b83923f9aea4e85f246c7517f6a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11,<4.0",
"size": 7727,
"upload_time": "2023-10-07T22:23:58",
"upload_time_iso_8601": "2023-10-07T22:23:58.868406Z",
"url": "https://files.pythonhosted.org/packages/1f/d7/c55fcc3b2a9ea20f94ffd840d133d021de8db2f38ffb6eb9f99580d331dd/firedantic_mixin-1.0.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-10-07 22:23:58",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "firedantic-mixin"
}