3 # Copyright (C) 2014 Ipsilon project Contributors, for licensee see COPYING
5 from ipsilon.util.data import TranStore
6 from ipsilon.util.log import Log
7 from datetime import datetime
8 from ipsilon.util.cookies import SecureCookie
11 TRANSTABLE = 'transactions'
12 TRANSID = "ipsilon_transaction_id"
15 class Transaction(Log):
17 def __init__(self, provider, **kwargs):
18 self.debug('Transaction: %s' % repr(kwargs))
19 self.provider = provider
20 self.transaction_id = None
21 self._ts = TranStore()
23 tid = kwargs.get(TRANSID)
25 self.transaction_id = tid
26 data = self._ts.get_unique_data(TRANSTABLE, tid)
29 data = {'provider': self.provider,
30 'origintime': str(datetime.now())}
31 self.transaction_id = self._ts.new_unique_data(TRANSTABLE, data)
33 self.debug('Transaction id: %s' % self.transaction_id)
35 def _set_cookie(self):
36 self.cookie = SecureCookie(name=None, value=self.provider)
38 cookiedata = {'cookie': self.cookie.name}
39 data = {self.transaction_id: cookiedata}
40 self._ts.save_unique_data(TRANSTABLE, data)
42 def _get_cookie(self):
43 data = self.retrieve()
44 if 'cookie' not in data:
45 raise ValueError('Cookie name not available')
46 self.cookie = SecureCookie(data['cookie'])
48 if self.cookie.value is None:
49 raise ValueError('Missing or invalid cookie')
51 def _del_cookie(self):
55 if not self.transaction_id:
57 self._ts.del_unique_data(TRANSTABLE, self.transaction_id)
59 self.transaction_id = None
61 def store(self, data):
62 savedata = {self.transaction_id: data}
63 self._ts.save_unique_data(TRANSTABLE, savedata)
66 data = self._ts.get_unique_data(TRANSTABLE,
67 uuidval=self.transaction_id)
68 return data.get(self.transaction_id)
70 def get_GET_arg(self):
71 return "%s=%s" % (TRANSID, self.transaction_id)
73 def get_POST_tuple(self):
74 return (TRANSID, self.transaction_id)