Module rabbit.tlog.migration
View Source
import configparser
import logging
import os
from pathlib import Path
from typing import Optional
import attr
logging.getLogger(__name__).addHandler(logging.NullHandler())
@attr.s
class Migration:
driver = attr.ib(
type=str,
default=os.getenv(
"DATABASE_DRIVER", "postgresql://postgres:postgres@localhost:5432/db"
),
validator=attr.validators.instance_of(str),
)
_alembic_file = attr.ib(
type=Optional[str],
default=os.getenv("ALEMBIC_FILE"),
validator=attr.validators.optional(validator=attr.validators.instance_of(str)),
)
_script_location = attr.ib(
type=Optional[str],
default=os.getenv("SCRIPT_LOCATION"),
validator=attr.validators.optional(validator=attr.validators.instance_of(str)),
)
def __attrs_post_init__(self) -> None:
logging.debug(str(self))
self.configure()
self.apply()
@property
def alembic_file(self) -> str:
if not self._alembic_file:
return Path(f"{Path(__file__).parent.parent}/alembic.ini").as_posix()
return self._alembic_file
@property
def script_location(self) -> str:
if not self._script_location:
return Path(f"{Path(__file__).parent.parent}/migrations").as_posix()
return self._script_location
def configure(self) -> None:
migrations_config = configparser.ConfigParser()
migrations_config.read(self.alembic_file)
migrations_config.set("alembic", "script_location", str(self.script_location))
migrations_config.set("alembic", "sqlalchemy.url", str(self.driver))
with open(self.alembic_file, "w+") as alembic_config:
migrations_config.write(alembic_config)
def apply(self) -> None:
os.system(f"alembic -c {self.alembic_file} upgrade head")
Classes
Migration
class Migration(
driver: str = 'postgresql://postgres:postgres@localhost:5432/db',
alembic_file: Union[str, NoneType] = None,
script_location: Union[str, NoneType] = None
)
View Source
class Migration:
driver = attr.ib(
type=str,
default=os.getenv(
"DATABASE_DRIVER", "postgresql://postgres:postgres@localhost:5432/db"
),
validator=attr.validators.instance_of(str),
)
_alembic_file = attr.ib(
type=Optional[str],
default=os.getenv("ALEMBIC_FILE"),
validator=attr.validators.optional(validator=attr.validators.instance_of(str)),
)
_script_location = attr.ib(
type=Optional[str],
default=os.getenv("SCRIPT_LOCATION"),
validator=attr.validators.optional(validator=attr.validators.instance_of(str)),
)
def __attrs_post_init__(self) -> None:
logging.debug(str(self))
self.configure()
self.apply()
@property
def alembic_file(self) -> str:
if not self._alembic_file:
return Path(f"{Path(__file__).parent.parent}/alembic.ini").as_posix()
return self._alembic_file
@property
def script_location(self) -> str:
if not self._script_location:
return Path(f"{Path(__file__).parent.parent}/migrations").as_posix()
return self._script_location
def configure(self) -> None:
migrations_config = configparser.ConfigParser()
migrations_config.read(self.alembic_file)
migrations_config.set("alembic", "script_location", str(self.script_location))
migrations_config.set("alembic", "sqlalchemy.url", str(self.driver))
with open(self.alembic_file, "w+") as alembic_config:
migrations_config.write(alembic_config)
def apply(self) -> None:
os.system(f"alembic -c {self.alembic_file} upgrade head")
Class variables
Instance variables
Methods
apply
def apply(
self
) -> None
View Source
def apply(self) -> None:
os.system(f"alembic -c {self.alembic_file} upgrade head")
def configure(
self
) -> None
View Source
def configure(self) -> None:
migrations_config = configparser.ConfigParser()
migrations_config.read(self.alembic_file)
migrations_config.set("alembic", "script_location", str(self.script_location))
migrations_config.set("alembic", "sqlalchemy.url", str(self.driver))
with open(self.alembic_file, "w+") as alembic_config:
migrations_config.write(alembic_config)