/tsjepublisher/views/UsuarioViews.py

http://hackathon.codeplex.com · Python · 115 lines · 74 code · 16 blank · 25 comment · 20 complexity · d96007b4d90ce546e2ed566e8140ed9c MD5 · raw file

  1. '''
  2. Created on Mar 29, 2012
  3. @author: jorge
  4. Modulo que encapsula los rpc relacionados al manejo de sesiones
  5. '''
  6. from tsjepublisher.models import DBSession
  7. from tsjepublisher.models import Usuario
  8. from pyramid.view import view_config
  9. from pyramid.response import Response
  10. @view_config(route_name='loginAttempt', renderer='json')
  11. def LoginView(request):
  12. '''
  13. Intenta loguear un usuario al sistema, retorna el resultado del intento
  14. '''
  15. params = request.params
  16. session = request.session
  17. if(not "uid" in params or not "pwd" in params):
  18. return {"respuesta" : False , "causa" : "Los parametros ingresados son insuficientes."}
  19. user = params["uid"]
  20. pasw = params["pwd"]
  21. session["logged"] = False
  22. res = DBSession.query(Usuario).filter(Usuario.login == user)
  23. if(res.count() == 0):
  24. return {"respuesta" : False , "causa" : "El usuario ingresado no existe."}
  25. candidato = res.first()
  26. if(candidato.password == pasw):
  27. session["logged"] = True
  28. session['uid'] = candidato.idUsuario
  29. return {"respuesta" : True , "bienvenida" : "Bienvenido " + candidato.nombre + "!"}
  30. else:
  31. return {"respuesta" : False , "causa" : "El password ingresado es invalido."}
  32. return {"respuesta" : True , "bienvenida" : "Bienvenido "}
  33. @view_config(route_name='logout')
  34. def LogoutView(request):
  35. '''
  36. RPC para cerrar la sesion
  37. '''
  38. session = request.session
  39. session["logged"] = False
  40. session['uid'] = -1
  41. session.invalidate()
  42. return Response('Ok')
  43. @view_config(route_name='isLogged', renderer='json')
  44. def isLoggedView(request):
  45. '''
  46. RPC para chequear si el usuario esta logueado
  47. '''
  48. session = request.session
  49. return {"logged" : session["logged"] if "logged" in session else False}
  50. @view_config(route_name='listUsers', renderer = 'json')
  51. def listUsersView(request):
  52. '''
  53. Llamada a la vista, retorna el resultado del intento de logueo
  54. '''
  55. params = request.params
  56. session = request.session
  57. if isLoggedView(request)['logged']:
  58. return [p.toDict() for p in DBSession.query(Usuario)]##
  59. else:
  60. return []
  61. import mmap
  62. import transaction
  63. from sqlalchemy.orm import undefer
  64. from pyramid.httpexceptions import HTTPFound
  65. @view_config(route_name='uploadTry')
  66. def uploadImageView(request):
  67. '''
  68. Llamada a la vista, retorna el resultado del intento de logueo
  69. '''
  70. session = request.session
  71. if isLoggedView(request)['logged']:
  72. jorgem = DBSession.query(Usuario).filter_by(idUsuario=session['uid']).first()
  73. if 'upfile' in request.params and not request.params['upfile'] == '':
  74. mapj = mmap.mmap(request.params['upfile'].file.fileno(), 0)
  75. jorgem.bg = mapj.read(mapj.size())
  76. a = 'foto ' + ("%.2f" % (float(mapj.size())/1024.0)) + 'kb'
  77. else:
  78. jorgem.bg = None
  79. a = 'foto default'
  80. transaction.commit()
  81. return Response('Ok {' + a + '}')
  82. else:
  83. return Response('Login first')
  84. @view_config(route_name='dynDownload')
  85. def downloadImageView(request):
  86. '''
  87. Llamada a la vista, retorna el resultado del intento de logueo
  88. '''
  89. session = request.session
  90. if not isLoggedView(request)['logged']:
  91. return HTTPFound(location='/static/images/bg.jpg')
  92. else:
  93. logged_user = DBSession.query(Usuario).filter_by(idUsuario=session['uid']).options(undefer('bg')).first()
  94. if logged_user == None or logged_user.bg == None:
  95. return HTTPFound(location='/static/images/bg.jpg')
  96. else:
  97. return Response(logged_user.bg)