Refty / mongo-thingy

:leaves: Powerful schema-less ODM for MongoDB and Python (sync + async)
https://mongo-thingy.readthedocs.io
MIT License
68 stars 12 forks source link

Database discovery isn't documented nor working correctly #6

Closed guilbep closed 6 years ago

guilbep commented 7 years ago

For instance:

If I have a database sport with a collection synchronised_swimming and I name the class

class SynchronisedSwimming(Thingy):
    collection_name = "synchronised_swimming"
    database_name = "sport"

I have to specify the database; if not it will use the synchronised database which does not make sense in that context.

ramnes commented 7 years ago

How did you connect? The expected behavior is that Mongo-Thingy will only try to "guess" the database name (based on the class name construct) if it doesn't already have a database registered for that thingy.

guilbep commented 7 years ago

The thing is: If I have a class SynchronisedSwimming I want to access the collection 'synchronised_swimming'. But because of the CamelCase the collection used is 'swimming' instead. even if I say database_name = 'sport'

That's my point the 'guessing' part is not in the documentation.

ramnes commented 7 years ago

Please answer my question. If you'd have been connected to a database in the first place, it shouldn't have tried to guess the database, and should have used "synchronised_swimming" as the collection name. If it did not, this is not just a documentation problem, but a bug.

guilbep commented 7 years ago

Well, looks like it's not the case.

Here what happened: I first tried

class SynchronisedSwimming(Thingy):
    pass

And it connected to the "synchronised" Database with the "swimming" collection

I then tried

class SynchronisedSwimming(Thingy):
    database_name = "sport"

And it connected to the "sport" Database with the "swimming" collection

I then tried

class SynchronisedSwimming(Thingy):
    collection_name = "synchronised_swimming"
    database_name = "sport"

And it connected to the "sport" Database with the "synchronised_swimming" collection


I thought that by specifying the database the collection name would not be implied but it is not the case.

I'm using mongo-thingy 0.7.0 by the way.

Maybe I should have selected the database properly during the connect part ?

ramnes commented 7 years ago

The second example is definitely a bug.

For the first example, did you use connect with a default database (something like mongodb://domain/database)?

guilbep commented 7 years ago

I think the answer is yes:

@ramnes I used something like

def init():
    config = app.config.get_namespace("MONGO_")
    connect(**config)

And I set the env like so:

env = MONGO_HOST=mongodb://localhost/sport
ramnes commented 7 years ago

So the first example in your previous comment is a bug too. I guess there some work needed in Thingy too, so I've opened https://github.com/numberly/thingy/issues/6.

ramnes commented 6 years ago

Hey @guilbep,

Code is fixed and released; all your examples should work now!

The documentation part will come when we'll have a real one on RTFD.

Thanks for the bug report.