DFiP_Budget_planing/api/alembic/versions/0022_summary2_contract_rows.py
2026-08-27 16:52:58 +03:00

62 lines
1.9 KiB
Python

import os
import re
from alembic import op
revision = "0022"
down_revision = "0021"
branch_labels = None
depends_on = None
_DOLLAR_TAG_RE = re.compile(r"\$\w+\$")
def _split_statements(sql: str) -> list[str]:
statements: list[str] = []
current: list[str] = []
dollar_tag: str | None = None
for line in sql.splitlines():
stripped = line.strip()
if stripped.startswith("--"):
continue
if dollar_tag is None:
match = _DOLLAR_TAG_RE.search(stripped)
if match:
dollar_tag = match.group(0)
elif stripped.startswith(dollar_tag):
dollar_tag = None
current.append(line)
if dollar_tag is None and stripped.endswith(";"):
statements.append("\n".join(current))
current = []
if remaining := "\n".join(current).strip():
statements.append(remaining)
return statements
def upgrade() -> None:
ddl_path = os.path.join(
os.path.dirname(__file__), "sql", "0022_summary2_contract_rows.sql"
)
with open(ddl_path) as ddl_file:
statements = _split_statements(ddl_file.read())
for statement in statements:
op.execute(statement.rstrip(";").strip())
def downgrade() -> None:
op.execute("DROP FUNCTION IF EXISTS v3.v_svod2_rf(integer, integer[], integer, integer, varchar, varchar)")
op.execute("DROP FUNCTION IF EXISTS v3.v_svod2_go(integer, integer[], integer, integer, varchar, varchar)")
op.execute("DROP FUNCTION IF EXISTS v3.v_svod2_rf(integer, integer[], integer, integer)")
op.execute("DROP FUNCTION IF EXISTS v3.v_svod2_go(integer, integer[], integer, integer)")
op.execute("DROP FUNCTION IF EXISTS v3.v_svod2_rf(integer, integer[])")
op.execute("DROP FUNCTION IF EXISTS v3.v_svod2_go(integer, integer[])")
op.execute("DROP INDEX IF EXISTS v3.ix_v3_budget_line_svod2")
op.execute("DROP INDEX IF EXISTS v3.ix_v3_budget_form_svod2")