-
Type: Improvement
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: 3.0.3
-
Component/s: None
-
None
In pymongo 3.0.x when trying to connect to a unix domain socket without the correct permissions the error message doesn't indicate the reason for failure:
In [1]: from pymongo import MongoClient In [2]: MongoClient("mongodb:///tmp/mongodb-27017.sock").database_names() --------------------------------------------------------------------------- ServerSelectionTimeoutError Traceback (most recent call last) <ipython-input-2-857110db2600> in <module>() ----> 1 MongoClient("mongodb:///tmp/mongodb-27017.sock").database_names() /home/vagrant/.virtualenvs/pymongo/local/lib/python2.7/site-packages/pymongo/mongo_client.pyc in database_names(self) 903 self.admin.command( 904 "listDatabases", --> 905 read_preference=ReadPreference.PRIMARY)["databases"]] 906 907 def drop_database(self, name_or_database): /home/vagrant/.virtualenvs/pymongo/local/lib/python2.7/site-packages/pymongo/database.pyc in command(self, command, value, check, allowable_errors, read_preference, codec_options, **kwargs) 449 """ 450 client = self.__client --> 451 with client._socket_for_reads(read_preference) as (sock_info, slave_ok): 452 return self._command(sock_info, command, slave_ok, value, 453 check, allowable_errors, read_preference, /usr/lib/python2.7/contextlib.pyc in __enter__(self) 15 def __enter__(self): 16 try: ---> 17 return self.gen.next() 18 except StopIteration: 19 raise RuntimeError("generator didn't yield") /home/vagrant/.virtualenvs/pymongo/local/lib/python2.7/site-packages/pymongo/mongo_client.pyc in _socket_for_reads(self, read_preference) 697 topology = self._get_topology() 698 single = topology.description.topology_type == TOPOLOGY_TYPE.Single --> 699 with self._get_socket(read_preference) as sock_info: 700 slave_ok = (single and not sock_info.is_mongos) or ( 701 preference != ReadPreference.PRIMARY) /usr/lib/python2.7/contextlib.pyc in __enter__(self) 15 def __enter__(self): 16 try: ---> 17 return self.gen.next() 18 except StopIteration: 19 raise RuntimeError("generator didn't yield") /home/vagrant/.virtualenvs/pymongo/local/lib/python2.7/site-packages/pymongo/mongo_client.pyc in _get_socket(self, selector) 661 @contextlib.contextmanager 662 def _get_socket(self, selector): --> 663 server = self._get_topology().select_server(selector) 664 try: 665 with server.get_socket(self.__all_credentials) as sock_info: /home/vagrant/.virtualenvs/pymongo/local/lib/python2.7/site-packages/pymongo/topology.pyc in select_server(self, selector, server_selection_timeout, address) 119 return random.choice(self.select_servers(selector, 120 server_selection_timeout, --> 121 address)) 122 123 def select_server_by_address(self, address, /home/vagrant/.virtualenvs/pymongo/local/lib/python2.7/site-packages/pymongo/topology.pyc in select_servers(self, selector, server_selection_timeout, address) 95 if server_timeout == 0 or now > end_time: 96 raise ServerSelectionTimeoutError( ---> 97 self._error_message(selector)) 98 99 self._ensure_opened() ServerSelectionTimeoutError: %d format: a number is required, not NoneType
In pymongo 2.x I would get a "permission denied" error message, helping me identify the cause of the connection failure.