X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=m_librarian%2Fdb.py;h=ba091f3442286186c4cacb4de619f51078cb25cf;hb=991627dd1d4fcdecc04a091ec9c0c8b9e8e8b27c;hp=9985eb96bc79e6f897f32cf01e5dc1567d6c10b8;hpb=f94f1f3b3ec292cb298185c38b95ce0dfa9db3a4;p=m_librarian.git diff --git a/m_librarian/db.py b/m_librarian/db.py index 9985eb9..ba091f3 100755 --- a/m_librarian/db.py +++ b/m_librarian/db.py @@ -2,7 +2,7 @@ __all__ = ['Author', 'Book', 'Extension', 'Genre', 'Language', 'AuthorBook', 'BookGenre', - 'init_db', 'insert_name', 'update_counters', + 'init_db', 'insert_name', 'insert_author', 'update_counters', ] import os @@ -53,11 +53,14 @@ if connection.dbName == 'sqlite': class Author(SQLObject): - name = UnicodeCol(unique=True) - count = IntCol() + surname = UnicodeCol(notNull=True) + name = UnicodeCol(notNull=True) + misc_name = UnicodeCol(notNull=True) + count = IntCol(notNull=True) books = RelatedJoin('Book', otherColumn='book_id', intermediateTable='author_book', createRelatedTable=False) + full_name_idx = DatabaseIndex(surname, name, misc_name, unique=True) count_idx = DatabaseIndex(count) @@ -78,16 +81,16 @@ class Book(SQLObject): genres = RelatedJoin('Genre', intermediateTable='book_genre', createRelatedTable=False) - title = UnicodeCol() - series = UnicodeCol() + title = UnicodeCol(notNull=True) + series = UnicodeCol(notNull=True) ser_no = IntCol() - archive = StringCol() - file = StringCol() - size = IntCol() - lib_id = StringCol() - deleted = BoolCol() - extension = ForeignKey('Extension') - date = DateCol() + archive = StringCol(notNull=True) + file = StringCol(notNull=True) + size = IntCol(notNull=True) + lib_id = StringCol(notNull=True) + deleted = BoolCol(notNull=True) + extension = ForeignKey('Extension', notNull=True) + date = DateCol(notNull=True) language = ForeignKey('Language') title_idx = DatabaseIndex(title) series_idx = DatabaseIndex(series) @@ -112,15 +115,15 @@ class BookGenre(SQLObject): class Extension(SQLObject): - name = StringCol(unique=True) - count = IntCol() + name = StringCol(notNull=True, unique=True) + count = IntCol(notNull=True) count_idx = DatabaseIndex(count) class Genre(SQLObject): - name = StringCol(unique=True) - title = UnicodeCol() - count = IntCol() + name = StringCol(notNull=True, unique=True) + title = UnicodeCol(notNull=True) + count = IntCol(notNull=True) books = RelatedJoin('Book', otherColumn='book_id', intermediateTable='book_genre', createRelatedTable=False) @@ -129,8 +132,8 @@ class Genre(SQLObject): class Language(SQLObject): - name = StringCol(unique=True) - count = IntCol() + name = StringCol(notNull=True, unique=True) + count = IntCol(notNull=True) count_idx = DatabaseIndex(count) @@ -154,6 +157,14 @@ def insert_name(table, name, **kw): return table(name=name, count=0, **kw) +def insert_author(surname, name, misc_name): + try: + return Author.full_name_idx.get( + surname=surname, name=name, misc_name=misc_name) + except SQLObjectNotFound: + return Author(surname=surname, name=name, misc_name=misc_name, count=0) + + def update_counters(): for author in Author.select(): author.count = len(author.books)