File: sessionrecord.py

package info (click to toggle)
python-axolotl 0.2.3-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 592 kB
  • sloc: python: 2,962; makefile: 3
file content (68 lines) | stat: -rw-r--r-- 2,265 bytes parent folder | download | duplicates (3)
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
# -*- coding: utf-8 -*-

from . import storageprotos_pb2 as storageprotos
from .sessionstate import SessionState


class SessionRecord:
    ARCHIVED_STATES_MAX_LENGTH = 40

    def __init__(self, sessionState=None, serialized=None):
        """
        :type sessionState: SessionState
        :type serialized: str
        """
        self.previousStates = []
        if sessionState:
            self.sessionState = sessionState
            self.fresh = False
        elif serialized:
            record = storageprotos.RecordStructure()
            record.ParseFromString(serialized)
            self.sessionState = SessionState(record.currentSession)
            self.fresh = False
            for previousStructure in record.previousSessions:
                self.previousStates.append(SessionState(previousStructure))

        else:
            self.fresh = True
            self.sessionState = SessionState()

    def hasSessionState(self, version, aliceBaseKey):
        if self.sessionState.getSessionVersion() == version and aliceBaseKey == self.sessionState.getAliceBaseKey():
            return True

        for state in self.previousStates:
            if state.getSessionVersion() == version and aliceBaseKey == state.getAliceBaseKey():
                return True

        return False

    def getSessionState(self):
        return self.sessionState

    def getPreviousSessionStates(self):
        return self.previousStates

    def isFresh(self):
        return self.fresh

    def archiveCurrentState(self):
        self.promoteState(SessionState())

    def promoteState(self, promotedState):
        self.previousStates.insert(0, self.sessionState)
        self.sessionState = promotedState
        if len(self.previousStates) > self.__class__.ARCHIVED_STATES_MAX_LENGTH:
            self.previousStates.pop()

    def setState(self, sessionState):
        self.sessionState = sessionState

    def serialize(self):
        previousStructures = [previousState.getStructure() for previousState in self.previousStates]
        record = storageprotos.RecordStructure()
        record.currentSession.MergeFrom(self.sessionState.getStructure())
        record.previousSessions.extend(previousStructures)

        return record.SerializeToString()