-
Notifications
You must be signed in to change notification settings - Fork 71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ROCK - BRITTANY C. #54
base: master
Are you sure you want to change the base?
Changes from all commits
bcd2e1e
039ac21
9c53996
ef0daf0
e5f2ae4
d073f47
1096b55
dc826d1
77e9722
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||
---|---|---|---|---|
@@ -1,6 +1,33 @@ | ||||
from types import new_class | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. is this being used?
Suggested change
|
||||
from flask import current_app | ||||
from app import db | ||||
from app.models.task import Task | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||
# Parent Class | ||||
|
||||
|
||||
class Goal(db.Model): | ||||
goal_id = db.Column(db.Integer, primary_key=True) | ||||
goal_id = db.Column(db.Integer, primary_key=True, autoincrement=True) | ||||
title = db.Column(db.String) | ||||
tasks = db.relationship('Task', backref='goal', lazy=True) | ||||
|
||||
def goal_json_object(self): | ||||
return { | ||||
"id": self.goal_id, | ||||
"title": self.title | ||||
} | ||||
|
||||
def goal_json_object_with_tasks(self): | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 great helper method! |
||||
new_list = [] | ||||
for task in self.tasks: | ||||
new_list.append({ | ||||
"id": task.id, | ||||
"goal_id": task.goal_id, | ||||
"title": task.title, | ||||
"description": task.description, | ||||
"is_complete": task.completed_at_helper() | ||||
}) | ||||
return { | ||||
"id": self.goal_id, | ||||
"title": self.title, | ||||
"tasks": new_list | ||||
} |
Original file line number | Diff line number | Diff line change | ||
---|---|---|---|---|
@@ -1,6 +1,32 @@ | ||||
from flask import current_app | ||||
from app import db | ||||
|
||||
from datetime import datetime | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||
# this is telling flask about my database task table | ||||
|
||||
class Task(db.Model): | ||||
task_id = db.Column(db.Integer, primary_key=True) | ||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True) | ||||
title = db.Column(db.String) | ||||
description = db.Column(db.String) | ||||
completed_at = db.Column(db.DateTime) | ||||
|
||||
goal_id = db.Column(db.Integer, db.ForeignKey('goal.goal_id'), nullable=True) | ||||
def completed_at_helper(self): | ||||
if self.completed_at == None: | ||||
complete = False | ||||
else: | ||||
complete = True | ||||
return complete | ||||
|
||||
def json_object(self): | ||||
|
||||
new_reponse = { | ||||
"id": self.id, | ||||
"title": self.title, | ||||
"description": self.description, | ||||
"is_complete": self.completed_at_helper() | ||||
} | ||||
if self.goal_id is not None: | ||||
new_reponse["goal_id"] = self.goal_id | ||||
return new_reponse | ||||
# Use this helper function any time the return is expected to be complete ^^^ | ||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,2 +1,205 @@ | ||||||||||||||||||||||||||||||||||||||||||||
from flask import Blueprint | ||||||||||||||||||||||||||||||||||||||||||||
from app import db | ||||||||||||||||||||||||||||||||||||||||||||
from app.models.task import Task | ||||||||||||||||||||||||||||||||||||||||||||
from app.models.goal import Goal | ||||||||||||||||||||||||||||||||||||||||||||
from flask import request | ||||||||||||||||||||||||||||||||||||||||||||
from flask import request, Blueprint, make_response | ||||||||||||||||||||||||||||||||||||||||||||
from flask import jsonify | ||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+4
to
+6
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we can put these all together:
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||
from datetime import datetime | ||||||||||||||||||||||||||||||||||||||||||||
from sqlalchemy import asc, desc | ||||||||||||||||||||||||||||||||||||||||||||
import requests | ||||||||||||||||||||||||||||||||||||||||||||
import json | ||||||||||||||||||||||||||||||||||||||||||||
import os | ||||||||||||||||||||||||||||||||||||||||||||
goal_bp = Blueprint("goals", __name__, url_prefix="/goals") | ||||||||||||||||||||||||||||||||||||||||||||
task_bp = Blueprint("tasks", __name__, url_prefix="/tasks") | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
#This is is a new endpoint. | ||||||||||||||||||||||||||||||||||||||||||||
@task_bp.route("/<task_id>", methods=["GET", "PUT", "DELETE"], strict_slashes=False) | ||||||||||||||||||||||||||||||||||||||||||||
def get_single_task(task_id): | ||||||||||||||||||||||||||||||||||||||||||||
task = Task.query.get(task_id) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if task is None: | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify(None), 404 | ||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+18
to
+21
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we can use a method that'll do both these things for us:
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
complete = task.completed_at_helper() # Helper function to return boolean | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if request.method == "GET": | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"task": task.json_object()}), 200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
elif request.method == "PUT": | ||||||||||||||||||||||||||||||||||||||||||||
form_data = request.get_json() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
task.title = form_data["title"] | ||||||||||||||||||||||||||||||||||||||||||||
task.description = form_data["description"] | ||||||||||||||||||||||||||||||||||||||||||||
task.is_complete = form_data["completed_at"] | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
db.session.commit() | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"task": task.json_object()}),200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
elif request.method == "DELETE": | ||||||||||||||||||||||||||||||||||||||||||||
db.session.delete(task) | ||||||||||||||||||||||||||||||||||||||||||||
db.session.commit() | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"details": f'Task {task.id} "{task.title}" successfully deleted'}), 200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
@task_bp.route("", methods=["GET", "POST"]) | ||||||||||||||||||||||||||||||||||||||||||||
def handle_tasks(): | ||||||||||||||||||||||||||||||||||||||||||||
if request.method == "GET": | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
request_value = request.args.get("sort") | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if request_value == None: | ||||||||||||||||||||||||||||||||||||||||||||
tasks = Task.query.all() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if request_value == "asc": | ||||||||||||||||||||||||||||||||||||||||||||
tasks = Task.query.order_by(Task.title.asc()) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if request_value == "desc": | ||||||||||||||||||||||||||||||||||||||||||||
tasks = Task.query.order_by(Task.title.desc()) | ||||||||||||||||||||||||||||||||||||||||||||
task_response = [] | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
for task in tasks: | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
task_response.append(task.json_object()) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return jsonify(task_response), 200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
elif request.method == "POST": | ||||||||||||||||||||||||||||||||||||||||||||
request_body = request.get_json() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if "completed_at" not in request_body or "description" not in request_body or "title" not in request_body: | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify({ | ||||||||||||||||||||||||||||||||||||||||||||
"details": "Invalid data" | ||||||||||||||||||||||||||||||||||||||||||||
}), 400 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
new_task = Task(title=request_body["title"], | ||||||||||||||||||||||||||||||||||||||||||||
description=request_body["description"], | ||||||||||||||||||||||||||||||||||||||||||||
completed_at=request_body["completed_at"]) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
db.session.add(new_task) | ||||||||||||||||||||||||||||||||||||||||||||
db.session.commit() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"task": new_task.json_object()}), 201 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
db.session.add(new_task) | ||||||||||||||||||||||||||||||||||||||||||||
db.session.commit() | ||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+83
to
+84
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. anything after a return statement will never get hit (but I think this was just duplicate code since you have it on lines 78 and 79)
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
def slack_bot(task): | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 |
||||||||||||||||||||||||||||||||||||||||||||
url = "https://slack.com/api/chat.postMessage?channel=task-notifications" | ||||||||||||||||||||||||||||||||||||||||||||
slack_token = os.environ.get("SLACK") | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
payload = {"text": f"Someone just completed the task: '{task.title}'!"} | ||||||||||||||||||||||||||||||||||||||||||||
headers = {"Authorization": f"Bearer {slack_token}"} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return requests.request("PATCH", url, headers=headers, data=payload) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
@task_bp.route("/<task_id>/mark_complete", methods=["PATCH"], strict_slashes=False) | ||||||||||||||||||||||||||||||||||||||||||||
def mark_complete(task_id): | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if request.method == "PATCH": | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
task = Task.query.get(task_id) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if task is None: | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify(None), 404 | ||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+101
to
+104
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. here we could use |
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
task.completed_at = datetime.now() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
db.session.commit() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
# call slackbot | ||||||||||||||||||||||||||||||||||||||||||||
slack_bot(task) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"task": task.json_object()}),200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
@task_bp.route("/<task_id>/mark_incomplete", methods=["PATCH"], strict_slashes=False) | ||||||||||||||||||||||||||||||||||||||||||||
def mark_incomplete(task_id): | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if request.method == "PATCH": | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
task = Task.query.get(task_id) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if task is None: | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify(None), 404 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
task.completed_at = None | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"task":task.json_object()}),200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+120
to
+132
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. careful with adding too many blank lines! it can make code harder to read
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||
@goal_bp.route("/<goal_id>", methods=["GET", "PUT", "DELETE"], strict_slashes=False) | ||||||||||||||||||||||||||||||||||||||||||||
def get_goal(goal_id): | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
goal = Goal.query.get(goal_id) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if goal is None: | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify(None), 404 | ||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+136
to
+139
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. here we could use |
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if request.method == "GET": | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"goal": goal.goal_json_object()}), 200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
elif request.method == "PUT": | ||||||||||||||||||||||||||||||||||||||||||||
form_data = request.get_json() | ||||||||||||||||||||||||||||||||||||||||||||
#Go and get the data from the request | ||||||||||||||||||||||||||||||||||||||||||||
goal.title = form_data["title"] | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
db.session.commit() | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"goal": goal.goal_json_object()}),200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
elif request.method == "DELETE": | ||||||||||||||||||||||||||||||||||||||||||||
db.session.delete(goal) | ||||||||||||||||||||||||||||||||||||||||||||
db.session.commit() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"details": f'Goal {goal.goal_id} "{goal.title}" successfully deleted'}), 200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
@goal_bp.route("", methods=["POST", "GET"], strict_slashes=False) | ||||||||||||||||||||||||||||||||||||||||||||
def one_goal(): | ||||||||||||||||||||||||||||||||||||||||||||
if request.method == "GET": | ||||||||||||||||||||||||||||||||||||||||||||
goals = Goal.query.all() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
goal_response = [] | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
for goal in goals: | ||||||||||||||||||||||||||||||||||||||||||||
goal_response.append(goal.goal_json_object()) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return jsonify(goal_response), 200 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if request.method == "POST": | ||||||||||||||||||||||||||||||||||||||||||||
request_body = request.get_json() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if request_body == {}: | ||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"details": f'Invalid data'}), 400 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
new_goal = Goal(title=request_body["title"]) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
db.session.add(new_goal) | ||||||||||||||||||||||||||||||||||||||||||||
db.session.commit() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return jsonify({"goal":new_goal.goal_json_object()}),201 | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
#New endpoint to look up goals and task | ||||||||||||||||||||||||||||||||||||||||||||
@goal_bp.route("/<goal_id>/tasks", methods=["POST"], strict_slashes=False) | ||||||||||||||||||||||||||||||||||||||||||||
def goals_task(goal_id): | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
form_data = request.get_json() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
for task_id in form_data["task_ids"]: | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
task = Task.query.get(task_id) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
task.goal_id = goal_id | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
db.session.commit() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return make_response({"id": int(goal_id),"task_ids":form_data["task_ids"]}), 200 | ||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+185
to
+197
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. try not to use so many blank lines |
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
@goal_bp.route("/<goal_id>/tasks", methods=["GET"], strict_slashes=False) | ||||||||||||||||||||||||||||||||||||||||||||
def goals_task_get(goal_id): | ||||||||||||||||||||||||||||||||||||||||||||
if request.method == "GET": | ||||||||||||||||||||||||||||||||||||||||||||
goal = Goal.query.get(goal_id) | ||||||||||||||||||||||||||||||||||||||||||||
if goal is None: | ||||||||||||||||||||||||||||||||||||||||||||
return make_response("", 404) | ||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+202
to
+204
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. here we could use |
||||||||||||||||||||||||||||||||||||||||||||
return jsonify(goal.goal_json_object_with_tasks()) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Generic single-database configuration. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
# A generic, single database configuration. | ||
|
||
[alembic] | ||
# template used to generate migration files | ||
# file_template = %%(rev)s_%%(slug)s | ||
|
||
# set to 'true' to run the environment during | ||
# the 'revision' command, regardless of autogenerate | ||
# revision_environment = false | ||
|
||
|
||
# Logging configuration | ||
[loggers] | ||
keys = root,sqlalchemy,alembic | ||
|
||
[handlers] | ||
keys = console | ||
|
||
[formatters] | ||
keys = generic | ||
|
||
[logger_root] | ||
level = WARN | ||
handlers = console | ||
qualname = | ||
|
||
[logger_sqlalchemy] | ||
level = WARN | ||
handlers = | ||
qualname = sqlalchemy.engine | ||
|
||
[logger_alembic] | ||
level = INFO | ||
handlers = | ||
qualname = alembic | ||
|
||
[handler_console] | ||
class = StreamHandler | ||
args = (sys.stderr,) | ||
level = NOTSET | ||
formatter = generic | ||
|
||
[formatter_generic] | ||
format = %(levelname)-5.5s [%(name)s] %(message)s | ||
datefmt = %H:%M:%S |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
since you aren't using datetime in this file, we don't need to import it. also, are you calling load_dotenv anywhere? were your environment variables able to load without it?