Welcome to RethinkModel’s documentation!

What is this ?

RethinkModel aims to help you to describe your data as classes to be easilly created, updated and get from RethinkDB.

Rethink:Model make uses of typing support annotations - Python annotations describe the model fields. That’s easy, you only have to import the standard typing module, and use any of Optionnal, Type, List, Union… types.

Note

Rethink:Model will not fully check your field types, it’s designed to trust your IDE and your competences 💪.

It’s simple as a pie

from typing import Optional
from rethinkdb.model import Model

class Post(Model):
    author: User
    content: str
    tags: Optional[List[str]]

class User(Model):
    login: str
    email: str

user = User(login="John", email="me@foo.com").save()
post = Post(author=user, content="This is the post").save()

Above example uses simple types, but you can do:

class Post(Model):
    author: Type[User]
    content: Type[str]
    tags: Optional[List[str]]

This way, your IDE will complain if you try to set something else than a User in author, None in content…

The goals

  • Describe the models in the simplest possible way, but also in the most meaningful way

  • Make use of powerful typing package from Python > 3.7

  • Avoid type checking at runtime (What ?) but let your IDE punish you

Python is not a staticly typed langage. But Python developers want it (or not 😜) - So there are many Python tools that are designed to use typing package which is integrated with Python SDK: Pyright (use by PyLance), MyPy, PyType…

Your IDE can make type checking.

  • Vim can use coc-pyright

  • VsCode can use PyLance

  • PyCharm knows how to manage typing

  • etc…

So, let’s use typing ! Rethink:Model is designed to use the typing package.

Indices and tables