PyREUser3 0.1.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyreuser3-0.3.0/PKG-INFO +71 -0
- pyreuser3-0.3.0/PyREUser3.egg-info/PKG-INFO +71 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/PyREUser3.egg-info/SOURCES.txt +1 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/README.md +27 -2
- pyreuser3-0.3.0/docs/PYPI.md +38 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/docs/README.zh-CN.md +27 -2
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyproject.toml +2 -2
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/__init__.py +9 -16
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/__main__.py +2 -1
- pyreuser3-0.3.0/pyreuser3/api.py +464 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/cli.py +71 -12
- pyreuser3-0.3.0/pyreuser3/core.py +410 -0
- pyreuser3-0.3.0/pyreuser3/export/__init__.py +9 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/export/base.py +82 -74
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/export/enums.py +44 -31
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/export/fields.py +65 -44
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/export/metadata.py +107 -74
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/export/postprocess.py +127 -83
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/export/tree.py +102 -74
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/export/user3.py +89 -60
- pyreuser3-0.3.0/pyreuser3/pack/__init__.py +9 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/pack/base.py +115 -82
- pyreuser3-0.3.0/pyreuser3/pack/models.py +154 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/pack/plan.py +220 -158
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/pack/writer.py +104 -67
- pyreuser3-0.3.0/pyreuser3/rich_ui.py +127 -0
- pyreuser3-0.3.0/pyreuser3/schema.py +199 -0
- pyreuser3-0.3.0/pyreuser3/web/__init__.py +10 -0
- pyreuser3-0.3.0/pyreuser3/web/__main__.py +9 -0
- pyreuser3-0.3.0/pyreuser3/web/handler.py +208 -0
- pyreuser3-0.3.0/pyreuser3/web/jobs.py +271 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/pyreuser3/web/page.py +155 -31
- pyreuser3-0.3.0/pyreuser3/web/picker.py +94 -0
- pyreuser3-0.3.0/pyreuser3/web/runners.py +267 -0
- pyreuser3-0.3.0/pyreuser3/web/server.py +102 -0
- pyreuser3-0.3.0/pyreuser3/web/settings.py +45 -0
- pyreuser3-0.1.0/PKG-INFO +0 -165
- pyreuser3-0.1.0/PyREUser3.egg-info/PKG-INFO +0 -165
- pyreuser3-0.1.0/pyreuser3/api.py +0 -410
- pyreuser3-0.1.0/pyreuser3/core.py +0 -358
- pyreuser3-0.1.0/pyreuser3/export/__init__.py +0 -11
- pyreuser3-0.1.0/pyreuser3/pack/__init__.py +0 -10
- pyreuser3-0.1.0/pyreuser3/pack/models.py +0 -140
- pyreuser3-0.1.0/pyreuser3/rich_ui.py +0 -126
- pyreuser3-0.1.0/pyreuser3/schema.py +0 -193
- pyreuser3-0.1.0/pyreuser3/web/__init__.py +0 -6
- pyreuser3-0.1.0/pyreuser3/web/__main__.py +0 -6
- pyreuser3-0.1.0/pyreuser3/web/handler.py +0 -178
- pyreuser3-0.1.0/pyreuser3/web/jobs.py +0 -243
- pyreuser3-0.1.0/pyreuser3/web/picker.py +0 -92
- pyreuser3-0.1.0/pyreuser3/web/runners.py +0 -238
- pyreuser3-0.1.0/pyreuser3/web/server.py +0 -104
- pyreuser3-0.1.0/pyreuser3/web/settings.py +0 -42
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/LICENSE +0 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/MANIFEST.in +0 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/PyREUser3.egg-info/dependency_links.txt +0 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/PyREUser3.egg-info/entry_points.txt +0 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/PyREUser3.egg-info/requires.txt +0 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/PyREUser3.egg-info/top_level.txt +0 -0
- {pyreuser3-0.1.0 → pyreuser3-0.3.0}/setup.cfg +0 -0
pyreuser3-0.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyREUser3
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Pure Python tools for converting RE Engine .user.3 files to and from JSON.
|
|
5
|
+
Author: Egg Targaryen
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/dzxrly/PyREUser3
|
|
8
|
+
Project-URL: Repository, https://github.com/dzxrly/PyREUser3
|
|
9
|
+
Project-URL: Issues, https://github.com/dzxrly/PyREUser3/issues
|
|
10
|
+
Keywords: RE Engine,user.3,JSON,modding,RSZ
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: File Formats
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Classifier: Topic :: Utilities
|
|
25
|
+
Requires-Python: >=3.9
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Requires-Dist: rich>=13.0
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
31
|
+
Requires-Dist: twine>=5.0; extra == "dev"
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# PyREUser3
|
|
35
|
+
|
|
36
|
+
PyREUser3 is a pure Python package for converting RE Engine `.user.3` database files to JSON and packing compatible JSON back to `.user.3`.
|
|
37
|
+
|
|
38
|
+
## Installation
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install pyreuser3
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## What Is Included
|
|
45
|
+
|
|
46
|
+
- `.user.3 -> JSON` export.
|
|
47
|
+
- `JSON -> .user.3` packing.
|
|
48
|
+
- A reusable Python API through `REUser3Converter`.
|
|
49
|
+
- CLI commands through `pyreuser3`.
|
|
50
|
+
- A local `.user.3` export Web UI through `pyreuser3-web`.
|
|
51
|
+
|
|
52
|
+
The published package intentionally does not include game resources, dumped game data, RE_RSZ templates, `il2cpp_dump.json`, `.msg.23` conversion tools, or repository-specific helper scripts. You need to provide data files that match the target game and version.
|
|
53
|
+
|
|
54
|
+
## Requirements
|
|
55
|
+
|
|
56
|
+
- Python 3.9 or newer.
|
|
57
|
+
- A RE_RSZ schema JSON file for the target game/version.
|
|
58
|
+
- An `il2cpp_dump.json` file when exporting readable enum labels.
|
|
59
|
+
- One or more unpacked `.user.3` files.
|
|
60
|
+
|
|
61
|
+
## Usage
|
|
62
|
+
|
|
63
|
+
Usage details may change as the package evolves. For the latest command-line and Python API examples, read the GitHub README:
|
|
64
|
+
|
|
65
|
+
https://github.com/dzxrly/PyREUser3#readme
|
|
66
|
+
|
|
67
|
+
## Links
|
|
68
|
+
|
|
69
|
+
- Homepage: https://github.com/dzxrly/PyREUser3
|
|
70
|
+
- Issues: https://github.com/dzxrly/PyREUser3/issues
|
|
71
|
+
- License: MIT License
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyREUser3
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Pure Python tools for converting RE Engine .user.3 files to and from JSON.
|
|
5
|
+
Author: Egg Targaryen
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/dzxrly/PyREUser3
|
|
8
|
+
Project-URL: Repository, https://github.com/dzxrly/PyREUser3
|
|
9
|
+
Project-URL: Issues, https://github.com/dzxrly/PyREUser3/issues
|
|
10
|
+
Keywords: RE Engine,user.3,JSON,modding,RSZ
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: File Formats
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Classifier: Topic :: Utilities
|
|
25
|
+
Requires-Python: >=3.9
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Requires-Dist: rich>=13.0
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
31
|
+
Requires-Dist: twine>=5.0; extra == "dev"
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# PyREUser3
|
|
35
|
+
|
|
36
|
+
PyREUser3 is a pure Python package for converting RE Engine `.user.3` database files to JSON and packing compatible JSON back to `.user.3`.
|
|
37
|
+
|
|
38
|
+
## Installation
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install pyreuser3
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## What Is Included
|
|
45
|
+
|
|
46
|
+
- `.user.3 -> JSON` export.
|
|
47
|
+
- `JSON -> .user.3` packing.
|
|
48
|
+
- A reusable Python API through `REUser3Converter`.
|
|
49
|
+
- CLI commands through `pyreuser3`.
|
|
50
|
+
- A local `.user.3` export Web UI through `pyreuser3-web`.
|
|
51
|
+
|
|
52
|
+
The published package intentionally does not include game resources, dumped game data, RE_RSZ templates, `il2cpp_dump.json`, `.msg.23` conversion tools, or repository-specific helper scripts. You need to provide data files that match the target game and version.
|
|
53
|
+
|
|
54
|
+
## Requirements
|
|
55
|
+
|
|
56
|
+
- Python 3.9 or newer.
|
|
57
|
+
- A RE_RSZ schema JSON file for the target game/version.
|
|
58
|
+
- An `il2cpp_dump.json` file when exporting readable enum labels.
|
|
59
|
+
- One or more unpacked `.user.3` files.
|
|
60
|
+
|
|
61
|
+
## Usage
|
|
62
|
+
|
|
63
|
+
Usage details may change as the package evolves. For the latest command-line and Python API examples, read the GitHub README:
|
|
64
|
+
|
|
65
|
+
https://github.com/dzxrly/PyREUser3#readme
|
|
66
|
+
|
|
67
|
+
## Links
|
|
68
|
+
|
|
69
|
+
- Homepage: https://github.com/dzxrly/PyREUser3
|
|
70
|
+
- Issues: https://github.com/dzxrly/PyREUser3/issues
|
|
71
|
+
- License: MIT License
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
<h1 align="center">PyREUser3</h1>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
English | <a href="https://github.com/dzxrly/PyREUser3/blob/main/docs/README.zh-CN.md">简体中文</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://pypi.org/project/PyREUser3/"><img alt="PyPI Project" src="https://img.shields.io/badge/PyPI-PyREUser3-blue"></a>
|
|
9
|
+
<a href="https://pypi.org/project/PyREUser3/"><img alt="PyPI Version" src="https://img.shields.io/pypi/v/PyREUser3"></a>
|
|
10
|
+
<a href="https://pepy.tech/project/PyREUser3"><img alt="Downloads" src="https://static.pepy.tech/badge/PyREUser3"></a>
|
|
11
|
+
<a href="https://github.com/dzxrly/PyREUser3/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/pypi/l/PyREUser3"></a>
|
|
12
|
+
</p>
|
|
4
13
|
|
|
5
14
|
PyREUser3 is a pure Python package for converting RE Engine `.user.3` database files to JSON and packing compatible JSON back to `.user.3`.
|
|
6
15
|
|
|
@@ -86,6 +95,22 @@ converter.pack_file(
|
|
|
86
95
|
)
|
|
87
96
|
```
|
|
88
97
|
|
|
98
|
+
Convert a `.user.3` file to an in-memory JSON-compatible Python object without writing a JSON file:
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
readable_data = converter.user3_to_json(
|
|
102
|
+
"input/OtomonData.user.3",
|
|
103
|
+
json_format="readable",
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
repack_data = converter.user3_to_json(
|
|
107
|
+
"input/OtomonData.user.3",
|
|
108
|
+
json_format="repack",
|
|
109
|
+
)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Use `json_format="readable"` for the same shape produced by `export_file()`, or `json_format="repack"` for the full instance-table document accepted by `pack()`.
|
|
113
|
+
|
|
89
114
|
For stable patch-and-repack workflows, use `patch_file()` or `parse_pack_file()`:
|
|
90
115
|
|
|
91
116
|
```python
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# PyREUser3
|
|
2
|
+
|
|
3
|
+
PyREUser3 is a pure Python package for converting RE Engine `.user.3` database files to JSON and packing compatible JSON back to `.user.3`.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install pyreuser3
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## What Is Included
|
|
12
|
+
|
|
13
|
+
- `.user.3 -> JSON` export.
|
|
14
|
+
- `JSON -> .user.3` packing.
|
|
15
|
+
- A reusable Python API through `REUser3Converter`.
|
|
16
|
+
- CLI commands through `pyreuser3`.
|
|
17
|
+
- A local `.user.3` export Web UI through `pyreuser3-web`.
|
|
18
|
+
|
|
19
|
+
The published package intentionally does not include game resources, dumped game data, RE_RSZ templates, `il2cpp_dump.json`, `.msg.23` conversion tools, or repository-specific helper scripts. You need to provide data files that match the target game and version.
|
|
20
|
+
|
|
21
|
+
## Requirements
|
|
22
|
+
|
|
23
|
+
- Python 3.9 or newer.
|
|
24
|
+
- A RE_RSZ schema JSON file for the target game/version.
|
|
25
|
+
- An `il2cpp_dump.json` file when exporting readable enum labels.
|
|
26
|
+
- One or more unpacked `.user.3` files.
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
Usage details may change as the package evolves. For the latest command-line and Python API examples, read the GitHub README:
|
|
31
|
+
|
|
32
|
+
https://github.com/dzxrly/PyREUser3#readme
|
|
33
|
+
|
|
34
|
+
## Links
|
|
35
|
+
|
|
36
|
+
- Homepage: https://github.com/dzxrly/PyREUser3
|
|
37
|
+
- Issues: https://github.com/dzxrly/PyREUser3/issues
|
|
38
|
+
- License: MIT License
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
<h1 align="center">PyREUser3</h1>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://github.com/dzxrly/PyREUser3/blob/main/README.md">English</a> | 简体中文
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://pypi.org/project/PyREUser3/"><img alt="PyPI 项目" src="https://img.shields.io/badge/PyPI-PyREUser3-blue"></a>
|
|
9
|
+
<a href="https://pypi.org/project/PyREUser3/"><img alt="PyPI 版本" src="https://img.shields.io/pypi/v/PyREUser3"></a>
|
|
10
|
+
<a href="https://pepy.tech/project/PyREUser3"><img alt="下载量" src="https://static.pepy.tech/badge/PyREUser3"></a>
|
|
11
|
+
<a href="https://github.com/dzxrly/PyREUser3/blob/main/LICENSE"><img alt="许可证" src="https://img.shields.io/pypi/l/PyREUser3"></a>
|
|
12
|
+
</p>
|
|
4
13
|
|
|
5
14
|
PyREUser3 是一个纯 Python 包,用于在 RE Engine 的 `.user.3` 数据库文件和 JSON 之间进行双向转换。
|
|
6
15
|
|
|
@@ -115,6 +124,22 @@ converter.pack_file(
|
|
|
115
124
|
)
|
|
116
125
|
```
|
|
117
126
|
|
|
127
|
+
不写入 JSON 文件,直接把 `.user.3` 转成内存中的 JSON 兼容 Python 对象:
|
|
128
|
+
|
|
129
|
+
```python
|
|
130
|
+
readable_data = converter.user3_to_json(
|
|
131
|
+
"input/OtomonData.user.3",
|
|
132
|
+
json_format="readable",
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
repack_data = converter.user3_to_json(
|
|
136
|
+
"input/OtomonData.user.3",
|
|
137
|
+
json_format="repack",
|
|
138
|
+
)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
使用 `json_format="readable"` 时返回与 `export_file()` 一致的可读导出结构;使用 `json_format="repack"` 时返回可传给 `pack()` 的完整实例表结构。
|
|
142
|
+
|
|
118
143
|
批量处理目录:
|
|
119
144
|
|
|
120
145
|
```python
|
|
@@ -4,9 +4,9 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "PyREUser3"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.0"
|
|
8
8
|
description = "Pure Python tools for converting RE Engine .user.3 files to and from JSON."
|
|
9
|
-
readme = "
|
|
9
|
+
readme = "docs/PYPI.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
11
11
|
license = "MIT"
|
|
12
12
|
license-files = ["LICENSE"]
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Expose the stable public API while keeping expensive converter modules lazy.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
不需要提前加载完整导出器或封包器。
|
|
3
|
+
The package-level __getattr__ hook avoids importing Rich and binary conversion code for
|
|
4
|
+
lightweight operations such as version checks and Web UI help output.
|
|
6
5
|
"""
|
|
7
6
|
|
|
8
7
|
from __future__ import annotations
|
|
@@ -40,25 +39,19 @@ _EXPORT_MODULES = {
|
|
|
40
39
|
|
|
41
40
|
|
|
42
41
|
def __getattr__(name: str) -> Any:
|
|
43
|
-
"""
|
|
42
|
+
"""Resolve a lazily exported package attribute on first access.
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
Args:
|
|
45
|
+
name (str): Symbolic schema, class, field, or enum name being stored or looked up.
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
返回:
|
|
52
|
-
Any: 解析并缓存后的目标对象(类、函数或常量)。
|
|
53
|
-
|
|
54
|
-
异常:
|
|
55
|
-
AttributeError: 当 ``name`` 不在惰性导出表 ``_EXPORT_MODULES`` 中时抛出。
|
|
47
|
+
Returns:
|
|
48
|
+
Any: Normalized value ready for the next parse, export, post-processing, or pack step.
|
|
56
49
|
"""
|
|
57
50
|
module_name = _EXPORT_MODULES.get(name)
|
|
58
51
|
if module_name is None:
|
|
59
52
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
60
53
|
|
|
61
|
-
#
|
|
54
|
+
# Cache the resolved object in globals so later attribute access bypasses __getattr__ and avoids another import.
|
|
62
55
|
module = import_module(module_name, __name__)
|
|
63
56
|
value = getattr(module, name)
|
|
64
57
|
globals()[name] = value
|