示例#1
0
def update():
    global EX, ARRAY_NAME, KEF
    # There is a bug in batch update that kills kv
    k = kef.Kef(KEF)
    k.open()
    k.read()
    k.rewind()
    ARRAY_NAME = None
    while True:
        p, kv = k.next()
        if not p:
            break
        if 'array_name_a' in kv:
            ARRAY_NAME = kv['array_name_a']
        else:
            LOGGER.error(
                "Kef file does not contain entry for array_name_a. "
                "Can not continue!")
            return False

        ref = EX.ph5_g_reports.ph5_t_report
        if p not in columns.TABLES:
            LOGGER.warning("No table reference for key: {0}. "
                           "Possibly ph5 file is not open or initialized?"
                           .format(p))

        key = []
        errs_keys, errs_required = columns.validate(ref, kv, key)
        for e in errs_keys + errs_required:
            LOGGER.error(e)

        key = None
        columns.populate(ref, kv, key)

    return True
示例#2
0
def update():
    global EX, ARRAY_NAME, KEF
    #   There is a bug in batch update that kills kv
    k = kef.Kef(KEF)
    k.open()
    k.read()
    #k.batch_update ()
    #k.close () ; sys.exit ()
    k.rewind()
    ARRAY_NAME = None
    while 1:
        p, kv = k.next()
        if not p: break
        if kv.has_key('array_name_a'):
            ARRAY_NAME = kv['array_name_a']
        else:
            sys.stderr.write(
                "Error: Kef file does not contain entry for array_name_a.\nCan not continue!\n"
            )
            return False

        #   XXX   We always append   XXX
        #mo = updateRE.match (p)
        ref = EX.ph5_g_reports.ph5_t_report
        if not columns.TABLES.has_key(p):
            sys.stderr.write("Warning: No table reference for key: %s\n" % p)
            sys.stderr.write("Possibly ph5 file is not open or initialized?\n")

        key = []
        errs_keys, errs_required = columns.validate(ref, kv, key)
        for e in errs_keys + errs_required:
            sys.stderr.write(e + '\n')

        key = None
        columns.populate(ref, kv, key)

    return True
示例#3
0
    def batch_update(self, trace=False):
        '''   Batch update ph5 file from kef file   '''
        err = False
        self.rewind()
        p, kv = self.next()
        while p:
            if trace is True:
                kys = kv.keys()
                print("=-" * 30)
                print("{0}".format(p))
                for k in kys:
                    print("\t{0} = {1}".format(k, kv[k]))

            DELETE = False
            # Update or Append or Delete
            mo = deleteRE.match(p)
            if mo:
                DELETE = True
            else:
                mo = updateRE.match(p)

            key = []
            if mo:
                p, k = mo.groups()
                key.append(k)

            # columns.TABLES keeps a dictionary of key = table name, value =
            # reference to table
            if p not in columns.TABLES:
                LOGGER.warning("No table reference for key: {0}".format(p))
                LOGGER.info("Possibly ph5 file is not open or initialized?")
                p, kv = self.next()
                continue

            # Get handle
            ref = columns.TABLES[p]
            # key needs to be list for columns.validate
            if trace is True:
                LOGGER.info("Validating...")

            errs_keys, errs_required = columns.validate(ref, kv, key)
            for e in errs_keys + errs_required:
                err = True
                LOGGER.error(e)

            if trace is True:
                LOGGER.info("Done")

            if len(key) == 0:
                key = None
            else:
                key = key.pop(0)

            if DELETE:
                if trace is True:
                    LOGGER.info("Deleting...")
                else:
                    columns.delete(ref, kv[key], key)
            else:
                if trace is True:
                    LOGGER.info("Updating...")
                else:
                    columns.populate(ref, kv, key)

            if trace is True:
                LOGGER.info("Skipped")

            p, kv = self.next()

        return err
示例#4
0
文件: kef.py 项目: thecassion/PH5
    def batch_update(self, trace=False):
        '''   Batch update ph5 file from kef file   '''
        err = False
        self.rewind()
        p, kv = self.next()
        while p:
            if trace == True:
                kys = kv.keys()
                sys.stderr.write('=-' * 30)
                sys.stderr.write("\n%s\n" % p)
                for k in kys:
                    sys.stderr.write("\t%s = %s\n" % (k, kv[k]))

            DELETE = False
            #   Update or Append or Delete
            mo = deleteRE.match(p)
            if mo:
                DELETE = True
            else:
                mo = updateRE.match(p)

            key = []
            if mo:
                p, k = mo.groups()
                key.append(k)

            #if receiverRE.match (p) :
            ##   We are trying to update something in a Receivers_g
            #sys.stderr.write ("Warning: Attempting to modify something under /Experiment_g/Receivers_g.\n")

            #   columns.TABLES keeps a dictionary of key = table name, value = reference to table
            if not columns.TABLES.has_key(p):
                sys.stderr.write("Warning: No table reference for key: %s\n" %
                                 p)
                sys.stderr.write(
                    "Possibly ph5 file is not open or initialized?\n")
                p, kv = self.next()
                continue

            #   Get handle
            ref = columns.TABLES[p]
            #   key needs to be list for columns.validate
            if trace == True:
                sys.stderr.write("Validating...\n")

            errs_keys, errs_required = columns.validate(ref, kv, key)
            for e in errs_keys + errs_required:
                err = True
                sys.stderr.write(e + '\n')

            if trace == True:
                sys.stderr.write("Done\n")

            if len(key) == 0:
                key = None
            else:
                key = key.pop(0)

            if DELETE:
                if trace == True:
                    sys.stderr.write("Deleting...")
                else:
                    columns.delete(ref, kv[key], key)
            else:
                if trace == True:
                    sys.stderr.write("Updating...")
                else:
                    columns.populate(ref, kv, key)

            if trace == True:
                sys.stderr.write("Skipped\n")

            p, kv = self.next()

        return err