Example #1
0
def task_progress_view(request, task_id):
    """Progress view for an asynchronous task"""
    if login_required_if_login_only_mode(request):
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

    default_title = "Please wait..."
    redirect_default = reverse("productdb:home")
    meta_data = get_meta_data_for_task(task_id)

    # title of the progress view
    if "title" in meta_data.keys():
        title = meta_data["title"]
    else:
        title = default_title

    # redirect after task is completed
    if "redirect_to" in meta_data.keys():
        redirect_to = meta_data["redirect_to"]
        auto_redirect = meta_data.get("auto_redirect", False)

    else:
        logger.warn("Cannot find redirect link to task meta data, use homepage")
        redirect_to = redirect_default
        auto_redirect = False

    context = {
        "task_id": task_id,
        "title": title,
        "redirect_to": redirect_to,
        "auto_redirect": auto_redirect
    }
    return render(request, "django_project/task_progress_view.html", context=context)
Example #2
0
def task_progress_view(request, task_id):
    """
    Progress view for an asynchronous task
    """
    default_title = "Please wait..."
    redirect_default = reverse("productdb:home")
    meta_data = get_meta_data_for_task(task_id)

    # title of the progress view
    if "title" in meta_data.keys():
        title = meta_data["title"]
    else:
        title = default_title

    # redirect after task is completed
    if "redirect_to" in meta_data.keys():
        redirect_to = meta_data["redirect_to"]

    else:
        logger.warn(
            "Cannot find redirect link to task meta data, use homepage")
        redirect_to = redirect_default

    context = {"task_id": task_id, "title": title, "redirect_to": redirect_to}
    return render(request,
                  "django_project/task_progress_view.html",
                  context=context)
Example #3
0
def task_progress_view(request, task_id):
    """Progress view for an asynchronous task"""
    if login_required_if_login_only_mode(request):
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

    default_title = "Please wait..."
    redirect_default = reverse("productdb:home")
    meta_data = get_meta_data_for_task(task_id)

    # title of the progress view
    if "title" in meta_data.keys():
        title = meta_data["title"]
    else:
        title = default_title

    # redirect after task is completed
    if "redirect_to" in meta_data.keys():
        redirect_to = meta_data["redirect_to"]
        auto_redirect = meta_data.get("auto_redirect", False)

    else:
        logger.warn(
            "Cannot find redirect link to task meta data, use homepage")
        redirect_to = redirect_default
        auto_redirect = False

    context = {
        "task_id": task_id,
        "title": title,
        "redirect_to": redirect_to,
        "auto_redirect": auto_redirect
    }
    return render(request,
                  "django_project/task_progress_view.html",
                  context=context)
Example #4
0
def task_progress_view(request, task_id):
    """
    Progress view for an asynchronous task
    """
    default_title = "Please wait..."
    redirect_default = reverse("productdb:home")
    meta_data = get_meta_data_for_task(task_id)

    # title of the progress view
    if "title" in meta_data.keys():
        title = meta_data["title"]
    else:
        title = default_title

    # redirect after task is completed
    if "redirect_to" in meta_data.keys():
        redirect_to = meta_data["redirect_to"]

    else:
        logger.warn("Cannot find redirect link to task meta data, use homepage")
        redirect_to = redirect_default

    context = {
        "task_id": task_id,
        "title": title,
        "redirect_to": redirect_to
    }
    return render(request, "django_project/task_progress_view.html", context=context)
    def test_custom_celery_task_meta_data(self):
        # custom meta data are used for the process watch view
        test_task_id = uuid.uuid4()
        test_title = "Custom Title"
        celery.set_meta_data_for_task(test_task_id, test_title)

        result = celery.get_meta_data_for_task(test_task_id)

        assert type(result) is dict
        assert "title" in result
        assert "auto_redirect" in result
        assert "redirect_to" not in result
        assert result["title"] == test_title
        assert result["auto_redirect"] is True
Example #6
0
    def test_custom_celery_task_meta_data(self):
        # custom meta data are used for the process watch view
        test_task_id = uuid.uuid4()
        test_title = "Custom Title"
        celery.set_meta_data_for_task(test_task_id, test_title)

        result = celery.get_meta_data_for_task(test_task_id)

        assert type(result) is dict
        assert "title" in result
        assert "auto_redirect" in result
        assert "redirect_to" not in result
        assert result["title"] == test_title
        assert result["auto_redirect"] is True
    def test_custom_celery_task_meta_data_without_auto_redirect(self):
        # custom meta data are used for the process watch view
        test_task_id = uuid.uuid4()
        test_title = "Custom Title"
        test_redirect = "/productdb/"
        celery.set_meta_data_for_task(test_task_id, test_title, redirect_to=test_redirect, auto_redirect=False)

        result = celery.get_meta_data_for_task(test_task_id)

        assert type(result) is dict
        assert "title" in result
        assert "auto_redirect" in result
        assert "redirect_to" in result
        assert result["title"] == test_title
        assert result["auto_redirect"] is False
        assert result["redirect_to"] == test_redirect
    def test_start_of_task(self, monkeypatch):
        """
        Test the manual schedule of a synchronization process. To avoid a multiple execution, a cache value is set
        after the process is scheduled. This cache value contains the Task ID to monitor the execution process. If
        a task is already executed, the view should redirect to the process view for the Task ID. Furthermore, a
        meta data object for the task should be created
        """
        user = mixer.blend("auth.User", is_superuser=True)

        # ensure that the task process ID is not set
        cache.delete(self.TASK_IDENTIFICATION_CACHE_VALUE)

        # get call to create task (should not run because no task backend is active at this point in time
        url = reverse(self.URL_NAME)
        request = RequestFactory().get(url)
        request.user = user
        response = views.start_cisco_eox_api_sync_now(request)

        assert response.status_code == 302
        assert response.url == "/productdb/task/mock_task_id"
        assert get_meta_data_for_task(task_id="mock_task_id") == {
            "auto_redirect": False,
            "redirect_to": "/productdb/config/status/",
            "title": "Synchronize local database with Cisco EoX API"
        }

        # mock task schedule to raise an exception if called (verify that really the redirect works)
        def raise_exception():
            raise Exception("should never happen")

        monkeypatch.setattr(
            tasks.execute_task_to_synchronize_cisco_eox_states,
            "delay",
            lambda ignore_periodic_sync_flag: raise_exception()
        )

        # verify redirect
        url = reverse(self.URL_NAME)
        request = RequestFactory().get(url)
        request.user = user
        response = views.start_cisco_eox_api_sync_now(request)

        assert response.status_code == 302
        assert response.url == "/productdb/task/mock_task_id"
Example #9
0
    def test_custom_celery_task_meta_data_without_auto_redirect(self):
        # custom meta data are used for the process watch view
        test_task_id = uuid.uuid4()
        test_title = "Custom Title"
        test_redirect = "/productdb/"
        celery.set_meta_data_for_task(test_task_id,
                                      test_title,
                                      redirect_to=test_redirect,
                                      auto_redirect=False)

        result = celery.get_meta_data_for_task(test_task_id)

        assert type(result) is dict
        assert "title" in result
        assert "auto_redirect" in result
        assert "redirect_to" in result
        assert result["title"] == test_title
        assert result["auto_redirect"] is False
        assert result["redirect_to"] == test_redirect
    def test_start_of_task(self, monkeypatch):
        """
        Test the manual schedule of a synchronization process. To avoid a multiple execution, a cache value is set
        after the process is scheduled. This cache value contains the Task ID to monitor the execution process. If
        a task is already executed, the view should redirect to the process view for the Task ID. Furthermore, a
        meta data object for the task should be created
        """
        user = mixer.blend("auth.User", is_superuser=True)

        # ensure that the task process ID is not set
        cache.delete(self.TASK_IDENTIFICATION_CACHE_VALUE)

        # get call to create task (should not run because no task backend is active at this point in time
        url = reverse(self.URL_NAME)
        request = RequestFactory().get(url)
        request.user = user
        response = views.start_cisco_eox_api_sync_now(request)

        assert response.status_code == 302
        assert response.url == "/productdb/task/mock_task_id"
        assert get_meta_data_for_task(task_id="mock_task_id") == {
            "auto_redirect": False,
            "redirect_to": "/productdb/config/status/",
            "title": "Synchronize local database with Cisco EoX API"
        }

        # mock task schedule to raise an exception if called (verify that really the redirect works)
        def raise_exception():
            raise Exception("should never happen")

        monkeypatch.setattr(
            tasks.execute_task_to_synchronize_cisco_eox_states, "delay",
            lambda ignore_periodic_sync_flag: raise_exception())

        # verify redirect
        url = reverse(self.URL_NAME)
        request = RequestFactory().get(url)
        request.user = user
        response = views.start_cisco_eox_api_sync_now(request)

        assert response.status_code == 302
        assert response.url == "/productdb/task/mock_task_id"
    def test_get_invalid_task_meta_data(self):
        result = celery.get_meta_data_for_task("invalid id")

        assert result == {}
Example #12
0
    def test_get_invalid_task_meta_data(self):
        result = celery.get_meta_data_for_task("invalid id")

        assert result == {}