python-package-folder 3.0.0__tar.gz → 3.0.2__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.0.0 → python_package_folder-3.0.2}/PKG-INFO +1 -1
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/manager.py +43 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/subfolder_build.py +14 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/.copier-answers.yml +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/.cursor/rules/general.mdc +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/.cursor/rules/python.mdc +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/.github/workflows/ci.yml +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/.github/workflows/publish.yml +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/.gitignore +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/.vscode/settings.json +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/LICENSE +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/Makefile +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/README.md +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/coverage.svg +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/development.md +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/installation.md +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/publishing.md +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/pyproject.toml +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/__init__.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/__main__.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/analyzer.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/finder.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/publisher.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/py.typed +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/python_package_folder.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/types.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/utils.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/version.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/conftest.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/folder_structure/some_globals.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/folder_structure/subfolder_to_build/README.md +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/folder_structure/subfolder_to_build/__init__.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/folder_structure/subfolder_to_build/some_function.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/folder_structure/subfolder_to_build/some_globals.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/folder_structure/utility_folder/_SS/some_superseded_file.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/folder_structure/utility_folder/some_utility.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_build_with_external_deps.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_linting.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_preserve_directory_structure.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_publisher.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_shared_subdirectory_imports.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_spreadsheet_creation_imports.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_subfolder_build.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_third_party_dependencies.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_utils.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_version_manager.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/tests.py +0 -0
- {python_package_folder-3.0.0 → python_package_folder-3.0.2}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-package-folder
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.2
|
|
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>
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/manager.py
RENAMED
|
@@ -339,6 +339,13 @@ class BuildManager:
|
|
|
339
339
|
shutil.copy2(source, target)
|
|
340
340
|
self.copied_files.append(target)
|
|
341
341
|
print(f"Copied external file: {source} -> {target}")
|
|
342
|
+
# If copying a Python file, ensure parent directory has __init__.py
|
|
343
|
+
# This helps type checkers resolve imports correctly
|
|
344
|
+
if source.suffix == ".py" and target.parent != self.src_dir:
|
|
345
|
+
init_file = target.parent / "__init__.py"
|
|
346
|
+
if not init_file.exists():
|
|
347
|
+
init_file.write_text("", encoding="utf-8")
|
|
348
|
+
self.copied_files.append(init_file)
|
|
342
349
|
elif source.is_dir():
|
|
343
350
|
if target.exists():
|
|
344
351
|
shutil.rmtree(target)
|
|
@@ -354,6 +361,8 @@ class BuildManager:
|
|
|
354
361
|
Copy a directory tree, excluding certain patterns.
|
|
355
362
|
|
|
356
363
|
Excludes directories matching patterns like _SS, __SS, _sandbox, etc.
|
|
364
|
+
Ensures __init__.py files exist in directories containing Python files
|
|
365
|
+
so that type checkers can resolve imports correctly.
|
|
357
366
|
|
|
358
367
|
Args:
|
|
359
368
|
src: Source directory
|
|
@@ -385,6 +394,9 @@ class BuildManager:
|
|
|
385
394
|
# Create destination directory
|
|
386
395
|
dst.mkdir(parents=True, exist_ok=True)
|
|
387
396
|
|
|
397
|
+
has_python_files = False
|
|
398
|
+
copied_python_files = []
|
|
399
|
+
|
|
388
400
|
# Copy files and subdirectories, excluding patterns
|
|
389
401
|
for item in src.iterdir():
|
|
390
402
|
if should_exclude(item):
|
|
@@ -395,8 +407,39 @@ class BuildManager:
|
|
|
395
407
|
|
|
396
408
|
if src_item.is_file():
|
|
397
409
|
shutil.copy2(src_item, dst_item)
|
|
410
|
+
if src_item.suffix == ".py":
|
|
411
|
+
has_python_files = True
|
|
412
|
+
copied_python_files.append(dst_item)
|
|
398
413
|
elif src_item.is_dir():
|
|
399
414
|
self._copytree_excluding(src_item, dst_item)
|
|
415
|
+
# Check if the subdirectory has Python files
|
|
416
|
+
if any(dst_item.rglob("*.py")):
|
|
417
|
+
has_python_files = True
|
|
418
|
+
|
|
419
|
+
# Ensure __init__.py exists in directories containing Python files
|
|
420
|
+
# This is needed for type checkers to resolve imports correctly
|
|
421
|
+
# Also ensure all parent directories in the path have __init__.py
|
|
422
|
+
if has_python_files:
|
|
423
|
+
init_file = dst / "__init__.py"
|
|
424
|
+
if not init_file.exists():
|
|
425
|
+
# Create an empty __init__.py file
|
|
426
|
+
init_file.write_text("", encoding="utf-8")
|
|
427
|
+
self.copied_files.append(init_file)
|
|
428
|
+
|
|
429
|
+
# Ensure all parent directories up to src_dir also have __init__.py
|
|
430
|
+
# This helps type checkers resolve nested imports like:
|
|
431
|
+
# from empty_drawing_detection.models.Information_extraction._shared_ie.ie_enums import ...
|
|
432
|
+
current = dst
|
|
433
|
+
while current != self.src_dir and current.is_relative_to(self.src_dir):
|
|
434
|
+
parent_init = current.parent / "__init__.py"
|
|
435
|
+
if (
|
|
436
|
+
parent_init.parent != self.src_dir
|
|
437
|
+
and not parent_init.exists()
|
|
438
|
+
and any(current.parent.rglob("*.py"))
|
|
439
|
+
):
|
|
440
|
+
parent_init.write_text("", encoding="utf-8")
|
|
441
|
+
self.copied_files.append(parent_init)
|
|
442
|
+
current = current.parent
|
|
400
443
|
|
|
401
444
|
def _get_package_name_from_import(self, module_name: str) -> str | None:
|
|
402
445
|
"""
|
|
@@ -251,6 +251,13 @@ class SubfolderBuildConfig:
|
|
|
251
251
|
temp_pyproject_path.write_text(adjusted_content, encoding="utf-8")
|
|
252
252
|
self.temp_pyproject = temp_pyproject_path
|
|
253
253
|
|
|
254
|
+
# Print the temporary pyproject.toml content for debugging
|
|
255
|
+
print("\n" + "=" * 80)
|
|
256
|
+
print("Temporary pyproject.toml content (from subfolder pyproject.toml):")
|
|
257
|
+
print("=" * 80)
|
|
258
|
+
print(adjusted_content)
|
|
259
|
+
print("=" * 80 + "\n")
|
|
260
|
+
|
|
254
261
|
# If original pyproject.toml exists, temporarily move it
|
|
255
262
|
if original_pyproject.exists():
|
|
256
263
|
backup_path = self.project_root / "pyproject.toml.original"
|
|
@@ -357,6 +364,13 @@ class SubfolderBuildConfig:
|
|
|
357
364
|
temp_pyproject_path = self.project_root / "pyproject.toml.temp"
|
|
358
365
|
temp_pyproject_path.write_text(modified_content, encoding="utf-8")
|
|
359
366
|
|
|
367
|
+
# Print the temporary pyproject.toml content for debugging
|
|
368
|
+
print("\n" + "=" * 80)
|
|
369
|
+
print("Temporary pyproject.toml content (created from parent):")
|
|
370
|
+
print("=" * 80)
|
|
371
|
+
print(modified_content)
|
|
372
|
+
print("=" * 80 + "\n")
|
|
373
|
+
|
|
360
374
|
# Move temp file to pyproject.toml for the build
|
|
361
375
|
temp_pyproject_path.rename(original_pyproject)
|
|
362
376
|
self.temp_pyproject = original_pyproject
|
|
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
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/__init__.py
RENAMED
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/__main__.py
RENAMED
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/analyzer.py
RENAMED
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/finder.py
RENAMED
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/publisher.py
RENAMED
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/types.py
RENAMED
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/utils.py
RENAMED
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/src/python_package_folder/version.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/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.0.0 → python_package_folder-3.0.2}/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
|
|
File without changes
|
{python_package_folder-3.0.0 → python_package_folder-3.0.2}/tests/test_third_party_dependencies.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|