Example #1
0
def convert_metadata(infile, config):
    in_metadata = db.DB()
    in_metadata.set_cachesize(4, 0)
    in_metadata.open(infile + "/metadata", flags=db.DB_RDONLY)
    bloom_filter_size = int.from_bytes(in_metadata[b'bloom_filter_size'],
                                       'big')
    kmer_size = int.from_bytes(in_metadata[b'kmer_size'], 'big')
    num_hashes = int.from_bytes(in_metadata[b'num_hashes'], 'big')
    colours = pickle.loads(in_metadata[b'colours'])
    num_samples = len(colours)

    ## Create the sample metadata
    colour_sample = {}
    for colour in range(num_samples):
        key = "colour%i" % colour
        key = key.encode("utf-8")
        sample_name = in_metadata[key].decode('utf-8')
        colour_sample[colour] = sample_name
    ## Add the sample metadata

    storage = get_storage(config)
    sm = SampleMetadata(storage)

    for colour, sample_name in colour_sample.items():
        if "DELETE" in sample_name:
            sample_name = "D3L3T3D"
            print(colour, sample_name)
            sm._set_colour_sample(colour, sample_name)
            sm._set_sample_colour(sample_name, -1)
        else:
            sm._set_sample_colour(sample_name, colour)
            sm._set_colour_sample(colour, sample_name)
    sm._set_integer(sm.colour_count_key, num_samples)
    in_metadata.close()
    return num_samples
Example #2
0
def migrate(mapping_filepath, storage_engine, storage_filename=None):
    config = determine_config(storage_engine, storage_filename)
    storage = get_storage(config)
    current_metadata = SampleMetadata(storage)
    with open(mapping_filepath, 'rb') as infile:
        mapping = pickle.load(infile)

    for old_id in mapping:
        new_id = mapping.get(old_id)
        if new_id and new_id != old_id:
            colour = current_metadata.sample_to_colour(old_id)
            if colour:
                current_metadata._validate_sample_name(new_id)
                current_metadata._set_sample_colour(new_id, colour)
                current_metadata._set_colour_sample(colour, new_id)
                current_metadata._set_sample_colour(old_id, -1)

    storage.sync()
    storage.close()