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)
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)
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
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