Skip to content

Commit f807adb

Browse files
committed
add platform support for user resources
1 parent 965c0b8 commit f807adb

File tree

6 files changed

+120
-1
lines changed

6 files changed

+120
-1
lines changed

fixtures/create_user.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
- request: !!python/object:vcr.request.Request
2+
body: ''
3+
headers: !!python/object/apply:__builtin__.frozenset
4+
- - !!python/tuple [User-Agent, Swiftype-Python/1.0.0]
5+
- !!python/tuple [Content-Type, application/json]
6+
host: localhost
7+
method: POST
8+
path: /api/v1/users.json?client_secret=a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f&auth_token=a-test-api-key&client_id=bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf
9+
port: 3000
10+
protocol: http
11+
response:
12+
body: {string: '{"id":"123456","access_token":"ab169f3343724916d2ccba5e748bdedd6cbf7c06e7d8952530dfa82e1b1052f3"}'}
13+
headers: {cache-control: 'max-age=0, private, must-revalidate', connection: close,
14+
content-type: application/json; charset=utf-8, etag: '"04764ec2f724ddb8cea4bce79acd93e0"',
15+
server: thin 1.5.0 codename Knife, x-request-id: 2237f34063dc0d5802919b5472bcf798,
16+
x-runtime: '0.069650', x-ua-compatible: IE=Edge}
17+
status: {code: 200, message: OK}

fixtures/user.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
- request: !!python/object:vcr.request.Request
2+
body: ''
3+
headers: !!python/object/apply:__builtin__.frozenset
4+
- - !!python/tuple [User-Agent, Swiftype-Python/1.0.0]
5+
- !!python/tuple [Content-Type, application/json]
6+
host: localhost
7+
method: GET
8+
path: /api/v1/users/12345.json?client_secret=a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f&auth_token=a-test-api-key&client_id=bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf
9+
port: 3000
10+
protocol: http
11+
response:
12+
body: {string: '{"id":"12345","access_token":"ab37d7821853d6be1d7c451b449064ccf55300fdd5157baed48af53fd52b61f5"}'}
13+
headers: {cache-control: 'max-age=0, private, must-revalidate', connection: close,
14+
content-type: application/json; charset=utf-8, etag: '"28378b63dc4393c429edb345597939d5"',
15+
server: thin 1.5.0 codename Knife, x-request-id: 2247f7e72009526040223e8b105c174a,
16+
x-runtime: '0.024827', x-ua-compatible: IE=Edge}
17+
status: {code: 200, message: OK}

fixtures/users.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
- request: !!python/object:vcr.request.Request
2+
body: ''
3+
headers: !!python/object/apply:__builtin__.frozenset
4+
- - !!python/tuple [User-Agent, Swiftype-Python/1.0.0]
5+
- !!python/tuple [Content-Type, application/json]
6+
host: localhost
7+
method: GET
8+
path: /api/v1/users.json?client_secret=a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f&auth_token=a-test-api-key&client_id=bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf
9+
port: 3000
10+
protocol: http
11+
response:
12+
body: {string: '[{"id":"12345","access_token":"6cf7fbd297f00a8e3863a0595f55ff7d141cbef2fcbe00159d0f7403649b384e"},{"id":"12346","access_token":"9937d7821853d6be1d7c451b449064ccf55300fdd5157baed48af53fd52b613c"}]'}
13+
headers: {cache-control: 'max-age=0, private, must-revalidate', connection: close,
14+
content-type: application/json; charset=utf-8, etag: '"8539c75e37dd05f0b7073aa733d859b4"',
15+
server: thin 1.5.0 codename Knife, x-request-id: 542ac89c231fc6e166c6e47e0c47e702,
16+
x-runtime: '0.022923', x-ua-compatible: IE=Edge}
17+
status: {code: 200, message: OK}

fixtures/users_pagination.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
- request: !!python/object:vcr.request.Request
2+
body: ''
3+
headers: !!python/object/apply:__builtin__.frozenset
4+
- - !!python/tuple [User-Agent, Swiftype-Python/1.0.0]
5+
- !!python/tuple [Content-Type, application/json]
6+
host: localhost
7+
method: GET
8+
path: /api/v1/users.json?client_secret=a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f&auth_token=a-test-api-key&page=2&client_id=bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf
9+
port: 3000
10+
protocol: http
11+
response:
12+
body: {string: '[]'}
13+
headers: {cache-control: 'max-age=0, private, must-revalidate', connection: close,
14+
content-type: application/json; charset=utf-8, etag: '"d751713988987e9331980363e24189ce"',
15+
server: thin 1.5.0 codename Knife, x-request-id: b1aad6d4e74543f75fc44ac778bbadd3,
16+
x-runtime: '0.023024', x-ua-compatible: IE=Edge}
17+
status: {code: 200, message: OK}

swiftype/swiftype.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313

1414
class Client(object):
1515

16-
def __init__(self, username=None, password=None, api_key=None, host=DEFAULT_API_HOST):
16+
def __init__(self, username=None, password=None, api_key=None, client_id=None, client_secret=None, host=DEFAULT_API_HOST):
17+
self.client_id = client_id
18+
self.client_secret = client_secret
1719
self.conn = Connection(username=username, password=password, api_key=api_key, host=host, base_path=DEFAULT_API_BASE_PATH)
1820

1921
def engines(self, page=None, per_page=None):
@@ -129,6 +131,18 @@ def recrawl_domain(self, engine_id, domain_id):
129131
def crawl_url(self, engine_id, domain_id, url):
130132
return self.conn._put(self.__domain_path(engine_id, domain_id) + '/crawl_url', data={'url': url})
131133

134+
def users(self, page=None, per_page=None):
135+
params = {'client_id': self.client_id, 'client_secret': self.client_secret}
136+
return self.conn._get(self.__users_path(), dict(params.items() + self.__pagination_params(page, per_page).items()))
137+
138+
def user(self, user_id):
139+
params = {'client_id': self.client_id, 'client_secret': self.client_secret}
140+
return self.conn._get(self.__user_path(user_id), params)
141+
142+
def create_user(self):
143+
params = {'client_id': self.client_id, 'client_secret': self.client_secret}
144+
return self.conn._post(self.__users_path(), params)
145+
132146
def __search_path(self, engine_id): return 'engines/%s/search' % (engine_id)
133147
def __suggest_path(self, engine_id): return 'engines/%s/suggest' % (engine_id)
134148
def __engines_path(self): return 'engines'
@@ -142,6 +156,8 @@ def __documents_path(self, engine_id, document_type_id): return '%s/documents' %
142156
def __analytics_path(self, engine_id): return '%s/analytics' % (self.__engine_path(engine_id))
143157
def __domain_path(self, engine_id, domain_id): return '%s/domains/%s' % (self.__engine_path(engine_id), domain_id)
144158
def __domains_path(self, engine_id): return '%s/domains' % (self.__engine_path(engine_id))
159+
def __users_path(self): return 'users'
160+
def __user_path(self, user_id): return 'users/%s' % (user_id)
145161

146162
def __pagination_params(self, page, per_page):
147163
return dict((k,v) for k,v in {'page': page, 'per_page': per_page}.iteritems() if v is not None)

tests/test_swiftype.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,5 +267,40 @@ def __create_temporary_engine(self, name = None):
267267
name = name if name else self.__time_name()
268268
return
269269

270+
class TestPlatformUsers(unittest.TestCase):
271+
272+
def setUp(self):
273+
try:
274+
api_key = os.environ['API_KEY']
275+
except:
276+
api_key = "a-test-api-key"
277+
278+
client_id = 'bd779af52ce7c26330a2c8a9216caf3f84906db6893788bdb4bd27549ca7bbbf'
279+
client_secret = 'a62962938bbe76194bbdc4e3cbfcb6708283b47614594610c71240f81c17af6f'
280+
self.client = swiftype.Client(api_key=api_key, client_id=client_id, client_secret=client_secret, host='localhost:3000')
281+
282+
def test_users(self):
283+
with vcr.use_cassette('fixtures/users.yaml'):
284+
response = self.client.users()
285+
self.assertEqual(response['status'], 200)
286+
self.assertEqual(len(response['body']), 2)
287+
288+
def test_users_pagination(self):
289+
with vcr.use_cassette('fixtures/users_pagination.yaml'):
290+
response = self.client.users(page=2)
291+
self.assertEqual(response['status'], 200)
292+
self.assertEqual(len(response['body']), 0)
293+
294+
def test_user(self):
295+
with vcr.use_cassette('fixtures/user.yaml'):
296+
user_id = '12345'
297+
response = self.client.user(user_id)
298+
self.assertEqual(response['body']['id'], user_id)
299+
300+
def test_create_user(self):
301+
with vcr.use_cassette('fixtures/create_user.yaml'):
302+
response = self.client.create_user()
303+
self.assertEqual(response['status'], 200)
304+
270305
if __name__ == '__main__':
271306
unittest.main()

0 commit comments

Comments
 (0)