Skip to content

Commit

Permalink
Add python six module for python compatibility (#20)
Browse files Browse the repository at this point in the history
* Add python six module for python compatibility

* Add string compatibility for python 2.7
  • Loading branch information
lynneatan committed May 16, 2018
1 parent 140500d commit 00fc7b8
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 31 deletions.
5 changes: 3 additions & 2 deletions patreon/api.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import requests
import six

from patreon.jsonapi.parser import JSONAPIParser
from patreon.jsonapi.url_util import build_url
from patreon.schemas import campaign
from patreon.utils import user_agent_string
from patreon.version_compatibility.utc_timezone import utc_timezone
from patreon.version_compatibility.urllib_parse import urlencode, urlparse, parse_qs
from six.moves.urllib.parse import urlparse, parse_qs, urlencode


class API(object):
Expand Down Expand Up @@ -69,7 +70,7 @@ def head_and_tail(path):
if current_dict is None or (head is not None and tail is None):
return None
# Path stopped before leaf was reached
elif current_dict and type(current_dict) != str:
elif current_dict and type(current_dict) != six.text_type:
raise Exception(
'Provided cursor path did not result in a link', current_dict
)
Expand Down
42 changes: 22 additions & 20 deletions patreon/api_spec.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
import datetime
import functools
import mock
import six

from patreon import api
from patreon.jsonapi import url_util
from patreon.jsonapi.parser import JSONAPIParser
from patreon.utils import user_agent_string
from patreon.version_compatibility import urllib_parse
from patreon.version_compatibility.utc_timezone import utc_timezone
from six.moves.urllib.parse import urlencode

MOCK_CAMPAIGN_ID = 12
API_ROOT_ENDPOINT = 'https://www.patreon.com/api/oauth2/api/'
MOCK_ACCESS_TOKEN = 'mock token'
MOCK_CURSOR_VALUE = 'Mock Cursor Value'
API_ROOT_ENDPOINT = six.text_type('https://www.patreon.com/api/oauth2/api/')
MOCK_ACCESS_TOKEN = six.text_type('mock token')
MOCK_CURSOR_VALUE = six.text_type('Mock Cursor Value')


DEFAULT_API_HEADERS = {
'Authorization': 'Bearer ' + MOCK_ACCESS_TOKEN,
Expand All @@ -23,7 +25,7 @@


def api_url(*segments, **query):
path = '/'.join(map(str, segments))
path = six.text_type('/').join(map(six.text_type, segments))

fields = query.get('fields', None)
includes = query.get('includes', None)
Expand All @@ -35,7 +37,7 @@ def api_url(*segments, **query):
del query['includes']

if query:
path += '?' + urllib_parse.urlencode(query)
path += '?' + urlencode(query)

return url_util.build_url(
API_ROOT_ENDPOINT + path,
Expand Down Expand Up @@ -85,10 +87,10 @@ def execute_test(method_func, *args, **kwargs):
def test_extract_cursor_returns_cursor_when_provided():
assert MOCK_CURSOR_VALUE == api.API.extract_cursor(
{
'links':
six.text_type('links'):
{
'next':
'https://patreon.com/members?page[cursor]=' +
six.text_type('next'):
six.text_type('https://patreon.com/members?page[cursor]=') +
MOCK_CURSOR_VALUE,
},
}
Expand All @@ -98,17 +100,17 @@ def test_extract_cursor_returns_cursor_when_provided():
def test_extract_cursor_returns_None_when_no_cursor_provided():
assert None is api.API.extract_cursor(
{
'links': {
'next': 'https://patreon.com/members?page[offset]=25',
six.text_type('links'): {
six.text_type('next'): six.text_type('https://patreon.com/members?page[offset]=25'),
},
}
)


def test_extract_cursor_returns_None_when_link_is_not_a_string():
assert None is api.API.extract_cursor({
'links': {
'next': None,
six.text_type('links'): {
six.text_type('next'): None,
},
})

Expand All @@ -118,8 +120,8 @@ def test_extract_cursor_returns_None_when_link_is_malformed():

try:
api.API.extract_cursor({
'links': {
'next': 12,
six.text_type('links'): {
six.text_type('next'): 12,
},
})

Expand All @@ -132,12 +134,12 @@ def test_extract_cursor_returns_None_when_link_is_malformed():

@api_test()
def test_can_fetch_user():
return api_url('current_user'), client.fetch_user()
return api_url(six.text_type('current_user')), client.fetch_user()


@api_test()
def test_can_fetch_campaign():
expected_url = api_url('current_user', 'campaigns')
expected_url = api_url(six.text_type('current_user'), six.text_type('campaigns'))
response = client.fetch_campaign()
return expected_url, response

Expand All @@ -147,9 +149,9 @@ def test_can_fetch_api_and_patrons():
response = client.fetch_campaign_and_patrons()

expected_url = api_url(
'current_user',
'campaigns',
includes=['rewards', 'creator', 'goals', 'pledges'],
six.text_type('current_user'),
six.text_type('campaigns'),
includes=[six.text_type('rewards'), six.text_type('creator'), six.text_type('goals'), six.text_type('pledges')],
)

return expected_url, response
Expand Down
3 changes: 1 addition & 2 deletions patreon/jsonapi/url_util.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from collections import OrderedDict

from patreon.version_compatibility.urllib_parse import urlencode
from six.moves.urllib.parse import urlencode


def joined_or_null(arr):
Expand Down
7 changes: 0 additions & 7 deletions patreon/version_compatibility/urllib_parse.py

This file was deleted.

0 comments on commit 00fc7b8

Please sign in to comment.