def save_settings(self, request): from uuid import uuid4 config.set_configuration( 'BOOKTYPE_SITE_NAME', self.cleaned_data['title']) config.set_configuration( 'BOOKTYPE_SITE_TAGLINE', self.cleaned_data['tagline']) if 'favicon' in self.files: # just check for any kind of silly error try: prev_favicon = config.get_configuration('BOOKTYPE_SITE_FAVICON', None) fh, fname = misc.save_uploaded_as_file(self.files['favicon']) rand_name = 'favicon.%s.ico' % uuid4().hex[:8] shutil.move(fname, '{}/{}'.format(settings.STATIC_ROOT, rand_name)) config.set_configuration( 'BOOKTYPE_SITE_FAVICON', '{}/static/{}'.format(settings.BOOKTYPE_URL, rand_name) ) # delete prev icon to avoid garbage if prev_favicon: try: prev_name = prev_favicon.rsplit('/', 1)[-1] os.remove('{}/{}'.format(settings.STATIC_ROOT, prev_name)) except Exception as err: logger.exception("Unable to remove previous favicon. Msg: %s" % err) except: pass try: config.save_configuration() except config.ConfigurationError as err: raise err
def save_settings(self, request): static_root = settings.BOOKTYPE_ROOT config.set_configuration('BOOKTYPE_FRONTPAGE_HISTORY', self.cleaned_data['show_changes']) config.set_configuration('BOOKTYPE_FRONTPAGE_USE_ANONYMOUS_PAGE', self.cleaned_data['use_anonymous_page']) config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_MESSAGE', self.cleaned_data['anonymous_message']) config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_EMAIL', self.cleaned_data['anonymous_email']) # anonymous page image destination_filename = 'anonymous_image.png' destination_dir = '{0}/portal/frontpage/'.format(settings.MEDIA_ROOT) destination_file_path = '{dir}{filename}'.format( dir=destination_dir, filename=destination_filename) if 'anonymous_image_remove' in request.POST: os.remove(destination_file_path) config.del_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_IMAGE') elif 'anonymous_image' in self.files: try: fh, fname = misc.save_uploaded_as_file( self.files['anonymous_image']) if not os.path.exists(destination_dir): os.makedirs(destination_dir) shutil.move(fname, destination_file_path) config.set_configuration( 'BOOKTYPE_FRONTPAGE_ANONYMOUS_IMAGE', '{0}portal/frontpage/anonymous_image.png'.format( settings.MEDIA_URL)) except: pass # welcome message if not os.path.exists('%s/templates/portal/' % static_root): os.makedirs('%s/templates/portal/' % static_root) try: f = open('%s/templates/portal/welcome_message.html' % static_root, 'w') text_data = self.cleaned_data.get('description', '') for ch in ['{%', '%}', '{{', '}}']: text_data = text_data.replace(ch, '') f.write(text_data.encode('utf8')) f.close() config.save_configuration() except IOError as err: raise err except config.ConfigurationError as err: raise err
def form_valid(self, form): self.object = form.save() all_ok = True if 'book_cover' in form.files.keys(): try: fh, fname = misc.save_uploaded_as_file(form.files['book_cover']) self.object.set_cover(fname) os.unlink(fname) self.object.save() except Exception, e: logger.exception(e) all_ok = False
def save_settings(self, request): static_root = settings.BOOKTYPE_ROOT config.set_configuration('BOOKTYPE_FRONTPAGE_HISTORY', self.cleaned_data['show_changes']) config.set_configuration('BOOKTYPE_FRONTPAGE_USE_ANONYMOUS_PAGE', self.cleaned_data['use_anonymous_page']) config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_MESSAGE', self.cleaned_data['anonymous_message']) config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_EMAIL', self.cleaned_data['anonymous_email']) # anonymous page image destination_filename = 'anonymous_image.png' destination_dir = '{0}/portal/frontpage/'.format(settings.MEDIA_ROOT) destination_file_path = '{dir}{filename}'.format(dir=destination_dir, filename=destination_filename) if 'anonymous_image_remove' in request.POST: os.remove(destination_file_path) config.del_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_IMAGE') elif 'anonymous_image' in self.files: try: fh, fname = misc.save_uploaded_as_file(self.files['anonymous_image']) if not os.path.exists(destination_dir): os.makedirs(destination_dir) shutil.move(fname, destination_file_path) config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_IMAGE', '{0}portal/frontpage/anonymous_image.png'.format(settings.MEDIA_URL)) except: pass # welcome message if not os.path.exists('%s/templates/portal/' % static_root): os.makedirs('%s/templates/portal/' % static_root) try: f = open( '%s/templates/portal/welcome_message.html' % static_root, 'w') text_data = self.cleaned_data.get('description', '') for ch in ['{%', '%}', '{{', '}}']: text_data = text_data.replace(ch, '') f.write(text_data.encode('utf8')) f.close() config.save_configuration() except IOError as err: raise err except config.ConfigurationError as err: raise err
def save_settings(self, request): book = create_book(self.cleaned_data['owner'], self.cleaned_data['title']) book.license = self.cleaned_data['license'] book.description = self.cleaned_data['description'] book.hidden = self.cleaned_data['is_hidden'] book.save() if 'cover' in self.files: try: fh, fname = misc.save_uploaded_as_file(self.files['cover']) book.set_cover(fname) os.unlink(fname) except: pass book.save() return book
def save_settings(self, request): book = create_book( self.cleaned_data['owner'], self.cleaned_data['title'] ) book.license = self.cleaned_data['license'] book.description = self.cleaned_data['description'] book.hidden = self.cleaned_data['is_hidden'] book.save() if 'cover' in self.files: try: fh, fname = misc.save_uploaded_as_file(self.files['cover']) book.set_cover(fname) os.unlink(fname) except: pass book.save() return book
def save_settings(self, request): from uuid import uuid4 config.set_configuration('BOOKTYPE_SITE_NAME', self.cleaned_data['title']) config.set_configuration('BOOKTYPE_SITE_TAGLINE', self.cleaned_data['tagline']) config.set_configuration('BOOKTYPE_FRONTPAGE_URL', self.cleaned_data['frontpage_url']) if 'favicon' in self.files: # just check for any kind of silly error try: prev_favicon = config.get_configuration( 'BOOKTYPE_SITE_FAVICON', None) fh, fname = misc.save_uploaded_as_file(self.files['favicon']) rand_name = 'favicon.%s.ico' % uuid4().hex[:8] shutil.move(fname, '{}/{}'.format(settings.STATIC_ROOT, rand_name)) config.set_configuration( 'BOOKTYPE_SITE_FAVICON', '{}{}'.format(settings.STATIC_URL, rand_name)) # delete prev icon to avoid garbage if prev_favicon: try: prev_name = prev_favicon.rsplit('/', 1)[-1] os.remove('{}/{}'.format(settings.STATIC_ROOT, prev_name)) except Exception as err: logger.exception( "Unable to remove previous favicon. Msg: %s" % err) except: pass try: config.save_configuration() except config.ConfigurationError as err: raise err
def post(self, request, *args, **kwargs): book = create_book(request.user, request.POST.get('title')) lic = License.objects.get(abbrevation=request.POST.get('license')) book.license = lic book.description = request.POST.get('description', '') book.hidden = (request.POST.get('hidden', None) == 'on') if 'cover' in request.FILES: try: fh, fname = misc.save_uploaded_as_file(request.FILES['cover']) book.setCover(fname) os.unlink(fname) except: pass book.save() return render(request, 'account/create_book_redirect.html', { "request": request, "book": book })
def post(self, request, *args, **kwargs): book = create_book(request.user, request.POST.get('title')) lic = License.objects.get(abbrevation=request.POST.get('license')) book.license = lic book.description = request.POST.get('description', '') book.hidden = (request.POST.get('hidden', None) == 'on') if 'cover' in request.FILES: try: fh, fname = misc.save_uploaded_as_file(request.FILES['cover']) book.setCover(fname) os.unlink(fname) except: pass book.save() return render( request, 'account/create_book_redirect.html', {"request": request, "book": book} )
def post(self, request, *args, **kwargs): # TODO: convert this into an atomic view # TODO: use the form class to achieve this process and simplify this view and add validations # TODO: we should print warnings so user knows what's going on data = request.POST book = create_book(request.user, data.get('title')) license = License.objects.get(abbrevation=data.get('license')) language = Language.objects.get(abbrevation=data.get('language')) # STEP 1: Details book.author = data.get('author') book.license = license book.language = language book.hidden = (data.get('visible_to_everyone', None) == 'off') book.description = data.get('description', '') # STEP 2: Metadata metaform = MetadataForm(book=book, data=data) if metaform.is_valid(): metaform.save_settings(book, request) else: pass # STEP 3: Creation mode creation_mode = data.get('creation_mode', 'scratch') if creation_mode == 'based_on_book': try: base_book = Book.objects.get(id=request.POST.get('base_book')) base_book_version = base_book.get_version(None) result = import_based_on_book(base_book_version, book) except Book.DoesNotExist: logger.warn("Provided base book was not found") elif creation_mode == 'based_on_skeleton': try: base_skeleton = BookSkeleton.objects.get( id=request.POST.get('base_skeleton')) result = import_based_on_epub(base_skeleton.skeleton_file, book) except BookSkeleton.DoesNotExist: logger.warn("Provided base skeleton was not found") elif creation_mode == 'based_on_file': import_file = request.FILES.get('import_file') if import_file is not None: try: result = import_based_on_file(import_file, book) # noqa except Exception as err: logger.error( "ImportError: Something went wrong importing file. Msg %s" % err) # STEP 4: Book Cover if 'cover_image' in request.FILES: # first we create a cover registry and upload the file file_data = request.FILES['cover_image'] filename = file_data.name cover_license = License.objects.get( abbrevation=data.get('cover_license')) cover = BookCover(book=book, user=request.user, cid=uuid.uuid4().hex, title=data.get('cover_title'), filename=filename[:250], creator=data.get('cover_creator', '')[:40], license=cover_license, approved=False) cover.save() # now save the cover attachment cover.attachment.save(filename, file_data, save=False) cover.save() # and then finally, we set the book thumbnail try: fh, fname = misc.save_uploaded_as_file(file_data) book.set_cover(fname) os.unlink(fname) except: pass book.save() redirect_url = reverse('reader:infopage', args=[book.url_title]) return HttpResponse(json.dumps({'redirect': redirect_url}), 'application/json')
def post(self, request, *args, **kwargs): # TODO: convert this into an atomic view # TODO: use the form class to achieve this process and simplify this view and add validations # TODO: we should print warnings so user knows what's going on data = request.POST book = create_book(request.user, data.get('title')) license = License.objects.get(abbrevation=data.get('license')) language = Language.objects.get(abbrevation=data.get('language')) # STEP 1: Details book.author = data.get('author') book.license = license book.language = language book.hidden = (data.get('visible_to_everyone', None) == 'off') book.description = data.get('description', '') # STEP 2: Metadata metaform = MetadataForm(book=book, data=data) if metaform.is_valid(): metaform.save_settings(book, request) else: pass # STEP 3: Creation mode creation_mode = data.get('creation_mode', 'scratch') if creation_mode == 'based_on_book': try: base_book = Book.objects.get(id=request.POST.get('base_book')) base_book_version = base_book.get_version(None) result = import_based_on_book(base_book_version, book) except Book.DoesNotExist: logger.warn("Provided base book was not found") elif creation_mode == 'based_on_skeleton': try: base_skeleton = BookSkeleton.objects.get(id=request.POST.get('base_skeleton')) result = import_based_on_epub(base_skeleton.skeleton_file, book) except BookSkeleton.DoesNotExist: logger.warn("Provided base skeleton was not found") elif creation_mode == 'based_on_file': import_file = request.FILES.get('import_file') if import_file is not None: try: result = import_based_on_file(import_file, book) # noqa except Exception as err: logger.error("ImportError: Something went wrong importing file. Msg %s" % err) # STEP 4: Book Cover if 'cover_image' in request.FILES: # first we create a cover registry and upload the file file_data = request.FILES['cover_image'] filename = file_data.name cover_license = License.objects.get(abbrevation=data.get('cover_license')) cover = BookCover( book=book, user=request.user, cid=uuid.uuid4().hex, title=data.get('cover_title'), filename=filename[:250], creator=data.get('cover_creator', '')[:40], license=cover_license, approved=False) cover.save() # now save the cover attachment cover.attachment.save(filename, file_data, save=False) cover.save() # and then finally, we set the book thumbnail try: fh, fname = misc.save_uploaded_as_file(file_data) book.set_cover(fname) os.unlink(fname) except: pass book.save() redirect_url = reverse('reader:infopage', args=[book.url_title]) return HttpResponse(json.dumps({'redirect': redirect_url}), 'application/json')