diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2013-12-07 12:28:15 -0500 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2013-12-07 12:28:15 -0500 |
commit | ef565f9ddd20ca66d1c1ff57da4ceb91038010e0 (patch) | |
tree | e3731e3a2850509072bc93354b248bdbf02deec1 /setuptools/sandbox.py | |
parent | 3915375e6b94d7f41be271aec3c3e37efcba8c27 (diff) | |
download | external_python_setuptools-ef565f9ddd20ca66d1c1ff57da4ceb91038010e0.tar.gz external_python_setuptools-ef565f9ddd20ca66d1c1ff57da4ceb91038010e0.tar.bz2 external_python_setuptools-ef565f9ddd20ca66d1c1ff57da4ceb91038010e0.zip |
Add support for exempting a path based on a regular expression.
--HG--
extra : histedit_source : 2f1f4146ec1d5196cb65602302185a12060cfa17
Diffstat (limited to 'setuptools/sandbox.py')
-rwxr-xr-x | setuptools/sandbox.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/setuptools/sandbox.py b/setuptools/sandbox.py index 50fb02a3..26960846 100755 --- a/setuptools/sandbox.py +++ b/setuptools/sandbox.py @@ -3,6 +3,8 @@ import sys import tempfile import operator import functools +import itertools +import re import pkg_resources @@ -197,6 +199,9 @@ class DirectorySandbox(AbstractSandbox): "utime", "lchown", "chroot", "mkfifo", "mknod", "tempnam", ]) + _exception_patterns = [] + "allow writing to paths that match the pattern" + def __init__(self, sandbox, exceptions=_EXCEPTIONS): self._sandbox = os.path.normcase(os.path.realpath(sandbox)) self._prefix = os.path.join(self._sandbox,'') @@ -237,11 +242,16 @@ class DirectorySandbox(AbstractSandbox): self._active = active def _exempted(self, filepath): - exception_matches = ( + start_matches = ( filepath.startswith(exception) for exception in self._exceptions ) - return any(exception_matches) + pattern_matches = ( + re.match(pattern, filepath) + for pattern in self._exception_patterns + ) + candidates = itertools.chain(start_matches, pattern_matches) + return any(candidates) def _remap_input(self, operation, path, *args, **kw): """Called for path inputs""" |