跳转到主要内容

下载Advent of Code的谜题输入并合成PyTest固件

项目描述

pytest-aoc

这个pytest插件可以下载Advent of Code的谜题输入,并在测试中使用这些固件。

PyPI PyPI - Python Version PyPI - Implementation GitLab issues by-label Static Badge PyPI - License

这会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 (8.3 kB 查看哈希值)

上传时间

构建分发

pytest_aoc-1.23.4-py3-none-any.whl (7.2 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面