Пример #1
0
def instances_closest_to_point(request, lat, lng):
    """
    Get all the info we need about instances near a given point
    Includes only public instances the user does not belong to.
    If a user has been specified instances that user belongs to will
    also be included in a separate list.

    Unlike instance_info, this does not return the field permissions for the
    instance
    """
    user = request.user
    user_instance_ids = []
    if user and not user.is_anonymous():
        user_instance_ids = InstanceUser.objects.filter(user=user)\
                                        .values_list('instance_id', flat=True)\
                                        .distinct()

    point = Point(float(lng), float(lat), srid=4326)

    try:
        max_instances = int(request.GET.get('max', '10'))

        if not (1 <= max_instances <= 500):
            raise ValueError()
    except ValueError:
        raise HttpBadRequestException(
            'The max parameter must be a number between 1 and 500')

    try:
        distance = float(
            request.GET.get('distance', settings.NEARBY_INSTANCE_RADIUS))
    except ValueError:
        raise HttpBadRequestException(
            'The distance parameter must be a number')

    instances = Instance.objects \
                        .filter(get_mobile_instances_filter()) \
                        .distance(point) \
                        .order_by('distance')

    nearby_predicate = Q(bounds__distance_lte=(point, D(m=distance)))
    personal_predicate = Q(pk__in=user_instance_ids)

    return {
        'nearby':
        _contextify_instances(
            instances.filter(is_public=True).filter(nearby_predicate).exclude(
                personal_predicate)[0:max_instances]),
        'personal':
        _contextify_instances(instances.filter(personal_predicate))
    }
Пример #2
0
def instances_closest_to_point(request, lat, lng):
    """
    Get all the info we need about instances near a given point
    Includes only public instances the user does not belong to.
    If a user has been specified instances that user belongs to will
    also be included in a separate list.

    Unlike instance_info, this does not return the field permissions for the
    instance
    """
    user = request.user
    user_instance_ids = []
    if user and not user.is_anonymous():
        user_instance_ids = InstanceUser.objects.filter(user=user)\
                                        .values_list('instance_id', flat=True)\
                                        .distinct()

    point = Point(float(lng), float(lat), srid=4326)

    try:
        max_instances = int(request.GET.get('max', '10'))

        if not (1 <= max_instances <= 500):
            raise ValueError()
    except ValueError:
        raise HttpBadRequestException(
            'The max parameter must be a number between 1 and 500')

    try:
        distance = float(request.GET.get(
            'distance', settings.NEARBY_INSTANCE_RADIUS))
    except ValueError:
        raise HttpBadRequestException(
            'The distance parameter must be a number')

    instances = Instance.objects \
                        .filter(get_mobile_instances_filter()) \
                        .distance(point) \
                        .order_by('distance')

    nearby_predicate = Q(bounds__distance_lte=(point, D(m=distance)))
    personal_predicate = Q(pk__in=user_instance_ids)

    return {
        'nearby': _contextify_instances(instances
                                        .filter(is_public=True)
                                        .filter(nearby_predicate)
                                        .exclude(personal_predicate)
                                        [0:max_instances]),
        'personal': _contextify_instances(instances.filter(personal_predicate))
    }
Пример #3
0
def public_instances(request):
    return _contextify_instances(
        Instance.objects.filter(is_public=True).filter(
            get_mobile_instances_filter()))
Пример #4
0
def public_instances(request):
    return _contextify_instances(Instance.objects
                                 .filter(is_public=True)
                                 .filter(get_mobile_instances_filter()))