Mercurial > cpython-lru_cache-weakref
annotate Tools/ssl/make_ssl_data.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 | ad9f6e294d09 |
| children |
| rev | line source |
|---|---|
|
77579
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
1 #! /usr/bin/env python3 |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
2 |
|
77584
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
3 """ |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
4 This script should be called *manually* when we want to upgrade SSLError |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
5 `library` and `reason` mnemnonics to a more recent OpenSSL version. |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
6 |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
7 It takes two arguments: |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
8 - the path to the OpenSSL include files' directory |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
9 (e.g. openssl-1.0.1-beta3/include/openssl/) |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
10 - the path to the C file to be generated |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
11 (probably Modules/_ssl_data.h) |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
12 """ |
|
ad9f6e294d09
Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents:
77579
diff
changeset
|
13 |
|
77579
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
14 import datetime |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
15 import os |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
16 import re |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
17 import sys |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
18 |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
19 |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
20 def parse_error_codes(h_file, prefix): |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
21 pat = re.compile(r"#define\W+(%s([\w]+))\W+(\d+)\b" % re.escape(prefix)) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
22 codes = [] |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
23 with open(h_file, "r", encoding="latin1") as f: |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
24 for line in f: |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
25 match = pat.search(line) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
26 if match: |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
27 code, name, num = match.groups() |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
28 num = int(num) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
29 codes.append((code, name, num)) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
30 return codes |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
31 |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
32 if __name__ == "__main__": |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
33 openssl_inc = sys.argv[1] |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
34 outfile = sys.argv[2] |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
35 use_stdout = outfile == '-' |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
36 f = sys.stdout if use_stdout else open(outfile, "w") |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
37 error_libraries = ( |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
38 # (library code, mnemonic, error prefix, header file) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
39 ('ERR_LIB_PEM', 'PEM', 'PEM_R_', 'pem.h'), |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
40 ('ERR_LIB_SSL', 'SSL', 'SSL_R_', 'ssl.h'), |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
41 ('ERR_LIB_X509', 'X509', 'X509_R_', 'x509.h'), |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
42 ) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
43 def w(l): |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
44 f.write(l + "\n") |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
45 w("/* File generated by Tools/ssl/make_ssl_data.py */") |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
46 w("/* Generated on %s */" % datetime.datetime.now().isoformat()) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
47 w("") |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
48 |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
49 w("static struct py_ssl_library_code library_codes[] = {") |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
50 for libcode, mnemo, _, _ in error_libraries: |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
51 w(' {"%s", %s},' % (mnemo, libcode)) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
52 w(' { NULL }') |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
53 w('};') |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
54 w("") |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
55 |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
56 w("static struct py_ssl_error_code error_codes[] = {") |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
57 for libcode, _, prefix, h_file in error_libraries: |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
58 codes = parse_error_codes(os.path.join(openssl_inc, h_file), prefix) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
59 for code, name, num in sorted(codes): |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
60 w(' #ifdef %s' % (code)) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
61 w(' {"%s", %s, %s},' % (name, libcode, code)) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
62 w(' #else') |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
63 w(' {"%s", %s, %d},' % (name, libcode, num)) |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
64 w(' #endif') |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
65 w(' { NULL }') |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
66 w('};') |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
67 if not use_stdout: |
|
e193fe3d017e
Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff
changeset
|
68 f.close() |
