auth=oauth,
api_version='1.1')
+twitter_upl = Twitter(domain='upload.twitter.com',
+ auth=oauth)
+
twitter11_na = Twitter(domain='api.twitter.com',
auth=noauth,
api_version='1.1')
__location__ = os.path.realpath(
os.path.join(os.getcwd(), os.path.dirname(__file__)))
+def _img_data():
+ return open(os.path.join(__location__, "test.png"), "rb").read()
+
def test_API_set_unicode_twitpic(base64=False):
random_tweet = "A random twitpic from %s with unicode üøπ" % \
("base64" if base64 else "file") + get_random_str()
if base64:
img = b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94JFhMBAJv5kaUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAA4UlEQVQoz7WSIZLGIAxG6c5OFZjianBcIOfgPkju1DsEBWfAUEcNGGpY8Xe7dDoVFRvHfO8NJGRorZE39UVe1nd/WNfVObcsi3OOEAIASikAmOf5D2q/FWPUWgshKKWfiFIqhNBaxxhPjPQ05/z+Bs557xw9hBC89ymlu5BS8t6HEC5NW2sR8alRRLTWXoRSSinlSejT12M9BAAAgCeoTw9BSimlfBIu6WdYtVZEVErdaaUUItZaL/9wOsaY83YAMMb0dGtt6Jdv3/ec87ZtOWdCCGNsmibG2DiOJzP8+7b+AAOmsiPxyHWCAAAAAElFTkSuQmCC"
else:
- with open(os.path.join(__location__, "test.png"), "rb") as f:
- img = f.read()
+ img = _img_data()
params = {"status": random_tweet, "media[]": img}
if base64:
params["_base64"] = True
def test_API_set_unicode_twitpic_base64():
test_API_set_unicode_twitpic(base64=True)
+def test_upload_media():
+ res = twitter_upl.media.upload(media=_img_data())
+ assert res
+ assert res["media_id"]
def test_search():
# In 1.1, search works on api.twitter.com not search.twitter.com
# Build the uri.
uriparts = []
for uripart in self.uriparts:
- # If this part matches a keyword argument, use the
- # supplied value otherwise, just use the part.
- uriparts.append(str(kwargs.pop(uripart, uripart)))
+ # If this part matches a keyword argument (starting with _), use
+ # the supplied value. Otherwise, just use the part.
+ if uripart.startswith("_"):
+ part = (str(kwargs.pop(uripart, uripart)))
+ else:
+ part = uripart
+ uriparts.append(uripart)
uri = '/'.join(uriparts)
method = kwargs.pop('_method', None) or method_for_uri(uri)
secure_str, self.domain, uri, dot, self.format)
# Check if argument tells whether img is already base64 encoded
- b64_convert = True
- if "_base64" in kwargs:
- b64_convert = not kwargs.pop("_base64")
+ b64_convert = not kwargs.pop("_base64", False)
if b64_convert:
import base64
# Catch media arguments to handle oauth query differently for multipart
media = None
- for arg in ['media[]']:
- if arg in kwargs:
- media = kwargs.pop(arg)
- if b64_convert:
- media = base64.b64encode(media)
- if sys.version_info >= (3, 0):
- media = str(media, 'utf8')
- mediafield = arg
- break
+ if 'media' in kwargs:
+ mediafield = 'media'
+ media = kwargs.pop('media')
+ elif 'media[]' in kwargs:
+ mediafield = 'media[]'
+ media = kwargs.pop('media[]')
+ if b64_convert:
+ media = base64.b64encode(media)
+ if sys.version_info >= (3, 0):
+ media = str(media, 'utf8')
# Catch media arguments that are not accepted through multipart
# and are not yet base64 encoded
# Handle query as multipart when sending media
if media:
- BOUNDARY = "###Python-Twitter###"
+ BOUNDARY = b"###Python-Twitter###"
bod = []
- bod.append('--' + BOUNDARY)
+ bod.append(b'--' + BOUNDARY)
bod.append(
- 'Content-Disposition: form-data; name="%s"' % mediafield)
- bod.append('Content-Transfer-Encoding: base64')
- bod.append('')
+ b'Content-Disposition: form-data; name="%s"' % mediafield.encode('utf-8'))
+ bod.append(b'Content-Transfer-Encoding: base64')
+ bod.append(b'')
bod.append(media)
for k, v in kwargs.items():
- bod.append('--' + BOUNDARY)
- bod.append('Content-Disposition: form-data; name="%s"' % k)
- bod.append('')
- if sys.version_info[:2] <= (2, 7):
- try:
- v = v.decode("utf-8")
- except:
- pass
+ if sys.version_info < (3, 0):
+ k = k.encode("utf-8")
+ v = v.encode("utf-8")
+ bod.append(b'--' + BOUNDARY)
+ bod.append(b'Content-Disposition: form-data; name="%s"' % k)
+ bod.append(b'')
bod.append(v)
- bod.append('--' + BOUNDARY + '--')
- body = '\r\n'.join(bod).encode('utf8')
+ bod.append(b'--' + BOUNDARY + b'--')
+ body = b'\r\n'.join(bod)
headers['Content-Type'] = \
'multipart/form-data; boundary=%s' % BOUNDARY
- if sys.version_info[:2] <= (2, 7):
+ if sys.version_info < (3, 0):
uriBase = uriBase.encode("utf-8")
for k in headers:
headers[k.encode('utf-8')] = headers.pop(k)