a method to retrieve location address details based upon search parameters

        :param latitude: [optional] float with latitude coordinate at center of geo search
        :param longitude: [optional] float with longitude coordinate at center of geo search
        :param city_name: [optional] string with name of city for search
        :param zip_code: [optional] string with zip code of geographic search
        :param max_results: [optional] integer with number of groups to include
        :return: dictionary with list of location details inside [json] key

        location_details = self.objects.location.schema

def list_locations(self, latitude=0.0, longitude=0.0, zip_code='', city_name='', max_results=0):

        ''' a method to retrieve location address details based upon search parameters

        :param latitude: [optional] float with latitude coordinate at center of geo search
        :param longitude: [optional] float with longitude coordinate at center of geo search
        :param city_name: [optional] string with name of city for search
        :param zip_code: [optional] string with zip code of geographic search
        :param max_results: [optional] integer with number of groups to include
        :return: dictionary with list of location details inside [json] key

        location_details = self.objects.location.schema
        '''

        # https://www.meetup.com/meetup_api/docs/find/locations/

        title = '%s.list_locations' % self.__class__.__name__

    # validate inputs
        input_fields = {
            'latitude': latitude,
            'longitude': longitude,
            'zip_code': zip_code,
            'city_name': city_name,
            'max_results': max_results
        }
        for key, value in input_fields.items():
            if value:
                object_title = '%s(%s=%s)' % (title, key, str(value))
                self.fields.validate(value, '.%s' % key, object_title)

    # validate requirements
        if latitude or longitude:
            if not latitude or not longitude:
                raise IndexError('%s coordinate search requires both latitude and longitude arguments.' % title)

                # construct request fields
        url = '%s/find/locations' % self.endpoint
        params = {}
        if max_results:
            params['page'] = str(max_results)
        if latitude:
            params['lat'] = str(latitude)
        if longitude:
            params['lon'] = str(longitude)
        elif zip_code:
            params['query'] = zip_code
        elif city_name:
            params['query'] = city_name

            # send request
        response_details = self._get_request(url, params=params)

        # construct method output
        meetup_locations = {
            'json': []
        }
        for key, value in response_details.items():
            if key != 'json':
                meetup_locations[key] = value
        for location in response_details['json']:
            meetup_locations['json'].append(location)

        return meetup_locations