Source code for bukka.coding.write_pyproject_toml

from bukka.utils.files.file_manager import FileManager
from bukka.coding.utils.template_handler import TemplateBaseClass
from typing import Any

# Minimal pyproject.toml template for pip-installable ML projects
PYPROJECT_TOML_TEMPLATE = '''
# pyproject.toml - Generated by Bukka
# This file makes your project pip-installable with: pip install -e .

[project]
name = "{project_name}"
version = "0.1.0"
requires-python = ">=3.10"
dynamic = ["dependencies"]

[tool.setuptools.dynamic]
dependencies = {{file = ["{requirements_file}"]}}

[build-system]
requires = ["setuptools>=77.0.0"]
build-backend = "setuptools.build_meta"

[tool.setuptools.packages.find]
where = ["."]
include = ["pipelines*", "utils*"]
'''


[docs] class PyprojectTomlWriter(TemplateBaseClass): """ Writes a pyproject.toml file to make Bukka-generated projects pip-installable. This class extends TemplateBaseClass to generate a pyproject.toml file with package metadata, dependencies, and build configuration. The generated file enables users to run 'pip install -e .' in the project directory. Parameters ---------- file_manager : FileManager The FileManager instance containing all project paths. project_name : str, optional The name of the project. Default is "bukka_project". target_column : str, optional The name of the target column for ML tasks. Default is "target". Examples -------- >>> from bukka.logistics.files.file_manager import FileManager >>> from pathlib import Path >>> file_manager = FileManager( ... project_path=Path("my_project"), ... orig_dataset=Path("data.csv") ... ) >>> writer = PyprojectTomlWriter( ... file_manager=file_manager, ... project_name="my_ml_project", ... target_column="label" ... ) >>> writer.write_class() # Writes pyproject.toml to project root >>> # Custom configuration >>> writer = PyprojectTomlWriter( ... file_manager=file_manager, ... project_name="classification_project", ... target_column="churn" ... ) >>> writer.write_class() """
[docs] def __init__( self, file_manager: FileManager, project_name: str = "bukka_project" ) -> None: """ Initialize the PyprojectTomlWriter with file manager and configuration. Parameters ---------- file_manager : FileManager The FileManager instance containing all project paths. project_name : str, optional The name of the project. Default is "bukka_project". Examples -------- >>> file_manager = FileManager(Path("project"), Path("data.csv")) >>> writer = PyprojectTomlWriter(file_manager, project_name="demo") """ self.file_manager = file_manager # Build kwargs dictionary with all template values kwargs: dict[str, Any] = { "project_name": project_name, "requirements_file": file_manager.requirements_path.name } expected_args = ["project_name", "requirements_file"] # Initialize parent class with template and paths super().__init__( template=PYPROJECT_TOML_TEMPLATE, output_path=file_manager.pyproject_toml_path, kwargs=kwargs, expected_args=expected_args )