Browse Source

Torna opcionais versionar e gerar backup ao gravar_marco

migracao
Marcio Mazza 6 years ago
parent
commit
24e53f4de2
  1. 4
      sapl/legacy/migracao.py
  2. 105
      sapl/legacy/migracao_dados.py

4
sapl/legacy/migracao.py

@ -94,10 +94,10 @@ def scrap_sde(url, usuario, senha=None):
def tenta_correcao():
from sapl.legacy.migracao_dados import ocorrencias
gravar_marco("producao")
gravar_marco("producao", versiona=False, gera_backup=False)
migrar_dados()
assert "fk" not in ocorrencias, "AINDA EXISTEM FKS ORFAS"
gravar_marco()
gravar_marco(versiona=False, gera_backup=False)
import git
sigla = NOME_BANCO_LEGADO[-3:]

105
sapl/legacy/migracao_dados.py

@ -33,49 +33,22 @@ from sapl.base.models import Autor, TipoAutor, cria_models_tipo_autor
from sapl.comissoes.models import Comissao, Composicao, Participacao, Reuniao
from sapl.legacy.models import NormaJuridica as OldNormaJuridica
from sapl.legacy.models import Numeracao, TipoNumeracaoProtocolo
from sapl.legacy_migration_settings import (
DIR_DADOS_MIGRACAO,
DIR_REPO,
NOME_BANCO_LEGADO,
PYTZ_TIMEZONE,
SIGLA_CASA,
)
from sapl.materia.models import (
AcompanhamentoMateria,
DocumentoAcessorio,
MateriaLegislativa,
Proposicao,
StatusTramitacao,
TipoDocumento,
TipoMateriaLegislativa,
TipoProposicao,
Tramitacao,
)
from sapl.norma.models import (
AssuntoNorma,
NormaJuridica,
NormaRelacionada,
TipoVinculoNormaJuridica,
)
from sapl.parlamentares.models import (
Legislatura,
Mandato,
Parlamentar,
Partido,
TipoAfastamento,
)
from sapl.protocoloadm.models import (
DocumentoAdministrativo,
Protocolo,
StatusTramitacaoAdministrativo,
)
from sapl.sessao.models import (
ExpedienteMateria,
ExpedienteSessao,
OrdemDia,
RegistroVotacao,
TipoResultadoVotacao,
)
from sapl.legacy_migration_settings import (DIR_DADOS_MIGRACAO, DIR_REPO,
NOME_BANCO_LEGADO, PYTZ_TIMEZONE,
SIGLA_CASA)
from sapl.materia.models import (AcompanhamentoMateria, DocumentoAcessorio,
MateriaLegislativa, Proposicao,
StatusTramitacao, TipoDocumento,
TipoMateriaLegislativa, TipoProposicao,
Tramitacao)
from sapl.norma.models import (AssuntoNorma, NormaJuridica, NormaRelacionada,
TipoVinculoNormaJuridica)
from sapl.parlamentares.models import (Legislatura, Mandato, Parlamentar,
Partido, TipoAfastamento)
from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo,
StatusTramitacaoAdministrativo)
from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao, OrdemDia,
RegistroVotacao, TipoResultadoVotacao)
from sapl.utils import normalize
from .scripts.normaliza_dump_mysql import normaliza_dump_mysql
@ -1722,7 +1695,9 @@ yaml.add_constructor("!time", time_constructor)
TAG_MARCO = "marco"
def gravar_marco(nome_dir="dados", pula_se_ja_existe=False):
def gravar_marco(
nome_dir="dados", pula_se_ja_existe=False, versiona=True, gera_backup=True
):
"""Grava um dump de todos os dados como arquivos yaml no repo de marco
"""
# prepara ou localiza repositorio
@ -1743,11 +1718,11 @@ def gravar_marco(nome_dir="dados", pula_se_ja_existe=False):
]
sequences = []
for model in models:
info("Gravando marco de [{}]".format(model.__name__))
info(f"Gravando marco de [{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"]))
nome_arq = Path(dir_model, f"{data['id']}.yaml")
with open(nome_arq, "w") as arq:
pyaml.dump(data, arq)
sequences.append(get_sequence_name_and_last_value(model))
@ -1756,21 +1731,23 @@ def gravar_marco(nome_dir="dados", pula_se_ja_existe=False):
Path(dir_dados, "sequences.yaml").write_file(pyaml.dump(sequences))
# 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])
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(f"Grava marco (em {nome_dir})")
REPO.git.execute("git tag -f".split() + [TAG_MARCO])
if gera_backup:
print("Gerando backup do banco... ", end="", flush=True)
arq_backup = DIR_REPO.child("{}.backup".format(NOME_BANCO_LEGADO))
arq_backup.remove()
backup_cmd = f"""
pg_dump --host localhost --port 5432 --username postgres
--no-password --format custom --blobs --verbose --file
{arq_backup} {NOME_BANCO_LEGADO}"""
subprocess.check_output(backup_cmd.split(), stderr=subprocess.DEVNULL)
print("SUCESSO")
# versiona mudanças
if versiona:
REPO.git.add([dir_dados.name])
if gera_backup:
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(f"Grava marco (em {nome_dir})")
REPO.git.execute("git tag -f".split() + [TAG_MARCO])

Loading…
Cancel
Save