pjkm.core.models

Submodules

Attributes

Classes

EnvConfig

Describes .env / .env.example variables to scaffold.

SecretsConfig

Describes .secrets / .secrets.example variables to scaffold.

ToolConfig

Describes a tool config file in .config/ directory.

PackageGroup

A curated bundle of dependencies and scaffolded code/config.

ScaffoldedFile

A template fragment to render when a group is selected.

PlatformInfo

Current platform details, used for OS-dependent group filtering.

Archetype

Supported project archetypes.

ProjectConfig

Central configuration describing what the user wants to build.

Phase

Execution phases in strict order.

TaskDefinition

Metadata describing a registered task.

TaskResult

Outcome of executing a single task.

Package Contents

class pjkm.core.models.EnvConfig(/, **data)[source]

Bases: pydantic.BaseModel

Describes .env / .env.example variables to scaffold.

Parameters:

data (Any)

variables: dict[str, str] = None
comments: dict[str, str] = None
class pjkm.core.models.SecretsConfig(/, **data)[source]

Bases: pydantic.BaseModel

Describes .secrets / .secrets.example variables to scaffold.

Parameters:

data (Any)

variables: dict[str, str] = None
comments: dict[str, str] = None
class pjkm.core.models.ToolConfig(/, **data)[source]

Bases: pydantic.BaseModel

Describes a tool config file in .config/ directory.

Parameters:

data (Any)

filename: str
content: str
description: str = ''
class pjkm.core.models.PackageGroup(/, **data)[source]

Bases: pydantic.BaseModel

A curated bundle of dependencies and scaffolded code/config.

Parameters:

data (Any)

id: str
name: str
description: str = ''
category: str = 'Core Dev'
archetypes: list[str] = None
requires_groups: list[str] = None
platform_filter: str | None = None
dependencies: dict[str, list[str]] = None
scaffolded_files: list[ScaffoldedFile] = None
pyproject_tool_config: dict[str, dict] = None
class pjkm.core.models.ScaffoldedFile(/, **data)[source]

Bases: pydantic.BaseModel

A template fragment to render when a group is selected.

Parameters:

data (Any)

template_fragment: str
destination: str
description: str = ''
conditions: dict[str, bool | str] = None
class pjkm.core.models.PlatformInfo(/, **data)[source]

Bases: pydantic.BaseModel

Current platform details, used for OS-dependent group filtering.

Parameters:

data (Any)

os: str = None
arch: str = None
property is_macos: bool
Return type:

bool

property is_linux: bool
Return type:

bool

has_tool(name)[source]

Check if a CLI tool is available on PATH.

Parameters:

name (str)

Return type:

bool

class pjkm.core.models.Archetype[source]

Bases: enum.StrEnum

Supported project archetypes.

SINGLE_PACKAGE = 'single_package'
SERVICE = 'service'
POLY_REPO = 'poly_repo'
SCRIPT_TOOL = 'script_tool'
class pjkm.core.models.ProjectConfig(/, **data)[source]

Bases: pydantic.BaseModel

Central configuration describing what the user wants to build.

Parameters:

data (Any)

project_name: str = None
archetype: Archetype
python_version: str = None
author_name: str = None
author_email: str = None
license: str = None
description: str = None
selected_groups: list[str] = None
target_dir: pathlib.Path = None
dry_run: bool = False
template_overrides: dict[str, str] = None
property project_slug: str

Normalized project name for use in Python package paths.

Return type:

str

property project_dir: pathlib.Path

Full path to the project directory that will be created.

Return type:

pathlib.Path

classmethod validate_python_version(v)[source]
Parameters:

v (str)

Return type:

str

class pjkm.core.models.Phase[source]

Bases: enum.IntEnum

Execution phases in strict order.

SCAFFOLD = 1
CONFIGURE = 2
INSTALL = 3
VERIFY = 4
class pjkm.core.models.TaskDefinition(/, **data)[source]

Bases: pydantic.BaseModel

Metadata describing a registered task.

Parameters:

data (Any)

id: str
phase: Phase
depends_on: list[str] = None
description: str = ''
pjkm.core.models.TaskEvent[source]
class pjkm.core.models.TaskResult(/, **data)[source]

Bases: pydantic.BaseModel

Outcome of executing a single task.

Parameters:

data (Any)

task_id: str
success: bool
message: str = ''
files_created: list[str] = None
files_modified: list[str] = None
duration_ms: float = 0.0
skipped: bool = False