What is This#
这个库是一个用 Python 对象来描述 World of Warcraft 账户的库. 它允许你将账户信息保存在一个 YAML 格式的文件中, 然后用 Python 来将数据读到内存中, 最后自动创建一个 enum 的脚本, 里面有着对所有的 Account, Realm, Character 的引用, 使得你在其他模块中可以方便的利用 IDE 的自动补全对其进行引用.
下面这是一个 YAML 文件的例子. 里面定义了 2 个 Account, 2 个 Realm, 一共 8 个 Character.
tests/dataset.yml
1acc1:
2 realm1:
3 - char111
4 - char112
5 realm2:
6 - char121
7 - char122
8acc2:
9 realm1:
10 - char211
11 - char212
12 realm2:
13 - char221
14 - char222
下面这个模块可以将上面的 YAML 文件读取到内存中. 作为模块使用, if __name__ == "__main__": 以外的代码可以被 import. 作为脚本使用, 它能生成一个 enum 的模块.
tests/dataset.py
1# -*- coding: utf-8 -*-
2
3from pathlib import Path
4from wow_acc.api import Dataset
5
6dir_here = Path(__file__).absolute().parent
7ds = Dataset.from_yaml(dir_here.joinpath("dataset.yml"))
8
9if __name__ == "__main__":
10 path = dir_here.joinpath("constants.py")
11 content = ds.to_module(
12 import_line="from dataset import ds",
13 )
14 path.write_text(content)
下面就是生成的 enum 模块. 你可以在其他模块中引用这个模块, 然后使用 IDE 的自动补全来引用其中的 Account, Realm, Character. 并且每当你修改了 YAML 文件后, 你可以轻松地重新生成这个 enum 模块.
tests/constants.py
1# -*- coding: utf-8 -*-
2
3from dataset import ds
4
5
6# fmt: off
7class AccountEnum:
8 acc1 = ds.accounts["acc1"]
9 acc2 = ds.accounts["acc2"]
10
11
12class RealmEnum:
13 acc1_realm1 = ds.accounts["acc1"].realms_mapper["realm1"]
14 acc1_realm2 = ds.accounts["acc1"].realms_mapper["realm2"]
15 acc2_realm1 = ds.accounts["acc2"].realms_mapper["realm1"]
16 acc2_realm2 = ds.accounts["acc2"].realms_mapper["realm2"]
17
18
19class CharacterEnum:
20 acc1_realm1_char111 = ds.accounts["acc1"].realms_mapper["realm1"].characters_mapper["char111"]
21 acc1_realm1_char112 = ds.accounts["acc1"].realms_mapper["realm1"].characters_mapper["char112"]
22 acc1_realm2_char121 = ds.accounts["acc1"].realms_mapper["realm2"].characters_mapper["char121"]
23 acc1_realm2_char122 = ds.accounts["acc1"].realms_mapper["realm2"].characters_mapper["char122"]
24 acc2_realm1_char211 = ds.accounts["acc2"].realms_mapper["realm1"].characters_mapper["char211"]
25 acc2_realm1_char212 = ds.accounts["acc2"].realms_mapper["realm1"].characters_mapper["char212"]
26 acc2_realm2_char221 = ds.accounts["acc2"].realms_mapper["realm2"].characters_mapper["char221"]
27 acc2_realm2_char222 = ds.accounts["acc2"].realms_mapper["realm2"].characters_mapper["char222"]
28# fmt: on