from flask import request, abort, current_app from werkzeug.datastructures import MultiDict from api.lib.perm.auth import auth_with_app_token from api.models.common_setting import NoticeConfig from api.resource import APIView from api.lib.common_setting.notice_config import NoticeConfigForm, NoticeConfigUpdateForm, NoticeConfigCRUD from api.lib.decorator import args_required from api.lib.common_setting.resp_format import ErrFormat prefix = '/notice_config' class NoticeConfigView(APIView): url_prefix = (f'{prefix}',) @args_required('platform') @auth_with_app_token def get(self): platform = request.args.get('platform') res = NoticeConfig.get_by(first=True, to_dict=True, platform=platform) or {} return self.jsonify(res) def post(self): form = NoticeConfigForm(MultiDict(request.json)) if not form.validate(): abort(400, ','.join(['{}: {}'.format(filed, ','.join(msg)) for filed, msg in form.errors.items()])) data = NoticeConfigCRUD.add_notice_config(**form.data) return self.jsonify(data.to_dict()) class NoticeConfigUpdateView(APIView): url_prefix = (f'{prefix}/',) def put(self, _id): form = NoticeConfigUpdateForm(MultiDict(request.json)) if not form.validate(): abort(400, ','.join(['{}: {}'.format(filed, ','.join(msg)) for filed, msg in form.errors.items()])) data = NoticeConfigCRUD.edit_notice_config(_id, **form.data) return self.jsonify(data.to_dict()) class CheckEmailServer(APIView): url_prefix = (f'{prefix}/send_test_email',) def post(self): receive_address = request.args.get('receive_address') info = request.values.get('info', {}) try: result = NoticeConfigCRUD.test_send_email(receive_address, **info) return self.jsonify(result=result) except Exception as e: current_app.logger.error('test_send_email err:') current_app.logger.error(e) if 'Timed Out' in str(e): abort(400, ErrFormat.email_send_timeout) abort(400, f"{str(e)}") class NoticeConfigGetView(APIView): method_decorators = [] url_prefix = (f'{prefix}/all',) @auth_with_app_token def get(self): res = NoticeConfigCRUD.get_all() return self.jsonify(res) class NoticeAppBotView(APIView): url_prefix = (f'{prefix}/app_bot',) def get(self): res = NoticeConfigCRUD.get_app_bot() return self.jsonify(res)