def test_mysql_params(self): res = expand_db_url( "mysql://root:@127.0.0.1:3306/test?AHA=5&moo=yes&maxsize=20&minsize=5" "&connect_timeout=1.5&echo=1") self.assertEqual( res, { "engine": "tortoise.backends.mysql", "credentials": { "database": "test", "host": "127.0.0.1", "password": "", "port": 3306, "user": "******", "AHA": "5", "moo": "yes", "minsize": 5, "maxsize": 20, "connect_timeout": 1.5, "echo": True, "charset": "utf8mb4", "sql_mode": "STRICT_TRANS_TABLES", }, }, )
def test_sqlite_relative(self): res = expand_db_url("sqlite://test.sqlite") self.assertDictEqual( res, { "engine": "tortoise.backends.sqlite", "credentials": { "file_path": "test.sqlite" } })
def _create_connection(self, conn_alias: str) -> "BaseDBAsyncClient": db_info = self._get_db_info(conn_alias) if isinstance(db_info, str): db_info = expand_db_url(db_info) client_class = self._discover_client_class(db_info.get("engine", "")) db_params = db_info["credentials"].copy() db_params.update({"connection_name": conn_alias}) connection: "BaseDBAsyncClient" = client_class(**db_params) return connection
async def _init_connections(cls, connections_config, create_db): for name, info in connections_config.items(): if isinstance(info, str): info = expand_db_url(info) client_class = cls._discover_client_class(info.get('engine')) connection = client_class(**info['credentials']) if create_db: await connection.db_create() await connection.create_connection() cls._connections[name] = connection
def test_sqlite_relative_with_subdir(self): res = expand_db_url("sqlite://data/db.sqlite") self.assertDictEqual( res, { "engine": "tortoise.backends.sqlite", "file_path": "data/db.sqlite", "journal_mode": "WAL", "journal_size_limit": 16384, }, )
def test_sqlite_basic(self): res = expand_db_url("sqlite:///some/test.sqlite") self.assertDictEqual( res, { "engine": "tortoise.backends.sqlite", "file_path": "/some/test.sqlite", "journal_mode": "WAL", "journal_size_limit": 16384, }, )
def test_sqlite_basic(self): res = expand_db_url("sqlite:///some/test.sqlite") self.assertDictEqual( res, { "engine": "tortoise.backends.sqlite", "credentials": { "file_path": "/some/test.sqlite" }, }, )
def test_sqlite_relative_with_subdir(self): res = expand_db_url("sqlite://data/db.sqlite") self.assertDictEqual( res, { "engine": "tortoise.backends.sqlite", "credentials": { "file_path": "data/db.sqlite" } }, )
def test_sqlite_relative(self): res = expand_db_url("sqlite://test.sqlite") self.assertDictEqual( res, { "engine": "tortoise.backends.sqlite", "credentials": { "file_path": "test.sqlite", "journal_mode": "WAL", "journal_size_limit": 16384, }, }, )
def test_sqlite_params(self): res = expand_db_url("sqlite:///some/test.sqlite?AHA=5&moo=yes") self.assertDictEqual( res, { "engine": "tortoise.backends.sqlite", "credentials": { "file_path": "/some/test.sqlite", "AHA": "5", "moo": "yes" }, }, )
def test_postgres_basic(self): res = expand_db_url("postgres://*****:*****@127.0.0.1:54321/test") self.assertDictEqual( res, { "engine": "tortoise.backends.asyncpg", "database": "test", "host": "127.0.0.1", "password": "******", "port": 54321, "user": "******", }, )
async def _init_connections(cls, connections_config, create_db): for name, info in connections_config.items(): if isinstance(info, str): info = expand_db_url(info) client_class = cls._discover_client_class(info.get('engine')) db_params = deepcopy(info['credentials']) db_params.update({'connection_name': name}) connection = client_class(**db_params) if create_db: await connection.db_create() await connection.create_connection() cls._connections[name] = connection current_transaction_map[name] = ContextVar(name, default=None)
def test_mysql_params(self): res = expand_db_url('mysql://root:@127.0.0.1:3306/test?AHA=5&moo=yes') self.assertEqual(res, { 'engine': 'tortoise.backends.mysql', 'credentials': { 'database': 'test', 'host': '127.0.0.1', 'password': '', 'port': '3306', 'user': '******', 'AHA': '5', 'moo': 'yes', } })
def test_sqlite_testing(self): res = expand_db_url(db_url="sqlite:///some/test-{}.sqlite", testing=True) file_path = res["credentials"]["file_path"] self.assertIn("/some/test-", file_path) self.assertIn(".sqlite", file_path) self.assertNotEqual("sqlite:///some/test-{}.sqlite", file_path) self.assertDictEqual( res, { "engine": "tortoise.backends.sqlite", "credentials": { "file_path": file_path } })
def test_sqlite_params(self): res = expand_db_url( "sqlite:///some/test.sqlite?AHA=5&moo=yes&journal_mode=TRUNCATE") self.assertDictEqual( res, { "engine": "tortoise.backends.sqlite", "file_path": "/some/test.sqlite", "AHA": "5", "moo": "yes", "journal_mode": "TRUNCATE", "journal_size_limit": 16384, }, )
def _init_connections(self, connections_config: dict) -> None: for connection_name, conn_config in connections_config.items(): if isinstance(conn_config, str): conn_config = expand_db_url(conn_config) client_class = self._discover_client_class( conn_config.get("engine")) db_params = conn_config.copy() db_params.pop("engine", None) db_params.update({"connection_name": connection_name}) db_client = client_class(**db_params) self._db_client_map[connection_name] = db_client self._current_transaction_map[connection_name] = ContextVar( connection_name, default=db_client)
def test_postgres_no_port(self): res = expand_db_url("postgres://[email protected]/test") self.assertDictEqual( res, { "engine": "tortoise.backends.asyncpg", "credentials": { "database": "test", "host": "127.0.0.1", "password": "", "port": 5432, "user": "******", }, }, )
def test_mysql_no_port(self): res = expand_db_url("mysql://[email protected]/test") self.assertEqual( res, { "engine": "tortoise.backends.mysql", "credentials": { "database": "test", "host": "127.0.0.1", "password": "", "port": 3306, "user": "******", }, }, )
def test_mysql_no_port(self): res = expand_db_url("mysql://[email protected]/test") self.assertEqual( res, { "engine": "tortoise.backends.mysql", "database": "test", "host": "127.0.0.1", "password": "", "port": 3306, "user": "******", "charset": "utf8mb4", "sql_mode": "STRICT_TRANS_TABLES", }, )
def test_postgres_encoded_password(self): res = expand_db_url( "postgres://*****:*****@127.0.0.1:54321/test") self.assertDictEqual( res, { "engine": "tortoise.backends.asyncpg", "credentials": { "database": "test", "host": "127.0.0.1", "password": "******", "port": 54321, "user": "******", }, }, )
def test_postgres_no_port(self): for scheme, engine in self._postgres_scheme_engines.items(): res = expand_db_url(f"{scheme}://[email protected]/test") self.assertDictEqual( res, { "engine": engine, "credentials": { "database": "test", "host": "127.0.0.1", "password": None, "port": 5432, "user": "******", }, }, )