Repository: interlegis/sapl

Issue:
Migrar propriedades da casa exportadas com documentos
As propriedades da casa (nome, endereço, email, telefones) são exportadas junto com os documentos do zope para o arquivo `sapl_documentos/props_sapl/.properties`, cujo conteúdo se parece com o seguite:

```
[Default]
cod_casa:int=12
cod_localidade:int=4300109
cor_borda:string=#9ebede
cor_fundo:string=#ffffff
cor_principal:string=#9ebede
end_casa:string=Rua Ana Silva, 400
end_email_casa:string=camara@camara.leg.br
end_web_casa:string=http://www.casa.uf.leg.br
...
```
Extrair essas informações e popular as propriedades da casa.



Discussion:
Estender o código de https://github.com/interlegis/sapl/blob/master/sapl/legacy/migracao_documentos.py
**Mudança de rumos: usar a abordagem de #1584.**

Resolving patch:
diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py
--- a/sapl/legacy/migracao_documentos.py
+++ b/sapl/legacy/migracao_documentos.py
@@ -3,9 +3,10 @@
 import re
 
 import magic
+import yaml
 
 from sapl.base.models import CasaLegislativa
-from sapl.legacy.migration import warn
+from sapl.legacy.migration import exec_legado, warn
 from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa,
                                  Proposicao)
 from sapl.norma.models import NormaJuridica
@@ -29,17 +30,7 @@
     'text/html': '.html',
     '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',
 
     # sem extensao
     'application/octet-stream': '',  # binário
@@ -47,26 +38,31 @@
 }
 
 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}')],
+    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',
@@ -75,20 +71,21 @@
          '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}')
+    Proposicao: [
+        ('texto_original',
+         'proposicao/{}',
+         'private/proposicao/{0}/{0}{1}')
     ],
-    DocumentoAcessorioAdministrativo: [(
-        'arquivo',
-        'administrativo/{}',
-        'private/documentoacessorioadministrativo/{0}/'
-        '{0}_acessorio_administrativo{1}')
+    DocumentoAdministrativo: [
+        ('texto_integral',
+         'administrativo/{}_texto_integral',
+         'private/documentoadministrativo/{0}/{0}_texto_integral{1}')
+    ],
+    DocumentoAcessorioAdministrativo: [
+        ('arquivo',
+         'administrativo/{}',
+         'private/documentoacessorioadministrativo/{0}/'
+         '{0}_acessorio_administrativo{1}')
     ],
 }
 
@@ -110,16 +107,36 @@ def mover_documento(origem, destino):
     os.rename(origem, destino)
 
 
-def get_casa_legislativa():
+def migrar_propriedades_da_casa():
+    print('#### Migrando propriedades da casa ####')
+    caminho = em_media('sapl_documentos/propriedades.yaml')
+    with open(caminho, 'r') as arquivo:
+        propriedades = yaml.safe_load(arquivo)
     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
+        casa = CasaLegislativa()
+    campos_para_propriedades = [('codigo', 'cod_casa'),
+                                ('nome', 'nom_casa'),
+                                ('sigla', 'sgl_casa'),
+                                ('endereco', 'end_casa'),
+                                ('cep', 'num_cep'),
+                                ('telefone', 'num_tel'),
+                                ('fax', 'num_fax'),
+                                ('endereco_web', 'end_web_casa'),
+                                ('email', 'end_email_casa'),
+                                ('sigla', 'sgl_casa'),
+                                ('informacao_geral', 'txt_informacao_geral')]
+    for campo, prop in campos_para_propriedades:
+        setattr(casa, campo, propriedades[prop])
+    # Localidade
+    sql_localidade = '''
+        select nom_localidade, sgl_uf from localidade
+        where cod_localidade = {}'''.format(propriedades['cod_localidade'])
+    [(casa.municipio, casa.uf)] = exec_legado(sql_localidade)
+    casa.save()
 
 
-def migrar_docs_logo():
+def migrar_logotipo_da_casa():
     print('#### Migrando logotipo da casa ####')
     [(_, origem, destino)] = DOCS[CasaLegislativa]
     props_sapl = os.path.dirname(origem)
@@ -136,7 +153,7 @@ def migrar_docs_logo():
              ', '.join(sobrando))
 
     mover_documento(origem, destino)
-    casa = get_casa_legislativa()
+    casa = CasaLegislativa.objects.first()
     casa.logotipo = destino
     casa.save()
 
@@ -163,7 +180,7 @@ def migrar_docs_por_ids(model):
         print('#### Migrando {} de {} ####'.format(campo, model.__name__))
 
         dir_origem, nome_origem = os.path.split(em_media(base_origem))
-        pat = re.compile('^{}$'.format(nome_origem.format('(\d+)')))
+        pat = re.compile('^{}\.\w+$'.format(nome_origem.format('(\d+)')))
 
         if not os.path.isdir(dir_origem):
             print('  >>> O diretório {} não existe! Abortado.'.format(
@@ -206,7 +223,10 @@ def migrar_documentos():
     # Isto significa que para rodar novamente esta função é preciso
     # restaurar a pasta sapl_documentos ao estado inicial
 
-    migrar_docs_logo()
+    # esta ordem é importante
+    migrar_propriedades_da_casa()
+    migrar_logotipo_da_casa()
+
     for model in [
         Parlamentar,
         MateriaLegislativa,


Test patch: