REST API編集におけるbypass_bumpへの感謝

How to edit post with API without bumping topic? の議論を続けます。

Discourse チームの皆様、bypass_bump パラメータを含めていただき、本当にありがとうございます!これは小さくても強力なツールです。スクリプトやプラグインが、古いトピックを意図せず最新ビューに表示させることなく、コンテンツをバックグラウンドで更新できるようになります。

当社では、ICS 同期スクリプトに使用しており、これにより、意味のある変更のみがトピックを実際に引き上げることが保証されます。コミュニティフォーラムをクリーンに保ち、読者のエクスペリエンスを妨げない、思慮深い追加機能です。重ねて感謝いたします!

「いいね!」 2

これは、私の最後の投稿のような誤解を招く称賛の投稿ではありません🙈。なぜなら、

  • Discourse は、投稿を改訂する際に bypass_bump フラグをサポートしています。これにより、最後の投稿(または最初で唯一の投稿)を編集しても、トピックの更新日時が変更されるのを防ぎます。これは、PostRevisor のオプションに明示的に記載されています(「- bypass_bump: 最後の投稿であっても、トピックを更新しない」)。
  • この称賛トピックは存在し、まさにそのユースケースを示しています。
  • 歴史的に、人々はこのオプションが API ドキュメントで広く知られていなかったり文書化されていなかったりしたため、/t/{id}/reset-bump-date の回避策を使用していましたが、必要に応じて引き続き利用可能です。

実用的な注意点:新しい生のテキストを含めて /posts/{post_id}.json に PUT リクエストを送信し、bypass_bump=true を含めると、編集はトピックを /latest に表示しません。(公式ドキュメントではこのパラメータは明記されていませんが、サーバー側で PostRevisor 経由で接続されています。)

APIドキュメントにおけるbypass_bumpの公式なステータスについては、まだ100%確信が持てません。明白な場所には表示されていないようです。

しかし、Ethsim12のPython同期スクリプトのログを見ると、参考になります。スクリプトはbypass_bump=trueを指定してAPIを呼び出そうとします。もしそのパラメータが無効であるか無視された場合、不要なバンプを防ぐ唯一の方法は、追加されたフォールバック、つまり手動での呼び出しになります。

/t/{topic_id}/reset-bump-date

したがって、ログ出力自体が強力な証拠となります。ログに/latestに表示されないトピック(またはリセットフォールバックを必要としないトピック)が更新されていることが示されている場合、それはbypass_bumpが有効で機能していることの十分な証明となります。もしログが常にreset-bump-dateにフォールバックしている場合、それは機能していないのかもしれません。

言い換えれば、このスクリプトからのログは、bypass_bumpが存在し、サーバーによって実際に尊重されているかどうかを確認する上で非常に役立ちます。

このプルリクエストにご興味があるかもしれません

「いいね!」 2

このPRを共有してくれてありがとう、moin — 非常に参考になるコンテキストです。

私のサイドプロジェクト(ics_to_discourse.pyインポーター)では、カレンダー主導の更新がトピックを「うるさく」バンプするのを停止するように、実際には変更をコミットしました。

そのコミットは、「意味のある」編集(時間/場所の変更など)かどうかを判断するロジックを追加し、bypass_bumpとリセットバンプ日付のフォールバックを使用して、通常のICS同期がトピックを不必要に表面化させないようにします。

したがって、このPRは私が目指していたものと完全に一致しています — コアが同じ方向に向かっているのを見るのは良いことです。「編集時にバンプしない」動作がマージされたら、フォールバックを単純化して削除しますが、現時点では、コミットは現在のDiscourseインストールを静かに保ちます。

Praise でこれに気づき、かなり技術的な内容なので Dev に移動しました。もちろん、称賛は感謝しています!:hugs:

「いいね!」 1

Hmm、このトピックを再読して、大学で活動しておらず、コーディングする時間があったときに、別の関連するPRを含めていなかったことに気づきました。