Browse Source

Adapta migração de usuários à nova exportação do zope

Fix #1585
pull/1700/merge
Marcio Mazza 7 years ago
parent
commit
2ba0295c7a
  1. 32
      sapl/legacy/migracao_usuarios.py

32
sapl/legacy/migracao_usuarios.py

@ -1,4 +1,6 @@
import yaml
from django.contrib.auth.models import Group, User
from sapl.settings import MEDIA_ROOT
PERFIL_LEGADO_PARA_NOVO = {legado: Group.objects.get(name=novo)
@ -30,9 +32,20 @@ IGNORADOS = {
}
def decode_nome(nome):
if isinstance(nome, bytes):
try:
return nome.decode('utf-8')
except UnicodeDecodeError:
return nome.decode('iso8859-1')
else:
assert isinstance(nome, str)
return nome
def migra_usuarios():
"""
o arquivo media/USERS e importa os usuários nele listados,
o arquivo media/usuarios.yaml e importa os usuários nele listados,
com senhas e perfis.
Os usuários são criados se necessário e seus perfis ajustados.
@ -54,16 +67,19 @@ def migra_usuarios():
Também podemos assumir que essa é uma tarefa de um administrador
"""
ARQUIVO_USUARIOS = MEDIA_ROOT.child('USERS')
ARQUIVO_USUARIOS = MEDIA_ROOT.child('usuarios.yaml')
with open(ARQUIVO_USUARIOS, 'r') as f:
usuarios = eval(f.read())
usuarios = yaml.load(f)
# conferimos de que só há um nome de usuário
assert all(nome == dados['name'] for nome, dados in usuarios.items())
usuarios = [
(nome,
# troca senha "inicial" por uma inutilizável
senha if senha != 'inicial' else None,
(decode_nome(nome),
# troca senha "inicial" (que existe em alguns zopes)
# por uma inutilizável
dados['__'] if dados['__'] != 'inicial' else None,
# filtra perfis ignorados
{p for p in perfis if p not in IGNORADOS})
for nome, senha, perfis in usuarios]
set(dados['roles']) - IGNORADOS)
for nome, dados in usuarios.items()]
for nome, senha, perfis in usuarios:
usuario = User.objects.get_or_create(username=nome)[0]

Loading…
Cancel
Save