def put(self, group_id=None, data_id=None): if not group_id or not data_id: return abort(400, '请设置参数 group_id & data_id') _group = context.application.data_manager.groups.get(group_id) if not _group: return context.make_fail_response('Group not found') _data = _group.all_data.get(data_id) if not _data: return context.make_fail_response('Data not found') _data.name = request.json.get('name') _data.rule = request.json.get('rule') req = request.json.get('request') if req: _data.request.content = req['content'] _data.request.filetype = req['filetype'] req_data = request.json.get('request_data') if req_data: _data.request_data.content = req_data['content'] _data.request_data.filetype = req_data['filetype'] resp = request.json.get('response') if resp: _data.response.content = resp['content'] _data.response.filetype = resp['filetype'] resp_data = request.json.get('response_data') if resp_data: _data.response_data.content = resp_data['content'] _data.response_data.filetype = resp_data['filetype'] _data.save() return context.make_ok_response()
def execute_command(): if request.method == 'POST': _command = request.json.get('command') if not _command: return make_fail_response('Empty command!') _device_id = request.json.get('device_id', '') device = device_service.devices.get(_device_id) if not device: return make_fail_response('Device not found!') res = device.adb_command_executor(_command) output = res.stdout.decode() err_str = res.stderr.decode() publish_channel = 'android.command' publish_message = { 'command': res.args, 'returncode': res.returncode, 'result': err_str if err_str else output } publish(publish_channel, publish_message) if err_str: return make_fail_response(err_str) else: return make_ok_response(data=output)
def device_controller(device_id, action): controller_actions = {'install': _install_package} if request.method == 'PUT': device = device_service.devices.get(device_id) if not device: return make_fail_response(f'Device {device_id} not found!') if not controller_actions.get(action): return make_fail_response(f'Unknown device action: {action}') action_func = controller_actions.get(action) res = action_func(device, request) publish_channel = 'android.' + action publish_message = { 'command': res.args, 'returncode': res.returncode, 'result': res.stderr.decode() if res.stderr.decode() else res.stdout.decode() } publish(publish_channel, publish_message) if res.returncode != 0: return make_fail_response(res.stderr.decode()) else: return make_ok_response()
def check_base(self, obj): try: # 检查base schema check_schema(obj) # 检查url是否有重复项存在 redundant_items = check_url_redundant(obj) if redundant_items: redundant_items_str = '\n'.join(redundant_items) logger.error( f'API-Coverage import API file error: Duplicated API\n' f'{len(redundant_items)} duplicated API:\n' f'{redundant_items_str}\n') resp = context.make_fail_response('导入API有重复项' + str(redundant_items)) lyrebird.publish('api_coverage', 'error', name='import_base') return resp # 获取base内容,解析出base的business等字段 filename = obj.get('business') + obj.get( 'version_name') + '.' + str(obj.get('version_code')) app_context.filename = filename app_context.business = obj.get('business') app_context.version_name = obj.get('version_name') app_context.version_code = obj.get('version_code') return except Exception as e: resp = context.make_fail_response(f'导入文件有误: {e}\n请重新import base') return resp
def put(self, plugin_name): try: if plugin_name == 'lyrebird': return context.make_fail_response('暂未开放') else: plugin_manager.set_default_conf(plugin_name) return context.make_ok_response() except Exception as e: return context.make_fail_response(str(e))
def get(self, group_id=None, data_id=None): if not group_id or not data_id: return abort(400, '请设置参数 group_id & data_id') _group = context.application.data_manager.groups.get(group_id) if not _group: return context.make_fail_response('Group not found') _data = _group.all_data.get(data_id) if not _data: return context.make_fail_response('Data not found') return jsonify(_data.json(detail=True))
def post(self): link = request.json.get('link', '') link_length = len(link) if link_length > LINK_MAX_LENGTH: return context.make_fail_response( f'Current length {link_length} overflows, expected length is less than {LINK_MAX_LENGTH}' ) qrcode_img = qrcode.get_qrcode_img(link) if qrcode_img: return context.make_ok_response(img=qrcode_img) else: return context.make_fail_response( f'make qrcode fail! Link is {link}')
def put(self, checker_id): _checker = application.checkers.get(checker_id) if not _checker: return context.make_fail_response(f'Checker {checker_id} not found') if 'status' not in request.json: return context.make_fail_response(f'Checker {checker_id} status not found') _checker_status = request.json.get('status') if _checker_status: application.checkers[checker_id].activate() else: application.checkers[checker_id].deactivate() return context.make_ok_response()
def delete(self, group): if group in context.application.data_manager.data_groups: _group = context.application.data_manager.data_groups.pop(group) _group.delete() return context.make_ok_response() else: return context.make_fail_response('Not found group')
def stop_app(device_id, bundle_id): device = device_service.devices.get(device_id) res = device.stop_app() if 'NoneType' in res: return make_fail_response( f'Cannot stop app {bundle_id} before start it') return make_ok_response()
def start_app(device_id, bundle_id): device = device_service.devices.get(device_id) port = application.config.get('mock.port') res = device.start_app(bundle_id, _get_ip(), port) if res: return make_fail_response(res) return make_ok_response()
def app_list(device_id): device = device_service.devices.get(device_id) if device: app_list = device.get_apps_list(device_id) return make_ok_response(app_list=app_list) else: return make_fail_response(f'Device id {device_id} not found!')
def get(self, group_id=None, label=None): if group_id: _group = context.application.data_manager.id_map.get(group_id) if not _group: return context.make_fail_response('Not found group') return application.make_ok_response(data=_group) root = context.application.data_manager.root if not label: return application.make_ok_response(data=root) # update mock data tree with label groups_set = set() label_list = label.split('+') for label_id in label_list: label = application.labels.label_map.get(label_id) if not label: return application.make_fail_response(f'Label {label_id} is not found!') if not groups_set: groups_set = set(label['groups']) else: groups_set = groups_set & set(label['groups']) data_map = context.application.data_manager.make_data_map_by_group(groups_set) return application.make_ok_response(data=data_map)
def put(self): try: context.application.conf = request.get_json() context.application.save() return context.make_ok_response() except Exception as e: return context.make_fail_response(str(e))
def attachments(attachment_id=None): if request.method == 'GET': if not attachment_id: return jsonify(list(event_handler.attachments.values())) else: attachment = event_handler.attachments.get(attachment_id) if attachment: return send_file(attachment['path']) else: return make_fail_response('Not found attachment') elif request.method == 'PUT': path = Path(event_handler.attachments[attachment_id].get('path')) name = event_handler.attachments[attachment_id].get('name') image_data = request.json.get('imageData') image_data = image_data.replace('data:image/png;base64,', '', 1) with codecs.open(str(path), 'wb') as f: image_data = base64.decodebytes(image_data.encode()) f.write(image_data) return make_ok_response( message=f'Edited picture {name} has been saved') elif request.method == 'DELETE': event_handler.attachments.pop(attachment_id) return make_ok_response()
def take_screen_shot(device_id): device = device_service.devices.get(device_id) img_info = device.take_screen_shot() if img_info['returncode'] != 0: return make_fail_response(img_info['result'].stdout.decode()) timestamp = img_info.get('timestamp') return make_ok_response( imgUrl=f'/plugins/ios/api/src/screenshot/{device_id}?time={timestamp}')
def post(self): link = request.json.get('link') qrcode_img = qrcode.get_qrcode_img(link) if qrcode_img: return context.make_ok_response(img=qrcode_img) else: return context.make_fail_response( f'make qrcode fail! Link is {link}')
def delete(self, group_id=None, data_id=None): _group = context.application.data_manager.groups.get(group_id) if not _group: return context.make_fail_response('Group not found') ids = request.json.get('ids') for data_id in ids: _group.delete_data(data_id) return context.make_ok_response()
def put(self): name = request.json.get('name') group_id = request.json.get('group_id') group = context.application.data_manager.groups.get(group_id) if not group: return context.make_fail_response('Group not found') group.name = name group.save() return context.make_ok_response()
def put(self, group=None, action=None): if action == 'activate': result = context.application.data_manager.set_current_data_group(group) else: result = context.application.data_manager.set_current_data_group(None) if result: return context.make_ok_response() else: return context.make_fail_response("Activate group fail. Not found! group=%s action=%s" % (group, action))
def get(self, group=None, data=None): if not group or not data: return abort(400, '请设置参数 group name') _group = context.application.data_manager.data_groups.get(group) if _group and data in _group.data_dict: _data = _group.data_dict[data] _data.read_file() return jsonify(_data.json_data) return context.make_fail_response('Data not found')
def template_options_controller(action): if request.method == 'GET': if action == 'install': install_options = template_loader.install_options() return make_ok_response(install_options=install_options) elif action == 'start': start_options = template_loader.start_options() return make_ok_response(start_options=start_options) else: return make_fail_response(f'Unknown template action: {action}')
def download_application(): app_url = request.json.get('appUrl') app_url_obj = urlparse(app_url) app_name = app_url_obj.path.split('/')[-1] app_file = Path(tmp_dir)/app_name if not app_file.name.endswith('.apk'): return make_fail_response(f'Unexpected type: {app_file.stem}, url: {app_url}') _download_big_file(app_file, app_url) return make_ok_response(path=str(app_file))
def get_base_source(self): json_obj = auto_load_base() if not json_obj: json_obj = context.make_fail_response('暂无默认文件,需手动导入base文件') # 检查不为空的base文件是否符合标准,符合标准check_base返回0 else: if self.check_base(json_obj): # 遇到异常就返回 return self.check_base(json_obj) return json_obj
def delete(self, group=None, data=None): if not group or not data: return abort(400, '请设置参数 group name') _group = context.application.data_manager.data_groups.get(group) if _group and data in _group.data_dict: data = _group.data_dict[data] data.delete() _group.scan() return context.make_ok_response() return context.make_fail_response('Data not found')
def get(self, group_id=None): if not group_id: groups = context.application.data_manager.groups return jsonify([groups[group_id].json() for group_id in groups]) # 返回数据组中数据列表 _group = context.application.data_manager.groups.get(group_id) if not _group: return context.make_fail_response('Not found group') return jsonify(_group.json(detail=True))
def put(self): group_name = request.json.get('group_name') action = request.json.get('action', 'activate') for group_id in context.application.data_manager.groups: if group_name == context.application.data_manager.groups[group_id].name: if action == 'activate': context.application.data_manager.activate(group_id) else: context.application.data_manager.deactivate() return context.make_ok_response() return context.make_fail_response(f'Group not found. name={group_name}')
def post(self, group=None, data=None): group = request.form.get('group') name = request.form.get('name') req = request.form.get('req') req_data = request.form.get('req_data') resp = request.form.get('resp') resp_data = request.form.get('resp_data') origin_name = request.form.get('origin_name') if not group or not name: return context.make_fail_response('请设置form:group & name') _group = context.application.data_manager.data_groups.get(group) if _group: data = DataHelper.to_dict(req, req_data, resp, resp_data) if origin_name == '' or origin_name is None: _group.add_data(name, data) else: _group.update_data(origin_name, name, data) return context.make_ok_response() else: return context.make_fail_response('Group not found')
def put(self, plugin_name): try: if plugin_name == 'lyrebird': context.application.conf = request.get_json() context.application.save() return context.make_ok_response() else: plugin_manager.set_conf(plugin_name, request.get_json()) return context.make_ok_response() except Exception as e: return context.make_fail_response(str(e))
def get(self, group=None): if not group: return jsonify([group_name for group_name in context.application.data_manager.data_groups]) _group = context.application.data_manager.data_groups.get(group) if _group: resp_obj = dict() resp_obj['data'] = [[k, _group.data_dict[k].path] for k in _group.data_dict] resp_obj['conf'] = _group.conf return jsonify(resp_obj) return context.make_fail_response('Not found group')