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.