Quick mixin to provide basic features to firedantic
Project description
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
from firedantic_mixin.mixin import FiredanticMonkey
How to use
Simply swap the super class of firedantic.Model for FiredanticMonkey
Firedantic standard | Firedantic mixin |
---|---|
from firedantic import Model
class Orders(Model):
__collection__ = "Monkey-Orders"
item : str
quantity : int
price: float
|
from firedantic_mixin.mixin import FiredanticMonkey
class Orders(FiredanticMonkey):
__collection__ = "Monkey-Orders"
item : str
quantity : int
price: float
|
This opens up the ability to do standard compound tasks by returning Firestores BaseQuery
# 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 to go back to a Firedantic model simply do:
models = Orders.to_dantic(results)
What else can you now do?
As you have direct access to BasicQuery as part of the model
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file firedantic_mixin-1.0.5.tar.gz
.
File metadata
- Download URL: firedantic_mixin-1.0.5.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.11.0 Linux/6.2.0-1012-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca1bfbfce000195bf4b8b0abc894e25073e210733935d437d32e4d05242966f5 |
|
MD5 | 267bd716fe4ed54d9eaa43490370deb5 |
|
BLAKE2b-256 | f294bc03383389a15d414dce4da3264da67b23cde9cbeafb17a0e56f6d1f8bcf |
File details
Details for the file firedantic_mixin-1.0.5-py3-none-any.whl
.
File metadata
- Download URL: firedantic_mixin-1.0.5-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.11.0 Linux/6.2.0-1012-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 026eacb76d865221c111535ef422169b3e987d1d28d438cdd80cda50dc025086 |
|
MD5 | f30e3e57bae969b1763781ad9f941521 |
|
BLAKE2b-256 | ad2f45c52291d46969f531eccb3910c15ba3bffd8a1d48b7f12e4750cde7da31 |