dunlp commited on
Commit
3b83fd0
1 Parent(s): a996c52

Upload 5 files

Browse files
Files changed (5) hide show
  1. utils/fileSelect.py +11 -0
  2. utils/files.py +61 -0
  3. utils/input.py +40 -0
  4. utils/options.py +44 -0
  5. utils/steps.py +39 -0
utils/fileSelect.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from tkinter import Tk
2
+ from tkinter.filedialog import askdirectory
3
+
4
+
5
+ def getDirectory(**args):
6
+ title = args.get("title", None)
7
+ Tk().withdraw()
8
+ return askdirectory(title=title)
9
+
10
+
11
+ # getDirectory()
utils/files.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from os import listdir, makedirs
2
+ from os.path import isdir, isfile, join
3
+ from re import search, IGNORECASE
4
+ from shutil import copy
5
+
6
+
7
+ def getFilesWith(path: str, reg: str):
8
+ if not isdir(path):
9
+ print(path, "is not a valid path")
10
+ return None
11
+ content = listdir(path)
12
+ if len(content) == 0:
13
+ print(path, "has no content")
14
+ return None
15
+ files = [f for f in content if isfile(join(path, f)) and search(reg, f, IGNORECASE)]
16
+ if len(files) == 0:
17
+ print(path, "contains no", reg)
18
+ return None
19
+ return files
20
+
21
+
22
+ def createNewFolders(dirs: list):
23
+ for d in dirs:
24
+ if not isdir(d):
25
+ makedirs(d)
26
+ else:
27
+ print("directory already exists", d)
28
+
29
+
30
+ def createNewTemplates(objs, templatesDir, regTemplate, root):
31
+ templatefiles = getFilesWith(templatesDir, regTemplate)
32
+ for k in objs:
33
+ regPhase = r""
34
+ match k:
35
+ case "(i)SAT":
36
+ regPhase = r"sat"
37
+ case "iFAT":
38
+ regPhase = r"fat"
39
+
40
+ files = [f for f in templatefiles if search(regPhase, f, IGNORECASE)]
41
+ if len(files) == 0:
42
+ print("phase %s has no templates" % k)
43
+ continue
44
+
45
+ for o in objs[k]:
46
+ targetLocation = join(root, o)
47
+ tlFiles = getFilesWith(targetLocation, regPhase)
48
+
49
+ if tlFiles:
50
+ print(k, "files already exist in:", targetLocation)
51
+ print("--------------------")
52
+ [print("|-",f) for f in tlFiles]
53
+ print("--------------------")
54
+ continue
55
+
56
+ for f in files:
57
+ templatepath = join(templatesDir, f)
58
+ targetpath = targetLocation
59
+ if search(r"hut_\d{4}[a-zA-Z]{2}", f, IGNORECASE):
60
+ targetpath = join(targetLocation, f[:4] + o + f[10:])
61
+ copy(templatepath, targetpath)
utils/input.py ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from utils.options import *
2
+
3
+ keys = {
4
+ "ifat": 0,
5
+ "if": 0,
6
+ "f": 0,
7
+ "isat": 1,
8
+ "(i)sat": 1,
9
+ "is": 1,
10
+ "s": 1,
11
+ "all": 2,
12
+ "a": 2,
13
+ }
14
+
15
+
16
+ def validatedPhaseInput():
17
+ inputPhase = None
18
+ while inputPhase is None:
19
+ printOptions()
20
+ inputPhase = input()
21
+
22
+ if inputPhase.isnumeric():
23
+ inputPhase = int(inputPhase)
24
+ if inputPhase not in range(len(inputPhases)):
25
+ print("\n", inputPhase, "is not a valid option")
26
+ inputPhase = None
27
+ else:
28
+ return inputPhases[inputPhase]
29
+ else:
30
+ inputPhase = inputPhase.lower()
31
+ if inputPhase not in keys:
32
+ print("\n", inputPhase, "is not a valid option")
33
+ inputPhase = None
34
+ else:
35
+ return inputPhases[keys[inputPhase]]
36
+
37
+ print(
38
+ "Something went seriously wrong, please consult the maintainer of the codebase."
39
+ )
40
+ return inputPhase
utils/options.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from re import search
2
+
3
+ phases = ["iFAT", "(i)SAT"]
4
+
5
+ inputPhases = {**{i: k for i, k in enumerate(phases)}, **{len(phases): "All"}}
6
+
7
+ exitinput = {"no", "n", "0"}
8
+
9
+
10
+ def printOptions():
11
+ print("\nchoose one of the following options;\n")
12
+ for key in inputPhases:
13
+ print("[%d] %s" % (key, inputPhases[key]))
14
+ print()
15
+
16
+
17
+ def getObjectsPerPhase(phase: str = "All"):
18
+ f = open("./objecten.txt", "r")
19
+ t = f.read().split("\n\n")
20
+ f.close()
21
+
22
+ objs = {p: [] for p in phases}
23
+ if phase in phases:
24
+ objs = {phase:[]}
25
+
26
+ regObject = r"\d{4}[a-zA-Z]{2}"
27
+ for g in t:
28
+ ls = g.split("\n")
29
+ k = ls[0]
30
+ if k in objs:
31
+ objs[k] = ls[1::]
32
+ else:
33
+ print("key [%s] is not recognized" % k)
34
+
35
+ objs = {k: objs[k] for k in objs if objs[k]}
36
+
37
+ for k in objs:
38
+ for i, o in enumerate(objs[k]):
39
+ m = search(regObject, o)
40
+ if not m:
41
+ continue
42
+ objs[k][i] = m.group(0)
43
+
44
+ return objs
utils/steps.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from utils.options import *
2
+ from utils.fileSelect import *
3
+ from utils.files import *
4
+ from utils.input import *
5
+
6
+ from os.path import join, realpath
7
+ from os import startfile
8
+
9
+ regTemplate = r'template'
10
+
11
+ def choosePhase(): return validatedPhaseInput()
12
+
13
+ def getTemplatesDir():
14
+ p = getDirectory(title='Select the template directory')
15
+ while not p:
16
+ print('input a valid directory')
17
+ if input('continue?').lower() in exitinput: quit()
18
+ p = getDirectory(title='Select the template directory')
19
+
20
+ f = getFilesWith(p, regTemplate)
21
+ if not f:
22
+ print('no templates found')
23
+ if input('continue?').lower() in exitinput: quit()
24
+ return p
25
+
26
+ def getRoot(): return getDirectory(title='Select the root directory')
27
+
28
+ def copyPasteTemplates(root:str, phase:str, templatesDir:str):
29
+ objs = getObjectsPerPhase(phase)
30
+
31
+ objectslist = list(set([o for p in [objs[k] for k in objs] for o in p]))
32
+
33
+ createNewFolders([join(root,o) for o in objectslist])
34
+ print("directories created")
35
+
36
+ createNewTemplates(objs, templatesDir, regTemplate, root)
37
+ print("templates ready")
38
+
39
+ startfile(realpath(root))