From fb881e5d6e0de019b19bc2aa007c7783c73d9ce5 Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Sun, 20 Dec 2015 23:24:38 +0300 Subject: [PATCH] Import genres from LRE files --- m_librarian/glst.py | 58 ++++++++++++++++++++++++++++++++++++++++++++ scripts/ml-initdb.py | 6 +++++ 2 files changed, 64 insertions(+) create mode 100755 m_librarian/glst.py diff --git a/m_librarian/glst.py b/m_librarian/glst.py new file mode 100755 index 0000000..257d321 --- /dev/null +++ b/m_librarian/glst.py @@ -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')) diff --git a/scripts/ml-initdb.py b/scripts/ml-initdb.py index 79bbe43..ca696bd 100755 --- a/scripts/ml-initdb.py +++ b/scripts/ml-initdb.py @@ -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 -- 2.39.5