@@ -21,10 +21,76 @@ def later_set(): # $ MISSING: requestHandler
21
21
app .add_url_rule ('/later-set' , 'later_set' , view_func = None ) # $routeSetup="/later-set"
22
22
app .view_functions ['later_set' ] = later_set
23
23
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
24
30
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
28
94
29
95
30
96
if __name__ == "__main__" :
0 commit comments