Source code for asyncorm.orm_migrations.migration_constructor

import logging

logger = logging.getLogger("asyncorm_stream")

TEMPLATE_TEXT = """\
from asyncorm.models.app_migrator import MigrationBase
from asyncorm.orm_migrations.migration_actions import *


"""


[docs]class MigrationConstructor(object): def __init__(self, file_name, depends, actions, initial=False): self.file_name = file_name with open(self.file_name, "w") as f: f.write(TEMPLATE_TEXT) self._write(0, "class Migration(MigrationBase):\n") self._initial_creator(initial) self._depends_creator(depends) self._actions_creator(actions)
[docs] @staticmethod def tabulation(tab_level): if tab_level: return " " * tab_level return ""
def _write(self, tab_level, txt): with open(self.file_name, "a") as myfile: myfile.write(self.tabulation(tab_level) + txt) def _write_dictformater(self, tab_level, name, content, notrail=False, asignation=False): end_singleline = notrail and "'{}': {{}}\n" or "'{}': {{}},\n" end_multistr = notrail and "'{}': '{}'\n" or "'{}': '{}',\n" end_multinostr = notrail and "'{}': {}\n" or "'{}': {},\n" if isinstance(content, dict): if content: if asignation: self._write(tab_level, "{}={{\n".format(name)) else: self._write(tab_level, "'{}': {{\n".format(name)) for f, v in content.items(): self._write_dictformater(tab_level + 1, f, v) self._write(tab_level, "},\n") else: self._write(tab_level, end_singleline.format(name)) elif isinstance(content, str): self._write(tab_level, end_multistr.format(name, content)) else: self._write(tab_level, end_multinostr.format(name, content)) def _initial_creator(self, initial): tab_level = 1 self._write(tab_level, "initial = {}\n".format(initial)) def _depends_creator(self, depends): tab_level = 1 self._write(tab_level, "depends = ['{}']\n".format("', '".join(depends))) def _actions_creator(self, actions): tab_level = 1 self._write(tab_level, "actions = [\n") for action in actions: self._write(2, "{}(\n".format(action.__class__.__name__)) self._write(3, "'{}',\n".format(action.model_name)) self._write_dictformater(3, "fields", action.fields, asignation=True) self._write_dictformater(3, "meta", action.meta, asignation=True) self._write(2, "),\n") self._write(tab_level, "]\n")