LangAVSSController.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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,
  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)
  159. if langval.exists():
  160. langval.update(word_val=val, updTime=addTime)
  161. else:
  162. langArea = LangAreaModel.objects.filter(id=la_id)[0]
  163. # 插入key对应的value
  164. # 插入新的key
  165. langValue = {
  166. 'lk': lkModel,
  167. 'la': langArea,
  168. 'word_val': val,
  169. 'addTime': addTime,
  170. 'updTime': addTime,
  171. 'status': 1
  172. }
  173. LangValModel.objects.create(**langValue)
  174. lkc_qs = LangKeyClassModel.objects.filter(lk__id=lkModel.id, clazz__id=langClassModel.id)
  175. if not lkc_qs.exists():
  176. # 创建langClass和langKey的映射关系
  177. langKeyClass = {
  178. 'lk': lkModel,
  179. 'clazz': langClassModel
  180. }
  181. LangKeyClassModel.objects.create(**langKeyClass)
  182. # 语言的在代码中的位置
  183. locations = list(location_array)
  184. for location in locations:
  185. # print(location['filename'])
  186. # print(location['line'])
  187. langlocation = LangLocationModel.objects.filter(lk=lkModel.id, filename=location['filename'])
  188. if langlocation.exists():
  189. langlocation.update(line=location['line'])
  190. else:
  191. locationValue = {
  192. 'lk': lkModel,
  193. 'filename': location['filename'],
  194. 'line': location['line']
  195. }
  196. LangLocationModel.objects.create(**locationValue)
  197. return response.json(0)
  198. else:
  199. return response.json(444)
  200. def do_delete(self, request_dict, response):
  201. word_key = request_dict.get('word_key', None)
  202. token = request_dict.get('token', None)
  203. word_key_type = request_dict.get('word_key_type', None)
  204. response = ResponseObject()
  205. token = TokenObject(token)
  206. if token.code != 0:
  207. return response.json(token.code)
  208. user_qs = UserModel.objects.filter(id=token.userID, username='admin')
  209. if not user_qs.exists():
  210. return response.json(403)
  211. print(word_key_type)
  212. if not word_key_type:
  213. return response.json(444, 'word_key_type')
  214. if word_key:
  215. try:
  216. word_key_type = int(word_key_type)
  217. print(word_key_type)
  218. lk_qs = LangKeyModel.objects.filter(word_key=word_key)
  219. if lk_qs.exists():
  220. # lk = lk_qs[0]
  221. # if lk.type == 2:
  222. # lk.type = 0
  223. # lk.save()
  224. # else:
  225. # lk_qs.delete()
  226. # LangValModel.objects.filter(lk__word_key=word_key).delete()
  227. lk = lk_qs[0]
  228. print(lk.type)
  229. if lk.type < word_key_type:
  230. return response.json(444, 'work_key_type')
  231. else:
  232. lk.type -= word_key_type
  233. if lk.type > 0:
  234. lk.save()
  235. else:
  236. lk_qs.delete()
  237. LangValModel.objects.filter(lk__word_key=word_key).delete()
  238. LangLocationModel.objects.filter(lk__word_key=word_key).delete()
  239. LangKeyClassModel.objects.filter(lk__word_key=word_key).delete()
  240. except Exception as e:
  241. return response.json(404, repr(e))
  242. else:
  243. return response.json(0)
  244. else:
  245. return response.json(444)
  246. def do_translate(self, request_dict, response):
  247. print("进来了")
  248. lang = request_dict.get('lang', None)
  249. if not lang:
  250. return response.json(444)
  251. langkeymodel = LangKeyModel.objects.filter(langvalmodel__la__lang=lang, type__in=(2, 3, 6, 7)).values(
  252. 'word_key',
  253. 'langkeyclassmodel__clazz__name',
  254. 'langvalmodel__word_val')
  255. result = {}
  256. for item in langkeymodel:
  257. classname = item['langkeyclassmodel__clazz__name']
  258. key = item['word_key']
  259. value = item['langvalmodel__word_val']
  260. if classname not in result:
  261. result[classname] = {key: value}
  262. else:
  263. result[classname][key] = value
  264. return response.json(0, result)