mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
feat: Switch to postgres
Migrate from MariaDB to PostgreSQL. Signed-off-by: moson <moson@archlinux.org>
This commit is contained in:
parent
3220cf886e
commit
db8e2458f9
64 changed files with 572 additions and 629 deletions
|
@ -52,6 +52,7 @@ from sqlalchemy.orm import scoped_session
|
|||
|
||||
import aurweb.config
|
||||
import aurweb.db
|
||||
import aurweb.schema
|
||||
from aurweb import aur_logging, initdb, testing
|
||||
from aurweb.testing.email import Email
|
||||
from aurweb.testing.git import GitRepository
|
||||
|
@ -68,25 +69,28 @@ values.ValueClass = values.MutexValue
|
|||
|
||||
def test_engine() -> Engine:
|
||||
"""
|
||||
Return a privileged SQLAlchemy engine with no database.
|
||||
Return a privileged SQLAlchemy engine with default database.
|
||||
|
||||
This method is particularly useful for providing an engine that
|
||||
can be used to create and drop databases from an SQL server.
|
||||
|
||||
:return: SQLAlchemy Engine instance (not connected to a database)
|
||||
:return: SQLAlchemy Engine instance (connected to a default)
|
||||
"""
|
||||
unix_socket = aurweb.config.get_with_fallback("database", "socket", None)
|
||||
socket = aurweb.config.get_with_fallback("database", "socket", None)
|
||||
host = aurweb.config.get_with_fallback("database", "host", None)
|
||||
port = aurweb.config.get_with_fallback("database", "port", None)
|
||||
|
||||
kwargs = {
|
||||
"database": aurweb.config.get("database", "name"),
|
||||
"username": aurweb.config.get("database", "user"),
|
||||
"password": aurweb.config.get_with_fallback("database", "password", None),
|
||||
"host": aurweb.config.get("database", "host"),
|
||||
"port": aurweb.config.get_with_fallback("database", "port", None),
|
||||
"query": {"unix_socket": unix_socket},
|
||||
"host": socket if socket else host,
|
||||
"port": port if not socket else None,
|
||||
}
|
||||
|
||||
backend = aurweb.config.get("database", "backend")
|
||||
driver = aurweb.db.DRIVERS.get(backend)
|
||||
return create_engine(URL.create(driver, **kwargs))
|
||||
return create_engine(URL.create(driver, **kwargs), isolation_level="AUTOCOMMIT")
|
||||
|
||||
|
||||
class AlembicArgs:
|
||||
|
@ -116,7 +120,7 @@ def _create_database(engine: Engine, dbname: str) -> None:
|
|||
# a ProgrammingError. Just drop the database and try
|
||||
# again. If at that point things still fail, any
|
||||
# exception will be propogated up to the caller.
|
||||
conn.execute(f"DROP DATABASE {dbname}")
|
||||
conn.execute(f"DROP DATABASE {dbname} WITH (FORCE)")
|
||||
conn.execute(f"CREATE DATABASE {dbname}")
|
||||
conn.close()
|
||||
initdb.run(AlembicArgs)
|
||||
|
@ -129,9 +133,8 @@ def _drop_database(engine: Engine, dbname: str) -> None:
|
|||
:param engine: Engine returned by test_engine()
|
||||
:param dbname: Database name to drop
|
||||
"""
|
||||
aurweb.schema.metadata.drop_all(bind=engine)
|
||||
conn = engine.connect()
|
||||
conn.execute(f"DROP DATABASE {dbname}")
|
||||
conn.execute(f"DROP DATABASE {dbname} WITH (FORCE)")
|
||||
conn.close()
|
||||
|
||||
|
||||
|
@ -178,6 +181,10 @@ def db_session(setup_database: None) -> scoped_session:
|
|||
session.close()
|
||||
aurweb.db.pop_session(dbname)
|
||||
|
||||
# Dispose engine and close connections
|
||||
aurweb.db.get_engine(dbname).dispose()
|
||||
aurweb.db.pop_engine(dbname)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def db_test(db_session: scoped_session) -> None:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue