Skip to content
This repository has been archived by the owner on Jan 20, 2024. It is now read-only.

Commit

Permalink
Make logging better
Browse files Browse the repository at this point in the history
  • Loading branch information
tdemin committed Jun 12, 2019
1 parent b1fd9a1 commit 0aadb4b
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 12 deletions.
16 changes: 13 additions & 3 deletions project_amber/errors.py
@@ -1,6 +1,6 @@
from http import HTTPStatus

from project_amber.logging import logError
from project_amber.logging import warn, error

class HTTPError(Exception):
"""
Expand All @@ -14,7 +14,7 @@ def __init__(self, code: int, message: str):
"""
self.code = code
self.message = message
logError(self.message)
warn(self.message)
super(HTTPError, self).__init__()

class BadRequest(HTTPError):
Expand All @@ -30,8 +30,9 @@ class InternalServerError(HTTPError):
Exception class for DB errors. Probably going to be left unused.
"""
code = HTTPStatus.INTERNAL_SERVER_ERROR
## pylint: disable=super-init-not-called
def __init__(self, message="Internal error"):
super().__init__(self.code, message)
error(message)

class NotFound(HTTPError):
"""
Expand All @@ -56,3 +57,12 @@ class Unauthorized(HTTPError):
code = HTTPStatus.UNAUTHORIZED
def __init__(self, message="Unauthorized"):
super().__init__(self.code, message)

class Conflict(HTTPError):
"""
Essentially reverse for HTTP 404: HTTP 409 Conflict. To be used on "entity
already exists" situations.
"""
code = HTTPStatus.CONFLICT
def __init__(self, message="This entity already exists"):
super().__init__(self.code, message)
10 changes: 9 additions & 1 deletion project_amber/helpers/auth.py
Expand Up @@ -7,7 +7,9 @@

from project_amber.const import MSG_NO_TOKEN, MSG_INVALID_TOKEN, MSG_USER_NOT_FOUND
from project_amber.db import db
from project_amber.errors import Unauthorized, BadRequest, NotFound, InternalServerError
from project_amber.errors import Unauthorized, BadRequest, NotFound, \
InternalServerError, Conflict
from project_amber.logging import log
from project_amber.models.auth import User, Session

class LoginUser:
Expand Down Expand Up @@ -49,9 +51,13 @@ def addUser(name: str, password: str) -> int:
"""
Creates a new user. Returns their ID on success.
"""
# does a user with this name already exist?
if not db.session.query(User).filter_by(name=name).one_or_none() is None:
raise Conflict("The user with this name already exists")
prehashed_pw = b64encode(sha256(password.encode("utf8")).digest())
hashed_pw = hashpw(prehashed_pw, gensalt())
user = User(name=name, password=hashed_pw)
log("Adding user %s..." % name)
db.session.add(user)
db.session.commit()
return user.id
Expand All @@ -63,6 +69,7 @@ def removeUser(uid: int) -> int:
user = db.session.query(User).filter_by(id=uid).one_or_none()
if user is None:
raise NotFound(MSG_USER_NOT_FOUND)
log("Removing user %s..." % user.name)
db.session.delete(user)
db.session.commit()
return uid
Expand All @@ -87,6 +94,7 @@ def createSession(name: str, password: str) -> str:
if verifyPassword(user.id, password):
token = sha256(gensalt() + bytes(str(time()).encode())).hexdigest()
session = Session(token=token, user=user.id, login_time=time())
log("User %s logged in" % user.name)
db.session.add(session)
db.session.commit()
return token
Expand Down
24 changes: 16 additions & 8 deletions project_amber/logging.py
Expand Up @@ -2,20 +2,28 @@

from project_amber.config import config

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("sjbackend")
level = logging.INFO
if config["loglevel"] == 0: level = logging.ERROR
if config["loglevel"] == 1: level = logging.WARN

logging.basicConfig(level=level)
logger = logging.getLogger("amber_backend")

def log(message):
"""
Wrapper for the logger calls. Only intended to be used in DB code.
Corresponds to loglevel 2.
"""
logger.info(message)

def warn(message):
"""
Wrapper for the logger calls. Corresponds to loglevel 1.
"""
# This wrapper only logs things in case of loglevel being set to 2
# (log requests).
if config["loglevel"] == 2:
logger.info(message)
logger.warning(message)

def logError(message):
def error(message):
"""
Wrapper for the error messages.
Wrapper for the error messages. Loglevel 0.
"""
logger.error(message)

0 comments on commit 0aadb4b

Please sign in to comment.