bindiego
6/11/2015 - 10:24 AM

Python RESTful

Python RESTful

#!/usr/bin/env pypy

import sys
import getopt
import csv
import requests, json

sugar_url = ""
sugar_uname = ""
sugar_pw = ""

def form_post():
    headers = {
        'User-Agent': 'Chrome',
        'Cookie:': 'lalala'
    }

    files = {
        'module': (None, 'Users'),
        'record': (None, '378d0b87-00dc-1111-bbbb-aaaaaaaaaaaaa'),
        'action': (None, 'Save'),
        'sugar_user_name': (None, 'abc'),
        'unique_name': (None, 'aaa'),
        'first_name': (None, 'bbb'),
        'last_name': (None, 'ccc'),
        'status': (None, 'Active'),
        'timezone': (None, 'America/Montreal')
    }

    res = requests.post(
        "http://test.com/index.php",
        headers=headers,
        files=files
    )

    print res.status_code

def sugar_send_request(method, rest_data):
    rest_data = json.dumps(rest_data)

    headers = {'user-agent': 'Chrome'}

    payload = {
        'method': method,
        'input_type': 'json',
        'response_type' : 'json',
        'rest_data' : rest_data
    }

    try:
        # r = requests.post(sugar_url, data, auth=(sugar_uname, sugar_pw))
        res = requests.post(sugar_url, headers=headers, data=payload)
        return res
    except KeyError as e:
        raise SugarUnhandledException(e)

def sugar_update_timezone(uid, timezone_id):
    print uid + timezone_id

def sugar_login(username, passwd):
    data = {
        'user_auth': {
            'user_name': sugar_uname,
            'password': sugar_pw
        }
    }

    res = sugar_send_request('login', data)

    try:
        print res.status_code
        print res.headers.get('content-type')
        print res.json()
    except KeyError as e:
        raise SugarUnhandledException(e)

def process_cvs_file(file):
    # with statement will do try and finally close the file
    with open(file, 'rb') as csvfile:
        reader = csv.reader(csvfile, delimiter=',', quotechar='|')
        try:
            for row in reader:
                # print len(row) # suppose to be 3, "id, editor_code, timezone_id"
                uid = row[0];
                editor_code = row[1];
                timezone_id = row[2];
                sugar_update_timezone(uid, timezone_id)
        except csv.Error as e:
            raise CSVException('file %s, line %d: %s' % (filename, reader.line_num, e))

def main():
    # parse command line options
    try:
        opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
    except getopt.error, msg:
        print >>sys.stderr, msg
        print >>sys.stderr, "for help use --help"
        return 2

    # process options
    for o, a in opts:
        if o in ("-h", "--help"):
            print "Python Interpreter:\n" + (sys.version)
            return 0

    # process arguments
    for file in args:
        process_cvs_file(file)

    # REVISIT: Remove testing code please
    # sugar_login(sugar_uname, sugar_pw)
    form_post()

if __name__ == '__main__':
    sys.exit(main())