forked from jamil-said/code-samples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
112 lines (106 loc) · 5.01 KB
/
main.py
File metadata and controls
112 lines (106 loc) · 5.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import pymysql
from datetime import datetime
from app import app
from config import mysql
from flask import jsonify, request
@app.route('/')
def home():
return "API is ready!"
@app.route('/users/create', methods=['POST'])
def create_user():
fname = request.form.get('first_name')
lname = request.form.get('last_name')
email = request.form.get('email')
if (not fname) or (not lname) or (not email):
return jsonify(["Request failed! The fiels 'First Name', 'Last Name' and 'Email' must be all provided for user creation.", "Status code: 400"])
elif (len(fname)>100) or (len(lname)>100) or (len(email)>100):
return jsonify(["Request failed! The fiels 'First Name', 'Last Name' and 'Email' must each have a maximum of 100 characters.", "Status code: 400"])
else:
try:
conn = mysql.connect()
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute("SELECT 1 FROM apiusers WHERE email = %s LIMIT 1", email)
if cur.fetchone():
return jsonify(["Request failed! The email provided is already in use.", "Status code: 400"])
sql = "INSERT INTO apiusers(first_name, last_name, email, created_at, updated_at) VALUES(%s, %s, %s, %s, %s)"
user_values = (fname, lname, email, datetime.utcnow(), datetime.utcnow())
cur.execute(sql, user_values)
conn.commit()
return jsonify(["User record created.", "Status code: 201"])
except Exception as e:
err_mess = 'Request failed! Exception raised: ' + str(e)
return jsonify(err_mess)
finally:
cur.close()
conn.close()
@app.route('/users', methods=['GET'])
def getAllUsers():
try:
conn = mysql.connect()
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute("SELECT * FROM apiusers")
users = cur.fetchall()
return jsonify([users, "Status code: 200"])
except Exception as e:
err_mess = 'Request failed! Exception raised: ' + str(e)
return jsonify(err_mess)
finally:
cur.close()
conn.close()
@app.route('/users/update/<int:user_id>', methods=['POST'])
def updateUser(user_id):
fname = request.form.get('first_name')
lname = request.form.get('last_name')
email = request.form.get('email')
if (not fname) and (not lname) and (not email):
return jsonify(["Request failed! At least one field to be updated must be provided.", "Status code: 400"])
elif (fname and len(fname)>100) or (lname and len(lname)>100) or (email and len(email)>100):
return jsonify(["Request failed! The fiels 'First Name', 'Last Name' and 'Email' must each have a maximum of 100 characters.", "Status code: 400"])
else:
try:
conn = mysql.connect()
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute("SELECT 1 FROM apiusers WHERE id = %s LIMIT 1", user_id)
if not cur.fetchone():
return jsonify(["User not found.", "Status code: 404"])
if email:
cur.execute("SELECT 1 FROM apiusers WHERE email = %s and id <> %s LIMIT 1", (email, user_id))
if cur.fetchone():
return jsonify(["Request failed! The email provided is already in use.", "Status code: 400"])
else:
cur.execute("UPDATE apiusers SET email = %s, updated_at = %s WHERE id = %s", \
(email, datetime.utcnow(), user_id))
if fname:
cur.execute("UPDATE apiusers SET first_name = %s, updated_at = %s WHERE id = %s", \
(fname, datetime.utcnow(), user_id))
if lname:
cur.execute("UPDATE apiusers SET last_name = %s, updated_at = %s WHERE id = %s", \
(lname, datetime.utcnow(), user_id))
conn.commit()
return jsonify(["Request processed successfully.", "Status code: 200"])
except Exception as e:
err_mess = 'Request failed! Exception raised: ' + str(e)
return jsonify(err_mess)
finally:
cur.close()
conn.close()
@app.route('/users/delete/<int:user_id>', methods=['DELETE'])
def deleteUser(user_id):
try:
conn = mysql.connect()
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute("SELECT 1 FROM apiusers WHERE id = %s LIMIT 1", user_id)
if not cur.fetchone():
return jsonify(["User not found.", "Status code: 404"])
else:
cur.execute("DELETE FROM apiusers WHERE id = %s", user_id)
conn.commit()
return jsonify(["User record deleted.", "Status code: 200"])
except Exception as e:
err_mess = 'Request failed! Exception raised: ' + str(e)
return jsonify(err_mess)
finally:
cur.close()
conn.close()
if __name__ == "__main__":
app.run()