-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwanikani.py
63 lines (50 loc) · 2.54 KB
/
wanikani.py
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
from json import loads
from enum import Enum
from urllib.request import urlopen, Request
from urllib.parse import urlencode
__all__ = ['WaniKani']
URL_TEMPLATE = 'https://api.wanikani.com/v2/{endpoint}/{argument}?{filters}'
AUTH_TEMPLATE = 'Bearer {token}'
ERROR_TEMPLATE = '{code} - {message}'
class WaniKani(object):
def __init__(self, token, url_template=URL_TEMPLATE, auth_template=AUTH_TEMPLATE):
self.auth = auth_template.format(token=token)
self.url_template = url_template
def request(self, endpoint, argument='', filters={}, after=None, before=None):
if after is not None:
filters['page_after_id'] = after
elif before:
filters['page_before_id'] = before
filters = '&' + urlencode(filters)
url = self.url_template.format(endpoint=endpoint, argument=argument, filters=filters)
request = Request(url)
request.add_header('Authorization', self.auth)
result = loads(urlopen(request).read().decode('utf-8'))
return result
def get_user(self):
return self.request('user')
user = property(get_user)
def get_subjects(self, id='', filters={}, after=None, before=None):
return self.request('subjects', id, filters, after, before)
subjects = property(get_subjects)
def get_assignments(self, id='', filters={}, after=None, before=None):
return self.request('assignments', id, filters, after, before)
assignments = property(get_assignments)
def get_review_statistics(self, id='', filters={}, after=None, before=None):
return self.request('review_statistics', id, filters, after, before)
review_statistics = property(get_review_statistics)
def get_study_materials(self, id='', filters={}, after=None, before=None):
return self.request('study_materials', id, filters, after, before)
study_materials = property(get_study_materials)
def get_summary(self):
return self.request('summary')
summary = property(get_summary)
def get_reviews(self, id='', filters={}, after=None, before=None):
return self.request('reviews', id, filters, after, before)
reviews = property(get_reviews)
def get_level_progressions(self, id='', filters={}, after=None, before=None):
return self.request('level_progressions', id, filters, after, before)
level_progressions = property(get_level_progressions)
def get_resets(self, id='', filters={}, after=None, before=None):
return self.request('resets', id, filters, after, before)
resets = property(get_resets)