Ejemplo n.º 1
0
class UserCatalog(Persistent):

    implements(IUserCatalog)

    def __init__(self):
        self._index = TextIndex()
        self._regdate = FieldIndex()
        self._metadata = IOBTree()

    def index(self, user):
        ints = getUtility(IIntIds)  
        site = getSite()
        mtool = getToolByName(site, 'portal_membership')
        memberdata = mtool.getMemberById(user.getId())
        if memberdata is None:
            return
        memberid = ints.register(memberdata)
        text = "%s %s %s" % (memberdata.getUserName(),
                             memberdata.getProperty('fullname'),
                             memberdata.getProperty('email'))
        regdate = memberdata.getProperty('registrationdate')
        regdate = datetime.strptime(regdate.strftime("%Y-%m-%d"), "%Y-%m-%d")
        self._index.index_doc(memberid, text)
        self._regdate.index_doc(memberid, regdate)
        self._metadata[memberid] = {
            'username': memberdata.getUserName(),
            'fullname': memberdata.getProperty('fullname'),
            'email': memberdata.getProperty('email'),
            'registrationdate': memberdata.getProperty('registrationdate')
            }

    def unindex(self, member):
        ints = getUtility(IIntIds)  
        memberid = ints.register(member)
        self._index.unindex_doc(memberid)
        self._regdate.unindex_doc(memberid)

    def search(self, searchstring='', regdate=None):
        ints = getUtility(IIntIds)  
        site = getSite()
        mtool = getToolByName(site, 'portal_membership')
        if searchstring:
            res = self._index.apply(searchstring).keys()
        else:
            res = []
        if regdate:
            res2 = self._regdate.apply(regdate)
            # get the intersection between the two results
            memberids = []
            if searchstring:
                for e in res:
                    if e in res2:
                        memberids.append(e)
            memberids = res2
        else:
            memberids = res
        result = []
        for k in memberids:
            result.append(self._metadata[k])
        return result
Ejemplo n.º 2
0
 def __init__(self, *args, **kw):
     super(TrackingStorage, self).__init__(*args, **kw)
     self.indexes = OOBTree.OOBTree()
     for idx in self.indexAttributes:
         self.indexes[idx] = FieldIndex()
     self.runs = IOBTree.IOBTree()
     self.currentRuns = OOBTree.OOBTree()
     self.taskUsers = OOBTree.OOBTree()
Ejemplo n.º 3
0
 def setupIndexes(self):
     changed = False
     for idx in self.indexAttributes:
         if idx not in self.indexes:
             self.indexes[idx] = FieldIndex()
             changed = True
     if changed:
         self.reindexTracks()
Ejemplo n.º 4
0
    def __init__(self, context):
        self.context = context
        annotations = IAnnotations(context)

        if not "chatbehavior.messages" in annotations:
            annotations["chatbehavior.messages"] = IOBTree()

        if not "chatbehavior.index" in annotations:
            annotations["chatbehavior.index"] = FieldIndex()

        self.index = annotations["chatbehavior.index"]
        self.messages = annotations["chatbehavior.messages"]
Ejemplo n.º 5
0
    print "Usage: <instancehome>/bin/instance run %s <id>" % sys.argv[0]
    sys.exit(1)

portal = app[portal_id]
setSite(portal)

# we assume there is an admin user
user = app.acl_users.getUser('admin')
newSecurityManager(None, user.__of__(app.acl_users))
pmt = getToolByName(portal, 'portal_membership')

uc = getUtility(IUserCatalog, context=portal)
# we added _regdate later so we can't assume the catalog has this index
# yet
if not hasattr(uc, '_regdate'):
    uc._regdate = FieldIndex()
if not hasattr(uc, '_metadata'):
    uc._metadata = IOBTree()
ints = getUtility(IIntIds)

for index, mid in enumerate(pmt.listMemberIds()):
    member = pmt.getMemberById(mid)
    mintid = ints.queryId(member)

    regdate = member.getProperty('registrationdate')
    regdate = datetime.datetime.strptime(regdate.strftime("%Y-%m-%d"),
                                         "%Y-%m-%d")

    if not uc._metadata.has_key(mintid):
        uc.index(member)
        print "Indexing", mid
Ejemplo n.º 6
0
 def __init__(self):
     self._index = TextIndex()
     self._regdate = FieldIndex()
     self._metadata = IOBTree()