示例#1
0
 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()
示例#2
0
    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()
示例#3
0
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))