def get_dependencias_a_ressuscitar(slug):
    ocorrencias = yaml.load(
        Path(DIR_REPO.child('ocorrencias.yaml').read_file()))
    fks_faltando = ocorrencias.get('fk')
    if not fks_faltando:
        return [], [], []

    proposicoes_para_materia = [
        fk for fk in fks_faltando
        if fk['tabela'] == 'proposicao' and fk['campo'] == 'cod_materia'
    ]

    preambulo = get_apaga_materias_de_proposicoes(proposicoes_para_materia,
                                                  slug)

    propagacoes = {(o, c) for t, o, c in PROPAGACOES_DE_EXCLUSAO}

    fks_faltando = [
        fk for fk in fks_faltando if fk not in proposicoes_para_materia and (
            fk['tabela'], fk['campo']) not in propagacoes
    ]

    excluidos = [get_excluido(fk) for fk in fks_faltando]
    desexcluir, criar = [
        set([(tabela_alvo, campo, valor)
             for tabela_origem, campo, valor, tabela_alvo, res in excluidos
             if condicao(res)]) for condicao in (
                 # o registro existe e ind_excluido == 1
                 lambda res: res and res[0][0] == 1,
                 # o registro não existe
                 lambda res: not res)
    ]
    return preambulo, desexcluir, criar
Esempio n. 2
0
def compactar_media():

    # tar de media/sapl
    print('Criando tar de media... ', end='', flush=True)
    arq_tar = DIR_REPO.child('{}.media.tar'.format(NOME_BANCO_LEGADO))
    arq_tar.remove()
    subprocess.check_output(['tar', 'cfh', arq_tar, '-C', DIR_REPO, 'sapl'])
    print('SUCESSO')
Esempio n. 3
0
def gravar_marco():
    """Grava um dump de todos os dados como arquivos yaml no repo de marco
    """
    # prepara ou localiza repositorio
    dir_dados = Path(REPO.working_dir, 'dados')

    # exporta dados como arquivos yaml
    user_model = get_user_model()
    models = get_models_a_migrar() + [
        Composicao, user_model, Group, ContentType
    ]
    for model in models:
        info('Gravando marco de [{}]'.format(model.__name__))
        dir_model = dir_dados.child(model._meta.app_label, model.__name__)
        dir_model.mkdir(parents=True)
        for data in model.objects.all().values():
            nome_arq = Path(dir_model, '{}.yaml'.format(data['id']))
            with open(nome_arq, 'w') as arq:
                pyaml.dump(data, arq)

    # backup do banco
    print('Gerando backup do banco... ', end='', flush=True)
    arq_backup = DIR_REPO.child('{}.backup'.format(NOME_BANCO_LEGADO))
    arq_backup.remove()
    backup_cmd = '''
        pg_dump --host localhost --port 5432 --username postgres --no-password
        --format custom --blobs --verbose --file {} {}'''.format(
        arq_backup, NOME_BANCO_LEGADO)
    subprocess.check_output(backup_cmd.split(), stderr=subprocess.DEVNULL)
    print('SUCESSO')

    # salva mudanças
    REPO.git.add([dir_dados.name])
    if 'master' not in REPO.heads or REPO.index.diff('HEAD'):
        # se de fato existe mudança
        REPO.index.commit('Grava marco')
    REPO.git.execute('git tag -f'.split() + [TAG_MARCO])