IOError when using the Python neo4j driver to connect to Reactome data
dvklopfenstein opened this issue · 3 comments
Guidelines
- Neo4j version: neo4j-community-4.0.1
- Neo4j Mode: Single instance
- Driver version: Python3.6 lanaguage driver 1.7.6
- Operating system: Ubuntu 16.04.4 LTS
- Java: jdk-11.0.6
- Reactome graph database version: 71
Steps to reproduce
The instructions to load the Reactome database into Neo4j are detailed in neo4j #12408.
The crucial step to get Reactome up and running in Neo4j was given by @gsviteri in
his comment.
Now I am trying to access the Reactome database from a Python script using the recommended Neo4j driver.
from neo4j import GraphDatabase
# Try various loads:
drv = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))
drv = GraphDatabase.driver("neo4j://localhost:7687", auth=("neo4j", "password"))
drv = GraphDatabase.driver("bolt://localhost:7687/graph.db", auth=("neo4j", "password"))
drv = GraphDatabase.driver("neo4j://localhost:7687/graph.db", auth=("neo4j", "password"))
Each of these attempts result in the same OSError, shown in the Actual behavior section.
Expected behavior
I expect to get a GraphDatabase object back and see no errors.
Actual behavior
Here the error that appears on the screen for each attempt:
Traceback (most recent call last):
File "/mnt/c/Users/note2/Data/git/ReactomePy/src/reactomepy/code/utils.py", line 32, in get_gdbdr
return GraphDatabase.driver(dct['url'], auth=(dct['neo4j_username'], dct['neo4j_password']))
File "/home/neo4j/anaconda3/lib/python3.6/site-packages/neo4j/__init__.py", line 120, in driver
return Driver(uri, **config)
File "/home/neo4j/anaconda3/lib/python3.6/site-packages/neo4j/__init__.py", line 161, in __new__
return subclass(uri, **config)
File "/home/neo4j/anaconda3/lib/python3.6/site-packages/neo4j/__init__.py", line 235, in __new__
pool.release(pool.acquire())
File "/home/neo4j/anaconda3/lib/python3.6/site-packages/neobolt/direct.py", line 715, in acquire
return self.acquire_direct(self.address)
File "/home/neo4j/anaconda3/lib/python3.6/site-packages/neobolt/direct.py", line 608, in acquire_direct
connection = self.connector(address, error_handler=self.connection_error_handler)
File "/home/neo4j/anaconda3/lib/python3.6/site-packages/neo4j/__init__.py", line 232, in connector
return connect(address, **dict(config, **kwargs))
File "/home/neo4j/anaconda3/lib/python3.6/site-packages/neobolt/direct.py", line 972, in connect
raise last_error
File "/home/neo4j/anaconda3/lib/python3.6/site-packages/neobolt/direct.py", line 963, in connect
s, der_encoded_server_certificate = _secure(s, host, security_plan.ssl_context, **config)
File "/home/neo4j/anaconda3/lib/python3.6/site-packages/neobolt/direct.py", line 854, in _secure
s = ssl_context.wrap_socket(s, server_hostname=host if HAS_SNI and host else None)
File "/home/neo4j/anaconda3/lib/python3.6/ssl.py", line 407, in wrap_socket
_context=self, _session=session)
File "/home/neo4j/anaconda3/lib/python3.6/ssl.py", line 817, in __init__
self.do_handshake()
File "/home/neo4j/anaconda3/lib/python3.6/ssl.py", line 1077, in do_handshake
self._sslobj.do_handshake()
File "/home/neo4j/anaconda3/lib/python3.6/ssl.py", line 689, in do_handshake
self._sslobj.do_handshake()
OSError: [Errno 0] Error
I don't see anything interesting in the neo4j.log or the debug.log, but have attached them anyway.
This used to work for me for these versions:
- Neo4j version: neo4j-community-3.4.7
- Java: jdk1.8.0_192
- Reactome graph database version: 68
Is this important?
As shown in the next couple figures, when things worked, the connection was:
neo4j@bolt://localhost:7687
Now, the connection is:
neo4j@neo4j://localhost:7687/graph.db
Successful past:
The browser looked like this in the past:
Unsuccessful present:
FYI: Thank goodness, it is working with:
- Neo4j version: neo4j-community-3.4.7
- Java: jdk1.8.0_192
- Reactome graph database version: 71
Here is the successful run:
$ python3
Python 3.6.7 | packaged by conda-forge | (default, Jul 2 2019, 02:18:42)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from neo4j import GraphDatabase
>>> drv = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", password))
>>> print(drv)
<neo4j.DirectDriver object at 0x7f1b7b3d2240>
How might this work using Neo4j 4.0.1?
No hurry, though, since access to Reactome through Python works with neo4j 3.4.7.
@dvklopfenstein Going from a 1.7 driver to a 4.0 server, you will need to disable encryption, which is turned on by default. Use encrypted=False
in your driver constructor.
@dvklopfenstein thanks for your feedback