diff options
Diffstat (limited to 'Tools/scripts')
-rwxr-xr-x | Tools/scripts/byext.py | 2 | ||||
-rwxr-xr-x | Tools/scripts/byteyears.py | 2 | ||||
-rwxr-xr-x | Tools/scripts/checkpyc.py | 4 | ||||
-rwxr-xr-x | Tools/scripts/copytime.py | 4 | ||||
-rwxr-xr-x | Tools/scripts/finddiv.py | 2 | ||||
-rwxr-xr-x | Tools/scripts/findlinksto.py | 2 | ||||
-rwxr-xr-x | Tools/scripts/fixcid.py | 8 | ||||
-rwxr-xr-x | Tools/scripts/ftpmirror.py | 20 | ||||
-rwxr-xr-x | Tools/scripts/linktree.py | 6 | ||||
-rw-r--r-- | Tools/scripts/parse_html5_entities.py | 105 | ||||
-rwxr-xr-x | Tools/scripts/pathfix.py | 10 | ||||
-rwxr-xr-x | Tools/scripts/pindent.py | 4 | ||||
-rwxr-xr-x | Tools/scripts/reindent.py | 2 | ||||
-rwxr-xr-x | Tools/scripts/treesync.py | 2 | ||||
-rwxr-xr-x | Tools/scripts/untabify.py | 4 | ||||
-rwxr-xr-x | Tools/scripts/which.py | 2 | ||||
-rw-r--r-- | Tools/scripts/win_add2path.py | 2 |
17 files changed, 143 insertions, 38 deletions
diff --git a/Tools/scripts/byext.py b/Tools/scripts/byext.py index b79ff37..736a441 100755 --- a/Tools/scripts/byext.py +++ b/Tools/scripts/byext.py @@ -25,7 +25,7 @@ class Stats: self.addstats("<dir>", "dirs", 1) try: names = os.listdir(dir) - except os.error as err: + except OSError as err: sys.stderr.write("Can't list %s: %s\n" % (dir, err)) self.addstats("<dir>", "unlistable", 1) return diff --git a/Tools/scripts/byteyears.py b/Tools/scripts/byteyears.py index 490b37f..f58c346 100755 --- a/Tools/scripts/byteyears.py +++ b/Tools/scripts/byteyears.py @@ -43,7 +43,7 @@ def main(): for filename in sys.argv[1:]: try: st = statfunc(filename) - except os.error as msg: + except OSError as msg: sys.stderr.write("can't stat %r: %r\n" % (filename, msg)) status = 1 st = () diff --git a/Tools/scripts/checkpyc.py b/Tools/scripts/checkpyc.py index d4fdce2..009f85b 100755 --- a/Tools/scripts/checkpyc.py +++ b/Tools/scripts/checkpyc.py @@ -24,7 +24,7 @@ def main(): for dirname in sys.path: try: names = os.listdir(dirname) - except os.error: + except OSError: print('Cannot list directory', repr(dirname)) continue if not silent: @@ -34,7 +34,7 @@ def main(): name = os.path.join(dirname, name) try: st = os.stat(name) - except os.error: + except OSError: print('Cannot stat', repr(name)) continue if verbose: diff --git a/Tools/scripts/copytime.py b/Tools/scripts/copytime.py index e0220b5..715683f 100755 --- a/Tools/scripts/copytime.py +++ b/Tools/scripts/copytime.py @@ -13,12 +13,12 @@ def main(): file1, file2 = sys.argv[1], sys.argv[2] try: stat1 = os.stat(file1) - except os.error: + except OSError: sys.stderr.write(file1 + ': cannot stat\n') sys.exit(1) try: os.utime(file2, (stat1[ST_ATIME], stat1[ST_MTIME])) - except os.error: + except OSError: sys.stderr.write(file2 + ': cannot change time\n') sys.exit(2) diff --git a/Tools/scripts/finddiv.py b/Tools/scripts/finddiv.py index f24a702..a705f56 100755 --- a/Tools/scripts/finddiv.py +++ b/Tools/scripts/finddiv.py @@ -70,7 +70,7 @@ def process(filename, listnames): def processdir(dir, listnames): try: names = os.listdir(dir) - except os.error as msg: + except OSError as msg: sys.stderr.write("Can't list directory: %s\n" % dir) return 1 files = [] diff --git a/Tools/scripts/findlinksto.py b/Tools/scripts/findlinksto.py index b4c09ef..b924f27 100755 --- a/Tools/scripts/findlinksto.py +++ b/Tools/scripts/findlinksto.py @@ -36,7 +36,7 @@ def visit(prog, dirname, names): linkto = os.readlink(name) if prog.search(linkto) is not None: print(name, '->', linkto) - except os.error: + except OSError: pass if __name__ == '__main__': diff --git a/Tools/scripts/fixcid.py b/Tools/scripts/fixcid.py index 87e2a09..1e4c428 100755 --- a/Tools/scripts/fixcid.py +++ b/Tools/scripts/fixcid.py @@ -97,7 +97,7 @@ def recursedown(dirname): bad = 0 try: names = os.listdir(dirname) - except os.error as msg: + except OSError as msg: err(dirname + ': cannot list directory: ' + str(msg) + '\n') return 1 names.sort() @@ -175,17 +175,17 @@ def fix(filename): try: statbuf = os.stat(filename) os.chmod(tempname, statbuf[ST_MODE] & 0o7777) - except os.error as msg: + except OSError as msg: err(tempname + ': warning: chmod failed (' + str(msg) + ')\n') # Then make a backup of the original file as filename~ try: os.rename(filename, filename + '~') - except os.error as msg: + except OSError as msg: err(filename + ': warning: backup failed (' + str(msg) + ')\n') # Now move the temp file to the original file try: os.rename(tempname, filename) - except os.error as msg: + except OSError as msg: err(filename + ': rename failed (' + str(msg) + ')\n') return 1 # Return success diff --git a/Tools/scripts/ftpmirror.py b/Tools/scripts/ftpmirror.py index 9e8be1d..a1b683a 100755 --- a/Tools/scripts/ftpmirror.py +++ b/Tools/scripts/ftpmirror.py @@ -108,7 +108,7 @@ def mirrorsubdir(f, localdir): if verbose: print('Creating local directory', repr(localdir)) try: makedir(localdir) - except os.error as msg: + except OSError as msg: print("Failed to establish local directory", repr(localdir)) return infofilename = os.path.join(localdir, '.mirrorinfo') @@ -183,7 +183,7 @@ def mirrorsubdir(f, localdir): continue try: os.unlink(tempname) - except os.error: + except OSError: pass if mode[0] == 'l': if verbose: @@ -218,11 +218,11 @@ def mirrorsubdir(f, localdir): fp1.close() try: os.unlink(fullname) - except os.error: + except OSError: pass # Ignore the error try: os.rename(tempname, fullname) - except os.error as msg: + except OSError as msg: print("Can't rename %r to %r: %s" % (tempname, fullname, msg)) continue info[filename] = infostuff @@ -255,7 +255,7 @@ def mirrorsubdir(f, localdir): try: if not localdir: names = os.listdir(os.curdir) else: names = os.listdir(localdir) - except os.error: + except OSError: names = [] for name in names: if name[0] == '.' or name in info or name in subdirs: @@ -312,7 +312,7 @@ def remove(fullname): if os.path.isdir(fullname) and not os.path.islink(fullname): try: names = os.listdir(fullname) - except os.error: + except OSError: names = [] ok = 1 for name in names: @@ -322,13 +322,13 @@ def remove(fullname): return 0 try: os.rmdir(fullname) - except os.error as msg: + except OSError as msg: print("Can't remove local directory %r: %s" % (fullname, msg)) return 0 else: try: os.unlink(fullname) - except os.error as msg: + except OSError as msg: print("Can't remove local file %r: %s" % (fullname, msg)) return 0 return 1 @@ -386,7 +386,7 @@ def writedict(dict, filename): backup = os.path.join(dir, fname + '~') try: os.unlink(backup) - except os.error: + except OSError: pass fp = open(tempname, 'w') fp.write('{\n') @@ -396,7 +396,7 @@ def writedict(dict, filename): fp.close() try: os.rename(filename, backup) - except os.error: + except OSError: pass os.rename(tempname, filename) diff --git a/Tools/scripts/linktree.py b/Tools/scripts/linktree.py index 982f480..e83f198 100755 --- a/Tools/scripts/linktree.py +++ b/Tools/scripts/linktree.py @@ -32,13 +32,13 @@ def main(): return 1 try: os.mkdir(newtree, 0o777) - except os.error as msg: + except OSError as msg: print(newtree + ': cannot mkdir:', msg) return 1 linkname = os.path.join(newtree, link) try: os.symlink(os.path.join(os.pardir, oldtree), linkname) - except os.error as msg: + except OSError as msg: if not link_may_fail: print(linkname + ': cannot symlink:', msg) return 1 @@ -51,7 +51,7 @@ def linknames(old, new, link): if debug: print('linknames', (old, new, link)) try: names = os.listdir(old) - except os.error as msg: + except OSError as msg: print(old + ': warning: cannot listdir:', msg) return for name in names: diff --git a/Tools/scripts/parse_html5_entities.py b/Tools/scripts/parse_html5_entities.py new file mode 100644 index 0000000..c011328 --- /dev/null +++ b/Tools/scripts/parse_html5_entities.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +""" +Utility for parsing HTML5 entity definitions available from: + + http://dev.w3.org/html5/spec/entities.json + +Written by Ezio Melotti and Iuliia Proskurnia. + +""" + +import os +import sys +import json +from urllib.request import urlopen +from html.entities import html5 + +entities_url = 'http://dev.w3.org/html5/spec/entities.json' + +def get_json(url): + """Download the json file from the url and returns a decoded object.""" + with urlopen(url) as f: + data = f.read().decode('utf-8') + return json.loads(data) + +def create_dict(entities): + """Create the html5 dict from the decoded json object.""" + new_html5 = {} + for name, value in entities.items(): + new_html5[name.lstrip('&')] = value['characters'] + return new_html5 + +def compare_dicts(old, new): + """Compare the old and new dicts and print the differences.""" + added = new.keys() - old.keys() + if added: + print('{} entitie(s) have been added:'.format(len(added))) + for name in sorted(added): + print(' {!r}: {!r}'.format(name, new[name])) + removed = old.keys() - new.keys() + if removed: + print('{} entitie(s) have been removed:'.format(len(removed))) + for name in sorted(removed): + print(' {!r}: {!r}'.format(name, old[name])) + changed = set() + for name in (old.keys() & new.keys()): + if old[name] != new[name]: + changed.add((name, old[name], new[name])) + if changed: + print('{} entitie(s) have been modified:'.format(len(changed))) + for item in sorted(changed): + print(' {!r}: {!r} -> {!r}'.format(*item)) + +def write_items(entities, file=sys.stdout): + """Write the items of the dictionary in the specified file.""" + # The keys in the generated dictionary should be sorted + # in a case-insensitive way, however, when two keys are equal, + # the uppercase version should come first so that the result + # looks like: ['Aacute', 'aacute', 'Aacute;', 'aacute;', ...] + # To do this we first sort in a case-sensitive way (so all the + # uppercase chars come first) and then sort with key=str.lower. + # Since the sorting is stable the uppercase keys will eventually + # be before their equivalent lowercase version. + keys = sorted(entities.keys()) + keys = sorted(keys, key=str.lower) + print('html5 = {', file=file) + for name in keys: + print(' {!r}: {!a},'.format(name, entities[name]), file=file) + print('}', file=file) + + +if __name__ == '__main__': + # without args print a diff between html.entities.html5 and new_html5 + # with --create print the new html5 dict + # with --patch patch the Lib/html/entities.py file + new_html5 = create_dict(get_json(entities_url)) + if '--create' in sys.argv: + print('# map the HTML5 named character references to the ' + 'equivalent Unicode character(s)') + print('# Generated by {}. Do not edit manually.'.format(__file__)) + write_items(new_html5) + elif '--patch' in sys.argv: + fname = 'Lib/html/entities.py' + temp_fname = fname + '.temp' + with open(fname) as f1, open(temp_fname, 'w') as f2: + skip = False + for line in f1: + if line.startswith('html5 = {'): + write_items(new_html5, file=f2) + skip = True + continue + if skip: + # skip the old items until the } + if line.startswith('}'): + skip = False + continue + f2.write(line) + os.remove(fname) + os.rename(temp_fname, fname) + else: + if html5 == new_html5: + print('The current dictionary is updated.') + else: + compare_dicts(html5, new_html5) + print('Run "./python {0} --patch" to update Lib/html/entities.html ' + 'or "./python {0} --create" to see the generated ' 'dictionary.'.format(__file__)) diff --git a/Tools/scripts/pathfix.py b/Tools/scripts/pathfix.py index dd08e0a..ae15561 100755 --- a/Tools/scripts/pathfix.py +++ b/Tools/scripts/pathfix.py @@ -73,7 +73,7 @@ def recursedown(dirname): bad = 0 try: names = os.listdir(dirname) - except os.error as msg: + except OSError as msg: err('%s: cannot list directory: %r\n' % (dirname, msg)) return 1 names.sort() @@ -131,24 +131,24 @@ def fix(filename): mtime = statbuf.st_mtime atime = statbuf.st_atime os.chmod(tempname, statbuf[ST_MODE] & 0o7777) - except os.error as msg: + except OSError as msg: err('%s: warning: chmod failed (%r)\n' % (tempname, msg)) # Then make a backup of the original file as filename~ try: os.rename(filename, filename + '~') - except os.error as msg: + except OSError as msg: err('%s: warning: backup failed (%r)\n' % (filename, msg)) # Now move the temp file to the original file try: os.rename(tempname, filename) - except os.error as msg: + except OSError as msg: err('%s: rename failed (%r)\n' % (filename, msg)) return 1 if preserve_timestamps: if atime and mtime: try: os.utime(filename, (atime, mtime)) - except os.error as msg: + except OSError as msg: err('%s: reset of timestamp failed (%r)\n' % (filename, msg)) return 1 # Return succes diff --git a/Tools/scripts/pindent.py b/Tools/scripts/pindent.py index 2872dc0..3333420 100755 --- a/Tools/scripts/pindent.py +++ b/Tools/scripts/pindent.py @@ -376,13 +376,13 @@ def make_backup(filename): if os.path.lexists(backup): try: os.remove(backup) - except os.error: + except OSError: print("Can't remove backup %r" % (backup,), file=sys.stderr) # end try # end if try: os.rename(filename, backup) - except os.error: + except OSError: print("Can't rename %r to %r" % (filename, backup), file=sys.stderr) # end try # end def make_backup diff --git a/Tools/scripts/reindent.py b/Tools/scripts/reindent.py index 4a916ea..18424de 100755 --- a/Tools/scripts/reindent.py +++ b/Tools/scripts/reindent.py @@ -52,8 +52,8 @@ verbose = False recurse = False dryrun = False makebackup = True +# A specified newline to be used in the output (set by --newline option) spec_newline = None -"""A specified newline to be used in the output (set by --newline option)""" def usage(msg=None): diff --git a/Tools/scripts/treesync.py b/Tools/scripts/treesync.py index b2649c4..652d394 100755 --- a/Tools/scripts/treesync.py +++ b/Tools/scripts/treesync.py @@ -78,7 +78,7 @@ def process(slave, master): print("creating slave directory", slave) try: os.mkdir(slave) - except os.error as msg: + except OSError as msg: print("can't make slave directory", slave, ":", msg) return else: diff --git a/Tools/scripts/untabify.py b/Tools/scripts/untabify.py index 4b67c15..861c83c 100755 --- a/Tools/scripts/untabify.py +++ b/Tools/scripts/untabify.py @@ -39,11 +39,11 @@ def process(filename, tabsize, verbose=True): backup = filename + "~" try: os.unlink(backup) - except os.error: + except OSError: pass try: os.rename(filename, backup) - except os.error: + except OSError: pass with open(filename, "w", encoding=encoding) as f: f.write(newtext) diff --git a/Tools/scripts/which.py b/Tools/scripts/which.py index 4fc37a0..df54ce0 100755 --- a/Tools/scripts/which.py +++ b/Tools/scripts/which.py @@ -29,7 +29,7 @@ def main(): filename = os.path.join(dir, prog) try: st = os.stat(filename) - except os.error: + except OSError: continue if not S_ISREG(st[ST_MODE]): msg(filename + ': not a disk file') diff --git a/Tools/scripts/win_add2path.py b/Tools/scripts/win_add2path.py index 9259b44..c85bea5 100644 --- a/Tools/scripts/win_add2path.py +++ b/Tools/scripts/win_add2path.py @@ -30,7 +30,7 @@ def modify(): with winreg.CreateKey(HKCU, ENV) as key: try: envpath = winreg.QueryValueEx(key, PATH)[0] - except WindowsError: + except OSError: envpath = DEFAULT paths = [envpath] |