示例#1
0
文件: users.py 项目: Lezval/horizon
class UserEnableDisableForm(forms.SelfHandlingForm):
    id = forms.CharField(label=_("ID (username)"), widget=forms.HiddenInput())
    enabled = forms.ChoiceField(label=_("enabled"),
                                widget=forms.HiddenInput(),
                                choices=[[c, c]
                                         for c in ("disable", "enable")])

    def handle(self, request, data):
        user_id = data['id']
        enabled = data['enabled'] == "enable"

        try:
            api.user_update_enabled(request, user_id, enabled)
            messages.info(
                request,
                _("User %(user)s %(state)s") % {
                    "user": user_id,
                    "state": "enabled" if enabled else "disabled"
                })
        except api_exceptions.ApiException:
            messages.error(
                request,
                _("Unable to %(state)s user %(user)s") % {
                    "state": "enable" if enabled else "disable",
                    "user": user_id
                })

        return redirect(request.build_absolute_uri())
示例#2
0
文件: objects.py 项目: dais/colony
class ObjectMeta(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    object_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(max_length="128", label="Name")
    header_value = forms.CharField(max_length="256", label="Value")

    def __init__(self, *args, **kwargs):
        super(ObjectMeta, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        value = data['header_value']
        container_name = data['container_name']
        object_name = data['object_name']

        if not header.lower().startswith('x-object-meta-'):
            messages.error(request,
                           'Object metadata must begin with x-object-meta-')
        else:
            hdrs = {}
            hdrs[header[14:]] = value
            api.swift_set_object_info(request, container_name, object_name,
                                      hdrs)

        return shortcuts.redirect(request.build_absolute_uri())
示例#3
0
class CopyObject(forms.SelfHandlingForm):
    new_container_name = forms.ChoiceField(
        label="Container to store object in")

    new_object_name = forms.CharField(max_length="255",
                                      label="New object name")
    orig_container_name = forms.CharField(widget=forms.HiddenInput())
    orig_object_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        containers = kwargs.pop('containers')

        super(CopyObject, self).__init__(*args, **kwargs)

        self.fields['new_container_name'].choices = containers

    def handle(self, request, data):
        orig_container_name = data['orig_container_name']
        orig_object_name = data['orig_object_name']
        new_container_name = data['new_container_name']
        new_object_name = data['new_object_name']

        api.swift_copy_object(request, orig_container_name,
                              orig_object_name, new_container_name,
                              new_object_name)

        messages.success(request,
                         'Object was successfully copied to %s\%s' %
                         (new_container_name, new_object_name))

        return shortcuts.redirect(request.build_absolute_uri())
示例#4
0
class ContainerMetaRemove(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        super(ContainerMetaRemove, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        container_name = data['container_name']

        if not header.lower().startswith('x-container-meta'):
            messages.error(
                request,
                "Container metadata must begin with x-container-meta-")
        else:
            hdrs = {}
            hdrs[header] = ''
            try:
                api.swift_set_container_info(request, container_name, hdrs)
            except ResponseError, e:
                messages.error(
                    request,
                    'Unable to remove metadata from container : %s' % str(e))

        return None
示例#5
0
class AddRule(forms.SelfHandlingForm):
    ip_protocol = forms.ChoiceField(choices=[('tcp',
                                              'tcp'), ('udp',
                                                       'udp'), ('icmp',
                                                                'icmp')])
    from_port = forms.CharField()
    to_port = forms.CharField()
    cidr = forms.CharField()
    # TODO (anthony) source group support
    # group_id = forms.CharField()

    security_group_id = forms.CharField(widget=forms.HiddenInput())
    tenant_id = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        tenant_id = data['tenant_id']
        try:
            LOG.info('Add security_group_rule: "%s"' % data)

            rule = api.security_group_rule_create(
                request, data['security_group_id'], data['ip_protocol'],
                data['from_port'], data['to_port'], data['cidr'])
            messages.info(request, 'Successfully added rule: %s' \
                                    % rule.id)
        except novaclient_exceptions.ClientException, e:
            LOG.error("ClientException in AddRule", exc_info=True)
            messages.error(request,
                           'Error adding rule security group: %s' % e.message)
        return shortcuts.redirect(request.build_absolute_uri())
示例#6
0
class ObjectMetaRemove(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    object_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        super(ObjectMetaRemove, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        container_name = data['container_name']
        object_name = data['object_name']

        if not header.lower().startswith('x-object-meta-'):
            messages.error(request,
                           'Object metadata must begin with x-object-meta-')
        else:
            hdrs = {}
            hdrs[header[14:]] = ''
            try:
                api.swift_remove_object_info(
                    request, container_name, object_name, hdrs,
                    request.session.get('storage_url', None))
            except ResponseError, e:
                messages.error(request,
                               'Removing Object Metadata fails %s' % str(e))

        return None
示例#7
0
文件: objects.py 项目: dais/colony
class DeleteObject(forms.SelfHandlingForm):
    object_name = forms.CharField(widget=forms.HiddenInput())
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        api.swift_delete_object(request, data['container_name'],
                                data['object_name'])
        messages.info(request,
                      'Successfully deleted object: %s' % \
                      data['object_name'])
        return shortcuts.redirect(request.build_absolute_uri())
示例#8
0
class DeleteObject(forms.SelfHandlingForm):
    object_name = forms.CharField(widget=forms.HiddenInput())
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        api.swift_delete_object(request, data['container_name'],
                                data['object_name'],
                                request.session.get('storage_url', None))
        messages.info(request,
                      'Successfully deleted object: %s' % \
                      data['object_name'])
        return None
示例#9
0
class DetachPort(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())
    port = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            LOG.info('Detaching port %s' % data['port'])
            api.quantum_detach_port(request, data['network'], data['port'])
        except Exception, e:
            messages.error(request,
                           'Unable to detach port %s: %s' %
                           (data['port'], e.message,))
        else:
示例#10
0
class UploadObject(forms.SelfHandlingForm):
    name = forms.CharField(max_length="255", label="Object Name")
    object_file = forms.FileField(label="File")
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            file = self.files['object_file']
            cont = data['container_name']
            cont = cont.encode('utf-8')
            obj = data['name']
            obj = obj.encode('utf-8')
            obj = obj.replace('/', '%2F')
            api.swift_upload_object_with_manifest(
                request, cont, obj, file,
                request.session.get('storage_url', None))
            messages.success(request, "Object was successfully uploaded.")
        except Exception as e:
            messages.error(request, "Upload Object was failed (%s)" % str(e))
        finally:
            try:
                if getattr(file, 'temporary_file_path', None):
                    name = file.temporary_file_path()
                    file.close()
                    os.remove(name)
            except Exception, e:
                LOG.exception('file delete failed %s' % str(e))

        return None
示例#11
0
class UpdateImageForm(forms.SelfHandlingForm):
    image_id = forms.CharField(widget=forms.HiddenInput())
    name = forms.CharField(max_length="25", label="Name")
    location = forms.CharField(label="Location")
    user = forms.CharField(label="User")
    password = forms.CharField(widget=forms.PasswordInput, label="Password")

    def handle(self, request, data):
        image_id = data['image_id']
        tenant_id = request.user.tenant_id
        error_retrieving = _('Unable to retreive image info from glance: %s' % image_id)
        error_updating = _('Error updating image with id: %s' % image_id)

        scheme, location = _parse_location(data['location'])
        auth = ":".join([data['user'] , data['password']])

        try:
            image = api.image_get_meta(request, image_id)
            #image = api.image_get(request, image_id)
        except glance_exception.ClientConnectionError, e:
            LOG.exception(_('Error connecting to glance'))
            messages.error(request, error_retrieving)
        except glance_exception.Error, e:
            LOG.exception(error_retrieving)
            messages.error(request, error_retrieving)
示例#12
0
class CreateSnapshot(forms.SelfHandlingForm):
    tenant_id = forms.CharField(widget=forms.HiddenInput())
    instance_id = forms.CharField(widget=forms.TextInput(
        attrs={'readonly': 'readonly'}))
    name = forms.CharField(max_length="20", label=_("Snapshot Name"))

    def handle(self, request, data):
        try:
            LOG.info('Creating snapshot "%s"' % data['name'])
            snapshot = api.snapshot_create(request, data['instance_id'],
                                           data['name'])
            instance = api.server_get(request, data['instance_id'])

            messages.info(
                request,
                _('Snapshot "%(name)s" created for instance "%(inst)s"') % {
                    "name": data['name'],
                    "inst": instance.name
                })
            return shortcuts.redirect('dash_snapshots', data['tenant_id'])
        except api_exceptions.ApiException, e:
            msg = _('Error Creating Snapshot: %s') % e.message
            LOG.exception(msg)
            messages.error(request, msg)
            return shortcuts.redirect(request.build_absolute_uri())
示例#13
0
文件: containers.py 项目: dais/colony
class ContainerMeta(forms.SelfHandlingForm):
    ''' Form that handles Swift Container Meta Data '''
    container_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(
        max_length="128",
        label='Name',
        required=True,
        validators=[validators.MaxLengthValidator(128)])
    header_value = forms.CharField(
        max_length="256",
        label="Value",
        required=True,
        validators=[validators.MaxLengthValidator(256)])

    def __init__(self, *args, **kwargs):
        super(ContainerMeta, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        value = data['header_value']
        container_name = data['container_name']

        if not header.lower().startswith('x-container-meta'):
            messages.error(
                request,
                "Container metadata must begin with x-container-meta-")
        else:
            hdrs = {}
            hdrs[header] = value
            api.swift_set_container_info(request, container_name, hdrs)

        return shortcuts.redirect(request.build_absolute_uri())
示例#14
0
class UpdateImageForm(forms.SelfHandlingForm):
    image_id = forms.CharField(widget=forms.HiddenInput())
    name = forms.CharField(max_length="25", label="Name")
    kernel = forms.CharField(max_length="25",
                             label="Kernel ID",
                             required=False)
    ramdisk = forms.CharField(max_length="25",
                              label="Ramdisk ID",
                              required=False)
    architecture = forms.CharField(label="Architecture", required=False)
    container_format = forms.CharField(label="Container Format",
                                       required=False)
    disk_format = forms.CharField(label="Disk Format")

    def handle(self, request, data):
        image_id = data['image_id']
        tenant_id = request.user.tenant_id
        error_retrieving = _('Unable to retreive image info from glance: %s' %
                             image_id)
        error_updating = _('Error updating image with id: %s' % image_id)

        try:
            image = api.image_get(request, image_id)
        except glance_exception.ClientConnectionError, e:
            LOG.exception(_('Error connecting to glance'))
            messages.error(request, error_retrieving)
        except glance_exception.Error, e:
            LOG.exception(error_retrieving)
            messages.error(request, error_retrieving)
示例#15
0
class TogglePort(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())
    port = forms.CharField(widget=forms.HiddenInput())
    state = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            LOG.info('Toggling port state to %s' % data['state'])
            body = {'port': {'state': '%s' % data['state']}}
            api.quantum_set_port_state(request,
                                       data['network'], data['port'], body)
        except Exception, e:
            messages.error(request,
                           'Unable to set port state to %s: %s' %
                           (data['state'], e.message,))
        else:
示例#16
0
class FloatingIpAssociate(forms.SelfHandlingForm):
    floating_ip_id = forms.CharField(widget=forms.HiddenInput())
    floating_ip = forms.CharField(widget=forms.TextInput(
        attrs={'readonly': 'readonly'}))
    instance_id = forms.ChoiceField()

    def __init__(self, *args, **kwargs):
        super(FloatingIpAssociate, self).__init__(*args, **kwargs)
        instancelist = kwargs.get('initial', {}).get('instances', [])
        self.fields['instance_id'] = forms.ChoiceField(choices=instancelist,
                                                       label="Instance")

    def handle(self, request, data):
        try:
            api.server_add_floating_ip(request, data['instance_id'],
                                       data['floating_ip_id'])
            LOG.info('Associating Floating IP "%s" with Instance "%s"' %
                     (data['floating_ip'], data['instance_id']))
            messages.info(
                request, 'Successfully associated Floating IP: %s \
                                    with Instance: %s' %
                (data['floating_ip'], data['instance_id']))
        except novaclient_exceptions.ClientException, e:
            LOG.error("ClientException in FloatingIpAssociate", exc_info=True)
            messages.error(request,
                           'Error associating Floating IP: %s' % e.message)
        return shortcuts.redirect('dash_floating_ips', request.user.tenant)
示例#17
0
文件: ports.py 项目: Lezval/horizon
class DeletePort(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())
    port = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            LOG.info('Deleting %s ports on network %s' %
                     (data['port'], data['network']))
            api.quantum_delete_port(request, data['network'], data['port'])
        except Exception, e:
            messages.error(
                request,
                _('Unable to delete port %(port)s: %(msg)s') % {
                    "port": data['port'],
                    "msg": e.message
                })
        else:
示例#18
0
class DeleteGroup(forms.SelfHandlingForm):
    tenant_id = forms.CharField(widget=forms.HiddenInput())
    security_group_id = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            LOG.info('Delete security_group: "%s"' % data)

            security_group = api.security_group_delete(
                request, data['security_group_id'])
            messages.info(request, 'Successfully deleted security_group: %s' \
                                    % data['security_group_id'])
        except novaclient_exceptions.ClientException, e:
            LOG.error("ClientException in DeleteGroup", exc_info=True)
            messages.error(request,
                           'Error deleting security group: %s' % e.message)
        return shortcuts.redirect('dash_security_groups', data['tenant_id'])
示例#19
0
class AttachPort(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())
    port = forms.CharField(widget=forms.HiddenInput())
    vif_id = forms.CharField(widget=forms.Select(),
                             label="Select VIF to connect")

    def handle(self, request, data):
        try:
            LOG.info('Attaching %s port to VIF %s' %
                     (data['port'], data['vif_id']))
            body = {'attachment': {'id': '%s' % data['vif_id']}}
            api.quantum_attach_port(request,
                                        data['network'], data['port'], body)
        except Exception, e:
            messages.error(request,
                           'Unable to attach port %s to VIF %s: %s' %
                           (data['port'], data['vif_id'], e.message,))
        else:
示例#20
0
文件: containers.py 项目: dais/colony
class MakePublicContainer(forms.SelfHandlingForm):
    index_object_name = forms.ChoiceField(label="Object used for index.html")
    css_object_name = forms.ChoiceField(
        label="Object used as a css file for listing Container")
    error = forms.CharField(max_length="255",
                            label="file suffix to be used when error occurs",
                            required=False)
    public_html = forms.BooleanField(label="Published as HTML", required=False)
    use_css_in_listing = forms.BooleanField(
        label="Use CSS file for listing Container", required=False)
    html_listing = forms.BooleanField(label="Enable Container listing",
                                      required=False)
    container_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        objects = kwargs.pop('objects')
        headers = kwargs.pop('headers')
        super(MakePublicContainer, self).__init__(*args, **kwargs)
        self.fields['index_object_name'].choices = objects
        self.fields['css_object_name'].choices = objects

        for name, value in headers:
            name = name.lower()
            if name == 'x-container-meta-web-index':
                self.fields['public_html'].initial = True
                self.fields['index_object_name'].initial = (value, value)
            if name == 'x-container-meta-web-listing':
                self.fields['html_listing'].initial = value == 'true'
            if name == 'x-container-meta-web-listing-css':
                self.fields['use_css_in_listing'].initial = True
                self.fields['css_object_name'].initial = (value, value)
            if name == 'x-container-meta-web-error':
                self.fields['error'].value = value

    def handle(self, request, data):
        hdrs = {}
        index_object_name = data['index_object_name']
        css_object_name = data['css_object_name']
        public_html = data['public_html']
        error = data['error']
        html_listing = data['html_listing']
        use_css_in_listing = data['use_css_in_listing']
        container_name = data['container_name']
        for name in ['Index', 'Listing', 'Listing-Css', 'Error']:
            hdrs['X-Container-Meta-Web-' + name] = ''
        if public_html:
            hdrs['X-Container-Meta-Web-Index'] = index_object_name
        if html_listing:
            hdrs['X-Container-Meta-Web-Listing'] = 'true'
        if use_css_in_listing:
            hdrs['X-Container-Meta-Web-Listing-Css'] = css_object_name
        if error:
            hdrs['X-Container-Meta-Web-Error'] = error

        api.swift_set_container_info(request, container_name, hdrs)

        return shortcuts.redirect("dash_containers", request.user.tenant_id)
示例#21
0
文件: containers.py 项目: dais/colony
class ContainerAclRemove(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(widget=forms.HiddenInput())
    acl_type = forms.CharField(widget=forms.HiddenInput())
    acl_value = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        super(ContainerAclRemove, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        container_name = data['container_name']
        acl_type = data['acl_type']
        acl_value = data['acl_value']

        if acl_type == "read":
            type = 'X-Container-Read'
        elif acl_type == "write":
            type = 'X-Container-Write'
        else:
            pass
        # clean and parse acl
        try:
            acl = clean_acl(type, acl_value)
            refs, groups = parse_acl(acl)
        except ValueError, e:
            messages.error(request, 'ACL value is invalid %s' % str(e))
            return

        if header in groups:
            groups.remove(header)
        if header in refs:
            refs.remove(header)

        # re-calcurate referer string
        refs = map(lambda x: '.r:%s' % x, refs)

        # set header
        hdrs = {}
        hdrs[type] = ','.join(groups + refs)

        api.swift_set_container_info(request, container_name, hdrs)

        return shortcuts.redirect(request.build_absolute_uri())
示例#22
0
class DeleteRule(forms.SelfHandlingForm):
    security_group_rule_id = forms.CharField(widget=forms.HiddenInput())
    tenant_id = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        security_group_rule_id = data['security_group_rule_id']
        tenant_id = data['tenant_id']
        try:
            LOG.info('Delete security_group_rule: "%s"' % data)

            security_group = api.security_group_rule_delete(
                request, security_group_rule_id)
            messages.info(request, 'Successfully deleted rule: %s' \
                                    % security_group_rule_id)
        except novaclient_exceptions.ClientException, e:
            LOG.error("ClientException in DeleteRule", exc_info=True)
            messages.error(request,
                           'Error authorizing security group: %s' % e.message)
        return shortcuts.redirect(request.build_absolute_uri())
示例#23
0
class ContainerAcl(forms.SelfHandlingForm):
    ''' Form that handles Swift Container Acl '''
    container_name = forms.CharField(widget=forms.HiddenInput())
    acl_type = forms.ChoiceField(label="ACL Type",
                                 choices=((1, 'ReadAcl'), (0, 'WriteAcl')),
                                 initial=1,
                                 widget=forms.RadioSelect)
    read_acl = forms.CharField(widget=forms.HiddenInput(), required=False)
    write_acl = forms.CharField(widget=forms.HiddenInput(), required=False)
    acl_add = forms.CharField(max_length="255", label="ACL", required=True)

    def __init__(self, *args, **kwargs):
        super(ContainerAcl, self).__init__(*args, **kwargs)

    def handle(self, request, data):

        container_name = data['container_name']
        acl_type = data['acl_type']
        try:
            acl_add = data['acl_add']
            acl_add.encode('ascii')
        except UnicodeEncodeError, e:
            messages.error(
                request, "Container ACL contains non-ASCII \
            character %s" % str(e))
            return shortcuts.redirect(request.build_absolute_uri())

        if acl_type == "1":
            type = 'X-Container-Read'
            acl_value = data.get('read_acl', '')
        elif acl_type == "0":
            type = 'X-Container-Write'
            acl_value = data.get('write_acl', '')

        # clean and parse acl
        try:
            acl = clean_acl(type, acl_add)
            acl_orig = clean_acl(type, acl_value)
            ref_add, group_add = parse_acl(acl)
            ref_orig, group_orig = parse_acl(acl_orig)
        except ValueError, e:
            messages.error(request, 'ACL value is invalid %s' % str(e))
            return None
示例#24
0
class CopyObject(forms.SelfHandlingForm):
    new_container_name = forms.ChoiceField(
        label="Container to store object in")

    new_object_name = forms.CharField(max_length="1024",
                                      label="New object name")
    orig_container_name = forms.CharField(widget=forms.HiddenInput())
    orig_object_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        containers = kwargs.pop('containers')

        super(CopyObject, self).__init__(*args, **kwargs)

        self.fields['new_container_name'].choices = containers

    def handle(self, request, data):

        values = {}
        values['orig_cont'] = data['orig_container_name']
        values['orig_obj'] = data['orig_object_name']
        values['new_cont'] = data['new_container_name']
        values['new_obj'] = data['new_object_name']

        escaped = {}
        for key, value in values.iteritems():
            escaped[key] = value.encode('utf-8').replace('/', '%2F')
            #escaped[key] = value.encode('utf-8')

        try:
            api.swift_copy_object(request, escaped['orig_cont'],
                                  escaped['orig_obj'], escaped['new_cont'],
                                  escaped['new_obj'],
                                  request.session.get('storage_url', None))

            messages.success(
                request, 'Object was successfully copied to %s/%s' %
                (values['new_cont'], values['new_obj']))
        except NoSuchContainer, e:
            messages.error(request, 'Object copy is failed. %s' % str(e))
        except ResponseError, e:
            messages.error(request, 'Object copy is failed. %s' % str(e))
示例#25
0
文件: objects.py 项目: Lezval/horizon
class UploadObject(forms.SelfHandlingForm):
    name = forms.CharField(max_length="255", label=_("Object Name"))
    object_file = forms.FileField(label=_("File"))
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        api.swift_upload_object(request, data['container_name'], data['name'],
                                self.files['object_file'].read())

        messages.success(request, _("Object was successfully uploaded."))
        return shortcuts.redirect(request.build_absolute_uri())
示例#26
0
文件: containers.py 项目: dais/colony
class ContainerMetaRemove(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        super(ContainerMetaRemove, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        container_name = data['container_name']

        if not header.lower().startswith('x-container-meta'):
            messages.error(
                request,
                "Container metadata must begin with x-container-meta-")
        else:
            hdrs = {}
            hdrs[header] = ''
            api.swift_set_container_info(request, container_name, hdrs)

        return shortcuts.redirect(request.build_absolute_uri())
示例#27
0
class ObjectMeta(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    object_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(max_length="128", label="Name")
    header_value = forms.CharField(max_length="256", label="Value")

    def __init__(self, *args, **kwargs):
        super(ObjectMeta, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        value = data['header_value']
        container_name = data['container_name']
        object_name = data['object_name']

        try:
            header.encode('ascii')
            value.encode('ascii')
        except UnicodeEncodeError, e:
            messages.error(
                request,
                "Object metadata contains non-ASCII character %s" % str(e))
            return None

        if not header.lower().startswith('x-object-meta-'):
            messages.error(request,
                           'Object metadata must begin with x-object-meta-')
            return None

        hdrs = {}
        hdrs[header[14:]] = value

        try:
            api.swift_set_object_info(request, container_name, object_name,
                                      hdrs,
                                      request.session.get('storage_url', None))
        except ResponseError, e:
            messages.error(request,
                           'Unable to set object metadata : %s' % str(e))
示例#28
0
class DeleteContainer(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            api.swift_delete_container(request, data['container_name'])
        except ContainerNotEmpty, e:
            messages.error(request,
                           'Unable to delete non-empty container: %s' % \
                           data['container_name'])
            LOG.exception('Unable to delete container "%s".  Exception: "%s"' %
                          (data['container_name'], str(e)))
        else:
示例#29
0
class DeleteKeypair(forms.SelfHandlingForm):
    keypair_id = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            LOG.info('Deleting keypair "%s"' % data['keypair_id'])
            api.keypair_delete(request, data['keypair_id'])
            messages.info(request, 'Successfully deleted keypair: %s' \
                                    % data['keypair_id'])
        except novaclient_exceptions.ClientException, e:
            LOG.exception("ClientException in DeleteKeypair")
            messages.error(request, 'Error deleting keypair: %s' % e.message)
        return redirect(request.build_absolute_uri())
示例#30
0
class DownloadObject(forms.SelfHandlingForm):
    object_name = forms.CharField(widget=forms.HiddenInput())
    container_name = forms.CharField(widget=forms.HiddenInput())
    content_type = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            container_name = data['container_name']
            object_name = data['object_name']
            content_type = data['content_type']
            object_data = api.swift_get_object_data(
                request, container_name, object_name,
                request.session.get('storage_url', None))
            response = http.HttpResponse()
            response['Content-Disposition'] = 'attachment; filename=%s' % \
                    object_name.encode('utf-8')
            response['Content-Type'] = content_type
            for data in object_data:
                response.write(data)
            return response
        except NoSuchObject, e:
            messages.error(request,
                           'Error occurs in downloading object %s' % str(e))