#! /usr/bin/env python
__all__ = ['Author', 'Book', 'Extension', 'Genre', 'Language',
- 'init_db', 'insert_name',
+ 'init_db', 'insert_name', 'update_counters',
]
import os
from sqlobject import SQLObject, StringCol, UnicodeCol, IntCol, BoolCol, \
- ForeignKey, DateCol, RelatedJoin, \
+ ForeignKey, DateCol, DatabaseIndex, RelatedJoin, \
connectionForURI, sqlhub, SQLObjectNotFound, dberrors
from .config import ml_conf
class Author(SQLObject):
name = UnicodeCol(unique=True)
count = IntCol()
+ count_idx = DatabaseIndex('count')
books = RelatedJoin('Book', otherColumn='book_id')
extension = ForeignKey('Extension')
date = DateCol()
language = ForeignKey('Language')
+ archive_file_idx = DatabaseIndex('archive', 'file', unique=True)
class Extension(SQLObject):
name = StringCol(unique=True)
count = IntCol()
+ count_idx = DatabaseIndex('count')
class Genre(SQLObject):
name = StringCol(unique=True)
title = UnicodeCol()
count = IntCol()
+ count_idx = DatabaseIndex('count')
books = RelatedJoin('Book', otherColumn='book_id')
class Language(SQLObject):
name = StringCol(unique=True)
count = IntCol()
+ count_idx = DatabaseIndex('count')
def init_db():
return
-def insert_name(table, name):
+def insert_name(table, name, **kw):
try:
return table.byName(name)
except SQLObjectNotFound:
- return table(name=name, count=0)
+ return table(name=name, count=0, **kw)
+
+
+def update_counters():
+ for author in Author.select():
+ author.count = len(author.books)
+
+ for ext in Extension.select():
+ ext.count = Book.select(Book.q.extension == ext.name).count()
+
+ for genre in Genre.select():
+ genre.count = len(genre.books)
+
+ for language in Language.select():
+ language.count = Book.select(Book.q.language == language.name).count()
def test():