mirror of https://github.com/stijndcl/didier
Create base model for Mongo schemas
parent
6bebd109bb
commit
e6b4c3fd76
|
@ -5,7 +5,7 @@ from sqlalchemy.ext.asyncio import AsyncEngine
|
||||||
|
|
||||||
from alembic import context
|
from alembic import context
|
||||||
from database.engine import postgres_engine
|
from database.engine import postgres_engine
|
||||||
from database.models import Base
|
from database.schemas.relational import Base
|
||||||
|
|
||||||
# this is the Alembic Config object, which provides
|
# this is the Alembic Config object, which provides
|
||||||
# access to the values within the .ini file in use.
|
# access to the values within the .ini file in use.
|
||||||
|
|
|
@ -7,7 +7,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy.orm import selectinload
|
from sqlalchemy.orm import selectinload
|
||||||
|
|
||||||
from database.crud import users
|
from database.crud import users
|
||||||
from database.models import Birthday, User
|
from database.schemas.relational import Birthday, User
|
||||||
|
|
||||||
__all__ = ["add_birthday", "get_birthday_for_user", "get_birthdays_on_day"]
|
__all__ = ["add_birthday", "get_birthday_for_user", "get_birthdays_on_day"]
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from database.crud import users
|
from database.crud import users
|
||||||
from database.exceptions import currency as exceptions
|
from database.exceptions import currency as exceptions
|
||||||
from database.models import Bank, NightlyData
|
from database.schemas.relational import Bank, NightlyData
|
||||||
from database.utils.math.currency import (
|
from database.utils.math.currency import (
|
||||||
capacity_upgrade_price,
|
capacity_upgrade_price,
|
||||||
interest_upgrade_price,
|
interest_upgrade_price,
|
||||||
|
|
|
@ -5,7 +5,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from database.exceptions.constraints import DuplicateInsertException
|
from database.exceptions.constraints import DuplicateInsertException
|
||||||
from database.exceptions.not_found import NoResultFoundException
|
from database.exceptions.not_found import NoResultFoundException
|
||||||
from database.models import CustomCommand, CustomCommandAlias
|
from database.schemas.relational import CustomCommand, CustomCommandAlias
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"clean_name",
|
"clean_name",
|
||||||
|
|
|
@ -2,7 +2,7 @@ from sqlalchemy import func, select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from database.exceptions.not_found import NoResultFoundException
|
from database.exceptions.not_found import NoResultFoundException
|
||||||
from database.models import DadJoke
|
from database.schemas.relational import DadJoke
|
||||||
|
|
||||||
__all__ = ["add_dad_joke", "get_random_dad_joke"]
|
__all__ = ["add_dad_joke", "get_random_dad_joke"]
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ from sqlalchemy import select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from database.enums import TaskType
|
from database.enums import TaskType
|
||||||
from database.models import Task
|
from database.schemas.relational import Task
|
||||||
from database.utils.datetime import LOCAL_TIMEZONE
|
from database.utils.datetime import LOCAL_TIMEZONE
|
||||||
|
|
||||||
__all__ = ["get_task_by_enum", "set_last_task_execution_time"]
|
__all__ = ["get_task_by_enum", "set_last_task_execution_time"]
|
||||||
|
|
|
@ -3,7 +3,7 @@ import datetime
|
||||||
from sqlalchemy import delete, select
|
from sqlalchemy import delete, select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from database.models import UforaAnnouncement, UforaCourse
|
from database.schemas.relational import UforaAnnouncement, UforaCourse
|
||||||
|
|
||||||
__all__ = ["create_new_announcement", "get_courses_with_announcements", "remove_old_announcements"]
|
__all__ = ["create_new_announcement", "get_courses_with_announcements", "remove_old_announcements"]
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ from typing import Optional
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from database.models import UforaCourse, UforaCourseAlias
|
from database.schemas.relational import UforaCourse, UforaCourseAlias
|
||||||
|
|
||||||
__all__ = ["get_all_courses", "get_course_by_name"]
|
__all__ = ["get_all_courses", "get_course_by_name"]
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ from typing import Optional
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from database.models import Bank, NightlyData, User
|
from database.schemas.relational import Bank, NightlyData, User
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"get_or_add",
|
"get_or_add",
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
from bson import ObjectId
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
__all__ = []
|
||||||
|
|
||||||
|
|
||||||
|
class PyObjectId(str):
|
||||||
|
"""Custom type for bson ObjectIds"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def __get_validators__(cls):
|
||||||
|
yield cls.validate
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def validate(cls, value: str):
|
||||||
|
"""Check that a string is a valid bson ObjectId"""
|
||||||
|
if not ObjectId.is_valid(value):
|
||||||
|
raise ValueError(f"Invalid ObjectId: '{value}'")
|
||||||
|
|
||||||
|
return ObjectId(value)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def __modify_schema__(cls, field_schema: dict):
|
||||||
|
field_schema.update(type="string")
|
||||||
|
|
||||||
|
|
||||||
|
class MongoBase(BaseModel):
|
||||||
|
"""Base model that properly sets the _id field, and adds one by default"""
|
||||||
|
|
||||||
|
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
"""Configuration for encoding and construction"""
|
||||||
|
|
||||||
|
allow_population_by_field_name = True
|
||||||
|
arbitrary_types_allowed = True
|
||||||
|
json_encoders = {ObjectId: str, PyObjectId: str}
|
||||||
|
use_enum_values = True
|
|
@ -13,7 +13,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
import settings
|
import settings
|
||||||
from database.crud import ufora_announcements as crud
|
from database.crud import ufora_announcements as crud
|
||||||
from database.models import UforaCourse
|
from database.schemas.relational import UforaCourse
|
||||||
from didier.data.embeds.base import EmbedBaseModel
|
from didier.data.embeds.base import EmbedBaseModel
|
||||||
from didier.utils.types.datetime import int_to_weekday
|
from didier.utils.types.datetime import int_to_weekday
|
||||||
from didier.utils.types.string import leading
|
from didier.utils.types.string import leading
|
||||||
|
|
|
@ -3,7 +3,13 @@ import datetime
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from database.crud import users
|
from database.crud import users
|
||||||
from database.models import Bank, UforaAnnouncement, UforaCourse, UforaCourseAlias, User
|
from database.schemas.relational import (
|
||||||
|
Bank,
|
||||||
|
UforaAnnouncement,
|
||||||
|
UforaCourse,
|
||||||
|
UforaCourseAlias,
|
||||||
|
User,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session")
|
@pytest.fixture(scope="session")
|
||||||
|
|
|
@ -4,7 +4,7 @@ from freezegun import freeze_time
|
||||||
|
|
||||||
from database.crud import birthdays as crud
|
from database.crud import birthdays as crud
|
||||||
from database.crud import users
|
from database.crud import users
|
||||||
from database.models import User
|
from database.schemas.relational import User
|
||||||
|
|
||||||
|
|
||||||
async def test_add_birthday_not_present(postgres, user: User):
|
async def test_add_birthday_not_present(postgres, user: User):
|
||||||
|
|
|
@ -5,7 +5,7 @@ from freezegun import freeze_time
|
||||||
|
|
||||||
from database.crud import currency as crud
|
from database.crud import currency as crud
|
||||||
from database.exceptions import currency as exceptions
|
from database.exceptions import currency as exceptions
|
||||||
from database.models import Bank
|
from database.schemas.relational import Bank
|
||||||
|
|
||||||
|
|
||||||
async def test_add_dinks(postgres, bank: Bank):
|
async def test_add_dinks(postgres, bank: Bank):
|
||||||
|
|
|
@ -4,7 +4,7 @@ from sqlalchemy import select
|
||||||
from database.crud import custom_commands as crud
|
from database.crud import custom_commands as crud
|
||||||
from database.exceptions.constraints import DuplicateInsertException
|
from database.exceptions.constraints import DuplicateInsertException
|
||||||
from database.exceptions.not_found import NoResultFoundException
|
from database.exceptions.not_found import NoResultFoundException
|
||||||
from database.models import CustomCommand
|
from database.schemas.relational import CustomCommand
|
||||||
|
|
||||||
|
|
||||||
async def test_create_command_non_existing(postgres):
|
async def test_create_command_non_existing(postgres):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
|
||||||
from database.crud import dad_jokes as crud
|
from database.crud import dad_jokes as crud
|
||||||
from database.models import DadJoke
|
from database.schemas.relational import DadJoke
|
||||||
|
|
||||||
|
|
||||||
async def test_add_dad_joke(postgres):
|
async def test_add_dad_joke(postgres):
|
||||||
|
|
|
@ -6,7 +6,7 @@ from sqlalchemy import select
|
||||||
|
|
||||||
from database.crud import tasks as crud
|
from database.crud import tasks as crud
|
||||||
from database.enums import TaskType
|
from database.enums import TaskType
|
||||||
from database.models import Task
|
from database.schemas.relational import Task
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from database.crud import ufora_announcements as crud
|
from database.crud import ufora_announcements as crud
|
||||||
from database.models import UforaAnnouncement, UforaCourse
|
from database.schemas.relational import UforaAnnouncement, UforaCourse
|
||||||
|
|
||||||
|
|
||||||
async def test_get_courses_with_announcements_none(postgres):
|
async def test_get_courses_with_announcements_none(postgres):
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from database.crud import ufora_courses as crud
|
from database.crud import ufora_courses as crud
|
||||||
from database.models import UforaCourse
|
from database.schemas.relational import UforaCourse
|
||||||
|
|
||||||
|
|
||||||
async def test_get_course_by_name_exact(postgres, ufora_course: UforaCourse):
|
async def test_get_course_by_name_exact(postgres, ufora_course: UforaCourse):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
|
||||||
from database.crud import users as crud
|
from database.crud import users as crud
|
||||||
from database.models import User
|
from database.schemas.relational import User
|
||||||
|
|
||||||
|
|
||||||
async def test_get_or_add_non_existing(postgres):
|
async def test_get_or_add_non_existing(postgres):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from database.models import UforaCourse
|
from database.schemas.relational import UforaCourse
|
||||||
from database.utils.caches import UforaCourseCache
|
from database.utils.caches import UforaCourseCache
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue