source: web/IbidasAtomicServices2.py @ 270

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

Commit voor Evert.

File size: 8.8 KB
Line 
1import logging
2
3from IbidasSimpleMessage import IbidasSimpleMessage
4
5class AtomicServices:
6
7    LOG_FILENAME = "./ibidas_services.log"
8
9    def __init__(self, cd):
10        self.cd = cd
11        self.logger = None
12        self.__setupLogger()
13        self.logger.debug('Started AtomicServices')
14
15    def __setupLogger(self):
16        """Setup logger for this class."""
17        logging.basicConfig(
18                format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
19                filename=self.LOG_FILENAME,
20                filemode='w'
21        )
22        logger = logging.getLogger('IbidasAtomicServices')
23        logger.setLevel(logging.DEBUG)
24        self.logger = logger
25
26    def getAvailableSets(self, msg=None):
27        """Returns all the available datasets."""
28        self.logger.debug("Called getAvailableSets")
29        if msg is None:
30            msg = IbidasSimpleMessage()
31        sets = self.cd.set[:, ('set_id', 'name')]
32        msg.addSets(sets)
33        print msg.finalize()
34        return msg.finalize()
35
36    def getAvailableItemRelationTypes(self, msg=None):
37        """Returns all the types associated with item_child_links.
38        """
39        self.logger.debug("Called getAvailableItemRelationTypes")
40        if msg is None:
41            msg = IbidasSimpleMessage()
42        types = self.cd.term.join(self.cd.item_child_link, 'term_id', 'type_id').up()
43        types = types.union(types)
44        msg.addTerms(types)
45        return msg.finalize()
46
47    def getAvailableItemTypes(self):
48        """Returns all the types associated with items.
49        """
50        self.logger.debug("Called getAvailableItemTypes")
51        msg = IbidasSimpleMessage()
52        types = self.cd.term.join(self.cd.item, 'term_id', 'type_id').up()
53        types = types.union(types)
54        msg.addTerms(types)
55        return msg.finalize()
56
57    def __addItemContraints(self, query, args):
58        """Adds the set and type constaints to items."""
59        self.logger.debug("__addItemConstraints")
60        if(args.has_key('sets') & (len(args['sets']) > 0)):
61            self.logger.debug("Adding item set contraint")
62            set_ids = [int(x) for x in args['sets']]
63            query = query[_.source_id.within(*set_ids)]
64            self.logger.debug(
65                    "Nr of items left after item set constraint: "
66                    + str(len(query)))
67        if(args.has_key('itemtypes') & (len(args['itemtypes']) > 0)):
68            self.logger.debug("Adding item type contraint")
69            item_types = args['itemtypes']
70            item_type_ids = [int(x) for x in args['itemtypes']]
71            query = query[_.type_id.within(*item_type_ids)]
72        self.logger.debug("Returning query")
73        return query
74
75    def __addItemlinkConstraints(self, query, args):
76        """Adds the set and type constraints to itemlinks."""
77        self.logger.debug("__addItemlinkConstraints")
78        if(args.has_key('sets') & (len(args['sets']) > 0)):
79            self.logger.debug("Adding link set constraint")
80            print query.fields.name
81            self.logger.debug("Nr of links before link set constraint: "
82                    + str(len(query)))
83            set_ids = [int(x) for x in args['sets']]
84            query = query[_.source_id.within(*set_ids)]
85        self.logger.debug("Nr of links after link set constraint: "
86                + str(len(query)))
87        #if(args.has_key('itemrelationtypes') & (len(args['itemrelationtypes']) > 0)):
88        #    self.logger.debug("Adding link type constraint")
89        #    type_ids = [int(x) for x in args['itemrelationtypes']]
90        #    query = query[_.type_id.within(*type_ids)]
91        self.logger.debug("Returning query")
92        return query
93
94    def getItemChildren(self, args):
95        """Returns all the direct children of the provided items.
96        """
97        self.logger.debug("getItemChildren")
98        assert args.has_key('items'), \
99                'No item_ids provided to search children with.'
100        msg = IbidasSimpleMessage()
101       
102        item_ids = [int(x) for x in args['items']]
103        parents = self.cd.item[_.item_id.within(*item_ids)]
104        self.logger.debug("Number of matched parent items: " + 
105                str(len(parents)))
106
107        links = self.cd.item_child_link.join(parents, 'parent_id', 'item_id').up()
108        links = self.__addItemlinkConstraints(links, args)
109       
110        children = self.cd.item.join(links, 'item_id', 'child_id').up()
111        self.logger.debug("Nr of children before constraints: " + str(len(children)))
112        children = self.__addItemContraints(children, args)
113        self.logger.debug("Nr of children after constraints: " + str(len(children)))
114       
115        links = links.join(children, 'child_id', 'item_id').up()
116
117        msg.addItems(children)
118        msg.addItemLinks(links)
119
120        return msg.finalize()
121
122    def getItemParents(self, args):
123        """Returs all the direct parents of the provided items.
124        """
125        self.logger.debug("getItemParents")
126        assert args.has_key('items'), \
127                'No item_ids provided to search parents with.'
128        msg = IbidasSimpleMessage()
129        item_ids = [int(x) for x in args['items']]
130        children = self.cd.item[_.item_id.within(*item_ids)]
131        self.logger.debug("Nr of matched child items: " +
132                str(len(children)))
133
134        links = self.cd.item_child_link.join(children, 'child_id', 'item_id').up()
135        links = self.__addItemlinkConstraints(links, args)
136        parents = self.cd.item.join(links, 'item_id', 'parent_id').up()
137        parents = self.__addItemConstraints(parents, args)
138        links = links.join(parents, 'parent_id', 'item_id').up()
139        self.logger.debug("Nr of parents found: " + str(len(parents)))
140       
141        msg.addItemLinks(links)
142        msg.addItems(items)
143
144        return msg.finalize()
145
146    def getItemNeighbours(self, args):
147        """Returns all the direct neighbours of the provided items.
148        """
149        self.logger.debug("getItemNeighbours")
150        print args
151        items = args['items']
152        msg = IbidasSimpleMessage()
153        ids = [int(x) for x in items]
154        items = self.cd.item[_.item_id.within(*ids)]
155
156        links = self.cd.item_child_link.join(items, 'parent_id', 'item_id').up()
157        msg.addItemLinks(links)
158        items = self.cd.item.join(links, 'item_id', 'child_id').up()
159        msg.addItems(items)
160       
161        links = self.cd.item_child_link.join(items, 'child_id', 'item_id').up()
162        msg.addItemLinks(links)
163        items = self.cd.item.join(links, 'item_id', 'parent_id').up()
164        msg.addItems(items)
165
166        return msg.finalize()
167
168    def getItemLinks(self, args):
169        """Returns all the links between the provided items."""
170        # FIXME: add constraints
171        self.logger.debug("Called getItemLinks")
172        msg = IbidasSimpleMessage()
173        assert args.has_key('items'), \
174                "No items provided to get links for."
175        item_ids = [int(x) for x in args['items']]
176        items = self.cd.item[_.item_id.within(*item_ids)]
177        links = self.cd.item_child_link.join(items, 'parent_id', 'item_id').up()
178        links = links.join(items, 'child_id', 'item_id').up()
179        msg.addItemLinks(links)
180
181        return msg.finalize()
182
183    def getItemsByID(self, ids):
184        pass
185
186    def getItemrelationsByID(self, ids):
187        pass
188       
189    def getSetsByID(self, ids):
190        msg = IbidasSimpleMessage()
191        sets = self.cd.set[_.set_id.within(*ids)]
192        msg.addSets(sets)
193        return msg.finalize()
194
195    def getSetsByName(self, names):
196        msg = IbidasSimpleMessage()
197        sets = self.cd.set[_.name.within(*names)]
198        msg.addSets(sets)
199        return msg.finalize()
200
201    def getSetContentBySourceName(self, name):
202        """Returns all the items and links associated with the
203        provided set_name."""
204        setid = self.cd.set[_.name==name]()
205        return self.getSetContentBySourceID(setid)
206
207    def getSetContentBySourceID(self, sourceID):
208        """Returns all the items and links associated with the
209        provided set_id."""
210        source_ids = sourceID['items']
211        self.logger.debug("Called getSetContentBySourceID")
212        self.logger.debug("source_id: " + str(sourceID))
213        msg = IbidasSimpleMessage()
214        items = self.cd.item[_.source_id.within(*source_ids)]
215        items = items[0:500]
216        msg.addItems(items)
217
218        l1 = self.cd.item_child_link.join(items, 'child_id', 'item_id')
219        l1 = l1.up()
220        l1 = l1.join(items, 'parent_id', 'item_id').up()
221        msg.addItemLinks(l1)
222
223        l2 = self.cd.item_child_link.join(items, 'parent_id', 'item_id')
224        l2 = l2.up()
225        l2 = l2.join(items, 'child_id', 'item_id').up()
226        msg.addItemLinks(l2)
227       
228        return msg.finalize()
229
230    def testConnection(self):
231        return "It works!"
232
233    def testConnectionHash(self):
234        msg = {'message': 'It works!'}
235        return msg
Note: See TracBrowser for help on using the repository browser.