root / trunk / sandbox / jhb / oc2 / containerbase.py

Revision 277, 3.4 kB (checked in by ocjhb, 3 years ago)

protocols removed, functionality now in wallet and issuer

  • Property svn:mime-type set to text/plain
  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1import simplejson, datetime, binascii
2
3################################### Fields ##################################
4
5class Field(object):
6    def __init__(self,name,signing=True,default=''):
7        self.name = name
8        self.signing = signing
9        self.default = default
10
11    def getencoded(self,object,allData=False):
12        value = getattr(object,self.name,self.default)
13        return value
14
15    def setdecoded(self,object,data):
16        setattr(object,self.name,data)
17
18class DateField(Field):
19
20    format = '%d.%m.%Y %H:%M:%S'
21
22    def getencoded(self,object,allData=False):
23        value = getattr(object,self.name,self.default)
24        if not value:
25            value = datetime.datetime.now()
26        return value.strftime(self.format)
27
28    def setdecoded(self,object,data):
29        dt = datetime.datetime.strptime(data,self.format)
30        setattr(object,self.name,dt)
31
32       
33
34class BinaryField(Field):
35   
36    def getencoded(self,object,allData=False):
37        value = getattr(object,self.name,self.default)
38        return binascii.b2a_base64(value).strip()
39
40    def setdecoded(self,object,data):
41        setattr(object,self.name,binascii.a2b_base64(data))
42     
43   
44class OneItemField(Field):
45   
46    def __init__(self,name,signing=True,default='',klass=dict):
47        Field.__init__(self,name=name,signing=signing,default=default)
48        self.klass = klass
49
50
51    def getencoded(self,object,allData=False):
52        value = getattr(object,self.name)
53        if value:
54            value = value.getData(allData=allData)
55        else:
56            value = self.default
57        return  value
58       
59    def setdecoded(self,object,data):
60        #import pdb; pdb.set_trace()
61        setattr(object,self.name,self.klass(data))
62
63
64
65
66class SubitemsField(Field):
67   
68    def __init__(self,name,signing=True,default='',klass=dict):
69        Field.__init__(self,name=name,signing=signing,default=default)
70        self.klass = klass
71
72
73    def getencoded(self,object,allData=False):
74        out = []
75        for item in getattr(object,self.name):
76            if item == None:
77                out.append('')
78            else:               
79                out.append(item.getData(allData=allData))
80        return out       
81       
82    def setdecoded(self,object,data):
83        value = []
84        for item in data:
85            if item == '':
86                value.append(None)
87            else:
88                value.append(self.klass(item))
89        setattr(object,self.name,value)     
90
91
92################################### Containers ##################################
93             
94
95class Container(object):   
96   
97    fields = []
98
99    def __init__(self,data={}):
100        self.fromData(data)
101
102    def fromData(self,data):
103
104        if data == None:
105            return
106
107        if type(data) == type(''):
108            data = simplejson.loads(data)
109
110        if type(data) != type({}):
111            data = dict(data)
112
113        for field in self.fields:
114            if data.has_key(field.name):
115                field.setdecoded(self,data[field.name])
116            else:               
117                setattr(self,field.name,field.default)
118
119
120    def getData(self,allData=False):
121        certdata = []
122        for field in self.fields:
123            if not (allData or field.signing):
124                continue
125            certdata.append((field.name,field.getencoded(self,allData=allData)))
126        return certdata
127
128    def toString(self,allData=False):
129        return simplejson.dumps(self.getData(allData=allData))
130
Note: See TracBrowser for help on using the browser.