示例#1
0
    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]
示例#2
0
 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)
示例#3
0
    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]
示例#4
0
 def currently_authenticated_agent(self):
     """Fetches currently logged in agent"""
     url = "agents/me"
     return Agent(**self._api._get(url))
示例#5
0
 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)
示例#6
0
 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))