added atomic commiting to processing comic books to increase performance.

This commit is contained in:
2015-07-24 11:06:42 +01:00
parent 4350fab728
commit 8fff3d4d9b
2 changed files with 41 additions and 41 deletions

View File

@@ -1,4 +1,5 @@
from django.db import models from django.db import models
from django.db.transaction import atomic
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.contrib.auth.models import User from django.contrib.auth.models import User
@@ -18,6 +19,7 @@ class Setting(models.Model):
def __unicode__(self): def __unicode__(self):
return self.__str__() return self.__str__()
class ComicBook(models.Model): class ComicBook(models.Model):
file_name = models.CharField(max_length=100, unique=True) file_name = models.CharField(max_length=100, unique=True)
@@ -129,45 +131,45 @@ class ComicBook(models.Model):
cbx = zipfile.ZipFile(path.join(base_dir, comic_path)) cbx = zipfile.ZipFile(path.join(base_dir, comic_path))
except zipfile.BadZipfile: except zipfile.BadZipfile:
return False return False
with atomic():
book = ComicBook(file_name=comic_file_name)
book.save()
i = 0
for f in sorted([str(x) for x in cbx.namelist()], key=str.lower):
try:
dot_index = f.rindex('.') + 1
except ValueError:
continue
ext = f.lower()[dot_index:]
if ext in ['jpg', 'jpeg']:
page = ComicPage(Comic=book,
index=i,
page_file_name=f,
content_type='image/jpeg')
page.save()
book = ComicBook(file_name=comic_file_name) i += 1
book.save() elif ext == 'png':
i = 0 page = ComicPage(Comic=book,
for f in sorted([str(x) for x in cbx.namelist()], key=str.lower): index=i,
try: page_file_name=f,
dot_index = f.rindex('.') + 1 content_type='image/png')
except ValueError: page.save()
continue i += 1
ext = f.lower()[dot_index:] elif ext == 'bmp':
if ext in ['jpg', 'jpeg']: page = ComicPage(Comic=book,
page = ComicPage(Comic=book, index=i,
index=i, page_file_name=f,
page_file_name=f, content_type='image/bmp')
content_type='image/jpeg') page.save()
page.save() i += 1
elif ext == 'gif':
i += 1 page = ComicPage(Comic=book,
elif ext == 'png': index=i,
page = ComicPage(Comic=book, page_file_name=f,
index=i, content_type='image/gif')
page_file_name=f, page.save()
content_type='image/png') i += 1
page.save()
i += 1
elif ext == 'bmp':
page = ComicPage(Comic=book,
index=i,
page_file_name=f,
content_type='image/bmp')
page.save()
i += 1
elif ext == 'gif':
page = ComicPage(Comic=book,
index=i,
page_file_name=f,
content_type='image/gif')
page.save()
i += 1
return book return book
class DirFile: class DirFile:

View File

@@ -3,8 +3,6 @@ from django.template import RequestContext
from django.utils.http import urlsafe_base64_decode from django.utils.http import urlsafe_base64_decode
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.auth.decorators import login_required, user_passes_test
from django.core.validators import validate_email
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User from django.contrib.auth.models import User
from comic.models import Setting, ComicBook, ComicStatus from comic.models import Setting, ComicBook, ComicStatus