Пример #1
0
def get_exception_msg(e):
    """Executed when SXClientException occurs in views.

    Exception message will be checked against known errors, and a prepared
    message will be returned to the user.
    If it isn't a known error, log the message since it might've not been
    handled properly.

    Returns a (field_name, error) tuple.
    """
    if 'Max retries exceeded' in e.message or \
            'Failed to query cluster' in e.message:
        return _("Connection to the cluster failed.")
    elif 'Invalid volume size' in e.message:
        match = _invalid_volume_size_re.match(e.message)
        if match:
            min_, max_ = match.groups()
            return _("Volume size should be between {min} and {max}.") \
                .format(min=filesizeformat(min_), max=filesizeformat(max_))
    logger.warning(
        "Unknown exception ocurred. "
        "The user will be shown a generic error message.\n"
        "Exception: " + e.message)
    return _("An error occurred while processing your request. "
             "Please try again later.")
Пример #2
0
def get_sxclient_exception_msg(e):
    msg = None
    error = e.message
    if 'Max retries exceeded' in error or \
            'Failed to query cluster' in error:
        msg = _("Connection to the cluster failed.")

    elif 'Invalid volume size' in error:
        match = _invalid_volume_size_re.match(error)
        if match:
            min_, max_ = match.groups()
            msg = _("Volume size should be between {min} and {max}.") \
                .format(min=filesizeformat(min_), max=filesizeformat(max_))
        elif error.endswith('reached cluster capacity'):
            msg = _("Can't create a new volume: "
                    "cluster capacity has been reached.")

    elif 'Invalid metadata value' in error:
        msg = _("Failed to update cluster metadata.")

    elif 'Invalid distribution' in error:
        match = _invalid_cluster_size_re.match(error)
        if match:
            min_ = match.groups()[0]
            msg = _("Cluster size should be at least {min}.") \
                .format(min=filesizeformat(min_))
    return msg
Пример #3
0
 def get_used_size_display(self):
     usage = self.used_size
     size = self.size
     if size:
         percentage = int(round(100. * usage / size))
         return _("{usage} of {size} ({percentage}%)").format(
             usage=filesizeformat(usage), size=filesizeformat(size),
             percentage=percentage)
     else:
         return filesizeformat(usage)
Пример #4
0
 def get_allocated_size_display(self):
     allocated = sum(v.size for v in self.volumes)
     size = self.size
     if size:
         percentage = int(round(100. * allocated / size))
         return _("{usage} of {size} ({percentage}%)").format(
             usage=filesizeformat(allocated), size=filesizeformat(size),
             percentage=percentage)
     else:
         return filesizeformat(allocated)
Пример #5
0
def delete_files_not_in_a_request():
    """Delete those files that have the status of RESTORED but are actually not in a request"""
    # build a list of RESTORED (or RESTORING) files from the requests
    restored_files_tapereq = []
    restored_file_size = 0
    error_file_size = 0
    for tr in TapeRequest.objects.iterator():
        # list of request files
        req_files = tr.request_files.split()
        for rf in req_files:
            try:
                tf = TapeFile.objects.get(logical_path = rf)
                if tf.stage == TapeFile.RESTORED or tf.stage == TapeFile.RESTORING:
                    restored_files_tapereq.append(tf)
                    restored_file_size += tf.size
            except:
                pass
        # pattern match files
        if tr.request_patterns != "":
            pattern_files = TapeFile.objects.filter(
                (Q(stage=TapeFile.RESTORED) |
                 Q(stage=TapeFile.RESTORING)) &
                Q(logical_path__contains=tr.request_patterns)
            )
            for pf in pattern_files.iterator():
                restored_files_tapereq.append(pf)
                restored_file_size += tf.size
    # get a list of files that the NLA thinks have been restored
    restored_files_nla = TapeFile.objects.filter(Q(stage=TapeFile.RESTORED) | Q(stage=TapeFile.RESTORING))
    total_size = 0
    for rf in restored_files_nla.iterator():
        total_size += rf.size

    print("Restored files in NLA             : {}".format(restored_files_nla.count()))
    print("Restored files in requests        : {}".format(len(restored_files_tapereq)))
    print("Size of restored files in NLA     : {}".format(filesizeformat(total_size)))
    print("Size of restored files in requests: {}".format(filesizeformat(restored_file_size)))

    # delete the files from the restore area and the symbolic link
    for rf in restored_files_nla.iterator():
        if rf not in restored_files_tapereq:
            # delete the file
            full_path = os.path.realpath(rf.logical_path)
            print("DELETING {}".format(full_path))
            os.unlink(full_path)
            # delete the link
            os.unlink(rf.logical_path)
            # mark as on tape and save
            rf.stage = TapeFile.ONTAPE
            rf.save()
            # add up errorneous sizes
            error_file_size += rf.size

    print("Size of deleted files: {}".format(filesizeformat(error_file_size)))
Пример #6
0
 def get_allocated_size_display(self):
     allocated = sum(v.size for v in self.volumes)
     size = self.size
     if size:
         percentage = int(round(100. * allocated / size))
         return _("{usage} of {size} ({percentage}%)").format(
             usage=filesizeformat(allocated),
             size=filesizeformat(size),
             percentage=percentage)
     else:
         return filesizeformat(allocated)
Пример #7
0
 def get_used_size_display(self):
     usage = self.used_size
     size = self.size
     if size:
         percentage = int(round(100. * usage / size))
         return _("{usage} of {size} ({percentage}%)").format(
             usage=filesizeformat(usage),
             size=filesizeformat(size),
             percentage=percentage)
     else:
         return filesizeformat(usage)
Пример #8
0
    def clean(self, *args, **kwargs):
        data = super(FileSizeCheckMixin, self).clean(*args, **kwargs)

        if data is None:
            return

        if self.max_size is not None and data.size > self.max_size:
            raise forms.ValidationError(
                ugettext("File size must be under %s. Current file size is %s.")
                % (filesizeformat(self.max_size), filesizeformat(data.size))
            )
        return data
Пример #9
0
    def clean(self, *args, **kwargs):
        data = super(FileSizeCheckMixin, self).clean(*args, **kwargs)

        if data is None:
            return

        if self.max_size is not None and data.size > self.max_size:
            raise forms.ValidationError(
                ugettext('File size must be under %(max_size)s. Current file size is %(actual_size)s.') % {
                    'max_size': filesizeformat(self.max_size),
                    'actual_size': filesizeformat(data.size),
                })
        return data
Пример #10
0
    def clean(self, *args, **kwargs):
        data = super(FileSizeCheckMixin, self).clean(*args, **kwargs)

        if data is None:
            return

        if self.max_size is not None and data.size > self.max_size:
            raise forms.ValidationError(
                ugettext('File size must be under %(max_size)s. Current file size is %(actual_size)s.') % {
                    'max_size': filesizeformat(self.max_size),
                    'actual_size': filesizeformat(data.size),
                })
        return data
Пример #11
0
    def clean_cluster_size(self):
        size = self.initial['cluster_size']
        target = self.cleaned_data['cluster_size']

        if not target:
            return size

        # Since this field is handled by FileSizeWidget, it may report slightly
        # different values from the actual ones. (1040GB -> 1.0TB -> 1024GB)
        # Therefore, `target` is ignored if it did not change significantly.
        if abs(size - target) < 16 or \
                filesizeformat(size) == filesizeformat(target):
            return size

        return target
Пример #12
0
 def render(self, name, value, attrs=None):
     if value:
         try:
             value = filesizeformat(value, is_binary=self.is_binary, ambiguous_suffix=self.ambiguous_suffix)
         except ValueError:
             pass
     return super(FileSizeWidget, self).render(name, value, attrs)
Пример #13
0
 def render(self, name, value, attrs=None):
     if value:
         try:
             value = filesizeformat(value)
         except ValueError:
             pass
     return super(FileSizeWidget, self).render(name, value, attrs)
Пример #14
0
 def render(self, name, value, attrs=None):
     if value:
         try:
             value = filesizeformat(value)
         except ValueError:
             pass
     return super(FileSizeWidget, self).render(name, value, attrs)
Пример #15
0
 def get_form_field_kwargs(self, instance):
     kwargs = super(FileField, self).get_form_field_kwargs(instance)
     if instance.max_size:
         if 'help_text' in kwargs:
             kwargs['help_text'] = kwargs['help_text'].replace(
                 'MAXSIZE', filesizeformat(instance.max_size))
         kwargs['max_size'] = instance.max_size
     return kwargs
Пример #16
0
 def get_form_field_kwargs(self, instance):
     kwargs = super(FileField, self).get_form_field_kwargs(instance)
     if instance.max_size:
         if 'help_text' in kwargs:
             kwargs['help_text'] = kwargs['help_text'].replace(
                 'MAXSIZE', filesizeformat(instance.max_size))
         kwargs['max_size'] = instance.max_size
     return kwargs
Пример #17
0
def get_exception_msg(e):
    """Executed when SXClientException occurs in views.

    Exception message will be checked against known errors, and a prepared
    message will be returned to the user.
    If it isn't a known error, log the message since it might've not been
    handled properly.

    Returns a (field_name, error) tuple.
    """
    if 'Max retries exceeded' in e.message or \
            'Failed to query cluster' in e.message:
        return _("Connection to the cluster failed.")
    elif 'Invalid volume size' in e.message:
        match = _invalid_volume_size_re.match(e.message)
        if match:
            min_, max_ = match.groups()
            return _("Volume size should be between {min} and {max}.") \
                .format(min=filesizeformat(min_), max=filesizeformat(max_))
    logger.warning("Unknown exception ocurred. "
                   "The user will be shown a generic error message.\n"
                   "Exception: " + e.message)
    return _("An error occurred while processing your request. "
             "Please try again later.")
Пример #18
0
    def test_render(self):

        from sizefield import utils
        utils.SIZEFIELD_FORMAT = '{value} {unit}'

        # Usual case
        self.assertEqual('123.0 B', filesizeformat(123))
        self.assertEqual('123.0 B', filesizeformat('123'))
        # Incorrect input
        self.assertRaises(ValueError, filesizeformat, (''))
        self.assertRaises(ValueError, filesizeformat, ('abc'))
        self.assertRaises(ValueError, filesizeformat, ('12 HB'))
        # Units
        self.assertEqual('1000.0 B', filesizeformat(1000))
        self.assertEqual('1023.0 B', filesizeformat(1023))
        self.assertEqual('1.0 KB', filesizeformat(1024))
        self.assertEqual('1.0 MB', filesizeformat(1024 * 1024))
        self.assertEqual('1.0 GB', filesizeformat(1024 * 1024 * 1024))
        self.assertEqual('512.0 KB', filesizeformat(1024 * 1024 * 0.5))
        self.assertEqual('307.2 KB', filesizeformat(1024 * 1024 * 0.3))
        # Decimals
        self.assertEqual('1 KB', filesizeformat(1024, decimals=0))
        self.assertEqual('1.0 KB', filesizeformat(1024, decimals=1))
        self.assertEqual('1.00 KB', filesizeformat(1024, decimals=2))
        self.assertEqual('1.000 KB', filesizeformat(1024, decimals=3))
        self.assertEqual('1.0000 KB', filesizeformat(1024, decimals=4))

        # test SIZEFIELD_FORMAT
        utils.SIZEFIELD_FORMAT = '{value}xxx {unit}'
        self.assertEqual('1xxx KB', filesizeformat(1024, decimals=0))
        self.assertEqual('1.0xxx KB', filesizeformat(1024, decimals=1))
        self.assertEqual('1.00xxx KB', filesizeformat(1024, decimals=2))
        self.assertEqual('1.000xxx KB', filesizeformat(1024, decimals=3))
        self.assertEqual('1.0000xxx KB', filesizeformat(1024, decimals=4))
Пример #19
0
 def quota_formatted_used(self):
     return filesizeformat(self.quota_used)
Пример #20
0
 def render(self, name, value, attrs=None):
     if value:
         value = filesizeformat(value)
     return super(FileSizeWidget, self).render(name, value, attrs)
Пример #21
0
 def __str__(self):
     desc_str = "{} : {} : {} / {}".format(
         self.workspace.workspace,
         str(StorageQuota.__STORAGE_CHOICES[self.storage][1]),
         filesizeformat(self.quota_used), filesizeformat(self.quota_size))
     return desc_str
Пример #22
0
 def formatted_size(self):
     return filesizeformat(self.size)
Пример #23
0
 def resolve_file_size(self, info):
     if self.file_size:
         return filesizeformat(self.file_size)
     return None
Пример #24
0
 def quota_formatted_size(self):
     return filesizeformat(self.quota_size)
Пример #25
0
def filesize(value, decimals=1):
    return filesizeformat(value, decimals)
Пример #26
0
 def __unicode__(self):
     return "%s (%s)" % (self.user, filesizeformat(self.size))
Пример #27
0
def filesize(value, decimals=1):
    if value is None:
        return ''
    return filesizeformat(value, decimals)
Пример #28
0
 def formatted_allocated(self):
     return filesizeformat(self.allocated_bytes)
Пример #29
0
 def formatted_used(self):
     return filesizeformat(self.used_bytes)