LangAVSSController.py 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import json
  4. import time
  5. from tokenize import Token
  6. from django.views.generic.base import TemplateView
  7. from model.models import LangClassModel, LangKeyModel, LangAreaModel, LangValModel, LangKeyClassModel, \
  8. LangLocationModel, UserModel
  9. from object.ResponseObject import ResponseObject
  10. from object.TokenObject import TokenObject
  11. class LangAVSSView(TemplateView):
  12. def post(self, request, *args, **kwargs):
  13. request.encoding = 'utf-8'
  14. operation = kwargs.get('operation', None)
  15. request_dict = json.loads(request.body.decode('utf-8'))
  16. return self.validate(request_dict, operation)
  17. def get(self, request, *args, **kwargs):
  18. request.encoding = 'utf-8'
  19. request_dict = request.GET
  20. operation = kwargs.get('operation', None)
  21. return self.validate(request_dict, operation)
  22. def validate(self, request_dict, operation):
  23. response = ResponseObject()
  24. if operation == 'add':
  25. return self.do_add(request_dict, response)
  26. elif operation == 'delete':
  27. return self.do_delete(request_dict, response)
  28. elif operation == 'add_single':
  29. return self.do_add_single(request_dict, response)
  30. else:
  31. return response.json(404)
  32. def do_add(self, request_dict, response):
  33. data = request_dict.get('data', None)
  34. print(data)
  35. if data:
  36. data = json.loads(data)
  37. keys = data.keys()
  38. for key in keys:
  39. # 取出模块,每个context
  40. langClass = data[key]
  41. # print(langClass['name'])
  42. lc_qs = LangClassModel.objects.filter(name=key)
  43. if not lc_qs.exists():
  44. LangClassModel.objects.create(**{'name': key})
  45. langClassModel = LangClassModel.objects.get(name=key)
  46. # 每个context里面的语言
  47. languages = langClass['languages']
  48. # print(languages)
  49. langKeys = languages.keys()
  50. for langKey in langKeys:
  51. # print(langKey)
  52. # 取出每个语言
  53. language = languages[langKey]
  54. # print(language)
  55. lk_qs = LangKeyModel.objects.filter(word_key=langKey)
  56. lkModel = None
  57. if lk_qs.exists():
  58. lkModel = lk_qs[0]
  59. lkModel.type = 2
  60. lkModel.save()
  61. else:
  62. # 插入新的key
  63. addTime = int(time.time())
  64. lk = {
  65. 'word_key': language['source'],
  66. 'addTime': addTime,
  67. 'updTime': addTime,
  68. 'type': 1,
  69. }
  70. lkModel = LangKeyModel.objects.create(**lk)
  71. # lkModel = lkModel[0]
  72. translations = language['translation']
  73. for translation in translations:
  74. la_id = translation['la_id']
  75. val = translation['val']
  76. langArea = LangAreaModel.objects.filter(id=la_id)[0]
  77. # 插入key对应的value
  78. # 插入新的key
  79. addTime = int(time.time())
  80. langValue = {
  81. 'lk': lkModel,
  82. 'la': langArea,
  83. 'word_val': val,
  84. 'addTime': addTime,
  85. 'updTime': addTime,
  86. 'status': 1
  87. }
  88. LangValModel.objects.create(**langValue)
  89. # 语言的key
  90. # print('source = ' + language['source'])
  91. # 语言的value
  92. # print('translation = ' + language['translation'])
  93. lkc_qs = LangKeyClassModel.objects.filter(lk__id=lkModel.id, clazz__id=langClassModel.id)
  94. if not lkc_qs.exists():
  95. # 创建langClass和langKey的映射关系
  96. langKeyClass = {
  97. 'lk': lkModel,
  98. 'clazz': langClassModel
  99. }
  100. LangKeyClassModel.objects.create(**langKeyClass)
  101. # 语言的在代码中的位置
  102. locations = language['locations']
  103. for location in locations:
  104. # print(location['filename'])
  105. # print(location['line'])
  106. locationValue = {
  107. 'lk': lkModel,
  108. 'filename': location['filename'],
  109. 'line': location['line']
  110. }
  111. LangLocationModel.objects.create(**locationValue)
  112. return response.json(0)
  113. else:
  114. return response.json(444)
  115. def do_add_single(self, request_dict, response):
  116. word_class = request_dict.get('word_class', None)
  117. word_key = request_dict.get('word_key', None)
  118. word_array = request_dict.get('word_array', None)
  119. location_array = request_dict.get('location_array', None)
  120. if word_class and word_key and word_array and location_array:
  121. # 判断lang_class是否存在
  122. lc_qs = LangClassModel.objects.filter(name=word_class)
  123. if not lc_qs.exists():
  124. LangClassModel.objects.create(**{'name': word_class})
  125. langClassModel = LangClassModel.objects.get(name=word_class)
  126. # 取出每个语言
  127. lk_qs = LangKeyModel.objects.filter(word_key=word_key)
  128. lkModel = None
  129. if lk_qs.exists():
  130. lkModel = lk_qs[0]
  131. if lkModel.type == 0:
  132. lkModel.type = 2
  133. lkModel.save()
  134. else:
  135. # 插入新的key
  136. addTime = int(time.time())
  137. lk = {
  138. 'word_key': word_key,
  139. 'addTime': addTime,
  140. 'updTime': addTime,
  141. 'type': 1,
  142. }
  143. lkModel = LangKeyModel.objects.create(**lk)
  144. # lkModel = lkModel[0]
  145. translations = list(word_array)
  146. for translation in translations:
  147. la_id = translation['la_id']
  148. val = translation['val']
  149. langArea = LangAreaModel.objects.filter(id=la_id)[0]
  150. # 插入key对应的value
  151. # 插入新的key
  152. addTime = int(time.time())
  153. langValue = {
  154. 'lk': lkModel,
  155. 'la': langArea,
  156. 'word_val': val,
  157. 'addTime': addTime,
  158. 'updTime': addTime,
  159. 'status': 1
  160. }
  161. LangValModel.objects.create(**langValue)
  162. lkc_qs = LangKeyClassModel.objects.filter(lk__id=lkModel.id, clazz__id=langClassModel.id)
  163. if not lkc_qs.exists():
  164. # 创建langClass和langKey的映射关系
  165. langKeyClass = {
  166. 'lk': lkModel,
  167. 'clazz': langClassModel
  168. }
  169. LangKeyClassModel.objects.create(**langKeyClass)
  170. # 语言的在代码中的位置
  171. locations = list(location_array)
  172. for location in locations:
  173. # print(location['filename'])
  174. # print(location['line'])
  175. locationValue = {
  176. 'lk': lkModel,
  177. 'filename': location['filename'],
  178. 'line': location['line']
  179. }
  180. LangLocationModel.objects.create(**locationValue)
  181. return response.json(0)
  182. else:
  183. return response.json(444)
  184. def do_delete(self, request_dict, response):
  185. word_key = request_dict.get('word_key', None)
  186. token = request_dict.get('token', None)
  187. response = ResponseObject()
  188. token = TokenObject(token)
  189. if token.code != 0:
  190. return response.json(token.code)
  191. user_qs = UserModel.objects.filter(id=token.userID, username='admin')
  192. if not user_qs.exists():
  193. return response.json(403)
  194. if word_key:
  195. try:
  196. lk_qs = LangKeyModel.objects.filter(word_key=word_key)
  197. if lk_qs.exists():
  198. lk = lk_qs[0]
  199. if lk.type == 2:
  200. lk.type = 0
  201. lk.save()
  202. else:
  203. lk_qs.delete()
  204. LangValModel.objects.filter(lk__word_key=word_key).delete()
  205. LangLocationModel.objects.filter(lk__word_key=word_key).delete()
  206. LangKeyClassModel.objects.filter(lk__word_key=word_key).delete()
  207. except Exception as e:
  208. return response.json(404, repr(e))
  209. else:
  210. return response.json(0)
  211. else:
  212. return response.json(444)