Skip to content

Commit

Permalink
Replace 2to3 with six
Browse files Browse the repository at this point in the history
  • Loading branch information
ob-stripe committed Nov 2, 2017
1 parent 49714dd commit 28d98ed
Show file tree
Hide file tree
Showing 31 changed files with 154 additions and 141 deletions.
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

install_requires = []

install_requires.append('six')

if sys.version_info < (2, 6):
warnings.warn(
'Python 2.5 is no longer officially supported by Stripe. '
Expand Down Expand Up @@ -61,7 +63,6 @@
install_requires=install_requires,
test_suite='stripe.test.all',
tests_require=['unittest2', 'mock'],
use_2to3=True,
classifiers=[
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
Expand Down
21 changes: 11 additions & 10 deletions stripe/api_requestor.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
import datetime
import platform
import time
import urllib
import urlparse
import warnings

import six
from six.moves.urllib.parse import urlencode, urlsplit, urlunsplit

import stripe
from stripe import error, oauth_error, http_client, version, util
from stripe.multipart_data_generator import MultipartDataGenerator
Expand All @@ -22,13 +23,13 @@ def _encode_datetime(dttime):

def _encode_nested_dict(key, data, fmt='%s[%s]'):
d = {}
for subkey, subvalue in data.iteritems():
for subkey, subvalue in six.iteritems(data):
d[fmt % (key, subkey)] = subvalue
return d


def _api_encode(data):
for key, value in data.iteritems():
for key, value in six.iteritems(data):
key = util.utf8(key)
if value is None:
continue
Expand All @@ -53,12 +54,12 @@ def _api_encode(data):


def _build_api_url(url, query):
scheme, netloc, path, base_query, fragment = urlparse.urlsplit(url)
scheme, netloc, path, base_query, fragment = urlsplit(url)

if base_query:
query = '%s&%s' % (base_query, query)

return urlparse.urlunsplit((scheme, netloc, path, query, fragment))
return urlunsplit((scheme, netloc, path, query, fragment))


class APIRequestor(object):
Expand Down Expand Up @@ -124,7 +125,7 @@ def encode(cls, d):
'If you need public access to this function, please email us '
'at support@stripe.com.',
DeprecationWarning)
return urllib.urlencode(list(_api_encode(d)))
return urlencode(list(_api_encode(d)))

@classmethod
def build_url(cls, url, params):
Expand Down Expand Up @@ -165,7 +166,7 @@ def handle_error_response(self, rbody, rcode, resp, rheaders):
# OAuth errors are a JSON object where `error` is a string. In
# contrast, in API errors, `error` is a hash with sub-keys. We use
# this property to distinguish between OAuth and API errors.
if isinstance(error_data, basestring):
if isinstance(error_data, six.string_types):
err = self.specific_oauth_error(
rbody, rcode, resp, rheaders, error_data)

Expand Down Expand Up @@ -300,7 +301,7 @@ def request_raw(self, method, url, params=None, supplied_headers=None):

abs_url = '%s%s' % (self.api_base, url)

encoded_params = urllib.urlencode(list(_api_encode(params or {})))
encoded_params = urlencode(list(_api_encode(params or {})))

if method == 'get' or method == 'delete':
if params:
Expand All @@ -326,7 +327,7 @@ def request_raw(self, method, url, params=None, supplied_headers=None):
headers = self.request_headers(my_api_key, method)

if supplied_headers is not None:
for key, value in supplied_headers.items():
for key, value in six.iteritems(supplied_headers):
headers[key] = value

util.log_info('Request to Stripe api', method=method, path=abs_url)
Expand Down
9 changes: 5 additions & 4 deletions stripe/api_resources/abstract/api_resource.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import urllib
import six
from six.moves.urllib.parse import quote_plus

from stripe import error, util
from stripe.stripe_object import StripeObject
Expand All @@ -22,7 +23,7 @@ def class_name(cls):
raise NotImplementedError(
'APIResource is an abstract class. You should perform '
'actions on its subclasses (e.g. Charge, Customer)')
return str(urllib.quote_plus(cls.__name__.lower()))
return str(quote_plus(cls.__name__.lower()))

@classmethod
def class_url(cls):
Expand All @@ -32,13 +33,13 @@ def class_url(cls):
def instance_url(self):
id = self.get('id')

if not isinstance(id, basestring):
if not isinstance(id, six.string_types):
raise error.InvalidRequestError(
'Could not determine which URL to request: %s instance '
'has invalid ID: %r, %s. ID should be of type `str` (or'
' `unicode`)' % (type(self).__name__, id, type(id)), 'id')

id = util.utf8(id)
base = self.class_url()
extn = urllib.quote_plus(id)
extn = quote_plus(id)
return "%s/%s" % (base, extn)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import urllib
from six.moves.urllib.parse import quote_plus

from stripe import api_requestor, util

Expand All @@ -11,10 +11,10 @@ def nested_resource_class_methods(resource, path=None, operations=None):

def wrapper(cls):
def nested_resource_url(cls, id, nested_id=None):
url = "%s/%s/%s" % (cls.class_url(), urllib.quote_plus(id),
urllib.quote_plus(path))
url = "%s/%s/%s" % (cls.class_url(), quote_plus(id),
quote_plus(path))
if nested_id is not None:
url += "/%s" % urllib.quote_plus(nested_id)
url += "/%s" % quote_plus(nested_id)
return url
resource_url_method = "%ss_url" % resource
setattr(cls, resource_url_method, classmethod(nested_resource_url))
Expand Down
4 changes: 2 additions & 2 deletions stripe/api_resources/abstract/updateable_api_resource.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import urllib
from six.moves.urllib.parse import quote_plus

from stripe import api_requestor, util
from stripe.api_resources.abstract.api_resource import APIResource
Expand All @@ -19,7 +19,7 @@ def _modify(cls, url, api_key=None, idempotency_key=None,

@classmethod
def modify(cls, sid, **params):
url = "%s/%s" % (cls.class_url(), urllib.quote_plus(util.utf8(sid)))
url = "%s/%s" % (cls.class_url(), quote_plus(util.utf8(sid)))
return cls._modify(url, **params)

def save(self, idempotency_key=None):
Expand Down
4 changes: 2 additions & 2 deletions stripe/api_resources/account.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import urllib
from six.moves.urllib.parse import quote_plus

from stripe import oauth, util
from stripe.api_resources.abstract import CreateableAPIResource
Expand Down Expand Up @@ -33,7 +33,7 @@ def _build_instance_url(cls, sid):
return "/v1/account"
sid = util.utf8(sid)
base = cls.class_url()
extn = urllib.quote_plus(sid)
extn = quote_plus(sid)
return "%s/%s" % (base, extn)

def instance_url(self):
Expand Down
6 changes: 3 additions & 3 deletions stripe/api_resources/alipay_account.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import urllib
from six.moves.urllib.parse import quote_plus

from stripe import util
from stripe.api_resources.customer import Customer
Expand All @@ -12,11 +12,11 @@ class AlipayAccount(UpdateableAPIResource, DeletableAPIResource):
@classmethod
def _build_instance_url(cls, customer, sid):
token = util.utf8(sid)
extn = urllib.quote_plus(token)
extn = quote_plus(token)
customer = util.utf8(customer)

base = Customer.class_url()
owner_extn = urllib.quote_plus(customer)
owner_extn = quote_plus(customer)

return "%s/%s/sources/%s" % (base, owner_extn, extn)

Expand Down
6 changes: 3 additions & 3 deletions stripe/api_resources/application_fee_refund.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import urllib
from six.moves.urllib.parse import quote_plus

from stripe import util
from stripe.api_resources import ApplicationFee
Expand All @@ -13,8 +13,8 @@ def _build_instance_url(cls, fee, sid):
fee = util.utf8(fee)
sid = util.utf8(sid)
base = ApplicationFee.class_url()
cust_extn = urllib.quote_plus(fee)
extn = urllib.quote_plus(sid)
cust_extn = quote_plus(fee)
extn = quote_plus(sid)
return "%s/%s/refunds/%s" % (base, cust_extn, extn)

@classmethod
Expand Down
8 changes: 4 additions & 4 deletions stripe/api_resources/bank_account.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import urllib
from six.moves.urllib.parse import quote_plus

from stripe import error, util
from stripe.api_resources.account import Account
Expand All @@ -13,19 +13,19 @@ class BankAccount(UpdateableAPIResource, DeletableAPIResource, VerifyMixin):

def instance_url(self):
token = util.utf8(self.id)
extn = urllib.quote_plus(token)
extn = quote_plus(token)
if hasattr(self, 'customer'):
customer = util.utf8(self.customer)

base = Customer.class_url()
owner_extn = urllib.quote_plus(customer)
owner_extn = quote_plus(customer)
class_base = "sources"

elif hasattr(self, 'account'):
account = util.utf8(self.account)

base = Account.class_url()
owner_extn = urllib.quote_plus(account)
owner_extn = quote_plus(account)
class_base = "external_accounts"

else:
Expand Down
6 changes: 3 additions & 3 deletions stripe/api_resources/bitcoin_receiver.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import urllib
from six.moves.urllib.parse import quote_plus

from stripe import util
from stripe.api_resources.customer import Customer
Expand All @@ -14,12 +14,12 @@ class BitcoinReceiver(CreateableAPIResource, UpdateableAPIResource,

def instance_url(self):
token = util.utf8(self.id)
extn = urllib.quote_plus(token)
extn = quote_plus(token)

if hasattr(self, 'customer'):
customer = util.utf8(self.customer)
base = Customer.class_url()
cust_extn = urllib.quote_plus(customer)
cust_extn = quote_plus(customer)
return "%s/%s/sources/%s" % (base, cust_extn, extn)
else:
base = BitcoinReceiver.class_url()
Expand Down
10 changes: 5 additions & 5 deletions stripe/api_resources/card.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import urllib
from six.moves.urllib.parse import quote_plus

from stripe import error, util
from stripe.api_resources.account import Account
Expand All @@ -13,26 +13,26 @@ class Card(UpdateableAPIResource, DeletableAPIResource):

def instance_url(self):
token = util.utf8(self.id)
extn = urllib.quote_plus(token)
extn = quote_plus(token)
if hasattr(self, 'customer'):
customer = util.utf8(self.customer)

base = Customer.class_url()
owner_extn = urllib.quote_plus(customer)
owner_extn = quote_plus(customer)
class_base = "sources"

elif hasattr(self, 'recipient'):
recipient = util.utf8(self.recipient)

base = Recipient.class_url()
owner_extn = urllib.quote_plus(recipient)
owner_extn = quote_plus(recipient)
class_base = "cards"

elif hasattr(self, 'account'):
account = util.utf8(self.account)

base = Account.class_url()
owner_extn = urllib.quote_plus(account)
owner_extn = quote_plus(account)
class_base = "external_accounts"

else:
Expand Down
5 changes: 3 additions & 2 deletions stripe/api_resources/list_object.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import urllib
import warnings

from six.moves.urllib.parse import quote_plus

from stripe import util
from stripe.stripe_object import StripeObject

Expand Down Expand Up @@ -41,7 +42,7 @@ def create(self, idempotency_key=None, **params):
def retrieve(self, id, **params):
base = self.get('url')
id = util.utf8(id)
extn = urllib.quote_plus(id)
extn = quote_plus(id)
url = "%s/%s" % (base, extn)

return self.request('get', url, params)
Expand Down
6 changes: 3 additions & 3 deletions stripe/api_resources/reversal.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import urllib
from six.moves.urllib.parse import quote_plus

from stripe import util
from stripe.api_resources.transfer import Transfer
Expand All @@ -12,8 +12,8 @@ def instance_url(self):
token = util.utf8(self.id)
transfer = util.utf8(self.transfer)
base = Transfer.class_url()
cust_extn = urllib.quote_plus(transfer)
extn = urllib.quote_plus(token)
cust_extn = quote_plus(transfer)
extn = quote_plus(token)
return "%s/%s/reversals/%s" % (base, cust_extn, extn)

@classmethod
Expand Down
7 changes: 4 additions & 3 deletions stripe/api_resources/source.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import urllib
import warnings

from six.moves.urllib.parse import quote_plus

from stripe import util
from stripe.api_resources import Customer
from stripe.api_resources.abstract import CreateableAPIResource
Expand All @@ -13,10 +14,10 @@ class Source(CreateableAPIResource, UpdateableAPIResource, VerifyMixin):

def detach(self, **params):
if hasattr(self, 'customer') and self.customer:
extn = urllib.quote_plus(util.utf8(self.id))
extn = quote_plus(util.utf8(self.id))
customer = util.utf8(self.customer)
base = Customer.class_url()
owner_extn = urllib.quote_plus(customer)
owner_extn = quote_plus(customer)
url = "%s/%s/sources/%s" % (base, owner_extn, extn)

self.refresh_from(self.request('delete', url, params))
Expand Down
4 changes: 2 additions & 2 deletions stripe/error.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Exceptions
import sys
import six


class StripeError(Exception):
Expand Down Expand Up @@ -29,7 +29,7 @@ def __unicode__(self):
else:
return self._message

if sys.version_info > (3, 0):
if six.PY3:
def __str__(self):
return self.__unicode__()
else:
Expand Down
Loading

0 comments on commit 28d98ed

Please sign in to comment.