Ejemplo n.º 1
0
    def test_create_pseudo_folder(self):
        container = self.containers.first()
        obj = self.objects.first()

        api.swift.swift_create_pseudo_folder(IsA(http.HttpRequest),
                                             container.name,
                                             obj.name + "/").AndReturn(obj)
        self.mox.ReplayAll()

        create_pseudo_folder_url = reverse('horizon:project:containers:'
                                           'create_pseudo_folder',
                                           args=[container.name])

        res = self.client.get(create_pseudo_folder_url)
        self.assertTemplateUsed(res,
                                'project/containers/create_pseudo_folder.html')
        self._test_invalid_paths(res)

        formData = {'method': forms.CreatePseudoFolder.__name__,
                    'container_name': container.name,
                    'name': obj.name}
        res = self.client.post(create_pseudo_folder_url, formData)

        index_url = reverse('horizon:project:containers:index',
                            args=[utils.wrap_delimiter(container.name)])

        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 2
0
    def test_upload_without_file(self):
        container = self.containers.first()
        obj = self.objects.first()

        api.swift.swift_upload_object(IsA(http.HttpRequest),
                                      container.name,
                                      obj.name,
                                      None).AndReturn(obj)
        self.mox.ReplayAll()

        upload_url = reverse('horizon:project:containers:object_upload',
                             args=[container.name])

        res = self.client.get(upload_url)
        self.assertTemplateUsed(res, 'project/containers/upload.html')

        res = self.client.get(upload_url)
        self.assertContains(res, 'enctype="multipart/form-data"')
        self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
        self.assertNotContains(res, INVALID_CONTAINER_NAME_2)

        formData = {'method': forms.UploadObject.__name__,
                    'container_name': container.name,
                    'name': obj.name,
                    'object_file': None}
        res = self.client.post(upload_url, formData)

        args = (utils.wrap_delimiter(container.name),)
        index_url = reverse('horizon:project:containers:index', args=args)
        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 3
0
    def test_upload_without_file(self):
        container = self.containers.first()
        obj = self.objects.first()

        api.swift.swift_upload_object(IsA(http.HttpRequest),
                                      container.name,
                                      obj.name,
                                      None).AndReturn(obj)
        self.mox.ReplayAll()

        upload_url = reverse('horizon:project:containers:object_upload',
                             args=[container.name])

        res = self.client.get(upload_url)
        self.assertTemplateUsed(res, 'project/containers/upload.html')

        res = self.client.get(upload_url)
        self.assertContains(res, 'enctype="multipart/form-data"')
        self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
        self.assertNotContains(res, INVALID_CONTAINER_NAME_2)

        formData = {'method': forms.UploadObject.__name__,
                    'container_name': container.name,
                    'name': obj.name,
                    'object_file': None}
        res = self.client.post(upload_url, formData)

        args = (utils.wrap_delimiter(container.name),)
        index_url = reverse('horizon:project:containers:index', args=args)
        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 4
0
    def test_copy(self):
        container_1 = self.containers.get(name=CONTAINER_NAME_1)
        container_2 = self.containers.get(name=CONTAINER_NAME_2)
        obj = self.objects.first()

        ret = (self.containers.list(), False)
        api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
        api.swift.swift_copy_object(IsA(http.HttpRequest),
                                    container_1.name,
                                    obj.name,
                                    container_2.name,
                                    obj.name)
        self.mox.ReplayAll()

        formData = {'method': forms.CopyObject.__name__,
                    'new_container_name': container_2.name,
                    'new_object_name': obj.name,
                    'orig_container_name': container_1.name,
                    'orig_object_name': obj.name}
        copy_url = reverse('horizon:project:containers:object_copy',
                           args=[container_1.name, obj.name])
        res = self.client.post(copy_url, formData)
        args = (utils.wrap_delimiter(container_2.name),)
        index_url = reverse('horizon:project:containers:index', args=args)
        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 5
0
    def test_update_with_file(self):
        container = self.containers.first()
        obj = self.objects.first()
        OBJECT_DATA = 'objectData'

        temp_file = tempfile.TemporaryFile()
        temp_file.write(OBJECT_DATA)
        temp_file.flush()
        temp_file.seek(0)

        api.swift.swift_upload_object(IsA(http.HttpRequest),
                                      container.name,
                                      obj.name,
                                      IsA(InMemoryUploadedFile)).AndReturn(obj)
        self.mox.ReplayAll()

        update_url = reverse('horizon:project:containers:object_update',
                             args=[container.name, obj.name])

        res = self.client.get(update_url)
        self.assertTemplateUsed(res, 'project/containers/update.html')
        self.assertContains(res, 'enctype="multipart/form-data"')
        self._test_invalid_paths(res)

        formData = {'method': forms.UpdateObject.__name__,
                    'container_name': container.name,
                    'name': obj.name,
                    'object_file': temp_file}
        res = self.client.post(update_url, formData)

        args = (utils.wrap_delimiter(container.name),)
        index_url = reverse('horizon:project:containers:index', args=args)
        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 6
0
    def test_create_pseudo_folder(self):
        container = self.containers.first()
        obj = self.objects.first()

        api.swift.swift_create_pseudo_folder(IsA(http.HttpRequest),
                                             container.name,
                                             obj.name + "/").AndReturn(obj)
        self.mox.ReplayAll()

        create_pseudo_folder_url = reverse('horizon:project:containers:'
                                           'create_pseudo_folder',
                                           args=[container.name])

        res = self.client.get(create_pseudo_folder_url)
        self.assertTemplateUsed(res,
                                'project/containers/create_pseudo_folder.html')
        self._test_invalid_paths(res)

        formData = {'method': forms.CreatePseudoFolder.__name__,
                    'container_name': container.name,
                    'name': obj.name}
        res = self.client.post(create_pseudo_folder_url, formData)

        index_url = reverse('horizon:project:containers:index',
                            args=[utils.wrap_delimiter(container.name)])

        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 7
0
    def test_copy(self):
        container_1 = self.containers.get(name=CONTAINER_NAME_1)
        container_2 = self.containers.get(name=CONTAINER_NAME_2)
        obj = self.objects.first()

        ret = (self.containers.list(), False)
        api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
        api.swift.swift_copy_object(IsA(http.HttpRequest),
                                    container_1.name,
                                    obj.name,
                                    container_2.name,
                                    obj.name)
        self.mox.ReplayAll()

        formData = {'method': forms.CopyObject.__name__,
                    'new_container_name': container_2.name,
                    'new_object_name': obj.name,
                    'orig_container_name': container_1.name,
                    'orig_object_name': obj.name}
        copy_url = reverse('horizon:project:containers:object_copy',
                           args=[container_1.name, obj.name])
        res = self.client.post(copy_url, formData)
        args = (utils.wrap_delimiter(container_2.name),)
        index_url = reverse('horizon:project:containers:index', args=args)
        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 8
0
    def test_update_with_file(self):
        container = self.containers.first()
        obj = self.objects.first()
        OBJECT_DATA = 'objectData'

        temp_file = tempfile.TemporaryFile()
        temp_file.write(OBJECT_DATA)
        temp_file.flush()
        temp_file.seek(0)

        api.swift.swift_upload_object(IsA(http.HttpRequest),
                                      container.name,
                                      obj.name,
                                      IsA(InMemoryUploadedFile)).AndReturn(obj)
        self.mox.ReplayAll()

        update_url = reverse('horizon:project:containers:object_update',
                             args=[container.name, obj.name])

        res = self.client.get(update_url)
        self.assertTemplateUsed(res, 'project/containers/update.html')
        self.assertContains(res, 'enctype="multipart/form-data"')
        self._test_invalid_paths(res)

        formData = {'method': forms.UpdateObject.__name__,
                    'container_name': container.name,
                    'name': obj.name,
                    'object_file': temp_file}
        res = self.client.post(update_url, formData)

        args = (utils.wrap_delimiter(container.name),)
        index_url = reverse('horizon:project:containers:index', args=args)
        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 9
0
 def get_success_url(self):
     parent = self.request.POST.get("parent", None)
     if parent:
         container, slash, remainder = parent.partition(swift.FOLDER_DELIMITER)
         args = (utils.wrap_delimiter(container), utils.wrap_delimiter(remainder))
         return reverse(self.success_url, args=args)
     else:
         container = utils.wrap_delimiter(self.request.POST["name"])
         return reverse(self.success_url, args=[container])
Ejemplo n.º 10
0
 def get_success_url(self):
     parent = self.request.POST.get('parent', None)
     if parent:
         container, slash, remainder = parent.partition(
             swift.FOLDER_DELIMITER)
         args = (utils.wrap_delimiter(container),
                 utils.wrap_delimiter(remainder))
         return reverse(self.success_url, args=args)
     else:
         container = utils.wrap_delimiter(self.request.POST['name'])
         return reverse(self.success_url, args=[container])
Ejemplo n.º 11
0
    def test_create_container_post(self):
        for container in self.containers.list():
            self.mox.ResetAll()  # mandatory in a for loop
            api.swift.swift_create_container(IsA(http.HttpRequest), container.name, metadata=({"is_public": False}))
            self.mox.ReplayAll()

            formData = {"name": container.name, "access": "private", "method": forms.CreateContainer.__name__}
            res = self.client.post(reverse("horizon:project:containers:create"), formData)
            args = (utils.wrap_delimiter(container.name),)
            url = reverse("horizon:project:containers:index", args=args)
            self.assertRedirectsNoFollow(res, url)
Ejemplo n.º 12
0
    def test_create_container_post(self):
        for container in self.containers.list():
            self.mox.ResetAll()  # mandatory in a for loop
            api.swift.swift_create_container(IsA(http.HttpRequest),
                                             container.name,
                                             metadata=({'is_public': False}))
            self.mox.ReplayAll()

            formData = {'name': container.name,
                        'access': "private",
                        'method': forms.CreateContainer.__name__}
            res = self.client.post(
                reverse('horizon:project:containers:create'), formData)
            args = (utils.wrap_delimiter(container.name),)
            url = reverse('horizon:project:containers:index', args=args)
            self.assertRedirectsNoFollow(res, url)
Ejemplo n.º 13
0
def object_download(request, container_name, object_path):
    try:
        obj = api.swift.swift_get_object(request,
                                         container_name,
                                         object_path,
                                         resp_chunk_size=swift.CHUNK_SIZE)
    except Exception:
        redirect = reverse("horizon:project:containers:index")
        exceptions.handle(request,
                          _("Unable to retrieve object."),
                          redirect=redirect)
    # Add the original file extension back on if it wasn't preserved in the
    # name given to the object.
    filename = object_path.rsplit(swift.FOLDER_DELIMITER)[-1]
    if not os.path.splitext(obj.name)[1] and obj.orig_name:
        name, ext = os.path.splitext(obj.orig_name)
        filename = "%s%s" % (filename, ext)
    # NOTE(tsufiev): StreamingHttpResponse class had been introduced in
    # Django 1.5 specifically for the purpose streaming and/or transferring
    # large files, it's less fragile than standard HttpResponse and should be
    # used when available.
    if django.VERSION >= (1, 5):
        response = http.StreamingHttpResponse(obj.data)
    else:
        response = http.HttpResponse(obj.data)
    safe_name = filename.replace(",", "").encode('utf-8')
    response['Content-Disposition'] = 'attachment; filename="%s"' % safe_name
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Length'] = obj.bytes
    return response
Ejemplo n.º 14
0
    def test_download(self):
        for container in self.containers.list():
            for obj in self.objects.list():
                self.mox.ResetAll()  # mandatory in a for loop
                api.swift.swift_get_object(IsA(http.HttpRequest),
                                           container.name,
                                           obj.name).AndReturn(obj)
                self.mox.ReplayAll()

                download_url = reverse(
                    'horizon:project:containers:object_download',
                    args=[container.name, obj.name])
                res = self.client.get(download_url)
                self.assertEqual(res.content, obj.data)
                self.assertTrue(res.has_header('Content-Disposition'))
                self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
                self.assertNotContains(res, INVALID_CONTAINER_NAME_2)

                # Check that the returned Content-Disposition filename is well
                # surrounded by double quotes and with commas removed
                expected_name = '"%s"' % obj.name.replace(
                    ',', '').encode('utf-8')
                self.assertEqual(
                    res.get('Content-Disposition'),
                    'attachment; filename=%s' % expected_name
                )
Ejemplo n.º 15
0
    def test_download(self):
        for container in self.containers.list():
            for obj in self.objects.list():
                self.mox.ResetAll()  # mandatory in a for loop
                obj = copy.copy(obj)
                _data = obj.data

                def make_iter():
                    yield _data

                obj.data = make_iter()
                api.swift.swift_get_object(
                    IsA(http.HttpRequest), container.name, obj.name, resp_chunk_size=api.swift.CHUNK_SIZE
                ).AndReturn(obj)
                self.mox.ReplayAll()

                download_url = reverse("horizon:project:containers:object_download", args=[container.name, obj.name])
                res = self.client.get(download_url)

                self.assertTrue(res.has_header("Content-Disposition"))
                if django.VERSION >= (1, 5):
                    self.assertEqual(b"".join(res.streaming_content), _data)
                    self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
                    self.assertNotContains(res, INVALID_CONTAINER_NAME_2)
                else:
                    self.assertEqual(res.content, _data)
                    self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
                    self.assertNotContains(res, INVALID_CONTAINER_NAME_2)

                # Check that the returned Content-Disposition filename is well
                # surrounded by double quotes and with commas removed
                expected_name = '"%s"' % obj.name.replace(",", "").encode("utf-8")
                self.assertEqual(res.get("Content-Disposition"), "attachment; filename=%s" % expected_name)
Ejemplo n.º 16
0
    def test_index_container_selected(self):
        containers = (self.containers.list(), False)
        ret = (self.objects.list(), False)
        api.swift.swift_get_containers(IsA(http.HttpRequest),
                                       marker=None).AndReturn(containers)
        api.swift.swift_get_objects(IsA(http.HttpRequest),
                                    self.containers.first().name,
                                    marker=None,
                                    prefix=None).AndReturn(ret)
        self.mox.ReplayAll()

        container_name = self.containers.first().name
        res = self.client.get(
            reverse('horizon:project:containers:index',
                    args=[utils.wrap_delimiter(container_name)]))
        self.assertTemplateUsed(res, 'project/containers/index.html')
        # UTF8 encoding here to ensure there aren't problems with Nose output.
        expected = [obj.name.encode('utf8') for obj in self.objects.list()]
        self.assertQuerysetEqual(res.context['objects_table'].data,
                                 expected,
                                 lambda obj: obj.name.encode('utf8'))
        # Check if the two forms' URL are properly 'urlquote()d'.
        form_action = ' action="%s%s/" ' % (CONTAINER_INDEX_URL,
                                            CONTAINER_NAME_1_QUOTED)
        self.assertContains(res, form_action, count=2)
        self._test_invalid_paths(res)
Ejemplo n.º 17
0
    def test_index_container_selected(self):
        containers = (self.containers.list(), False)
        ret = (self.objects.list(), False)
        api.swift.swift_get_containers(IsA(http.HttpRequest),
                                       marker=None).AndReturn(containers)
        api.swift.swift_get_objects(IsA(http.HttpRequest),
                                    self.containers.first().name,
                                    marker=None,
                                    prefix=None).AndReturn(ret)
        self.mox.ReplayAll()

        container_name = self.containers.first().name
        res = self.client.get(
            reverse('horizon:project:containers:index',
                    args=[utils.wrap_delimiter(container_name)]))
        self.assertTemplateUsed(res, 'project/containers/index.html')
        # UTF8 encoding here to ensure there aren't problems with Nose output.
        expected = [obj.name.encode('utf8') for obj in self.objects.list()]
        self.assertQuerysetEqual(res.context['objects_table'].data,
                                 expected,
                                 lambda obj: obj.name.encode('utf8'))
        # Check if the two forms' URL are properly 'urlquote()d'.
        form_action = ' action="%s%s/" ' % (CONTAINER_INDEX_URL,
                                            CONTAINER_NAME_1_QUOTED)
        self.assertContains(res, form_action, count=2)
        self._test_invalid_paths(res)
Ejemplo n.º 18
0
    def test_create_container_post(self):
        for container in self.containers.list():
            self.mox.ResetAll()  # mandatory in a for loop
            api.swift.swift_create_container(IsA(http.HttpRequest),
                                             container.name,
                                             metadata=({'is_public': False}))
            self.mox.ReplayAll()

            formData = {'name': container.name,
                        'access': "private",
                        'method': forms.CreateContainer.__name__}
            res = self.client.post(
                reverse('horizon:sdscontroller:containers:create'), formData)
            args = (utils.wrap_delimiter(container.name),)
            url = reverse('horizon:sdscontroller:containers:index', args=args)
            self.assertRedirectsNoFollow(res, url)
Ejemplo n.º 19
0
def object_download(request, container_name, object_path):
    try:
        obj = api.swift.swift_get_object(request, container_name, object_path, resp_chunk_size=swift.CHUNK_SIZE)
    except Exception:
        redirect = reverse("horizon:project:containers:index")
        exceptions.handle(request, _("Unable to retrieve object."), redirect=redirect)
    # Add the original file extension back on if it wasn't preserved in the
    # name given to the object.
    filename = object_path.rsplit(swift.FOLDER_DELIMITER)[-1]
    if not os.path.splitext(obj.name)[1] and obj.orig_name:
        name, ext = os.path.splitext(obj.orig_name)
        filename = "%s%s" % (filename, ext)
    # NOTE(tsufiev): StreamingHttpResponse class had been introduced in
    # Django 1.5 specifically for the purpose streaming and/or transferring
    # large files, it's less fragile than standard HttpResponse and should be
    # used when available.
    if django.VERSION >= (1, 5):
        response = http.StreamingHttpResponse(obj.data)
    else:
        response = http.HttpResponse(obj.data)
    safe_name = filename.replace(",", "").encode("utf-8")
    response["Content-Disposition"] = 'attachment; filename="%s"' % safe_name
    response["Content-Type"] = "application/octet-stream"
    response["Content-Length"] = obj.bytes
    return response
Ejemplo n.º 20
0
 def get_object(self):
     try:
         return api.swift.swift_get_object(
             self.request, self.kwargs["container_name"], self.kwargs["object_path"], with_data=False
         )
     except Exception:
         redirect = reverse("horizon:project:containers:index")
         exceptions.handle(self.request, _("Unable to retrieve details."), redirect=redirect)
Ejemplo n.º 21
0
def invalid_paths():
    if not INVALID_PATHS:
        for x in (CONTAINER_NAME_1_QUOTED, CONTAINER_NAME_2_QUOTED):
            y = reverse("horizon:project:containers:index", args=(utils.wrap_delimiter(x),))
            INVALID_PATHS.append(y)
        for x in (CONTAINER_NAME_1, CONTAINER_NAME_2):
            INVALID_PATHS.append(CONTAINER_INDEX_URL + x)
    return INVALID_PATHS
Ejemplo n.º 22
0
 def get_object(self):
     j_id = self.kwargs["job_id"]
     try:
         return saharaclient.job_get(self.request, j_id)
     except Exception:
         msg = _('Unable to retrieve details for job template "%s".') % j_id
         redirect = reverse("horizon:project:data_processing.jobs:jobs")
         exceptions.handle(self.request, msg, redirect=redirect)
Ejemplo n.º 23
0
 def get_link_url(self, datum=None):
     # Usable for both the container and object tables
     if getattr(datum, 'container', datum):
         container_name = http.urlquote(datum.name)
     else:
         container_name = self.table.kwargs['container_name']
     subfolders = self.table.kwargs.get('subfolder_path', '')
     args = (bit for bit in (container_name, subfolders) if bit)
     return reverse(self.url, args=args)
Ejemplo n.º 24
0
 def get_object(self):
     j_id = self.kwargs["job_id"]
     try:
         return saharaclient.job_get(self.request, j_id)
     except Exception:
         msg = _('Unable to retrieve details for job template "%s".') % j_id
         redirect = reverse(
             "horizon:project:data_processing.jobs:jobs")
         exceptions.handle(self.request, msg, redirect=redirect)
Ejemplo n.º 25
0
 def get_link_url(self, datum=None):
     # Usable for both the container and object tables
     if getattr(datum, 'container', datum):
         container_name = http.urlquote(datum.name)
     else:
         container_name = self.table.kwargs['container_name']
     subfolders = self.table.kwargs.get('subfolder_path', '')
     args = (bit for bit in (container_name, subfolders) if bit)
     return reverse(self.url, args=args)
Ejemplo n.º 26
0
 def get_form_kwargs(self):
     kwargs = super(CopyView, self).get_form_kwargs()
     try:
         containers = api.swift.swift_get_containers(self.request)
     except Exception:
         redirect = reverse("horizon:project:containers:index")
         exceptions.handle(self.request, _("Unable to list containers."), redirect=redirect)
     kwargs["containers"] = [(c.name, c.name) for c in containers[0]]
     return kwargs
Ejemplo n.º 27
0
 def get_object(self):
     cl_id = self.kwargs["cluster_id"]
     try:
         return saharaclient.cluster_get(self.request, cl_id)
     except Exception:
         msg = _('Unable to retrieve details for cluster "%s".') % cl_id
         redirect = reverse(
             "horizon:project:data_processing.clusters:clusters")
         exceptions.handle(self.request, msg, redirect=redirect)
Ejemplo n.º 28
0
def invalid_paths():
    if not INVALID_PATHS:
        for x in (CONTAINER_NAME_1_QUOTED, CONTAINER_NAME_2_QUOTED):
            y = reverse('horizon:project:containers:index',
                        args=(utils.wrap_delimiter(x), ))
            INVALID_PATHS.append(y)
        for x in (CONTAINER_NAME_1, CONTAINER_NAME_2):
            INVALID_PATHS.append(CONTAINER_INDEX_URL + x)
    return INVALID_PATHS
Ejemplo n.º 29
0
 def get_object(self):
     ds_id = self.kwargs["data_source_id"]
     try:
         return saharaclient.data_source_get(self.request, ds_id)
     except Exception:
         msg = _('Unable to retrieve details for data source "%s".') % ds_id
         redirect = reverse(
             "horizon:project:data_processing.data_sources:data-sources")
         exceptions.handle(self.request, msg, redirect=redirect)
Ejemplo n.º 30
0
 def get_object(self):
     cl_id = self.kwargs["cluster_id"]
     try:
         return saharaclient.cluster_get(self.request, cl_id)
     except Exception:
         msg = _('Unable to retrieve details for cluster "%s".') % cl_id
         redirect = reverse(
             "horizon:project:data_processing.clusters:clusters")
         exceptions.handle(self.request, msg, redirect=redirect)
Ejemplo n.º 31
0
    def handle(self, request, context):
        try:
            freezer_api.Session(request).add_job(context['session_id'],
                                                 context['job_id'])

            return reverse("horizon:disaster_recovery:jobs:index")
        except Exception:
            exceptions.handle(request)
            return False
Ejemplo n.º 32
0
 def get_object(self):
     ct_id = self.kwargs["template_id"]
     try:
         return saharaclient.cluster_template_get(self.request, ct_id)
     except Exception:
         msg = _('Unable to retrieve details for '
                 'cluster template "%s".') % ct_id
         redirect = reverse("horizon:project:data_processing."
                            "cluster_templates:cluster-templates")
         exceptions.handle(self.request, msg, redirect=redirect)
Ejemplo n.º 33
0
 def handle(self, request, context):
     try:
         if context["session_id"] != "":
             freezer_api.Session(request).update(context, context["session_id"])
         else:
             freezer_api.Session(request).create(context)
         return reverse("horizon:disaster_recovery:sessions:index")
     except Exception:
         exceptions.handle(request)
         return False
Ejemplo n.º 34
0
 def get_object(self):
     ct_id = self.kwargs["template_id"]
     try:
         return saharaclient.cluster_template_get(self.request, ct_id)
     except Exception:
         msg = _('Unable to retrieve details for '
                 'cluster template "%s".') % ct_id
         redirect = reverse("horizon:project:data_processing."
                            "cluster_templates:cluster-templates")
         exceptions.handle(self.request, msg, redirect=redirect)
Ejemplo n.º 35
0
 def get_object(self):
     try:
         return api.swift.swift_get_container(self.request,
                                              self.kwargs["container_name"],
                                              with_data=False)
     except Exception:
         redirect = reverse("horizon:project:containers:index")
         exceptions.handle(self.request,
                           _('Unable to retrieve details.'),
                           redirect=redirect)
Ejemplo n.º 36
0
    def test_update_without_file(self):
        container = self.containers.first()
        obj = self.objects.first()

        self.mox.ReplayAll()

        update_url = reverse("horizon:project:containers:object_update", args=[container.name, obj.name])

        res = self.client.get(update_url)
        self.assertTemplateUsed(res, "project/containers/update.html")
        self.assertContains(res, 'enctype="multipart/form-data"')
        self._test_invalid_paths(res)

        formData = {"method": forms.UpdateObject.__name__, "container_name": container.name, "name": obj.name}
        res = self.client.post(update_url, formData)

        args = (utils.wrap_delimiter(container.name),)
        index_url = reverse("horizon:project:containers:index", args=args)
        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 37
0
 def get_object(self):
     ngt_id = self.kwargs["template_id"]
     try:
         return saharaclient.nodegroup_template_get(self.request, ngt_id)
     except Exception:
         msg = _('Unable to retrieve details for '
                 'node group template "%s".') % ngt_id
         redirect = reverse("horizon:project:data_processing."
                            "nodegroup_templates:nodegroup-templates")
         exceptions.handle(self.request, msg, redirect=redirect)
Ejemplo n.º 38
0
 def get_object(self):
     ngt_id = self.kwargs["template_id"]
     try:
         return saharaclient.nodegroup_template_get(self.request, ngt_id)
     except Exception:
         msg = _('Unable to retrieve details for '
                 'node group template "%s".') % ngt_id
         redirect = reverse("horizon:project:data_processing."
                            "nodegroup_templates:nodegroup-templates")
         exceptions.handle(self.request, msg, redirect=redirect)
Ejemplo n.º 39
0
 def get_link_url(self, datum=None):
     # Usable for both the container and object tables
     if getattr(datum, 'container', datum):
         # This is a container
         container_name = datum.name
     else:
         # This is a table action, and we already have the container name
         container_name = self.table.kwargs['container_name']
     subfolders = self.table.kwargs.get('subfolder_path', '')
     args = (bit for bit in (container_name, subfolders) if bit)
     return reverse(self.url, args=args)
Ejemplo n.º 40
0
 def get_form_kwargs(self):
     kwargs = super(CopyView, self).get_form_kwargs()
     try:
         containers = api.swift.swift_get_containers(self.request)
     except Exception:
         redirect = reverse("horizon:project:containers:index")
         exceptions.handle(self.request,
                           _('Unable to list containers.'),
                           redirect=redirect)
     kwargs['containers'] = [(c.name, c.name) for c in containers[0]]
     return kwargs
Ejemplo n.º 41
0
    def test_copy_index(self):
        ret = (self.containers.list(), False)
        api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
        self.mox.ReplayAll()

        res = self.client.get(reverse('horizon:project:containers:object_copy',
                                      args=[self.containers.first().name,
                                            self.objects.first().name]))
        self.assertTemplateUsed(res, 'project/containers/copy.html')
        self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
        self.assertNotContains(res, INVALID_CONTAINER_NAME_2)
Ejemplo n.º 42
0
 def get_link_url(self, datum=None):
     # Usable for both the container and object tables
     if getattr(datum, 'container', datum):
         # This is a container
         container_name = datum.name
     else:
         # This is a table action, and we already have the container name
         container_name = self.table.kwargs['container_name']
     subfolders = self.table.kwargs.get('subfolder_path', '')
     args = (bit for bit in (container_name, subfolders) if bit)
     return reverse(self.url, args=args)
Ejemplo n.º 43
0
    def test_copy_index(self):
        ret = (self.containers.list(), False)
        api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
        self.mox.ReplayAll()

        res = self.client.get(reverse('horizon:project:containers:object_copy',
                                      args=[self.containers.first().name,
                                            self.objects.first().name]))
        self.assertTemplateUsed(res, 'project/containers/copy.html')
        self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
        self.assertNotContains(res, INVALID_CONTAINER_NAME_2)
Ejemplo n.º 44
0
    def test_clients_get(self, client_mock):
        client_mock.Client().registration.list.return_value = [self.CLIENT_1]
        url = reverse("horizon:freezer_ui:api_clients")

        res = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest')

        self.assertEqual(200, res.status_code)
        self.assertEqual('application/json', res['content-type'])
        self.assertEqual(self.JSON_PREFIX + json.dumps([self.CLIENT_1]),
                         res.content)
        # there is no get ALL api at the moment, so we just fetch a big number
        client_mock.Client().registration.list.assert_called_once_with(
            limit=9999)
Ejemplo n.º 45
0
    def test_view_container(self):
        for container in self.containers.list():
            self.mox.ResetAll()  # mandatory in a for loop
            api.swift.swift_get_container(IsA(http.HttpRequest), container.name, with_data=False).AndReturn(container)
            self.mox.ReplayAll()

            view_url = reverse("horizon:project:containers:container_detail", args=[container.name])
            res = self.client.get(view_url)

            self.assertTemplateUsed(res, "project/containers/container_detail.html")
            self.assertContains(res, container.name, 1, 200)
            self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
            self.assertNotContains(res, INVALID_CONTAINER_NAME_2)
Ejemplo n.º 46
0
    def test_update_without_file(self):
        container = self.containers.first()
        obj = self.objects.first()

        self.mox.ReplayAll()

        update_url = reverse('horizon:project:containers:object_update',
                             args=[container.name, obj.name])

        res = self.client.get(update_url)
        self.assertTemplateUsed(res, 'project/containers/update.html')
        self.assertContains(res, 'enctype="multipart/form-data"')
        self._test_invalid_paths(res)

        formData = {'method': forms.UpdateObject.__name__,
                    'container_name': container.name,
                    'name': obj.name}
        res = self.client.post(update_url, formData)

        args = (utils.wrap_delimiter(container.name),)
        index_url = reverse('horizon:project:containers:index', args=args)
        self.assertRedirectsNoFollow(res, index_url)
Ejemplo n.º 47
0
    def test_view_object(self):
        for container in self.containers.list():
            for obj in self.objects.list():
                self.mox.ResetAll()  # mandatory in a for loop
                api.swift.swift_get_object(IsA(http.HttpRequest), container.name, obj.name, with_data=False).AndReturn(
                    obj
                )
                self.mox.ReplayAll()
                view_url = reverse("horizon:project:containers:object_detail", args=[container.name, obj.name])
                res = self.client.get(view_url)

                self.assertTemplateUsed(res, "project/containers/object_detail.html")
                self.assertContains(res, obj.name, 1, 200)
                self._test_invalid_paths(res)
Ejemplo n.º 48
0
    def test_delete_pseudo_folder(self):
        container = self.containers.first()
        folder = self.folder.first()
        args = (utils.wrap_delimiter(container.name),)
        index_url = reverse("horizon:project:containers:index", args=args)
        api.swift.swift_delete_object(IsA(http.HttpRequest), container.name, folder.name + "/")
        self.mox.ReplayAll()

        action_string = "objects__delete_object__%s/%s" % (container.name, folder.name)
        form_data = {"action": action_string}
        req = self.factory.post(index_url, form_data)
        kwargs = {"container_name": container.name}
        table = tables.ObjectsTable(req, self.folder.list(), **kwargs)
        handled = table.maybe_handle()
        self.assertEqual(handled["location"], index_url)
Ejemplo n.º 49
0
    def test_delete(self):
        container = self.containers.first()
        obj = self.objects.first()
        args = (tables.wrap_delimiter(container.name), )
        index_url = reverse('horizon:project:containers:index', args=args)
        api.swift.swift_delete_object(IsA(http.HttpRequest), container.name,
                                      obj.name)
        self.mox.ReplayAll()

        action_string = "objects__delete_object__%s" % obj.name
        form_data = {"action": action_string}
        req = self.factory.post(index_url, form_data)
        kwargs = {"container_name": container.name}
        table = tables.ObjectsTable(req, self.objects.list(), **kwargs)
        handled = table.maybe_handle()
        self.assertEqual(handled['location'], index_url)
Ejemplo n.º 50
0
 def test_copy_get(self):
     original_name = u"test.txt"
     copy_name = u"test.copy.txt"
     container = self.containers.first()
     obj = self.objects.get(name=original_name)
     ret = (self.containers.list(), False)
     api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
     self.mox.ReplayAll()
     copy_url = reverse('horizon:project:containers:object_copy',
                        args=[container.name, obj.name])
     res = self.client.get(copy_url)
     # The copy's name must appear in initial data
     pattern = ('<input id="id_new_object_name" value="%s" '
                'name="new_object_name" type="text" '
                'class="form-control" maxlength="255" />' % copy_name)
     self.assertContains(res, pattern, html=True)
Ejemplo n.º 51
0
 def test_copy_get(self):
     original_name = u"test.txt"
     copy_name = u"test.copy.txt"
     container = self.containers.first()
     obj = self.objects.get(name=original_name)
     ret = (self.containers.list(), False)
     api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
     self.mox.ReplayAll()
     copy_url = reverse('horizon:project:containers:object_copy',
                        args=[container.name, obj.name])
     res = self.client.get(copy_url)
     # The copy's name must appear in initial data
     pattern = ('<input id="id_new_object_name" value="%s" '
                'name="new_object_name" type="text" '
                'class="form-control" maxlength="255" />' % copy_name)
     self.assertContains(res, pattern, html=True)
Ejemplo n.º 52
0
    def test_view_object(self):
        for container in self.containers.list():
            for obj in self.objects.list():
                self.mox.ResetAll()  # mandatory in a for loop
                api.swift.swift_get_object(IsA(http.HttpRequest),
                                           container.name,
                                           obj.name,
                                           with_data=False) \
                    .AndReturn(obj)
                self.mox.ReplayAll()
                view_url = reverse('horizon:project:containers:object_detail',
                                   args=[container.name, obj.name])
                res = self.client.get(view_url)

                self.assertTemplateUsed(
                    res, 'project/containers/object_detail.html')
                self.assertContains(res, obj.name, 1, 200)
                self._test_invalid_paths(res)
Ejemplo n.º 53
0
    def test_view_container(self):
        for container in self.containers.list():
            self.mox.ResetAll()  # mandatory in a for loop
            api.swift.swift_get_container(IsA(http.HttpRequest),
                                          container.name,
                                          with_data=False) \
                .AndReturn(container)
            self.mox.ReplayAll()

            view_url = reverse('horizon:project:containers:container_detail',
                               args=[container.name])
            res = self.client.get(view_url)

            self.assertTemplateUsed(res,
                                    'project/containers/container_detail.html')
            self.assertContains(res, container.name, 1, 200)
            self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
            self.assertNotContains(res, INVALID_CONTAINER_NAME_2)
Ejemplo n.º 54
0
    def test_download(self):
        for container in self.containers.list():
            for obj in self.objects.list():
                self.mox.ResetAll()  # mandatory in a for loop
                obj = copy.copy(obj)
                _data = obj.data

                def make_iter():
                    yield _data

                obj.data = make_iter()
                api.swift.swift_get_object(
                    IsA(http.HttpRequest),
                    container.name,
                    obj.name,
                    resp_chunk_size=api.swift.CHUNK_SIZE).AndReturn(obj)
                self.mox.ReplayAll()

                download_url = reverse(
                    'horizon:project:containers:object_download',
                    args=[container.name, obj.name])
                res = self.client.get(download_url)

                self.assertTrue(res.has_header('Content-Disposition'))
                if django.VERSION >= (1, 5):
                    self.assertEqual(b''.join(res.streaming_content), _data)
                    self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
                    self.assertNotContains(res, INVALID_CONTAINER_NAME_2)
                else:
                    self.assertEqual(res.content, _data)
                    self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
                    self.assertNotContains(res, INVALID_CONTAINER_NAME_2)

                # Check that the returned Content-Disposition filename is well
                # surrounded by double quotes and with commas removed
                expected_name = '"%s"' % obj.name.replace(',', '')
                if six.PY2:
                    expected_name = expected_name.encode('utf-8')
                self.assertEqual(
                    res.get('Content-Disposition'),
                    'attachment; filename=%s' % expected_name
                )
Ejemplo n.º 55
0
def object_download(request, container_name, object_path):
    try:
        obj = api.swift.swift_get_object(request, container_name, object_path)
    except Exception:
        redirect = reverse("horizon:project:containers:index")
        exceptions.handle(request,
                          _("Unable to retrieve object."),
                          redirect=redirect)
    # Add the original file extension back on if it wasn't preserved in the
    # name given to the object.
    filename = object_path.rsplit(swift.FOLDER_DELIMITER)[-1]
    if not os.path.splitext(obj.name)[1] and obj.orig_name:
        name, ext = os.path.splitext(obj.orig_name)
        filename = "%s%s" % (filename, ext)
    response = http.HttpResponse()
    safe_name = filename.replace(",", "").encode('utf-8')
    response['Content-Disposition'] = 'attachment; filename="%s"' % safe_name
    response['Content-Type'] = 'application/octet-stream'
    response.write(obj.data)
    return response
Ejemplo n.º 56
0
    def test_download(self):
        for container in self.containers.list():
            for obj in self.objects.list():
                self.mox.ResetAll()  # mandatory in a for loop
                api.swift.swift_get_object(IsA(http.HttpRequest),
                                           container.name,
                                           obj.name).AndReturn(obj)
                self.mox.ReplayAll()

                download_url = reverse(
                    'horizon:project:containers:object_download',
                    args=[container.name, obj.name])
                res = self.client.get(download_url)
                self.assertEqual(res.content, obj.data)
                self.assertTrue(res.has_header('Content-Disposition'))
                self.assertNotContains(res, INVALID_CONTAINER_NAME_1)
                self.assertNotContains(res, INVALID_CONTAINER_NAME_2)

                # Check that the returned Content-Disposition filename is well
                # surrounded by double quotes and with commas removed
                expected_name = '"%s"' % obj.name.replace(',',
                                                          '').encode('utf-8')
                self.assertEqual(res.get('Content-Disposition'),
                                 'attachment; filename=%s' % expected_name)
Ejemplo n.º 57
0
 def get_link_url(self, datum):
     return reverse("horizon:freezer_ui:sessions:attach",
                    kwargs={'job_id': datum.job_id})
Ejemplo n.º 58
0
def get_link(session):
    return reverse('horizon:freezer_ui:sessions:index',
                   kwargs={'session_id': session.session_id})
Ejemplo n.º 59
0
 def get_link_url(self, datum=None):
     return reverse("horizon:freezer_ui:sessions:edit",
                    kwargs={'session_id': datum.session_id})