summaryrefslogtreecommitdiff
path: root/django/utils
diff options
context:
space:
mode:
Diffstat (limited to 'django/utils')
-rw-r--r--django/utils/glob.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/django/utils/glob.py b/django/utils/glob.py
new file mode 100644
index 0000000000..a3138b09dc
--- /dev/null
+++ b/django/utils/glob.py
@@ -0,0 +1,36 @@
+from __future__ import unicode_literals
+
+import os.path
+import re
+
+from django.utils import six
+
+# backport of Python 3.4's glob.escape
+
+try:
+ from glob import escape as glob_escape
+except ImportError:
+ _magic_check = re.compile('([*?[])')
+
+ if six.PY3:
+ _magic_check_bytes = re.compile(b'([*?[])')
+
+ def glob_escape(pathname):
+ """
+ Escape all special characters.
+ """
+ drive, pathname = os.path.splitdrive(pathname)
+ if isinstance(pathname, bytes):
+ pathname = _magic_check_bytes.sub(br'[\1]', pathname)
+ else:
+ pathname = _magic_check.sub(r'[\1]', pathname)
+ return drive + pathname
+
+ else:
+ def glob_escape(pathname):
+ """
+ Escape all special characters.
+ """
+ drive, pathname = os.path.splitdrive(pathname)
+ pathname = _magic_check.sub(r'[\1]', pathname)
+ return drive + pathname