You can pass a files
parameter to requests.post
for form encoded file upload. See example below:
import requests
KEY = ''
TASK_ID = ''
url = 'https://app.asana.com/api/1.0/tasks/{0}/attachments'.format(TASK_ID)
with open('file.txt') as f:
files = {'file': f.read()}
r = requests.post(url, auth=(KEY, ''), files=files)
print(r.status_code)
print(r.json())