-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathapi.py
More file actions
97 lines (73 loc) · 2.8 KB
/
api.py
File metadata and controls
97 lines (73 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"""
Wrapper of Memberkit api.
See doc: https://gist.github.com/rainerborene/26bc6b66bbc5dd4f78a1141df31ef718
"""
from datetime import date
import requests
from decorator import decorator
from django.conf import settings
class _ApiKeyNone:
pass
_base_url = 'https://memberkit.com.br'
_default_api_key = _ApiKeyNone
def set_default_api_key(key: str) -> None:
global _default_api_key
if key:
_default_api_key = key
set_default_api_key(settings.MEMBERKIT_API_KEY)
class MemberkitApiKeyError(Exception):
pass
@decorator
def _configure_api_key(func, *args, api_key=_ApiKeyNone, **kwargs):
if not settings.MEMBERKIT_ON:
return []
if api_key is _ApiKeyNone:
api_key = _default_api_key
if api_key is _ApiKeyNone:
raise MemberkitApiKeyError('api_key must be passed as parameter or set_default_api_key if valid key')
return func(*args, api_key=api_key, **kwargs)
@_configure_api_key
def list_membership_levels(*, api_key=_ApiKeyNone):
response = requests.get(f'{_base_url}/api/v1/membership_levels?api_key={api_key}')
return response.json()
@_configure_api_key
def user_detail(email_or_memberkit_user_id, *, api_key=_ApiKeyNone):
response = requests.get(f'{_base_url}/api/v1/users/{email_or_memberkit_user_id}?api_key={api_key}')
return response.json()
@_configure_api_key
def activate_user(full_name: str, email: str, subscription_type_id: int, expires_at: date = None, *,
api_key=_ApiKeyNone):
if expires_at is None:
expires_at = date(2200, 1, 1)
data = {
'full_name': full_name,
'email': email,
'status': 'active',
'blocked': False,
'membership_level_id': subscription_type_id,
'unlimited': False,
'expires_at': expires_at.strftime('%d/%m/%Y'),
}
requests.post(f'{_base_url}/api/v1/users?api_key={api_key}', json=data)
return user_detail(email)
@_configure_api_key
def inactivate_user(memberkit_user_id: int, subscription_type_id: int, *,
api_key=_ApiKeyNone):
user_json = user_detail(memberkit_user_id, api_key=api_key)
data = {
'full_name': user_json['full_name'],
'email': user_json['email'],
'status': 'expired',
'blocked': False,
'membership_level_id': subscription_type_id,
'unlimited': False,
'expires_at': date.today().strftime('%d/%m/%Y'),
}
response = requests.post(f'{_base_url}/api/v1/users?api_key={api_key}', json=data)
return response.json()
@_configure_api_key
def generate_token(memberkit_user_id: int, *, api_key=_ApiKeyNone):
user_json = user_detail(memberkit_user_id, api_key=api_key)
data = {'email': user_json['email']}
response = requests.post(f'{_base_url}/api/v1/tokens?api_key={api_key}', json=data)
return response.json()['token']