python-msilib 0.1.1__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.

Potentially problematic release.


This version of python-msilib might be problematic. Click here for more details.

@@ -0,0 +1,43 @@
1
+ PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
2
+ --------------------------------------------
3
+
4
+ 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and
5
+ the Individual or Organization ("Licensee") accessing and otherwise using this
6
+ software ("Python") in source or binary form and its associated documentation.
7
+
8
+ 2. Subject to the terms and conditions of this License Agreement, PSF hereby
9
+ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
10
+ analyze, test, perform and/or display publicly, prepare derivative works,
11
+ distribute, and otherwise use Python alone or in any derivative
12
+ version, provided, however, that PSF's License Agreement and PSF's notice of
13
+ copyright, i.e., "Copyright © 2001-2023 Python Software Foundation; All Rights
14
+ Reserved" are retained in Python alone or in any derivative version
15
+ prepared by Licensee.
16
+
17
+ 3. In the event Licensee prepares a derivative work that is based on or
18
+ incorporates Python or any part thereof, and wants to make the
19
+ derivative work available to others as provided herein, then Licensee hereby
20
+ agrees to include in any such work a brief summary of the changes made to Python.
21
+
22
+ 4. PSF is making Python available to Licensee on an "AS IS" basis.
23
+ PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF
24
+ EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR
25
+ WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE
26
+ USE OF PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
27
+
28
+ 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
29
+ FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
30
+ MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE
31
+ THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
32
+
33
+ 6. This License Agreement will automatically terminate upon a material breach of
34
+ its terms and conditions.
35
+
36
+ 7. Nothing in this License Agreement shall be deemed to create any relationship
37
+ of agency, partnership, or joint venture between PSF and Licensee. This License
38
+ Agreement does not grant permission to use PSF trademarks or trade name in a
39
+ trademark sense to endorse or promote products or services of Licensee, or any
40
+ third party.
41
+
42
+ 8. By copying, installing or otherwise using Python, Licensee agrees
43
+ to be bound by the terms and conditions of this License Agreement.
@@ -0,0 +1,4 @@
1
+ include Makefile
2
+ include requirements-dev.txt
3
+ recursive-include src *.c *.h
4
+ recursive-include tests *.md *.py *.txt
@@ -0,0 +1,82 @@
1
+ # Makefile to automate some tools
2
+ SHELL=/bin/bash
3
+ PATH := $(shell python -c "import sysconfig; print(sysconfig.get_path('scripts'))"):$(PATH)
4
+
5
+ PY_PLATFORM := $(shell python -c "import sysconfig; print(sysconfig.get_platform())")
6
+ PRE_COMMIT_OPTIONS := --show-diff-on-failure --color=always --all-files --hook-stage=manual
7
+
8
+ COV_TMPDIR := $(shell mktemp -d)
9
+
10
+ .PHONY: all
11
+ all: install
12
+
13
+ .PHONY: pre-commit
14
+ pre-commit: install
15
+ @(pre-commit run $(PRE_COMMIT_OPTIONS) || true) | more
16
+ @pre-commit gc
17
+
18
+ .PHONY: clean
19
+ clean:
20
+ @rm -f .coverage* || true
21
+ @rm -rf build dist wheelhouse
22
+
23
+ .PHONY: install
24
+ install:
25
+ ./ci/install-tools.sh --dev
26
+ if ! [ -f .git/hooks/pre-commit ]; then\
27
+ pre-commit install --install-hooks --overwrite -t pre-commit;\
28
+ fi
29
+
30
+ .PHONY: uninstall
31
+ uninstall:
32
+ @if [ -f .git/hooks/pre-commit ]; then\
33
+ pre-commit clean;\
34
+ pre-commit uninstall;\
35
+ rm -f .git/hooks/pre-commit;\
36
+ fi
37
+
38
+ .PHONY: upgrade
39
+ upgrade: uninstall clean install
40
+ pre-commit autoupdate
41
+ $(MAKE) pre-commit
42
+
43
+ .PHONY: wheel
44
+ wheel:
45
+ ./ci/build-wheel.sh
46
+
47
+ .PHONY: tests
48
+ tests: wheel
49
+ ./ci/install-tools.sh --tests
50
+ cp pyproject.toml $(COV_TMPDIR)/
51
+ cp -a tests/ $(COV_TMPDIR)/
52
+ cd $(COV_TMPDIR) && pytest -nauto -v || true
53
+
54
+ .PHONY: cov
55
+ cov: wheel
56
+ ./ci/install-tools.sh --tests
57
+ @rm -rf build/coverage_html_report
58
+ cp pyproject.toml $(COV_TMPDIR)/
59
+ cp -a tests/ $(COV_TMPDIR)/
60
+ cd $(COV_TMPDIR) && coverage run || true
61
+ coverage combine --keep --quiet -a $(COV_TMPDIR)/
62
+ coverage report
63
+ coverage html
64
+
65
+ .PHONY: release
66
+ release:
67
+ bump-my-version show-bump 2>/dev/null
68
+ @echo "Run:"
69
+ @echo " bump-my-version bump <option>"
70
+ @echo "--or--"
71
+ @echo " bump-my-version bump patch --new-version=X.XX.X"
72
+ @echo "--then--"
73
+ @echo " git push origin `git branch --show-current` --tags"
74
+
75
+ .PHONY: release-dev
76
+ release-dev:
77
+ if (grep "current_version" pyproject.toml | grep -q "\-dev"); then\
78
+ bump-my-version bump --allow-dirty --no-tag build;\
79
+ else\
80
+ bump-my-version bump --allow-dirty --no-tag minor;\
81
+ fi
82
+ git log -1
@@ -0,0 +1,39 @@
1
+ Metadata-Version: 2.4
2
+ Name: python-msilib
3
+ Version: 0.1.1
4
+ Summary: Read and write Microsoft Installer files
5
+ Author-email: Marcelo Duarte <marcelotduarte@users.noreply.github.com>
6
+ License-Expression: PSF-2.0
7
+ Project-URL: Source, https://github.com/marcelotduarte/python-msilib
8
+ Keywords: msilib
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Natural Language :: English
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: C
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3 :: Only
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Software Development :: Build Tools
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Classifier: Topic :: System :: Software Distribution
22
+ Classifier: Topic :: Utilities
23
+ Requires-Python: >=3.13
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Provides-Extra: dev
27
+ Requires-Dist: bump-my-version==1.2.3; extra == "dev"
28
+ Requires-Dist: cibuildwheel==3.2.0; extra == "dev"
29
+ Requires-Dist: pre-commit==4.3.0; extra == "dev"
30
+ Provides-Extra: tests
31
+ Requires-Dist: coverage==7.10.7; extra == "tests"
32
+ Requires-Dist: pytest==8.4.2; extra == "tests"
33
+ Requires-Dist: pluggy==1.6.0; extra == "tests"
34
+ Requires-Dist: pytest-mock==3.15.1; extra == "tests"
35
+ Requires-Dist: pytest-timeout==2.4.0; extra == "tests"
36
+ Requires-Dist: pytest-xdist==3.8.0; extra == "tests"
37
+ Dynamic: license-file
38
+
39
+ # python-msilib
@@ -0,0 +1 @@
1
+ # python-msilib
@@ -0,0 +1,235 @@
1
+ [build-system]
2
+ requires = [
3
+ # setuptools 77.0.3+ supports PEP 639
4
+ "setuptools>=77.0.3,<=80.9.0",
5
+ ]
6
+ build-backend = "setuptools.build_meta"
7
+
8
+ [project]
9
+ name = "python-msilib"
10
+ description = "Read and write Microsoft Installer files"
11
+ authors = [
12
+ {name = "Marcelo Duarte", email = "marcelotduarte@users.noreply.github.com"}
13
+ ]
14
+ classifiers = [
15
+ "Development Status :: 5 - Production/Stable",
16
+ "Intended Audience :: Developers",
17
+ "Natural Language :: English",
18
+ "Operating System :: OS Independent",
19
+ "Programming Language :: C",
20
+ "Programming Language :: Python",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3 :: Only",
23
+ "Programming Language :: Python :: 3.13",
24
+ "Programming Language :: Python :: 3.14",
25
+ "Topic :: Software Development :: Build Tools",
26
+ "Topic :: Software Development :: Libraries :: Python Modules",
27
+ "Topic :: System :: Software Distribution",
28
+ "Topic :: Utilities",
29
+ ]
30
+ dynamic = ["version"]
31
+ keywords = ["msilib"]
32
+ license = "PSF-2.0"
33
+ license-files = ["LICENSE"]
34
+ readme = "README.md"
35
+ requires-python = ">=3.13"
36
+
37
+ [project.optional-dependencies]
38
+ dev = [
39
+ "bump-my-version==1.2.3",
40
+ "cibuildwheel==3.2.0",
41
+ "pre-commit==4.3.0", # python_version >= 3.9
42
+ ]
43
+ tests = [
44
+ "coverage==7.10.7",
45
+ "pytest==8.4.2",
46
+ "pluggy==1.6.0",
47
+ "pytest-mock==3.15.1",
48
+ "pytest-timeout==2.4.0",
49
+ "pytest-xdist==3.8.0",
50
+ ]
51
+
52
+ [project.urls]
53
+ #Home = "https://marcelotduarte.github.io/cx_Freeze"
54
+ #Changelog = "https://github.com/marcelotduarte/python-msilib/CHANGELOG.md"
55
+ #Documentation = "https://cx-freeze.readthedocs.io"
56
+ Source = "https://github.com/marcelotduarte/python-msilib"
57
+
58
+ [tool.setuptools]
59
+ include-package-data = true
60
+ package-dir = {"" = "src"}
61
+ zip-safe = false
62
+
63
+ [tool.setuptools.dynamic]
64
+ version = {attr = "msilib.__version__"}
65
+
66
+ [[tool.setuptools.ext-modules]]
67
+ name = "msilib._msi"
68
+ sources = ["src/msilib/_msi.c"]
69
+ depends = ["src/msilib/include/_msi.h"]
70
+ libraries = ["msi","rpcrt4", "cabinet"]
71
+
72
+ [tool.setuptools.packages.find]
73
+ namespaces = false
74
+ where = ["src"]
75
+
76
+ [tool.bumpversion]
77
+ commit = true
78
+ current_version = "0.1.1"
79
+ message = "Bump version: {current_version} → {new_version} [ci skip]"
80
+ parse = """(?x)
81
+ (?P<major>0|[1-9]\\d*)\\.
82
+ (?P<minor>0|[1-9]\\d*)\\.
83
+ (?P<patch>0|[1-9]\\d*)
84
+ (?:
85
+ \\.(?P<optional>0|[1-9]\\d*) # pull request number (optional)
86
+ )?
87
+ (?:
88
+ - # dash separator for pre-release section
89
+ (?P<pre>[a-zA-Z-]+)\\. # pre-release label
90
+ (?P<build>0|[1-9]\\d*) # pre-release version number
91
+ )? # pre-release section is optional
92
+ """
93
+ serialize = [
94
+ "{major}.{minor}.{patch}.{optional}-{pre}.{build}",
95
+ "{major}.{minor}.{patch}-{pre}.{build}",
96
+ "{major}.{minor}.{patch}"
97
+ ]
98
+ sign_tags = true
99
+ tag = true
100
+ tag_name = "{new_version}"
101
+ verbose = true
102
+
103
+ [[tool.bumpversion.files]]
104
+ filename = "src/msilib/__init__.py"
105
+
106
+ [tool.bumpversion.parts.pre]
107
+ values = ["dev", "final"]
108
+ optional_value = "final"
109
+
110
+ [tool.cibuildwheel]
111
+ build-frontend = "build[uv]"
112
+ build-verbosity = 1
113
+ #enable = ["cpython-freethreading"]
114
+
115
+ [tool.coverage.html]
116
+ directory = "build/coverage_html_report"
117
+
118
+ [tool.coverage.report]
119
+ # Regexes for lines to exclude from consideration
120
+ exclude_also = [
121
+ # Don't complain about missing debug-only code:
122
+ "def __repr__",
123
+
124
+ # Don't complain about abstract methods, they aren't run:
125
+ "@(abc\\.)?abstractmethod",
126
+
127
+ # TYPE_CHECKING block is never executed during pytest run
128
+ "if TYPE_CHECKING:",
129
+ ]
130
+ ignore_errors = true
131
+ precision = 2
132
+
133
+ [tool.coverage.paths]
134
+ source = [
135
+ "msilib/",
136
+ "*/msilib/",
137
+ ]
138
+
139
+ [tool.coverage.run]
140
+ command_line = "-m pytest -nauto"
141
+ source = ["msilib"]
142
+ parallel = true
143
+ patch = ["subprocess"]
144
+ relative_files = true
145
+
146
+ [tool.pytest.ini_options]
147
+ minversion = "7.0"
148
+ addopts = "-rpfEsXx"
149
+ testpaths = ["tests"]
150
+ filterwarnings = [
151
+ "ignore::DeprecationWarning:distutils.*",
152
+ "ignore::DeprecationWarning:pkg_resources.*",
153
+ "ignore::DeprecationWarning:setuptools.*",
154
+ ]
155
+
156
+ [tool.ruff]
157
+ line-length = 79
158
+
159
+ [tool.ruff.lint]
160
+ select = [
161
+ "A", # flake8-builtins
162
+ "ANN2", # flake8-annotations - missing return type
163
+ "ARG", # flake8-unused-arguments
164
+ "B", # flake8-bugbear
165
+ "BLE", # flake8-blind-except
166
+ "C4", # flake8-comprehensions
167
+ "D", # pydocstyle
168
+ "DTZ", # flake8-datetimez
169
+ "E", "W", # pycodestyle
170
+ "EXE", # flake8-executable
171
+ "EM", # flake8-errmsg
172
+ "ERA", # eradicate
173
+ "F", # flake8
174
+ "FA", # flake8-future-annotations
175
+ "FLY", # flynt
176
+ "G", # flake8-logging-format
177
+ "I", # isort
178
+ "ICN", # flake8-import-conventions
179
+ "INT", # flake8-gettext
180
+ "ISC003", # flake8-implicit-str-concat - explicit-string-concatenation
181
+ "LOG", # flake8-logging
182
+ "PERF", # Perflint
183
+ "PGH", # pygrep-hooks
184
+ "PIE", # flake8-pie
185
+ "PLC", "PLE", "PLR", "PLW", # pylint
186
+ "PT", # flake8-pytest-style
187
+ "PYI", # flake8-pyi
188
+ "Q004", # flake8-quotes - unnecessary-escaped-quote
189
+ "RET", # flake8-return
190
+ "RSE", # flake8-raise
191
+ "RUF", # Ruff-specific
192
+ "S", # flake8-bandit
193
+ "SIM", # flake8-simplify
194
+ "SLF", # flake8-self
195
+ "SLOT", # flake8-slots
196
+ "T10", # flake8-debugger
197
+ "TC", # flake8-type-checking
198
+ "TID", # flake8-tidy-imports
199
+ "TRY", # tryceratops
200
+ "UP", # pyupgrade
201
+ "YTT", # flake8-2020
202
+ ]
203
+ ignore = [
204
+ # ignored for now, but should be revised in future
205
+ # last revised using ruff 0.12.0
206
+ "D102", # Missing docstring in public method
207
+ "D205", # 1 blank line required between summary line and description
208
+ "D401", # First line of docstring should be in imperative mood
209
+ "PERF203", # `try`-`except` within a loop incurs performance overhead
210
+ # ignore the following
211
+ "D105", # Missing docstring in magic method
212
+ "D107", # Missing docstring in `__init__`
213
+ "D203", # conflict with D211
214
+ "D213", # conflict with D212
215
+ "PLR0912", # too-many-branches
216
+ "PLR0915", # too-many-statements
217
+ "PYI021", # Docstrings should not be included in stubs
218
+ # prone to false positives (https://github.com/astral-sh/ruff/issues/4045)
219
+ "S603",
220
+ ]
221
+
222
+ [tool.ruff.lint.per-file-ignores]
223
+ "tests/*" = [
224
+ "S101", # Use of `assert` detected
225
+ ]
226
+
227
+ [tool.ruff.lint.flake8-builtins]
228
+ strict-checking = true
229
+
230
+ [tool.ruff.lint.flake8-unused-arguments]
231
+ ignore-variadic-names = true
232
+
233
+ [tool.ruff.format]
234
+ docstring-code-format = true
235
+ docstring-code-line-length = 50
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+