#!/usr/bin/env python3 # -*- coding: utf-8 -*- import oss2 from django.views import View from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET from Model.models import VoicePromptModel from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject from Service.CommonService import CommonService from Service.ModelService import ModelService class VoicePromptView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' request_dict = request.GET operation = kwargs.get('operation', None) return self.validate(request_dict, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' request_dict = request.POST operation = kwargs.get('operation', None) return self.validate(request_dict, operation) def validate(self, request_dict, operation): token = request_dict.get('token', None) lang = request_dict.get('lang', None) response = ResponseObject(lang=lang) token = TokenObject(token) if token.code != 0: return response.json(token.code) if operation == 'getUploadUrl': return self.get_upload_url(token.userID, request_dict, response) elif operation == 'add': return self.do_add(token.userID, request_dict, response) elif operation == 'delete': return self.do_delete(token.userID, request_dict, response) elif operation == 'query': return self.do_query(token.userID, request_dict, response) elif operation == 'adminAdd': return self.do_admin_add(token.userID, request_dict, response) else: return response.json(404) def get_upload_url(self, userID, request_dict, response): upload_type = request_dict.get('upload_type', None) if upload_type: auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET) bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres') name = CommonService.createOrderID() filename = str(name) + '.' + upload_type obj = 'voice_prompt/{userID}/'.format(userID=userID) + filename url = bucket.sign_url('PUT', obj, 7200) return response.json(0, {'put_url': url, 'filename': filename}) else: return response.json(444) def do_add(self, userID, request_dict, response): filename = request_dict.get('filename', None) title = request_dict.get('title', None) type = request_dict.get('type', None) lang = request_dict.get('lang', '') if filename and title and type: voice_prompt = VoicePromptModel() voice_prompt.filename = filename voice_prompt.title = title voice_prompt.type = type voice_prompt.language = lang voice_prompt.user_id = userID voice_prompt.classification = 1 voice_prompt.save() return response.json(0) else: return response.json(444) def do_delete(self, userID, request_dict, response): id = request_dict.get('id', None) if id: voice_qs = VoicePromptModel.objects.filter(id=id, user_id=userID) if voice_qs.exists(): voice_qs.delete() return response.json(0) else: return response.json(444) def do_query(self, userID, request_dict, response): page = request_dict.get('page', None) line = request_dict.get('line', None) type = request_dict.get('type', None) lang = request_dict.get('lang', None) if page and line and type and lang: page = int(page) line = int(line) if page < 0 or line < 0: return response.json(444) voice_qs = VoicePromptModel.objects.filter(user_id=userID, type=type, classification=1) system_qs = VoicePromptModel.objects.filter(type=type, classification=0, language=lang) res = {} systems = [] customs = [] res['systems'] = systems res['customs'] = customs auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET) bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres') if system_qs.exists(): system_qs = system_qs.values('id', 'title', 'filename', 'type') for system in system_qs: filename = system['filename'] obj = 'voice_prompt/' + userID + '/' + filename url = bucket.sign_url('GET', obj, 3600) system['url'] = url del system['filename'] systems.append(system) if voice_qs.exists(): start = (page - 1) * line end = start + line voice_qs = voice_qs[start: end].values('id', 'title', 'filename', 'type') for voice in voice_qs: filename = voice['filename'] obj = 'voice_prompt/' + userID + '/' + filename url = bucket.sign_url('GET', obj, 3600) voice['url'] = url del voice['filename'] res['customs'] = list(voice_qs) return response.json(0, res) else: return response.json(444) def do_admin_add(self, userID, request_dict, response): filename = request_dict.get('filename', None) title = request_dict.get('title', None) type = request_dict.get('type', None) lang = request_dict.get('lang', '') # own_perm = ModelService.check_perm(userID, 10) # if not own_perm: # return response.json(404) if filename and title and type: voice_prompt = VoicePromptModel() voice_prompt.filename = filename voice_prompt.title = title voice_prompt.type = type voice_prompt.language = lang voice_prompt.user_id = userID voice_prompt.classification = 0 voice_prompt.save() return response.json(0) else: return response.json(444)