]> git.phdru.name Git - m_librarian.git/commitdiff
Import genres from LRE files
authorOleg Broytman <phd@phdru.name>
Sun, 20 Dec 2015 20:24:38 +0000 (23:24 +0300)
committerOleg Broytman <phd@phdru.name>
Sun, 20 Dec 2015 20:30:48 +0000 (23:30 +0300)
m_librarian/glst.py [new file with mode: 0755]
scripts/ml-initdb.py

diff --git a/m_librarian/glst.py b/m_librarian/glst.py
new file mode 100755 (executable)
index 0000000..257d321
--- /dev/null
@@ -0,0 +1,58 @@
+#! /usr/bin/env python
+
+import codecs
+import os
+from sqlobject import sqlhub, SQLObjectNotFound
+from .db import Genre
+
+
+def parse_glst_file(glst_filename):
+    glst_file = codecs.open(glst_filename, 'r', 'utf-8')
+    genre_list = []
+    try:
+        for line in glst_file:
+            line = line.strip()
+            if not line:
+                continue
+            if line[0] == '#':
+                continue
+            parts = line.split(None, 1)
+            try:
+                name, title = parts[1].split(';', 1)
+            except (IndexError, ValueError):
+                continue
+            genre_list.append((name, title))
+    finally:
+        glst_file.close()
+    return genre_list
+
+
+def import_glst_file(glst_filename):
+    old = new = 0
+    for name, title in parse_glst_file(glst_filename):
+        try:
+            Genre.byName(name)
+        except SQLObjectNotFound:
+            Genre(name=name, title=title, count=0)
+            new += 1
+        else:
+            old += 1
+    return old, new
+
+
+def _import_data():
+    ml_dir = os.path.dirname(__file__)
+    old_fb2, new_fb2 = import_glst_file(
+        os.path.join(ml_dir, 'data', 'genres_fb2.glst'))
+    old_nonfb2, new_nonfb2 = import_glst_file(
+        os.path.join(ml_dir, 'data', 'genres_nonfb2.glst'))
+    return old_fb2 + old_nonfb2, new_fb2 + new_nonfb2
+
+
+def import_data():
+    return sqlhub.doInTransaction(_import_data)
+
+
+if __name__ == '__main__':
+    ml_dir = os.path.dirname(__file__)
+    print parse_glst_file(os.path.join(ml_dir, 'data', 'genres_fb2.glst'))
index 79bbe431a1ef1da517c801465b5d8040309c98f1..ca696bd7bc2ab847ef15eb4045383b6f2ada438d 100755 (executable)
@@ -1,6 +1,12 @@
 #! /usr/bin/env python
 
 from m_librarian.db import init_db
+from m_librarian.glst import import_data
 
 if __name__ == '__main__':
     init_db()
+    old, new = import_data()
+    if old:
+        print "Imported %d genres (ignored %d existing)" % (new, old)
+    else:
+        print "Imported %d genres" % new