Skip to content

afuenzalida/firedom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Firedom

Tests

Simple Firestore ORM for Python.

Installation

pip install firedom

Getting started

Initialize Firedom

from firedom import Firedom


firedom = Firedom(service_account_json_path='your-credentials.json')

Define your models

Create a model for your Firestore collection by inheriting from Model:

from dataclasses import dataclass
from firedom import Firedom


firedom = Firedom(service_account_json_path='your-credentials.json')


@dataclass
class Company(firedom.Model):
    name: str


@dataclass
class User(firedom.Model):
    username: str
    email: int
    country: str
    city: str
    is_active: bool = True
    number_of_pets: int = 0
    company: Company

    class Config:
        # Required: Field to be used as document ID
        document_id_field = 'username'

Manipulate documents

Create

company = Company.collection.create(name='Example Company')

user = User.collection.create(
    username='afuenzalida',
    email='[email protected]',
    country='Chile',
    city='Santiago',
    company=company,
)

Retrieve

users = User.collection.all()

user = User.collection.get('afuenzalida')

Filter

# All arguments are considered as AND:
users = User.collection.where(
    User.country == 'Chile',
    User.is_active == True,
    User.city.is_in(['Santiago', 'Valparaíso']),
    User.number_of_pets > 1,
)

# You can filter with OR using the | operator:
users = User.collection.where(
    (User.country == 'Chile') |
    (User.country == 'China'),
)

# And you can also filter explicitly with AND using the & operator:
users = User.collection.where(
    (User.city == 'Santiago') &
    (User.number_of_pets == 0),
)

# Full example: Filter by active users from Chile or China:
users = User.collection.where(
    (User.is_active == True) &
    (
        (User.country == 'Chile') |
        (User.country == 'China')
    ),
)

Sort

users = User.collection.where(
    User.country == 'Chile',
).order_by(
    'email',
    desc=True,
)

Update

user = User.collection.get('afuenzalida')
user.country = 'Australia'
user.save()

Delete

user = User.collection.get('afuenzalida')
user.delete()

User.collection.all().delete()