Skip to content

Commit f990404

Browse files
committed
Move resolvePath in the new file fileUtils.py of meshroom core
1 parent e704e5b commit f990404

File tree

2 files changed

+61
-19
lines changed

2 files changed

+61
-19
lines changed

meshroom/core/fileUtils.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import os
2+
import re
3+
4+
def getFileElements(inputFilePath: str):
5+
6+
filename = os.path.basename(inputFilePath)
7+
pattern = r"(?P<FILESTEM>.*?)(?P<FRAME_ID>[-._]\d+)?(?P<EXTENSION>\.\w{3,4})"
8+
match = re.search(pattern, filename)
9+
frameId = match.group("FRAME_ID")
10+
11+
fileElements = {}
12+
if match:
13+
fileElements = {
14+
"<PATH>": inputFilePath,
15+
"<FILENAME>": filename,
16+
"<FILESTEM>": match.group("FILESTEM"),
17+
"<FILESTEM_PREFIX>": match.group("FILESTEM"),
18+
"<EXTENSION>": match.group("EXTENSION"),
19+
}
20+
if frameId is not None:
21+
fileElements["<FRAMEID>"] = frameId
22+
fileElements["<FILESTEM>"] += frameId
23+
24+
return fileElements
25+
26+
27+
def getViewElements(vp):
28+
29+
vpPath = vp.childAttribute("path").value
30+
31+
viewElements = getFileElements(vpPath)
32+
33+
viewElements["<VIEW_ID>"] = str(vp.childAttribute("viewId").value)
34+
viewElements["<INTRINSIC_ID>"] = str(vp.childAttribute("intrinsicId").value)
35+
viewElements["<POSE_ID>"] = str(vp.childAttribute("poseId").value)
36+
37+
return viewElements
38+
39+
40+
def replacePatterns(input, pattern, replacements):
41+
# Use all substrings of "input" matching the regex "pattern" as a key to substitute themselves by their value in the dictionnary "replacements".
42+
# If "replacements" does not contain the key, the key is removed from "input" to build the resolved string.
43+
def replaceMatch(match):
44+
key = match.group()
45+
return replacements.get(key, "")
46+
return re.sub(pattern, replaceMatch, input)
47+
48+
49+
def resolvePath(input, outputTemplate: str) -> str:
50+
51+
if isinstance(input, str):
52+
replacements = getFileElements(input)
53+
else:
54+
replacements = getViewElements(input)
55+
56+
resolved = replacePatterns(outputTemplate, r"<\w*>", replacements)
57+
58+
return resolved
59+

meshroom/ui/components/filepath.py

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -111,34 +111,17 @@ def fileSizeMB(self, path):
111111
@Slot(str, QObject, result=str)
112112
def resolve(self, path, vp):
113113
# Resolve dynamic path that depends on viewpoint
114+
from meshroom.core import fileUtils
114115

115-
replacements = {}
116116
if vp == None:
117117
replacements = FilepathHelper.getFilenamesFromFolder(FilepathHelper, FilepathHelper.dirname(FilepathHelper, path), FilepathHelper.extension(FilepathHelper, path))
118118
resolved = [path for i in range(len(replacements))]
119119
for key in replacements:
120120
for i in range(len(resolved)):
121121
resolved[i] = resolved[i].replace("<FRAMEID>", replacements[i])
122122
return resolved
123-
else:
124123

125-
vpPath = vp.childAttribute("path").value
126-
filename = FilepathHelper.basename(FilepathHelper, vpPath)
127-
replacements = {
128-
"<VIEW_ID>": str(vp.childAttribute("viewId").value),
129-
"<INTRINSIC_ID>": str(vp.childAttribute("intrinsicId").value),
130-
"<POSE_ID>": str(vp.childAttribute("poseId").value),
131-
"<PATH>": vpPath,
132-
"<FILENAME>": filename,
133-
"<FILESTEM>": FilepathHelper.removeExtension(FilepathHelper, filename),
134-
"<EXTENSION>": FilepathHelper.extension(FilepathHelper, filename),
135-
}
136-
137-
resolved = path
138-
for key in replacements:
139-
resolved = resolved.replace(key, replacements[key])
140-
141-
return resolved
124+
return fileUtils.resolvePath(vp, path)
142125

143126
@Slot(str, result="QVariantList")
144127
@Slot(str, str, result="QVariantList")

0 commit comments

Comments
 (0)