mirror of https://github.com/exaloop/codon.git
71 lines
1.6 KiB
Python
71 lines
1.6 KiB
Python
# (c) 2022 Exaloop Inc. All rights reserved.
|
|
|
|
|
|
def system(cmd: str) -> int:
|
|
return _C.system(cmd.c_str())
|
|
|
|
|
|
SEEK_SET = 0
|
|
SEEK_CUR = 1
|
|
SEEK_END = 2
|
|
|
|
|
|
@tuple
|
|
class EnvMap:
|
|
_map: Dict[str, str]
|
|
|
|
def __new__() -> EnvMap:
|
|
return (Dict[str, str](),)
|
|
|
|
def _init_if_needed(self):
|
|
if len(self._map) == 0:
|
|
env = _C.seq_env()
|
|
p = env[0]
|
|
i = 0
|
|
while p:
|
|
s = str.from_ptr(p)
|
|
if s:
|
|
j = 0
|
|
found = False
|
|
while j < len(s):
|
|
if s[j] == "=":
|
|
found = True
|
|
break
|
|
j += 1
|
|
k = s[0:j] if found else s
|
|
v = s[j + 1 :] if found else ""
|
|
self._map[k] = v
|
|
i += 1
|
|
p = env[i]
|
|
|
|
def __getitem__(self, key: str) -> str:
|
|
self._init_if_needed()
|
|
return self._map[key]
|
|
|
|
def __repr__(self) -> str:
|
|
self._init_if_needed()
|
|
return repr(self._map)
|
|
|
|
def __contains__(self, key: str) -> bool:
|
|
self._init_if_needed()
|
|
return key in self._map
|
|
|
|
def __iter__(self) -> Generator[Tuple[str, str]]:
|
|
self._init_if_needed()
|
|
return self._map.items()
|
|
|
|
|
|
environ = EnvMap()
|
|
|
|
|
|
def getenv(key: str, default: str = "") -> str:
|
|
return environ[key] if key in environ else default
|
|
|
|
|
|
def mkdir(name: str, mode: int = 0x1FF) -> int:
|
|
# TODO: use errno
|
|
from C import mkdir(cobj, int) -> int
|
|
ret = mkdir(name.ptr, mode)
|
|
if ret != 0:
|
|
raise OSError("mkdir failed")
|