def json_processor(entity): """Read application/json data into request.json.""" if not entity.headers.get(ntou('Content-Length'), ntou('')): raise cherrypy.HTTPError(411) body = entity.fp.read() with cherrypy.HTTPError.handle(ValueError, 400, 'Invalid JSON document'): cherrypy.serving.request.json = json.decode(body.decode('utf-8'))
def model_processor(entity): """Read application/json data into request.model.""" if not entity.headers.get(ntou('Content-Length'), ntou('')): # pragma: no cover raise cherrypy.HTTPError(411) body = entity.fp.read() with cherrypy.HTTPError.handle(ValueError, 400, 'Invalid JSON document'): model_json = json.decode(body.decode('utf-8')) try: model = cls(model_json) model.validate() except DataError as e: raise PayloadValidationError(e) cherrypy.serving.request.model = model
def load_config(path, is_cp_file=False): """ load the config file from default configuration file 'od.config' if is_cp_file is True load the config file PATH if is_cp_file is False """ cfg = None if is_cp_file is True: logger.info("Reading cherrypy configuration section 'global/logging': path = %s", path) cfg = Config(path)['global']['logging'] else: logger.info("Reading json file: path = %s", path) with open(path, encoding='UTF-8') as f: cfg = json.decode(f.read()) logger.debug("config = %s", repr(cfg)) return cfg
def test_0_Session(self): self.getPage('/set_session_cls/cherrypy.lib.sessions.RamSession') self.getPage('/clear') # Test that a normal request gets the same id in the cookies. # Note: this wouldn't work if /data didn't load the session. self.getPage('/data') self.assertBody("{'aha': 'foo'}") c = self.cookies[0] self.getPage('/data', self.cookies) self.assertEqual(self.cookies[0], c) self.getPage('/testStr') self.assertBody('1') cookie_parts = dict( [p.strip().split('=') for p in self.cookies[0][1].split(';')]) # Assert there is an 'expires' param self.assertEqual(set(cookie_parts.keys()), set(['session_id', 'expires', 'Path'])) self.getPage('/testGen', self.cookies) self.assertBody('2') self.getPage('/testStr', self.cookies) self.assertBody('3') self.getPage('/data', self.cookies) self.assertDictEqual(json.decode(self.body), { 'counter': 3, 'aha': 'foo' }) self.getPage('/length', self.cookies) self.assertBody('2') self.getPage('/delkey?key=counter', self.cookies) self.assertStatus(200) self.getPage('/set_session_cls/cherrypy.lib.sessions.FileSession') self.getPage('/testStr') self.assertBody('1') self.getPage('/testGen', self.cookies) self.assertBody('2') self.getPage('/testStr', self.cookies) self.assertBody('3') self.getPage('/delkey?key=counter', self.cookies) self.assertStatus(200) # Wait for the session.timeout (1 second) time.sleep(2) self.getPage('/') self.assertBody('1') self.getPage('/length', self.cookies) self.assertBody('1') # Test session __contains__ self.getPage('/keyin?key=counter', self.cookies) self.assertBody('True') cookieset1 = self.cookies # Make a new session and test __len__ again self.getPage('/') self.getPage('/length', self.cookies) self.assertBody('2') # Test session delete self.getPage('/delete', self.cookies) self.assertBody('done') self.getPage('/delete', cookieset1) self.assertBody('done') def f(): return [ x for x in os.listdir(localDir) if x.startswith('session-') ] self.assertEqual(f(), []) # Wait for the cleanup thread to delete remaining session files self.getPage('/') self.assertNotEqual(f(), []) time.sleep(2) self.assertEqual(f(), [])
def test_0_Session(self): self.getPage('/set_session_cls/cherrypy.lib.sessions.RamSession') self.getPage('/clear') # Test that a normal request gets the same id in the cookies. # Note: this wouldn't work if /data didn't load the session. self.getPage('/data') assert self.body == b'{"aha": "foo"}' c = self.cookies[0] self.getPage('/data', self.cookies) self.cookies[0] == c self.getPage('/testStr') assert self.body == b'1' cookie_parts = dict([p.strip().split('=') for p in self.cookies[0][1].split(';')]) # Assert there is an 'expires' param expected_cookie_keys = {'session_id', 'expires', 'Path', 'Max-Age'} assert set(cookie_parts.keys()) == expected_cookie_keys self.getPage('/testGen', self.cookies) assert self.body == b'2' self.getPage('/testStr', self.cookies) assert self.body == b'3' self.getPage('/data', self.cookies) expected_data = {'counter': 3, 'aha': 'foo'} assert json.decode(self.body.decode('utf-8')) == expected_data self.getPage('/length', self.cookies) assert self.body == b'2' self.getPage('/delkey?key=counter', self.cookies) assert self.status_code == 200 self.getPage('/set_session_cls/cherrypy.lib.sessions.FileSession') self.getPage('/testStr') assert self.body == b'1' self.getPage('/testGen', self.cookies) assert self.body == b'2' self.getPage('/testStr', self.cookies) assert self.body == b'3' self.getPage('/delkey?key=counter', self.cookies) assert self.status_code == 200 # Wait for the session.timeout (1 second) time.sleep(2) self.getPage('/') assert self.body == b'1' self.getPage('/length', self.cookies) assert self.body == b'1' # Test session __contains__ self.getPage('/keyin?key=counter', self.cookies) assert self.body == b'True' cookieset1 = self.cookies # Make a new session and test __len__ again self.getPage('/') self.getPage('/length', self.cookies) assert self.body == b'2' # Test session delete self.getPage('/delete', self.cookies) assert self.body == b'done' self.getPage('/delete', cookieset1) assert self.body == b'done' def f(): return [ x for x in os.listdir(localDir) if x.startswith('session-') ] assert f() == [] # Wait for the cleanup thread to delete remaining session files self.getPage('/') assert f() != [] time.sleep(2) assert f() == []
def test_0_Session(self): self.getPage('/set_session_cls/cherrypy.lib.sessions.RamSession') self.getPage('/clear') # Test that a normal request gets the same id in the cookies. # Note: this wouldn't work if /data didn't load the session. self.getPage('/data') assert self.body == b'{"aha": "foo"}' c = self.cookies[0] self.getPage('/data', self.cookies) self.cookies[0] == c self.getPage('/testStr') assert self.body == b'1' cookie_parts = dict( [p.strip().split('=') for p in self.cookies[0][1].split(';')]) # Assert there is an 'expires' param expected_cookie_keys = {'session_id', 'expires', 'Path', 'Max-Age'} assert set(cookie_parts.keys()) == expected_cookie_keys self.getPage('/testGen', self.cookies) assert self.body == b'2' self.getPage('/testStr', self.cookies) assert self.body == b'3' self.getPage('/data', self.cookies) expected_data = {'counter': 3, 'aha': 'foo'} assert json.decode(self.body.decode('utf-8')) == expected_data self.getPage('/length', self.cookies) assert self.body == b'2' self.getPage('/delkey?key=counter', self.cookies) assert self.status_code == 200 self.getPage('/set_session_cls/cherrypy.lib.sessions.FileSession') self.getPage('/testStr') assert self.body == b'1' self.getPage('/testGen', self.cookies) assert self.body == b'2' self.getPage('/testStr', self.cookies) assert self.body == b'3' self.getPage('/delkey?key=counter', self.cookies) assert self.status_code == 200 # Wait for the session.timeout (1 second) time.sleep(2) self.getPage('/') assert self.body == b'1' self.getPage('/length', self.cookies) assert self.body == b'1' # Test session __contains__ self.getPage('/keyin?key=counter', self.cookies) assert self.body == b'True' cookieset1 = self.cookies # Make a new session and test __len__ again self.getPage('/') self.getPage('/length', self.cookies) assert self.body == b'2' # Test session delete self.getPage('/delete', self.cookies) assert self.body == b'done' self.getPage('/delete', cookieset1) assert self.body == b'done' def f(): return [ x for x in os.listdir(localDir) if x.startswith('session-') ] assert f() == [] # Wait for the cleanup thread to delete remaining session files self.getPage('/') assert f() != [] time.sleep(2) assert f() == []