|
@ -1,14 +1,9 @@ |
|
|
import yaml |
|
|
|
|
|
from django.conf import settings |
|
|
|
|
|
from django.contrib.auth.models import Group, User |
|
|
from django.contrib.auth.models import Group, User |
|
|
|
|
|
|
|
|
|
|
|
from sapl.settings import MEDIA_ROOT |
|
|
|
|
|
|
|
|
def le_yaml_dados_zope(caminho_yaml): |
|
|
PERFIL_LEGADO_PARA_NOVO = {legado: Group.objects.get(name=novo) |
|
|
with open(caminho_yaml, 'r') as f: |
|
|
for legado, novo in [ |
|
|
dados = yaml.load(f.read()) |
|
|
|
|
|
return dados |
|
|
|
|
|
|
|
|
|
|
|
PERFIL_LEGADO_PARA_NOVO = [ |
|
|
|
|
|
('Autor', 'Autor'), |
|
|
('Autor', 'Autor'), |
|
|
('Operador', 'Operador Geral'), |
|
|
('Operador', 'Operador Geral'), |
|
|
('Operador Comissao', 'Operador de Comissões'), |
|
|
('Operador Comissao', 'Operador de Comissões'), |
|
@ -18,32 +13,40 @@ PERFIL_LEGADO_PARA_NOVO = [ |
|
|
('Operador Parlamentar', 'Parlamentar'), |
|
|
('Operador Parlamentar', 'Parlamentar'), |
|
|
('Operador Protocolo', 'Operador de Protocolo Administrativo'), |
|
|
('Operador Protocolo', 'Operador de Protocolo Administrativo'), |
|
|
('Operador Sessao Plenaria', 'Operador de Sessão Plenária'), |
|
|
('Operador Sessao Plenaria', 'Operador de Sessão Plenária'), |
|
|
|
|
|
('Parlamentar', 'Votante'), |
|
|
] |
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
ADMINISTRADORES = ['Administrador', 'Manager'] |
|
|
ADMINISTRADORES = {'Administrador', 'Manager'} |
|
|
|
|
|
|
|
|
VOTANTE = Group.objects.get(name='Votante') |
|
|
IGNORADOS = { |
|
|
|
|
|
# sem significado fora do zope |
|
|
|
|
|
'Alterar Senha', 'Authenticated', 'Owner', |
|
|
|
|
|
|
|
|
|
|
|
# obsoletos (vide docs a seguir) |
|
|
|
|
|
'Operador Mesa Diretora', |
|
|
|
|
|
'Operador Ordem Dia', |
|
|
|
|
|
'Operador Tabela Auxiliar', |
|
|
|
|
|
'Operador Lexml', |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
def migra_usuarios(caminho_yaml): |
|
|
|
|
|
""" |
|
|
|
|
|
Existe um método em nosso projeto interno de **consulta a todos os sapls** |
|
|
|
|
|
que exporta os dados de usuários (e nome da casa e url interna) |
|
|
|
|
|
como um yaml. |
|
|
|
|
|
|
|
|
|
|
|
Esse yaml é lido por essa rotina e os usuários são criados se necessário |
|
|
def migra_usuarios(): |
|
|
e seus perfis ajustados. |
|
|
""" |
|
|
|
|
|
Lê o arquivo media/USERS e importa os usuários nele listados, |
|
|
|
|
|
com senhas e perfis. |
|
|
|
|
|
Os usuários são criados se necessário e seus perfis ajustados. |
|
|
|
|
|
|
|
|
Os seguintes perfis no legado não correspondem a nenhum no código atual |
|
|
Os seguintes perfis no legado não correspondem a nenhum no código atual |
|
|
e estão sendo **ignorados**: |
|
|
e estão sendo **ignorados**: |
|
|
|
|
|
|
|
|
* Operador Mesa Diretora |
|
|
* Operador Mesa Diretora |
|
|
Contei apenas **8 usuários**, em todas as bases, que tem esse perfil |
|
|
Apenas **8 usuários**, em todas as bases, têm esse perfil |
|
|
e não tem nem "Operador" nem "Operador Sessao Plenaria" |
|
|
e não têm nem "Operador" nem "Operador Sessao Plenaria" |
|
|
|
|
|
|
|
|
* Operador Ordem Dia |
|
|
* Operador Ordem Dia |
|
|
Contei apenas **16 usuários**, em todas as bases, que tem esse perfil |
|
|
Apenas **16 usuários**, em todas as bases, têm esse perfil |
|
|
e não tem nem "Operador" nem "Operador Sessao Plenaria" |
|
|
e não têm nem "Operador" nem "Operador Sessao Plenaria" |
|
|
|
|
|
|
|
|
* Operador Tabela Auxiliar |
|
|
* Operador Tabela Auxiliar |
|
|
A edição das tabelas auxiliares deve ser feita por um administrador |
|
|
A edição das tabelas auxiliares deve ser feita por um administrador |
|
@ -51,19 +54,26 @@ def migra_usuarios(caminho_yaml): |
|
|
* Operador Lexml |
|
|
* Operador Lexml |
|
|
Também podemos assumir que essa é uma tarefa de um administrador |
|
|
Também podemos assumir que essa é uma tarefa de um administrador |
|
|
""" |
|
|
""" |
|
|
dados = le_yaml_dados_zope(caminho_yaml) |
|
|
|
|
|
db = settings.DATABASES['legacy']['NAME'] |
|
|
ARQUIVO_USUARIOS = MEDIA_ROOT.child('USERS') |
|
|
nome, url, usuarios_perfis = dados[db] |
|
|
with open(ARQUIVO_USUARIOS, 'r') as f: |
|
|
for nome, perfis in usuarios_perfis: |
|
|
usuarios = eval(f.read()) |
|
|
usuario, _ = User.objects.get_or_create(username=nome) |
|
|
usuarios = [ |
|
|
for legado, novo in PERFIL_LEGADO_PARA_NOVO: |
|
|
(nome, |
|
|
if legado in perfis: |
|
|
# troca senha "inicial" por uma inutilizável |
|
|
grupo = Group.objects.get(name=novo) |
|
|
senha if senha != 'inicial' else None, |
|
|
usuario.groups.add(grupo) |
|
|
# filtra perfis ignorados |
|
|
# Manager |
|
|
{p for p in perfis if p not in IGNORADOS}) |
|
|
if any(a in perfis for a in ADMINISTRADORES): |
|
|
for nome, senha, perfis in usuarios] |
|
|
|
|
|
|
|
|
|
|
|
for nome, senha, perfis in usuarios: |
|
|
|
|
|
usuario = User.objects.get_or_create(username=nome)[0] |
|
|
|
|
|
for perfil in perfis: |
|
|
|
|
|
if perfil in ADMINISTRADORES: |
|
|
|
|
|
# Manager |
|
|
usuario.is_staff = True |
|
|
usuario.is_staff = True |
|
|
usuario.save() |
|
|
usuario.save() |
|
|
# Votante |
|
|
else: |
|
|
if 'Parlamentar' in perfis: |
|
|
usuario.groups.add(PERFIL_LEGADO_PARA_NOVO[perfil]) |
|
|
usuario.groups.add(VOTANTE) |
|
|
# apaga arquivo (importante pois contém senhas) |
|
|
|
|
|
ARQUIVO_USUARIOS.remove() |
|
|