Beispiel #1
0
    def businesses_get(request):
        """
        Returns the businesses

        location format = [lng, lat]

        use limit and offset to paginate::

            http://localhost:8000/api/v1/businesses?limit=100&offset=0

        to restrict results withing a distance from a location use lat, lng, distance, and units::

            http://localhost:8000/api/v1/businesses?lng=-73.988395&lat=40.7461666&distance=3


        returns
        =======

        ::

            {
                "businesses": [{
                    "rating": 2.25,
                    "modified": "2015-08-10T00:20:14.370000",
                    "address": {
                        "street1": "Time Square",
                        "postal_code": "",
                        "street2": "",
                        "city": "New York",
                        "state": "NY"
                    },
                    "id": "55c7ee3efad9b43993d7190f",
                    "location": [
                        -73.985131,
                        40.758895
                    ],
                    "tags": [
                        "hello",
                        "world",
                        "example",
                        "awesome"
                    ],
                    "name": "Time Square",
                    "created": "2015-08-10T00:20:13.760000"
                }],
                "count": 1
            }
        """
        location = []
        lat = request.validated['lat']
        lng = request.validated['lng']
        distance = request.validated['distance']
        units = request.validated['units']
        limit = request.validated['limit']
        offset = request.validated['offset']

        # set location only if both lat and lng
        if lat and lng:
            location = [lng, lat]

        businesses = Business.businesses(location=location, distance=distance, units=units, limit=limit, offset=offset)

        # get business count to help pagination
        if location:
            # TODO: this count is wrong when location limiting
            businesses_count = len(businesses)
        else:
            businesses_count = Business.count()

        businesses_jsonable = []

        for business in businesses:
            businesses_jsonable.append(business.toJSON())

        response_body = {
            'businesses': businesses_jsonable,
            'count': businesses_count,
        }
        logger.debug('Retrieved businesses')

        request.response.body = json.dumps(response_body, cls=ComplexEncoder)
        request.response.content_type = 'application/json'
        return request.response