aminalaee / mongox

Familiar async Python MongoDB ODM
https://aminalaee.github.io/mongox
MIT License
122 stars 7 forks source link

Error when working with multiple models #86

Open macthefloof opened 2 years ago

macthefloof commented 2 years ago

When working with 2 different models, it seems like mongox is ignoring the collection name and inserting into the first one's collection.

Currently, I have 2 models defined in 2 different files:

class UserAction(mongox.Model, db=db, collection="user_actions"):
    server_id: int
    name: str
    aliases: list[str]
    emoji: str
    self_text: str
    receivers_text: list[str]
class ServerSetting(mongox.Model, db=db, collection="server_settings"):
    server_id: int
    ignored_channels: list[int]

Firstly, I insert into server_settings, but when I try to insert into user_actions, the object gets created inside the server_settings collection instead.

macthefloof commented 2 years ago

I have made a simple script to run that displays the bug in full.

import asyncio

import mongox

client = mongox.Client("mongodb://localhost:27017")
db = client.get_database("test_db")

class Movie(mongox.Model, db=db, collection="movies"):
    name: str
    year: int
    genres: list[str]

class Book(mongox.Model, db=db, collection="books"):
    title: str
    author: str
    year: int

async def test() -> None:
    forrest_gump = await Movie(name="Forrest Gump", year=1994, genres=["Comedy", "Tragedy"]).insert()
    nineteen84 = await Book(title="1984", author="George Orwell", year=1949).insert()
    print(forrest_gump.name)
    print(nineteen84.title)

if __name__ == "__main__":
    asyncio.run(test())

In this case, we get the following result when viewed in Compass: image