这是与无服务器 OpenSearch (AOSS) 一起使用的请求签名实用程序的原型实现。 它(目前)旨在提供一个类似curl的界面,用于使用Cognito用户身份查询PDS注册表的AOSS实例。
未来可能会构建额外的功能。
获得注册 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 软件的所有用户和开发人员都应遵守我们的行为准则。请阅读本文以确保您了解我们社区的期望。
要开发此项目,请使用您最喜欢的文本编辑器或支持 Python 的集成开发环境,例如 PyCharm。
有关如何为 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 配置。请参阅有关 Secrets 的 wiki 条目以了解操作方法。
为了隔离并能够重新生成此包的环境,您应该使用 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 文件:
"""我的模块。"""importlogginglogger =logging.getLogger(__name__)
要记录消息:
logger.info("my message")
在您的main
例程中,包括:
logging.basicConfig(level=logging.INFO)
配置基本的日志系统。
模板存储库中包含的dev
extras_require
安装black
、 flake8
(以及一些插件)和mypy
以及所有这些的默认配置。您可以使用以下命令运行所有这些(以及更多!):
tox -e lint
为了使您的代码具有可读性,您应该遵守 PEP8 风格指南。我们的代码风格在 via black 和 flake8 中自动强制执行。有关调用 linting 管道的信息,请参阅工具部分。
❗模板用户的重要注意事项❗ 包含的预提交配置文件在整个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 范围内,对于当前的用法,我们应该使用:
图书馆 | 用法 |
---|---|
配置解析器 | 管理和解析配置文件 |
arg解析 | 命令行参数文档和解析 |
要求 | 与 Web API 交互 |
lxml | 读/写 XML 文件 |
json | 读/写 JSON 文件 |
皮亚姆尔 | 读/写 YAML 文件 |
pystache | 从模板生成文件 |
其中一些内置于 Python 3 中;其他是开源插件,您可以将其包含在您的requirements.txt
中。
本节介绍对您的包的测试。
完整的“构建”,包括测试执行、linting( 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 包可以使用 Roundup Action 自动发布,它利用 GitHub Actions 执行自动化的持续集成和持续交付。 .github/workflows/unstable-cicd.yaml
文件中提供了包含 Roundup 的默认工作流程。 (此处不稳定指的是临时版本。)
创建包:
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/*
模板存储库附带我们的两个“标准”CI/CD 工作流程, stable-cicd
和unstable-cicd
。不稳定的构建在任何对main
的推送上运行(±忽略对特定文件的更改),而稳定的构建在推送形式为release/<release version>
的发布分支时运行。这两者都利用了我们的 GitHub 操作构建步骤 Roundup。 unstable-cicd
将生成(并不断更新)快照版本。如果您尚未发布正式的软件版本,您最终将获得v0.0.0-SNAPSHOT
版本(有关详细信息,请参阅 NASA-PDS/roundup-action#56)。