Skip to content

Commit

Permalink
Merge pull request #542 from volnt/master
Browse files Browse the repository at this point in the history
Fix issue #541
  • Loading branch information
Aaron1011 committed Jan 15, 2015
2 parents a192de3 + f99b1da commit d59852d
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 8 deletions.
40 changes: 33 additions & 7 deletions tweepy/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,21 @@ class API(object):

def __init__(self, auth_handler=None,
host='api.twitter.com', search_host='search.twitter.com',
cache=None, api_root='/1.1', search_root='',
retry_count=0, retry_delay=0, retry_errors=None, timeout=60,
parser=None, compression=False, wait_on_rate_limit=False,
upload_host='upload.twitter.com', cache=None, api_root='/1.1',
search_root='', upload_root='/1.1', retry_count=0,
retry_delay=0, retry_errors=None, timeout=60, parser=None,
compression=False, wait_on_rate_limit=False,
wait_on_rate_limit_notify=False, proxy=''):
""" Api instance Constructor
:param auth_handler:
:param host: url of the server of the rest api, default:'api.twitter.com'
:param search_host: url of the search server, default:'search.twitter.com'
:param upload_host: url of the upload server, default:'upload.twitter.com'
:param cache: Cache to query if a GET method is used, default:None
:param api_root: suffix of the api version, default:'/1.1'
:param search_root: suffix of the search version, default:''
:param upload_root: suffix of the upload version, default:'/1.1'
:param retry_count: number of allowed retries, default:0
:param retry_delay: delay in second between retries, default:0
:param retry_errors: default:None
Expand All @@ -47,8 +50,10 @@ def __init__(self, auth_handler=None,
self.auth = auth_handler
self.host = host
self.search_host = search_host
self.upload_host = upload_host
self.api_root = api_root
self.search_root = search_root
self.upload_root = upload_root
self.cache = cache
self.compression = compression
self.retry_count = retry_count
Expand Down Expand Up @@ -170,19 +175,40 @@ def get_status(self):
allowed_param=['id']
)

@property
def update_status(self):
def update_status(self, media_ids=None, *args, **kwargs):
""" :reference: https://dev.twitter.com/rest/reference/post/statuses/update
:allowed_param:'status', 'in_reply_to_status_id', 'lat', 'long', 'source', 'place_id', 'display_coordinates'
:allowed_param:'status', 'in_reply_to_status_id', 'lat', 'long', 'source', 'place_id', 'display_coordinates', 'media_ids'
"""
post_data = {}
if media_ids is not None:
post_data["media_ids"] = list_to_csv(media_ids)

return bind_api(
api=self,
path='/statuses/update.json',
method='POST',
payload_type='status',
allowed_param=['status', 'in_reply_to_status_id', 'lat', 'long', 'source', 'place_id', 'display_coordinates'],
require_auth=True
)
)(post_data=post_data, *args, **kwargs)

def media_upload(self, filename, *args, **kwargs):
""" :reference: https://dev.twitter.com/rest/reference/post/media/upload
:allowed_param:
"""
f = kwargs.pop('file', None)
headers, post_data = API._pack_image(filename, 3072, form_field='media', f=f)
kwargs.update({'headers': headers, 'post_data': post_data})

return bind_api(
api=self,
path='/media/upload.json',
method='POST',
payload_type='media',
allowed_param=[],
require_auth=True,
upload_api=True
)(*args, **kwargs)

def update_with_media(self, filename, *args, **kwargs):
""" :reference: https://dev.twitter.com/rest/reference/post/statuses/update_with_media
Expand Down
6 changes: 5 additions & 1 deletion tweepy/binder.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class APIMethod(object):
method = config.get('method', 'GET')
require_auth = config.get('require_auth', False)
search_api = config.get('search_api', False)
upload_api = config.get('upload_api', False)
use_cache = config.get('use_cache', True)
session = requests.Session()

Expand Down Expand Up @@ -61,6 +62,8 @@ def __init__(self, args, kwargs):
# Pick correct URL root to use
if self.search_api:
self.api_root = api.search_root
elif self.upload_api:
self.api_root = api.upload_root
else:
self.api_root = api.api_root

Expand All @@ -69,6 +72,8 @@ def __init__(self, args, kwargs):

if self.search_api:
self.host = api.search_host
elif self.upload_api:
self.host = api.upload_host
else:
self.host = api.host

Expand Down Expand Up @@ -181,7 +186,6 @@ def execute(self):
auth=auth,
proxies=self.api.proxy)
except Exception as e:

raise TweepError('Failed to send request: %s' % e)
rem_calls = resp.headers.get('x-rate-limit-remaining')
if rem_calls is not None:
Expand Down
11 changes: 11 additions & 0 deletions tweepy/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,16 @@ def parse_list(cls, api, json_list):
return results


class Media(Model):

@classmethod
def parse(cls, api, json):
media = cls(api)
for k, v in json.items():
setattr(media, k, v)
return media


class ModelFactory(object):
"""
Used by parsers for creating instances
Expand All @@ -475,6 +485,7 @@ class ModelFactory(object):
list = List
relation = Relation
relationship = Relationship
media = Media

json = JSONModel
ids = IDModel
Expand Down

0 comments on commit d59852d

Please sign in to comment.