def register_routes(self): Route.set_controller_locations(self.application.make("controllers.location")) self.application.bind("routes.location", "routes/web") self.application.make("router").add( Route.group( load(self.application.make("routes.location"), "ROUTES"), middleware=["web"] ) )
def register(self): self.app.bind('WebRoutes', web.ROUTES) self.app.bind('Response', None) self.app.bind('Storage', storage) self.app.bind('Route', Route()) self.app.bind('Request', Request()) self.app.bind('Container', self.app)
def setUp(self): self.app = App() self.app.bind('Environ', generate_wsgi()) self.app.bind('Application', application) self.app.make('Environ') self.app.bind('StatusCode', None) self.app.bind('Request', Request(self.app.make('Environ')).load_app(self.app)) self.app.simple(Response(self.app)) self.app.bind('Csrf', Csrf(self.app.make('Request'))) self.app.bind('Route', Route(self.app.make('Environ'))) self.app.bind('ViewClass', View(self.app)) self.app.bind( 'WebRoutes', [Get().route('/', 'TestController@show').middleware('test')]) self.app.bind('HttpMiddleware', [MiddlewareHttpTest]) self.app.bind('RouteMiddleware', { 'test': MiddlewareTest, 'throttle:1,2': MiddlewareValueTest }) self.provider = RouteProvider() self.provider.app = self.app
def register(self): self.app.bind('HookHandler', Hook(self.app)) self.app.bind('WebRoutes', flatten_routes(web.ROUTES)) self.app.bind('Response', None) self.app.bind('Storage', storage) self.app.bind('Route', Route()) self.app.bind('Request', Request()) self.app.bind('Container', self.app) self.app.bind('ExceptionHandler', ExceptionHandler(self.app)) # Insert Commands self.app.bind('MasoniteAuthCommand', AuthCommand()) self.app.bind('MasoniteCommandCommand', CommandCommand()) self.app.bind('MasoniteControllerCommand', ControllerCommand()) self.app.bind('MasoniteInstallCommand', InstallCommand()) self.app.bind('MasoniteJobCommand', JobCommand()) self.app.bind('MasoniteKeyCommand', KeyCommand()) self.app.bind('MasoniteMakeMigrationCommand', MakeMigrationCommand()) self.app.bind('MasoniteMigrateCommand', MigrateCommand()) self.app.bind('MasoniteMigrateRefreshCommand', MigrateRefreshCommand()) self.app.bind('MasoniteMigrateResetCommand', MigrateResetCommand()) self.app.bind('MasoniteMigrateRollbackCommand', MigrateRollbackCommand()) self.app.bind('MasoniteModelCommand', ModelCommand()) self.app.bind('MasoniteProviderCommand', ProviderCommand()) self.app.bind('MasoniteViewCommand', ViewCommand()) self.app.bind('MasoniteRoutesCommand', RoutesCommand()) self.app.bind('MasoniteServeCommand', ServeCommand()) self.app.bind('MasoniteSeedCommand', SeedCommand()) self.app.bind('MasoniteSeedRunCommand', SeedRunCommand()) self.app.bind('MasoniteTinkerCommand', TinkerCommand()) self._autoload(application.AUTOLOAD)
def test_correctly_parses_json_with_list(self): environ = generate_wsgi() environ['CONTENT_TYPE'] = 'application/json' environ['REQUEST_METHOD'] = 'POST' environ['wsgi.input'] = WsgiInputTestClass().load( b'{\n "options": ["foo", "bar"]\n}') route = Route(environ) assert route.environ['QUERY_STRING'] == {"options": ["foo", "bar"]}
def test_get_json_input(self): json_wsgi = wsgi_request json_wsgi['REQUEST_METHOD'] = 'POST' json_wsgi['CONTENT_TYPE'] = 'application/json' json_wsgi['QUERY_STRING'] = '' json_wsgi['wsgi.input'] = MockWsgiInput() Route(json_wsgi) request_obj = Request(json_wsgi) assert isinstance(request_obj.request_variables, dict) assert request_obj.input('id') == 1 assert request_obj.input('test') == 'testing'
def setup_method(self): self.app = App() self.app.bind('Environ', generate_wsgi()) self.app.bind('WebRoutes', []) self.app.bind('Route', Route(self.app.make('Environ'))) self.app.bind('Request', Request(self.app.make('Environ')).load_app(self.app)) self.app.bind('Headers', []) self.app.bind('HttpMiddleware', []) view = View(self.app) self.app.bind('View', view.render) self.provider = RouteProvider() self.provider.app = self.app
def test_get_json_input(): json_wsgi = wsgi_request json_wsgi['REQUEST_METHOD'] = 'POST' json_wsgi['CONTENT_TYPE'] = 'application/json' json_wsgi['QUERY_STRING'] = '' json_wsgi['wsgi.input'] = MockWsgiInput() Route(json_wsgi) request_obj = Request(json_wsgi) assert isinstance(request_obj.params, dict) assert request_obj.input('payload') == {'id': 1}
def test_correctly_parses_json_with_dictionary(self): environ = generate_wsgi() environ['CONTENT_TYPE'] = 'application/json' environ['REQUEST_METHOD'] = 'POST' environ['wsgi.input'] = WsgiInputTestClass().load(b'{\n "conta_corrente": {\n "ocultar": false,\n "visao_geral": true,\n "extrato": true\n }\n}') route = Route(environ) assert route.environ['QUERY_STRING'] == { "conta_corrente": { "ocultar": False, "visao_geral": True, "extrato": True } }
def setUp(self): super().setUp() self.setRoutes( Route.get("home", "TestController@show").name("home"), Route.get("posts", "TestController@show").name("posts.index"), Route.get("posts/@post", "TestController@show").name("posts.show"), Route.get("posts/@post/comments", "TestController@show").name("postComments.index"), Route.get("posts/@post/comments/@comment:int", "TestController@show").name( "postComments.show" ), Route.post("posts", "TestController@show").name("posts.store"), Route.get("admin/users", "TestController@show").name("admin.users.index"), )
class TestRoutes: def setup_method(self): self.route = Route(generate_wsgi()) self.request = Request(generate_wsgi()) def test_route_is_callable(self): assert callable(Get) assert callable(Post) assert callable(Put) assert callable(Patch) assert callable(Delete) def test_route_get_returns_output(self): assert self.route.get('url', 'output') == 'output' def test_route_is_not_post(self): assert self.route.is_post() == False def test_route_is_post(self): self.route.environ['REQUEST_METHOD'] = 'POST' assert self.route.is_post() == True def test_compile_route_to_regex(self): assert self.route.compile_route_to_regex(Get().route( 'test/route', None)) == '^test\\/route\\/$' assert self.route.compile_route_to_regex(Get().route( 'test/@route', None)) == '^test\\/(\\w+)\\/$' assert self.route.compile_route_to_regex(Get().route( 'test/@route:int', None)) == '^test\\/(\\d+)\\/$' assert self.route.compile_route_to_regex(Get().route( 'test/@route:string', None)) == '^test\\/([a-zA-Z]+)\\/$' def test_route_gets_controllers(self): assert Get().route('test/url', 'TestController@show') assert Get().route('test/url', '/app.http.test_controllers.TestController@show') def test_route_doesnt_break_on_incorrect_controller(self): assert Get().route('test/url', 'BreakController@show') def test_group_route(self): routes = group('/example', [ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ]) assert routes[0].route_url == '/example/test/1' assert routes[1].route_url == '/example/test/2'
def setup_method(self): self.app = App() wsgi = generate_wsgi() self.request = Request(wsgi) self.route = Route().load_environ(wsgi) self.view = View(self.app) self.app.bind('Request', self.request) self.request = self.app.make('Request') self.app.bind('WebRoutes', [ Get().route('/test/@route', None), Get().route('/test/10', None), ]) self.request.container = self.app self.middleware = CsrfMiddleware(self.request, Csrf(self.request), self.view)
def register(self): self.app.bind('HookHandler', Hook(self.app)) self.app.bind('WebRoutes', flatten_routes(web.ROUTES)) self.app.bind('Storage', storage) self.app.bind('Route', Route()) self.app.bind('Request', Request()) self.app.simple(Response(self.app)) self.app.bind('Container', self.app) self.app.bind('ExceptionHandler', ExceptionHandler(self.app)) self.app.bind('ExceptionDumpExceptionHandler', DumpHandler) self.app.bind('RouteMiddleware', middleware.ROUTE_MIDDLEWARE) self.app.bind('HttpMiddleware', middleware.HTTP_MIDDLEWARE) # Insert Commands self._load_commands() self._autoload(application.AUTOLOAD)
def setup_method(self): self.app = App() self.app.bind('Container', self.app) self.app.bind('Environ', generate_wsgi()) self.app.bind('Application', application) self.app.bind('WebRoutes', []) self.app.bind('Route', Route(self.app.make('Environ'))) self.app.bind('Request', Request( self.app.make('Environ')).load_app(self.app)) self.app.simple(Response(self.app)) self.app.bind('StatusCode', '404 Not Found') self.app.bind('HttpMiddleware', middleware.HTTP_MIDDLEWARE) view = View(self.app) self.app.bind('ViewClass', view) self.app.bind('View', view.render) self.provider = RouteProvider() self.provider.app = self.app
def setUp(self): self.app = App() self.app.bind('Container', self.app) self.app.bind('Environ', generate_wsgi()) self.app.bind('Application', application) self.app.bind('WebRoutes', []) self.app.bind('Route', Route(self.app.make('Environ'))) self.app.bind('Request', Request(self.app.make('Environ')).load_app(self.app)) self.app.simple(Response(self.app)) self.app.bind('StatusCode', None) self.app.bind('HttpMiddleware', middleware.HTTP_MIDDLEWARE) view = View(self.app) self.app.bind('ViewClass', view) self.app.bind('View', view.render) self.app.bind('Auth', Auth) self.app.bind('Csrf', Csrf(self.app.make('Request'))) self.app.bind('AuthCookieDriver', AuthCookieDriver) self.app.bind('AuthManager', AuthManager(self.app).driver('cookie')) self.provider = RouteProvider() self.provider.app = self.app
def register(self): from routes import web self.app.bind('HookHandler', Hook(self.app)) self.app.bind('WebRoutes', flatten_routes(web.ROUTES)) self.app.bind('Storage', config('storage')) self.app.bind('Route', Route()) self.app.bind('Request', Request()) self.app.simple(Response(self.app)) self.app.bind('Container', self.app) self.app.bind('ExceptionHandler', ExceptionHandler(self.app)) self.app.bind('ExceptionDumpExceptionHandler', DumpHandler) self.app.bind('AuthCookieDriver', AuthCookieDriver) self.app.bind('AuthJwtDriver', AuthJwtDriver) self.app.bind('AuthManager', AuthManager(self.app).driver('cookie')) self.app.bind('RouteMiddleware', config('middleware.route_middleware')) self.app.bind('HttpMiddleware', config('middleware.http_middleware')) self.app.bind('Auth', Auth) # Insert Commands self._load_commands() self._autoload(config('application.autoload'))
def setUp(self): super().setUp() self.setRoutes( Route.get("home", "TestController@show").name("home"), Route.get("posts", "TestController@show").name("posts.index"), Route.get("posts/@post", "TestController@show").name("posts.show"), Route.get("posts/@post/comments", "TestController@show").name("postComments.index"), Route.get("posts/@post/comments/@comment:int", "TestController@show").name("postComments.show"), Route.post("posts", "TestController@show").name("posts.store"), Route.get("admin/users", "TestController@show").name("admin.users.index"), ) self.original_config = { "filters": { "only": [], "except": [], "groups": {} }, "skip_route_function": False, }
def boot(self, Environ, Request, Route): self.app.bind('Headers', []) Route.load_environ(Environ) Request.load_environ(Environ).load_app(self.app)
def setup_method(self): self.route = Route(generate_wsgi()) self.request = Request(generate_wsgi())
class TestRoutes: def setup_method(self): self.route = Route(generate_wsgi()) self.request = Request(generate_wsgi()) def test_route_is_callable(self): assert callable(Get) assert callable(Post) assert callable(Put) assert callable(Patch) assert callable(Delete) def test_route_get_returns_output(self): assert self.route.get('url', 'output') == 'output' def test_route_is_not_post(self): assert self.route.is_post() == False def test_route_is_post(self): self.route.environ['REQUEST_METHOD'] = 'POST' assert self.route.is_post() == True def test_compile_route_to_regex(self): get_route = Get().route('test/route', None) assert get_route.compile_route_to_regex( self.route) == r'^test\/route\/$' get_route = Get().route('test/@route', None) assert get_route.compile_route_to_regex( self.route) == r'^test\/([\w.-]+)\/$' get_route = Get().route('test/@route:int', None) assert get_route.compile_route_to_regex( self.route) == r'^test\/(\d+)\/$' get_route = Get().route('test/@route:string', None) assert get_route.compile_route_to_regex( self.route) == r'^test\/([a-zA-Z]+)\/$' def test_route_can_add_compilers(self): get_route = Get().route('test/@route:int', None) assert get_route.compile_route_to_regex( self.route) == r'^test\/(\d+)\/$' self.route.compile('year', r'[0-9]{4}') get_route = Get().route('test/@route:year', None) assert get_route.compile_route_to_regex( self.route) == r'^test\/[0-9]{4}\/$' get_route = Get().route('test/@route:slug', None) with pytest.raises(InvalidRouteCompileException): get_route.compile_route_to_regex(self.route) def test_route_gets_controllers(self): assert Get().route('test/url', 'TestController@show') assert Get().route('test/url', '/app.http.test_controllers.TestController@show') def test_route_doesnt_break_on_incorrect_controller(self): assert Get().route('test/url', 'BreakController@show') def test_route_can_pass_route_values_in_constructor(self): route = Get('test/url', 'BreakController@show') assert route.route_url == 'test/url' route = Post('test/url', 'BreakController@show') assert route.route_url == 'test/url' route = Put('test/url', 'BreakController@show') assert route.route_url == 'test/url' route = Patch('test/url', 'BreakController@show') assert route.route_url == 'test/url' route = Delete('test/url', 'BreakController@show') assert route.route_url == 'test/url' def test_route_can_pass_route_values_in_constructor_and_use_middleware( self): route = Get('test/url', 'BreakController@show').middleware('auth') assert route.route_url == 'test/url' assert route.list_middleware == ['auth'] def test_route_gets_deeper_module_controller(self): route = Get().route('test/url', 'subdirectory.SubController@show') assert route.controller assert isinstance(route.controller, SubController.__class__) def test_route_can_have_multiple_routes(self): assert Match(['GET', 'POST']).route( 'test/url', 'TestController@show').method_type == ['GET', 'POST'] def test_match_routes_convert_lowercase_to_uppercase(self): assert Match(['Get', 'Post']).route( 'test/url', 'TestController@show').method_type == ['GET', 'POST'] def test_match_routes_raises_exception_with_non_list_method_types(self): with pytest.raises(RouteException): assert Match('get').route( 'test/url', 'TestController@show').method_type == ['GET', 'POST'] def test_group_route(self): routes = group('/example', [ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ]) assert routes[0].route_url == '/example/test/1' assert routes[1].route_url == '/example/test/2' def test_group_route_sets_middleware(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show').middleware('another'), Get().route('/test/2', 'TestController@show'), RouteGroup([ Get().route('/test/3', 'TestController@show'), Get().route('/test/4', 'TestController@show') ], middleware=('test', 'test2')) ], middleware=('auth', 'user')) assert isinstance(routes, list) assert ['another', 'auth', 'user'] == routes[0].list_middleware assert ['auth', 'user'] == routes[1].list_middleware assert ['test', 'test2', 'auth', 'user'] == routes[2].list_middleware def test_group_route_sets_domain(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ], domain=['www']) assert routes[0].required_domain == ['www'] def test_group_adds_methods(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ], add_methods=['OPTIONS']) assert routes[0].method_type == ['GET', 'OPTIONS'] def test_group_route_sets_prefix(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ], prefix='/dashboard') assert routes[0].route_url == '/dashboard/test/1' def test_group_route_sets_name(self): RouteGroup([ Get().route('/test/1', 'TestController@show').name('create'), Get().route('/test/2', 'TestController@show').name('edit') ], name='post.') def test_group_route_sets_name_for_none_route(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show').name('create'), Get().route('/test/2', 'TestController@show') ], name='post.') assert routes[0].named_route == 'post.create' assert routes[1].named_route == None def test_flatten_flattens_multiple_lists(self): routes = [ Get().route('/test/1', 'TestController@show').name('create'), RouteGroup([ Get().route('/test/1', 'TestController@show').name('create'), Get().route('/test/2', 'TestController@show').name('edit'), RouteGroup([ Get().route('/test/1', 'TestController@show').name('update'), Get().route('/test/2', 'TestController@show').name('delete'), RouteGroup([ Get().route('/test/3', 'TestController@show').name('update'), Get().route('/test/4', 'TestController@show').name('delete'), ], middleware=('auth')), ], name='post.') ], prefix='/dashboard') ] routes = flatten_routes(routes) assert routes[3].route_url == '/dashboard/test/1' assert routes[3].named_route == 'post.update' def test_correctly_parses_json_with_dictionary(self): environ = generate_wsgi() environ['CONTENT_TYPE'] = 'application/json' environ['REQUEST_METHOD'] = 'POST' environ['wsgi.input'] = WsgiInputTestClass().load( b'{\n "conta_corrente": {\n "ocultar": false,\n "visao_geral": true,\n "extrato": true\n }\n}' ) route = Route(environ) assert route.environ['QUERY_STRING'] == { "conta_corrente": { "ocultar": False, "visao_geral": True, "extrato": True } } def test_correctly_parses_json_with_list(self): environ = generate_wsgi() environ['CONTENT_TYPE'] = 'application/json' environ['REQUEST_METHOD'] = 'POST' environ['wsgi.input'] = WsgiInputTestClass().load( b'{\n "options": ["foo", "bar"]\n}') route = Route(environ) assert route.environ['QUERY_STRING'] == {"options": ["foo", "bar"]} def test_redirect_route(self): route = Redirect('/test1', '/test2') request = Request(generate_wsgi()) route.load_request(request) request.load_app(App()) route.get_response() assert request.is_status(302) assert request.redirect_url == '/test2' def test_redirect_can_use_301(self): request = Request(generate_wsgi()) route = Redirect('/test1', '/test3', status=301) route.load_request(request) request.load_app(App()) route.get_response() assert request.is_status(301) assert request.redirect_url == '/test3' def test_redirect_can_change_method_type(self): request = Request(generate_wsgi()) route = Redirect('/test1', '/test3', methods=['POST', 'PUT']) assert route.method_type == ['POST', 'PUT']
class TestRoutes: def setup_method(self): self.route = Route(generate_wsgi()) self.request = Request(generate_wsgi()) def test_route_is_callable(self): assert callable(Get) assert callable(Post) assert callable(Put) assert callable(Patch) assert callable(Delete) def test_route_get_returns_output(self): assert self.route.get('url', 'output') == 'output' def test_route_is_not_post(self): assert self.route.is_post() == False def test_route_is_post(self): self.route.environ['REQUEST_METHOD'] = 'POST' assert self.route.is_post() == True def test_compile_route_to_regex(self): assert self.route.compile_route_to_regex(Get().route( 'test/route', None)) == '^test\\/route\\/$' assert self.route.compile_route_to_regex(Get().route( 'test/@route', None)) == '^test\\/([\\w.-]+)\\/$' assert self.route.compile_route_to_regex(Get().route( 'test/@route:int', None)) == '^test\\/(\\d+)\\/$' assert self.route.compile_route_to_regex(Get().route( 'test/@route:string', None)) == '^test\\/([a-zA-Z]+)\\/$' def test_route_gets_controllers(self): assert Get().route('test/url', 'TestController@show') assert Get().route('test/url', '/app.http.test_controllers.TestController@show') def test_route_doesnt_break_on_incorrect_controller(self): assert Get().route('test/url', 'BreakController@show') def test_group_route(self): routes = group('/example', [ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ]) assert routes[0].route_url == '/example/test/1' assert routes[1].route_url == '/example/test/2' def test_group_route_sets_middleware(self): routes = group('/example', [ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ]) assert routes[0].route_url == '/example/test/1' routes = RouteGroup([ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ], middleware=['auth', 'user']) assert isinstance(routes, list) assert routes[0].list_middleware == ('auth', 'user') def test_group_route_sets_domain(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ], domain=['www']) assert routes[0].required_domain == ['www'] def test_group_route_sets_prefix(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ], prefix='/dashboard') assert routes[0].route_url == '/dashboard/test/1' def test_group_route_sets_name(self): look_for = [] routes = RouteGroup([ Get().route('/test/1', 'TestController@show').name('create'), Get().route('/test/2', 'TestController@show').name('edit') ], name='post.') def test_group_route_sets_name_for_none_route(self): look_for = [] routes = RouteGroup([ Get().route('/test/1', 'TestController@show').name('create'), Get().route('/test/2', 'TestController@show') ], name='post.') assert routes[0].named_route == 'post.create' assert routes[1].named_route == None def test_flatten_flattens_multiple_lists(self): routes = [ Get().route('/test/1', 'TestController@show').name('create'), RouteGroup([ Get().route('/test/1', 'TestController@show').name('create'), Get().route('/test/2', 'TestController@show').name('edit'), RouteGroup([ Get().route('/test/1', 'TestController@show').name('update'), Get().route('/test/2', 'TestController@show').name('delete'), RouteGroup([ Get().route('/test/3', 'TestController@show').name('update'), Get().route('/test/4', 'TestController@show').name('delete'), ], middleware=('auth')), ], name='post.') ], prefix='/dashboard') ] routes = flatten_routes(routes) assert routes[3].route_url == '/dashboard/test/1' assert routes[3].named_route == 'post.update'
def register_routes(self): Route.set_controller_module_location('app.controllers') self.application.make('router').add( Route.group(load_routes("routes.web"), middleware=["web"]))
def setUp(self): self.route = Route(generate_wsgi()) self.request = Request(generate_wsgi())
class TestRoutes(unittest.TestCase): def setUp(self): self.route = Route(generate_wsgi()) self.request = Request(generate_wsgi()) def test_route_is_callable(self): self.assertTrue(callable(Get)) self.assertTrue(callable(Head)) self.assertTrue(callable(Post)) self.assertTrue(callable(Match)) self.assertTrue(callable(Put)) self.assertTrue(callable(Patch)) self.assertTrue(callable(Delete)) self.assertTrue(callable(Connect)) self.assertTrue(callable(Options)) self.assertTrue(callable(Trace)) def test_route_prefixes_forward_slash(self): self.assertEqual( Get().route('some/url', 'TestController@show').route_url, '/some/url') def test_route_is_not_post(self): self.assertEqual(self.route.is_post(), False) def test_route_is_post(self): self.route.environ['REQUEST_METHOD'] = 'POST' self.assertEqual(self.route.is_post(), True) def test_compile_route_to_regex(self): get_route = Get().route('test/route', None) self.assertEqual(get_route.compile_route_to_regex(), r'^\/test\/route\/$') get_route = Get().route('test/@route', None) self.assertEqual(get_route.compile_route_to_regex(), r'^\/test\/([\w.-]+)\/$') get_route = Get().route('test/@route:int', None) self.assertEqual(get_route.compile_route_to_regex(), r'^\/test\/(\d+)\/$') get_route = Get().route('test/@route:string', None) self.assertEqual(get_route.compile_route_to_regex(), r'^\/test\/([a-zA-Z]+)\/$') def test_route_can_add_compilers(self): get_route = Get().route('test/@route:int', None) self.assertEqual(get_route.compile_route_to_regex(), r'^\/test\/(\d+)\/$') self.route.compile('year', r'[0-9]{4}') get_route = Get().route('test/@route:year', None) self.assertEqual(get_route.compile_route_to_regex(), r'^\/test\/[0-9]{4}\/$') with self.assertRaises(InvalidRouteCompileException): get_route = Get().route('test/@route:none', None) create_matchurl('/test/1', get_route) def test_route_gets_controllers(self): self.assertTrue(Get().route('test/url', 'TestController@show')) self.assertTrue(Get().route( 'test/url', '/app.http.test_controllers.TestController@show')) def test_route_doesnt_break_on_incorrect_controller(self): self.assertTrue(Get().route('test/url', 'BreakController@show')) def test_route_can_pass_route_values_in_constructor(self): route = Get('test/url', 'BreakController@show') self.assertEqual(route.route_url, '/test/url') route = Head('test/url', 'BreakController@show') self.assertEqual(route.route_url, '/test/url') route = Post('test/url', 'BreakController@show') self.assertEqual(route.route_url, '/test/url') route = Put('test/url', 'BreakController@show') self.assertEqual(route.route_url, '/test/url') route = Patch('test/url', 'BreakController@show') self.assertEqual(route.route_url, '/test/url') route = Delete('test/url', 'BreakController@show') self.assertEqual(route.route_url, '/test/url') route = Connect('test/url', 'BreakController@show') self.assertEqual(route.route_url, '/test/url') route = Options('test/url', 'BreakController@show') self.assertEqual(route.route_url, '/test/url') route = Trace('test/url', 'BreakController@show') self.assertEqual(route.route_url, '/test/url') def test_route_can_pass_route_values_in_constructor_and_use_middleware( self): route = Get('test/url', 'BreakController@show').middleware('auth') self.assertEqual(route.route_url, '/test/url') self.assertEqual(route.list_middleware, ['auth']) def test_route_gets_deeper_module_controller(self): route = Get().route('test/url', 'subdirectory.SubController@show') self.assertTrue(route.controller) self.assertIsInstance(route.controller, SubController.__class__) def test_route_can_have_multiple_routes(self): self.assertEqual( Match(['GET', 'POST']).route('test/url', 'TestController@show').method_type, ['GET', 'POST']) def test_match_routes_convert_lowercase_to_uppercase(self): self.assertEqual( Match(['Get', 'Post']).route('test/url', 'TestController@show').method_type, ['GET', 'POST']) def test_match_routes_raises_exception_with_non_list_method_types(self): with self.assertRaises(RouteException): self.assertEqual( Match('get').route('test/url', 'TestController@show').method_type, ['GET', 'POST']) def test_group_route(self): routes = group('/example', [ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ]) self.assertEqual(routes[0].route_url, '/example/test/1') self.assertEqual(routes[1].route_url, '/example/test/2') def test_group_route_sets_middleware(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show').middleware('another'), Get().route('/test/2', 'TestController@show'), RouteGroup([ Get().route('/test/3', 'TestController@show'), Get().route('/test/4', 'TestController@show') ], middleware=('test', 'test2')) ], middleware=('auth', 'user')) self.assertIsInstance(routes, list) self.assertEqual(['another', 'auth', 'user'], routes[0].list_middleware) self.assertEqual(['auth', 'user'], routes[1].list_middleware) self.assertEqual(['test', 'test2', 'auth', 'user'], routes[2].list_middleware) def test_group_route_sets_domain(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ], domain=['www']) self.assertEqual(routes[0].required_domain, ['www']) def test_group_adds_methods(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ], add_methods=['OPTIONS']) self.assertEqual(routes[0].method_type, ['GET', 'OPTIONS']) def test_group_route_sets_prefix(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show'), Get().route('/test/2', 'TestController@show') ], prefix='/dashboard') self.assertEqual(routes[0].route_url, '/dashboard/test/1') def test_group_route_sets_prefix_no_route(self): routes = RouteGroup([ Get('', 'TestController@show'), ], prefix='/dashboard') self.assertEqual(routes[0].route_url, '/dashboard') def test_group_route_sets_name(self): RouteGroup([ Get().route('/test/1', 'TestController@show').name('create'), Get().route('/test/2', 'TestController@show').name('edit') ], name='post.') def test_group_route_sets_name_for_none_route(self): routes = RouteGroup([ Get().route('/test/1', 'TestController@show').name('create'), Get().route('/test/2', 'TestController@show') ], name='post.') self.assertEqual(routes[0].named_route, 'post.create') self.assertEqual(routes[1].named_route, None) def test_flatten_flattens_multiple_lists(self): routes = [ Get().route('/test/1', 'TestController@show').name('create'), RouteGroup([ Get().route('/test/1', 'TestController@show').name('create'), Get().route('/test/2', 'TestController@show').name('edit'), RouteGroup([ Get().route('/test/1', 'TestController@show').name('update'), Get().route('/test/2', 'TestController@show').name('delete'), RouteGroup([ Get().route('/test/3', 'TestController@show').name('update'), Get().route('/test/4', 'TestController@show').name('delete'), ], middleware=('auth')), ], name='post.') ], prefix='/dashboard') ] routes = flatten_routes(routes) self.assertEqual(routes[3].route_url, '/dashboard/test/1') self.assertEqual(routes[3].named_route, 'post.update') def test_correctly_parses_json_with_dictionary(self): environ = generate_wsgi() environ['CONTENT_TYPE'] = 'application/json' environ['REQUEST_METHOD'] = 'POST' environ['wsgi.input'] = WsgiInputTestClass().load( b'{\n "conta_corrente": {\n "ocultar": false,\n "visao_geral": true,\n "extrato": true\n }\n}' ) route = Route(environ) self.assertEqual( route.environ['QUERY_STRING'], { "conta_corrente": { "ocultar": False, "visao_geral": True, "extrato": True } }) def test_correctly_parses_json_with_list(self): environ = generate_wsgi() environ['CONTENT_TYPE'] = 'application/json' environ['REQUEST_METHOD'] = 'POST' environ['wsgi.input'] = WsgiInputTestClass().load( b'{\n "options": ["foo", "bar"]\n}') route = Route(environ) self.assertEqual(route.environ['QUERY_STRING'], {"options": ["foo", "bar"]}) def test_redirect_route(self): route = Redirect('/test1', '/test2') request = Request(generate_wsgi()) route.load_request(request) request.load_app(App()) route.get_response() self.assertTrue(request.is_status(302)) self.assertEqual(request.redirect_url, '/test2') def test_redirect_can_use_301(self): request = Request(generate_wsgi()) route = Redirect('/test1', '/test3', status=301) route.load_request(request) request.load_app(App()) route.get_response() self.assertTrue(request.is_status(301)) self.assertEqual(request.redirect_url, '/test3') def test_redirect_can_change_method_type(self): route = Redirect('/test1', '/test3', methods=['POST', 'PUT']) self.assertEqual(route.method_type, ['POST', 'PUT'])
'wsgi.run_once': False, 'SERVER_SOFTWARE': 'gunicorn/19.7.1', 'REQUEST_METHOD': 'GET', 'QUERY_STRING': 'application=Masonite', 'RAW_URI': '/', 'SERVER_PROTOCOL': 'HTTP/1.1', 'HTTP_HOST': '127.0.0.1:8000', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'HTTP_UPGRADE_INSECURE_REQUESTS': '1', 'HTTP_COOKIE': 'setcookie=value', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7', 'HTTP_ACCEPT_LANGUAGE': 'en-us', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate', 'HTTP_CONNECTION': 'keep-alive', 'wsgi.url_scheme': 'http', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_PORT': '62241', 'SERVER_NAME': '127.0.0.1', 'SERVER_PORT': '8000', 'PATH_INFO': '/', 'SCRIPT_NAME': '' } ROUTE = Route(wsgi_request) def test_route_is_callable(): if callable(ROUTE): assert True def test_route_get_returns_output(): assert ROUTE.get('url', 'output') == 'output'
from masonite.routes import Route ROUTES = [ Route.get("/", "UserController@index"), Route.get("/user/@id:int", "UserController@show"), Route.post("/user", "UserController@create"), ]
def boot(self, request: Request, route: Route): self.app.bind('StatusCode', None) route.load_environ(self.app.make('Environ')) request.load_environ(self.app.make('Environ')).load_app(self.app)
def boot(self, router: Route, request: Request, response: Response): # All routes joined for route in self.app.make('WebRoutes'): """Make a better match for trailing slashes Sometimes a user will end with a trailing slash. Because the user might create routes like `/url/route` and `/url/route/` and how the regex is compiled down, we may need to adjust for urls that end or dont end with a trailing slash. """ matchurl = create_matchurl(router, route) """Houston, we've got a match Check to see if a route matches the corresponding router url. If a match is found, execute that route and break out of the loop. We only need one match. Routes are executed on a first come, first serve basis """ if matchurl.match(router.url) and request.get_request_method( ) in route.method_type: route.load_request(request) """Check if subdomains are active and if the route matches on the subdomain It needs to match to. """ if request.has_subdomain(): # Check if the subdomain matches the correct routes domain if not route.has_required_domain(): response.view('Route not found. Error 404') continue """Get URL Parameters This will create a dictionary of parameters given. This is sort of a short but complex way to retrieve the url parameters. This is the code used to convert /url/@firstname/@lastname to {'firstmane': 'joseph', 'lastname': 'mancuso'}. """ try: parameter_dict = {} for index, value in enumerate( matchurl.match(router.url).groups()): parameter_dict[router.generated_url_list() [index]] = value request.set_params(parameter_dict) except AttributeError: pass """Excute HTTP before middleware Only those middleware that have a "before" method are ran. """ for http_middleware in self.app.make('HttpMiddleware'): located_middleware = self.app.resolve(http_middleware) if hasattr(located_middleware, 'before'): located_middleware.before() """Execute Route Before Middleware This is middleware that contains a before method. """ route.run_middleware('before') # Show a helper in the terminal of which route has been visited if application.DEBUG: print(request.get_request_method() + ' Route: ' + router.url) # If no routes have been found and no middleware has changed the status code if not request.get_status(): """Get the response from the route and set it on the 'Response' key. This data is typically the output of the controller method depending on the type of route. """ response.view(route.get_response(), status=200) """Execute Route After Route Middleware This is middleware that contains an after method. """ route.run_middleware('after') """Excute HTTP after middleware Only those middleware that have an "after" method are ran. Check here if the middleware even has the required method. """ for http_middleware in self.app.make('HttpMiddleware'): located_middleware = self.app.resolve(http_middleware) if hasattr(located_middleware, 'after'): located_middleware.after() """Return breaks the loop because the incoming route is found and executed. There is no need to continue searching the route list. First come first serve around these parts of the woods. """ return """No Response was found in the for loop so let's set an arbitrary response now. """ response.view('Route not found. Error 404', status=404) # If the route exists but not the method is incorrect if request.is_status(404) and request.route_exists(request.path): response.view('Method not allowed', status=405)
def boot(self, Environ, Request, Route): self.app.bind('Headers', []) self.app.bind('StatusCode', '404 Not Found') Route.load_environ(Environ) Request.load_environ(Environ).load_app(self.app)
"""Web Routes.""" from masonite.routes import Route ROUTES = [ Route.get('/', 'WelcomeController@show').name('welcome'), ]