示例#1
0
def plots_closest_to_point(request, instance, lat, lng):
    point = Point(float(lng), float(lat), srid=4326)

    try:
        max_plots = int(request.GET.get('max_plots', '1'))

        if max_plots not in xrange(1, 501):
            raise ValueError()
    except ValueError:
        raise HttpBadRequestException(
            'The max_plots parameter must be a number between 1 and 500')

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

    plots = Plot.objects.distance(point)\
                        .filter(instance=instance)\
                        .filter(geom__distance_lte=(point, D(m=distance)))\
                        .order_by('distance')[0:max_plots]

    def ctxt_for_plot(plot):
        return context_dict_for_plot(request, plot)

    return [ctxt_for_plot(plot) for plot in plots]
示例#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.distance(point)
                 .filter(bounds__distance_lte=(point, D(m=distance)))
                 .order_by('distance'))

    # drop non-mobile instances and convert to context dictionary
    contextify = (lambda qs: map(_instance_info_dict,
                                 filter(lambda i:
                                        i.feature_enabled('mobile_apps'),
                                        qs)))

    return {
        'nearby': contextify(instances
                             .filter(is_public=True)
                             .exclude(pk__in=user_instance_ids)
                             [0:max_instances]),
        'personal': contextify(instances.filter(pk__in=user_instance_ids))
    }
示例#3
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 max_instances not in xrange(1, 501):
            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.distance(point)\
        .filter(is_public=True)\
        .exclude(pk__in=user_instance_ids)\
        .filter(bounds__distance_lte=(point, D(m=distance)))\
        .order_by('distance')[0:max_instances]

    my_instances = Instance.objects.distance(point)\
        .filter(pk__in=user_instance_ids)\
        .filter(bounds__distance_lte=(point, D(m=distance)))\
        .order_by('distance')

    return {
        'nearby': [_instance_info_dict(instance) for instance in instances],
        'personal':
        [_instance_info_dict(instance) for instance in my_instances]
    }
示例#4
0
    def wrapper(request, version, *args, **kwargs):
        api_version = int(version)
        if api_version not in API_VERSIONS:
            raise HttpBadRequestException("Version %s is not supported" %
                                          version)

        request.api_version = api_version
        return view_f(request, *args, **kwargs)
示例#5
0
def reset_password(request):
    resetform = PasswordResetForm({"email": request.REQUEST["email"]})

    if (resetform.is_valid()):
        opts = {
            'use_https': request.is_secure(),
            'token_generator': default_token_generator,
            'from_email': None,
            'email_template_name': 'reset_email_password.html',
            'request': request}

        resetform.save(**opts)
        return {"status": "success"}
    else:
        raise HttpBadRequestException()