mirror of https://github.com/interlegis/sapl.git
LeandroRoberto
7 years ago
1 changed files with 0 additions and 212 deletions
@ -1,212 +0,0 @@ |
|||||
import mimetypes |
|
||||
import os |
|
||||
import re |
|
||||
|
|
||||
from django.core.files.base import File |
|
||||
from django.core.files.temp import NamedTemporaryFile |
|
||||
import magic |
|
||||
import urllib3 |
|
||||
|
|
||||
from sapl.base.models import CasaLegislativa |
|
||||
from sapl.legacy.migration import warn |
|
||||
from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa, |
|
||||
Proposicao) |
|
||||
from sapl.norma.models import NormaJuridica |
|
||||
from sapl.parlamentares.models import Parlamentar |
|
||||
from sapl.protocoloadm.models import (DocumentoAcessorioAdministrativo, |
|
||||
DocumentoAdministrativo) |
|
||||
from sapl.sessao.models import SessaoPlenaria |
|
||||
from sapl.settings import MEDIA_ROOT |
|
||||
|
|
||||
|
|
||||
# MIGRAÇÃO DE DOCUMENTOS ################################################### |
|
||||
EXTENSOES = { |
|
||||
'application/msword': '.doc', |
|
||||
'application/pdf': '.pdf', |
|
||||
'application/vnd.oasis.opendocument.text': '.odt', |
|
||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': '.docx', # noqa |
|
||||
'application/xml': '.xml', |
|
||||
'text/xml': '.xml', |
|
||||
'application/zip': '.zip', |
|
||||
'image/jpeg': '.jpeg', |
|
||||
'image/png': '.png', |
|
||||
'text/html': '.html', |
|
||||
'image/gif': '.gif', |
|
||||
'text/rtf': '.rtf', |
|
||||
'text/x-python': '.py', |
|
||||
'text/plain': '.ksh', |
|
||||
'text/plain': '.c', |
|
||||
'text/plain': '.h', |
|
||||
'text/plain': '.txt', |
|
||||
'text/plain': '.bat', |
|
||||
'text/plain': '.pl', |
|
||||
'text/plain': '.asc', |
|
||||
'text/plain': '.text', |
|
||||
'text/plain': '.pot', |
|
||||
'text/plain': '.brf', |
|
||||
'text/plain': '.srt', |
|
||||
'image/tiff': '.tiff', |
|
||||
|
|
||||
# sem extensao |
|
||||
'application/octet-stream': '', # binário |
|
||||
'inode/x-empty': '', # vazio |
|
||||
} |
|
||||
|
|
||||
DOCS = { |
|
||||
CasaLegislativa: [( |
|
||||
'logotipo', |
|
||||
'props_sapl/logo_casa.gif', |
|
||||
'casa/logotipo/logo_casa.gif')], |
|
||||
Parlamentar: [( |
|
||||
'fotografia', |
|
||||
'parlamentar/fotos/{}_foto_parlamentar', |
|
||||
'public/parlamentar/{0}/{0}_foto_parlamentar{1}')], |
|
||||
MateriaLegislativa: [( |
|
||||
'texto_original', |
|
||||
'materia/{}_texto_integral', |
|
||||
'public/materialegislativa/{2}/{0}/{0}_texto_integral{1}')], |
|
||||
DocumentoAcessorio: [( |
|
||||
'arquivo', |
|
||||
'materia/{}', |
|
||||
'public/documentoacessorio/{2}/{0}/{0}{1}')], |
|
||||
NormaJuridica: [( |
|
||||
'texto_integral', |
|
||||
'norma_juridica/{}_texto_integral', |
|
||||
'public/normajuridica/{2}/{0}/{0}_texto_integral{1}')], |
|
||||
SessaoPlenaria: [ |
|
||||
('upload_ata', |
|
||||
'ata_sessao/{}_ata_sessao', |
|
||||
'public/sessaoplenaria/{0}/ata/{0}_ata_sessao{1}'), |
|
||||
('upload_anexo', |
|
||||
'anexo_sessao/{}_texto_anexado', |
|
||||
'public/sessaoplenaria/{0}/anexo/{0}_texto_anexado{1}') |
|
||||
], |
|
||||
Proposicao: [( |
|
||||
'texto_original', |
|
||||
'proposicao/{}', |
|
||||
'private/proposicao/{0}/{0}{1}')], |
|
||||
DocumentoAdministrativo: [( |
|
||||
'texto_integral', |
|
||||
'administrativo/{}_texto_integral', |
|
||||
'private/documentoadministrativo/{0}/{0}_texto_integral{1}') |
|
||||
], |
|
||||
DocumentoAcessorioAdministrativo: [( |
|
||||
'arquivo', |
|
||||
'administrativo/{}', |
|
||||
'private/documentoacessorioadministrativo/{0}/' |
|
||||
'{0}_acessorio_administrativo{1}') |
|
||||
], |
|
||||
} |
|
||||
|
|
||||
DOCS = {model: [(campo, |
|
||||
os.path.join('sapl_documentos', origem), |
|
||||
os.path.join('sapl', destino)) |
|
||||
for campo, origem, destino in campos] |
|
||||
for model, campos in DOCS.items()} |
|
||||
|
|
||||
|
|
||||
def em_media(caminho): |
|
||||
return os.path.join(MEDIA_ROOT, caminho) |
|
||||
|
|
||||
|
|
||||
def mover_documento(origem, destino): |
|
||||
origem, destino = [em_media(c) if not os.path.isabs(c) else c |
|
||||
for c in (origem, destino)] |
|
||||
os.makedirs(os.path.dirname(destino), exist_ok=True) |
|
||||
os.rename(origem, destino) |
|
||||
|
|
||||
|
|
||||
def get_casa_legislativa(): |
|
||||
casa = CasaLegislativa.objects.first() |
|
||||
if not casa: |
|
||||
casa = CasaLegislativa.objects.create(**{k: 'PREENCHER...' for k in [ |
|
||||
'codigo', 'nome', 'sigla', 'endereco', 'cep', 'municipio', 'uf', |
|
||||
]}) |
|
||||
return casa |
|
||||
|
|
||||
|
|
||||
def migrar_docs_logo(): |
|
||||
print('#### Migrando logotipo da casa ####') |
|
||||
[(_, origem, destino)] = DOCS[CasaLegislativa] |
|
||||
props_sapl = os.path.dirname(origem) |
|
||||
|
|
||||
# a pasta props_sapl deve conter apenas o origem e metadatas! |
|
||||
# Edit: Aparentemente há diretório que contém properties ao invés de |
|
||||
# metadata. O assert foi modificado para essa situação. |
|
||||
sobrando = set(os.listdir(em_media(props_sapl))) - { |
|
||||
'logo_casa.gif', '.metadata', 'logo_casa.gif.metadata', |
|
||||
'.properties', 'logo_casa.gif.properties', '.objects'} |
|
||||
|
|
||||
if sobrando: |
|
||||
warn('Os seguintes arquivos da pasta props_sapl foram ignorados: ' + |
|
||||
', '.join(sobrando)) |
|
||||
|
|
||||
mover_documento(origem, destino) |
|
||||
casa = get_casa_legislativa() |
|
||||
casa.logotipo = destino |
|
||||
casa.save() |
|
||||
|
|
||||
|
|
||||
def get_extensao(mime): |
|
||||
try: |
|
||||
return EXTENSOES[mime] |
|
||||
except KeyError as e: |
|
||||
raise Exception('\n'.join([ |
|
||||
'mimetype:', |
|
||||
mime, |
|
||||
' Algumas possibilidades são:', ] + |
|
||||
[" '{}': '{}',".format(mime, ext) |
|
||||
for ext in mimetypes.guess_all_extensions(mime)] + |
|
||||
['Atualize o código do dicionário EXTENSOES!'] |
|
||||
)) from e |
|
||||
|
|
||||
|
|
||||
http = urllib3.PoolManager() |
|
||||
|
|
||||
|
|
||||
def migrar_docs_por_ids(model): |
|
||||
for campo, base_origem, base_destino in DOCS[model]: |
|
||||
print('#### Migrando {} de {} ####'.format(campo, model.__name__)) |
|
||||
|
|
||||
registros = model.objects.all() |
|
||||
|
|
||||
for item in registros: |
|
||||
|
|
||||
campo_file = getattr(item, campo) |
|
||||
campo_file.delete() |
|
||||
|
|
||||
url = ('http://187.6.249.156:8480/sapl/%s' |
|
||||
) % base_origem.format(item.pk) |
|
||||
|
|
||||
request = http.request('GET', url) |
|
||||
|
|
||||
try: |
|
||||
data = request.data.decode('utf-8') |
|
||||
except: |
|
||||
temp = NamedTemporaryFile(delete=True) |
|
||||
temp.write(request.data) |
|
||||
temp.flush() |
|
||||
|
|
||||
ct = request.getheaders()['Content-Type'] |
|
||||
print (ct, campo, item) |
|
||||
|
|
||||
name_file = '%s%s' % (campo, get_extensao(ct)) |
|
||||
|
|
||||
campo_file.save(name_file, File(temp), save=True) |
|
||||
|
|
||||
|
|
||||
def migrar_documentos(): |
|
||||
for model in [ |
|
||||
Parlamentar, |
|
||||
MateriaLegislativa, |
|
||||
DocumentoAcessorio, |
|
||||
NormaJuridica, |
|
||||
DocumentoAdministrativo, |
|
||||
DocumentoAcessorioAdministrativo, |
|
||||
]: |
|
||||
migrar_docs_por_ids(model) |
|
||||
|
|
||||
|
|
||||
# %run 'sapl/legacy/migracao_documentos_via_request.py' |
|
||||
if __name__ == '__main__': |
|
||||
migrar_documentos() |
|
Loading…
Reference in new issue