def postgres_user_conf(request, postgres_conf): from datacat.db import connect conn = connect(**postgres_conf) conn.autocommit = True randomcode = random.randint(0, 999999) name = 'dtctest_{0:06d}'.format(randomcode) # Note: we need to use separate transactions to perform # administrative activities such as creating/dropping databases # and roles. # For this reason, we need to set the connection isolation level # to "autocommit" with conn.cursor() as cur: cur.execute( """ CREATE ROLE "{name}" LOGIN PASSWORD %(password)s; """.format(name=name), dict(password=name)) cur.execute(""" CREATE DATABASE "{name}" WITH OWNER "{name}" ENCODING = 'UTF-8'; """.format(name=name)) def cleanup(): conn.autocommit = True with conn.cursor() as cur: # Kill all connections to database first cur.execute(""" SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '{name}' AND pid <> pg_backend_pid(); """.format(name=name)) cur.execute('DROP DATABASE "{name}";'.format(name=name)) cur.execute('DROP ROLE "{name}";'.format(name=name)) request.addfinalizer(cleanup) conf = postgres_conf.copy() conf['user'] = name conf['password'] = name conf['database'] = name # HACK to create PostGIS extension, used by some plugins _conf = postgres_conf.copy() _conf['database'] = name _conn = connect(**_conf) _conn.autocommit = True with _conn.cursor() as cur: cur.execute("CREATE EXTENSION postgis;") return conf
def postgres_user_conf(request, postgres_conf): from datacat.db import connect conn = connect(**postgres_conf) conn.autocommit = True randomcode = random.randint(0, 999999) name = 'dtctest_{0:06d}'.format(randomcode) # Note: we need to use separate transactions to perform # administrative activities such as creating/dropping databases # and roles. # For this reason, we need to set the connection isolation level # to "autocommit" with conn.cursor() as cur: cur.execute(""" CREATE ROLE "{name}" LOGIN PASSWORD %(password)s; """.format(name=name), dict(password=name)) cur.execute(""" CREATE DATABASE "{name}" WITH OWNER "{name}" ENCODING = 'UTF-8'; """.format(name=name)) def cleanup(): conn.autocommit = True with conn.cursor() as cur: # Kill all connections to database first cur.execute(""" SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '{name}' AND pid <> pg_backend_pid(); """.format(name=name)) cur.execute('DROP DATABASE "{name}";'.format(name=name)) cur.execute('DROP ROLE "{name}";'.format(name=name)) request.addfinalizer(cleanup) conf = postgres_conf.copy() conf['user'] = name conf['password'] = name conf['database'] = name # HACK to create PostGIS extension, used by some plugins _conf = postgres_conf.copy() _conf['database'] = name _conn = connect(**_conf) _conn.autocommit = True with _conn.cursor() as cur: cur.execute("CREATE EXTENSION postgis;") return conf
def postgres_user_db_ac(request, postgres_user_conf): """User database with autocommit on""" from datacat.db import connect conn = connect(**postgres_user_conf) conn.autocommit = True request.addfinalizer(lambda: conn.close()) return conn
def make_app(config=None): from datacat.db import create_tables, connect app = make_flask_app(config) celery_app = make_celery(app.config) celery_app.set_current() _adm_conn = connect(**app.config['DATABASE']) _adm_conn.autocommit = True create_tables(_adm_conn) finalize_app(app) return app
def postgres_admin_db(request, postgres_conf): from datacat.db import connect conn = connect(**postgres_conf) request.addfinalizer(lambda: conn.close()) return conn
def postgres_user_db(request, postgres_user_conf): from datacat.db import connect conn = connect(**postgres_user_conf) conn.autocommit = False request.addfinalizer(lambda: conn.close()) return conn
def admin_db(self): if getattr(self, '_admin_db', None) is None: self._admin_db = connect(**self.config['DATABASE']) self._admin_db.autocommit = True return self._admin_db
def db(self): if getattr(self, '_db', None) is None: self._db = connect(**self.config['DATABASE']) self._db.autocommit = False return self._db