1
- from flask import Flask , request , jsonify , abort
2
- from flask_restful import Api ,Resource
3
- from functools import wraps
4
- from config import SQLALCHEMY_DATABASE_URI , SECRET_KEY
1
+ from flask import Flask , jsonify , abort
2
+ from flask_restx import Api , Resource , reqparse
3
+ from config import VERSION , SQLALCHEMY_DATABASE_URI , SECRET_KEY
5
4
from models import db , Company , Language , CompanyName , CompanyTag
6
5
7
6
12
11
app .config ['SQLALCHEMY_TRACK_MODIFICATIONS' ] = True
13
12
14
13
db .init_app (app )
15
- api = Api (app )
14
+ api = Api (app ,
15
+ version = VERSION , title = 'Company API' ,
16
+ description = 'A company name & tag API' ,
17
+ doc = '/api' )
16
18
17
19
18
- def check_name_language (func ):
19
- @wraps (func )
20
- def wrapper (* args , ** kwargs ):
21
- return func (* args , ** kwargs )
20
+ read_parser = reqparse .RequestParser ()
21
+ read_parser .add_argument ('name' , type = str , location = 'args' , help = 'Company Name' )
22
+ read_parser .add_argument ('tag' , type = str , location = 'args' , help = 'Company Tag' )
22
23
23
- return wrapper
24
+ write_parser = reqparse .RequestParser ()
25
+ write_parser .add_argument ('language' , required = True ,
26
+ type = str , location = 'json' , help = 'Country Code' )
27
+ write_parser .add_argument ('name' , required = True ,
28
+ type = str , location = 'json' , help = 'Company Name' )
29
+ write_parser .add_argument ('tag' , required = True ,
30
+ type = str , location = 'json' , help = 'Company Tag' )
24
31
25
32
33
+ @api .route ('/api/company' )
26
34
class ApiCompany (Resource ):
35
+ @api .expect (read_parser )
36
+ @api .doc (responses = {
37
+ 200 : 'Success' ,
38
+ 400 : 'Validation Error'
39
+ })
27
40
def get (self ):
28
- name = request .args .get ('name' )
41
+ args = read_parser .parse_args ()
42
+ print (args )
43
+
44
+ name = args ['name' ]
29
45
if name :
30
46
company_name = CompanyName .query \
31
47
.filter (CompanyName .name .like ('%{}%' .format (name ))) \
32
48
.first ()
33
49
if company_name :
34
50
return company_name .name
35
51
36
- tag = request . args . get ( 'tag' )
52
+ tag = args [ 'tag' ]
37
53
if tag :
38
54
companies = Company .query \
39
55
.join (CompanyTag ) \
@@ -51,14 +67,20 @@ def get(self):
51
67
print (results )
52
68
return jsonify (results )
53
69
70
+ abort (status = 400 , description = 'No arguments' )
71
+
72
+ @api .expect (write_parser )
73
+ @api .doc (responses = {
74
+ 200 : 'Success' ,
75
+ 400 : 'Validation Error'
76
+ })
54
77
def put (self ):
55
- req_data = request .get_json ()
56
- if req_data is None or any (key not in req_data for key in ('name' , 'language' , 'tag' )):
57
- abort (status = 400 , description = 'Invalid request data' )
78
+ args = write_parser .parse_args ()
79
+ print (args )
58
80
59
- name = req_data [ 'name ' ]
60
- country_code = req_data [ 'language ' ]
61
- tag = req_data ['tag' ]
81
+ country_code = args [ 'language ' ]
82
+ name = args [ 'name ' ]
83
+ tag = args ['tag' ]
62
84
63
85
company_names = CompanyName .query \
64
86
.filter_by (name = name ) \
@@ -76,7 +98,7 @@ def put(self):
76
98
db .session .commit ()
77
99
print ('language' , language .id )
78
100
79
- results = {'updated ' : []}
101
+ results = {'Updated ' : []}
80
102
for company_name in company_names :
81
103
company_tag = CompanyTag .query \
82
104
.filter_by (
@@ -91,19 +113,23 @@ def put(self):
91
113
db .session .commit ()
92
114
print ('company_tag' , company_tag .id )
93
115
94
- results ['updated ' ].append ({name : tag })
116
+ results ['Updated ' ].append ({name : tag })
95
117
96
118
print (results )
97
119
return jsonify (results )
98
120
121
+ @api .expect (write_parser )
122
+ @api .doc (responses = {
123
+ 200 : 'Success' ,
124
+ 400 : 'Validation Error'
125
+ })
99
126
def delete (self ):
100
- req_data = request .get_json ()
101
- if req_data is None or any (key not in req_data for key in ('name' , 'language' , 'tag' )):
102
- abort (status = 400 , description = 'Invalid request data' )
127
+ args = write_parser .parse_args ()
128
+ print (args )
103
129
104
- name = req_data [ 'name ' ]
105
- country_code = req_data [ 'language ' ]
106
- tag = req_data ['tag' ]
130
+ country_code = args [ 'language ' ]
131
+ name = args [ 'name ' ]
132
+ tag = args ['tag' ]
107
133
108
134
company_names = CompanyName .query \
109
135
.filter_by (name = name ) \
@@ -121,7 +147,7 @@ def delete(self):
121
147
db .session .commit ()
122
148
print ('language' , language .id )
123
149
124
- results = {'deleted ' : []}
150
+ results = {'Deleted ' : []}
125
151
for company_name in company_names :
126
152
company_tag = CompanyTag .query \
127
153
.filter_by (
@@ -135,14 +161,11 @@ def delete(self):
135
161
db .session .commit ()
136
162
print ('company_tag' , company_tag .id )
137
163
138
- results ['deleted ' ].append ({name : tag })
164
+ results ['Deleted ' ].append ({name : tag })
139
165
140
166
print (results )
141
167
return jsonify (results )
142
168
143
169
144
- api .add_resource (ApiCompany , '/api/company' )
145
-
146
-
147
170
if __name__ == '__main__' :
148
171
app .run (host = '0.0.0.0' , debug = True )
0 commit comments