Source code for parsons.mobile_commons.profiles

"""Mobile Commons Profiles Endpoints."""


[docs] class Profiles(object): """Class for profiles endpoints.""" def __init__(self, mc_connection): """Initialize the Profiles class. `Args:` mc_connection: MobileCommonsConnector The connector to access the Mobile Commons API. """ self.connection = mc_connection
[docs] def profiles(self, phone_number=None, from_date=None, to_date=None, limit=None, page=None, include_custom_columns=None, include_subscriptions=None, include_clicks=None, include_members=None): """Return a list of profiles. `Args:` phone_number: list Optional; Limits the returned profiles matching the provided phone numbers. Phone numbers should be specified with country code. from_date: str Optional; Limits the returned profiles to ones updated after or on this date time. ISO-8601 format to_date: str Optional; Limits the returned profiles to ones updated before or on this date time. ISO-8601 forma limit: int Optional; Limits the number of returned profiles. Maximum of 1000 page: int Optional; Specifies which page, of the total number of pages of results, to return include_custom_columns: boolean Optional; *Optional* default 'true' - allows exclusion of custom columns associated with profiles, pass 'false' to limit include_subscriptions: boolean Optional; *Optional* default 'true' - allows exclusion of subscriptions for each profile, pass 'false' to limit include_clicks: boolean Optional; *Optional* default 'true' - allows exclusion of clicks include_members: boolean Optional; *Optional* default 'true' - allows exclusion of profile member records maintained for integrations `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ url = self.connection.uri + 'profiles' if phone_number: phone_number = ','.join(phone_number) args = {'phone_number': phone_number, 'from': from_date, 'to': to_date, 'limit': limit, 'page': page, 'include_custom_columns': include_custom_columns, 'include_subscriptions': include_subscriptions, 'include_clicks': include_clicks, 'include_members': include_members} response = self.connection.request_paginate( url, 'profiles', args=args, resp_type='xml') if response: return self.connection.output(response) else: return None
[docs] def profile_get(self, phone_number, company=None, include_messages=False, include_donations=False): """Return a single profile record. `Args:` phone_number: str Required; The phone number for the profile to return. company: str Optional; If different that the one specified for the connection. Default is the firm. include_messages: boolean Optional; Set to true to include associated text messages. Default is false. include_donations: boolean Optional; Set to true to include associated mobile giving donations, if any. Default is false. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ url = self.connection.uri + 'profile' args = {'phone_number': phone_number, 'company': company, 'include_messages': include_messages, 'include_donations': include_donations} response = self.connection.request(url, args=args, resp_type='xml') if response['response']['success'] == 'true': return self.connection.output(response['response']['profile']) else: return None
[docs] def profile_update(self, phone_number, email=None, postal_code=None, first_name=None, last_name=None, street1=None, street2=None, city=None, state=None, country=None, custom_fields={}, opt_in_path_id=None): """Create or update a profile. `Args:` phone_number: str Required; The phone number for the profile to update. email: str Optional; New email for the profile. postal_code: str Optional; New postal code for the profile. first_name: str Optional; New firstname for the profile. last_name: str Optional; New lastname for the profile. street1: str Optional; New street1 for the profile. street2: str Optional; New street2 for the profile. city: str Optional; New city for the profile. state: str Optional; New state for the profile. country: str Optional; New country for the profile. custom_fields: dict Optional; A dict of custom fields and their new values for the profile. opt_in_path_id: str Optional; New opt_in_path_id for the profile. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ url = self.connection.uri + 'profile_update' post_data = { 'phone_number': phone_number, 'email': email, 'postal_code': postal_code, 'first_name': first_name, 'last_name': last_name, 'street1': street1, 'street2': street2, 'city': city, 'state': state, 'country': country, 'opt_in_path_id': opt_in_path_id} # Add each custom field as its own data point post_data.update(custom_fields) response = self.connection.request( url, req_type='POST', post_data=post_data, resp_type='xml') if response['response']['success'] == 'true': return self.connection.output(response['response']['profile']) else: return None
[docs] def profile_opt_out(self, phone_number, campaign_id=None, subscription_id=None): """Opt out a profile from a campaign, subscription or all. `Args:` phone_number: str Required; The phone number for the profile to opt out. campaign_id: int Optional; Opt-out this campaign only. Default is all campaigns. subscription_id:int Optional; Opt-out this subscription only. Default is all subscriptions. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ url = self.connection.uri + 'profile_opt_out' post_data = {'phone_number': phone_number, 'campaign_id': campaign_id, 'subscription_id': subscription_id} response = self.connection.request( url, req_type='POST', post_data=post_data, resp_type='xml') if response['response']['success'] == 'true': return self.connection.output(response['response']['profile']) else: return None