@@ -21,10 +21,76 @@ def later_set(): # $ MISSING: requestHandler
2121app .add_url_rule ('/later-set' , 'later_set' , view_func = None ) # $routeSetup="/later-set"
2222app .view_functions ['later_set' ] = later_set
2323
24+ # We don't want to execute this at runtime (since program will crash). Just using
25+ # `False` makes our analysis skip it, so here's a workaround :D
26+ if __file__ == "False" :
27+ @app .route (UNKNOWN_ROUTE ) # $routeSetup
28+ def unkown_route (foo , bar ): # $requestHandler routedParameter=foo routedParameter=bar
29+ return make_response ("unkown_route" ) # $HttpResponse
2430
25- @app .route (UNKNOWN_ROUTE ) # $routeSetup
26- def unkown_route (foo , bar ): # $requestHandler routedParameter=foo routedParameter=bar
27- return make_response ("unkown_route" ) # $HttpResponse
31+ # View
32+ #
33+ # see https://flask.palletsprojects.com/en/1.1.x/views/#basic-principle
34+
35+ from flask .views import View
36+
37+
38+ class ShowUser (View ):
39+
40+ def dispatch_request (self , user_id ): # $ MISSING: requestHandler routedParameter=user_id
41+ return "user_id: {}" .format (user_id )
42+
43+ app .add_url_rule ("/basic/user/<int:user_id>" , view_func = ShowUser .as_view ('show_user' )) # $routeSetup="/basic/user/<int:user_id>"
44+
45+
46+ class WithoutKnownRoute1 (View ):
47+ # For handler without known route, treat all parameters as routed parameters
48+ # (accepting that there might be a few FPs)
49+ def dispatch_request (self , foo , not_routed = 42 ): # $ MISSING: requestHandler routedParameter=foo
50+ pass
51+
52+
53+ # MethodView
54+ #
55+ # see https://flask.palletsprojects.com/en/1.1.x/views/#method-views-for-apis
56+
57+ from flask .views import MethodView
58+
59+
60+ class UserAPI (MethodView ):
61+
62+ def get (self , user_id ): # $ MISSING: requestHandler routedParameter=user_id
63+ if user_id is None :
64+ # return a list of users
65+ pass
66+ else :
67+ # expose a single user
68+ pass
69+
70+ def post (self ): # $ MISSING: requestHandler
71+ # create a new user
72+ pass
73+
74+ def delete (self , user_id ): # $ MISSING: requestHandler routedParameter=user_id
75+ # delete a single user
76+ pass
77+
78+ def put (self , user_id ): # $ MISSING: requestHandler routedParameter=user_id
79+ # update a single user
80+ pass
81+
82+
83+ user_view = UserAPI .as_view ("user_api" )
84+ app .add_url_rule ("/users/" , defaults = {"user_id" : None }, view_func = user_view , methods = ["GET" ,]) # $routeSetup="/users/"
85+ app .add_url_rule ("/users/" , view_func = user_view , methods = ["POST" ,]) # $routeSetup="/users/"
86+ app .add_url_rule ("/users/<int:user_id>" , view_func = user_view , methods = ["GET" , "PUT" , "DELETE" ]) # $routeSetup="/users/<int:user_id>"
87+
88+
89+ class WithoutKnownRoute2 (MethodView ):
90+ # For handler without known route, treat all parameters as routed parameters
91+ # (accepting that there might be a few FPs)
92+ def get (self , foo , not_routed = 42 ): # $ MISSING: requestHandler routedParameter=foo
93+ pass
2894
2995
3096if __name__ == "__main__" :
0 commit comments