diff --git a/opds_catalog/management/commands/sopds_util.py b/opds_catalog/management/commands/sopds_util.py index 62dc81cc1eb0575d05c016ab71c3c546c6647c39..f17ab405e8a0fd149a06b6e016e32285f45b8a7c 100644 --- a/opds_catalog/management/commands/sopds_util.py +++ b/opds_catalog/management/commands/sopds_util.py @@ -1,6 +1,7 @@ from django.core.management.base import BaseCommand from django.core.management import call_command from django.db import transaction +from django.db import connection from django.conf import settings as main_settings from opds_catalog import opdsdb @@ -14,7 +15,7 @@ class Command(BaseCommand): verbose = False def add_arguments(self, parser): - parser.add_argument('command', action="store", nargs='*', help='Use [ clear | info | save_mygenres | load_mygenres | setconf | getconf ]') + parser.add_argument('command', action="store", nargs='*', help='Use [ clear | info | save_mygenres | load_mygenres | setconf | getconf | pg_optimize ]') parser.add_argument('--verbose',action='store_true', dest='verbose', default=False, help='Set verbosity level for books collection scan.') parser.add_argument('--nogenres',action='store_true', dest='nogenres', default=False, help='Not install genres fom fixtures.') @@ -39,7 +40,9 @@ class Command(BaseCommand): self.setconf(self.confparam, self.confvalue) elif action == "getconf": self.confparam = options['command'][1] if len(options['command'])>1 else None - self.getconf(self.confparam) + self.getconf(self.confparam) + elif action == "pg_optimize": + self.pg_optimize() def clear(self): with transaction.atomic(): @@ -47,6 +50,7 @@ class Command(BaseCommand): if not self.nogenres: call_command('loaddata', 'genre.json', app_label='opds_catalog') Counter.objects.update_known_counters() + opdsdb.pg_optimize(False) def info(self): Counter.objects.update_known_counters() @@ -78,5 +82,9 @@ class Command(BaseCommand): else: call_command('constance', 'list', app_label='opds_catalog') + def pg_optimize(self): + opdsdb.pg_optimize(True) + + diff --git a/opds_catalog/opdsdb.py b/opds_catalog/opdsdb.py index 58c097d90b9e4e2391019da7ddf8b67cdce332aa..863b901ce836673039f58238879579469ecf3c0e 100644 --- a/opds_catalog/opdsdb.py +++ b/opds_catalog/opdsdb.py @@ -42,6 +42,17 @@ unknown_genre=_(unknown_genre_en) # utfhigh = re.compile(u'[\U00010000-\U0010ffff]') +def pg_optimize(verbose=False): + """ TODO: Table optimizations for Postgre """ + if connection.vendor != 'postgresql': + if verbose: + print('No PostgreSql connection backend detected...') + else: + cursor = connection.cursor() + cursor.execute('alter table opds_catalog_book SET ( fillfactor = 50)') + cursor.execute('VACUUM FULL opds_catalog_book') + print('PostgreSql tables internal structure optimized...') + def clear_all(verbose=False): cursor = connection.cursor() cursor.execute('delete from opds_catalog_bseries') @@ -187,24 +198,24 @@ def findbook(name, path, setavail=0): book.save() return book - -def addbook(name, path, cat, exten, title, annotation, docdate, lang, size=0, archive=0): + +def addbook(name, path, cat, exten, title, annotation, docdate, lang, size=0, archive=0): book = Book.objects.create(filename=name[:SIZE_BOOK_FILENAME],path=path[:SIZE_BOOK_PATH],catalog=cat,filesize=size,format=exten.lower()[:SIZE_BOOK_FORMAT], title=title[:SIZE_BOOK_TITLE],search_title=title.upper()[:SIZE_BOOK_TITLE],annotation=p(annotation,SIZE_BOOK_ANNOTATION), docdate=docdate[:SIZE_BOOK_DOCDATE],lang=lang[:SIZE_BOOK_LANG],cat_type=archive,avail=2, lang_code=getlangcode(title)) return book def findauthor(full_name): - try: - author = Author.objects.filter(full_name=full_name[:SIZE_AUTHOR_NAME])[:1] + try: + author = Author.objects.filter(full_name=full_name[:SIZE_AUTHOR_NAME])[:1] except Author.DoesNotExist: author = None return author - + def addauthor(full_name): author, created = Author.objects.get_or_create(full_name=full_name[:SIZE_AUTHOR_NAME], defaults={'search_full_name':full_name.upper()[:SIZE_AUTHOR_NAME], - 'lang_code':getlangcode(full_name)}) + 'lang_code':getlangcode(full_name)}) return author def addbauthor(book, author): @@ -219,8 +230,8 @@ def addbgenre(book, genre): bg = bgenre(book=book, genre=genre) bg.save() -def addseries(ser): - series, created = Series.objects.get_or_create(ser=ser[:SIZE_SERIES], defaults={'search_ser':ser.upper()[:SIZE_SERIES], 'lang_code':getlangcode(ser)}) +def addseries(ser): + series, created = Series.objects.get_or_create(ser=ser[:SIZE_SERIES], defaults={'search_ser':ser.upper()[:SIZE_SERIES], 'lang_code':getlangcode(ser)}) return series def addbseries(book, ser, ser_no): diff --git a/opds_catalog/settings.py b/opds_catalog/settings.py index 06cc8d0e31808cc530a40500293de5e686112dea..d2a1d8f414b8a0346f9a341a70a66b71f933d7f2 100644 --- a/opds_catalog/settings.py +++ b/opds_catalog/settings.py @@ -27,8 +27,7 @@ from django.dispatch import receiver # if updated_key == 'SOPDS_LANGUAGE': # translation.activate(new_value) # print(new_value) - - + def constance_update_all(): pass