source: web/IbidasAtomicServices2.py @ 268

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

Added functions to limit nodes on type and set. Added function to retrieve all possible edges between nodes.

File size: 6.0 KB
Line 
1from IbidasSimpleMessage import IbidasSimpleMessage
2
3class AtomicServices:
4    def __init__(self, cd):
5        self.cd = cd
6
7    def getAvailableSets(self):
8        msg = IbidasSimpleMessage()
9        sets = self.cd.set[:, ('set_id', 'name')]
10        msg.addSets(sets)
11        print msg.finalize()
12        return msg.finalize()
13
14    def getAvailableItemRelationTypes(self):
15        """Returns all the types associated with item_child_links.
16        """
17        print "Called getAvailableItemRelationTypes"
18        msg = IbidasSimpleMessage()
19        types = self.cd.term.join(self.cd.item_child_link, 'term_id', 'type_id').up()
20        types = types.union(types)
21        msg.addTerms(types)
22        return msg.finalize()
23
24    def getAvailableItemTypes(self):
25        """Returns all the types associated with items.
26        """
27        print "Called getAvailableItemTypes"
28        msg = IbidasSimpleMessage()
29        types = self.cd.term.join(self.cd.item, 'term_id', 'type_id').up()
30        types = types.union(types)
31        msg.addTerms(types)
32        return msg.finalize()
33
34    def __addItemContraints(self, query, args):
35        print "__addItemConstraints"
36        if(args.has_key('sets') & (len(args['sets']) > 0)):
37            print "Adding set contraint"
38            sets = args['sets']
39            sets = [int(x) for x in sets]
40            query = query[_.source_id.within(*sets)]
41        if(args.has_key('itemtypes') & (len(args['itemtypes']) > 0)):
42            print "Adding type contraint"
43            item_types = args['itemtypes']
44            item_types = [int(x) for x in item_types]
45            item_types = args['itemtypes']
46            query = query[_.type_id.within(*item_types)]
47        return query
48
49    def getItemChildren(self, args):
50        """Returns all the direct children of the provided items.
51        """
52        print "getItemChildren"
53        print args
54        assert args.has_key('items'), \
55                'No item_ids provided to search children with.'
56        msg = IbidasSimpleMessage()
57       
58        items = args['items']
59        ids = [int(x) for x in items]
60        items = self.cd.item[_.item_id.within(*ids)]
61
62        #FIXME: add link type & set contraints
63        links = self.cd.item_child_link.join(items, 'parent_id', 'item_id')
64       
65        children = self.cd.item.join(links, 'item_id', 'child_id').up()
66        children = self.__addItemContraints(children, args)
67       
68        links = links.join(children, 'child_id', 'item_id').up()
69        msg.addItems(children)
70        msg.addItemLinks(links)
71
72        return msg.finalize()
73
74    def getItemParents(self, args):
75        """Returs all the direct parents of the provided items.
76        """
77        print "getItemParents"
78        print args
79        items = args['items']
80        msg = IbidasSimpleMessage()
81        ids = [int(x) for x in items]
82        items = self.cd.item[_.item_id.within(*ids)]
83
84        links = self.cd.item_child_link.join(items, 'child_id', 'item_id')
85        msg.addItemLinks(links)
86        items = self.cd.item.join(links, 'item_id', 'parent_id').up()
87        print "Nr of parents found: ", len(items)
88        msg.addItems(items)
89
90        return msg.finalize()
91
92    def getItemNeighbours(self, args):
93        """Returns all the direct neighbours of the provided items.
94        """
95        print "getItemNeighbours"
96        print args
97        items = args['items']
98        msg = IbidasSimpleMessage()
99        ids = [int(x) for x in items]
100        items = self.cd.item[_.item_id.within(*ids)]
101
102        links = self.cd.item_child_link.join(items, 'parent_id', 'item_id')
103        msg.addItemLinks(links)
104        items = self.cd.item.join(links, 'item_id', 'child_id')
105        msg.addItems(items)
106       
107        links = self.cd.item_child_link.join(items, 'child_id', 'item_id')
108        msg.addItemLinks(links)
109        items = self.cd.item.join(links, 'item_id', 'parent_id')
110        msg.addItems(items)
111
112        return msg.finalize()
113
114    def getItemLinks(self, args):
115        """Returns all the links between the provided items."""
116        # FIXME: add constraints
117        items = args['items']
118        msg = IbidasSimpleMessage()
119        item_ids = [int(x) for x in items]
120        items = self.cd.item[_.item_id.within(*item_ids)]
121        links = self.cd.item_child_link.join(items, 'parent_id', 'item_id').up()
122        links = links.join(items, 'child_id', 'item_id').up()
123        msg.addItemLinks(links)
124
125        return msg.finalize()
126
127    def getItemsByID(self, ids):
128        pass
129
130    def getItemrelationsByID(self, ids):
131        pass
132       
133    def getSetsByID(self, ids):
134        msg = IbidasSimpleMessage()
135        sets = self.cd.set[_.set_id.within(*ids)]
136        msg.addSets(sets)
137        return msg.finalize()
138
139    def getSetsByName(self, names):
140        msg = IbidasSimpleMessage()
141        sets = self.cd.set[_.name.within(*names)]
142        msg.addSets(sets)
143        return msg.finalize()
144
145    def getSetContentBySourceName(self, name):
146        """Returns all the items and links associated with the
147        provided set_name."""
148        setid = self.cd.set[_.name==name]()
149        return self.getSetContentBySourceID(setid)
150
151    def getSetContentBySourceID(self, sourceID):
152        """Returns all the items and links associated with the
153        provided set_id."""
154        source_ids = sourceID['items']
155        print "getSetContentBySourceID called"
156        print "source_id: ", sourceID
157        msg = IbidasSimpleMessage()
158        items = self.cd.item[_.source_id.within(*source_ids)]
159        items = items[0:500]
160        msg.addItems(items)
161
162        l1 = self.cd.item_child_link.join(items, 'child_id', 'item_id')
163        l1 = l1.up()
164        l1 = l1.join(items, 'parent_id', 'item_id').up()
165        msg.addItemLinks(l1)
166
167        l2 = self.cd.item_child_link.join(items, 'parent_id', 'item_id')
168        l2 = l2.up()
169        l2 = l2.join(items, 'child_id', 'item_id').up()
170        msg.addItemLinks(l2)
171       
172        return msg.finalize()
173
174    def testConnection(self):
175        return "It works!"
176
177    def testConnectionHash(self):
178        msg = {'message': 'It works!'}
179        return msg
Note: See TracBrowser for help on using the repository browser.