summaryrefslogtreecommitdiff
path: root/jsonrpclib/history.py
blob: 090f9961c59dec93f31bf4adc91cf35e5c80f73d (plain)
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
class History(object):
    """
    This holds all the response and request objects for a
    session. A server using this should call "clear" after
    each request cycle in order to keep it from clogging
    memory.
    """
    size = 20
    requests = []
    responses = []
    _instance = None

    @classmethod
    def instance(cls):
        if not cls._instance:
            cls._instance = cls()
        return cls._instance

    def add_response(self, response_obj):
        if self.size == 0:
            return
        self.responses.append(response_obj)
        if self.size > 0:
            self.responses = self.responses[0 - self.size:]

    def add_request(self, request_obj):
        if self.size == 0:
            return
        self.requests.append(request_obj)
        if self.size > 0:
            self.requests = self.requests[0 - self.size:]

    @property
    def request(self):
        if len(self.requests) == 0:
            return None
        else:
            return self.requests[-1]

    @property
    def response(self):
        if len(self.responses) == 0:
            return None
        else:
            return self.responses[-1]

    def clear(self):
        del self.requests[:]
        del self.responses[:]