Include connection errors in exception handling

This commit is contained in:
2022-08-20 12:58:47 +01:00
parent 168b2b288a
commit 72f2af1df8
15 changed files with 63 additions and 68 deletions

View File

@ -45,12 +45,12 @@ class Dataset(db.Model):
def make_default(self):
try:
for dataset in Dataset.query.all(): dataset.default = False
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
write('system.log', f'Database error when setting default dataset {self.id}: {exception}')
return False, f'Database error {exception}.'
self.default = True
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when setting default dataset {self.id}: {exception}')
return False, f'Database error {exception}.'
@ -68,7 +68,7 @@ class Dataset(db.Model):
message = 'Cannot delete the only dataset.'
flash(message, 'error')
return False, message
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
write('system.log', f'Database error when setting default dataset {self.id}: {exception}')
return False, f'Database error {exception}.'
write('system.log', f'Dataset {self.id} deleted by {current_user.get_username()}.')
@ -78,7 +78,7 @@ class Dataset(db.Model):
try:
db.session.delete(self)
db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when trying to delete dataset {self.id}: {exception}')
return False, f'Database error: {exception}'
@ -98,7 +98,7 @@ class Dataset(db.Model):
try:
db.session.add(self)
db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when trying to crreate dataset {self.id}: {exception}')
return False, f'Database error: {exception}'
@ -128,7 +128,7 @@ class Dataset(db.Model):
try:
db.session.add(self)
db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when trying to update dataset {self.id}: {exception}')
return False, f'Database error: {exception}'

View File

@ -74,7 +74,7 @@ class Entry(db.Model):
try:
db.session.add(self)
db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when preparing new entry for {self.get_surname()}, {self.get_first_name()}: {exception}')
return False, f'Database error: {exception}'
@ -85,7 +85,7 @@ class Entry(db.Model):
self.start_time = datetime.now()
self.status = 'started'
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when starting test for {self.get_surname()}, {self.get_first_name()}: {exception}')
return False, f'Database error: {exception}'
@ -104,7 +104,7 @@ class Entry(db.Model):
self.status = 'late'
self.valid = False
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when submitting entry for {self.get_surname()}, {self.get_first_name()}: {exception}')
return False, f'Database error: {exception}'
@ -117,7 +117,7 @@ class Entry(db.Model):
self.valid = True
self.status = 'completed'
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when validating entry {self.id}: {exception}')
return False, f'Database error: {exception}'
@ -130,7 +130,7 @@ class Entry(db.Model):
try:
db.session.delete(self)
db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when deleting entry {id}: {exception}')
return False, f'Database error: {exception}'
@ -199,5 +199,4 @@ class Entry(db.Model):
"""
)
try: mail.send(email)
except SMTPException as exception:
write('system.log', f'SMTP Error when trying to notify results to {self.get_surname()}, {self.get_first_name()} with error: {exception}')
except (SMTPException, ConnectionError) as exception: write('system.log', f'SMTP Error when trying to notify results to {self.get_surname()}, {self.get_first_name()} with error: {exception}')

View File

@ -56,7 +56,7 @@ class Test(db.Model):
try:
db.session.add(self)
db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when creating test {self.get_code()}: {exception}')
return False, f'Database error: {exception}'
@ -67,7 +67,7 @@ class Test(db.Model):
if self.entries: return False, f'Cannot delete a test with submitted entries.'
db.session.delete(self)
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when deleting test {self.get_code()}: {exception}')
return False, f'Database error: {exception}'
@ -79,7 +79,7 @@ class Test(db.Model):
if self.start_date.date() > now.date():
self.start_date = now
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when launching test {self.get_code()}: {exception}')
return False, f'Database error: {exception}'
@ -92,7 +92,7 @@ class Test(db.Model):
if self.end_date >= now:
self.end_date = now
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when closing test {self.get_code()}: {exception}')
return False, f'Database error: {exception}'
@ -106,7 +106,7 @@ class Test(db.Model):
adjustments[code] = time
self.adjustments = adjustments
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when adding adjustment to test {self.get_code()}: {exception}')
return False, f'Database error: {exception}'
@ -118,7 +118,7 @@ class Test(db.Model):
self.adjustments.pop(code)
if not self.adjustments: self.adjustments = None
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when deleting adjustment from test {self.get_code()}: {exception}')
return False, f'Database error: {exception}'
@ -131,7 +131,7 @@ class Test(db.Model):
if end_date: self.end_date = end_date
if time_limit is not None: self.time_limit = time_limit
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when updating test {self.get_code()}: {exception}')
return False, f'Database error: {exception}'

View File

@ -58,7 +58,7 @@ class User(UserMixin, db.Model):
def register(self, notify:bool=False, password:str=None):
self.generate_id()
try: users = User.query.all()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
write('system.log', f'Database error when setting default dataset {self.id}: {exception}')
return False, f'Database error {exception}.'
for user in users:
@ -68,7 +68,7 @@ class User(UserMixin, db.Model):
try:
db.session.add(self)
db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when registering user {self.get_username()}: {exception}')
return False, f'Database error: {exception}'
@ -101,8 +101,7 @@ class User(UserMixin, db.Model):
"""
)
try: mail.send(email)
except SMTPException as exception:
write('system.log', f'SMTP Error while trying to notify new user account creation to {self.get_username()} with error: {exception}')
except (SMTPException, ConnectionError) as exception: write('system.log', f'SMTP Error while trying to notify new user account creation to {self.get_username()} with error: {exception}')
return True, f'User {self.get_username()} was created successfully.'
def login(self, remember:bool=False):
@ -154,12 +153,12 @@ class User(UserMixin, db.Model):
"""
)
try: mail.send(email)
except SMTPException as exception:
except (SMTPException, ConnectionError) as exception:
write('system.log', f'SMTP Error while trying to reset password for {self.get_username()} with error: {exception}')
db.session.rollback()
return jsonify({'error': f'SMTP Error: {exception}'}), 500
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when resetting password for user {self.get_username()}: {exception}')
return False, f'Database error: {exception}'
@ -168,7 +167,7 @@ class User(UserMixin, db.Model):
def clear_reset_tokens(self):
self.reset_token = self.verification_token = None
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when resetting clearing reset tokens for user {self.get_username()}: {exception}')
return False, f'Database error: {exception}'
@ -179,7 +178,7 @@ class User(UserMixin, db.Model):
try:
db.session.delete(self)
db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when deleting user {self.get_username()}: {exception}')
return False, f'Database error: {exception}'
@ -208,8 +207,7 @@ class User(UserMixin, db.Model):
"""
)
try: mail.send(email)
except SMTPException as exception:
write('system.log', f'SMTP Error when trying to delete account {username} with error: {exception}')
except (SMTPException, ConnectionError) as exception: write('system.log', f'SMTP Error when trying to delete account {username} with error: {exception}')
return True, message
def update(self, password:str=None, email:str=None, notify:bool=False):
@ -220,12 +218,12 @@ class User(UserMixin, db.Model):
try:
for entry in User.query.all():
if entry.get_email() == email and not entry == self: return False, f'The email address {email} is already in use.'
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
write('system.log', f'Database error when setting default dataset {self.id}: {exception}')
return False, f'Database error {exception}.'
self.set_email(email)
try: db.session.commit()
except SQLAlchemyError as exception:
except (SQLAlchemyError, ConnectionError) as exception:
db.session.rollback()
write('system.log', f'Database error when updating user {self.get_username()}: {exception}')
return False, f'Database error: {exception}'
@ -259,6 +257,5 @@ class User(UserMixin, db.Model):
"""
)
try: mail.send(message)
except SMTPException as exception:
write('system.log', f'SMTP Error when trying to update account {self.get_username()} with error: {exception}')
except (SMTPException, ConnectionError) as exception: write('system.log', f'SMTP Error when trying to update account {self.get_username()} with error: {exception}')
return True, f'Account {self.get_username()} has been updated.'