寄稿—Pythonドキュメント
貢献
いらっしゃいませ!
このドキュメントはかなり広範であり、小さな貢献のためにこれを詳細に研究することは実際には期待されていません。
最も重要なルールは、貢献は簡単でなければならず、コミュニティは友好的であり、コーディングスタイルなどの詳細を軽視してはならないということです。
バグを報告する場合は、以下の「バグの報告」セクションを読んで、バグレポートに問題を正常に診断するのに十分な情報が含まれていることを確認する必要があります。コードを提供する場合は、コードを取り巻く規則を模倣するようにしてください。作業中ですが、最終的にはすべてのパッチが変更をマージする人によってクリーンアップされるので、あまり心配しないでください。
- コミュニティ行動規範
- バグの報告
- コードベースへの貢献者ガイド
- バージョン
- ブランチ
- タグ
- 機能とパッチに取り組んでいます
- コーディングスタイル
- 追加のライブラリを必要とする貢献機能
- 連絡先
- パッケージ
- リリース手順
コミュニティ行動規範
目標は、誰にとっても快適な多様なコミュニティを維持することです。 だからこそ、コミュニティに貢献し、コミュニティと交流するすべての人がこの行動規範に従えば、私たちは大いに感謝します。
行動規範は、フォーラム、メーリングリスト、ウィキ、ウェブサイト、インターネットリレーチャット(IRC)、公開会議、または私的な通信における、コミュニティのメンバーとしての私たちの行動を対象としています。
行動規範は、 Ubuntu行動規範とパイロン行動規範に大きく基づいています。
思いやりがある
あなたの作品は他の人に使われ、あなたは他の人の作品に依存することになります。 あなたが下す決定はユーザーや同僚に影響を及ぼします、そして私たちはあなたが決定をするときにそれらの結果を考慮に入れることを期待します。 当時は明らかではありませんが、Celeryへの貢献は他の人の仕事に影響を与えます。 たとえば、リリース中にコード、インフラストラクチャ、ポリシー、ドキュメント、および翻訳を変更すると、他の人の作業に悪影響を与える可能性があります。
敬意を表する
セロリコミュニティとそのメンバーは、お互いに敬意を持って接しています。 誰もがセロリに貴重な貢献をすることができます。 私たちは常に同意するとは限りませんが、意見の不一致は悪い行動や悪いマナーの言い訳にはなりません。 私たちは皆、時々何らかの欲求不満を経験するかもしれませんが、その欲求不満が個人的な攻撃に変わることを許すことはできません。 人々が不快または脅迫されていると感じるコミュニティは、生産的なコミュニティではないことを覚えておくことが重要です。 Celeryコミュニティのメンバーは、他の寄稿者だけでなく、Celeryプロジェクト外の人々やCeleryのユーザーとやり取りする際にも敬意を払うことを期待しています。
協力する
コラボレーションは、Celeryとより大きな自由ソフトウェアコミュニティの中心です。 私たちは常にコラボレーションを受け入れる必要があります。 作業は透過的に行われる必要があり、Celeryからのパッチは、ディストリビューションがリリースされたときだけでなく、作成されたときにコミュニティに返される必要があります。 既存のアップストリームプロジェクトの新しいコードに取り組みたい場合は、少なくともそれらのプロジェクトにアイデアと進捗状況を知らせてください。 アイデアの正しい実装について上流から、あるいは同僚からもコンセンサスを得ることができない場合が多いので、始める前にその合意を得る義務を感じないでください。ただし、少なくとも外の世界にあなたの仕事を知らせてください。部外者があなたの努力をテストし、議論し、貢献できるような方法であなたの作品を公開します。
同意しない場合は、他の人に相談してください
政治的および技術的な意見の不一致は常に発生しており、Celeryコミュニティも例外ではありません。 コミュニティとコミュニティプロセスの助けを借りて、意見の不一致や異なる見解を建設的に解決することが重要です。 本当に別の方法で行きたい場合は、可能な限り共通のコアを利用するために行った作業に基づいて、派生ディストリビューションまたはパッケージの代替セットを作成することをお勧めします。
よくわからないときは、助けを求めてください
誰もすべてを知っているわけではなく、完璧であると期待される人もいません。 質問をすることで、将来の多くの問題を回避できるため、質問をすることをお勧めします。 質問された人は、敏感で親切でなければなりません。 ただし、質問をするときは、適切なフォーラムで質問するように注意する必要があります。
慎重に降りる
すべてのプロジェクトの開発者が行き来し、Celeryも例外ではありません。 プロジェクトの全部または一部を離れたり、プロジェクトから離れたりする場合は、プロジェクトの中断を最小限に抑える方法で行うようお願いします。 これは、あなたが去る人にあなたが去ることを伝え、あなたが中断したところから他の人が拾うことができるように適切な措置をとるべきであることを意味します。
バグの報告
安全
セキュリティ関連の問題、脆弱性、または機密情報を含むバグをバグトラッカーやその他の公共の場所に報告しないでください。 代わりに、機密性の高いバグを[email protected]
に電子メールで送信する必要があります。
暗号化された情報を送信する場合、PGPキーは次のとおりです。
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.15 (Darwin)
mQENBFJpWDkBCADFIc9/Fpgse4owLNvsTC7GYfnJL19XO0hnL99sPx+DPbfr+cSE
9wiU+Wp2TfUX7pCLEGrODiEP6ZCZbgtiPgId+JYvMxpP6GXbjiIlHRw1EQNH8RlX
cVxy3rQfVv8PGGiJuyBBjxzvETHW25htVAZ5TI1+CkxmuyyEYqgZN2fNd0wEU19D
+c10G1gSECbCQTCbacLSzdpngAt1Gkrc96r7wGHBBSvDaGDD2pFSkVuTLMbIRrVp
lnKOPMsUijiip2EMr2DvfuXiUIUvaqInTPNWkDynLoh69ib5xC19CSVLONjkKBsr
Pe+qAY29liBatatpXsydY7GIUzyBT3MzgMJlABEBAAG0MUNlbGVyeSBTZWN1cml0
eSBUZWFtIDxzZWN1cml0eUBjZWxlcnlwcm9qZWN0Lm9yZz6JATgEEwECACIFAlJp
WDkCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOArFOUDCicIw1IH/26f
CViDC7/P13jr+srRdjAsWvQztia9HmTlY8cUnbmkR9w6b6j3F2ayw8VhkyFWgYEJ
wtPBv8mHKADiVSFARS+0yGsfCkia5wDSQuIv6XqRlIrXUyqJbmF4NUFTyCZYoh+C
ZiQpN9xGhFPr5QDlMx2izWg1rvWlG1jY2Es1v/xED3AeCOB1eUGvRe/uJHKjGv7J
rj0pFcptZX+WDF22AN235WYwgJM6TrNfSu8sv8vNAQOVnsKcgsqhuwomSGsOfMQj
LFzIn95MKBBU1G5wOs7JtwiV9jefGqJGBO2FAvOVbvPdK/saSnB+7K36dQcIHqms
5hU4Xj0RIJiod5idlRC5AQ0EUmlYOQEIAJs8OwHMkrdcvy9kk2HBVbdqhgAREMKy
gmphDp7prRL9FqSY/dKpCbG0u82zyJypdb7QiaQ5pfPzPpQcd2dIcohkkh7G3E+e
hS2L9AXHpwR26/PzMBXyr2iNnNc4vTksHvGVDxzFnRpka6vbI/hrrZmYNYh9EAiv
uhE54b3/XhXwFgHjZXb9i8hgJ3nsO0pRwvUAM1bRGMbvf8e9F+kqgV0yWYNnh6QL
4Vpl1+epqp2RKPHyNQftbQyrAHXT9kQF9pPlx013MKYaFTADscuAp4T3dy7xmiwS
crqMbZLzfrxfFOsNxTUGE5vmJCcm+mybAtRo4aV6ACohAO9NevMx8pUAEQEAAYkB
HwQYAQIACQUCUmlYOQIbDAAKCRDgKxTlAwonCNFbB/9esir/f7TufE+isNqErzR/
aZKZo2WzZR9c75kbqo6J6DYuUHe6xI0OZ2qZ60iABDEZAiNXGulysFLCiPdatQ8x
8zt3DF9BMkEck54ZvAjpNSern6zfZb1jPYWZq3TKxlTs/GuCgBAuV4i5vDTZ7xK/
aF+OFY5zN7ciZHkqLgMiTZ+RhqRcK6FhVBP/Y7d9NlBOcDBTxxE1ZO1ute6n7guJ
ciw4hfoRk8qNN19szZuq3UU64zpkM2sBsIFM9tGF2FADRxiOaOWZHmIyVZriPFqW
RUwjSjs7jBVNq0Vy4fCu/5+e+XLOUBOoqtM5W7ELt0t1w9tXebtPEetV86in8fU2
=0chn
-----END PGP PUBLIC KEY BLOCK-----
その他のバグ
バグはいつでもメーリングリストに説明できますが、問題を報告し、タイムリーな対応を確保するための最良の方法は、問題追跡システムを使用することです。
- GitHubアカウントを作成します。
新しい問題を作成してディスカッションに参加するには、 GitHubアカウントを作成する必要があります。
バグが本当にバグであるかどうかを判断します。
サポートをリクエストしている場合は、バグを報告しないでください。 そのためには、メーリングリストまたは IRC を使用できます。 それでもサポートが必要な場合は、githubの問題を開くことができます。タイトルの前に、[QUESTION]
を付けてください。
バグがまだ報告されていないことを確認してください。
適切なIssueTrackerを検索します。 あなたのようなバグが見つかった場合は、開発者がバグを修正するのに役立つ新しい情報が報告されているかどうかを確認してください。
最新バージョンを使用しているかどうかを確認してください。
バグは、他のいくつかの改善と修正によって修正される可能性があります-バグトラッカーに既存のレポートがない可能性があります。 セロリ、ビリヤード、昆布、amqp、つるの最新リリースを使用していることを確認してください。
バグに関する情報を収集します。
バグが修正される可能性を最大限に高めるには、バグの原因となった状態を簡単に再現できる必要があります。 ほとんどの場合、この情報はPythonトレースバックメッセージからのものですが、Webサイト/ドキュメント/コードのデザイン、スペル、またはその他のエラーにバグがある可能性があります。
エラーがPythonトレースバックによるものである場合は、バグレポートに含めてください。
また、実行しているプラットフォーム(Windows、macOS、Linuxなど)、Pythonインタープリターのバージョン、Celeryのバージョン、およびバグが発生したときに実行していた関連パッケージを知る必要があります。
競合状態またはデッドロックを報告している場合、トレースバックを取得するのが難しいか、それほど役に立たない可能性があります。 プロセスを調べて、より多くの診断データを取得してみてください。 いくつかのアイデア:
Celeryのブレークポイント信号を有効にし、それを使用してプロセスの状態を検査します。 これにより、
pdb
セッションを開くことができます。strace`_(Linux)、: command: `dtruss (macOS)、 ktrace (BSD)、 ltrace 、を使用してトレースデータを収集しますlsof 。
celery report コマンドからの出力を含めます。
$ celery -A proj report
これには構成設定も含まれ、機密性が高いことがわかっているキーの値を削除しようとしますが、APIトークンや認証クレデンシャルなどの機密情報が含まれないように、送信する前に情報も確認してください。
問題はテストケースが必要としてタグ付けされている可能性があります。 テストケースは、問題が報告している内容を再現するために必要なすべての詳細を表します。 テストケースは、問題を再現する最小限のコード、またはその問題を再現する詳細な手順と構成値にすることができます。
バグを送信してください。
デフォルトでは、 GitHub からメールが届き、バグに新しいコメントが追加されたときに通知されます。 この機能をオフにした場合は、バグを修正しようとしている開発者が尋ねる可能性のある質問を見逃さないように、時々チェックする必要があります。
課題追跡システム
Celeryエコシステムのパッケージのバグは、関連する課題追跡システムに報告する必要があります。
- :pypi: `celery` : https://github.com/celery/celery/issues/
- :pypi: `kombu` : https://github.com/celery/kombu/issues
- :pypi: `amqp` : https://github.com/celery/py-amqp/issues
- :pypi: `vine` : https://github.com/celery/vine/issues
- :pypi: `librabbitmq` : https://github.com/celery/librabbitmq/issues
- :pypi: `django-celery-beat` : https://github.com/celery/django-celery-beat/issues
- :pypi: `django-celery-results` : https://github.com/celery/django-celery-results/issues
バグの原因がわからない場合は、メーリングリストに問い合わせるか、Celery課題追跡システムを使用してください。
バージョン
バージョン番号は、メジャーバージョン、マイナーバージョン、およびリリース番号で構成されます。 バージョン2.1.0以降、SemVerで説明されているバージョン管理セマンティクスを使用しています: http://semver.org 。
安定したリリースはPyPIで公開されていますが、開発リリースはGitHubgitリポジトリでタグとしてのみ利用できます。 すべてのバージョンタグは「v」で始まるため、バージョン0.8.0にはタグv0.8.0があります。
ブランチ
現在アクティブなバージョンのブランチ:
- dev(gitは「マスター」と呼びます)( https://github.com/celery/celery/tree/master )
- 4.5( https://github.com/celery/celery/tree/v4.5 )
- 3.1( https://github.com/celery/celery/tree/3.1 )
変更ログを見ると、ブランチの状態を確認できます。
ブランチが活発に開発されている場合、最上位のバージョン情報には次のようなメタデータが含まれている必要があります。
4.3.0
======
:release-date: TBA
:status: DEVELOPMENT
:branch: dev (git calls this master)
status
フィールドは次のいずれかになります。
PLANNING
ブランチは現在実験中であり、計画段階にあります。
DEVELOPMENT
ブランチは活発に開発されていますが、テストスイートは合格であり、製品は機能しており、ユーザーがテストできる必要があります。
FROZEN
ブランチは凍結されており、これ以上の機能は受け入れられません。 ブランチがフリーズすると、リリースされる前に可能な限りバージョンをテストすることに重点が置かれます。
開発ブランチ
devブランチ(gitでは「マスター」と呼ばれます)は、次のバージョンの開発が行われる場所です。
メンテナンスブランチ
メンテナンスブランチの名前はバージョンにちなんで付けられています。たとえば、2.2.xシリーズのメンテナンスブランチの名前は2.2
です。
以前は、これらはreleaseXX-maint
という名前でした。
現在維持しているバージョンは次のとおりです。
4.2
これが現在のシリーズです。
4.1
Python2.6のサポートを終了します。 Python 3.4、3.5、および3.6のサポートを追加します。
3.1
Python 2.6、2.7、3.3の公式サポートであり、PyPyでもサポートされています。
アーカイブされたブランチ
アーカイブされたブランチは履歴を保存するためだけに保持され、理論的には、公式にサポートされなくなったシリーズに依存している場合、誰かがこれらのパッチを提供できます。
アーカイブされたバージョンの名前はX.Y-archived
です。
よりクリーンな履歴を維持し、互換性を削除してプロジェクトを継続的に改善するために、現在アーカイブバージョンはありません。
機能ブランチ
主要な新機能は、専用のブランチで作業されています。 これらのブランチには厳密な命名要件はありません。
機能ブランチは、リリースブランチにマージされると削除されます。
機能とパッチに取り組んでいます
ノート
セロリへの貢献は可能な限り単純でなければならないので、これらのステップのどれも必須と見なされるべきではありません。
それがあなたの好みの作業方法であるならば、あなたは電子メールでパッチを送ることさえできます。 私たちはあなたをこれ以上好きではありません、あなたがするどんな貢献も常に感謝されます!
ただし、これらの手順に従うと、メンテナの作業が楽になり、変更がより早く受け入れられる可能性があります。
リポジトリのフォークと設定
まず、Celeryリポジトリをフォークする必要があります。 これについての良い紹介は、GitHubガイド: Fork a Repo にあります。
リポジトリのクローンを作成したら、コピーをマシン上のディレクトリにチェックアウトする必要があります。
$ git clone [email protected]:username/celery.git
リポジトリのクローンが作成されたら、ディレクトリに入り、アップストリームの変更に簡単にアクセスできるように設定します。
$ cd celery
$ git remote add upstream git://github.com/celery/celery.git
$ git fetch upstream
アップストリームから新しい変更を取り込む必要がある場合は、常に--rebase
オプションをgit pull
に使用する必要があります。
git pull --rebase upstream master
このオプションを使用すると、コミットノートをマージして履歴を乱雑にすることはありません。 git でのマージコミットのリベースを参照してください。 リベースについて詳しく知りたい場合は、GitHubガイドの Rebase セクションを参照してください。
gitがmaster
を呼び出すのとは別のブランチで作業する必要がある場合は、次のようにリモートブランチをフェッチしてチェックアウトできます。
git checkout --track -b 5.0-devel upstream/5.0-devel
注:機能または修正ブランチはupstream/master
から作成する必要があります。
Dockerを使用した開発とテスト
ブローカーやバックエンドなど、Celeryの多くのコンポーネントがあるため、 Docker および docker-compose を利用して、開発とテストのサイクルを大幅に簡素化できます。 ここでのDocker構成には、少なくとも17.13.0のDockerバージョンと docker-compose 1.13.0+が必要です。
Dockerコンポーネントはdocker/
フォルダー内にあり、Dockerイメージは次の方法でビルドできます。
$ docker-compose build celery
経由して実行します:
$ docker-compose run --rm celery <command>
どこ Dockerコンテナで実行するコマンドです。 –rm フラグは、コンテナーが終了した後に削除する必要があることを示し、不要なコンテナーの蓄積を防ぐのに役立ちます。
実行するいくつかの便利なコマンド:
bash
通常のシェルのようにDockerコンテナに入るには
make test
テストスイートを実行します。 注:これは、デフォルトでpython3.8を使用してテストを実行します。
tox
toxを実行し、さまざまな構成に対してテストします。 注:このコマンドは、
tox.ini
で定義されているすべての環境に対してテストを実行します。 しばらく時間がかかります。pyenv exec python{3.6,3.7,3.8,3.9} -m pytest t/unit
pytestを使用して単体テストを実行します。
ノート:
{3.6,3.7,3.8,3.9}
means you can use any of those options. e.g.pyenv exec python3.7 -m pytest t/unit
pyenv exec python{3.6,3.7,3.8,3.9} -m pytest t/integration
pytestを使用して統合テストを実行するには
ノート:
{3.6,3.7,3.8,3.9}
means you can use any of those options. e.g.pyenv exec python3.7 -m pytest t/unit
デフォルトでは、docker-composeはCeleryフォルダーとテストフォルダーをDockerコンテナーにマウントし、コードの変更とテストをDockerコンテナー内ですぐに表示できるようにします。 使用するブローカーやバックエンドなどの環境変数もdocker/docker-compose.yml
ファイルで定義されています。
docker-compose build celery
を実行すると、celery/celery:dev
という名前のイメージが作成されます。 このDockerイメージには、開発に必要なすべての依存関係がインストールされています。 pyenv
は複数のPythonバージョンをインストールするために使用され、DockerイメージはPython 3.6、3.7、3.8、および3.9を提供します。 デフォルトのPythonバージョンは3.8に設定されています。
docker-compose.yml
ファイルは、統合テストを実行するために必要な環境変数を定義します。 celery
サービスもコードベースをマウントし、PYTHONPATH
環境変数を/home/developer/celery
に設定します。 PYTHONPATH
を設定することにより、サービスはマウントされたコードベースを開発用のグローバルモジュールとして使用できるようにします。 必要に応じて、python -m pip install -e .
を実行して、コードベースを開発モードでインストールすることもできます。
Djangoまたはスタンドアロンプロジェクトを実行して機能を手動でテストまたはデバッグする場合は、 docker-compose で作成されたイメージを使用して、カスタムコードをマウントできます。 次に例を示します。
次のようなフォルダ構造を想定しています。
+ celery_project
+ celery # repository cloned here.
+ my_project
- manage.py
+ my_project
- views.py
version: "3"
services:
celery:
image: celery/celery:dev
environment:
TEST_BROKER: amqp://rabbit:5672
TEST_BACKEND: redis://redis
volumes:
- ../../celery:/home/developer/celery
- ../my_project:/home/developer/my_project
depends_on:
- rabbit
- redis
rabbit:
image: rabbitmq:latest
redis:
image: redis:latest
前の例では、このリポジトリからビルドできるイメージを使用し、セロリコードベースとカスタムプロジェクトをマウントしています。
ユニットテストスイートの実行
仮想環境を使用して、またはDockerのすぐ外で開発する場合は、必要なすべての依存関係がインストールされていることを確認する必要があります。 すべての依存関係を簡単にインストールできるようにするために、複数の要件ファイルがあります。 すべての要件ファイルを使用する必要はありませんが、 default.txt を使用する必要があります。
# pip install -U -r requirements/default.txt
Celeryテストスイートを実行するには、requirements/test.txt
をインストールする必要があります。
$ pip install -U -r requirements/test.txt
$ pip install -U -r requirements/default.txt
必要な依存関係をインストールした後、を呼び出すことでテストスイートを実行できます :pypi: `pytest ` :
$ pytest t/unit
$ pytest t/integration
pytest の便利なオプションは次のとおりです。
-x
失敗した最初のテストでテストの実行を停止します。
-s
出力をキャプチャしない
-v
詳細な出力で実行します。
単一のテストファイルに対してのみテストを実行する場合は、次のように実行できます。
$ pytest t/unit/worker/test_worker.py
テストカバレッジの計算
テストカバレッジを計算するには、最初に:pypi: `pytest-cov` モジュールをインストールする必要があります。
:pypi: `pytest-cov` モジュールのインストール:
$ pip install -U pytest-cov
HTML形式のコードカバレッジ
--cov-report=html
引数を有効にして pytest を実行します。$ pytest --cov=celery --cov-report=html
カバレッジ出力は、
htmlcov/
ディレクトリに配置されます。$ open htmlcov/index.html
XMLでのコードカバレッジ(Coberturaスタイル)
--cov-report=xml
引数を有効にして pytest を実行します。
$ pytest --cov=celery --cov-report=xml
- カバレッジXML出力は、
coverage.xml
ファイルに配置されます。
サポートされているすべてのPythonバージョンでテストを実行する
ディストリビューションのトップディレクトリに:pypi: `tox` 構成ファイルがあります。
サポートされているすべてのPythonバージョンのテストを実行するには、次のコマンドを実行するだけです。
$ tox
特定のPythonバージョンのみをテストする場合は、tox -e
オプションを使用します。
$ tox -e 3.7
ドキュメントの作成
ドキュメントを作成するには、requirements/docs.txt
およびrequirements/default.txt
にリストされている依存関係をインストールする必要があります。
$ pip install -U -r requirements/docs.txt
$ pip install -U -r requirements/default.txt
さらに、警告なしでビルドするには、次のパッケージをインストールする必要があります。
$ apt-get install texlive texlive-latex-extra dvipng
これらの依存関係をインストールすると、次のコマンドを実行してドキュメントを作成できるようになります。
$ cd docs
$ rm -rf _build
$ make html
ビルド出力にエラーや警告がないことを確認してください。 ビルドが成功すると、ドキュメントは_build/html
で入手できます。
Dockerを使用してドキュメントを作成する
次のコマンドを実行してドキュメントを作成します。
$ docker-compose -f docker/docker-compose.yml up --build docs
このサービスは、:7000
でローカルドキュメントサーバーを起動します。 サーバーは--watch
オプションを有効にしてsphinx-autobuild
を使用しているため、ドキュメントをライブ編集できます。 docker/docker-compose.yml
の追加のオプションと構成を確認してください
あなたの貢献を確認する
これらのツールを使用するには、いくつかの依存関係をインストールする必要があります。 これらの依存関係はrequirements/pkgutils.txt
にあります。
依存関係のインストール:
$ pip install -U -r requirements/pkgutils.txt
pyflakes&PEP-8
変更が PEP 8 に準拠していることを確認し、pyflakesを実行するには、次のコマンドを実行します。
$ make flakecheck
このコマンドが失敗したときに負の終了コードを返さないようにするには、代わりにflakes
ターゲットを使用します。
$ make flakes
APIリファレンス
すべてのモジュールのAPIリファレンスに対応するセクションがあることを確認するには、以下を実行してください。
$ make apicheck
ファイルが欠落している場合は、既存の参照ファイルをコピーして追加できます。
モジュールが内部にある場合は、docs/internals/reference/
にある内部参照の一部である必要があります。 モジュールが公開されている場合は、docs/reference/
に配置する必要があります。
たとえば、モジュールcelery.worker.awesome
の参照がなく、このモジュールがパブリックAPIの一部と見なされる場合は、次の手順を使用します。
既存のファイルをテンプレートとして使用します。
$ cd docs/reference/
$ cp celery.schedules.rst celery.worker.awesome.rst
お気に入りのエディターを使用してファイルを編集します。
$ vim celery.worker.awesome.rst
# change every occurrence of ``celery.schedules`` to
# ``celery.worker.awesome``
お気に入りのエディターを使用してインデックスを編集します。
$ vim index.rst
# Add ``celery.worker.awesome`` to the index.
変更をコミットします。
# Add the file to git
$ git add celery.worker.awesome.rst
$ git add index.rst
$ git commit celery.worker.awesome.rst index.rst \
-m "Adds reference for celery.worker.awesome"
Isort
Isort は、インポートをアルファベット順に並べ替えてセクションに分割するのに役立つPythonユーティリティです。 Celeryプロジェクトは、isortを使用して、すべてのモジュールのインポートをより適切に維持します。 新しいモジュールがある場合、または既存のモジュールのインポートを変更する必要がある場合は、isortを実行してください。
$ isort my_module.py # Run isort for one file
$ isort -rc . # Run it recursively
$ isort m_module.py --diff # Do a dry-run to see the proposed changes
プルリクエストの作成
機能/バグ修正が完了したら、プルリクエストを送信して、メンテナが確認できるようにすることをお勧めします。
プルリクエストを送信する前に、このチェックリストに目を通し、メンテナが提案された変更を簡単に受け入れられるようにしてください。
- []変更や新機能にユニットテストや統合テストがあることを確認してください。
テストが書かれていない場合は、
Needs Test Coverage
という名前のラベルがPRに割り当てられます。
- []ユニットテストカバレッジが減少しないことを確認してください。
pytest -xv --cov=celery --cov-report=xml --cov-report term
。 現在のテストカバレッジはここで確認できます: https://codecov.io/gh/celery/celery
- []コードに対して
pre-commit
を実行します。 次のコマンドは有効です および同等のもの。:
$ pre-commit run --all-files $ tox -e lint
- []コードに対して
- []すべてがOKであることを確認するためにAPIドキュメントを作成します。 次のコマンドは有効です
および同等のもの。:
$ make apicheck $ cd docs && sphinx-build -b apicheck -d _build/doctrees . _build/apicheck $ tox -e apicheck
- [] configcheckをビルドします。 次のコマンドは有効です
および同等のもの。:
$ make configcheck $ cd docs && sphinx-build -b configcheck -d _build/doctrees . _build/configcheck $ tox -e configcheck
- []
bandit
を実行して、セキュリティの問題がないことを確認します。 次のコマンドは有効です および同等のもの。:
$ pip install -U bandit $ bandit -b bandit.json celery/ $ tox -e bandit
- []
- []すべてのPythonバージョンに対してユニットテストと統合テストを実行します。 次のコマンドは有効です
および同等のもの。:
$ tox -v
[]新規または変更されたインポートで
isort
を確認します。$ isort my_module.py --diff
プルリクエストの作成は簡単で、投稿の進行状況を追跡することもできます。 これがどのように行われるかについては、GitHubガイドのプルリクエストセクションをお読みください。
ここに概説されている手順に従って、既存の問題にプルリクエストを添付することもできます: https://bit.ly/koJoso
ハブを使用してプルリクエストを作成することもできます。 例: https://theiconic.tech/git-hub-fbe2e13ef4d1
ステータスラベル
githubの問題とPRを簡単に管理するために使用されるさまざまなラベルがあります。 これらのラベルのほとんどは、重要な詳細で各問題を簡単に分類できるようにします。 たとえば、問題やPRにComponent:canvas
ラベルが表示される場合があります。 Component:canvas
ラベルは、問題またはPRがキャンバス機能に対応していることを意味します。 これらのラベルはメンテナによって設定され、ほとんどの場合、外部の貢献者はそれらについて心配する必要はありません。 これらのラベルのサブセットには、 Status:が付加されます。 通常、 Status:ラベルは、問題またはPRに必要な重要なアクションを示します。 このようなステータスの概要は次のとおりです。
状態:再現できません
1人以上のCeleryコアチームメンバーが問題を再現できませんでした。
ステータス:確認済み
問題またはPRは、1人以上のCeleryコアチームメンバーによって確認されています。
ステータス:重複
重複する問題またはPR。
ステータス:フィードバックが必要
1人以上のCeleryコアチームメンバーが、問題またはPRに関するフィードバックを求めています。
ステータス:テストケースあり
問題が確認されているか、PRにテストケースが含まれています。 これは、新機能やバグ修正のテストを正しく作成するために特に重要です。
ステータス:進行中
PRはまだ進行中です。
ステータス:無効
報告された問題またはPRはプロジェクトに対して無効です。
ステータス:ドキュメントが必要
PRには、提案された機能またはバグ修正に関するドキュメントは含まれていません。
ステータス:リベースが必要
PRは
master
でリベースされていません。 マージの競合を解決するには、PRをmaster
にマージする前に、PRをリベースすることが非常に重要です。ステータス:テストカバレッジが必要
Celeryは、 codecov を使用してコードカバレッジを確認します。 PRがコードカバレッジを低下させないことを確認してください。 このラベルは、コードカバレッジが必要なPRを識別します。
ステータス:テストケースが必要
問題またはPRにはテストケースが必要です。 テストケースは、問題を再現する最小限のコードスニペット、または報告された問題を再現する詳細な手順と構成値のセットにすることができます。 可能であれば、テストケースをPRの形でCeleryの統合スイートに提出できます。 バグが修正されるまで、テストケースは失敗としてマークされます。 Celeryの統合スイートでテストケースを実行できない場合は、問題自体に説明することをお勧めします。
ステータス:検証が必要
このラベルは、レポーターによって提供されたテストケースを確認する必要があること、および/または統合スイートにテストを含める必要があることを他のユーザーに通知するために使用されます。
ステータス:バグではありません
報告された問題はバグではないと判断されました。
ステータス:修正されません
この問題は修正されないことが決定されました。 悲しいことに、Celeryプロジェクトには無制限のリソースがなく、この決定を下さなければならない場合があります。 ただし、問題やPRに
Status: Won't Fix
のラベルが付いている場合でも、外部の貢献者は誰でも助けてくれるように招待されています。ステータス:Works For Me
1人以上のCeleryコアチームメンバーが、報告された問題が彼らのために機能することを確認しました。
コーディングスタイル
おそらく周囲のコードからコーディングスタイルを選択できるはずですが、次の規則に注意することをお勧めします。
- すべてのPythonコードは、 PEP 8 ガイドラインに従う必要があります。
:pypi: `pep8` は、コードが規則に従っていることを確認するために使用できるユーティリティです。
Docstringは、 PEP 257 の規則に従い、次のスタイルを使用する必要があります。
これを行う:
def method(self, arg): """Short description. More details. """
また:
def method(self, arg): """Short description."""
しかし、これではありません:
def method(self, arg): """ Short description. """
行は78列を超えてはなりません。
textwidth
オプションを設定することで、 vim でこれを強制できます。set textwidth=78
この制限を順守するとコードが読みにくくなる場合は、あと1文字追加する必要があります。 これは、78がソフト制限であり、79がハード制限であることを意味します:)
輸入注文
Python標準ライブラリ( import xxx )
Python標準ライブラリ( from xxx import )
サードパーティのパッケージ。
現在のパッケージの他のモジュール。
またはDjangoを使用するコードの場合:
Python標準ライブラリ( import xxx )
Python標準ライブラリ( from xxx import )
サードパーティのパッケージ。
Djangoパッケージ。
現在のパッケージの他のモジュール。
これらのセクション内で、インポートはモジュール名でソートする必要があります。
例:
import threading import time from collections import deque from Queue import Queue, Empty from .platforms import Pidfile from .utils.time import maybe_timedelta
ワイルドカードインポートは使用しないでください( from xxx import * )。
Python 2.5が最も古いサポートバージョンであるディストリビューションの場合、追加のルールが適用されます。
絶対インポートは、すべてのモジュールの上部で有効にする必要があります。
from __future__ import absolute_import
モジュールが
with
ステートメントを使用し、Python 2.5と互換性がある必要がある場合(セロリは互換性がありません)、次のことも有効にする必要があります。from __future__ import with_statement
古いPython2.5リリースは、同じ将来のインポート行での複数の機能のインポートをサポートしていなかったため、将来のすべてのインポートは独自の行にある必要があります。
# Good from __future__ import absolute_import from __future__ import with_statement # Bad from __future__ import absolute_import, with_statement
(パッケージにPython 2.5のサポートが含まれていない場合、このルールは適用されないことに注意してください)
ディストリビューションが2.5未満のPythonバージョンをサポートしていない場合は、「新しいスタイル」の相対インポートを使用することに注意してください。
これにはPython2.5以降が必要です。
from . import submodule
追加のライブラリを必要とする貢献機能
新しい結果バックエンドなどの一部の機能では、ユーザーがインストールする必要のある追加のライブラリが必要になる場合があります。
これにはsetuptools extra_requires を使用し、サードパーティのライブラリを必要とするすべての新しいオプション機能を追加する必要があります。
Requirements / extras に新しい要件ファイルを追加します
Cassandraバックエンドの場合、これは
requirements/extras/cassandra.txt
であり、ファイルは次のようになります。pycassa
これらはpip要件ファイルであるため、バージョン指定子を設定でき、複数のパッケージを改行で区切ることができます。 より複雑な例は次のとおりです。
# pycassa 2.0 breaks Foo pycassa>=1.0,<2.0 thrift
setup.py
を変更します要件ファイルを追加したら、
extras_require
セクションのsetup.py
にオプションとして追加する必要があります。extra['extras_require'] = { # ... 'cassandra': extras('cassandra.txt'), }
docs/includes/installation.txt
で新機能を文書化するdocs/includes/installation.txt
のバンドルセクションのリストに機能を追加する必要があります。このファイルに変更を加えた後、ディストリビューション
README
ファイルをレンダリングする必要があります。$ pip install -U requirements/pkgutils.txt $ make readme
実行する必要があるのはこれだけですが、機能で構成オプションを追加する場合は、docs/configuration.rst
に文書化する必要があることに注意してください。 また、すべての設定をcelery/app/defaults.py
モジュールに追加する必要があります。
結果のバックエンドには、docs/configuration.rst
ファイルに別のセクションが必要です。
連絡先
これは、公式のgitリポジトリ、PyPIパッケージに関する質問について連絡できる人のリストです。ドキュメントのページを読んでください。
問題が緊急ではない場合は、問題を報告することをお勧めします。
コミッター
Webサイト
セロリプロジェクトのウェブサイトは、によって運営および維持されています
パッケージ
celery
- ギット
- https://github.com/celery/celery
- CI
- https://travis-ci.org/#!/celery/celery
- Windows-CI
- https://ci.appveyor.com/project/ask/celery
- PyPI
- :pypi: `celery`
- ドキュメント
- http://docs.celeryproject.org
kombu
メッセージングライブラリ。
- ギット
- https://github.com/celery/kombu
- CI
- https://travis-ci.org/#!/celery/kombu
- Windows-CI
- https://ci.appveyor.com/project/ask/kombu
- PyPI
- :pypi: `昆布`
- ドキュメント
- https://kombu.readthedocs.io
amqp
Python AMQP0.9.1クライアント。
- ギット
- https://github.com/celery/py-amqp
- CI
- https://travis-ci.org/#!/celery/py-amqp
- Windows-CI
- https://ci.appveyor.com/project/ask/py-amqp
- PyPI
- :pypi: `amqp`
- ドキュメント
- https://amqp.readthedocs.io
vine
約束/延期された実装。
- ギット
- https://github.com/celery/vine/
- CI
- https://travis-ci.org/#!/celery/vine/
- Windows-CI
- https://ci.appveyor.com/project/ask/vine
- PyPI
- :pypi: `vine`
- ドキュメント
- https://vine.readthedocs.io
billiard
最終的にPythonstdlibにマージされる改善を含むマルチプロセッシングのフォーク。
- ギット
- https://github.com/celery/billiard
- CI
- https://travis-ci.org/#!/celery/billiard/
- Windows-CI
- https://ci.appveyor.com/project/ask/billiard
- PyPI
- :pypi: `ビリヤード`
django-celery-beat
DjangoORMを使用した管理インターフェースを備えたデータベースに裏打ちされた定期的なタスク。
- ギット
- https://github.com/celery/django-celery-beat
- CI
- https://travis-ci.org/#!/celery/django-celery-beat
- Windows-CI
- https://ci.appveyor.com/project/ask/django-celery-beat
- PyPI
- :pypi: `django-celery-beat`
django-celery-results
タスクの結果をDjangoORMに保存するか、Django CacheFrameworkを使用します。
- ギット
- https://github.com/celery/django-celery-results
- CI
- https://travis-ci.org/#!/celery/django-celery-results
- Windows-CI
- https://ci.appveyor.com/project/ask/django-celery-results
- PyPI
- :pypi: `django-celery-results`
librabbitmq
Cで記述された非常に高速なPythonAMQPクライアント。
cyme
分散セロリインスタンスマネージャー。
- ギット
- https://github.com/celery/cyme
- PyPI
- :pypi: `cyme`
- ドキュメント
- https://cyme.readthedocs.io/
非推奨
django-celery
- ギット
- https://github.com/celery/django-celery
- PyPI
- :pypi: `django-celery`
- ドキュメント
- http://docs.celeryproject.org/en/latest/django
Flask-Celery
celerymon
carrot
ghettoq
kombu-sqlalchemy
django-kombu
pylibrabbitmq
:pypi: `librabbitmq` の古い名前。
- ギット
None
- PyPI
- :pypi: `pylibrabbitmq`
リリース手順
バージョン番号の更新
バージョン番号は、次の3か所で更新する必要があります。
celery/__init__.py
docs/include/introduction.txt
README.rst
以前のファイルへの変更は、[バンプバージョンコマンドラインツール]( https://pypi.org/project/bumpversion/)で処理できます。 対応する構成は.bumpversion.cfg
にあります。 必要な変更を行うには、次を実行します。
$ bumpversion
これらのファイルを変更した後、README
ファイルをレンダリングする必要があります。 sphinx構文を一般的なreStructuredText構文に変換するスクリプトがあり、make target readme がこれを行います。
$ make readme
次に、変更をコミットします。
$ git commit -a -m "Bumps version to X.Y.Z"
新しいバージョンタグを作成します。
$ git tag vX.Y.Z
$ git push --tags
リリース
新しいパブリック安定リリースを作成するコマンド:
$ make distcheck # checks pep8, autodoc index, runs tests and more
$ make dist # NOTE: Runs git clean -xdf and removes files not in the repo.
$ python setup.py sdist upload --sign --identity='Celery Security Team'
$ python setup.py bdist_wheel upload --sign --identity='Celery Security Team'
これが新しいリリースシリーズである場合は、次のことも行う必要があります。
- 次の場所にあるReadTheDocs管理インターフェイスに移動します。
「プロジェクトの編集」と入力します
デフォルトのブランチをこのシリーズのブランチに変更します。たとえば、2.4シリーズには
2.4
ブランチを使用します。また、「バージョン」タブで以前のバージョンを追加します。