def new_app(): """ :function: new_app :args: none :rv: json message 上传一个新的版本 """ if request.method == 'POST': name = request.get_json().get("name") version = request.get_json().get("version") download = request.get_json().get("download") update = request.get_json().get("update") intro = request.get_json().get("intro") size = request.get_json().get('size') app_data = { "name": name, "version": version, "download": download, "update": update, "intro": intro, "size": size, } if not rds.get('apps'): rds.set('apps', "[{'name':'ccnubox'}]") apps = ast.literal_eval(rds.get('apps')) apps.append(app_data) rds.set('apps', str(apps)) rds.save() return jsonify({'msg': 'add new version data'}), 201
def get_patch(): """获取华师匣子所有补丁包相关信息""" if not rds.get('patches'): rds.set('patches', "[{'name':'ccnubox_patch'}]") rds.save() patches = rds.get('patches') return eval(patches)
def push_register(): """ :function: push_register :args: none :rv: success message redis(6384): string key: "ids" vlaue: "['id1', 'id2']" 注册ios设备的unique_id """ if request.method == 'POST': unique_id = request.get_json().get('unique_id') sid = request.get_json().get('sid') # 学号 # 将unique_id写入数据库 if not rds.get('ids'): rds.set('ids', "[]") rds.save() ids = ast.literal_eval(rds.get('ids')) if unique_id and (unique_id not in ids): ids.append(unique_id) if sid: rds.hset('idsids', unique_id, sid) # db commit rds.set('ids', ids) rds.save() return jsonify({ 'message': 'add new unique_id' }), 201
def new_patch(): """ :function: new_patch :args: none :rv: json message 上传一个新的补丁包 """ if request.method == 'POST': version = request.get_json().get("version") download = request.get_json().get("download") update = request.get_json().get("update") intro = request.get_json().get("intro") size = request.get_json().get('size') patch_data = { "version": version, "download": download, "update": update, "intro": intro, "size": size, } if not rds.get('patches'): rds.set('patches', "[{'name':'ccnubox_patch'}]") patches = ast.literal_eval(rds.get('patches')) patches.append(patch_data) rds.set('patches', str(patches)) rds.save() return jsonify({'msg': 'add new patch version'}), 201
def get_app(): """获取华师匣子所有版本相关信息""" if not rds.get('apps'): rds.set('apps', "[{'name':'ccnubox'}]") rds.save() apps = rds.get('apps') return eval(apps)
def push_register(): """ :function: push_register :args: none :rv: success message redis(6384): string key: "ids" vlaue: "['id1', 'id2']" 注册ios设备的unique_id """ if request.method == 'POST': unique_id = request.get_json().get('unique_id') sid = request.get_json().get('sid') # 学号 # 将unique_id写入数据库 if not rds.get('ids'): rds.set('ids', "[]") rds.save() ids = ast.literal_eval(rds.get('ids')) if unique_id and (unique_id not in ids): ids.append(unique_id) if sid: rds.hset('idsids', unique_id, sid) # db commit rds.set('ids', ids) rds.save() return jsonify({'message': 'add new unique_id'}), 201
def get_product(): """木犀应用展示""" if eval(rds.get('products') or '{}'): products_dict = eval(rds.get('products')) return jsonify(products_dict) else: return jsonify({})
def get_ios_config(): """ 获取ios json配置 """ if rds.get('ios_config'): config = rds.get('ios_config') return jsonify({'config': ast.literal_eval(config)}), 200 else: return jsonify({}), 404
def get_ios_config(): """ 获取ios json配置 """ if rds.get('ios_config'): config = rds.get('ios_config') return jsonify({ 'config': ast.literal_eval(config) }), 200 else: return jsonify({}), 404
def get_latest_patch(): """ :function: get_latest_patch :args: none :rv: 最新的补丁包信息 获取最新版本华师匣子补丁信息 """ if not rds.get('patches'): rds.set(patches, "[]") patches = rds.get("patches") return ast.literal_eval(patches)[-1]
def get_latest_app(): """ :function: get_latest_app :args: none :rv: 返回最后一个版本列表(最新) 获取最新版本华师匣子信息 """ if not rds.get('apps'): rds.set('apps', "[]") apps = rds.get("apps") return ast.literal_eval(apps)[-1]
def add_product(): """ :function: add_product 添加一个木犀的产品 """ if request.method == 'PUT': name = request.get_json().get('name') icon = request.get_json().get('icon') url = request.get_json().get('url') intro = request.get_json().get('intro') products_dict = ast.literal_eval( rds.get('products') or '{"_products":[], "update":""}') products_list = products_dict.get('_products') products_list.append({ 'name': name, 'icon': icon, 'url': url, 'intro': intro }) products_dict['_products'] = products_list products_dict['update'] = time.time() rds.set('products', products_dict) rds.save() return jsonify({}), 200
def delete_version(version): """删除华师匣子特定版本version的信息""" apps = eval(rds.get('apps')) for n, app in enumerate(apps): if app.get('version') == version: del apps[n] rds.set('apps', str(apps)) rds.save() return jsonify({'msg': 'delete version %s' % version}), 200
def delete_patch_version(version): """删除华师匣子特定版本补丁的信息""" patches = eval(rds.get('patches')) # eval is evil for n, patch in enumerate(patches): if patch.get('version') == version: del patches[n] rds.set('patches', str(patches)) rds.save() return jsonify({'msg': 'delete patch version %s' % version}), 200
def get_product(): """ :function: get_product redis1(6384)~products key: products value: "{ 'update': 时间戳, '_products': [{ 'name': name, 'url': url 'icon': icon, 'intro': intro }] }" 木犀应用展示 """ if ast.literal_eval(rds.get('products') or '{}'): products_dict = ast.literal_eval(rds.get('products')) return jsonify(products_dict) else: return jsonify({})
def create_ios_config(): """ 上传ios json配置 """ if request.method == 'POST': config = request.get_json().get('config') if not rds.get('ios_config'): rds.set('ios_config', config) rds.save() return jsonify({}), 201 else: return jsonify({'msg': 'ios configuration already uploaded'})
def update_ios_config(): """ 更新ios json配置 """ if request.method == 'PUT': config = request.get_json().get('config') if rds.get('ios_config'): rds.set('ios_config', config) rds.save() return jsonify({}), 200 else: return jsonify({}), 404
def get_app(): """ :function: get_app :args: none :rv: 所有版本列表 redis1(6384): string key: "apps" value: "[{ "name": "", "update": "", "version": "", "download": "", "intro": "" }]" 获取华师匣子所有版本相关信息 """ if not rds.get('apps'): rds.set('apps', "[{'name':'ccnubox'}]") rds.save() apps = rds.get('apps') return ast.literal_eval(apps)
def get_patch(): """ :function: get_patch :args: none :rv: 所有补丁包的信息 redis1(6384)~patches - key: "patches" - value "[{ "version": version, "update": update, "download": download, "size": size, "intro": intro }]" string 获取华师匣子所有补丁包相关信息 """ if not rds.get('patches'): rds.set('patches', "[{'name':'ccnubox_patch'}]") rds.save() patches = rds.get('patches') return ast.literal_eval(patches)
def get_ids(): """ :function: get_ids :args: 无 :rv: 所有设备id json列表 返回所有注册的设备id """ return jsonify({ 'ids': ast.literal_eval(rds.get('ids')), 'id_sid': ast.literal_eval(json.dumps(rds.hgetall('idsids'))) })
def get_ids(): """ :function: get_ids :args: 无 :rv: 所有设备id json列表 返回所有注册的设备id """ return jsonify({ 'ids': ast.literal_eval(rds.get('ids')), 'id_sid': ast.literal_eval( json.dumps(rds.hgetall('idsids')) ) })
def get_start(): """ 获取闪屏图片 """ start = eval(rds.get('start') or '{}') if start: filename = start.keys()[0] url = start.get(filename) return { 'img': qiniu.url(filename), 'url': url or '', 'update': qiniu.info(filename).get('putTime') } else: return {}
def delete_patch_version(version): """ :function: delete_patch_version :args: - version: 待删除的补丁包版本 :rv: json message 删除华师匣子特定版本补丁的信息 """ patches = ast.literal_eval(rds.get('patches')) for n, patch in enumerate(patches): if patch.get('version') == version: del patches[n] rds.set('patches', str(patches)) rds.save() return jsonify({'msg': 'delete patch version %s' % version}), 200
def delete_version(version): """ :function: delete_version :args: version - 待删除的版本号 :rv: json message 删除华师匣子特定版本version的信息 """ apps = ast.literal_eval(rds.get('apps')) for n, app in enumerate(apps): if app.get('version') == version: del apps[n] rds.set('apps', str(apps)) rds.save() return jsonify({'msg': 'delete version %s' % version}), 200j
def get_calendar(): json_data = [] calendars = eval(rds.get('calendars') or '[]') for calendar_dict in calendars: filename = calendar_dict.keys()[0] size = calendar_dict.get(filename) if filename: update_timestamp = qiniu.info(filename).get('putTime') json_data.append({ 'filename': filename, 'img': qiniu.url(filename), 'update': update_timestamp, 'size': size, }) else: json_data.append({}) return json_data
def delete_product(): """删除某个应用""" if request.method == 'DELETE': if request.args.get('name'): name = request.args.get('name') products_dict = eval( rds.get('products') or '{"_products":[], "update":""}') products_list = products_dict.get('_products') if products_list: for product in products_list: if product.get('name') == name: products_list.remove(product) products_dict['_products'] = products_list products_dict['update'] = time.time() rds.set('products', products_dict) rds.save() return jsonify({}), 200 return jsonify({}), 404
def push_notification(): """ :function: push_notification :args: 无 :rv: 无, 如果出错, 返回错误设备token和信息 """ if request.method == 'POST': title = request.get_json().get('title') userinfo = request.get_json().get('userinfo') ids = ast.literal_eval(rds.get('ids')) client = APNSClient(certificate=os.getenv("IOS_CERTIFICATE"), default_error_timeout=10, default_expiration_offset=2592000, default_batch_size=100) res = client.send(ids, title, extra=userinfo) return jsonify({"error": str(res.token_errors)})
def delete_product(): """ :function: delete_product 删除某个应用 """ if request.method == 'DELETE': if request.args.get('name'): name = request.args.get('name') products_dict = ast.literal_eval(rds.get('products') or '{"_products":[], "update":""}') products_list = products_dict.get('_products') if products_list: for product in products_list: if product.get('name') == name: products_list.remove(product) products_dict['_products'] = products_list products_dict['update'] = time.time() rds.set('products', products_dict) rds.save() return jsonify({}), 200 return jsonify({}), 404
def push_notification(): """ :function: push_notification :args: 无 :rv: 无, 如果出错, 返回错误设备token和信息 """ if request.method == 'POST': title = request.get_json().get('title') userinfo = request.get_json().get('userinfo') ids = ast.literal_eval(rds.get('ids')) client = APNSClient( certificate=os.getenv("IOS_CERTIFICATE"), default_error_timeout=10, default_expiration_offset=2592000, default_batch_size=100 ) res = client.send(ids, title, extra=userinfo) return jsonify({ "error": str(res.token_errors) })
def add_product(): """ :function: add_product 添加一个木犀的产品 """ if request.method == 'PUT': name = request.get_json().get('name') icon = request.get_json().get('icon') url = request.get_json().get('url') intro = request.get_json().get('intro') products_dict = ast.literal_eval(rds.get('products') or '{"_products":[], "update":""}') products_list = products_dict.get('_products') products_list.append({ 'name': name, 'icon': icon, 'url': url, 'intro': intro }) products_dict['_products'] = products_list products_dict['update'] = time.time() rds.set('products', products_dict) rds.save() return jsonify({}), 200
def get_latest_patch(): """获取最新版本华师匣子补丁信息""" if not rds.get('patches'): rds.set(patches, "[]") patches = rds.get("patches") return eval(patches)[-1]
def get_latest_app(): """获取最新版本华师匣子信息""" if not rds.get('apps'): rds.set(apps, "[]") apps = rds.get("apps") return eval(apps)[-1]