source: web/IbidasSimpleMessage.py @ 269

Last change on this file since 269 was 269, checked in by jjbot, 11 years ago

Added constraint handling and logging to AtomicServices2 and IbidasSimpleMessage?.

File size: 4.8 KB
Line 
1def colMap(fieldnames):
2    """Creates a dict with the columnnames as keys and their position in
3    the array as value.
4   
5    Inputs:
6    fieldnames: list of fieldnames.
7    """
8    m = {}
9    for ind, name in enumerate(fieldnames):
10        m[name] = ind
11    return m
12
13class IbidasSimpleMessage(object):
14   
15    ITEM_STR        = 'items'
16    ITEM_FN_STR     = 'item_fn'
17    ITEM_FT_STR     = 'item_ft'
18    ITEMLINK_STR    = 'itemlinks'
19    ITEMLINK_FN_STR = 'itemlink_fn'
20    ITEMLINK_FT_STR = 'itemlink_ft'
21    SET_STR         = 'sets'
22    SET_FN_STR      = 'set_fn'
23    SET_FT_STR      = 'set_ft'
24    SETLINK_STR     = 'setlinks'
25    SETLINK_FN_STR  = 'setlink_fn'
26    SETLINK_FT_STR  = 'setlink_ft'
27    TERM_STR        = 'terms'
28    TERM_FN_STR     = 'term_fn'
29    TERM_FT_STR     = 'term_ft'
30    TERMLINK_STR    = 'termlinks'
31    TERMLINK_FN_STR = 'termlink_fn'
32    TERMLINK_FT_STR = 'termlink_ft'
33   
34    ITEM_FN = ('item_id', 'type_id', 'source_id', 'display_name')
35    ITEMLINK_FN = ('item_link_id', 'type_id', 'source_id', 
36            'parent_id', 'child_id')
37    SET_FN = ('set_id', 'name') # Removed description due to Nones
38    SETLINK_FN = tuple()
39    TERM_FN = ('term_id', 'source_id', 'name', 'identifier', 'description')
40    TERMLINK_FN = tuple()
41   
42    def __init__(self):
43        self.items      = None
44        self.itemlinks  = None
45        self.terms      = None
46        self.termlinks  = None
47        self.sets       = None
48        self.setlinks   = None
49
50        self.item_fn        = colMap(self.ITEM_FN)
51        self.itemlink_fn    = colMap(self.ITEMLINK_FN)
52        self.term_fn        = colMap(self.TERM_FN)
53        self.termlink_fn    = colMap(self.TERMLINK_FN)
54        self.set_fn         = colMap(self.SET_FN)
55        self.setlink_fn     = colMap(self.SETLINK_FN)
56
57    def addItems(self, cont):
58        print "addItems called."
59        if not self.items is None:
60            self.items = self.items.stack(cont)
61        else:
62            self.items = cont
63
64    def addItemLinks(self, cont):
65        print "addItemLinks called."
66        if not self.itemlinks is None:
67            self.itemlinks = self.itemlinks.stack(cont)
68        else:
69            self.itemlinks = cont
70
71    def addTerms(self, cont):
72        print "addTerms called."
73        if not self.terms is None:
74            self.terms = self.terms.stack(cont)
75        else:
76            self.terms = cont
77
78    def addTermlinks(self, cont):
79        print "addTermlinks called."
80        if not self.termlinks is None:
81            self.termlinks = self.termlinks.stack(cont)
82        else:
83            self.termlinks = cont
84
85    def addSets(self, cont):
86        print "addSets called."
87       
88        print cont
89        print self.sets
90
91        if not self.sets is None:
92            self.sets = self.sets.stack(cont)
93        else:
94            self.sets = cont
95
96    def addSetlinks(self, cont):
97        print "addSetlinks called."
98        if not self.setlinks is None:
99            self.setlinks = self.setlinks.stack(cont)
100        else:
101            self.setlinks = cont
102
103    def finalize(self):
104        """Creates the message to be send to the client.
105        All entries follow the same pattern: the data is extracted from the
106        Ibidas table object and the column names and types are added.
107        The table data is stored as a list of tuples and the column names and
108        types are stored as lists of strings.
109        """
110        out = {}
111        if not self.items is None: 
112            out[self.ITEM_STR] = self.items.to_python()
113            out[self.ITEM_FN_STR] = self.item_fn
114            out[self.ITEM_FT_STR] = [str(x) for x in self.items.fields.type()]
115        if not self.itemlinks is None: 
116            out[self.ITEMLINK_STR] = self.itemlinks.to_python()
117            out[self.ITEMLINK_FN_STR] = self.itemlink_fn
118            out[self.ITEMLINK_FT_STR] = [str(x) for x in self.itemlinks.fields.type()]
119        if not self.terms is None: 
120            out[self.TERM_STR] = self.terms.to_python()
121            out[self.TERM_FN_STR] = self.term_fn
122            out[self.TERM_FT_STR] = [str(x) for x in self.terms.fields.type()]
123        if not self.termlinks is None: 
124            out[self.TERMLINK_STR] = self.termlinks.to_python()
125            out[self.TERMLINK_FN_STR] = self.termlink_fn
126            out[self.TERMLINK_FT_STR] = [str(x) for x in self.termlinks.fields.type()]
127        if not self.sets is None:
128            out[self.SET_STR] = self.sets.to_python()
129            out[self.SET_FN_STR] = self.set_fn
130            out[self.SET_FT_STR] = [str(x) for x in self.sets.fields.type()]
131        if not self.setlinks is None:
132            out[self.SETLINK_STR] = self.setlinks.to_python()
133            out[self.SETLINK_FN_STR] = self.setlink_fn
134            out[self.SETLINK_FT_STR] = [str(x) for x in self.setlinks.fields.type()]
135        print out
136        return out
137
Note: See TracBrowser for help on using the repository browser.