コード例 #1
0
def remove_source(obj):
    """ Remove file data from amazon.

    :param obj: content object.

    """
    obj_fields = utils.getAWSFields(obj)
    for field, value in obj_fields:
       aws_utility = getUtility(IAWSFileClientUtility)
       if not aws_utility.active():
           raise AWSSourceRemoveError("Could not delete remote source. "
                                      "To be able to delete object properly, "
                                      "please activate AWS storage")
       as3client = aws_utility.getFileClient()
       if hasattr(value, 'source_id') and value.source_id:
           try:
               as3client.delete(value.source_id)
               if IAWSImageField.providedBy(field):
                   field.removeScales(obj)
           except FileClientRemoveError, e:
               raise AWSSourceRemoveError(e.message)
コード例 #2
0
def aws_sources(obj):
    sids = {}
    if not hasattr(obj, 'schema'):
        return

    obj_fields = obj.schema.fields()
    for f in obj_fields:
        if IAWSField.providedBy(f):
            accessor= f.getAccessor(obj)
            field_content = accessor()
            if not isinstance(field_content, AWSFile):
                return

            fname = f.getName()
            sids[fname] = field_content.source_id
            if IAWSImageField.providedBy(f):
                for n in f.getAvailableSizes(obj).keys():
                    scale = f.getScale(obj, scale=n)
                    if isinstance(scale, AWSFile):
                      scale_name = '%s_%s' % (fname, n)
                      sids[scale_name] = scale.source_id
    if sids:
        return sids
コード例 #3
0
def clone_source(obj):
    """ Creates copy of file data on amazon.

    :param obj: content object.
    :param remove_origin: if set to true origin source will be removed.
    :type remove_origin: boolean

    """

    def copy_source(aws_file, obj):
        old_sid = aws_file.source_id
        new_sid = utils.replace_source_uid(old_sid, obj.UID())

        if old_sid == new_sid:
            # source already cloned
            return

        as3client = aws_utility.getFileClient()
        as3client.copy_source(old_sid, new_sid)
        aws_file.source_id = new_sid

    obj_fields = utils.getAWSFields(obj)
    for field, value in obj_fields:
        aws_utility = getUtility(IAWSFileClientUtility)
        if not aws_utility.active():
            raise AWSSourceCopyError("Could not copy remote source. "
                                     "To be able to copy object properly, "
                                     "please activate AWS storage")
        if hasattr(value, 'source_id') and \
                value.source_id:
            try:
                copy_source(value, obj)
                if IAWSImageField.providedBy(field):
                    for n in field.getAvailableSizes(obj).keys():
                        copy_source(field.getScale(obj, scale=n), obj)
            except (FileClientCopyError, FileClientRemoveError), e:
                raise AWSSourceCopyError(e.message)