Esempio n. 1
0
 def test_all_sorting_options_but(self):
     """Test all_sorting_options_but method"""
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but(
             LoreSortingFields.SORT_BY_NR_VIEWS[0]
         ),
         [
             LoreSortingFields.SORT_BY_NR_ATTEMPTS,
             LoreSortingFields.SORT_BY_AVG_GRADE,
             LoreSortingFields.SORT_BY_TITLE,
         ]
     )
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but(
             LoreSortingFields.SORT_BY_NR_ATTEMPTS[0]
         ),
         [
             LoreSortingFields.SORT_BY_NR_VIEWS,
             LoreSortingFields.SORT_BY_AVG_GRADE,
             LoreSortingFields.SORT_BY_TITLE,
         ]
     )
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but(
             LoreSortingFields.SORT_BY_AVG_GRADE[0]
         ),
         [
             LoreSortingFields.SORT_BY_NR_VIEWS,
             LoreSortingFields.SORT_BY_NR_ATTEMPTS,
             LoreSortingFields.SORT_BY_TITLE,
         ]
     )
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but(
             LoreSortingFields.SORT_BY_TITLE[0]
         ),
         [
             LoreSortingFields.SORT_BY_NR_VIEWS,
             LoreSortingFields.SORT_BY_NR_ATTEMPTS,
             LoreSortingFields.SORT_BY_AVG_GRADE,
         ]
     )
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but('foo_field'),
         [
             LoreSortingFields.SORT_BY_NR_VIEWS,
             LoreSortingFields.SORT_BY_NR_ATTEMPTS,
             LoreSortingFields.SORT_BY_AVG_GRADE,
             LoreSortingFields.SORT_BY_TITLE,
         ]
     )
Esempio n. 2
0
File: views.py Progetto: olabi/lore
def repository_view(request, repo_slug):
    """
    View for repository page.
    """
    try:
        repo = get_repo(repo_slug, request.user.id)
    except NotFound:
        raise Http404
    except LorePermissionDenied:
        raise PermissionDenied

    exports = request.session.get(
        'learning_resource_exports', {}).get(repo.slug, [])

    sortby = dict(request.GET.copy()).get('sortby', [])
    if (len(sortby) > 0 and
            sortby[0] in LoreSortingFields.all_sorting_fields()):
        sortby_field = sortby[0]
    else:
        # default value
        sortby_field = LoreSortingFields.DEFAULT_SORTING_FIELD

    sorting_options = {
        "current": LoreSortingFields.get_sorting_option(
            sortby_field),
        "all": LoreSortingFields.all_sorting_options_but(
            sortby_field)
    }

    try:
        page_size = int(request.GET.get(LorePagination.page_size_query_param))
    except (ValueError, KeyError, TypeError):
        page_size = LorePagination.page_size

    if page_size <= 0:
        page_size = LorePagination.page_size
    elif page_size > LorePagination.max_page_size:
        page_size = LorePagination.max_page_size

    context = {
        "repo": repo,
        "perms_on_cur_repo": get_perms(request.user, repo),
        "sorting_options_json": json.dumps(sorting_options),
        "exports_json": json.dumps(exports),
        "page_size_json": json.dumps(page_size)
    }

    return render(
        request,
        "repository.html",
        context
    )
Esempio n. 3
0
 def test_all_sorting_options_but(self):
     """Test all_sorting_options_but method"""
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but(
             LoreSortingFields.SORT_BY_NR_VIEWS[0]), [
                 LoreSortingFields.SORT_BY_NR_ATTEMPTS,
                 LoreSortingFields.SORT_BY_AVG_GRADE,
                 LoreSortingFields.SORT_BY_TITLE,
             ])
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but(
             LoreSortingFields.SORT_BY_NR_ATTEMPTS[0]), [
                 LoreSortingFields.SORT_BY_NR_VIEWS,
                 LoreSortingFields.SORT_BY_AVG_GRADE,
                 LoreSortingFields.SORT_BY_TITLE,
             ])
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but(
             LoreSortingFields.SORT_BY_AVG_GRADE[0]), [
                 LoreSortingFields.SORT_BY_NR_VIEWS,
                 LoreSortingFields.SORT_BY_NR_ATTEMPTS,
                 LoreSortingFields.SORT_BY_TITLE,
             ])
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but(
             LoreSortingFields.SORT_BY_TITLE[0]), [
                 LoreSortingFields.SORT_BY_NR_VIEWS,
                 LoreSortingFields.SORT_BY_NR_ATTEMPTS,
                 LoreSortingFields.SORT_BY_AVG_GRADE,
             ])
     self.assertEqual(
         LoreSortingFields.all_sorting_options_but('foo_field'), [
             LoreSortingFields.SORT_BY_NR_VIEWS,
             LoreSortingFields.SORT_BY_NR_ATTEMPTS,
             LoreSortingFields.SORT_BY_AVG_GRADE,
             LoreSortingFields.SORT_BY_TITLE,
         ])
Esempio n. 4
0
    def test_sorting_options(self):
        """
        Test presence of sorting options.
        """

        sortby = "nr_views"
        resp = self.client.get("/repositories/{slug}/?sortby={sortby}".format(
            slug=self.repo.slug, sortby=sortby))
        self.assertEqual(
            json.loads(resp.context["sorting_options_json"]), {
                "current":
                list(LoreSortingFields.get_sorting_option(sortby)),
                "all": [
                    list(x)
                    for x in LoreSortingFields.all_sorting_options_but(sortby)
                ]
            })
Esempio n. 5
0
File: views.py Progetto: olabi/lore
def repository_view(request, repo_slug):
    """
    View for repository page.
    """
    try:
        repo = get_repo(repo_slug, request.user.id)
    except NotFound:
        raise Http404
    except LorePermissionDenied:
        raise PermissionDenied

    exports = request.session.get('learning_resource_exports',
                                  {}).get(repo.slug, [])

    sortby = dict(request.GET.copy()).get('sortby', [])
    if (len(sortby) > 0
            and sortby[0] in LoreSortingFields.all_sorting_fields()):
        sortby_field = sortby[0]
    else:
        # default value
        sortby_field = LoreSortingFields.DEFAULT_SORTING_FIELD

    sorting_options = {
        "current": LoreSortingFields.get_sorting_option(sortby_field),
        "all": LoreSortingFields.all_sorting_options_but(sortby_field)
    }

    try:
        page_size = int(request.GET.get(LorePagination.page_size_query_param))
    except (ValueError, KeyError, TypeError):
        page_size = LorePagination.page_size

    if page_size <= 0:
        page_size = LorePagination.page_size
    elif page_size > LorePagination.max_page_size:
        page_size = LorePagination.max_page_size

    context = {
        "repo": repo,
        "perms_on_cur_repo": get_perms(request.user, repo),
        "sorting_options_json": json.dumps(sorting_options),
        "exports_json": json.dumps(exports),
        "page_size_json": json.dumps(page_size)
    }

    return render(request, "repository.html", context)
Esempio n. 6
0
    def extra_context(self):
        """Add to the context."""
        context = super(RepositoryView, self).extra_context()
        params = dict(self.request.GET.copy())
        qs_prefix = "?"
        # Chop out page number so we don't end up with
        # something like ?page=2&page=3&page=4.
        if "page" in params:
            params.pop("page")
        # for the same reason I remove the sorting
        if "sortby" in params:
            params.pop("sortby")
        if len(params) > 0:
            qs_prefix = []
            for key in params.keys():
                qs_prefix.append(
                    "&".join([
                        "{0}={1}".format(key, val)
                        for val in params[key]
                    ])
                )
            qs_prefix = "?{0}&".format("&".join(qs_prefix))

        show_export_button = LearningResource.objects.filter(
            course__repository__id=self.repo.id
        ).exists()

        context.update({
            "repo": self.repo,
            "perms_on_cur_repo": get_perms(self.request.user, self.repo),
            "vocabularies": get_vocabularies(context["facets"]),
            "qs_prefix": qs_prefix,
            "sorting_options": {
                "current": LoreSortingFields.get_sorting_option(
                    self.sortby),
                "all": LoreSortingFields.all_sorting_options_but(
                    self.sortby)
            },
            "exports": self.request.session.get(
                'learning_resource_exports', {}).get(self.repo.slug, []),
            "show_export_button": show_export_button
        })
        return context
Esempio n. 7
0
    def test_sorting_options(self):
        """
        Test presence of sorting options.
        """

        sortby = "nr_views"
        resp = self.client.get(
            "/repositories/{slug}/?sortby={sortby}".format(
                slug=self.repo.slug,
                sortby=sortby
            )
        )
        self.assertEqual(
            json.loads(resp.context["sorting_options_json"]),
            {
                "current": list(LoreSortingFields.get_sorting_option(sortby)),
                "all": [list(x) for x in
                        LoreSortingFields.all_sorting_options_but(sortby)]
            }
        )