def tag_browser(ctx, rd): ''' Get the Tag Browser serialized as JSON Optional: ?library_id=<default library>&sort_tags_by=name&partition_method=first letter &collapse_at=25&dont_collapse= ''' db, library_id = get_library_data(ctx, rd.query)[:2] return categories_as_json(ctx, rd, db)
def interface_data(ctx, rd): ''' Return the data needed to create the server main UI Optional: ?num=50&sort=timestamp.desc&library_id=<default library> &sort_tags_by=name&partition_method=first letter&collapse_at=25& &dont_collapse= ''' ans = {'username':rd.username} ans['library_map'], ans['default_library'] = ctx.library_map ud = {} if rd.username: # Override session data with stored values for the authenticated user, # if any ud = ctx.user_manager.get_session_data(rd.username) lid = ud.get('library_id') if lid and lid in ans['library_map']: rd.query.set('library_id', lid) usort = ud.get('sort') if usort: rd.query.set('sort', usort) ans['library_id'], db, sorts, orders = get_basic_query_data(ctx, rd.query) ans['user_session_data'] = ud try: num = int(rd.query.get('num', DEFAULT_NUMBER_OF_BOOKS)) except Exception: raise HTTPNotFound('Invalid number of books: %r' % rd.query.get('num')) with db.safe_read_lock: ans['search_result'] = search_result(ctx, rd, db, '', num, 0, ','.join(sorts), ','.join(orders)) sf = db.field_metadata.ui_sortable_field_keys() sf.pop('ondevice', None) ans['sortable_fields'] = sorted((( sanitize_sort_field_name(db.field_metadata, k), v) for k, v in sf.iteritems()), key=lambda (field, name):sort_key(name)) ans['field_metadata'] = db.field_metadata.all_metadata() ans['categories'] = categories_as_json(ctx, rd, db) mdata = ans['metadata'] = {} for book_id in ans['search_result']['book_ids']: data = book_as_json(db, book_id) mdata[book_id] = data return ans
def generate(): db, library_id = get_library_data(ctx, rd.query)[:2] return json(ctx, rd, tag_browser, categories_as_json(ctx, rd, db))
def generate(): return json(ctx, rd, tag_browser, categories_as_json(ctx, rd, db, opts, vl))