mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 02:34:06 -04:00
Add method to create a dummy library for testing
This commit is contained in:
parent
f445ccaa14
commit
81e05df304
@ -6,3 +6,53 @@ def db(path=None):
|
|||||||
from calibre.library.database2 import LibraryDatabase2
|
from calibre.library.database2 import LibraryDatabase2
|
||||||
from calibre.utils.config import prefs
|
from calibre.utils.config import prefs
|
||||||
return LibraryDatabase2(path if path else prefs['library_path'])
|
return LibraryDatabase2(path if path else prefs['library_path'])
|
||||||
|
|
||||||
|
|
||||||
|
def generate_test_db(library_path,
|
||||||
|
num_of_records=20000,
|
||||||
|
num_of_authors=6000,
|
||||||
|
num_of_tags=10000,
|
||||||
|
tag_length=7,
|
||||||
|
author_length=7,
|
||||||
|
title_length=10,
|
||||||
|
max_authors=10,
|
||||||
|
max_tags=10
|
||||||
|
):
|
||||||
|
import random, string, os, sys, time
|
||||||
|
|
||||||
|
if not os.path.exists(library_path):
|
||||||
|
os.makedirs(library_path)
|
||||||
|
|
||||||
|
def randstr(length):
|
||||||
|
return ''.join(random.choice(string.letters) for i in
|
||||||
|
xrange(length))
|
||||||
|
|
||||||
|
all_tags = [randstr(tag_length) for j in xrange(num_of_tags)]
|
||||||
|
print 'Generated', num_of_tags, 'tags'
|
||||||
|
all_authors = [randstr(author_length) for j in xrange(num_of_authors)]
|
||||||
|
print 'Generated', num_of_authors, 'authors'
|
||||||
|
all_titles = [randstr(title_length) for j in xrange(num_of_records)]
|
||||||
|
print 'Generated', num_of_records, 'titles'
|
||||||
|
|
||||||
|
testdb = db(library_path)
|
||||||
|
|
||||||
|
print 'Creating', num_of_records, 'records...'
|
||||||
|
|
||||||
|
start = time.time()
|
||||||
|
|
||||||
|
for i, title in enumerate(all_titles):
|
||||||
|
print i+1,
|
||||||
|
sys.stdout.flush()
|
||||||
|
authors = random.randint(1, max_authors)
|
||||||
|
authors = [random.choice(all_authors) for i in xrange(authors)]
|
||||||
|
tags = random.randint(0, max_tags)
|
||||||
|
tags = [random.choice(all_tags) for i in xrange(tags)]
|
||||||
|
from calibre.ebooks.metadata.book.base import Metadata
|
||||||
|
mi = Metadata(title, authors)
|
||||||
|
mi.tags = tags
|
||||||
|
testdb.import_book(mi, [])
|
||||||
|
|
||||||
|
t = time.time() - start
|
||||||
|
print '\nGenerated', num_of_records, 'records in:', t, 'seconds'
|
||||||
|
print 'Time per record:', t/float(num_of_records)
|
||||||
|
|
||||||
|
@ -2089,8 +2089,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
mi.timestamp = utcnow()
|
mi.timestamp = utcnow()
|
||||||
if mi.pubdate is None:
|
if mi.pubdate is None:
|
||||||
mi.pubdate = utcnow()
|
mi.pubdate = utcnow()
|
||||||
self.set_metadata(id, mi, ignore_errors=True, commit=False)
|
self.set_metadata(id, mi, ignore_errors=True, commit=True)
|
||||||
self.conn.commit()
|
|
||||||
if cover is not None:
|
if cover is not None:
|
||||||
try:
|
try:
|
||||||
self.set_cover(id, cover)
|
self.set_cover(id, cover)
|
||||||
@ -2130,8 +2129,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
mi.timestamp = utcnow()
|
mi.timestamp = utcnow()
|
||||||
if mi.pubdate is None:
|
if mi.pubdate is None:
|
||||||
mi.pubdate = utcnow()
|
mi.pubdate = utcnow()
|
||||||
self.set_metadata(id, mi, commit=False)
|
self.set_metadata(id, mi, commit=True, ignore_errors=True)
|
||||||
self.conn.commit()
|
|
||||||
npath = self.run_import_plugins(path, format)
|
npath = self.run_import_plugins(path, format)
|
||||||
format = os.path.splitext(npath)[-1].lower().replace('.', '').upper()
|
format = os.path.splitext(npath)[-1].lower().replace('.', '').upper()
|
||||||
stream = lopen(npath, 'rb')
|
stream = lopen(npath, 'rb')
|
||||||
@ -2169,7 +2167,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
mi.timestamp = utcnow()
|
mi.timestamp = utcnow()
|
||||||
if mi.pubdate is None:
|
if mi.pubdate is None:
|
||||||
mi.pubdate = utcnow()
|
mi.pubdate = utcnow()
|
||||||
self.set_metadata(id, mi, ignore_errors=True)
|
self.set_metadata(id, mi, ignore_errors=True, commit=True)
|
||||||
if preserve_uuid and mi.uuid:
|
if preserve_uuid and mi.uuid:
|
||||||
self.set_uuid(id, mi.uuid, commit=False)
|
self.set_uuid(id, mi.uuid, commit=False)
|
||||||
for path in formats:
|
for path in formats:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user