24
24
from sqlalchemy .ext .automap import automap_base
25
25
from sqlalchemy .ext .declarative import declarative_base
26
26
from sqlalchemy .orm import relationship , sessionmaker
27
+ from sqlalchemy .pool import NullPool
27
28
28
29
standard_library .install_aliases ()
29
30
@@ -34,7 +35,8 @@ class ChadoModel(object):
34
35
35
36
class ChadoInstance (object ):
36
37
37
- def __init__ (self , dbhost = "localhost" , dbname = "chado" , dbuser = "chado" , dbpass = "chado" , dbschema = "public" , dbport = 5432 , dburl = None , offline = False , no_reflect = False , reflect_tripal_tables = False , ** kwargs ):
38
+ def __init__ (self , dbhost = "localhost" , dbname = "chado" , dbuser = "chado" , dbpass = "chado" , dbschema = "public" , dbport = 5432 , dburl = None , offline = False ,
39
+ no_reflect = False , reflect_tripal_tables = False , pool_connections = True , ** kwargs ):
38
40
self .dbhost = dbhost
39
41
self .dbname = dbname
40
42
self .dbuser = dbuser
@@ -47,9 +49,17 @@ def __init__(self, dbhost="localhost", dbname="chado", dbuser="chado", dbpass="c
47
49
if '@[' in self .dburl :
48
50
# the url given by pglite is not in the correct format for sqlalchmemy
49
51
self .dburl = re .sub (r"postgres://(.+)@\[(.+)\]/(.+)" , r"postgres://\1@/\3?host=\2" , self .dburl )
50
- self . _engine = create_engine ( '%s' % ( self .dburl ))
52
+ engine_url = self .dburl
51
53
else :
52
- self ._engine = create_engine ('postgresql://%s:%s@%s:%s/%s' % (self .dbuser , self .dbpass , self .dbhost , self .dbport , self .dbname ))
54
+ engine_url = 'postgresql://%s:%s@%s:%s/%s' % (self .dbuser , self .dbpass , self .dbhost , self .dbport , self .dbname )
55
+
56
+ if pool_connections :
57
+ self ._engine = create_engine (engine_url )
58
+ else :
59
+ # Prevent SQLAlchemy to make a connection pool.
60
+ # Useful for galaxy dynamic options as otherwise it triggers "sorry, too many clients already" errors after a while
61
+ self ._engine = create_engine (engine_url , poolclass = NullPool )
62
+
53
63
self ._metadata = MetaData (self ._engine , schema = self .dbschema )
54
64
Session = sessionmaker (bind = self ._engine )
55
65
self .session = Session ()
0 commit comments