Пример #1
0
def init():
    a = models.Author.query.all()
    b = models.Book.query.all()
    for c in a:
        db.session.delete(c)
        db.session.commit()
    for c in b:
        db.session.delete(c)
        db.session.commit()
    a1 = models.Author('author1')
    a2 = models.Author('author2')
    a3 = models.Author('author3')
    a4 = models.Author('author4')
    b1 = models.Book('book1')
    b2 = models.Book('book2')
    b3 = models.Book('book3')
    b4 = models.Book('book4')
    a1.books.append(b1)
    a1.books.append(b2)
    a2.books.append(b2)
    a3.books.append(b2)
    a3.books.append(b3)
    a4.books.append(b1)
    a4.books.append(b2)
    a4.books.append(b3)
    a4.books.append(b4)
    db.session.add(a1)
    db.session.add(a2)
    db.session.add(a3)
    db.session.add(a4)
    db.session.commit()
    flash('Database was reinitiated')
    return redirect('/index')
Пример #2
0
def addBook(config):
    click.echo('add Book from config file:%s' % config)
    """
    "name": "book3",
    "author": "author3",
    "pic": "wwww.baidu.com",
    "desc": "This is description",
    "contents": "描\n述\n文\n本",
    "type": "type",
    "download": "www.baidu.com,www.baidu.com"
    """
    import json as js
    bookConfig = open(config).read()
    bookConfig = js.loads(bookConfig)
    click.echo(bookConfig['books'])
    for book in bookConfig['books']:
        click.echo(book['name'])
        bookData = models.Book(name=book['name'],
                               author=book['author'],
                               booktype=book['type'],
                               pic=book['pic'],
                               contents=book['contents'],
                               download=book['download'])
        db.session.add(bookData)
        db.session.commit()
Пример #3
0
def add_book():
    """ Add a book specifying the data as query parameters and returns the newly generated object
    """
    try:
        title = request.args.get('title', None)
        author = request.args.get('author', None)
        language = request.args.get('language', None)

        if title is None or author is None or language is None:
            json_obj = add_service_info_to_json(code='Error',
                                                state='Missing parameter(s)')
        else:
            existing = models.Book.query.filter_by(title=title,
                                                   author=author,
                                                   language=language).first()
            if existing is None:
                book = models.Book(title=title,
                                   author=author,
                                   language=language)
                db.session.add(book)
                db.session.commit()
                db.session.refresh(book)
                json_obj = add_service_info_to_json(
                    code='OK',
                    state='Book created successfully',
                    json_obj=book.json())
            else:
                json_obj = add_service_info_to_json(
                    code='OK',
                    state='Book exists, using existing',
                    json_obj=existing.json())
    except exc.OperationalError as err:
        json_obj = add_service_info_to_json(code='Error', state=str(err))

    return json.dumps(json_obj, sort_keys=True)
Пример #4
0
def addBook():
    log.debug("GET add book page")
    form = AddBookForm()
    user = models.User.query.filter_by(
        usernameDB=current_user.usernameDB).first()
    ListsToPick = [(list.id, list.listTitle)
                   for list in models.List.query.filter_by(user_id=user.id)]
    form.addBookToList.choices = ListsToPick
    if form.validate_on_submit():
        log.debug("Add book form submitted")
        newBook = models.Book(bookTitle=form.bookTitle.data,
                              bookRating=form.bookRating.data,
                              user_id=user.id)
        checkBook = models.Book.query.filter_by(
            user_id=current_user.id).filter_by(
                bookTitle=form.bookTitle.data).first()
        if checkBook is None:
            for listID in form.addBookToList.data:
                addToList = models.List.query.get(listID)
                newBook.lists.append(addToList)
            db.session.add(newBook)
            db.session.commit()
            log.info("Successfully added book '%s'", newBook.bookTitle)
        else:
            log.error("Cannot add book: Book already exists")
            flash("Book alreay exists!")

        form.bookTitle.data = ""
        form.bookRating.data = ""
        flash("Book added!")
    return render_template('AddBook.html',
                           title='Add Book',
                           form=form,
                           Lists=models.List.query.filter_by(user_id=user.id))
Пример #5
0
def client():
    os.environ['APP_CONFIG'] = 'testing.cfg'
    app = create_app()

    with app.test_client() as client:
        with app.app_context():
            db.create_all()
            db.session.add(models.Book(title='1984', author='George Orwell'))
            db.session.add(
                models.Book(title='Война и мир', author='Лев Толстой'))
            db.session.commit()

        yield client

        with app.app_context():
            db.drop_all()
Пример #6
0
def add_book():
    form = forms.BookForm()

    if form.validate_on_submit():

        cover = form.cover.data
        filename = secure_filename(cover.filename)
        path = os.path.abspath(MEDIA_FOLDER)
        path = os.path.join(path, filename)
        cover.save(path)

        book = models.Book()
        book.title = form.title.data
        book.author = form.author.data
        book.year = form.year.data
        book.description = form.description.data
        book.cover_path = filename

        if not form.validate():
            flash('Title field is required', 'error')
            return render_template('book.html', form=form, add_book=True)

        try:
            db.session.add(book)
            db.session.commit()
            flash('You have successfully added a new book.')
        except:
            # in case book name already exists
            flash('Error: Book name already exists.')

        return redirect(url_for('index'))

    else:
        return render_template('book.html', form=form, add_book=True)
Пример #7
0
 def add_book(self, data):
     if 'csrf_token' in data:
         data.pop('csrf_token')
     new_book = models.Book(title=data['title'], borrowed=data['available'])
     for author in data['author']:
         new_book.authors.append(models.Author(name=author))
     db.session.add(new_book)
     db.session.commit()
Пример #8
0
    def post(self):
        data = BooksCreate.parser.parse_args()['data']

        data = _str2dict(data)
        book = models.Book(**data)

        db.session.add(book)
        db.session.commit()

        return {"data": data}
Пример #9
0
def add_book():
    title = request.form['title']
    author = request.form['author']
    possessor = request.form['possessor']

    book = models.Book(title, author, possessor)
    db.session.add(book)
    db.session.commit()

    return redirect(url_for('get_books'))
Пример #10
0
def get_or_create_book(used_id: int, book: schemas.BookCreate,
                       db: Session) -> schemas.Book:
    db_book = (db.query(models.Book).filter(
        models.Book.google_books_id == book.google_books_id).first())
    if not db_book:
        db_book = models.Book(**book.dict())
    db_user = db.query(models.User).filter(models.User.id == used_id).first()
    db.add(db_book)
    db_book.users.append(db_user)
    db.commit()
    db.refresh(db_book)
    return db_book
Пример #11
0
def upload():
    g.user = current_user
    filenames = []
    if request.method == 'POST':
        if request.form['title'] == '':
            flash('Please enter a title of the book that is to be uploaded')
            return redirect(request.url)
        newfolder_id = db.session.query(db.func.max(
            models.Book.id)).scalar()  # latest id

        # print('newfolder_id = '+str(newfolder_id))
        newfolder_id = int(newfolder_id or 0) + 1
        dir = UPLOAD_FOLDER + '/' + str(newfolder_id)
        # print('dir = '+str(dir))
        uploaded_files = request.files.getlist("file")
        #print('\n')
        shareable = 'shareable' in request.form
        # print('shareable = '+str(shareable))
        for file in uploaded_files:
            print('file name:')
            print(file.filename)
            if file.filename == '':
                flash('No files selected')
                return redirect(request.url)
            # Check if the file is one of the allowed types/extensions
            if file and allowed_file(file.filename):
                # Make the filename safe, remove unsupported chars
                filename = secure_filename(file.filename)
                # Move the file from the temp folder ot the upload folder
                if not os.path.exists(dir):
                    print('folder does not exist. Creating folder...')
                    os.makedirs(dir)
                print('uploading ' + file.filename)
                file.save(os.path.join(dir, filename))
                print('upload of ' + filename + ' complete')
                # save the filename into a list, we'll use it later
                filenames.append(filename)
            else:
                flash('Only files of type mp3 and jpg will be uploaded.')
                #return redirect(request.url)
        print('\n')
        a = concatAudio(dir, request.form['title'])
        a.concat()
        newBook = models.Book(title=request.form['title'],
                              author=request.form['author'],
                              shareable=shareable)
        current_user.books.append(newBook)
        db.session.add(newBook)
        db.session.commit()
    return render_template('upload.html',
                           filenames=filenames,
                           title='all the new files')
Пример #12
0
def reupload(book_id, email="", key=""):
    subtitle = "Reupload book to Internet Archive"
    form = ReUpload()
    if email in (None, "") and key not in (None, ""):
        return render_template('reupload.html', subtitle=subtitle, form=form)
    if key != hashlib.md5(str(email) + str(keys.flask_app_secret)).hexdigest(
    ) and key not in (None, ""):
        return render_template('reupload.html', subtitle=subtitle, form=form)
    form = ReUpload()
    if form.validate() or key not in (None, ""):
        book_values = re.search("(.*):(.*)", book_id)
        library = book_values.group(1)
        Id = book_values.group(2)
        ia_identifier_suffix = get_valid_identifier_suffix(library, Id)
        reset_book_progress(library, ia_identifier_suffix)
        redis = redis_py.Redis()
        redis_key3 = keys.redis_key3
        book_metadata = redis_py.get(redis_key3 + ":" + book_id + ":meta_data",
                                     True)
        book_key = "%s:%s:%s" % (redis_key3, library, ia_identifier_suffix)
        metadata_key = book_key + ":meta_data"
        book_request_key = book_key + ":requests"
        redis_py.set(metadata_key, book_metadata, True)
        request = dict(email=form.email.data)
        redis_py.sadd(book_request_key,
                      json.dumps(request),
                      request_cache=True)
        book = models.Book(book_id=ia_identifier_suffix,
                           library=library,
                           requests=json.dumps(request),
                           meta_data=book_metadata)
        db.session.add(book)
        db.session.commit()
        redis_key1 = keys.redis_key1
        q_global_job = redis_py.Queue(redis_key1 + "global")
        q_global_job.add(
            json.dumps(dict(library=library, book_id=ia_identifier_suffix)))
        q = redis_py.Queue(redis_key1)
        q.add(
            json.dumps(
                dict(library=library,
                     Id=Id,
                     ia_identifier_suffix=ia_identifier_suffix)))
        flash(error_msg(100, email=form.email.data))
        return redirect(
            url_for('progress', book_id=library + ":" + ia_identifier_suffix))
    else:
        return render_template('reupload.html', subtitle=subtitle, form=form)
Пример #13
0
def submit_job(stored_request):
    """Add book-request to the job queues"""
    redis_key1 = keys.redis_key1
    lock_key1 = keys.lock_key1
    q = redis_py.Queue(redis_key1)
    q_global_job = redis_py.Queue(redis_key1 + "global")
    redis = redis_py.Redis()
    redis_key3 = keys.redis_key3
    book_key = "%s:%s:%s" % (redis_key3, stored_request.library,
                             stored_request.book_id)
    book_request_key = book_key + ":requests"
    Lock = redis_py.Lock(lock_key1)
    locked = False
    if redis.exists(book_request_key):
        locked = Lock.acquire(timeout=60)
    request = dict(sno=stored_request.sno, email=stored_request.email)
    redis_py.sadd(book_request_key, json.dumps(request), request_cache=True)
    redundant_request = models.Request.query.filter_by(
        md5_book=stored_request.md5_book, confirmed=1,
        job_submitted=1).first()
    if redundant_request == None:
        reset_book_progress(stored_request.library, stored_request.book_id)
        md5_book = hashlib.md5(stored_request.book_id +
                               stored_request.library).hexdigest()
        library_url_key = book_key + ":library_url"
        library_url = redis_py.get(library_url_key, True)
        metadata_key = book_key + ":meta_data"
        meta_data = redis_py.get(metadata_key, True)
        book = models.Book(book_id=stored_request.book_id,
                           library=stored_request.library,
                           md5_book=stored_request.md5_book,
                           connected_request_sno=stored_request.sno,
                           requests=json.dumps(request),
                           library_url=library_url,
                           meta_data=meta_data)
        db.session.add(book)
        #db.session.commit()
        q.add(stored_request.sno)
        stored_request.job_submitted = 1
        db.session.commit()
        q_global_job.add(
            json.dumps(
                dict(library=stored_request.library,
                     book_id=stored_request.book_id)))
    if locked == True:
        Lock.release()
Пример #14
0
def addbook():
    form = forms.Book_add()
    if form.validate_on_submit():
        newbook = models.Book(id=form.id.data,
                              name=form.name.data,
                              style_num=form.style_num.data,
                              author=form.author.data,
                              count=form.count.data,
                              available_count=form.available_count.data,
                              price=form.price.data,
                              press=form.press.data,
                              publish_date=form.publish_date.data,
                              summary=form.summary.data)
        db.session.add(newbook)
        db.session.commit()
        flash('操作成功')
    return render_template('addbook.html', form=form)
Пример #15
0
def add():
    form = AddForm()
    if form.validate_on_submit():
        if form.a_name.data in str(models.Author.query.all()):
            author = models.Author.query.filter_by(
                name=form.a_name.data).first()
        else:
            author = models.Author(form.a_name.data)
        if form.b_name.data in str(models.Book.query.all()):
            book = models.Book.query.filter_by(name=form.b_name.data).first()
        else:
            book = models.Book(form.b_name.data)
        author.books.append(book)
        db.session.add(author)
        db.session.commit()
        flash('Added successfully')
        return redirect('/index')
    return render_template('Add.html', title='Add', form=form)
Пример #16
0
def create_book(book_raw, user_id):
    book_schema = m.BookSchema()
    book_data, _err = book_schema.load(book_raw)

    book = m.Book()
    book.title = book_data['title']
    book.description = book_data['description']
    book.cover = book_data['cover']

    book.editors.append(m.User.query.get(user_id))

    if _err:
        return None
    else:
        m.db.session.add(book)
        m.db.session.commit()

    # book_dump = book_schema.dump(book)
    return book
Пример #17
0
 def test_Book_release(self):
     b = models.Book(**self.bookParameters)
     self.assertEqual(b.released, "1996-08-01T00:00:00")
Пример #18
0
def manual():
    subtitle = "Upload using wildcards"
    try:
        form = WildcardForm(request.form)
    except UnboundLocalError:
        form = WildcardForm()
        return render_template("wildcard.html", subtitle=subtitle, form=form)
    if request.method == 'POST':
        if form.validate():
            if form.book_url.data in (None,
                                      "") and form.book_pdf_url.data in (None,
                                                                         ""):
                return render_template("wildcard.html",
                                       subtitle=subtitle,
                                       form=form)
            if form.link_type.data == 'wildcard':
                book_url = form.book_url.data if form.book_url.data not in (
                    None, "") else ""
                from_no = html_escape(
                    form.from_no.data) if form.from_no.data not in (None,
                                                                    "") else ""
                to_no = html_escape(
                    form.to_no.data) if form.to_no.data not in (None,
                                                                "") else ""
                info_url = re.sub('\(\*\)', str(from_no), book_url)
                book_url = book_url + ":" + str(from_no) + "," + str(to_no)
                book_url = book_url + ":" + 'wildcard'
            elif form.link_type.data == 'pdf':
                book_url = form.book_pdf_url.data if form.book_pdf_url.data not in (
                    None, "") else ""
                info_url = book_url
                book_url = book_url + ":" + 'pdf'
            library = 'man'
            Id = hashlib.md5(book_url).hexdigest()
            email = html_escape(
                form.email.data) if form.email.data not in (None, "") else ""
            book = bridge.fields(library, book_url, email)
            verification_status_no = book.verify_fields()
            if verification_status_no != 0:
                flash(error_msg(verification_status_no, book))
                return render_template("wildcard.html",
                                       subtitle=subtitle,
                                       form=form)
            tld = extract_base_domain(book_url)
            book_metadata = dict(
                image_url="",
                thumbnail_url="",
                printType="BOOK",
                subtitle="",
                infoLink=info_url,
                publicDomain=True,
                scanner=tld,
                sponser=tld,
                title=form.title.data if form.title.data not in (None,
                                                                 "") else "",
                author=form.author.data
                if form.author.data not in (None, "") else "",
                publisher=form.publisher.data
                if form.publisher.data not in (None, "") else "",
                publishedDate=form.date.data
                if form.date.data not in (None, "") else "",
                description=form.desc.data
                if form.desc.data not in (None, "") else "",
                language=form.language.data
                if form.language.data not in (None, "") else "")
            ia_identifier_suffix = get_valid_identifier_suffix(library, Id)
            redis = redis_py.Redis()
            redis_key3 = keys.redis_key3
            redis_key1 = keys.redis_key1
            book_key = "%s:%s:%s" % (redis_key3, library, ia_identifier_suffix)
            metadata_key = book_key + ":meta_data"
            redis_py.set(metadata_key, json.dumps(book_metadata), True)
            book_request_key = book_key + ":requests"
            request_details = dict(email=email)
            redis_py.sadd(book_request_key,
                          json.dumps(request_details),
                          request_cache=True)
            md5_book = hashlib.md5(ia_identifier_suffix + library).hexdigest()
            meta_data = json.dumps(book_metadata)
            book = models.Book(book_id=ia_identifier_suffix,
                               library=library,
                               requests=json.dumps(request_details),
                               meta_data=meta_data,
                               md5_book=md5_book)
            db.session.add(book)
            db.session.commit()
            q_global_job = redis_py.Queue(redis_key1 + "global")
            q_global_job.add(
                json.dumps(dict(library=library,
                                book_id=ia_identifier_suffix)))
            q = redis_py.Queue(redis_key1)
            q.add(
                json.dumps(
                    dict(library=library,
                         Id=book_url,
                         ia_identifier_suffix=ia_identifier_suffix)))
            flash(error_msg(100, email=email))
            return redirect(
                url_for('progress',
                        book_id=library + ":" + ia_identifier_suffix))
        else:
            return render_template("wildcard.html",
                                   subtitle=subtitle,
                                   form=form)
    else:
        return render_template("wildcard.html", subtitle=subtitle, form=form)
Пример #19
0
 def test_Book_media3(self):
     b = models.Book(**self.bookParameters3)
     self.assertEqual(b.mediaType, "Hardcover")
Пример #20
0
 def test_Book_release3(self):
     b = models.Book(**self.bookParameters3)
     self.assertEqual(b.released, "2005-11-08T00:00:00")
Пример #21
0
 def test_Book_toDict3(self):
     instance = models.Book(**self.bookParameters3)
     self.assertEqual(len(instance.toDict()), 12)
Пример #22
0
 def test_Book_publisher3(self):
     b = models.Book(**self.bookParameters3)
     self.assertEqual(b.publisher, "Bantam Books")
Пример #23
0
 def test_Book_name3(self):
     b = models.Book(**self.bookParameters3)
     self.assertEqual(b.name, "A Feast for Crows")
Пример #24
0
 def test_Book_isbn3(self):
     b = models.Book(**self.bookParameters3)
     self.assertEqual(b.isbn, self.bookParameters3['isbn'])
Пример #25
0
 def test_Book_numberOfPages3(self):
     b = models.Book(**self.bookParameters3)
     self.assertEqual(b.numberOfPages, 784)
Пример #26
0
 def test_Book_release2(self):
     b = models.Book(**self.bookParameters2)
     self.assertEqual(b.released, "2000-10-31T00:00:00")
Пример #27
0
 def test_Book_name2(self):
     b = models.Book(**self.bookParameters2)
     self.assertEqual(b.name, "A Storm of Swords")
Пример #28
0
 def test_Book_numberOfPages2(self):
     b = models.Book(**self.bookParameters2)
     self.assertEqual(b.numberOfPages, 992)
Пример #29
0
 def test_Book_name(self):
     b = models.Book(**self.bookParameters)
     self.assertEqual(b.name, "A Game of Thrones")