Beispiel #1
0
    def check_api_token(self):
        """Check if a token needs renewing or has enough permissions.

        Returns the token previously obtained with self.get_api_token().
        """
        iam = func()
        data = self.get_request(get_auth_URL('token'), caller=iam)
        if self.request_ok(data):
            api_token = xml_get_tag(data['ret'], 'token')
            if not api_token:
                stderr("warning- failed to get token- using old.\n", iam)
            else:
                self.api_token = api_token
        else:
            self.api_token = None  # Otherwise we get back old (expired) token
            self.get_api_token(self.frob)
Beispiel #2
0
def jobs_managed(api, company, team, request=None, **kwargs):
    """Compile a list of open jobs managed under 'company'."""
    # Need team reference for 'buyer_team_reference' parameter to Jobs HR API
    bad_result = (0, None)
    (ref, status) = find_team(api, company, team)
    if not ref:
        log.error("Failed to find team {0:s} (company {1:s})".format(team, company))
        return bad_result
    node_name = 'job'
    params = [('buyer_team__reference', ref)]
    if kwargs:
        keys = kwargs.keys()
        for key in keys:
            param = valid_jobs_managed_parameter(key)
            if param:
                params.append((param, kwargs[key]))
            elif key == 'save_xml':
                save_xml = 'jobs_managed' if kwargs[key] else None
    url = get_API_URL('jobs_hr')
    xml = send_GET(api, url, params, save_xml=save_xml)
    if xml is None:
        e = "Error, request failed: send_GET(api, {0:s}, {1!s}".format(url, params)
        stderr("{0:s}\n".format(e))
        log.error(e)
        return bad_result
    total_items = int(xml_get_tag(xml, 'total_items'))
    all_info = ['buyer_company__name','buyer_company__reference','buyer_team__id',
        'buyer_team__name','buyer_team__reference','category','company__reference',
        'company_name','created_by','created_by_name','created_time','description',
        'duration','end_date','filled_date','id','job_type','name',
        'num_active_candidates','num_candidates','num_new_candidates',
        'owner_user_id','parent_team__id','parent_team__name',
        'parent_team__reference','public_url','reference','start_date','status',
        'subcategory','title','visibility']
    if not request:
        requested_info = all_info[:]
    else:
        requested_info = list_intersect(request, all_info)
    if total_items > 0:
        result = dict_subset(list_from_xml(xml, node_name), requested_info)
    else:
        result = []
    return (total_items, result)
Beispiel #3
0
 def get_api_frob(self, api_sig):
     """Retrieve the 'frob' token from the odesk server.
     This token lives 600s.
     """
     iam = func()
     assert self.user_authorized
     assert api_sig
     if self.frob: return frob
     url = get_auth_URL('frobs') + self.get_api_keys_uri(api_sig, iam)
     log.debug('{0:s}: frob URI: {1:s}'.format(iam,url))
     data = self.send_request(url, 'post', caller=iam)
     if not self.request_ok(data):
         return None
     frob = xml_get_tag(data['ret'], 'frob', unicode=False)
     log.debug("frob: {0:s}".format(frob))
     if not frob:
         log.error("Failed to parse 'frob' from server response")
     else:
         self.frob = frob
     return frob
Beispiel #4
0
    def get_api_token(self, frob):
        """Retrieve the API token needed for odesk.com server communication.

        This is the token appended to all server requests. The 'frob' token
        must be available to aquire this token from the server.
        """
        iam = func()
        self.api_token = self.get_token()
        if self.api_token: return self.api_token
        assert frob is not None
        params = [('frob', self.frob)]
        api_sig = self.get_signature(params, caller=iam)
        url = get_auth_URL('tokens') + \
            self.merge_params_to_uri(self.get_api_keys_uri(api_sig, iam), params)
        log.debug("get_api_token(): url: {0:s}".format(url))
        data = self.send_request(url, 'get', caller=iam)
        if self.request_ok(data):
            self.api_token = xml_get_tag(data['ret'], 'token')
        else:
            log.error("Unable to get API token.")
        if not self.api_token:
            raise AppAPITokenError("Unable to get API token.")
        return self.api_token