Skip to content

Commit

Permalink
Merge pull request #174 from SelfhostedPro/error-handling
Browse files Browse the repository at this point in the history
Error handling
  • Loading branch information
SelfhostedPro committed Oct 19, 2020
2 parents 0849d98 + eb86827 commit 76b4e54
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 28 deletions.
71 changes: 43 additions & 28 deletions backend/api/db/crud/templates.py
Expand Up @@ -2,6 +2,8 @@
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm.session import make_transient

from fastapi import HTTPException

from .. import models, schemas
from ...utils import conv_ports2dict, conv_sysctls2dict

Expand Down Expand Up @@ -56,31 +58,35 @@ def add_template(db: Session, template: models.containers.Template):
raise
if type(loaded_file) == list:
for entry in loaded_file:
if entry.get('ports'):
ports = conv_ports2dict(entry.get('ports', []))
ports = conv_ports2dict(entry.get('ports', []))
sysctls = conv_sysctls2dict(entry.get('sysctls', []))

# Optional use classmethod from_dict
template_content = models.containers.TemplateItem(
type=int(entry['type']),
title=entry['title'],
platform=entry['platform'],
description=entry.get('description', ''),
name=entry.get('name', entry['title'].lower()),
logo=entry.get('logo', ''), # default logo here!
image=entry.get('image', ''),
notes=entry.get('note', ''),
categories=entry.get('categories', ''),
restart_policy=entry.get('restart_policy'),
ports=ports,
network_mode=entry.get('network_mode', ''),
volumes=entry.get('volumes', []),
env=entry.get('env', []),
devices=entry.get('devices', []),
labels=entry.get('labels', []),
sysctls=sysctls,
cap_add=entry.get('cap_add', [])
)
try:
template_content = models.containers.TemplateItem(
type=int(entry['type']),
title=entry['title'],
platform=entry['platform'],
description=entry.get('description', ''),
name=entry.get('name', entry['title'].lower()),
logo=entry.get('logo', ''), # default logo here!
image=entry.get('image', ''),
notes=entry.get('note', ''),
categories=entry.get('categories', ''),
restart_policy=entry.get('restart_policy'),
ports=ports,
network_mode=entry.get('network_mode', ''),
volumes=entry.get('volumes', []),
env=entry.get('env', []),
devices=entry.get('devices', []),
labels=entry.get('labels', []),
sysctls=sysctls,
cap_add=entry.get('cap_add', [])
)
except Exception as exc:
raise HTTPException(
status_code=exc.response.status_code, detail=entry.get('name') + ' ' + exc.explanation
)
_template.items.append(template_content)
elif type(loaded_file) == dict:
entry = loaded_file
Expand Down Expand Up @@ -112,7 +118,9 @@ def add_template(db: Session, template: models.containers.Template):
except (OSError, TypeError, ValueError) as err:
# Optional handle KeyError here too.
print('data request failed', err)
raise
raise HTTPException(
status_code=exc.response.status_code, detail=exc.explanation
)

try:
db.add(_template)
Expand Down Expand Up @@ -200,7 +208,9 @@ def refresh_template(db: Session, template_id: id):
items.append(template_content)
except Exception as exc:
print('Template update failed. ERR_001', exc)
raise
raise HTTPException(
status_code=exc.response.status_code, detail=exc.explanation
)
else:
# db.delete(template)
# make_transient(template)
Expand All @@ -216,7 +226,9 @@ def refresh_template(db: Session, template_id: id):
except Exception as exc:
db.rollback()
print('Template update failed. ERR_002', exc)
raise
raise HTTPException(
status_code=exc.response.status_code, detail=exc.explanation
)

return template

Expand All @@ -227,8 +239,9 @@ def read_app_template(db, app_id):
models.TemplateItem.id == app_id).first()
return template_item
except Exception as exc:
print('App template not found')
raise
raise HTTPException(
status_code=exc.response.status_code, detail=exc.explanation
)


def set_template_variables(db: Session, new_variables: models.TemplateVariables):
Expand All @@ -254,7 +267,9 @@ def set_template_variables(db: Session, new_variables: models.TemplateVariables)
return new_template_variables

except IntegrityError as err:
abort(400, {'error': 'Bad Request'})
raise HTTPException(
status_code=exc.response.status_code, detail=exc.explanation
)


def read_template_variables(db: Session):
Expand Down
2 changes: 2 additions & 0 deletions backend/api/utils.py
Expand Up @@ -84,6 +84,8 @@ def conv_ports2dict(data: List[str]) -> List[Dict[str, str]]:
cport, proto = cport.split("/", 1)
portlst.append({"cport": cport, "hport": hport, "proto": proto})
return portlst
else:
return None


# Input Format:
Expand Down

0 comments on commit 76b4e54

Please sign in to comment.