krz/hutch-stats
Server-side utility for calculating contributions for sourcehut users.
clone: git clone https://gitbay.org/krz/hutch-stats.git
1from __future__ import annotations
2
3from logging.config import fileConfig
4import os
5
6from alembic import context
7from sqlalchemy import engine_from_config, pool
8
9from srht_contrib.config import Settings
10from srht_contrib.db import Base
11from srht_contrib.models import ActorAlias, ContributionEvent, SyncState, TrackedRepository # noqa: F401
12
13config = context.config
14
15if config.config_file_name is not None:
16 fileConfig(config.config_file_name)
17
18target_metadata = Base.metadata
19
20
21def get_database_url() -> str:
22 env_database_url = os.getenv("DATABASE_URL")
23 if env_database_url:
24 return env_database_url
25
26 configured_url = config.get_main_option("sqlalchemy.url")
27 if configured_url:
28 return configured_url
29 return Settings().database_url
30
31
32def run_migrations_offline() -> None:
33 context.configure(
34 url=get_database_url(),
35 target_metadata=target_metadata,
36 literal_binds=True,
37 dialect_opts={"paramstyle": "named"},
38 )
39
40 with context.begin_transaction():
41 context.run_migrations()
42
43
44def run_migrations_online() -> None:
45 section = config.get_section(config.config_ini_section) or {}
46 section["sqlalchemy.url"] = get_database_url()
47 connectable = engine_from_config(
48 section,
49 prefix="sqlalchemy.",
50 poolclass=pool.NullPool,
51 )
52
53 with connectable.connect() as connection:
54 context.configure(connection=connection, target_metadata=target_metadata)
55
56 with context.begin_transaction():
57 context.run_migrations()
58
59
60if context.is_offline_mode():
61 run_migrations_offline()
62else:
63 run_migrations_online()