Package emailage :: Module api
[hide private]
[frames] | no frames]

Source Code for Module emailage.api

 1  """emailAge core API module. 
 2   
 3  This module contains all methods that are required to make a request 
 4  fromt the emailAge API. 
 5  """ 
 6  import base64 
 7  import hmac 
 8  import hashlib 
 9  import urllib 
10  import logging 
11  from ast import literal_eval 
12   
13  import requests 
14   
15  from tools import generate_nonce_timestamp 
16  from tools import split_url_and_query 
17   
18  logger = logging.getLogger('emailage') 
19   
20   
21 -def get_emailage_url(method, url, consumer_key, consumer_secret):
22 """Generate the oauth url for emailAge 23 @param method: can be POST or GET. 24 @param url: base url to use, either prod or sandbox.. 25 @param consumer_key: consumer key credential for authentication. 26 @param consumer_secret: consumer secret credential for authentication. 27 """ 28 29 if not method: 30 method = "GET" 31 32 nonce, timestamp = generate_nonce_timestamp() 33 url, orig_query = split_url_and_query(url) 34 35 # URL parse the query, with equal and and chars as safe 36 query_params = urllib.quote(orig_query, safe='=&') + '&' 37 38 # URL encode credential params 39 cred_params = urllib.urlencode({'oauth_consumer_key': consumer_key, 'oauth_nonce': nonce, 40 'oauth_signature_method': 'HMAC-SHA1', 'oauth_timestamp': timestamp, 41 'oauth_version': '1.0'}) 42 """ivar: credential parameters required in the payload.""" 43 44 query_str = query_params + cred_params 45 46 sig_url = method.upper() + "&" + urllib.quote(url, "") + "&" + urllib.quote(query_str, "") 47 48 # Generate the has using customer secret key and create the digest 49 hash_result = hmac.new(consumer_secret + "&", sig_url.encode('utf-8'), hashlib.sha1).digest() 50 sig = base64.encodestring(hash_result).rstrip() # Encode string, dropping the leading 51 """ivar: signature based on consumer secret to validate request.""" 52 53 oauth_url = url + "?" + query_str + "&oauth_signature=" + urllib.quote(sig.decode(), "") 54 return oauth_url
55 56
57 -def get_base_url(use_prod=False):
58 """Returns the base url, either sandbox or prod. 59 @param use_prod: use production url or sandbox. 60 """ 61 if use_prod: 62 service_url = "https://api.emailage.com/EmailAgeValidator/" 63 else: 64 service_url = "https://sandbox.emailage.com/EmailAgeValidator/" # Sandbox 65 return service_url
66 67
68 -def get_emailage_score(email, customer_key, secret_token, ip=None, use_prod=False, score_only=True):
69 """Returns the emailAge score and message. 70 @param email: email address to query for, mandatory field. 71 @param customer_key: customer key as per emailAge api. 72 @param secret_token: secret key as per emailAge api. 73 @param ip: optional ip address to include in the query. 74 @param use_prod: use emailage production url instead of sandbox. 75 @return: success, emailAge score data, message 76 """ 77 78 base_url = get_base_url(use_prod) + "?format=json" 79 url = get_emailage_url('POST', base_url, customer_key, secret_token) 80 data = "{}+{}".format(email, ip) if ip else email 81 """ivar: payload sent to emailAge. Email and optionally includes IP.""" 82 83 try: 84 logger.info("EmailAge Request: {} {}".format(url, data)) 85 r = requests.post(url, data=data) 86 resp = literal_eval(r.content) 87 logger.info("EmailAge Response: {}".format(resp)) 88 results = resp['query']['results'][0] 89 except Exception as e: 90 msg = "Could not get emailAge score. {}: {}.".format(e.__class__, e) 91 logger.info("EmailAge Response: None due to error.") 92 return False, None, msg 93 94 if score_only: 95 return True, results['EAScore'], "{}. {}.".format(results.get('EAAdvice'), results.get('EAReason')) 96 else: 97 return True, results, ""
98