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