X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/d433a636abfc040891dde68aa9e5f81b30549134..f27fd052b9f3419cc4048711565db9984ca1a818:/apps/catalogue/models.py diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py index b5970e9f1..486172a2c 100644 --- a/apps/catalogue/models.py +++ b/apps/catalogue/models.py @@ -137,8 +137,11 @@ class Book(models.Model): has_html_file.short_description = 'HTML' has_html_file.boolean = True + class AlreadyExists(Exception): + pass + @staticmethod - def from_xml_file(xml_file): + def from_xml_file(xml_file, overwrite=False): from tempfile import NamedTemporaryFile from slughifi import slughifi from markupstring import MarkupString @@ -146,7 +149,11 @@ class Book(models.Model): # Read book metadata book_info = dcparser.parse(xml_file) book_base, book_slug = book_info.url.rsplit('/', 1) - book = Book(title=book_info.title, slug=book_slug) + book, created = Book.objects.get_or_create(slug=book_slug) + if not created and not overwrite: + raise Book.AlreadyExists('Book %s already exists' % book_slug) + + book.title = book_info.title book.save() book_tags = [] @@ -210,7 +217,8 @@ class Book(models.Model): book_themes = set(book_themes) book.tags = list(book.tags) + list(book_themes) - return book.save() + book.save() + return book @permalink def get_absolute_url(self):