Browse Source

Merge branch 'ajustes_migracao'

pull/1751/merge
Marcio Mazza 7 years ago
parent
commit
45b3e7ea32
  1. 17
      sapl/comissoes/legacy.yaml
  2. 17
      sapl/legacy/management/commands/migracao_25_31.py
  3. 1177
      sapl/legacy/migracao.py
  4. 1174
      sapl/legacy/migracao_dados.py
  5. 2
      sapl/legacy/migracao_documentos.py
  6. 34
      sapl/legacy/migracao_usuarios.py
  7. 5
      sapl/legacy/scripts/migra_dbs.sh
  8. 22
      sapl/legacy/scripts/migra_um_db.sh
  9. 2
      sapl/legacy/scripts/scrap_original_forms.py
  10. 2
      sapl/legacy/scripts/study.py
  11. 6
      sapl/legacy/scripts/utils.py
  12. 5
      sapl/legacy/test_migracao_dados.py
  13. 2
      sapl/legacy/test_renames.py
  14. 20
      sapl/materia/migrations/0026_auto_20180302_1411.py
  15. 4
      sapl/materia/models.py
  16. 3
      sapl/parlamentares/models.py

17
sapl/comissoes/legacy.yaml

@ -43,20 +43,3 @@ Participacao (ComposicaoComissao):
observacao: obs_composicao
parlamentar: cod_parlamentar
titular: ind_titular
Reuniao:
periodo: periodo_reuniao
comissao: cod_comissao
numero: num_comissao
nome: nom_reuniao
tema: tem_reuniao
data: dat_reuniao
hora_inicio: hora_inicio_reuniao
hora_fim: hora_fim_reuniao
local_reuniao: local
observacao: obs_reuniao
ulr_audio: audio_reuniao
url_video: video_reuniao
upload_pauta: pauta_reuniao
upload_ata: ata_reuniao
upload_anexo: anexo_reuniao

17
sapl/legacy/management/commands/migracao_25_31.py

@ -1,7 +1,7 @@
from django.core import management
from django.core.management.base import BaseCommand
from sapl.legacy.migracao import migrar
from sapl.legacy.migracao import migrar, migrar_dados
class Command(BaseCommand):
@ -10,13 +10,24 @@ class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument(
'-f',
'--force',
action='store_true',
default=False,
dest='force',
help='Não interativa: pula confirmação de exclusão dos dados',
)
parser.add_argument(
'--dados',
action='store_true',
default=False,
dest='dados',
help='migra somente dados',
)
def handle(self, *args, **options):
management.call_command('migrate')
migrar(interativo=not options['force'])
somente_dados, interativo = options['dados'], not options['force']
if somente_dados:
migrar_dados(interativo=interativo)
else:
migrar(interativo=interativo)

1177
sapl/legacy/migracao.py

File diff suppressed because it is too large

1174
sapl/legacy/migracao_dados.py

File diff suppressed because it is too large

2
sapl/legacy/migracao_documentos.py

@ -6,7 +6,7 @@ from glob import glob
import yaml
from sapl.base.models import CasaLegislativa
from sapl.legacy.migracao import exec_legado, warn
from sapl.legacy.migracao_dados import exec_legado, warn
from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa,
Proposicao)
from sapl.norma.models import NormaJuridica

34
sapl/legacy/migracao_usuarios.py

@ -7,7 +7,7 @@ from sapl.settings import MEDIA_ROOT
PERFIL_LEGADO_PARA_NOVO = {legado: Group.objects.get(name=novo)
for legado, novo in [
('Autor', 'Autor'),
('Operador', 'Operador Geral'),
('Operador', 'Operador Geral'),
('Operador Comissao', 'Operador de Comissões'),
('Operador Materia', 'Operador de Matéria'),
('Operador Modulo Administrativo', 'Operador Administrativo'),
@ -44,7 +44,7 @@ def decode_nome(nome):
return nome
def migra_usuarios():
def migrar_usuarios():
"""
o arquivo media/usuarios.yaml e importa os usuários nele listados,
com senhas e perfis.
@ -82,16 +82,36 @@ def migra_usuarios():
set(dados['roles']) - IGNORADOS)
for nome, dados in usuarios.items()]
admins = []
for nome, senha, perfis in usuarios:
usuario = User.objects.get_or_create(username=nome)[0]
usuario.password = zope_encoded_password_to_django(senha)
for perfil in perfis:
if perfil in ADMINISTRADORES:
# Manager
usuario.is_staff = True
usuario.save()
# todos os administradores ganham perfil "Operador Geral"
usuario.groups.add(PERFIL_LEGADO_PARA_NOVO['Operador'])
admins.append(usuario)
else:
usuario.groups.add(PERFIL_LEGADO_PARA_NOVO[perfil])
# apaga arquivo (importante pois contém senhas)
ARQUIVO_USUARIOS.remove()
usuario.save()
# restringe e configura administradores
if len(admins) > 2:
admins = (
# ususários com admin no nome
[u for u in admins if 'admin' in u.username]
# senão, o usuário saploper, apenas
or [u for u in admins if 'saploper' == u.username]
# senão, simplesmente até os dois primeiros da lista
or admins[:2]
)
for admin in admins:
admin.is_superuser = True
admin.save()
print('Usuários migrados com sucesso.')
print('#' * 100)
print('Uusários administradores:')
for admin in admins:
print(admin.username)
print('#' * 100)

5
sapl/legacy/scripts/migra_dbs.sh

@ -2,8 +2,13 @@
# rodar esse script na raiz do projeto
if [ $# -ge 1 ]; then
# mysql com senha
parallel -eta --verbose -j+0 ./sapl/legacy/scripts/migra_um_db.sh :::: <(mysql -u $1 -p$2 -e 'show databases;' | grep '^sapl_') ::: $1 ::: $2
elif [ $# -ge 0 ]; then
# mysql sem senha
parallel -eta --verbose -j+0 ./sapl/legacy/scripts/migra_um_db.sh :::: <(mysql -u $1 -e 'show databases;' | grep '^sapl_') ::: $1
else
echo "USO:"
echo " $0 <usuário mysql> [senha mysql]"

22
sapl/legacy/scripts/migra_um_db.sh

@ -4,13 +4,15 @@
if [ $# -ge 2 ]; then
# proteje pasta com dumps de alterações acidentais
chmod -R -w ~/sapl_dumps
# chmod -R -w ~/migracao_sapl/sapl_dumps
DIR_MIGRACAO=~/migracao_sapl
DATE=$(date +%Y-%m-%d)
DIR=~/${DATE}_logs_migracao
mkdir -p $DIR
DIR_LOGS=$DIR_MIGRACAO/logs/$DATE
mkdir -p $DIR_LOGS
LOG="$DIR/$1.migracao.log"
LOG="$DIR_LOGS/$1.migracao.log"
rm -f $LOG
echo "########################################" | tee -a $LOG
@ -20,12 +22,12 @@ if [ $# -ge 2 ]; then
if [ $3 ]; then
# se há senha do mysql
mysql -u $2 -p "$3" -N -s -e "DROP DATABASE IF EXISTS $1; CREATE DATABASE $1;"
mysql -u $2 -p "$3" < ~/sapl_dumps/$1.sql
mysql -u$2 -p"$3" -N -s -e "DROP DATABASE IF EXISTS $1; CREATE DATABASE $1;"
mysql -u$2 -p"$3" < $DIR_MIGRACAO/dumps_mysql/$1.sql
else
# se não há senha do mysql
mysql -u $2 -N -s -e "DROP DATABASE IF EXISTS $1; CREATE DATABASE $1;"
mysql -u $2 < ~/sapl_dumps/$1.sql
mysql -u$2 -N -s -e "DROP DATABASE IF EXISTS $1; CREATE DATABASE $1;"
mysql -u$2 < $DIR_MIGRACAO/dumps_mysql/$1.sql
fi;
echo "O banco legado foi restaurado" |& tee -a $LOG
echo >> $LOG
@ -35,9 +37,9 @@ if [ $# -ge 2 ]; then
DATABASE_NAME=$1 ./manage.py migrate --settings sapl.legacy_migration_settings
echo >> $LOG
echo "--- MIGRACAO DE DADOS ---" | tee -a $LOG
echo "--- MIGRACAO ---" | tee -a $LOG
echo >> $LOG
DATABASE_NAME=$1 ./manage.py migracao_25_31 -f --settings sapl.legacy_migration_settings |& tee -a $LOG
DATABASE_NAME=$1 ./manage.py migracao_25_31 --force --settings sapl.legacy_migration_settings 2>&1 | tee -a $LOG
echo >> $LOG
else
echo "USO:"

2
sapl/legacy/scripts/scrap_original_forms.py

@ -10,7 +10,7 @@ from bs4.element import NavigableString, Tag
from django.apps.config import AppConfig
from sapl.crispy_layout_mixin import heads_and_tails
from sapl.legacy.migracao import appconfs, get_renames
from sapl.legacy.migracao_dados import appconfs, get_renames
from sapl.legacy.scripts.utils import getsourcelines
from sapl.utils import listify

2
sapl/legacy/scripts/study.py

@ -1,6 +1,6 @@
from django.apps import apps
from sapl.legacy.migracao import legacy_app
from sapl.legacy.migracao_dados import legacy_app
for model in apps.get_app_config('legacy').get_models():
if 'ind_excluido' in [f.name for f in model._meta.fields]:

6
sapl/legacy/scripts/utils.py

@ -1,7 +1,7 @@
import inspect
from sapl.base.models import Autor
from sapl.legacy.migracao import appconfs
from sapl.legacy.migracao_dados import appconfs
def getsourcelines(model):
@ -9,10 +9,10 @@ def getsourcelines(model):
for line in inspect.getsourcelines(model)[0]]
def get_models_com_referencia_a_autor():
def get_models_com_referencia_a(apontado):
def tem_referencia_a_autor(model):
return any(getattr(field, 'related_model', None) == Autor
return any(getattr(field, 'related_model', None) == apontado
for field in model._meta.get_fields())
return [model for app in appconfs for model in app.models.values()

5
sapl/legacy/test_migration.py → sapl/legacy/test_migracao_dados.py

@ -1,7 +1,8 @@
from random import shuffle
from .migracao import (_formatar_lista_para_sql, get_autorias_sem_repeticoes,
get_reapontamento_de_autores_repetidos)
from .migracao_dados import (_formatar_lista_para_sql,
get_autorias_sem_repeticoes,
get_reapontamento_de_autores_repetidos)
def test_unifica_autores_repetidos_no_legado():

2
sapl/legacy/test_renames.py

@ -3,7 +3,7 @@ import sapl.materia
import sapl.norma
import sapl.sessao
from .migracao import appconfs, get_renames, legacy_app
from .migracao_dados import appconfs, get_renames, legacy_app
RENAMING_IGNORED_MODELS = [
sapl.comissoes.models.Composicao,

20
sapl/materia/migrations/0026_auto_20180302_1411.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-03-02 17:11
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('materia', '0025_auto_20180221_1649'),
]
operations = [
migrations.AlterField(
model_name='numeracao',
name='data_materia',
field=models.DateField(null=True, verbose_name='Data'),
),
]

4
sapl/materia/models.py

@ -515,7 +515,7 @@ class Numeracao(models.Model):
verbose_name=_('Número'))
ano_materia = models.PositiveSmallIntegerField(verbose_name=_('Ano'),
choices=RANGE_ANOS)
data_materia = models.DateField(verbose_name=_('Data'))
data_materia = models.DateField(verbose_name=_('Data'), null=True)
class Meta:
verbose_name = _('Numeração')
@ -529,7 +529,7 @@ class Numeracao(models.Model):
def __str__(self):
return _('%(numero)s/%(ano)s') % {
'numero': self.numero_materia,
'ano': self.data_materia.year}
'ano': self.ano_materia}
@reversion.register()

3
sapl/parlamentares/models.py

@ -261,12 +261,9 @@ class Parlamentar(models.Model):
verbose_name=_('Ativo na Casa?'))
biografia = models.TextField(
blank=True, verbose_name=_('Biografia'))
# XXX Esse atribuito foi colocado aqui para não atrapalhar a migração
fotografia = ImageCropField(
verbose_name=_('Fotografia'), upload_to=foto_upload_path,
validators=[restringe_tipos_de_arquivo_img], null=True, blank=True)
cropping = ImageRatioField(
'fotografia', '128x128', verbose_name=_('Avatar'), size_warning=True,
help_text=_('A configuração do Avatar '

Loading…
Cancel
Save