diff --git a/synapsepy/client.py b/synapsepy/client.py index bac1d34..4ab4a35 100644 --- a/synapsepy/client.py +++ b/synapsepy/client.py @@ -1,4 +1,5 @@ +from .helpers import json_serialize from .http_client import HttpClient from .user import User, Users @@ -280,7 +281,7 @@ def get_all_users(self, query=None, page=None, per_page=None, show_refresh_token ) return Users(response, self.http) - def get_all_trans(self, page=None, per_page=None): + def get_all_trans(self, page=None, per_page=None, filter=None): '''Gets all client transactions Args: page (int): (opt) Page number @@ -289,10 +290,12 @@ def get_all_trans(self, page=None, per_page=None): (Transactions): object containing pagination info and list of Transaction objects ''' self.logger.debug("getting all transactions") - + + filter = json_serialize(filter) + path = paths['trans'] response = self.http.get( - path, page=page, per_page=per_page + path, page=page, per_page=per_page, filter=filter, ) return Transactions(response) diff --git a/synapsepy/helpers.py b/synapsepy/helpers.py new file mode 100644 index 0000000..8b0082a --- /dev/null +++ b/synapsepy/helpers.py @@ -0,0 +1,15 @@ +import json + +def json_serialize(obj): + if obj is None: + pass # No obj, don’t serialize. + elif isinstance(obj, str): + try: + _ = json.loads(obj) # All good, a valid JSON string. + except json.decoder.JSONDecodeError as e: + raise ValueError("obj is not a valid JSON string") from e + else: + try: + obj = json.dumps(obj) # All good, a JSON serializable object. + except TypeError as e: + raise ValueError("obj is not JSON serializable") from e diff --git a/synapsepy/user.py b/synapsepy/user.py index a478151..0263993 100644 --- a/synapsepy/user.py +++ b/synapsepy/user.py @@ -1,4 +1,5 @@ +from .helpers import json_serialize from .endpoints import paths from .node import Node, Nodes @@ -704,7 +705,7 @@ def get_all_nodes(self, page=None, per_page=None, type=None): ) return Nodes(response) - def get_all_node_trans(self, node_id, page=None, per_page=None): + def get_all_node_trans(self, node_id, page=None, per_page=None, filter=filter): '''Retrieves all Transactions for a Node Args: node_id (str): ID of the Node @@ -714,6 +715,9 @@ def get_all_node_trans(self, node_id, page=None, per_page=None): Transactions: Transactions object containing paginated info and Trans records ''' self.logger.debug("Retrieving all Transactions for Node") + + filter = json_serialize(filter) + path = ( paths['users'] + '/' @@ -724,11 +728,11 @@ def get_all_node_trans(self, node_id, page=None, per_page=None): + paths['trans'] ) response = self._do_request( - self.http.get,path, page=page, per_page=per_page + self.http.get,path, page=page, per_page=per_page, filter=filter, ) return Transactions(response) - def get_all_trans(self, page=None, per_page=None): + def get_all_trans(self, page=None, per_page=None, filter=filter): '''Retrieves all Transactions for a User Args: page (int): (opt) Page number @@ -737,9 +741,12 @@ def get_all_trans(self, page=None, per_page=None): Transactions: Transactions object containing paginated info and Trans records ''' self.logger.debug("Retrieving all Transactions for User") + + filter = json_serialize(filter) + path = paths['users'] + '/' + self.id + paths['trans'] response = self._do_request( - self.http.get, path, page=page, per_page=per_page + self.http.get, path, page=page, per_page=per_page, filter=filter ) return Transactions(response)