Browse Source

Merge branch 'migracao' into 3.1.x

pull/1924/head
Marcio Mazza 7 years ago
parent
commit
1304e4f51f
  1. 4
      sapl/base/urls.py
  2. 54
      sapl/legacy/migracao.py
  3. 12
      sapl/legacy/migracao_dados.py
  4. 25
      sapl/legacy/scripts/exporta_zope/exporta_zope.py

4
sapl/base/urls.py

@ -123,11 +123,11 @@ urlpatterns = [
url(r'^sistema/search/', SaplSearchView(), name='haystack_search'),
# Folhas XSLT e extras referenciadas por documentos migrados do sapl 2.5
url(r'^sapl/XSLT/HTML/(?P<path>.*)$', RedirectView.as_view(
url(r'^(sapl/)?XSLT/HTML/(?P<path>.*)$', RedirectView.as_view(
url=os.path.join(MEDIA_URL, 'sapl/public/XSLT/HTML/%(path)s'),
permanent=False)),
# url do logotipo usada em documentos migrados do sapl 2.5
url(r'^sapl/sapl_documentos/props_sapl/logo_casa',
url(r'^(sapl/)?sapl_documentos/props_sapl/logo_casa',
LogotipoView.as_view(), name='logotipo'),

54
sapl/legacy/migracao.py

@ -1,4 +1,8 @@
import subprocess
from getpass import getpass
import requests
from unipath import Path
from sapl.legacy.migracao_dados import (REPO, TAG_MARCO, gravar_marco, info,
migrar_dados)
@ -6,6 +10,7 @@ from sapl.legacy.migracao_documentos import migrar_documentos
from sapl.legacy.migracao_usuarios import migrar_usuarios
from sapl.legacy.scripts.exporta_zope.variaveis_comuns import TAG_ZOPE
from sapl.legacy_migration_settings import DIR_REPO, NOME_BANCO_LEGADO
from sapl.materia.models import Proposicao
def adornar_msg(msg):
@ -23,23 +28,48 @@ def migrar(interativo=False):
migrar_usuarios(REPO.working_dir)
migrar_documentos(REPO)
gravar_marco()
gerar_pacote()
def gerar_pacote():
# backup do banco
print('Gerando backup do banco... ', end='', flush=True)
arq_backup = DIR_REPO.child('{}.backup'.format(NOME_BANCO_LEGADO))
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')
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')
PROPOSICAO_UPLOAD_TO = Proposicao._meta.get_field('texto_original').upload_to
def salva_conteudo_do_sde(proposicao, conteudo):
caminho_relativo = PROPOSICAO_UPLOAD_TO(
proposicao, 'proposicao_sde_{}.xml'.format(proposicao.pk))
caminho_absoluto = Path(REPO.working_dir, caminho_relativo)
caminho_absoluto.parent.mkdir(parents=True)
with open(caminho_absoluto, 'wb') as arq:
arq.write(conteudo)
proposicao.texto_original = caminho_relativo
proposicao.save()
def scrap_sde(url, usuario, senha=None):
if not senha:
senha = getpass()
# login
session = requests.session()
res = session.post('{}?retry=1'.format(url),
{'__ac_name': usuario, '__ac_password': senha})
assert res.status_code == 200
url_proposicao = '{}/sapl_documentos/proposicao/{}/renderXML?xsl=__default__' # noqa
total = Proposicao.objects.count()
for num, proposicao in enumerate(Proposicao.objects.all()):
pk = proposicao.pk
res = session.get(url_proposicao.format(url, pk))
print("pk: {} status: {} (progresso: {:.2%})".format(
pk, res.status_code, num / total))
if res.status_code == 200:
salva_conteudo_do_sde(proposicao, res.content)

12
sapl/legacy/migracao_dados.py

@ -1,6 +1,7 @@
import datetime
import os
import re
import subprocess
import traceback
from collections import OrderedDict, defaultdict, namedtuple
from datetime import date
@ -1333,6 +1334,17 @@ def gravar_marco():
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'):

25
sapl/legacy/scripts/exporta_zope/exporta_zope.py

@ -78,20 +78,21 @@ def br(obj):
def guess_extension(fullname, buffer):
mime = magic.from_buffer(buffer, mime=True)
try:
return EXTENSOES[mime]
except KeyError as e:
extensao = EXTENSOES.get(mime)
if extensao is not None:
return extensao
else:
possibilidades = '\n'.join(
[" '{}': '{}',".format(mime, ext)
for ext in mimetypes.guess_all_extensions(mime)])
msg = '''Extensão não conhecida para o arquivo: {}
print('''Extensão não conhecida para o arquivo: {}
e mimetype: {}
Algumas possibilidades são:
{}
Atualize o código do dicionário EXTENSOES!
'''.format(fullname, mime, possibilidades)
print(msg)
raise Exception(msg, e)
)
return '.DESCONHECIDO.{}'.format(mime.replace('/', '__'))
def get_conteudo_file(doc):
@ -154,7 +155,11 @@ def enumerate_btree(folder):
obj, meta_type = br(obj), type(obj).__name__
yield id, obj, meta_type
# verificação de consistência
assert contagem_esperada == contagem_real
if contagem_esperada != contagem_real:
print('ATENÇÃO: contagens diferentes na btree: '
'{} esperada: {} real: {}'.format(folder,
contagem_esperada,
contagem_real))
nao_identificados = defaultdict(list)
@ -333,7 +338,9 @@ def build_salvar(repo):
def salvar(fullname, conteudo):
sha = hashlib.sha256()
sha.update(conteudo)
if sha.hexdigest() not in hashes:
if sha.hexdigest() in hashes:
print('- hash encontrado - {}'.format(fullname))
else:
fullname = ajusta_extensao(fullname, conteudo)
if os.path.exists(fullname):
# destrava arquivo pré-existente (o conteúdo mudou)
@ -355,7 +362,7 @@ def dump_sapl(sigla):
destino.mkdir(parents=True)
repo = git.Repo.init(destino)
if TAG_ZOPE in repo.tags:
info('A exportação de documentos já está feita.')
print('A exportação de documentos já está feita -- abortando')
return
repo_execute(repo, 'git annex init')

Loading…
Cancel
Save