def test_add_slash_redirect(self): app = Application({}) factory = lambda *args: type('Resource', (), {'GET': None}) app.mount_resource('test', factory, '/some/dir', add_slash=True) # Should not redirect next_handler = lambda app_, request_: 'NEXT' request = app.make_blank_request('/some/dir/') self.assertEqual(resource_finder(app, request, next_handler), 'NEXT') # Should redirect request = app.make_blank_request('/some/dir') try: resource_finder(app, request, next_handler) except Exception as exc: self.assertTrue(exc.status.startswith('3')) self.assertTrue(exc.location.endswith('/some/dir/'))
def setUp(self): app = Application({}) app.mount_resource('test', TestResource, '/test') self.app = app
def on_created(event): # Make a request to the root of the example app after it's created. print('Example request and response:\n') request = event.app.make_blank_request('/') response = event.app.handle_request(request) print(request, response, sep='\n\n') if __name__ == '__main__': settings = { 'debug': True, 'tangled.app.on_created': [on_created], 'tangled.app.defer_created': True, } app = Application(settings) app.mount_resource('home', Home, '/') # Greet user with "Hello" by default. The user's name must be passed # as a URL arg. A different greeting can be passed as the greeting # query parameter. app.mount_resource('hello', Hello, '/hello/<name>') # Greet with a specific greeting. Both the user's name and the # greeting must be passed as URL args. app.mount_resource('greet', Hello, '/greet/<name>/<greeting>') # Fire on-created event to initiate the example request. app.created() server = make_server('0.0.0.0', 6666, app)
def setUp(self): app = Application('tangled.web.tests:test.ini') app.mount_resource('user', UserResource, '/users/<id>') self.app = TestApp(app) self._original_data = copy.deepcopy(Users.data)
from wsgiref.simple_server import make_server from tangled.web import Application, Resource class Hello(Resource): def GET(self): if 'name' in self.urlvars: content = 'Hello, {name}'.format(**self.urlvars) else: content = 'Hello' return content if __name__ == '__main__': settings = { 'debug': True, } app = Application(settings) app.mount_resource('hello', Hello, '/') app.mount_resource('hello_name', Hello, '/<name>') server = make_server('0.0.0.0', 6666, app) server.serve_forever()
def setUp(self): app = Application({}) app.mount_resource('home', TestResource, '/') app.mount_resource('catch-all-single-segment-paths', TestResource, '/<x>', methods='GET') app.mount_resource('a', TestResource, '/a') app.mount_resource('b', TestResource, '/b/') app.mount_resource('abc', TestResource, '/a/b/c') app.mount_resource('abc_any', TestResource, '/<a>/<b>/<c>') app.mount_resource('xyz', TestResource, '/x/<y>/z', methods='GET') app.mount_resource('xkz', TestResource, '/x/k/z') app.mount_resource('y_get', TestResource, '/y', methods='GET') app.mount_resource('y_post', TestResource, '/y', methods='POST') app.mount_resource('cached', TestResource, '/cached') self.app = app
def setUp(self): self.app = Application({})
def make_app(settings): """Configure ${package_name}.""" app = Application(settings) app.mount_resource('home', '.resources:Hello', '/', methods='GET') app.mount_resource('hello', '.resources:Hello', '/<name>', methods='GET') return app
class TestConfig(unittest.TestCase): def setUp(self): self.app = Application({}) def test_no_args_raises_TypeError(self): with self.assertRaises(TypeError): config('*/*')(type('Resource', (), {})) def test_no_defaults(self): class Resource(BaseResource): @config('text/html', status=303) def GET(self): pass self.app.load_config(Resource) resource = Resource(None, None) info = Config.for_resource(self.app, resource, 'GET', 'text/html') self.assertIsNone(info.type) self.assertEqual(info.status, 303) self.assertEqual(info.response_attrs, {}) self.assertEqual(info.representation_args, {}) def test_defaults(self): @config('*/*', status=303) class Resource(BaseResource): def GET(self): pass self.app.load_config(Resource) resource = Resource(None, None) info = Config.for_resource(self.app, resource, 'GET', 'text/html') self.assertIsNone(info.type) self.assertEqual(info.status, 303) self.assertEqual(info.response_attrs, {}) self.assertEqual(info.representation_args, {}) def test_override_defaults(self): @config('*/*', type='no_content', status=301, response_attrs={'status': 204}) class Resource(BaseResource): @config('*/*', status=302) @config('application/json', status=303, response_attrs={'x': 'x'}) @config('text/html', type=None, response_attrs={}) def GET(self): pass self.app.load_config(Resource) resource = Resource(None, None) info = Config.for_resource(self.app, resource, 'GET', 'text/html') self.assertIsNone(info.type) self.assertEqual(info.status, 302) self.assertEqual(info.response_attrs, {}) self.assertEqual(info.representation_args, {}) resource = Resource(None, None) info = Config.for_resource(self.app, resource, 'GET', 'application/json') self.assertEqual(info.type, 'no_content') self.assertEqual(info.status, 303) self.assertEqual(info.response_attrs, {'x': 'x'}) self.assertEqual(info.representation_args, {}) def test_add_arg(self): class Resource(BaseResource): def GET(self): pass with self.assertRaises(TypeError): self.app.load_config(config('*/*', xxx=True)(Resource)) self.app.add_config_field('*/*', 'xxx', False) self.app.load_config(config('*/*', xxx=True)(Resource)) resource = Resource(None, None) info = Config.for_resource(self.app, resource, 'GET', 'text/html') self.assertTrue(hasattr(info, 'xxx')) self.assertTrue(info.xxx)
class TestConfig(unittest.TestCase): def setUp(self): self.app = Application({}) def test_no_args_raises_TypeError(self): with self.assertRaises(TypeError): config('*/*')(type('Resource', (), {})) def test_no_defaults(self): class Resource(BaseResource): @config('text/html', status=303) def GET(self): pass self.app.load_config(Resource) resource = Resource(None, None) info = Config.for_resource(self.app, resource, 'GET', 'text/html') self.assertIsNone(info.type) self.assertEqual(info.status, 303) self.assertEqual(info.response_attrs, {}) self.assertEqual(info.representation_args, {}) def test_defaults(self): @config('*/*', status=303) class Resource(BaseResource): def GET(self): pass self.app.load_config(Resource) resource = Resource(None, None) info = Config.for_resource(self.app, resource, 'GET', 'text/html') self.assertIsNone(info.type) self.assertEqual(info.status, 303) self.assertEqual(info.response_attrs, {}) self.assertEqual(info.representation_args, {}) def test_override_defaults(self): @config( '*/*', type='no_content', status=301, response_attrs={'status': 204}) class Resource(BaseResource): @config('*/*', status=302) @config('application/json', status=303, response_attrs={'x': 'x'}) @config('text/html', type=None, response_attrs={}) def GET(self): pass self.app.load_config(Resource) resource = Resource(None, None) info = Config.for_resource(self.app, resource, 'GET', 'text/html') self.assertIsNone(info.type) self.assertEqual(info.status, 302) self.assertEqual(info.response_attrs, {}) self.assertEqual(info.representation_args, {}) resource = Resource(None, None) info = Config.for_resource( self.app, resource, 'GET', 'application/json') self.assertEqual(info.type, 'no_content') self.assertEqual(info.status, 303) self.assertEqual(info.response_attrs, {'x': 'x'}) self.assertEqual(info.representation_args, {}) def test_add_arg(self): class Resource(BaseResource): def GET(self): pass with self.assertRaises(TypeError): self.app.load_config(config('*/*', xxx=True)(Resource)) self.app.add_config_field('*/*', 'xxx', False) self.app.load_config(config('*/*', xxx=True)(Resource)) resource = Resource(None, None) info = Config.for_resource(self.app, resource, 'GET', 'text/html') self.assertTrue(hasattr(info, 'xxx')) self.assertTrue(info.xxx)