WebSupport クラス¶
- class sphinxcontrib.websupport.WebSupport[ソース]¶
Web サポートパッケージのメイン API クラスです。Web サポートパッケージとのすべてのやり取りは、このクラスを通じて行われる必要があります。
このクラスは、次のキーワード引数を取ります。
- srcdir
reStructuredText ソースファイルを含むディレクトリ。
- builddir
ビルドデータと静的ファイルを配置するディレクトリ。これは、データをビルドするために使用される
WebSupport
オブジェクトを作成するときに使用する必要があります。- datadir
Web サポートデータがあるディレクトリ。これは、データを取得するために使用される
WebSupport
オブジェクトを作成するときに使用する必要があります。- search
これは、使用する組み込み検索アダプタを参照する文字列(例:'xapian')、または
BaseSearch
のサブクラスのインスタンスのいずれかを含めることができます。- storage
これは、データベース URI を表す文字列、または
StorageBackend
のサブクラスのインスタンスのいずれかを含めることができます。これが指定されていない場合は、新しい sqlite データベースが作成されます。- moderation_callback
表示されない新しいコメントが追加されたときに呼び出されるコールバック関数。1 つの引数(追加されたコメントを表す辞書)を受け入れる必要があります。
- staticdir
静的ファイルを別の場所に作成する必要がある場合 (および
'/static'
ではない 場合) は、その場所の名前を持つ文字列にする必要があります(例:builddir + '/static_files'
)。注釈
staticdir
を指定する場合は、通常、それに応じてstaticroot
を調整することをお勧めします。- staticroot
静的ファイルが
'/static'
から提供されていない場合は、その場所の名前を持つ文字列にする必要があります(例:'/static_files'
)。- docroot
ドキュメントが URL のベースパスから提供されていない場合は、そのパスを指定する文字列にする必要があります(例:
'docs'
)。
バージョン 1.6 で変更: WebSupport クラスは、sphinx.websupport から sphinxcontrib.websupport に移動しました。sphinxcontrib-websupport
パッケージを依存関係に追加し、移動したクラスを使用してください。
メソッド¶
- WebSupport.build()[ソース]¶
ドキュメントをビルドします。データを outdir ディレクトリに配置します。次のように使用します。
support = WebSupport(srcdir, builddir, search='xapian') support.build()
これにより、reStructured Text ファイルが srcdir から読み込まれます。次に、pickle と検索インデックスをビルドし、それらを builddir に配置します。また、ノードデータをデータベースに保存します。
- WebSupport.get_document(docname, username='', moderator=False)[ソース]¶
pickle からドキュメントをロードして返します。ドキュメントは、テンプレートのレンダリングに使用できる辞書オブジェクトになります。
support = WebSupport(datadir=datadir) support.get_document('index', username, moderator)
ほとんどの場合、docname はリクエストパスから取得され、この関数に直接渡されます。Flask では、次のようになります。
@app.route('/<path:docname>') def index(docname): username = g.user.name if g.user else '' moderator = g.user.moderator if g.user else False try: document = support.get_document(docname, username, moderator) except DocumentNotFoundError: abort(404) render_template('doc.html', document=document)
返されるドキュメント辞書には、テンプレートレンダリング中に使用される次の項目が含まれています。
body: ドキュメントのメインボディ(HTML)
sidebar: ドキュメントのサイドバー(HTML)
relbar: 関連ドキュメントへのリンクを含む div
title: ドキュメントのタイトル
css: Sphinx が使用する CSS ファイルへのリンク
script: コメントオプションを含む Javascript
docname に一致するドキュメントが見つからない場合は、
DocumentNotFoundError
が発生します。- パラメーター:
docname – ロードするドキュメントの名前。
- WebSupport.get_data(node_id, username=None, moderator=False)[ソース]¶
node_id に関連付けられたコメントとソースを取得します。username が指定されている場合は、返されたコメントに投票情報が含まれます。デフォルトの CommentBackend は、source と comments の 2 つのキーを持つ辞書を返します。source はノードの生のソースであり、ユーザーが追加できる提案の開始点として使用されます。comments は、コメントを表す辞書のリストであり、それぞれに次の項目があります。
キー
内容
text
コメントテキスト。
username
コメントとともに保存されたユーザー名。
id
コメントの一意の識別子。
rating
コメントの現在の評価。
age
コメントが追加されてからの秒数。
time
時間情報を含む辞書。year、month、day、hour、minute、second、iso、delta のキーが含まれています。iso は ISO 8601 形式でフォーマットされた時間です。delta は、コメントがどれくらい古いかを示す印刷可能な形式です(例:「3時間前」)。
vote
user_id が指定された場合、これは投票を表す整数になります。賛成票は 1、反対票は -1、投票されていない場合は 0 になります。
node
コメントが添付されているノードの ID。コメントの親がノードではなく別のコメントである場合、これは null になります。
parent
ノードに添付されていない場合、このコメントが添付されているコメントの ID。
children
この形式のすべての子のリスト。
proposal_diff
現在のソースとユーザーが提案したソースの間の差分の HTML 表現。
- パラメーター:
node_id – コメントを取得するノードの ID。
username – コメントを表示しているユーザーのユーザー名。
moderator – ユーザーがモデレーターかどうか。
- WebSupport.add_comment(text, node_id='', parent_id='', displayed=True, username=None, time=None, proposal=None, moderator=False)[ソース]¶
コメントをノードまたは別のコメントに追加します。
get_comments()
と同じ形式でコメントを返します。コメントをノードに添付する場合は、node キーワード引数を使用してノードの ID(文字列として)を渡します。comment = support.add_comment(text, node_id=node_id)
コメントが別のコメントの子である場合は、parent キーワード引数を使用して親の ID(文字列として)を指定します。
comment = support.add_comment(text, parent_id=parent_id)
コメントとともにユーザー名を保存する場合は、オプションの username キーワード引数を渡します。
comment = support.add_comment(text, node=node_id, username=username)
- パラメーター:
parent_id – コメントの親のプレフィックス付き ID。
text – コメントのテキスト。
displayed – モデレーション用。
username – コメントを作成しているユーザーのユーザー名。
time – コメントが作成された時間。デフォルトは現在。
- WebSupport.process_vote(comment_id, username, value)[ソース]¶
ユーザーの投票を処理します。Webサポートパッケージは、認証を実行するためにAPIユーザーに依存しています。APIユーザーは通常、フォームからcomment_idとvalueを受け取り、その後、ユーザーが認証されていることを確認します。ユニークなユーザー名が渡される必要があり、これはユーザーの過去の投票データを取得するためにも使用されます。Flaskでの例を再度示します。
@app.route('/docs/process_vote', methods=['POST']) def process_vote(): if g.user is None: abort(401) comment_id = request.form.get('comment_id') value = request.form.get('value') if value is None or comment_id is None: abort(400) support.process_vote(comment_id, g.user.name, value) return "success"
- パラメーター:
comment_id – 投票されているコメント
username – 投票するユーザーの一意のユーザー名
value – 賛成票の場合は1、反対票の場合は-1、投票を取り消す場合は0。
- WebSupport.get_search_results(q)[ソース]¶
クエリ q の検索を実行し、検索結果のセットを作成します。次に、検索結果をhtmlとしてレンダリングし、
get_document()
によって作成されたものと同様のコンテキスト辞書を返します。document = support.get_search_results(q)
- パラメーター:
q – 検索クエリ