Esempio n. 1
0
    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
Esempio n. 2
0
    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