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
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')
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])