Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Various fixes/improvements to the the extras/csrf_migration_helper.py…

… script

- Fixed various bugs/oddities with command line parsing
- Find 'include' tags that use single quotes
- Fixed for new style TEMPLATE_LOADERS setting
- Don't silently ignore non-existent paths
- Removed Python-2.3-ism
- Removed an unnecessary loop



git-svn-id: http://code.djangoproject.com/svn/django/trunk@12267 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 63c5e6621aac1cdf4d02d0b99266251cd1643c26 1 parent 1af45dc
@spookylukey spookylukey authored
Showing with 29 additions and 46 deletions.
  1. +29 −46 extras/csrf_migration_helper.py
View
75 extras/csrf_migration_helper.py
@@ -119,11 +119,7 @@
import os
import sys
import re
-try:
- set
-except NameError:
- from sets import Set as set
-
+from optparse import OptionParser
USAGE = """
This tool helps to locate forms that need CSRF tokens added and the
@@ -150,10 +146,12 @@ def get_template_dirs():
"""
from django.conf import settings
dirs = set()
- if 'django.template.loaders.filesystem.load_template_source' in settings.TEMPLATE_LOADERS:
+ if ('django.template.loaders.filesystem.load_template_source' in settings.TEMPLATE_LOADERS
+ or 'django.template.loaders.filesystem.Loader' in settings.TEMPLATE_LOADERS):
dirs.update(map(unicode, settings.TEMPLATE_DIRS))
- if 'django.template.loaders.app_directories.load_template_source' in settings.TEMPLATE_LOADERS:
+ if ('django.template.loaders.app_directories.load_template_source' in settings.TEMPLATE_LOADERS
+ or 'django.template.loaders.app_directories.Loader' in settings.TEMPLATE_LOADERS):
from django.template.loaders.app_directories import app_template_dirs
dirs.update(app_template_dirs)
return dirs
@@ -204,7 +202,7 @@ def includes_template(self, t):
Returns true if this template includes template 't' (via {% include %})
"""
for r in t.relative_filenames:
- if re.search(r'\{%\s*include\s+"' + re.escape(r) + r'"\s*%\}', self.content):
+ if re.search(r'\{%\s*include\s+(\'|")' + re.escape(r) + r'(\1)\s*%\}', self.content):
return True
return False
@@ -219,12 +217,11 @@ def related_templates(self):
pass
retval = set([self])
- for r in self.relative_filenames:
- for t in self.all_templates:
- if t.includes_template(self):
- # If two templates mutually include each other, directly or
- # indirectly, we have a problem here...
- retval = retval.union(t.related_templates())
+ for t in self.all_templates:
+ if t.includes_template(self):
+ # If two templates mutually include each other, directly or
+ # indirectly, we have a problem here...
+ retval = retval.union(t.related_templates())
self._related_templates = retval
return retval
@@ -261,6 +258,8 @@ def get_python_code(paths):
"""
retval = []
for p in paths:
+ if not os.path.isdir(p):
+ raise Exception("'%s' is not a directory." % p)
for (dirpath, dirnames, filenames) in os.walk(p):
for f in filenames:
if len([True for e in PYTHON_SOURCE_EXTENSIONS if f.endswith(e)]) > 0:
@@ -338,37 +337,21 @@ def main(pythonpaths):
print "----"
-if __name__ == '__main__':
- # Hacky argument parsing, one day I'll learn OptParse...
- args = list(sys.argv[1:])
- if len(args) > 0:
- if args[0] in ['--help', '-h', '-?', '--usage']:
- print USAGE
- sys.exit(0)
- else:
- if args[0].startswith('--settings='):
- module = args[0][len('--settings='):]
- os.environ["DJANGO_SETTINGS_MODULE"] = module
- args = args[1:]
-
- if args[0].startswith('-'):
- print "Unknown option: %s" % args[0]
- print USAGE
- sys.exit(1)
-
- pythonpaths = args
-
- if os.environ.get("DJANGO_SETTINGS_MODULE", None) is None:
- print "You need to set DJANGO_SETTINGS_MODULE or use the '--settings' parameter"
- sys.exit(1)
- if len(pythonpaths) == 0:
- print "Unrecognised command: %s" % command
- print USAGE
- sys.exit(1)
-
- main(pythonpaths)
+parser = OptionParser(usage=USAGE)
+parser.add_option("", "--settings", action="store", dest="settings", help="Dotted path to settings file")
+if __name__ == '__main__':
+ options, args = parser.parse_args()
+ if len(args) == 0:
+ parser.print_help()
+ sys.exit(1)
+
+ settings = getattr(options, 'settings', None)
+ if settings is None:
+ if os.environ.get("DJANGO_SETTINGS_MODULE", None) is None:
+ print "You need to set DJANGO_SETTINGS_MODULE or use the '--settings' parameter"
+ sys.exit(1)
else:
- # no args
- print USAGE
- sys.exit(0)
+ os.environ["DJANGO_SETTINGS_MODULE"] = settings
+
+ main(args)
Please sign in to comment.
Something went wrong with that request. Please try again.