Compare commits

..

2 commits

Author SHA1 Message Date
Jordan ⌨️ 56f252f588 feat: Plugins system allows __init__.py for relative imports 2023-11-25 12:28:37 +01:00
Jordan ⌨️ a9ef90c04e cleanup: remove unused assignation and if stmt
the function doesn't return anything (see function signature)
2023-11-25 12:17:58 +01:00
6 changed files with 31 additions and 32 deletions

View file

@ -13,12 +13,12 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.11'
python-version: '3.x'
- name: Install dependencies
run: |

View file

@ -20,14 +20,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.11'
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip

View file

@ -203,10 +203,8 @@ def build(
all = False
shell.mkdir(target.builddir)
ninjaPath = os.path.join(target.builddir, "build.ninja")
if not os.path.exists(ninjaPath):
with open(ninjaPath, "w") as f:
gen(f, target, registry)
with open(ninjaPath, "w") as f:
gen(f, target, registry)
if components is None:
all = True
@ -230,9 +228,10 @@ def build(
)
outs = list(map(lambda p: str(p.path), products))
shell.exec("ninja", "-f", ninjaPath, *(outs if not all else []))
if all:
shell.exec("ninja", "-f", ninjaPath)
else:
shell.exec("ninja", "-f", ninjaPath, *outs)
return products
@ -244,9 +243,9 @@ def buildCmd(args: cli.Args):
registry = model.Registry.use(args)
target = model.Target.use(args)
componentSpec = args.consumeArg()
component = None
if componentSpec is not None:
component = registry.lookup(componentSpec, model.Component)
if componentSpec is None:
raise RuntimeError("No component specified")
component = registry.lookup(componentSpec, model.Component)
build(target, registry, component)[0]

View file

@ -71,7 +71,7 @@ class Manifest(DataClassJsonMixin):
"""
Return the directory of the manifest
"""
return os.path.relpath(os.path.dirname(self.path), Path.cwd())
return os.path.dirname(self.path)
def subpath(self, path) -> Path:
return Path(self.dirname()) / path
@ -121,18 +121,19 @@ class Project(Manifest):
@staticmethod
def ensure() -> "Project":
"""
Ensure that a project exists in the current directory or any parent directory
and chdir to the root of the project.
"""
project = Project.topmost()
if project is None:
raise RuntimeError(
"No project found in this directory or any parent directory"
)
os.chdir(project.dirname())
return project
def chdir(self):
"""
Change the current working directory to the root of the project
"""
os.chdir(self.dirname())
@staticmethod
def at(path: Path) -> Optional["Project"]:
projectManifest = Manifest.tryLoad(path / "project")

View file

@ -1,5 +1,6 @@
import os
import logging
import os
import sys
from . import shell, model, const
@ -17,6 +18,7 @@ def load(path: str):
return None
module = importlib.module_from_spec(spec)
sys.modules["plugin"] = module
spec.loader.exec_module(module)
@ -33,11 +35,11 @@ def loadAll():
for dirname in paths:
pluginDir = os.path.join(project.dirname(), dirname, const.META_DIR, "plugins")
initFile = os.path.join(pluginDir, "__init__.py")
for files in shell.readdir(pluginDir):
if files.endswith(".py"):
plugin = load(os.path.join(pluginDir, files))
if plugin:
_logger.info(f"Loaded plugin {plugin.name}")
plugin.init()
if os.path.isfile(initFile):
load(initFile)
else:
for files in shell.readdir(pluginDir):
if files.endswith(".py"):
load(os.path.join(pluginDir, files))

View file

@ -12,7 +12,7 @@ authors = [
{ name = "Cute Engineering", email = "contact@cute.engineering" },
]
readme = "README.md"
requires-python = ">=3.11"
requires-python = ">=3.10"
license = { text = "MIT" }
dynamic = ["version", "dependencies"]