Example #1
0
 def handle_noargs(self, **kwargs):
     api = SailthruClient(settings.SAILTHRU_API_KEY,
                          settings.SAILTHRU_API_SECRET)
     pp = pprint.PrettyPrinter(indent=4)
     i = 0
     total_i = 0
     out_file_count = 0
     out_file = None
     with open('/home/ubuntu/Project/ecomarket/all-users.csv',
               'rb') as csvfile:
         reader = csv.reader(csvfile)
         headers = None
         for row in reader:
             if headers is None:
                 headers = row
                 continue
             row = dict(zip(headers, row))
             non_empty_row = {}
             for k, v in row.items():
                 if v is not None:
                     v = v.strip()
                     if len(v) == 0:
                         v = None
                     non_empty_row[k] = v
             st_user = api.api_get('user',
                                   {'id': non_empty_row['Profile Id']})
             if st_user is None:
                 print "Cannot find user '%s'" % (
                     non_empty_row['Profile Id'], )
             body = st_user.get_body()
             st_user_vars = body['vars']
             if st_user_vars is None:
                 continue
             for key in st_user_vars.keys():
                 try:
                     if st_user_vars[k] is not None:
                         if type(st_user_vars[k]) == str:
                             st_user_vars[k] = st_user_vars[k].strip()
                             if st_user_vars[k] == '':
                                 st_user_vars[k] = None
                 except:
                     pass
             new_vars = clean_user(st_user_vars)
             email = body['keys']['email']
             if out_file is None or i > 5000:
                 i = 0
                 if out_file is not None:
                     out_file.close()
                 out_file_count += 1
                 out_file = open('batch_%d.txt' % (out_file_count, ), 'wb')
             out_file.write(
                 json.dumps({
                     'email': email,
                     'vars': new_vars
                 },
                            default=_encoder_default) + "\n")
             i += 1
             total_i += 1
             print "%d %d %d" % (i, total_i, out_file_count)
class SailthruApiService(object):
    """The service to interface with Sailthru API"""
    def __init__(self, sailthru_key, sailthru_secret, content_url_root):
        self.sailthru_client = SailthruClient(sailthru_key, sailthru_secret)
        self.content_url_root = content_url_root

    def list(self, list_size=1000):
        sailthru_content_list = []
        response = self.sailthru_client.api_get('content',
                                                {'items': list_size})

        if not response.is_ok():
            logging.error(
                "Error code %d connecting to Sailthru content api: %s",
                response.json['error'], response.json['errormsg'])
            raise RuntimeError('Failed to connect with Sailthru API')
        else:
            for body in response.json['content']:
                logging.info(body)
                sailthru_content_list.append(body)

        return sailthru_content_list

    def _upload_batch_file(self, filepath, report_email=None):
        """Use Sailthru job API to upload all content as a batch job"""
        logging.info("Uploading %s" % filepath)
        request_data = {
            'job': 'content_update',
            'file': filepath,
            'report_email': report_email
        }
        response = self.sailthru_client.api_post('job', request_data,
                                                 {'file': 1})

        if response.is_ok():
            job_id = response.get_body().get("job_id")
            logging.info("Import job started on SailThru - JOB ID: " + job_id)

            # Keeping checking status until we find out that it's done
            while True:
                logging.info("waiting for import to complete...")
                time.sleep(10)
                response = self.sailthru_client.api_get(
                    'job', {'job_id': job_id})
                if response.get_body().get("status") == "completed":
                    return

        else:
            error = response.get_error()
            logging.error("Error: " + error.get_message())
            logging.error("Status Code: " + str(response.get_status_code()))
            logging.error("Error Code: " + str(error.get_error_code()))
            raise RuntimeError('Failed to connect with Sailthru API')

    def upload(self, library_items, report_email=None):
        if not library_items:
            return

        with tempfile.NamedTemporaryFile(delete=False, mode='w+t') as tmp_file:
            for item in library_items:
                json.dump(item, tmp_file)
                tmp_file.write('\n')
            tmp_file.close()
            self._upload_batch_file(tmp_file.name, report_email)
            os.unlink(tmp_file.name)

    def clear(self):
        while True:
            response = self.sailthru_client.api_get('content', {'items': 4000})

            if not response.is_ok():
                logging.error(
                    "Error code %d connecting to Sailthru content api: %s",
                    response.json['error'], response.json['errormsg'])
                raise RuntimeError('Failed to connect with Sailthru API')

            sailthru_content = response.json['content']
            if not sailthru_content:
                logging.info('Content cleared')
                return

            for body in sailthru_content:
                item_key = body.get('url')
                if item_key:
                    response = self.sailthru_client.api_delete(
                        'content', {'url': item_key})
                    if response.is_ok():
                        logging.info("content item %s deleted", item_key)
                    else:
                        logging.info(
                            "content item %s delete encountered errors",
                            item_key)
from sailthru.sailthru_client import SailthruClient

api_key = "replace-with-your-api-key"
api_secret = "replace-with-your-api-secret"
api_url = "http://api.sailthru.com" # optional

sc = SailthruClient(api_key, api_secret, api_url)

# GET /user
response = sc.api_get('user', {'email': '*****@*****.**'})

print "is_ok: " + str(response.is_ok())
print "body: " + str(response.get_body())
print "response: " + str(response.get_response())
print "status_code: " + str(response.get_status_code())
print "error: " + str(response.get_error())
# -*- coding: utf-8 -*-

from sailthru.sailthru_client import SailthruClient
from sailthru.sailthru_response import SailthruResponseError
from sailthru.sailthru_error import SailthruClientError

api_key = 'API_KEY'
api_secret = 'SUPER_SECRET'
sailthru_client = SailthruClient(api_key, api_secret)

try:
    response = sailthru_client.api_get("user", {"id": "*****@*****.**"})

    if response.is_ok():
        body = response.get_body()
        # handle body which is of type dictionary
        print(body)
    else:
        error = response.get_error()
        print("Error: " + error.get_message())
        print("Status Code: " + str(response.get_status_code()))
        print("Error Code: " + str(error.get_error_code()))
except SailthruClientError as e:
    # Handle exceptions
    print("Exception")
    print(e)