python-package-folder 3.1.0__tar.gz → 3.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.
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/PKG-INFO +1 -1
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/coverage.svg +2 -2
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/subfolder_build.py +44 -74
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_subfolder_build.py +27 -34
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/.copier-answers.yml +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/.cursor/rules/general.mdc +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/.cursor/rules/python.mdc +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/.github/workflows/ci.yml +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/.github/workflows/publish.yml +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/.gitignore +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/.vscode/settings.json +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/LICENSE +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/Makefile +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/README.md +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/development.md +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/installation.md +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/publishing.md +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/pyproject.toml +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/__init__.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/__main__.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/analyzer.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/finder.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/manager.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/publisher.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/py.typed +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/python_package_folder.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/types.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/utils.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/version.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/conftest.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/folder_structure/some_globals.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/folder_structure/subfolder_to_build/README.md +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/folder_structure/subfolder_to_build/__init__.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/folder_structure/subfolder_to_build/some_function.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/folder_structure/subfolder_to_build/some_globals.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/folder_structure/utility_folder/_SS/some_superseded_file.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/folder_structure/utility_folder/some_utility.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_build_with_external_deps.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_linting.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_preserve_directory_structure.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_publisher.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_shared_subdirectory_imports.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_spreadsheet_creation_imports.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_third_party_dependencies.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_utils.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_version_manager.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/tests.py +0 -0
- {python_package_folder-3.1.0 → python_package_folder-3.1.1}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-package-folder
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.1
|
|
4
4
|
Summary: Python package to automatically package and build a folder, fetching all relevant dependencies.
|
|
5
5
|
Project-URL: Repository, https://github.com/alelom/python-package-folder
|
|
6
6
|
Author-email: Alessio Lombardi <work@alelom.com>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
|
15
15
|
<text x="31.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
|
|
16
16
|
<text x="31.5" y="14">coverage</text>
|
|
17
|
-
<text x="81" y="15" fill="#010101" fill-opacity=".3">
|
|
18
|
-
<text x="81" y="14">
|
|
17
|
+
<text x="81" y="15" fill="#010101" fill-opacity=".3">68%</text>
|
|
18
|
+
<text x="81" y="14">68%</text>
|
|
19
19
|
</g>
|
|
20
20
|
</svg>
|
|
@@ -141,8 +141,9 @@ class SubfolderBuildConfig:
|
|
|
141
141
|
result = []
|
|
142
142
|
in_hatch_build = False
|
|
143
143
|
in_hatch_build_section = False
|
|
144
|
+
in_sdist_section = False
|
|
144
145
|
packages_set = False
|
|
145
|
-
|
|
146
|
+
only_include_set = False
|
|
146
147
|
|
|
147
148
|
for line in lines:
|
|
148
149
|
# Detect hatch build section
|
|
@@ -165,10 +166,20 @@ class SubfolderBuildConfig:
|
|
|
165
166
|
# End of hatch build section
|
|
166
167
|
in_hatch_build_section = False
|
|
167
168
|
result.append(line)
|
|
169
|
+
elif line.strip().startswith("[tool.hatch.build.targets.sdist]"):
|
|
170
|
+
in_sdist_section = True
|
|
171
|
+
result.append(line)
|
|
172
|
+
continue
|
|
173
|
+
elif line.strip().startswith("[") and in_sdist_section:
|
|
174
|
+
# End of sdist section
|
|
175
|
+
in_sdist_section = False
|
|
176
|
+
result.append(line)
|
|
177
|
+
elif in_sdist_section:
|
|
178
|
+
# Track if only-include already exists
|
|
179
|
+
if re.match(r"^\s*only-include\s*=", line):
|
|
180
|
+
only_include_set = True
|
|
181
|
+
result.append(line)
|
|
168
182
|
elif in_hatch_build_section:
|
|
169
|
-
# Track if paths-exclude already exists
|
|
170
|
-
if re.match(r"^\s*paths-exclude\s*=", line):
|
|
171
|
-
paths_exclude_set = True
|
|
172
183
|
result.append(line)
|
|
173
184
|
elif in_hatch_build:
|
|
174
185
|
# Modify packages path if found
|
|
@@ -209,42 +220,21 @@ class SubfolderBuildConfig:
|
|
|
209
220
|
packages_str = f'"{correct_packages_path}"'
|
|
210
221
|
result.append(f"packages = [{packages_str}]")
|
|
211
222
|
|
|
212
|
-
#
|
|
213
|
-
#
|
|
214
|
-
if not
|
|
223
|
+
# Use only-include for source distributions to ensure only the subfolder is included
|
|
224
|
+
# This prevents including files from the project root
|
|
225
|
+
if correct_packages_path and not only_include_set:
|
|
215
226
|
result.append("")
|
|
216
|
-
result.append("[tool.hatch.build]")
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
result.append(
|
|
227
|
-
result.append(' "tests/**",')
|
|
228
|
-
result.append(' "test/**",')
|
|
229
|
-
result.append(' "dist/**",')
|
|
230
|
-
result.append(' "build/**",')
|
|
231
|
-
result.append(' "*.egg-info/**",')
|
|
232
|
-
result.append(' "__pycache__/**",')
|
|
233
|
-
result.append(' ".pytest_cache/**",')
|
|
234
|
-
result.append(' ".mypy_cache/**",')
|
|
235
|
-
result.append(' ".venv/**",')
|
|
236
|
-
result.append(' "venv/**",')
|
|
237
|
-
result.append(' ".git/**",')
|
|
238
|
-
result.append(' ".gitignore",')
|
|
239
|
-
result.append(' ".gitattributes",')
|
|
240
|
-
result.append(' "Dockerfile",')
|
|
241
|
-
result.append(' ".dockerignore",')
|
|
242
|
-
result.append(' ".pylintrc",')
|
|
243
|
-
result.append(' "pyrightconfig.json",')
|
|
244
|
-
result.append(' "git-filter-repo",')
|
|
245
|
-
result.append(' "pyproject.toml.original",')
|
|
246
|
-
result.append(' "README.md.backup",')
|
|
247
|
-
result.append("]")
|
|
227
|
+
result.append("[tool.hatch.build.targets.sdist]")
|
|
228
|
+
# Include only the subfolder directory and necessary files
|
|
229
|
+
only_include_paths = [correct_packages_path]
|
|
230
|
+
# Also include pyproject.toml and README if they exist
|
|
231
|
+
only_include_paths.append("pyproject.toml")
|
|
232
|
+
only_include_paths.append("README.md")
|
|
233
|
+
only_include_paths.append("README.rst")
|
|
234
|
+
only_include_paths.append("README.txt")
|
|
235
|
+
only_include_paths.append("README")
|
|
236
|
+
only_include_str = ", ".join(f'"{p}"' for p in only_include_paths)
|
|
237
|
+
result.append(f"only-include = [{only_include_str}]")
|
|
248
238
|
|
|
249
239
|
return "\n".join(result)
|
|
250
240
|
|
|
@@ -584,41 +574,21 @@ class SubfolderBuildConfig:
|
|
|
584
574
|
packages_str = ", ".join(f'"{p}"' for p in package_dirs)
|
|
585
575
|
result.append(f"packages = [{packages_str}]")
|
|
586
576
|
|
|
587
|
-
#
|
|
588
|
-
# This
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
result.append(' "test/**",')
|
|
603
|
-
result.append(' "dist/**",')
|
|
604
|
-
result.append(' "build/**",')
|
|
605
|
-
result.append(' "*.egg-info/**",')
|
|
606
|
-
result.append(' "__pycache__/**",')
|
|
607
|
-
result.append(' ".pytest_cache/**",')
|
|
608
|
-
result.append(' ".mypy_cache/**",')
|
|
609
|
-
result.append(' ".venv/**",')
|
|
610
|
-
result.append(' "venv/**",')
|
|
611
|
-
result.append(' ".git/**",')
|
|
612
|
-
result.append(' ".gitignore",')
|
|
613
|
-
result.append(' ".gitattributes",')
|
|
614
|
-
result.append(' "Dockerfile",')
|
|
615
|
-
result.append(' ".dockerignore",')
|
|
616
|
-
result.append(' ".pylintrc",')
|
|
617
|
-
result.append(' "pyrightconfig.json",')
|
|
618
|
-
result.append(' "git-filter-repo",')
|
|
619
|
-
result.append(' "pyproject.toml.original",')
|
|
620
|
-
result.append(' "README.md.backup",')
|
|
621
|
-
result.append("]")
|
|
577
|
+
# Use only-include for source distributions to ensure only the subfolder is included
|
|
578
|
+
# This prevents including files from the project root
|
|
579
|
+
if package_dirs:
|
|
580
|
+
result.append("")
|
|
581
|
+
result.append("[tool.hatch.build.targets.sdist]")
|
|
582
|
+
# Include only the subfolder directory and necessary files
|
|
583
|
+
only_include_paths = [package_dirs[0]]
|
|
584
|
+
# Also include pyproject.toml and README if they exist
|
|
585
|
+
only_include_paths.append("pyproject.toml")
|
|
586
|
+
only_include_paths.append("README.md")
|
|
587
|
+
only_include_paths.append("README.rst")
|
|
588
|
+
only_include_paths.append("README.txt")
|
|
589
|
+
only_include_paths.append("README")
|
|
590
|
+
only_include_str = ", ".join(f'"{p}"' for p in only_include_paths)
|
|
591
|
+
result.append(f"only-include = [{only_include_str}]")
|
|
622
592
|
|
|
623
593
|
# Add dependency group if specified
|
|
624
594
|
if dependency_group:
|
|
@@ -711,30 +711,24 @@ class TestSubfolderBuildTemporaryPyprojectCreation:
|
|
|
711
711
|
assert pyproject_path.exists()
|
|
712
712
|
content = pyproject_path.read_text()
|
|
713
713
|
|
|
714
|
-
# Verify [tool.hatch.build] section exists
|
|
715
|
-
assert "[tool.hatch.build]" in content
|
|
716
|
-
|
|
717
|
-
# Verify
|
|
718
|
-
assert "
|
|
719
|
-
|
|
720
|
-
# Verify
|
|
721
|
-
assert '"
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
assert '"
|
|
725
|
-
assert '"
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
assert '"
|
|
729
|
-
assert '"
|
|
730
|
-
assert '"
|
|
731
|
-
assert '"
|
|
732
|
-
assert '"*.egg-info/**"' in content
|
|
733
|
-
assert '"__pycache__/**"' in content
|
|
734
|
-
assert '".pytest_cache/**"' in content
|
|
735
|
-
assert '".git/**"' in content
|
|
736
|
-
assert '"Dockerfile"' in content
|
|
737
|
-
assert '".gitignore"' in content
|
|
714
|
+
# Verify [tool.hatch.build.targets.sdist] section exists
|
|
715
|
+
assert "[tool.hatch.build.targets.sdist]" in content
|
|
716
|
+
|
|
717
|
+
# Verify only-include is present
|
|
718
|
+
assert "only-include = [" in content
|
|
719
|
+
|
|
720
|
+
# Verify the subfolder is included
|
|
721
|
+
assert '"subfolder"' in content
|
|
722
|
+
|
|
723
|
+
# Verify necessary files are included
|
|
724
|
+
assert '"pyproject.toml"' in content
|
|
725
|
+
assert '"README.md"' in content
|
|
726
|
+
|
|
727
|
+
# Verify non-package directories are NOT explicitly included
|
|
728
|
+
assert '".cursor"' not in content or '".cursor"' not in content.split("only-include")[1]
|
|
729
|
+
assert '".github"' not in content or '".github"' not in content.split("only-include")[1]
|
|
730
|
+
assert '"data"' not in content or '"data"' not in content.split("only-include")[1]
|
|
731
|
+
assert '"docs"' not in content or '"docs"' not in content.split("only-include")[1]
|
|
738
732
|
|
|
739
733
|
# Cleanup
|
|
740
734
|
config.restore()
|
|
@@ -771,18 +765,17 @@ description = "Subfolder package"
|
|
|
771
765
|
assert pyproject_path.exists()
|
|
772
766
|
content = pyproject_path.read_text()
|
|
773
767
|
|
|
774
|
-
# Verify [tool.hatch.build] section exists
|
|
775
|
-
assert "[tool.hatch.build]" in content
|
|
768
|
+
# Verify [tool.hatch.build.targets.sdist] section exists
|
|
769
|
+
assert "[tool.hatch.build.targets.sdist]" in content
|
|
770
|
+
|
|
771
|
+
# Verify only-include is present
|
|
772
|
+
assert "only-include = [" in content
|
|
776
773
|
|
|
777
|
-
# Verify
|
|
778
|
-
assert "
|
|
774
|
+
# Verify the subfolder is included
|
|
775
|
+
assert '"subfolder-package"' in content or '"subfolder"' in content
|
|
779
776
|
|
|
780
|
-
# Verify
|
|
781
|
-
assert '".
|
|
782
|
-
assert '"data/**"' in content
|
|
783
|
-
assert '"docs/**"' in content
|
|
784
|
-
assert '"dist/**"' in content
|
|
785
|
-
assert '"build/**"' in content
|
|
777
|
+
# Verify necessary files are included
|
|
778
|
+
assert '"pyproject.toml"' in content
|
|
786
779
|
|
|
787
780
|
# Cleanup
|
|
788
781
|
config.restore()
|
|
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
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/__init__.py
RENAMED
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/__main__.py
RENAMED
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/analyzer.py
RENAMED
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/finder.py
RENAMED
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/manager.py
RENAMED
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/publisher.py
RENAMED
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/types.py
RENAMED
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/utils.py
RENAMED
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/src/python_package_folder/version.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/folder_structure/some_globals.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_build_with_external_deps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_package_folder-3.1.0 → python_package_folder-3.1.1}/tests/test_third_party_dependencies.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|