LangAVSSController.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  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. langlocaltionmodel = LangLocationModel.objects.filter(lk=lkModel, filename=location['filename'])
  107. if langlocaltionmodel.exists():
  108. langlocaltionmodel.update(line=location['line'])
  109. else:
  110. locationValue = {
  111. 'lk': lkModel,
  112. 'filename': location['filename'],
  113. 'line': location['line']
  114. }
  115. LangLocationModel.objects.create(**locationValue)
  116. return response.json(0)
  117. else:
  118. return response.json(444)
  119. def do_add_single(self, request_dict, response):
  120. word_class = request_dict.get('word_class', None)
  121. word_key = request_dict.get('word_key', None)
  122. word_array = request_dict.get('word_array', None)
  123. location_array = request_dict.get('location_array', None)
  124. if word_class and word_key and word_array and location_array:
  125. # 判断lang_class是否存在
  126. lc_qs = LangClassModel.objects.filter(name=word_class)
  127. if not lc_qs.exists():
  128. LangClassModel.objects.create(**{'name': word_class})
  129. langClassModel = LangClassModel.objects.get(name=word_class)
  130. # 取出每个语言
  131. lk_qs = LangKeyModel.objects.filter(word_key=word_key)
  132. lkModel = None
  133. if lk_qs.exists():
  134. lkModel = lk_qs[0]
  135. lkModel.type = lkModel.type | 2
  136. lkModel.save()
  137. # if lkModel.type == 0:
  138. # lkModel.type = 2
  139. else:
  140. # 插入新的key
  141. addTime = int(time.time())
  142. lk = {
  143. 'word_key': word_key,
  144. 'addTime': addTime,
  145. 'updTime': addTime,
  146. 'type': 2,
  147. }
  148. lkModel = LangKeyModel.objects.create(**lk)
  149. # lkModel = lkModel[0]
  150. translations = list(word_array)
  151. for translation in translations:
  152. la_id = translation['la_id']
  153. val = translation['val']
  154. langArea = LangAreaModel.objects.filter(id=la_id)[0]
  155. # 插入key对应的value
  156. # 插入新的key
  157. addTime = int(time.time())
  158. langValue = {
  159. 'lk': lkModel,
  160. 'la': langArea,
  161. 'word_val': val,
  162. 'addTime': addTime,
  163. 'updTime': addTime,
  164. 'status': 1
  165. }
  166. LangValModel.objects.create(**langValue)
  167. lkc_qs = LangKeyClassModel.objects.filter(lk__id=lkModel.id, clazz__id=langClassModel.id)
  168. if not lkc_qs.exists():
  169. # 创建langClass和langKey的映射关系
  170. langKeyClass = {
  171. 'lk': lkModel,
  172. 'clazz': langClassModel
  173. }
  174. LangKeyClassModel.objects.create(**langKeyClass)
  175. # 语言的在代码中的位置
  176. locations = list(location_array)
  177. for location in locations:
  178. # print(location['filename'])
  179. # print(location['line'])
  180. locationValue = {
  181. 'lk': lkModel,
  182. 'filename': location['filename'],
  183. 'line': location['line']
  184. }
  185. LangLocationModel.objects.create(**locationValue)
  186. return response.json(0)
  187. else:
  188. return response.json(444)
  189. def do_delete(self, request_dict, response):
  190. word_key = request_dict.get('word_key', None)
  191. token = request_dict.get('token', None)
  192. word_key_type = request_dict.get('word_key_type', None)
  193. response = ResponseObject()
  194. token = TokenObject(token)
  195. if token.code != 0:
  196. return response.json(token.code)
  197. user_qs = UserModel.objects.filter(id=token.userID, username='admin')
  198. if not user_qs.exists():
  199. return response.json(403)
  200. print(word_key_type)
  201. if not word_key_type:
  202. return response.json(444, 'word_key_type')
  203. if word_key:
  204. try:
  205. word_key_type = int(word_key_type)
  206. print(word_key_type)
  207. lk_qs = LangKeyModel.objects.filter(word_key=word_key)
  208. if lk_qs.exists():
  209. # lk = lk_qs[0]
  210. # if lk.type == 2:
  211. # lk.type = 0
  212. # lk.save()
  213. # else:
  214. # lk_qs.delete()
  215. # LangValModel.objects.filter(lk__word_key=word_key).delete()
  216. lk = lk_qs[0]
  217. print(lk.type)
  218. if lk.type < word_key_type:
  219. return response.json(444, 'work_key_type')
  220. else:
  221. lk.type -= word_key_type
  222. if lk.type > 0:
  223. lk.save()
  224. else:
  225. lk_qs.delete()
  226. LangValModel.objects.filter(lk__word_key=word_key).delete()
  227. LangLocationModel.objects.filter(lk__word_key=word_key).delete()
  228. LangKeyClassModel.objects.filter(lk__word_key=word_key).delete()
  229. except Exception as e:
  230. return response.json(404, repr(e))
  231. else:
  232. return response.json(0)
  233. else:
  234. return response.json(444)