def setUp(self): super(DbTestCase, self).setUp() db_path = os.path.join(self.get_temp_dir(), 'DbTestCase.sqlite') self._db_connection_provider = (lambda: db.Connection( sqlite3.connect(db_path, isolation_level=None))) with contextlib.closing(self.connect()) as db_conn: schema = db.Schema(db_conn) schema.create_tables() schema.create_indexes()
def connect_db(self): """Establishes a PEP 249 DB connection. :rtype: db.Connection """ if self._db_connection_provider is None: db_path = os.path.join(self.get_temp_dir(), 'TestCase.sqlite') self._db_connection_provider = (lambda: db.Connection( sqlite3.connect(db_path, isolation_level=None))) with contextlib.closing(self._db_connection_provider()) as db_conn: schema = db.Schema(db_conn) schema.create_tables() schema.create_indexes() return self._db_connection_provider()
def create_sqlite_connection_provider(db_uri): """Returns function that returns SQLite Connection objects. Args: db_uri: A string URI expressing the DB file, e.g. "sqlite:~/tb.db". Returns: A function that returns a new PEP-249 DB Connection, which must be closed, each time it is called. Raises: ValueError: If db_uri is not a valid sqlite file URI. """ uri = urlparse.urlparse(db_uri) if uri.scheme != 'sqlite': raise ValueError('Scheme is not sqlite: ' + db_uri) if uri.netloc: raise ValueError('Can not connect to SQLite over network: ' + db_uri) if uri.path == ':memory:': raise ValueError('Memory mode SQLite not supported: ' + db_uri) path = os.path.expanduser(uri.path) params = _get_connect_params(uri.query) # TODO(@jart): Add thread-local pooling. return lambda: db.Connection(sqlite3.connect(path, **params))