これは、サーバーレス OpenSearch (AOSS) で使用するリクエスト署名ユーティリティのプロトタイプ実装です。 (現時点では) Cognito ユーザー ID を使用して PDS レジストリの AOSS インスタンスをクエリするための、curl のようなインターフェイスを提供することを目的としています。
将来的には追加の機能が構築される可能性があります。
レジストリ AOSS に対して認可された Cognito ユーザーの個人ユーザー/パス資格情報
Python >=3.9
環境変数 (値については開発者にお問い合わせください)
エクスポート REQUEST_SIGNER_AWS_ACCOUNT='' エクスポート REQUEST_SIGNER_AWS_REGION='' エクスポート REQUEST_SIGNER_CLIENT_ID='' エクスポート REQUEST_SIGNER_USER_POOL_ID='' エクスポート REQUEST_SIGNER_IDENTITY_POOL_ID='' エクスポート REQUEST_SIGNER_AOSS_ENDPOINT='' エクスポート REQUEST_SIGNER_COGNITO_USER='' エクスポートREQUEST_SIGNER_COGNITO_PASSWORD=''
リポジトリのクローンを作成する
git clone https://github.com/NASA-PDS/registry-client.git cd registry-client
仮想環境を作成する
python -m venv venv source ./venv/bin/activate
仮想環境にツールをインストールする
pip install --editable .[dev]
ツールを直接実行する
registry-client --help
NASA-PDS ソフトウェアのすべてのユーザーと開発者は、当社の行動規範を遵守することが期待されます。私たちのコミュニティの期待を理解するために、これをお読みください。
このプロジェクトを開発するには、お気に入りのテキスト エディター、または PyCharm などの Python をサポートする統合開発環境を使用します。
NASA-PDS コードベースに貢献する方法については、貢献ガイドラインをご覧ください。
編集可能モードで、追加の開発者依存関係を使用して、選択した仮想環境にインストールします。
pip install --editable '.[dev]'
リポジトリ内のシークレット (電子メール アドレス、パスワード、API キーなど) のベースラインを作成します。
detect-secrets scan . --all-files --disable-plugin AbsolutePathDetectorExperimental --exclude-files '.secrets..*' --exclude-files '.git.*' --exclude-files '.mypy_cache' --exclude-files '.pytest_cache' --exclude-files '.tox' --exclude-files '.venv' --exclude-files 'venv' --exclude-files 'dist' --exclude-files 'build' --exclude-files '.*.egg-info' > .secrets.baseline
シークレットを確認して、どれが許可されるべきでどれが誤検知であるかを判断します。
detect-secrets audit .secrets.baseline
一般に公開されてはいけない秘密は削除してください。その後、ベースライン ファイルをコミットに追加できます。
git add .secrets.baseline
次に、 pre-commit
フックを構成します。
pre-commit install pre-commit install -t pre-push pre-commit install -t prepare-commit-msg pre-commit install -t commit-msg
これらのフックは、シークレットを含む可能性のある今後のコミットをチェックします。また、コードの書式設定、PEP8 への準拠、タイプヒントなどもチェックします。
?注: detect-secrets
のサポートとグローバル Git 構成の両方で 1 回限りのセットアップが必要です。その方法については、Wiki の Secret のエントリを参照してください。
このパッケージの環境を分離して再作成できるようにするには、Python 仮想環境を使用する必要があります。これを行うには、次を実行します。
python -m venv venv
次に、 venv/bin/python
、 venv/bin/pip
などを排他的に使用します。
tox
がインストールされており、それによって環境を作成し、依存関係をインストールしたい場合は、次を実行します。
tox --devenv <name you'd like for env> -e dev
開発の依存関係は、 setup.cfg
のdev
extras_require
として指定されます。これらは次のように仮想環境にインストールされます。
pip install --editable '.[dev]'
すべてのソース コードはsrc
の下のサブディレクトリにあります。
setup.cfg
ファイルを次のように更新する必要があります。
モジュールの名前
ライセンス、デフォルトの Apache、必要に応じて更新
説明
ダウンロード URL。github でパッケージをリリースするときに、ここに URL を追加します
キーワード
分類子
install_requires、パッケージの依存関係を追加します
extras_require、パッケージの開発依存関係を追加します
entry_points、パッケージをコマンド ラインで呼び出すことができる場合、これはパッケージ内のスクリプトを指すコマンド ライン エントリ ポイントを展開するのに役立ちます
パッケージ化の詳細については、https://packaging.python.org/tutorials/packaging-projects/ を参考にしてください。
構成を管理するには ConfigParser パッケージを使用すると便利です。これにより、ユーザーが環境内の特定のファイルにデフォルト設定を上書きできるようになります。 https://pymotw.com/2/ConfigParser/ を参照してください。
例えば:
candidates = ['my_pds_module.ini', 'my_pds_module.ini.default'] found = parser.read(candidates)
コードの実行に関する情報をログに記録する目的でprint()
を使用しないでください。コードが実行される場所に応じて、これらの情報は特定のログ ファイルにリダイレクトされる場合があります。
これを機能させるには、各 Python ファイルを次のように開始します。
"""私のモジュール。"""インポートlogginglogger =logging.getLogger(__name__)
メッセージをログに記録するには:
logger.info("my message")
main
ルーチンには次の内容を含めます。
logging.basicConfig(level=logging.INFO)
基本的なログ システムを構成します。
テンプレート リポジトリに含まれるdev
extras_require
、 black
、 flake8
(およびいくつかのプラグイン)、およびmypy
それらすべてのデフォルト設定とともにインストールします。これらすべて (そしてそれ以上!) を次のように実行できます。
tox -e lint
コードを読みやすくするには、PEP8 スタイル ガイドに準拠する必要があります。私たちのコードスタイルは、black と flake8 を介して自動的に適用されます。 lint パイプラインの呼び出しについては、「ツール」セクションを参照してください。
❗テンプレートユーザーへの重要な注意事項❗ 付属のコミット前設定ファイルは、変更されたファイルだけでなく、 src
フォルダー全体にわたってflake8
( mypy
とともに) 実行します。既存のコード ベースをこのテンプレートに変換すると、対処できない大量のエラーが発生する可能性があります。
代わりに、 pre-commit
entry
行を変更することで、現在行われている変更の差分に対してのみflake8
実行できます。
entry: git diff -u | flake8 --diff
または、 pre-commit
設定を変更して、特定のフィルタリング基準に一致する変更されたファイルに対してのみflake8
が呼び出されるようにすることもできます。
- repo: local hooks: - id: flake8 name: flake8 entry: flake8 files: ^src/|tests/ language: system
Python にはさまざまなライブラリが用意されています。 PDS スコープでは、最新の使用法では以下を使用する必要があります。
図書館 | 使用法 |
---|---|
構成パーサー | 構成ファイルの管理と解析 |
引数解析 | コマンドライン引数のドキュメントと解析 |
リクエスト | Web APIと対話する |
lxml | XML ファイルの読み取り/書き込み |
json | JSON ファイルの読み取り/書き込み |
ピヤムル | YAML ファイルの読み取り/書き込み |
ピスターシュ | テンプレートからファイルを生成する |
これらの一部は Python 3 に組み込まれています。その他は、 requirements.txt
に含めることができるオープンソースのアドオンです。
このセクションでは、パッケージのテストについて説明します。
テストの実行、リンティング ( mypy
、 black
、 flake8
など)、およびドキュメントのビルドを含む完全な「ビルド」は、次の方法で実行されます。
tox
プロジェクトには、単体テスト、機能テスト、検証テスト、受け入れテストなどのテストが組み込まれている必要があります。
単体テストについては、Python 3 に組み込まれている Unittest モジュールを確認してください。
テスト オブジェクトは、パッケージtest
モジュール内にあるか、できればプロジェクト パッケージ構造を反映するプロジェクト 'tests' ディレクトリ内にある必要があります。
単体テストは次のコマンドで起動します。
pytest
変更を加えたときにテストを自動的に実行したい場合は、次のようにしてpytest
監視モードで起動します。
ptw
behave package
使用して、テスト結果を「testrail」にプッシュする必要があります。
https://github.com/NASA-PDS/pds-doi-service#behavioral-testing-for-integration--testing の例を参照してください。
プロジェクトでは、Sphinx を使用してドキュメントを構築する必要があります。 PDS のドキュメント テンプレートは、デフォルト ビルドの一部としてすでに構成されています。以下を使用してプロジェクトのドキュメントを構築できます。
python setup.py build_sphinx
プロジェクト ルートに相対的な次のディレクトリにあるビルド ファイルにアクセスできます。
build/sphinx/html/
pip install wheel python setup.py sdist bdist_wheel
NASA PDS パッケージは、GitHub アクションを活用して自動化された継続的インテグレーションと継続的デリバリーを実行するラウンドアップ アクションを使用して自動的に公開できます。 Roundup を含むデフォルトのワークフローは.github/workflows/unstable-cicd.yaml
ファイルで提供されます。 (ここでの不安定とは暫定リリースを意味します。)
パッケージを作成します。
python setup.py bdist_wheel
Github リリースとして公開します。
PyPI で公開します (PyPI アカウントが必要で、 $HOME/.pypirc
を構成します)。
pip install twine twine upload dist/*
または、Test PyPI で公開します (Test PyPI アカウントが必要で、 $HOME/.pypirc
を構成します)。
pip install twine twine upload --repository testpypi dist/*
テンプレート リポジトリには、 stable-cicd
とunstable-cicd
という 2 つの「標準」CI/CD ワークフローが付属しています。不安定なビルドはmain
へのプッシュで実行され (± 特定のファイルへの変更は無視されます)、安定したビルドはrelease/<release version>
形式のリリース ブランチのプッシュで実行されます。これらはどちらも、GitHub アクションのビルド ステップである Roundup を利用します。 unstable-cicd
スナップショット リリースを生成します (そして常に更新します)。正式なソフトウェア リリースを行っていない場合は、 v0.0.0-SNAPSHOT
リリースになります (詳細については、NASA-PDS/roundup-action#56 を参照してください)。