def list_agents(self, **kwargs): """List all agents, optionally filtered by a view. Specify filters as keyword arguments, such as: { email='*****@*****.**', phone=873902, mobile=56523, state='fulltime' } Passing None means that no named filter will be passed to Freshdesk, which returns list of all agents Multiple filters are AND'd together. """ url = "agents?" page = 1 if not "page" in kwargs else kwargs["page"] per_page = 100 if not "per_page" in kwargs else kwargs["per_page"] agents = [] # Skip pagination by looping over each page and adding tickets if 'page' key is not in kwargs. # else return the requested page and break the loop while True: this_page = self._api._get( url + "page=%d&per_page=%d" % (page, per_page), kwargs) agents += this_page if len(this_page) < per_page or "page" in kwargs: break page += 1 return [Agent(**a) for a in agents]
def update_agent(self, agent_id, **kwargs): """Updates an agent""" url = 'agents/%s' % agent_id agent = self._api._put(url, data=json.dumps(kwargs))['agent'] # TODO: update all_agents and cache #with open(cachefile, mode='wb') as f: # pickle.dump(self.all_agents,f) return Agent(**agent)
def list_agents(self, **kwargs): """List all agents, optionally filtered by a view. Specify filters as keyword arguments, such as: { email='*****@*****.**', phone=873902, mobile=56523, state='fulltime' } Passing None means that no named filter will be passed to Freshservice, which returns list of all agents Multiple filters are AND'd together. """ url = 'agents?' page = 1 if not 'page' in kwargs else kwargs['page'] per_page = 100 if not 'per_page' in kwargs else kwargs['per_page'] agents = [] # Skip pagination by looping over each page and adding tickets if 'page' key is not in kwargs. # else return the requested page and break the loop while True: try: this_page = self._api._get( url + 'page=%d&per_page=%d' % (page, per_page), kwargs)['agents'] except FreshserviceRateLimited as err: ratelimit_timer_val = ratelimit_timer_re.match( err.args[0]).group(1) print( f'list_agents() got to page {page}, hit rate limit, waiting {ratelimit_timer_val} seconds...' ) time.sleep(int(ratelimit_timer_val) + 1) continue agents += this_page if len(this_page) < per_page or 'page' in kwargs: break page += 1 return [Agent(**a) for a in agents]
def currently_authenticated_agent(self): """Fetches currently logged in agent""" url = "agents/me" return Agent(**self._api._get(url))
def update_agent(self, agent_id, **kwargs): """Updates an agent""" url = "agents/%s" % agent_id agent = self._api._put(url, data=json.dumps(kwargs)) return Agent(**agent)
def get_agent(self, agent_id): """Fetches the agent for the given agent ID""" url = "agents/%s" % agent_id return Agent(**self._api._get(url))