Commit e6afebb0 by Guba Sándor

rewrite Excpetions to HumanReadable

parent 65e7d88a
...@@ -27,13 +27,13 @@ from celery.contrib.abortable import AbortableAsyncResult ...@@ -27,13 +27,13 @@ from celery.contrib.abortable import AbortableAsyncResult
from django.db.models import (Model, BooleanField, CharField, DateTimeField, from django.db.models import (Model, BooleanField, CharField, DateTimeField,
ForeignKey) ForeignKey)
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _, ugettext_noop
from model_utils.models import TimeStampedModel from model_utils.models import TimeStampedModel
from sizefield.models import FileSizeField from sizefield.models import FileSizeField
from .tasks import local_tasks, storage_tasks from .tasks import local_tasks, storage_tasks
from celery.exceptions import TimeoutError from celery.exceptions import TimeoutError
from common.models import WorkerNotFound from common.models import WorkerNotFound, HumanReadableException
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -104,43 +104,72 @@ class Disk(TimeStampedModel): ...@@ -104,43 +104,72 @@ class Disk(TimeStampedModel):
('create_empty_disk', _('Can create an empty disk.')), ('create_empty_disk', _('Can create an empty disk.')),
('download_disk', _('Can download a disk.'))) ('download_disk', _('Can download a disk.')))
class WrongDiskTypeError(Exception): class DiskError(HumanReadableException):
admin_message = None
def __init__(self, type, message=None):
if message is None: def __init__(self, disk, params=None, level=None, **kwargs):
message = ("Operation can't be invoked on a disk of type '%s'." kwargs.update(params or {})
% type) self.disc = kwargs["disk"] = disk
super(Disk.DiskError, self).__init__(
Exception.__init__(self, message) level, self.message, self.admin_message or self.message,
kwargs)
self.type = type
class WrongDiskTypeError(DiskError):
class DiskInUseError(Exception): message = ugettext_noop("Operation can't be invoked on disk "
"'%(name)s' of type '%(type)s'.")
def __init__(self, disk, message=None):
if message is None: admin_message = ugettext_noop(
message = ("The requested operation can't be performed on " "Operation can't be invoked on disk "
"disk '%s (%s)' because it is in use." % "'%(name)s' (%(pk)s) of type '%(type)s'.")
(disk.name, disk.filename))
def __init__(self, disk, params=None, **kwargs):
Exception.__init__(self, message) super(Disk.WrongDiskTypeError, self).__init__(
disk, params, type=disk.type, name=disk.name, pk=disk.pk)
self.disk = disk
class DiskInUseError(DiskError):
class DiskIsNotReady(Exception): message = ugettext_noop(
"The requested operation can't be performed on "
""" Exception for operations that need a deployed disk. "disk '%(name)s' because it is in use.")
"""
admin_message = ugettext_noop(
def __init__(self, disk, message=None): "The requested operation can't be performed on "
if message is None: "disk '%(name)s' (%(pk)s) because it is in use.")
message = ("The requested operation can't be performed on "
"disk '%s (%s)' because it has never been" def __init__(self, disk, params=None, **kwargs):
"deployed." % (disk.name, disk.filename)) super(Disk.WrongDiskTypeError, self).__init__(
disk, params, name=disk.name, pk=disk.pk)
Exception.__init__(self, message)
class DiskIsNotReady(DiskError):
self.disk = disk message = ugettext_noop(
"The requested operation can't be performed on "
"disk '%(name)s' because it has never been deployed.")
admin_message = ugettext_noop(
"The requested operation can't be performed on "
"disk '%(name)s' (%(pk)s) [%(filename)s] because it has never been"
"deployed.")
def __init__(self, disk, params=None, **kwargs):
super(Disk.WrongDiskTypeError, self).__init__(
disk, params, name=disk.name, pk=disk.pk,
filename=disk.filename)
class DiskBaseIsNotReady(DiskError):
message = ugettext_noop(
"The requested operation can't be performed on "
"disk '%(name)s' because its base has never been deployed.")
admin_message = ugettext_noop(
"The requested operation can't be performed on "
"disk '%(name)s' (%(pk)s) [%(filename)s] because its base "
"'%(b_name)s' (%(b_pk)s) [%(b_filename)s] has never been"
"deployed.")
def __init__(self, disk, params=None, **kwargs):
super(Disk.WrongDiskTypeError, self).__init__(
disk, params, name=disk.name, pk=disk.pk,
filename=disk.filename, b_name=base.name,
b_pk=base.pk, b_filename=base.filename)
@property @property
def path(self): def path(self):
...@@ -240,7 +269,7 @@ class Disk(TimeStampedModel): ...@@ -240,7 +269,7 @@ class Disk(TimeStampedModel):
} }
if self.type not in type_mapping.keys(): if self.type not in type_mapping.keys():
raise self.WrongDiskTypeError(self.type) raise self.WrongDiskTypeError(self)
new_type = type_mapping[self.type] new_type = type_mapping[self.type]
...@@ -417,7 +446,7 @@ class Disk(TimeStampedModel): ...@@ -417,7 +446,7 @@ class Disk(TimeStampedModel):
'iso': ("iso", self), 'iso': ("iso", self),
} }
if self.type not in mapping.keys(): if self.type not in mapping.keys():
raise self.WrongDiskTypeError(self.type) raise self.WrongDiskTypeError(self)
if self.is_in_use: if self.is_in_use:
raise self.DiskInUseError(self) raise self.DiskInUseError(self)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment