Source code for parsons.turbovote.turbovote

from parsons.etl import Table
import requests
import logging
from parsons.utilities import check_env

logger = logging.getLogger(__name__)

TURBOVOTE_URI = 'https://turbovote-admin-http-api.prod.democracy.works/'


[docs]class TurboVote(object): """ Initialize Turbovote class `Args:` username: str A valid turbovote username. Not required if ``TURBOVOTE_USERNAME`` env variable set. password: str A valid turbovote password. Not required if ``TURBOVOTE_PASSWORD`` env variable set subdomain: str Your turbovote subdomain (i.e. ``https://MYORG.turbovote.org``). Not required if ``TURBOVOTE_SUBDOMAIN`` env variable set. uri: str Base turbovote API url `Returns:` class """ def __init__(self, username=None, password=None, subdomain=None): self.username = check_env.check('TURBOVOTE_USERNAME', username) self.password = check_env.check('TURBOVOTE_PASSWORD', password) self.subdomain = check_env.check('TURBOVOTE_SUBDOMAIN', subdomain) self.uri = TURBOVOTE_URI def _get_token(self): # Retrieve a temporary bearer token to access API url = self.uri + 'login' payload = {'username': self.username, 'password': self.password} logger.info('Generating token...') r = requests.post(url, data=payload) logger.debug(r.url) r.raise_for_status() logger.info('Token generated.') return r.json()['id-token']
[docs] def get_users(self): """ Get users. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ url = self.uri + f'partners/{self.subdomain}.turbovote.org/users' headers = {"Authorization": f"Bearer {self._get_token()}"} logger.info('Requesting users table...') r = requests.get(url, headers=headers) logger.debug(r) r.raise_for_status() tbl = Table.from_csv_string(r.text) logger.info(f'{tbl.num_rows} users retrieved.') return tbl