mirror of
https://git.sr.ht/~kivikakk/niar
synced 2024-12-22 17:22:23 +00:00
project: add NIAR_WORKING_DIRECTORY support.
This commit is contained in:
parent
96df013632
commit
bf3738f777
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue