Esempio n. 1
0
def init_db(app: FastAPI) -> None:

    register_tortoise(
        app,
        db_url=os.environ.get("DATABASE_URL"),
        modules={"models": ["app.models.tortoiseORM"]},
        generate_schemas=False,
        add_exception_handlers=False,
    )
    Tortoise.init_models(['app.models.tortoiseORM'], 'models')
Esempio n. 2
0
from tortoise.models import Model
from tortoise import fields, Tortoise


class Record(Model):
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=255)
    text = fields.TextField(blank=True, null=True)
    is_important = fields.BooleanField(default=False)
    create_date = fields.DatetimeField(auto_now_add=True)
    edit_date = fields.DatetimeField(auto_now=True)
    creator = fields.ForeignKeyField('models.User', related_name='records')

    class Meta:
        ordering = ['-edit_date']


Tortoise.init_models(['src.app.users.models', 'src.app.records.models'],
                     'models')
Esempio n. 3
0
    created_at = fields.DatetimeField(auto_now_add=True)

    updated_at = fields.DatetimeField(auto_now=True)

    class Meta:
        """Meta data."""

        table = "assignment"

    def __str__(self: "Assignment") -> str:
        """The string representative for course class."""
        return f"{self.title}"


Tortoise.init_models(["teached.courses.models"], "models")
CourseListPydantic = pydantic_model_creator(
    Course,
    name="CourseList",
    exclude=(
        "id",
        "overview",
        "video",
        "is_drift",
        "is_active",
        "enrollments",
        "requirements",
        "reviews",
        "is_active",
        "languages.id",
        "requirements.id",
Esempio n. 4
0
from tortoise import Tortoise

Tortoise.init_models(["__main__"], "app.models")
Esempio n. 5
0
File: main.py Progetto: tlebrize/YO
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from tortoise import Tortoise
from tortoise.contrib.fastapi import register_tortoise

from .settings import Settings

Tortoise.init_models(["server.models"], "models")
from .routers import episode, auth
from .load_data import load_data

app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=Settings.ORIGINS,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

app.include_router(episode)
app.include_router(auth)


@app.get("/load_data/")
async def load_data_view():
    return await load_data()


TORTOISE_ORM = {
    "connections": {
Esempio n. 6
0
"""Submission models."""
from tortoise import Tortoise
from tortoise import fields

from app.models.db.base import BaseModel


class Submission(BaseModel):
    """Submission models."""

    url = fields.CharField(max_length=1024, null=False)

    challenge = fields.ForeignKeyField("models.Challenge", related_name="submissions")
    user = fields.ForeignKeyField("models.User", related_name="submissions")

    def __str__(self) -> str:
        return str(self.url)

    class PydanticMeta:  # pylint: disable=too-few-public-methods
        """Serializations options."""

        exclude_raw_fields = True


Tortoise.init_models(
    ["app.models.db.submission", "app.models.db.user", "app.models.db.challenge", ], "models"
)  # pydantic schema hack
Esempio n. 7
0
"""
@Author:   YangCheng
@contact:  [email protected]
@Software: Y.C
@Time:     2020/7/21 15:22
"""

from typing import List
from pydantic import BaseModel, Field
from tortoise import Tortoise
from tortoise.contrib.pydantic import pydantic_model_creator, pydantic_queryset_creator
from lib.tortoise.pydantic import json_encoders
from .models import Tag, Category, Article

Tortoise.init_models(["apps.blog.models"], "models")


class PydanticResponse(BaseModel):
    index: int
    limit: int
    total: int


# -*- tag -*-
# Tag create/update
TagCreateRequest = pydantic_model_creator(Tag,
                                          name="TagCreateRequest",
                                          exclude_readonly=True)

TagCreateResponse = pydantic_model_creator(Category,
                                           name="TagCreateResponse",
Esempio n. 8
0
    meta example:
        {
            "album": "album name",
            "key": "D♭ Major",
            "camelot": "3B",
            "bpm": "102",
            "duration": 205
        }
    """

    name = fields.CharField(max_length=255, null=True)
    author_name = fields.CharField(max_length=255, null=True)
    cover_url = fields.CharField(max_length=255, null=True)
    preview_url = fields.CharField(max_length=255, null=True)
    youtube_id = fields.CharField(max_length=255, null=True)
    spotify_id = fields.CharField(max_length=255, null=True)

    recommended = fields.BooleanField(null=True, default=False)
    meta = fields.JSONField()

    def __str__(self) -> str:
        return f"{self.author_name} - {self.name}"

    class PydanticMeta:  # pylint: disable=too-few-public-methods
        """Serializations options."""

        exclude = ("challenges", )


Tortoise.init_models(["app.models.db.track"], "models")  # pydantic schema hack
Esempio n. 9
0
        table = "teacher"


class Student(models.Model):
    """The student model."""

    id = fields.UUIDField(pk=True)

    user = fields.OneToOneField("models.User",
                                related_name="students",
                                on_delete=fields.CASCADE)

    class Meta:
        """Meta data."""

        table = "student"


Tortoise.init_models(["teached.users.models"], "models")
UserPydantic = pydantic_model_creator(User,
                                      name="User",
                                      exclude=("password", "id",
                                               "is_superuser"))
UserPersonalInfoPydantic = pydantic_model_creator(
    User,
    name="UserIn",
    include=("full_name", "phone_number", "bio"),
    exclude_readonly=True,
)
Esempio n. 10
0
    class Meta:
        table = "answers"


class Subject(Model):
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=50, unique=True, null=False)

    questions: fields.ReverseRelation["Question"]

    class Meta:
        table = "subjects"


Tortoise.init_models(["database.models"], "models")

User_Pydantic = pydantic_model_creator(User, name="User", exclude=("password",))
UserIn_Pydantic = pydantic_model_creator(User, name="UserIn", exclude_readonly=True)

Quiz_Pydantic = pydantic_model_creator(Quiz, name="Quiz")
QuizIn_Pydantic = pydantic_model_creator(Quiz, name="QuizIn", exclude_readonly=True)
Quiz_Pydantic_List = pydantic_queryset_creator(Quiz)

Question_Pydantic = pydantic_model_creator(Question, name="Question")
QuestionIn_Pydantic = pydantic_model_creator(Question, name="QuestionIn", exclude_readonly=True)

QuizQuestion_Pydantic = pydantic_model_creator(Question, name="QuizQuestion")
QuizQuestionIn_Pydantic = pydantic_model_creator(Question, name="QuizQuestionIn", exclude_readonly=True)

Answer_Pydantic = pydantic_model_creator(Answer, name="Answer")
Esempio n. 11
0
from tortoise.models import Model
from tortoise import fields
from tortoise.fields import data
from tortoise.contrib.pydantic import pydantic_model_creator
import uuid
from datetime import datetime
from tortoise import Tortoise

from models.user import User, Room

Tortoise.init_models(["models.room"], "models")

Room_Pydantic = pydantic_model_creator(Room, name="Room")
Esempio n. 12
0
from fastapi_users import models
from tortoise import Tortoise
from tortoise.contrib.pydantic import PydanticModel
from fastapi_users.db import TortoiseUserDatabase
from config import DBPaths
from src.users.models import UserModel

Tortoise.init_models(DBPaths.users, 'models')


class User(models.BaseUser, PydanticModel):
    class Config:
        orm_mode = True
        orig_model = UserModel


class UserCreate(models.BaseUserCreate):
    pass


class UserUpdate(User, models.BaseUserUpdate):
    pass


class UserDB(User, models.BaseUserDB):
    pass


user_db = TortoiseUserDatabase(UserDB, UserModel)
Esempio n. 13
0
# ADD - init
launch_tools.init_from_func(folder_scripts='__fast_api_app/init',
                            func_name='first_init')
if getattr(GeneralConfig, 'FAST_API_EXT_LAUNCH', None):
    for launch_folder in GeneralConfig.FAST_API_EXT_LAUNCH:
        launch_tools.init_from_func(folder_scripts=launch_folder,
                                    func_name='first_init')

if FastApiConfig in GeneralConfig.__bases__ and GeneralConfig.DEFAULT_DB_URI:
    # Чтобы работал педантик и прочие радости

    from tortoise import Tortoise
    from .__tools import tortoise as tor_tools

    Tortoise.init_models(['aerich.models', *tor_tools.models_inspector()],
                         'models')

APP_INIT = True
"""
Отдельное приложение под названием "Предварительная инициализация". 
Зачем? ASGI слишком крут - и может порвать в щепки файловую систему. 
Поэтому всё что нужно сделать с файлами и даже с БД лучше делать заранее. 
Тоесть любая важная подготовка файлов - их интроспекция и первоначальные объекты в системе - 
создавать тут. 
"""


def pre_launch():
    """
    Отдельная инициализация от самого приложения -
    фактически именно в этом скрипте, запущенным ДО старта ASGI
Esempio n. 14
0
# Settings
from config import settings

# Pydantic
from pydantic import BaseModel, Field

# Tortoise ORM
from tortoise import Tortoise
from tortoise.contrib.pydantic import pydantic_model_creator, pydantic_queryset_creator

# Models
from .models import Angel, Contact

# Init models to get all related fields
Tortoise.init_models(settings.DB_PATHS, app_label="models")

###################
# Contact Schemas #
###################

ContactDto = pydantic_model_creator(
    Contact,
    exclude=(
        "id",
        "angel",
        "angel_id",
        "created",
        "updated",
    ),
)
    def tutor_id(self) -> int:
        return self.tutor.id

    def student_ids(self) -> List[int]:
        try:
            return [student.id for student in self.students]
        except NoValuesFetched:
            return []

    class PydanticMeta:
        exclude = ["tutor", "students"]
        computed = ("tutor_id", "student_ids")


Tortoise.init_models(["app.models.tortoise"], "models")

User_Pydnatic = pydantic_model_creator(User, name="User")
_UserIn_Pydnatic = pydantic_model_creator(User,
                                          name="UserIn",
                                          exclude_readonly=True)

Category_Pydnatic = pydantic_model_creator(Category, name="Category")
_CategoryIn_Pydnatic = pydantic_model_creator(Category,
                                              name="CategoryIn",
                                              exclude_readonly=True)

Review_Pydnatic = pydantic_model_creator(Review, name="Reviews")
ReviewIn_Pydnatic = pydantic_model_creator(Review,
                                           name="ReviewIn",
                                           exclude_readonly=True)
Esempio n. 16
0
        exclude = ('comments', )


class Comment(models.Model):
    """ Comment class """
    user: fields.ForeignKeyRelation['User'] = fields.ForeignKeyField(
        'models.User', related_name="comments", on_delete=fields.CASCADE)
    post: fields.ForeignKeyRelation[Post] = fields.ForeignKeyField(
        'models.Post', related_name="comments", on_delete=fields.CASCADE)
    parent: fields.ForeignKeyNullableRelation[
        'Comment'] = fields.ForeignKeyField("models.Comment",
                                            on_delete=fields.SET_NULL,
                                            null=True,
                                            related_name='children')
    text = fields.TextField(max_length=2000)
    create_at = fields.DatetimeField(auto_now_add=True)
    update_at = fields.DatetimeField(auto_now=True)
    is_published = fields.BooleanField(default=True)
    is_deleted = fields.BooleanField(default=False)

    children: fields.ReverseRelation["Comment"]

    def __str__(self):
        return "{} - {}".format(self.user, self.post)

    class PydanticMeta:
        exclude = ('post', )


Tortoise.init_models(["src.app.blog.models"], "models")
Esempio n. 17
0
        'models.User', related_name='projects', through="team_project")

    class PydanticMeta:
        backward_relations = False
        exclude = ["category__children"]


class Task(models.Model):
    """ Model task by project
    """
    description = fields.TextField()
    create_date = fields.DatetimeField(auto_now_add=True)
    start_date = fields.DatetimeField(null=True)
    end_date = fields.DatetimeField(null=True)
    project = fields.ForeignKeyField('models.Project', related_name='tasks')
    worker = fields.ForeignKeyField('models.User',
                                    related_name='tasks',
                                    null=True)


class CommentTask(models.Model):
    """ Model comment by task
    """
    user = fields.ForeignKeyField('models.User', related_name='task_comments')
    task = fields.ForeignKeyField('models.Task', related_name='comments')
    message = fields.CharField(max_length=1000)
    create_date = fields.DatetimeField(auto_now_add=True)


Tortoise.init_models(["src.app.board.models"], "models")
from tortoise import Tortoise

Tortoise.init_models(["_models_"], "models")
Esempio n. 19
0
from tortoise import Tortoise
from tortoise.contrib.pydantic import pydantic_model_creator

from .role import Role
from .user import User


# Initialize model relationships
Tortoise.init_models(["src.models"], "models")

# User serialization
UserPydantic = pydantic_model_creator(User, exclude=("role",))
UserWithRelations = pydantic_model_creator(User, name="UserWithRelations")

# Role serialization
RolePydantic = pydantic_model_creator(Role, exclude=("users",))
RoleWithRelations = pydantic_model_creator(Role, name="RoleWithRelations")
Esempio n. 20
0
                   'user.confirmation')


class BaseProfile(BaseModel):
    first_name: str
    last_name: str


class CreateProfile(BaseProfile):
    user_id: str


class UpdateProfile(BaseProfile):
    pass


class ProfileAddCity(BaseModel):
    cities: list[int]


class ProfileMe(BaseProfile):
    cities: CreateCity


Tortoise.init_models(settings.MODELS, 'models')

Profile_Pydantic = pydantic_model_creator(Profile, name='Profile')
ProfileIn_Pydantic = pydantic_model_creator(Profile,
                                            name='Profile',
                                            exclude_readonly=True)
Esempio n. 21
0
from tortoise import Tortoise

from .models import Comment, Post, User

Tortoise.init_models([__name__], "models")
Esempio n. 22
0
    video_url = fields.CharField(200)

    type = fields.ForeignKeyField('models.SessionType')
    flags = fields.ManyToManyField('models.Flag', related_name='sessions')

    def registered_people(self) -> int:
        return 1 # todo -> 1 is dummy value

    class PydanticMeta:
        computed = ('registered_people', )
    




Tortoise.init_models(["main"], "models")

Session_Pydantic = pydantic_model_creator(Session, name='Session')
SessionIn_Pydantic = pydantic_model_creator(Session, name='SessionIn', exclude_readonly=True)

from pprint import pprint
pprint(Session_Pydantic.schema())
pprint(SessionIn_Pydantic.schema())

SessionType_Pydantic = pydantic_model_creator(SessionType, name='SessionType')
SessionTypeIn_Pydantic = pydantic_model_creator(SessionType, name='SessionTypeIn', exclude_readonly=True)

Flag_Pydantic = pydantic_model_creator(Flag, name='Flag')
FlagIn_Pydantic = pydantic_model_creator(Flag, name='FlagIn', exclude_readonly=True)

Esempio n. 23
0
from tortoise import fields, Tortoise
from tortoise.models import Model

from src.app.utils.enums import UserRole
from src.app.base.absctract_models import UserAbstract


class User(UserAbstract):
    role = fields.IntEnumField(enum_type=UserRole)

    def __str__(self) -> str:
        return self.email


Tortoise.init_models(['src.app.user.models'], 'models')
Esempio n. 24
0
    class PydanticMeta:
        max_recursion = 1


class Report(AbstractModel):
    data = fields.JSONField(description="报告内容")
    tasks = fields.ForeignKeyField('models.Task', related_name='Reports')
    start = fields.CharField(description="测试开始时间", max_length=255)
    end = fields.CharField(description="测试结束时间", max_length=255)

    class PydanticMeta:
        max_recursion = 1


# 解决pydantic_model_creator 生成的模型中 缺少外键关联字段
Tortoise.init_models(["db.models"], "models")

# 返回模型
User_Pydantic = pydantic_model_creator(User, name="User", exclude=["password"])

# 输入模型 exclude_readonly 只读字段 非必填
UserIn_Pydantic = pydantic_model_creator(User,
                                         name="UserIn",
                                         exclude=["avatar"],
                                         exclude_readonly=True)

Project_Pydantic = pydantic_model_creator(Project, name="Project")
ProjectIn_Pydantic = pydantic_model_creator(Project,
                                            name="ProjectIn",
                                            exclude_readonly=True)
Esempio n. 25
0
from ..planner.endpoints import planner_endpoints
from ..baby_tracker.endpoints import router as baby_router

# Create ASGI app:
app = FastAPI()
app.include_router(authentication.router)
app.include_router(secrets_router)
app.include_router(heating_endpoints.router)
app.include_router(crud_endpoints.router)
app.include_router(planner_endpoints.router)
app.include_router(baby_router)

# CORS Permissions:
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# Register tortoise-orm models:
Tortoise.init_models(["api.db.models", "api.baby_tracker.models"], "models")

register_tortoise(
    app,
    db_url=f"sqlite://{os.path.abspath(os.getcwd())}/api/db/db.sqlite3",
    modules={"models": ["api.db.models", "api.baby_tracker.models"]},
    generate_schemas=True,
    add_exception_handlers=True,
)
Esempio n. 26
0
#  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
#  SOFTWARE.

import asyncio
import json

from tortoise import Tortoise

from distrobuild_scheduler.sigul import check_sigul_key

Tortoise.init_models(["distrobuild.models"], "distrobuild")

from distrobuild.settings import TORTOISE_ORM, settings

from distrobuild.session import message_cipher

# noinspection PyUnresolvedReferences
from distrobuild_scheduler import init_channel, build_package, import_package, logger, periodic_tasks, merge_scratch


async def consume_messages(i: int):
    from distrobuild_scheduler import channel

    queue = await channel.declare_queue(settings.routing_key,
                                        auto_delete=False)
    async with queue.iterator() as queue_iter:
Esempio n. 27
0
        if self.start_time.date() == datetime.today().date():
            return True
        else:
            return False


class User(Model):
    id = fields.UUIDField(pk=True)
    # identifier = fields.UUIDField()
    anonymous = fields.BooleanField(default=False)
    name = fields.CharField(max_length=50)
    email = fields.CharField(max_length=50)
    username = fields.CharField(max_length=50)

    current_room: fields.ForeignKeyRelation[Room] = fields.ForeignKeyField(
        "models.Room", related_name="users", null=True)
    teams: fields.ManyToManyRelation[Team] = fields.ManyToManyField(
        "models.Team", related_name="members", through="user_team", default=[])

    async def change_room(self, room: Room):
        self.current_room = room
        await self.save()

    async def leave_room(self, room: Room):
        await self.current_room


Tortoise.init_models(["models.user"], "models")

User_Pydantic = pydantic_model_creator(User, name="user")
Esempio n. 28
0
    def test_early_init(self):
        self.maxDiff = None
        Event_TooEarly = pydantic_model_creator(Event)
        self.assertEqual(
            Event_TooEarly.schema(),
            {
                "title": "Event",
                "type": "object",
                "description": "The Event model docstring.<br/><br/>This is multiline docs.",
                "properties": {
                    "id": {"title": "Id", "type": "integer", "maximum": 2147483647, "minimum": 1},
                    "name": {
                        "title": "Name",
                        "type": "string",
                        "description": "The Event NAME<br/>It's pretty important",
                        "maxLength": 255,
                    },
                    "created_at": {
                        "title": "Created At",
                        "type": "string",
                        "format": "date-time",
                        "readOnly": True,
                    },
                },
                "required": ["id", "name", "created_at"],
                "additionalProperties": False,
            },
        )
        self.assertEqual(
            Event.describe(),
            {
                "name": "None.Event",
                "app": None,
                "table": "",
                "abstract": False,
                "description": "The Event model docstring.",
                "docstring": "The Event model docstring.\n\nThis is multiline docs.",
                "unique_together": [],
                "indexes": [],
                "pk_field": {
                    "name": "id",
                    "field_type": "IntField",
                    "db_column": "id",
                    "python_type": "int",
                    "generated": True,
                    "nullable": False,
                    "unique": True,
                    "indexed": True,
                    "default": None,
                    "description": None,
                    "docstring": None,
                    "constraints": {"ge": 1, "le": 2147483647},
                    "db_field_types": {"": "INT"},
                },
                "data_fields": [
                    {
                        "name": "name",
                        "field_type": "CharField",
                        "db_column": "name",
                        "python_type": "str",
                        "generated": False,
                        "nullable": False,
                        "unique": False,
                        "indexed": False,
                        "default": None,
                        "description": "The Event NAME",
                        "docstring": "The Event NAME\nIt's pretty important",
                        "constraints": {"max_length": 255},
                        "db_field_types": {"": "VARCHAR(255)"},
                    },
                    {
                        "name": "created_at",
                        "field_type": "DatetimeField",
                        "db_column": "created_at",
                        "python_type": "datetime.datetime",
                        "generated": False,
                        "nullable": False,
                        "unique": False,
                        "indexed": False,
                        "default": None,
                        "description": None,
                        "docstring": None,
                        "constraints": {"readOnly": True},
                        "db_field_types": {
                            "": "TIMESTAMP",
                            "mssql": "DATETIME2",
                            "mysql": "DATETIME(6)",
                            "postgres": "TIMESTAMPTZ",
                            "oracle": "TIMESTAMP WITH TIME ZONE",
                        },
                        "auto_now_add": True,
                        "auto_now": False,
                    },
                ],
                "fk_fields": [
                    {
                        "name": "tournament",
                        "field_type": "ForeignKeyFieldInstance",
                        "python_type": "None",
                        "generated": False,
                        "nullable": True,
                        "unique": False,
                        "indexed": False,
                        "default": None,
                        "description": None,
                        "docstring": None,
                        "constraints": {},
                        "raw_field": None,
                        "on_delete": "CASCADE",
                        "db_constraint": True,
                    }
                ],
                "backward_fk_fields": [],
                "o2o_fields": [],
                "backward_o2o_fields": [],
                "m2m_fields": [],
            },
        )

        Tortoise.init_models(["tests.test_early_init"], "models")

        Event_Pydantic = pydantic_model_creator(Event)
        self.assertEqual(
            Event_Pydantic.schema(),
            {
                "title": "Event",
                "type": "object",
                "description": "The Event model docstring.<br/><br/>This is multiline docs.",
                "properties": {
                    "id": {"title": "Id", "type": "integer", "maximum": 2147483647, "minimum": 1},
                    "name": {
                        "title": "Name",
                        "type": "string",
                        "description": "The Event NAME<br/>It's pretty important",
                        "maxLength": 255,
                    },
                    "created_at": {
                        "title": "Created At",
                        "type": "string",
                        "format": "date-time",
                        "readOnly": True,
                    },
                    "tournament": {
                        "title": "Tournament",
                        "nullable": True,
                        "allOf": [{"$ref": "#/definitions/tests.test_early_init.Tournament.leaf"}],
                    },
                },
                "definitions": {
                    "tests.test_early_init.Tournament.leaf": {
                        "title": "Tournament",
                        "type": "object",
                        "properties": {
                            "id": {
                                "title": "Id",
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": 1,
                            },
                            "name": {"title": "Name", "type": "string", "maxLength": 100},
                            "created_at": {
                                "title": "Created At",
                                "type": "string",
                                "format": "date-time",
                                "readOnly": True,
                            },
                        },
                        "required": ["id", "name", "created_at"],
                        "additionalProperties": False,
                    }
                },
                "required": ["id", "name", "created_at"],
                "additionalProperties": False,
            },
        )
        self.assertEqual(
            Event.describe(),
            {
                "name": "models.Event",
                "app": "models",
                "table": "event",
                "abstract": False,
                "description": "The Event model docstring.",
                "docstring": "The Event model docstring.\n\nThis is multiline docs.",
                "unique_together": [],
                "indexes": [],
                "pk_field": {
                    "name": "id",
                    "field_type": "IntField",
                    "db_column": "id",
                    "db_field_types": {"": "INT"},
                    "python_type": "int",
                    "generated": True,
                    "nullable": False,
                    "unique": True,
                    "indexed": True,
                    "default": None,
                    "description": None,
                    "docstring": None,
                    "constraints": {"ge": 1, "le": 2147483647},
                },
                "data_fields": [
                    {
                        "name": "name",
                        "field_type": "CharField",
                        "db_column": "name",
                        "db_field_types": {"": "VARCHAR(255)"},
                        "python_type": "str",
                        "generated": False,
                        "nullable": False,
                        "unique": False,
                        "indexed": False,
                        "default": None,
                        "description": "The Event NAME",
                        "docstring": "The Event NAME\nIt's pretty important",
                        "constraints": {"max_length": 255},
                    },
                    {
                        "name": "created_at",
                        "field_type": "DatetimeField",
                        "db_column": "created_at",
                        "db_field_types": {
                            "": "TIMESTAMP",
                            "mssql": "DATETIME2",
                            "mysql": "DATETIME(6)",
                            "postgres": "TIMESTAMPTZ",
                            "oracle": "TIMESTAMP WITH TIME ZONE",
                        },
                        "python_type": "datetime.datetime",
                        "generated": False,
                        "nullable": False,
                        "unique": False,
                        "indexed": False,
                        "default": None,
                        "description": None,
                        "docstring": None,
                        "constraints": {"readOnly": True},
                        "auto_now_add": True,
                        "auto_now": False,
                    },
                    {
                        "name": "tournament_id",
                        "field_type": "IntField",
                        "db_column": "tournament_id",
                        "db_field_types": {"": "INT"},
                        "python_type": "int",
                        "generated": False,
                        "nullable": True,
                        "unique": False,
                        "indexed": False,
                        "default": None,
                        "description": None,
                        "docstring": None,
                        "constraints": {"ge": 1, "le": 2147483647},
                    },
                ],
                "fk_fields": [
                    {
                        "name": "tournament",
                        "field_type": "ForeignKeyFieldInstance",
                        "raw_field": "tournament_id",
                        "python_type": "models.Tournament",
                        "generated": False,
                        "nullable": True,
                        "on_delete": "CASCADE",
                        "unique": False,
                        "indexed": False,
                        "default": None,
                        "description": None,
                        "docstring": None,
                        "constraints": {},
                        "db_constraint": True,
                    }
                ],
                "backward_fk_fields": [],
                "o2o_fields": [],
                "backward_o2o_fields": [],
                "m2m_fields": [],
            },
        )
Esempio n. 29
0
from tortoise import Tortoise, fields


class User(Model):
    id = fields.IntField(pk=True)
    username = fields.CharField(50, unique=True)
    password_hash = fields.CharField(128)

    items = fields.ReverseRelation['Item']

    @classmethod
    async def get_user(cls, username):
        return cls.get(username=username)

    def verify_password(self, password):
        return bcrypt.verify(password, self.password_hash)

    class PydanticMeta:
        exclude = []


class Item(Model):
    id = fields.IntField(pk=True)
    name = fields.CharField(150)

    user: fields.ForeignKeyRelation[User] = fields.ForeignKeyField(
        "models.User", related_name="items")


Tortoise.init_models(['api.models'], 'models')