Metadata-Version: 2.1
Name: frantic
Version: 0.1.2
Summary: Firestore with Pydantic models integration
Home-page: https://github.com/tomasvotava/frantic
License: MIT
Author: Tomas Votava
Author-email: info@tomasvotava.eu
Requires-Python: >=3.10,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Requires-Dist: google-cloud-firestore (>=2.6.0,<3.0.0)
Requires-Dist: pydantic (>=1.9.1,<2.0.0)
Project-URL: Documentation, https://tomasvotava.github.io/frantic
Project-URL: Repository, https://github.com/tomasvotava/frantic
Description-Content-Type: text/markdown

# Frantic

Firestore with Pydantic models integration.

Please note that this module is a work in progress. API may change over time. Also, the code is not tested yet
and there are no security checks run periodically.

## Installation

### Using `pip`

```console
pip install frantic
```

### Using `poetry`

```console
poetry add frantic
```

## Basic usage

If you have your service account key path set in `GOOGLE_APPLICATION_CREDENTIALS`, it's fairly easy:

```python
import asyncio
from typing import ClassVar
from frantic import Frantic, BaseModel


# Create a model the same way you would do it with Pydantic
class User(BaseModel):
    # optionally, you may specify name of collection instances will be stored within:
    collection: ClassVar = "my_users_collection"
    # field 'id' is added automatically
    name: str


async def main():
    frantic = Frantic()

    user = User(name="ijustfarted")

    # Save user in the Firestore db
    await frantic.add(user)

    # user's id gets automatically populated and can be used to retrieve the user
    retrieved = await frantic.get(User, user.id)
    assert retrieved.name == user.name

    # list all users
    users = await frantic.list(User)

    # delete user
    await frantic.delete(user)
    # or
    await frantic.delete(User, user.id)

if __name__ == "__main__":
    asyncio.run(main)
```

