python-hwpx 2.8.2__tar.gz → 2.8.3__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.
- {python_hwpx-2.8.2/src/python_hwpx.egg-info → python_hwpx-2.8.3}/PKG-INFO +9 -39
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/README.md +6 -4
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/pyproject.toml +5 -4
- {python_hwpx-2.8.2 → python_hwpx-2.8.3/src/python_hwpx.egg-info}/PKG-INFO +9 -39
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/python_hwpx.egg-info/SOURCES.txt +1 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/python_hwpx.egg-info/requires.txt +1 -0
- python_hwpx-2.8.3/tests/test_packaging_license_metadata.py +63 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/LICENSE +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/setup.cfg +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/__init__.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/data/Skeleton.hwpx +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/document.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/opc/package.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/opc/relationships.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/opc/xml_utils.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/__init__.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/body.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/common.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/document.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/header.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/header_part.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/memo.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/namespaces.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/paragraph.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/parser.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/schema.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/section.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/table.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/oxml/utils.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/package.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/py.typed +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/templates.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/__init__.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/_schemas/header.xsd +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/_schemas/section.xsd +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/archive_cli.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/exporter.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/object_finder.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/package_validator.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/page_guard.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/template_analyzer.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/text_extract_cli.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/text_extractor.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/hwpx/tools/validator.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/python_hwpx.egg-info/dependency_links.txt +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/python_hwpx.egg-info/entry_points.txt +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/src/python_hwpx.egg-info/top_level.txt +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_coverage_targets.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_document_context_manager.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_document_formatting.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_document_save_api.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_gap_closure_tools.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_inline_models.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_integration_hwpx_compatibility.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_integration_roundtrip.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_memo_and_style_editing.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_new_features.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_opc_package.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_oxml_parsing.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_packaging_py_typed.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_paragraph_section_management.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_repr_snapshots.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_section_headers.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_split_merged_cell.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_tables_default_border.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_text_extractor_annotations.py +0 -0
- {python_hwpx-2.8.2 → python_hwpx-2.8.3}/tests/test_version_metadata.py +0 -0
|
@@ -1,48 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-hwpx
|
|
3
|
-
Version: 2.8.
|
|
3
|
+
Version: 2.8.3
|
|
4
4
|
Summary: Hancom HWPX 패키지를 로드하고 편집하기 위한 Python 유틸리티 모음
|
|
5
5
|
Author: python-hwpx Maintainers
|
|
6
|
-
License:
|
|
7
|
-
|
|
8
|
-
Copyright (c) 2024 python-hwpx Maintainers
|
|
9
|
-
|
|
10
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
-
of this software and associated documentation files (the "Software"), to use,
|
|
12
|
-
copy, modify, merge, publish, distribute, and sublicense the Software only for
|
|
13
|
-
non-commercial purposes, subject to the following conditions:
|
|
14
|
-
|
|
15
|
-
1. Non-Commercial Use Only. The Software may be used, copied, modified,
|
|
16
|
-
merged, published, distributed, and sublicensed only for non-commercial
|
|
17
|
-
purposes. "Non-Commercial" means use that is not primarily intended for or
|
|
18
|
-
directed toward commercial advantage, monetary compensation, or any form of
|
|
19
|
-
direct or indirect commercial exploitation.
|
|
20
|
-
|
|
21
|
-
2. Attribution. The above copyright notice and this permission notice shall be
|
|
22
|
-
included in all copies or substantial portions of the Software.
|
|
23
|
-
|
|
24
|
-
3. No Warranty of Commercial Support. The maintainers are not obligated to
|
|
25
|
-
provide commercial support, maintenance, or updates.
|
|
26
|
-
|
|
27
|
-
THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
-
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
-
SOFTWARE.
|
|
34
|
-
|
|
35
|
-
If you require permissions to use this Software for commercial purposes,
|
|
36
|
-
please contact the copyright holders to negotiate an alternative licensing
|
|
37
|
-
arrangement.
|
|
38
|
-
|
|
6
|
+
License-Expression: LicenseRef-python-hwpx-NonCommercial
|
|
39
7
|
Project-URL: Homepage, https://github.com/airmang/python-hwpx
|
|
40
8
|
Project-URL: Documentation, https://github.com/airmang/python-hwpx/tree/main/docs
|
|
41
9
|
Project-URL: Issues, https://github.com/airmang/python-hwpx/issues
|
|
42
10
|
Keywords: hwp,hwpx,hancom,opc,xml
|
|
43
11
|
Classifier: Development Status :: 3 - Alpha
|
|
44
12
|
Classifier: Intended Audience :: Developers
|
|
45
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
46
13
|
Classifier: Programming Language :: Python :: 3
|
|
47
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
48
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -58,6 +25,7 @@ Requires-Dist: build>=1.0; extra == "dev"
|
|
|
58
25
|
Requires-Dist: twine>=4.0; extra == "dev"
|
|
59
26
|
Requires-Dist: pytest>=7.4; extra == "dev"
|
|
60
27
|
Provides-Extra: test
|
|
28
|
+
Requires-Dist: build>=1.0; extra == "test"
|
|
61
29
|
Requires-Dist: pytest>=7.4; extra == "test"
|
|
62
30
|
Requires-Dist: pytest-cov>=5.0; extra == "test"
|
|
63
31
|
Provides-Extra: typecheck
|
|
@@ -73,7 +41,7 @@ Dynamic: license-file
|
|
|
73
41
|
<p align="center">
|
|
74
42
|
<a href="https://pypi.org/project/python-hwpx/"><img src="https://img.shields.io/pypi/v/python-hwpx?color=blue&label=PyPI" alt="PyPI"></a>
|
|
75
43
|
<a href="https://pypi.org/project/python-hwpx/"><img src="https://img.shields.io/pypi/pyversions/python-hwpx" alt="Python"></a>
|
|
76
|
-
<a href="https://github.com/airmang/python-hwpx/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-
|
|
44
|
+
<a href="https://github.com/airmang/python-hwpx/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Custom%20Noncommercial-orange" alt="License: Custom Non-Commercial"></a>
|
|
77
45
|
<a href="https://airmang.github.io/python-hwpx/"><img src="https://img.shields.io/badge/docs-Sphinx-8CA1AF" alt="Docs"></a>
|
|
78
46
|
</p>
|
|
79
47
|
</p>
|
|
@@ -353,13 +321,15 @@ pytest
|
|
|
353
321
|
|
|
354
322
|
## License
|
|
355
323
|
|
|
356
|
-
[
|
|
324
|
+
[Custom Non-Commercial License](LICENSE) © python-hwpx Maintainers
|
|
325
|
+
|
|
326
|
+
Commercial use requires separate permission from the copyright holders.
|
|
357
327
|
|
|
358
328
|
<br>
|
|
359
329
|
|
|
360
|
-
##
|
|
330
|
+
## Maintainer
|
|
361
331
|
|
|
362
|
-
**고규현** — 광교고등학교 정보·컴퓨터 교사
|
|
332
|
+
Primary maintainer/contact: **고규현** — 광교고등학교 정보·컴퓨터 교사
|
|
363
333
|
|
|
364
334
|
- ✉️ [kokyuhyun@hotmail.com](mailto:kokyuhyun@hotmail.com)
|
|
365
335
|
- 🐙 [@airmang](https://github.com/airmang)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<p align="center">
|
|
7
7
|
<a href="https://pypi.org/project/python-hwpx/"><img src="https://img.shields.io/pypi/v/python-hwpx?color=blue&label=PyPI" alt="PyPI"></a>
|
|
8
8
|
<a href="https://pypi.org/project/python-hwpx/"><img src="https://img.shields.io/pypi/pyversions/python-hwpx" alt="Python"></a>
|
|
9
|
-
<a href="https://github.com/airmang/python-hwpx/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-
|
|
9
|
+
<a href="https://github.com/airmang/python-hwpx/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Custom%20Noncommercial-orange" alt="License: Custom Non-Commercial"></a>
|
|
10
10
|
<a href="https://airmang.github.io/python-hwpx/"><img src="https://img.shields.io/badge/docs-Sphinx-8CA1AF" alt="Docs"></a>
|
|
11
11
|
</p>
|
|
12
12
|
</p>
|
|
@@ -286,13 +286,15 @@ pytest
|
|
|
286
286
|
|
|
287
287
|
## License
|
|
288
288
|
|
|
289
|
-
[
|
|
289
|
+
[Custom Non-Commercial License](LICENSE) © python-hwpx Maintainers
|
|
290
|
+
|
|
291
|
+
Commercial use requires separate permission from the copyright holders.
|
|
290
292
|
|
|
291
293
|
<br>
|
|
292
294
|
|
|
293
|
-
##
|
|
295
|
+
## Maintainer
|
|
294
296
|
|
|
295
|
-
**고규현** — 광교고등학교 정보·컴퓨터 교사
|
|
297
|
+
Primary maintainer/contact: **고규현** — 광교고등학교 정보·컴퓨터 교사
|
|
296
298
|
|
|
297
299
|
- ✉️ [kokyuhyun@hotmail.com](mailto:kokyuhyun@hotmail.com)
|
|
298
300
|
- 🐙 [@airmang](https://github.com/airmang)
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["setuptools", "wheel"]
|
|
2
|
+
requires = ["setuptools>=77.0.0", "wheel"]
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-hwpx"
|
|
7
|
-
version = "2.8.
|
|
7
|
+
version = "2.8.3"
|
|
8
8
|
description = "Hancom HWPX 패키지를 로드하고 편집하기 위한 Python 유틸리티 모음"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
|
-
license =
|
|
10
|
+
license = "LicenseRef-python-hwpx-NonCommercial"
|
|
11
|
+
license-files = ["LICENSE"]
|
|
11
12
|
requires-python = ">=3.10"
|
|
12
13
|
authors = [
|
|
13
14
|
{ name = "python-hwpx Maintainers" },
|
|
@@ -16,7 +17,6 @@ keywords = ["hwp", "hwpx", "hancom", "opc", "xml"]
|
|
|
16
17
|
classifiers = [
|
|
17
18
|
"Development Status :: 3 - Alpha",
|
|
18
19
|
"Intended Audience :: Developers",
|
|
19
|
-
"License :: OSI Approved :: MIT License",
|
|
20
20
|
"Programming Language :: Python :: 3",
|
|
21
21
|
"Programming Language :: Python :: 3.10",
|
|
22
22
|
"Programming Language :: Python :: 3.11",
|
|
@@ -35,6 +35,7 @@ dev = [
|
|
|
35
35
|
"pytest>=7.4",
|
|
36
36
|
]
|
|
37
37
|
test = [
|
|
38
|
+
"build>=1.0",
|
|
38
39
|
"pytest>=7.4",
|
|
39
40
|
"pytest-cov>=5.0",
|
|
40
41
|
]
|
|
@@ -1,48 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-hwpx
|
|
3
|
-
Version: 2.8.
|
|
3
|
+
Version: 2.8.3
|
|
4
4
|
Summary: Hancom HWPX 패키지를 로드하고 편집하기 위한 Python 유틸리티 모음
|
|
5
5
|
Author: python-hwpx Maintainers
|
|
6
|
-
License:
|
|
7
|
-
|
|
8
|
-
Copyright (c) 2024 python-hwpx Maintainers
|
|
9
|
-
|
|
10
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
-
of this software and associated documentation files (the "Software"), to use,
|
|
12
|
-
copy, modify, merge, publish, distribute, and sublicense the Software only for
|
|
13
|
-
non-commercial purposes, subject to the following conditions:
|
|
14
|
-
|
|
15
|
-
1. Non-Commercial Use Only. The Software may be used, copied, modified,
|
|
16
|
-
merged, published, distributed, and sublicensed only for non-commercial
|
|
17
|
-
purposes. "Non-Commercial" means use that is not primarily intended for or
|
|
18
|
-
directed toward commercial advantage, monetary compensation, or any form of
|
|
19
|
-
direct or indirect commercial exploitation.
|
|
20
|
-
|
|
21
|
-
2. Attribution. The above copyright notice and this permission notice shall be
|
|
22
|
-
included in all copies or substantial portions of the Software.
|
|
23
|
-
|
|
24
|
-
3. No Warranty of Commercial Support. The maintainers are not obligated to
|
|
25
|
-
provide commercial support, maintenance, or updates.
|
|
26
|
-
|
|
27
|
-
THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
-
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
-
SOFTWARE.
|
|
34
|
-
|
|
35
|
-
If you require permissions to use this Software for commercial purposes,
|
|
36
|
-
please contact the copyright holders to negotiate an alternative licensing
|
|
37
|
-
arrangement.
|
|
38
|
-
|
|
6
|
+
License-Expression: LicenseRef-python-hwpx-NonCommercial
|
|
39
7
|
Project-URL: Homepage, https://github.com/airmang/python-hwpx
|
|
40
8
|
Project-URL: Documentation, https://github.com/airmang/python-hwpx/tree/main/docs
|
|
41
9
|
Project-URL: Issues, https://github.com/airmang/python-hwpx/issues
|
|
42
10
|
Keywords: hwp,hwpx,hancom,opc,xml
|
|
43
11
|
Classifier: Development Status :: 3 - Alpha
|
|
44
12
|
Classifier: Intended Audience :: Developers
|
|
45
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
46
13
|
Classifier: Programming Language :: Python :: 3
|
|
47
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
48
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -58,6 +25,7 @@ Requires-Dist: build>=1.0; extra == "dev"
|
|
|
58
25
|
Requires-Dist: twine>=4.0; extra == "dev"
|
|
59
26
|
Requires-Dist: pytest>=7.4; extra == "dev"
|
|
60
27
|
Provides-Extra: test
|
|
28
|
+
Requires-Dist: build>=1.0; extra == "test"
|
|
61
29
|
Requires-Dist: pytest>=7.4; extra == "test"
|
|
62
30
|
Requires-Dist: pytest-cov>=5.0; extra == "test"
|
|
63
31
|
Provides-Extra: typecheck
|
|
@@ -73,7 +41,7 @@ Dynamic: license-file
|
|
|
73
41
|
<p align="center">
|
|
74
42
|
<a href="https://pypi.org/project/python-hwpx/"><img src="https://img.shields.io/pypi/v/python-hwpx?color=blue&label=PyPI" alt="PyPI"></a>
|
|
75
43
|
<a href="https://pypi.org/project/python-hwpx/"><img src="https://img.shields.io/pypi/pyversions/python-hwpx" alt="Python"></a>
|
|
76
|
-
<a href="https://github.com/airmang/python-hwpx/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-
|
|
44
|
+
<a href="https://github.com/airmang/python-hwpx/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Custom%20Noncommercial-orange" alt="License: Custom Non-Commercial"></a>
|
|
77
45
|
<a href="https://airmang.github.io/python-hwpx/"><img src="https://img.shields.io/badge/docs-Sphinx-8CA1AF" alt="Docs"></a>
|
|
78
46
|
</p>
|
|
79
47
|
</p>
|
|
@@ -353,13 +321,15 @@ pytest
|
|
|
353
321
|
|
|
354
322
|
## License
|
|
355
323
|
|
|
356
|
-
[
|
|
324
|
+
[Custom Non-Commercial License](LICENSE) © python-hwpx Maintainers
|
|
325
|
+
|
|
326
|
+
Commercial use requires separate permission from the copyright holders.
|
|
357
327
|
|
|
358
328
|
<br>
|
|
359
329
|
|
|
360
|
-
##
|
|
330
|
+
## Maintainer
|
|
361
331
|
|
|
362
|
-
**고규현** — 광교고등학교 정보·컴퓨터 교사
|
|
332
|
+
Primary maintainer/contact: **고규현** — 광교고등학교 정보·컴퓨터 교사
|
|
363
333
|
|
|
364
334
|
- ✉️ [kokyuhyun@hotmail.com](mailto:kokyuhyun@hotmail.com)
|
|
365
335
|
- 🐙 [@airmang](https://github.com/airmang)
|
|
@@ -54,6 +54,7 @@ tests/test_memo_and_style_editing.py
|
|
|
54
54
|
tests/test_new_features.py
|
|
55
55
|
tests/test_opc_package.py
|
|
56
56
|
tests/test_oxml_parsing.py
|
|
57
|
+
tests/test_packaging_license_metadata.py
|
|
57
58
|
tests/test_packaging_py_typed.py
|
|
58
59
|
tests/test_paragraph_section_management.py
|
|
59
60
|
tests/test_repr_snapshots.py
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import subprocess
|
|
4
|
+
import sys
|
|
5
|
+
import tarfile
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from zipfile import ZipFile
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
LICENSE_EXPRESSION = "LicenseRef-python-hwpx-NonCommercial"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _build_distribution(tmp_path: Path, distribution: str) -> Path:
|
|
16
|
+
pytest.importorskip("build")
|
|
17
|
+
|
|
18
|
+
project_root = Path(__file__).resolve().parents[1]
|
|
19
|
+
build_args = [
|
|
20
|
+
sys.executable,
|
|
21
|
+
"-m",
|
|
22
|
+
"build",
|
|
23
|
+
f"--{distribution}",
|
|
24
|
+
"--outdir",
|
|
25
|
+
str(tmp_path),
|
|
26
|
+
]
|
|
27
|
+
subprocess.run(build_args, cwd=project_root, check=True)
|
|
28
|
+
|
|
29
|
+
pattern = "*.whl" if distribution == "wheel" else "*.tar.gz"
|
|
30
|
+
return next(tmp_path.glob(pattern))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@pytest.mark.parametrize("distribution", ["wheel", "sdist"])
|
|
34
|
+
def test_built_distributions_expose_custom_license_metadata(
|
|
35
|
+
tmp_path: Path, distribution: str
|
|
36
|
+
) -> None:
|
|
37
|
+
artifact = _build_distribution(tmp_path, distribution)
|
|
38
|
+
|
|
39
|
+
if distribution == "wheel":
|
|
40
|
+
with ZipFile(artifact) as wheel_archive:
|
|
41
|
+
members = set(wheel_archive.namelist())
|
|
42
|
+
metadata_name = next(
|
|
43
|
+
name for name in members if name.endswith(".dist-info/METADATA")
|
|
44
|
+
)
|
|
45
|
+
metadata = wheel_archive.read(metadata_name).decode("utf-8")
|
|
46
|
+
|
|
47
|
+
assert f"License-Expression: {LICENSE_EXPRESSION}" in metadata
|
|
48
|
+
assert "License-File: LICENSE" in metadata
|
|
49
|
+
assert "Classifier: License ::" not in metadata
|
|
50
|
+
assert any(name.endswith(".dist-info/licenses/LICENSE") for name in members)
|
|
51
|
+
return
|
|
52
|
+
|
|
53
|
+
with tarfile.open(artifact, "r:gz") as sdist_archive:
|
|
54
|
+
members = sdist_archive.getnames()
|
|
55
|
+
pkg_info_name = next(name for name in members if name.endswith("/PKG-INFO"))
|
|
56
|
+
pkg_info_member = sdist_archive.extractfile(pkg_info_name)
|
|
57
|
+
assert pkg_info_member is not None
|
|
58
|
+
metadata = pkg_info_member.read().decode("utf-8")
|
|
59
|
+
|
|
60
|
+
assert f"License-Expression: {LICENSE_EXPRESSION}" in metadata
|
|
61
|
+
assert "License-File: LICENSE" in metadata
|
|
62
|
+
assert "Classifier: License ::" not in metadata
|
|
63
|
+
assert any(name.endswith("/LICENSE") for name in members)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|