Browse Source

Grava sequences ao gravar marco

migracao
Marcio Mazza 6 years ago
parent
commit
f0359a2c39
  1. 20
      sapl/legacy/migracao_dados.py

20
sapl/legacy/migracao_dados.py

@ -827,6 +827,12 @@ def criar_configuracao_inicial():
return True
def get_sequence_name_and_last_value(model):
sequence_name = '%s_id_seq' % model._meta.db_table
[(last_value,)] = exec_sql(f'select last_value from {sequence_name}')
return sequence_name, last_value
def reinicia_sequence(model, id):
sequence_name = '%s_id_seq' % model._meta.db_table
exec_sql('ALTER SEQUENCE %s RESTART WITH %s MINVALUE -1;' % (
@ -984,8 +990,7 @@ def migrar_todos_os_models(apagar_do_legado):
def migrar_model(model, apagar_do_legado):
print('Migrando %s...' % model.__name__)
model_legado, tabela_legado, campos_pk_legado = \
get_estrutura_legado(model)
model_legado, tabela_legado, campos_pk_legado = get_estrutura_legado(model)
if len(campos_pk_legado) == 1:
@ -1468,11 +1473,11 @@ yaml.add_constructor(u'!time', time_constructor)
TAG_MARCO = 'marco'
def gravar_marco():
def gravar_marco(nome_dir='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')
dir_dados = Path(REPO.working_dir, nome_dir)
# limpa todo o conteúdo antes
dir_dados.rmtree()
dir_dados.mkdir()
@ -1481,6 +1486,7 @@ def gravar_marco():
user_model = get_user_model()
models = get_models_a_migrar() + [
Composicao, user_model, Group, ContentType]
sequences = []
for model in models:
info('Gravando marco de [{}]'.format(model.__name__))
dir_model = dir_dados.child(model._meta.app_label, model.__name__)
@ -1489,6 +1495,10 @@ def gravar_marco():
nome_arq = Path(dir_model, '{}.yaml'.format(data['id']))
with open(nome_arq, 'w') as arq:
pyaml.dump(data, arq)
sequences.append(get_sequence_name_and_last_value(model))
# grava valores das seqeunces
sequences = dict(sorted(sequences))
Path(dir_dados, 'sequences.yaml').write_file(pyaml.dump(sequences))
# backup do banco
print('Gerando backup do banco... ', end='', flush=True)
@ -1506,5 +1516,5 @@ def gravar_marco():
REPO.git.add([arq_backup.name])
if 'master' not in REPO.heads or REPO.index.diff('HEAD'):
# se de fato existe mudança
REPO.index.commit('Grava marco')
REPO.index.commit(f'Grava marco (em {nome_dir})')
REPO.git.execute('git tag -f'.split() + [TAG_MARCO])

Loading…
Cancel
Save