def load_flow_from_state(state: dict) -> HTTPFlow: extra_state = {} for phase in ['request', 'response']: raw_attr = f'{phase}_raw' extra_state[raw_attr] = state.pop(raw_attr, None) phase_state = state.get(phase) extra_state[f'{phase}_match_details'] = ( phase_state and phase_state.pop('match_details', None) ) flow = HTTPFlow.from_state(state) for phase, phase_cls in [ ('request', HTTPRequest), ('response', HTTPResponse), ]: raw_attr = f'{phase}_raw' raw = extra_state.get(raw_attr) if raw: setattr(flow, raw_attr, phase_cls.from_state(raw)) match_details = extra_state.get(f'{phase}_match_details') phase_obj = getattr(flow, phase, None) if match_details and phase_obj: setattr(phase_obj, 'match_details', match_details) return flow
def test_getset_state(self): f = tflow(resp=True) state = f.get_state() assert f.get_state() == HTTPFlow.from_state(state).get_state() f.response = None f.error = flow.Error("error") state = f.get_state() assert f.get_state() == HTTPFlow.from_state(state).get_state() f2 = f.copy() f2.id = f.id # copy creates a different uuid assert f.get_state() == f2.get_state() assert not f == f2 f2.error = flow.Error("e2") assert not f == f2 f2.backup() f2.intercept() # to change the state f.set_state(f2.get_state()) assert f.get_state() == f2.get_state()