Пример #1
0
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)
Пример #2
0
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
Пример #3
0
 def generate():
     db, library_id = get_library_data(ctx, rd.query)[:2]
     return json(ctx, rd, tag_browser, categories_as_json(ctx, rd, db))
Пример #4
0
 def generate():
     return json(ctx, rd, tag_browser,
                 categories_as_json(ctx, rd, db, opts, vl))
Пример #5
0
 def generate():
     db, library_id = get_library_data(ctx, rd.query)[:2]
     return json(ctx, rd, tag_browser, categories_as_json(ctx, rd, db))
Пример #6
0
 def generate():
     return json(ctx, rd, tag_browser, categories_as_json(ctx, rd, db, opts, vl))