예제 #1
0
def test_recsys(request, gmac_slug=None):
    """
    Testing recsys view
    """
    from recsys.circuits.circuit_recsys import CircuitRecsys

    # Find GMAC
    gmacs = None
    gmac_id = None
    gmac_get_short_formatted_name = None
    filtered_circuits = None
    if gmac_slug is not None:
        try:
            gmacs = GMAC.objects.filter(slug=gmac_slug)
            filtered_circuits = Circuit.filter_by_gmacs(gmacs)
            gmac_get_short_formatted_name = gmacs[0].get_short_formatted_name()
            gmac_id = gmacs[0].pk
        except GMAC.DoesNotExist:
            pass
        except IndexError:
            pass
    
    categories = circuit_category_list()

    if request.user.is_authenticated():
        # Recsys functionallity
        recsys = CircuitRecsys(request.user.pk)
        if gmac_id is None:
            gmac_id = request.session.get('gmac_id', None)
        if gmac_id is not None:
            recsys.Set_gmac(gmac_id)
        circuits_ids = recsys.Give_me_the_fun(top_n=15)
        circuits = Circuit.objects.filter(id__in=circuits_ids).\
            filter(published=True)

        if filtered_circuits is not None : 
            circuits = [val for val in filtered_circuits if val in circuits]

    else:
        if gmac_id is not None:
            gmac = GMAC.objects.get(pk=gmac_id)
            circuits = Circuit.filter_by_gmac(gmac)
        else:
            # case when gmac is not detected
            cpp = circuit_settings.DEFAULT_CIRCUITS_LIMIT
            circuits=Circuit.objects.all()[:cpp]

    return render(request,
        'circuits/recommendations.html',
        {
            'categories': categories,
            'circuits': circuits,
            'topbar_item': 'explore',
            'page_type': 'recommendation',
            'GOOGLE_API_KEY': settings.GOOGLE_API_KEY,
            'gmac_slug': gmac_slug,
            'gmacs': gmacs,
            'gmac_get_short_formatted_name': gmac_get_short_formatted_name,
        },
    )
예제 #2
0
    def get_circuits(self):
        """
        Returns a Queryset containing the circuits to display on
        CircuitCollection
        """
        limit = self.cleaned_data.get('limit')
        offset = self.cleaned_data.get('offset')
        category = self.cleaned_data.get('category')
        gmac_id = self.cleaned_data.get('gmac_id')
        gmac_slug = self.cleaned_data.get('gmac_slug')

        if limit is None:
            limit = constants.API_DEFAULT_CIRCUITS_LIMIT
        if offset is None:
            offset = constants.API_DEFAULT_CIRCUITS_OFFSET

        # try to filter circuit by GMAC
        if gmac_id is not None:
            gmac = GMAC.objects.get(pk=gmac_id)
            circuits = Circuit.filter_by_gmac(gmac)

        # try to filter by gmac_slug
        elif gmac_slug is not None:
            gmacs = GMAC.objects.filter(slug=gmac_slug)
            circuits = Circuit.filter_by_gmacs(gmacs)
        # if not filtered by GMAC then filter by any other criteria
        else:
            circuits = Circuit.objects.all()
            circuits = circuits.order_by('-created')

        if category is not None and len(category)>0:

            if self.category_is_alphanumeric():
                category = CircuitCategory(category)
                category = category.get_value()

            circuits = circuits.filter(category=category)

        return circuits[offset:offset + limit]