Removed the "manifest" suffix from classes names in the model.
This commit is contained in:
		
							parent
							
								
									9a962e825e
								
							
						
					
					
						commit
						3a78537dff
					
				
					 3 changed files with 36 additions and 43 deletions
				
			
		| 
						 | 
				
			
			@ -5,9 +5,9 @@ import os
 | 
			
		|||
import logging
 | 
			
		||||
 | 
			
		||||
from cutekit.model import (
 | 
			
		||||
    ProjectManifest,
 | 
			
		||||
    TargetManifest,
 | 
			
		||||
    ComponentManifest,
 | 
			
		||||
    Project,
 | 
			
		||||
    Target,
 | 
			
		||||
    Component,
 | 
			
		||||
    Props,
 | 
			
		||||
    Type,
 | 
			
		||||
    Tool,
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +19,7 @@ _logger = logging.getLogger(__name__)
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class IContext(Protocol):
 | 
			
		||||
    target: TargetManifest
 | 
			
		||||
    target: Target
 | 
			
		||||
 | 
			
		||||
    def builddir(self) -> str:
 | 
			
		||||
        ...
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@ class IContext(Protocol):
 | 
			
		|||
class ComponentInstance:
 | 
			
		||||
    enabled: bool = True
 | 
			
		||||
    disableReason = ""
 | 
			
		||||
    manifest: ComponentManifest
 | 
			
		||||
    manifest: Component
 | 
			
		||||
    sources: list[str] = []
 | 
			
		||||
    res: list[str] = []
 | 
			
		||||
    resolved: list[str] = []
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ class ComponentInstance:
 | 
			
		|||
        self,
 | 
			
		||||
        enabled: bool,
 | 
			
		||||
        disableReason: str,
 | 
			
		||||
        manifest: ComponentManifest,
 | 
			
		||||
        manifest: Component,
 | 
			
		||||
        sources: list[str],
 | 
			
		||||
        res: list[str],
 | 
			
		||||
        resolved: list[str],
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +103,7 @@ class ComponentInstance:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class Context(IContext):
 | 
			
		||||
    target: TargetManifest
 | 
			
		||||
    target: Target
 | 
			
		||||
    instances: list[ComponentInstance]
 | 
			
		||||
    tools: Tools
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +111,7 @@ class Context(IContext):
 | 
			
		|||
        return filter(lambda x: x.enabled, self.instances)
 | 
			
		||||
 | 
			
		||||
    def __init__(
 | 
			
		||||
        self, target: TargetManifest, instances: list[ComponentInstance], tools: Tools
 | 
			
		||||
        self, target: Target, instances: list[ComponentInstance], tools: Tools
 | 
			
		||||
    ):
 | 
			
		||||
        self.target = target
 | 
			
		||||
        self.instances = instances
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +143,7 @@ class Context(IContext):
 | 
			
		|||
        return os.path.join(const.BUILD_DIR, f"{self.target.id}-{self.hashid()[:8]}")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def loadAllTargets() -> list[TargetManifest]:
 | 
			
		||||
def loadAllTargets() -> list[Target]:
 | 
			
		||||
    projectRoot = project.root()
 | 
			
		||||
    if projectRoot is None:
 | 
			
		||||
        return []
 | 
			
		||||
| 
						 | 
				
			
			@ -159,42 +159,40 @@ def loadAllTargets() -> list[TargetManifest]:
 | 
			
		|||
    ret = []
 | 
			
		||||
    for entry in paths:
 | 
			
		||||
        files = shell.find(entry, ["*.json"])
 | 
			
		||||
        ret += list(map(lambda path: TargetManifest(jexpr.evalRead(path), path), files))
 | 
			
		||||
        ret += list(map(lambda path: Target(jexpr.evalRead(path), path), files))
 | 
			
		||||
 | 
			
		||||
    return ret
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def loadProject(path: str) -> ProjectManifest:
 | 
			
		||||
def loadProject(path: str) -> Project:
 | 
			
		||||
    path = os.path.join(path, "project.json")
 | 
			
		||||
    return ProjectManifest(jexpr.evalRead(path), path)
 | 
			
		||||
    return Project(jexpr.evalRead(path), path)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def loadTarget(id: str) -> TargetManifest:
 | 
			
		||||
def loadTarget(id: str) -> Target:
 | 
			
		||||
    try:
 | 
			
		||||
        return next(filter(lambda t: t.id == id, loadAllTargets()))
 | 
			
		||||
    except StopIteration:
 | 
			
		||||
        raise RuntimeError(f"Target '{id}' not found")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def loadAllComponents() -> list[ComponentManifest]:
 | 
			
		||||
def loadAllComponents() -> list[Component]:
 | 
			
		||||
    files = shell.find(const.SRC_DIR, ["manifest.json"])
 | 
			
		||||
    files += shell.find(const.EXTERN_DIR, ["manifest.json"])
 | 
			
		||||
 | 
			
		||||
    return list(map(lambda path: ComponentManifest(jexpr.evalRead(path), path), files))
 | 
			
		||||
    return list(map(lambda path: Component(jexpr.evalRead(path), path), files))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def filterDisabled(
 | 
			
		||||
    components: list[ComponentManifest], target: TargetManifest
 | 
			
		||||
) -> tuple[list[ComponentManifest], list[ComponentManifest]]:
 | 
			
		||||
    components: list[Component], target: Target
 | 
			
		||||
) -> tuple[list[Component], list[Component]]:
 | 
			
		||||
    return list(filter(lambda c: c.isEnabled(target)[0], components)), list(
 | 
			
		||||
        filter(lambda c: not c.isEnabled(target)[0], components)
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def providerFor(
 | 
			
		||||
    what: str, components: list[ComponentManifest]
 | 
			
		||||
) -> tuple[Optional[str], str]:
 | 
			
		||||
    result: list[ComponentManifest] = list(filter(lambda c: c.id == what, components))
 | 
			
		||||
def providerFor(what: str, components: list[Component]) -> tuple[Optional[str], str]:
 | 
			
		||||
    result: list[Component] = list(filter(lambda c: c.id == what, components))
 | 
			
		||||
 | 
			
		||||
    if len(result) == 0:
 | 
			
		||||
        # Try to find a provider
 | 
			
		||||
| 
						 | 
				
			
			@ -213,7 +211,7 @@ def providerFor(
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def resolveDeps(
 | 
			
		||||
    componentSpec: str, components: list[ComponentManifest], target: TargetManifest
 | 
			
		||||
    componentSpec: str, components: list[Component], target: Target
 | 
			
		||||
) -> tuple[bool, str, list[str]]:
 | 
			
		||||
    mapping = dict(map(lambda c: (c.id, c), components))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -251,7 +249,7 @@ def resolveDeps(
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def instanciate(
 | 
			
		||||
    componentSpec: str, components: list[ComponentManifest], target: TargetManifest
 | 
			
		||||
    componentSpec: str, components: list[Component], target: Target
 | 
			
		||||
) -> Optional[ComponentInstance]:
 | 
			
		||||
    manifest = next(filter(lambda c: c.id == componentSpec, components))
 | 
			
		||||
    wildcards = set(chain(*map(lambda rule: rule.fileIn, rules.rules.values())))
 | 
			
		||||
| 
						 | 
				
			
			@ -266,9 +264,7 @@ def instanciate(
 | 
			
		|||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def instanciateDisabled(
 | 
			
		||||
    component: ComponentManifest, target: TargetManifest
 | 
			
		||||
) -> ComponentInstance:
 | 
			
		||||
def instanciateDisabled(component: Component, target: Target) -> ComponentInstance:
 | 
			
		||||
    return ComponentInstance(
 | 
			
		||||
        enabled=False,
 | 
			
		||||
        disableReason=component.isEnabled(target)[1],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
from typing import Callable
 | 
			
		||||
from cutekit.model import TargetManifest, Tools
 | 
			
		||||
from cutekit.model import Target, Tools
 | 
			
		||||
 | 
			
		||||
Mixin = Callable[[TargetManifest, Tools], Tools]
 | 
			
		||||
Mixin = Callable[[Target, Tools], Tools]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def patchToolArgs(tools: Tools, toolSpec: str, args: list[str]):
 | 
			
		||||
| 
						 | 
				
			
			@ -12,20 +12,17 @@ def prefixToolCmd(tools: Tools, toolSpec: str, prefix: str):
 | 
			
		|||
    tools[toolSpec].cmd = prefix + " " + tools[toolSpec].cmd
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def mixinCache(target: TargetManifest, tools: Tools) -> Tools:
 | 
			
		||||
def mixinCache(target: Target, tools: Tools) -> Tools:
 | 
			
		||||
    prefixToolCmd(tools, "cc", "ccache")
 | 
			
		||||
    prefixToolCmd(tools, "cxx", "ccache")
 | 
			
		||||
    return tools
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def makeMixinSan(san: str) -> Mixin:
 | 
			
		||||
    def mixinSan(target: TargetManifest, tools: Tools) -> Tools:
 | 
			
		||||
        patchToolArgs(
 | 
			
		||||
            tools, "cc", [f"-fsanitize={san}"])
 | 
			
		||||
        patchToolArgs(
 | 
			
		||||
            tools, "cxx", [f"-fsanitize={san}"])
 | 
			
		||||
        patchToolArgs(
 | 
			
		||||
            tools, "ld", [f"-fsanitize={san}"])
 | 
			
		||||
    def mixinSan(target: Target, tools: Tools) -> Tools:
 | 
			
		||||
        patchToolArgs(tools, "cc", [f"-fsanitize={san}"])
 | 
			
		||||
        patchToolArgs(tools, "cxx", [f"-fsanitize={san}"])
 | 
			
		||||
        patchToolArgs(tools, "ld", [f"-fsanitize={san}"])
 | 
			
		||||
 | 
			
		||||
        return tools
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +30,7 @@ def makeMixinSan(san: str) -> Mixin:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def makeMixinOptimize(level: str) -> Mixin:
 | 
			
		||||
    def mixinOptimize(target: TargetManifest, tools: Tools) -> Tools:
 | 
			
		||||
    def mixinOptimize(target: Target, tools: Tools) -> Tools:
 | 
			
		||||
        patchToolArgs(tools, "cc", [f"-O{level}"])
 | 
			
		||||
        patchToolArgs(tools, "cxx", [f"-O{level}"])
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +39,7 @@ def makeMixinOptimize(level: str) -> Mixin:
 | 
			
		|||
    return mixinOptimize
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def mixinDebug(target: TargetManifest, tools: Tools) -> Tools:
 | 
			
		||||
def mixinDebug(target: Target, tools: Tools) -> Tools:
 | 
			
		||||
    patchToolArgs(tools, "cc", ["-g", "-gdwarf-4"])
 | 
			
		||||
    patchToolArgs(tools, "cxx", ["-g", "-gdwarf-4"])
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -50,7 +47,7 @@ def mixinDebug(target: TargetManifest, tools: Tools) -> Tools:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def makeMixinTune(tune: str) -> Mixin:
 | 
			
		||||
    def mixinTune(target: TargetManifest, tools: Tools) -> Tools:
 | 
			
		||||
    def mixinTune(target: Target, tools: Tools) -> Tools:
 | 
			
		||||
        patchToolArgs(tools, "cc", [f"-mtune={tune}"])
 | 
			
		||||
        patchToolArgs(tools, "cxx", [f"-mtune={tune}"])
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,7 +89,7 @@ class Extern:
 | 
			
		|||
        return f"Extern({self.git})"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ProjectManifest(Manifest):
 | 
			
		||||
class Project(Manifest):
 | 
			
		||||
    description: str = ""
 | 
			
		||||
    extern: dict[str, Extern] = {}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -159,7 +159,7 @@ class Tool:
 | 
			
		|||
Tools = dict[str, Tool]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TargetManifest(Manifest):
 | 
			
		||||
class Target(Manifest):
 | 
			
		||||
    props: Props
 | 
			
		||||
    tools: Tools
 | 
			
		||||
    routing: dict[str, str]
 | 
			
		||||
| 
						 | 
				
			
			@ -219,7 +219,7 @@ class TargetManifest(Manifest):
 | 
			
		|||
        return defines
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ComponentManifest(Manifest):
 | 
			
		||||
class Component(Manifest):
 | 
			
		||||
    decription: str = "(No description)"
 | 
			
		||||
    props: Props = {}
 | 
			
		||||
    tools: Tools = {}
 | 
			
		||||
| 
						 | 
				
			
			@ -264,7 +264,7 @@ class ComponentManifest(Manifest):
 | 
			
		|||
    def __repr__(self):
 | 
			
		||||
        return f"ComponentManifest({self.id})"
 | 
			
		||||
 | 
			
		||||
    def isEnabled(self, target: TargetManifest) -> tuple[bool, str]:
 | 
			
		||||
    def isEnabled(self, target: Target) -> tuple[bool, str]:
 | 
			
		||||
        for k, v in self.enableIf.items():
 | 
			
		||||
            if k not in target.props:
 | 
			
		||||
                _logger.info(f"Component {self.id} disabled by missing {k} in target")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue