def children_by_parent_id(Parent, parent_id, Child, sort_key): if not util.is_uuid(parent_id): return abort(404) parent = app.session.query(Parent).filter( Parent.id == parent_id).first() if parent == None: return abort(404) # Use pager per Child model filters = (getattr(Child, util.fk_column_name(Parent)) == parent_id) children_list_result = get_model_dict_list(Child, sort_key, filters) # util.singular(parent.__tablename__) child_key_prefix = util.singular_table_name(Child) return { util.singular_table_name(Parent): parent.to_dict(), # child_key_prefix + '_list': children_list_result['result_list'], # child_key_prefix + '_total': children_list_result['total'], # child_key_prefix + '_next_offset': children_list_result['next_offset'], 'children_list': children_list_result['result_list'], 'children_total': children_list_result['total'], 'children_next_offset': children_list_result['next_offset'] }
def list_quotes_by_book(book_id): if not util.is_uuid(book_id): return redirect(url_for('show_random_quote')) book = app.session.query(Book) \ .filter_by(id=book_id).first() if book == None: return redirect(url_for('show_random_quote')) page = page = get_page() offset = get_offset(page) query_filter = (Quote.book_id == book_id) quotes = app.session.query(Quote) \ .filter(query_filter) \ .order_by(Quote.text) \ .offset(offset) \ .limit(PER_PAGE) \ .all() pagination = get_pagenate(page, Quote, query_filter) return render_template('quote_list.html', book=book, quotes=quotes, pagination=pagination)
def list_fake_quotes_by_quote(quote_id): page = get_page() offset = get_offset(page) # When invalid id is passed, just redirect to random page if not util.is_uuid(quote_id): return redirect(url_for('show_random_quote')) quote = app.session.query(Quote) \ .filter(Quote.id==quote_id) \ .first() if quote == None: return redirect(url_for('show_random_quote')) query_filter = (FakeQuote.quote_id == quote_id) fake_quotes = app.session.query(FakeQuote) \ .filter(query_filter) \ .order_by(FakeQuote.text) \ .offset(offset) \ .limit(PER_PAGE) \ .all() pagination = get_pagenate(page, FakeQuote, query_filter) return render_template('fake_quote_list.html', quote=quote, fake_quotes=fake_quotes, pagination=pagination)
def show_fake_quote(fake_quote_id): # When invalid id is passed, just redirect to random page if not util.is_uuid(fake_quote_id): return redirect(url_for('show_random_quote')) fake_quote = app.session.query(FakeQuote).filter( FakeQuote.id == fake_quote_id).first() if fake_quote == None: return redirect(url_for('show_random_quote')) return render_fake_quote_page(fake_quote)
def api_random_fake_quotes(): query = app.session.query(FakeQuote.id) # If fake_quote_id is passed, get another one fake_quote_id = request.args.get('fake_quote_id', None) if fake_quote_id is not None and util.is_uuid(fake_quote_id): query = query.filter(FakeQuote.id != fake_quote_id) fake_quote = query.order_by(func.random()).first() print('fake_quote') print(fake_quote.id) return api_fake_quote_by_id(str(fake_quote.id))
def api_fake_quotes_random_id_list(): order_field = func.random() # query = app.session.query(FakeQuote.id) # If fake_quote_id is passed, get another one filters = None fake_quote_id = request.args.get('fake_quote_id', None) if fake_quote_id is not None and util.is_uuid(fake_quote_id): # query = query.filter() filters = (FakeQuote.id != fake_quote_id) return json_res_id_list(FakeQuote, order_field, filters)
def api_fake_quote_by_id(fake_quote_id): # print(fake_quote_id) # print("fake_quote_id") if not util.is_uuid(fake_quote_id): return abort(404) fake_quote = app.session.query(FakeQuote).filter( FakeQuote.id == fake_quote_id).first() if fake_quote == None: return abort(404) quote = fake_quote.original_quote return jsonify(fake_quote=fake_quote.to_dict(), fake_book=fake_quote.fake_book.to_dict(), fake_author=fake_quote.fake_book.fake_author.to_dict(), quote=quote.to_dict(), book=quote.book.to_dict(), author=quote.book.author.to_dict())