Source code for parsons.ngpvan.saved_lists

"""NGPVAN Saved List Endpoints"""

from parsons.etl.table import Table
import logging

logger = logging.getLogger(__name__)


[docs] class SavedLists(object): def __init__(self, van_connection): self.connection = van_connection
[docs] def get_saved_lists(self, folder_id=None): """ Get saved lists. `Args:` folder_id: int Filter by the id for a VAN folder. If included returns only the saved lists in the folder `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ tbl = Table(self.connection.get_request('savedLists', params={'folderId': folder_id})) logger.info(f'Found {tbl.num_rows} saved lists.') return tbl
[docs] def get_saved_list(self, saved_list_id): """ Returns a saved list object. `Args:` saved_list_id: int The saved list id. `Returns:` dict """ r = self.connection.get_request(f'savedLists/{saved_list_id}') logger.info(f'Found saved list {saved_list_id}.') return r
[docs] def download_saved_list(self, saved_list_id): """ Download the vanids associated with a saved list. `Args:` saved_list_id: int The saved list id. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ ej = ExportJobs(self.connection) job = ej.export_job_create(saved_list_id) if isinstance(job, tuple): return job else: return Table.from_csv(job['downloadUrl'])
[docs] class Folders(object): def __init__(self, van_connection): # Some sort of test if the van_connection is not present. self.connection = van_connection
[docs] def get_folders(self): """ Get all folders owned or shared with the API user. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ tbl = Table(self.connection.get_request('folders')) logger.info(f'Found {tbl.num_rows} folders.') return tbl
[docs] def get_folder(self, folder_id): """ Get a folder owned by or shared with the API user. `Args:` folder_id: int The folder id. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ r = self.connection.get_request(f'folders/{folder_id}') logger.info(f'Found folder {folder_id}.') return r
[docs] class ExportJobs(object): def __init__(self, van_connection): self.connection = van_connection
[docs] def get_export_job_types(self): """ Get export job types `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ tbl = Table(self.connection.get_request('exportJobTypes')) logger.info(f'Found {tbl.num_rows} export job types.') return tbl
[docs] def export_job_create(self, list_id, export_type=4, webhookUrl="https://www.nothing.com"): """ Creates an export job Currently, this is only used for exporting saved lists. It is recommended that you use the :meth:`saved_list_download` method instead. `Args:` list_id: int This is where you should input the list id export_type: int The export type id, which defines the columns to export webhookUrl: A webhook to include to notify as to the status of the export `Returns:` dict The export job object """ json = {"savedListId": str(list_id), "type": str(export_type), "webhookUrl": webhookUrl } r = self.connection.post_request('exportJobs', json=json) logger.info('Retrieved export job.') return r
[docs] def get_export_job(self, export_job_id): """ Get an export job. `Args:` export_job_id: int The xxport job id. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ r = self.connection.get_request(f'exportJobs/{export_job_id}') logger.info(f'Found export job {export_job_id}.') return r