Passed
Push — master ( 20daf5...a283f8 )
by dai
06:53
created

school_api.client.SchoolClient.__init__()   A

Complexity

Conditions 2

Size

Total Lines 21
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 19
nop 3
dl 0
loc 21
rs 9.45
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
from __future__ import absolute_import, unicode_literals
3
4
from school_api.utils import to_text, ObjectDict
5
from school_api.config import URL_ENDPOINT, CLASS_TIME
6
from school_api.client.base import BaseUserClient
7
from school_api.client.api.score import Score
8
from school_api.client.api.schedule import Schedule
9
from school_api.client.api.place_schedule import PlaceSchedule
10
from school_api.client.api.user_info import UserlInfo
11
from school_api.client.utils import UserType, error_handle, ApiPermissions, get_time_list
12
from school_api.session.memorystorage import MemoryStorage
13
14
15
class SchoolClient(object):
16
    ''' 学校实例 '''
17
18
    def __init__(self, url, **kwargs):
19
        self.base_url = url.split('/default')[0] if url[-4:] == 'aspx' else url
20
        class_time_list = kwargs.get('class_time_list') or CLASS_TIME
21
        time_list = get_time_list(class_time_list)
22
23
        self.school = {
24
            'name': to_text(kwargs.get('name')),
25
            'code': kwargs.get('code'),
26
            'use_ex_handle': kwargs.get('use_ex_handle', True),
27
            'exist_verify': kwargs.get('exist_verify', True),
28
            'lan_url': kwargs.get('lan_url'),
29
            'proxies': kwargs.get('proxies'),
30
            'priority_proxy': kwargs.get('priority_proxy'),
31
            'timeout': kwargs.get('timeout', 10),
32
            'login_url': kwargs.get('login_url_path', '/default2.aspx'),
33
            'url_endpoint': kwargs.get('url_endpoint') or URL_ENDPOINT,
34
            'time_list': time_list
35
        }
36
        storage = kwargs.get('session', MemoryStorage)
37
        self.session = storage(self.school['code'])
38
        self.school = ObjectDict(self.school)
39
40
    def user_login(self, account, password, **kwargs):
41
        ''' 用户登录入口
42
        进行首次绑定操作时,请将 use_login_cookie 设置为False,避免其他用户进行会话登录
43
        :param account:  用户账号
44
        :param password: 用户密码
45
        :param user_type: 0.学生 1.教师 2.部门
46
        :param use_login_cookie: 是否使用会话登陆
47
        :param requests模块参数
48
        return 用户实例
49
        '''
50
        use_login_cookie = not(not kwargs.pop('use_session', True) or not kwargs.pop('use_login_cookie', True))
51
        user_type = kwargs.pop('user_type', UserType.STUDENT)
52
        user = UserClient(self, account, password, user_type)
53
        user = user.user_login(use_login_cookie, **kwargs)
54
        return user
55
56
57
class UserClient(BaseUserClient):
58
    ''' 用户实例 '''
59
60
    score = Score()
61
    info = UserlInfo()
62
    schedule = Schedule()
63
    place_schedule = PlaceSchedule()
64
65
    @error_handle
66
    def user_login(self, use_login_cookie, **kwargs):
67
        ''' 登录:通过SchoolClient类调用 '''
68
        login_session = None
69
        if use_login_cookie:
70
            login_session = self.session_management()
71
72
        if login_session is None:
73
            self.login.get_login(self.school, **kwargs)
74
            self.save_login_session()
75
            login_session = self
76
77
        return login_session
78
79
    @error_handle
80
    def get_schedule(self, *args, **kwargs):
81
        return self.schedule.get_schedule(*args, **kwargs)
82
83
    @error_handle
84
    @ApiPermissions([UserType.STUDENT, UserType.TEACHER])
85
    def get_info(self, **kwargs):
86
        return self.info.get_info(**kwargs)
87
88
    @error_handle
89
    @ApiPermissions([UserType.STUDENT])
90
    def get_score(self, *args, **kwargs):
91
        return self.score.get_score(*args, **kwargs)
92
93
    @error_handle
94
    @ApiPermissions([UserType.DEPT])
95
    def get_place_schedule(self, *args, **kwargs):
96
        return self.place_schedule.get_schedule(*args, **kwargs)
97