def post(self): # Local variables return_object = {} # Get parameters parser = reqparse.RequestParser() parser.add_argument('data', type=FileStorage, location='files') parser.add_argument('userid', type=str) parser.add_argument('userauthtoken', type=str) args = parser.parse_args() # Check if all parameters were transferred if (args.userid is None or args.userauthtoken is None or args.data is None): return_object['error'] = True return_object['errorMessage'] = 'Parameters not found.' return return_object # Check if userid with userauthtoken exists in DB if(len(db.session.query(user).filter(user.id == args.userid).filter(user.auth_token == args.userauthtoken).all()) <= 0): return_object['error'] = True return_object['errorMessage'] = 'Unidentified user.' return return_object # Check if filename attribute exists if hasattr(args.data, 'filename'): filename = secure_filename(args.data.filename) else: return_object['error'] = True return_object['errorMessage'] = 'File not found.' return return_object # Create a new path to save the file temporarily file_path = os.path.abspath(os.path.join(module_path(), os.pardir)) + os.sep + "tmp" + os.sep + filename # Save file in tmp folder file = args.data file.save(file_path) # Read metadata print file_path metadata = get_epub_info(file_path, filename) print metadata if metadata is None: metadata = {} metadata['cover-path'] = "" metadata['creator'] = "" metadata['title'] = "" metadata['date'] = "" metadata['identifier'] = "" metadata['language'] = "" # Send file to Amazon S3 Bucket conn = S3Connection('AKIAJ7JIYNHMI4UAB2IQ', 'YpPBdmhYWVMOJPZ4d2iaF3sHNeE6HiB7Sgrbqs1y', host='s3.eu-central-1.amazonaws.com') bucket = conn.get_bucket('ebooksmanager') k = Key(bucket) k.key = args.userid + "_" + filename k.set_contents_from_filename(file_path) if metadata['cover-path'] is not "": kk = Key(bucket) kk.key = args.userid + "_" + filename + "_cover" kk.set_contents_from_filename(metadata['cover-path']) book_url = 'https://s3.eu-central-1.amazonaws.com/ebooksmanager/' + args.userid + '_' + filename book_cover_url = 'https://s3.eu-central-1.amazonaws.com/ebooksmanager/' + args.userid + '_' + filename + '_cover' # Create instance of book database model new_book = book(filename, args.userid, True, metadata["title"], metadata["creator"], '0', metadata["date"], metadata["identifier"], metadata["language"], book_url, book_cover_url, False) # Check if the book already exists if(len(db.session.query(book).filter(book.owner_id == args.userid).filter(book.filename == filename).all()) > 0): return_object['error'] = True return_object['errorMessage'] = 'Book already exists in library.' return return_object else: # Add the book to database db.session.add(new_book) failed = False # Try to commit try: db.session.commit() except Exception as e: print "Exception handle_exception()ere!!!" db.session.rollback() db.session.flush() # for resetting non-commited .add() failed=True if failed: return_object = True return_object['errorMessage'] = 'Server error.' return return_object # Remove file from tmp folder try: os.remove(file_path) if metadata['cover-path'] is not "": os.remove(file_path + '_cover') except OSError as e: # name the Exception `e` print "Failed with:", e.strerror # look what it says print "Error code:", e.code # Success object return_object['eror'] = False return_object['uploadComplete'] = True return return_object
def get(self): # Local variables return_object = {} # Get parameters parser = reqparse.RequestParser() parser.add_argument('userid', type=str) parser.add_argument('userauthtoken', type=str) parser.add_argument('projectid', type=str) args = parser.parse_args() # Check if all parameters were transferred if (args.userid is None) or (args.userauthtoken is None) or (args.projectid is None): return_object['error'] = True return_object['errorMessage'] = 'Parameters not found.' return return_object # Check if userid with userauthtoken exists in DB if len(db.session.query(user).filter(user.id == args.userid).filter(user.auth_token == args.userauthtoken).all()) <= 0: return_object['error'] = True return_object['errorMessage'] = 'Unidentified user.' return return_object # Check if user owns projectid if len(db.session.query(project).filter(project.owner_id == args.userid).filter(project.id == args.projectid).all()) <= 0: return_object['error'] = True return_object['errorMessage'] = "You're not the owner of this project. Who are you ?" return return_object # Create new book bookul = epub.EpubBook() # Get metadata from S3 conn = S3Connection('AKIAJ7JIYNHMI4UAB2IQ', 'YpPBdmhYWVMOJPZ4d2iaF3sHNeE6HiB7Sgrbqs1y', host='s3.eu-central-1.amazonaws.com') bucket = conn.get_bucket('ebooksmanager') k = Key(bucket) k.key = args.projectid + os.sep + args.projectid + '_METADATA' if k.exists(): metadata_dictionary = ast.literal_eval(k.get_contents_as_string()) print metadata_dictionary else: print "????????????????????????????" # Set metadata bookul.set_title(metadata_dictionary['project_name']) bookul.set_title(metadata_dictionary['author']) bookul.set_identifier(metadata_dictionary['identifier']) bookul.set_language(metadata_dictionary['language']) bookul.add_author(metadata_dictionary['author']) # Create chapters current_chapter = None ind = 0 # Get from database the chapters project_chapters = db.session.query(chapter).filter(chapter.project_id == args.projectid).all() print project_chapters bookul.spine = ['nav'] for ch in project_chapters: k.key = args.projectid + os.sep + str(ch.number) + '_' + ch.name c = epub.EpubHtml(title=ch.name, file_name=(str(ch.number) + '_' + ch.name + '.xhtml'), lang='en') c.content = k.get_contents_as_string() bookul.add_item(c) bookul.spine.append(c) # c1 = epub.EpubHtml(title='Intro', file_name='chap_01.xhtml', lang='en') # c1.content=u'<h1>BLANAAAA</h1>' # # # define Table Of Contents # # bookul.toc = (epub.Link('chap_01.xhtml', 'Introduction', 'intro').(epub.Section('Simple book'),(c1))) # # bookul.add_item(c1) # # add default NCX and Nav file bookul.add_item(epub.EpubNcx()) bookul.add_item(epub.EpubNav()) k.key = args.projectid + os.sep + args.projectid + "_COVER" k.get_contents_to_filename(os.path.abspath(os.path.join(module_path(), os.pardir)) + os.sep + "tmp" + os.sep + args.projectid + "_COVER") bookul.set_cover("image.jpg", open(os.path.abspath(os.path.join(module_path(), os.pardir)) + os.sep + "tmp" + os.sep + args.projectid + "_COVER", 'rb').read()) # basic spine # bookul.spine = ['nav', c] epub.write_epub('API' + os.sep + 'tmp' + os.sep + args.projectid + '.epub', bookul, {}) # # Send file to Amazon S3 Bucket conn = S3Connection('AKIAJ7JIYNHMI4UAB2IQ', 'YpPBdmhYWVMOJPZ4d2iaF3sHNeE6HiB7Sgrbqs1y', host='s3.eu-central-1.amazonaws.com') bucket = conn.get_bucket('ebooksmanager') k = Key(bucket) k.key = args.userid + "_" + metadata_dictionary['project_name'] + '.epub' k.set_contents_from_filename('API' + os.sep + 'tmp' + os.sep + args.projectid + '.epub') book_url = 'https://s3.eu-central-1.amazonaws.com/ebooksmanager/' + args.userid + '_' + metadata_dictionary['project_name'] + '.epub' # Create instance of book database model new_book = book(metadata_dictionary['project_name'], args.userid, True, metadata_dictionary['project_name'], metadata_dictionary['author'], '0', str(time.strftime("%d/%m/%Y")), metadata_dictionary['identifier'], metadata_dictionary['language'], book_url, "", True) db.session.add(new_book) failed = False # Try to commit try: db.session.commit() except Exception as e: print "Exception handle_exception()ere!!!" db.session.rollback() db.session.flush() # for resetting non-commited .add() failed=True if failed: return_object = True return_object['errorMessage'] = 'Server error.' return return_object return_object['error'] = False return return_object