-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcategorymgr.py
38 lines (31 loc) · 926 Bytes
/
categorymgr.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import pathlib
from importlib import import_module
import categorybase as base
def load(obj: type):
mro=list(obj.__mro__)[:-1][::-1]
if mro[0]!=base.BaseCategory:
return
del mro[0]
cur=base.root
for i in mro:
if not isinstance(i,base.CategoryMetaClass):
continue
try:
cur=cur.find(i)
except ValueError:
cur.childrens.append(base.Node(i, []))
cur=cur.childrens[-1]
def _search(path):
for i in path.glob('*'):
if i.name=='__pycache__':
continue
if i.is_dir():
_search(i)
else:
mod=import_module(i.as_posix().replace('/','.')[:-3])
for j in dir(mod):
if isinstance(getattr(mod,j),type):
load(getattr(mod,j))
def search():
root=pathlib.Path(r'.\categories')
_search(root)