def content_list():
    """ Show list of content """
    # parse search query
    query = urlunquote(request.params.get('q', '')).strip()
    # parse language filter
    default_lang = request.user.options.get('content_language', None)
    lang = request.params.get('language', default_lang)
    request.user.options['content_language'] = lang
    # parse content type filter
    content_type = request.params.get('content_type')
    if content_type not in metadata.CONTENT_TYPES:
        content_type = None
    # parse pagination params
    page = Paginator.parse_page(request.params)
    per_page = Paginator.parse_per_page(request.params)
    # get content list filtered by above parsed filter params
    item_count = content_count(query, lang, content_type)
    pager = Paginator(item_count, page, per_page)
    offset, limit = pager.items
    metas = filter_content(query,
                           lang,
                           content_type,
                           offset=offset,
                           limit=limit)
    return dict(metadata=metas,
                pager=pager,
                vals=request.params.decode(),
                query=query,
                chosen_lang=lang,
                content_types=metadata.CONTENT_TYPES,
                chosen_content_type=content_type,
                base_path=i18n_url('content:list'),
                view=request.params.get('view'))
def get_descendants(path):
    span = request.app.config['changelog.span']
    count = get_descendant_count(path, span)
    manager = Manager(request.app.supervisor)
    # parse pagination params
    page = Paginator.parse_page(request.params)
    per_page = Paginator.parse_per_page(request.params)
    pager = Paginator(count, page, per_page)
    (offset, limit) = pager.items
    (_, _, _, files, _) = manager.list_descendants(path,
                                                   offset=offset,
                                                   limit=limit,
                                                   order='-create_time',
                                                   span=span,
                                                   entry_type=0,
                                                   show_hidden=False)
    return dict(pager=pager, files=files)