Source code for highspot.users
# -*- coding: utf-8 -*-
"""
:Module: highspot.users
:Synopsis: Defines the users-related functions associated with the Highspot API
:Created By: Jeff Shurtliff
:Last Modified: Jeff Shurtliff
:Modified Date: 16 Oct 2022
"""
from . import api
from .errors import exceptions
[docs]def me(hs_object):
"""This function returns the information about the user making the API call.
:param hs_object: The core :py:class:`highspot.Highspot` object
:type hs_object: class[highspot.Highspot]
:returns: A dictionary with the user data
:raises: :py:exc:`highspot.errors.exceptions.APIConnectionError`
"""
return api.get_request_with_retries(hs_object, '/me')
[docs]def get_users(hs_object, email=None, list_type=None, with_fields=None, exclude_fields=None, start=0, limit=100):
"""This function retrieves a list of users.
:param hs_object: The core :py:class:`highspot.Highspot` object
:type hs_object: class[highspot.Highspot]
:param email: An email address by which to filter the users
:type email: str, None
:param list_type: Allows filtering by ``all`` or ``unverified`` users (filters by ``verified`` users by default)
:type list_type: str, None
:param with_fields: Additional field(s) to include in the response
:type with_fields: str, tuple, list, set, None
:param exclude_fields: Additional field(s) to exclude in the response
:type exclude_fields: str, tuple, list, set, None
:param start: The start position of a paged request (``0`` by default)
:type start: int, str
:param limit: Maximum number of users returned (``100`` by default)
:type limit: int, str
:returns: A dictionary containing the user data
:raises: :py:exc:`highspot.errors.exceptions.InvalidFieldError`,
:py:exc:`highspot.errors.exceptions.APIConnectionError`
"""
endpoint = '/users?'
if email and isinstance(email, str):
endpoint += f'email={email}'
if list_type:
if list_type == 'all' or list_type == 'unverified' or list_type == 'verified':
endpoint += f'list={list_type}' if endpoint.endswith('?') else f'&list={list_type}'
else:
raise exceptions.InvalidFieldError(val='list_type')
if with_fields:
# TODO: Raise an exception if with_fields is not a str, tuple, list, or set
if not isinstance(with_fields, str):
with_fields = ",".join(with_fields)
segment = f'with-fields={with_fields}'
endpoint += segment if endpoint.endswith('?') else f'&{segment}'
if exclude_fields:
# TODO: Raise an exception if exclude_fields is not a str, tuple, list, or set
if not isinstance(exclude_fields, str):
exclude_fields = ",".join(exclude_fields)
segment = f'exclude-fields={exclude_fields}'
endpoint += segment if endpoint.endswith('?') else f'&{segment}'
start_limit_segment = f'start={start}&limit={limit}'
endpoint += start_limit_segment if endpoint.endswith('?') else f'&{start_limit_segment}'
return api.get_request_with_retries(hs_object, endpoint)
[docs]def get_user(hs_object, user_id):
"""This function retrieves the metadata for a specific user.
:param hs_object: The core :py:class:`highspot.Highspot` object
:type hs_object: class[highspot.Highspot]
:param user_id: The unique identifier for the user
:type user_id: str
:returns: The user metadata as a dictionary
:raises: :py:exc:`highspot.errors.exceptions.APIConnectionError`
"""
endpoint = f'/users/{user_id}'
return api.get_request_with_retries(hs_object, endpoint)
[docs]def get_user_properties(hs_object, user_id):
"""This function retrieves the properties for a specific user.
:param hs_object: The core :py:class:`highspot.Highspot` object
:type hs_object: class[highspot.Highspot]
:param user_id: The unique identifier for the user
:type user_id: str
:returns: The user properties as a dictionary
:raises: :py:exc:`highspot.errors.exceptions.APIConnectionError`
"""
endpoint = f'/users/{user_id}/properties'
return api.get_request_with_retries(hs_object, endpoint)
[docs]def get_user_property(hs_object, user_id, property_name):
"""This function retrieves a given property for a specific user.
:param hs_object: The core :py:class:`highspot.Highspot` object
:type hs_object: class[highspot.Highspot]
:param user_id: The unique identifier for the user
:type user_id: str
:param property_name: The name of the property value to return
:type property_name: str
:returns: The user properties as a dictionary
:raises: :py:exc:`highspot.errors.exceptions.APIConnectionError`
"""
endpoint = f'/users/{user_id}/properties/{property_name}'
return api.get_request_with_retries(hs_object, endpoint)