No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

admin.py 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. from ...exceptions import *
  2. from .base import get_response
  3. from lodel.leapi.exceptions import *
  4. from lodel import logger
  5. from ...client import WebUiClient
  6. import leapi_dyncode as dyncode
  7. import warnings
  8. def index_admin(request):
  9. if WebUiClient.is_anonymous():
  10. return get_response('users/signin.html')
  11. return get_response('admin/admin.html')
  12. def admin_update(request):
  13. if WebUiClient.is_anonymous():
  14. return get_response('users/signin.html')
  15. msg=''
  16. if request.method == 'POST':
  17. error = None
  18. datas = list()
  19. classname = request.form['classname']
  20. logger.warning('Composed uids broken here')
  21. uid = request.form['uid']
  22. try:
  23. target_leo = dyncode.Object.name2class(classname)
  24. except LeApiError:
  25. classname = None
  26. if classname is None or target_leo.is_abstract():
  27. raise HttpException(400)
  28. fieldnames = target_leo.fieldnames()
  29. uid_field = target_leo.uid_fieldname()[0]
  30. fields = dict()
  31. for in_put, in_value in request.form.items():
  32. if in_put != 'classname' and in_put != 'uid':
  33. fields[in_put[12:]] = in_value
  34. #elif in_put == 'classname':
  35. # fields['classname'] = in_value
  36. filter_q = '%s = %s' % (uid_field, uid)
  37. obj = (target_leo.get((filter_q)))[0]
  38. inserted = obj.update(fields)
  39. if inserted==1:
  40. msg = 'Successfully updated';
  41. else:
  42. msg = 'Oops something wrong happened...object not saved'
  43. return get_response('admin/admin_edit.html', target=target_leo, uidfield = uid_field, lodel_id = uid, msg = msg)
  44. if 'classname' in request.GET:
  45. classname = request.GET['classname']
  46. if len(classname) > 1:
  47. raise HttpException(400)
  48. classname = classname[0]
  49. try:
  50. target_leo = dyncode.Object.name2class(classname)
  51. except LeApiError:
  52. # classname = None
  53. raise HttpException(400)
  54. logger.warning('Composed uids broken here')
  55. uid_field = target_leo.uid_fieldname()[0]
  56. test_valid = 'lodel_id' in request.GET \
  57. and len(request.GET['lodel_id']) == 1
  58. if test_valid:
  59. try:
  60. dh = target_leo.field(uid_field)
  61. lodel_id = dh.cast_type(request.GET['lodel_id'][0])
  62. except (ValueError, TypeError):
  63. test_valid = False
  64. if not test_valid:
  65. raise HttpException(400)
  66. else:
  67. query_filters = list()
  68. query_filters.append((uid_field,'=',lodel_id))
  69. obj = target_leo.get(query_filters)
  70. if len(obj) == 0:
  71. raise HttpException(404)
  72. return get_response('admin/admin_edit.html', target=target_leo, lodel_id =lodel_id)
  73. def admin_create(request):
  74. if WebUiClient.is_anonymous():
  75. return get_response('users/signin.html')
  76. classname = None
  77. if request.method == 'POST':
  78. error = None
  79. datas = list()
  80. classname = request.form['classname']
  81. try:
  82. target_leo = dyncode.Object.name2class(classname)
  83. except LeApiError:
  84. classname = None
  85. if classname is None or target_leo.is_abstract():
  86. raise HttpException(400)
  87. fieldnames = target_leo.fieldnames()
  88. fields = dict()
  89. for in_put, in_value in request.form.items():
  90. if in_put != 'classname' and in_value != '':
  91. fields[in_put[12:]] = in_value
  92. new_uid = target_leo.insert(fields)
  93. if not new_uid is None:
  94. msg = 'Successfull creation';
  95. else:
  96. msg = 'Oops something wrong happened...object not saved'
  97. return get_response('admin/admin_create.html', target=target_leo, msg = msg)
  98. if 'classname' in request.GET:
  99. classname = request.GET['classname']
  100. if len(classname) > 1:
  101. raise HttpException(400)
  102. classname = classname[0]
  103. try:
  104. target_leo = dyncode.Object.name2class(classname)
  105. except LeApiError:
  106. classname = None
  107. msg = None
  108. if 'msg' in request.GET:
  109. msg = request.GET['msg']
  110. if classname is None or target_leo.is_abstract():
  111. raise HttpException(400)
  112. return get_response('admin/admin_create.html', target=target_leo)
  113. def admin_classes(request):
  114. if WebUiClient.is_anonymous():
  115. return get_response('users/signin.html')
  116. return get_response('admin/list_classes_admin.html', my_classes = dyncode.dynclasses)
  117. def create_object(request):
  118. if WebUiClient.is_anonymous():
  119. return get_response('users/signin.html')
  120. return get_response('admin/list_classes_create.html', my_classes = dyncode.dynclasses)
  121. def admin_class(request):
  122. if WebUiClient.is_anonymous():
  123. return get_response('users/signin.html')
  124. if 'classname' in request.GET:
  125. classname = request.GET['classname']
  126. if len(classname) > 1:
  127. raise HttpException(400)
  128. classname = classname[0]
  129. try:
  130. target_leo = dyncode.Object.name2class(classname)
  131. except LeApiError:
  132. classname = None
  133. if classname is None or target_leo.is_abstract():
  134. raise HttpException(400)
  135. return get_response('admin/show_class_admin.html', target=target_leo)
  136. def admin(request):
  137. if WebUiClient.is_anonymous():
  138. return get_response('users/signin.html')
  139. return get_response('admin/admin.html')