def upload_csv(self, project_id, token, filename):
        """
        Upload CSV file as dataset to AmigoCloud
        :param project_id:
        :param token:
        :param filename:
        :return:
        """
        user_id = 1
        amigocloud = AmigoCloud(token=token)#str(sys.argv[1]))
        response = amigocloud.upload_datafile(user_id, project_id, filename)
        print "Uploading file " + filename + " to project " + project_id + "..."

        # Wait until async job is done
        job_url = 'me/jobs/%s' % response['job']
        while True:
            response = amigocloud.get(job_url)
            if response['status'] not in ('STARTED', 'PENDING'):
                break
            time.sleep(0.5)  # Wait 500ms and retry
import json
import re
import time

from amigocloud import AmigoCloud


amigocloud = AmigoCloud(token='<your_token>')

PROJECT_OWNER = 1
PROJECT_ID = 123
FILE_PATH = 'sf_neighborhoods.zip'
DATASET_ID = None  # TBD

# Upload shapefile
response = amigocloud.upload_datafile(PROJECT_OWNER, PROJECT_ID, FILE_PATH)
print "Uploaded file '%s'" % FILE_PATH

# Wait until async job is done
job_url = 'me/jobs/%s' % response['job']
while True:
    response = amigocloud.get(job_url)
    if response['status'] not in ('STARTED', 'PENDING'):
        break
    time.sleep(0.5)  # Wait 500ms and retry
print "File '%s' finished processing" % FILE_PATH

# Save new dataset ID
DATASET_ID = response['extra']['dataset_ids'][0]
print 'Dataset with ID=%d was created' % DATASET_ID