heynemann / motorengine

Motorengine is a port of MongoEngine for Tornado.
http://motorengine.readthedocs.org
204 stars 67 forks source link

Cannot connect to db with authentication #82

Open partyzan opened 9 years ago

partyzan commented 9 years ago

Passing username and password arguments to connect fails with :

Traceback (most recent call last):
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/motorengine/connection.py", line 83, in get_connection
    _connections[alias] = connection_class(**conn_settings)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/motor/__init__.py", line 1131, in __init__
    super(MotorClient, self).__init__(io_loop, *args, **kwargs)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/motor/__init__.py", line 986, in __init__
    delegate = self.__delegate_class__(*args, **kwargs)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/pymongo/mongo_client.py", line 284, in __init__
    option, value = common.validate(option, value)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/pymongo/common.py", line 314, in validate
    value = validator(option, value)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/pymongo/common.py", line 61, in raise_config_error
    raise ConfigurationError("Unknown option %s" % (key,))
pymongo.errors.ConfigurationError: Unknown option username

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/dimap/workspace/PycharmProjects/Transmit/transmit/run_server.py", line 171, in <module>
    main()
  File "/Users/dimap/workspace/PycharmProjects/Transmit/transmit/run_server.py", line 82, in main
    injector.get("MONGO")
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/injector.py", line 672, in get
    result = scope_instance.get(key, binding.provider).get(self)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/injector.py", line 182, in get
    return injector.call_with_injection(self._callable)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/injector.py", line 805, in call_with_injection
    **dependencies)
  File "/Users/dimap/workspace/PycharmProjects/Transmit/transmit/utils/db.py", line 48, in get_mongo_db
    io_loop=tornado.ioloop.IOLoop.instance())
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/motorengine/connection.py", line 122, in connect
    return get_connection(alias, db=db)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/motorengine/connection.py", line 87, in get_connection
    raise six.reraise(ConnectionError, err, exc_info[2])
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/six.py", line 624, in reraise
    raise value.with_traceback(tb)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/motorengine/connection.py", line 83, in get_connection
    _connections[alias] = connection_class(**conn_settings)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/motor/__init__.py", line 1131, in __init__
    super(MotorClient, self).__init__(io_loop, *args, **kwargs)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/motor/__init__.py", line 986, in __init__
    delegate = self.__delegate_class__(*args, **kwargs)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/pymongo/mongo_client.py", line 284, in __init__
    option, value = common.validate(option, value)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/pymongo/common.py", line 314, in validate
    value = validator(option, value)
  File "/Users/dimap/venv/vader/lib/python3.4/site-packages/pymongo/common.py", line 61, in raise_config_error
    raise ConfigurationError("Unknown option %s" % (key,))
motorengine.connection.ConnectionError: Cannot connect to database main :
Unknown option username

According to Motor manual the MotorClient should be created with uri for authentication :

uri = "mongodb://user:pass@localhost:27017/database_name"
client = motor.MotorClient(uri)
heynemann commented 9 years ago

Hmmm... can you help us with a PR? I'm having a hard time to keep up with all the projects...

partyzan commented 9 years ago

Did some more testing based on the code and PyMongo documentation - authentication works when using mongo URI to connect as the host:

motorengine.connect(db=name, alias=alias, host="mongodb://username:password@127.0.0.1:27017", io_loop=tornado.ioloop.IOLoop.instance())

So only documentation should be updated :)