school_api.client.login_management   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 48
dl 0
loc 74
rs 10
c 0
b 0
f 0
wmc 11

6 Methods

Rating   Name   Duplication   Size   Complexity  
A LoginManagement.session_management() 0 20 5
A LoginManagement._del_login_session() 0 5 1
A LoginManagement._get_login_session_expires_time() 0 4 1
A LoginManagement.save_login_session() 0 9 1
A LoginManagement._get_login_session_key() 0 4 1
A LoginManagement._get_login_session() 0 10 2
1
# -*- coding: utf-8 -*-
2
from __future__ import absolute_import, unicode_literals
3
from school_api.client.api.login import Login
4
from school_api.config import LOGIN_SESSION_SAVE_TIME
5
6
7
class LoginManagement(object):
8
    """ 登录会话管理 """
9
    _http = None
10
    account = None
11
    session = None
12
    base_url = None
13
    url_token = ''
14
15
    login = Login()
16
17
    def session_management(self):
18
        ''' 登录会话管理 '''
19
        login_session = None
20
        if self._get_login_session():
21
            session_expires_time = LOGIN_SESSION_SAVE_TIME - self._get_login_session_expires_time()
22
23
            if session_expires_time < 60 * 5:
24
                # 五分钟内,不检测登录会话是否过期
25
                login_session = self
26
            elif self.login.check_session():
27
                # 登录会话检测有效
28
                if session_expires_time < 60 * 10:
29
                    # 登录比较频繁的,更新会话时间 (例如:部门账号操作)
30
                    self.save_login_session()
31
                login_session = self
32
            else:
33
                # 会话过期, 删除会话
34
                self._del_login_session()
35
36
        return login_session
37
38
    def save_login_session(self):
39
        ''' 保存登录会话 '''
40
        key = self._get_login_session_key()
41
        cookie = self._http.cookies.get_dict()
42
        session = {
43
            "cookie": cookie,
44
            "url_token": self.url_token
45
        }
46
        self.session.set(key, session, LOGIN_SESSION_SAVE_TIME)
47
48
    def _get_login_session(self):
49
        ''' 获取登录会话 '''
50
        key = self._get_login_session_key()
51
        session = self.session.get(key)
52
        if not session:
53
            return False
54
55
        self.url_token = session['url_token']
56
        self._http.cookies.update(session['cookie'])
57
        return True
58
59
    def _del_login_session(self):
60
        ''' 删除登录会话 '''
61
        key = self._get_login_session_key()
62
        self.session.delete(key)
63
        self._http.cookies.clear()
64
65
    def _get_login_session_expires_time(self):
66
        """ 获取登录会话过期时间 """
67
        key = self._get_login_session_key()
68
        return self.session.expires_time(key)
69
70
    def _get_login_session_key(self):
71
        ''' 获取缓存登录会话的key '''
72
        key = '{}:{}:{}:{}'.format(self.school.code, 'login_session', self.base_url, self.user.account)
73
        return key
74