def render_bucket(bucket, web_path=""): set_bucket_in_request_context(bucket) try: # memcache 的获取,也可能会出错, 概率很低 cached_response = get_response_from_memcache() if cached_response: return cached_response except: pass if not web_path: web_path = get_request_path() # admin bucket 的默认主页对应 if not web_path or web_path == "/": if bucket == get_admin_bucket() and not has_template_by_name("index"): return render_api_template_as_response("page_admin_default_homepage.jade") static_file_response = render_as_static_resource_in_pages_for_farbox_bucket(web_path) if not static_file_response and web_path.lstrip('/').startswith('template/'): # 对一些 template 目录下的兼容 web_path_without_prefix = web_path.lstrip('/').replace('template/', '', 1) static_file_response = render_as_static_resource_in_pages_for_farbox_bucket(web_path_without_prefix) if static_file_response: return static_file_response else: file_response = render_as_static_file_for_farbox_bucket(web_path) if file_response: return file_response if web_path and '.' in web_path: static_response_from_system = send_static_frontend_resource(try_direct_path=True) if static_response_from_system: return static_response_from_system #if DEBUG: return render_template_for_farbox_bucket() return render_template_for_farbox_bucket_by_gevent()
def show_wiki_tag_fallback(tag): bucket = get_bucket_from_request() if not bucket: abort(404) set_bucket_in_request_context(bucket) wiki_root = get_wiki_root(bucket) if wiki_root: new_url = "/wiki/tag/%s?type=wiki_link" % tag else: new_url = "/tag/%s?type=wiki_link" % tag return redirect(new_url)
def show_bucket_records_for_web_request(bucket=None, default_records_per_page=100, includes_zero_ids=True, cursor=None, per_page=None): # return response or abort error bucket = bucket or get_logined_bucket_by_token() # by api token if not bucket: abort(404, "no bucket matched") set_bucket_in_request_context(bucket) pre_record_id = cursor or request.values.get('cursor') if not includes_zero_ids and not pre_record_id: # 不包括 zero ids 相当于 pre_record_id = zero_id_for_finder per_page = per_page or to_per_page(default_records_per_page, request.values.get('per_page'), max_per_page=1000) records = get_records_for_bucket(bucket, start_record_id=pre_record_id, limit=per_page) return jsonify(records)
def render_markdown_page(path=""): # cache it bucket = get_bucket_from_request() set_bucket_in_request_context(bucket) try: # memcache 的获取,也可能会出错, 概率很低 cached_response = get_response_from_memcache() if cached_response: return cached_response except: pass if path in ["about", "links", "contact"]: md_doc = get_markdown_record_by_path_prefix(bucket, path) show_site_nav = True else: md_doc = None show_site_nav = False return render_api_template_as_response("page_user_markdown_page.jade", md_doc=md_doc, show_site_nav=show_site_nav)
def show_bucket_records_for_web_request(bucket=None, default_records_per_page=100, includes_zero_ids=True, cursor=None, per_page=None): # return response or abort error # 注意: 如果传入一个有效的 bucket,那么是不会进行校验的 bucket = bucket or get_logined_bucket_by_token() # by api token if not bucket: # 服务器端同步相关的逻辑在这里判断 server_sync_token = request.values.get("server_sync_token", "") if server_sync_token and server_sync_token == get_env("server_sync_token"): bucket = get_pending_bucket_bucket_in_request() if not bucket: abort(404, "no bucket matched") set_bucket_in_request_context(bucket) pre_record_id = cursor or request.values.get('cursor') if not includes_zero_ids and not pre_record_id: # 不包括 zero ids 相当于 pre_record_id = zero_id_for_finder per_page = per_page or to_per_page(default_records_per_page, request.values.get('per_page'), max_per_page=1000) records = get_records_for_bucket(bucket, start_record_id=pre_record_id, limit=per_page) return jsonify(records)
def show_web_editor_posts(): set_bucket_in_request_context(get_bucket_for_file_manager()) return render_api_template_as_response("page_web_editor_posts.jade")
def show_file_manager_related_page(subname, path=''): set_bucket_in_request_context(get_bucket_for_file_manager()) template_name = 'page_file_%s.jade' % subname return render_api_template_as_response(template_name)
def site_json_settings_view(): bucket = get_logined_bucket(check=True) if not bucket: return abort(410) set_bucket_in_request_context(bucket) return render_api_template_as_response("page_user_json_settings_ui.jade")