Calls `postcodes.get_from_postcode` but checks correctness of 
        `distance`, and by default utilises a local cache.

        :param skip_cache: optional argument specifying whether to skip 
                           the cache and make an explicit request.

        :raises IllegalPointException: if the latitude or longitude 
                                       are out of bounds.

        :returns: a list of dicts containing postcode data within the 
                  specified distance.

def get_from_postcode(self, postcode, distance, skip_cache=False):
        """
        Calls `postcodes.get_from_postcode` but checks correctness of 
        `distance`, and by default utilises a local cache.

        :param skip_cache: optional argument specifying whether to skip 
                           the cache and make an explicit request.

        :raises IllegalPointException: if the latitude or longitude 
                                       are out of bounds.

        :returns: a list of dicts containing postcode data within the 
                  specified distance.
        """
        distance = float(distance)
        if distance < 0:
            raise IllegalDistanceException("Distance must not be negative")
        # remove spaces and change case here due to caching
        postcode = postcode.lower().replace(' ', '')
        return self._lookup(skip_cache, get_from_postcode, postcode, 
                            float(distance))