LangAVSSController.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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. elif operation == 'translate':
  31. return self.do_translate(request_dict, response)
  32. else:
  33. return response.json(404)
  34. def do_add(self, request_dict, response):
  35. data = request_dict.get('data', None)
  36. print(data)
  37. if data:
  38. data = json.loads(data)
  39. keys = data.keys()
  40. for key in keys:
  41. # 取出模块,每个context
  42. langClass = data[key]
  43. # print(langClass['name'])
  44. lc_qs = LangClassModel.objects.filter(name=key)
  45. if not lc_qs.exists():
  46. LangClassModel.objects.create(**{'name': key})
  47. langClassModel = LangClassModel.objects.get(name=key)
  48. # 每个context里面的语言
  49. languages = langClass['languages']
  50. # print(languages)
  51. langKeys = languages.keys()
  52. for langKey in langKeys:
  53. # print(langKey)
  54. # 取出每个语言
  55. language = languages[langKey]
  56. # print(language)
  57. lk_qs = LangKeyModel.objects.filter(word_key=langKey)
  58. lkModel = None
  59. if lk_qs.exists():
  60. lkModel = lk_qs[0]
  61. lkModel.type = 2
  62. lkModel.save()
  63. else:
  64. # 插入新的key
  65. addTime = int(time.time())
  66. lk = {
  67. 'word_key': language['source'],
  68. 'addTime': addTime,
  69. 'updTime': addTime,
  70. 'type': 1,
  71. }
  72. lkModel = LangKeyModel.objects.create(**lk)
  73. # lkModel = lkModel[0]
  74. translations = language['translation']
  75. for translation in translations:
  76. la_id = translation['la_id']
  77. val = translation['val']
  78. langArea = LangAreaModel.objects.filter(id=la_id)[0]
  79. # 插入key对应的value
  80. # 插入新的key
  81. addTime = int(time.time())
  82. langValue = {
  83. 'lk': lkModel,
  84. 'la': langArea,
  85. 'word_val': val,
  86. 'addTime': addTime,
  87. 'updTime': addTime,
  88. 'status': 1
  89. }
  90. LangValModel.objects.create(**langValue)
  91. # 语言的key
  92. # print('source = ' + language['source'])
  93. # 语言的value
  94. # print('translation = ' + language['translation'])
  95. lkc_qs = LangKeyClassModel.objects.filter(lk__id=lkModel.id, clazz__id=langClassModel.id)
  96. if not lkc_qs.exists():
  97. # 创建langClass和langKey的映射关系
  98. langKeyClass = {
  99. 'lk': lkModel,
  100. 'clazz': langClassModel
  101. }
  102. LangKeyClassModel.objects.create(**langKeyClass)
  103. # 语言的在代码中的位置
  104. locations = language['locations']
  105. for location in locations:
  106. # print(location['filename'])
  107. # print(location['line'])
  108. langlocaltionmodel = LangLocationModel.objects.filter(lk=lkModel.id,
  109. filename=location['filename'])
  110. if langlocaltionmodel.exists():
  111. langlocaltionmodel.update(line=location['line'])
  112. else:
  113. locationValue = {
  114. 'lk': lkModel,
  115. 'filename': location['filename'],
  116. 'line': location['line']
  117. }
  118. LangLocationModel.objects.create(**locationValue)
  119. return response.json(0)
  120. else:
  121. return response.json(444)
  122. def do_add_single(self, request_dict, response):
  123. word_class = request_dict.get('word_class', None)
  124. word_key = request_dict.get('word_key', None)
  125. word_array = request_dict.get('word_array', None)
  126. location_array = request_dict.get('location_array', None)
  127. if word_class and word_key and word_array and location_array:
  128. # 判断lang_class是否存在
  129. lc_qs = LangClassModel.objects.filter(name=word_class)
  130. if not lc_qs.exists():
  131. LangClassModel.objects.create(**{'name': word_class})
  132. langClassModel = LangClassModel.objects.get(name=word_class)
  133. # 取出每个语言
  134. lk_qs = LangKeyModel.objects.filter(word_key=word_key)
  135. lkModel = None
  136. if lk_qs.exists():
  137. lkModel = lk_qs[0]
  138. lkModel.type = lkModel.type | 2
  139. lkModel.save()
  140. # if lkModel.type == 0:
  141. # lkModel.type = 2
  142. else:
  143. # 插入新的key
  144. addTime = int(time.time())
  145. lk = {
  146. 'word_key': word_key,
  147. 'addTime': addTime,
  148. 'updTime': addTime,
  149. 'type': 2,
  150. }
  151. lkModel = LangKeyModel.objects.create(**lk)
  152. # lkModel = lkModel[0]
  153. translations = list(word_array)
  154. for translation in translations:
  155. la_id = translation['la_id']
  156. val = translation['val']
  157. addTime = int(time.time())
  158. langval = LangValModel.objects.filter(la=la_id, lk=lkModel.id)
  159. if langval.exists():
  160. langval.update(word_val=val, updTime=addTime)
  161. else:
  162. # 插入key对应的value
  163. # 插入新的key
  164. langValue = {
  165. 'lk': lkModel.id,
  166. 'la': la_id,
  167. 'word_val': val,
  168. 'addTime': addTime,
  169. 'updTime': addTime,
  170. 'status': 1
  171. }
  172. LangValModel.objects.create(**langValue)
  173. lkc_qs = LangKeyClassModel.objects.filter(lk__id=lkModel.id, clazz__id=langClassModel.id)
  174. if not lkc_qs.exists():
  175. # 创建langClass和langKey的映射关系
  176. langKeyClass = {
  177. 'lk': lkModel,
  178. 'clazz': langClassModel
  179. }
  180. LangKeyClassModel.objects.create(**langKeyClass)
  181. # 语言的在代码中的位置
  182. locations = list(location_array)
  183. for location in locations:
  184. # print(location['filename'])
  185. # print(location['line'])
  186. langlocation = LangLocationModel.objects.filter(lk=lkModel.id, filename=location['filename'])
  187. if langlocation.exists():
  188. langlocation.update(line=location['line'])
  189. else:
  190. locationValue = {
  191. 'lk': lkModel,
  192. 'filename': location['filename'],
  193. 'line': location['line']
  194. }
  195. LangLocationModel.objects.create(**locationValue)
  196. return response.json(0)
  197. else:
  198. return response.json(444)
  199. def do_delete(self, request_dict, response):
  200. word_key = request_dict.get('word_key', None)
  201. token = request_dict.get('token', None)
  202. word_key_type = request_dict.get('word_key_type', None)
  203. response = ResponseObject()
  204. token = TokenObject(token)
  205. if token.code != 0:
  206. return response.json(token.code)
  207. user_qs = UserModel.objects.filter(id=token.userID, username='admin')
  208. if not user_qs.exists():
  209. return response.json(403)
  210. print(word_key_type)
  211. if not word_key_type:
  212. return response.json(444, 'word_key_type')
  213. if word_key:
  214. try:
  215. word_key_type = int(word_key_type)
  216. print(word_key_type)
  217. lk_qs = LangKeyModel.objects.filter(word_key=word_key)
  218. if lk_qs.exists():
  219. # lk = lk_qs[0]
  220. # if lk.type == 2:
  221. # lk.type = 0
  222. # lk.save()
  223. # else:
  224. # lk_qs.delete()
  225. # LangValModel.objects.filter(lk__word_key=word_key).delete()
  226. lk = lk_qs[0]
  227. print(lk.type)
  228. if lk.type < word_key_type:
  229. return response.json(444, 'work_key_type')
  230. else:
  231. lk.type -= word_key_type
  232. if lk.type > 0:
  233. lk.save()
  234. else:
  235. lk_qs.delete()
  236. LangValModel.objects.filter(lk__word_key=word_key).delete()
  237. LangLocationModel.objects.filter(lk__word_key=word_key).delete()
  238. LangKeyClassModel.objects.filter(lk__word_key=word_key).delete()
  239. except Exception as e:
  240. return response.json(404, repr(e))
  241. else:
  242. return response.json(0)
  243. else:
  244. return response.json(444)
  245. def do_translate(self, request_dict, response):
  246. print("进来了")
  247. lang = request_dict.get('lang', None)
  248. if not lang:
  249. return response.json(444)
  250. langkeymodel = LangKeyModel.objects.filter(langvalmodel__la__lang=lang, type__in=(2, 3, 6, 7)).values(
  251. 'word_key',
  252. 'langkeyclassmodel__clazz__name',
  253. 'langvalmodel__word_val')
  254. result = {}
  255. for item in langkeymodel:
  256. classname = item['langkeyclassmodel__clazz__name']
  257. key = item['word_key']
  258. value = item['langvalmodel__word_val']
  259. if classname not in result:
  260. result[classname] = {key: value}
  261. else:
  262. result[classname][key] = value
  263. return response.json(0, result)