Example #1
0
 def next(self):
     writer = None
     evid = EVID.fromEvent(self.event)
     try:
         # store the event
         writer = yield self.index.newWriter()
         if not IWriter.providedBy(writer):
             raise TypeError("index writer does not implement IWriter")
         fields = dict([(fn, v) for fn, ft, v in self.event])
         logger.trace("[writer %s] creating event %s" % (self, evid))
         yield writer.newEvent(evid, fields)
         # process the value of each field in the event
         for fieldname, fieldtype, value in self.event:
             logger.trace("[writer %s] using field %s:%s" %
                          (self, fieldname, fieldtype))
             field = yield writer.getField(fieldname, fieldtype)
             # store a posting for each term in each field
             for term, meta in field.parseValue(value):
                 logger.trace("[writer %s] creating posting %s:%s:%s" %
                              (self, field, term, evid))
                 yield writer.newPosting(field, term, evid, meta)
         logger.debug("[writer %s] committed event %s" % (self, str(evid)))
     finally:
         if writer != None:
             yield writer.close()
Example #2
0
def writeEventToIndex(event, index):
    """

    :param event:
    :type event:
    :param index:
    :type index:
    :returns: The EVID of the new event.
    :rtype: :class:`terane.bier.evid.EVID`
    """
    # verify that the index provides the appropriate interface
    if not IIndex.providedBy(index):
        raise TypeError("index does not implement IIndex")
    # get the current schema
    schema = index.getSchema()
    if not ISchema.providedBy(schema):
        raise TypeError("index schema does not implement ISchema")

    # create a new transactional writer
    writer = index.newWriter()
    if not IWriter.providedBy(writer):
        raise TypeError("index writer does not implement IWriter")
    writer.begin()

    # update the index in the context of a writer
    try:
        # create a new event identifier
        evid = EVID.fromEvent(event)
        # process the value of each field in the event
        fields = {}
        for fieldname, fieldtype, value in event:
            if not schema.hasField(fieldname, fieldtype):
                schema.addField(fieldname, fieldtype)
            field = schema.getField(fieldname, fieldtype)
            # update the field with the event value
            for term, meta in field.parseValue(value):
                writer.newPosting(field, term, evid, meta)
            fields[fieldname] = value
        # store the document data
        writer.newEvent(evid, fields)
    # if an exception was raised, then abort the transaction
    except:
        writer.abort()
        raise
    # otherwise commit the transaction and return the event id
    writer.commit()
    return evid
Example #3
0
 def next(self):
     writer = None
     evid = EVID.fromEvent(self.event)
     try:
         # store the event
         writer = yield self.index.newWriter()
         if not IWriter.providedBy(writer):
             raise TypeError("index writer does not implement IWriter")
         fields = dict([(fn,v) for fn,ft,v in self.event])
         logger.trace("[writer %s] creating event %s" % (self,evid))
         yield writer.newEvent(evid, fields)
         # process the value of each field in the event
         for fieldname, fieldtype, value in self.event:
             logger.trace("[writer %s] using field %s:%s" % (self,fieldname,fieldtype))
             field = yield writer.getField(fieldname, fieldtype)
             # store a posting for each term in each field
             for term,meta in field.parseValue(value):
                 logger.trace("[writer %s] creating posting %s:%s:%s" % (self,field,term,evid))
                 yield writer.newPosting(field, term, evid, meta)
         logger.debug("[writer %s] committed event %s" % (self,str(evid)))
     finally:
         if writer != None:
             yield writer.close()