projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
11341: Fixed log message
[arvados.git]
/
crunch_scripts
/
crunchutil
/
subst.py
diff --git
a/crunch_scripts/crunchutil/subst.py
b/crunch_scripts/crunchutil/subst.py
index 13c6aa0151e74ced8c58290b8174c16c7fd23889..bd99d3c71cafc76392be14ec0b0b38973a7c11fc 100644
(file)
--- a/
crunch_scripts/crunchutil/subst.py
+++ b/
crunch_scripts/crunchutil/subst.py
@@
-1,9
+1,12
@@
-import os
import glob
import glob
+import os
+import re
+import stat
+
+BACKSLASH_ESCAPE_RE = re.compile(r'\\(.)')
class SubstitutionError(Exception):
class SubstitutionError(Exception):
- def __init__(self, message):
- super(SubstitutionError, self).__init__(message)
+ pass
def search(c):
DEFAULT = 0
def search(c):
DEFAULT = 0
@@
-36,13
+39,23
@@
def search(c):
return None
def sub_file(v):
return None
def sub_file(v):
- return os.path.join(os.environ['TASK_KEEPMOUNT'], v)
+ path = os.path.join(os.environ['TASK_KEEPMOUNT'], v)
+ st = os.stat(path)
+ if st and stat.S_ISREG(st.st_mode):
+ return path
+ else:
+ raise SubstitutionError("$(file {}) is not accessible or is not a regular file".format(path))
def sub_dir(v):
d = os.path.dirname(v)
if d == '':
d = v
def sub_dir(v):
d = os.path.dirname(v)
if d == '':
d = v
- return os.path.join(os.environ['TASK_KEEPMOUNT'], d)
+ path = os.path.join(os.environ['TASK_KEEPMOUNT'], d)
+ st = os.stat(path)
+ if st and stat.S_ISDIR(st.st_mode):
+ return path
+ else:
+ raise SubstitutionError("$(dir {}) is not accessible or is not a directory".format(path))
def sub_basename(v):
return os.path.splitext(os.path.basename(v))[0]
def sub_basename(v):
return os.path.splitext(os.path.basename(v))[0]
@@
-50,7
+63,7
@@
def sub_basename(v):
def sub_glob(v):
l = glob.glob(v)
if len(l) == 0:
def sub_glob(v):
l = glob.glob(v)
if len(l) == 0:
- raise SubstitutionError("$(glob
): No match on '%s'" % v
)
+ raise SubstitutionError("$(glob
{}) no match found".format(v)
)
else:
return l[0]
else:
return l[0]
@@
-63,7
+76,7
@@
def do_substitution(p, c, subs=default_subs):
while True:
m = search(c)
if m is None:
while True:
m = search(c)
if m is None:
- return
c
+ return
BACKSLASH_ESCAPE_RE.sub(r'\1', c)
v = do_substitution(p, c[m[0]+2 : m[1]])
var = True
v = do_substitution(p, c[m[0]+2 : m[1]])
var = True
@@
-79,7
+92,7
@@
def do_substitution(p, c, subs=default_subs):
raise SubstitutionError("Unknown variable or function '%s' while performing substitution on '%s'" % (v, c))
if r is None:
raise SubstitutionError("Substitution for '%s' is null while performing substitution on '%s'" % (v, c))
raise SubstitutionError("Unknown variable or function '%s' while performing substitution on '%s'" % (v, c))
if r is None:
raise SubstitutionError("Substitution for '%s' is null while performing substitution on '%s'" % (v, c))
- if not
(isinstance(r, str) or isinstance(r, unicode)
):
+ if not
isinstance(r, basestring
):
raise SubstitutionError("Substitution for '%s' must be a string while performing substitution on '%s'" % (v, c))
c = c[:m[0]] + r + c[m[1]+1:]
raise SubstitutionError("Substitution for '%s' must be a string while performing substitution on '%s'" % (v, c))
c = c[:m[0]] + r + c[m[1]+1:]