下载Advent of Code的谜题输入并合成PyTest固件
项目描述
pytest-aoc
这个pytest插件可以下载Advent of Code的谜题输入,并在测试中使用这些固件。
这会DDoS adventofcode.com网站吗?
此插件会尽力避免除非绝对必要才访问adventofcode.com网站。当测试会话开始时,根据系统时钟计算应该可用的谜题输入。对于每个应该可用的输入(GMT 05:00:00之后),如果在磁盘上找不到相应的文本文件,则会下载并保存,如果HTTP状态码是200 OK。
应将个人下载的谜题输入提交到源代码控制,这样pytest就不需要在其他环境中运行测试时调用adventofcode.com API。
1.22.0版本新功能:在击中服务器后,代码还会暂停(默认为2.5秒)。如果您有排行榜的愿望,可以禁用此功能,但说实话,您有时间在这个时候练习TDD吗?
安装和配置
安装很简单: python -m pip install pytest-aoc
。接下来,您需要配置两件事:插件应下载输入的事件(年份)以及有效的会话cookie。这些通常有效大约一个月左右。
要设置年份,将其放入 setup.cfg
[tool:pytest]
aoc_year = 2018
更好的方法是放弃使用setup.cfg
,改用pyproject.toml
[tool.pytest.ini_options]
aoc_year = 2023
然后,将有效的会话ID放在名为.cookie
的文件中,并在你的.gitignore
中命名此文件。
有了这两样东西,当运行pytest时,此插件将下载任何缺失的输入,并生成你可以在测试函数中使用的基本测试桩,请参见下面的'使用'和'测试桩'。
使用
在正确配置此插件的情况下,你可以编写如下测试
def test_01a(day01_numbers):
assert sum(day01_numbers) == 123
在这里,参数day01_numbers
是一个包含input/day01.txt
文件中每行数字的测试桩。
测试桩
这些测试桩是针对每个可用的日子合成的。它们不会在你请求测试时执行。
测试桩 | 示例 | 帮助 |
---|---|---|
dayNN_text |
"eggs" |
输入文件中的文本,但去除了任何前导和尾随空格。 |
dayNN_raw |
"eggs\n" |
输入文件中的原始文本。 |
dayNN_lines |
["spam", "eggs", "albatross"] |
一个去除了前导和尾随空格的行列表。 |
dayNN_numbers |
[1, 1, 2, 3, 5, 8] |
一个数字列表。 |
dayNN_number |
5 |
一个单独的数字。 |
dayNN_grid |
[[ "spam", "eggs" ], [ "ham", "albatross" ]] |
一个代表文本值网格的列表。 |
dayNN_number_grid |
[[8, 1, 6], [3, 5, 7], [4, 9, 2]] |
一个代表数字网格的列表。 |
命令行和配置选项
您可以从命令行传递选项或将它们设置在setup.cfg中。命令行优先。
命令行标志 | 配置文件选项 | 帮助 |
---|---|---|
--aoc-year |
aoc_year |
下载谜题输入的年份。(必填) |
--aoc-session-id |
- | 用于请求谜题输入的会话ID。此选项没有等效的setup.cfg密钥;这是一个安全特性。(可选) |
--aoc-session-file |
aoc_session_file |
从中读取会话ID的文件。(可选;默认.cookie ) |
--aoc-input-dir |
aoc_input_dir |
存储输入的目录。如果不存在,将创建它。(可选;默认input ) |
--aoc_sleep_time |
aoc_sleep_time |
下载谜题输入后的休眠时间,设置为0以跳过休眠。(可选;默认2.5 ) |
开发/测试
使用. .envrc
或通过使用direnv allow
自动加载来设置环境变量。
创建一个名为env
的虚拟环境,并安装此包的所有额外开发依赖项的可编辑版本
python -m venv env
python -m pip install -U -e .[dev,test]
直接运行测试,以测试当前Python版本,或通过tox测试多个Python版本
python -m pytest
python -m tox run
发布
程序如下
- 设置一个git标签,让setuptools-scm从中派生版本
- 使用build来打包sdist和wheel
- 使用twine将sdist和wheel上传到PyPI
- 使用gitlab-cli在Gitlab上创建一个发布
标记发布提交
(可选)标记发布版本(或它将是下一个版本中的开发版本,由setuptools-scm
派生),其中x.y.z
是版本
git tag -a x.y.z
...或者甚至使用bash历史记录来引用当前命令的第三个参数(:3
)
git tag -a x.y.z -m !#:3
但是:最好在这里编写发布说明,因此不要在实际的非rc发布中使用-m
。
检查版本是否合理
python -m setuptools_scm
构建包文件
将sdist和wheel烘焙到一个干净的dist
目录中
rm -f dist/*
python -m build
上传到PyPI
将文件上传到PyPI
python -m twine upload dist/*
(我尝试了--sign
选项一次,收到PyPI的邮件说PyPI不支持GPG签名,现在我正在重新考虑一些非常近期的选择。该死,我几十年都没有需要PGP密钥,难道我不能继续不用吗?)
在Gitlab上创建发布
将商品上传到Gitlab,其中再次x.y.z
是版本
git push gitlab main --tags
glab release create x.y.z dist/*.{tar.gz,whl}
项目详情
下载文件
下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
pytest-aoc-1.23.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 78f5d5a57f9864c9b26c48fc98cd03eae4774c7fbdec5952728b9b53cb62224a |
|
MD5 | 98c7c9f0dadba3e4d7c6139108153cd5 |
|
BLAKE2b-256 | 87e92e4463ef0392a714e15a70f1ba426cbfcdc216b5626ff67145215e3f5d22 |
pytest_aoc-1.23.4-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2e451d8967dd49dde944d7698ba2737e79778222a9a979c57b70f2f797848b23 |
|
MD5 | e5f404a382b86b6be258ef6b3e742e94 |
|
BLAKE2b-256 | e5b5fbe67b21f87882037cab7fd2cb834013b2b4f57f90235610962e51f333fb |