hatch-xclam 0.7.0__py3-none-any.whl

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.
Files changed (93) hide show
  1. hatch/__init__.py +21 -0
  2. hatch/cli_hatch.py +2748 -0
  3. hatch/environment_manager.py +1375 -0
  4. hatch/installers/__init__.py +25 -0
  5. hatch/installers/dependency_installation_orchestrator.py +636 -0
  6. hatch/installers/docker_installer.py +545 -0
  7. hatch/installers/hatch_installer.py +198 -0
  8. hatch/installers/installation_context.py +109 -0
  9. hatch/installers/installer_base.py +195 -0
  10. hatch/installers/python_installer.py +342 -0
  11. hatch/installers/registry.py +179 -0
  12. hatch/installers/system_installer.py +588 -0
  13. hatch/mcp_host_config/__init__.py +38 -0
  14. hatch/mcp_host_config/backup.py +458 -0
  15. hatch/mcp_host_config/host_management.py +572 -0
  16. hatch/mcp_host_config/models.py +602 -0
  17. hatch/mcp_host_config/reporting.py +181 -0
  18. hatch/mcp_host_config/strategies.py +513 -0
  19. hatch/package_loader.py +263 -0
  20. hatch/python_environment_manager.py +734 -0
  21. hatch/registry_explorer.py +171 -0
  22. hatch/registry_retriever.py +335 -0
  23. hatch/template_generator.py +179 -0
  24. hatch_xclam-0.7.0.dist-info/METADATA +150 -0
  25. hatch_xclam-0.7.0.dist-info/RECORD +93 -0
  26. hatch_xclam-0.7.0.dist-info/WHEEL +5 -0
  27. hatch_xclam-0.7.0.dist-info/entry_points.txt +2 -0
  28. hatch_xclam-0.7.0.dist-info/licenses/LICENSE +661 -0
  29. hatch_xclam-0.7.0.dist-info/top_level.txt +2 -0
  30. tests/__init__.py +1 -0
  31. tests/run_environment_tests.py +124 -0
  32. tests/test_cli_version.py +122 -0
  33. tests/test_data/packages/basic/base_pkg/hatch_mcp_server.py +18 -0
  34. tests/test_data/packages/basic/base_pkg/mcp_server.py +21 -0
  35. tests/test_data/packages/basic/base_pkg_v2/hatch_mcp_server.py +18 -0
  36. tests/test_data/packages/basic/base_pkg_v2/mcp_server.py +21 -0
  37. tests/test_data/packages/basic/utility_pkg/hatch_mcp_server.py +18 -0
  38. tests/test_data/packages/basic/utility_pkg/mcp_server.py +21 -0
  39. tests/test_data/packages/dependencies/complex_dep_pkg/hatch_mcp_server.py +18 -0
  40. tests/test_data/packages/dependencies/complex_dep_pkg/mcp_server.py +21 -0
  41. tests/test_data/packages/dependencies/docker_dep_pkg/hatch_mcp_server.py +18 -0
  42. tests/test_data/packages/dependencies/docker_dep_pkg/mcp_server.py +21 -0
  43. tests/test_data/packages/dependencies/mixed_dep_pkg/hatch_mcp_server.py +18 -0
  44. tests/test_data/packages/dependencies/mixed_dep_pkg/mcp_server.py +21 -0
  45. tests/test_data/packages/dependencies/python_dep_pkg/hatch_mcp_server.py +18 -0
  46. tests/test_data/packages/dependencies/python_dep_pkg/mcp_server.py +21 -0
  47. tests/test_data/packages/dependencies/simple_dep_pkg/hatch_mcp_server.py +18 -0
  48. tests/test_data/packages/dependencies/simple_dep_pkg/mcp_server.py +21 -0
  49. tests/test_data/packages/dependencies/system_dep_pkg/hatch_mcp_server.py +18 -0
  50. tests/test_data/packages/dependencies/system_dep_pkg/mcp_server.py +21 -0
  51. tests/test_data/packages/error_scenarios/circular_dep_pkg/hatch_mcp_server.py +18 -0
  52. tests/test_data/packages/error_scenarios/circular_dep_pkg/mcp_server.py +21 -0
  53. tests/test_data/packages/error_scenarios/circular_dep_pkg_b/hatch_mcp_server.py +18 -0
  54. tests/test_data/packages/error_scenarios/circular_dep_pkg_b/mcp_server.py +21 -0
  55. tests/test_data/packages/error_scenarios/invalid_dep_pkg/hatch_mcp_server.py +18 -0
  56. tests/test_data/packages/error_scenarios/invalid_dep_pkg/mcp_server.py +21 -0
  57. tests/test_data/packages/error_scenarios/version_conflict_pkg/hatch_mcp_server.py +18 -0
  58. tests/test_data/packages/error_scenarios/version_conflict_pkg/mcp_server.py +21 -0
  59. tests/test_data/packages/schema_versions/schema_v1_1_0_pkg/main.py +11 -0
  60. tests/test_data/packages/schema_versions/schema_v1_2_0_pkg/main.py +11 -0
  61. tests/test_data/packages/schema_versions/schema_v1_2_1_pkg/hatch_mcp_server.py +18 -0
  62. tests/test_data/packages/schema_versions/schema_v1_2_1_pkg/mcp_server.py +21 -0
  63. tests/test_data_utils.py +472 -0
  64. tests/test_dependency_orchestrator_consent.py +266 -0
  65. tests/test_docker_installer.py +524 -0
  66. tests/test_env_manip.py +991 -0
  67. tests/test_hatch_installer.py +179 -0
  68. tests/test_installer_base.py +221 -0
  69. tests/test_mcp_atomic_operations.py +276 -0
  70. tests/test_mcp_backup_integration.py +308 -0
  71. tests/test_mcp_cli_all_host_specific_args.py +303 -0
  72. tests/test_mcp_cli_backup_management.py +295 -0
  73. tests/test_mcp_cli_direct_management.py +453 -0
  74. tests/test_mcp_cli_discovery_listing.py +582 -0
  75. tests/test_mcp_cli_host_config_integration.py +823 -0
  76. tests/test_mcp_cli_package_management.py +360 -0
  77. tests/test_mcp_cli_partial_updates.py +859 -0
  78. tests/test_mcp_environment_integration.py +520 -0
  79. tests/test_mcp_host_config_backup.py +257 -0
  80. tests/test_mcp_host_configuration_manager.py +331 -0
  81. tests/test_mcp_host_registry_decorator.py +348 -0
  82. tests/test_mcp_pydantic_architecture_v4.py +603 -0
  83. tests/test_mcp_server_config_models.py +242 -0
  84. tests/test_mcp_server_config_type_field.py +221 -0
  85. tests/test_mcp_sync_functionality.py +316 -0
  86. tests/test_mcp_user_feedback_reporting.py +359 -0
  87. tests/test_non_tty_integration.py +281 -0
  88. tests/test_online_package_loader.py +202 -0
  89. tests/test_python_environment_manager.py +882 -0
  90. tests/test_python_installer.py +327 -0
  91. tests/test_registry.py +51 -0
  92. tests/test_registry_retriever.py +250 -0
  93. tests/test_system_installer.py +733 -0
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env python3
2
+ import sys
3
+ import unittest
4
+ import logging
5
+ from pathlib import Path
6
+
7
+ # Configure logging
8
+ logging.basicConfig(
9
+ level=logging.INFO,
10
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
11
+ handlers=[
12
+ logging.StreamHandler(),
13
+ logging.FileHandler("environment_test_results.log")
14
+ ]
15
+ )
16
+ logger = logging.getLogger("hatch.test_runner")
17
+
18
+ if __name__ == "__main__":
19
+ # Add parent directory to path for imports
20
+ sys.path.insert(0, str(Path(__file__).parent.parent))
21
+
22
+ # Discover and run tests
23
+ test_loader = unittest.TestLoader()
24
+ if len(sys.argv) > 1 and sys.argv[1] == "--env-only":
25
+ # Run only environment tests
26
+ logger.info("Running environment tests only...")
27
+ test_suite = test_loader.loadTestsFromName("test_env_manip.PackageEnvironmentTests")
28
+ elif len(sys.argv) > 1 and sys.argv[1] == "--remote-only":
29
+ # Run only remote integration tests
30
+ logger.info("Running remote integration tests only...")
31
+ test_suite = test_loader.loadTestsFromName("test_registry_retriever.RegistryRetrieverTests")
32
+ test_suite = test_loader.loadTestsFromName("test_online_package_loader.OnlinePackageLoaderTests")
33
+
34
+ elif len(sys.argv) > 1 and sys.argv[1] == "--registry-online":
35
+ # Run only registry online mode tests
36
+ logger.info("Running registry retriever online mode tests...")
37
+ test_suite = test_loader.loadTestsFromName("test_registry_retriever.RegistryRetrieverTests")
38
+ elif len(sys.argv) > 1 and sys.argv[1] == "--package-online":
39
+ # Run only package loader online mode tests
40
+ logger.info("Running package loader online mode tests...")
41
+ test_suite = test_loader.loadTestsFromName("test_online_package_loader.OnlinePackageLoaderTests")
42
+ elif len(sys.argv) > 1 and sys.argv[1] == "--installer-only":
43
+ # Run only installer interface tests
44
+ logger.info("Running installer interface tests only...")
45
+ test_suite = test_loader.loadTestsFromName("test_installer_base.BaseInstallerTests")
46
+ elif len(sys.argv) > 1 and sys.argv[1] == "--hatch-installer-only":
47
+ # Run only HatchInstaller tests
48
+ logger.info("Running HatchInstaller tests only...")
49
+ test_suite = test_loader.loadTestsFromName("test_hatch_installer.TestHatchInstaller")
50
+ elif len(sys.argv) > 1 and sys.argv[1] == "--python-installer-only":
51
+ # Run only PythonInstaller tests
52
+ logger.info("Running PythonInstaller tests only...")
53
+ test_mocking = test_loader.loadTestsFromName("test_python_installer.TestPythonInstaller")
54
+ test_integration = test_loader.loadTestsFromName("test_python_installer.TestPythonInstallerIntegration")
55
+ test_suite = unittest.TestSuite([test_mocking, test_integration])
56
+ elif len(sys.argv) > 1 and sys.argv[1] == "--python-env-manager-only":
57
+ # Run only PythonEnvironmentManager tests (mocked)
58
+ logger.info("Running PythonEnvironmentManager mocked tests only...")
59
+ test_suite = test_loader.loadTestsFromName("test_python_environment_manager.TestPythonEnvironmentManager")
60
+ elif len(sys.argv) > 1 and sys.argv[1] == "--python-env-manager-integration":
61
+ # Run only PythonEnvironmentManager integration tests (requires conda/mamba)
62
+ logger.info("Running PythonEnvironmentManager integration tests only...")
63
+ test_integration = test_loader.loadTestsFromName("test_python_environment_manager.TestPythonEnvironmentManagerIntegration")
64
+ test_enhanced = test_loader.loadTestsFromName("test_python_environment_manager.TestPythonEnvironmentManagerEnhancedFeatures")
65
+ test_suite = unittest.TestSuite([test_integration, test_enhanced])
66
+ elif len(sys.argv) > 1 and sys.argv[1] == "--python-env-manager-all":
67
+ # Run all PythonEnvironmentManager tests
68
+ logger.info("Running all PythonEnvironmentManager tests...")
69
+ test_mocked = test_loader.loadTestsFromName("test_python_environment_manager.TestPythonEnvironmentManager")
70
+ test_integration = test_loader.loadTestsFromName("test_python_environment_manager.TestPythonEnvironmentManagerIntegration")
71
+ test_enhanced = test_loader.loadTestsFromName("test_python_environment_manager.TestPythonEnvironmentManagerEnhancedFeatures")
72
+ test_suite = unittest.TestSuite([test_mocked, test_integration, test_enhanced])
73
+ elif len(sys.argv) > 1 and sys.argv[1] == "--system-installer-only":
74
+ # Run only SystemInstaller tests
75
+ logger.info("Running SystemInstaller tests only...")
76
+ test_mocking = test_loader.loadTestsFromName("test_system_installer.TestSystemInstaller")
77
+ test_integration = test_loader.loadTestsFromName("test_system_installer.TestSystemInstallerIntegration")
78
+ test_suite = unittest.TestSuite([test_mocking, test_integration])
79
+ elif len(sys.argv) > 1 and sys.argv[1] == "--docker-installer-only":
80
+ # Run only DockerInstaller tests
81
+ logger.info("Running DockerInstaller tests only...")
82
+ test_mocking = test_loader.loadTestsFromName("test_docker_installer.TestDockerInstaller")
83
+ test_integration = test_loader.loadTestsFromName("test_docker_installer.TestDockerInstallerIntegration")
84
+ test_suite = unittest.TestSuite([test_mocking, test_integration])
85
+ elif len(sys.argv) > 1 and sys.argv[1] == "--all-installers":
86
+ # Run all installer tests
87
+ logger.info("Running all installer tests...")
88
+ hatch_tests = test_loader.loadTestsFromName("test_hatch_installer.TestHatchInstaller")
89
+ python_tests_mocking = test_loader.loadTestsFromName("test_python_installer.TestPythonInstaller")
90
+ python_tests_integration = test_loader.loadTestsFromName("test_python_installer.TestPythonInstallerIntegration")
91
+ system_tests = test_loader.loadTestsFromName("test_system_installer.TestSystemInstaller")
92
+ system_tests_integration = test_loader.loadTestsFromName("test_system_installer.TestSystemInstallerIntegration")
93
+ docker_tests = test_loader.loadTestsFromName("test_docker_installer.TestDockerInstaller")
94
+ docker_tests_integration = test_loader.loadTestsFromName("test_docker_installer.TestDockerInstallerIntegration")
95
+
96
+ test_suite = unittest.TestSuite([
97
+ hatch_tests,
98
+ python_tests_mocking,
99
+ python_tests_integration,
100
+ system_tests,
101
+ system_tests_integration,
102
+ docker_tests,
103
+ docker_tests_integration
104
+ ])
105
+ elif len(sys.argv) > 1 and sys.argv[1] == "--registry-only":
106
+ # Run only installer registry tests
107
+ logger.info("Running installer registry tests only...")
108
+ test_suite = test_loader.loadTestsFromName("test_registry.TestInstallerRegistry")
109
+ else:
110
+ # Run all tests
111
+ logger.info("Running all package environment tests...")
112
+ test_suite = test_loader.discover('.', pattern='test_*.py')
113
+
114
+ # Run the tests
115
+ test_runner = unittest.TextTestRunner(verbosity=2)
116
+ result = test_runner.run(test_suite)
117
+
118
+ # Log test results summary
119
+ logger.info(f"Tests run: {result.testsRun}")
120
+ logger.info(f"Errors: {len(result.errors)}")
121
+ logger.info(f"Failures: {len(result.failures)}")
122
+
123
+ # Exit with appropriate status code
124
+ sys.exit(not result.wasSuccessful())
@@ -0,0 +1,122 @@
1
+ """
2
+ Test suite for hatch --version command implementation.
3
+
4
+ This module tests the version command functionality:
5
+ - Version retrieval from importlib.metadata
6
+ - Error handling for PackageNotFoundError
7
+ - CLI version display format
8
+ - Import safety after removing __version__
9
+ - No conflicts with existing flags
10
+
11
+ Tests follow CrackingShells testing standards using wobble framework.
12
+ """
13
+
14
+ import unittest
15
+ import sys
16
+ from pathlib import Path
17
+ from unittest.mock import patch, MagicMock
18
+ from io import StringIO
19
+
20
+ # Add parent directory to path
21
+ sys.path.insert(0, str(Path(__file__).parent.parent))
22
+
23
+ from hatch.cli_hatch import main, get_hatch_version
24
+
25
+ try:
26
+ from wobble.decorators import regression_test, integration_test
27
+ except ImportError:
28
+ # Fallback decorators if wobble not available
29
+ def regression_test(func):
30
+ return func
31
+
32
+ def integration_test(scope="component"):
33
+ def decorator(func):
34
+ return func
35
+ return decorator
36
+
37
+
38
+ class TestVersionCommand(unittest.TestCase):
39
+ """Test suite for hatch --version command implementation."""
40
+
41
+ @regression_test
42
+ def test_get_hatch_version_retrieves_from_metadata(self):
43
+ """Test get_hatch_version() retrieves version from importlib.metadata."""
44
+ with patch('hatch.cli_hatch.version', return_value='0.7.0-dev.3') as mock_version:
45
+ result = get_hatch_version()
46
+
47
+ self.assertEqual(result, '0.7.0-dev.3')
48
+ mock_version.assert_called_once_with('hatch')
49
+
50
+ @regression_test
51
+ def test_get_hatch_version_handles_package_not_found(self):
52
+ """Test get_hatch_version() handles PackageNotFoundError gracefully."""
53
+ from importlib.metadata import PackageNotFoundError
54
+
55
+ with patch('hatch.cli_hatch.version', side_effect=PackageNotFoundError()):
56
+ result = get_hatch_version()
57
+
58
+ self.assertEqual(result, 'unknown (development mode)')
59
+
60
+ @integration_test(scope="component")
61
+ def test_version_command_displays_correct_format(self):
62
+ """Test version command displays correct format via CLI."""
63
+ test_args = ['hatch', '--version']
64
+
65
+ with patch('sys.argv', test_args):
66
+ with patch('hatch.cli_hatch.get_hatch_version', return_value='0.7.0-dev.3'):
67
+ with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
68
+ with self.assertRaises(SystemExit) as cm:
69
+ main()
70
+
71
+ # argparse action='version' exits with code 0
72
+ self.assertEqual(cm.exception.code, 0)
73
+
74
+ # Verify output format: "hatch 0.7.0-dev.3"
75
+ output = mock_stdout.getvalue().strip()
76
+ self.assertRegex(output, r'hatch\s+0\.7\.0-dev\.3')
77
+
78
+ @integration_test(scope="component")
79
+ def test_import_hatch_without_version_attribute(self):
80
+ """Test that importing hatch module works without __version__ attribute."""
81
+ try:
82
+ import hatch
83
+
84
+ # Import should succeed
85
+ self.assertIsNotNone(hatch)
86
+
87
+ # __version__ should not exist (removed in implementation)
88
+ self.assertFalse(hasattr(hatch, '__version__'),
89
+ "hatch.__version__ should not exist after cleanup")
90
+
91
+ except ImportError as e:
92
+ self.fail(f"Failed to import hatch module: {e}")
93
+
94
+ @regression_test
95
+ def test_no_conflict_with_package_version_flag(self):
96
+ """Test that --version (Hatch) doesn't conflict with -v (package version)."""
97
+ # Test package add command with -v flag (package version specification)
98
+ test_args = ['hatch', 'package', 'add', 'test-package', '-v', '1.0.0']
99
+
100
+ with patch('sys.argv', test_args):
101
+ with patch('hatch.cli_hatch.HatchEnvironmentManager') as mock_env:
102
+ mock_env_instance = MagicMock()
103
+ mock_env.return_value = mock_env_instance
104
+ mock_env_instance.add_package_to_environment.return_value = True
105
+
106
+ try:
107
+ main()
108
+ except SystemExit as e:
109
+ # Should execute successfully (exit code 0)
110
+ self.assertEqual(e.code, 0)
111
+
112
+ # Verify package add was called with version argument
113
+ mock_env_instance.add_package_to_environment.assert_called_once()
114
+ call_args = mock_env_instance.add_package_to_environment.call_args
115
+
116
+ # Version argument should be '1.0.0'
117
+ self.assertEqual(call_args[0][2], '1.0.0') # Third positional arg is version
118
+
119
+
120
+ if __name__ == '__main__':
121
+ unittest.main()
122
+
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for base_pkg.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting base_pkg via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for base_pkg.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("base_pkg", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def base_pkg_tool(param: str) -> str:
10
+ """Example tool function for base_pkg.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by base_pkg: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for base_pkg_v2.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting base_pkg_v2 via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for base_pkg_v2.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("base_pkg_v2", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def base_pkg_v2_tool(param: str) -> str:
10
+ """Example tool function for base_pkg_v2.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by base_pkg_v2: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for utility_pkg.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting utility_pkg via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for utility_pkg.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("utility_pkg", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def utility_pkg_tool(param: str) -> str:
10
+ """Example tool function for utility_pkg.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by utility_pkg: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for complex_dep_pkg.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting complex_dep_pkg via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for complex_dep_pkg.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("complex_dep_pkg", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def complex_dep_pkg_tool(param: str) -> str:
10
+ """Example tool function for complex_dep_pkg.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by complex_dep_pkg: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for docker_dep_pkg.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting docker_dep_pkg via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for docker_dep_pkg.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("docker_dep_pkg", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def docker_dep_pkg_tool(param: str) -> str:
10
+ """Example tool function for docker_dep_pkg.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by docker_dep_pkg: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for mixed_dep_pkg.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting mixed_dep_pkg via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for mixed_dep_pkg.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("mixed_dep_pkg", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def mixed_dep_pkg_tool(param: str) -> str:
10
+ """Example tool function for mixed_dep_pkg.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by mixed_dep_pkg: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for python_dep_pkg.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting python_dep_pkg via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for python_dep_pkg.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("python_dep_pkg", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def python_dep_pkg_tool(param: str) -> str:
10
+ """Example tool function for python_dep_pkg.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by python_dep_pkg: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for simple_dep_pkg.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting simple_dep_pkg via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for simple_dep_pkg.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("simple_dep_pkg", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def simple_dep_pkg_tool(param: str) -> str:
10
+ """Example tool function for simple_dep_pkg.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by simple_dep_pkg: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for system_dep_pkg.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting system_dep_pkg via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for system_dep_pkg.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("system_dep_pkg", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def system_dep_pkg_tool(param: str) -> str:
10
+ """Example tool function for system_dep_pkg.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by system_dep_pkg: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()
@@ -0,0 +1,18 @@
1
+ """
2
+ HatchMCP wrapper for circular_dep_pkg.
3
+ """
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ # Add package directory to path
8
+ sys.path.insert(0, str(Path(__file__).parent))
9
+
10
+ from mcp_server import mcp
11
+
12
+ def main():
13
+ """Main entry point for HatchMCP wrapper."""
14
+ print("Starting circular_dep_pkg via HatchMCP wrapper")
15
+ mcp.run()
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,21 @@
1
+ """
2
+ FastMCP server implementation for circular_dep_pkg.
3
+ """
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ mcp = FastMCP("circular_dep_pkg", log_level="WARNING")
7
+
8
+ @mcp.tool()
9
+ def circular_dep_pkg_tool(param: str) -> str:
10
+ """Example tool function for circular_dep_pkg.
11
+
12
+ Args:
13
+ param (str): Example parameter.
14
+
15
+ Returns:
16
+ str: Example result.
17
+ """
18
+ return f"Processed by circular_dep_pkg: {param}"
19
+
20
+ if __name__ == "__main__":
21
+ mcp.run()