1
0
Fork 0
mirror of https://git.sr.ht/~kivikakk/niar synced 2024-12-22 12:02:24 +00:00

project: add NIAR_WORKING_DIRECTORY support.

This commit is contained in:
Asherah Connor 2024-08-08 09:49:33 +03:00
parent 96df013632
commit bf3738f777
2 changed files with 20 additions and 10 deletions

View file

@ -2,6 +2,10 @@
## 0.1.3 (unreleased) ## 0.1.3 (unreleased)
New:
* project: `NIAR_WORKING_DIRECTORY` can be used to override the origin.
## 0.1.2 ## 0.1.2
New: New:

View file

@ -1,3 +1,4 @@
import os
import sys import sys
from pathlib import Path from pathlib import Path
from typing import Optional from typing import Optional
@ -100,16 +101,21 @@ class Project:
] ]
def __init_subclass__(cls): def __init_subclass__(cls):
# We expect to be called from project-root/module/__init.py__ or similar; if origin := os.getenv("NIAR_WORKING_DIRECTORY"):
# cls.origin is project-root. Keep going up until we find pyproject.toml. cls.origin = Path(origin).absolute()
origin = Path(sys._getframe(1).f_code.co_filename).absolute().parent else:
while True: # We expect to be called from project-root/module/__init.py__ or similar;
if (origin / "pyproject.toml").is_file(): # cls.origin is project-root. Keep going up until we find pyproject.toml.
cls.origin = origin origin = Path(sys._getframe(1).f_code.co_filename).absolute().parent
break while True:
if not any(origin.parents): if (origin / "pyproject.toml").is_file():
assert False, "could not find pyproject.toml" cls.origin = origin
origin = origin.parent break
if not any(origin.parents):
assert False, "could not find pyproject.toml"
origin = origin.parent
os.chdir(cls.origin)
extras = cls.__dict__.keys() - {"__module__", "__doc__", "origin"} extras = cls.__dict__.keys() - {"__module__", "__doc__", "origin"}
for prop in cls.PROPS: for prop in cls.PROPS: