History

add hg and python

cinap_lenrek committed 15 years ago

Commit 4bb9e221 parent 987265c3706 files · +1228772 −-233Browse files

Showing the changes to sys/src/cmd/python/Tools/scripts/findnocoding.py (1 of 3706 files). Show all

Unified · Split

sys/src/cmd/python/Tools/scripts/findnocoding.py+104−0
@@ -0,0 +1,104 @@
1+#!/usr/bin/env python
2+
3+"""List all those Python files that require a coding directive
4+
5+Usage: nocoding.py dir1 [dir2...]
6+"""
7+
8+__author__ = "Oleg Broytmann, Georg Brandl"
9+
10+import sys, os, re, getopt
11+
12+# our pysource module finds Python source files
13+try:
14+ import pysource
15+except:
16+ # emulate the module with a simple os.walk
17+ class pysource:
18+ has_python_ext = looks_like_python = can_be_compiled = None
19+ def walk_python_files(self, paths, *args, **kwargs):
20+ for path in paths:
21+ if os.path.isfile(path):
22+ yield path.endswith(".py")
23+ elif os.path.isdir(path):
24+ for root, dirs, files in os.walk(path):
25+ for filename in files:
26+ if filename.endswith(".py"):
27+ yield os.path.join(root, filename)
28+ pysource = pysource()
29+
30+
31+ print >>sys.stderr, ("The pysource module is not available; "
32+ "no sophisticated Python source file search will be done.")
33+
34+
35+decl_re = re.compile(r"coding[=:]\s*([-\w.]+)")
36+
37+def get_declaration(line):
38+ match = decl_re.search(line)
39+ if match:
40+ return match.group(1)
41+ return ''
42+
43+def has_correct_encoding(text, codec):
44+ try:
45+ unicode(text, codec)
46+ except UnicodeDecodeError:
47+ return False
48+ else:
49+ return True
50+
51+def needs_declaration(fullpath):
52+ try:
53+ infile = open(fullpath, 'rU')
54+ except IOError: # Oops, the file was removed - ignore it
55+ return None
56+
57+ line1 = infile.readline()
58+ line2 = infile.readline()
59+
60+ if get_declaration(line1) or get_declaration(line2):
61+ # the file does have an encoding declaration, so trust it
62+ infile.close()
63+ return False
64+
65+ # check the whole file for non-ASCII characters
66+ rest = infile.read()
67+ infile.close()
68+
69+ if has_correct_encoding(line1+line2+rest, "ascii"):
70+ return False
71+
72+ return True
73+
74+
75+usage = """Usage: %s [-cd] paths...
76+ -c: recognize Python source files trying to compile them
77+ -d: debug output""" % sys.argv[0]
78+
79+try:
80+ opts, args = getopt.getopt(sys.argv[1:], 'cd')
81+except getopt.error, msg:
82+ print >>sys.stderr, msg
83+ print >>sys.stderr, usage
84+ sys.exit(1)
85+
86+is_python = pysource.looks_like_python
87+debug = False
88+
89+for o, a in opts:
90+ if o == '-c':
91+ is_python = pysource.can_be_compiled
92+ elif o == '-d':
93+ debug = True
94+
95+if not args:
96+ print >>sys.stderr, usage
97+ sys.exit(1)
98+
99+for fullpath in pysource.walk_python_files(args, is_python):
100+ if debug:
101+ print "Testing for coding: %s" % fullpath
102+ result = needs_declaration(fullpath)
103+ if result:
104+ print fullpath