OSDN Git Service

Destroy popupmenu and treeview columns.
[fukui-no-namari/fukui-no-namari.git] / src / FukuiNoNamari / idxfile.py
index 14b58b9..b89ce87 100644 (file)
 
 import os
 import os.path
-from fileinput import FileInput
+import traceback
+
 import misc
 
-metadata_namelist = ["title", "lineCount", "lastModified", "etag"]
+metadata_namelist = ("title", "lineCount", "lastModified", "etag")
+int_data = ("lineCount")
 
-def load_idx(bbs_type):
-    """Loads index file of thread
-
-    bbs: bbs id
+def _empty_generator():
+    for name in metadata_namelist:
+        if name in int_data:
+            yield name, 0
+        else:
+            yield name, ""
 
-    board: board id
+default_dict = dict([pair for pair in _empty_generator()])
 
-    thread: thread id
+def load_idx(bbs_type):
+    """Loads index file of thread
 
     return dictionary which key is in metadata_namelist if idx file exist,
     otherwise return empty dic
     """
     idxfile_path = misc.get_thread_idx_path(bbs_type)
-    if not os.path.exists(idxfile_path):
-        return {"title":"","lineCount":0,"lastModified":"","etag":""}
-
-    datadic = {}
-    f = FileInput(idxfile_path)
-    for line in f:
-        for name in metadata_namelist:
-            if line.startswith(name+"="):
-                value = line[len(name)+1:].rstrip("\n")
-                if name is "lineCount":
-                    try:
-                        datadic[name] = int(value)
-                    except:
-                        datadic[name] = 0
-                else:
-                    datadic[name] = value
-                #print name, datadic[name]
-                break;
-    f.close()
-
-    # if datadic does not have key, insert empty entry.
-    for name in metadata_namelist:
-        if name not in datadic:
-            if name is "lineCount":
-                datadic[name] = 0
+    datadic = default_dict.copy()
+
+    try:
+        for line in file(idxfile_path):
+            key_equal_value = line.rstrip()
+            try:
+                index = key_equal_value.index("=")
+            except ValueError:
+                pass
             else:
-                datadic[name] = ""
+                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
+    except IOError:
+        traceback.print_exc()
+
     return datadic
 
 def save_idx(bbs_type, datadic):
     """Saves thread metadatas to a index file
 
-    bbs: bbs id
-
-    board: board id
-
-    thread: thread id
-
     datadic: dictionary which key is in metadata_namelist
 
     no need to save empty or non-existing metadata
@@ -84,13 +78,17 @@ def save_idx(bbs_type, datadic):
     if not os.path.isdir(basedir):
         os.makedirs(basedir)
 
-    f = open(idxfile_path, "w")
-    for name in metadata_namelist:
-        if name in datadic:
-            if name is "lineCount":
-                if datadic[name] > 0:
-                    f.write(name + "=" + str(datadic[name]) + "\n")
-            else:
-                if datadic[name]:
-                    f.write(name + "=" + datadic[name] + "\n")
+    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
+        if name in int_data and value > 0:
+            f.write(name + "=" + str(value) + "\n")
+        elif name not in int_data and value:
+            f.write(name + "=" + value + "\n")
+
     f.close()