Source code for parsons.ngpvan.locations

"""NGPVAN Locations Endpoints"""

from parsons.etl.table import Table
import logging

logger = logging.getLogger(__name__)


[docs]class Locations(object): def __init__(self, van_connection): self.connection = van_connection
[docs] def get_locations(self, name=None): """ Get locations. `Args:` name: str Filter locations by name. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ tbl = Table(self.connection.get_request('locations', params={'name': name})) logger.info(f'Found {tbl.num_rows} locations.') return self._unpack_loc(tbl)
[docs] def get_location(self, location_id): """ Get a location. `Args:` location_id: int The location id. `Returns:` dict """ r = self.connection.get_request(f'locations/{location_id}') logger.info(f'Found location {location_id}.') return r
[docs] def create_location(self, name, address_line1=None, address_line2=None, city=None, state=None, zip_code=None): """ Find or create a location. If location already exists, will return location id. `Args:` name: str A name for this location, no longer than 50 characters. address_line1: str First line of a street address. address_line2: str Second line of a street address. city: str City or town name. state: str Two or three character state or province code (e.g., MN, ON, NSW, etc.). zip_code: str ZIP, ZIP+4, Postal Code, Post code, etc. `Returns:` int A location id. """ location = {'name': name, 'address': { 'addressLine1': address_line1, 'addressLine2': address_line2, 'city': city, 'stateOrProvince': state, 'zipOrPostalCode': zip_code }} r = self.connection.post_request(f'locations/findOrCreate', json=location) logger.info(f'Location {r} created.') return r
[docs] def delete_location(self, location_id): """ Delete a location. `Args:` location_id: int The location id `Returns:` ``None`` """ r = self.connection.delete_request(f'locations/{location_id}') logger.info(f'Location {location_id} deleted.') return r
def _unpack_loc(self, table): # Internal method to unpack location json if isinstance(table, tuple): return table if 'address' in table.columns: table.unpack_dict('address', prepend=False) if 'geoLocation' in table.columns: table.unpack_dict('geoLocation', prepend=False) return table