Skip to content

Commit

Permalink
Merge pull request #364 from stripe/ob-use-six
Browse files Browse the repository at this point in the history
Replace 2to3 with six
  • Loading branch information
brandur-stripe authored Nov 2, 2017
2 parents 49714dd + 2604d5d commit f948b8b
Show file tree
Hide file tree
Showing 122 changed files with 1,290 additions and 172 deletions.
11 changes: 8 additions & 3 deletions examples/charge.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
from __future__ import absolute_import, division, print_function

import os

import stripe

stripe.api_key = 'tGN0bIwXnHdwOa85VABjPdSn8nWY7G7I'

print "Attempting charge..."
stripe.api_key = os.environ.get('STRIPE_SECRET_KEY')

print("Attempting charge...")

resp = stripe.Charge.create(
amount=200,
Expand All @@ -11,4 +16,4 @@
description='customer@gmail.com'
)

print 'Success: %r' % (resp, )
print('Success: %r' % (resp))
2 changes: 2 additions & 0 deletions examples/oauth.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

import os

import stripe
Expand Down
38 changes: 21 additions & 17 deletions examples/proxy.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
from __future__ import absolute_import, division, print_function

import os

import stripe


stripe.api_key = 'tGN0bIwXnHdwOa85VABjPdSn8nWY7G7I'
stripe.api_key = os.environ.get('STRIPE_SECRET_KEY')

print( "Attempting charge..." )
print("Attempting charge...")

stripe.proxy = {
"http": "http://<user>:<pass>@<proxy>:<port>",
"https": "http://<user>:<pass>@<proxy>:<port>" }

clients = (
stripe.http_client.RequestsClient(
verify_ssl_certs= stripe.verify_ssl_certs,
proxy= stripe.proxy )
,
stripe.http_client.PycurlClient(
verify_ssl_certs= stripe.verify_ssl_certs,
proxy= stripe.proxy )
,
stripe.http_client.Urllib2Client(
verify_ssl_certs= stripe.verify_ssl_certs,
proxy= stripe.proxy ) )
"https": "http://<user>:<pass>@<proxy>:<port>",
}

clients = (
stripe.http_client.RequestsClient(
verify_ssl_certs=stripe.verify_ssl_certs,
proxy=stripe.proxy),
stripe.http_client.PycurlClient(
verify_ssl_certs=stripe.verify_ssl_certs,
proxy=stripe.proxy),
stripe.http_client.Urllib2Client(
verify_ssl_certs=stripe.verify_ssl_certs,
proxy=stripe.proxy),
)

for c in clients:
stripe.default_http_client = c
Expand All @@ -30,4 +34,4 @@
card='tok_visa',
description='customer@gmail.com'
)
print( 'Success: %s, %r' % ( c.name, resp, ) )
print('Success: %s, %r' % (c.name, resp))
3 changes: 2 additions & 1 deletion examples/webhooks.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from __future__ import print_function
from __future__ import absolute_import, division, print_function

import os

import stripe
from flask import Flask, request


stripe.api_key = os.environ.get('STRIPE_SECRET_KEY')
webhook_secret = os.environ.get('WEBHOOK_SECRET')

Expand Down
1 change: 0 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,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
2 changes: 2 additions & 0 deletions stripe/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

# Stripe Python bindings
# API docs at http://stripe.com/docs/api
# Authors:
Expand Down
23 changes: 12 additions & 11 deletions stripe/api_requestor.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
from __future__ import absolute_import, division, print_function

import calendar
import datetime
import platform
import time
import urllib
import urlparse
import warnings

import stripe
from stripe import error, oauth_error, http_client, version, util
from stripe import error, oauth_error, http_client, version, util, six
from stripe.multipart_data_generator import MultipartDataGenerator
from stripe.six.moves.urllib.parse import urlencode, urlsplit, urlunsplit


def _encode_datetime(dttime):
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
2 changes: 2 additions & 0 deletions stripe/api_resources/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

# flake8: noqa

from stripe.api_resources.list_object import ListObject
Expand Down
2 changes: 2 additions & 0 deletions stripe/api_resources/abstract/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

# flake8: noqa

from stripe.api_resources.abstract.api_resource import APIResource
Expand Down
11 changes: 6 additions & 5 deletions stripe/api_resources/abstract/api_resource.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import urllib
from __future__ import absolute_import, division, print_function

from stripe import error, util
from stripe import error, util, six
from stripe.stripe_object import StripeObject
from stripe.six.moves.urllib.parse import quote_plus


class APIResource(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)
2 changes: 2 additions & 0 deletions stripe/api_resources/abstract/createable_api_resource.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

from stripe.api_resources.abstract.api_resource import APIResource
from stripe import api_requestor, util

Expand Down
2 changes: 2 additions & 0 deletions stripe/api_resources/abstract/deletable_api_resource.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

from stripe.api_resources.abstract.api_resource import APIResource


Expand Down
2 changes: 2 additions & 0 deletions stripe/api_resources/abstract/listable_api_resource.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

import warnings

from stripe import api_requestor, util
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import urllib
from __future__ import absolute_import, division, print_function

from stripe import api_requestor, util
from stripe.six.moves.urllib.parse import quote_plus


def nested_resource_class_methods(resource, path=None, operations=None):
Expand All @@ -11,10 +12,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
2 changes: 2 additions & 0 deletions stripe/api_resources/abstract/singleton_api_resource.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

from stripe.api_resources.abstract.api_resource import APIResource


Expand Down
5 changes: 3 additions & 2 deletions stripe/api_resources/abstract/updateable_api_resource.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import urllib
from __future__ import absolute_import, division, print_function

from stripe import api_requestor, util
from stripe.api_resources.abstract.api_resource import APIResource
from stripe.six.moves.urllib.parse import quote_plus


class UpdateableAPIResource(APIResource):
Expand All @@ -19,7 +20,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
2 changes: 2 additions & 0 deletions stripe/api_resources/abstract/verify_mixin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

from stripe import util


Expand Down
6 changes: 4 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 __future__ import absolute_import, division, print_function

from stripe import oauth, util
from stripe.api_resources.abstract import CreateableAPIResource
Expand All @@ -7,6 +7,8 @@
from stripe.api_resources.abstract import ListableAPIResource
from stripe.api_resources.abstract import nested_resource_class_methods

from stripe.six.moves.urllib.parse import quote_plus


@nested_resource_class_methods(
'external_account',
Expand All @@ -33,7 +35,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
8 changes: 5 additions & 3 deletions stripe/api_resources/alipay_account.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
import urllib
from __future__ import absolute_import, division, print_function

from stripe import util
from stripe.api_resources.customer import Customer
from stripe.api_resources.abstract import DeletableAPIResource
from stripe.api_resources.abstract import UpdateableAPIResource

from stripe.six.moves.urllib.parse import quote_plus


class AlipayAccount(UpdateableAPIResource, DeletableAPIResource):
OBJECT_NAME = 'alipay_account'

@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
2 changes: 2 additions & 0 deletions stripe/api_resources/apple_pay_domain.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

from stripe.api_resources.abstract import CreateableAPIResource
from stripe.api_resources.abstract import DeletableAPIResource
from stripe.api_resources.abstract import ListableAPIResource
Expand Down
2 changes: 2 additions & 0 deletions stripe/api_resources/application_fee.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import, division, print_function

from stripe import util
from stripe.api_resources.abstract import ListableAPIResource
from stripe.api_resources.abstract import nested_resource_class_methods
Expand Down
Loading

0 comments on commit f948b8b

Please sign in to comment.