Skip to content

Commit 2e87a40

Browse files
committed
Added client_from_file
Added client_from_file function to create a Client instance from an ini style config file as well as tests.
1 parent 72fc753 commit 2e87a40

File tree

5 files changed

+112
-1
lines changed

5 files changed

+112
-1
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
ox_*.py
1+
.ox3rc
22
*.pyc

ox3apiclient/__init__.py

+35
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: utf-8 -*-
22

3+
import ConfigParser
34
import cookielib
45
import json
56
import oauth2 as oauth
@@ -209,3 +210,37 @@ def delete(self, url):
209210
""""""
210211
res = self.request(self._resolve_url(url), method='DELETE')
211212
return json.loads(res.read())
213+
214+
215+
def client_from_file(file_path='.ox3rc', env=None):
216+
""""""
217+
cp = ConfigParser.RawConfigParser()
218+
cp.read(file_path)
219+
220+
# Load default env if no env is specified. The default env is just the first
221+
# env listed.
222+
env_ids = [e for e in cp.get('ox3apiclient', 'envs').split('\n') if e]
223+
env = env if env else env_ids[0]
224+
225+
# Required parameters for a ox3apiclient.Client instance.
226+
required_params = [
227+
'domain',
228+
'realm',
229+
'consumer_key',
230+
'consumer_secret']
231+
232+
client_params = {}
233+
234+
# TODO: Catch NoOptionErrors.
235+
for key in required_params:
236+
client_params[key] = cp.get(env, key)
237+
238+
# TODO: Add support for optional parameters.
239+
240+
client = Client(
241+
domain=client_params['domain'],
242+
realm=client_params['realm'],
243+
consumer_key=client_params['consumer_key'],
244+
consumer_secret=client_params['consumer_secret'])
245+
246+
return client

tests/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from clientfromfile import *

tests/clientfromfile.py

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import os.path
4+
import unittest
5+
6+
import ox3apiclient
7+
8+
class ClientFromFileTestCase(unittest.TestCase):
9+
10+
def test_returns_client(self):
11+
file_path = os.path.join(os.path.dirname(__file__), 'ox3rctest')
12+
ox = ox3apiclient.client_from_file(file_path=file_path)
13+
self.assertTrue(isinstance(ox, ox3apiclient.Client))
14+
15+
def test_loads_default_env(self):
16+
file_path = os.path.join(os.path.dirname(__file__), 'ox3rctest')
17+
ox = ox3apiclient.client_from_file(file_path=file_path)
18+
19+
test_values = [
20+
'domain',
21+
'realm',
22+
'consumer_secret',
23+
'consumer_key']
24+
25+
loaded_values = [
26+
ox.domain,
27+
ox.realm,
28+
ox.consumer_key,
29+
ox.consumer_secret]
30+
31+
test_values.sort()
32+
loaded_values.sort()
33+
self.assertEqual(loaded_values, test_values)
34+
35+
def test_loads_alternate_env(self):
36+
file_path = os.path.join(os.path.dirname(__file__), 'ox3rctest')
37+
ox = ox3apiclient.client_from_file(file_path=file_path, env='dev')
38+
39+
test_values = [
40+
'domain_dev',
41+
'realm_dev',
42+
'consumer_secret_dev',
43+
'consumer_key_dev']
44+
45+
loaded_values = [
46+
ox.domain,
47+
ox.realm,
48+
ox.consumer_key,
49+
ox.consumer_secret]
50+
51+
test_values.sort()
52+
loaded_values.sort()
53+
self.assertEqual(loaded_values, test_values)

tests/ox3rctest

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
[ox3apiclient]
2+
envs=
3+
prod
4+
dev
5+
6+
[prod]
7+
email: email
8+
password: password
9+
domain: domain
10+
realm: realm
11+
consumer_key: consumer_key
12+
consumer_secret: consumer_secret
13+
14+
[dev]
15+
email: email_dev
16+
password: password_dev
17+
domain: domain_dev
18+
realm: realm_dev
19+
consumer_key: consumer_key_dev
20+
consumer_secret: consumer_secret_dev

0 commit comments

Comments
 (0)