Program
cuprum/program.py, the source of Program
Program = typ.NewType('Program', str)
API reference · 02 of 8
The programs Cuprum may build commands for, the projects that group them, and the defaults it ships.
ProgramProgram = typ.NewType('Program', str)
ProgramCatalogueclass ProgramCatalogue(
*,
projects: cabc.Iterable[ProjectSettings],
) -> None
Catalogue of curated programs with a default allowlist.
classmethod ProgramCatalogue.from_programs
def from_programs(
*programs: Program | str,
name: str | None = None,
documentation_locations: tuple[str, ...] = (),
noise_rules: tuple[str, ...] = (),
) -> ProgramCatalogue
Build a single-project catalogue from the given programs.
*programs Program | strname str | None, optionaldocumentation_locations tuple[str, ...], optionalnoise_rules tuple[str, ...], optionalValueErrorDuplicateProgramError>>> from cuprum import ProgramCatalogue
>>> catalogue = ProgramCatalogue.from_programs("git", "cargo")
>>> sorted(catalogue.allowlist)
['cargo', 'git']
>>> catalogue.lookup("git").project_name
'git-cargo'
classmethod ProgramCatalogue.from_project
def from_project(settings: ProjectSettings) -> ProgramCatalogue
Build a catalogue containing a supplied project.
settings ProjectSettingsDuplicateProgramErrorsettings declares a program more than once.>>> from cuprum import Program, ProgramCatalogue, ProjectSettings
>>> settings = ProjectSettings(name="tools", programs=(Program("git"),))
>>> ProgramCatalogue.from_project(settings).is_allowed("git")
True
property ProgramCatalogue.allowlist
allowlist: frozenset[Program]
The curated allowlist of programs.
method ProgramCatalogue.is_allowed
def is_allowed(program: Program | str) -> bool
Return True when the program is part of the default allowlist.
program Program | strmethod ProgramCatalogue.lookup
def lookup(program: Program | str) -> ProgramEntry
Resolve a program into its entry, blocking unknown executables.
program Program | strUnknownProgramErrormethod ProgramCatalogue.project_for
def project_for(program: Program | str) -> ProjectSettings
Return the owning project for the given program.
program Program | strUnknownProgramErrorproperty ProgramCatalogue.visible_settings
visible_settings: _VisibleSettings
Cached, read-only settings indexed by project name.
ProgramEntryclass ProgramEntry(program: Program, project: ProjectSettings)
A resolved program with its owning project metadata.
field ProgramEntry.program
program: Program
field ProgramEntry.project
project: ProjectSettings
property ProgramEntry.project_name
project_name: str
The owning project's name.
ProjectSettingsclass ProjectSettings(
name: str,
programs: tuple[Program, ...],
documentation_locations: tuple[str, ...] = (),
noise_rules: tuple[str, ...] = (),
)
Metadata shared by a project's curated programs.
documentation_locations and noise_rules default to empty tuples so a small script can declare a project from its name and programs alone.
name strprograms tuple[Program, ...]documentation_locations tuple[str, ...]visible_settings. Empty means no documentation references are declared.noise_rules tuple[str, ...]field ProjectSettings.name
name: str
field ProjectSettings.programs
programs: tuple[Program, ...]
field ProjectSettings.documentation_locations
documentation_locations: tuple[str, ...]
field ProjectSettings.noise_rules
noise_rules: tuple[str, ...]
method ProjectSettings.owns
def owns(program: Program) -> bool
Return True when the program belongs to this project.
program ProgramDEFAULT_CATALOGUEDEFAULT_CATALOGUE = ProgramCatalogue(projects=DEFAULT_PROJECTS)
DEFAULT_PROJECTSDEFAULT_PROJECTS = tuple((ProjectSettings(name=name, programs=programs, documentation_locations=documentation_locations, noise_rules=noise_rules) for name, programs, documentation_locations, noise_rules in DEFAULT_PROJECT_DATA))
CORE_OPS_PROJECTCORE_OPS_PROJECT = 'core-ops'
DOCUMENTATION_PROJECTDOCUMENTATION_PROJECT = 'docs'
ECHOECHO = Program('echo')
GITGIT = Program('git')
LSLS = Program('ls')
RSYNCRSYNC = Program('rsync')
TARTAR = Program('tar')
DOC_TOOLDOC_TOOL = Program('mdbook')
PACKAGE_NAMEPACKAGE_NAME = 'cuprum'
cuprum.cataloguefrom cuprum import catalogue
Curated catalogue of allowed executables and their metadata.
Example: >>> from cuprum.catalogue import DEFAULT_CATALOGUE, ECHO >>> entry = DEFAULT_CATALOGUE.lookup(ECHO) >>> (entry.project_name, entry.program) ('core-ops', 'echo')
exception cuprum.catalogue.DuplicateProgramError
class DuplicateProgramError(program: Program, owner: str) -> None
Raised when a program is claimed by more than one project.
program Programowner strprogram Programowner strexception cuprum.catalogue.DuplicateProjectError
class DuplicateProjectError(project_name: str) -> None
Raised when a project name is registered more than once.
project_name strproject_name str