From 1ef33187a08323a0cf1732e260a5e1fcd1fe2466 Mon Sep 17 00:00:00 2001 From: Aiwota Programmer Date: Sun, 24 Sep 2006 17:00:58 +0900 Subject: [PATCH] Re implement idxfile.py. --- src/FukuiNoNamari/idxfile.py | 73 +++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/src/FukuiNoNamari/idxfile.py b/src/FukuiNoNamari/idxfile.py index b89ce87..be2a4cf 100644 --- a/src/FukuiNoNamari/idxfile.py +++ b/src/FukuiNoNamari/idxfile.py @@ -18,6 +18,7 @@ import os import os.path import traceback +import itertools import misc @@ -42,25 +43,24 @@ def load_idx(bbs_type): idxfile_path = misc.get_thread_idx_path(bbs_type) datadic = default_dict.copy() - try: - for line in file(idxfile_path): - key_equal_value = line.rstrip() + def adjust_type(name, value): + if name in int_data: try: - index = key_equal_value.index("=") - except ValueError: - pass - else: - key = key_equal_value[:index] - if key in metadata_namelist: - value = key_equal_value[index+1:] - if key in int_data: - try: - value = int(value) - except: - value = 0 - datadic[key] = value + value = int(value) + except: + value = 0 + return name, value + + try: + iterable = itertools.imap(lambda l: l.rstrip(), file(idxfile_path)) + iterable = itertools.imap(misc.split_key_and_value, iterable) + iterable = itertools.ifilter(None, iterable) + iterable = misc.unpack_ifilter( + lambda name, value: name in metadata_namelist, iterable) + iterable = itertools.starmap(adjust_type, iterable) + for name, value in iterable: datadic[name] = value except IOError: - traceback.print_exc() + pass return datadic @@ -72,23 +72,28 @@ def save_idx(bbs_type, datadic): no need to save empty or non-existing metadata """ - # create a directory where idx file should belong if does not exist - idxfile_path = misc.get_thread_idx_path(bbs_type) - basedir = os.path.dirname(idxfile_path) - if not os.path.isdir(basedir): - os.makedirs(basedir) - - f = file(idxfile_path, "w") - for name, value in datadic.iteritems(): - - # save metadata only if its name exists in metadata_namelist - if name not in metadata_namelist: - continue - - # no need to save an empty or invalid field + def validate(name, value): if name in int_data and value > 0: - f.write(name + "=" + str(value) + "\n") + return True elif name not in int_data and value: - f.write(name + "=" + value + "\n") + return True + return False + + iterable = datadic.iteritems() - f.close() + # save metadata only if its name exists in metadata_namelist + iterable = misc.unpack_ifilter( + lambda name, value: name in metadata_namelist, iterable) + + # no need to save an empty or invalid field + iterable = misc.unpack_ifilter(validate, iterable) + + # format + iterable = itertools.starmap(lambda n,v: "%s=%s\n" % (n, str(v)), iterable) + + # write + idx_file = misc.FileWrap(misc.get_thread_idx_path(bbs_type), "w") + try: + idx_file.writelines(iterable) + except IOError: + traceback.print_exc() -- 2.11.0