Projet

Général

Profil

Télécharger (3,33 ko) Statistiques
| Branche: | Révision:

root / larpe / trunk / sessions.py @ 8843f79b

1
from quixote.session import Session, SessionManager
2
from quixote.html import htmltext
3
import users
4

    
5
from storage import StorableObject
6
import random
7

    
8
class BasicSession(Session, StorableObject):
9
    _names = 'sessions'
10

    
11
    name_identifier = None
12
    after_url = None
13
    anonymous_key = None
14
    lasso_session_dump = None
15
    lasso_anonymous_identity_dump = None
16
    tempfiles = None
17
    magictokens = None
18
    message = None
19

    
20
    def has_info(self):
21
        return self.name_identifier or self.after_url or self.anonymous_key or \
22
            self.tempfiles or self.lasso_session_dump or self.message or \
23
            self.lasso_anonymous_identity_dump or \
24
            self.magictokens or Session.has_info(self)
25
    is_dirty = has_info
26

    
27
    def get_session_id(self):
28
        return self.id
29

    
30
    def set_session_id(self, session_id):
31
        self.id = session_id
32

    
33
    def get_anonymous_key(self, generate = False):
34
        if self.anonymous_key:
35
            return self.anonymous_key
36
        if generate:
37
            self.anonymous_key = random.randint(0, 1000000000)
38
        return self.anonymous_key
39

    
40
    session_id = property(get_session_id, set_session_id)
41

    
42
    def display_message(self):
43
        if not self.message:
44
            return ''
45
        s = htmltext('<div class="%snotice">%s</div>' % self.message)
46
        self.message = None
47
        return s
48

    
49
    def add_magictoken(self, token, data):
50
        if not self.magictokens:
51
            self.magictokens = {}
52
        self.magictokens[token] = data
53

    
54
    def get_by_magictoken(self, token, default = None):
55
        if not self.magictokens:
56
            return default
57
        return self.magictokens.get(token, default)
58

    
59
    def get_user(self):
60
        user_id = Session.get_user(self)
61
        if user_id:
62
            if str(user_id).startswith('anonymous-'):
63
                user = users.User()
64
                user.id = user_id
65
                user.anonymous = True
66
                user.name_identifiers = [ self.name_identifier ]
67
                user.lasso_dump = self.lasso_anonymous_identity_dump
68
                return user
69
            else:
70
                try:
71
                    return users.User.get(user_id)
72
                except KeyError:
73
                    pass
74
        return None
75

    
76

    
77
class StorageSessionManager(SessionManager):
78
    def __init__(self):
79
        SessionManager.__init__(self, session_class=BasicSession)
80

    
81
    def forget_changes(self, session):
82
        pass
83

    
84
    def __getitem__(self, session_id):
85
        try:
86
            return BasicSession.get(session_id)
87
        except KeyError:
88
            raise KeyError
89

    
90
    def get(self, session_id, default = None):
91
        try:
92
            return BasicSession.get(session_id)
93
        except KeyError:
94
            return default
95

    
96
    def commit_changes(self, session):
97
        if session and session.id:
98
            session.store()
99
        
100
    def keys(self):
101
        return BasicSession.keys()
102

    
103
    def values(self):
104
        return BasicSession.values()
105

    
106
    def items(self):
107
        return BasicSession.items()
108

    
109
    def has_key(self, session_id):
110
        return BasicSession.has_key(session_id)
111

    
112
    def __setitem__(self, session_id, session):
113
        session.store()
114

    
115
    def __delitem__(self, session_id):
116
        if not session_id:
117
            return
118
        try:
119
            BasicSession.remove_object(session_id)
120
        except OSError:
121
            raise KeyError
(16-16/20)