Skip to content

Commit e9f6f52

Browse files
authored
Merge pull request #8 from mailjet/api-version-kwargs
Add support for multiple Mailjet API versions.
2 parents 1aeb43c + 3f28c50 commit e9f6f52

File tree

5 files changed

+46
-19
lines changed

5 files changed

+46
-19
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ language: python
22
python:
33
- '2.6'
44
- '2.7'
5+
- '3.5'
6+
- '3.6'
57
deploy:
68
provider: pypi
79
user: api.mailjet

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,12 @@ import os
3636
API_KEY = os.environ['MJ_APIKEY_PUBLIC']
3737
API_SECRET = os.environ['MJ_APIKEY_PRIVATE']
3838

39-
mailjet = Client(auth=(API_KEY, API_SECRET))
39+
mailjet = Client(auth=(API_KEY, API_SECRET), version='v3')
4040

4141
```
4242

43+
**NOTE**: `version` reflects the api version in the url (`https://api.mailjet.com/{{ version }}/REST/`). It is `'v3'` by default and can be used to select another api version (for example `v3.1` for the new send API).
44+
4345
## Make a `GET` request:
4446
``` python
4547
# get every contacts

mailjet_rest/client.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,21 @@
99

1010
requests.packages.urllib3.disable_warnings()
1111

12+
1213
class Config(object):
13-
API_URL = 'https://api.mailjet.com/v3/'
14-
API_DOC = 'http://dev.mailjet.com/email-api/v3/'
14+
API_URL = 'https://api.mailjet.com/'
15+
API_REF = 'http://dev.mailjet.com/email-api/v3/'
16+
version = 'v3'
17+
18+
def __init__(self, version=None):
19+
if version is not None:
20+
self.version = version
1521

1622
def __getitem__(self, key):
1723
url = self.API_URL[0:]
24+
# Append version to URL.
25+
# Forward slash is ignored if present in self.version.
26+
url = urljoin(url, self.version + '/')
1827
headers = {'Content-type': 'application/json', 'User-agent': 'mailjet-apiv3-python'}
1928
if key.lower() == 'contactslist_csvdata':
2029
url = urljoin(url, 'DATA/')
@@ -61,8 +70,10 @@ def delete(self, id, **kwargs):
6170

6271
class Client(object):
6372

64-
def __init__(self, auth=None, config=Config()):
65-
self.auth, self.config = auth, config
73+
def __init__(self, auth=None, **kwargs):
74+
self.auth = auth
75+
version = kwargs.get('version', None)
76+
self.config = Config(version=version)
6677

6778
def __getattr__(self, name):
6879
split = name.split('_')

requirements.txt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
requests
2-
urllib3
3-
chardet2
1+
requests==2.17.3

test.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,57 @@
22
from mailjet_rest import Client
33
import os
44

5-
API_KEY = os.environ['MJ_APIKEY_PUBLIC']
6-
API_SECRET = os.environ['MJ_APIKEY_PRIVATE']
7-
8-
mj = Client(auth=(API_KEY, API_SECRET))
95

106
class TestSuite(unittest.TestCase):
117

8+
def setUp(self):
9+
self.auth = (
10+
os.environ['MJ_APIKEY_PUBLIC'],
11+
os.environ['MJ_APIKEY_PRIVATE']
12+
)
13+
self.client = Client(auth=self.auth)
14+
1215
def test_get_no_param(self):
13-
result = mj.contact.get().json()
16+
result = self.client.contact.get().json()
1417
self.failUnless(('Data' in result and 'Count' in result))
1518

1619
def test_get_valid_params(self):
17-
result = mj.contact.get(filters={'limit': 2}).json()
20+
result = self.client.contact.get(filters={'limit': 2}).json()
1821
self.failUnless('Count' in result)
1922

2023
def test_get_invalid_parameters(self):
2124
# invalid parameters are ignored
22-
result = mj.contact.get(filters={'invalid': 'false'}).json()
25+
result = self.client.contact.get(filters={'invalid': 'false'}).json()
2326
self.failUnless('Count' in result)
2427

2528
def test_get_with_data(self):
2629
# it shouldn't use data
27-
result = mj.contact.get(data={'Email': '[email protected]'})
30+
result = self.client.contact.get(data={'Email': '[email protected]'})
2831
self.failUnless(result.status_code == 200)
2932

3033
def test_get_with_action(self):
31-
result = mj.contact_getcontactslists.get(id=5771382).json()
34+
result = self.client.contact_getcontactslists.get(id=5771382).json()
3235
self.failUnless('Count' in result)
3336

3437
def test_get_with_id_filter(self):
35-
result = mj.contact.get(filter={'id': 5771382}).json()
38+
result = self.client.contact.get(filter={'id': 5771382}).json()
3639
self.failUnless('Count' in result)
3740

3841
def test_post_with_no_param(self):
39-
result = mj.sender.create(data={}).json()
42+
result = self.client.sender.create(data={}).json()
4043
self.failUnless('StatusCode' in result and result['StatusCode'] is not 400)
4144

45+
def test_client_custom_version(self):
46+
self.client = Client(
47+
auth=self.auth,
48+
version='v3.1'
49+
)
50+
self.assertEqual(self.client.config.version, 'v3.1')
51+
self.assertEqual(
52+
self.client.config['send'][0],
53+
'https://api.mailjet.com/v3.1/send'
54+
)
55+
4256

4357
if __name__ == '__main__':
4458
unittest.main()

0 commit comments

Comments
 (0)