-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathapp.py
More file actions
105 lines (83 loc) · 2.9 KB
/
Copy pathapp.py
File metadata and controls
105 lines (83 loc) · 2.9 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
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy_serializer import SerializerMixin
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
host_env = os.environ.get('MYSQL_HOST')
db_env = os.environ.get('MYSQL_NAME')
user_env = os.environ.get('MYSQL_USER')
password_env = os.environ.get('MYSQL_PASSWORD')
# Access environment variables
host = os.environ.get('AZURE_MYSQL_HOST', host_env)
db = os.environ.get('AZURE_MYSQL_NAME', db_env)
user = os.environ.get('AZURE_MYSQL_USER', user_env)
password = os.environ.get('AZURE_MYSQL_PASSWORD', password_env)
db_uri = f'mysql+pymysql://{user}:{password}@{host}:3306/{db}'
# db_uri = 'sqlite:///todos.db'
print(db_uri)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class Todo(db.Model, SerializerMixin):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
done = db.Column(db.Boolean)
created = db.Column(db.DateTime, server_default=db.func.now())
finished_on = db.Column(db.DateTime, server_default=None, nullable=True)
def __init__(self, title):
self.title = title
self.done = False
def __repr__(self):
return f'<Todo {self.title}>'
@app.route('/todos', methods=['GET'])
def get_todos():
todos = Todo.query.all()
todosjson = [todo.to_dict() for todo in todos]
return jsonify({'todos': todosjson})
@app.route('/todos/<int:todo_id>', methods=['GET'])
def get_todo_by_id(todo_id):
todo = Todo.query.get(todo_id)
if todo is None:
return jsonify({'error': 'not found'}), 404
else:
return jsonify({'todo': todo.to_dict()})
@app.route('/todos', methods=['POST'])
def create_todo():
body = request.get_json()
todo = Todo(body['title'])
db.session.add(todo)
db.session.commit()
return jsonify({'todo': todo.to_dict()})
@app.route('/todos/<int:todo_id>', methods=['PUT'])
def update_todo_by_id(todo_id):
todo = Todo.query.get(todo_id)
if todo is None:
return jsonify({'error': 'not found'}), 404
else:
body = request.get_json()
if 'title' in body:
todo.title = body['title']
if 'done' in body:
todo.done = body['done']
if todo.done:
todo.finished_on = db.func.now()
else:
todo.finished_on = None
db.session.commit()
return jsonify({'todo': todo.to_dict()})
@app.route('/todos/<int:todo_id>', methods=['DELETE'])
def delete_todo_by_id(todo_id):
todo = Todo.query.get(todo_id)
if todo is None:
return jsonify({'error': 'not found'}), 404
else:
db.session.delete(todo)
db.session.commit()
return jsonify({'result': True})
if __name__ == "__main__":
with app.app_context():
db.create_all()
app.run(debug=True)