Mercurial > cpython-lru_cache-weakref
annotate Tools/scripts/md5sum.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 62dde5dd475e |
| children |
| rev | line source |
|---|---|
|
59522
fcfe324663a6
convert shebang lines: python -> python3
Benjamin Peterson <benjamin@python.org>
parents:
40587
diff
changeset
|
1 #! /usr/bin/env python3 |
|
18218
6991ddafe382
This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
6991ddafe382
This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 """Python utility to print MD5 checksums of argument files. |
|
6991ddafe382
This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 """ |
|
6991ddafe382
This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
6 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
7 bufsize = 8096 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
8 fnfilter = None |
|
30184
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
9 rmode = 'rb' |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
10 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
11 usage = """ |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
12 usage: sum5 [-b] [-t] [-l] [-s bufsize] [file ...] |
|
30184
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
13 -b : read files in binary mode (default) |
|
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
14 -t : read files in text mode (you almost certainly don't want this!) |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
15 -l : print last pathname component only |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
16 -s bufsize: read buffer size (default %d) |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
17 file ... : files to sum; '-' or no files means stdin |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
18 """ % bufsize |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
19 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
20 import sys |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
21 import os |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
22 import getopt |
|
76106
62dde5dd475e
#14490, #14491: add 'sundry'-style import tests for Tools/scripts.
R David Murray <rdmurray@bitdance.com>
parents:
59522
diff
changeset
|
23 from hashlib import md5 |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
24 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
25 def sum(*files): |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
26 sts = 0 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
27 if files and isinstance(files[-1], file): |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
28 out, files = files[-1], files[:-1] |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
29 else: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
30 out = sys.stdout |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
31 if len(files) == 1 and not isinstance(files[0], str): |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
32 files = files[0] |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
33 for f in files: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
34 if isinstance(f, str): |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
35 if f == '-': |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
36 sts = printsumfp(sys.stdin, '<stdin>', out) or sts |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
37 else: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
38 sts = printsum(f, out) or sts |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
39 else: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
40 sts = sum(f, out) or sts |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
41 return sts |
|
18218
6991ddafe382
This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 |
|
30184
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
43 def printsum(filename, out=sys.stdout): |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
44 try: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
45 fp = open(filename, rmode) |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
30184
diff
changeset
|
46 except IOError as msg: |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
47 sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg)) |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
48 return 1 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
49 if fnfilter: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
50 filename = fnfilter(filename) |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
51 sts = printsumfp(fp, filename, out) |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
52 fp.close() |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
53 return sts |
|
18218
6991ddafe382
This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 |
|
30184
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
55 def printsumfp(fp, filename, out=sys.stdout): |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
56 m = md5.new() |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
57 try: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
58 while 1: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
59 data = fp.read(bufsize) |
|
30184
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
60 if not data: |
|
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
61 break |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
62 m.update(data) |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
30184
diff
changeset
|
63 except IOError as msg: |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
64 sys.stderr.write('%s: I/O error: %s\n' % (filename, msg)) |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
65 return 1 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
66 out.write('%s %s\n' % (m.hexdigest(), filename)) |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
67 return 0 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
68 |
|
30184
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
69 def main(args = sys.argv[1:], out=sys.stdout): |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
70 global fnfilter, rmode, bufsize |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
71 try: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
72 opts, args = getopt.getopt(args, 'blts:') |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
30184
diff
changeset
|
73 except getopt.error as msg: |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
74 sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage)) |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
75 return 2 |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
76 for o, a in opts: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
77 if o == '-l': |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
78 fnfilter = os.path.basename |
|
30184
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
79 elif o == '-b': |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
80 rmode = 'rb' |
|
30184
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
81 elif o == '-t': |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
82 rmode = 'r' |
|
30184
3ea52bc74d17
This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents:
29104
diff
changeset
|
83 elif o == '-s': |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
84 bufsize = int(a) |
|
18218
6991ddafe382
This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 if not args: |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
86 args = ['-'] |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
87 return sum(args, out) |
|
18218
6991ddafe382
This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 |
|
29104
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
89 if __name__ == '__main__' or __name__ == sys.argv[0]: |
|
a5e99e7e7ff0
Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents:
23116
diff
changeset
|
90 sys.exit(main(sys.argv[1:], sys.stdout)) |
