Browse Source

problemas com a migracao no banco postgres

diagnosticos
Felipe Vieira 14 years ago
parent
commit
46bd1e4afd
  1. 74
      sigi/apps/servidores/management/commands/migra.py
  2. 8
      sigi/apps/servidores/management/commands/sync_ldap.py
  3. 8
      sigi/apps/servidores/models.py

74
sigi/apps/servidores/management/commands/migra.py

@ -38,56 +38,58 @@ class Command(BaseCommand):
for (name, value) in pessoa: for (name, value) in pessoa:
p[name] = value.strip() p[name] = value.strip()
user = None
if not p['email']:
username = ''
email = ''
elif not ('@interlegis' in p['email']):
username = p['email'].split('@')[0].strip().lower()
email = ''
else:
username = p['email'].split('@')[0].strip().lower()
email = username + '@interlegis.gov.br'
# buscar usuário e servidor da linha atual # buscar usuário e servidor da linha atual
try: try:
# procuro o usuario por email se for interlegis # procuro o usuario por email do interlegis
if not p['email'] or not ('@interlegis' in p['email']): if email:
raise MigrationError try: user = User.objects.get(email=email)
user = User.objects.get(email__startswith=p['email']) except User.DoesNotExist: pass
servidor = user.servidor
except (MigrationError, User.DoesNotExist): if not user and username:
try: try: user = User.objects.get(username=username)
# se nao encontrar procura por nome except User.DoesNotExist:
if not p['nome_completo']: try: user = User.objects.get(username=username + "__")
raise MigrationError except User.DoesNotExist: pass
servidor = Servidor.objects.get(nome_completo=p['nome_completo'])
except (MigrationError, Servidor.DoesNotExist): if not user:
try:
# Cria um usuario tratando os casos incompletos
# fulano@interlegis.
username = p['email'].split('@')[0].lower()
user = User.objects.exclude(email='').get(username=username)
try:
servidor = user.servidor
except Servidor.DoesNotExist:
servidor = Servidor.objects.create(
user=user,
nome_completo= "%s %s" % (user.first_name, user.last_name)
)
except (MigrationError, User.DoesNotExist):
try:
if not username: if not username:
raise MigrationError raise MigrationError
if '@interlegis' in p['email']:
# pode ser um antigo usuario do ad if not email:
email = username + '@interlegis.gov.br'
else:
# cria um username a partir do email sem # cria um username a partir do email sem
# colidir com os usuarios ldap # colidir com os usuarios ldap
username = username + '__' username = username + '__'
email = ''
names = p['nome_completo'].split(' ') names = p['nome_completo'].split(' ')
first_name = names[0] first_name = names[0]
last_name = " ".join(names[1:]) last_name = " ".join(names[1:])
user = User.objects.create( user = User.objects.create(
username = username, username = username,
email = email, email = email,
first_name = first_name, first_name = first_name,
last_name = last_name, last_name = last_name[:30],
is_active= False is_active= False
) )
servidor = user.servidor servidor = user.servidor
except Exception, e: except Servidor.DoesNotExist:
servidor = Servidor.objects.create(
user=user,
nome_completo= "%s %s" % (user.first_name, user.last_name)
)
except MigrationError, e:
print ", ".join(row) print ", ".join(row)
continue continue
@ -181,7 +183,7 @@ class Command(BaseCommand):
e = servidor.endereco.create(logradouro=p['endereco']) e = servidor.endereco.create(logradouro=p['endereco'])
e.municipio = BRASILIA e.municipio = BRASILIA
e.bairro = p['cidade'] # bizarro mas é isso mesmo e.bairro = p['cidade'] # bizarro mas é isso mesmo
e.cep = p['cep'] e.cep = re.sub("\D", "", p['cep'])
e.save() e.save()
servidor.apontamentos = p['apontamentos'] servidor.apontamentos = p['apontamentos']
@ -189,8 +191,8 @@ class Command(BaseCommand):
if p['cargo'] or p['funcao']: if p['cargo'] or p['funcao']:
funcao = servidor.funcao_set.get_or_create( funcao = servidor.funcao_set.get_or_create(
funcao = p['cargo'], funcao = p['funcao'],
cargo = p['funcao'], cargo = p['cargo'],
)[0] )[0]
if p['data_bap_entrada']: if p['data_bap_entrada']:

8
sigi/apps/servidores/management/commands/sync_ldap.py

@ -67,6 +67,12 @@ class Command(BaseCommand):
print "User '%s' created." % username print "User '%s' created." % username
try: nome_completo = ldap_user[1]['cn'][0] try: nome_completo = ldap_user[1]['cn'][0]
except: nome_completo = '' except: nome_completo = ''
try:
servidor = user.servidor
if not servidor.nome_completo == nome_completo.decode('utf8'):
servidor.nome_completo = nome_completo
print "Servidor '%s' updated." % nome_completo
except Servidor.DoesNotExist:
try: servidor = Servidor.objects.get(nome_completo=nome_completo) try: servidor = Servidor.objects.get(nome_completo=nome_completo)
except Servidor.DoesNotExist: except Servidor.DoesNotExist:
servidor = user.servidor_set.create(nome_completo=nome_completo) servidor = user.servidor_set.create(nome_completo=nome_completo)
@ -81,5 +87,7 @@ class Command(BaseCommand):
if not user.last_name == last_name.decode('utf8'): if not user.last_name == last_name.decode('utf8'):
user.last_name = last_name user.last_name = last_name
print "User '%s' last name updated." % username print "User '%s' last name updated." % username
servidor.user = user
servidor.save()
user.save() user.save()
print "Users are synchronized." print "Users are synchronized."

8
sigi/apps/servidores/models.py

@ -8,7 +8,7 @@ class Subsecretaria(models.Model):
""" Modelo para representação das Subsecretarias do Interlegis """ Modelo para representação das Subsecretarias do Interlegis
""" """
nome = models.CharField(max_length=50, null=True) nome = models.CharField(max_length=250, null=True)
sigla = models.CharField(max_length=10, null=True) sigla = models.CharField(max_length=10, null=True)
# servidor responsavel por dirigir a Subsecretaria # servidor responsavel por dirigir a Subsecretaria
responsavel = models.ForeignKey('servidores.Servidor', related_name='diretor', null=True) responsavel = models.ForeignKey('servidores.Servidor', related_name='diretor', null=True)
@ -23,7 +23,7 @@ class Servico(models.Model):
""" Modelo para representação dos Serviços de uma Subsecretaria """ Modelo para representação dos Serviços de uma Subsecretaria
""" """
nome = models.CharField(max_length=50, null=True) nome = models.CharField(max_length=250, null=True)
sigla = models.CharField(max_length=10, null=True) sigla = models.CharField(max_length=10, null=True)
subsecretaria = models.ForeignKey(Subsecretaria, null=True) subsecretaria = models.ForeignKey(Subsecretaria, null=True)
# servidor responsavel por chefiar o serviço # servidor responsavel por chefiar o serviço
@ -162,8 +162,8 @@ class Funcao(models.Model):
servidores no Interlegis servidores no Interlegis
""" """
servidor = models.ForeignKey(Servidor) servidor = models.ForeignKey(Servidor)
funcao = models.CharField(max_length=50, null=True) funcao = models.CharField(max_length=250, null=True)
cargo = models.CharField(max_length=50, null=True) cargo = models.CharField(max_length=250, null=True)
inicio_funcao = models.DateField(u'início da função', null=True) inicio_funcao = models.DateField(u'início da função', null=True)
fim_funcao = models.DateField(u'fim da função', blank=True, null=True) fim_funcao = models.DateField(u'fim da função', blank=True, null=True)
descricao = models.TextField(u'descrição', blank=True, null=True) descricao = models.TextField(u'descrição', blank=True, null=True)

Loading…
Cancel
Save