def replay(self, url): """ Replay a previously recorded preset, and save the request in history """ request_info = RequestSerialiser(url, bottle.request) body = request_info.serialize() LOGGER.info("Replaying URL for request: \n{0}".format(body)) boss_response = self.store_history_retrieve_preset(body) if boss_response.status == 200: preset = Preset(boss_response.read()) return preset.as_http_response(bottle.response) else: LOGGER.error("Cannot find matching request\n{0}".format(body)) raise HTTPResponse(boss_response.read(), status=boss_response.status)
def replay_http(uid, url): """ Replay a previously recorded preset, and save the request in history """ request_info = RequestSerialiser(url, bottle.request) body = request_info.serialize() boss_response = replay(uid, body) preset = Preset(boss_response.as_json().encode('ascii')) # ^ Any suggestions about what we can do here? # Preset expects a string like object that can be decoded. # in py3k that means a 'bytes' object. in py2.X that means a string. # So the above works, but it looks ugly - ideally we'd handle both in # Preset constructor. return preset.as_http_response(bottle.response)
def add(self, match_rule=None, response_status=200, response_body=b'', response_headers={}, times=1): """ Add a new preset to the boss server. """ new_preset = Preset( headers=response_headers, body=binary_to_ascii(response_body), status=response_status, rule=match_rule, times=times, ) response = self.http('POST', url=self.path, body=new_preset.as_json()) if response.status != 200: raise ConfigurationError(response.read().decode()) return response
def add(self, match_rule='', response_status=200, response_body=b'', response_headers={}, times=1): """ Add a new preset to the boss server. """ new_preset = Preset( headers=response_headers, body=binary_to_ascii(response_body), status=response_status, rule=match_rule, times=times, ) response = self.http('POST', url=self.path, body=new_preset.as_json()) if response.status != 200: raise ConfigurationError(response.read().decode()) return response
def add_preset(uid): """ Save the incoming request body as a preset response """ preset = Preset(json_data=bottle.request.body.read()) if preset.times != FOREVER and preset.times <= 0: raise HTTPResponse(("Preset has {0} times. Must be greater than " "zero.".format(preset.times).encode()), status=400) rule = preset.rule if rule not in PRESETS[uid]: PRESETS[uid][rule] = [] url_presets = PRESETS[uid][rule] url_presets.append(preset)