From f7d4e45b37b4219c8018a17638611f5d3b88c5a9 Mon Sep 17 00:00:00 2001 From: Christian Grasser Date: Tue, 6 Mar 2018 23:14:24 +0100 Subject: [PATCH] - update with data from nuget package python2x86.2.7.14 - sendkeys 0.3 still added --- PythonLib/extra/_bsddb.pyd | Bin 1129984 -> 1106432 bytes PythonLib/extra/bsddb/dbshelve.py | 1 - PythonLib/extra/bsddb/test/__init__.py | 0 PythonLib/extra/bsddb/test/test_all.py | 623 --- PythonLib/extra/bsddb/test/test_associate.py | 465 -- PythonLib/extra/bsddb/test/test_basics.py | 1158 ----- PythonLib/extra/bsddb/test/test_compare.py | 447 -- PythonLib/extra/bsddb/test/test_compat.py | 184 - .../extra/bsddb/test/test_cursor_pget_bug.py | 54 - PythonLib/extra/bsddb/test/test_db.py | 163 - PythonLib/extra/bsddb/test/test_dbenv.py | 525 -- PythonLib/extra/bsddb/test/test_dbobj.py | 70 - PythonLib/extra/bsddb/test/test_dbshelve.py | 398 -- PythonLib/extra/bsddb/test/test_dbtables.py | 409 -- .../test/test_distributed_transactions.py | 152 - .../extra/bsddb/test/test_early_close.py | 215 - PythonLib/extra/bsddb/test/test_fileid.py | 61 - PythonLib/extra/bsddb/test/test_get_none.py | 92 - PythonLib/extra/bsddb/test/test_join.py | 99 - PythonLib/extra/bsddb/test/test_lock.py | 184 - PythonLib/extra/bsddb/test/test_misc.py | 138 - PythonLib/extra/bsddb/test/test_pickle.py | 68 - PythonLib/extra/bsddb/test/test_queue.py | 163 - PythonLib/extra/bsddb/test/test_recno.py | 320 -- .../extra/bsddb/test/test_replication.py | 543 -- PythonLib/extra/bsddb/test/test_sequence.py | 136 - PythonLib/extra/bsddb/test/test_thread.py | 517 -- PythonLib/extra/distutils/__init__.py | 10 +- PythonLib/extra/distutils/ccompiler.py | 7 +- .../extra/distutils/command/bdist_rpm.py | 1 + .../extra/distutils/command/bdist_wininst.py | 370 +- .../extra/distutils/command/build_ext.py | 13 +- PythonLib/extra/distutils/command/check.py | 8 +- PythonLib/extra/distutils/command/upload.py | 20 +- PythonLib/extra/distutils/config.py | 2 +- PythonLib/extra/distutils/core.py | 7 +- PythonLib/extra/distutils/cygwinccompiler.py | 6 +- PythonLib/extra/distutils/dir_util.py | 6 +- PythonLib/extra/distutils/file_util.py | 34 +- PythonLib/extra/distutils/msvc9compiler.py | 4 +- PythonLib/extra/distutils/spawn.py | 63 +- PythonLib/extra/distutils/sysconfig.py | 3 +- PythonLib/extra/distutils/text_file.py | 4 +- PythonLib/extra/distutils/unixccompiler.py | 24 + PythonLib/extra/distutils/util.py | 23 +- PythonLib/extra/lib2to3/Grammar.txt | 30 +- PythonLib/extra/lib2to3/btm_utils.py | 2 +- PythonLib/extra/lib2to3/fixer_base.py | 4 +- PythonLib/extra/lib2to3/fixes/fix_apply.py | 11 + PythonLib/extra/lib2to3/fixes/fix_asserts.py | 34 + PythonLib/extra/lib2to3/fixes/fix_callable.py | 37 - PythonLib/extra/lib2to3/fixes/fix_exitfunc.py | 2 +- PythonLib/extra/lib2to3/fixes/fix_import.py | 2 +- PythonLib/extra/lib2to3/fixes/fix_input.py | 2 +- PythonLib/extra/lib2to3/fixes/fix_intern.py | 10 + .../extra/lib2to3/fixes/fix_metaclass.py | 4 +- PythonLib/extra/lib2to3/fixes/fix_types.py | 2 +- PythonLib/extra/lib2to3/patcomp.py | 2 +- PythonLib/extra/lib2to3/pgen2/driver.py | 17 +- PythonLib/extra/lib2to3/pgen2/grammar.py | 32 +- PythonLib/extra/lib2to3/pgen2/pgen.py | 10 +- PythonLib/extra/lib2to3/pgen2/token.py | 13 +- PythonLib/extra/lib2to3/pgen2/tokenize.py | 11 +- PythonLib/extra/lib2to3/refactor.py | 4 +- PythonLib/extra/lib2to3/tests/__init__.py | 24 - PythonLib/extra/lib2to3/tests/data/README | 6 - PythonLib/extra/lib2to3/tests/data/bom.py | 2 - PythonLib/extra/lib2to3/tests/data/crlf.py | 3 - .../lib2to3/tests/data/different_encoding.py | 6 - .../lib2to3/tests/data/false_encoding.py | 2 - .../lib2to3/tests/data/fixers/bad_order.py | 5 - .../tests/data/fixers/myfixes/__init__.py | 0 .../tests/data/fixers/myfixes/fix_explicit.py | 6 - .../tests/data/fixers/myfixes/fix_first.py | 6 - .../tests/data/fixers/myfixes/fix_last.py | 7 - .../tests/data/fixers/myfixes/fix_parrot.py | 13 - .../tests/data/fixers/myfixes/fix_preorder.py | 6 - .../lib2to3/tests/data/fixers/no_fixer_cls.py | 1 - .../tests/data/fixers/parrot_example.py | 2 - .../lib2to3/tests/data/infinite_recursion.py | 2669 ---------- .../lib2to3/tests/data/py2_test_grammar.py | 974 ---- .../lib2to3/tests/data/py3_test_grammar.py | 923 ---- .../extra/lib2to3/tests/pytree_idempotency.py | 92 - PythonLib/extra/lib2to3/tests/support.py | 54 - .../extra/lib2to3/tests/test_all_fixers.py | 23 - PythonLib/extra/lib2to3/tests/test_fixers.py | 4578 ----------------- PythonLib/extra/lib2to3/tests/test_main.py | 149 - PythonLib/extra/lib2to3/tests/test_parser.py | 227 - PythonLib/extra/lib2to3/tests/test_pytree.py | 494 -- .../extra/lib2to3/tests/test_refactor.py | 321 -- PythonLib/extra/lib2to3/tests/test_util.py | 594 --- PythonLib/full/BaseHTTPServer.py | 21 +- PythonLib/full/CGIHTTPServer.py | 27 +- PythonLib/full/Cookie.py | 40 +- PythonLib/full/HTMLParser.py | 11 +- PythonLib/full/SendKeys.py | 887 ++-- PythonLib/full/SimpleHTTPServer.py | 39 +- PythonLib/full/SimpleXMLRPCServer.py | 3 +- PythonLib/full/SocketServer.py | 80 +- PythonLib/full/UserDict.py | 37 +- PythonLib/full/_LWPCookieJar.py | 4 +- PythonLib/full/_MozillaCookieJar.py | 2 +- PythonLib/full/_abcoll.py | 62 +- PythonLib/full/_ctypes.pyd | Bin 196096 -> 91648 bytes PythonLib/full/_elementtree.pyd | Bin 214528 -> 143360 bytes PythonLib/full/_hashlib.pyd | Bin 487424 -> 1016832 bytes PythonLib/full/_msi.pyd | Bin 130560 -> 18944 bytes PythonLib/full/_multiprocessing.pyd | Bin 112128 -> 27648 bytes PythonLib/full/_osx_support.py | 28 +- PythonLib/full/_pyio.py | 112 +- PythonLib/full/_socket.pyd | Bin 167936 -> 46592 bytes PythonLib/full/_sqlite3.pyd | Bin 140800 -> 50688 bytes PythonLib/full/_ssl.pyd | Bin 0 -> 1411072 bytes PythonLib/full/_strptime.py | 39 +- PythonLib/full/_weakrefset.py | 2 + PythonLib/full/aifc.py | 44 +- PythonLib/full/argparse.py | 21 +- PythonLib/full/asynchat.py | 11 +- PythonLib/full/asyncore.py | 6 +- PythonLib/full/base64.py | 45 +- PythonLib/full/binhex.py | 44 +- PythonLib/full/bz2.pyd | Bin 194048 -> 71168 bytes PythonLib/full/calendar.py | 23 +- PythonLib/full/cgi.py | 2 +- PythonLib/full/chunk.py | 8 +- PythonLib/full/codecs.py | 51 +- PythonLib/full/collections.py | 55 +- PythonLib/full/compiler/pyassem.py | 2 +- PythonLib/full/compiler/transformer.py | 2 +- PythonLib/full/cookielib.py | 54 +- PythonLib/full/copy.py | 4 +- PythonLib/full/copy_reg.py | 6 +- PythonLib/full/csv.py | 8 +- PythonLib/full/ctypes/__init__.py | 11 +- PythonLib/full/ctypes/_endian.py | 3 - PythonLib/full/ctypes/macholib/README.ctypes | 2 +- PythonLib/full/ctypes/macholib/__init__.py | 3 - PythonLib/full/ctypes/macholib/dyld.py | 3 - PythonLib/full/ctypes/macholib/dylib.py | 3 - PythonLib/full/ctypes/macholib/framework.py | 3 - PythonLib/full/ctypes/util.py | 136 +- PythonLib/full/ctypes/wintypes.py | 4 - PythonLib/full/curses/ascii.py | 22 +- PythonLib/full/curses/textpad.py | 31 +- PythonLib/full/decimal.py | 43 +- PythonLib/full/difflib.py | 8 +- PythonLib/full/doctest.py | 37 +- PythonLib/full/dumbdbm.py | 81 +- PythonLib/full/email/base64mime.py | 2 +- PythonLib/full/email/feedparser.py | 33 +- PythonLib/full/email/generator.py | 3 +- PythonLib/full/email/message.py | 2 +- PythonLib/full/email/mime/nonmultipart.py | 2 +- PythonLib/full/email/parser.py | 2 +- PythonLib/full/email/quoprimime.py | 2 +- PythonLib/full/email/utils.py | 9 +- PythonLib/full/encodings/base64_codec.py | 1 + PythonLib/full/encodings/bz2_codec.py | 1 + PythonLib/full/encodings/hex_codec.py | 1 + PythonLib/full/encodings/quopri_codec.py | 3 +- PythonLib/full/encodings/rot_13.py | 1 + PythonLib/full/encodings/utf_32.py | 2 +- PythonLib/full/encodings/uu_codec.py | 3 +- PythonLib/full/encodings/zlib_codec.py | 1 + PythonLib/full/fileinput.py | 195 +- PythonLib/full/fnmatch.py | 16 +- PythonLib/full/ftplib.py | 133 +- PythonLib/full/genericpath.py | 8 + PythonLib/full/getopt.py | 2 +- PythonLib/full/gettext.py | 204 +- PythonLib/full/glob.py | 11 +- PythonLib/full/gzip.py | 45 +- PythonLib/full/hashlib.py | 81 +- PythonLib/full/heapq.py | 2 +- PythonLib/full/hmac.py | 3 + PythonLib/full/hotshot/__init__.py | 2 +- PythonLib/full/htmlentitydefs.py | 4 +- PythonLib/full/httplib.py | 250 +- PythonLib/full/imaplib.py | 28 +- PythonLib/full/imghdr.py | 20 +- PythonLib/full/inspect.py | 21 +- PythonLib/full/io.py | 9 +- PythonLib/full/json/__init__.py | 13 +- PythonLib/full/json/decoder.py | 41 +- PythonLib/full/json/encoder.py | 2 +- PythonLib/full/json/tests/__init__.py | 73 - .../full/json/tests/test_check_circular.py | 34 - PythonLib/full/json/tests/test_decode.py | 64 - PythonLib/full/json/tests/test_default.py | 12 - PythonLib/full/json/tests/test_dump.py | 32 - .../tests/test_encode_basestring_ascii.py | 41 - PythonLib/full/json/tests/test_fail.py | 105 - PythonLib/full/json/tests/test_float.py | 37 - PythonLib/full/json/tests/test_indent.py | 60 - PythonLib/full/json/tests/test_pass1.py | 75 - PythonLib/full/json/tests/test_pass2.py | 18 - PythonLib/full/json/tests/test_pass3.py | 24 - PythonLib/full/json/tests/test_recursion.py | 108 - PythonLib/full/json/tests/test_scanstring.py | 109 - PythonLib/full/json/tests/test_separators.py | 44 - PythonLib/full/json/tests/test_speedups.py | 23 - PythonLib/full/json/tests/test_tool.py | 69 - PythonLib/full/json/tests/test_unicode.py | 89 - PythonLib/full/linecache.py | 6 +- PythonLib/full/locale.py | 331 +- PythonLib/full/logging/__init__.py | 79 +- PythonLib/full/logging/config.py | 145 +- PythonLib/full/logging/handlers.py | 79 +- PythonLib/full/macpath.py | 5 +- PythonLib/full/mailbox.py | 16 +- PythonLib/full/mailcap.py | 4 +- PythonLib/full/mhlib.py | 8 +- PythonLib/full/mimetypes.py | 19 +- PythonLib/full/modulefinder.py | 100 +- PythonLib/full/msilib/__init__.py | 6 +- PythonLib/full/msilib/schema.py | 4 +- PythonLib/full/multiprocessing/connection.py | 16 +- .../full/multiprocessing/dummy/__init__.py | 2 +- PythonLib/full/multiprocessing/forking.py | 19 +- PythonLib/full/multiprocessing/managers.py | 4 +- PythonLib/full/multiprocessing/pool.py | 46 +- PythonLib/full/multiprocessing/process.py | 21 +- PythonLib/full/multiprocessing/queues.py | 40 +- .../full/multiprocessing/sharedctypes.py | 7 +- PythonLib/full/multiprocessing/util.py | 17 +- PythonLib/full/mutex.py | 2 +- PythonLib/full/ntpath.py | 185 +- PythonLib/full/nturl2path.py | 12 +- PythonLib/full/optparse.py | 11 +- PythonLib/full/os.py | 16 +- PythonLib/full/os2emxpath.py | 7 +- PythonLib/full/pdb.doc | 2 +- PythonLib/full/pdb.py | 3 + PythonLib/full/pickle.py | 10 +- PythonLib/full/pickletools.py | 4 +- PythonLib/full/plat-generic/regen | 3 - PythonLib/full/platform.py | 310 +- PythonLib/full/poplib.py | 12 +- PythonLib/full/posixpath.py | 40 +- PythonLib/full/pstats.py | 2 +- PythonLib/full/py_compile.py | 2 +- PythonLib/full/pydoc.py | 126 +- PythonLib/full/pydoc_data/__init__.py | 0 PythonLib/full/pydoc_data/topics.py | 77 - PythonLib/full/pyexpat.pyd | Bin 213504 -> 144384 bytes PythonLib/full/random.py | 15 +- PythonLib/full/re.py | 30 +- PythonLib/full/rfc822.py | 9 +- PythonLib/full/rlcompleter.py | 24 +- PythonLib/full/robotparser.py | 14 +- PythonLib/full/runpy.py | 42 +- PythonLib/full/select.pyd | Bin 95744 -> 10240 bytes PythonLib/full/shelve.py | 24 +- PythonLib/full/shlex.py | 2 +- PythonLib/full/shutil.py | 87 +- PythonLib/full/site.py | 11 +- PythonLib/full/smtplib.py | 37 +- PythonLib/full/socket.py | 8 +- PythonLib/full/sqlite3/dbapi2.py | 2 + PythonLib/full/sre_compile.py | 364 +- PythonLib/full/sre_parse.py | 138 +- PythonLib/full/ssl.py | 870 +++- PythonLib/full/string.py | 38 +- PythonLib/full/subprocess.py | 486 +- PythonLib/full/sunau.py | 2 +- PythonLib/full/sysconfig.py | 13 +- PythonLib/full/tabnanny.py | 2 +- PythonLib/full/tarfile.py | 202 +- PythonLib/full/telnetlib.py | 12 +- PythonLib/full/tempfile.py | 48 +- PythonLib/full/textwrap.py | 18 +- PythonLib/full/threading.py | 33 +- PythonLib/full/timeit.py | 23 +- PythonLib/full/token.py | 2 - PythonLib/full/tokenize.py | 45 +- PythonLib/full/traceback.py | 7 +- PythonLib/full/types.py | 2 + PythonLib/full/unicodedata.pyd | Bin 794624 -> 687104 bytes PythonLib/full/unittest/case.py | 14 +- PythonLib/full/unittest/loader.py | 8 +- PythonLib/full/unittest/main.py | 2 +- PythonLib/full/unittest/result.py | 2 +- PythonLib/full/unittest/signals.py | 2 +- PythonLib/full/unittest/test/__init__.py | 21 - PythonLib/full/unittest/test/dummy.py | 1 - PythonLib/full/unittest/test/support.py | 119 - .../full/unittest/test/test_assertions.py | 290 -- PythonLib/full/unittest/test/test_break.py | 284 - PythonLib/full/unittest/test/test_case.py | 1124 ---- .../full/unittest/test/test_discovery.py | 398 -- .../unittest/test/test_functiontestcase.py | 148 - PythonLib/full/unittest/test/test_loader.py | 1301 ----- PythonLib/full/unittest/test/test_program.py | 255 - PythonLib/full/unittest/test/test_result.py | 567 -- PythonLib/full/unittest/test/test_runner.py | 266 - PythonLib/full/unittest/test/test_setups.py | 508 -- PythonLib/full/unittest/test/test_skipping.py | 168 - PythonLib/full/unittest/test/test_suite.py | 367 -- PythonLib/full/urllib.py | 168 +- PythonLib/full/urllib2.py | 79 +- PythonLib/full/urlparse.py | 9 +- PythonLib/full/uuid.py | 145 +- PythonLib/full/warnings.py | 45 +- PythonLib/full/wave.py | 28 +- PythonLib/full/weakref.py | 186 +- PythonLib/full/webbrowser.py | 1 + PythonLib/full/winsound.pyd | Bin 43520 -> 9216 bytes PythonLib/full/wsgiref/headers.py | 2 +- PythonLib/full/wsgiref/simple_server.py | 9 +- PythonLib/full/wsgiref/validate.py | 2 +- PythonLib/full/xdrlib.py | 33 +- PythonLib/full/xml/dom/expatbuilder.py | 2 +- PythonLib/full/xml/dom/minicompat.py | 6 +- PythonLib/full/xml/etree/ElementInclude.py | 15 +- PythonLib/full/xml/etree/ElementTree.py | 83 +- PythonLib/full/xml/sax/expatreader.py | 50 +- PythonLib/full/xml/sax/saxutils.py | 13 +- PythonLib/full/xmlrpclib.py | 91 +- PythonLib/full/zipfile.py | 92 +- PythonLib/min/BaseHTTPServer.py | 21 +- PythonLib/min/CGIHTTPServer.py | 27 +- PythonLib/min/Cookie.py | 40 +- PythonLib/min/HTMLParser.py | 11 +- PythonLib/min/SendKeys.py | 887 ++-- PythonLib/min/SimpleHTTPServer.py | 39 +- PythonLib/min/SimpleXMLRPCServer.py | 3 +- PythonLib/min/SocketServer.py | 80 +- PythonLib/min/UserDict.py | 37 +- PythonLib/min/_LWPCookieJar.py | 4 +- PythonLib/min/_MozillaCookieJar.py | 2 +- PythonLib/min/_abcoll.py | 62 +- PythonLib/min/_osx_support.py | 28 +- PythonLib/min/_pyio.py | 112 +- PythonLib/min/_strptime.py | 39 +- PythonLib/min/_weakrefset.py | 2 + PythonLib/min/aifc.py | 44 +- PythonLib/min/argparse.py | 21 +- PythonLib/min/asynchat.py | 11 +- PythonLib/min/asyncore.py | 6 +- PythonLib/min/base64.py | 45 +- PythonLib/min/binhex.py | 44 +- PythonLib/min/calendar.py | 23 +- PythonLib/min/cgi.py | 2 +- PythonLib/min/chunk.py | 8 +- PythonLib/min/codecs.py | 51 +- PythonLib/min/collections.py | 55 +- PythonLib/min/cookielib.py | 54 +- PythonLib/min/copy.py | 4 +- PythonLib/min/copy_reg.py | 6 +- PythonLib/min/csv.py | 8 +- PythonLib/min/decimal.py | 43 +- PythonLib/min/difflib.py | 8 +- PythonLib/min/doctest.py | 37 +- PythonLib/min/dumbdbm.py | 81 +- PythonLib/min/encodings/base64_codec.py | 1 + PythonLib/min/encodings/bz2_codec.py | 1 + PythonLib/min/encodings/hex_codec.py | 1 + PythonLib/min/encodings/quopri_codec.py | 3 +- PythonLib/min/encodings/rot_13.py | 1 + PythonLib/min/encodings/utf_32.py | 2 +- PythonLib/min/encodings/uu_codec.py | 3 +- PythonLib/min/encodings/zlib_codec.py | 1 + PythonLib/min/fileinput.py | 195 +- PythonLib/min/fnmatch.py | 16 +- PythonLib/min/ftplib.py | 133 +- PythonLib/min/genericpath.py | 8 + PythonLib/min/getopt.py | 2 +- PythonLib/min/gettext.py | 204 +- PythonLib/min/glob.py | 11 +- PythonLib/min/gzip.py | 45 +- PythonLib/min/hashlib.py | 81 +- PythonLib/min/heapq.py | 2 +- PythonLib/min/hmac.py | 3 + PythonLib/min/htmlentitydefs.py | 4 +- PythonLib/min/httplib.py | 250 +- PythonLib/min/imaplib.py | 28 +- PythonLib/min/imghdr.py | 20 +- PythonLib/min/inspect.py | 21 +- PythonLib/min/io.py | 9 +- PythonLib/min/linecache.py | 6 +- PythonLib/min/locale.py | 331 +- PythonLib/min/macpath.py | 5 +- PythonLib/min/mailbox.py | 16 +- PythonLib/min/mailcap.py | 4 +- PythonLib/min/mhlib.py | 8 +- PythonLib/min/mimetypes.py | 19 +- PythonLib/min/modulefinder.py | 100 +- PythonLib/min/mutex.py | 2 +- PythonLib/min/ntpath.py | 185 +- PythonLib/min/nturl2path.py | 12 +- PythonLib/min/optparse.py | 11 +- PythonLib/min/os.py | 16 +- PythonLib/min/os2emxpath.py | 7 +- PythonLib/min/pdb.py | 3 + PythonLib/min/pickle.py | 10 +- PythonLib/min/pickletools.py | 4 +- PythonLib/min/platform.py | 310 +- PythonLib/min/poplib.py | 12 +- PythonLib/min/posixpath.py | 40 +- PythonLib/min/pstats.py | 2 +- PythonLib/min/py_compile.py | 2 +- PythonLib/min/pydoc.py | 126 +- PythonLib/min/random.py | 15 +- PythonLib/min/re.py | 30 +- PythonLib/min/rfc822.py | 9 +- PythonLib/min/rlcompleter.py | 24 +- PythonLib/min/robotparser.py | 14 +- PythonLib/min/runpy.py | 42 +- PythonLib/min/shelve.py | 24 +- PythonLib/min/shlex.py | 2 +- PythonLib/min/shutil.py | 87 +- PythonLib/min/site.py | 11 +- PythonLib/min/smtplib.py | 37 +- PythonLib/min/socket.py | 8 +- PythonLib/min/sre_compile.py | 364 +- PythonLib/min/sre_parse.py | 138 +- PythonLib/min/ssl.py | 870 +++- PythonLib/min/string.py | 38 +- PythonLib/min/subprocess.py | 486 +- PythonLib/min/sunau.py | 2 +- PythonLib/min/sysconfig.py | 13 +- PythonLib/min/tabnanny.py | 2 +- PythonLib/min/tarfile.py | 202 +- PythonLib/min/telnetlib.py | 12 +- PythonLib/min/tempfile.py | 48 +- PythonLib/min/textwrap.py | 18 +- PythonLib/min/threading.py | 33 +- PythonLib/min/timeit.py | 23 +- PythonLib/min/token.py | 2 - PythonLib/min/tokenize.py | 45 +- PythonLib/min/traceback.py | 7 +- PythonLib/min/types.py | 2 + PythonLib/min/urllib.py | 168 +- PythonLib/min/urllib2.py | 79 +- PythonLib/min/urlparse.py | 9 +- PythonLib/min/uuid.py | 145 +- PythonLib/min/warnings.py | 45 +- PythonLib/min/wave.py | 28 +- PythonLib/min/weakref.py | 186 +- PythonLib/min/webbrowser.py | 1 + PythonLib/min/xdrlib.py | 33 +- PythonLib/min/xmlrpclib.py | 91 +- PythonLib/min/zipfile.py | 92 +- PythonLib/tcl/lib-tk/FixTk.py | 7 +- PythonLib/tcl/lib-tk/Tix.py | 81 +- PythonLib/tcl/lib-tk/Tkdnd.py | 2 +- PythonLib/tcl/lib-tk/Tkinter.py | 315 +- PythonLib/tcl/lib-tk/tkColorChooser.py | 4 +- PythonLib/tcl/lib-tk/tkFont.py | 24 +- PythonLib/tcl/lib-tk/ttk.py | 164 +- PythonLib/tcl/lib-tk/turtle.py | 115 +- 451 files changed, 10852 insertions(+), 32429 deletions(-) delete mode 100644 PythonLib/extra/bsddb/test/__init__.py delete mode 100644 PythonLib/extra/bsddb/test/test_all.py delete mode 100644 PythonLib/extra/bsddb/test/test_associate.py delete mode 100644 PythonLib/extra/bsddb/test/test_basics.py delete mode 100644 PythonLib/extra/bsddb/test/test_compare.py delete mode 100644 PythonLib/extra/bsddb/test/test_compat.py delete mode 100644 PythonLib/extra/bsddb/test/test_cursor_pget_bug.py delete mode 100644 PythonLib/extra/bsddb/test/test_db.py delete mode 100644 PythonLib/extra/bsddb/test/test_dbenv.py delete mode 100644 PythonLib/extra/bsddb/test/test_dbobj.py delete mode 100644 PythonLib/extra/bsddb/test/test_dbshelve.py delete mode 100644 PythonLib/extra/bsddb/test/test_dbtables.py delete mode 100644 PythonLib/extra/bsddb/test/test_distributed_transactions.py delete mode 100644 PythonLib/extra/bsddb/test/test_early_close.py delete mode 100644 PythonLib/extra/bsddb/test/test_fileid.py delete mode 100644 PythonLib/extra/bsddb/test/test_get_none.py delete mode 100644 PythonLib/extra/bsddb/test/test_join.py delete mode 100644 PythonLib/extra/bsddb/test/test_lock.py delete mode 100644 PythonLib/extra/bsddb/test/test_misc.py delete mode 100644 PythonLib/extra/bsddb/test/test_pickle.py delete mode 100644 PythonLib/extra/bsddb/test/test_queue.py delete mode 100644 PythonLib/extra/bsddb/test/test_recno.py delete mode 100644 PythonLib/extra/bsddb/test/test_replication.py delete mode 100644 PythonLib/extra/bsddb/test/test_sequence.py delete mode 100644 PythonLib/extra/bsddb/test/test_thread.py create mode 100644 PythonLib/extra/lib2to3/fixes/fix_asserts.py delete mode 100644 PythonLib/extra/lib2to3/fixes/fix_callable.py delete mode 100644 PythonLib/extra/lib2to3/tests/__init__.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/README delete mode 100644 PythonLib/extra/lib2to3/tests/data/bom.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/crlf.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/different_encoding.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/false_encoding.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/fixers/bad_order.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/fixers/myfixes/__init__.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_explicit.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_first.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_last.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_parrot.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_preorder.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/fixers/no_fixer_cls.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/fixers/parrot_example.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/infinite_recursion.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/py2_test_grammar.py delete mode 100644 PythonLib/extra/lib2to3/tests/data/py3_test_grammar.py delete mode 100644 PythonLib/extra/lib2to3/tests/pytree_idempotency.py delete mode 100644 PythonLib/extra/lib2to3/tests/support.py delete mode 100644 PythonLib/extra/lib2to3/tests/test_all_fixers.py delete mode 100644 PythonLib/extra/lib2to3/tests/test_fixers.py delete mode 100644 PythonLib/extra/lib2to3/tests/test_main.py delete mode 100644 PythonLib/extra/lib2to3/tests/test_parser.py delete mode 100644 PythonLib/extra/lib2to3/tests/test_pytree.py delete mode 100644 PythonLib/extra/lib2to3/tests/test_refactor.py delete mode 100644 PythonLib/extra/lib2to3/tests/test_util.py create mode 100644 PythonLib/full/_ssl.pyd delete mode 100644 PythonLib/full/json/tests/__init__.py delete mode 100644 PythonLib/full/json/tests/test_check_circular.py delete mode 100644 PythonLib/full/json/tests/test_decode.py delete mode 100644 PythonLib/full/json/tests/test_default.py delete mode 100644 PythonLib/full/json/tests/test_dump.py delete mode 100644 PythonLib/full/json/tests/test_encode_basestring_ascii.py delete mode 100644 PythonLib/full/json/tests/test_fail.py delete mode 100644 PythonLib/full/json/tests/test_float.py delete mode 100644 PythonLib/full/json/tests/test_indent.py delete mode 100644 PythonLib/full/json/tests/test_pass1.py delete mode 100644 PythonLib/full/json/tests/test_pass2.py delete mode 100644 PythonLib/full/json/tests/test_pass3.py delete mode 100644 PythonLib/full/json/tests/test_recursion.py delete mode 100644 PythonLib/full/json/tests/test_scanstring.py delete mode 100644 PythonLib/full/json/tests/test_separators.py delete mode 100644 PythonLib/full/json/tests/test_speedups.py delete mode 100644 PythonLib/full/json/tests/test_tool.py delete mode 100644 PythonLib/full/json/tests/test_unicode.py delete mode 100644 PythonLib/full/plat-generic/regen delete mode 100644 PythonLib/full/pydoc_data/__init__.py delete mode 100644 PythonLib/full/pydoc_data/topics.py delete mode 100644 PythonLib/full/unittest/test/__init__.py delete mode 100644 PythonLib/full/unittest/test/dummy.py delete mode 100644 PythonLib/full/unittest/test/support.py delete mode 100644 PythonLib/full/unittest/test/test_assertions.py delete mode 100644 PythonLib/full/unittest/test/test_break.py delete mode 100644 PythonLib/full/unittest/test/test_case.py delete mode 100644 PythonLib/full/unittest/test/test_discovery.py delete mode 100644 PythonLib/full/unittest/test/test_functiontestcase.py delete mode 100644 PythonLib/full/unittest/test/test_loader.py delete mode 100644 PythonLib/full/unittest/test/test_program.py delete mode 100644 PythonLib/full/unittest/test/test_result.py delete mode 100644 PythonLib/full/unittest/test/test_runner.py delete mode 100644 PythonLib/full/unittest/test/test_setups.py delete mode 100644 PythonLib/full/unittest/test/test_skipping.py delete mode 100644 PythonLib/full/unittest/test/test_suite.py diff --git a/PythonLib/extra/_bsddb.pyd b/PythonLib/extra/_bsddb.pyd index 1da2bcc3a2c4e7d5498c66ca131291a815a0381b..e6888979474922f3c3e8aed1d74f1e327faa5312 100644 GIT binary patch literal 1106432 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


}JiS#%cT-v$LYe(ONT3=$80( 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%0Af;?PUj_b8(h_GZpmWC@8^ZF&jZPh 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 literal 1129984 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�-NXj*F2{uT~4|pgE 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 uiM%&M|DM4Ap1}W}!2kD8;Qs)!Xv=~C diff --git a/PythonLib/extra/bsddb/dbshelve.py b/PythonLib/extra/bsddb/dbshelve.py index 85deb13a..7d0daa2f 100644 --- a/PythonLib/extra/bsddb/dbshelve.py +++ b/PythonLib/extra/bsddb/dbshelve.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python #------------------------------------------------------------------------ # Copyright (c) 1997-2001 by Total Control Software # All Rights Reserved diff --git a/PythonLib/extra/bsddb/test/__init__.py b/PythonLib/extra/bsddb/test/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/PythonLib/extra/bsddb/test/test_all.py b/PythonLib/extra/bsddb/test/test_all.py deleted file mode 100644 index caef1ac2..00000000 --- a/PythonLib/extra/bsddb/test/test_all.py +++ /dev/null @@ -1,623 +0,0 @@ -"""Run all test cases. -""" - -import sys -import os -import unittest -try: - # For Pythons w/distutils pybsddb - import bsddb3 as bsddb -except ImportError: - # For Python 2.3 - import bsddb - - -if sys.version_info[0] >= 3 : - charset = "iso8859-1" # Full 8 bit - - class logcursor_py3k(object) : - def __init__(self, env) : - self._logcursor = env.log_cursor() - - def __getattr__(self, v) : - return getattr(self._logcursor, v) - - def __next__(self) : - v = getattr(self._logcursor, "next")() - if v is not None : - v = (v[0], v[1].decode(charset)) - return v - - next = __next__ - - def first(self) : - v = self._logcursor.first() - if v is not None : - v = (v[0], v[1].decode(charset)) - return v - - def last(self) : - v = self._logcursor.last() - if v is not None : - v = (v[0], v[1].decode(charset)) - return v - - def prev(self) : - v = self._logcursor.prev() - if v is not None : - v = (v[0], v[1].decode(charset)) - return v - - def current(self) : - v = self._logcursor.current() - if v is not None : - v = (v[0], v[1].decode(charset)) - return v - - def set(self, lsn) : - v = self._logcursor.set(lsn) - if v is not None : - v = (v[0], v[1].decode(charset)) - return v - - class cursor_py3k(object) : - def __init__(self, db, *args, **kwargs) : - self._dbcursor = db.cursor(*args, **kwargs) - - def __getattr__(self, v) : - return getattr(self._dbcursor, v) - - def _fix(self, v) : - if v is None : return None - key, value = v - if isinstance(key, bytes) : - key = key.decode(charset) - return (key, value.decode(charset)) - - def __next__(self) : - v = getattr(self._dbcursor, "next")() - return self._fix(v) - - next = __next__ - - def previous(self) : - v = self._dbcursor.previous() - return self._fix(v) - - def last(self) : - v = self._dbcursor.last() - return self._fix(v) - - def set(self, k) : - if isinstance(k, str) : - k = bytes(k, charset) - v = self._dbcursor.set(k) - return self._fix(v) - - def set_recno(self, num) : - v = self._dbcursor.set_recno(num) - return self._fix(v) - - def set_range(self, k, dlen=-1, doff=-1) : - if isinstance(k, str) : - k = bytes(k, charset) - v = self._dbcursor.set_range(k, dlen=dlen, doff=doff) - return self._fix(v) - - def dup(self, flags=0) : - cursor = self._dbcursor.dup(flags) - return dup_cursor_py3k(cursor) - - def next_dup(self) : - v = self._dbcursor.next_dup() - return self._fix(v) - - def next_nodup(self) : - v = self._dbcursor.next_nodup() - return self._fix(v) - - def put(self, key, data, flags=0, dlen=-1, doff=-1) : - if isinstance(key, str) : - key = bytes(key, charset) - if isinstance(data, str) : - value = bytes(data, charset) - return self._dbcursor.put(key, data, flags=flags, dlen=dlen, - doff=doff) - - def current(self, flags=0, dlen=-1, doff=-1) : - v = self._dbcursor.current(flags=flags, dlen=dlen, doff=doff) - return self._fix(v) - - def first(self) : - v = self._dbcursor.first() - return self._fix(v) - - def pget(self, key=None, data=None, flags=0) : - # Incorrect because key can be a bare number, - # but enough to pass testsuite - if isinstance(key, int) and (data is None) and (flags == 0) : - flags = key - key = None - if isinstance(key, str) : - key = bytes(key, charset) - if isinstance(data, int) and (flags==0) : - flags = data - data = None - if isinstance(data, str) : - data = bytes(data, charset) - v=self._dbcursor.pget(key=key, data=data, flags=flags) - if v is not None : - v1, v2, v3 = v - if isinstance(v1, bytes) : - v1 = v1.decode(charset) - if isinstance(v2, bytes) : - v2 = v2.decode(charset) - - v = (v1, v2, v3.decode(charset)) - - return v - - def join_item(self) : - v = self._dbcursor.join_item() - if v is not None : - v = v.decode(charset) - return v - - def get(self, *args, **kwargs) : - l = len(args) - if l == 2 : - k, f = args - if isinstance(k, str) : - k = bytes(k, "iso8859-1") - args = (k, f) - elif l == 3 : - k, d, f = args - if isinstance(k, str) : - k = bytes(k, charset) - if isinstance(d, str) : - d = bytes(d, charset) - args =(k, d, f) - - v = self._dbcursor.get(*args, **kwargs) - if v is not None : - k, v = v - if isinstance(k, bytes) : - k = k.decode(charset) - v = (k, v.decode(charset)) - return v - - def get_both(self, key, value) : - if isinstance(key, str) : - key = bytes(key, charset) - if isinstance(value, str) : - value = bytes(value, charset) - v=self._dbcursor.get_both(key, value) - return self._fix(v) - - class dup_cursor_py3k(cursor_py3k) : - def __init__(self, dbcursor) : - self._dbcursor = dbcursor - - class DB_py3k(object) : - def __init__(self, *args, **kwargs) : - args2=[] - for i in args : - if isinstance(i, DBEnv_py3k) : - i = i._dbenv - args2.append(i) - args = tuple(args2) - for k, v in kwargs.items() : - if isinstance(v, DBEnv_py3k) : - kwargs[k] = v._dbenv - - self._db = bsddb._db.DB_orig(*args, **kwargs) - - def __contains__(self, k) : - if isinstance(k, str) : - k = bytes(k, charset) - return getattr(self._db, "has_key")(k) - - def __getitem__(self, k) : - if isinstance(k, str) : - k = bytes(k, charset) - v = self._db[k] - if v is not None : - v = v.decode(charset) - return v - - def __setitem__(self, k, v) : - if isinstance(k, str) : - k = bytes(k, charset) - if isinstance(v, str) : - v = bytes(v, charset) - self._db[k] = v - - def __delitem__(self, k) : - if isinstance(k, str) : - k = bytes(k, charset) - del self._db[k] - - def __getattr__(self, v) : - return getattr(self._db, v) - - def __len__(self) : - return len(self._db) - - def has_key(self, k, txn=None) : - if isinstance(k, str) : - k = bytes(k, charset) - return self._db.has_key(k, txn=txn) - - def set_re_delim(self, c) : - if isinstance(c, str) : # We can use a numeric value byte too - c = bytes(c, charset) - return self._db.set_re_delim(c) - - def set_re_pad(self, c) : - if isinstance(c, str) : # We can use a numeric value byte too - c = bytes(c, charset) - return self._db.set_re_pad(c) - - def get_re_source(self) : - source = self._db.get_re_source() - return source.decode(charset) - - def put(self, key, data, txn=None, flags=0, dlen=-1, doff=-1) : - if isinstance(key, str) : - key = bytes(key, charset) - if isinstance(data, str) : - value = bytes(data, charset) - return self._db.put(key, data, flags=flags, txn=txn, dlen=dlen, - doff=doff) - - def append(self, value, txn=None) : - if isinstance(value, str) : - value = bytes(value, charset) - return self._db.append(value, txn=txn) - - def get_size(self, key) : - if isinstance(key, str) : - key = bytes(key, charset) - return self._db.get_size(key) - - def exists(self, key, *args, **kwargs) : - if isinstance(key, str) : - key = bytes(key, charset) - return self._db.exists(key, *args, **kwargs) - - def get(self, key, default="MagicCookie", txn=None, flags=0, dlen=-1, doff=-1) : - if isinstance(key, str) : - key = bytes(key, charset) - if default != "MagicCookie" : # Magic for 'test_get_none.py' - v=self._db.get(key, default=default, txn=txn, flags=flags, - dlen=dlen, doff=doff) - else : - v=self._db.get(key, txn=txn, flags=flags, - dlen=dlen, doff=doff) - if (v is not None) and isinstance(v, bytes) : - v = v.decode(charset) - return v - - def pget(self, key, txn=None) : - if isinstance(key, str) : - key = bytes(key, charset) - v=self._db.pget(key, txn=txn) - if v is not None : - v1, v2 = v - if isinstance(v1, bytes) : - v1 = v1.decode(charset) - - v = (v1, v2.decode(charset)) - return v - - def get_both(self, key, value, txn=None, flags=0) : - if isinstance(key, str) : - key = bytes(key, charset) - if isinstance(value, str) : - value = bytes(value, charset) - v=self._db.get_both(key, value, txn=txn, flags=flags) - if v is not None : - v = v.decode(charset) - return v - - def delete(self, key, txn=None) : - if isinstance(key, str) : - key = bytes(key, charset) - return self._db.delete(key, txn=txn) - - def keys(self) : - k = self._db.keys() - if len(k) and isinstance(k[0], bytes) : - return [i.decode(charset) for i in self._db.keys()] - else : - return k - - def items(self) : - data = self._db.items() - if not len(data) : return data - data2 = [] - for k, v in data : - if isinstance(k, bytes) : - k = k.decode(charset) - data2.append((k, v.decode(charset))) - return data2 - - def associate(self, secondarydb, callback, flags=0, txn=None) : - class associate_callback(object) : - def __init__(self, callback) : - self._callback = callback - - def callback(self, key, data) : - if isinstance(key, str) : - key = key.decode(charset) - data = data.decode(charset) - key = self._callback(key, data) - if (key != bsddb._db.DB_DONOTINDEX) : - if isinstance(key, str) : - key = bytes(key, charset) - elif isinstance(key, list) : - key2 = [] - for i in key : - if isinstance(i, str) : - i = bytes(i, charset) - key2.append(i) - key = key2 - return key - - return self._db.associate(secondarydb._db, - associate_callback(callback).callback, flags=flags, - txn=txn) - - def cursor(self, txn=None, flags=0) : - return cursor_py3k(self._db, txn=txn, flags=flags) - - def join(self, cursor_list) : - cursor_list = [i._dbcursor for i in cursor_list] - return dup_cursor_py3k(self._db.join(cursor_list)) - - class DBEnv_py3k(object) : - def __init__(self, *args, **kwargs) : - self._dbenv = bsddb._db.DBEnv_orig(*args, **kwargs) - - def __getattr__(self, v) : - return getattr(self._dbenv, v) - - def log_cursor(self, flags=0) : - return logcursor_py3k(self._dbenv) - - def get_lg_dir(self) : - return self._dbenv.get_lg_dir().decode(charset) - - def get_tmp_dir(self) : - return self._dbenv.get_tmp_dir().decode(charset) - - def get_data_dirs(self) : - return tuple( - (i.decode(charset) for i in self._dbenv.get_data_dirs())) - - class DBSequence_py3k(object) : - def __init__(self, db, *args, **kwargs) : - self._db=db - self._dbsequence = bsddb._db.DBSequence_orig(db._db, *args, **kwargs) - - def __getattr__(self, v) : - return getattr(self._dbsequence, v) - - def open(self, key, *args, **kwargs) : - return self._dbsequence.open(bytes(key, charset), *args, **kwargs) - - def get_key(self) : - return self._dbsequence.get_key().decode(charset) - - def get_dbp(self) : - return self._db - - import string - string.letters=[chr(i) for i in xrange(65,91)] - - bsddb._db.DBEnv_orig = bsddb._db.DBEnv - bsddb._db.DB_orig = bsddb._db.DB - if bsddb.db.version() <= (4, 3) : - bsddb._db.DBSequence_orig = None - else : - bsddb._db.DBSequence_orig = bsddb._db.DBSequence - - def do_proxy_db_py3k(flag) : - flag2 = do_proxy_db_py3k.flag - do_proxy_db_py3k.flag = flag - if flag : - bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = DBEnv_py3k - bsddb.DB = bsddb.db.DB = bsddb._db.DB = DB_py3k - bsddb._db.DBSequence = DBSequence_py3k - else : - bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = bsddb._db.DBEnv_orig - bsddb.DB = bsddb.db.DB = bsddb._db.DB = bsddb._db.DB_orig - bsddb._db.DBSequence = bsddb._db.DBSequence_orig - return flag2 - - do_proxy_db_py3k.flag = False - do_proxy_db_py3k(True) - -try: - # For Pythons w/distutils pybsddb - from bsddb3 import db, dbtables, dbutils, dbshelve, \ - hashopen, btopen, rnopen, dbobj -except ImportError: - # For Python 2.3 - from bsddb import db, dbtables, dbutils, dbshelve, \ - hashopen, btopen, rnopen, dbobj - -try: - from bsddb3 import test_support -except ImportError: - if sys.version_info[0] < 3 : - from test import test_support - else : - from test import support as test_support - - -try: - if sys.version_info[0] < 3 : - from threading import Thread, currentThread - del Thread, currentThread - else : - from threading import Thread, current_thread - del Thread, current_thread - have_threads = True -except ImportError: - have_threads = False - -verbose = 0 -if 'verbose' in sys.argv: - verbose = 1 - sys.argv.remove('verbose') - -if 'silent' in sys.argv: # take care of old flag, just in case - verbose = 0 - sys.argv.remove('silent') - - -def print_versions(): - print - print '-=' * 38 - print db.DB_VERSION_STRING - print 'bsddb.db.version(): %s' % (db.version(), ) - if db.version() >= (5, 0) : - print 'bsddb.db.full_version(): %s' %repr(db.full_version()) - print 'bsddb.db.__version__: %s' % db.__version__ - print 'bsddb.db.cvsid: %s' % db.cvsid - - # Workaround for allowing generating an EGGs as a ZIP files. - suffix="__" - print 'py module: %s' % getattr(bsddb, "__file"+suffix) - print 'extension module: %s' % getattr(bsddb, "__file"+suffix) - - print 'python version: %s' % sys.version - print 'My pid: %s' % os.getpid() - print '-=' * 38 - - -def get_new_path(name) : - get_new_path.mutex.acquire() - try : - import os - path=os.path.join(get_new_path.prefix, - name+"_"+str(os.getpid())+"_"+str(get_new_path.num)) - get_new_path.num+=1 - finally : - get_new_path.mutex.release() - return path - -def get_new_environment_path() : - path=get_new_path("environment") - import os - try: - os.makedirs(path,mode=0700) - except os.error: - test_support.rmtree(path) - os.makedirs(path) - return path - -def get_new_database_path() : - path=get_new_path("database") - import os - if os.path.exists(path) : - os.remove(path) - return path - - -# This path can be overriden via "set_test_path_prefix()". -import os, os.path -get_new_path.prefix=os.path.join(os.environ.get("TMPDIR", - os.path.join(os.sep,"tmp")), "z-Berkeley_DB") -get_new_path.num=0 - -def get_test_path_prefix() : - return get_new_path.prefix - -def set_test_path_prefix(path) : - get_new_path.prefix=path - -def remove_test_path_directory() : - test_support.rmtree(get_new_path.prefix) - -if have_threads : - import threading - get_new_path.mutex=threading.Lock() - del threading -else : - class Lock(object) : - def acquire(self) : - pass - def release(self) : - pass - get_new_path.mutex=Lock() - del Lock - - - -class PrintInfoFakeTest(unittest.TestCase): - def testPrintVersions(self): - print_versions() - - -# This little hack is for when this module is run as main and all the -# other modules import it so they will still be able to get the right -# verbose setting. It's confusing but it works. -if sys.version_info[0] < 3 : - import test_all - test_all.verbose = verbose -else : - import sys - print >>sys.stderr, "Work to do!" - - -def suite(module_prefix='', timing_check=None): - test_modules = [ - 'test_associate', - 'test_basics', - 'test_dbenv', - 'test_db', - 'test_compare', - 'test_compat', - 'test_cursor_pget_bug', - 'test_dbobj', - 'test_dbshelve', - 'test_dbtables', - 'test_distributed_transactions', - 'test_early_close', - 'test_fileid', - 'test_get_none', - 'test_join', - 'test_lock', - 'test_misc', - 'test_pickle', - 'test_queue', - 'test_recno', - 'test_replication', - 'test_sequence', - 'test_thread', - ] - - alltests = unittest.TestSuite() - for name in test_modules: - #module = __import__(name) - # Do it this way so that suite may be called externally via - # python's Lib/test/test_bsddb3. - module = __import__(module_prefix+name, globals(), locals(), name) - - alltests.addTest(module.test_suite()) - if timing_check: - alltests.addTest(unittest.makeSuite(timing_check)) - return alltests - - -def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(PrintInfoFakeTest)) - return suite - - -if __name__ == '__main__': - print_versions() - unittest.main(defaultTest='suite') diff --git a/PythonLib/extra/bsddb/test/test_associate.py b/PythonLib/extra/bsddb/test/test_associate.py deleted file mode 100644 index 7a49e11e..00000000 --- a/PythonLib/extra/bsddb/test/test_associate.py +++ /dev/null @@ -1,465 +0,0 @@ -""" -TestCases for DB.associate. -""" - -import sys, os, string -import time -from pprint import pprint - -import unittest -from test_all import db, dbshelve, test_support, verbose, have_threads, \ - get_new_environment_path - - -#---------------------------------------------------------------------- - - -musicdata = { -1 : ("Bad English", "The Price Of Love", "Rock"), -2 : ("DNA featuring Suzanne Vega", "Tom's Diner", "Rock"), -3 : ("George Michael", "Praying For Time", "Rock"), -4 : ("Gloria Estefan", "Here We Are", "Rock"), -5 : ("Linda Ronstadt", "Don't Know Much", "Rock"), -6 : ("Michael Bolton", "How Am I Supposed To Live Without You", "Blues"), -7 : ("Paul Young", "Oh Girl", "Rock"), -8 : ("Paula Abdul", "Opposites Attract", "Rock"), -9 : ("Richard Marx", "Should've Known Better", "Rock"), -10: ("Rod Stewart", "Forever Young", "Rock"), -11: ("Roxette", "Dangerous", "Rock"), -12: ("Sheena Easton", "The Lover In Me", "Rock"), -13: ("Sinead O'Connor", "Nothing Compares 2 U", "Rock"), -14: ("Stevie B.", "Because I Love You", "Rock"), -15: ("Taylor Dayne", "Love Will Lead You Back", "Rock"), -16: ("The Bangles", "Eternal Flame", "Rock"), -17: ("Wilson Phillips", "Release Me", "Rock"), -18: ("Billy Joel", "Blonde Over Blue", "Rock"), -19: ("Billy Joel", "Famous Last Words", "Rock"), -20: ("Billy Joel", "Lullabye (Goodnight, My Angel)", "Rock"), -21: ("Billy Joel", "The River Of Dreams", "Rock"), -22: ("Billy Joel", "Two Thousand Years", "Rock"), -23: ("Janet Jackson", "Alright", "Rock"), -24: ("Janet Jackson", "Black Cat", "Rock"), -25: ("Janet Jackson", "Come Back To Me", "Rock"), -26: ("Janet Jackson", "Escapade", "Rock"), -27: ("Janet Jackson", "Love Will Never Do (Without You)", "Rock"), -28: ("Janet Jackson", "Miss You Much", "Rock"), -29: ("Janet Jackson", "Rhythm Nation", "Rock"), -30: ("Janet Jackson", "State Of The World", "Rock"), -31: ("Janet Jackson", "The Knowledge", "Rock"), -32: ("Spyro Gyra", "End of Romanticism", "Jazz"), -33: ("Spyro Gyra", "Heliopolis", "Jazz"), -34: ("Spyro Gyra", "Jubilee", "Jazz"), -35: ("Spyro Gyra", "Little Linda", "Jazz"), -36: ("Spyro Gyra", "Morning Dance", "Jazz"), -37: ("Spyro Gyra", "Song for Lorraine", "Jazz"), -38: ("Yes", "Owner Of A Lonely Heart", "Rock"), -39: ("Yes", "Rhythm Of Love", "Rock"), -40: ("Cusco", "Dream Catcher", "New Age"), -41: ("Cusco", "Geronimos Laughter", "New Age"), -42: ("Cusco", "Ghost Dance", "New Age"), -43: ("Blue Man Group", "Drumbone", "New Age"), -44: ("Blue Man Group", "Endless Column", "New Age"), -45: ("Blue Man Group", "Klein Mandelbrot", "New Age"), -46: ("Kenny G", "Silhouette", "Jazz"), -47: ("Sade", "Smooth Operator", "Jazz"), -48: ("David Arkenstone", "Papillon (On The Wings Of The Butterfly)", - "New Age"), -49: ("David Arkenstone", "Stepping Stars", "New Age"), -50: ("David Arkenstone", "Carnation Lily Lily Rose", "New Age"), -51: ("David Lanz", "Behind The Waterfall", "New Age"), -52: ("David Lanz", "Cristofori's Dream", "New Age"), -53: ("David Lanz", "Heartsounds", "New Age"), -54: ("David Lanz", "Leaves on the Seine", "New Age"), -99: ("unknown artist", "Unnamed song", "Unknown"), -} - -#---------------------------------------------------------------------- - -class AssociateErrorTestCase(unittest.TestCase): - def setUp(self): - self.filename = self.__class__.__name__ + '.db' - self.homeDir = get_new_environment_path() - self.env = db.DBEnv() - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL) - - def tearDown(self): - self.env.close() - self.env = None - test_support.rmtree(self.homeDir) - - def test00_associateDBError(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test00_associateDBError..." % \ - self.__class__.__name__ - - dupDB = db.DB(self.env) - dupDB.set_flags(db.DB_DUP) - dupDB.open(self.filename, "primary", db.DB_BTREE, db.DB_CREATE) - - secDB = db.DB(self.env) - secDB.open(self.filename, "secondary", db.DB_BTREE, db.DB_CREATE) - - # dupDB has been configured to allow duplicates, it can't - # associate with a secondary. Berkeley DB will return an error. - try: - def f(a,b): return a+b - dupDB.associate(secDB, f) - except db.DBError: - # good - secDB.close() - dupDB.close() - else: - secDB.close() - dupDB.close() - self.fail("DBError exception was expected") - - - -#---------------------------------------------------------------------- - - -class AssociateTestCase(unittest.TestCase): - keytype = '' - envFlags = 0 - dbFlags = 0 - - def setUp(self): - self.filename = self.__class__.__name__ + '.db' - self.homeDir = get_new_environment_path() - self.env = db.DBEnv() - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | - db.DB_INIT_LOCK | db.DB_THREAD | self.envFlags) - - def tearDown(self): - self.closeDB() - self.env.close() - self.env = None - test_support.rmtree(self.homeDir) - - def addDataToDB(self, d, txn=None): - for key, value in musicdata.items(): - if type(self.keytype) == type(''): - key = "%02d" % key - d.put(key, '|'.join(value), txn=txn) - - def createDB(self, txn=None): - self.cur = None - self.secDB = None - self.primary = db.DB(self.env) - self.primary.set_get_returns_none(2) - self.primary.open(self.filename, "primary", self.dbtype, - db.DB_CREATE | db.DB_THREAD | self.dbFlags, txn=txn) - - def closeDB(self): - if self.cur: - self.cur.close() - self.cur = None - if self.secDB: - self.secDB.close() - self.secDB = None - self.primary.close() - self.primary = None - - def getDB(self): - return self.primary - - - def _associateWithDB(self, getGenre): - self.createDB() - - self.secDB = db.DB(self.env) - self.secDB.set_flags(db.DB_DUP) - self.secDB.set_get_returns_none(2) - self.secDB.open(self.filename, "secondary", db.DB_BTREE, - db.DB_CREATE | db.DB_THREAD | self.dbFlags) - self.getDB().associate(self.secDB, getGenre) - - self.addDataToDB(self.getDB()) - - self.finish_test(self.secDB) - - def test01_associateWithDB(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test01_associateWithDB..." % \ - self.__class__.__name__ - - return self._associateWithDB(self.getGenre) - - def _associateAfterDB(self, getGenre) : - self.createDB() - self.addDataToDB(self.getDB()) - - self.secDB = db.DB(self.env) - self.secDB.set_flags(db.DB_DUP) - self.secDB.open(self.filename, "secondary", db.DB_BTREE, - db.DB_CREATE | db.DB_THREAD | self.dbFlags) - - # adding the DB_CREATE flag will cause it to index existing records - self.getDB().associate(self.secDB, getGenre, db.DB_CREATE) - - self.finish_test(self.secDB) - - def test02_associateAfterDB(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test02_associateAfterDB..." % \ - self.__class__.__name__ - - return self._associateAfterDB(self.getGenre) - - if db.version() >= (4, 6): - def test03_associateWithDB(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test03_associateWithDB..." % \ - self.__class__.__name__ - - return self._associateWithDB(self.getGenreList) - - def test04_associateAfterDB(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test04_associateAfterDB..." % \ - self.__class__.__name__ - - return self._associateAfterDB(self.getGenreList) - - - def finish_test(self, secDB, txn=None): - # 'Blues' should not be in the secondary database - vals = secDB.pget('Blues', txn=txn) - self.assertEqual(vals, None, vals) - - vals = secDB.pget('Unknown', txn=txn) - self.assertTrue(vals[0] == 99 or vals[0] == '99', vals) - vals[1].index('Unknown') - vals[1].index('Unnamed') - vals[1].index('unknown') - - if verbose: - print "Primary key traversal:" - self.cur = self.getDB().cursor(txn) - count = 0 - rec = self.cur.first() - while rec is not None: - if type(self.keytype) == type(''): - self.assertTrue(int(rec[0])) # for primary db, key is a number - else: - self.assertTrue(rec[0] and type(rec[0]) == type(0)) - count = count + 1 - if verbose: - print rec - rec = getattr(self.cur, "next")() - self.assertEqual(count, len(musicdata)) # all items accounted for - - - if verbose: - print "Secondary key traversal:" - self.cur = secDB.cursor(txn) - count = 0 - - # test cursor pget - vals = self.cur.pget('Unknown', flags=db.DB_LAST) - self.assertTrue(vals[1] == 99 or vals[1] == '99', vals) - self.assertEqual(vals[0], 'Unknown') - vals[2].index('Unknown') - vals[2].index('Unnamed') - vals[2].index('unknown') - - vals = self.cur.pget('Unknown', data='wrong value', flags=db.DB_GET_BOTH) - self.assertEqual(vals, None, vals) - - rec = self.cur.first() - self.assertEqual(rec[0], "Jazz") - while rec is not None: - count = count + 1 - if verbose: - print rec - rec = getattr(self.cur, "next")() - # all items accounted for EXCEPT for 1 with "Blues" genre - self.assertEqual(count, len(musicdata)-1) - - self.cur = None - - def getGenre(self, priKey, priData): - self.assertEqual(type(priData), type("")) - genre = priData.split('|')[2] - - if verbose: - print 'getGenre key: %r data: %r' % (priKey, priData) - - if genre == 'Blues': - return db.DB_DONOTINDEX - else: - return genre - - def getGenreList(self, priKey, PriData) : - v = self.getGenre(priKey, PriData) - if type(v) == type("") : - v = [v] - return v - - -#---------------------------------------------------------------------- - - -class AssociateHashTestCase(AssociateTestCase): - dbtype = db.DB_HASH - -class AssociateBTreeTestCase(AssociateTestCase): - dbtype = db.DB_BTREE - -class AssociateRecnoTestCase(AssociateTestCase): - dbtype = db.DB_RECNO - keytype = 0 - -#---------------------------------------------------------------------- - -class AssociateBTreeTxnTestCase(AssociateBTreeTestCase): - envFlags = db.DB_INIT_TXN - dbFlags = 0 - - def txn_finish_test(self, sDB, txn): - try: - self.finish_test(sDB, txn=txn) - finally: - if self.cur: - self.cur.close() - self.cur = None - if txn: - txn.commit() - - def test13_associate_in_transaction(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test13_associateAutoCommit..." % \ - self.__class__.__name__ - - txn = self.env.txn_begin() - try: - self.createDB(txn=txn) - - self.secDB = db.DB(self.env) - self.secDB.set_flags(db.DB_DUP) - self.secDB.set_get_returns_none(2) - self.secDB.open(self.filename, "secondary", db.DB_BTREE, - db.DB_CREATE | db.DB_THREAD, txn=txn) - self.getDB().associate(self.secDB, self.getGenre, txn=txn) - - self.addDataToDB(self.getDB(), txn=txn) - except: - txn.abort() - raise - - self.txn_finish_test(self.secDB, txn=txn) - - -#---------------------------------------------------------------------- - -class ShelveAssociateTestCase(AssociateTestCase): - - def createDB(self): - self.primary = dbshelve.open(self.filename, - dbname="primary", - dbenv=self.env, - filetype=self.dbtype) - - def addDataToDB(self, d): - for key, value in musicdata.items(): - if type(self.keytype) == type(''): - key = "%02d" % key - d.put(key, value) # save the value as is this time - - - def getGenre(self, priKey, priData): - self.assertEqual(type(priData), type(())) - if verbose: - print 'getGenre key: %r data: %r' % (priKey, priData) - genre = priData[2] - if genre == 'Blues': - return db.DB_DONOTINDEX - else: - return genre - - -class ShelveAssociateHashTestCase(ShelveAssociateTestCase): - dbtype = db.DB_HASH - -class ShelveAssociateBTreeTestCase(ShelveAssociateTestCase): - dbtype = db.DB_BTREE - -class ShelveAssociateRecnoTestCase(ShelveAssociateTestCase): - dbtype = db.DB_RECNO - keytype = 0 - - -#---------------------------------------------------------------------- - -class ThreadedAssociateTestCase(AssociateTestCase): - - def addDataToDB(self, d): - t1 = Thread(target = self.writer1, - args = (d, )) - t2 = Thread(target = self.writer2, - args = (d, )) - - t1.setDaemon(True) - t2.setDaemon(True) - t1.start() - t2.start() - t1.join() - t2.join() - - def writer1(self, d): - for key, value in musicdata.items(): - if type(self.keytype) == type(''): - key = "%02d" % key - d.put(key, '|'.join(value)) - - def writer2(self, d): - for x in range(100, 600): - key = 'z%2d' % x - value = [key] * 4 - d.put(key, '|'.join(value)) - - -class ThreadedAssociateHashTestCase(ShelveAssociateTestCase): - dbtype = db.DB_HASH - -class ThreadedAssociateBTreeTestCase(ShelveAssociateTestCase): - dbtype = db.DB_BTREE - -class ThreadedAssociateRecnoTestCase(ShelveAssociateTestCase): - dbtype = db.DB_RECNO - keytype = 0 - - -#---------------------------------------------------------------------- - -def test_suite(): - suite = unittest.TestSuite() - - suite.addTest(unittest.makeSuite(AssociateErrorTestCase)) - - suite.addTest(unittest.makeSuite(AssociateHashTestCase)) - suite.addTest(unittest.makeSuite(AssociateBTreeTestCase)) - suite.addTest(unittest.makeSuite(AssociateRecnoTestCase)) - - suite.addTest(unittest.makeSuite(AssociateBTreeTxnTestCase)) - - suite.addTest(unittest.makeSuite(ShelveAssociateHashTestCase)) - suite.addTest(unittest.makeSuite(ShelveAssociateBTreeTestCase)) - suite.addTest(unittest.makeSuite(ShelveAssociateRecnoTestCase)) - - if have_threads: - suite.addTest(unittest.makeSuite(ThreadedAssociateHashTestCase)) - suite.addTest(unittest.makeSuite(ThreadedAssociateBTreeTestCase)) - suite.addTest(unittest.makeSuite(ThreadedAssociateRecnoTestCase)) - - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_basics.py b/PythonLib/extra/bsddb/test/test_basics.py deleted file mode 100644 index 3c57be4f..00000000 --- a/PythonLib/extra/bsddb/test/test_basics.py +++ /dev/null @@ -1,1158 +0,0 @@ -""" -Basic TestCases for BTree and hash DBs, with and without a DBEnv, with -various DB flags, etc. -""" - -import os -import errno -import string -from pprint import pprint -import unittest -import time -import sys - -from test_all import db, test_support, verbose, get_new_environment_path, \ - get_new_database_path - -DASH = '-' - - -#---------------------------------------------------------------------- - -class VersionTestCase(unittest.TestCase): - def test00_version(self): - info = db.version() - if verbose: - print '\n', '-=' * 20 - print 'bsddb.db.version(): %s' % (info, ) - print db.DB_VERSION_STRING - print '-=' * 20 - self.assertEqual(info, (db.DB_VERSION_MAJOR, db.DB_VERSION_MINOR, - db.DB_VERSION_PATCH)) - -#---------------------------------------------------------------------- - -class BasicTestCase(unittest.TestCase): - dbtype = db.DB_UNKNOWN # must be set in derived class - cachesize = (0, 1024*1024, 1) - dbopenflags = 0 - dbsetflags = 0 - dbmode = 0660 - dbname = None - useEnv = 0 - envflags = 0 - envsetflags = 0 - - _numKeys = 1002 # PRIVATE. NOTE: must be an even value - - def setUp(self): - if self.useEnv: - self.homeDir=get_new_environment_path() - try: - self.env = db.DBEnv() - self.env.set_lg_max(1024*1024) - self.env.set_tx_max(30) - self._t = int(time.time()) - self.env.set_tx_timestamp(self._t) - self.env.set_flags(self.envsetflags, 1) - self.env.open(self.homeDir, self.envflags | db.DB_CREATE) - self.filename = "test" - # Yes, a bare except is intended, since we're re-raising the exc. - except: - test_support.rmtree(self.homeDir) - raise - else: - self.env = None - self.filename = get_new_database_path() - - # create and open the DB - self.d = db.DB(self.env) - if not self.useEnv : - self.d.set_cachesize(*self.cachesize) - cachesize = self.d.get_cachesize() - self.assertEqual(cachesize[0], self.cachesize[0]) - self.assertEqual(cachesize[2], self.cachesize[2]) - # Berkeley DB expands the cache 25% accounting overhead, - # if the cache is small. - self.assertEqual(125, int(100.0*cachesize[1]/self.cachesize[1])) - self.d.set_flags(self.dbsetflags) - if self.dbname: - self.d.open(self.filename, self.dbname, self.dbtype, - self.dbopenflags|db.DB_CREATE, self.dbmode) - else: - self.d.open(self.filename, # try out keyword args - mode = self.dbmode, - dbtype = self.dbtype, - flags = self.dbopenflags|db.DB_CREATE) - - if not self.useEnv: - self.assertRaises(db.DBInvalidArgError, - self.d.set_cachesize, *self.cachesize) - - self.populateDB() - - - def tearDown(self): - self.d.close() - if self.env is not None: - self.env.close() - test_support.rmtree(self.homeDir) - else: - os.remove(self.filename) - - - - def populateDB(self, _txn=None): - d = self.d - - for x in range(self._numKeys//2): - key = '%04d' % (self._numKeys - x) # insert keys in reverse order - data = self.makeData(key) - d.put(key, data, _txn) - - d.put('empty value', '', _txn) - - for x in range(self._numKeys//2-1): - key = '%04d' % x # and now some in forward order - data = self.makeData(key) - d.put(key, data, _txn) - - if _txn: - _txn.commit() - - num = len(d) - if verbose: - print "created %d records" % num - - - def makeData(self, key): - return DASH.join([key] * 5) - - - - #---------------------------------------- - - def test01_GetsAndPuts(self): - d = self.d - - if verbose: - print '\n', '-=' * 30 - print "Running %s.test01_GetsAndPuts..." % self.__class__.__name__ - - for key in ['0001', '0100', '0400', '0700', '0999']: - data = d.get(key) - if verbose: - print data - - self.assertEqual(d.get('0321'), '0321-0321-0321-0321-0321') - - # By default non-existent keys return None... - self.assertEqual(d.get('abcd'), None) - - # ...but they raise exceptions in other situations. Call - # set_get_returns_none() to change it. - try: - d.delete('abcd') - except db.DBNotFoundError, val: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.DB_NOTFOUND) - else : - self.assertEqual(val.args[0], db.DB_NOTFOUND) - if verbose: print val - else: - self.fail("expected exception") - - - d.put('abcd', 'a new record') - self.assertEqual(d.get('abcd'), 'a new record') - - d.put('abcd', 'same key') - if self.dbsetflags & db.DB_DUP: - self.assertEqual(d.get('abcd'), 'a new record') - else: - self.assertEqual(d.get('abcd'), 'same key') - - - try: - d.put('abcd', 'this should fail', flags=db.DB_NOOVERWRITE) - except db.DBKeyExistError, val: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.DB_KEYEXIST) - else : - self.assertEqual(val.args[0], db.DB_KEYEXIST) - if verbose: print val - else: - self.fail("expected exception") - - if self.dbsetflags & db.DB_DUP: - self.assertEqual(d.get('abcd'), 'a new record') - else: - self.assertEqual(d.get('abcd'), 'same key') - - - d.sync() - d.close() - del d - - self.d = db.DB(self.env) - if self.dbname: - self.d.open(self.filename, self.dbname) - else: - self.d.open(self.filename) - d = self.d - - self.assertEqual(d.get('0321'), '0321-0321-0321-0321-0321') - if self.dbsetflags & db.DB_DUP: - self.assertEqual(d.get('abcd'), 'a new record') - else: - self.assertEqual(d.get('abcd'), 'same key') - - rec = d.get_both('0555', '0555-0555-0555-0555-0555') - if verbose: - print rec - - self.assertEqual(d.get_both('0555', 'bad data'), None) - - # test default value - data = d.get('bad key', 'bad data') - self.assertEqual(data, 'bad data') - - # any object can pass through - data = d.get('bad key', self) - self.assertEqual(data, self) - - s = d.stat() - self.assertEqual(type(s), type({})) - if verbose: - print 'd.stat() returned this dictionary:' - pprint(s) - - - #---------------------------------------- - - def test02_DictionaryMethods(self): - d = self.d - - if verbose: - print '\n', '-=' * 30 - print "Running %s.test02_DictionaryMethods..." % \ - self.__class__.__name__ - - for key in ['0002', '0101', '0401', '0701', '0998']: - data = d[key] - self.assertEqual(data, self.makeData(key)) - if verbose: - print data - - self.assertEqual(len(d), self._numKeys) - keys = d.keys() - self.assertEqual(len(keys), self._numKeys) - self.assertEqual(type(keys), type([])) - - d['new record'] = 'a new record' - self.assertEqual(len(d), self._numKeys+1) - keys = d.keys() - self.assertEqual(len(keys), self._numKeys+1) - - d['new record'] = 'a replacement record' - self.assertEqual(len(d), self._numKeys+1) - keys = d.keys() - self.assertEqual(len(keys), self._numKeys+1) - - if verbose: - print "the first 10 keys are:" - pprint(keys[:10]) - - self.assertEqual(d['new record'], 'a replacement record') - -# We check also the positional parameter - self.assertEqual(d.has_key('0001', None), 1) -# We check also the keyword parameter - self.assertEqual(d.has_key('spam', txn=None), 0) - - items = d.items() - self.assertEqual(len(items), self._numKeys+1) - self.assertEqual(type(items), type([])) - self.assertEqual(type(items[0]), type(())) - self.assertEqual(len(items[0]), 2) - - if verbose: - print "the first 10 items are:" - pprint(items[:10]) - - values = d.values() - self.assertEqual(len(values), self._numKeys+1) - self.assertEqual(type(values), type([])) - - if verbose: - print "the first 10 values are:" - pprint(values[:10]) - - - #---------------------------------------- - - def test02b_SequenceMethods(self): - d = self.d - - for key in ['0002', '0101', '0401', '0701', '0998']: - data = d[key] - self.assertEqual(data, self.makeData(key)) - if verbose: - print data - - self.assertTrue(hasattr(d, "__contains__")) - self.assertTrue("0401" in d) - self.assertFalse("1234" in d) - - - #---------------------------------------- - - def test03_SimpleCursorStuff(self, get_raises_error=0, set_raises_error=0): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test03_SimpleCursorStuff (get_error %s, set_error %s)..." % \ - (self.__class__.__name__, get_raises_error, set_raises_error) - - if self.env and self.dbopenflags & db.DB_AUTO_COMMIT: - txn = self.env.txn_begin() - else: - txn = None - c = self.d.cursor(txn=txn) - - rec = c.first() - count = 0 - while rec is not None: - count = count + 1 - if verbose and count % 100 == 0: - print rec - try: - rec = c.next() - except db.DBNotFoundError, val: - if get_raises_error: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.DB_NOTFOUND) - else : - self.assertEqual(val.args[0], db.DB_NOTFOUND) - if verbose: print val - rec = None - else: - self.fail("unexpected DBNotFoundError") - self.assertEqual(c.get_current_size(), len(c.current()[1]), - "%s != len(%r)" % (c.get_current_size(), c.current()[1])) - - self.assertEqual(count, self._numKeys) - - - rec = c.last() - count = 0 - while rec is not None: - count = count + 1 - if verbose and count % 100 == 0: - print rec - try: - rec = c.prev() - except db.DBNotFoundError, val: - if get_raises_error: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.DB_NOTFOUND) - else : - self.assertEqual(val.args[0], db.DB_NOTFOUND) - if verbose: print val - rec = None - else: - self.fail("unexpected DBNotFoundError") - - self.assertEqual(count, self._numKeys) - - rec = c.set('0505') - rec2 = c.current() - self.assertEqual(rec, rec2) - self.assertEqual(rec[0], '0505') - self.assertEqual(rec[1], self.makeData('0505')) - self.assertEqual(c.get_current_size(), len(rec[1])) - - # make sure we get empty values properly - rec = c.set('empty value') - self.assertEqual(rec[1], '') - self.assertEqual(c.get_current_size(), 0) - - try: - n = c.set('bad key') - except db.DBNotFoundError, val: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.DB_NOTFOUND) - else : - self.assertEqual(val.args[0], db.DB_NOTFOUND) - if verbose: print val - else: - if set_raises_error: - self.fail("expected exception") - if n is not None: - self.fail("expected None: %r" % (n,)) - - rec = c.get_both('0404', self.makeData('0404')) - self.assertEqual(rec, ('0404', self.makeData('0404'))) - - try: - n = c.get_both('0404', 'bad data') - except db.DBNotFoundError, val: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.DB_NOTFOUND) - else : - self.assertEqual(val.args[0], db.DB_NOTFOUND) - if verbose: print val - else: - if get_raises_error: - self.fail("expected exception") - if n is not None: - self.fail("expected None: %r" % (n,)) - - if self.d.get_type() == db.DB_BTREE: - rec = c.set_range('011') - if verbose: - print "searched for '011', found: ", rec - - rec = c.set_range('011',dlen=0,doff=0) - if verbose: - print "searched (partial) for '011', found: ", rec - if rec[1] != '': self.fail('expected empty data portion') - - ev = c.set_range('empty value') - if verbose: - print "search for 'empty value' returned", ev - if ev[1] != '': self.fail('empty value lookup failed') - - c.set('0499') - c.delete() - try: - rec = c.current() - except db.DBKeyEmptyError, val: - if get_raises_error: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.DB_KEYEMPTY) - else : - self.assertEqual(val.args[0], db.DB_KEYEMPTY) - if verbose: print val - else: - self.fail("unexpected DBKeyEmptyError") - else: - if get_raises_error: - self.fail('DBKeyEmptyError exception expected') - - c.next() - c2 = c.dup(db.DB_POSITION) - self.assertEqual(c.current(), c2.current()) - - c2.put('', 'a new value', db.DB_CURRENT) - self.assertEqual(c.current(), c2.current()) - self.assertEqual(c.current()[1], 'a new value') - - c2.put('', 'er', db.DB_CURRENT, dlen=0, doff=5) - self.assertEqual(c2.current()[1], 'a newer value') - - c.close() - c2.close() - if txn: - txn.commit() - - # time to abuse the closed cursors and hope we don't crash - methods_to_test = { - 'current': (), - 'delete': (), - 'dup': (db.DB_POSITION,), - 'first': (), - 'get': (0,), - 'next': (), - 'prev': (), - 'last': (), - 'put':('', 'spam', db.DB_CURRENT), - 'set': ("0505",), - } - for method, args in methods_to_test.items(): - try: - if verbose: - print "attempting to use a closed cursor's %s method" % \ - method - # a bug may cause a NULL pointer dereference... - getattr(c, method)(*args) - except db.DBError, val: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], 0) - else : - self.assertEqual(val.args[0], 0) - if verbose: print val - else: - self.fail("no exception raised when using a buggy cursor's" - "%s method" % method) - - # - # free cursor referencing a closed database, it should not barf: - # - oldcursor = self.d.cursor(txn=txn) - self.d.close() - - # this would originally cause a segfault when the cursor for a - # closed database was cleaned up. it should not anymore. - # SF pybsddb bug id 667343 - del oldcursor - - def test03b_SimpleCursorWithoutGetReturnsNone0(self): - # same test but raise exceptions instead of returning None - if verbose: - print '\n', '-=' * 30 - print "Running %s.test03b_SimpleCursorStuffWithoutGetReturnsNone..." % \ - self.__class__.__name__ - - old = self.d.set_get_returns_none(0) - self.assertEqual(old, 2) - self.test03_SimpleCursorStuff(get_raises_error=1, set_raises_error=1) - - def test03b_SimpleCursorWithGetReturnsNone1(self): - # same test but raise exceptions instead of returning None - if verbose: - print '\n', '-=' * 30 - print "Running %s.test03b_SimpleCursorStuffWithoutGetReturnsNone..." % \ - self.__class__.__name__ - - old = self.d.set_get_returns_none(1) - self.test03_SimpleCursorStuff(get_raises_error=0, set_raises_error=1) - - - def test03c_SimpleCursorGetReturnsNone2(self): - # same test but raise exceptions instead of returning None - if verbose: - print '\n', '-=' * 30 - print "Running %s.test03c_SimpleCursorStuffWithoutSetReturnsNone..." % \ - self.__class__.__name__ - - old = self.d.set_get_returns_none(1) - self.assertEqual(old, 2) - old = self.d.set_get_returns_none(2) - self.assertEqual(old, 1) - self.test03_SimpleCursorStuff(get_raises_error=0, set_raises_error=0) - - if db.version() >= (4, 6): - def test03d_SimpleCursorPriority(self) : - c = self.d.cursor() - c.set_priority(db.DB_PRIORITY_VERY_LOW) # Positional - self.assertEqual(db.DB_PRIORITY_VERY_LOW, c.get_priority()) - c.set_priority(priority=db.DB_PRIORITY_HIGH) # Keyword - self.assertEqual(db.DB_PRIORITY_HIGH, c.get_priority()) - c.close() - - #---------------------------------------- - - def test04_PartialGetAndPut(self): - d = self.d - if verbose: - print '\n', '-=' * 30 - print "Running %s.test04_PartialGetAndPut..." % \ - self.__class__.__name__ - - key = "partialTest" - data = "1" * 1000 + "2" * 1000 - d.put(key, data) - self.assertEqual(d.get(key), data) - self.assertEqual(d.get(key, dlen=20, doff=990), - ("1" * 10) + ("2" * 10)) - - d.put("partialtest2", ("1" * 30000) + "robin" ) - self.assertEqual(d.get("partialtest2", dlen=5, doff=30000), "robin") - - # There seems to be a bug in DB here... Commented out the test for - # now. - ##self.assertEqual(d.get("partialtest2", dlen=5, doff=30010), "") - - if self.dbsetflags != db.DB_DUP: - # Partial put with duplicate records requires a cursor - d.put(key, "0000", dlen=2000, doff=0) - self.assertEqual(d.get(key), "0000") - - d.put(key, "1111", dlen=1, doff=2) - self.assertEqual(d.get(key), "0011110") - - #---------------------------------------- - - def test05_GetSize(self): - d = self.d - if verbose: - print '\n', '-=' * 30 - print "Running %s.test05_GetSize..." % self.__class__.__name__ - - for i in range(1, 50000, 500): - key = "size%s" % i - #print "before ", i, - d.put(key, "1" * i) - #print "after", - self.assertEqual(d.get_size(key), i) - #print "done" - - #---------------------------------------- - - def test06_Truncate(self): - d = self.d - if verbose: - print '\n', '-=' * 30 - print "Running %s.test06_Truncate..." % self.__class__.__name__ - - d.put("abcde", "ABCDE"); - num = d.truncate() - self.assertTrue(num >= 1, "truncate returned <= 0 on non-empty database") - num = d.truncate() - self.assertEqual(num, 0, - "truncate on empty DB returned nonzero (%r)" % (num,)) - - #---------------------------------------- - - def test07_verify(self): - # Verify bug solved in 4.7.3pre8 - self.d.close() - d = db.DB(self.env) - d.verify(self.filename) - - - #---------------------------------------- - - if db.version() >= (4, 6): - def test08_exists(self) : - self.d.put("abcde", "ABCDE") - self.assertTrue(self.d.exists("abcde") == True, - "DB->exists() returns wrong value") - self.assertTrue(self.d.exists("x") == False, - "DB->exists() returns wrong value") - - #---------------------------------------- - - if db.version() >= (4, 7): - def test_compact(self) : - d = self.d - self.assertEqual(0, d.compact(flags=db.DB_FREELIST_ONLY)) - self.assertEqual(0, d.compact(flags=db.DB_FREELIST_ONLY)) - d.put("abcde", "ABCDE"); - d.put("bcde", "BCDE"); - d.put("abc", "ABC"); - d.put("monty", "python"); - d.delete("abc") - d.delete("bcde") - d.compact(start='abcde', stop='monty', txn=None, - compact_fillpercent=42, compact_pages=1, - compact_timeout=50000000, - flags=db.DB_FREELIST_ONLY|db.DB_FREE_SPACE) - - #---------------------------------------- - -#---------------------------------------------------------------------- - - -class BasicBTreeTestCase(BasicTestCase): - dbtype = db.DB_BTREE - - -class BasicHashTestCase(BasicTestCase): - dbtype = db.DB_HASH - - -class BasicBTreeWithThreadFlagTestCase(BasicTestCase): - dbtype = db.DB_BTREE - dbopenflags = db.DB_THREAD - - -class BasicHashWithThreadFlagTestCase(BasicTestCase): - dbtype = db.DB_HASH - dbopenflags = db.DB_THREAD - - -class BasicWithEnvTestCase(BasicTestCase): - dbopenflags = db.DB_THREAD - useEnv = 1 - envflags = db.DB_THREAD | db.DB_INIT_MPOOL | db.DB_INIT_LOCK - - #---------------------------------------- - - def test09_EnvRemoveAndRename(self): - if not self.env: - return - - if verbose: - print '\n', '-=' * 30 - print "Running %s.test09_EnvRemoveAndRename..." % self.__class__.__name__ - - # can't rename or remove an open DB - self.d.close() - - newname = self.filename + '.renamed' - self.env.dbrename(self.filename, None, newname) - self.env.dbremove(newname) - - #---------------------------------------- - -class BasicBTreeWithEnvTestCase(BasicWithEnvTestCase): - dbtype = db.DB_BTREE - - -class BasicHashWithEnvTestCase(BasicWithEnvTestCase): - dbtype = db.DB_HASH - - -#---------------------------------------------------------------------- - -class BasicTransactionTestCase(BasicTestCase): - if (sys.version_info < (2, 7)) or ((sys.version_info >= (3, 0)) and - (sys.version_info < (3, 2))) : - def assertIn(self, a, b, msg=None) : - return self.assertTrue(a in b, msg=msg) - - dbopenflags = db.DB_THREAD | db.DB_AUTO_COMMIT - useEnv = 1 - envflags = (db.DB_THREAD | db.DB_INIT_MPOOL | db.DB_INIT_LOCK | - db.DB_INIT_TXN) - envsetflags = db.DB_AUTO_COMMIT - - - def tearDown(self): - self.txn.commit() - BasicTestCase.tearDown(self) - - - def populateDB(self): - txn = self.env.txn_begin() - BasicTestCase.populateDB(self, _txn=txn) - - self.txn = self.env.txn_begin() - - - def test06_Transactions(self): - d = self.d - if verbose: - print '\n', '-=' * 30 - print "Running %s.test06_Transactions..." % self.__class__.__name__ - - self.assertEqual(d.get('new rec', txn=self.txn), None) - d.put('new rec', 'this is a new record', self.txn) - self.assertEqual(d.get('new rec', txn=self.txn), - 'this is a new record') - self.txn.abort() - self.assertEqual(d.get('new rec'), None) - - self.txn = self.env.txn_begin() - - self.assertEqual(d.get('new rec', txn=self.txn), None) - d.put('new rec', 'this is a new record', self.txn) - self.assertEqual(d.get('new rec', txn=self.txn), - 'this is a new record') - self.txn.commit() - self.assertEqual(d.get('new rec'), 'this is a new record') - - self.txn = self.env.txn_begin() - c = d.cursor(self.txn) - rec = c.first() - count = 0 - while rec is not None: - count = count + 1 - if verbose and count % 100 == 0: - print rec - rec = c.next() - self.assertEqual(count, self._numKeys+1) - - c.close() # Cursors *MUST* be closed before commit! - self.txn.commit() - - # flush pending updates - self.env.txn_checkpoint (0, 0, 0) - - statDict = self.env.log_stat(0); - self.assertIn('magic', statDict) - self.assertIn('version', statDict) - self.assertIn('cur_file', statDict) - self.assertIn('region_nowait', statDict) - - # must have at least one log file present: - logs = self.env.log_archive(db.DB_ARCH_ABS | db.DB_ARCH_LOG) - self.assertNotEqual(logs, None) - for log in logs: - if verbose: - print 'log file: ' + log - logs = self.env.log_archive(db.DB_ARCH_REMOVE) - self.assertTrue(not logs) - - self.txn = self.env.txn_begin() - - #---------------------------------------- - - if db.version() >= (4, 6): - def test08_exists(self) : - txn = self.env.txn_begin() - self.d.put("abcde", "ABCDE", txn=txn) - txn.commit() - txn = self.env.txn_begin() - self.assertTrue(self.d.exists("abcde", txn=txn) == True, - "DB->exists() returns wrong value") - self.assertTrue(self.d.exists("x", txn=txn) == False, - "DB->exists() returns wrong value") - txn.abort() - - #---------------------------------------- - - def test09_TxnTruncate(self): - d = self.d - if verbose: - print '\n', '-=' * 30 - print "Running %s.test09_TxnTruncate..." % self.__class__.__name__ - - d.put("abcde", "ABCDE"); - txn = self.env.txn_begin() - num = d.truncate(txn) - self.assertTrue(num >= 1, "truncate returned <= 0 on non-empty database") - num = d.truncate(txn) - self.assertEqual(num, 0, - "truncate on empty DB returned nonzero (%r)" % (num,)) - txn.commit() - - #---------------------------------------- - - def test10_TxnLateUse(self): - txn = self.env.txn_begin() - txn.abort() - try: - txn.abort() - except db.DBError, e: - pass - else: - raise RuntimeError, "DBTxn.abort() called after DB_TXN no longer valid w/o an exception" - - txn = self.env.txn_begin() - txn.commit() - try: - txn.commit() - except db.DBError, e: - pass - else: - raise RuntimeError, "DBTxn.commit() called after DB_TXN no longer valid w/o an exception" - - - #---------------------------------------- - - - if db.version() >= (4, 4): - def test_txn_name(self) : - txn=self.env.txn_begin() - self.assertEqual(txn.get_name(), "") - txn.set_name("XXYY") - self.assertEqual(txn.get_name(), "XXYY") - txn.set_name("") - self.assertEqual(txn.get_name(), "") - txn.abort() - - #---------------------------------------- - - - def test_txn_set_timeout(self) : - txn=self.env.txn_begin() - txn.set_timeout(1234567, db.DB_SET_LOCK_TIMEOUT) - txn.set_timeout(2345678, flags=db.DB_SET_TXN_TIMEOUT) - txn.abort() - - #---------------------------------------- - - def test_get_tx_max(self) : - self.assertEqual(self.env.get_tx_max(), 30) - - def test_get_tx_timestamp(self) : - self.assertEqual(self.env.get_tx_timestamp(), self._t) - - - -class BTreeTransactionTestCase(BasicTransactionTestCase): - dbtype = db.DB_BTREE - -class HashTransactionTestCase(BasicTransactionTestCase): - dbtype = db.DB_HASH - - - -#---------------------------------------------------------------------- - -class BTreeRecnoTestCase(BasicTestCase): - dbtype = db.DB_BTREE - dbsetflags = db.DB_RECNUM - - def test09_RecnoInBTree(self): - d = self.d - if verbose: - print '\n', '-=' * 30 - print "Running %s.test09_RecnoInBTree..." % self.__class__.__name__ - - rec = d.get(200) - self.assertEqual(type(rec), type(())) - self.assertEqual(len(rec), 2) - if verbose: - print "Record #200 is ", rec - - c = d.cursor() - c.set('0200') - num = c.get_recno() - self.assertEqual(type(num), type(1)) - if verbose: - print "recno of d['0200'] is ", num - - rec = c.current() - self.assertEqual(c.set_recno(num), rec) - - c.close() - - - -class BTreeRecnoWithThreadFlagTestCase(BTreeRecnoTestCase): - dbopenflags = db.DB_THREAD - -#---------------------------------------------------------------------- - -class BasicDUPTestCase(BasicTestCase): - dbsetflags = db.DB_DUP - - def test10_DuplicateKeys(self): - d = self.d - if verbose: - print '\n', '-=' * 30 - print "Running %s.test10_DuplicateKeys..." % \ - self.__class__.__name__ - - d.put("dup0", "before") - for x in "The quick brown fox jumped over the lazy dog.".split(): - d.put("dup1", x) - d.put("dup2", "after") - - data = d.get("dup1") - self.assertEqual(data, "The") - if verbose: - print data - - c = d.cursor() - rec = c.set("dup1") - self.assertEqual(rec, ('dup1', 'The')) - - next_reg = c.next() - self.assertEqual(next_reg, ('dup1', 'quick')) - - rec = c.set("dup1") - count = c.count() - self.assertEqual(count, 9) - - next_dup = c.next_dup() - self.assertEqual(next_dup, ('dup1', 'quick')) - - rec = c.set('dup1') - while rec is not None: - if verbose: - print rec - rec = c.next_dup() - - c.set('dup1') - rec = c.next_nodup() - self.assertNotEqual(rec[0], 'dup1') - if verbose: - print rec - - c.close() - - - -class BTreeDUPTestCase(BasicDUPTestCase): - dbtype = db.DB_BTREE - -class HashDUPTestCase(BasicDUPTestCase): - dbtype = db.DB_HASH - -class BTreeDUPWithThreadTestCase(BasicDUPTestCase): - dbtype = db.DB_BTREE - dbopenflags = db.DB_THREAD - -class HashDUPWithThreadTestCase(BasicDUPTestCase): - dbtype = db.DB_HASH - dbopenflags = db.DB_THREAD - - -#---------------------------------------------------------------------- - -class BasicMultiDBTestCase(BasicTestCase): - dbname = 'first' - - def otherType(self): - if self.dbtype == db.DB_BTREE: - return db.DB_HASH - else: - return db.DB_BTREE - - def test11_MultiDB(self): - d1 = self.d - if verbose: - print '\n', '-=' * 30 - print "Running %s.test11_MultiDB..." % self.__class__.__name__ - - d2 = db.DB(self.env) - d2.open(self.filename, "second", self.dbtype, - self.dbopenflags|db.DB_CREATE) - d3 = db.DB(self.env) - d3.open(self.filename, "third", self.otherType(), - self.dbopenflags|db.DB_CREATE) - - for x in "The quick brown fox jumped over the lazy dog".split(): - d2.put(x, self.makeData(x)) - - for x in string.letters: - d3.put(x, x*70) - - d1.sync() - d2.sync() - d3.sync() - d1.close() - d2.close() - d3.close() - - self.d = d1 = d2 = d3 = None - - self.d = d1 = db.DB(self.env) - d1.open(self.filename, self.dbname, flags = self.dbopenflags) - d2 = db.DB(self.env) - d2.open(self.filename, "second", flags = self.dbopenflags) - d3 = db.DB(self.env) - d3.open(self.filename, "third", flags = self.dbopenflags) - - c1 = d1.cursor() - c2 = d2.cursor() - c3 = d3.cursor() - - count = 0 - rec = c1.first() - while rec is not None: - count = count + 1 - if verbose and (count % 50) == 0: - print rec - rec = c1.next() - self.assertEqual(count, self._numKeys) - - count = 0 - rec = c2.first() - while rec is not None: - count = count + 1 - if verbose: - print rec - rec = c2.next() - self.assertEqual(count, 9) - - count = 0 - rec = c3.first() - while rec is not None: - count = count + 1 - if verbose: - print rec - rec = c3.next() - self.assertEqual(count, len(string.letters)) - - - c1.close() - c2.close() - c3.close() - - d2.close() - d3.close() - - - -# Strange things happen if you try to use Multiple DBs per file without a -# DBEnv with MPOOL and LOCKing... - -class BTreeMultiDBTestCase(BasicMultiDBTestCase): - dbtype = db.DB_BTREE - dbopenflags = db.DB_THREAD - useEnv = 1 - envflags = db.DB_THREAD | db.DB_INIT_MPOOL | db.DB_INIT_LOCK - -class HashMultiDBTestCase(BasicMultiDBTestCase): - dbtype = db.DB_HASH - dbopenflags = db.DB_THREAD - useEnv = 1 - envflags = db.DB_THREAD | db.DB_INIT_MPOOL | db.DB_INIT_LOCK - - -class PrivateObject(unittest.TestCase) : - def tearDown(self) : - del self.obj - - def test01_DefaultIsNone(self) : - self.assertEqual(self.obj.get_private(), None) - - def test02_assignment(self) : - a = "example of private object" - self.obj.set_private(a) - b = self.obj.get_private() - self.assertTrue(a is b) # Object identity - - def test03_leak_assignment(self) : - a = "example of private object" - refcount = sys.getrefcount(a) - self.obj.set_private(a) - self.assertEqual(refcount+1, sys.getrefcount(a)) - self.obj.set_private(None) - self.assertEqual(refcount, sys.getrefcount(a)) - - def test04_leak_GC(self) : - a = "example of private object" - refcount = sys.getrefcount(a) - self.obj.set_private(a) - self.obj = None - self.assertEqual(refcount, sys.getrefcount(a)) - -class DBEnvPrivateObject(PrivateObject) : - def setUp(self) : - self.obj = db.DBEnv() - -class DBPrivateObject(PrivateObject) : - def setUp(self) : - self.obj = db.DB() - -class CrashAndBurn(unittest.TestCase) : - #def test01_OpenCrash(self) : - # # See http://bugs.python.org/issue3307 - # self.assertRaises(db.DBInvalidArgError, db.DB, None, 65535) - - if db.version() < (4, 8) : - def test02_DBEnv_dealloc(self): - # http://bugs.python.org/issue3885 - import gc - self.assertRaises(db.DBInvalidArgError, db.DBEnv, ~db.DB_RPCCLIENT) - gc.collect() - - -#---------------------------------------------------------------------- -#---------------------------------------------------------------------- - -def test_suite(): - suite = unittest.TestSuite() - - suite.addTest(unittest.makeSuite(VersionTestCase)) - suite.addTest(unittest.makeSuite(BasicBTreeTestCase)) - suite.addTest(unittest.makeSuite(BasicHashTestCase)) - suite.addTest(unittest.makeSuite(BasicBTreeWithThreadFlagTestCase)) - suite.addTest(unittest.makeSuite(BasicHashWithThreadFlagTestCase)) - suite.addTest(unittest.makeSuite(BasicBTreeWithEnvTestCase)) - suite.addTest(unittest.makeSuite(BasicHashWithEnvTestCase)) - suite.addTest(unittest.makeSuite(BTreeTransactionTestCase)) - suite.addTest(unittest.makeSuite(HashTransactionTestCase)) - suite.addTest(unittest.makeSuite(BTreeRecnoTestCase)) - suite.addTest(unittest.makeSuite(BTreeRecnoWithThreadFlagTestCase)) - suite.addTest(unittest.makeSuite(BTreeDUPTestCase)) - suite.addTest(unittest.makeSuite(HashDUPTestCase)) - suite.addTest(unittest.makeSuite(BTreeDUPWithThreadTestCase)) - suite.addTest(unittest.makeSuite(HashDUPWithThreadTestCase)) - suite.addTest(unittest.makeSuite(BTreeMultiDBTestCase)) - suite.addTest(unittest.makeSuite(HashMultiDBTestCase)) - suite.addTest(unittest.makeSuite(DBEnvPrivateObject)) - suite.addTest(unittest.makeSuite(DBPrivateObject)) - suite.addTest(unittest.makeSuite(CrashAndBurn)) - - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_compare.py b/PythonLib/extra/bsddb/test/test_compare.py deleted file mode 100644 index cb3b463e..00000000 --- a/PythonLib/extra/bsddb/test/test_compare.py +++ /dev/null @@ -1,447 +0,0 @@ -""" -TestCases for python DB duplicate and Btree key comparison function. -""" - -import sys, os, re -import test_all -from cStringIO import StringIO - -import unittest - -from test_all import db, dbshelve, test_support, \ - get_new_environment_path, get_new_database_path - - -# Needed for python 3. "cmp" vanished in 3.0.1 -def cmp(a, b) : - if a==b : return 0 - if a= (3,0)) and - (sys.version_info < (3, 2))) : - def assertLess(self, a, b, msg=None) : - return self.assertTrue(a= (3,0)) and - (sys.version_info < (3, 2))) : - def assertLess(self, a, b, msg=None) : - return self.assertTrue(a last!') - f.previous() - break - if verbose: - print rec - - self.assertTrue(f.has_key('f'), 'Error, missing key!') - - # test that set_location() returns the next nearest key, value - # on btree databases and raises KeyError on others. - if factory == btopen: - e = f.set_location('e') - if e != ('f', 'Python'): - self.fail('wrong key,value returned: '+repr(e)) - else: - try: - e = f.set_location('e') - except KeyError: - pass - else: - self.fail("set_location on non-existent key did not raise KeyError") - - f.sync() - f.close() - # truth test - try: - if f: - if verbose: print "truth test: true" - else: - if verbose: print "truth test: false" - except db.DBError: - pass - else: - self.fail("Exception expected") - - del f - - if verbose: - print 'modification...' - f = factory(self.filename, 'w') - f['d'] = 'discovered' - - if verbose: - print 'access...' - for key in f.keys(): - word = f[key] - if verbose: - print word - - def noRec(f): - rec = f['no such key'] - self.assertRaises(KeyError, noRec, f) - - def badKey(f): - rec = f[15] - self.assertRaises(TypeError, badKey, f) - - f.close() - - -#---------------------------------------------------------------------- - - -def test_suite(): - return unittest.makeSuite(CompatibilityTestCase) - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_cursor_pget_bug.py b/PythonLib/extra/bsddb/test/test_cursor_pget_bug.py deleted file mode 100644 index 22d3dc1c..00000000 --- a/PythonLib/extra/bsddb/test/test_cursor_pget_bug.py +++ /dev/null @@ -1,54 +0,0 @@ -import unittest -import os, glob - -from test_all import db, test_support, get_new_environment_path, \ - get_new_database_path - -#---------------------------------------------------------------------- - -class pget_bugTestCase(unittest.TestCase): - """Verify that cursor.pget works properly""" - db_name = 'test-cursor_pget.db' - - def setUp(self): - self.homeDir = get_new_environment_path() - self.env = db.DBEnv() - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL) - self.primary_db = db.DB(self.env) - self.primary_db.open(self.db_name, 'primary', db.DB_BTREE, db.DB_CREATE) - self.secondary_db = db.DB(self.env) - self.secondary_db.set_flags(db.DB_DUP) - self.secondary_db.open(self.db_name, 'secondary', db.DB_BTREE, db.DB_CREATE) - self.primary_db.associate(self.secondary_db, lambda key, data: data) - self.primary_db.put('salad', 'eggs') - self.primary_db.put('spam', 'ham') - self.primary_db.put('omelet', 'eggs') - - - def tearDown(self): - self.secondary_db.close() - self.primary_db.close() - self.env.close() - del self.secondary_db - del self.primary_db - del self.env - test_support.rmtree(self.homeDir) - - def test_pget(self): - cursor = self.secondary_db.cursor() - - self.assertEqual(('eggs', 'salad', 'eggs'), cursor.pget(key='eggs', flags=db.DB_SET)) - self.assertEqual(('eggs', 'omelet', 'eggs'), cursor.pget(db.DB_NEXT_DUP)) - self.assertEqual(None, cursor.pget(db.DB_NEXT_DUP)) - - self.assertEqual(('ham', 'spam', 'ham'), cursor.pget('ham', 'spam', flags=db.DB_SET)) - self.assertEqual(None, cursor.pget(db.DB_NEXT_DUP)) - - cursor.close() - - -def test_suite(): - return unittest.makeSuite(pget_bugTestCase) - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_db.py b/PythonLib/extra/bsddb/test/test_db.py deleted file mode 100644 index 2bc109f1..00000000 --- a/PythonLib/extra/bsddb/test/test_db.py +++ /dev/null @@ -1,163 +0,0 @@ -import unittest -import os, glob - -from test_all import db, test_support, get_new_environment_path, \ - get_new_database_path - -#---------------------------------------------------------------------- - -class DB(unittest.TestCase): - def setUp(self): - self.path = get_new_database_path() - self.db = db.DB() - - def tearDown(self): - self.db.close() - del self.db - test_support.unlink(self.path) - -class DB_general(DB) : - def test_get_open_flags(self) : - self.db.open(self.path, dbtype=db.DB_HASH, flags = db.DB_CREATE) - self.assertEqual(db.DB_CREATE, self.db.get_open_flags()) - - def test_get_open_flags2(self) : - self.db.open(self.path, dbtype=db.DB_HASH, flags = db.DB_CREATE | - db.DB_THREAD) - self.assertEqual(db.DB_CREATE | db.DB_THREAD, self.db.get_open_flags()) - - def test_get_dbname_filename(self) : - self.db.open(self.path, dbtype=db.DB_HASH, flags = db.DB_CREATE) - self.assertEqual((self.path, None), self.db.get_dbname()) - - def test_get_dbname_filename_database(self) : - name = "jcea-random-name" - self.db.open(self.path, dbname=name, dbtype=db.DB_HASH, - flags = db.DB_CREATE) - self.assertEqual((self.path, name), self.db.get_dbname()) - - def test_bt_minkey(self) : - for i in [17, 108, 1030] : - self.db.set_bt_minkey(i) - self.assertEqual(i, self.db.get_bt_minkey()) - - def test_lorder(self) : - self.db.set_lorder(1234) - self.assertEqual(1234, self.db.get_lorder()) - self.db.set_lorder(4321) - self.assertEqual(4321, self.db.get_lorder()) - self.assertRaises(db.DBInvalidArgError, self.db.set_lorder, 9182) - - if db.version() >= (4, 6) : - def test_priority(self) : - flags = [db.DB_PRIORITY_VERY_LOW, db.DB_PRIORITY_LOW, - db.DB_PRIORITY_DEFAULT, db.DB_PRIORITY_HIGH, - db.DB_PRIORITY_VERY_HIGH] - for flag in flags : - self.db.set_priority(flag) - self.assertEqual(flag, self.db.get_priority()) - - def test_get_transactional(self) : - self.assertFalse(self.db.get_transactional()) - self.db.open(self.path, dbtype=db.DB_HASH, flags = db.DB_CREATE) - self.assertFalse(self.db.get_transactional()) - -class DB_hash(DB) : - def test_h_ffactor(self) : - for ffactor in [4, 16, 256] : - self.db.set_h_ffactor(ffactor) - self.assertEqual(ffactor, self.db.get_h_ffactor()) - - def test_h_nelem(self) : - for nelem in [1, 2, 4] : - nelem = nelem*1024*1024 # Millions - self.db.set_h_nelem(nelem) - self.assertEqual(nelem, self.db.get_h_nelem()) - - def test_pagesize(self) : - for i in xrange(9, 17) : # From 512 to 65536 - i = 1<= (4, 7) : - def test_lk_partitions(self) : - for i in [10, 20, 40] : - self.env.set_lk_partitions(i) - self.assertEqual(i, self.env.get_lk_partitions()) - - def test_getset_intermediate_dir_mode(self) : - self.assertEqual(None, self.env.get_intermediate_dir_mode()) - for mode in ["rwx------", "rw-rw-rw-", "rw-r--r--"] : - self.env.set_intermediate_dir_mode(mode) - self.assertEqual(mode, self.env.get_intermediate_dir_mode()) - self.assertRaises(db.DBInvalidArgError, - self.env.set_intermediate_dir_mode, "abcde") - - if db.version() >= (4, 6) : - def test_thread(self) : - for i in [16, 100, 1000] : - self.env.set_thread_count(i) - self.assertEqual(i, self.env.get_thread_count()) - - def test_cache_max(self) : - for size in [64, 128] : - size = size*1024*1024 # Megabytes - self.env.set_cache_max(0, size) - size2 = self.env.get_cache_max() - self.assertEqual(0, size2[0]) - self.assertTrue(size <= size2[1]) - self.assertTrue(2*size > size2[1]) - - if db.version() >= (4, 4) : - def test_mutex_stat(self) : - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | - db.DB_INIT_LOCK) - stat = self.env.mutex_stat() - self.assertTrue("mutex_inuse_max" in stat) - - def test_lg_filemode(self) : - for i in [0600, 0660, 0666] : - self.env.set_lg_filemode(i) - self.assertEqual(i, self.env.get_lg_filemode()) - - def test_mp_max_openfd(self) : - for i in [17, 31, 42] : - self.env.set_mp_max_openfd(i) - self.assertEqual(i, self.env.get_mp_max_openfd()) - - def test_mp_max_write(self) : - for i in [100, 200, 300] : - for j in [1, 2, 3] : - j *= 1000000 - self.env.set_mp_max_write(i, j) - v=self.env.get_mp_max_write() - self.assertEqual((i, j), v) - - def test_invalid_txn(self) : - # This environment doesn't support transactions - self.assertRaises(db.DBInvalidArgError, self.env.txn_begin) - - def test_mp_mmapsize(self) : - for i in [16, 32, 64] : - i *= 1024*1024 - self.env.set_mp_mmapsize(i) - self.assertEqual(i, self.env.get_mp_mmapsize()) - - def test_tmp_dir(self) : - for i in ["a", "bb", "ccc"] : - self.env.set_tmp_dir(i) - self.assertEqual(i, self.env.get_tmp_dir()) - - def test_flags(self) : - self.env.set_flags(db.DB_AUTO_COMMIT, 1) - self.assertEqual(db.DB_AUTO_COMMIT, self.env.get_flags()) - self.env.set_flags(db.DB_TXN_NOSYNC, 1) - self.assertEqual(db.DB_AUTO_COMMIT | db.DB_TXN_NOSYNC, - self.env.get_flags()) - self.env.set_flags(db.DB_AUTO_COMMIT, 0) - self.assertEqual(db.DB_TXN_NOSYNC, self.env.get_flags()) - self.env.set_flags(db.DB_TXN_NOSYNC, 0) - self.assertEqual(0, self.env.get_flags()) - - def test_lk_max_objects(self) : - for i in [1000, 2000, 3000] : - self.env.set_lk_max_objects(i) - self.assertEqual(i, self.env.get_lk_max_objects()) - - def test_lk_max_locks(self) : - for i in [1000, 2000, 3000] : - self.env.set_lk_max_locks(i) - self.assertEqual(i, self.env.get_lk_max_locks()) - - def test_lk_max_lockers(self) : - for i in [1000, 2000, 3000] : - self.env.set_lk_max_lockers(i) - self.assertEqual(i, self.env.get_lk_max_lockers()) - - def test_lg_regionmax(self) : - for i in [128, 256, 1000] : - i = i*1024*1024 - self.env.set_lg_regionmax(i) - j = self.env.get_lg_regionmax() - self.assertTrue(i <= j) - self.assertTrue(2*i > j) - - def test_lk_detect(self) : - flags= [db.DB_LOCK_DEFAULT, db.DB_LOCK_EXPIRE, db.DB_LOCK_MAXLOCKS, - db.DB_LOCK_MINLOCKS, db.DB_LOCK_MINWRITE, - db.DB_LOCK_OLDEST, db.DB_LOCK_RANDOM, db.DB_LOCK_YOUNGEST] - - flags.append(db.DB_LOCK_MAXWRITE) - - for i in flags : - self.env.set_lk_detect(i) - self.assertEqual(i, self.env.get_lk_detect()) - - def test_lg_dir(self) : - for i in ["a", "bb", "ccc", "dddd"] : - self.env.set_lg_dir(i) - self.assertEqual(i, self.env.get_lg_dir()) - - def test_lg_bsize(self) : - log_size = 70*1024 - self.env.set_lg_bsize(log_size) - self.assertTrue(self.env.get_lg_bsize() >= log_size) - self.assertTrue(self.env.get_lg_bsize() < 4*log_size) - self.env.set_lg_bsize(4*log_size) - self.assertTrue(self.env.get_lg_bsize() >= 4*log_size) - - def test_setget_data_dirs(self) : - dirs = ("a", "b", "c", "d") - for i in dirs : - self.env.set_data_dir(i) - self.assertEqual(dirs, self.env.get_data_dirs()) - - def test_setget_cachesize(self) : - cachesize = (0, 512*1024*1024, 3) - self.env.set_cachesize(*cachesize) - self.assertEqual(cachesize, self.env.get_cachesize()) - - cachesize = (0, 1*1024*1024, 5) - self.env.set_cachesize(*cachesize) - cachesize2 = self.env.get_cachesize() - self.assertEqual(cachesize[0], cachesize2[0]) - self.assertEqual(cachesize[2], cachesize2[2]) - # Berkeley DB expands the cache 25% accounting overhead, - # if the cache is small. - self.assertEqual(125, int(100.0*cachesize2[1]/cachesize[1])) - - # You can not change configuration after opening - # the environment. - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL) - cachesize = (0, 2*1024*1024, 1) - self.assertRaises(db.DBInvalidArgError, - self.env.set_cachesize, *cachesize) - cachesize3 = self.env.get_cachesize() - self.assertEqual(cachesize2[0], cachesize3[0]) - self.assertEqual(cachesize2[2], cachesize3[2]) - # In Berkeley DB 5.1, the cachesize can change when opening the Env - self.assertTrue(cachesize2[1] <= cachesize3[1]) - - def test_set_cachesize_dbenv_db(self) : - # You can not configure the cachesize using - # the database handle, if you are using an environment. - d = db.DB(self.env) - self.assertRaises(db.DBInvalidArgError, - d.set_cachesize, 0, 1024*1024, 1) - - def test_setget_shm_key(self) : - shm_key=137 - self.env.set_shm_key(shm_key) - self.assertEqual(shm_key, self.env.get_shm_key()) - self.env.set_shm_key(shm_key+1) - self.assertEqual(shm_key+1, self.env.get_shm_key()) - - # You can not change configuration after opening - # the environment. - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL) - # If we try to reconfigure cache after opening the - # environment, core dump. - self.assertRaises(db.DBInvalidArgError, - self.env.set_shm_key, shm_key) - self.assertEqual(shm_key+1, self.env.get_shm_key()) - - if db.version() >= (4, 4) : - def test_mutex_setget_max(self) : - v = self.env.mutex_get_max() - v2 = v*2+1 - - self.env.mutex_set_max(v2) - self.assertEqual(v2, self.env.mutex_get_max()) - - self.env.mutex_set_max(v) - self.assertEqual(v, self.env.mutex_get_max()) - - # You can not change configuration after opening - # the environment. - self.env.open(self.homeDir, db.DB_CREATE) - self.assertRaises(db.DBInvalidArgError, - self.env.mutex_set_max, v2) - - def test_mutex_setget_increment(self) : - v = self.env.mutex_get_increment() - v2 = 127 - - self.env.mutex_set_increment(v2) - self.assertEqual(v2, self.env.mutex_get_increment()) - - self.env.mutex_set_increment(v) - self.assertEqual(v, self.env.mutex_get_increment()) - - # You can not change configuration after opening - # the environment. - self.env.open(self.homeDir, db.DB_CREATE) - self.assertRaises(db.DBInvalidArgError, - self.env.mutex_set_increment, v2) - - def test_mutex_setget_tas_spins(self) : - self.env.mutex_set_tas_spins(0) # Default = BDB decides - v = self.env.mutex_get_tas_spins() - v2 = v*2+1 - - self.env.mutex_set_tas_spins(v2) - self.assertEqual(v2, self.env.mutex_get_tas_spins()) - - self.env.mutex_set_tas_spins(v) - self.assertEqual(v, self.env.mutex_get_tas_spins()) - - # In this case, you can change configuration - # after opening the environment. - self.env.open(self.homeDir, db.DB_CREATE) - self.env.mutex_set_tas_spins(v2) - - def test_mutex_setget_align(self) : - v = self.env.mutex_get_align() - v2 = 64 - if v == 64 : - v2 = 128 - - self.env.mutex_set_align(v2) - self.assertEqual(v2, self.env.mutex_get_align()) - - # Requires a nonzero power of two - self.assertRaises(db.DBInvalidArgError, - self.env.mutex_set_align, 0) - self.assertRaises(db.DBInvalidArgError, - self.env.mutex_set_align, 17) - - self.env.mutex_set_align(2*v2) - self.assertEqual(2*v2, self.env.mutex_get_align()) - - # You can not change configuration after opening - # the environment. - self.env.open(self.homeDir, db.DB_CREATE) - self.assertRaises(db.DBInvalidArgError, - self.env.mutex_set_align, v2) - - -class DBEnv_log(DBEnv) : - def setUp(self): - DBEnv.setUp(self) - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOG) - - def test_log_file(self) : - log_file = self.env.log_file((1, 1)) - self.assertEqual("log.0000000001", log_file[-14:]) - - if db.version() >= (4, 4) : - # The version with transactions is checked in other test object - def test_log_printf(self) : - msg = "This is a test..." - self.env.log_printf(msg) - logc = self.env.log_cursor() - self.assertTrue(msg in (logc.last()[1])) - - if db.version() >= (4, 7) : - def test_log_config(self) : - self.env.log_set_config(db.DB_LOG_DSYNC | db.DB_LOG_ZERO, 1) - self.assertTrue(self.env.log_get_config(db.DB_LOG_DSYNC)) - self.assertTrue(self.env.log_get_config(db.DB_LOG_ZERO)) - self.env.log_set_config(db.DB_LOG_ZERO, 0) - self.assertTrue(self.env.log_get_config(db.DB_LOG_DSYNC)) - self.assertFalse(self.env.log_get_config(db.DB_LOG_ZERO)) - - -class DBEnv_log_txn(DBEnv) : - def setUp(self): - DBEnv.setUp(self) - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | - db.DB_INIT_LOG | db.DB_INIT_TXN) - - if (db.version() >= (4, 5)) and (db.version() < (5, 2)) : - def test_tx_max(self) : - txns=[] - def tx() : - for i in xrange(self.env.get_tx_max()) : - txns.append(self.env.txn_begin()) - - tx() - self.assertRaises(MemoryError, tx) - - # Abort the transactions before garbage collection, - # to avoid "warnings". - for i in txns : - i.abort() - - if db.version() >= (4, 4) : - # The version without transactions is checked in other test object - def test_log_printf(self) : - msg = "This is a test..." - txn = self.env.txn_begin() - self.env.log_printf(msg, txn=txn) - txn.commit() - logc = self.env.log_cursor() - logc.last() # Skip the commit - self.assertTrue(msg in (logc.prev()[1])) - - msg = "This is another test..." - txn = self.env.txn_begin() - self.env.log_printf(msg, txn=txn) - txn.abort() # Do not store the new message - logc.last() # Skip the abort - self.assertTrue(msg not in (logc.prev()[1])) - - msg = "This is a third test..." - txn = self.env.txn_begin() - self.env.log_printf(msg, txn=txn) - txn.commit() # Do not store the new message - logc.last() # Skip the commit - self.assertTrue(msg in (logc.prev()[1])) - - -class DBEnv_memp(DBEnv): - def setUp(self): - DBEnv.setUp(self) - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOG) - self.db = db.DB(self.env) - self.db.open("test", db.DB_HASH, db.DB_CREATE, 0660) - - def tearDown(self): - self.db.close() - del self.db - DBEnv.tearDown(self) - - def test_memp_1_trickle(self) : - self.db.put("hi", "bye") - self.assertTrue(self.env.memp_trickle(100) > 0) - -# Preserve the order, do "memp_trickle" test first - def test_memp_2_sync(self) : - self.db.put("hi", "bye") - self.env.memp_sync() # Full flush - # Nothing to do... - self.assertTrue(self.env.memp_trickle(100) == 0) - - self.db.put("hi", "bye2") - self.env.memp_sync((1, 0)) # NOP, probably - # Something to do... or not - self.assertTrue(self.env.memp_trickle(100) >= 0) - - self.db.put("hi", "bye3") - self.env.memp_sync((123, 99)) # Full flush - # Nothing to do... - self.assertTrue(self.env.memp_trickle(100) == 0) - - def test_memp_stat_1(self) : - stats = self.env.memp_stat() # No param - self.assertTrue(len(stats)==2) - self.assertTrue("cache_miss" in stats[0]) - stats = self.env.memp_stat(db.DB_STAT_CLEAR) # Positional param - self.assertTrue("cache_miss" in stats[0]) - stats = self.env.memp_stat(flags=0) # Keyword param - self.assertTrue("cache_miss" in stats[0]) - - def test_memp_stat_2(self) : - stats=self.env.memp_stat()[1] - self.assertTrue(len(stats))==1 - self.assertTrue("test" in stats) - self.assertTrue("page_in" in stats["test"]) - -class DBEnv_logcursor(DBEnv): - def setUp(self): - DBEnv.setUp(self) - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | - db.DB_INIT_LOG | db.DB_INIT_TXN) - txn = self.env.txn_begin() - self.db = db.DB(self.env) - self.db.open("test", db.DB_HASH, db.DB_CREATE, 0660, txn=txn) - txn.commit() - for i in ["2", "8", "20"] : - txn = self.env.txn_begin() - self.db.put(key = i, data = i*int(i), txn=txn) - txn.commit() - - def tearDown(self): - self.db.close() - del self.db - DBEnv.tearDown(self) - - def _check_return(self, value) : - self.assertTrue(isinstance(value, tuple)) - self.assertEqual(len(value), 2) - self.assertTrue(isinstance(value[0], tuple)) - self.assertEqual(len(value[0]), 2) - self.assertTrue(isinstance(value[0][0], int)) - self.assertTrue(isinstance(value[0][1], int)) - self.assertTrue(isinstance(value[1], str)) - - # Preserve test order - def test_1_first(self) : - logc = self.env.log_cursor() - v = logc.first() - self._check_return(v) - self.assertTrue((1, 1) < v[0]) - self.assertTrue(len(v[1])>0) - - def test_2_last(self) : - logc = self.env.log_cursor() - lsn_first = logc.first()[0] - v = logc.last() - self._check_return(v) - self.assertTrue(lsn_first < v[0]) - - def test_3_next(self) : - logc = self.env.log_cursor() - lsn_last = logc.last()[0] - self.assertEqual(logc.next(), None) - lsn_first = logc.first()[0] - v = logc.next() - self._check_return(v) - self.assertTrue(lsn_first < v[0]) - self.assertTrue(lsn_last > v[0]) - - v2 = logc.next() - self.assertTrue(v2[0] > v[0]) - self.assertTrue(lsn_last > v2[0]) - - v3 = logc.next() - self.assertTrue(v3[0] > v2[0]) - self.assertTrue(lsn_last > v3[0]) - - def test_4_prev(self) : - logc = self.env.log_cursor() - lsn_first = logc.first()[0] - self.assertEqual(logc.prev(), None) - lsn_last = logc.last()[0] - v = logc.prev() - self._check_return(v) - self.assertTrue(lsn_first < v[0]) - self.assertTrue(lsn_last > v[0]) - - v2 = logc.prev() - self.assertTrue(v2[0] < v[0]) - self.assertTrue(lsn_first < v2[0]) - - v3 = logc.prev() - self.assertTrue(v3[0] < v2[0]) - self.assertTrue(lsn_first < v3[0]) - - def test_5_current(self) : - logc = self.env.log_cursor() - logc.first() - v = logc.next() - self.assertEqual(v, logc.current()) - - def test_6_set(self) : - logc = self.env.log_cursor() - logc.first() - v = logc.next() - self.assertNotEqual(v, logc.next()) - self.assertNotEqual(v, logc.next()) - self.assertEqual(v, logc.set(v[0])) - - def test_explicit_close(self) : - logc = self.env.log_cursor() - logc.close() - self.assertRaises(db.DBCursorClosedError, logc.next) - - def test_implicit_close(self) : - logc = [self.env.log_cursor() for i in xrange(10)] - self.env.close() # This close should close too all its tree - for i in logc : - self.assertRaises(db.DBCursorClosedError, i.next) - -def test_suite(): - suite = unittest.TestSuite() - - suite.addTest(unittest.makeSuite(DBEnv_general)) - suite.addTest(unittest.makeSuite(DBEnv_memp)) - suite.addTest(unittest.makeSuite(DBEnv_logcursor)) - suite.addTest(unittest.makeSuite(DBEnv_log)) - suite.addTest(unittest.makeSuite(DBEnv_log_txn)) - - return suite - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_dbobj.py b/PythonLib/extra/bsddb/test/test_dbobj.py deleted file mode 100644 index e301a5ad..00000000 --- a/PythonLib/extra/bsddb/test/test_dbobj.py +++ /dev/null @@ -1,70 +0,0 @@ - -import os, string -import unittest - -from test_all import db, dbobj, test_support, get_new_environment_path, \ - get_new_database_path - -#---------------------------------------------------------------------- - -class dbobjTestCase(unittest.TestCase): - """Verify that dbobj.DB and dbobj.DBEnv work properly""" - db_name = 'test-dbobj.db' - - def setUp(self): - self.homeDir = get_new_environment_path() - - def tearDown(self): - if hasattr(self, 'db'): - del self.db - if hasattr(self, 'env'): - del self.env - test_support.rmtree(self.homeDir) - - def test01_both(self): - class TestDBEnv(dbobj.DBEnv): pass - class TestDB(dbobj.DB): - def put(self, key, *args, **kwargs): - key = key.upper() - # call our parent classes put method with an upper case key - return dbobj.DB.put(self, key, *args, **kwargs) - self.env = TestDBEnv() - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL) - self.db = TestDB(self.env) - self.db.open(self.db_name, db.DB_HASH, db.DB_CREATE) - self.db.put('spam', 'eggs') - self.assertEqual(self.db.get('spam'), None, - "overridden dbobj.DB.put() method failed [1]") - self.assertEqual(self.db.get('SPAM'), 'eggs', - "overridden dbobj.DB.put() method failed [2]") - self.db.close() - self.env.close() - - def test02_dbobj_dict_interface(self): - self.env = dbobj.DBEnv() - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL) - self.db = dbobj.DB(self.env) - self.db.open(self.db_name+'02', db.DB_HASH, db.DB_CREATE) - # __setitem__ - self.db['spam'] = 'eggs' - # __len__ - self.assertEqual(len(self.db), 1) - # __getitem__ - self.assertEqual(self.db['spam'], 'eggs') - # __del__ - del self.db['spam'] - self.assertEqual(self.db.get('spam'), None, "dbobj __del__ failed") - self.db.close() - self.env.close() - - def test03_dbobj_type_before_open(self): - # Ensure this doesn't cause a segfault. - self.assertRaises(db.DBInvalidArgError, db.DB().type) - -#---------------------------------------------------------------------- - -def test_suite(): - return unittest.makeSuite(dbobjTestCase) - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_dbshelve.py b/PythonLib/extra/bsddb/test/test_dbshelve.py deleted file mode 100644 index c3701e1d..00000000 --- a/PythonLib/extra/bsddb/test/test_dbshelve.py +++ /dev/null @@ -1,398 +0,0 @@ -""" -TestCases for checking dbShelve objects. -""" - -import os, string, sys -import random -import unittest - - -from test_all import db, dbshelve, test_support, verbose, \ - get_new_environment_path, get_new_database_path - - - - - -#---------------------------------------------------------------------- - -# We want the objects to be comparable so we can test dbshelve.values -# later on. -class DataClass: - def __init__(self): - self.value = random.random() - - def __repr__(self) : # For Python 3.0 comparison - return "DataClass %f" %self.value - - def __cmp__(self, other): # For Python 2.x comparison - return cmp(self.value, other) - - -class DBShelveTestCase(unittest.TestCase): - if (sys.version_info < (2, 7)) or ((sys.version_info >= (3, 0)) and - (sys.version_info < (3, 2))) : - def assertIn(self, a, b, msg=None) : - return self.assertTrue(a in b, msg=msg) - - - def setUp(self): - if sys.version_info[0] >= 3 : - from test_all import do_proxy_db_py3k - self._flag_proxy_db_py3k = do_proxy_db_py3k(False) - self.filename = get_new_database_path() - self.do_open() - - def tearDown(self): - if sys.version_info[0] >= 3 : - from test_all import do_proxy_db_py3k - do_proxy_db_py3k(self._flag_proxy_db_py3k) - self.do_close() - test_support.unlink(self.filename) - - def mk(self, key): - """Turn key into an appropriate key type for this db""" - # override in child class for RECNO - if sys.version_info[0] < 3 : - return key - else : - return bytes(key, "iso8859-1") # 8 bits - - def populateDB(self, d): - for x in string.letters: - d[self.mk('S' + x)] = 10 * x # add a string - d[self.mk('I' + x)] = ord(x) # add an integer - d[self.mk('L' + x)] = [x] * 10 # add a list - - inst = DataClass() # add an instance - inst.S = 10 * x - inst.I = ord(x) - inst.L = [x] * 10 - d[self.mk('O' + x)] = inst - - - # overridable in derived classes to affect how the shelf is created/opened - def do_open(self): - self.d = dbshelve.open(self.filename) - - # and closed... - def do_close(self): - self.d.close() - - - - def test01_basics(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test01_basics..." % self.__class__.__name__ - - self.populateDB(self.d) - self.d.sync() - self.do_close() - self.do_open() - d = self.d - - l = len(d) - k = d.keys() - s = d.stat() - f = d.fd() - - if verbose: - print "length:", l - print "keys:", k - print "stats:", s - - self.assertEqual(0, d.has_key(self.mk('bad key'))) - self.assertEqual(1, d.has_key(self.mk('IA'))) - self.assertEqual(1, d.has_key(self.mk('OA'))) - - d.delete(self.mk('IA')) - del d[self.mk('OA')] - self.assertEqual(0, d.has_key(self.mk('IA'))) - self.assertEqual(0, d.has_key(self.mk('OA'))) - self.assertEqual(len(d), l-2) - - values = [] - for key in d.keys(): - value = d[key] - values.append(value) - if verbose: - print "%s: %s" % (key, value) - self.checkrec(key, value) - - dbvalues = d.values() - self.assertEqual(len(dbvalues), len(d.keys())) - if sys.version_info < (2, 6) : - values.sort() - dbvalues.sort() - self.assertEqual(values, dbvalues) - else : # XXX: Convert all to strings. Please, improve - values.sort(key=lambda x : str(x)) - dbvalues.sort(key=lambda x : str(x)) - self.assertEqual(repr(values), repr(dbvalues)) - - items = d.items() - self.assertEqual(len(items), len(values)) - - for key, value in items: - self.checkrec(key, value) - - self.assertEqual(d.get(self.mk('bad key')), None) - self.assertEqual(d.get(self.mk('bad key'), None), None) - self.assertEqual(d.get(self.mk('bad key'), 'a string'), 'a string') - self.assertEqual(d.get(self.mk('bad key'), [1, 2, 3]), [1, 2, 3]) - - d.set_get_returns_none(0) - self.assertRaises(db.DBNotFoundError, d.get, self.mk('bad key')) - d.set_get_returns_none(1) - - d.put(self.mk('new key'), 'new data') - self.assertEqual(d.get(self.mk('new key')), 'new data') - self.assertEqual(d[self.mk('new key')], 'new data') - - - - def test02_cursors(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test02_cursors..." % self.__class__.__name__ - - self.populateDB(self.d) - d = self.d - - count = 0 - c = d.cursor() - rec = c.first() - while rec is not None: - count = count + 1 - if verbose: - print rec - key, value = rec - self.checkrec(key, value) - # Hack to avoid conversion by 2to3 tool - rec = getattr(c, "next")() - del c - - self.assertEqual(count, len(d)) - - count = 0 - c = d.cursor() - rec = c.last() - while rec is not None: - count = count + 1 - if verbose: - print rec - key, value = rec - self.checkrec(key, value) - rec = c.prev() - - self.assertEqual(count, len(d)) - - c.set(self.mk('SS')) - key, value = c.current() - self.checkrec(key, value) - del c - - - def test03_append(self): - # NOTE: this is overridden in RECNO subclass, don't change its name. - if verbose: - print '\n', '-=' * 30 - print "Running %s.test03_append..." % self.__class__.__name__ - - self.assertRaises(dbshelve.DBShelveError, - self.d.append, 'unit test was here') - - - def test04_iterable(self) : - self.populateDB(self.d) - d = self.d - keys = d.keys() - keyset = set(keys) - self.assertEqual(len(keyset), len(keys)) - - for key in d : - self.assertIn(key, keyset) - keyset.remove(key) - self.assertEqual(len(keyset), 0) - - def checkrec(self, key, value): - # override this in a subclass if the key type is different - - if sys.version_info[0] >= 3 : - if isinstance(key, bytes) : - key = key.decode("iso8859-1") # 8 bits - - x = key[1] - if key[0] == 'S': - self.assertEqual(type(value), str) - self.assertEqual(value, 10 * x) - - elif key[0] == 'I': - self.assertEqual(type(value), int) - self.assertEqual(value, ord(x)) - - elif key[0] == 'L': - self.assertEqual(type(value), list) - self.assertEqual(value, [x] * 10) - - elif key[0] == 'O': - if sys.version_info[0] < 3 : - from types import InstanceType - self.assertEqual(type(value), InstanceType) - else : - self.assertEqual(type(value), DataClass) - - self.assertEqual(value.S, 10 * x) - self.assertEqual(value.I, ord(x)) - self.assertEqual(value.L, [x] * 10) - - else: - self.assertTrue(0, 'Unknown key type, fix the test') - -#---------------------------------------------------------------------- - -class BasicShelveTestCase(DBShelveTestCase): - def do_open(self): - self.d = dbshelve.DBShelf() - self.d.open(self.filename, self.dbtype, self.dbflags) - - def do_close(self): - self.d.close() - - -class BTreeShelveTestCase(BasicShelveTestCase): - dbtype = db.DB_BTREE - dbflags = db.DB_CREATE - - -class HashShelveTestCase(BasicShelveTestCase): - dbtype = db.DB_HASH - dbflags = db.DB_CREATE - - -class ThreadBTreeShelveTestCase(BasicShelveTestCase): - dbtype = db.DB_BTREE - dbflags = db.DB_CREATE | db.DB_THREAD - - -class ThreadHashShelveTestCase(BasicShelveTestCase): - dbtype = db.DB_HASH - dbflags = db.DB_CREATE | db.DB_THREAD - - -#---------------------------------------------------------------------- - -class BasicEnvShelveTestCase(DBShelveTestCase): - def do_open(self): - self.env = db.DBEnv() - self.env.open(self.homeDir, - self.envflags | db.DB_INIT_MPOOL | db.DB_CREATE) - - self.filename = os.path.split(self.filename)[1] - self.d = dbshelve.DBShelf(self.env) - self.d.open(self.filename, self.dbtype, self.dbflags) - - - def do_close(self): - self.d.close() - self.env.close() - - - def setUp(self) : - self.homeDir = get_new_environment_path() - DBShelveTestCase.setUp(self) - - def tearDown(self): - if sys.version_info[0] >= 3 : - from test_all import do_proxy_db_py3k - do_proxy_db_py3k(self._flag_proxy_db_py3k) - self.do_close() - test_support.rmtree(self.homeDir) - - -class EnvBTreeShelveTestCase(BasicEnvShelveTestCase): - envflags = 0 - dbtype = db.DB_BTREE - dbflags = db.DB_CREATE - - -class EnvHashShelveTestCase(BasicEnvShelveTestCase): - envflags = 0 - dbtype = db.DB_HASH - dbflags = db.DB_CREATE - - -class EnvThreadBTreeShelveTestCase(BasicEnvShelveTestCase): - envflags = db.DB_THREAD - dbtype = db.DB_BTREE - dbflags = db.DB_CREATE | db.DB_THREAD - - -class EnvThreadHashShelveTestCase(BasicEnvShelveTestCase): - envflags = db.DB_THREAD - dbtype = db.DB_HASH - dbflags = db.DB_CREATE | db.DB_THREAD - - -#---------------------------------------------------------------------- -# test cases for a DBShelf in a RECNO DB. - -class RecNoShelveTestCase(BasicShelveTestCase): - dbtype = db.DB_RECNO - dbflags = db.DB_CREATE - - def setUp(self): - BasicShelveTestCase.setUp(self) - - # pool to assign integer key values out of - self.key_pool = list(range(1, 5000)) - self.key_map = {} # map string keys to the number we gave them - self.intkey_map = {} # reverse map of above - - def mk(self, key): - if key not in self.key_map: - self.key_map[key] = self.key_pool.pop(0) - self.intkey_map[self.key_map[key]] = key - return self.key_map[key] - - def checkrec(self, intkey, value): - key = self.intkey_map[intkey] - BasicShelveTestCase.checkrec(self, key, value) - - def test03_append(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test03_append..." % self.__class__.__name__ - - self.d[1] = 'spam' - self.d[5] = 'eggs' - self.assertEqual(6, self.d.append('spam')) - self.assertEqual(7, self.d.append('baked beans')) - self.assertEqual('spam', self.d.get(6)) - self.assertEqual('spam', self.d.get(1)) - self.assertEqual('baked beans', self.d.get(7)) - self.assertEqual('eggs', self.d.get(5)) - - -#---------------------------------------------------------------------- - -def test_suite(): - suite = unittest.TestSuite() - - suite.addTest(unittest.makeSuite(DBShelveTestCase)) - suite.addTest(unittest.makeSuite(BTreeShelveTestCase)) - suite.addTest(unittest.makeSuite(HashShelveTestCase)) - suite.addTest(unittest.makeSuite(ThreadBTreeShelveTestCase)) - suite.addTest(unittest.makeSuite(ThreadHashShelveTestCase)) - suite.addTest(unittest.makeSuite(EnvBTreeShelveTestCase)) - suite.addTest(unittest.makeSuite(EnvHashShelveTestCase)) - suite.addTest(unittest.makeSuite(EnvThreadBTreeShelveTestCase)) - suite.addTest(unittest.makeSuite(EnvThreadHashShelveTestCase)) - suite.addTest(unittest.makeSuite(RecNoShelveTestCase)) - - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_dbtables.py b/PythonLib/extra/bsddb/test/test_dbtables.py deleted file mode 100644 index bb31381e..00000000 --- a/PythonLib/extra/bsddb/test/test_dbtables.py +++ /dev/null @@ -1,409 +0,0 @@ -#!/usr/bin/env python -# -#----------------------------------------------------------------------- -# A test suite for the table interface built on bsddb.db -#----------------------------------------------------------------------- -# -# Copyright (C) 2000, 2001 by Autonomous Zone Industries -# Copyright (C) 2002 Gregory P. Smith -# -# March 20, 2000 -# -# License: This is free software. You may use this software for any -# purpose including modification/redistribution, so long as -# this header remains intact and that you do not claim any -# rights of ownership or authorship of this software. This -# software has been tested, but no warranty is expressed or -# implied. -# -# -- Gregory P. Smith -# -# $Id$ - -import os, re, sys - -if sys.version_info[0] < 3 : - try: - import cPickle - pickle = cPickle - except ImportError: - import pickle -else : - import pickle - -import unittest -from test_all import db, dbtables, test_support, verbose, \ - get_new_environment_path, get_new_database_path - -#---------------------------------------------------------------------- - -class TableDBTestCase(unittest.TestCase): - db_name = 'test-table.db' - - def setUp(self): - import sys - if sys.version_info[0] >= 3 : - from test_all import do_proxy_db_py3k - self._flag_proxy_db_py3k = do_proxy_db_py3k(False) - - self.testHomeDir = get_new_environment_path() - self.tdb = dbtables.bsdTableDB( - filename='tabletest.db', dbhome=self.testHomeDir, create=1) - - def tearDown(self): - self.tdb.close() - import sys - if sys.version_info[0] >= 3 : - from test_all import do_proxy_db_py3k - do_proxy_db_py3k(self._flag_proxy_db_py3k) - test_support.rmtree(self.testHomeDir) - - def test01(self): - tabname = "test01" - colname = 'cool numbers' - try: - self.tdb.Drop(tabname) - except dbtables.TableDBError: - pass - self.tdb.CreateTable(tabname, [colname]) - import sys - if sys.version_info[0] < 3 : - self.tdb.Insert(tabname, {colname: pickle.dumps(3.14159, 1)}) - else : - self.tdb.Insert(tabname, {colname: pickle.dumps(3.14159, - 1).decode("iso8859-1")}) # 8 bits - - if verbose: - self.tdb._db_print() - - values = self.tdb.Select( - tabname, [colname], conditions={colname: None}) - - import sys - if sys.version_info[0] < 3 : - colval = pickle.loads(values[0][colname]) - else : - colval = pickle.loads(bytes(values[0][colname], "iso8859-1")) - self.assertTrue(colval > 3.141) - self.assertTrue(colval < 3.142) - - - def test02(self): - tabname = "test02" - col0 = 'coolness factor' - col1 = 'but can it fly?' - col2 = 'Species' - - import sys - if sys.version_info[0] < 3 : - testinfo = [ - {col0: pickle.dumps(8, 1), col1: 'no', col2: 'Penguin'}, - {col0: pickle.dumps(-1, 1), col1: 'no', col2: 'Turkey'}, - {col0: pickle.dumps(9, 1), col1: 'yes', col2: 'SR-71A Blackbird'} - ] - else : - testinfo = [ - {col0: pickle.dumps(8, 1).decode("iso8859-1"), - col1: 'no', col2: 'Penguin'}, - {col0: pickle.dumps(-1, 1).decode("iso8859-1"), - col1: 'no', col2: 'Turkey'}, - {col0: pickle.dumps(9, 1).decode("iso8859-1"), - col1: 'yes', col2: 'SR-71A Blackbird'} - ] - - try: - self.tdb.Drop(tabname) - except dbtables.TableDBError: - pass - self.tdb.CreateTable(tabname, [col0, col1, col2]) - for row in testinfo : - self.tdb.Insert(tabname, row) - - import sys - if sys.version_info[0] < 3 : - values = self.tdb.Select(tabname, [col2], - conditions={col0: lambda x: pickle.loads(x) >= 8}) - else : - values = self.tdb.Select(tabname, [col2], - conditions={col0: lambda x: - pickle.loads(bytes(x, "iso8859-1")) >= 8}) - - self.assertEqual(len(values), 2) - if values[0]['Species'] == 'Penguin' : - self.assertEqual(values[1]['Species'], 'SR-71A Blackbird') - elif values[0]['Species'] == 'SR-71A Blackbird' : - self.assertEqual(values[1]['Species'], 'Penguin') - else : - if verbose: - print "values= %r" % (values,) - raise RuntimeError("Wrong values returned!") - - def test03(self): - tabname = "test03" - try: - self.tdb.Drop(tabname) - except dbtables.TableDBError: - pass - if verbose: - print '...before CreateTable...' - self.tdb._db_print() - self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e']) - if verbose: - print '...after CreateTable...' - self.tdb._db_print() - self.tdb.Drop(tabname) - if verbose: - print '...after Drop...' - self.tdb._db_print() - self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e']) - - try: - self.tdb.Insert(tabname, - {'a': "", - 'e': pickle.dumps([{4:5, 6:7}, 'foo'], 1), - 'f': "Zero"}) - self.fail('Expected an exception') - except dbtables.TableDBError: - pass - - try: - self.tdb.Select(tabname, [], conditions={'foo': '123'}) - self.fail('Expected an exception') - except dbtables.TableDBError: - pass - - self.tdb.Insert(tabname, - {'a': '42', - 'b': "bad", - 'c': "meep", - 'e': 'Fuzzy wuzzy was a bear'}) - self.tdb.Insert(tabname, - {'a': '581750', - 'b': "good", - 'd': "bla", - 'c': "black", - 'e': 'fuzzy was here'}) - self.tdb.Insert(tabname, - {'a': '800000', - 'b': "good", - 'd': "bla", - 'c': "black", - 'e': 'Fuzzy wuzzy is a bear'}) - - if verbose: - self.tdb._db_print() - - # this should return two rows - values = self.tdb.Select(tabname, ['b', 'a', 'd'], - conditions={'e': re.compile('wuzzy').search, - 'a': re.compile('^[0-9]+$').match}) - self.assertEqual(len(values), 2) - - # now lets delete one of them and try again - self.tdb.Delete(tabname, conditions={'b': dbtables.ExactCond('good')}) - values = self.tdb.Select( - tabname, ['a', 'd', 'b'], - conditions={'e': dbtables.PrefixCond('Fuzzy')}) - self.assertEqual(len(values), 1) - self.assertEqual(values[0]['d'], None) - - values = self.tdb.Select(tabname, ['b'], - conditions={'c': lambda c: c == 'meep'}) - self.assertEqual(len(values), 1) - self.assertEqual(values[0]['b'], "bad") - - - def test04_MultiCondSelect(self): - tabname = "test04_MultiCondSelect" - try: - self.tdb.Drop(tabname) - except dbtables.TableDBError: - pass - self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e']) - - try: - self.tdb.Insert(tabname, - {'a': "", - 'e': pickle.dumps([{4:5, 6:7}, 'foo'], 1), - 'f': "Zero"}) - self.fail('Expected an exception') - except dbtables.TableDBError: - pass - - self.tdb.Insert(tabname, {'a': "A", 'b': "B", 'c': "C", 'd': "D", - 'e': "E"}) - self.tdb.Insert(tabname, {'a': "-A", 'b': "-B", 'c': "-C", 'd': "-D", - 'e': "-E"}) - self.tdb.Insert(tabname, {'a': "A-", 'b': "B-", 'c': "C-", 'd': "D-", - 'e': "E-"}) - - if verbose: - self.tdb._db_print() - - # This select should return 0 rows. it is designed to test - # the bug identified and fixed in sourceforge bug # 590449 - # (Big Thanks to "Rob Tillotson (n9mtb)" for tracking this down - # and supplying a fix!! This one caused many headaches to say - # the least...) - values = self.tdb.Select(tabname, ['b', 'a', 'd'], - conditions={'e': dbtables.ExactCond('E'), - 'a': dbtables.ExactCond('A'), - 'd': dbtables.PrefixCond('-') - } ) - self.assertEqual(len(values), 0, values) - - - def test_CreateOrExtend(self): - tabname = "test_CreateOrExtend" - - self.tdb.CreateOrExtendTable( - tabname, ['name', 'taste', 'filling', 'alcohol content', 'price']) - try: - self.tdb.Insert(tabname, - {'taste': 'crap', - 'filling': 'no', - 'is it Guinness?': 'no'}) - self.fail("Insert should've failed due to bad column name") - except: - pass - self.tdb.CreateOrExtendTable(tabname, - ['name', 'taste', 'is it Guinness?']) - - # these should both succeed as the table should contain the union of both sets of columns. - self.tdb.Insert(tabname, {'taste': 'crap', 'filling': 'no', - 'is it Guinness?': 'no'}) - self.tdb.Insert(tabname, {'taste': 'great', 'filling': 'yes', - 'is it Guinness?': 'yes', - 'name': 'Guinness'}) - - - def test_CondObjs(self): - tabname = "test_CondObjs" - - self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e', 'p']) - - self.tdb.Insert(tabname, {'a': "the letter A", - 'b': "the letter B", - 'c': "is for cookie"}) - self.tdb.Insert(tabname, {'a': "is for aardvark", - 'e': "the letter E", - 'c': "is for cookie", - 'd': "is for dog"}) - self.tdb.Insert(tabname, {'a': "the letter A", - 'e': "the letter E", - 'c': "is for cookie", - 'p': "is for Python"}) - - values = self.tdb.Select( - tabname, ['p', 'e'], - conditions={'e': dbtables.PrefixCond('the l')}) - self.assertEqual(len(values), 2, values) - self.assertEqual(values[0]['e'], values[1]['e'], values) - self.assertNotEqual(values[0]['p'], values[1]['p'], values) - - values = self.tdb.Select( - tabname, ['d', 'a'], - conditions={'a': dbtables.LikeCond('%aardvark%')}) - self.assertEqual(len(values), 1, values) - self.assertEqual(values[0]['d'], "is for dog", values) - self.assertEqual(values[0]['a'], "is for aardvark", values) - - values = self.tdb.Select(tabname, None, - {'b': dbtables.Cond(), - 'e':dbtables.LikeCond('%letter%'), - 'a':dbtables.PrefixCond('is'), - 'd':dbtables.ExactCond('is for dog'), - 'c':dbtables.PrefixCond('is for'), - 'p':lambda s: not s}) - self.assertEqual(len(values), 1, values) - self.assertEqual(values[0]['d'], "is for dog", values) - self.assertEqual(values[0]['a'], "is for aardvark", values) - - def test_Delete(self): - tabname = "test_Delete" - self.tdb.CreateTable(tabname, ['x', 'y', 'z']) - - # prior to 2001-05-09 there was a bug where Delete() would - # fail if it encountered any rows that did not have values in - # every column. - # Hunted and Squashed by (Jukka Santala - donwulff@nic.fi) - self.tdb.Insert(tabname, {'x': 'X1', 'y':'Y1'}) - self.tdb.Insert(tabname, {'x': 'X2', 'y':'Y2', 'z': 'Z2'}) - - self.tdb.Delete(tabname, conditions={'x': dbtables.PrefixCond('X')}) - values = self.tdb.Select(tabname, ['y'], - conditions={'x': dbtables.PrefixCond('X')}) - self.assertEqual(len(values), 0) - - def test_Modify(self): - tabname = "test_Modify" - self.tdb.CreateTable(tabname, ['Name', 'Type', 'Access']) - - self.tdb.Insert(tabname, {'Name': 'Index to MP3 files.doc', - 'Type': 'Word', 'Access': '8'}) - self.tdb.Insert(tabname, {'Name': 'Nifty.MP3', 'Access': '1'}) - self.tdb.Insert(tabname, {'Type': 'Unknown', 'Access': '0'}) - - def set_type(type): - if type is None: - return 'MP3' - return type - - def increment_access(count): - return str(int(count)+1) - - def remove_value(value): - return None - - self.tdb.Modify(tabname, - conditions={'Access': dbtables.ExactCond('0')}, - mappings={'Access': remove_value}) - self.tdb.Modify(tabname, - conditions={'Name': dbtables.LikeCond('%MP3%')}, - mappings={'Type': set_type}) - self.tdb.Modify(tabname, - conditions={'Name': dbtables.LikeCond('%')}, - mappings={'Access': increment_access}) - - try: - self.tdb.Modify(tabname, - conditions={'Name': dbtables.LikeCond('%')}, - mappings={'Access': 'What is your quest?'}) - except TypeError: - # success, the string value in mappings isn't callable - pass - else: - raise RuntimeError, "why was TypeError not raised for bad callable?" - - # Delete key in select conditions - values = self.tdb.Select( - tabname, None, - conditions={'Type': dbtables.ExactCond('Unknown')}) - self.assertEqual(len(values), 1, values) - self.assertEqual(values[0]['Name'], None, values) - self.assertEqual(values[0]['Access'], None, values) - - # Modify value by select conditions - values = self.tdb.Select( - tabname, None, - conditions={'Name': dbtables.ExactCond('Nifty.MP3')}) - self.assertEqual(len(values), 1, values) - self.assertEqual(values[0]['Type'], "MP3", values) - self.assertEqual(values[0]['Access'], "2", values) - - # Make sure change applied only to select conditions - values = self.tdb.Select( - tabname, None, conditions={'Name': dbtables.LikeCond('%doc%')}) - self.assertEqual(len(values), 1, values) - self.assertEqual(values[0]['Type'], "Word", values) - self.assertEqual(values[0]['Access'], "9", values) - - -def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(TableDBTestCase)) - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_distributed_transactions.py b/PythonLib/extra/bsddb/test/test_distributed_transactions.py deleted file mode 100644 index 90585755..00000000 --- a/PythonLib/extra/bsddb/test/test_distributed_transactions.py +++ /dev/null @@ -1,152 +0,0 @@ -"""TestCases for distributed transactions. -""" - -import os -import unittest - -from test_all import db, test_support, get_new_environment_path, \ - get_new_database_path - -from test_all import verbose - -#---------------------------------------------------------------------- - -class DBTxn_distributed(unittest.TestCase): - num_txns=1234 - nosync=True - must_open_db=False - def _create_env(self, must_open_db) : - self.dbenv = db.DBEnv() - self.dbenv.set_tx_max(self.num_txns) - self.dbenv.set_lk_max_lockers(self.num_txns*2) - self.dbenv.set_lk_max_locks(self.num_txns*2) - self.dbenv.set_lk_max_objects(self.num_txns*2) - if self.nosync : - self.dbenv.set_flags(db.DB_TXN_NOSYNC,True) - self.dbenv.open(self.homeDir, db.DB_CREATE | db.DB_THREAD | - db.DB_RECOVER | - db.DB_INIT_TXN | db.DB_INIT_LOG | db.DB_INIT_MPOOL | - db.DB_INIT_LOCK, 0666) - self.db = db.DB(self.dbenv) - self.db.set_re_len(db.DB_GID_SIZE) - if must_open_db : - txn=self.dbenv.txn_begin() - self.db.open(self.filename, - db.DB_QUEUE, db.DB_CREATE | db.DB_THREAD, 0666, - txn=txn) - txn.commit() - - def setUp(self) : - self.homeDir = get_new_environment_path() - self.filename = "test" - return self._create_env(must_open_db=True) - - def _destroy_env(self): - if self.nosync or (db.version()[:2] == (4,6)): # Known bug - self.dbenv.log_flush() - self.db.close() - self.dbenv.close() - - def tearDown(self): - self._destroy_env() - test_support.rmtree(self.homeDir) - - def _recreate_env(self,must_open_db) : - self._destroy_env() - self._create_env(must_open_db) - - def test01_distributed_transactions(self) : - txns=set() - adapt = lambda x : x - import sys - if sys.version_info[0] >= 3 : - adapt = lambda x : bytes(x, "ascii") - # Create transactions, "prepare" them, and - # let them be garbage collected. - for i in xrange(self.num_txns) : - txn = self.dbenv.txn_begin() - gid = "%%%dd" %db.DB_GID_SIZE - gid = adapt(gid %i) - self.db.put(i, gid, txn=txn, flags=db.DB_APPEND) - txns.add(gid) - txn.prepare(gid) - del txn - - self._recreate_env(self.must_open_db) - - # Get "to be recovered" transactions but - # let them be garbage collected. - recovered_txns=self.dbenv.txn_recover() - self.assertEqual(self.num_txns,len(recovered_txns)) - for gid,txn in recovered_txns : - self.assertTrue(gid in txns) - del txn - del recovered_txns - - self._recreate_env(self.must_open_db) - - # Get "to be recovered" transactions. Commit, abort and - # discard them. - recovered_txns=self.dbenv.txn_recover() - self.assertEqual(self.num_txns,len(recovered_txns)) - discard_txns=set() - committed_txns=set() - state=0 - for gid,txn in recovered_txns : - if state==0 or state==1: - committed_txns.add(gid) - txn.commit() - elif state==2 : - txn.abort() - elif state==3 : - txn.discard() - discard_txns.add(gid) - state=-1 - state+=1 - del txn - del recovered_txns - - self._recreate_env(self.must_open_db) - - # Verify the discarded transactions are still - # around, and dispose them. - recovered_txns=self.dbenv.txn_recover() - self.assertEqual(len(discard_txns),len(recovered_txns)) - for gid,txn in recovered_txns : - txn.abort() - del txn - del recovered_txns - - self._recreate_env(must_open_db=True) - - # Be sure there are not pending transactions. - # Check also database size. - recovered_txns=self.dbenv.txn_recover() - self.assertTrue(len(recovered_txns)==0) - self.assertEqual(len(committed_txns),self.db.stat()["nkeys"]) - -class DBTxn_distributedSYNC(DBTxn_distributed): - nosync=False - -class DBTxn_distributed_must_open_db(DBTxn_distributed): - must_open_db=True - -class DBTxn_distributedSYNC_must_open_db(DBTxn_distributed): - nosync=False - must_open_db=True - -#---------------------------------------------------------------------- - -def test_suite(): - suite = unittest.TestSuite() - if db.version() >= (4,5) : - suite.addTest(unittest.makeSuite(DBTxn_distributed)) - suite.addTest(unittest.makeSuite(DBTxn_distributedSYNC)) - if db.version() >= (4,6) : - suite.addTest(unittest.makeSuite(DBTxn_distributed_must_open_db)) - suite.addTest(unittest.makeSuite(DBTxn_distributedSYNC_must_open_db)) - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_early_close.py b/PythonLib/extra/bsddb/test/test_early_close.py deleted file mode 100644 index e9252795..00000000 --- a/PythonLib/extra/bsddb/test/test_early_close.py +++ /dev/null @@ -1,215 +0,0 @@ -"""TestCases for checking that it does not segfault when a DBEnv object -is closed before its DB objects. -""" - -import os, sys -import unittest - -from test_all import db, test_support, verbose, get_new_environment_path, get_new_database_path - -# We're going to get warnings in this module about trying to close the db when -# its env is already closed. Let's just ignore those. -try: - import warnings -except ImportError: - pass -else: - warnings.filterwarnings('ignore', - message='DB could not be closed in', - category=RuntimeWarning) - - -#---------------------------------------------------------------------- - -class DBEnvClosedEarlyCrash(unittest.TestCase): - def setUp(self): - self.homeDir = get_new_environment_path() - self.filename = "test" - - def tearDown(self): - test_support.rmtree(self.homeDir) - - def test01_close_dbenv_before_db(self): - dbenv = db.DBEnv() - dbenv.open(self.homeDir, - db.DB_INIT_CDB| db.DB_CREATE |db.DB_THREAD|db.DB_INIT_MPOOL, - 0666) - - d = db.DB(dbenv) - d2 = db.DB(dbenv) - d.open(self.filename, db.DB_BTREE, db.DB_CREATE | db.DB_THREAD, 0666) - - self.assertRaises(db.DBNoSuchFileError, d2.open, - self.filename+"2", db.DB_BTREE, db.DB_THREAD, 0666) - - d.put("test","this is a test") - self.assertEqual(d.get("test"), "this is a test", "put!=get") - dbenv.close() # This "close" should close the child db handle also - self.assertRaises(db.DBError, d.get, "test") - - def test02_close_dbenv_before_dbcursor(self): - dbenv = db.DBEnv() - dbenv.open(self.homeDir, - db.DB_INIT_CDB| db.DB_CREATE |db.DB_THREAD|db.DB_INIT_MPOOL, - 0666) - - d = db.DB(dbenv) - d.open(self.filename, db.DB_BTREE, db.DB_CREATE | db.DB_THREAD, 0666) - - d.put("test","this is a test") - d.put("test2","another test") - d.put("test3","another one") - self.assertEqual(d.get("test"), "this is a test", "put!=get") - c=d.cursor() - c.first() - c.next() - d.close() # This "close" should close the child db handle also - # db.close should close the child cursor - self.assertRaises(db.DBError,c.next) - - d = db.DB(dbenv) - d.open(self.filename, db.DB_BTREE, db.DB_CREATE | db.DB_THREAD, 0666) - c=d.cursor() - c.first() - c.next() - dbenv.close() - # The "close" should close the child db handle also, with cursors - self.assertRaises(db.DBError, c.next) - - def test03_close_db_before_dbcursor_without_env(self): - import os.path - path=os.path.join(self.homeDir,self.filename) - d = db.DB() - d.open(path, db.DB_BTREE, db.DB_CREATE | db.DB_THREAD, 0666) - - d.put("test","this is a test") - d.put("test2","another test") - d.put("test3","another one") - self.assertEqual(d.get("test"), "this is a test", "put!=get") - c=d.cursor() - c.first() - c.next() - d.close() - # The "close" should close the child db handle also - self.assertRaises(db.DBError, c.next) - - def test04_close_massive(self): - dbenv = db.DBEnv() - dbenv.open(self.homeDir, - db.DB_INIT_CDB| db.DB_CREATE |db.DB_THREAD|db.DB_INIT_MPOOL, - 0666) - - dbs=[db.DB(dbenv) for i in xrange(16)] - cursors=[] - for i in dbs : - i.open(self.filename, db.DB_BTREE, db.DB_CREATE | db.DB_THREAD, 0666) - - dbs[10].put("test","this is a test") - dbs[10].put("test2","another test") - dbs[10].put("test3","another one") - self.assertEqual(dbs[4].get("test"), "this is a test", "put!=get") - - for i in dbs : - cursors.extend([i.cursor() for j in xrange(32)]) - - for i in dbs[::3] : - i.close() - for i in cursors[::3] : - i.close() - - # Check for missing exception in DB! (after DB close) - self.assertRaises(db.DBError, dbs[9].get, "test") - - # Check for missing exception in DBCursor! (after DB close) - self.assertRaises(db.DBError, cursors[101].first) - - cursors[80].first() - cursors[80].next() - dbenv.close() # This "close" should close the child db handle also - # Check for missing exception! (after DBEnv close) - self.assertRaises(db.DBError, cursors[80].next) - - def test05_close_dbenv_delete_db_success(self): - dbenv = db.DBEnv() - dbenv.open(self.homeDir, - db.DB_INIT_CDB| db.DB_CREATE |db.DB_THREAD|db.DB_INIT_MPOOL, - 0666) - - d = db.DB(dbenv) - d.open(self.filename, db.DB_BTREE, db.DB_CREATE | db.DB_THREAD, 0666) - - dbenv.close() # This "close" should close the child db handle also - - del d - try: - import gc - except ImportError: - gc = None - if gc: - # force d.__del__ [DB_dealloc] to be called - gc.collect() - - def test06_close_txn_before_dup_cursor(self) : - dbenv = db.DBEnv() - dbenv.open(self.homeDir,db.DB_INIT_TXN | db.DB_INIT_MPOOL | - db.DB_INIT_LOG | db.DB_CREATE) - d = db.DB(dbenv) - txn = dbenv.txn_begin() - d.open(self.filename, dbtype = db.DB_HASH, flags = db.DB_CREATE, - txn=txn) - d.put("XXX", "yyy", txn=txn) - txn.commit() - txn = dbenv.txn_begin() - c1 = d.cursor(txn) - c2 = c1.dup() - self.assertEqual(("XXX", "yyy"), c1.first()) - - # Not interested in warnings about implicit close. - import warnings - if sys.version_info < (2, 6) : - # Completely resetting the warning state is - # problematic with python >=2.6 with -3 (py3k warning), - # because some stdlib modules selectively ignores warnings. - warnings.simplefilter("ignore") - txn.commit() - warnings.resetwarnings() - else : - # When we drop support for python 2.4 - # we could use: (in 2.5 we need a __future__ statement) - # - # with warnings.catch_warnings(): - # warnings.simplefilter("ignore") - # txn.commit() - # - # We can not use "with" as is, because it would be invalid syntax - # in python 2.4 and (with no __future__) 2.5. - # Here we simulate "with" following PEP 343 : - w = warnings.catch_warnings() - w.__enter__() - try : - warnings.simplefilter("ignore") - txn.commit() - finally : - w.__exit__() - - self.assertRaises(db.DBCursorClosedError, c2.first) - - def test07_close_db_before_sequence(self): - import os.path - path=os.path.join(self.homeDir,self.filename) - d = db.DB() - d.open(path, db.DB_BTREE, db.DB_CREATE | db.DB_THREAD, 0666) - dbs=db.DBSequence(d) - d.close() # This "close" should close the child DBSequence also - dbs.close() # If not closed, core dump (in Berkeley DB 4.6.*) - -#---------------------------------------------------------------------- - -def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(DBEnvClosedEarlyCrash)) - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_fileid.py b/PythonLib/extra/bsddb/test/test_fileid.py deleted file mode 100644 index 095ec83d..00000000 --- a/PythonLib/extra/bsddb/test/test_fileid.py +++ /dev/null @@ -1,61 +0,0 @@ -"""TestCase for reseting File ID. -""" - -import os -import shutil -import unittest - -from test_all import db, test_support, get_new_environment_path, get_new_database_path - -class FileidResetTestCase(unittest.TestCase): - def setUp(self): - self.db_path_1 = get_new_database_path() - self.db_path_2 = get_new_database_path() - self.db_env_path = get_new_environment_path() - - def test_fileid_reset(self): - # create DB 1 - self.db1 = db.DB() - self.db1.open(self.db_path_1, dbtype=db.DB_HASH, flags=(db.DB_CREATE|db.DB_EXCL)) - self.db1.put('spam', 'eggs') - self.db1.close() - - shutil.copy(self.db_path_1, self.db_path_2) - - self.db2 = db.DB() - self.db2.open(self.db_path_2, dbtype=db.DB_HASH) - self.db2.put('spam', 'spam') - self.db2.close() - - self.db_env = db.DBEnv() - self.db_env.open(self.db_env_path, db.DB_CREATE|db.DB_INIT_MPOOL) - - # use fileid_reset() here - self.db_env.fileid_reset(self.db_path_2) - - self.db1 = db.DB(self.db_env) - self.db1.open(self.db_path_1, dbtype=db.DB_HASH, flags=db.DB_RDONLY) - self.assertEqual(self.db1.get('spam'), 'eggs') - - self.db2 = db.DB(self.db_env) - self.db2.open(self.db_path_2, dbtype=db.DB_HASH, flags=db.DB_RDONLY) - self.assertEqual(self.db2.get('spam'), 'spam') - - self.db1.close() - self.db2.close() - - self.db_env.close() - - def tearDown(self): - test_support.unlink(self.db_path_1) - test_support.unlink(self.db_path_2) - test_support.rmtree(self.db_env_path) - -def test_suite(): - suite = unittest.TestSuite() - if db.version() >= (4, 4): - suite.addTest(unittest.makeSuite(FileidResetTestCase)) - return suite - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_get_none.py b/PythonLib/extra/bsddb/test/test_get_none.py deleted file mode 100644 index 8763b543..00000000 --- a/PythonLib/extra/bsddb/test/test_get_none.py +++ /dev/null @@ -1,92 +0,0 @@ -""" -TestCases for checking set_get_returns_none. -""" - -import os, string -import unittest - -from test_all import db, verbose, get_new_database_path - - -#---------------------------------------------------------------------- - -class GetReturnsNoneTestCase(unittest.TestCase): - def setUp(self): - self.filename = get_new_database_path() - - def tearDown(self): - try: - os.remove(self.filename) - except os.error: - pass - - - def test01_get_returns_none(self): - d = db.DB() - d.open(self.filename, db.DB_BTREE, db.DB_CREATE) - d.set_get_returns_none(1) - - for x in string.letters: - d.put(x, x * 40) - - data = d.get('bad key') - self.assertEqual(data, None) - - data = d.get(string.letters[0]) - self.assertEqual(data, string.letters[0]*40) - - count = 0 - c = d.cursor() - rec = c.first() - while rec: - count = count + 1 - rec = c.next() - - self.assertEqual(rec, None) - self.assertEqual(count, len(string.letters)) - - c.close() - d.close() - - - def test02_get_raises_exception(self): - d = db.DB() - d.open(self.filename, db.DB_BTREE, db.DB_CREATE) - d.set_get_returns_none(0) - - for x in string.letters: - d.put(x, x * 40) - - self.assertRaises(db.DBNotFoundError, d.get, 'bad key') - self.assertRaises(KeyError, d.get, 'bad key') - - data = d.get(string.letters[0]) - self.assertEqual(data, string.letters[0]*40) - - count = 0 - exceptionHappened = 0 - c = d.cursor() - rec = c.first() - while rec: - count = count + 1 - try: - rec = c.next() - except db.DBNotFoundError: # end of the records - exceptionHappened = 1 - break - - self.assertNotEqual(rec, None) - self.assertTrue(exceptionHappened) - self.assertEqual(count, len(string.letters)) - - c.close() - d.close() - -#---------------------------------------------------------------------- - -def test_suite(): - return unittest.makeSuite(GetReturnsNoneTestCase) - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_join.py b/PythonLib/extra/bsddb/test/test_join.py deleted file mode 100644 index 1f0dfff8..00000000 --- a/PythonLib/extra/bsddb/test/test_join.py +++ /dev/null @@ -1,99 +0,0 @@ -"""TestCases for using the DB.join and DBCursor.join_item methods. -""" - -import os - -import unittest - -from test_all import db, dbshelve, test_support, verbose, \ - get_new_environment_path, get_new_database_path - -#---------------------------------------------------------------------- - -ProductIndex = [ - ('apple', "Convenience Store"), - ('blueberry', "Farmer's Market"), - ('shotgun', "S-Mart"), # Aisle 12 - ('pear', "Farmer's Market"), - ('chainsaw', "S-Mart"), # "Shop smart. Shop S-Mart!" - ('strawberry', "Farmer's Market"), -] - -ColorIndex = [ - ('blue', "blueberry"), - ('red', "apple"), - ('red', "chainsaw"), - ('red', "strawberry"), - ('yellow', "peach"), - ('yellow', "pear"), - ('black', "shotgun"), -] - -class JoinTestCase(unittest.TestCase): - keytype = '' - - def setUp(self): - self.filename = self.__class__.__name__ + '.db' - self.homeDir = get_new_environment_path() - self.env = db.DBEnv() - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOCK ) - - def tearDown(self): - self.env.close() - test_support.rmtree(self.homeDir) - - def test01_join(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test01_join..." % \ - self.__class__.__name__ - - # create and populate primary index - priDB = db.DB(self.env) - priDB.open(self.filename, "primary", db.DB_BTREE, db.DB_CREATE) - map(lambda t, priDB=priDB: priDB.put(*t), ProductIndex) - - # create and populate secondary index - secDB = db.DB(self.env) - secDB.set_flags(db.DB_DUP | db.DB_DUPSORT) - secDB.open(self.filename, "secondary", db.DB_BTREE, db.DB_CREATE) - map(lambda t, secDB=secDB: secDB.put(*t), ColorIndex) - - sCursor = None - jCursor = None - try: - # lets look up all of the red Products - sCursor = secDB.cursor() - # Don't do the .set() in an assert, or you can get a bogus failure - # when running python -O - tmp = sCursor.set('red') - self.assertTrue(tmp) - - # FIXME: jCursor doesn't properly hold a reference to its - # cursors, if they are closed before jcursor is used it - # can cause a crash. - jCursor = priDB.join([sCursor]) - - if jCursor.get(0) != ('apple', "Convenience Store"): - self.fail("join cursor positioned wrong") - if jCursor.join_item() != 'chainsaw': - self.fail("DBCursor.join_item returned wrong item") - if jCursor.get(0)[0] != 'strawberry': - self.fail("join cursor returned wrong thing") - if jCursor.get(0): # there were only three red items to return - self.fail("join cursor returned too many items") - finally: - if jCursor: - jCursor.close() - if sCursor: - sCursor.close() - priDB.close() - secDB.close() - - -def test_suite(): - suite = unittest.TestSuite() - - suite.addTest(unittest.makeSuite(JoinTestCase)) - - return suite diff --git a/PythonLib/extra/bsddb/test/test_lock.py b/PythonLib/extra/bsddb/test/test_lock.py deleted file mode 100644 index 10ca8d64..00000000 --- a/PythonLib/extra/bsddb/test/test_lock.py +++ /dev/null @@ -1,184 +0,0 @@ -""" -TestCases for testing the locking sub-system. -""" - -import time - -import unittest -from test_all import db, test_support, verbose, have_threads, \ - get_new_environment_path, get_new_database_path - -if have_threads : - from threading import Thread - import sys - if sys.version_info[0] < 3 : - from threading import currentThread - else : - from threading import current_thread as currentThread - -#---------------------------------------------------------------------- - -class LockingTestCase(unittest.TestCase): - def setUp(self): - self.homeDir = get_new_environment_path() - self.env = db.DBEnv() - self.env.open(self.homeDir, db.DB_THREAD | db.DB_INIT_MPOOL | - db.DB_INIT_LOCK | db.DB_CREATE) - - - def tearDown(self): - self.env.close() - test_support.rmtree(self.homeDir) - - - def test01_simple(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test01_simple..." % self.__class__.__name__ - - anID = self.env.lock_id() - if verbose: - print "locker ID: %s" % anID - lock = self.env.lock_get(anID, "some locked thing", db.DB_LOCK_WRITE) - if verbose: - print "Aquired lock: %s" % lock - self.env.lock_put(lock) - if verbose: - print "Released lock: %s" % lock - self.env.lock_id_free(anID) - - - def test02_threaded(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test02_threaded..." % self.__class__.__name__ - - threads = [] - threads.append(Thread(target = self.theThread, - args=(db.DB_LOCK_WRITE,))) - threads.append(Thread(target = self.theThread, - args=(db.DB_LOCK_READ,))) - threads.append(Thread(target = self.theThread, - args=(db.DB_LOCK_READ,))) - threads.append(Thread(target = self.theThread, - args=(db.DB_LOCK_WRITE,))) - threads.append(Thread(target = self.theThread, - args=(db.DB_LOCK_READ,))) - threads.append(Thread(target = self.theThread, - args=(db.DB_LOCK_READ,))) - threads.append(Thread(target = self.theThread, - args=(db.DB_LOCK_WRITE,))) - threads.append(Thread(target = self.theThread, - args=(db.DB_LOCK_WRITE,))) - threads.append(Thread(target = self.theThread, - args=(db.DB_LOCK_WRITE,))) - - for t in threads: - import sys - if sys.version_info[0] < 3 : - t.setDaemon(True) - else : - t.daemon = True - t.start() - for t in threads: - t.join() - - def test03_lock_timeout(self): - self.env.set_timeout(0, db.DB_SET_LOCK_TIMEOUT) - self.assertEqual(self.env.get_timeout(db.DB_SET_LOCK_TIMEOUT), 0) - self.env.set_timeout(0, db.DB_SET_TXN_TIMEOUT) - self.assertEqual(self.env.get_timeout(db.DB_SET_TXN_TIMEOUT), 0) - self.env.set_timeout(123456, db.DB_SET_LOCK_TIMEOUT) - self.assertEqual(self.env.get_timeout(db.DB_SET_LOCK_TIMEOUT), 123456) - self.env.set_timeout(7890123, db.DB_SET_TXN_TIMEOUT) - self.assertEqual(self.env.get_timeout(db.DB_SET_TXN_TIMEOUT), 7890123) - - def test04_lock_timeout2(self): - self.env.set_timeout(0, db.DB_SET_LOCK_TIMEOUT) - self.env.set_timeout(0, db.DB_SET_TXN_TIMEOUT) - self.env.set_timeout(123456, db.DB_SET_LOCK_TIMEOUT) - self.env.set_timeout(7890123, db.DB_SET_TXN_TIMEOUT) - - def deadlock_detection() : - while not deadlock_detection.end : - deadlock_detection.count = \ - self.env.lock_detect(db.DB_LOCK_EXPIRE) - if deadlock_detection.count : - while not deadlock_detection.end : - pass - break - time.sleep(0.01) - - deadlock_detection.end=False - deadlock_detection.count=0 - t=Thread(target=deadlock_detection) - import sys - if sys.version_info[0] < 3 : - t.setDaemon(True) - else : - t.daemon = True - t.start() - self.env.set_timeout(100000, db.DB_SET_LOCK_TIMEOUT) - anID = self.env.lock_id() - anID2 = self.env.lock_id() - self.assertNotEqual(anID, anID2) - lock = self.env.lock_get(anID, "shared lock", db.DB_LOCK_WRITE) - start_time=time.time() - self.assertRaises(db.DBLockNotGrantedError, - self.env.lock_get,anID2, "shared lock", db.DB_LOCK_READ) - end_time=time.time() - deadlock_detection.end=True - # Floating point rounding - self.assertTrue((end_time-start_time) >= 0.0999) - self.env.lock_put(lock) - t.join() - - self.env.lock_id_free(anID) - self.env.lock_id_free(anID2) - - if db.version() >= (4,6): - self.assertTrue(deadlock_detection.count>0) - - def theThread(self, lockType): - import sys - if sys.version_info[0] < 3 : - name = currentThread().getName() - else : - name = currentThread().name - - if lockType == db.DB_LOCK_WRITE: - lt = "write" - else: - lt = "read" - - anID = self.env.lock_id() - if verbose: - print "%s: locker ID: %s" % (name, anID) - - for i in xrange(1000) : - lock = self.env.lock_get(anID, "some locked thing", lockType) - if verbose: - print "%s: Aquired %s lock: %s" % (name, lt, lock) - - self.env.lock_put(lock) - if verbose: - print "%s: Released %s lock: %s" % (name, lt, lock) - - self.env.lock_id_free(anID) - - -#---------------------------------------------------------------------- - -def test_suite(): - suite = unittest.TestSuite() - - if have_threads: - suite.addTest(unittest.makeSuite(LockingTestCase)) - else: - suite.addTest(unittest.makeSuite(LockingTestCase, 'test01')) - - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_misc.py b/PythonLib/extra/bsddb/test/test_misc.py deleted file mode 100644 index b1e928f5..00000000 --- a/PythonLib/extra/bsddb/test/test_misc.py +++ /dev/null @@ -1,138 +0,0 @@ -"""Miscellaneous bsddb module test cases -""" - -import os, sys -import unittest - -from test_all import db, dbshelve, hashopen, test_support, get_new_environment_path, get_new_database_path - -#---------------------------------------------------------------------- - -class MiscTestCase(unittest.TestCase): - def setUp(self): - self.filename = get_new_database_path() - self.homeDir = get_new_environment_path() - - def tearDown(self): - test_support.unlink(self.filename) - test_support.rmtree(self.homeDir) - - def test01_badpointer(self): - dbs = dbshelve.open(self.filename) - dbs.close() - self.assertRaises(db.DBError, dbs.get, "foo") - - def test02_db_home(self): - env = db.DBEnv() - # check for crash fixed when db_home is used before open() - self.assertTrue(env.db_home is None) - env.open(self.homeDir, db.DB_CREATE) - if sys.version_info[0] < 3 : - self.assertEqual(self.homeDir, env.db_home) - else : - self.assertEqual(bytes(self.homeDir, "ascii"), env.db_home) - - def test03_repr_closed_db(self): - db = hashopen(self.filename) - db.close() - rp = repr(db) - self.assertEqual(rp, "{}") - - def test04_repr_db(self) : - db = hashopen(self.filename) - d = {} - for i in xrange(100) : - db[repr(i)] = repr(100*i) - d[repr(i)] = repr(100*i) - db.close() - db = hashopen(self.filename) - rp = repr(db) - self.assertEqual(rp, repr(d)) - db.close() - - # http://sourceforge.net/tracker/index.php?func=detail&aid=1708868&group_id=13900&atid=313900 - # - # See the bug report for details. - # - # The problem was that make_key_dbt() was not allocating a copy of - # string keys but FREE_DBT() was always being told to free it when the - # database was opened with DB_THREAD. - def test05_double_free_make_key_dbt(self): - try: - db1 = db.DB() - db1.open(self.filename, None, db.DB_BTREE, - db.DB_CREATE | db.DB_THREAD) - - curs = db1.cursor() - t = curs.get("/foo", db.DB_SET) - # double free happened during exit from DBC_get - finally: - db1.close() - test_support.unlink(self.filename) - - def test06_key_with_null_bytes(self): - try: - db1 = db.DB() - db1.open(self.filename, None, db.DB_HASH, db.DB_CREATE) - db1['a'] = 'eh?' - db1['a\x00'] = 'eh zed.' - db1['a\x00a'] = 'eh zed eh?' - db1['aaa'] = 'eh eh eh!' - keys = db1.keys() - keys.sort() - self.assertEqual(['a', 'a\x00', 'a\x00a', 'aaa'], keys) - self.assertEqual(db1['a'], 'eh?') - self.assertEqual(db1['a\x00'], 'eh zed.') - self.assertEqual(db1['a\x00a'], 'eh zed eh?') - self.assertEqual(db1['aaa'], 'eh eh eh!') - finally: - db1.close() - test_support.unlink(self.filename) - - def test07_DB_set_flags_persists(self): - try: - db1 = db.DB() - db1.set_flags(db.DB_DUPSORT) - db1.open(self.filename, db.DB_HASH, db.DB_CREATE) - db1['a'] = 'eh' - db1['a'] = 'A' - self.assertEqual([('a', 'A')], db1.items()) - db1.put('a', 'Aa') - self.assertEqual([('a', 'A'), ('a', 'Aa')], db1.items()) - db1.close() - db1 = db.DB() - # no set_flags call, we're testing that it reads and obeys - # the flags on open. - db1.open(self.filename, db.DB_HASH) - self.assertEqual([('a', 'A'), ('a', 'Aa')], db1.items()) - # if it read the flags right this will replace all values - # for key 'a' instead of adding a new one. (as a dict should) - db1['a'] = 'new A' - self.assertEqual([('a', 'new A')], db1.items()) - finally: - db1.close() - test_support.unlink(self.filename) - - - def test08_ExceptionTypes(self) : - self.assertTrue(issubclass(db.DBError, Exception)) - for i, j in db.__dict__.items() : - if i.startswith("DB") and i.endswith("Error") : - self.assertTrue(issubclass(j, db.DBError), msg=i) - if i not in ("DBKeyEmptyError", "DBNotFoundError") : - self.assertFalse(issubclass(j, KeyError), msg=i) - - # This two exceptions have two bases - self.assertTrue(issubclass(db.DBKeyEmptyError, KeyError)) - self.assertTrue(issubclass(db.DBNotFoundError, KeyError)) - - -#---------------------------------------------------------------------- - - -def test_suite(): - return unittest.makeSuite(MiscTestCase) - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_pickle.py b/PythonLib/extra/bsddb/test/test_pickle.py deleted file mode 100644 index 6a8478d5..00000000 --- a/PythonLib/extra/bsddb/test/test_pickle.py +++ /dev/null @@ -1,68 +0,0 @@ - -import os -import pickle -import sys - -if sys.version_info[0] < 3 : - try: - import cPickle - except ImportError: - cPickle = None -else : - cPickle = None - -import unittest - -from test_all import db, test_support, get_new_environment_path, get_new_database_path - -#---------------------------------------------------------------------- - -class pickleTestCase(unittest.TestCase): - """Verify that DBError can be pickled and unpickled""" - db_name = 'test-dbobj.db' - - def setUp(self): - self.homeDir = get_new_environment_path() - - def tearDown(self): - if hasattr(self, 'db'): - del self.db - if hasattr(self, 'env'): - del self.env - test_support.rmtree(self.homeDir) - - def _base_test_pickle_DBError(self, pickle): - self.env = db.DBEnv() - self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL) - self.db = db.DB(self.env) - self.db.open(self.db_name, db.DB_HASH, db.DB_CREATE) - self.db.put('spam', 'eggs') - self.assertEqual(self.db['spam'], 'eggs') - try: - self.db.put('spam', 'ham', flags=db.DB_NOOVERWRITE) - except db.DBError, egg: - pickledEgg = pickle.dumps(egg) - #print repr(pickledEgg) - rottenEgg = pickle.loads(pickledEgg) - if rottenEgg.args != egg.args or type(rottenEgg) != type(egg): - raise Exception, (rottenEgg, '!=', egg) - else: - raise Exception, "where's my DBError exception?!?" - - self.db.close() - self.env.close() - - def test01_pickle_DBError(self): - self._base_test_pickle_DBError(pickle=pickle) - - if cPickle: - def test02_cPickle_DBError(self): - self._base_test_pickle_DBError(pickle=cPickle) - -#---------------------------------------------------------------------- - -def test_suite(): - return unittest.makeSuite(pickleTestCase) - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_queue.py b/PythonLib/extra/bsddb/test/test_queue.py deleted file mode 100644 index c213ff41..00000000 --- a/PythonLib/extra/bsddb/test/test_queue.py +++ /dev/null @@ -1,163 +0,0 @@ -""" -TestCases for exercising a Queue DB. -""" - -import os, string -from pprint import pprint -import unittest - -from test_all import db, verbose, get_new_database_path - -#---------------------------------------------------------------------- - -class SimpleQueueTestCase(unittest.TestCase): - def setUp(self): - self.filename = get_new_database_path() - - def tearDown(self): - try: - os.remove(self.filename) - except os.error: - pass - - - def test01_basic(self): - # Basic Queue tests using the deprecated DBCursor.consume method. - - if verbose: - print '\n', '-=' * 30 - print "Running %s.test01_basic..." % self.__class__.__name__ - - d = db.DB() - d.set_re_len(40) # Queues must be fixed length - d.open(self.filename, db.DB_QUEUE, db.DB_CREATE) - - if verbose: - print "before appends" + '-' * 30 - pprint(d.stat()) - - for x in string.letters: - d.append(x * 40) - - self.assertEqual(len(d), len(string.letters)) - - d.put(100, "some more data") - d.put(101, "and some more ") - d.put(75, "out of order") - d.put(1, "replacement data") - - self.assertEqual(len(d), len(string.letters)+3) - - if verbose: - print "before close" + '-' * 30 - pprint(d.stat()) - - d.close() - del d - d = db.DB() - d.open(self.filename) - - if verbose: - print "after open" + '-' * 30 - pprint(d.stat()) - - # Test "txn" as a positional parameter - d.append("one more", None) - # Test "txn" as a keyword parameter - d.append("another one", txn=None) - - c = d.cursor() - - if verbose: - print "after append" + '-' * 30 - pprint(d.stat()) - - rec = c.consume() - while rec: - if verbose: - print rec - rec = c.consume() - c.close() - - if verbose: - print "after consume loop" + '-' * 30 - pprint(d.stat()) - - self.assertEqual(len(d), 0, \ - "if you see this message then you need to rebuild " \ - "Berkeley DB 3.1.17 with the patch in patches/qam_stat.diff") - - d.close() - - - - def test02_basicPost32(self): - # Basic Queue tests using the new DB.consume method in DB 3.2+ - # (No cursor needed) - - if verbose: - print '\n', '-=' * 30 - print "Running %s.test02_basicPost32..." % self.__class__.__name__ - - d = db.DB() - d.set_re_len(40) # Queues must be fixed length - d.open(self.filename, db.DB_QUEUE, db.DB_CREATE) - - if verbose: - print "before appends" + '-' * 30 - pprint(d.stat()) - - for x in string.letters: - d.append(x * 40) - - self.assertEqual(len(d), len(string.letters)) - - d.put(100, "some more data") - d.put(101, "and some more ") - d.put(75, "out of order") - d.put(1, "replacement data") - - self.assertEqual(len(d), len(string.letters)+3) - - if verbose: - print "before close" + '-' * 30 - pprint(d.stat()) - - d.close() - del d - d = db.DB() - d.open(self.filename) - #d.set_get_returns_none(true) - - if verbose: - print "after open" + '-' * 30 - pprint(d.stat()) - - d.append("one more") - - if verbose: - print "after append" + '-' * 30 - pprint(d.stat()) - - rec = d.consume() - while rec: - if verbose: - print rec - rec = d.consume() - - if verbose: - print "after consume loop" + '-' * 30 - pprint(d.stat()) - - d.close() - - - -#---------------------------------------------------------------------- - -def test_suite(): - return unittest.makeSuite(SimpleQueueTestCase) - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_recno.py b/PythonLib/extra/bsddb/test/test_recno.py deleted file mode 100644 index fb6956ae..00000000 --- a/PythonLib/extra/bsddb/test/test_recno.py +++ /dev/null @@ -1,320 +0,0 @@ -"""TestCases for exercising a Recno DB. -""" - -import os, sys -import errno -from pprint import pprint -import unittest - -from test_all import db, test_support, verbose, get_new_environment_path, get_new_database_path - -letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - - -#---------------------------------------------------------------------- - -class SimpleRecnoTestCase(unittest.TestCase): - if (sys.version_info < (2, 7)) or ((sys.version_info >= (3, 0)) and - (sys.version_info < (3, 2))) : - def assertIsInstance(self, obj, datatype, msg=None) : - return self.assertEqual(type(obj), datatype, msg=msg) - def assertGreaterEqual(self, a, b, msg=None) : - return self.assertTrue(a>=b, msg=msg) - - - def setUp(self): - self.filename = get_new_database_path() - self.homeDir = None - - def tearDown(self): - test_support.unlink(self.filename) - if self.homeDir: - test_support.rmtree(self.homeDir) - - def test01_basic(self): - d = db.DB() - - get_returns_none = d.set_get_returns_none(2) - d.set_get_returns_none(get_returns_none) - - d.open(self.filename, db.DB_RECNO, db.DB_CREATE) - - for x in letters: - recno = d.append(x * 60) - self.assertIsInstance(recno, int) - self.assertGreaterEqual(recno, 1) - if verbose: - print recno, - - if verbose: print - - stat = d.stat() - if verbose: - pprint(stat) - - for recno in range(1, len(d)+1): - data = d[recno] - if verbose: - print data - - self.assertIsInstance(data, str) - self.assertEqual(data, d.get(recno)) - - try: - data = d[0] # This should raise a KeyError!?!?! - except db.DBInvalidArgError, val: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.EINVAL) - else : - self.assertEqual(val.args[0], db.EINVAL) - if verbose: print val - else: - self.fail("expected exception") - - # test that has_key raises DB exceptions (fixed in pybsddb 4.3.2) - try: - d.has_key(0) - except db.DBError, val: - pass - else: - self.fail("has_key did not raise a proper exception") - - try: - data = d[100] - except KeyError: - pass - else: - self.fail("expected exception") - - try: - data = d.get(100) - except db.DBNotFoundError, val: - if get_returns_none: - self.fail("unexpected exception") - else: - self.assertEqual(data, None) - - keys = d.keys() - if verbose: - print keys - self.assertIsInstance(keys, list) - self.assertIsInstance(keys[0], int) - self.assertEqual(len(keys), len(d)) - - items = d.items() - if verbose: - pprint(items) - self.assertIsInstance(items, list) - self.assertIsInstance(items[0], tuple) - self.assertEqual(len(items[0]), 2) - self.assertIsInstance(items[0][0], int) - self.assertIsInstance(items[0][1], str) - self.assertEqual(len(items), len(d)) - - self.assertTrue(d.has_key(25)) - - del d[25] - self.assertFalse(d.has_key(25)) - - d.delete(13) - self.assertFalse(d.has_key(13)) - - data = d.get_both(26, "z" * 60) - self.assertEqual(data, "z" * 60, 'was %r' % data) - if verbose: - print data - - fd = d.fd() - if verbose: - print fd - - c = d.cursor() - rec = c.first() - while rec: - if verbose: - print rec - rec = c.next() - - c.set(50) - rec = c.current() - if verbose: - print rec - - c.put(-1, "a replacement record", db.DB_CURRENT) - - c.set(50) - rec = c.current() - self.assertEqual(rec, (50, "a replacement record")) - if verbose: - print rec - - rec = c.set_range(30) - if verbose: - print rec - - # test that non-existent key lookups work (and that - # DBC_set_range doesn't have a memleak under valgrind) - rec = c.set_range(999999) - self.assertEqual(rec, None) - if verbose: - print rec - - c.close() - d.close() - - d = db.DB() - d.open(self.filename) - c = d.cursor() - - # put a record beyond the consecutive end of the recno's - d[100] = "way out there" - self.assertEqual(d[100], "way out there") - - try: - data = d[99] - except KeyError: - pass - else: - self.fail("expected exception") - - try: - d.get(99) - except db.DBKeyEmptyError, val: - if get_returns_none: - self.fail("unexpected DBKeyEmptyError exception") - else: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.DB_KEYEMPTY) - else : - self.assertEqual(val.args[0], db.DB_KEYEMPTY) - if verbose: print val - else: - if not get_returns_none: - self.fail("expected exception") - - rec = c.set(40) - while rec: - if verbose: - print rec - rec = c.next() - - c.close() - d.close() - - def test02_WithSource(self): - """ - A Recno file that is given a "backing source file" is essentially a - simple ASCII file. Normally each record is delimited by \n and so is - just a line in the file, but you can set a different record delimiter - if needed. - """ - homeDir = get_new_environment_path() - self.homeDir = homeDir - source = os.path.join(homeDir, 'test_recno.txt') - if not os.path.isdir(homeDir): - os.mkdir(homeDir) - f = open(source, 'w') # create the file - f.close() - - d = db.DB() - # This is the default value, just checking if both int - d.set_re_delim(0x0A) - d.set_re_delim('\n') # and char can be used... - d.set_re_source(source) - d.open(self.filename, db.DB_RECNO, db.DB_CREATE) - - data = "The quick brown fox jumped over the lazy dog".split() - for datum in data: - d.append(datum) - d.sync() - d.close() - - # get the text from the backing source - f = open(source, 'r') - text = f.read() - f.close() - text = text.strip() - if verbose: - print text - print data - print text.split('\n') - - self.assertEqual(text.split('\n'), data) - - # open as a DB again - d = db.DB() - d.set_re_source(source) - d.open(self.filename, db.DB_RECNO) - - d[3] = 'reddish-brown' - d[8] = 'comatose' - - d.sync() - d.close() - - f = open(source, 'r') - text = f.read() - f.close() - text = text.strip() - if verbose: - print text - print text.split('\n') - - self.assertEqual(text.split('\n'), - "The quick reddish-brown fox jumped over the comatose dog".split()) - - def test03_FixedLength(self): - d = db.DB() - d.set_re_len(40) # fixed length records, 40 bytes long - d.set_re_pad('-') # sets the pad character... - d.set_re_pad(45) # ...test both int and char - d.open(self.filename, db.DB_RECNO, db.DB_CREATE) - - for x in letters: - d.append(x * 35) # These will be padded - - d.append('.' * 40) # this one will be exact - - try: # this one will fail - d.append('bad' * 20) - except db.DBInvalidArgError, val: - if sys.version_info < (2, 6) : - self.assertEqual(val[0], db.EINVAL) - else : - self.assertEqual(val.args[0], db.EINVAL) - if verbose: print val - else: - self.fail("expected exception") - - c = d.cursor() - rec = c.first() - while rec: - if verbose: - print rec - rec = c.next() - - c.close() - d.close() - - def test04_get_size_empty(self) : - d = db.DB() - d.open(self.filename, dbtype=db.DB_RECNO, flags=db.DB_CREATE) - - row_id = d.append(' ') - self.assertEqual(1, d.get_size(key=row_id)) - row_id = d.append('') - self.assertEqual(0, d.get_size(key=row_id)) - - - - - -#---------------------------------------------------------------------- - - -def test_suite(): - return unittest.makeSuite(SimpleRecnoTestCase) - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_replication.py b/PythonLib/extra/bsddb/test/test_replication.py deleted file mode 100644 index 12ab2dd8..00000000 --- a/PythonLib/extra/bsddb/test/test_replication.py +++ /dev/null @@ -1,543 +0,0 @@ -"""TestCases for distributed transactions. -""" - -import os -import time -import unittest - -from test_all import db, test_support, have_threads, verbose, \ - get_new_environment_path, get_new_database_path - - -#---------------------------------------------------------------------- - -class DBReplication(unittest.TestCase) : - def setUp(self) : - self.homeDirMaster = get_new_environment_path() - self.homeDirClient = get_new_environment_path() - - self.dbenvMaster = db.DBEnv() - self.dbenvClient = db.DBEnv() - - # Must use "DB_THREAD" because the Replication Manager will - # be executed in other threads but will use the same environment. - # http://forums.oracle.com/forums/thread.jspa?threadID=645788&tstart=0 - self.dbenvMaster.open(self.homeDirMaster, db.DB_CREATE | db.DB_INIT_TXN - | db.DB_INIT_LOG | db.DB_INIT_MPOOL | db.DB_INIT_LOCK | - db.DB_INIT_REP | db.DB_RECOVER | db.DB_THREAD, 0666) - self.dbenvClient.open(self.homeDirClient, db.DB_CREATE | db.DB_INIT_TXN - | db.DB_INIT_LOG | db.DB_INIT_MPOOL | db.DB_INIT_LOCK | - db.DB_INIT_REP | db.DB_RECOVER | db.DB_THREAD, 0666) - - self.confirmed_master=self.client_startupdone=False - def confirmed_master(a,b,c) : - if b==db.DB_EVENT_REP_MASTER : - self.confirmed_master=True - - def client_startupdone(a,b,c) : - if b==db.DB_EVENT_REP_STARTUPDONE : - self.client_startupdone=True - - self.dbenvMaster.set_event_notify(confirmed_master) - self.dbenvClient.set_event_notify(client_startupdone) - - #self.dbenvMaster.set_verbose(db.DB_VERB_REPLICATION, True) - #self.dbenvMaster.set_verbose(db.DB_VERB_FILEOPS_ALL, True) - #self.dbenvClient.set_verbose(db.DB_VERB_REPLICATION, True) - #self.dbenvClient.set_verbose(db.DB_VERB_FILEOPS_ALL, True) - - self.dbMaster = self.dbClient = None - - - def tearDown(self): - if self.dbClient : - self.dbClient.close() - if self.dbMaster : - self.dbMaster.close() - - # Here we assign dummy event handlers to allow GC of the test object. - # Since the dummy handler doesn't use any outer scope variable, it - # doesn't keep any reference to the test object. - def dummy(*args) : - pass - self.dbenvMaster.set_event_notify(dummy) - self.dbenvClient.set_event_notify(dummy) - - self.dbenvClient.close() - self.dbenvMaster.close() - test_support.rmtree(self.homeDirClient) - test_support.rmtree(self.homeDirMaster) - -class DBReplicationManager(DBReplication) : - def test01_basic_replication(self) : - master_port = test_support.find_unused_port() - client_port = test_support.find_unused_port() - if db.version() >= (5, 2) : - self.site = self.dbenvMaster.repmgr_site("127.0.0.1", master_port) - self.site.set_config(db.DB_GROUP_CREATOR, True) - self.site.set_config(db.DB_LOCAL_SITE, True) - self.site2 = self.dbenvMaster.repmgr_site("127.0.0.1", client_port) - - self.site3 = self.dbenvClient.repmgr_site("127.0.0.1", master_port) - self.site3.set_config(db.DB_BOOTSTRAP_HELPER, True) - self.site4 = self.dbenvClient.repmgr_site("127.0.0.1", client_port) - self.site4.set_config(db.DB_LOCAL_SITE, True) - - d = { - db.DB_BOOTSTRAP_HELPER: [False, False, True, False], - db.DB_GROUP_CREATOR: [True, False, False, False], - db.DB_LEGACY: [False, False, False, False], - db.DB_LOCAL_SITE: [True, False, False, True], - db.DB_REPMGR_PEER: [False, False, False, False ], - } - - for i, j in d.items() : - for k, v in \ - zip([self.site, self.site2, self.site3, self.site4], j) : - if v : - self.assertTrue(k.get_config(i)) - else : - self.assertFalse(k.get_config(i)) - - self.assertNotEqual(self.site.get_eid(), self.site2.get_eid()) - self.assertNotEqual(self.site3.get_eid(), self.site4.get_eid()) - - for i, j in zip([self.site, self.site2, self.site3, self.site4], \ - [master_port, client_port, master_port, client_port]) : - addr = i.get_address() - self.assertEqual(addr, ("127.0.0.1", j)) - - for i in [self.site, self.site2] : - self.assertEqual(i.get_address(), - self.dbenvMaster.repmgr_site_by_eid(i.get_eid()).get_address()) - for i in [self.site3, self.site4] : - self.assertEqual(i.get_address(), - self.dbenvClient.repmgr_site_by_eid(i.get_eid()).get_address()) - else : - self.dbenvMaster.repmgr_set_local_site("127.0.0.1", master_port) - self.dbenvClient.repmgr_set_local_site("127.0.0.1", client_port) - self.dbenvMaster.repmgr_add_remote_site("127.0.0.1", client_port) - self.dbenvClient.repmgr_add_remote_site("127.0.0.1", master_port) - - self.dbenvMaster.rep_set_nsites(2) - self.dbenvClient.rep_set_nsites(2) - - self.dbenvMaster.rep_set_priority(10) - self.dbenvClient.rep_set_priority(0) - - self.dbenvMaster.rep_set_timeout(db.DB_REP_CONNECTION_RETRY,100123) - self.dbenvClient.rep_set_timeout(db.DB_REP_CONNECTION_RETRY,100321) - self.assertEqual(self.dbenvMaster.rep_get_timeout( - db.DB_REP_CONNECTION_RETRY), 100123) - self.assertEqual(self.dbenvClient.rep_get_timeout( - db.DB_REP_CONNECTION_RETRY), 100321) - - self.dbenvMaster.rep_set_timeout(db.DB_REP_ELECTION_TIMEOUT, 100234) - self.dbenvClient.rep_set_timeout(db.DB_REP_ELECTION_TIMEOUT, 100432) - self.assertEqual(self.dbenvMaster.rep_get_timeout( - db.DB_REP_ELECTION_TIMEOUT), 100234) - self.assertEqual(self.dbenvClient.rep_get_timeout( - db.DB_REP_ELECTION_TIMEOUT), 100432) - - self.dbenvMaster.rep_set_timeout(db.DB_REP_ELECTION_RETRY, 100345) - self.dbenvClient.rep_set_timeout(db.DB_REP_ELECTION_RETRY, 100543) - self.assertEqual(self.dbenvMaster.rep_get_timeout( - db.DB_REP_ELECTION_RETRY), 100345) - self.assertEqual(self.dbenvClient.rep_get_timeout( - db.DB_REP_ELECTION_RETRY), 100543) - - self.dbenvMaster.repmgr_set_ack_policy(db.DB_REPMGR_ACKS_ALL) - self.dbenvClient.repmgr_set_ack_policy(db.DB_REPMGR_ACKS_ALL) - - self.dbenvMaster.repmgr_start(1, db.DB_REP_MASTER); - self.dbenvClient.repmgr_start(1, db.DB_REP_CLIENT); - - self.assertEqual(self.dbenvMaster.rep_get_nsites(),2) - self.assertEqual(self.dbenvClient.rep_get_nsites(),2) - self.assertEqual(self.dbenvMaster.rep_get_priority(),10) - self.assertEqual(self.dbenvClient.rep_get_priority(),0) - self.assertEqual(self.dbenvMaster.repmgr_get_ack_policy(), - db.DB_REPMGR_ACKS_ALL) - self.assertEqual(self.dbenvClient.repmgr_get_ack_policy(), - db.DB_REPMGR_ACKS_ALL) - - # The timeout is necessary in BDB 4.5, since DB_EVENT_REP_STARTUPDONE - # is not generated if the master has no new transactions. - # This is solved in BDB 4.6 (#15542). - import time - timeout = time.time()+60 - while (time.time()timeout: - import sys - print >> sys.stderr, ("XXX: timeout happened before" - "startup was confirmed - see issue 3892") - startup_timeout = True - - d = self.dbenvMaster.repmgr_site_list() - self.assertEqual(len(d), 1) - d = d.values()[0] # There is only one - self.assertEqual(d[0], "127.0.0.1") - self.assertEqual(d[1], client_port) - self.assertTrue((d[2]==db.DB_REPMGR_CONNECTED) or \ - (d[2]==db.DB_REPMGR_DISCONNECTED)) - - d = self.dbenvClient.repmgr_site_list() - self.assertEqual(len(d), 1) - d = d.values()[0] # There is only one - self.assertEqual(d[0], "127.0.0.1") - self.assertEqual(d[1], master_port) - self.assertTrue((d[2]==db.DB_REPMGR_CONNECTED) or \ - (d[2]==db.DB_REPMGR_DISCONNECTED)) - - if db.version() >= (4,6) : - d = self.dbenvMaster.repmgr_stat(flags=db.DB_STAT_CLEAR); - self.assertTrue("msgs_queued" in d) - - self.dbMaster=db.DB(self.dbenvMaster) - txn=self.dbenvMaster.txn_begin() - self.dbMaster.open("test", db.DB_HASH, db.DB_CREATE, 0666, txn=txn) - txn.commit() - - import time,os.path - timeout=time.time()+10 - while (time.time()=timeout and startup_timeout: - self.skipTest("replication test skipped due to random failure, " - "see issue 3892") - self.assertTrue(time.time()= (4,7) : - def test02_test_request(self) : - self.basic_rep_threading() - (minimum, maximum) = self.dbenvClient.rep_get_request() - self.dbenvClient.rep_set_request(minimum-1, maximum+1) - self.assertEqual(self.dbenvClient.rep_get_request(), - (minimum-1, maximum+1)) - - if db.version() >= (4,6) : - def test03_master_election(self) : - # Get ready to hold an election - #self.dbenvMaster.rep_start(flags=db.DB_REP_MASTER) - self.dbenvMaster.rep_start(flags=db.DB_REP_CLIENT) - self.dbenvClient.rep_start(flags=db.DB_REP_CLIENT) - - def thread_do(env, q, envid, election_status, must_be_master) : - while True : - v=q.get() - if v is None : return - r = env.rep_process_message(v[0],v[1],envid) - if must_be_master and self.confirmed_master : - self.dbenvMaster.rep_start(flags = db.DB_REP_MASTER) - must_be_master = False - - if r[0] == db.DB_REP_HOLDELECTION : - def elect() : - while True : - try : - env.rep_elect(2, 1) - election_status[0] = False - break - except db.DBRepUnavailError : - pass - if not election_status[0] and not self.confirmed_master : - from threading import Thread - election_status[0] = True - t=Thread(target=elect) - import sys - if sys.version_info[0] < 3 : - t.setDaemon(True) - else : - t.daemon = True - t.start() - - self.thread_do = thread_do - - self.t_m.start() - self.t_c.start() - - self.dbenvMaster.rep_set_timeout(db.DB_REP_ELECTION_TIMEOUT, 50000) - self.dbenvClient.rep_set_timeout(db.DB_REP_ELECTION_TIMEOUT, 50000) - self.client_doing_election[0] = True - while True : - try : - self.dbenvClient.rep_elect(2, 1) - self.client_doing_election[0] = False - break - except db.DBRepUnavailError : - pass - - self.assertTrue(self.confirmed_master) - - # Race condition showed up after upgrading to Solaris 10 Update 10 - # https://forums.oracle.com/forums/thread.jspa?messageID=9902860 - # jcea@jcea.es: See private email from Paula Bingham (Oracle), - # in 20110929. - while not (self.dbenvClient.rep_stat()["startup_complete"]) : - pass - - if db.version() >= (4,7) : - def test04_test_clockskew(self) : - fast, slow = 1234, 1230 - self.dbenvMaster.rep_set_clockskew(fast, slow) - self.assertEqual((fast, slow), - self.dbenvMaster.rep_get_clockskew()) - self.basic_rep_threading() - -#---------------------------------------------------------------------- - -def test_suite(): - suite = unittest.TestSuite() - if db.version() >= (4, 6) : - dbenv = db.DBEnv() - try : - dbenv.repmgr_get_ack_policy() - ReplicationManager_available=True - except : - ReplicationManager_available=False - dbenv.close() - del dbenv - if ReplicationManager_available : - suite.addTest(unittest.makeSuite(DBReplicationManager)) - - if have_threads : - suite.addTest(unittest.makeSuite(DBBaseReplication)) - - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_sequence.py b/PythonLib/extra/bsddb/test/test_sequence.py deleted file mode 100644 index f0aa12a8..00000000 --- a/PythonLib/extra/bsddb/test/test_sequence.py +++ /dev/null @@ -1,136 +0,0 @@ -import unittest -import os - -from test_all import db, test_support, get_new_environment_path, get_new_database_path - - -class DBSequenceTest(unittest.TestCase): - def setUp(self): - self.int_32_max = 0x100000000 - self.homeDir = get_new_environment_path() - self.filename = "test" - - self.dbenv = db.DBEnv() - self.dbenv.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL, 0666) - self.d = db.DB(self.dbenv) - self.d.open(self.filename, db.DB_BTREE, db.DB_CREATE, 0666) - - def tearDown(self): - if hasattr(self, 'seq'): - self.seq.close() - del self.seq - if hasattr(self, 'd'): - self.d.close() - del self.d - if hasattr(self, 'dbenv'): - self.dbenv.close() - del self.dbenv - - test_support.rmtree(self.homeDir) - - def test_get(self): - self.seq = db.DBSequence(self.d, flags=0) - start_value = 10 * self.int_32_max - self.assertEqual(0xA00000000, start_value) - self.assertEqual(None, self.seq.initial_value(start_value)) - self.assertEqual(None, self.seq.open(key='id', txn=None, flags=db.DB_CREATE)) - self.assertEqual(start_value, self.seq.get(5)) - self.assertEqual(start_value + 5, self.seq.get()) - - def test_remove(self): - self.seq = db.DBSequence(self.d, flags=0) - self.assertEqual(None, self.seq.open(key='foo', txn=None, flags=db.DB_CREATE)) - self.assertEqual(None, self.seq.remove(txn=None, flags=0)) - del self.seq - - def test_get_key(self): - self.seq = db.DBSequence(self.d, flags=0) - key = 'foo' - self.assertEqual(None, self.seq.open(key=key, txn=None, flags=db.DB_CREATE)) - self.assertEqual(key, self.seq.get_key()) - - def test_get_dbp(self): - self.seq = db.DBSequence(self.d, flags=0) - self.assertEqual(None, self.seq.open(key='foo', txn=None, flags=db.DB_CREATE)) - self.assertEqual(self.d, self.seq.get_dbp()) - - def test_cachesize(self): - self.seq = db.DBSequence(self.d, flags=0) - cashe_size = 10 - self.assertEqual(None, self.seq.set_cachesize(cashe_size)) - self.assertEqual(None, self.seq.open(key='foo', txn=None, flags=db.DB_CREATE)) - self.assertEqual(cashe_size, self.seq.get_cachesize()) - - def test_flags(self): - self.seq = db.DBSequence(self.d, flags=0) - flag = db.DB_SEQ_WRAP; - self.assertEqual(None, self.seq.set_flags(flag)) - self.assertEqual(None, self.seq.open(key='foo', txn=None, flags=db.DB_CREATE)) - self.assertEqual(flag, self.seq.get_flags() & flag) - - def test_range(self): - self.seq = db.DBSequence(self.d, flags=0) - seq_range = (10 * self.int_32_max, 11 * self.int_32_max - 1) - self.assertEqual(None, self.seq.set_range(seq_range)) - self.seq.initial_value(seq_range[0]) - self.assertEqual(None, self.seq.open(key='foo', txn=None, flags=db.DB_CREATE)) - self.assertEqual(seq_range, self.seq.get_range()) - - def test_stat(self): - self.seq = db.DBSequence(self.d, flags=0) - self.assertEqual(None, self.seq.open(key='foo', txn=None, flags=db.DB_CREATE)) - stat = self.seq.stat() - for param in ('nowait', 'min', 'max', 'value', 'current', - 'flags', 'cache_size', 'last_value', 'wait'): - self.assertTrue(param in stat, "parameter %s isn't in stat info" % param) - - if db.version() >= (4,7) : - # This code checks a crash solved in Berkeley DB 4.7 - def test_stat_crash(self) : - d=db.DB() - d.open(None,dbtype=db.DB_HASH,flags=db.DB_CREATE) # In RAM - seq = db.DBSequence(d, flags=0) - - self.assertRaises(db.DBNotFoundError, seq.open, - key='id', txn=None, flags=0) - - self.assertRaises(db.DBInvalidArgError, seq.stat) - - d.close() - - def test_64bits(self) : - # We don't use both extremes because they are problematic - value_plus=(1L<<63)-2 - self.assertEqual(9223372036854775806L,value_plus) - value_minus=(-1L<<63)+1 # Two complement - self.assertEqual(-9223372036854775807L,value_minus) - self.seq = db.DBSequence(self.d, flags=0) - self.assertEqual(None, self.seq.initial_value(value_plus-1)) - self.assertEqual(None, self.seq.open(key='id', txn=None, - flags=db.DB_CREATE)) - self.assertEqual(value_plus-1, self.seq.get(1)) - self.assertEqual(value_plus, self.seq.get(1)) - - self.seq.remove(txn=None, flags=0) - - self.seq = db.DBSequence(self.d, flags=0) - self.assertEqual(None, self.seq.initial_value(value_minus)) - self.assertEqual(None, self.seq.open(key='id', txn=None, - flags=db.DB_CREATE)) - self.assertEqual(value_minus, self.seq.get(1)) - self.assertEqual(value_minus+1, self.seq.get(1)) - - def test_multiple_close(self): - self.seq = db.DBSequence(self.d) - self.seq.close() # You can close a Sequence multiple times - self.seq.close() - self.seq.close() - -def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(DBSequenceTest)) - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/bsddb/test/test_thread.py b/PythonLib/extra/bsddb/test/test_thread.py deleted file mode 100644 index 42212e9d..00000000 --- a/PythonLib/extra/bsddb/test/test_thread.py +++ /dev/null @@ -1,517 +0,0 @@ -"""TestCases for multi-threaded access to a DB. -""" - -import os -import sys -import time -import errno -from random import random - -DASH = '-' - -try: - WindowsError -except NameError: - class WindowsError(Exception): - pass - -import unittest -from test_all import db, dbutils, test_support, verbose, have_threads, \ - get_new_environment_path, get_new_database_path - -if have_threads : - from threading import Thread - if sys.version_info[0] < 3 : - from threading import currentThread - else : - from threading import current_thread as currentThread - - -#---------------------------------------------------------------------- - -class BaseThreadedTestCase(unittest.TestCase): - dbtype = db.DB_UNKNOWN # must be set in derived class - dbopenflags = 0 - dbsetflags = 0 - envflags = 0 - - def setUp(self): - if verbose: - dbutils._deadlock_VerboseFile = sys.stdout - - self.homeDir = get_new_environment_path() - self.env = db.DBEnv() - self.setEnvOpts() - self.env.open(self.homeDir, self.envflags | db.DB_CREATE) - - self.filename = self.__class__.__name__ + '.db' - self.d = db.DB(self.env) - if self.dbsetflags: - self.d.set_flags(self.dbsetflags) - self.d.open(self.filename, self.dbtype, self.dbopenflags|db.DB_CREATE) - - def tearDown(self): - self.d.close() - self.env.close() - test_support.rmtree(self.homeDir) - - def setEnvOpts(self): - pass - - def makeData(self, key): - return DASH.join([key] * 5) - - -#---------------------------------------------------------------------- - - -class ConcurrentDataStoreBase(BaseThreadedTestCase): - dbopenflags = db.DB_THREAD - envflags = db.DB_THREAD | db.DB_INIT_CDB | db.DB_INIT_MPOOL - readers = 0 # derived class should set - writers = 0 - records = 1000 - - def test01_1WriterMultiReaders(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test01_1WriterMultiReaders..." % \ - self.__class__.__name__ - - keys=range(self.records) - import random - random.shuffle(keys) - records_per_writer=self.records//self.writers - readers_per_writer=self.readers//self.writers - self.assertEqual(self.records,self.writers*records_per_writer) - self.assertEqual(self.readers,self.writers*readers_per_writer) - self.assertTrue((records_per_writer%readers_per_writer)==0) - readers = [] - - for x in xrange(self.readers): - rt = Thread(target = self.readerThread, - args = (self.d, x), - name = 'reader %d' % x, - )#verbose = verbose) - if sys.version_info[0] < 3 : - rt.setDaemon(True) - else : - rt.daemon = True - readers.append(rt) - - writers=[] - for x in xrange(self.writers): - a=keys[records_per_writer*x:records_per_writer*(x+1)] - a.sort() # Generate conflicts - b=readers[readers_per_writer*x:readers_per_writer*(x+1)] - wt = Thread(target = self.writerThread, - args = (self.d, a, b), - name = 'writer %d' % x, - )#verbose = verbose) - writers.append(wt) - - for t in writers: - if sys.version_info[0] < 3 : - t.setDaemon(True) - else : - t.daemon = True - t.start() - - for t in writers: - t.join() - for t in readers: - t.join() - - def writerThread(self, d, keys, readers): - if sys.version_info[0] < 3 : - name = currentThread().getName() - else : - name = currentThread().name - - if verbose: - print "%s: creating records %d - %d" % (name, start, stop) - - count=len(keys)//len(readers) - count2=count - for x in keys : - key = '%04d' % x - dbutils.DeadlockWrap(d.put, key, self.makeData(key), - max_retries=12) - if verbose and x % 100 == 0: - print "%s: records %d - %d finished" % (name, start, x) - - count2-=1 - if not count2 : - readers.pop().start() - count2=count - - if verbose: - print "%s: finished creating records" % name - - if verbose: - print "%s: thread finished" % name - - def readerThread(self, d, readerNum): - if sys.version_info[0] < 3 : - name = currentThread().getName() - else : - name = currentThread().name - - for i in xrange(5) : - c = d.cursor() - count = 0 - rec = c.first() - while rec: - count += 1 - key, data = rec - self.assertEqual(self.makeData(key), data) - rec = c.next() - if verbose: - print "%s: found %d records" % (name, count) - c.close() - - if verbose: - print "%s: thread finished" % name - - -class BTreeConcurrentDataStore(ConcurrentDataStoreBase): - dbtype = db.DB_BTREE - writers = 2 - readers = 10 - records = 1000 - - -class HashConcurrentDataStore(ConcurrentDataStoreBase): - dbtype = db.DB_HASH - writers = 2 - readers = 10 - records = 1000 - - -#---------------------------------------------------------------------- - -class SimpleThreadedBase(BaseThreadedTestCase): - dbopenflags = db.DB_THREAD - envflags = db.DB_THREAD | db.DB_INIT_MPOOL | db.DB_INIT_LOCK - readers = 10 - writers = 2 - records = 1000 - - def setEnvOpts(self): - self.env.set_lk_detect(db.DB_LOCK_DEFAULT) - - def test02_SimpleLocks(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test02_SimpleLocks..." % self.__class__.__name__ - - - keys=range(self.records) - import random - random.shuffle(keys) - records_per_writer=self.records//self.writers - readers_per_writer=self.readers//self.writers - self.assertEqual(self.records,self.writers*records_per_writer) - self.assertEqual(self.readers,self.writers*readers_per_writer) - self.assertTrue((records_per_writer%readers_per_writer)==0) - - readers = [] - for x in xrange(self.readers): - rt = Thread(target = self.readerThread, - args = (self.d, x), - name = 'reader %d' % x, - )#verbose = verbose) - if sys.version_info[0] < 3 : - rt.setDaemon(True) - else : - rt.daemon = True - readers.append(rt) - - writers = [] - for x in xrange(self.writers): - a=keys[records_per_writer*x:records_per_writer*(x+1)] - a.sort() # Generate conflicts - b=readers[readers_per_writer*x:readers_per_writer*(x+1)] - wt = Thread(target = self.writerThread, - args = (self.d, a, b), - name = 'writer %d' % x, - )#verbose = verbose) - writers.append(wt) - - for t in writers: - if sys.version_info[0] < 3 : - t.setDaemon(True) - else : - t.daemon = True - t.start() - - for t in writers: - t.join() - for t in readers: - t.join() - - def writerThread(self, d, keys, readers): - if sys.version_info[0] < 3 : - name = currentThread().getName() - else : - name = currentThread().name - if verbose: - print "%s: creating records %d - %d" % (name, start, stop) - - count=len(keys)//len(readers) - count2=count - for x in keys : - key = '%04d' % x - dbutils.DeadlockWrap(d.put, key, self.makeData(key), - max_retries=12) - - if verbose and x % 100 == 0: - print "%s: records %d - %d finished" % (name, start, x) - - count2-=1 - if not count2 : - readers.pop().start() - count2=count - - if verbose: - print "%s: thread finished" % name - - def readerThread(self, d, readerNum): - if sys.version_info[0] < 3 : - name = currentThread().getName() - else : - name = currentThread().name - - c = d.cursor() - count = 0 - rec = dbutils.DeadlockWrap(c.first, max_retries=10) - while rec: - count += 1 - key, data = rec - self.assertEqual(self.makeData(key), data) - rec = dbutils.DeadlockWrap(c.next, max_retries=10) - if verbose: - print "%s: found %d records" % (name, count) - c.close() - - if verbose: - print "%s: thread finished" % name - - -class BTreeSimpleThreaded(SimpleThreadedBase): - dbtype = db.DB_BTREE - - -class HashSimpleThreaded(SimpleThreadedBase): - dbtype = db.DB_HASH - - -#---------------------------------------------------------------------- - - -class ThreadedTransactionsBase(BaseThreadedTestCase): - dbopenflags = db.DB_THREAD | db.DB_AUTO_COMMIT - envflags = (db.DB_THREAD | - db.DB_INIT_MPOOL | - db.DB_INIT_LOCK | - db.DB_INIT_LOG | - db.DB_INIT_TXN - ) - readers = 0 - writers = 0 - records = 2000 - txnFlag = 0 - - def setEnvOpts(self): - #self.env.set_lk_detect(db.DB_LOCK_DEFAULT) - pass - - def test03_ThreadedTransactions(self): - if verbose: - print '\n', '-=' * 30 - print "Running %s.test03_ThreadedTransactions..." % \ - self.__class__.__name__ - - keys=range(self.records) - import random - random.shuffle(keys) - records_per_writer=self.records//self.writers - readers_per_writer=self.readers//self.writers - self.assertEqual(self.records,self.writers*records_per_writer) - self.assertEqual(self.readers,self.writers*readers_per_writer) - self.assertTrue((records_per_writer%readers_per_writer)==0) - - readers=[] - for x in xrange(self.readers): - rt = Thread(target = self.readerThread, - args = (self.d, x), - name = 'reader %d' % x, - )#verbose = verbose) - if sys.version_info[0] < 3 : - rt.setDaemon(True) - else : - rt.daemon = True - readers.append(rt) - - writers = [] - for x in xrange(self.writers): - a=keys[records_per_writer*x:records_per_writer*(x+1)] - b=readers[readers_per_writer*x:readers_per_writer*(x+1)] - wt = Thread(target = self.writerThread, - args = (self.d, a, b), - name = 'writer %d' % x, - )#verbose = verbose) - writers.append(wt) - - dt = Thread(target = self.deadlockThread) - if sys.version_info[0] < 3 : - dt.setDaemon(True) - else : - dt.daemon = True - dt.start() - - for t in writers: - if sys.version_info[0] < 3 : - t.setDaemon(True) - else : - t.daemon = True - t.start() - - for t in writers: - t.join() - for t in readers: - t.join() - - self.doLockDetect = False - dt.join() - - def writerThread(self, d, keys, readers): - if sys.version_info[0] < 3 : - name = currentThread().getName() - else : - name = currentThread().name - - count=len(keys)//len(readers) - while len(keys): - try: - txn = self.env.txn_begin(None, self.txnFlag) - keys2=keys[:count] - for x in keys2 : - key = '%04d' % x - d.put(key, self.makeData(key), txn) - if verbose and x % 100 == 0: - print "%s: records %d - %d finished" % (name, start, x) - txn.commit() - keys=keys[count:] - readers.pop().start() - except (db.DBLockDeadlockError, db.DBLockNotGrantedError), val: - if verbose: - if sys.version_info < (2, 6) : - print "%s: Aborting transaction (%s)" % (name, val[1]) - else : - print "%s: Aborting transaction (%s)" % (name, - val.args[1]) - txn.abort() - - if verbose: - print "%s: thread finished" % name - - def readerThread(self, d, readerNum): - if sys.version_info[0] < 3 : - name = currentThread().getName() - else : - name = currentThread().name - - finished = False - while not finished: - try: - txn = self.env.txn_begin(None, self.txnFlag) - c = d.cursor(txn) - count = 0 - rec = c.first() - while rec: - count += 1 - key, data = rec - self.assertEqual(self.makeData(key), data) - rec = c.next() - if verbose: print "%s: found %d records" % (name, count) - c.close() - txn.commit() - finished = True - except (db.DBLockDeadlockError, db.DBLockNotGrantedError), val: - if verbose: - if sys.version_info < (2, 6) : - print "%s: Aborting transaction (%s)" % (name, val[1]) - else : - print "%s: Aborting transaction (%s)" % (name, - val.args[1]) - c.close() - txn.abort() - - if verbose: - print "%s: thread finished" % name - - def deadlockThread(self): - self.doLockDetect = True - while self.doLockDetect: - time.sleep(0.05) - try: - aborted = self.env.lock_detect( - db.DB_LOCK_RANDOM, db.DB_LOCK_CONFLICT) - if verbose and aborted: - print "deadlock: Aborted %d deadlocked transaction(s)" \ - % aborted - except db.DBError: - pass - - -class BTreeThreadedTransactions(ThreadedTransactionsBase): - dbtype = db.DB_BTREE - writers = 2 - readers = 10 - records = 1000 - -class HashThreadedTransactions(ThreadedTransactionsBase): - dbtype = db.DB_HASH - writers = 2 - readers = 10 - records = 1000 - -class BTreeThreadedNoWaitTransactions(ThreadedTransactionsBase): - dbtype = db.DB_BTREE - writers = 2 - readers = 10 - records = 1000 - txnFlag = db.DB_TXN_NOWAIT - -class HashThreadedNoWaitTransactions(ThreadedTransactionsBase): - dbtype = db.DB_HASH - writers = 2 - readers = 10 - records = 1000 - txnFlag = db.DB_TXN_NOWAIT - - -#---------------------------------------------------------------------- - -def test_suite(): - suite = unittest.TestSuite() - - if have_threads: - suite.addTest(unittest.makeSuite(BTreeConcurrentDataStore)) - suite.addTest(unittest.makeSuite(HashConcurrentDataStore)) - suite.addTest(unittest.makeSuite(BTreeSimpleThreaded)) - suite.addTest(unittest.makeSuite(HashSimpleThreaded)) - suite.addTest(unittest.makeSuite(BTreeThreadedTransactions)) - suite.addTest(unittest.makeSuite(HashThreadedTransactions)) - suite.addTest(unittest.makeSuite(BTreeThreadedNoWaitTransactions)) - suite.addTest(unittest.makeSuite(HashThreadedNoWaitTransactions)) - - else: - print "Threads not available, skipping thread tests." - - return suite - - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') diff --git a/PythonLib/extra/distutils/__init__.py b/PythonLib/extra/distutils/__init__.py index 6e508855..d823d040 100644 --- a/PythonLib/extra/distutils/__init__.py +++ b/PythonLib/extra/distutils/__init__.py @@ -8,12 +8,6 @@ setup (...) """ -__revision__ = "$Id$" +import sys -# Distutils version -# -# Updated automatically by the Python release process. -# -#--start constants-- -__version__ = "2.7.6" -#--end constants-- +__version__ = sys.version[:sys.version.index(' ')] diff --git a/PythonLib/extra/distutils/ccompiler.py b/PythonLib/extra/distutils/ccompiler.py index 4907a0aa..62506a6e 100644 --- a/PythonLib/extra/distutils/ccompiler.py +++ b/PythonLib/extra/distutils/ccompiler.py @@ -718,7 +718,7 @@ def runtime_library_dir_option(self, dir): raise NotImplementedError def library_option(self, lib): - """Return the compiler option to add 'dir' to the list of libraries + """Return the compiler option to add 'lib' to the list of libraries linked into the shared library or executable. """ raise NotImplementedError @@ -842,8 +842,9 @@ def executable_filename(self, basename, strip_dir=0, output_dir=''): def library_filename(self, libname, lib_type='static', # or 'shared' strip_dir=0, output_dir=''): assert output_dir is not None - if lib_type not in ("static", "shared", "dylib"): - raise ValueError, "'lib_type' must be \"static\", \"shared\" or \"dylib\"" + if lib_type not in ("static", "shared", "dylib", "xcode_stub"): + raise ValueError, ("""'lib_type' must be "static", "shared", """ + """"dylib", or "xcode_stub".""") fmt = getattr(self, lib_type + "_lib_format") ext = getattr(self, lib_type + "_lib_extension") diff --git a/PythonLib/extra/distutils/command/bdist_rpm.py b/PythonLib/extra/distutils/command/bdist_rpm.py index 59582436..477e0ee0 100644 --- a/PythonLib/extra/distutils/command/bdist_rpm.py +++ b/PythonLib/extra/distutils/command/bdist_rpm.py @@ -12,6 +12,7 @@ from distutils.core import Command from distutils.debug import DEBUG from distutils.file_util import write_file +from distutils.sysconfig import get_python_version from distutils.errors import (DistutilsOptionError, DistutilsPlatformError, DistutilsFileError, DistutilsExecError) from distutils import log diff --git a/PythonLib/extra/distutils/command/bdist_wininst.py b/PythonLib/extra/distutils/command/bdist_wininst.py index aa9383af..d586e34f 100644 --- a/PythonLib/extra/distutils/command/bdist_wininst.py +++ b/PythonLib/extra/distutils/command/bdist_wininst.py @@ -1,368 +1,20 @@ """distutils.command.bdist_wininst -Implements the Distutils 'bdist_wininst' command: create a windows installer -exe-program.""" - -__revision__ = "$Id$" - -import sys -import os -import string - -from sysconfig import get_python_version +Suppresses the 'bdist_wininst' command, while still allowing +setuptools to import it without breaking.""" from distutils.core import Command -from distutils.dir_util import remove_tree -from distutils.errors import DistutilsOptionError, DistutilsPlatformError -from distutils import log -from distutils.util import get_platform - -class bdist_wininst (Command): +from distutils.errors import DistutilsPlatformError +class bdist_wininst(Command): description = "create an executable installer for MS Windows" - user_options = [('bdist-dir=', None, - "temporary directory for creating the distribution"), - ('plat-name=', 'p', - "platform name to embed in generated filenames " - "(default: %s)" % get_platform()), - ('keep-temp', 'k', - "keep the pseudo-installation tree around after " + - "creating the distribution archive"), - ('target-version=', None, - "require a specific python version" + - " on the target system"), - ('no-target-compile', 'c', - "do not compile .py to .pyc on the target system"), - ('no-target-optimize', 'o', - "do not compile .py to .pyo (optimized)" - "on the target system"), - ('dist-dir=', 'd', - "directory to put final built distributions in"), - ('bitmap=', 'b', - "bitmap to use for the installer instead of python-powered logo"), - ('title=', 't', - "title to display on the installer background instead of default"), - ('skip-build', None, - "skip rebuilding everything (for testing/debugging)"), - ('install-script=', None, - "basename of installation script to be run after" - "installation or before deinstallation"), - ('pre-install-script=', None, - "Fully qualified filename of a script to be run before " - "any files are installed. This script need not be in the " - "distribution"), - ('user-access-control=', None, - "specify Vista's UAC handling - 'none'/default=no " - "handling, 'auto'=use UAC if target Python installed for " - "all users, 'force'=always use UAC"), - ] - - boolean_options = ['keep-temp', 'no-target-compile', 'no-target-optimize', - 'skip-build'] - - def initialize_options (self): - self.bdist_dir = None - self.plat_name = None - self.keep_temp = 0 - self.no_target_compile = 0 - self.no_target_optimize = 0 - self.target_version = None - self.dist_dir = None - self.bitmap = None - self.title = None - self.skip_build = None - self.install_script = None - self.pre_install_script = None - self.user_access_control = None - - # initialize_options() - - - def finalize_options (self): - self.set_undefined_options('bdist', ('skip_build', 'skip_build')) - - if self.bdist_dir is None: - if self.skip_build and self.plat_name: - # If build is skipped and plat_name is overridden, bdist will - # not see the correct 'plat_name' - so set that up manually. - bdist = self.distribution.get_command_obj('bdist') - bdist.plat_name = self.plat_name - # next the command will be initialized using that name - bdist_base = self.get_finalized_command('bdist').bdist_base - self.bdist_dir = os.path.join(bdist_base, 'wininst') - - if not self.target_version: - self.target_version = "" - - if not self.skip_build and self.distribution.has_ext_modules(): - short_version = get_python_version() - if self.target_version and self.target_version != short_version: - raise DistutilsOptionError, \ - "target version can only be %s, or the '--skip-build'" \ - " option must be specified" % (short_version,) - self.target_version = short_version - - self.set_undefined_options('bdist', - ('dist_dir', 'dist_dir'), - ('plat_name', 'plat_name'), - ) - - if self.install_script: - for script in self.distribution.scripts: - if self.install_script == os.path.basename(script): - break - else: - raise DistutilsOptionError, \ - "install_script '%s' not found in scripts" % \ - self.install_script - # finalize_options() - - - def run (self): - if (sys.platform != "win32" and - (self.distribution.has_ext_modules() or - self.distribution.has_c_libraries())): - raise DistutilsPlatformError \ - ("distribution contains extensions and/or C libraries; " - "must be compiled on a Windows 32 platform") - - if not self.skip_build: - self.run_command('build') - - install = self.reinitialize_command('install', reinit_subcommands=1) - install.root = self.bdist_dir - install.skip_build = self.skip_build - install.warn_dir = 0 - install.plat_name = self.plat_name - - install_lib = self.reinitialize_command('install_lib') - # we do not want to include pyc or pyo files - install_lib.compile = 0 - install_lib.optimize = 0 - - if self.distribution.has_ext_modules(): - # If we are building an installer for a Python version other - # than the one we are currently running, then we need to ensure - # our build_lib reflects the other Python version rather than ours. - # Note that for target_version!=sys.version, we must have skipped the - # build step, so there is no issue with enforcing the build of this - # version. - target_version = self.target_version - if not target_version: - assert self.skip_build, "Should have already checked this" - target_version = sys.version[0:3] - plat_specifier = ".%s-%s" % (self.plat_name, target_version) - build = self.get_finalized_command('build') - build.build_lib = os.path.join(build.build_base, - 'lib' + plat_specifier) - - # Use a custom scheme for the zip-file, because we have to decide - # at installation time which scheme to use. - for key in ('purelib', 'platlib', 'headers', 'scripts', 'data'): - value = string.upper(key) - if key == 'headers': - value = value + '/Include/$dist_name' - setattr(install, - 'install_' + key, - value) - - log.info("installing to %s", self.bdist_dir) - install.ensure_finalized() - - # avoid warning of 'install_lib' about installing - # into a directory not in sys.path - sys.path.insert(0, os.path.join(self.bdist_dir, 'PURELIB')) - - install.run() - - del sys.path[0] - - # And make an archive relative to the root of the - # pseudo-installation tree. - from tempfile import mktemp - archive_basename = mktemp() - fullname = self.distribution.get_fullname() - arcname = self.make_archive(archive_basename, "zip", - root_dir=self.bdist_dir) - # create an exe containing the zip-file - self.create_exe(arcname, fullname, self.bitmap) - if self.distribution.has_ext_modules(): - pyversion = get_python_version() - else: - pyversion = 'any' - self.distribution.dist_files.append(('bdist_wininst', pyversion, - self.get_installer_filename(fullname))) - # remove the zip-file again - log.debug("removing temporary file '%s'", arcname) - os.remove(arcname) - - if not self.keep_temp: - remove_tree(self.bdist_dir, dry_run=self.dry_run) - - # run() - - def get_inidata (self): - # Return data describing the installation. - - lines = [] - metadata = self.distribution.metadata - - # Write the [metadata] section. - lines.append("[metadata]") - - # 'info' will be displayed in the installer's dialog box, - # describing the items to be installed. - info = (metadata.long_description or '') + '\n' - - # Escape newline characters - def escape(s): - return string.replace(s, "\n", "\\n") - - for name in ["author", "author_email", "description", "maintainer", - "maintainer_email", "name", "url", "version"]: - data = getattr(metadata, name, "") - if data: - info = info + ("\n %s: %s" % \ - (string.capitalize(name), escape(data))) - lines.append("%s=%s" % (name, escape(data))) - - # The [setup] section contains entries controlling - # the installer runtime. - lines.append("\n[Setup]") - if self.install_script: - lines.append("install_script=%s" % self.install_script) - lines.append("info=%s" % escape(info)) - lines.append("target_compile=%d" % (not self.no_target_compile)) - lines.append("target_optimize=%d" % (not self.no_target_optimize)) - if self.target_version: - lines.append("target_version=%s" % self.target_version) - if self.user_access_control: - lines.append("user_access_control=%s" % self.user_access_control) - - title = self.title or self.distribution.get_fullname() - lines.append("title=%s" % escape(title)) - import time - import distutils - build_info = "Built %s with distutils-%s" % \ - (time.ctime(time.time()), distutils.__version__) - lines.append("build_info=%s" % build_info) - return string.join(lines, "\n") - - # get_inidata() - - def create_exe (self, arcname, fullname, bitmap=None): - import struct - - self.mkpath(self.dist_dir) - - cfgdata = self.get_inidata() - - installer_name = self.get_installer_filename(fullname) - self.announce("creating %s" % installer_name) - - if bitmap: - bitmapdata = open(bitmap, "rb").read() - bitmaplen = len(bitmapdata) - else: - bitmaplen = 0 - - file = open(installer_name, "wb") - file.write(self.get_exe_bytes()) - if bitmap: - file.write(bitmapdata) - - # Convert cfgdata from unicode to ascii, mbcs encoded - try: - unicode - except NameError: - pass - else: - if isinstance(cfgdata, unicode): - cfgdata = cfgdata.encode("mbcs") - - # Append the pre-install script - cfgdata = cfgdata + "\0" - if self.pre_install_script: - script_data = open(self.pre_install_script, "r").read() - cfgdata = cfgdata + script_data + "\n\0" - else: - # empty pre-install script - cfgdata = cfgdata + "\0" - file.write(cfgdata) - - # The 'magic number' 0x1234567B is used to make sure that the - # binary layout of 'cfgdata' is what the wininst.exe binary - # expects. If the layout changes, increment that number, make - # the corresponding changes to the wininst.exe sources, and - # recompile them. - header = struct.pack(" cur_version: - bv = get_build_version() - else: - if self.target_version < "2.4": - bv = 6.0 - else: - bv = 7.1 - else: - # for current version - use authoritative check. - bv = get_build_version() - - # wininst-x.y.exe is in the same directory as this file - directory = os.path.dirname(__file__) - # we must use a wininst-x.y.exe built with the same C compiler - # used for python. XXX What about mingw, borland, and so on? + def initialize_options(self): + pass - # if plat_name starts with "win" but is not "win32" - # we want to strip "win" and leave the rest (e.g. -amd64) - # for all other cases, we don't want any suffix - if self.plat_name != 'win32' and self.plat_name[:3] == 'win': - sfix = self.plat_name[3:] - else: - sfix = '' + def finalize_options(self): + pass - filename = os.path.join(directory, "wininst-%.1f%s.exe" % (bv, sfix)) - f = open(filename, "rb") - try: - return f.read() - finally: - f.close() -# class bdist_wininst + def run(self): + raise DistutilsPlatformError("bdist_wininst is not supported " + "in this Python distribution") diff --git a/PythonLib/extra/distutils/command/build_ext.py b/PythonLib/extra/distutils/command/build_ext.py index f0a7d4ca..2c68be39 100644 --- a/PythonLib/extra/distutils/command/build_ext.py +++ b/PythonLib/extra/distutils/command/build_ext.py @@ -161,6 +161,7 @@ def finalize_options(self): self.include_dirs.append(plat_py_include) self.ensure_string_list('libraries') + self.ensure_string_list('link_objects') # Life is easier if we're not forever checking for None, so # simplify these options to empty lists if unset @@ -199,10 +200,12 @@ def finalize_options(self): else: # win-amd64 or win-ia64 suffix = self.plat_name[4:] - new_lib = os.path.join(sys.exec_prefix, 'PCbuild') - if suffix: - new_lib = os.path.join(new_lib, suffix) - self.library_dirs.append(new_lib) + # We could have been built in one of two places; add both + for d in ('PCbuild',), ('PC', 'VS9.0'): + new_lib = os.path.join(sys.exec_prefix, *d) + if suffix: + new_lib = os.path.join(new_lib, suffix) + self.library_dirs.append(new_lib) elif MSVC_VERSION == 8: self.library_dirs.append(os.path.join(sys.exec_prefix, @@ -235,7 +238,7 @@ def finalize_options(self): # Python's library directory must be appended to library_dirs # See Issues: #1600860, #4366 if (sysconfig.get_config_var('Py_ENABLE_SHARED')): - if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): + if not sysconfig.python_build: # building third party extensions self.library_dirs.append(sysconfig.get_config_var('LIBDIR')) else: diff --git a/PythonLib/extra/distutils/command/check.py b/PythonLib/extra/distutils/command/check.py index 152bf0de..4ea03d30 100644 --- a/PythonLib/extra/distutils/command/check.py +++ b/PythonLib/extra/distutils/command/check.py @@ -126,7 +126,7 @@ def _check_rst_data(self, data): """Returns warnings when the provided data doesn't compile.""" source_path = StringIO() parser = Parser() - settings = frontend.OptionParser().get_default_values() + settings = frontend.OptionParser(components=(Parser,)).get_default_values() settings.tab_width = 4 settings.pep_references = None settings.rfc_references = None @@ -142,8 +142,8 @@ def _check_rst_data(self, data): document.note_source(source_path, -1) try: parser.parse(data, document) - except AttributeError: - reporter.messages.append((-1, 'Could not finish the parsing.', - '', {})) + except AttributeError as e: + reporter.messages.append( + (-1, 'Could not finish the parsing: %s.' % e, '', {})) return reporter.messages diff --git a/PythonLib/extra/distutils/command/upload.py b/PythonLib/extra/distutils/command/upload.py index d0133353..b773f47f 100644 --- a/PythonLib/extra/distutils/command/upload.py +++ b/PythonLib/extra/distutils/command/upload.py @@ -10,7 +10,7 @@ import cStringIO as StringIO from hashlib import md5 -from distutils.errors import DistutilsOptionError +from distutils.errors import DistutilsError, DistutilsOptionError from distutils.core import PyPIRCCommand from distutils.spawn import spawn from distutils import log @@ -136,8 +136,8 @@ def upload_file(self, command, pyversion, filename): # Build up the MIME payload for the POST data boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' - sep_boundary = '\n--' + boundary - end_boundary = sep_boundary + '--' + sep_boundary = '\r\n--' + boundary + end_boundary = sep_boundary + '--\r\n' body = StringIO.StringIO() for key, value in data.items(): # handle multiple entries for the same name @@ -151,14 +151,13 @@ def upload_file(self, command, pyversion, filename): fn = "" body.write(sep_boundary) - body.write('\nContent-Disposition: form-data; name="%s"'%key) + body.write('\r\nContent-Disposition: form-data; name="%s"' % key) body.write(fn) - body.write("\n\n") + body.write("\r\n\r\n") body.write(value) if value and value[-1] == '\r': body.write('\n') # write an extra newline (lurve Macs) body.write(end_boundary) - body.write("\n") body = body.getvalue() self.announce("Submitting %s to %s" % (filename, self.repository), log.INFO) @@ -177,11 +176,11 @@ def upload_file(self, command, pyversion, filename): status = result.getcode() reason = result.msg if self.show_response: - msg = '\n'.join(('-' * 75, r.read(), '-' * 75)) + msg = '\n'.join(('-' * 75, result.read(), '-' * 75)) self.announce(msg, log.INFO) except socket.error, e: self.announce(str(e), log.ERROR) - return + raise except HTTPError, e: status = e.code reason = e.msg @@ -190,5 +189,6 @@ def upload_file(self, command, pyversion, filename): self.announce('Server response (%s): %s' % (status, reason), log.INFO) else: - self.announce('Upload failed (%s): %s' % (status, reason), - log.ERROR) + msg = 'Upload failed (%s): %s' % (status, reason) + self.announce(msg, log.ERROR) + raise DistutilsError(msg) diff --git a/PythonLib/extra/distutils/config.py b/PythonLib/extra/distutils/config.py index 1d327143..9e18c007 100644 --- a/PythonLib/extra/distutils/config.py +++ b/PythonLib/extra/distutils/config.py @@ -21,7 +21,7 @@ class PyPIRCCommand(Command): """Base command that knows how to handle the .pypirc file """ - DEFAULT_REPOSITORY = 'http://pypi.python.org/pypi' + DEFAULT_REPOSITORY = 'https://upload.pypi.org/legacy/' DEFAULT_REALM = 'pypi' repository = None realm = None diff --git a/PythonLib/extra/distutils/core.py b/PythonLib/extra/distutils/core.py index b89557d7..fcb20607 100644 --- a/PythonLib/extra/distutils/core.py +++ b/PythonLib/extra/distutils/core.py @@ -14,7 +14,6 @@ from distutils.debug import DEBUG from distutils.errors import (DistutilsSetupError, DistutilsArgError, DistutilsError, CCompilerError) -from distutils.util import grok_environment_error # Mainly import these so setup scripts can "from distutils.core import" them. from distutils.dist import Distribution @@ -153,13 +152,11 @@ class found in 'cmdclass' is used in place of the default, which is except KeyboardInterrupt: raise SystemExit, "interrupted" except (IOError, os.error), exc: - error = grok_environment_error(exc) - if DEBUG: - sys.stderr.write(error + "\n") + sys.stderr.write("error: %s\n" % (exc,)) raise else: - raise SystemExit, error + raise SystemExit, "error: %s" % (exc,) except (DistutilsError, CCompilerError), msg: diff --git a/PythonLib/extra/distutils/cygwinccompiler.py b/PythonLib/extra/distutils/cygwinccompiler.py index 5d116876..258e138b 100644 --- a/PythonLib/extra/distutils/cygwinccompiler.py +++ b/PythonLib/extra/distutils/cygwinccompiler.py @@ -10,9 +10,9 @@ # # * if you use a msvc compiled python version (1.5.2) # 1. you have to insert a __GNUC__ section in its config.h -# 2. you have to generate a import library for its dll +# 2. you have to generate an import library for its dll # - create a def-file for python??.dll -# - create a import library using +# - create an import library using # dlltool --dllname python15.dll --def python15.def \ # --output-lib libpython15.a # @@ -347,7 +347,7 @@ def __init__ (self, # class Mingw32CCompiler # Because these compilers aren't configured in Python's pyconfig.h file by -# default, we should at least warn the user if he is using a unmodified +# default, we should at least warn the user if he is using an unmodified # version. CONFIG_H_OK = "ok" diff --git a/PythonLib/extra/distutils/dir_util.py b/PythonLib/extra/distutils/dir_util.py index 5026e246..f90318e4 100644 --- a/PythonLib/extra/distutils/dir_util.py +++ b/PythonLib/extra/distutils/dir_util.py @@ -83,7 +83,7 @@ def create_tree(base_dir, files, mode=0777, verbose=1, dry_run=0): """Create all the empty directories under 'base_dir' needed to put 'files' there. - 'base_dir' is just the a name of a directory which doesn't necessarily + 'base_dir' is just the name of a directory which doesn't necessarily exist yet; 'files' is a list of filenames to be interpreted relative to 'base_dir'. 'base_dir' + the directory portion of every file in 'files' will be created if it doesn't already exist. 'mode', 'verbose' and @@ -185,7 +185,6 @@ def remove_tree(directory, verbose=1, dry_run=0): Any errors are ignored (apart from being reported to stdout if 'verbose' is true). """ - from distutils.util import grok_environment_error global _path_created if verbose >= 1: @@ -202,8 +201,7 @@ def remove_tree(directory, verbose=1, dry_run=0): if abspath in _path_created: del _path_created[abspath] except (IOError, OSError), exc: - log.warn(grok_environment_error( - exc, "error removing %s: " % directory)) + log.warn("error removing %s: %s", directory, exc) def ensure_relative(path): """Take the full path 'path', and make it a relative path. diff --git a/PythonLib/extra/distutils/file_util.py b/PythonLib/extra/distutils/file_util.py index b9f07861..3b236e13 100644 --- a/PythonLib/extra/distutils/file_util.py +++ b/PythonLib/extra/distutils/file_util.py @@ -85,7 +85,8 @@ def copy_file(src, dst, preserve_mode=1, preserve_times=1, update=0, (os.symlink) instead of copying: set it to "hard" or "sym"; if it is None (the default), files are copied. Don't set 'link' on systems that don't support it: 'copy_file()' doesn't check if hard or symbolic - linking is available. + linking is available. If hardlink fails, falls back to + _copy_file_contents(). Under Mac OS, uses the native file copy function in macostools; on other systems, uses '_copy_file_contents()' to copy file contents. @@ -137,24 +138,31 @@ def copy_file(src, dst, preserve_mode=1, preserve_times=1, update=0, # (Unix only, of course, but that's the caller's responsibility) if link == 'hard': if not (os.path.exists(dst) and os.path.samefile(src, dst)): - os.link(src, dst) + try: + os.link(src, dst) + return (dst, 1) + except OSError: + # If hard linking fails, fall back on copying file + # (some special filesystems don't support hard linking + # even under Unix, see issue #8876). + pass elif link == 'sym': if not (os.path.exists(dst) and os.path.samefile(src, dst)): os.symlink(src, dst) + return (dst, 1) # Otherwise (non-Mac, not linking), copy the file contents and # (optionally) copy the times and mode. - else: - _copy_file_contents(src, dst) - if preserve_mode or preserve_times: - st = os.stat(src) - - # According to David Ascher , utime() should be done - # before chmod() (at least under NT). - if preserve_times: - os.utime(dst, (st[ST_ATIME], st[ST_MTIME])) - if preserve_mode: - os.chmod(dst, S_IMODE(st[ST_MODE])) + _copy_file_contents(src, dst) + if preserve_mode or preserve_times: + st = os.stat(src) + + # According to David Ascher , utime() should be done + # before chmod() (at least under NT). + if preserve_times: + os.utime(dst, (st[ST_ATIME], st[ST_MTIME])) + if preserve_mode: + os.chmod(dst, S_IMODE(st[ST_MODE])) return (dst, 1) diff --git a/PythonLib/extra/distutils/msvc9compiler.py b/PythonLib/extra/distutils/msvc9compiler.py index 7ec9b92a..33d3e516 100644 --- a/PythonLib/extra/distutils/msvc9compiler.py +++ b/PythonLib/extra/distutils/msvc9compiler.py @@ -54,7 +54,7 @@ # A map keyed by get_platform() return values to values accepted by # 'vcvarsall.bat'. Note a cross-compile may combine these (eg, 'x86_amd64' is -# the param to cross-compile on x86 targetting amd64.) +# the param to cross-compile on x86 targeting amd64.) PLAT_TO_VCVARS = { 'win32' : 'x86', 'win-amd64' : 'amd64', @@ -426,7 +426,7 @@ def initialize(self, plat_name=None): self.ldflags_shared = ['/DLL', '/nologo', '/INCREMENTAL:NO'] if self.__version >= 7: self.ldflags_shared_debug = [ - '/DLL', '/nologo', '/INCREMENTAL:no', '/DEBUG', '/pdb:None' + '/DLL', '/nologo', '/INCREMENTAL:no', '/DEBUG' ] self.ldflags_static = [ '/nologo'] diff --git a/PythonLib/extra/distutils/spawn.py b/PythonLib/extra/distutils/spawn.py index 7306099f..321344a3 100644 --- a/PythonLib/extra/distutils/spawn.py +++ b/PythonLib/extra/distutils/spawn.py @@ -12,6 +12,7 @@ import os from distutils.errors import DistutilsPlatformError, DistutilsExecError +from distutils.debug import DEBUG from distutils import log def spawn(cmd, search_path=1, verbose=0, dry_run=0): @@ -30,6 +31,9 @@ def spawn(cmd, search_path=1, verbose=0, dry_run=0): Raise DistutilsExecError if running the program fails in any way; just return on success. """ + # cmd is documented as a list, but just in case some code passes a tuple + # in, protect our %-formatting code against horrible death + cmd = list(cmd) if os.name == 'posix': _spawn_posix(cmd, search_path, dry_run=dry_run) elif os.name == 'nt': @@ -69,12 +73,16 @@ def _spawn_nt(cmd, search_path=1, verbose=0, dry_run=0): rc = os.spawnv(os.P_WAIT, executable, cmd) except OSError, exc: # this seems to happen when the command isn't found + if not DEBUG: + cmd = executable raise DistutilsExecError, \ - "command '%s' failed: %s" % (cmd[0], exc[-1]) + "command %r failed: %s" % (cmd, exc[-1]) if rc != 0: # and this reflects the command running but failing + if not DEBUG: + cmd = executable raise DistutilsExecError, \ - "command '%s' failed with exit status %d" % (cmd[0], rc) + "command %r failed with exit status %d" % (cmd, rc) def _spawn_os2(cmd, search_path=1, verbose=0, dry_run=0): executable = cmd[0] @@ -88,13 +96,17 @@ def _spawn_os2(cmd, search_path=1, verbose=0, dry_run=0): rc = os.spawnv(os.P_WAIT, executable, cmd) except OSError, exc: # this seems to happen when the command isn't found + if not DEBUG: + cmd = executable raise DistutilsExecError, \ - "command '%s' failed: %s" % (cmd[0], exc[-1]) + "command %r failed: %s" % (cmd, exc[-1]) if rc != 0: # and this reflects the command running but failing - log.debug("command '%s' failed with exit status %d" % (cmd[0], rc)) + if not DEBUG: + cmd = executable + log.debug("command %r failed with exit status %d" % (cmd, rc)) raise DistutilsExecError, \ - "command '%s' failed with exit status %d" % (cmd[0], rc) + "command %r failed with exit status %d" % (cmd, rc) if sys.platform == 'darwin': from distutils import sysconfig @@ -105,8 +117,9 @@ def _spawn_posix(cmd, search_path=1, verbose=0, dry_run=0): log.info(' '.join(cmd)) if dry_run: return + executable = cmd[0] exec_fn = search_path and os.execvp or os.execv - exec_args = [cmd[0], cmd] + env = None if sys.platform == 'darwin': global _cfg_target, _cfg_target_split if _cfg_target is None: @@ -127,18 +140,24 @@ def _spawn_posix(cmd, search_path=1, verbose=0, dry_run=0): env = dict(os.environ, MACOSX_DEPLOYMENT_TARGET=cur_target) exec_fn = search_path and os.execvpe or os.execve - exec_args.append(env) pid = os.fork() if pid == 0: # in the child try: - exec_fn(*exec_args) + if env is None: + exec_fn(executable, cmd) + else: + exec_fn(executable, cmd, env) except OSError, e: - sys.stderr.write("unable to execute %s: %s\n" % - (cmd[0], e.strerror)) + if not DEBUG: + cmd = executable + sys.stderr.write("unable to execute %r: %s\n" % + (cmd, e.strerror)) os._exit(1) - sys.stderr.write("unable to execute %s for unknown reasons" % cmd[0]) + if not DEBUG: + cmd = executable + sys.stderr.write("unable to execute %r for unknown reasons" % cmd) os._exit(1) else: # in the parent # Loop until the child either exits or is terminated by a signal @@ -150,29 +169,37 @@ def _spawn_posix(cmd, search_path=1, verbose=0, dry_run=0): import errno if exc.errno == errno.EINTR: continue + if not DEBUG: + cmd = executable raise DistutilsExecError, \ - "command '%s' failed: %s" % (cmd[0], exc[-1]) + "command %r failed: %s" % (cmd, exc[-1]) if os.WIFSIGNALED(status): + if not DEBUG: + cmd = executable raise DistutilsExecError, \ - "command '%s' terminated by signal %d" % \ - (cmd[0], os.WTERMSIG(status)) + "command %r terminated by signal %d" % \ + (cmd, os.WTERMSIG(status)) elif os.WIFEXITED(status): exit_status = os.WEXITSTATUS(status) if exit_status == 0: return # hey, it succeeded! else: + if not DEBUG: + cmd = executable raise DistutilsExecError, \ - "command '%s' failed with exit status %d" % \ - (cmd[0], exit_status) + "command %r failed with exit status %d" % \ + (cmd, exit_status) elif os.WIFSTOPPED(status): continue else: + if not DEBUG: + cmd = executable raise DistutilsExecError, \ - "unknown error executing '%s': termination status %d" % \ - (cmd[0], status) + "unknown error executing %r: termination status %d" % \ + (cmd, status) def find_executable(executable, path=None): """Tries to find 'executable' in the directories listed in 'path'. diff --git a/PythonLib/extra/distutils/sysconfig.py b/PythonLib/extra/distutils/sysconfig.py index 4aa93346..de7da1d4 100644 --- a/PythonLib/extra/distutils/sysconfig.py +++ b/PythonLib/extra/distutils/sysconfig.py @@ -165,7 +165,8 @@ def customize_compiler(compiler): # version and build tools may not support the same set # of CPU architectures for universal builds. global _config_vars - if not _config_vars.get('CUSTOMIZED_OSX_COMPILER', ''): + # Use get_config_var() to ensure _config_vars is initialized. + if not get_config_var('CUSTOMIZED_OSX_COMPILER'): import _osx_support _osx_support.customize_compiler(_config_vars) _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' diff --git a/PythonLib/extra/distutils/text_file.py b/PythonLib/extra/distutils/text_file.py index 09a798b1..690cb80f 100644 --- a/PythonLib/extra/distutils/text_file.py +++ b/PythonLib/extra/distutils/text_file.py @@ -124,11 +124,11 @@ def open (self, filename): def close (self): """Close the current file and forget everything we know about it (filename, current line number).""" - - self.file.close () + file = self.file self.file = None self.filename = None self.current_line = None + file.close() def gen_error (self, msg, line=None): diff --git a/PythonLib/extra/distutils/unixccompiler.py b/PythonLib/extra/distutils/unixccompiler.py index 2aa1cb1d..3af540e5 100644 --- a/PythonLib/extra/distutils/unixccompiler.py +++ b/PythonLib/extra/distutils/unixccompiler.py @@ -79,7 +79,9 @@ class UnixCCompiler(CCompiler): static_lib_extension = ".a" shared_lib_extension = ".so" dylib_lib_extension = ".dylib" + xcode_stub_lib_extension = ".tbd" static_lib_format = shared_lib_format = dylib_lib_format = "lib%s%s" + xcode_stub_lib_format = dylib_lib_format if sys.platform == "cygwin": exe_extension = ".exe" @@ -228,6 +230,8 @@ def runtime_library_dir_option(self, dir): if sys.platform[:6] == "darwin": # MacOSX's linker doesn't understand the -R flag at all return "-L" + dir + elif sys.platform[:7] == "freebsd": + return "-Wl,-rpath=" + dir elif sys.platform[:5] == "hp-ux": if self._is_gcc(compiler): return ["-Wl,+s", "-L" + dir] @@ -245,12 +249,28 @@ def library_option(self, lib): def find_library_file(self, dirs, lib, debug=0): shared_f = self.library_filename(lib, lib_type='shared') dylib_f = self.library_filename(lib, lib_type='dylib') + xcode_stub_f = self.library_filename(lib, lib_type='xcode_stub') static_f = self.library_filename(lib, lib_type='static') if sys.platform == 'darwin': # On OSX users can specify an alternate SDK using # '-isysroot', calculate the SDK root if it is specified # (and use it further on) + # + # Note that, as of Xcode 7, Apple SDKs may contain textual stub + # libraries with .tbd extensions rather than the normal .dylib + # shared libraries installed in /. The Apple compiler tool + # chain handles this transparently but it can cause problems + # for programs that are being built with an SDK and searching + # for specific libraries. Callers of find_library_file need to + # keep in mind that the base filename of the returned SDK library + # file might have a different extension from that of the library + # file installed on the running system, for example: + # /Applications/Xcode.app/Contents/Developer/Platforms/ + # MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/ + # usr/lib/libedit.tbd + # vs + # /usr/lib/libedit.dylib cflags = sysconfig.get_config_var('CFLAGS') m = re.search(r'-isysroot\s+(\S+)', cflags) if m is None: @@ -264,6 +284,7 @@ def find_library_file(self, dirs, lib, debug=0): shared = os.path.join(dir, shared_f) dylib = os.path.join(dir, dylib_f) static = os.path.join(dir, static_f) + xcode_stub = os.path.join(dir, xcode_stub_f) if sys.platform == 'darwin' and ( dir.startswith('/System/') or ( @@ -272,6 +293,7 @@ def find_library_file(self, dirs, lib, debug=0): shared = os.path.join(sysroot, dir[1:], shared_f) dylib = os.path.join(sysroot, dir[1:], dylib_f) static = os.path.join(sysroot, dir[1:], static_f) + xcode_stub = os.path.join(sysroot, dir[1:], xcode_stub_f) # We're second-guessing the linker here, with not much hard # data to go on: GCC seems to prefer the shared library, so I'm @@ -279,6 +301,8 @@ def find_library_file(self, dirs, lib, debug=0): # ignoring even GCC's "-static" option. So sue me. if os.path.exists(dylib): return dylib + elif os.path.exists(xcode_stub): + return xcode_stub elif os.path.exists(shared): return shared elif os.path.exists(static): diff --git a/PythonLib/extra/distutils/util.py b/PythonLib/extra/distutils/util.py index ea6ed8a9..2b4d7849 100644 --- a/PythonLib/extra/distutils/util.py +++ b/PythonLib/extra/distutils/util.py @@ -213,25 +213,10 @@ def _subst (match, local_vars=local_vars): def grok_environment_error (exc, prefix="error: "): - """Generate a useful error message from an EnvironmentError (IOError or - OSError) exception object. Handles Python 1.5.1 and 1.5.2 styles, and - does what it can to deal with exception objects that don't have a - filename (which happens when the error is due to a two-file operation, - such as 'rename()' or 'link()'. Returns the error message as a string - prefixed with 'prefix'. - """ - # check for Python 1.5.2-style {IO,OS}Error exception objects - if hasattr(exc, 'filename') and hasattr(exc, 'strerror'): - if exc.filename: - error = prefix + "%s: %s" % (exc.filename, exc.strerror) - else: - # two-argument functions in posix module don't - # include the filename in the exception object! - error = prefix + "%s" % exc.strerror - else: - error = prefix + str(exc[-1]) - - return error + # Function kept for backward compatibility. + # Used to try clever things with EnvironmentErrors, + # but nowadays str(exception) produces good messages. + return prefix + str(exc) # Needed by 'split_quoted()' diff --git a/PythonLib/extra/lib2to3/Grammar.txt b/PythonLib/extra/lib2to3/Grammar.txt index 1e1f24cf..9be7c9f0 100644 --- a/PythonLib/extra/lib2to3/Grammar.txt +++ b/PythonLib/extra/lib2to3/Grammar.txt @@ -56,7 +56,7 @@ small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | ('=' (yield_expr|testlist_star_expr))*) testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] -augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' | '//=') # For normal assignments, additional restrictions enforced by the interpreter print_stmt: 'print' ( [ test (',' test)* [','] ] | @@ -119,7 +119,7 @@ xor_expr: and_expr ('^' and_expr)* and_expr: shift_expr ('&' shift_expr)* shift_expr: arith_expr (('<<'|'>>') arith_expr)* arith_expr: term (('+'|'-') term)* -term: factor (('*'|'/'|'%'|'//') factor)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* factor: ('+'|'-'|'~') factor | power power: atom trailer* ['**' factor] atom: ('(' [yield_expr|testlist_gexp] ')' | @@ -136,15 +136,26 @@ subscript: test | [test] ':' [test] [sliceop] sliceop: ':' [test] exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] testlist: test (',' test)* [','] -dictsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) | - (test (comp_for | (',' test)* [','])) ) +dictsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) classdef: 'class' NAME ['(' [arglist] ')'] ':' suite -arglist: (argument ',')* (argument [','] - |'*' test (',' argument)* [',' '**' test] - |'**' test) -argument: test [comp_for] | test '=' test # Really [keyword '='] test +arglist: argument (',' argument)* [','] + +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test '=' test | + '**' expr | + star_expr ) comp_iter: comp_for | comp_if comp_for: 'for' exprlist 'in' testlist_safe [comp_iter] @@ -155,4 +166,5 @@ testlist1: test (',' test)* # not used in grammar, but may appear in "node" passed from Parser to Compiler encoding_decl: NAME -yield_expr: 'yield' [testlist] +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist diff --git a/PythonLib/extra/lib2to3/btm_utils.py b/PythonLib/extra/lib2to3/btm_utils.py index 2276dc9e..501f8349 100644 --- a/PythonLib/extra/lib2to3/btm_utils.py +++ b/PythonLib/extra/lib2to3/btm_utils.py @@ -216,7 +216,7 @@ def reduce_tree(node, parent=None): #reduce to None new_node = None elif repeater_node.children[0].value == '+': - #reduce to a single occurence i.e. do nothing + #reduce to a single occurrence i.e. do nothing pass else: #TODO: handle {min, max} repeaters diff --git a/PythonLib/extra/lib2to3/fixer_base.py b/PythonLib/extra/lib2to3/fixer_base.py index f6421ba3..2f50ad36 100644 --- a/PythonLib/extra/lib2to3/fixer_base.py +++ b/PythonLib/extra/lib2to3/fixer_base.py @@ -4,7 +4,6 @@ """Base class for fixers (optional, but recommended).""" # Python imports -import logging import itertools # Local imports @@ -50,7 +49,7 @@ def __init__(self, options, log): """Initializer. Subclass may override. Args: - options: an dict containing the options passed to RefactoringTool + options: a dict containing the options passed to RefactoringTool that could be used to customize the fixer through the command line. log: a list to append warnings and other messages to. """ @@ -75,7 +74,6 @@ def set_filename(self, filename): The main refactoring tool should call this. """ self.filename = filename - self.logger = logging.getLogger(filename) def match(self, node): """Returns match for a given parse tree node. diff --git a/PythonLib/extra/lib2to3/fixes/fix_apply.py b/PythonLib/extra/lib2to3/fixes/fix_apply.py index a7dc3a04..1a465c2b 100644 --- a/PythonLib/extra/lib2to3/fixes/fix_apply.py +++ b/PythonLib/extra/lib2to3/fixes/fix_apply.py @@ -34,6 +34,17 @@ def transform(self, node, results): func = results["func"] args = results["args"] kwds = results.get("kwds") + # I feel like we should be able to express this logic in the + # PATTERN above but I don't know how to do it so... + if args: + if args.type == self.syms.star_expr: + return # Make no change. + if (args.type == self.syms.argument and + args.children[0].value == '**'): + return # Make no change. + if kwds and (kwds.type == self.syms.argument and + kwds.children[0].value == '**'): + return # Make no change. prefix = node.prefix func = func.clone() if (func.type not in (token.NAME, syms.atom) and diff --git a/PythonLib/extra/lib2to3/fixes/fix_asserts.py b/PythonLib/extra/lib2to3/fixes/fix_asserts.py new file mode 100644 index 00000000..5bcec885 --- /dev/null +++ b/PythonLib/extra/lib2to3/fixes/fix_asserts.py @@ -0,0 +1,34 @@ +"""Fixer that replaces deprecated unittest method names.""" + +# Author: Ezio Melotti + +from ..fixer_base import BaseFix +from ..fixer_util import Name + +NAMES = dict( + assert_="assertTrue", + assertEquals="assertEqual", + assertNotEquals="assertNotEqual", + assertAlmostEquals="assertAlmostEqual", + assertNotAlmostEquals="assertNotAlmostEqual", + assertRegexpMatches="assertRegex", + assertRaisesRegexp="assertRaisesRegex", + failUnlessEqual="assertEqual", + failIfEqual="assertNotEqual", + failUnlessAlmostEqual="assertAlmostEqual", + failIfAlmostEqual="assertNotAlmostEqual", + failUnless="assertTrue", + failUnlessRaises="assertRaises", + failIf="assertFalse", +) + + +class FixAsserts(BaseFix): + + PATTERN = """ + power< any+ trailer< '.' meth=(%s)> any* > + """ % '|'.join(map(repr, NAMES)) + + def transform(self, node, results): + name = results["meth"][0] + name.replace(Name(NAMES[str(name)], prefix=name.prefix)) diff --git a/PythonLib/extra/lib2to3/fixes/fix_callable.py b/PythonLib/extra/lib2to3/fixes/fix_callable.py deleted file mode 100644 index df33d614..00000000 --- a/PythonLib/extra/lib2to3/fixes/fix_callable.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright 2007 Google, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Fixer for callable(). - -This converts callable(obj) into isinstance(obj, collections.Callable), adding a -collections import if needed.""" - -# Local imports -from lib2to3 import fixer_base -from lib2to3.fixer_util import Call, Name, String, Attr, touch_import - -class FixCallable(fixer_base.BaseFix): - BM_compatible = True - - order = "pre" - - # Ignore callable(*args) or use of keywords. - # Either could be a hint that the builtin callable() is not being used. - PATTERN = """ - power< 'callable' - trailer< lpar='(' - ( not(arglist | argument) any ','> ) - rpar=')' > - after=any* - > - """ - - def transform(self, node, results): - func = results['func'] - - touch_import(None, u'collections', node=node) - - args = [func.clone(), String(u', ')] - args.extend(Attr(Name(u'collections'), Name(u'Callable'))) - return Call(Name(u'isinstance'), args, prefix=node.prefix) diff --git a/PythonLib/extra/lib2to3/fixes/fix_exitfunc.py b/PythonLib/extra/lib2to3/fixes/fix_exitfunc.py index 89fb3db5..3f3fbbf1 100644 --- a/PythonLib/extra/lib2to3/fixes/fix_exitfunc.py +++ b/PythonLib/extra/lib2to3/fixes/fix_exitfunc.py @@ -35,7 +35,7 @@ def start_tree(self, tree, filename): self.sys_import = None def transform(self, node, results): - # First, find a the sys import. We'll just hope it's global scope. + # First, find the sys import. We'll just hope it's global scope. if "sys_import" in results: if self.sys_import is None: self.sys_import = results["sys_import"] diff --git a/PythonLib/extra/lib2to3/fixes/fix_import.py b/PythonLib/extra/lib2to3/fixes/fix_import.py index 201e811e..88e9d103 100644 --- a/PythonLib/extra/lib2to3/fixes/fix_import.py +++ b/PythonLib/extra/lib2to3/fixes/fix_import.py @@ -32,7 +32,7 @@ def traverse_imports(names): elif node.type == syms.dotted_as_names: pending.extend(node.children[::-2]) else: - raise AssertionError("unkown node type") + raise AssertionError("unknown node type") class FixImport(fixer_base.BaseFix): diff --git a/PythonLib/extra/lib2to3/fixes/fix_input.py b/PythonLib/extra/lib2to3/fixes/fix_input.py index fbf4c72f..728636b6 100644 --- a/PythonLib/extra/lib2to3/fixes/fix_input.py +++ b/PythonLib/extra/lib2to3/fixes/fix_input.py @@ -17,7 +17,7 @@ class FixInput(fixer_base.BaseFix): """ def transform(self, node, results): - # If we're already wrapped in a eval() call, we're done. + # If we're already wrapped in an eval() call, we're done. if context.match(node.parent.parent): return diff --git a/PythonLib/extra/lib2to3/fixes/fix_intern.py b/PythonLib/extra/lib2to3/fixes/fix_intern.py index e7bb5052..285c1269 100644 --- a/PythonLib/extra/lib2to3/fixes/fix_intern.py +++ b/PythonLib/extra/lib2to3/fixes/fix_intern.py @@ -26,6 +26,16 @@ class FixIntern(fixer_base.BaseFix): """ def transform(self, node, results): + if results: + # I feel like we should be able to express this logic in the + # PATTERN above but I don't know how to do it so... + obj = results['obj'] + if obj: + if obj.type == self.syms.star_expr: + return # Make no change. + if (obj.type == self.syms.argument and + obj.children[0].value == '**'): + return # Make no change. syms = self.syms obj = results["obj"].clone() if obj.type == syms.arglist: diff --git a/PythonLib/extra/lib2to3/fixes/fix_metaclass.py b/PythonLib/extra/lib2to3/fixes/fix_metaclass.py index 4f5593c5..45f99374 100644 --- a/PythonLib/extra/lib2to3/fixes/fix_metaclass.py +++ b/PythonLib/extra/lib2to3/fixes/fix_metaclass.py @@ -25,7 +25,7 @@ def has_metaclass(parent): """ we have to check the cls_node without changing it. - There are two possiblities: + There are two possibilities: 1) clsdef => suite => simple_stmt => expr_stmt => Leaf('__meta') 2) clsdef => simple_stmt => expr_stmt => Leaf('__meta') """ @@ -114,7 +114,7 @@ def find_metas(cls_node): left_node = expr_node.children[0] if isinstance(left_node, Leaf) and \ left_node.value == u'__metaclass__': - # We found a assignment to __metaclass__. + # We found an assignment to __metaclass__. fixup_simple_stmt(node, i, simple_node) remove_trailing_newline(simple_node) yield (node, i, simple_node) diff --git a/PythonLib/extra/lib2to3/fixes/fix_types.py b/PythonLib/extra/lib2to3/fixes/fix_types.py index fc9d4959..baaeabd9 100644 --- a/PythonLib/extra/lib2to3/fixes/fix_types.py +++ b/PythonLib/extra/lib2to3/fixes/fix_types.py @@ -42,7 +42,7 @@ 'NotImplementedType' : 'type(NotImplemented)', 'SliceType' : 'slice', 'StringType': 'bytes', # XXX ? - 'StringTypes' : 'str', # XXX ? + 'StringTypes' : '(str,)', # XXX ? 'TupleType': 'tuple', 'TypeType' : 'type', 'UnicodeType': 'str', diff --git a/PythonLib/extra/lib2to3/patcomp.py b/PythonLib/extra/lib2to3/patcomp.py index 093e5f9f..d31a9dad 100644 --- a/PythonLib/extra/lib2to3/patcomp.py +++ b/PythonLib/extra/lib2to3/patcomp.py @@ -3,7 +3,7 @@ """Pattern compiler. -The grammer is taken from PatternGrammar.txt. +The grammar is taken from PatternGrammar.txt. The compiler compiles a pattern to a pytree.*Pattern instance. """ diff --git a/PythonLib/extra/lib2to3/pgen2/driver.py b/PythonLib/extra/lib2to3/pgen2/driver.py index 39dafb92..ce601bb0 100644 --- a/PythonLib/extra/lib2to3/pgen2/driver.py +++ b/PythonLib/extra/lib2to3/pgen2/driver.py @@ -106,16 +106,19 @@ def parse_string(self, text, debug=False): return self.parse_tokens(tokens, debug) +def _generate_pickle_name(gt): + head, tail = os.path.splitext(gt) + if tail == ".txt": + tail = "" + return head + tail + ".".join(map(str, sys.version_info)) + ".pickle" + + def load_grammar(gt="Grammar.txt", gp=None, save=True, force=False, logger=None): """Load the grammar (maybe from a pickle).""" if logger is None: logger = logging.getLogger() - if gp is None: - head, tail = os.path.splitext(gt) - if tail == ".txt": - tail = "" - gp = head + tail + ".".join(map(str, sys.version_info)) + ".pickle" + gp = _generate_pickle_name(gt) if gp is None else gp if force or not _newer(gp, gt): logger.info("Generating grammar tables from %s", gt) g = pgen.generate_grammar(gt) @@ -123,8 +126,8 @@ def load_grammar(gt="Grammar.txt", gp=None, logger.info("Writing grammar tables to %s", gp) try: g.dump(gp) - except IOError, e: - logger.info("Writing failed:"+str(e)) + except IOError as e: + logger.info("Writing failed: %s", e) else: g = grammar.Grammar() g.load(gp) diff --git a/PythonLib/extra/lib2to3/pgen2/grammar.py b/PythonLib/extra/lib2to3/pgen2/grammar.py index 1aa5c432..75255e9c 100644 --- a/PythonLib/extra/lib2to3/pgen2/grammar.py +++ b/PythonLib/extra/lib2to3/pgen2/grammar.py @@ -13,6 +13,7 @@ """ # Python imports +import collections import pickle # Local imports @@ -85,10 +86,21 @@ def __init__(self): self.start = 256 def dump(self, filename): - """Dump the grammar tables to a pickle file.""" - f = open(filename, "wb") - pickle.dump(self.__dict__, f, 2) - f.close() + """Dump the grammar tables to a pickle file. + + dump() recursively changes all dict to OrderedDict, so the pickled file + is not exactly the same as what was passed in to dump(). load() uses the + pickled file to create the tables, but only changes OrderedDict to dict + at the top level; it does not recursively change OrderedDict to dict. + So, the loaded tables are different from the original tables that were + passed to load() in that some of the OrderedDict (from the pickled file) + are not changed back to dict. For parsing, this has no effect on + performance because OrderedDict uses dict's __getitem__ with nothing in + between. + """ + with open(filename, "wb") as f: + d = _make_deterministic(self.__dict__) + pickle.dump(d, f, 2) def load(self, filename): """Load the grammar tables from a pickle file.""" @@ -126,6 +138,17 @@ def report(self): print "start", self.start +def _make_deterministic(top): + if isinstance(top, dict): + return collections.OrderedDict( + sorted(((k, _make_deterministic(v)) for k, v in top.iteritems()))) + if isinstance(top, list): + return [_make_deterministic(e) for e in top] + if isinstance(top, tuple): + return tuple(_make_deterministic(e) for e in top) + return top + + # Map from operator to number (since tokenize doesn't do this) opmap_raw = """ @@ -151,6 +174,7 @@ def report(self): { LBRACE } RBRACE @ AT +@= ATEQUAL == EQEQUAL != NOTEQUAL <> NOTEQUAL diff --git a/PythonLib/extra/lib2to3/pgen2/pgen.py b/PythonLib/extra/lib2to3/pgen2/pgen.py index 63084a4c..be4fcad6 100644 --- a/PythonLib/extra/lib2to3/pgen2/pgen.py +++ b/PythonLib/extra/lib2to3/pgen2/pgen.py @@ -39,7 +39,7 @@ def make_grammar(self): states = [] for state in dfa: arcs = [] - for label, next in state.arcs.iteritems(): + for label, next in sorted(state.arcs.iteritems()): arcs.append((self.make_label(c, label), dfa.index(next))) if state.isfinal: arcs.append((0, dfa.index(state))) @@ -52,7 +52,7 @@ def make_grammar(self): def make_first(self, c, name): rawfirst = self.first[name] first = {} - for label in rawfirst: + for label in sorted(rawfirst): ilabel = self.make_label(c, label) ##assert ilabel not in first # XXX failed on <> ... != first[ilabel] = 1 @@ -74,7 +74,7 @@ def make_label(self, c, label): else: # A named token (NAME, NUMBER, STRING) itoken = getattr(token, label, None) - assert isinstance(itoken, int), label + assert isinstance(itoken, (int, long)), label assert itoken in token.tok_name, label if itoken in c.tokens: return c.tokens[itoken] @@ -192,7 +192,7 @@ def addclosure(state, base): for label, next in nfastate.arcs: if label is not None: addclosure(next, arcs.setdefault(label, {})) - for label, nfaset in arcs.iteritems(): + for label, nfaset in sorted(arcs.iteritems()): for st in states: if st.nfaset == nfaset: break @@ -222,7 +222,7 @@ def dump_dfa(self, name, dfa): print "Dump of DFA for", name for i, state in enumerate(dfa): print " State", i, state.isfinal and "(final)" or "" - for label, next in state.arcs.iteritems(): + for label, next in sorted(state.arcs.iteritems()): print " %s -> %d" % (label, dfa.index(next)) def simplify_dfa(self, dfa): diff --git a/PythonLib/extra/lib2to3/pgen2/token.py b/PythonLib/extra/lib2to3/pgen2/token.py index 61468b31..5fac5ce3 100644 --- a/PythonLib/extra/lib2to3/pgen2/token.py +++ b/PythonLib/extra/lib2to3/pgen2/token.py @@ -57,12 +57,13 @@ DOUBLESLASH = 48 DOUBLESLASHEQUAL = 49 AT = 50 -OP = 51 -COMMENT = 52 -NL = 53 -RARROW = 54 -ERRORTOKEN = 55 -N_TOKENS = 56 +ATEQUAL = 51 +OP = 52 +COMMENT = 53 +NL = 54 +RARROW = 55 +ERRORTOKEN = 56 +N_TOKENS = 57 NT_OFFSET = 256 #--end constants-- diff --git a/PythonLib/extra/lib2to3/pgen2/tokenize.py b/PythonLib/extra/lib2to3/pgen2/tokenize.py index f6e0284c..8cae8737 100644 --- a/PythonLib/extra/lib2to3/pgen2/tokenize.py +++ b/PythonLib/extra/lib2to3/pgen2/tokenize.py @@ -84,7 +84,7 @@ def maybe(*choices): return group(*choices) + '?' # recognized as two instances of =). Operator = group(r"\*\*=?", r">>=?", r"<<=?", r"<>", r"!=", r"//=?", r"->", - r"[+\-*/%&|^=<>]=?", + r"[+\-*/%&@|^=<>]=?", r"~") Bracket = '[][(){}]' @@ -236,7 +236,8 @@ def compat(self, token, iterable): startline = False toks_append(tokval) -cookie_re = re.compile(r'^[ \t\f]*#.*coding[:=][ \t]*([-\w.]+)') +cookie_re = re.compile(r'^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)') +blank_re = re.compile(r'^[ \t\f]*(?:[#\r\n]|$)') def _get_normal_name(orig_enc): """Imitates get_normal_name in tokenizer.c.""" @@ -252,7 +253,7 @@ def _get_normal_name(orig_enc): def detect_encoding(readline): """ The detect_encoding() function is used to detect the encoding that should - be used to decode a Python source file. It requires one argment, readline, + be used to decode a Python source file. It requires one argument, readline, in the same way as the tokenize() generator. It will call readline a maximum of twice, and return the encoding used @@ -309,6 +310,8 @@ def find_cookie(line): encoding = find_cookie(first) if encoding: return encoding, [first] + if not blank_re.match(first): + return default, [first] second = read_or_stop() if not second: @@ -343,7 +346,7 @@ def untokenize(iterable): def generate_tokens(readline): """ - The generate_tokens() generator requires one argment, readline, which + The generate_tokens() generator requires one argument, readline, which must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as a string. Alternately, readline diff --git a/PythonLib/extra/lib2to3/refactor.py b/PythonLib/extra/lib2to3/refactor.py index a4c168df..98386c5f 100644 --- a/PythonLib/extra/lib2to3/refactor.py +++ b/PythonLib/extra/lib2to3/refactor.py @@ -184,7 +184,7 @@ def __init__(self, fixer_names, options=None, explicit=None): Args: fixer_names: a list of fixers to import - options: an dict with configuration. + options: a dict with configuration. explicit: a list of fixers to run even if they are explicit. """ self.fixers = fixer_names @@ -255,7 +255,7 @@ def get_fixers(self): fixer = fix_class(self.options, self.fixer_log) if fixer.explicit and self.explicit is not True and \ fix_mod_path not in self.explicit: - self.log_message("Skipping implicit fixer: %s", fix_name) + self.log_message("Skipping optional fixer: %s", fix_name) continue self.log_debug("Adding transformation: %s", fix_name) diff --git a/PythonLib/extra/lib2to3/tests/__init__.py b/PythonLib/extra/lib2to3/tests/__init__.py deleted file mode 100644 index cfaea0de..00000000 --- a/PythonLib/extra/lib2to3/tests/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -"""Make tests/ into a package. This allows us to "import tests" and -have tests.all_tests be a TestSuite representing all test cases -from all test_*.py files in tests/.""" -# Author: Collin Winter - -import os -import os.path -import unittest -import types - -from . import support - -all_tests = unittest.TestSuite() - -tests_dir = os.path.join(os.path.dirname(__file__), '..', 'tests') -tests = [t[0:-3] for t in os.listdir(tests_dir) - if t.startswith('test_') and t.endswith('.py')] - -loader = unittest.TestLoader() - -for t in tests: - __import__("",globals(),locals(),[t],level=1) - mod = globals()[t] - all_tests.addTests(loader.loadTestsFromModule(mod)) diff --git a/PythonLib/extra/lib2to3/tests/data/README b/PythonLib/extra/lib2to3/tests/data/README deleted file mode 100644 index 7aa47e40..00000000 --- a/PythonLib/extra/lib2to3/tests/data/README +++ /dev/null @@ -1,6 +0,0 @@ -In this directory: -- py2_test_grammar.py -- test file that exercises most/all of Python 2.x's grammar. -- py3_test_grammar.py -- test file that exercises most/all of Python 3.x's grammar. -- infinite_recursion.py -- test file that causes lib2to3's faster recursive pattern matching - scheme to fail, but passes when lib2to3 falls back to iterative pattern matching. -- fixes/ -- for use by test_refactor.py diff --git a/PythonLib/extra/lib2to3/tests/data/bom.py b/PythonLib/extra/lib2to3/tests/data/bom.py deleted file mode 100644 index 9bc3975a..00000000 --- a/PythonLib/extra/lib2to3/tests/data/bom.py +++ /dev/null @@ -1,2 +0,0 @@ -# coding: utf-8 -print "BOM BOOM!" diff --git a/PythonLib/extra/lib2to3/tests/data/crlf.py b/PythonLib/extra/lib2to3/tests/data/crlf.py deleted file mode 100644 index dbe2d7bb..00000000 --- a/PythonLib/extra/lib2to3/tests/data/crlf.py +++ /dev/null @@ -1,3 +0,0 @@ -print "hi" - -print "Like bad Windows newlines?" diff --git a/PythonLib/extra/lib2to3/tests/data/different_encoding.py b/PythonLib/extra/lib2to3/tests/data/different_encoding.py deleted file mode 100644 index 9f32bd04..00000000 --- a/PythonLib/extra/lib2to3/tests/data/different_encoding.py +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -print u'ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖØÙÚÛÜÃÞ' - -def f(x): - print '%s\t-> α(%2i):%s β(%s)' diff --git a/PythonLib/extra/lib2to3/tests/data/false_encoding.py b/PythonLib/extra/lib2to3/tests/data/false_encoding.py deleted file mode 100644 index f4e59e78..00000000 --- a/PythonLib/extra/lib2to3/tests/data/false_encoding.py +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env python -print '#coding=0' diff --git a/PythonLib/extra/lib2to3/tests/data/fixers/bad_order.py b/PythonLib/extra/lib2to3/tests/data/fixers/bad_order.py deleted file mode 100644 index 061bbf20..00000000 --- a/PythonLib/extra/lib2to3/tests/data/fixers/bad_order.py +++ /dev/null @@ -1,5 +0,0 @@ -from lib2to3.fixer_base import BaseFix - -class FixBadOrder(BaseFix): - - order = "crazy" diff --git a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/__init__.py b/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_explicit.py b/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_explicit.py deleted file mode 100644 index cbe16f6f..00000000 --- a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_explicit.py +++ /dev/null @@ -1,6 +0,0 @@ -from lib2to3.fixer_base import BaseFix - -class FixExplicit(BaseFix): - explicit = True - - def match(self): return False diff --git a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_first.py b/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_first.py deleted file mode 100644 index a88821f0..00000000 --- a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_first.py +++ /dev/null @@ -1,6 +0,0 @@ -from lib2to3.fixer_base import BaseFix - -class FixFirst(BaseFix): - run_order = 1 - - def match(self, node): return False diff --git a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_last.py b/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_last.py deleted file mode 100644 index 9a077d41..00000000 --- a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_last.py +++ /dev/null @@ -1,7 +0,0 @@ -from lib2to3.fixer_base import BaseFix - -class FixLast(BaseFix): - - run_order = 10 - - def match(self, node): return False diff --git a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_parrot.py b/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_parrot.py deleted file mode 100644 index 6db79adf..00000000 --- a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_parrot.py +++ /dev/null @@ -1,13 +0,0 @@ -from lib2to3.fixer_base import BaseFix -from lib2to3.fixer_util import Name - -class FixParrot(BaseFix): - """ - Change functions named 'parrot' to 'cheese'. - """ - - PATTERN = """funcdef < 'def' name='parrot' any* >""" - - def transform(self, node, results): - name = results["name"] - name.replace(Name("cheese", name.prefix)) diff --git a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_preorder.py b/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_preorder.py deleted file mode 100644 index b9bfbba9..00000000 --- a/PythonLib/extra/lib2to3/tests/data/fixers/myfixes/fix_preorder.py +++ /dev/null @@ -1,6 +0,0 @@ -from lib2to3.fixer_base import BaseFix - -class FixPreorder(BaseFix): - order = "pre" - - def match(self, node): return False diff --git a/PythonLib/extra/lib2to3/tests/data/fixers/no_fixer_cls.py b/PythonLib/extra/lib2to3/tests/data/fixers/no_fixer_cls.py deleted file mode 100644 index 506f7949..00000000 --- a/PythonLib/extra/lib2to3/tests/data/fixers/no_fixer_cls.py +++ /dev/null @@ -1 +0,0 @@ -# This is empty so trying to fetch the fixer class gives an AttributeError diff --git a/PythonLib/extra/lib2to3/tests/data/fixers/parrot_example.py b/PythonLib/extra/lib2to3/tests/data/fixers/parrot_example.py deleted file mode 100644 index 08529280..00000000 --- a/PythonLib/extra/lib2to3/tests/data/fixers/parrot_example.py +++ /dev/null @@ -1,2 +0,0 @@ -def parrot(): - pass diff --git a/PythonLib/extra/lib2to3/tests/data/infinite_recursion.py b/PythonLib/extra/lib2to3/tests/data/infinite_recursion.py deleted file mode 100644 index 71715ef2..00000000 --- a/PythonLib/extra/lib2to3/tests/data/infinite_recursion.py +++ /dev/null @@ -1,2669 +0,0 @@ -# This file is used to verify that 2to3 falls back to a slower, iterative pattern matching -# scheme in the event that the faster recursive system fails due to infinite recursion. -from ctypes import * -STRING = c_char_p - - -OSUnknownByteOrder = 0 -UIT_PROMPT = 1 -P_PGID = 2 -P_PID = 1 -UIT_ERROR = 5 -UIT_INFO = 4 -UIT_NONE = 0 -P_ALL = 0 -UIT_VERIFY = 2 -OSBigEndian = 2 -UIT_BOOLEAN = 3 -OSLittleEndian = 1 -__darwin_nl_item = c_int -__darwin_wctrans_t = c_int -__darwin_wctype_t = c_ulong -__int8_t = c_byte -__uint8_t = c_ubyte -__int16_t = c_short -__uint16_t = c_ushort -__int32_t = c_int -__uint32_t = c_uint -__int64_t = c_longlong -__uint64_t = c_ulonglong -__darwin_intptr_t = c_long -__darwin_natural_t = c_uint -__darwin_ct_rune_t = c_int -class __mbstate_t(Union): - pass -__mbstate_t._pack_ = 4 -__mbstate_t._fields_ = [ - ('__mbstate8', c_char * 128), - ('_mbstateL', c_longlong), -] -assert sizeof(__mbstate_t) == 128, sizeof(__mbstate_t) -assert alignment(__mbstate_t) == 4, alignment(__mbstate_t) -__darwin_mbstate_t = __mbstate_t -__darwin_ptrdiff_t = c_int -__darwin_size_t = c_ulong -__darwin_va_list = STRING -__darwin_wchar_t = c_int -__darwin_rune_t = __darwin_wchar_t -__darwin_wint_t = c_int -__darwin_clock_t = c_ulong -__darwin_socklen_t = __uint32_t -__darwin_ssize_t = c_long -__darwin_time_t = c_long -sig_atomic_t = c_int -class sigcontext(Structure): - pass -sigcontext._fields_ = [ - ('sc_onstack', c_int), - ('sc_mask', c_int), - ('sc_eax', c_uint), - ('sc_ebx', c_uint), - ('sc_ecx', c_uint), - ('sc_edx', c_uint), - ('sc_edi', c_uint), - ('sc_esi', c_uint), - ('sc_ebp', c_uint), - ('sc_esp', c_uint), - ('sc_ss', c_uint), - ('sc_eflags', c_uint), - ('sc_eip', c_uint), - ('sc_cs', c_uint), - ('sc_ds', c_uint), - ('sc_es', c_uint), - ('sc_fs', c_uint), - ('sc_gs', c_uint), -] -assert sizeof(sigcontext) == 72, sizeof(sigcontext) -assert alignment(sigcontext) == 4, alignment(sigcontext) -u_int8_t = c_ubyte -u_int16_t = c_ushort -u_int32_t = c_uint -u_int64_t = c_ulonglong -int32_t = c_int -register_t = int32_t -user_addr_t = u_int64_t -user_size_t = u_int64_t -int64_t = c_longlong -user_ssize_t = int64_t -user_long_t = int64_t -user_ulong_t = u_int64_t -user_time_t = int64_t -syscall_arg_t = u_int64_t - -# values for unnamed enumeration -class aes_key_st(Structure): - pass -aes_key_st._fields_ = [ - ('rd_key', c_ulong * 60), - ('rounds', c_int), -] -assert sizeof(aes_key_st) == 244, sizeof(aes_key_st) -assert alignment(aes_key_st) == 4, alignment(aes_key_st) -AES_KEY = aes_key_st -class asn1_ctx_st(Structure): - pass -asn1_ctx_st._fields_ = [ - ('p', POINTER(c_ubyte)), - ('eos', c_int), - ('error', c_int), - ('inf', c_int), - ('tag', c_int), - ('xclass', c_int), - ('slen', c_long), - ('max', POINTER(c_ubyte)), - ('q', POINTER(c_ubyte)), - ('pp', POINTER(POINTER(c_ubyte))), - ('line', c_int), -] -assert sizeof(asn1_ctx_st) == 44, sizeof(asn1_ctx_st) -assert alignment(asn1_ctx_st) == 4, alignment(asn1_ctx_st) -ASN1_CTX = asn1_ctx_st -class asn1_object_st(Structure): - pass -asn1_object_st._fields_ = [ - ('sn', STRING), - ('ln', STRING), - ('nid', c_int), - ('length', c_int), - ('data', POINTER(c_ubyte)), - ('flags', c_int), -] -assert sizeof(asn1_object_st) == 24, sizeof(asn1_object_st) -assert alignment(asn1_object_st) == 4, alignment(asn1_object_st) -ASN1_OBJECT = asn1_object_st -class asn1_string_st(Structure): - pass -asn1_string_st._fields_ = [ - ('length', c_int), - ('type', c_int), - ('data', POINTER(c_ubyte)), - ('flags', c_long), -] -assert sizeof(asn1_string_st) == 16, sizeof(asn1_string_st) -assert alignment(asn1_string_st) == 4, alignment(asn1_string_st) -ASN1_STRING = asn1_string_st -class ASN1_ENCODING_st(Structure): - pass -ASN1_ENCODING_st._fields_ = [ - ('enc', POINTER(c_ubyte)), - ('len', c_long), - ('modified', c_int), -] -assert sizeof(ASN1_ENCODING_st) == 12, sizeof(ASN1_ENCODING_st) -assert alignment(ASN1_ENCODING_st) == 4, alignment(ASN1_ENCODING_st) -ASN1_ENCODING = ASN1_ENCODING_st -class asn1_string_table_st(Structure): - pass -asn1_string_table_st._fields_ = [ - ('nid', c_int), - ('minsize', c_long), - ('maxsize', c_long), - ('mask', c_ulong), - ('flags', c_ulong), -] -assert sizeof(asn1_string_table_st) == 20, sizeof(asn1_string_table_st) -assert alignment(asn1_string_table_st) == 4, alignment(asn1_string_table_st) -ASN1_STRING_TABLE = asn1_string_table_st -class ASN1_TEMPLATE_st(Structure): - pass -ASN1_TEMPLATE_st._fields_ = [ -] -ASN1_TEMPLATE = ASN1_TEMPLATE_st -class ASN1_ITEM_st(Structure): - pass -ASN1_ITEM = ASN1_ITEM_st -ASN1_ITEM_st._fields_ = [ -] -class ASN1_TLC_st(Structure): - pass -ASN1_TLC = ASN1_TLC_st -ASN1_TLC_st._fields_ = [ -] -class ASN1_VALUE_st(Structure): - pass -ASN1_VALUE_st._fields_ = [ -] -ASN1_VALUE = ASN1_VALUE_st -ASN1_ITEM_EXP = ASN1_ITEM -class asn1_type_st(Structure): - pass -class N12asn1_type_st4DOLLAR_11E(Union): - pass -ASN1_BOOLEAN = c_int -ASN1_INTEGER = asn1_string_st -ASN1_ENUMERATED = asn1_string_st -ASN1_BIT_STRING = asn1_string_st -ASN1_OCTET_STRING = asn1_string_st -ASN1_PRINTABLESTRING = asn1_string_st -ASN1_T61STRING = asn1_string_st -ASN1_IA5STRING = asn1_string_st -ASN1_GENERALSTRING = asn1_string_st -ASN1_BMPSTRING = asn1_string_st -ASN1_UNIVERSALSTRING = asn1_string_st -ASN1_UTCTIME = asn1_string_st -ASN1_GENERALIZEDTIME = asn1_string_st -ASN1_VISIBLESTRING = asn1_string_st -ASN1_UTF8STRING = asn1_string_st -N12asn1_type_st4DOLLAR_11E._fields_ = [ - ('ptr', STRING), - ('boolean', ASN1_BOOLEAN), - ('asn1_string', POINTER(ASN1_STRING)), - ('object', POINTER(ASN1_OBJECT)), - ('integer', POINTER(ASN1_INTEGER)), - ('enumerated', POINTER(ASN1_ENUMERATED)), - ('bit_string', POINTER(ASN1_BIT_STRING)), - ('octet_string', POINTER(ASN1_OCTET_STRING)), - ('printablestring', POINTER(ASN1_PRINTABLESTRING)), - ('t61string', POINTER(ASN1_T61STRING)), - ('ia5string', POINTER(ASN1_IA5STRING)), - ('generalstring', POINTER(ASN1_GENERALSTRING)), - ('bmpstring', POINTER(ASN1_BMPSTRING)), - ('universalstring', POINTER(ASN1_UNIVERSALSTRING)), - ('utctime', POINTER(ASN1_UTCTIME)), - ('generalizedtime', POINTER(ASN1_GENERALIZEDTIME)), - ('visiblestring', POINTER(ASN1_VISIBLESTRING)), - ('utf8string', POINTER(ASN1_UTF8STRING)), - ('set', POINTER(ASN1_STRING)), - ('sequence', POINTER(ASN1_STRING)), -] -assert sizeof(N12asn1_type_st4DOLLAR_11E) == 4, sizeof(N12asn1_type_st4DOLLAR_11E) -assert alignment(N12asn1_type_st4DOLLAR_11E) == 4, alignment(N12asn1_type_st4DOLLAR_11E) -asn1_type_st._fields_ = [ - ('type', c_int), - ('value', N12asn1_type_st4DOLLAR_11E), -] -assert sizeof(asn1_type_st) == 8, sizeof(asn1_type_st) -assert alignment(asn1_type_st) == 4, alignment(asn1_type_st) -ASN1_TYPE = asn1_type_st -class asn1_method_st(Structure): - pass -asn1_method_st._fields_ = [ - ('i2d', CFUNCTYPE(c_int)), - ('d2i', CFUNCTYPE(STRING)), - ('create', CFUNCTYPE(STRING)), - ('destroy', CFUNCTYPE(None)), -] -assert sizeof(asn1_method_st) == 16, sizeof(asn1_method_st) -assert alignment(asn1_method_st) == 4, alignment(asn1_method_st) -ASN1_METHOD = asn1_method_st -class asn1_header_st(Structure): - pass -asn1_header_st._fields_ = [ - ('header', POINTER(ASN1_OCTET_STRING)), - ('data', STRING), - ('meth', POINTER(ASN1_METHOD)), -] -assert sizeof(asn1_header_st) == 12, sizeof(asn1_header_st) -assert alignment(asn1_header_st) == 4, alignment(asn1_header_st) -ASN1_HEADER = asn1_header_st -class BIT_STRING_BITNAME_st(Structure): - pass -BIT_STRING_BITNAME_st._fields_ = [ - ('bitnum', c_int), - ('lname', STRING), - ('sname', STRING), -] -assert sizeof(BIT_STRING_BITNAME_st) == 12, sizeof(BIT_STRING_BITNAME_st) -assert alignment(BIT_STRING_BITNAME_st) == 4, alignment(BIT_STRING_BITNAME_st) -BIT_STRING_BITNAME = BIT_STRING_BITNAME_st -class bio_st(Structure): - pass -BIO = bio_st -bio_info_cb = CFUNCTYPE(None, POINTER(bio_st), c_int, STRING, c_int, c_long, c_long) -class bio_method_st(Structure): - pass -bio_method_st._fields_ = [ - ('type', c_int), - ('name', STRING), - ('bwrite', CFUNCTYPE(c_int, POINTER(BIO), STRING, c_int)), - ('bread', CFUNCTYPE(c_int, POINTER(BIO), STRING, c_int)), - ('bputs', CFUNCTYPE(c_int, POINTER(BIO), STRING)), - ('bgets', CFUNCTYPE(c_int, POINTER(BIO), STRING, c_int)), - ('ctrl', CFUNCTYPE(c_long, POINTER(BIO), c_int, c_long, c_void_p)), - ('create', CFUNCTYPE(c_int, POINTER(BIO))), - ('destroy', CFUNCTYPE(c_int, POINTER(BIO))), - ('callback_ctrl', CFUNCTYPE(c_long, POINTER(BIO), c_int, POINTER(bio_info_cb))), -] -assert sizeof(bio_method_st) == 40, sizeof(bio_method_st) -assert alignment(bio_method_st) == 4, alignment(bio_method_st) -BIO_METHOD = bio_method_st -class crypto_ex_data_st(Structure): - pass -class stack_st(Structure): - pass -STACK = stack_st -crypto_ex_data_st._fields_ = [ - ('sk', POINTER(STACK)), - ('dummy', c_int), -] -assert sizeof(crypto_ex_data_st) == 8, sizeof(crypto_ex_data_st) -assert alignment(crypto_ex_data_st) == 4, alignment(crypto_ex_data_st) -CRYPTO_EX_DATA = crypto_ex_data_st -bio_st._fields_ = [ - ('method', POINTER(BIO_METHOD)), - ('callback', CFUNCTYPE(c_long, POINTER(bio_st), c_int, STRING, c_int, c_long, c_long)), - ('cb_arg', STRING), - ('init', c_int), - ('shutdown', c_int), - ('flags', c_int), - ('retry_reason', c_int), - ('num', c_int), - ('ptr', c_void_p), - ('next_bio', POINTER(bio_st)), - ('prev_bio', POINTER(bio_st)), - ('references', c_int), - ('num_read', c_ulong), - ('num_write', c_ulong), - ('ex_data', CRYPTO_EX_DATA), -] -assert sizeof(bio_st) == 64, sizeof(bio_st) -assert alignment(bio_st) == 4, alignment(bio_st) -class bio_f_buffer_ctx_struct(Structure): - pass -bio_f_buffer_ctx_struct._fields_ = [ - ('ibuf_size', c_int), - ('obuf_size', c_int), - ('ibuf', STRING), - ('ibuf_len', c_int), - ('ibuf_off', c_int), - ('obuf', STRING), - ('obuf_len', c_int), - ('obuf_off', c_int), -] -assert sizeof(bio_f_buffer_ctx_struct) == 32, sizeof(bio_f_buffer_ctx_struct) -assert alignment(bio_f_buffer_ctx_struct) == 4, alignment(bio_f_buffer_ctx_struct) -BIO_F_BUFFER_CTX = bio_f_buffer_ctx_struct -class hostent(Structure): - pass -hostent._fields_ = [ -] -class bf_key_st(Structure): - pass -bf_key_st._fields_ = [ - ('P', c_uint * 18), - ('S', c_uint * 1024), -] -assert sizeof(bf_key_st) == 4168, sizeof(bf_key_st) -assert alignment(bf_key_st) == 4, alignment(bf_key_st) -BF_KEY = bf_key_st -class bignum_st(Structure): - pass -bignum_st._fields_ = [ - ('d', POINTER(c_ulong)), - ('top', c_int), - ('dmax', c_int), - ('neg', c_int), - ('flags', c_int), -] -assert sizeof(bignum_st) == 20, sizeof(bignum_st) -assert alignment(bignum_st) == 4, alignment(bignum_st) -BIGNUM = bignum_st -class bignum_ctx(Structure): - pass -bignum_ctx._fields_ = [ -] -BN_CTX = bignum_ctx -class bn_blinding_st(Structure): - pass -bn_blinding_st._fields_ = [ - ('init', c_int), - ('A', POINTER(BIGNUM)), - ('Ai', POINTER(BIGNUM)), - ('mod', POINTER(BIGNUM)), - ('thread_id', c_ulong), -] -assert sizeof(bn_blinding_st) == 20, sizeof(bn_blinding_st) -assert alignment(bn_blinding_st) == 4, alignment(bn_blinding_st) -BN_BLINDING = bn_blinding_st -class bn_mont_ctx_st(Structure): - pass -bn_mont_ctx_st._fields_ = [ - ('ri', c_int), - ('RR', BIGNUM), - ('N', BIGNUM), - ('Ni', BIGNUM), - ('n0', c_ulong), - ('flags', c_int), -] -assert sizeof(bn_mont_ctx_st) == 72, sizeof(bn_mont_ctx_st) -assert alignment(bn_mont_ctx_st) == 4, alignment(bn_mont_ctx_st) -BN_MONT_CTX = bn_mont_ctx_st -class bn_recp_ctx_st(Structure): - pass -bn_recp_ctx_st._fields_ = [ - ('N', BIGNUM), - ('Nr', BIGNUM), - ('num_bits', c_int), - ('shift', c_int), - ('flags', c_int), -] -assert sizeof(bn_recp_ctx_st) == 52, sizeof(bn_recp_ctx_st) -assert alignment(bn_recp_ctx_st) == 4, alignment(bn_recp_ctx_st) -BN_RECP_CTX = bn_recp_ctx_st -class buf_mem_st(Structure): - pass -buf_mem_st._fields_ = [ - ('length', c_int), - ('data', STRING), - ('max', c_int), -] -assert sizeof(buf_mem_st) == 12, sizeof(buf_mem_st) -assert alignment(buf_mem_st) == 4, alignment(buf_mem_st) -BUF_MEM = buf_mem_st -class cast_key_st(Structure): - pass -cast_key_st._fields_ = [ - ('data', c_ulong * 32), - ('short_key', c_int), -] -assert sizeof(cast_key_st) == 132, sizeof(cast_key_st) -assert alignment(cast_key_st) == 4, alignment(cast_key_st) -CAST_KEY = cast_key_st -class comp_method_st(Structure): - pass -comp_method_st._fields_ = [ - ('type', c_int), - ('name', STRING), - ('init', CFUNCTYPE(c_int)), - ('finish', CFUNCTYPE(None)), - ('compress', CFUNCTYPE(c_int)), - ('expand', CFUNCTYPE(c_int)), - ('ctrl', CFUNCTYPE(c_long)), - ('callback_ctrl', CFUNCTYPE(c_long)), -] -assert sizeof(comp_method_st) == 32, sizeof(comp_method_st) -assert alignment(comp_method_st) == 4, alignment(comp_method_st) -COMP_METHOD = comp_method_st -class comp_ctx_st(Structure): - pass -comp_ctx_st._fields_ = [ - ('meth', POINTER(COMP_METHOD)), - ('compress_in', c_ulong), - ('compress_out', c_ulong), - ('expand_in', c_ulong), - ('expand_out', c_ulong), - ('ex_data', CRYPTO_EX_DATA), -] -assert sizeof(comp_ctx_st) == 28, sizeof(comp_ctx_st) -assert alignment(comp_ctx_st) == 4, alignment(comp_ctx_st) -COMP_CTX = comp_ctx_st -class CRYPTO_dynlock_value(Structure): - pass -CRYPTO_dynlock_value._fields_ = [ -] -class CRYPTO_dynlock(Structure): - pass -CRYPTO_dynlock._fields_ = [ - ('references', c_int), - ('data', POINTER(CRYPTO_dynlock_value)), -] -assert sizeof(CRYPTO_dynlock) == 8, sizeof(CRYPTO_dynlock) -assert alignment(CRYPTO_dynlock) == 4, alignment(CRYPTO_dynlock) -BIO_dummy = bio_st -CRYPTO_EX_new = CFUNCTYPE(c_int, c_void_p, c_void_p, POINTER(CRYPTO_EX_DATA), c_int, c_long, c_void_p) -CRYPTO_EX_free = CFUNCTYPE(None, c_void_p, c_void_p, POINTER(CRYPTO_EX_DATA), c_int, c_long, c_void_p) -CRYPTO_EX_dup = CFUNCTYPE(c_int, POINTER(CRYPTO_EX_DATA), POINTER(CRYPTO_EX_DATA), c_void_p, c_int, c_long, c_void_p) -class crypto_ex_data_func_st(Structure): - pass -crypto_ex_data_func_st._fields_ = [ - ('argl', c_long), - ('argp', c_void_p), - ('new_func', POINTER(CRYPTO_EX_new)), - ('free_func', POINTER(CRYPTO_EX_free)), - ('dup_func', POINTER(CRYPTO_EX_dup)), -] -assert sizeof(crypto_ex_data_func_st) == 20, sizeof(crypto_ex_data_func_st) -assert alignment(crypto_ex_data_func_st) == 4, alignment(crypto_ex_data_func_st) -CRYPTO_EX_DATA_FUNCS = crypto_ex_data_func_st -class st_CRYPTO_EX_DATA_IMPL(Structure): - pass -CRYPTO_EX_DATA_IMPL = st_CRYPTO_EX_DATA_IMPL -st_CRYPTO_EX_DATA_IMPL._fields_ = [ -] -CRYPTO_MEM_LEAK_CB = CFUNCTYPE(c_void_p, c_ulong, STRING, c_int, c_int, c_void_p) -DES_cblock = c_ubyte * 8 -const_DES_cblock = c_ubyte * 8 -class DES_ks(Structure): - pass -class N6DES_ks3DOLLAR_9E(Union): - pass -N6DES_ks3DOLLAR_9E._fields_ = [ - ('cblock', DES_cblock), - ('deslong', c_ulong * 2), -] -assert sizeof(N6DES_ks3DOLLAR_9E) == 8, sizeof(N6DES_ks3DOLLAR_9E) -assert alignment(N6DES_ks3DOLLAR_9E) == 4, alignment(N6DES_ks3DOLLAR_9E) -DES_ks._fields_ = [ - ('ks', N6DES_ks3DOLLAR_9E * 16), -] -assert sizeof(DES_ks) == 128, sizeof(DES_ks) -assert alignment(DES_ks) == 4, alignment(DES_ks) -DES_key_schedule = DES_ks -_ossl_old_des_cblock = c_ubyte * 8 -class _ossl_old_des_ks_struct(Structure): - pass -class N23_ossl_old_des_ks_struct4DOLLAR_10E(Union): - pass -N23_ossl_old_des_ks_struct4DOLLAR_10E._fields_ = [ - ('_', _ossl_old_des_cblock), - ('pad', c_ulong * 2), -] -assert sizeof(N23_ossl_old_des_ks_struct4DOLLAR_10E) == 8, sizeof(N23_ossl_old_des_ks_struct4DOLLAR_10E) -assert alignment(N23_ossl_old_des_ks_struct4DOLLAR_10E) == 4, alignment(N23_ossl_old_des_ks_struct4DOLLAR_10E) -_ossl_old_des_ks_struct._fields_ = [ - ('ks', N23_ossl_old_des_ks_struct4DOLLAR_10E), -] -assert sizeof(_ossl_old_des_ks_struct) == 8, sizeof(_ossl_old_des_ks_struct) -assert alignment(_ossl_old_des_ks_struct) == 4, alignment(_ossl_old_des_ks_struct) -_ossl_old_des_key_schedule = _ossl_old_des_ks_struct * 16 -class dh_st(Structure): - pass -DH = dh_st -class dh_method(Structure): - pass -dh_method._fields_ = [ - ('name', STRING), - ('generate_key', CFUNCTYPE(c_int, POINTER(DH))), - ('compute_key', CFUNCTYPE(c_int, POINTER(c_ubyte), POINTER(BIGNUM), POINTER(DH))), - ('bn_mod_exp', CFUNCTYPE(c_int, POINTER(DH), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BN_CTX), POINTER(BN_MONT_CTX))), - ('init', CFUNCTYPE(c_int, POINTER(DH))), - ('finish', CFUNCTYPE(c_int, POINTER(DH))), - ('flags', c_int), - ('app_data', STRING), -] -assert sizeof(dh_method) == 32, sizeof(dh_method) -assert alignment(dh_method) == 4, alignment(dh_method) -DH_METHOD = dh_method -class engine_st(Structure): - pass -ENGINE = engine_st -dh_st._fields_ = [ - ('pad', c_int), - ('version', c_int), - ('p', POINTER(BIGNUM)), - ('g', POINTER(BIGNUM)), - ('length', c_long), - ('pub_key', POINTER(BIGNUM)), - ('priv_key', POINTER(BIGNUM)), - ('flags', c_int), - ('method_mont_p', STRING), - ('q', POINTER(BIGNUM)), - ('j', POINTER(BIGNUM)), - ('seed', POINTER(c_ubyte)), - ('seedlen', c_int), - ('counter', POINTER(BIGNUM)), - ('references', c_int), - ('ex_data', CRYPTO_EX_DATA), - ('meth', POINTER(DH_METHOD)), - ('engine', POINTER(ENGINE)), -] -assert sizeof(dh_st) == 76, sizeof(dh_st) -assert alignment(dh_st) == 4, alignment(dh_st) -class dsa_st(Structure): - pass -DSA = dsa_st -class DSA_SIG_st(Structure): - pass -DSA_SIG_st._fields_ = [ - ('r', POINTER(BIGNUM)), - ('s', POINTER(BIGNUM)), -] -assert sizeof(DSA_SIG_st) == 8, sizeof(DSA_SIG_st) -assert alignment(DSA_SIG_st) == 4, alignment(DSA_SIG_st) -DSA_SIG = DSA_SIG_st -class dsa_method(Structure): - pass -dsa_method._fields_ = [ - ('name', STRING), - ('dsa_do_sign', CFUNCTYPE(POINTER(DSA_SIG), POINTER(c_ubyte), c_int, POINTER(DSA))), - ('dsa_sign_setup', CFUNCTYPE(c_int, POINTER(DSA), POINTER(BN_CTX), POINTER(POINTER(BIGNUM)), POINTER(POINTER(BIGNUM)))), - ('dsa_do_verify', CFUNCTYPE(c_int, POINTER(c_ubyte), c_int, POINTER(DSA_SIG), POINTER(DSA))), - ('dsa_mod_exp', CFUNCTYPE(c_int, POINTER(DSA), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BN_CTX), POINTER(BN_MONT_CTX))), - ('bn_mod_exp', CFUNCTYPE(c_int, POINTER(DSA), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BN_CTX), POINTER(BN_MONT_CTX))), - ('init', CFUNCTYPE(c_int, POINTER(DSA))), - ('finish', CFUNCTYPE(c_int, POINTER(DSA))), - ('flags', c_int), - ('app_data', STRING), -] -assert sizeof(dsa_method) == 40, sizeof(dsa_method) -assert alignment(dsa_method) == 4, alignment(dsa_method) -DSA_METHOD = dsa_method -dsa_st._fields_ = [ - ('pad', c_int), - ('version', c_long), - ('write_params', c_int), - ('p', POINTER(BIGNUM)), - ('q', POINTER(BIGNUM)), - ('g', POINTER(BIGNUM)), - ('pub_key', POINTER(BIGNUM)), - ('priv_key', POINTER(BIGNUM)), - ('kinv', POINTER(BIGNUM)), - ('r', POINTER(BIGNUM)), - ('flags', c_int), - ('method_mont_p', STRING), - ('references', c_int), - ('ex_data', CRYPTO_EX_DATA), - ('meth', POINTER(DSA_METHOD)), - ('engine', POINTER(ENGINE)), -] -assert sizeof(dsa_st) == 68, sizeof(dsa_st) -assert alignment(dsa_st) == 4, alignment(dsa_st) -class evp_pkey_st(Structure): - pass -class N11evp_pkey_st4DOLLAR_12E(Union): - pass -class rsa_st(Structure): - pass -N11evp_pkey_st4DOLLAR_12E._fields_ = [ - ('ptr', STRING), - ('rsa', POINTER(rsa_st)), - ('dsa', POINTER(dsa_st)), - ('dh', POINTER(dh_st)), -] -assert sizeof(N11evp_pkey_st4DOLLAR_12E) == 4, sizeof(N11evp_pkey_st4DOLLAR_12E) -assert alignment(N11evp_pkey_st4DOLLAR_12E) == 4, alignment(N11evp_pkey_st4DOLLAR_12E) -evp_pkey_st._fields_ = [ - ('type', c_int), - ('save_type', c_int), - ('references', c_int), - ('pkey', N11evp_pkey_st4DOLLAR_12E), - ('save_parameters', c_int), - ('attributes', POINTER(STACK)), -] -assert sizeof(evp_pkey_st) == 24, sizeof(evp_pkey_st) -assert alignment(evp_pkey_st) == 4, alignment(evp_pkey_st) -class env_md_st(Structure): - pass -class env_md_ctx_st(Structure): - pass -EVP_MD_CTX = env_md_ctx_st -env_md_st._fields_ = [ - ('type', c_int), - ('pkey_type', c_int), - ('md_size', c_int), - ('flags', c_ulong), - ('init', CFUNCTYPE(c_int, POINTER(EVP_MD_CTX))), - ('update', CFUNCTYPE(c_int, POINTER(EVP_MD_CTX), c_void_p, c_ulong)), - ('final', CFUNCTYPE(c_int, POINTER(EVP_MD_CTX), POINTER(c_ubyte))), - ('copy', CFUNCTYPE(c_int, POINTER(EVP_MD_CTX), POINTER(EVP_MD_CTX))), - ('cleanup', CFUNCTYPE(c_int, POINTER(EVP_MD_CTX))), - ('sign', CFUNCTYPE(c_int)), - ('verify', CFUNCTYPE(c_int)), - ('required_pkey_type', c_int * 5), - ('block_size', c_int), - ('ctx_size', c_int), -] -assert sizeof(env_md_st) == 72, sizeof(env_md_st) -assert alignment(env_md_st) == 4, alignment(env_md_st) -EVP_MD = env_md_st -env_md_ctx_st._fields_ = [ - ('digest', POINTER(EVP_MD)), - ('engine', POINTER(ENGINE)), - ('flags', c_ulong), - ('md_data', c_void_p), -] -assert sizeof(env_md_ctx_st) == 16, sizeof(env_md_ctx_st) -assert alignment(env_md_ctx_st) == 4, alignment(env_md_ctx_st) -class evp_cipher_st(Structure): - pass -class evp_cipher_ctx_st(Structure): - pass -EVP_CIPHER_CTX = evp_cipher_ctx_st -evp_cipher_st._fields_ = [ - ('nid', c_int), - ('block_size', c_int), - ('key_len', c_int), - ('iv_len', c_int), - ('flags', c_ulong), - ('init', CFUNCTYPE(c_int, POINTER(EVP_CIPHER_CTX), POINTER(c_ubyte), POINTER(c_ubyte), c_int)), - ('do_cipher', CFUNCTYPE(c_int, POINTER(EVP_CIPHER_CTX), POINTER(c_ubyte), POINTER(c_ubyte), c_uint)), - ('cleanup', CFUNCTYPE(c_int, POINTER(EVP_CIPHER_CTX))), - ('ctx_size', c_int), - ('set_asn1_parameters', CFUNCTYPE(c_int, POINTER(EVP_CIPHER_CTX), POINTER(ASN1_TYPE))), - ('get_asn1_parameters', CFUNCTYPE(c_int, POINTER(EVP_CIPHER_CTX), POINTER(ASN1_TYPE))), - ('ctrl', CFUNCTYPE(c_int, POINTER(EVP_CIPHER_CTX), c_int, c_int, c_void_p)), - ('app_data', c_void_p), -] -assert sizeof(evp_cipher_st) == 52, sizeof(evp_cipher_st) -assert alignment(evp_cipher_st) == 4, alignment(evp_cipher_st) -class evp_cipher_info_st(Structure): - pass -EVP_CIPHER = evp_cipher_st -evp_cipher_info_st._fields_ = [ - ('cipher', POINTER(EVP_CIPHER)), - ('iv', c_ubyte * 16), -] -assert sizeof(evp_cipher_info_st) == 20, sizeof(evp_cipher_info_st) -assert alignment(evp_cipher_info_st) == 4, alignment(evp_cipher_info_st) -EVP_CIPHER_INFO = evp_cipher_info_st -evp_cipher_ctx_st._fields_ = [ - ('cipher', POINTER(EVP_CIPHER)), - ('engine', POINTER(ENGINE)), - ('encrypt', c_int), - ('buf_len', c_int), - ('oiv', c_ubyte * 16), - ('iv', c_ubyte * 16), - ('buf', c_ubyte * 32), - ('num', c_int), - ('app_data', c_void_p), - ('key_len', c_int), - ('flags', c_ulong), - ('cipher_data', c_void_p), - ('final_used', c_int), - ('block_mask', c_int), - ('final', c_ubyte * 32), -] -assert sizeof(evp_cipher_ctx_st) == 140, sizeof(evp_cipher_ctx_st) -assert alignment(evp_cipher_ctx_st) == 4, alignment(evp_cipher_ctx_st) -class evp_Encode_Ctx_st(Structure): - pass -evp_Encode_Ctx_st._fields_ = [ - ('num', c_int), - ('length', c_int), - ('enc_data', c_ubyte * 80), - ('line_num', c_int), - ('expect_nl', c_int), -] -assert sizeof(evp_Encode_Ctx_st) == 96, sizeof(evp_Encode_Ctx_st) -assert alignment(evp_Encode_Ctx_st) == 4, alignment(evp_Encode_Ctx_st) -EVP_ENCODE_CTX = evp_Encode_Ctx_st -EVP_PBE_KEYGEN = CFUNCTYPE(c_int, POINTER(EVP_CIPHER_CTX), STRING, c_int, POINTER(ASN1_TYPE), POINTER(EVP_CIPHER), POINTER(EVP_MD), c_int) -class lhash_node_st(Structure): - pass -lhash_node_st._fields_ = [ - ('data', c_void_p), - ('next', POINTER(lhash_node_st)), - ('hash', c_ulong), -] -assert sizeof(lhash_node_st) == 12, sizeof(lhash_node_st) -assert alignment(lhash_node_st) == 4, alignment(lhash_node_st) -LHASH_NODE = lhash_node_st -LHASH_COMP_FN_TYPE = CFUNCTYPE(c_int, c_void_p, c_void_p) -LHASH_HASH_FN_TYPE = CFUNCTYPE(c_ulong, c_void_p) -LHASH_DOALL_FN_TYPE = CFUNCTYPE(None, c_void_p) -LHASH_DOALL_ARG_FN_TYPE = CFUNCTYPE(None, c_void_p, c_void_p) -class lhash_st(Structure): - pass -lhash_st._fields_ = [ - ('b', POINTER(POINTER(LHASH_NODE))), - ('comp', LHASH_COMP_FN_TYPE), - ('hash', LHASH_HASH_FN_TYPE), - ('num_nodes', c_uint), - ('num_alloc_nodes', c_uint), - ('p', c_uint), - ('pmax', c_uint), - ('up_load', c_ulong), - ('down_load', c_ulong), - ('num_items', c_ulong), - ('num_expands', c_ulong), - ('num_expand_reallocs', c_ulong), - ('num_contracts', c_ulong), - ('num_contract_reallocs', c_ulong), - ('num_hash_calls', c_ulong), - ('num_comp_calls', c_ulong), - ('num_insert', c_ulong), - ('num_replace', c_ulong), - ('num_delete', c_ulong), - ('num_no_delete', c_ulong), - ('num_retrieve', c_ulong), - ('num_retrieve_miss', c_ulong), - ('num_hash_comps', c_ulong), - ('error', c_int), -] -assert sizeof(lhash_st) == 96, sizeof(lhash_st) -assert alignment(lhash_st) == 4, alignment(lhash_st) -LHASH = lhash_st -class MD2state_st(Structure): - pass -MD2state_st._fields_ = [ - ('num', c_int), - ('data', c_ubyte * 16), - ('cksm', c_uint * 16), - ('state', c_uint * 16), -] -assert sizeof(MD2state_st) == 148, sizeof(MD2state_st) -assert alignment(MD2state_st) == 4, alignment(MD2state_st) -MD2_CTX = MD2state_st -class MD4state_st(Structure): - pass -MD4state_st._fields_ = [ - ('A', c_uint), - ('B', c_uint), - ('C', c_uint), - ('D', c_uint), - ('Nl', c_uint), - ('Nh', c_uint), - ('data', c_uint * 16), - ('num', c_int), -] -assert sizeof(MD4state_st) == 92, sizeof(MD4state_st) -assert alignment(MD4state_st) == 4, alignment(MD4state_st) -MD4_CTX = MD4state_st -class MD5state_st(Structure): - pass -MD5state_st._fields_ = [ - ('A', c_uint), - ('B', c_uint), - ('C', c_uint), - ('D', c_uint), - ('Nl', c_uint), - ('Nh', c_uint), - ('data', c_uint * 16), - ('num', c_int), -] -assert sizeof(MD5state_st) == 92, sizeof(MD5state_st) -assert alignment(MD5state_st) == 4, alignment(MD5state_st) -MD5_CTX = MD5state_st -class mdc2_ctx_st(Structure): - pass -mdc2_ctx_st._fields_ = [ - ('num', c_int), - ('data', c_ubyte * 8), - ('h', DES_cblock), - ('hh', DES_cblock), - ('pad_type', c_int), -] -assert sizeof(mdc2_ctx_st) == 32, sizeof(mdc2_ctx_st) -assert alignment(mdc2_ctx_st) == 4, alignment(mdc2_ctx_st) -MDC2_CTX = mdc2_ctx_st -class obj_name_st(Structure): - pass -obj_name_st._fields_ = [ - ('type', c_int), - ('alias', c_int), - ('name', STRING), - ('data', STRING), -] -assert sizeof(obj_name_st) == 16, sizeof(obj_name_st) -assert alignment(obj_name_st) == 4, alignment(obj_name_st) -OBJ_NAME = obj_name_st -ASN1_TIME = asn1_string_st -ASN1_NULL = c_int -EVP_PKEY = evp_pkey_st -class x509_st(Structure): - pass -X509 = x509_st -class X509_algor_st(Structure): - pass -X509_ALGOR = X509_algor_st -class X509_crl_st(Structure): - pass -X509_CRL = X509_crl_st -class X509_name_st(Structure): - pass -X509_NAME = X509_name_st -class x509_store_st(Structure): - pass -X509_STORE = x509_store_st -class x509_store_ctx_st(Structure): - pass -X509_STORE_CTX = x509_store_ctx_st -engine_st._fields_ = [ -] -class PEM_Encode_Seal_st(Structure): - pass -PEM_Encode_Seal_st._fields_ = [ - ('encode', EVP_ENCODE_CTX), - ('md', EVP_MD_CTX), - ('cipher', EVP_CIPHER_CTX), -] -assert sizeof(PEM_Encode_Seal_st) == 252, sizeof(PEM_Encode_Seal_st) -assert alignment(PEM_Encode_Seal_st) == 4, alignment(PEM_Encode_Seal_st) -PEM_ENCODE_SEAL_CTX = PEM_Encode_Seal_st -class pem_recip_st(Structure): - pass -pem_recip_st._fields_ = [ - ('name', STRING), - ('dn', POINTER(X509_NAME)), - ('cipher', c_int), - ('key_enc', c_int), -] -assert sizeof(pem_recip_st) == 16, sizeof(pem_recip_st) -assert alignment(pem_recip_st) == 4, alignment(pem_recip_st) -PEM_USER = pem_recip_st -class pem_ctx_st(Structure): - pass -class N10pem_ctx_st4DOLLAR_16E(Structure): - pass -N10pem_ctx_st4DOLLAR_16E._fields_ = [ - ('version', c_int), - ('mode', c_int), -] -assert sizeof(N10pem_ctx_st4DOLLAR_16E) == 8, sizeof(N10pem_ctx_st4DOLLAR_16E) -assert alignment(N10pem_ctx_st4DOLLAR_16E) == 4, alignment(N10pem_ctx_st4DOLLAR_16E) -class N10pem_ctx_st4DOLLAR_17E(Structure): - pass -N10pem_ctx_st4DOLLAR_17E._fields_ = [ - ('cipher', c_int), -] -assert sizeof(N10pem_ctx_st4DOLLAR_17E) == 4, sizeof(N10pem_ctx_st4DOLLAR_17E) -assert alignment(N10pem_ctx_st4DOLLAR_17E) == 4, alignment(N10pem_ctx_st4DOLLAR_17E) -pem_ctx_st._fields_ = [ - ('type', c_int), - ('proc_type', N10pem_ctx_st4DOLLAR_16E), - ('domain', STRING), - ('DEK_info', N10pem_ctx_st4DOLLAR_17E), - ('originator', POINTER(PEM_USER)), - ('num_recipient', c_int), - ('recipient', POINTER(POINTER(PEM_USER))), - ('x509_chain', POINTER(STACK)), - ('md', POINTER(EVP_MD)), - ('md_enc', c_int), - ('md_len', c_int), - ('md_data', STRING), - ('dec', POINTER(EVP_CIPHER)), - ('key_len', c_int), - ('key', POINTER(c_ubyte)), - ('data_enc', c_int), - ('data_len', c_int), - ('data', POINTER(c_ubyte)), -] -assert sizeof(pem_ctx_st) == 76, sizeof(pem_ctx_st) -assert alignment(pem_ctx_st) == 4, alignment(pem_ctx_st) -PEM_CTX = pem_ctx_st -pem_password_cb = CFUNCTYPE(c_int, STRING, c_int, c_int, c_void_p) -class pkcs7_issuer_and_serial_st(Structure): - pass -pkcs7_issuer_and_serial_st._fields_ = [ - ('issuer', POINTER(X509_NAME)), - ('serial', POINTER(ASN1_INTEGER)), -] -assert sizeof(pkcs7_issuer_and_serial_st) == 8, sizeof(pkcs7_issuer_and_serial_st) -assert alignment(pkcs7_issuer_and_serial_st) == 4, alignment(pkcs7_issuer_and_serial_st) -PKCS7_ISSUER_AND_SERIAL = pkcs7_issuer_and_serial_st -class pkcs7_signer_info_st(Structure): - pass -pkcs7_signer_info_st._fields_ = [ - ('version', POINTER(ASN1_INTEGER)), - ('issuer_and_serial', POINTER(PKCS7_ISSUER_AND_SERIAL)), - ('digest_alg', POINTER(X509_ALGOR)), - ('auth_attr', POINTER(STACK)), - ('digest_enc_alg', POINTER(X509_ALGOR)), - ('enc_digest', POINTER(ASN1_OCTET_STRING)), - ('unauth_attr', POINTER(STACK)), - ('pkey', POINTER(EVP_PKEY)), -] -assert sizeof(pkcs7_signer_info_st) == 32, sizeof(pkcs7_signer_info_st) -assert alignment(pkcs7_signer_info_st) == 4, alignment(pkcs7_signer_info_st) -PKCS7_SIGNER_INFO = pkcs7_signer_info_st -class pkcs7_recip_info_st(Structure): - pass -pkcs7_recip_info_st._fields_ = [ - ('version', POINTER(ASN1_INTEGER)), - ('issuer_and_serial', POINTER(PKCS7_ISSUER_AND_SERIAL)), - ('key_enc_algor', POINTER(X509_ALGOR)), - ('enc_key', POINTER(ASN1_OCTET_STRING)), - ('cert', POINTER(X509)), -] -assert sizeof(pkcs7_recip_info_st) == 20, sizeof(pkcs7_recip_info_st) -assert alignment(pkcs7_recip_info_st) == 4, alignment(pkcs7_recip_info_st) -PKCS7_RECIP_INFO = pkcs7_recip_info_st -class pkcs7_signed_st(Structure): - pass -class pkcs7_st(Structure): - pass -pkcs7_signed_st._fields_ = [ - ('version', POINTER(ASN1_INTEGER)), - ('md_algs', POINTER(STACK)), - ('cert', POINTER(STACK)), - ('crl', POINTER(STACK)), - ('signer_info', POINTER(STACK)), - ('contents', POINTER(pkcs7_st)), -] -assert sizeof(pkcs7_signed_st) == 24, sizeof(pkcs7_signed_st) -assert alignment(pkcs7_signed_st) == 4, alignment(pkcs7_signed_st) -PKCS7_SIGNED = pkcs7_signed_st -class pkcs7_enc_content_st(Structure): - pass -pkcs7_enc_content_st._fields_ = [ - ('content_type', POINTER(ASN1_OBJECT)), - ('algorithm', POINTER(X509_ALGOR)), - ('enc_data', POINTER(ASN1_OCTET_STRING)), - ('cipher', POINTER(EVP_CIPHER)), -] -assert sizeof(pkcs7_enc_content_st) == 16, sizeof(pkcs7_enc_content_st) -assert alignment(pkcs7_enc_content_st) == 4, alignment(pkcs7_enc_content_st) -PKCS7_ENC_CONTENT = pkcs7_enc_content_st -class pkcs7_enveloped_st(Structure): - pass -pkcs7_enveloped_st._fields_ = [ - ('version', POINTER(ASN1_INTEGER)), - ('recipientinfo', POINTER(STACK)), - ('enc_data', POINTER(PKCS7_ENC_CONTENT)), -] -assert sizeof(pkcs7_enveloped_st) == 12, sizeof(pkcs7_enveloped_st) -assert alignment(pkcs7_enveloped_st) == 4, alignment(pkcs7_enveloped_st) -PKCS7_ENVELOPE = pkcs7_enveloped_st -class pkcs7_signedandenveloped_st(Structure): - pass -pkcs7_signedandenveloped_st._fields_ = [ - ('version', POINTER(ASN1_INTEGER)), - ('md_algs', POINTER(STACK)), - ('cert', POINTER(STACK)), - ('crl', POINTER(STACK)), - ('signer_info', POINTER(STACK)), - ('enc_data', POINTER(PKCS7_ENC_CONTENT)), - ('recipientinfo', POINTER(STACK)), -] -assert sizeof(pkcs7_signedandenveloped_st) == 28, sizeof(pkcs7_signedandenveloped_st) -assert alignment(pkcs7_signedandenveloped_st) == 4, alignment(pkcs7_signedandenveloped_st) -PKCS7_SIGN_ENVELOPE = pkcs7_signedandenveloped_st -class pkcs7_digest_st(Structure): - pass -pkcs7_digest_st._fields_ = [ - ('version', POINTER(ASN1_INTEGER)), - ('md', POINTER(X509_ALGOR)), - ('contents', POINTER(pkcs7_st)), - ('digest', POINTER(ASN1_OCTET_STRING)), -] -assert sizeof(pkcs7_digest_st) == 16, sizeof(pkcs7_digest_st) -assert alignment(pkcs7_digest_st) == 4, alignment(pkcs7_digest_st) -PKCS7_DIGEST = pkcs7_digest_st -class pkcs7_encrypted_st(Structure): - pass -pkcs7_encrypted_st._fields_ = [ - ('version', POINTER(ASN1_INTEGER)), - ('enc_data', POINTER(PKCS7_ENC_CONTENT)), -] -assert sizeof(pkcs7_encrypted_st) == 8, sizeof(pkcs7_encrypted_st) -assert alignment(pkcs7_encrypted_st) == 4, alignment(pkcs7_encrypted_st) -PKCS7_ENCRYPT = pkcs7_encrypted_st -class N8pkcs7_st4DOLLAR_15E(Union): - pass -N8pkcs7_st4DOLLAR_15E._fields_ = [ - ('ptr', STRING), - ('data', POINTER(ASN1_OCTET_STRING)), - ('sign', POINTER(PKCS7_SIGNED)), - ('enveloped', POINTER(PKCS7_ENVELOPE)), - ('signed_and_enveloped', POINTER(PKCS7_SIGN_ENVELOPE)), - ('digest', POINTER(PKCS7_DIGEST)), - ('encrypted', POINTER(PKCS7_ENCRYPT)), - ('other', POINTER(ASN1_TYPE)), -] -assert sizeof(N8pkcs7_st4DOLLAR_15E) == 4, sizeof(N8pkcs7_st4DOLLAR_15E) -assert alignment(N8pkcs7_st4DOLLAR_15E) == 4, alignment(N8pkcs7_st4DOLLAR_15E) -pkcs7_st._fields_ = [ - ('asn1', POINTER(c_ubyte)), - ('length', c_long), - ('state', c_int), - ('detached', c_int), - ('type', POINTER(ASN1_OBJECT)), - ('d', N8pkcs7_st4DOLLAR_15E), -] -assert sizeof(pkcs7_st) == 24, sizeof(pkcs7_st) -assert alignment(pkcs7_st) == 4, alignment(pkcs7_st) -PKCS7 = pkcs7_st -class rc2_key_st(Structure): - pass -rc2_key_st._fields_ = [ - ('data', c_uint * 64), -] -assert sizeof(rc2_key_st) == 256, sizeof(rc2_key_st) -assert alignment(rc2_key_st) == 4, alignment(rc2_key_st) -RC2_KEY = rc2_key_st -class rc4_key_st(Structure): - pass -rc4_key_st._fields_ = [ - ('x', c_ubyte), - ('y', c_ubyte), - ('data', c_ubyte * 256), -] -assert sizeof(rc4_key_st) == 258, sizeof(rc4_key_st) -assert alignment(rc4_key_st) == 1, alignment(rc4_key_st) -RC4_KEY = rc4_key_st -class rc5_key_st(Structure): - pass -rc5_key_st._fields_ = [ - ('rounds', c_int), - ('data', c_ulong * 34), -] -assert sizeof(rc5_key_st) == 140, sizeof(rc5_key_st) -assert alignment(rc5_key_st) == 4, alignment(rc5_key_st) -RC5_32_KEY = rc5_key_st -class RIPEMD160state_st(Structure): - pass -RIPEMD160state_st._fields_ = [ - ('A', c_uint), - ('B', c_uint), - ('C', c_uint), - ('D', c_uint), - ('E', c_uint), - ('Nl', c_uint), - ('Nh', c_uint), - ('data', c_uint * 16), - ('num', c_int), -] -assert sizeof(RIPEMD160state_st) == 96, sizeof(RIPEMD160state_st) -assert alignment(RIPEMD160state_st) == 4, alignment(RIPEMD160state_st) -RIPEMD160_CTX = RIPEMD160state_st -RSA = rsa_st -class rsa_meth_st(Structure): - pass -rsa_meth_st._fields_ = [ - ('name', STRING), - ('rsa_pub_enc', CFUNCTYPE(c_int, c_int, POINTER(c_ubyte), POINTER(c_ubyte), POINTER(RSA), c_int)), - ('rsa_pub_dec', CFUNCTYPE(c_int, c_int, POINTER(c_ubyte), POINTER(c_ubyte), POINTER(RSA), c_int)), - ('rsa_priv_enc', CFUNCTYPE(c_int, c_int, POINTER(c_ubyte), POINTER(c_ubyte), POINTER(RSA), c_int)), - ('rsa_priv_dec', CFUNCTYPE(c_int, c_int, POINTER(c_ubyte), POINTER(c_ubyte), POINTER(RSA), c_int)), - ('rsa_mod_exp', CFUNCTYPE(c_int, POINTER(BIGNUM), POINTER(BIGNUM), POINTER(RSA))), - ('bn_mod_exp', CFUNCTYPE(c_int, POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BIGNUM), POINTER(BN_CTX), POINTER(BN_MONT_CTX))), - ('init', CFUNCTYPE(c_int, POINTER(RSA))), - ('finish', CFUNCTYPE(c_int, POINTER(RSA))), - ('flags', c_int), - ('app_data', STRING), - ('rsa_sign', CFUNCTYPE(c_int, c_int, POINTER(c_ubyte), c_uint, POINTER(c_ubyte), POINTER(c_uint), POINTER(RSA))), - ('rsa_verify', CFUNCTYPE(c_int, c_int, POINTER(c_ubyte), c_uint, POINTER(c_ubyte), c_uint, POINTER(RSA))), -] -assert sizeof(rsa_meth_st) == 52, sizeof(rsa_meth_st) -assert alignment(rsa_meth_st) == 4, alignment(rsa_meth_st) -RSA_METHOD = rsa_meth_st -rsa_st._fields_ = [ - ('pad', c_int), - ('version', c_long), - ('meth', POINTER(RSA_METHOD)), - ('engine', POINTER(ENGINE)), - ('n', POINTER(BIGNUM)), - ('e', POINTER(BIGNUM)), - ('d', POINTER(BIGNUM)), - ('p', POINTER(BIGNUM)), - ('q', POINTER(BIGNUM)), - ('dmp1', POINTER(BIGNUM)), - ('dmq1', POINTER(BIGNUM)), - ('iqmp', POINTER(BIGNUM)), - ('ex_data', CRYPTO_EX_DATA), - ('references', c_int), - ('flags', c_int), - ('_method_mod_n', POINTER(BN_MONT_CTX)), - ('_method_mod_p', POINTER(BN_MONT_CTX)), - ('_method_mod_q', POINTER(BN_MONT_CTX)), - ('bignum_data', STRING), - ('blinding', POINTER(BN_BLINDING)), -] -assert sizeof(rsa_st) == 84, sizeof(rsa_st) -assert alignment(rsa_st) == 4, alignment(rsa_st) -openssl_fptr = CFUNCTYPE(None) -class SHAstate_st(Structure): - pass -SHAstate_st._fields_ = [ - ('h0', c_uint), - ('h1', c_uint), - ('h2', c_uint), - ('h3', c_uint), - ('h4', c_uint), - ('Nl', c_uint), - ('Nh', c_uint), - ('data', c_uint * 16), - ('num', c_int), -] -assert sizeof(SHAstate_st) == 96, sizeof(SHAstate_st) -assert alignment(SHAstate_st) == 4, alignment(SHAstate_st) -SHA_CTX = SHAstate_st -class ssl_st(Structure): - pass -ssl_crock_st = POINTER(ssl_st) -class ssl_cipher_st(Structure): - pass -ssl_cipher_st._fields_ = [ - ('valid', c_int), - ('name', STRING), - ('id', c_ulong), - ('algorithms', c_ulong), - ('algo_strength', c_ulong), - ('algorithm2', c_ulong), - ('strength_bits', c_int), - ('alg_bits', c_int), - ('mask', c_ulong), - ('mask_strength', c_ulong), -] -assert sizeof(ssl_cipher_st) == 40, sizeof(ssl_cipher_st) -assert alignment(ssl_cipher_st) == 4, alignment(ssl_cipher_st) -SSL_CIPHER = ssl_cipher_st -SSL = ssl_st -class ssl_ctx_st(Structure): - pass -SSL_CTX = ssl_ctx_st -class ssl_method_st(Structure): - pass -class ssl3_enc_method(Structure): - pass -ssl_method_st._fields_ = [ - ('version', c_int), - ('ssl_new', CFUNCTYPE(c_int, POINTER(SSL))), - ('ssl_clear', CFUNCTYPE(None, POINTER(SSL))), - ('ssl_free', CFUNCTYPE(None, POINTER(SSL))), - ('ssl_accept', CFUNCTYPE(c_int, POINTER(SSL))), - ('ssl_connect', CFUNCTYPE(c_int, POINTER(SSL))), - ('ssl_read', CFUNCTYPE(c_int, POINTER(SSL), c_void_p, c_int)), - ('ssl_peek', CFUNCTYPE(c_int, POINTER(SSL), c_void_p, c_int)), - ('ssl_write', CFUNCTYPE(c_int, POINTER(SSL), c_void_p, c_int)), - ('ssl_shutdown', CFUNCTYPE(c_int, POINTER(SSL))), - ('ssl_renegotiate', CFUNCTYPE(c_int, POINTER(SSL))), - ('ssl_renegotiate_check', CFUNCTYPE(c_int, POINTER(SSL))), - ('ssl_ctrl', CFUNCTYPE(c_long, POINTER(SSL), c_int, c_long, c_void_p)), - ('ssl_ctx_ctrl', CFUNCTYPE(c_long, POINTER(SSL_CTX), c_int, c_long, c_void_p)), - ('get_cipher_by_char', CFUNCTYPE(POINTER(SSL_CIPHER), POINTER(c_ubyte))), - ('put_cipher_by_char', CFUNCTYPE(c_int, POINTER(SSL_CIPHER), POINTER(c_ubyte))), - ('ssl_pending', CFUNCTYPE(c_int, POINTER(SSL))), - ('num_ciphers', CFUNCTYPE(c_int)), - ('get_cipher', CFUNCTYPE(POINTER(SSL_CIPHER), c_uint)), - ('get_ssl_method', CFUNCTYPE(POINTER(ssl_method_st), c_int)), - ('get_timeout', CFUNCTYPE(c_long)), - ('ssl3_enc', POINTER(ssl3_enc_method)), - ('ssl_version', CFUNCTYPE(c_int)), - ('ssl_callback_ctrl', CFUNCTYPE(c_long, POINTER(SSL), c_int, CFUNCTYPE(None))), - ('ssl_ctx_callback_ctrl', CFUNCTYPE(c_long, POINTER(SSL_CTX), c_int, CFUNCTYPE(None))), -] -assert sizeof(ssl_method_st) == 100, sizeof(ssl_method_st) -assert alignment(ssl_method_st) == 4, alignment(ssl_method_st) -ssl3_enc_method._fields_ = [ -] -SSL_METHOD = ssl_method_st -class ssl_session_st(Structure): - pass -class sess_cert_st(Structure): - pass -ssl_session_st._fields_ = [ - ('ssl_version', c_int), - ('key_arg_length', c_uint), - ('key_arg', c_ubyte * 8), - ('master_key_length', c_int), - ('master_key', c_ubyte * 48), - ('session_id_length', c_uint), - ('session_id', c_ubyte * 32), - ('sid_ctx_length', c_uint), - ('sid_ctx', c_ubyte * 32), - ('not_resumable', c_int), - ('sess_cert', POINTER(sess_cert_st)), - ('peer', POINTER(X509)), - ('verify_result', c_long), - ('references', c_int), - ('timeout', c_long), - ('time', c_long), - ('compress_meth', c_int), - ('cipher', POINTER(SSL_CIPHER)), - ('cipher_id', c_ulong), - ('ciphers', POINTER(STACK)), - ('ex_data', CRYPTO_EX_DATA), - ('prev', POINTER(ssl_session_st)), - ('next', POINTER(ssl_session_st)), -] -assert sizeof(ssl_session_st) == 200, sizeof(ssl_session_st) -assert alignment(ssl_session_st) == 4, alignment(ssl_session_st) -sess_cert_st._fields_ = [ -] -SSL_SESSION = ssl_session_st -GEN_SESSION_CB = CFUNCTYPE(c_int, POINTER(SSL), POINTER(c_ubyte), POINTER(c_uint)) -class ssl_comp_st(Structure): - pass -ssl_comp_st._fields_ = [ - ('id', c_int), - ('name', STRING), - ('method', POINTER(COMP_METHOD)), -] -assert sizeof(ssl_comp_st) == 12, sizeof(ssl_comp_st) -assert alignment(ssl_comp_st) == 4, alignment(ssl_comp_st) -SSL_COMP = ssl_comp_st -class N10ssl_ctx_st4DOLLAR_18E(Structure): - pass -N10ssl_ctx_st4DOLLAR_18E._fields_ = [ - ('sess_connect', c_int), - ('sess_connect_renegotiate', c_int), - ('sess_connect_good', c_int), - ('sess_accept', c_int), - ('sess_accept_renegotiate', c_int), - ('sess_accept_good', c_int), - ('sess_miss', c_int), - ('sess_timeout', c_int), - ('sess_cache_full', c_int), - ('sess_hit', c_int), - ('sess_cb_hit', c_int), -] -assert sizeof(N10ssl_ctx_st4DOLLAR_18E) == 44, sizeof(N10ssl_ctx_st4DOLLAR_18E) -assert alignment(N10ssl_ctx_st4DOLLAR_18E) == 4, alignment(N10ssl_ctx_st4DOLLAR_18E) -class cert_st(Structure): - pass -ssl_ctx_st._fields_ = [ - ('method', POINTER(SSL_METHOD)), - ('cipher_list', POINTER(STACK)), - ('cipher_list_by_id', POINTER(STACK)), - ('cert_store', POINTER(x509_store_st)), - ('sessions', POINTER(lhash_st)), - ('session_cache_size', c_ulong), - ('session_cache_head', POINTER(ssl_session_st)), - ('session_cache_tail', POINTER(ssl_session_st)), - ('session_cache_mode', c_int), - ('session_timeout', c_long), - ('new_session_cb', CFUNCTYPE(c_int, POINTER(ssl_st), POINTER(SSL_SESSION))), - ('remove_session_cb', CFUNCTYPE(None, POINTER(ssl_ctx_st), POINTER(SSL_SESSION))), - ('get_session_cb', CFUNCTYPE(POINTER(SSL_SESSION), POINTER(ssl_st), POINTER(c_ubyte), c_int, POINTER(c_int))), - ('stats', N10ssl_ctx_st4DOLLAR_18E), - ('references', c_int), - ('app_verify_callback', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX), c_void_p)), - ('app_verify_arg', c_void_p), - ('default_passwd_callback', POINTER(pem_password_cb)), - ('default_passwd_callback_userdata', c_void_p), - ('client_cert_cb', CFUNCTYPE(c_int, POINTER(SSL), POINTER(POINTER(X509)), POINTER(POINTER(EVP_PKEY)))), - ('ex_data', CRYPTO_EX_DATA), - ('rsa_md5', POINTER(EVP_MD)), - ('md5', POINTER(EVP_MD)), - ('sha1', POINTER(EVP_MD)), - ('extra_certs', POINTER(STACK)), - ('comp_methods', POINTER(STACK)), - ('info_callback', CFUNCTYPE(None, POINTER(SSL), c_int, c_int)), - ('client_CA', POINTER(STACK)), - ('options', c_ulong), - ('mode', c_ulong), - ('max_cert_list', c_long), - ('cert', POINTER(cert_st)), - ('read_ahead', c_int), - ('msg_callback', CFUNCTYPE(None, c_int, c_int, c_int, c_void_p, c_ulong, POINTER(SSL), c_void_p)), - ('msg_callback_arg', c_void_p), - ('verify_mode', c_int), - ('verify_depth', c_int), - ('sid_ctx_length', c_uint), - ('sid_ctx', c_ubyte * 32), - ('default_verify_callback', CFUNCTYPE(c_int, c_int, POINTER(X509_STORE_CTX))), - ('generate_session_id', GEN_SESSION_CB), - ('purpose', c_int), - ('trust', c_int), - ('quiet_shutdown', c_int), -] -assert sizeof(ssl_ctx_st) == 248, sizeof(ssl_ctx_st) -assert alignment(ssl_ctx_st) == 4, alignment(ssl_ctx_st) -cert_st._fields_ = [ -] -class ssl2_state_st(Structure): - pass -class ssl3_state_st(Structure): - pass -ssl_st._fields_ = [ - ('version', c_int), - ('type', c_int), - ('method', POINTER(SSL_METHOD)), - ('rbio', POINTER(BIO)), - ('wbio', POINTER(BIO)), - ('bbio', POINTER(BIO)), - ('rwstate', c_int), - ('in_handshake', c_int), - ('handshake_func', CFUNCTYPE(c_int)), - ('server', c_int), - ('new_session', c_int), - ('quiet_shutdown', c_int), - ('shutdown', c_int), - ('state', c_int), - ('rstate', c_int), - ('init_buf', POINTER(BUF_MEM)), - ('init_msg', c_void_p), - ('init_num', c_int), - ('init_off', c_int), - ('packet', POINTER(c_ubyte)), - ('packet_length', c_uint), - ('s2', POINTER(ssl2_state_st)), - ('s3', POINTER(ssl3_state_st)), - ('read_ahead', c_int), - ('msg_callback', CFUNCTYPE(None, c_int, c_int, c_int, c_void_p, c_ulong, POINTER(SSL), c_void_p)), - ('msg_callback_arg', c_void_p), - ('hit', c_int), - ('purpose', c_int), - ('trust', c_int), - ('cipher_list', POINTER(STACK)), - ('cipher_list_by_id', POINTER(STACK)), - ('enc_read_ctx', POINTER(EVP_CIPHER_CTX)), - ('read_hash', POINTER(EVP_MD)), - ('expand', POINTER(COMP_CTX)), - ('enc_write_ctx', POINTER(EVP_CIPHER_CTX)), - ('write_hash', POINTER(EVP_MD)), - ('compress', POINTER(COMP_CTX)), - ('cert', POINTER(cert_st)), - ('sid_ctx_length', c_uint), - ('sid_ctx', c_ubyte * 32), - ('session', POINTER(SSL_SESSION)), - ('generate_session_id', GEN_SESSION_CB), - ('verify_mode', c_int), - ('verify_depth', c_int), - ('verify_callback', CFUNCTYPE(c_int, c_int, POINTER(X509_STORE_CTX))), - ('info_callback', CFUNCTYPE(None, POINTER(SSL), c_int, c_int)), - ('error', c_int), - ('error_code', c_int), - ('ctx', POINTER(SSL_CTX)), - ('debug', c_int), - ('verify_result', c_long), - ('ex_data', CRYPTO_EX_DATA), - ('client_CA', POINTER(STACK)), - ('references', c_int), - ('options', c_ulong), - ('mode', c_ulong), - ('max_cert_list', c_long), - ('first_packet', c_int), - ('client_version', c_int), -] -assert sizeof(ssl_st) == 268, sizeof(ssl_st) -assert alignment(ssl_st) == 4, alignment(ssl_st) -class N13ssl2_state_st4DOLLAR_19E(Structure): - pass -N13ssl2_state_st4DOLLAR_19E._fields_ = [ - ('conn_id_length', c_uint), - ('cert_type', c_uint), - ('cert_length', c_uint), - ('csl', c_uint), - ('clear', c_uint), - ('enc', c_uint), - ('ccl', c_ubyte * 32), - ('cipher_spec_length', c_uint), - ('session_id_length', c_uint), - ('clen', c_uint), - ('rlen', c_uint), -] -assert sizeof(N13ssl2_state_st4DOLLAR_19E) == 72, sizeof(N13ssl2_state_st4DOLLAR_19E) -assert alignment(N13ssl2_state_st4DOLLAR_19E) == 4, alignment(N13ssl2_state_st4DOLLAR_19E) -ssl2_state_st._fields_ = [ - ('three_byte_header', c_int), - ('clear_text', c_int), - ('escape', c_int), - ('ssl2_rollback', c_int), - ('wnum', c_uint), - ('wpend_tot', c_int), - ('wpend_buf', POINTER(c_ubyte)), - ('wpend_off', c_int), - ('wpend_len', c_int), - ('wpend_ret', c_int), - ('rbuf_left', c_int), - ('rbuf_offs', c_int), - ('rbuf', POINTER(c_ubyte)), - ('wbuf', POINTER(c_ubyte)), - ('write_ptr', POINTER(c_ubyte)), - ('padding', c_uint), - ('rlength', c_uint), - ('ract_data_length', c_int), - ('wlength', c_uint), - ('wact_data_length', c_int), - ('ract_data', POINTER(c_ubyte)), - ('wact_data', POINTER(c_ubyte)), - ('mac_data', POINTER(c_ubyte)), - ('read_key', POINTER(c_ubyte)), - ('write_key', POINTER(c_ubyte)), - ('challenge_length', c_uint), - ('challenge', c_ubyte * 32), - ('conn_id_length', c_uint), - ('conn_id', c_ubyte * 16), - ('key_material_length', c_uint), - ('key_material', c_ubyte * 48), - ('read_sequence', c_ulong), - ('write_sequence', c_ulong), - ('tmp', N13ssl2_state_st4DOLLAR_19E), -] -assert sizeof(ssl2_state_st) == 288, sizeof(ssl2_state_st) -assert alignment(ssl2_state_st) == 4, alignment(ssl2_state_st) -SSL2_STATE = ssl2_state_st -class ssl3_record_st(Structure): - pass -ssl3_record_st._fields_ = [ - ('type', c_int), - ('length', c_uint), - ('off', c_uint), - ('data', POINTER(c_ubyte)), - ('input', POINTER(c_ubyte)), - ('comp', POINTER(c_ubyte)), -] -assert sizeof(ssl3_record_st) == 24, sizeof(ssl3_record_st) -assert alignment(ssl3_record_st) == 4, alignment(ssl3_record_st) -SSL3_RECORD = ssl3_record_st -class ssl3_buffer_st(Structure): - pass -size_t = __darwin_size_t -ssl3_buffer_st._fields_ = [ - ('buf', POINTER(c_ubyte)), - ('len', size_t), - ('offset', c_int), - ('left', c_int), -] -assert sizeof(ssl3_buffer_st) == 16, sizeof(ssl3_buffer_st) -assert alignment(ssl3_buffer_st) == 4, alignment(ssl3_buffer_st) -SSL3_BUFFER = ssl3_buffer_st -class N13ssl3_state_st4DOLLAR_20E(Structure): - pass -N13ssl3_state_st4DOLLAR_20E._fields_ = [ - ('cert_verify_md', c_ubyte * 72), - ('finish_md', c_ubyte * 72), - ('finish_md_len', c_int), - ('peer_finish_md', c_ubyte * 72), - ('peer_finish_md_len', c_int), - ('message_size', c_ulong), - ('message_type', c_int), - ('new_cipher', POINTER(SSL_CIPHER)), - ('dh', POINTER(DH)), - ('next_state', c_int), - ('reuse_message', c_int), - ('cert_req', c_int), - ('ctype_num', c_int), - ('ctype', c_char * 7), - ('ca_names', POINTER(STACK)), - ('use_rsa_tmp', c_int), - ('key_block_length', c_int), - ('key_block', POINTER(c_ubyte)), - ('new_sym_enc', POINTER(EVP_CIPHER)), - ('new_hash', POINTER(EVP_MD)), - ('new_compression', POINTER(SSL_COMP)), - ('cert_request', c_int), -] -assert sizeof(N13ssl3_state_st4DOLLAR_20E) == 296, sizeof(N13ssl3_state_st4DOLLAR_20E) -assert alignment(N13ssl3_state_st4DOLLAR_20E) == 4, alignment(N13ssl3_state_st4DOLLAR_20E) -ssl3_state_st._fields_ = [ - ('flags', c_long), - ('delay_buf_pop_ret', c_int), - ('read_sequence', c_ubyte * 8), - ('read_mac_secret', c_ubyte * 36), - ('write_sequence', c_ubyte * 8), - ('write_mac_secret', c_ubyte * 36), - ('server_random', c_ubyte * 32), - ('client_random', c_ubyte * 32), - ('need_empty_fragments', c_int), - ('empty_fragment_done', c_int), - ('rbuf', SSL3_BUFFER), - ('wbuf', SSL3_BUFFER), - ('rrec', SSL3_RECORD), - ('wrec', SSL3_RECORD), - ('alert_fragment', c_ubyte * 2), - ('alert_fragment_len', c_uint), - ('handshake_fragment', c_ubyte * 4), - ('handshake_fragment_len', c_uint), - ('wnum', c_uint), - ('wpend_tot', c_int), - ('wpend_type', c_int), - ('wpend_ret', c_int), - ('wpend_buf', POINTER(c_ubyte)), - ('finish_dgst1', EVP_MD_CTX), - ('finish_dgst2', EVP_MD_CTX), - ('change_cipher_spec', c_int), - ('warn_alert', c_int), - ('fatal_alert', c_int), - ('alert_dispatch', c_int), - ('send_alert', c_ubyte * 2), - ('renegotiate', c_int), - ('total_renegotiations', c_int), - ('num_renegotiations', c_int), - ('in_read_app_data', c_int), - ('tmp', N13ssl3_state_st4DOLLAR_20E), -] -assert sizeof(ssl3_state_st) == 648, sizeof(ssl3_state_st) -assert alignment(ssl3_state_st) == 4, alignment(ssl3_state_st) -SSL3_STATE = ssl3_state_st -stack_st._fields_ = [ - ('num', c_int), - ('data', POINTER(STRING)), - ('sorted', c_int), - ('num_alloc', c_int), - ('comp', CFUNCTYPE(c_int, POINTER(STRING), POINTER(STRING))), -] -assert sizeof(stack_st) == 20, sizeof(stack_st) -assert alignment(stack_st) == 4, alignment(stack_st) -class ui_st(Structure): - pass -ui_st._fields_ = [ -] -UI = ui_st -class ui_method_st(Structure): - pass -ui_method_st._fields_ = [ -] -UI_METHOD = ui_method_st -class ui_string_st(Structure): - pass -ui_string_st._fields_ = [ -] -UI_STRING = ui_string_st - -# values for enumeration 'UI_string_types' -UI_string_types = c_int # enum -class X509_objects_st(Structure): - pass -X509_objects_st._fields_ = [ - ('nid', c_int), - ('a2i', CFUNCTYPE(c_int)), - ('i2a', CFUNCTYPE(c_int)), -] -assert sizeof(X509_objects_st) == 12, sizeof(X509_objects_st) -assert alignment(X509_objects_st) == 4, alignment(X509_objects_st) -X509_OBJECTS = X509_objects_st -X509_algor_st._fields_ = [ - ('algorithm', POINTER(ASN1_OBJECT)), - ('parameter', POINTER(ASN1_TYPE)), -] -assert sizeof(X509_algor_st) == 8, sizeof(X509_algor_st) -assert alignment(X509_algor_st) == 4, alignment(X509_algor_st) -class X509_val_st(Structure): - pass -X509_val_st._fields_ = [ - ('notBefore', POINTER(ASN1_TIME)), - ('notAfter', POINTER(ASN1_TIME)), -] -assert sizeof(X509_val_st) == 8, sizeof(X509_val_st) -assert alignment(X509_val_st) == 4, alignment(X509_val_st) -X509_VAL = X509_val_st -class X509_pubkey_st(Structure): - pass -X509_pubkey_st._fields_ = [ - ('algor', POINTER(X509_ALGOR)), - ('public_key', POINTER(ASN1_BIT_STRING)), - ('pkey', POINTER(EVP_PKEY)), -] -assert sizeof(X509_pubkey_st) == 12, sizeof(X509_pubkey_st) -assert alignment(X509_pubkey_st) == 4, alignment(X509_pubkey_st) -X509_PUBKEY = X509_pubkey_st -class X509_sig_st(Structure): - pass -X509_sig_st._fields_ = [ - ('algor', POINTER(X509_ALGOR)), - ('digest', POINTER(ASN1_OCTET_STRING)), -] -assert sizeof(X509_sig_st) == 8, sizeof(X509_sig_st) -assert alignment(X509_sig_st) == 4, alignment(X509_sig_st) -X509_SIG = X509_sig_st -class X509_name_entry_st(Structure): - pass -X509_name_entry_st._fields_ = [ - ('object', POINTER(ASN1_OBJECT)), - ('value', POINTER(ASN1_STRING)), - ('set', c_int), - ('size', c_int), -] -assert sizeof(X509_name_entry_st) == 16, sizeof(X509_name_entry_st) -assert alignment(X509_name_entry_st) == 4, alignment(X509_name_entry_st) -X509_NAME_ENTRY = X509_name_entry_st -X509_name_st._fields_ = [ - ('entries', POINTER(STACK)), - ('modified', c_int), - ('bytes', POINTER(BUF_MEM)), - ('hash', c_ulong), -] -assert sizeof(X509_name_st) == 16, sizeof(X509_name_st) -assert alignment(X509_name_st) == 4, alignment(X509_name_st) -class X509_extension_st(Structure): - pass -X509_extension_st._fields_ = [ - ('object', POINTER(ASN1_OBJECT)), - ('critical', ASN1_BOOLEAN), - ('value', POINTER(ASN1_OCTET_STRING)), -] -assert sizeof(X509_extension_st) == 12, sizeof(X509_extension_st) -assert alignment(X509_extension_st) == 4, alignment(X509_extension_st) -X509_EXTENSION = X509_extension_st -class x509_attributes_st(Structure): - pass -class N18x509_attributes_st4DOLLAR_13E(Union): - pass -N18x509_attributes_st4DOLLAR_13E._fields_ = [ - ('ptr', STRING), - ('set', POINTER(STACK)), - ('single', POINTER(ASN1_TYPE)), -] -assert sizeof(N18x509_attributes_st4DOLLAR_13E) == 4, sizeof(N18x509_attributes_st4DOLLAR_13E) -assert alignment(N18x509_attributes_st4DOLLAR_13E) == 4, alignment(N18x509_attributes_st4DOLLAR_13E) -x509_attributes_st._fields_ = [ - ('object', POINTER(ASN1_OBJECT)), - ('single', c_int), - ('value', N18x509_attributes_st4DOLLAR_13E), -] -assert sizeof(x509_attributes_st) == 12, sizeof(x509_attributes_st) -assert alignment(x509_attributes_st) == 4, alignment(x509_attributes_st) -X509_ATTRIBUTE = x509_attributes_st -class X509_req_info_st(Structure): - pass -X509_req_info_st._fields_ = [ - ('enc', ASN1_ENCODING), - ('version', POINTER(ASN1_INTEGER)), - ('subject', POINTER(X509_NAME)), - ('pubkey', POINTER(X509_PUBKEY)), - ('attributes', POINTER(STACK)), -] -assert sizeof(X509_req_info_st) == 28, sizeof(X509_req_info_st) -assert alignment(X509_req_info_st) == 4, alignment(X509_req_info_st) -X509_REQ_INFO = X509_req_info_st -class X509_req_st(Structure): - pass -X509_req_st._fields_ = [ - ('req_info', POINTER(X509_REQ_INFO)), - ('sig_alg', POINTER(X509_ALGOR)), - ('signature', POINTER(ASN1_BIT_STRING)), - ('references', c_int), -] -assert sizeof(X509_req_st) == 16, sizeof(X509_req_st) -assert alignment(X509_req_st) == 4, alignment(X509_req_st) -X509_REQ = X509_req_st -class x509_cinf_st(Structure): - pass -x509_cinf_st._fields_ = [ - ('version', POINTER(ASN1_INTEGER)), - ('serialNumber', POINTER(ASN1_INTEGER)), - ('signature', POINTER(X509_ALGOR)), - ('issuer', POINTER(X509_NAME)), - ('validity', POINTER(X509_VAL)), - ('subject', POINTER(X509_NAME)), - ('key', POINTER(X509_PUBKEY)), - ('issuerUID', POINTER(ASN1_BIT_STRING)), - ('subjectUID', POINTER(ASN1_BIT_STRING)), - ('extensions', POINTER(STACK)), -] -assert sizeof(x509_cinf_st) == 40, sizeof(x509_cinf_st) -assert alignment(x509_cinf_st) == 4, alignment(x509_cinf_st) -X509_CINF = x509_cinf_st -class x509_cert_aux_st(Structure): - pass -x509_cert_aux_st._fields_ = [ - ('trust', POINTER(STACK)), - ('reject', POINTER(STACK)), - ('alias', POINTER(ASN1_UTF8STRING)), - ('keyid', POINTER(ASN1_OCTET_STRING)), - ('other', POINTER(STACK)), -] -assert sizeof(x509_cert_aux_st) == 20, sizeof(x509_cert_aux_st) -assert alignment(x509_cert_aux_st) == 4, alignment(x509_cert_aux_st) -X509_CERT_AUX = x509_cert_aux_st -class AUTHORITY_KEYID_st(Structure): - pass -x509_st._fields_ = [ - ('cert_info', POINTER(X509_CINF)), - ('sig_alg', POINTER(X509_ALGOR)), - ('signature', POINTER(ASN1_BIT_STRING)), - ('valid', c_int), - ('references', c_int), - ('name', STRING), - ('ex_data', CRYPTO_EX_DATA), - ('ex_pathlen', c_long), - ('ex_flags', c_ulong), - ('ex_kusage', c_ulong), - ('ex_xkusage', c_ulong), - ('ex_nscert', c_ulong), - ('skid', POINTER(ASN1_OCTET_STRING)), - ('akid', POINTER(AUTHORITY_KEYID_st)), - ('sha1_hash', c_ubyte * 20), - ('aux', POINTER(X509_CERT_AUX)), -] -assert sizeof(x509_st) == 84, sizeof(x509_st) -assert alignment(x509_st) == 4, alignment(x509_st) -AUTHORITY_KEYID_st._fields_ = [ -] -class x509_trust_st(Structure): - pass -x509_trust_st._fields_ = [ - ('trust', c_int), - ('flags', c_int), - ('check_trust', CFUNCTYPE(c_int, POINTER(x509_trust_st), POINTER(X509), c_int)), - ('name', STRING), - ('arg1', c_int), - ('arg2', c_void_p), -] -assert sizeof(x509_trust_st) == 24, sizeof(x509_trust_st) -assert alignment(x509_trust_st) == 4, alignment(x509_trust_st) -X509_TRUST = x509_trust_st -class X509_revoked_st(Structure): - pass -X509_revoked_st._fields_ = [ - ('serialNumber', POINTER(ASN1_INTEGER)), - ('revocationDate', POINTER(ASN1_TIME)), - ('extensions', POINTER(STACK)), - ('sequence', c_int), -] -assert sizeof(X509_revoked_st) == 16, sizeof(X509_revoked_st) -assert alignment(X509_revoked_st) == 4, alignment(X509_revoked_st) -X509_REVOKED = X509_revoked_st -class X509_crl_info_st(Structure): - pass -X509_crl_info_st._fields_ = [ - ('version', POINTER(ASN1_INTEGER)), - ('sig_alg', POINTER(X509_ALGOR)), - ('issuer', POINTER(X509_NAME)), - ('lastUpdate', POINTER(ASN1_TIME)), - ('nextUpdate', POINTER(ASN1_TIME)), - ('revoked', POINTER(STACK)), - ('extensions', POINTER(STACK)), - ('enc', ASN1_ENCODING), -] -assert sizeof(X509_crl_info_st) == 40, sizeof(X509_crl_info_st) -assert alignment(X509_crl_info_st) == 4, alignment(X509_crl_info_st) -X509_CRL_INFO = X509_crl_info_st -X509_crl_st._fields_ = [ - ('crl', POINTER(X509_CRL_INFO)), - ('sig_alg', POINTER(X509_ALGOR)), - ('signature', POINTER(ASN1_BIT_STRING)), - ('references', c_int), -] -assert sizeof(X509_crl_st) == 16, sizeof(X509_crl_st) -assert alignment(X509_crl_st) == 4, alignment(X509_crl_st) -class private_key_st(Structure): - pass -private_key_st._fields_ = [ - ('version', c_int), - ('enc_algor', POINTER(X509_ALGOR)), - ('enc_pkey', POINTER(ASN1_OCTET_STRING)), - ('dec_pkey', POINTER(EVP_PKEY)), - ('key_length', c_int), - ('key_data', STRING), - ('key_free', c_int), - ('cipher', EVP_CIPHER_INFO), - ('references', c_int), -] -assert sizeof(private_key_st) == 52, sizeof(private_key_st) -assert alignment(private_key_st) == 4, alignment(private_key_st) -X509_PKEY = private_key_st -class X509_info_st(Structure): - pass -X509_info_st._fields_ = [ - ('x509', POINTER(X509)), - ('crl', POINTER(X509_CRL)), - ('x_pkey', POINTER(X509_PKEY)), - ('enc_cipher', EVP_CIPHER_INFO), - ('enc_len', c_int), - ('enc_data', STRING), - ('references', c_int), -] -assert sizeof(X509_info_st) == 44, sizeof(X509_info_st) -assert alignment(X509_info_st) == 4, alignment(X509_info_st) -X509_INFO = X509_info_st -class Netscape_spkac_st(Structure): - pass -Netscape_spkac_st._fields_ = [ - ('pubkey', POINTER(X509_PUBKEY)), - ('challenge', POINTER(ASN1_IA5STRING)), -] -assert sizeof(Netscape_spkac_st) == 8, sizeof(Netscape_spkac_st) -assert alignment(Netscape_spkac_st) == 4, alignment(Netscape_spkac_st) -NETSCAPE_SPKAC = Netscape_spkac_st -class Netscape_spki_st(Structure): - pass -Netscape_spki_st._fields_ = [ - ('spkac', POINTER(NETSCAPE_SPKAC)), - ('sig_algor', POINTER(X509_ALGOR)), - ('signature', POINTER(ASN1_BIT_STRING)), -] -assert sizeof(Netscape_spki_st) == 12, sizeof(Netscape_spki_st) -assert alignment(Netscape_spki_st) == 4, alignment(Netscape_spki_st) -NETSCAPE_SPKI = Netscape_spki_st -class Netscape_certificate_sequence(Structure): - pass -Netscape_certificate_sequence._fields_ = [ - ('type', POINTER(ASN1_OBJECT)), - ('certs', POINTER(STACK)), -] -assert sizeof(Netscape_certificate_sequence) == 8, sizeof(Netscape_certificate_sequence) -assert alignment(Netscape_certificate_sequence) == 4, alignment(Netscape_certificate_sequence) -NETSCAPE_CERT_SEQUENCE = Netscape_certificate_sequence -class PBEPARAM_st(Structure): - pass -PBEPARAM_st._fields_ = [ - ('salt', POINTER(ASN1_OCTET_STRING)), - ('iter', POINTER(ASN1_INTEGER)), -] -assert sizeof(PBEPARAM_st) == 8, sizeof(PBEPARAM_st) -assert alignment(PBEPARAM_st) == 4, alignment(PBEPARAM_st) -PBEPARAM = PBEPARAM_st -class PBE2PARAM_st(Structure): - pass -PBE2PARAM_st._fields_ = [ - ('keyfunc', POINTER(X509_ALGOR)), - ('encryption', POINTER(X509_ALGOR)), -] -assert sizeof(PBE2PARAM_st) == 8, sizeof(PBE2PARAM_st) -assert alignment(PBE2PARAM_st) == 4, alignment(PBE2PARAM_st) -PBE2PARAM = PBE2PARAM_st -class PBKDF2PARAM_st(Structure): - pass -PBKDF2PARAM_st._fields_ = [ - ('salt', POINTER(ASN1_TYPE)), - ('iter', POINTER(ASN1_INTEGER)), - ('keylength', POINTER(ASN1_INTEGER)), - ('prf', POINTER(X509_ALGOR)), -] -assert sizeof(PBKDF2PARAM_st) == 16, sizeof(PBKDF2PARAM_st) -assert alignment(PBKDF2PARAM_st) == 4, alignment(PBKDF2PARAM_st) -PBKDF2PARAM = PBKDF2PARAM_st -class pkcs8_priv_key_info_st(Structure): - pass -pkcs8_priv_key_info_st._fields_ = [ - ('broken', c_int), - ('version', POINTER(ASN1_INTEGER)), - ('pkeyalg', POINTER(X509_ALGOR)), - ('pkey', POINTER(ASN1_TYPE)), - ('attributes', POINTER(STACK)), -] -assert sizeof(pkcs8_priv_key_info_st) == 20, sizeof(pkcs8_priv_key_info_st) -assert alignment(pkcs8_priv_key_info_st) == 4, alignment(pkcs8_priv_key_info_st) -PKCS8_PRIV_KEY_INFO = pkcs8_priv_key_info_st -class x509_hash_dir_st(Structure): - pass -x509_hash_dir_st._fields_ = [ - ('num_dirs', c_int), - ('dirs', POINTER(STRING)), - ('dirs_type', POINTER(c_int)), - ('num_dirs_alloced', c_int), -] -assert sizeof(x509_hash_dir_st) == 16, sizeof(x509_hash_dir_st) -assert alignment(x509_hash_dir_st) == 4, alignment(x509_hash_dir_st) -X509_HASH_DIR_CTX = x509_hash_dir_st -class x509_file_st(Structure): - pass -x509_file_st._fields_ = [ - ('num_paths', c_int), - ('num_alloced', c_int), - ('paths', POINTER(STRING)), - ('path_type', POINTER(c_int)), -] -assert sizeof(x509_file_st) == 16, sizeof(x509_file_st) -assert alignment(x509_file_st) == 4, alignment(x509_file_st) -X509_CERT_FILE_CTX = x509_file_st -class x509_object_st(Structure): - pass -class N14x509_object_st4DOLLAR_14E(Union): - pass -N14x509_object_st4DOLLAR_14E._fields_ = [ - ('ptr', STRING), - ('x509', POINTER(X509)), - ('crl', POINTER(X509_CRL)), - ('pkey', POINTER(EVP_PKEY)), -] -assert sizeof(N14x509_object_st4DOLLAR_14E) == 4, sizeof(N14x509_object_st4DOLLAR_14E) -assert alignment(N14x509_object_st4DOLLAR_14E) == 4, alignment(N14x509_object_st4DOLLAR_14E) -x509_object_st._fields_ = [ - ('type', c_int), - ('data', N14x509_object_st4DOLLAR_14E), -] -assert sizeof(x509_object_st) == 8, sizeof(x509_object_st) -assert alignment(x509_object_st) == 4, alignment(x509_object_st) -X509_OBJECT = x509_object_st -class x509_lookup_st(Structure): - pass -X509_LOOKUP = x509_lookup_st -class x509_lookup_method_st(Structure): - pass -x509_lookup_method_st._fields_ = [ - ('name', STRING), - ('new_item', CFUNCTYPE(c_int, POINTER(X509_LOOKUP))), - ('free', CFUNCTYPE(None, POINTER(X509_LOOKUP))), - ('init', CFUNCTYPE(c_int, POINTER(X509_LOOKUP))), - ('shutdown', CFUNCTYPE(c_int, POINTER(X509_LOOKUP))), - ('ctrl', CFUNCTYPE(c_int, POINTER(X509_LOOKUP), c_int, STRING, c_long, POINTER(STRING))), - ('get_by_subject', CFUNCTYPE(c_int, POINTER(X509_LOOKUP), c_int, POINTER(X509_NAME), POINTER(X509_OBJECT))), - ('get_by_issuer_serial', CFUNCTYPE(c_int, POINTER(X509_LOOKUP), c_int, POINTER(X509_NAME), POINTER(ASN1_INTEGER), POINTER(X509_OBJECT))), - ('get_by_fingerprint', CFUNCTYPE(c_int, POINTER(X509_LOOKUP), c_int, POINTER(c_ubyte), c_int, POINTER(X509_OBJECT))), - ('get_by_alias', CFUNCTYPE(c_int, POINTER(X509_LOOKUP), c_int, STRING, c_int, POINTER(X509_OBJECT))), -] -assert sizeof(x509_lookup_method_st) == 40, sizeof(x509_lookup_method_st) -assert alignment(x509_lookup_method_st) == 4, alignment(x509_lookup_method_st) -X509_LOOKUP_METHOD = x509_lookup_method_st -x509_store_st._fields_ = [ - ('cache', c_int), - ('objs', POINTER(STACK)), - ('get_cert_methods', POINTER(STACK)), - ('flags', c_ulong), - ('purpose', c_int), - ('trust', c_int), - ('verify', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX))), - ('verify_cb', CFUNCTYPE(c_int, c_int, POINTER(X509_STORE_CTX))), - ('get_issuer', CFUNCTYPE(c_int, POINTER(POINTER(X509)), POINTER(X509_STORE_CTX), POINTER(X509))), - ('check_issued', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX), POINTER(X509), POINTER(X509))), - ('check_revocation', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX))), - ('get_crl', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX), POINTER(POINTER(X509_CRL)), POINTER(X509))), - ('check_crl', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX), POINTER(X509_CRL))), - ('cert_crl', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX), POINTER(X509_CRL), POINTER(X509))), - ('cleanup', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX))), - ('ex_data', CRYPTO_EX_DATA), - ('references', c_int), - ('depth', c_int), -] -assert sizeof(x509_store_st) == 76, sizeof(x509_store_st) -assert alignment(x509_store_st) == 4, alignment(x509_store_st) -x509_lookup_st._fields_ = [ - ('init', c_int), - ('skip', c_int), - ('method', POINTER(X509_LOOKUP_METHOD)), - ('method_data', STRING), - ('store_ctx', POINTER(X509_STORE)), -] -assert sizeof(x509_lookup_st) == 20, sizeof(x509_lookup_st) -assert alignment(x509_lookup_st) == 4, alignment(x509_lookup_st) -time_t = __darwin_time_t -x509_store_ctx_st._fields_ = [ - ('ctx', POINTER(X509_STORE)), - ('current_method', c_int), - ('cert', POINTER(X509)), - ('untrusted', POINTER(STACK)), - ('purpose', c_int), - ('trust', c_int), - ('check_time', time_t), - ('flags', c_ulong), - ('other_ctx', c_void_p), - ('verify', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX))), - ('verify_cb', CFUNCTYPE(c_int, c_int, POINTER(X509_STORE_CTX))), - ('get_issuer', CFUNCTYPE(c_int, POINTER(POINTER(X509)), POINTER(X509_STORE_CTX), POINTER(X509))), - ('check_issued', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX), POINTER(X509), POINTER(X509))), - ('check_revocation', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX))), - ('get_crl', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX), POINTER(POINTER(X509_CRL)), POINTER(X509))), - ('check_crl', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX), POINTER(X509_CRL))), - ('cert_crl', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX), POINTER(X509_CRL), POINTER(X509))), - ('cleanup', CFUNCTYPE(c_int, POINTER(X509_STORE_CTX))), - ('depth', c_int), - ('valid', c_int), - ('last_untrusted', c_int), - ('chain', POINTER(STACK)), - ('error_depth', c_int), - ('error', c_int), - ('current_cert', POINTER(X509)), - ('current_issuer', POINTER(X509)), - ('current_crl', POINTER(X509_CRL)), - ('ex_data', CRYPTO_EX_DATA), -] -assert sizeof(x509_store_ctx_st) == 116, sizeof(x509_store_ctx_st) -assert alignment(x509_store_ctx_st) == 4, alignment(x509_store_ctx_st) -va_list = __darwin_va_list -__darwin_off_t = __int64_t -fpos_t = __darwin_off_t -class __sbuf(Structure): - pass -__sbuf._fields_ = [ - ('_base', POINTER(c_ubyte)), - ('_size', c_int), -] -assert sizeof(__sbuf) == 8, sizeof(__sbuf) -assert alignment(__sbuf) == 4, alignment(__sbuf) -class __sFILEX(Structure): - pass -__sFILEX._fields_ = [ -] -class __sFILE(Structure): - pass -__sFILE._pack_ = 4 -__sFILE._fields_ = [ - ('_p', POINTER(c_ubyte)), - ('_r', c_int), - ('_w', c_int), - ('_flags', c_short), - ('_file', c_short), - ('_bf', __sbuf), - ('_lbfsize', c_int), - ('_cookie', c_void_p), - ('_close', CFUNCTYPE(c_int, c_void_p)), - ('_read', CFUNCTYPE(c_int, c_void_p, STRING, c_int)), - ('_seek', CFUNCTYPE(fpos_t, c_void_p, c_longlong, c_int)), - ('_write', CFUNCTYPE(c_int, c_void_p, STRING, c_int)), - ('_ub', __sbuf), - ('_extra', POINTER(__sFILEX)), - ('_ur', c_int), - ('_ubuf', c_ubyte * 3), - ('_nbuf', c_ubyte * 1), - ('_lb', __sbuf), - ('_blksize', c_int), - ('_offset', fpos_t), -] -assert sizeof(__sFILE) == 88, sizeof(__sFILE) -assert alignment(__sFILE) == 4, alignment(__sFILE) -FILE = __sFILE -ct_rune_t = __darwin_ct_rune_t -rune_t = __darwin_rune_t -class div_t(Structure): - pass -div_t._fields_ = [ - ('quot', c_int), - ('rem', c_int), -] -assert sizeof(div_t) == 8, sizeof(div_t) -assert alignment(div_t) == 4, alignment(div_t) -class ldiv_t(Structure): - pass -ldiv_t._fields_ = [ - ('quot', c_long), - ('rem', c_long), -] -assert sizeof(ldiv_t) == 8, sizeof(ldiv_t) -assert alignment(ldiv_t) == 4, alignment(ldiv_t) -class lldiv_t(Structure): - pass -lldiv_t._pack_ = 4 -lldiv_t._fields_ = [ - ('quot', c_longlong), - ('rem', c_longlong), -] -assert sizeof(lldiv_t) == 16, sizeof(lldiv_t) -assert alignment(lldiv_t) == 4, alignment(lldiv_t) -__darwin_dev_t = __int32_t -dev_t = __darwin_dev_t -__darwin_mode_t = __uint16_t -mode_t = __darwin_mode_t -class mcontext(Structure): - pass -mcontext._fields_ = [ -] -class mcontext64(Structure): - pass -mcontext64._fields_ = [ -] -class __darwin_pthread_handler_rec(Structure): - pass -__darwin_pthread_handler_rec._fields_ = [ - ('__routine', CFUNCTYPE(None, c_void_p)), - ('__arg', c_void_p), - ('__next', POINTER(__darwin_pthread_handler_rec)), -] -assert sizeof(__darwin_pthread_handler_rec) == 12, sizeof(__darwin_pthread_handler_rec) -assert alignment(__darwin_pthread_handler_rec) == 4, alignment(__darwin_pthread_handler_rec) -class _opaque_pthread_attr_t(Structure): - pass -_opaque_pthread_attr_t._fields_ = [ - ('__sig', c_long), - ('__opaque', c_char * 36), -] -assert sizeof(_opaque_pthread_attr_t) == 40, sizeof(_opaque_pthread_attr_t) -assert alignment(_opaque_pthread_attr_t) == 4, alignment(_opaque_pthread_attr_t) -class _opaque_pthread_cond_t(Structure): - pass -_opaque_pthread_cond_t._fields_ = [ - ('__sig', c_long), - ('__opaque', c_char * 24), -] -assert sizeof(_opaque_pthread_cond_t) == 28, sizeof(_opaque_pthread_cond_t) -assert alignment(_opaque_pthread_cond_t) == 4, alignment(_opaque_pthread_cond_t) -class _opaque_pthread_condattr_t(Structure): - pass -_opaque_pthread_condattr_t._fields_ = [ - ('__sig', c_long), - ('__opaque', c_char * 4), -] -assert sizeof(_opaque_pthread_condattr_t) == 8, sizeof(_opaque_pthread_condattr_t) -assert alignment(_opaque_pthread_condattr_t) == 4, alignment(_opaque_pthread_condattr_t) -class _opaque_pthread_mutex_t(Structure): - pass -_opaque_pthread_mutex_t._fields_ = [ - ('__sig', c_long), - ('__opaque', c_char * 40), -] -assert sizeof(_opaque_pthread_mutex_t) == 44, sizeof(_opaque_pthread_mutex_t) -assert alignment(_opaque_pthread_mutex_t) == 4, alignment(_opaque_pthread_mutex_t) -class _opaque_pthread_mutexattr_t(Structure): - pass -_opaque_pthread_mutexattr_t._fields_ = [ - ('__sig', c_long), - ('__opaque', c_char * 8), -] -assert sizeof(_opaque_pthread_mutexattr_t) == 12, sizeof(_opaque_pthread_mutexattr_t) -assert alignment(_opaque_pthread_mutexattr_t) == 4, alignment(_opaque_pthread_mutexattr_t) -class _opaque_pthread_once_t(Structure): - pass -_opaque_pthread_once_t._fields_ = [ - ('__sig', c_long), - ('__opaque', c_char * 4), -] -assert sizeof(_opaque_pthread_once_t) == 8, sizeof(_opaque_pthread_once_t) -assert alignment(_opaque_pthread_once_t) == 4, alignment(_opaque_pthread_once_t) -class _opaque_pthread_rwlock_t(Structure): - pass -_opaque_pthread_rwlock_t._fields_ = [ - ('__sig', c_long), - ('__opaque', c_char * 124), -] -assert sizeof(_opaque_pthread_rwlock_t) == 128, sizeof(_opaque_pthread_rwlock_t) -assert alignment(_opaque_pthread_rwlock_t) == 4, alignment(_opaque_pthread_rwlock_t) -class _opaque_pthread_rwlockattr_t(Structure): - pass -_opaque_pthread_rwlockattr_t._fields_ = [ - ('__sig', c_long), - ('__opaque', c_char * 12), -] -assert sizeof(_opaque_pthread_rwlockattr_t) == 16, sizeof(_opaque_pthread_rwlockattr_t) -assert alignment(_opaque_pthread_rwlockattr_t) == 4, alignment(_opaque_pthread_rwlockattr_t) -class _opaque_pthread_t(Structure): - pass -_opaque_pthread_t._fields_ = [ - ('__sig', c_long), - ('__cleanup_stack', POINTER(__darwin_pthread_handler_rec)), - ('__opaque', c_char * 596), -] -assert sizeof(_opaque_pthread_t) == 604, sizeof(_opaque_pthread_t) -assert alignment(_opaque_pthread_t) == 4, alignment(_opaque_pthread_t) -__darwin_blkcnt_t = __int64_t -__darwin_blksize_t = __int32_t -__darwin_fsblkcnt_t = c_uint -__darwin_fsfilcnt_t = c_uint -__darwin_gid_t = __uint32_t -__darwin_id_t = __uint32_t -__darwin_ino_t = __uint32_t -__darwin_mach_port_name_t = __darwin_natural_t -__darwin_mach_port_t = __darwin_mach_port_name_t -__darwin_mcontext_t = POINTER(mcontext) -__darwin_mcontext64_t = POINTER(mcontext64) -__darwin_pid_t = __int32_t -__darwin_pthread_attr_t = _opaque_pthread_attr_t -__darwin_pthread_cond_t = _opaque_pthread_cond_t -__darwin_pthread_condattr_t = _opaque_pthread_condattr_t -__darwin_pthread_key_t = c_ulong -__darwin_pthread_mutex_t = _opaque_pthread_mutex_t -__darwin_pthread_mutexattr_t = _opaque_pthread_mutexattr_t -__darwin_pthread_once_t = _opaque_pthread_once_t -__darwin_pthread_rwlock_t = _opaque_pthread_rwlock_t -__darwin_pthread_rwlockattr_t = _opaque_pthread_rwlockattr_t -__darwin_pthread_t = POINTER(_opaque_pthread_t) -__darwin_sigset_t = __uint32_t -__darwin_suseconds_t = __int32_t -__darwin_uid_t = __uint32_t -__darwin_useconds_t = __uint32_t -__darwin_uuid_t = c_ubyte * 16 -class sigaltstack(Structure): - pass -sigaltstack._fields_ = [ - ('ss_sp', c_void_p), - ('ss_size', __darwin_size_t), - ('ss_flags', c_int), -] -assert sizeof(sigaltstack) == 12, sizeof(sigaltstack) -assert alignment(sigaltstack) == 4, alignment(sigaltstack) -__darwin_stack_t = sigaltstack -class ucontext(Structure): - pass -ucontext._fields_ = [ - ('uc_onstack', c_int), - ('uc_sigmask', __darwin_sigset_t), - ('uc_stack', __darwin_stack_t), - ('uc_link', POINTER(ucontext)), - ('uc_mcsize', __darwin_size_t), - ('uc_mcontext', __darwin_mcontext_t), -] -assert sizeof(ucontext) == 32, sizeof(ucontext) -assert alignment(ucontext) == 4, alignment(ucontext) -__darwin_ucontext_t = ucontext -class ucontext64(Structure): - pass -ucontext64._fields_ = [ - ('uc_onstack', c_int), - ('uc_sigmask', __darwin_sigset_t), - ('uc_stack', __darwin_stack_t), - ('uc_link', POINTER(ucontext64)), - ('uc_mcsize', __darwin_size_t), - ('uc_mcontext64', __darwin_mcontext64_t), -] -assert sizeof(ucontext64) == 32, sizeof(ucontext64) -assert alignment(ucontext64) == 4, alignment(ucontext64) -__darwin_ucontext64_t = ucontext64 -class timeval(Structure): - pass -timeval._fields_ = [ - ('tv_sec', __darwin_time_t), - ('tv_usec', __darwin_suseconds_t), -] -assert sizeof(timeval) == 8, sizeof(timeval) -assert alignment(timeval) == 4, alignment(timeval) -rlim_t = __int64_t -class rusage(Structure): - pass -rusage._fields_ = [ - ('ru_utime', timeval), - ('ru_stime', timeval), - ('ru_maxrss', c_long), - ('ru_ixrss', c_long), - ('ru_idrss', c_long), - ('ru_isrss', c_long), - ('ru_minflt', c_long), - ('ru_majflt', c_long), - ('ru_nswap', c_long), - ('ru_inblock', c_long), - ('ru_oublock', c_long), - ('ru_msgsnd', c_long), - ('ru_msgrcv', c_long), - ('ru_nsignals', c_long), - ('ru_nvcsw', c_long), - ('ru_nivcsw', c_long), -] -assert sizeof(rusage) == 72, sizeof(rusage) -assert alignment(rusage) == 4, alignment(rusage) -class rlimit(Structure): - pass -rlimit._pack_ = 4 -rlimit._fields_ = [ - ('rlim_cur', rlim_t), - ('rlim_max', rlim_t), -] -assert sizeof(rlimit) == 16, sizeof(rlimit) -assert alignment(rlimit) == 4, alignment(rlimit) -mcontext_t = __darwin_mcontext_t -mcontext64_t = __darwin_mcontext64_t -pthread_attr_t = __darwin_pthread_attr_t -sigset_t = __darwin_sigset_t -ucontext_t = __darwin_ucontext_t -ucontext64_t = __darwin_ucontext64_t -uid_t = __darwin_uid_t -class sigval(Union): - pass -sigval._fields_ = [ - ('sival_int', c_int), - ('sival_ptr', c_void_p), -] -assert sizeof(sigval) == 4, sizeof(sigval) -assert alignment(sigval) == 4, alignment(sigval) -class sigevent(Structure): - pass -sigevent._fields_ = [ - ('sigev_notify', c_int), - ('sigev_signo', c_int), - ('sigev_value', sigval), - ('sigev_notify_function', CFUNCTYPE(None, sigval)), - ('sigev_notify_attributes', POINTER(pthread_attr_t)), -] -assert sizeof(sigevent) == 20, sizeof(sigevent) -assert alignment(sigevent) == 4, alignment(sigevent) -class __siginfo(Structure): - pass -pid_t = __darwin_pid_t -__siginfo._fields_ = [ - ('si_signo', c_int), - ('si_errno', c_int), - ('si_code', c_int), - ('si_pid', pid_t), - ('si_uid', uid_t), - ('si_status', c_int), - ('si_addr', c_void_p), - ('si_value', sigval), - ('si_band', c_long), - ('pad', c_ulong * 7), -] -assert sizeof(__siginfo) == 64, sizeof(__siginfo) -assert alignment(__siginfo) == 4, alignment(__siginfo) -siginfo_t = __siginfo -class __sigaction_u(Union): - pass -__sigaction_u._fields_ = [ - ('__sa_handler', CFUNCTYPE(None, c_int)), - ('__sa_sigaction', CFUNCTYPE(None, c_int, POINTER(__siginfo), c_void_p)), -] -assert sizeof(__sigaction_u) == 4, sizeof(__sigaction_u) -assert alignment(__sigaction_u) == 4, alignment(__sigaction_u) -class __sigaction(Structure): - pass -__sigaction._fields_ = [ - ('__sigaction_u', __sigaction_u), - ('sa_tramp', CFUNCTYPE(None, c_void_p, c_int, c_int, POINTER(siginfo_t), c_void_p)), - ('sa_mask', sigset_t), - ('sa_flags', c_int), -] -assert sizeof(__sigaction) == 16, sizeof(__sigaction) -assert alignment(__sigaction) == 4, alignment(__sigaction) -class sigaction(Structure): - pass -sigaction._fields_ = [ - ('__sigaction_u', __sigaction_u), - ('sa_mask', sigset_t), - ('sa_flags', c_int), -] -assert sizeof(sigaction) == 12, sizeof(sigaction) -assert alignment(sigaction) == 4, alignment(sigaction) -sig_t = CFUNCTYPE(None, c_int) -stack_t = __darwin_stack_t -class sigvec(Structure): - pass -sigvec._fields_ = [ - ('sv_handler', CFUNCTYPE(None, c_int)), - ('sv_mask', c_int), - ('sv_flags', c_int), -] -assert sizeof(sigvec) == 12, sizeof(sigvec) -assert alignment(sigvec) == 4, alignment(sigvec) -class sigstack(Structure): - pass -sigstack._fields_ = [ - ('ss_sp', STRING), - ('ss_onstack', c_int), -] -assert sizeof(sigstack) == 8, sizeof(sigstack) -assert alignment(sigstack) == 4, alignment(sigstack) -u_char = c_ubyte -u_short = c_ushort -u_int = c_uint -u_long = c_ulong -ushort = c_ushort -uint = c_uint -u_quad_t = u_int64_t -quad_t = int64_t -qaddr_t = POINTER(quad_t) -caddr_t = STRING -daddr_t = int32_t -fixpt_t = u_int32_t -blkcnt_t = __darwin_blkcnt_t -blksize_t = __darwin_blksize_t -gid_t = __darwin_gid_t -in_addr_t = __uint32_t -in_port_t = __uint16_t -ino_t = __darwin_ino_t -key_t = __int32_t -nlink_t = __uint16_t -off_t = __darwin_off_t -segsz_t = int32_t -swblk_t = int32_t -clock_t = __darwin_clock_t -ssize_t = __darwin_ssize_t -useconds_t = __darwin_useconds_t -suseconds_t = __darwin_suseconds_t -fd_mask = __int32_t -class fd_set(Structure): - pass -fd_set._fields_ = [ - ('fds_bits', __int32_t * 32), -] -assert sizeof(fd_set) == 128, sizeof(fd_set) -assert alignment(fd_set) == 4, alignment(fd_set) -pthread_cond_t = __darwin_pthread_cond_t -pthread_condattr_t = __darwin_pthread_condattr_t -pthread_mutex_t = __darwin_pthread_mutex_t -pthread_mutexattr_t = __darwin_pthread_mutexattr_t -pthread_once_t = __darwin_pthread_once_t -pthread_rwlock_t = __darwin_pthread_rwlock_t -pthread_rwlockattr_t = __darwin_pthread_rwlockattr_t -pthread_t = __darwin_pthread_t -pthread_key_t = __darwin_pthread_key_t -fsblkcnt_t = __darwin_fsblkcnt_t -fsfilcnt_t = __darwin_fsfilcnt_t - -# values for enumeration 'idtype_t' -idtype_t = c_int # enum -id_t = __darwin_id_t -class wait(Union): - pass -class N4wait3DOLLAR_3E(Structure): - pass -N4wait3DOLLAR_3E._fields_ = [ - ('w_Termsig', c_uint, 7), - ('w_Coredump', c_uint, 1), - ('w_Retcode', c_uint, 8), - ('w_Filler', c_uint, 16), -] -assert sizeof(N4wait3DOLLAR_3E) == 4, sizeof(N4wait3DOLLAR_3E) -assert alignment(N4wait3DOLLAR_3E) == 4, alignment(N4wait3DOLLAR_3E) -class N4wait3DOLLAR_4E(Structure): - pass -N4wait3DOLLAR_4E._fields_ = [ - ('w_Stopval', c_uint, 8), - ('w_Stopsig', c_uint, 8), - ('w_Filler', c_uint, 16), -] -assert sizeof(N4wait3DOLLAR_4E) == 4, sizeof(N4wait3DOLLAR_4E) -assert alignment(N4wait3DOLLAR_4E) == 4, alignment(N4wait3DOLLAR_4E) -wait._fields_ = [ - ('w_status', c_int), - ('w_T', N4wait3DOLLAR_3E), - ('w_S', N4wait3DOLLAR_4E), -] -assert sizeof(wait) == 4, sizeof(wait) -assert alignment(wait) == 4, alignment(wait) -class timespec(Structure): - pass -timespec._fields_ = [ - ('tv_sec', time_t), - ('tv_nsec', c_long), -] -assert sizeof(timespec) == 8, sizeof(timespec) -assert alignment(timespec) == 4, alignment(timespec) -class tm(Structure): - pass -tm._fields_ = [ - ('tm_sec', c_int), - ('tm_min', c_int), - ('tm_hour', c_int), - ('tm_mday', c_int), - ('tm_mon', c_int), - ('tm_year', c_int), - ('tm_wday', c_int), - ('tm_yday', c_int), - ('tm_isdst', c_int), - ('tm_gmtoff', c_long), - ('tm_zone', STRING), -] -assert sizeof(tm) == 44, sizeof(tm) -assert alignment(tm) == 4, alignment(tm) -__gnuc_va_list = STRING -ptrdiff_t = c_int -int8_t = c_byte -int16_t = c_short -uint8_t = c_ubyte -uint16_t = c_ushort -uint32_t = c_uint -uint64_t = c_ulonglong -int_least8_t = int8_t -int_least16_t = int16_t -int_least32_t = int32_t -int_least64_t = int64_t -uint_least8_t = uint8_t -uint_least16_t = uint16_t -uint_least32_t = uint32_t -uint_least64_t = uint64_t -int_fast8_t = int8_t -int_fast16_t = int16_t -int_fast32_t = int32_t -int_fast64_t = int64_t -uint_fast8_t = uint8_t -uint_fast16_t = uint16_t -uint_fast32_t = uint32_t -uint_fast64_t = uint64_t -intptr_t = c_long -uintptr_t = c_ulong -intmax_t = c_longlong -uintmax_t = c_ulonglong -__all__ = ['ENGINE', 'pkcs7_enc_content_st', '__int16_t', - 'X509_REVOKED', 'SSL_CTX', 'UIT_BOOLEAN', - '__darwin_time_t', 'ucontext64_t', 'int_fast32_t', - 'pem_ctx_st', 'uint8_t', 'fpos_t', 'X509', 'COMP_CTX', - 'tm', 'N10pem_ctx_st4DOLLAR_17E', 'swblk_t', - 'ASN1_TEMPLATE', '__darwin_pthread_t', 'fixpt_t', - 'BIO_METHOD', 'ASN1_PRINTABLESTRING', 'EVP_ENCODE_CTX', - 'dh_method', 'bio_f_buffer_ctx_struct', 'in_port_t', - 'X509_SIG', '__darwin_ssize_t', '__darwin_sigset_t', - 'wait', 'uint_fast16_t', 'N12asn1_type_st4DOLLAR_11E', - 'uint_least8_t', 'pthread_rwlock_t', 'ASN1_IA5STRING', - 'fsfilcnt_t', 'ucontext', '__uint64_t', 'timespec', - 'x509_cinf_st', 'COMP_METHOD', 'MD5_CTX', 'buf_mem_st', - 'ASN1_ENCODING_st', 'PBEPARAM', 'X509_NAME_ENTRY', - '__darwin_va_list', 'ucontext_t', 'lhash_st', - 'N4wait3DOLLAR_4E', '__darwin_uuid_t', - '_ossl_old_des_ks_struct', 'id_t', 'ASN1_BIT_STRING', - 'va_list', '__darwin_wchar_t', 'pthread_key_t', - 'pkcs7_signer_info_st', 'ASN1_METHOD', 'DSA_SIG', 'DSA', - 'UIT_NONE', 'pthread_t', '__darwin_useconds_t', - 'uint_fast8_t', 'UI_STRING', 'DES_cblock', - '__darwin_mcontext64_t', 'rlim_t', 'PEM_Encode_Seal_st', - 'SHAstate_st', 'u_quad_t', 'openssl_fptr', - '_opaque_pthread_rwlockattr_t', - 'N18x509_attributes_st4DOLLAR_13E', - '__darwin_pthread_rwlock_t', 'daddr_t', 'ui_string_st', - 'x509_file_st', 'X509_req_info_st', 'int_least64_t', - 'evp_Encode_Ctx_st', 'X509_OBJECTS', 'CRYPTO_EX_DATA', - '__int8_t', 'AUTHORITY_KEYID_st', '_opaque_pthread_attr_t', - 'sigstack', 'EVP_CIPHER_CTX', 'X509_extension_st', 'pid_t', - 'RSA_METHOD', 'PEM_USER', 'pem_recip_st', 'env_md_ctx_st', - 'rc5_key_st', 'ui_st', 'X509_PUBKEY', 'u_int8_t', - 'ASN1_ITEM_st', 'pkcs7_recip_info_st', 'ssl2_state_st', - 'off_t', 'N10ssl_ctx_st4DOLLAR_18E', 'crypto_ex_data_st', - 'ui_method_st', '__darwin_pthread_rwlockattr_t', - 'CRYPTO_EX_dup', '__darwin_ino_t', '__sFILE', - 'OSUnknownByteOrder', 'BN_MONT_CTX', 'ASN1_NULL', 'time_t', - 'CRYPTO_EX_new', 'asn1_type_st', 'CRYPTO_EX_DATA_FUNCS', - 'user_time_t', 'BIGNUM', 'pthread_rwlockattr_t', - 'ASN1_VALUE_st', 'DH_METHOD', '__darwin_off_t', - '_opaque_pthread_t', 'bn_blinding_st', 'RSA', 'ssize_t', - 'mcontext64_t', 'user_long_t', 'fsblkcnt_t', 'cert_st', - '__darwin_pthread_condattr_t', 'X509_PKEY', - '__darwin_id_t', '__darwin_nl_item', 'SSL2_STATE', 'FILE', - 'pthread_mutexattr_t', 'size_t', - '_ossl_old_des_key_schedule', 'pkcs7_issuer_and_serial_st', - 'sigval', 'CRYPTO_MEM_LEAK_CB', 'X509_NAME', 'blkcnt_t', - 'uint_least16_t', '__darwin_dev_t', 'evp_cipher_info_st', - 'BN_BLINDING', 'ssl3_state_st', 'uint_least64_t', - 'user_addr_t', 'DES_key_schedule', 'RIPEMD160_CTX', - 'u_char', 'X509_algor_st', 'uid_t', 'sess_cert_st', - 'u_int64_t', 'u_int16_t', 'sigset_t', '__darwin_ptrdiff_t', - 'ASN1_CTX', 'STACK', '__int32_t', 'UI_METHOD', - 'NETSCAPE_SPKI', 'UIT_PROMPT', 'st_CRYPTO_EX_DATA_IMPL', - 'cast_key_st', 'X509_HASH_DIR_CTX', 'sigevent', - 'user_ssize_t', 'clock_t', 'aes_key_st', - '__darwin_socklen_t', '__darwin_intptr_t', 'int_fast64_t', - 'asn1_string_table_st', 'uint_fast32_t', - 'ASN1_VISIBLESTRING', 'DSA_SIG_st', 'obj_name_st', - 'X509_LOOKUP_METHOD', 'u_int32_t', 'EVP_CIPHER_INFO', - '__gnuc_va_list', 'AES_KEY', 'PKCS7_ISSUER_AND_SERIAL', - 'BN_CTX', '__darwin_blkcnt_t', 'key_t', 'SHA_CTX', - 'pkcs7_signed_st', 'SSL', 'N10pem_ctx_st4DOLLAR_16E', - 'pthread_attr_t', 'EVP_MD', 'uint', 'ASN1_BOOLEAN', - 'ino_t', '__darwin_clock_t', 'ASN1_OCTET_STRING', - 'asn1_ctx_st', 'BIO_F_BUFFER_CTX', 'bn_mont_ctx_st', - 'X509_REQ_INFO', 'PEM_CTX', 'sigvec', - '__darwin_pthread_mutexattr_t', 'x509_attributes_st', - 'stack_t', '__darwin_mode_t', '__mbstate_t', - 'asn1_object_st', 'ASN1_ENCODING', '__uint8_t', - 'LHASH_NODE', 'PKCS7_SIGNER_INFO', 'asn1_method_st', - 'stack_st', 'bio_info_cb', 'div_t', 'UIT_VERIFY', - 'PBEPARAM_st', 'N4wait3DOLLAR_3E', 'quad_t', '__siginfo', - '__darwin_mbstate_t', 'rsa_st', 'ASN1_UNIVERSALSTRING', - 'uint64_t', 'ssl_comp_st', 'X509_OBJECT', 'pthread_cond_t', - 'DH', '__darwin_wctype_t', 'PKCS7_ENVELOPE', 'ASN1_TLC_st', - 'sig_atomic_t', 'BIO', 'nlink_t', 'BUF_MEM', 'SSL3_RECORD', - 'bio_method_st', 'timeval', 'UI_string_types', 'BIO_dummy', - 'ssl_ctx_st', 'NETSCAPE_CERT_SEQUENCE', - 'BIT_STRING_BITNAME_st', '__darwin_pthread_attr_t', - 'int8_t', '__darwin_wint_t', 'OBJ_NAME', - 'PKCS8_PRIV_KEY_INFO', 'PBE2PARAM_st', - 'LHASH_DOALL_FN_TYPE', 'x509_st', 'X509_VAL', 'dev_t', - 'ASN1_TEMPLATE_st', 'MD5state_st', '__uint16_t', - 'LHASH_DOALL_ARG_FN_TYPE', 'mdc2_ctx_st', 'SSL3_STATE', - 'ssl3_buffer_st', 'ASN1_ITEM_EXP', - '_opaque_pthread_condattr_t', 'mode_t', 'ASN1_VALUE', - 'qaddr_t', '__darwin_gid_t', 'EVP_PKEY', 'CRYPTO_EX_free', - '_ossl_old_des_cblock', 'X509_INFO', 'asn1_string_st', - 'intptr_t', 'UIT_INFO', 'int_fast8_t', 'sigaltstack', - 'env_md_st', 'LHASH', '__darwin_ucontext_t', - 'PKCS7_SIGN_ENVELOPE', '__darwin_mcontext_t', 'ct_rune_t', - 'MD2_CTX', 'pthread_once_t', 'SSL3_BUFFER', 'fd_mask', - 'ASN1_TYPE', 'PKCS7_SIGNED', 'ssl3_record_st', 'BF_KEY', - 'MD4state_st', 'MD4_CTX', 'int16_t', 'SSL_CIPHER', - 'rune_t', 'X509_TRUST', 'siginfo_t', 'X509_STORE', - '__sbuf', 'X509_STORE_CTX', '__darwin_blksize_t', 'ldiv_t', - 'ASN1_TIME', 'SSL_METHOD', 'X509_LOOKUP', - 'Netscape_spki_st', 'P_PID', 'sigaction', 'sig_t', - 'hostent', 'x509_cert_aux_st', '_opaque_pthread_cond_t', - 'segsz_t', 'ushort', '__darwin_ct_rune_t', 'fd_set', - 'BN_RECP_CTX', 'x509_lookup_st', 'uint16_t', 'pkcs7_st', - 'asn1_header_st', '__darwin_pthread_key_t', - 'x509_trust_st', '__darwin_pthread_handler_rec', 'int32_t', - 'X509_CRL_INFO', 'N11evp_pkey_st4DOLLAR_12E', 'MDC2_CTX', - 'N23_ossl_old_des_ks_struct4DOLLAR_10E', 'ASN1_HEADER', - 'X509_crl_info_st', 'LHASH_HASH_FN_TYPE', - '_opaque_pthread_mutexattr_t', 'ssl_st', - 'N8pkcs7_st4DOLLAR_15E', 'evp_pkey_st', - 'pkcs7_signedandenveloped_st', '__darwin_mach_port_t', - 'EVP_PBE_KEYGEN', '_opaque_pthread_mutex_t', - 'ASN1_UTCTIME', 'mcontext', 'crypto_ex_data_func_st', - 'u_long', 'PBKDF2PARAM_st', 'rc4_key_st', 'DSA_METHOD', - 'EVP_CIPHER', 'BIT_STRING_BITNAME', 'PKCS7_RECIP_INFO', - 'ssl3_enc_method', 'X509_CERT_AUX', 'uintmax_t', - 'int_fast16_t', 'RC5_32_KEY', 'ucontext64', 'ASN1_INTEGER', - 'u_short', 'N14x509_object_st4DOLLAR_14E', 'mcontext64', - 'X509_sig_st', 'ASN1_GENERALSTRING', 'PKCS7', '__sFILEX', - 'X509_name_entry_st', 'ssl_session_st', 'caddr_t', - 'bignum_st', 'X509_CINF', '__darwin_pthread_cond_t', - 'ASN1_TLC', 'PKCS7_ENCRYPT', 'NETSCAPE_SPKAC', - 'Netscape_spkac_st', 'idtype_t', 'UIT_ERROR', - 'uint_fast64_t', 'in_addr_t', 'pthread_mutex_t', - '__int64_t', 'ASN1_BMPSTRING', 'uint32_t', - 'PEM_ENCODE_SEAL_CTX', 'suseconds_t', 'ASN1_OBJECT', - 'X509_val_st', 'private_key_st', 'CRYPTO_dynlock', - 'X509_objects_st', 'CRYPTO_EX_DATA_IMPL', - 'pthread_condattr_t', 'PKCS7_DIGEST', 'uint_least32_t', - 'ASN1_STRING', '__uint32_t', 'P_PGID', 'rsa_meth_st', - 'X509_crl_st', 'RC2_KEY', '__darwin_fsfilcnt_t', - 'X509_revoked_st', 'PBE2PARAM', 'blksize_t', - 'Netscape_certificate_sequence', 'ssl_cipher_st', - 'bignum_ctx', 'register_t', 'ASN1_UTF8STRING', - 'pkcs7_encrypted_st', 'RC4_KEY', '__darwin_ucontext64_t', - 'N13ssl2_state_st4DOLLAR_19E', 'bn_recp_ctx_st', - 'CAST_KEY', 'X509_ATTRIBUTE', '__darwin_suseconds_t', - '__sigaction', 'user_ulong_t', 'syscall_arg_t', - 'evp_cipher_ctx_st', 'X509_ALGOR', 'mcontext_t', - 'const_DES_cblock', '__darwin_fsblkcnt_t', 'dsa_st', - 'int_least8_t', 'MD2state_st', 'X509_EXTENSION', - 'GEN_SESSION_CB', 'int_least16_t', '__darwin_wctrans_t', - 'PBKDF2PARAM', 'x509_lookup_method_st', 'pem_password_cb', - 'X509_info_st', 'x509_store_st', '__darwin_natural_t', - 'X509_pubkey_st', 'pkcs7_digest_st', '__darwin_size_t', - 'ASN1_STRING_TABLE', 'OSLittleEndian', 'RIPEMD160state_st', - 'pkcs7_enveloped_st', 'UI', 'ptrdiff_t', 'X509_REQ', - 'CRYPTO_dynlock_value', 'X509_req_st', 'x509_store_ctx_st', - 'N13ssl3_state_st4DOLLAR_20E', 'lhash_node_st', - '__darwin_pthread_mutex_t', 'LHASH_COMP_FN_TYPE', - '__darwin_rune_t', 'rlimit', '__darwin_pthread_once_t', - 'OSBigEndian', 'uintptr_t', '__darwin_uid_t', 'u_int', - 'ASN1_T61STRING', 'gid_t', 'ssl_method_st', 'ASN1_ITEM', - 'ASN1_ENUMERATED', '_opaque_pthread_rwlock_t', - 'pkcs8_priv_key_info_st', 'intmax_t', 'sigcontext', - 'X509_CRL', 'rc2_key_st', 'engine_st', 'x509_object_st', - '_opaque_pthread_once_t', 'DES_ks', 'SSL_COMP', - 'dsa_method', 'int64_t', 'bio_st', 'bf_key_st', - 'ASN1_GENERALIZEDTIME', 'PKCS7_ENC_CONTENT', - '__darwin_pid_t', 'lldiv_t', 'comp_method_st', - 'EVP_MD_CTX', 'evp_cipher_st', 'X509_name_st', - 'x509_hash_dir_st', '__darwin_mach_port_name_t', - 'useconds_t', 'user_size_t', 'SSL_SESSION', 'rusage', - 'ssl_crock_st', 'int_least32_t', '__sigaction_u', 'dh_st', - 'P_ALL', '__darwin_stack_t', 'N6DES_ks3DOLLAR_9E', - 'comp_ctx_st', 'X509_CERT_FILE_CTX'] diff --git a/PythonLib/extra/lib2to3/tests/data/py2_test_grammar.py b/PythonLib/extra/lib2to3/tests/data/py2_test_grammar.py deleted file mode 100644 index b5a4137d..00000000 --- a/PythonLib/extra/lib2to3/tests/data/py2_test_grammar.py +++ /dev/null @@ -1,974 +0,0 @@ -# Python test set -- part 1, grammar. -# This just tests whether the parser accepts them all. - -# NOTE: When you run this test as a script from the command line, you -# get warnings about certain hex/oct constants. Since those are -# issued by the parser, you can't suppress them by adding a -# filterwarnings() call to this module. Therefore, to shut up the -# regression test, the filterwarnings() call has been added to -# regrtest.py. - -from test.test_support import run_unittest, check_syntax_error -import unittest -import sys -# testing import * -from sys import * - -class TokenTests(unittest.TestCase): - - def testBackslash(self): - # Backslash means line continuation: - x = 1 \ - + 1 - self.assertEquals(x, 2, 'backslash for line continuation') - - # Backslash does not means continuation in comments :\ - x = 0 - self.assertEquals(x, 0, 'backslash ending comment') - - def testPlainIntegers(self): - self.assertEquals(0xff, 255) - self.assertEquals(0377, 255) - self.assertEquals(2147483647, 017777777777) - # "0x" is not a valid literal - self.assertRaises(SyntaxError, eval, "0x") - from sys import maxint - if maxint == 2147483647: - self.assertEquals(-2147483647-1, -020000000000) - # XXX -2147483648 - self.assert_(037777777777 > 0) - self.assert_(0xffffffff > 0) - for s in '2147483648', '040000000000', '0x100000000': - try: - x = eval(s) - except OverflowError: - self.fail("OverflowError on huge integer literal %r" % s) - elif maxint == 9223372036854775807: - self.assertEquals(-9223372036854775807-1, -01000000000000000000000) - self.assert_(01777777777777777777777 > 0) - self.assert_(0xffffffffffffffff > 0) - for s in '9223372036854775808', '02000000000000000000000', \ - '0x10000000000000000': - try: - x = eval(s) - except OverflowError: - self.fail("OverflowError on huge integer literal %r" % s) - else: - self.fail('Weird maxint value %r' % maxint) - - def testLongIntegers(self): - x = 0L - x = 0l - x = 0xffffffffffffffffL - x = 0xffffffffffffffffl - x = 077777777777777777L - x = 077777777777777777l - x = 123456789012345678901234567890L - x = 123456789012345678901234567890l - - def testFloats(self): - x = 3.14 - x = 314. - x = 0.314 - # XXX x = 000.314 - x = .314 - x = 3e14 - x = 3E14 - x = 3e-14 - x = 3e+14 - x = 3.e14 - x = .3e14 - x = 3.1e4 - - def testStringLiterals(self): - x = ''; y = ""; self.assert_(len(x) == 0 and x == y) - x = '\''; y = "'"; self.assert_(len(x) == 1 and x == y and ord(x) == 39) - x = '"'; y = "\""; self.assert_(len(x) == 1 and x == y and ord(x) == 34) - x = "doesn't \"shrink\" does it" - y = 'doesn\'t "shrink" does it' - self.assert_(len(x) == 24 and x == y) - x = "does \"shrink\" doesn't it" - y = 'does "shrink" doesn\'t it' - self.assert_(len(x) == 24 and x == y) - x = """ -The "quick" -brown fox -jumps over -the 'lazy' dog. -""" - y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n' - self.assertEquals(x, y) - y = ''' -The "quick" -brown fox -jumps over -the 'lazy' dog. -''' - self.assertEquals(x, y) - y = "\n\ -The \"quick\"\n\ -brown fox\n\ -jumps over\n\ -the 'lazy' dog.\n\ -" - self.assertEquals(x, y) - y = '\n\ -The \"quick\"\n\ -brown fox\n\ -jumps over\n\ -the \'lazy\' dog.\n\ -' - self.assertEquals(x, y) - - -class GrammarTests(unittest.TestCase): - - # single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE - # XXX can't test in a script -- this rule is only used when interactive - - # file_input: (NEWLINE | stmt)* ENDMARKER - # Being tested as this very moment this very module - - # expr_input: testlist NEWLINE - # XXX Hard to test -- used only in calls to input() - - def testEvalInput(self): - # testlist ENDMARKER - x = eval('1, 0 or 1') - - def testFuncdef(self): - ### 'def' NAME parameters ':' suite - ### parameters: '(' [varargslist] ')' - ### varargslist: (fpdef ['=' test] ',')* ('*' NAME [',' ('**'|'*' '*') NAME] - ### | ('**'|'*' '*') NAME) - ### | fpdef ['=' test] (',' fpdef ['=' test])* [','] - ### fpdef: NAME | '(' fplist ')' - ### fplist: fpdef (',' fpdef)* [','] - ### arglist: (argument ',')* (argument | *' test [',' '**' test] | '**' test) - ### argument: [test '='] test # Really [keyword '='] test - def f1(): pass - f1() - f1(*()) - f1(*(), **{}) - def f2(one_argument): pass - def f3(two, arguments): pass - def f4(two, (compound, (argument, list))): pass - def f5((compound, first), two): pass - self.assertEquals(f2.func_code.co_varnames, ('one_argument',)) - self.assertEquals(f3.func_code.co_varnames, ('two', 'arguments')) - if sys.platform.startswith('java'): - self.assertEquals(f4.func_code.co_varnames, - ('two', '(compound, (argument, list))', 'compound', 'argument', - 'list',)) - self.assertEquals(f5.func_code.co_varnames, - ('(compound, first)', 'two', 'compound', 'first')) - else: - self.assertEquals(f4.func_code.co_varnames, - ('two', '.1', 'compound', 'argument', 'list')) - self.assertEquals(f5.func_code.co_varnames, - ('.0', 'two', 'compound', 'first')) - def a1(one_arg,): pass - def a2(two, args,): pass - def v0(*rest): pass - def v1(a, *rest): pass - def v2(a, b, *rest): pass - def v3(a, (b, c), *rest): return a, b, c, rest - - f1() - f2(1) - f2(1,) - f3(1, 2) - f3(1, 2,) - f4(1, (2, (3, 4))) - v0() - v0(1) - v0(1,) - v0(1,2) - v0(1,2,3,4,5,6,7,8,9,0) - v1(1) - v1(1,) - v1(1,2) - v1(1,2,3) - v1(1,2,3,4,5,6,7,8,9,0) - v2(1,2) - v2(1,2,3) - v2(1,2,3,4) - v2(1,2,3,4,5,6,7,8,9,0) - v3(1,(2,3)) - v3(1,(2,3),4) - v3(1,(2,3),4,5,6,7,8,9,0) - - # ceval unpacks the formal arguments into the first argcount names; - # thus, the names nested inside tuples must appear after these names. - if sys.platform.startswith('java'): - self.assertEquals(v3.func_code.co_varnames, ('a', '(b, c)', 'rest', 'b', 'c')) - else: - self.assertEquals(v3.func_code.co_varnames, ('a', '.1', 'rest', 'b', 'c')) - self.assertEquals(v3(1, (2, 3), 4), (1, 2, 3, (4,))) - def d01(a=1): pass - d01() - d01(1) - d01(*(1,)) - d01(**{'a':2}) - def d11(a, b=1): pass - d11(1) - d11(1, 2) - d11(1, **{'b':2}) - def d21(a, b, c=1): pass - d21(1, 2) - d21(1, 2, 3) - d21(*(1, 2, 3)) - d21(1, *(2, 3)) - d21(1, 2, *(3,)) - d21(1, 2, **{'c':3}) - def d02(a=1, b=2): pass - d02() - d02(1) - d02(1, 2) - d02(*(1, 2)) - d02(1, *(2,)) - d02(1, **{'b':2}) - d02(**{'a': 1, 'b': 2}) - def d12(a, b=1, c=2): pass - d12(1) - d12(1, 2) - d12(1, 2, 3) - def d22(a, b, c=1, d=2): pass - d22(1, 2) - d22(1, 2, 3) - d22(1, 2, 3, 4) - def d01v(a=1, *rest): pass - d01v() - d01v(1) - d01v(1, 2) - d01v(*(1, 2, 3, 4)) - d01v(*(1,)) - d01v(**{'a':2}) - def d11v(a, b=1, *rest): pass - d11v(1) - d11v(1, 2) - d11v(1, 2, 3) - def d21v(a, b, c=1, *rest): pass - d21v(1, 2) - d21v(1, 2, 3) - d21v(1, 2, 3, 4) - d21v(*(1, 2, 3, 4)) - d21v(1, 2, **{'c': 3}) - def d02v(a=1, b=2, *rest): pass - d02v() - d02v(1) - d02v(1, 2) - d02v(1, 2, 3) - d02v(1, *(2, 3, 4)) - d02v(**{'a': 1, 'b': 2}) - def d12v(a, b=1, c=2, *rest): pass - d12v(1) - d12v(1, 2) - d12v(1, 2, 3) - d12v(1, 2, 3, 4) - d12v(*(1, 2, 3, 4)) - d12v(1, 2, *(3, 4, 5)) - d12v(1, *(2,), **{'c': 3}) - def d22v(a, b, c=1, d=2, *rest): pass - d22v(1, 2) - d22v(1, 2, 3) - d22v(1, 2, 3, 4) - d22v(1, 2, 3, 4, 5) - d22v(*(1, 2, 3, 4)) - d22v(1, 2, *(3, 4, 5)) - d22v(1, *(2, 3), **{'d': 4}) - def d31v((x)): pass - d31v(1) - def d32v((x,)): pass - d32v((1,)) - - # keyword arguments after *arglist - def f(*args, **kwargs): - return args, kwargs - self.assertEquals(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), - {'x':2, 'y':5})) - self.assertRaises(SyntaxError, eval, "f(1, *(2,3), 4)") - self.assertRaises(SyntaxError, eval, "f(1, x=2, *(3,4), x=5)") - - # Check ast errors in *args and *kwargs - check_syntax_error(self, "f(*g(1=2))") - check_syntax_error(self, "f(**g(1=2))") - - def testLambdef(self): - ### lambdef: 'lambda' [varargslist] ':' test - l1 = lambda : 0 - self.assertEquals(l1(), 0) - l2 = lambda : a[d] # XXX just testing the expression - l3 = lambda : [2 < x for x in [-1, 3, 0L]] - self.assertEquals(l3(), [0, 1, 0]) - l4 = lambda x = lambda y = lambda z=1 : z : y() : x() - self.assertEquals(l4(), 1) - l5 = lambda x, y, z=2: x + y + z - self.assertEquals(l5(1, 2), 5) - self.assertEquals(l5(1, 2, 3), 6) - check_syntax_error(self, "lambda x: x = 2") - check_syntax_error(self, "lambda (None,): None") - - ### stmt: simple_stmt | compound_stmt - # Tested below - - def testSimpleStmt(self): - ### simple_stmt: small_stmt (';' small_stmt)* [';'] - x = 1; pass; del x - def foo(): - # verify statements that end with semi-colons - x = 1; pass; del x; - foo() - - ### small_stmt: expr_stmt | print_stmt | pass_stmt | del_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt - # Tested below - - def testExprStmt(self): - # (exprlist '=')* exprlist - 1 - 1, 2, 3 - x = 1 - x = 1, 2, 3 - x = y = z = 1, 2, 3 - x, y, z = 1, 2, 3 - abc = a, b, c = x, y, z = xyz = 1, 2, (3, 4) - - check_syntax_error(self, "x + 1 = 1") - check_syntax_error(self, "a + 1 = b + 2") - - def testPrintStmt(self): - # 'print' (test ',')* [test] - import StringIO - - # Can't test printing to real stdout without comparing output - # which is not available in unittest. - save_stdout = sys.stdout - sys.stdout = StringIO.StringIO() - - print 1, 2, 3 - print 1, 2, 3, - print - print 0 or 1, 0 or 1, - print 0 or 1 - - # 'print' '>>' test ',' - print >> sys.stdout, 1, 2, 3 - print >> sys.stdout, 1, 2, 3, - print >> sys.stdout - print >> sys.stdout, 0 or 1, 0 or 1, - print >> sys.stdout, 0 or 1 - - # test printing to an instance - class Gulp: - def write(self, msg): pass - - gulp = Gulp() - print >> gulp, 1, 2, 3 - print >> gulp, 1, 2, 3, - print >> gulp - print >> gulp, 0 or 1, 0 or 1, - print >> gulp, 0 or 1 - - # test print >> None - def driver(): - oldstdout = sys.stdout - sys.stdout = Gulp() - try: - tellme(Gulp()) - tellme() - finally: - sys.stdout = oldstdout - - # we should see this once - def tellme(file=sys.stdout): - print >> file, 'hello world' - - driver() - - # we should not see this at all - def tellme(file=None): - print >> file, 'goodbye universe' - - driver() - - self.assertEqual(sys.stdout.getvalue(), '''\ -1 2 3 -1 2 3 -1 1 1 -1 2 3 -1 2 3 -1 1 1 -hello world -''') - sys.stdout = save_stdout - - # syntax errors - check_syntax_error(self, 'print ,') - check_syntax_error(self, 'print >> x,') - - def testDelStmt(self): - # 'del' exprlist - abc = [1,2,3] - x, y, z = abc - xyz = x, y, z - - del abc - del x, y, (z, xyz) - - def testPassStmt(self): - # 'pass' - pass - - # flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt - # Tested below - - def testBreakStmt(self): - # 'break' - while 1: break - - def testContinueStmt(self): - # 'continue' - i = 1 - while i: i = 0; continue - - msg = "" - while not msg: - msg = "ok" - try: - continue - msg = "continue failed to continue inside try" - except: - msg = "continue inside try called except block" - if msg != "ok": - self.fail(msg) - - msg = "" - while not msg: - msg = "finally block not called" - try: - continue - finally: - msg = "ok" - if msg != "ok": - self.fail(msg) - - def test_break_continue_loop(self): - # This test warrants an explanation. It is a test specifically for SF bugs - # #463359 and #462937. The bug is that a 'break' statement executed or - # exception raised inside a try/except inside a loop, *after* a continue - # statement has been executed in that loop, will cause the wrong number of - # arguments to be popped off the stack and the instruction pointer reset to - # a very small number (usually 0.) Because of this, the following test - # *must* written as a function, and the tracking vars *must* be function - # arguments with default values. Otherwise, the test will loop and loop. - - def test_inner(extra_burning_oil = 1, count=0): - big_hippo = 2 - while big_hippo: - count += 1 - try: - if extra_burning_oil and big_hippo == 1: - extra_burning_oil -= 1 - break - big_hippo -= 1 - continue - except: - raise - if count > 2 or big_hippo <> 1: - self.fail("continue then break in try/except in loop broken!") - test_inner() - - def testReturn(self): - # 'return' [testlist] - def g1(): return - def g2(): return 1 - g1() - x = g2() - check_syntax_error(self, "class foo:return 1") - - def testYield(self): - check_syntax_error(self, "class foo:yield 1") - - def testRaise(self): - # 'raise' test [',' test] - try: raise RuntimeError, 'just testing' - except RuntimeError: pass - try: raise KeyboardInterrupt - except KeyboardInterrupt: pass - - def testImport(self): - # 'import' dotted_as_names - import sys - import time, sys - # 'from' dotted_name 'import' ('*' | '(' import_as_names ')' | import_as_names) - from time import time - from time import (time) - # not testable inside a function, but already done at top of the module - # from sys import * - from sys import path, argv - from sys import (path, argv) - from sys import (path, argv,) - - def testGlobal(self): - # 'global' NAME (',' NAME)* - global a - global a, b - global one, two, three, four, five, six, seven, eight, nine, ten - - def testExec(self): - # 'exec' expr ['in' expr [',' expr]] - z = None - del z - exec 'z=1+1\n' - if z != 2: self.fail('exec \'z=1+1\'\\n') - del z - exec 'z=1+1' - if z != 2: self.fail('exec \'z=1+1\'') - z = None - del z - import types - if hasattr(types, "UnicodeType"): - exec r"""if 1: - exec u'z=1+1\n' - if z != 2: self.fail('exec u\'z=1+1\'\\n') - del z - exec u'z=1+1' - if z != 2: self.fail('exec u\'z=1+1\'')""" - g = {} - exec 'z = 1' in g - if g.has_key('__builtins__'): del g['__builtins__'] - if g != {'z': 1}: self.fail('exec \'z = 1\' in g') - g = {} - l = {} - - import warnings - warnings.filterwarnings("ignore", "global statement", module="") - exec 'global a; a = 1; b = 2' in g, l - if g.has_key('__builtins__'): del g['__builtins__'] - if l.has_key('__builtins__'): del l['__builtins__'] - if (g, l) != ({'a':1}, {'b':2}): - self.fail('exec ... in g (%s), l (%s)' %(g,l)) - - def testAssert(self): - # assert_stmt: 'assert' test [',' test] - assert 1 - assert 1, 1 - assert lambda x:x - assert 1, lambda x:x+1 - try: - assert 0, "msg" - except AssertionError, e: - self.assertEquals(e.args[0], "msg") - else: - if __debug__: - self.fail("AssertionError not raised by assert 0") - - ### compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef - # Tested below - - def testIf(self): - # 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] - if 1: pass - if 1: pass - else: pass - if 0: pass - elif 0: pass - if 0: pass - elif 0: pass - elif 0: pass - elif 0: pass - else: pass - - def testWhile(self): - # 'while' test ':' suite ['else' ':' suite] - while 0: pass - while 0: pass - else: pass - - # Issue1920: "while 0" is optimized away, - # ensure that the "else" clause is still present. - x = 0 - while 0: - x = 1 - else: - x = 2 - self.assertEquals(x, 2) - - def testFor(self): - # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] - for i in 1, 2, 3: pass - for i, j, k in (): pass - else: pass - class Squares: - def __init__(self, max): - self.max = max - self.sofar = [] - def __len__(self): return len(self.sofar) - def __getitem__(self, i): - if not 0 <= i < self.max: raise IndexError - n = len(self.sofar) - while n <= i: - self.sofar.append(n*n) - n = n+1 - return self.sofar[i] - n = 0 - for x in Squares(10): n = n+x - if n != 285: - self.fail('for over growing sequence') - - result = [] - for x, in [(1,), (2,), (3,)]: - result.append(x) - self.assertEqual(result, [1, 2, 3]) - - def testTry(self): - ### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] - ### | 'try' ':' suite 'finally' ':' suite - ### except_clause: 'except' [expr [('as' | ',') expr]] - try: - 1/0 - except ZeroDivisionError: - pass - else: - pass - try: 1/0 - except EOFError: pass - except TypeError as msg: pass - except RuntimeError, msg: pass - except: pass - else: pass - try: 1/0 - except (EOFError, TypeError, ZeroDivisionError): pass - try: 1/0 - except (EOFError, TypeError, ZeroDivisionError), msg: pass - try: pass - finally: pass - - def testSuite(self): - # simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT - if 1: pass - if 1: - pass - if 1: - # - # - # - pass - pass - # - pass - # - - def testTest(self): - ### and_test ('or' and_test)* - ### and_test: not_test ('and' not_test)* - ### not_test: 'not' not_test | comparison - if not 1: pass - if 1 and 1: pass - if 1 or 1: pass - if not not not 1: pass - if not 1 and 1 and 1: pass - if 1 and 1 or 1 and 1 and 1 or not 1 and 1: pass - - def testComparison(self): - ### comparison: expr (comp_op expr)* - ### comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' - if 1: pass - x = (1 == 1) - if 1 == 1: pass - if 1 != 1: pass - if 1 <> 1: pass - if 1 < 1: pass - if 1 > 1: pass - if 1 <= 1: pass - if 1 >= 1: pass - if 1 is 1: pass - if 1 is not 1: pass - if 1 in (): pass - if 1 not in (): pass - if 1 < 1 > 1 == 1 >= 1 <= 1 <> 1 != 1 in 1 not in 1 is 1 is not 1: pass - - def testBinaryMaskOps(self): - x = 1 & 1 - x = 1 ^ 1 - x = 1 | 1 - - def testShiftOps(self): - x = 1 << 1 - x = 1 >> 1 - x = 1 << 1 >> 1 - - def testAdditiveOps(self): - x = 1 - x = 1 + 1 - x = 1 - 1 - 1 - x = 1 - 1 + 1 - 1 + 1 - - def testMultiplicativeOps(self): - x = 1 * 1 - x = 1 / 1 - x = 1 % 1 - x = 1 / 1 * 1 % 1 - - def testUnaryOps(self): - x = +1 - x = -1 - x = ~1 - x = ~1 ^ 1 & 1 | 1 & 1 ^ -1 - x = -1*1/1 + 1*1 - ---1*1 - - def testSelectors(self): - ### trailer: '(' [testlist] ')' | '[' subscript ']' | '.' NAME - ### subscript: expr | [expr] ':' [expr] - - import sys, time - c = sys.path[0] - x = time.time() - x = sys.modules['time'].time() - a = '01234' - c = a[0] - c = a[-1] - s = a[0:5] - s = a[:5] - s = a[0:] - s = a[:] - s = a[-5:] - s = a[:-1] - s = a[-4:-3] - # A rough test of SF bug 1333982. http://python.org/sf/1333982 - # The testing here is fairly incomplete. - # Test cases should include: commas with 1 and 2 colons - d = {} - d[1] = 1 - d[1,] = 2 - d[1,2] = 3 - d[1,2,3] = 4 - L = list(d) - L.sort() - self.assertEquals(str(L), '[1, (1,), (1, 2), (1, 2, 3)]') - - def testAtoms(self): - ### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING - ### dictmaker: test ':' test (',' test ':' test)* [','] - - x = (1) - x = (1 or 2 or 3) - x = (1 or 2 or 3, 2, 3) - - x = [] - x = [1] - x = [1 or 2 or 3] - x = [1 or 2 or 3, 2, 3] - x = [] - - x = {} - x = {'one': 1} - x = {'one': 1,} - x = {'one' or 'two': 1 or 2} - x = {'one': 1, 'two': 2} - x = {'one': 1, 'two': 2,} - x = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6} - - x = `x` - x = `1 or 2 or 3` - self.assertEqual(`1,2`, '(1, 2)') - - x = x - x = 'x' - x = 123 - - ### exprlist: expr (',' expr)* [','] - ### testlist: test (',' test)* [','] - # These have been exercised enough above - - def testClassdef(self): - # 'class' NAME ['(' [testlist] ')'] ':' suite - class B: pass - class B2(): pass - class C1(B): pass - class C2(B): pass - class D(C1, C2, B): pass - class C: - def meth1(self): pass - def meth2(self, arg): pass - def meth3(self, a1, a2): pass - # decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE - # decorators: decorator+ - # decorated: decorators (classdef | funcdef) - def class_decorator(x): - x.decorated = True - return x - @class_decorator - class G: - pass - self.assertEqual(G.decorated, True) - - def testListcomps(self): - # list comprehension tests - nums = [1, 2, 3, 4, 5] - strs = ["Apple", "Banana", "Coconut"] - spcs = [" Apple", " Banana ", "Coco nut "] - - self.assertEqual([s.strip() for s in spcs], ['Apple', 'Banana', 'Coco nut']) - self.assertEqual([3 * x for x in nums], [3, 6, 9, 12, 15]) - self.assertEqual([x for x in nums if x > 2], [3, 4, 5]) - self.assertEqual([(i, s) for i in nums for s in strs], - [(1, 'Apple'), (1, 'Banana'), (1, 'Coconut'), - (2, 'Apple'), (2, 'Banana'), (2, 'Coconut'), - (3, 'Apple'), (3, 'Banana'), (3, 'Coconut'), - (4, 'Apple'), (4, 'Banana'), (4, 'Coconut'), - (5, 'Apple'), (5, 'Banana'), (5, 'Coconut')]) - self.assertEqual([(i, s) for i in nums for s in [f for f in strs if "n" in f]], - [(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), - (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), - (5, 'Banana'), (5, 'Coconut')]) - self.assertEqual([(lambda a:[a**i for i in range(a+1)])(j) for j in range(5)], - [[1], [1, 1], [1, 2, 4], [1, 3, 9, 27], [1, 4, 16, 64, 256]]) - - def test_in_func(l): - return [None < x < 3 for x in l if x > 2] - - self.assertEqual(test_in_func(nums), [False, False, False]) - - def test_nested_front(): - self.assertEqual([[y for y in [x, x + 1]] for x in [1,3,5]], - [[1, 2], [3, 4], [5, 6]]) - - test_nested_front() - - check_syntax_error(self, "[i, s for i in nums for s in strs]") - check_syntax_error(self, "[x if y]") - - suppliers = [ - (1, "Boeing"), - (2, "Ford"), - (3, "Macdonalds") - ] - - parts = [ - (10, "Airliner"), - (20, "Engine"), - (30, "Cheeseburger") - ] - - suppart = [ - (1, 10), (1, 20), (2, 20), (3, 30) - ] - - x = [ - (sname, pname) - for (sno, sname) in suppliers - for (pno, pname) in parts - for (sp_sno, sp_pno) in suppart - if sno == sp_sno and pno == sp_pno - ] - - self.assertEqual(x, [('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), - ('Macdonalds', 'Cheeseburger')]) - - def testGenexps(self): - # generator expression tests - g = ([x for x in range(10)] for x in range(1)) - self.assertEqual(g.next(), [x for x in range(10)]) - try: - g.next() - self.fail('should produce StopIteration exception') - except StopIteration: - pass - - a = 1 - try: - g = (a for d in a) - g.next() - self.fail('should produce TypeError') - except TypeError: - pass - - self.assertEqual(list((x, y) for x in 'abcd' for y in 'abcd'), [(x, y) for x in 'abcd' for y in 'abcd']) - self.assertEqual(list((x, y) for x in 'ab' for y in 'xy'), [(x, y) for x in 'ab' for y in 'xy']) - - a = [x for x in range(10)] - b = (x for x in (y for y in a)) - self.assertEqual(sum(b), sum([x for x in range(10)])) - - self.assertEqual(sum(x**2 for x in range(10)), sum([x**2 for x in range(10)])) - self.assertEqual(sum(x*x for x in range(10) if x%2), sum([x*x for x in range(10) if x%2])) - self.assertEqual(sum(x for x in (y for y in range(10))), sum([x for x in range(10)])) - self.assertEqual(sum(x for x in (y for y in (z for z in range(10)))), sum([x for x in range(10)])) - self.assertEqual(sum(x for x in [y for y in (z for z in range(10))]), sum([x for x in range(10)])) - self.assertEqual(sum(x for x in (y for y in (z for z in range(10) if True)) if True), sum([x for x in range(10)])) - self.assertEqual(sum(x for x in (y for y in (z for z in range(10) if True) if False) if True), 0) - check_syntax_error(self, "foo(x for x in range(10), 100)") - check_syntax_error(self, "foo(100, x for x in range(10))") - - def testComprehensionSpecials(self): - # test for outmost iterable precomputation - x = 10; g = (i for i in range(x)); x = 5 - self.assertEqual(len(list(g)), 10) - - # This should hold, since we're only precomputing outmost iterable. - x = 10; t = False; g = ((i,j) for i in range(x) if t for j in range(x)) - x = 5; t = True; - self.assertEqual([(i,j) for i in range(10) for j in range(5)], list(g)) - - # Grammar allows multiple adjacent 'if's in listcomps and genexps, - # even though it's silly. Make sure it works (ifelse broke this.) - self.assertEqual([ x for x in range(10) if x % 2 if x % 3 ], [1, 5, 7]) - self.assertEqual(list(x for x in range(10) if x % 2 if x % 3), [1, 5, 7]) - - # verify unpacking single element tuples in listcomp/genexp. - self.assertEqual([x for x, in [(4,), (5,), (6,)]], [4, 5, 6]) - self.assertEqual(list(x for x, in [(7,), (8,), (9,)]), [7, 8, 9]) - - def test_with_statement(self): - class manager(object): - def __enter__(self): - return (1, 2) - def __exit__(self, *args): - pass - - with manager(): - pass - with manager() as x: - pass - with manager() as (x, y): - pass - with manager(), manager(): - pass - with manager() as x, manager() as y: - pass - with manager() as x, manager(): - pass - - def testIfElseExpr(self): - # Test ifelse expressions in various cases - def _checkeval(msg, ret): - "helper to check that evaluation of expressions is done correctly" - print x - return ret - - self.assertEqual([ x() for x in lambda: True, lambda: False if x() ], [True]) - self.assertEqual([ x() for x in (lambda: True, lambda: False) if x() ], [True]) - self.assertEqual([ x(False) for x in (lambda x: False if x else True, lambda x: True if x else False) if x(False) ], [True]) - self.assertEqual((5 if 1 else _checkeval("check 1", 0)), 5) - self.assertEqual((_checkeval("check 2", 0) if 0 else 5), 5) - self.assertEqual((5 and 6 if 0 else 1), 1) - self.assertEqual(((5 and 6) if 0 else 1), 1) - self.assertEqual((5 and (6 if 1 else 1)), 6) - self.assertEqual((0 or _checkeval("check 3", 2) if 0 else 3), 3) - self.assertEqual((1 or _checkeval("check 4", 2) if 1 else _checkeval("check 5", 3)), 1) - self.assertEqual((0 or 5 if 1 else _checkeval("check 6", 3)), 5) - self.assertEqual((not 5 if 1 else 1), False) - self.assertEqual((not 5 if 0 else 1), 1) - self.assertEqual((6 + 1 if 1 else 2), 7) - self.assertEqual((6 - 1 if 1 else 2), 5) - self.assertEqual((6 * 2 if 1 else 4), 12) - self.assertEqual((6 / 2 if 1 else 3), 3) - self.assertEqual((6 < 4 if 0 else 2), 2) - - -def test_main(): - run_unittest(TokenTests, GrammarTests) - -if __name__ == '__main__': - test_main() diff --git a/PythonLib/extra/lib2to3/tests/data/py3_test_grammar.py b/PythonLib/extra/lib2to3/tests/data/py3_test_grammar.py deleted file mode 100644 index c0bf7f27..00000000 --- a/PythonLib/extra/lib2to3/tests/data/py3_test_grammar.py +++ /dev/null @@ -1,923 +0,0 @@ -# Python test set -- part 1, grammar. -# This just tests whether the parser accepts them all. - -# NOTE: When you run this test as a script from the command line, you -# get warnings about certain hex/oct constants. Since those are -# issued by the parser, you can't suppress them by adding a -# filterwarnings() call to this module. Therefore, to shut up the -# regression test, the filterwarnings() call has been added to -# regrtest.py. - -from test.support import run_unittest, check_syntax_error -import unittest -import sys -# testing import * -from sys import * - -class TokenTests(unittest.TestCase): - - def testBackslash(self): - # Backslash means line continuation: - x = 1 \ - + 1 - self.assertEquals(x, 2, 'backslash for line continuation') - - # Backslash does not means continuation in comments :\ - x = 0 - self.assertEquals(x, 0, 'backslash ending comment') - - def testPlainIntegers(self): - self.assertEquals(type(000), type(0)) - self.assertEquals(0xff, 255) - self.assertEquals(0o377, 255) - self.assertEquals(2147483647, 0o17777777777) - self.assertEquals(0b1001, 9) - # "0x" is not a valid literal - self.assertRaises(SyntaxError, eval, "0x") - from sys import maxsize - if maxsize == 2147483647: - self.assertEquals(-2147483647-1, -0o20000000000) - # XXX -2147483648 - self.assert_(0o37777777777 > 0) - self.assert_(0xffffffff > 0) - self.assert_(0b1111111111111111111111111111111 > 0) - for s in ('2147483648', '0o40000000000', '0x100000000', - '0b10000000000000000000000000000000'): - try: - x = eval(s) - except OverflowError: - self.fail("OverflowError on huge integer literal %r" % s) - elif maxsize == 9223372036854775807: - self.assertEquals(-9223372036854775807-1, -0o1000000000000000000000) - self.assert_(0o1777777777777777777777 > 0) - self.assert_(0xffffffffffffffff > 0) - self.assert_(0b11111111111111111111111111111111111111111111111111111111111111 > 0) - for s in '9223372036854775808', '0o2000000000000000000000', \ - '0x10000000000000000', \ - '0b100000000000000000000000000000000000000000000000000000000000000': - try: - x = eval(s) - except OverflowError: - self.fail("OverflowError on huge integer literal %r" % s) - else: - self.fail('Weird maxsize value %r' % maxsize) - - def testLongIntegers(self): - x = 0 - x = 0xffffffffffffffff - x = 0Xffffffffffffffff - x = 0o77777777777777777 - x = 0O77777777777777777 - x = 123456789012345678901234567890 - x = 0b100000000000000000000000000000000000000000000000000000000000000000000 - x = 0B111111111111111111111111111111111111111111111111111111111111111111111 - - def testFloats(self): - x = 3.14 - x = 314. - x = 0.314 - # XXX x = 000.314 - x = .314 - x = 3e14 - x = 3E14 - x = 3e-14 - x = 3e+14 - x = 3.e14 - x = .3e14 - x = 3.1e4 - - def testStringLiterals(self): - x = ''; y = ""; self.assert_(len(x) == 0 and x == y) - x = '\''; y = "'"; self.assert_(len(x) == 1 and x == y and ord(x) == 39) - x = '"'; y = "\""; self.assert_(len(x) == 1 and x == y and ord(x) == 34) - x = "doesn't \"shrink\" does it" - y = 'doesn\'t "shrink" does it' - self.assert_(len(x) == 24 and x == y) - x = "does \"shrink\" doesn't it" - y = 'does "shrink" doesn\'t it' - self.assert_(len(x) == 24 and x == y) - x = """ -The "quick" -brown fox -jumps over -the 'lazy' dog. -""" - y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n' - self.assertEquals(x, y) - y = ''' -The "quick" -brown fox -jumps over -the 'lazy' dog. -''' - self.assertEquals(x, y) - y = "\n\ -The \"quick\"\n\ -brown fox\n\ -jumps over\n\ -the 'lazy' dog.\n\ -" - self.assertEquals(x, y) - y = '\n\ -The \"quick\"\n\ -brown fox\n\ -jumps over\n\ -the \'lazy\' dog.\n\ -' - self.assertEquals(x, y) - - def testEllipsis(self): - x = ... - self.assert_(x is Ellipsis) - self.assertRaises(SyntaxError, eval, ".. .") - -class GrammarTests(unittest.TestCase): - - # single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE - # XXX can't test in a script -- this rule is only used when interactive - - # file_input: (NEWLINE | stmt)* ENDMARKER - # Being tested as this very moment this very module - - # expr_input: testlist NEWLINE - # XXX Hard to test -- used only in calls to input() - - def testEvalInput(self): - # testlist ENDMARKER - x = eval('1, 0 or 1') - - def testFuncdef(self): - ### [decorators] 'def' NAME parameters ['->' test] ':' suite - ### decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE - ### decorators: decorator+ - ### parameters: '(' [typedargslist] ')' - ### typedargslist: ((tfpdef ['=' test] ',')* - ### ('*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) - ### | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) - ### tfpdef: NAME [':' test] - ### varargslist: ((vfpdef ['=' test] ',')* - ### ('*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) - ### | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) - ### vfpdef: NAME - def f1(): pass - f1() - f1(*()) - f1(*(), **{}) - def f2(one_argument): pass - def f3(two, arguments): pass - self.assertEquals(f2.__code__.co_varnames, ('one_argument',)) - self.assertEquals(f3.__code__.co_varnames, ('two', 'arguments')) - def a1(one_arg,): pass - def a2(two, args,): pass - def v0(*rest): pass - def v1(a, *rest): pass - def v2(a, b, *rest): pass - - f1() - f2(1) - f2(1,) - f3(1, 2) - f3(1, 2,) - v0() - v0(1) - v0(1,) - v0(1,2) - v0(1,2,3,4,5,6,7,8,9,0) - v1(1) - v1(1,) - v1(1,2) - v1(1,2,3) - v1(1,2,3,4,5,6,7,8,9,0) - v2(1,2) - v2(1,2,3) - v2(1,2,3,4) - v2(1,2,3,4,5,6,7,8,9,0) - - def d01(a=1): pass - d01() - d01(1) - d01(*(1,)) - d01(**{'a':2}) - def d11(a, b=1): pass - d11(1) - d11(1, 2) - d11(1, **{'b':2}) - def d21(a, b, c=1): pass - d21(1, 2) - d21(1, 2, 3) - d21(*(1, 2, 3)) - d21(1, *(2, 3)) - d21(1, 2, *(3,)) - d21(1, 2, **{'c':3}) - def d02(a=1, b=2): pass - d02() - d02(1) - d02(1, 2) - d02(*(1, 2)) - d02(1, *(2,)) - d02(1, **{'b':2}) - d02(**{'a': 1, 'b': 2}) - def d12(a, b=1, c=2): pass - d12(1) - d12(1, 2) - d12(1, 2, 3) - def d22(a, b, c=1, d=2): pass - d22(1, 2) - d22(1, 2, 3) - d22(1, 2, 3, 4) - def d01v(a=1, *rest): pass - d01v() - d01v(1) - d01v(1, 2) - d01v(*(1, 2, 3, 4)) - d01v(*(1,)) - d01v(**{'a':2}) - def d11v(a, b=1, *rest): pass - d11v(1) - d11v(1, 2) - d11v(1, 2, 3) - def d21v(a, b, c=1, *rest): pass - d21v(1, 2) - d21v(1, 2, 3) - d21v(1, 2, 3, 4) - d21v(*(1, 2, 3, 4)) - d21v(1, 2, **{'c': 3}) - def d02v(a=1, b=2, *rest): pass - d02v() - d02v(1) - d02v(1, 2) - d02v(1, 2, 3) - d02v(1, *(2, 3, 4)) - d02v(**{'a': 1, 'b': 2}) - def d12v(a, b=1, c=2, *rest): pass - d12v(1) - d12v(1, 2) - d12v(1, 2, 3) - d12v(1, 2, 3, 4) - d12v(*(1, 2, 3, 4)) - d12v(1, 2, *(3, 4, 5)) - d12v(1, *(2,), **{'c': 3}) - def d22v(a, b, c=1, d=2, *rest): pass - d22v(1, 2) - d22v(1, 2, 3) - d22v(1, 2, 3, 4) - d22v(1, 2, 3, 4, 5) - d22v(*(1, 2, 3, 4)) - d22v(1, 2, *(3, 4, 5)) - d22v(1, *(2, 3), **{'d': 4}) - - # keyword argument type tests - try: - str('x', **{b'foo':1 }) - except TypeError: - pass - else: - self.fail('Bytes should not work as keyword argument names') - # keyword only argument tests - def pos0key1(*, key): return key - pos0key1(key=100) - def pos2key2(p1, p2, *, k1, k2=100): return p1,p2,k1,k2 - pos2key2(1, 2, k1=100) - pos2key2(1, 2, k1=100, k2=200) - pos2key2(1, 2, k2=100, k1=200) - def pos2key2dict(p1, p2, *, k1=100, k2, **kwarg): return p1,p2,k1,k2,kwarg - pos2key2dict(1,2,k2=100,tokwarg1=100,tokwarg2=200) - pos2key2dict(1,2,tokwarg1=100,tokwarg2=200, k2=100) - - # keyword arguments after *arglist - def f(*args, **kwargs): - return args, kwargs - self.assertEquals(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), - {'x':2, 'y':5})) - self.assertRaises(SyntaxError, eval, "f(1, *(2,3), 4)") - self.assertRaises(SyntaxError, eval, "f(1, x=2, *(3,4), x=5)") - - # argument annotation tests - def f(x) -> list: pass - self.assertEquals(f.__annotations__, {'return': list}) - def f(x:int): pass - self.assertEquals(f.__annotations__, {'x': int}) - def f(*x:str): pass - self.assertEquals(f.__annotations__, {'x': str}) - def f(**x:float): pass - self.assertEquals(f.__annotations__, {'x': float}) - def f(x, y:1+2): pass - self.assertEquals(f.__annotations__, {'y': 3}) - def f(a, b:1, c:2, d): pass - self.assertEquals(f.__annotations__, {'b': 1, 'c': 2}) - def f(a, b:1, c:2, d, e:3=4, f=5, *g:6): pass - self.assertEquals(f.__annotations__, - {'b': 1, 'c': 2, 'e': 3, 'g': 6}) - def f(a, b:1, c:2, d, e:3=4, f=5, *g:6, h:7, i=8, j:9=10, - **k:11) -> 12: pass - self.assertEquals(f.__annotations__, - {'b': 1, 'c': 2, 'e': 3, 'g': 6, 'h': 7, 'j': 9, - 'k': 11, 'return': 12}) - # Check for SF Bug #1697248 - mixing decorators and a return annotation - def null(x): return x - @null - def f(x) -> list: pass - self.assertEquals(f.__annotations__, {'return': list}) - - # test MAKE_CLOSURE with a variety of oparg's - closure = 1 - def f(): return closure - def f(x=1): return closure - def f(*, k=1): return closure - def f() -> int: return closure - - # Check ast errors in *args and *kwargs - check_syntax_error(self, "f(*g(1=2))") - check_syntax_error(self, "f(**g(1=2))") - - def testLambdef(self): - ### lambdef: 'lambda' [varargslist] ':' test - l1 = lambda : 0 - self.assertEquals(l1(), 0) - l2 = lambda : a[d] # XXX just testing the expression - l3 = lambda : [2 < x for x in [-1, 3, 0]] - self.assertEquals(l3(), [0, 1, 0]) - l4 = lambda x = lambda y = lambda z=1 : z : y() : x() - self.assertEquals(l4(), 1) - l5 = lambda x, y, z=2: x + y + z - self.assertEquals(l5(1, 2), 5) - self.assertEquals(l5(1, 2, 3), 6) - check_syntax_error(self, "lambda x: x = 2") - check_syntax_error(self, "lambda (None,): None") - l6 = lambda x, y, *, k=20: x+y+k - self.assertEquals(l6(1,2), 1+2+20) - self.assertEquals(l6(1,2,k=10), 1+2+10) - - - ### stmt: simple_stmt | compound_stmt - # Tested below - - def testSimpleStmt(self): - ### simple_stmt: small_stmt (';' small_stmt)* [';'] - x = 1; pass; del x - def foo(): - # verify statements that end with semi-colons - x = 1; pass; del x; - foo() - - ### small_stmt: expr_stmt | pass_stmt | del_stmt | flow_stmt | import_stmt | global_stmt | access_stmt - # Tested below - - def testExprStmt(self): - # (exprlist '=')* exprlist - 1 - 1, 2, 3 - x = 1 - x = 1, 2, 3 - x = y = z = 1, 2, 3 - x, y, z = 1, 2, 3 - abc = a, b, c = x, y, z = xyz = 1, 2, (3, 4) - - check_syntax_error(self, "x + 1 = 1") - check_syntax_error(self, "a + 1 = b + 2") - - def testDelStmt(self): - # 'del' exprlist - abc = [1,2,3] - x, y, z = abc - xyz = x, y, z - - del abc - del x, y, (z, xyz) - - def testPassStmt(self): - # 'pass' - pass - - # flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt - # Tested below - - def testBreakStmt(self): - # 'break' - while 1: break - - def testContinueStmt(self): - # 'continue' - i = 1 - while i: i = 0; continue - - msg = "" - while not msg: - msg = "ok" - try: - continue - msg = "continue failed to continue inside try" - except: - msg = "continue inside try called except block" - if msg != "ok": - self.fail(msg) - - msg = "" - while not msg: - msg = "finally block not called" - try: - continue - finally: - msg = "ok" - if msg != "ok": - self.fail(msg) - - def test_break_continue_loop(self): - # This test warrants an explanation. It is a test specifically for SF bugs - # #463359 and #462937. The bug is that a 'break' statement executed or - # exception raised inside a try/except inside a loop, *after* a continue - # statement has been executed in that loop, will cause the wrong number of - # arguments to be popped off the stack and the instruction pointer reset to - # a very small number (usually 0.) Because of this, the following test - # *must* written as a function, and the tracking vars *must* be function - # arguments with default values. Otherwise, the test will loop and loop. - - def test_inner(extra_burning_oil = 1, count=0): - big_hippo = 2 - while big_hippo: - count += 1 - try: - if extra_burning_oil and big_hippo == 1: - extra_burning_oil -= 1 - break - big_hippo -= 1 - continue - except: - raise - if count > 2 or big_hippo != 1: - self.fail("continue then break in try/except in loop broken!") - test_inner() - - def testReturn(self): - # 'return' [testlist] - def g1(): return - def g2(): return 1 - g1() - x = g2() - check_syntax_error(self, "class foo:return 1") - - def testYield(self): - check_syntax_error(self, "class foo:yield 1") - - def testRaise(self): - # 'raise' test [',' test] - try: raise RuntimeError('just testing') - except RuntimeError: pass - try: raise KeyboardInterrupt - except KeyboardInterrupt: pass - - def testImport(self): - # 'import' dotted_as_names - import sys - import time, sys - # 'from' dotted_name 'import' ('*' | '(' import_as_names ')' | import_as_names) - from time import time - from time import (time) - # not testable inside a function, but already done at top of the module - # from sys import * - from sys import path, argv - from sys import (path, argv) - from sys import (path, argv,) - - def testGlobal(self): - # 'global' NAME (',' NAME)* - global a - global a, b - global one, two, three, four, five, six, seven, eight, nine, ten - - def testNonlocal(self): - # 'nonlocal' NAME (',' NAME)* - x = 0 - y = 0 - def f(): - nonlocal x - nonlocal x, y - - def testAssert(self): - # assert_stmt: 'assert' test [',' test] - assert 1 - assert 1, 1 - assert lambda x:x - assert 1, lambda x:x+1 - try: - assert 0, "msg" - except AssertionError as e: - self.assertEquals(e.args[0], "msg") - else: - if __debug__: - self.fail("AssertionError not raised by assert 0") - - ### compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef - # Tested below - - def testIf(self): - # 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] - if 1: pass - if 1: pass - else: pass - if 0: pass - elif 0: pass - if 0: pass - elif 0: pass - elif 0: pass - elif 0: pass - else: pass - - def testWhile(self): - # 'while' test ':' suite ['else' ':' suite] - while 0: pass - while 0: pass - else: pass - - # Issue1920: "while 0" is optimized away, - # ensure that the "else" clause is still present. - x = 0 - while 0: - x = 1 - else: - x = 2 - self.assertEquals(x, 2) - - def testFor(self): - # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] - for i in 1, 2, 3: pass - for i, j, k in (): pass - else: pass - class Squares: - def __init__(self, max): - self.max = max - self.sofar = [] - def __len__(self): return len(self.sofar) - def __getitem__(self, i): - if not 0 <= i < self.max: raise IndexError - n = len(self.sofar) - while n <= i: - self.sofar.append(n*n) - n = n+1 - return self.sofar[i] - n = 0 - for x in Squares(10): n = n+x - if n != 285: - self.fail('for over growing sequence') - - result = [] - for x, in [(1,), (2,), (3,)]: - result.append(x) - self.assertEqual(result, [1, 2, 3]) - - def testTry(self): - ### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] - ### | 'try' ':' suite 'finally' ':' suite - ### except_clause: 'except' [expr ['as' expr]] - try: - 1/0 - except ZeroDivisionError: - pass - else: - pass - try: 1/0 - except EOFError: pass - except TypeError as msg: pass - except RuntimeError as msg: pass - except: pass - else: pass - try: 1/0 - except (EOFError, TypeError, ZeroDivisionError): pass - try: 1/0 - except (EOFError, TypeError, ZeroDivisionError) as msg: pass - try: pass - finally: pass - - def testSuite(self): - # simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT - if 1: pass - if 1: - pass - if 1: - # - # - # - pass - pass - # - pass - # - - def testTest(self): - ### and_test ('or' and_test)* - ### and_test: not_test ('and' not_test)* - ### not_test: 'not' not_test | comparison - if not 1: pass - if 1 and 1: pass - if 1 or 1: pass - if not not not 1: pass - if not 1 and 1 and 1: pass - if 1 and 1 or 1 and 1 and 1 or not 1 and 1: pass - - def testComparison(self): - ### comparison: expr (comp_op expr)* - ### comp_op: '<'|'>'|'=='|'>='|'<='|'!='|'in'|'not' 'in'|'is'|'is' 'not' - if 1: pass - x = (1 == 1) - if 1 == 1: pass - if 1 != 1: pass - if 1 < 1: pass - if 1 > 1: pass - if 1 <= 1: pass - if 1 >= 1: pass - if 1 is 1: pass - if 1 is not 1: pass - if 1 in (): pass - if 1 not in (): pass - if 1 < 1 > 1 == 1 >= 1 <= 1 != 1 in 1 not in 1 is 1 is not 1: pass - - def testBinaryMaskOps(self): - x = 1 & 1 - x = 1 ^ 1 - x = 1 | 1 - - def testShiftOps(self): - x = 1 << 1 - x = 1 >> 1 - x = 1 << 1 >> 1 - - def testAdditiveOps(self): - x = 1 - x = 1 + 1 - x = 1 - 1 - 1 - x = 1 - 1 + 1 - 1 + 1 - - def testMultiplicativeOps(self): - x = 1 * 1 - x = 1 / 1 - x = 1 % 1 - x = 1 / 1 * 1 % 1 - - def testUnaryOps(self): - x = +1 - x = -1 - x = ~1 - x = ~1 ^ 1 & 1 | 1 & 1 ^ -1 - x = -1*1/1 + 1*1 - ---1*1 - - def testSelectors(self): - ### trailer: '(' [testlist] ')' | '[' subscript ']' | '.' NAME - ### subscript: expr | [expr] ':' [expr] - - import sys, time - c = sys.path[0] - x = time.time() - x = sys.modules['time'].time() - a = '01234' - c = a[0] - c = a[-1] - s = a[0:5] - s = a[:5] - s = a[0:] - s = a[:] - s = a[-5:] - s = a[:-1] - s = a[-4:-3] - # A rough test of SF bug 1333982. http://python.org/sf/1333982 - # The testing here is fairly incomplete. - # Test cases should include: commas with 1 and 2 colons - d = {} - d[1] = 1 - d[1,] = 2 - d[1,2] = 3 - d[1,2,3] = 4 - L = list(d) - L.sort(key=lambda x: x if isinstance(x, tuple) else ()) - self.assertEquals(str(L), '[1, (1,), (1, 2), (1, 2, 3)]') - - def testAtoms(self): - ### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictsetmaker] '}' | NAME | NUMBER | STRING - ### dictsetmaker: (test ':' test (',' test ':' test)* [',']) | (test (',' test)* [',']) - - x = (1) - x = (1 or 2 or 3) - x = (1 or 2 or 3, 2, 3) - - x = [] - x = [1] - x = [1 or 2 or 3] - x = [1 or 2 or 3, 2, 3] - x = [] - - x = {} - x = {'one': 1} - x = {'one': 1,} - x = {'one' or 'two': 1 or 2} - x = {'one': 1, 'two': 2} - x = {'one': 1, 'two': 2,} - x = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6} - - x = {'one'} - x = {'one', 1,} - x = {'one', 'two', 'three'} - x = {2, 3, 4,} - - x = x - x = 'x' - x = 123 - - ### exprlist: expr (',' expr)* [','] - ### testlist: test (',' test)* [','] - # These have been exercised enough above - - def testClassdef(self): - # 'class' NAME ['(' [testlist] ')'] ':' suite - class B: pass - class B2(): pass - class C1(B): pass - class C2(B): pass - class D(C1, C2, B): pass - class C: - def meth1(self): pass - def meth2(self, arg): pass - def meth3(self, a1, a2): pass - - # decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE - # decorators: decorator+ - # decorated: decorators (classdef | funcdef) - def class_decorator(x): return x - @class_decorator - class G: pass - - def testDictcomps(self): - # dictorsetmaker: ( (test ':' test (comp_for | - # (',' test ':' test)* [','])) | - # (test (comp_for | (',' test)* [','])) ) - nums = [1, 2, 3] - self.assertEqual({i:i+1 for i in nums}, {1: 2, 2: 3, 3: 4}) - - def testListcomps(self): - # list comprehension tests - nums = [1, 2, 3, 4, 5] - strs = ["Apple", "Banana", "Coconut"] - spcs = [" Apple", " Banana ", "Coco nut "] - - self.assertEqual([s.strip() for s in spcs], ['Apple', 'Banana', 'Coco nut']) - self.assertEqual([3 * x for x in nums], [3, 6, 9, 12, 15]) - self.assertEqual([x for x in nums if x > 2], [3, 4, 5]) - self.assertEqual([(i, s) for i in nums for s in strs], - [(1, 'Apple'), (1, 'Banana'), (1, 'Coconut'), - (2, 'Apple'), (2, 'Banana'), (2, 'Coconut'), - (3, 'Apple'), (3, 'Banana'), (3, 'Coconut'), - (4, 'Apple'), (4, 'Banana'), (4, 'Coconut'), - (5, 'Apple'), (5, 'Banana'), (5, 'Coconut')]) - self.assertEqual([(i, s) for i in nums for s in [f for f in strs if "n" in f]], - [(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), - (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), - (5, 'Banana'), (5, 'Coconut')]) - self.assertEqual([(lambda a:[a**i for i in range(a+1)])(j) for j in range(5)], - [[1], [1, 1], [1, 2, 4], [1, 3, 9, 27], [1, 4, 16, 64, 256]]) - - def test_in_func(l): - return [0 < x < 3 for x in l if x > 2] - - self.assertEqual(test_in_func(nums), [False, False, False]) - - def test_nested_front(): - self.assertEqual([[y for y in [x, x + 1]] for x in [1,3,5]], - [[1, 2], [3, 4], [5, 6]]) - - test_nested_front() - - check_syntax_error(self, "[i, s for i in nums for s in strs]") - check_syntax_error(self, "[x if y]") - - suppliers = [ - (1, "Boeing"), - (2, "Ford"), - (3, "Macdonalds") - ] - - parts = [ - (10, "Airliner"), - (20, "Engine"), - (30, "Cheeseburger") - ] - - suppart = [ - (1, 10), (1, 20), (2, 20), (3, 30) - ] - - x = [ - (sname, pname) - for (sno, sname) in suppliers - for (pno, pname) in parts - for (sp_sno, sp_pno) in suppart - if sno == sp_sno and pno == sp_pno - ] - - self.assertEqual(x, [('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), - ('Macdonalds', 'Cheeseburger')]) - - def testGenexps(self): - # generator expression tests - g = ([x for x in range(10)] for x in range(1)) - self.assertEqual(next(g), [x for x in range(10)]) - try: - next(g) - self.fail('should produce StopIteration exception') - except StopIteration: - pass - - a = 1 - try: - g = (a for d in a) - next(g) - self.fail('should produce TypeError') - except TypeError: - pass - - self.assertEqual(list((x, y) for x in 'abcd' for y in 'abcd'), [(x, y) for x in 'abcd' for y in 'abcd']) - self.assertEqual(list((x, y) for x in 'ab' for y in 'xy'), [(x, y) for x in 'ab' for y in 'xy']) - - a = [x for x in range(10)] - b = (x for x in (y for y in a)) - self.assertEqual(sum(b), sum([x for x in range(10)])) - - self.assertEqual(sum(x**2 for x in range(10)), sum([x**2 for x in range(10)])) - self.assertEqual(sum(x*x for x in range(10) if x%2), sum([x*x for x in range(10) if x%2])) - self.assertEqual(sum(x for x in (y for y in range(10))), sum([x for x in range(10)])) - self.assertEqual(sum(x for x in (y for y in (z for z in range(10)))), sum([x for x in range(10)])) - self.assertEqual(sum(x for x in [y for y in (z for z in range(10))]), sum([x for x in range(10)])) - self.assertEqual(sum(x for x in (y for y in (z for z in range(10) if True)) if True), sum([x for x in range(10)])) - self.assertEqual(sum(x for x in (y for y in (z for z in range(10) if True) if False) if True), 0) - check_syntax_error(self, "foo(x for x in range(10), 100)") - check_syntax_error(self, "foo(100, x for x in range(10))") - - def testComprehensionSpecials(self): - # test for outmost iterable precomputation - x = 10; g = (i for i in range(x)); x = 5 - self.assertEqual(len(list(g)), 10) - - # This should hold, since we're only precomputing outmost iterable. - x = 10; t = False; g = ((i,j) for i in range(x) if t for j in range(x)) - x = 5; t = True; - self.assertEqual([(i,j) for i in range(10) for j in range(5)], list(g)) - - # Grammar allows multiple adjacent 'if's in listcomps and genexps, - # even though it's silly. Make sure it works (ifelse broke this.) - self.assertEqual([ x for x in range(10) if x % 2 if x % 3 ], [1, 5, 7]) - self.assertEqual(list(x for x in range(10) if x % 2 if x % 3), [1, 5, 7]) - - # verify unpacking single element tuples in listcomp/genexp. - self.assertEqual([x for x, in [(4,), (5,), (6,)]], [4, 5, 6]) - self.assertEqual(list(x for x, in [(7,), (8,), (9,)]), [7, 8, 9]) - - def test_with_statement(self): - class manager(object): - def __enter__(self): - return (1, 2) - def __exit__(self, *args): - pass - - with manager(): - pass - with manager() as x: - pass - with manager() as (x, y): - pass - with manager(), manager(): - pass - with manager() as x, manager() as y: - pass - with manager() as x, manager(): - pass - - def testIfElseExpr(self): - # Test ifelse expressions in various cases - def _checkeval(msg, ret): - "helper to check that evaluation of expressions is done correctly" - print(x) - return ret - - # the next line is not allowed anymore - #self.assertEqual([ x() for x in lambda: True, lambda: False if x() ], [True]) - self.assertEqual([ x() for x in (lambda: True, lambda: False) if x() ], [True]) - self.assertEqual([ x(False) for x in (lambda x: False if x else True, lambda x: True if x else False) if x(False) ], [True]) - self.assertEqual((5 if 1 else _checkeval("check 1", 0)), 5) - self.assertEqual((_checkeval("check 2", 0) if 0 else 5), 5) - self.assertEqual((5 and 6 if 0 else 1), 1) - self.assertEqual(((5 and 6) if 0 else 1), 1) - self.assertEqual((5 and (6 if 1 else 1)), 6) - self.assertEqual((0 or _checkeval("check 3", 2) if 0 else 3), 3) - self.assertEqual((1 or _checkeval("check 4", 2) if 1 else _checkeval("check 5", 3)), 1) - self.assertEqual((0 or 5 if 1 else _checkeval("check 6", 3)), 5) - self.assertEqual((not 5 if 1 else 1), False) - self.assertEqual((not 5 if 0 else 1), 1) - self.assertEqual((6 + 1 if 1 else 2), 7) - self.assertEqual((6 - 1 if 1 else 2), 5) - self.assertEqual((6 * 2 if 1 else 4), 12) - self.assertEqual((6 / 2 if 1 else 3), 3) - self.assertEqual((6 < 4 if 0 else 2), 2) - - -def test_main(): - run_unittest(TokenTests, GrammarTests) - -if __name__ == '__main__': - test_main() diff --git a/PythonLib/extra/lib2to3/tests/pytree_idempotency.py b/PythonLib/extra/lib2to3/tests/pytree_idempotency.py deleted file mode 100644 index 243f7e8e..00000000 --- a/PythonLib/extra/lib2to3/tests/pytree_idempotency.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python -# Copyright 2006 Google, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Main program for testing the infrastructure.""" - -__author__ = "Guido van Rossum " - -# Support imports (need to be imported first) -from . import support - -# Python imports -import os -import sys -import logging - -# Local imports -from .. import pytree -import pgen2 -from pgen2 import driver - -logging.basicConfig() - -def main(): - gr = driver.load_grammar("Grammar.txt") - dr = driver.Driver(gr, convert=pytree.convert) - - fn = "example.py" - tree = dr.parse_file(fn, debug=True) - if not diff(fn, tree): - print "No diffs." - if not sys.argv[1:]: - return # Pass a dummy argument to run the complete test suite below - - problems = [] - - # Process every imported module - for name in sys.modules: - mod = sys.modules[name] - if mod is None or not hasattr(mod, "__file__"): - continue - fn = mod.__file__ - if fn.endswith(".pyc"): - fn = fn[:-1] - if not fn.endswith(".py"): - continue - print >>sys.stderr, "Parsing", fn - tree = dr.parse_file(fn, debug=True) - if diff(fn, tree): - problems.append(fn) - - # Process every single module on sys.path (but not in packages) - for dir in sys.path: - try: - names = os.listdir(dir) - except os.error: - continue - print >>sys.stderr, "Scanning", dir, "..." - for name in names: - if not name.endswith(".py"): - continue - print >>sys.stderr, "Parsing", name - fn = os.path.join(dir, name) - try: - tree = dr.parse_file(fn, debug=True) - except pgen2.parse.ParseError, err: - print "ParseError:", err - else: - if diff(fn, tree): - problems.append(fn) - - # Show summary of problem files - if not problems: - print "No problems. Congratulations!" - else: - print "Problems in following files:" - for fn in problems: - print "***", fn - -def diff(fn, tree): - f = open("@", "w") - try: - f.write(str(tree)) - finally: - f.close() - try: - return os.system("diff -u %s @" % fn) - finally: - os.remove("@") - -if __name__ == "__main__": - main() diff --git a/PythonLib/extra/lib2to3/tests/support.py b/PythonLib/extra/lib2to3/tests/support.py deleted file mode 100644 index 36469351..00000000 --- a/PythonLib/extra/lib2to3/tests/support.py +++ /dev/null @@ -1,54 +0,0 @@ -"""Support code for test_*.py files""" -# Author: Collin Winter - -# Python imports -import unittest -import sys -import os -import os.path -import re -from textwrap import dedent - -# Local imports -from lib2to3 import pytree, refactor -from lib2to3.pgen2 import driver - -test_dir = os.path.dirname(__file__) -proj_dir = os.path.normpath(os.path.join(test_dir, "..")) -grammar_path = os.path.join(test_dir, "..", "Grammar.txt") -grammar = driver.load_grammar(grammar_path) -driver = driver.Driver(grammar, convert=pytree.convert) - -def parse_string(string): - return driver.parse_string(reformat(string), debug=True) - -def run_all_tests(test_mod=None, tests=None): - if tests is None: - tests = unittest.TestLoader().loadTestsFromModule(test_mod) - unittest.TextTestRunner(verbosity=2).run(tests) - -def reformat(string): - return dedent(string) + u"\n\n" - -def get_refactorer(fixer_pkg="lib2to3", fixers=None, options=None): - """ - A convenience function for creating a RefactoringTool for tests. - - fixers is a list of fixers for the RefactoringTool to use. By default - "lib2to3.fixes.*" is used. options is an optional dictionary of options to - be passed to the RefactoringTool. - """ - if fixers is not None: - fixers = [fixer_pkg + ".fixes.fix_" + fix for fix in fixers] - else: - fixers = refactor.get_fixers_from_package(fixer_pkg + ".fixes") - options = options or {} - return refactor.RefactoringTool(fixers, options, explicit=True) - -def all_project_files(): - for dirpath, dirnames, filenames in os.walk(proj_dir): - for filename in filenames: - if filename.endswith(".py"): - yield os.path.join(dirpath, filename) - -TestCase = unittest.TestCase diff --git a/PythonLib/extra/lib2to3/tests/test_all_fixers.py b/PythonLib/extra/lib2to3/tests/test_all_fixers.py deleted file mode 100644 index f64b3d94..00000000 --- a/PythonLib/extra/lib2to3/tests/test_all_fixers.py +++ /dev/null @@ -1,23 +0,0 @@ -"""Tests that run all fixer modules over an input stream. - -This has been broken out into its own test module because of its -running time. -""" -# Author: Collin Winter - -# Python imports -import unittest - -# Local imports -from lib2to3 import refactor -from . import support - - -class Test_all(support.TestCase): - - def setUp(self): - self.refactor = support.get_refactorer() - - def test_all_project_files(self): - for filepath in support.all_project_files(): - self.refactor.refactor_file(filepath) diff --git a/PythonLib/extra/lib2to3/tests/test_fixers.py b/PythonLib/extra/lib2to3/tests/test_fixers.py deleted file mode 100644 index 6801c170..00000000 --- a/PythonLib/extra/lib2to3/tests/test_fixers.py +++ /dev/null @@ -1,4578 +0,0 @@ -""" Test suite for the fixer modules """ - -# Python imports -import os -import unittest -from itertools import chain -from operator import itemgetter - -# Local imports -from lib2to3 import pygram, pytree, refactor, fixer_util -from lib2to3.tests import support - - -class FixerTestCase(support.TestCase): - - # Other test cases can subclass this class and replace "fixer_pkg" with - # their own. - def setUp(self, fix_list=None, fixer_pkg="lib2to3", options=None): - if fix_list is None: - fix_list = [self.fixer] - self.refactor = support.get_refactorer(fixer_pkg, fix_list, options) - self.fixer_log = [] - self.filename = u"" - - for fixer in chain(self.refactor.pre_order, - self.refactor.post_order): - fixer.log = self.fixer_log - - def _check(self, before, after): - before = support.reformat(before) - after = support.reformat(after) - tree = self.refactor.refactor_string(before, self.filename) - self.assertEqual(after, unicode(tree)) - return tree - - def check(self, before, after, ignore_warnings=False): - tree = self._check(before, after) - self.assertTrue(tree.was_changed) - if not ignore_warnings: - self.assertEqual(self.fixer_log, []) - - def warns(self, before, after, message, unchanged=False): - tree = self._check(before, after) - self.assertTrue(message in "".join(self.fixer_log)) - if not unchanged: - self.assertTrue(tree.was_changed) - - def warns_unchanged(self, before, message): - self.warns(before, before, message, unchanged=True) - - def unchanged(self, before, ignore_warnings=False): - self._check(before, before) - if not ignore_warnings: - self.assertEqual(self.fixer_log, []) - - def assert_runs_after(self, *names): - fixes = [self.fixer] - fixes.extend(names) - r = support.get_refactorer("lib2to3", fixes) - (pre, post) = r.get_fixers() - n = "fix_" + self.fixer - if post and post[-1].__class__.__module__.endswith(n): - # We're the last fixer to run - return - if pre and pre[-1].__class__.__module__.endswith(n) and not post: - # We're the last in pre and post is empty - return - self.fail("Fixer run order (%s) is incorrect; %s should be last."\ - %(", ".join([x.__class__.__module__ for x in (pre+post)]), n)) - -class Test_ne(FixerTestCase): - fixer = "ne" - - def test_basic(self): - b = """if x <> y: - pass""" - - a = """if x != y: - pass""" - self.check(b, a) - - def test_no_spaces(self): - b = """if x<>y: - pass""" - - a = """if x!=y: - pass""" - self.check(b, a) - - def test_chained(self): - b = """if x<>y<>z: - pass""" - - a = """if x!=y!=z: - pass""" - self.check(b, a) - -class Test_has_key(FixerTestCase): - fixer = "has_key" - - def test_1(self): - b = """x = d.has_key("x") or d.has_key("y")""" - a = """x = "x" in d or "y" in d""" - self.check(b, a) - - def test_2(self): - b = """x = a.b.c.d.has_key("x") ** 3""" - a = """x = ("x" in a.b.c.d) ** 3""" - self.check(b, a) - - def test_3(self): - b = """x = a.b.has_key(1 + 2).__repr__()""" - a = """x = (1 + 2 in a.b).__repr__()""" - self.check(b, a) - - def test_4(self): - b = """x = a.b.has_key(1 + 2).__repr__() ** -3 ** 4""" - a = """x = (1 + 2 in a.b).__repr__() ** -3 ** 4""" - self.check(b, a) - - def test_5(self): - b = """x = a.has_key(f or g)""" - a = """x = (f or g) in a""" - self.check(b, a) - - def test_6(self): - b = """x = a + b.has_key(c)""" - a = """x = a + (c in b)""" - self.check(b, a) - - def test_7(self): - b = """x = a.has_key(lambda: 12)""" - a = """x = (lambda: 12) in a""" - self.check(b, a) - - def test_8(self): - b = """x = a.has_key(a for a in b)""" - a = """x = (a for a in b) in a""" - self.check(b, a) - - def test_9(self): - b = """if not a.has_key(b): pass""" - a = """if b not in a: pass""" - self.check(b, a) - - def test_10(self): - b = """if not a.has_key(b).__repr__(): pass""" - a = """if not (b in a).__repr__(): pass""" - self.check(b, a) - - def test_11(self): - b = """if not a.has_key(b) ** 2: pass""" - a = """if not (b in a) ** 2: pass""" - self.check(b, a) - -class Test_apply(FixerTestCase): - fixer = "apply" - - def test_1(self): - b = """x = apply(f, g + h)""" - a = """x = f(*g + h)""" - self.check(b, a) - - def test_2(self): - b = """y = apply(f, g, h)""" - a = """y = f(*g, **h)""" - self.check(b, a) - - def test_3(self): - b = """z = apply(fs[0], g or h, h or g)""" - a = """z = fs[0](*g or h, **h or g)""" - self.check(b, a) - - def test_4(self): - b = """apply(f, (x, y) + t)""" - a = """f(*(x, y) + t)""" - self.check(b, a) - - def test_5(self): - b = """apply(f, args,)""" - a = """f(*args)""" - self.check(b, a) - - def test_6(self): - b = """apply(f, args, kwds,)""" - a = """f(*args, **kwds)""" - self.check(b, a) - - # Test that complex functions are parenthesized - - def test_complex_1(self): - b = """x = apply(f+g, args)""" - a = """x = (f+g)(*args)""" - self.check(b, a) - - def test_complex_2(self): - b = """x = apply(f*g, args)""" - a = """x = (f*g)(*args)""" - self.check(b, a) - - def test_complex_3(self): - b = """x = apply(f**g, args)""" - a = """x = (f**g)(*args)""" - self.check(b, a) - - # But dotted names etc. not - - def test_dotted_name(self): - b = """x = apply(f.g, args)""" - a = """x = f.g(*args)""" - self.check(b, a) - - def test_subscript(self): - b = """x = apply(f[x], args)""" - a = """x = f[x](*args)""" - self.check(b, a) - - def test_call(self): - b = """x = apply(f(), args)""" - a = """x = f()(*args)""" - self.check(b, a) - - # Extreme case - def test_extreme(self): - b = """x = apply(a.b.c.d.e.f, args, kwds)""" - a = """x = a.b.c.d.e.f(*args, **kwds)""" - self.check(b, a) - - # XXX Comments in weird places still get lost - def test_weird_comments(self): - b = """apply( # foo - f, # bar - args)""" - a = """f(*args)""" - self.check(b, a) - - # These should *not* be touched - - def test_unchanged_1(self): - s = """apply()""" - self.unchanged(s) - - def test_unchanged_2(self): - s = """apply(f)""" - self.unchanged(s) - - def test_unchanged_3(self): - s = """apply(f,)""" - self.unchanged(s) - - def test_unchanged_4(self): - s = """apply(f, args, kwds, extras)""" - self.unchanged(s) - - def test_unchanged_5(self): - s = """apply(f, *args, **kwds)""" - self.unchanged(s) - - def test_unchanged_6(self): - s = """apply(f, *args)""" - self.unchanged(s) - - def test_unchanged_7(self): - s = """apply(func=f, args=args, kwds=kwds)""" - self.unchanged(s) - - def test_unchanged_8(self): - s = """apply(f, args=args, kwds=kwds)""" - self.unchanged(s) - - def test_unchanged_9(self): - s = """apply(f, args, kwds=kwds)""" - self.unchanged(s) - - def test_space_1(self): - a = """apply( f, args, kwds)""" - b = """f(*args, **kwds)""" - self.check(a, b) - - def test_space_2(self): - a = """apply( f ,args,kwds )""" - b = """f(*args, **kwds)""" - self.check(a, b) - -class Test_intern(FixerTestCase): - fixer = "intern" - - def test_prefix_preservation(self): - b = """x = intern( a )""" - a = """import sys\nx = sys.intern( a )""" - self.check(b, a) - - b = """y = intern("b" # test - )""" - a = """import sys\ny = sys.intern("b" # test - )""" - self.check(b, a) - - b = """z = intern(a+b+c.d, )""" - a = """import sys\nz = sys.intern(a+b+c.d, )""" - self.check(b, a) - - def test(self): - b = """x = intern(a)""" - a = """import sys\nx = sys.intern(a)""" - self.check(b, a) - - b = """z = intern(a+b+c.d,)""" - a = """import sys\nz = sys.intern(a+b+c.d,)""" - self.check(b, a) - - b = """intern("y%s" % 5).replace("y", "")""" - a = """import sys\nsys.intern("y%s" % 5).replace("y", "")""" - self.check(b, a) - - # These should not be refactored - - def test_unchanged(self): - s = """intern(a=1)""" - self.unchanged(s) - - s = """intern(f, g)""" - self.unchanged(s) - - s = """intern(*h)""" - self.unchanged(s) - - s = """intern(**i)""" - self.unchanged(s) - - s = """intern()""" - self.unchanged(s) - -class Test_reduce(FixerTestCase): - fixer = "reduce" - - def test_simple_call(self): - b = "reduce(a, b, c)" - a = "from functools import reduce\nreduce(a, b, c)" - self.check(b, a) - - def test_bug_7253(self): - # fix_tuple_params was being bad and orphaning nodes in the tree. - b = "def x(arg): reduce(sum, [])" - a = "from functools import reduce\ndef x(arg): reduce(sum, [])" - self.check(b, a) - - def test_call_with_lambda(self): - b = "reduce(lambda x, y: x + y, seq)" - a = "from functools import reduce\nreduce(lambda x, y: x + y, seq)" - self.check(b, a) - - def test_unchanged(self): - s = "reduce(a)" - self.unchanged(s) - - s = "reduce(a, b=42)" - self.unchanged(s) - - s = "reduce(a, b, c, d)" - self.unchanged(s) - - s = "reduce(**c)" - self.unchanged(s) - - s = "reduce()" - self.unchanged(s) - -class Test_print(FixerTestCase): - fixer = "print" - - def test_prefix_preservation(self): - b = """print 1, 1+1, 1+1+1""" - a = """print(1, 1+1, 1+1+1)""" - self.check(b, a) - - def test_idempotency(self): - s = """print()""" - self.unchanged(s) - - s = """print('')""" - self.unchanged(s) - - def test_idempotency_print_as_function(self): - self.refactor.driver.grammar = pygram.python_grammar_no_print_statement - s = """print(1, 1+1, 1+1+1)""" - self.unchanged(s) - - s = """print()""" - self.unchanged(s) - - s = """print('')""" - self.unchanged(s) - - def test_1(self): - b = """print 1, 1+1, 1+1+1""" - a = """print(1, 1+1, 1+1+1)""" - self.check(b, a) - - def test_2(self): - b = """print 1, 2""" - a = """print(1, 2)""" - self.check(b, a) - - def test_3(self): - b = """print""" - a = """print()""" - self.check(b, a) - - def test_4(self): - # from bug 3000 - b = """print whatever; print""" - a = """print(whatever); print()""" - self.check(b, a) - - def test_5(self): - b = """print; print whatever;""" - a = """print(); print(whatever);""" - self.check(b, a) - - def test_tuple(self): - b = """print (a, b, c)""" - a = """print((a, b, c))""" - self.check(b, a) - - # trailing commas - - def test_trailing_comma_1(self): - b = """print 1, 2, 3,""" - a = """print(1, 2, 3, end=' ')""" - self.check(b, a) - - def test_trailing_comma_2(self): - b = """print 1, 2,""" - a = """print(1, 2, end=' ')""" - self.check(b, a) - - def test_trailing_comma_3(self): - b = """print 1,""" - a = """print(1, end=' ')""" - self.check(b, a) - - # >> stuff - - def test_vargs_without_trailing_comma(self): - b = """print >>sys.stderr, 1, 2, 3""" - a = """print(1, 2, 3, file=sys.stderr)""" - self.check(b, a) - - def test_with_trailing_comma(self): - b = """print >>sys.stderr, 1, 2,""" - a = """print(1, 2, end=' ', file=sys.stderr)""" - self.check(b, a) - - def test_no_trailing_comma(self): - b = """print >>sys.stderr, 1+1""" - a = """print(1+1, file=sys.stderr)""" - self.check(b, a) - - def test_spaces_before_file(self): - b = """print >> sys.stderr""" - a = """print(file=sys.stderr)""" - self.check(b, a) - - def test_with_future_print_function(self): - s = "from __future__ import print_function\n" \ - "print('Hai!', end=' ')" - self.unchanged(s) - - b = "print 'Hello, world!'" - a = "print('Hello, world!')" - self.check(b, a) - - -class Test_exec(FixerTestCase): - fixer = "exec" - - def test_prefix_preservation(self): - b = """ exec code in ns1, ns2""" - a = """ exec(code, ns1, ns2)""" - self.check(b, a) - - def test_basic(self): - b = """exec code""" - a = """exec(code)""" - self.check(b, a) - - def test_with_globals(self): - b = """exec code in ns""" - a = """exec(code, ns)""" - self.check(b, a) - - def test_with_globals_locals(self): - b = """exec code in ns1, ns2""" - a = """exec(code, ns1, ns2)""" - self.check(b, a) - - def test_complex_1(self): - b = """exec (a.b()) in ns""" - a = """exec((a.b()), ns)""" - self.check(b, a) - - def test_complex_2(self): - b = """exec a.b() + c in ns""" - a = """exec(a.b() + c, ns)""" - self.check(b, a) - - # These should not be touched - - def test_unchanged_1(self): - s = """exec(code)""" - self.unchanged(s) - - def test_unchanged_2(self): - s = """exec (code)""" - self.unchanged(s) - - def test_unchanged_3(self): - s = """exec(code, ns)""" - self.unchanged(s) - - def test_unchanged_4(self): - s = """exec(code, ns1, ns2)""" - self.unchanged(s) - -class Test_repr(FixerTestCase): - fixer = "repr" - - def test_prefix_preservation(self): - b = """x = `1 + 2`""" - a = """x = repr(1 + 2)""" - self.check(b, a) - - def test_simple_1(self): - b = """x = `1 + 2`""" - a = """x = repr(1 + 2)""" - self.check(b, a) - - def test_simple_2(self): - b = """y = `x`""" - a = """y = repr(x)""" - self.check(b, a) - - def test_complex(self): - b = """z = `y`.__repr__()""" - a = """z = repr(y).__repr__()""" - self.check(b, a) - - def test_tuple(self): - b = """x = `1, 2, 3`""" - a = """x = repr((1, 2, 3))""" - self.check(b, a) - - def test_nested(self): - b = """x = `1 + `2``""" - a = """x = repr(1 + repr(2))""" - self.check(b, a) - - def test_nested_tuples(self): - b = """x = `1, 2 + `3, 4``""" - a = """x = repr((1, 2 + repr((3, 4))))""" - self.check(b, a) - -class Test_except(FixerTestCase): - fixer = "except" - - def test_prefix_preservation(self): - b = """ - try: - pass - except (RuntimeError, ImportError), e: - pass""" - a = """ - try: - pass - except (RuntimeError, ImportError) as e: - pass""" - self.check(b, a) - - def test_simple(self): - b = """ - try: - pass - except Foo, e: - pass""" - a = """ - try: - pass - except Foo as e: - pass""" - self.check(b, a) - - def test_simple_no_space_before_target(self): - b = """ - try: - pass - except Foo,e: - pass""" - a = """ - try: - pass - except Foo as e: - pass""" - self.check(b, a) - - def test_tuple_unpack(self): - b = """ - def foo(): - try: - pass - except Exception, (f, e): - pass - except ImportError, e: - pass""" - - a = """ - def foo(): - try: - pass - except Exception as xxx_todo_changeme: - (f, e) = xxx_todo_changeme.args - pass - except ImportError as e: - pass""" - self.check(b, a) - - def test_multi_class(self): - b = """ - try: - pass - except (RuntimeError, ImportError), e: - pass""" - - a = """ - try: - pass - except (RuntimeError, ImportError) as e: - pass""" - self.check(b, a) - - def test_list_unpack(self): - b = """ - try: - pass - except Exception, [a, b]: - pass""" - - a = """ - try: - pass - except Exception as xxx_todo_changeme: - [a, b] = xxx_todo_changeme.args - pass""" - self.check(b, a) - - def test_weird_target_1(self): - b = """ - try: - pass - except Exception, d[5]: - pass""" - - a = """ - try: - pass - except Exception as xxx_todo_changeme: - d[5] = xxx_todo_changeme - pass""" - self.check(b, a) - - def test_weird_target_2(self): - b = """ - try: - pass - except Exception, a.foo: - pass""" - - a = """ - try: - pass - except Exception as xxx_todo_changeme: - a.foo = xxx_todo_changeme - pass""" - self.check(b, a) - - def test_weird_target_3(self): - b = """ - try: - pass - except Exception, a().foo: - pass""" - - a = """ - try: - pass - except Exception as xxx_todo_changeme: - a().foo = xxx_todo_changeme - pass""" - self.check(b, a) - - def test_bare_except(self): - b = """ - try: - pass - except Exception, a: - pass - except: - pass""" - - a = """ - try: - pass - except Exception as a: - pass - except: - pass""" - self.check(b, a) - - def test_bare_except_and_else_finally(self): - b = """ - try: - pass - except Exception, a: - pass - except: - pass - else: - pass - finally: - pass""" - - a = """ - try: - pass - except Exception as a: - pass - except: - pass - else: - pass - finally: - pass""" - self.check(b, a) - - def test_multi_fixed_excepts_before_bare_except(self): - b = """ - try: - pass - except TypeError, b: - pass - except Exception, a: - pass - except: - pass""" - - a = """ - try: - pass - except TypeError as b: - pass - except Exception as a: - pass - except: - pass""" - self.check(b, a) - - def test_one_line_suites(self): - b = """ - try: raise TypeError - except TypeError, e: - pass - """ - a = """ - try: raise TypeError - except TypeError as e: - pass - """ - self.check(b, a) - b = """ - try: - raise TypeError - except TypeError, e: pass - """ - a = """ - try: - raise TypeError - except TypeError as e: pass - """ - self.check(b, a) - b = """ - try: raise TypeError - except TypeError, e: pass - """ - a = """ - try: raise TypeError - except TypeError as e: pass - """ - self.check(b, a) - b = """ - try: raise TypeError - except TypeError, e: pass - else: function() - finally: done() - """ - a = """ - try: raise TypeError - except TypeError as e: pass - else: function() - finally: done() - """ - self.check(b, a) - - # These should not be touched: - - def test_unchanged_1(self): - s = """ - try: - pass - except: - pass""" - self.unchanged(s) - - def test_unchanged_2(self): - s = """ - try: - pass - except Exception: - pass""" - self.unchanged(s) - - def test_unchanged_3(self): - s = """ - try: - pass - except (Exception, SystemExit): - pass""" - self.unchanged(s) - -class Test_raise(FixerTestCase): - fixer = "raise" - - def test_basic(self): - b = """raise Exception, 5""" - a = """raise Exception(5)""" - self.check(b, a) - - def test_prefix_preservation(self): - b = """raise Exception,5""" - a = """raise Exception(5)""" - self.check(b, a) - - b = """raise Exception, 5""" - a = """raise Exception(5)""" - self.check(b, a) - - def test_with_comments(self): - b = """raise Exception, 5 # foo""" - a = """raise Exception(5) # foo""" - self.check(b, a) - - b = """raise E, (5, 6) % (a, b) # foo""" - a = """raise E((5, 6) % (a, b)) # foo""" - self.check(b, a) - - b = """def foo(): - raise Exception, 5, 6 # foo""" - a = """def foo(): - raise Exception(5).with_traceback(6) # foo""" - self.check(b, a) - - def test_None_value(self): - b = """raise Exception(5), None, tb""" - a = """raise Exception(5).with_traceback(tb)""" - self.check(b, a) - - def test_tuple_value(self): - b = """raise Exception, (5, 6, 7)""" - a = """raise Exception(5, 6, 7)""" - self.check(b, a) - - def test_tuple_detection(self): - b = """raise E, (5, 6) % (a, b)""" - a = """raise E((5, 6) % (a, b))""" - self.check(b, a) - - def test_tuple_exc_1(self): - b = """raise (((E1, E2), E3), E4), V""" - a = """raise E1(V)""" - self.check(b, a) - - def test_tuple_exc_2(self): - b = """raise (E1, (E2, E3), E4), V""" - a = """raise E1(V)""" - self.check(b, a) - - # These should produce a warning - - def test_string_exc(self): - s = """raise 'foo'""" - self.warns_unchanged(s, "Python 3 does not support string exceptions") - - def test_string_exc_val(self): - s = """raise "foo", 5""" - self.warns_unchanged(s, "Python 3 does not support string exceptions") - - def test_string_exc_val_tb(self): - s = """raise "foo", 5, 6""" - self.warns_unchanged(s, "Python 3 does not support string exceptions") - - # These should result in traceback-assignment - - def test_tb_1(self): - b = """def foo(): - raise Exception, 5, 6""" - a = """def foo(): - raise Exception(5).with_traceback(6)""" - self.check(b, a) - - def test_tb_2(self): - b = """def foo(): - a = 5 - raise Exception, 5, 6 - b = 6""" - a = """def foo(): - a = 5 - raise Exception(5).with_traceback(6) - b = 6""" - self.check(b, a) - - def test_tb_3(self): - b = """def foo(): - raise Exception,5,6""" - a = """def foo(): - raise Exception(5).with_traceback(6)""" - self.check(b, a) - - def test_tb_4(self): - b = """def foo(): - a = 5 - raise Exception,5,6 - b = 6""" - a = """def foo(): - a = 5 - raise Exception(5).with_traceback(6) - b = 6""" - self.check(b, a) - - def test_tb_5(self): - b = """def foo(): - raise Exception, (5, 6, 7), 6""" - a = """def foo(): - raise Exception(5, 6, 7).with_traceback(6)""" - self.check(b, a) - - def test_tb_6(self): - b = """def foo(): - a = 5 - raise Exception, (5, 6, 7), 6 - b = 6""" - a = """def foo(): - a = 5 - raise Exception(5, 6, 7).with_traceback(6) - b = 6""" - self.check(b, a) - -class Test_throw(FixerTestCase): - fixer = "throw" - - def test_1(self): - b = """g.throw(Exception, 5)""" - a = """g.throw(Exception(5))""" - self.check(b, a) - - def test_2(self): - b = """g.throw(Exception,5)""" - a = """g.throw(Exception(5))""" - self.check(b, a) - - def test_3(self): - b = """g.throw(Exception, (5, 6, 7))""" - a = """g.throw(Exception(5, 6, 7))""" - self.check(b, a) - - def test_4(self): - b = """5 + g.throw(Exception, 5)""" - a = """5 + g.throw(Exception(5))""" - self.check(b, a) - - # These should produce warnings - - def test_warn_1(self): - s = """g.throw("foo")""" - self.warns_unchanged(s, "Python 3 does not support string exceptions") - - def test_warn_2(self): - s = """g.throw("foo", 5)""" - self.warns_unchanged(s, "Python 3 does not support string exceptions") - - def test_warn_3(self): - s = """g.throw("foo", 5, 6)""" - self.warns_unchanged(s, "Python 3 does not support string exceptions") - - # These should not be touched - - def test_untouched_1(self): - s = """g.throw(Exception)""" - self.unchanged(s) - - def test_untouched_2(self): - s = """g.throw(Exception(5, 6))""" - self.unchanged(s) - - def test_untouched_3(self): - s = """5 + g.throw(Exception(5, 6))""" - self.unchanged(s) - - # These should result in traceback-assignment - - def test_tb_1(self): - b = """def foo(): - g.throw(Exception, 5, 6)""" - a = """def foo(): - g.throw(Exception(5).with_traceback(6))""" - self.check(b, a) - - def test_tb_2(self): - b = """def foo(): - a = 5 - g.throw(Exception, 5, 6) - b = 6""" - a = """def foo(): - a = 5 - g.throw(Exception(5).with_traceback(6)) - b = 6""" - self.check(b, a) - - def test_tb_3(self): - b = """def foo(): - g.throw(Exception,5,6)""" - a = """def foo(): - g.throw(Exception(5).with_traceback(6))""" - self.check(b, a) - - def test_tb_4(self): - b = """def foo(): - a = 5 - g.throw(Exception,5,6) - b = 6""" - a = """def foo(): - a = 5 - g.throw(Exception(5).with_traceback(6)) - b = 6""" - self.check(b, a) - - def test_tb_5(self): - b = """def foo(): - g.throw(Exception, (5, 6, 7), 6)""" - a = """def foo(): - g.throw(Exception(5, 6, 7).with_traceback(6))""" - self.check(b, a) - - def test_tb_6(self): - b = """def foo(): - a = 5 - g.throw(Exception, (5, 6, 7), 6) - b = 6""" - a = """def foo(): - a = 5 - g.throw(Exception(5, 6, 7).with_traceback(6)) - b = 6""" - self.check(b, a) - - def test_tb_7(self): - b = """def foo(): - a + g.throw(Exception, 5, 6)""" - a = """def foo(): - a + g.throw(Exception(5).with_traceback(6))""" - self.check(b, a) - - def test_tb_8(self): - b = """def foo(): - a = 5 - a + g.throw(Exception, 5, 6) - b = 6""" - a = """def foo(): - a = 5 - a + g.throw(Exception(5).with_traceback(6)) - b = 6""" - self.check(b, a) - -class Test_long(FixerTestCase): - fixer = "long" - - def test_1(self): - b = """x = long(x)""" - a = """x = int(x)""" - self.check(b, a) - - def test_2(self): - b = """y = isinstance(x, long)""" - a = """y = isinstance(x, int)""" - self.check(b, a) - - def test_3(self): - b = """z = type(x) in (int, long)""" - a = """z = type(x) in (int, int)""" - self.check(b, a) - - def test_unchanged(self): - s = """long = True""" - self.unchanged(s) - - s = """s.long = True""" - self.unchanged(s) - - s = """def long(): pass""" - self.unchanged(s) - - s = """class long(): pass""" - self.unchanged(s) - - s = """def f(long): pass""" - self.unchanged(s) - - s = """def f(g, long): pass""" - self.unchanged(s) - - s = """def f(x, long=True): pass""" - self.unchanged(s) - - def test_prefix_preservation(self): - b = """x = long( x )""" - a = """x = int( x )""" - self.check(b, a) - - -class Test_execfile(FixerTestCase): - fixer = "execfile" - - def test_conversion(self): - b = """execfile("fn")""" - a = """exec(compile(open("fn").read(), "fn", 'exec'))""" - self.check(b, a) - - b = """execfile("fn", glob)""" - a = """exec(compile(open("fn").read(), "fn", 'exec'), glob)""" - self.check(b, a) - - b = """execfile("fn", glob, loc)""" - a = """exec(compile(open("fn").read(), "fn", 'exec'), glob, loc)""" - self.check(b, a) - - b = """execfile("fn", globals=glob)""" - a = """exec(compile(open("fn").read(), "fn", 'exec'), globals=glob)""" - self.check(b, a) - - b = """execfile("fn", locals=loc)""" - a = """exec(compile(open("fn").read(), "fn", 'exec'), locals=loc)""" - self.check(b, a) - - b = """execfile("fn", globals=glob, locals=loc)""" - a = """exec(compile(open("fn").read(), "fn", 'exec'), globals=glob, locals=loc)""" - self.check(b, a) - - def test_spacing(self): - b = """execfile( "fn" )""" - a = """exec(compile(open( "fn" ).read(), "fn", 'exec'))""" - self.check(b, a) - - b = """execfile("fn", globals = glob)""" - a = """exec(compile(open("fn").read(), "fn", 'exec'), globals = glob)""" - self.check(b, a) - - -class Test_isinstance(FixerTestCase): - fixer = "isinstance" - - def test_remove_multiple_items(self): - b = """isinstance(x, (int, int, int))""" - a = """isinstance(x, int)""" - self.check(b, a) - - b = """isinstance(x, (int, float, int, int, float))""" - a = """isinstance(x, (int, float))""" - self.check(b, a) - - b = """isinstance(x, (int, float, int, int, float, str))""" - a = """isinstance(x, (int, float, str))""" - self.check(b, a) - - b = """isinstance(foo() + bar(), (x(), y(), x(), int, int))""" - a = """isinstance(foo() + bar(), (x(), y(), x(), int))""" - self.check(b, a) - - def test_prefix_preservation(self): - b = """if isinstance( foo(), ( bar, bar, baz )) : pass""" - a = """if isinstance( foo(), ( bar, baz )) : pass""" - self.check(b, a) - - def test_unchanged(self): - self.unchanged("isinstance(x, (str, int))") - -class Test_dict(FixerTestCase): - fixer = "dict" - - def test_prefix_preservation(self): - b = "if d. keys ( ) : pass" - a = "if list(d. keys ( )) : pass" - self.check(b, a) - - b = "if d. items ( ) : pass" - a = "if list(d. items ( )) : pass" - self.check(b, a) - - b = "if d. iterkeys ( ) : pass" - a = "if iter(d. keys ( )) : pass" - self.check(b, a) - - b = "[i for i in d. iterkeys( ) ]" - a = "[i for i in d. keys( ) ]" - self.check(b, a) - - b = "if d. viewkeys ( ) : pass" - a = "if d. keys ( ) : pass" - self.check(b, a) - - b = "[i for i in d. viewkeys( ) ]" - a = "[i for i in d. keys( ) ]" - self.check(b, a) - - def test_trailing_comment(self): - b = "d.keys() # foo" - a = "list(d.keys()) # foo" - self.check(b, a) - - b = "d.items() # foo" - a = "list(d.items()) # foo" - self.check(b, a) - - b = "d.iterkeys() # foo" - a = "iter(d.keys()) # foo" - self.check(b, a) - - b = """[i for i in d.iterkeys() # foo - ]""" - a = """[i for i in d.keys() # foo - ]""" - self.check(b, a) - - b = """[i for i in d.iterkeys() # foo - ]""" - a = """[i for i in d.keys() # foo - ]""" - self.check(b, a) - - b = "d.viewitems() # foo" - a = "d.items() # foo" - self.check(b, a) - - def test_unchanged(self): - for wrapper in fixer_util.consuming_calls: - s = "s = %s(d.keys())" % wrapper - self.unchanged(s) - - s = "s = %s(d.values())" % wrapper - self.unchanged(s) - - s = "s = %s(d.items())" % wrapper - self.unchanged(s) - - def test_01(self): - b = "d.keys()" - a = "list(d.keys())" - self.check(b, a) - - b = "a[0].foo().keys()" - a = "list(a[0].foo().keys())" - self.check(b, a) - - def test_02(self): - b = "d.items()" - a = "list(d.items())" - self.check(b, a) - - def test_03(self): - b = "d.values()" - a = "list(d.values())" - self.check(b, a) - - def test_04(self): - b = "d.iterkeys()" - a = "iter(d.keys())" - self.check(b, a) - - def test_05(self): - b = "d.iteritems()" - a = "iter(d.items())" - self.check(b, a) - - def test_06(self): - b = "d.itervalues()" - a = "iter(d.values())" - self.check(b, a) - - def test_07(self): - s = "list(d.keys())" - self.unchanged(s) - - def test_08(self): - s = "sorted(d.keys())" - self.unchanged(s) - - def test_09(self): - b = "iter(d.keys())" - a = "iter(list(d.keys()))" - self.check(b, a) - - def test_10(self): - b = "foo(d.keys())" - a = "foo(list(d.keys()))" - self.check(b, a) - - def test_11(self): - b = "for i in d.keys(): print i" - a = "for i in list(d.keys()): print i" - self.check(b, a) - - def test_12(self): - b = "for i in d.iterkeys(): print i" - a = "for i in d.keys(): print i" - self.check(b, a) - - def test_13(self): - b = "[i for i in d.keys()]" - a = "[i for i in list(d.keys())]" - self.check(b, a) - - def test_14(self): - b = "[i for i in d.iterkeys()]" - a = "[i for i in d.keys()]" - self.check(b, a) - - def test_15(self): - b = "(i for i in d.keys())" - a = "(i for i in list(d.keys()))" - self.check(b, a) - - def test_16(self): - b = "(i for i in d.iterkeys())" - a = "(i for i in d.keys())" - self.check(b, a) - - def test_17(self): - b = "iter(d.iterkeys())" - a = "iter(d.keys())" - self.check(b, a) - - def test_18(self): - b = "list(d.iterkeys())" - a = "list(d.keys())" - self.check(b, a) - - def test_19(self): - b = "sorted(d.iterkeys())" - a = "sorted(d.keys())" - self.check(b, a) - - def test_20(self): - b = "foo(d.iterkeys())" - a = "foo(iter(d.keys()))" - self.check(b, a) - - def test_21(self): - b = "print h.iterkeys().next()" - a = "print iter(h.keys()).next()" - self.check(b, a) - - def test_22(self): - b = "print h.keys()[0]" - a = "print list(h.keys())[0]" - self.check(b, a) - - def test_23(self): - b = "print list(h.iterkeys().next())" - a = "print list(iter(h.keys()).next())" - self.check(b, a) - - def test_24(self): - b = "for x in h.keys()[0]: print x" - a = "for x in list(h.keys())[0]: print x" - self.check(b, a) - - def test_25(self): - b = "d.viewkeys()" - a = "d.keys()" - self.check(b, a) - - def test_26(self): - b = "d.viewitems()" - a = "d.items()" - self.check(b, a) - - def test_27(self): - b = "d.viewvalues()" - a = "d.values()" - self.check(b, a) - - def test_28(self): - b = "[i for i in d.viewkeys()]" - a = "[i for i in d.keys()]" - self.check(b, a) - - def test_29(self): - b = "(i for i in d.viewkeys())" - a = "(i for i in d.keys())" - self.check(b, a) - - def test_30(self): - b = "iter(d.viewkeys())" - a = "iter(d.keys())" - self.check(b, a) - - def test_31(self): - b = "list(d.viewkeys())" - a = "list(d.keys())" - self.check(b, a) - - def test_32(self): - b = "sorted(d.viewkeys())" - a = "sorted(d.keys())" - self.check(b, a) - -class Test_xrange(FixerTestCase): - fixer = "xrange" - - def test_prefix_preservation(self): - b = """x = xrange( 10 )""" - a = """x = range( 10 )""" - self.check(b, a) - - b = """x = xrange( 1 , 10 )""" - a = """x = range( 1 , 10 )""" - self.check(b, a) - - b = """x = xrange( 0 , 10 , 2 )""" - a = """x = range( 0 , 10 , 2 )""" - self.check(b, a) - - def test_single_arg(self): - b = """x = xrange(10)""" - a = """x = range(10)""" - self.check(b, a) - - def test_two_args(self): - b = """x = xrange(1, 10)""" - a = """x = range(1, 10)""" - self.check(b, a) - - def test_three_args(self): - b = """x = xrange(0, 10, 2)""" - a = """x = range(0, 10, 2)""" - self.check(b, a) - - def test_wrap_in_list(self): - b = """x = range(10, 3, 9)""" - a = """x = list(range(10, 3, 9))""" - self.check(b, a) - - b = """x = foo(range(10, 3, 9))""" - a = """x = foo(list(range(10, 3, 9)))""" - self.check(b, a) - - b = """x = range(10, 3, 9) + [4]""" - a = """x = list(range(10, 3, 9)) + [4]""" - self.check(b, a) - - b = """x = range(10)[::-1]""" - a = """x = list(range(10))[::-1]""" - self.check(b, a) - - b = """x = range(10) [3]""" - a = """x = list(range(10)) [3]""" - self.check(b, a) - - def test_xrange_in_for(self): - b = """for i in xrange(10):\n j=i""" - a = """for i in range(10):\n j=i""" - self.check(b, a) - - b = """[i for i in xrange(10)]""" - a = """[i for i in range(10)]""" - self.check(b, a) - - def test_range_in_for(self): - self.unchanged("for i in range(10): pass") - self.unchanged("[i for i in range(10)]") - - def test_in_contains_test(self): - self.unchanged("x in range(10, 3, 9)") - - def test_in_consuming_context(self): - for call in fixer_util.consuming_calls: - self.unchanged("a = %s(range(10))" % call) - -class Test_xrange_with_reduce(FixerTestCase): - - def setUp(self): - super(Test_xrange_with_reduce, self).setUp(["xrange", "reduce"]) - - def test_double_transform(self): - b = """reduce(x, xrange(5))""" - a = """from functools import reduce -reduce(x, range(5))""" - self.check(b, a) - -class Test_raw_input(FixerTestCase): - fixer = "raw_input" - - def test_prefix_preservation(self): - b = """x = raw_input( )""" - a = """x = input( )""" - self.check(b, a) - - b = """x = raw_input( '' )""" - a = """x = input( '' )""" - self.check(b, a) - - def test_1(self): - b = """x = raw_input()""" - a = """x = input()""" - self.check(b, a) - - def test_2(self): - b = """x = raw_input('')""" - a = """x = input('')""" - self.check(b, a) - - def test_3(self): - b = """x = raw_input('prompt')""" - a = """x = input('prompt')""" - self.check(b, a) - - def test_4(self): - b = """x = raw_input(foo(a) + 6)""" - a = """x = input(foo(a) + 6)""" - self.check(b, a) - - def test_5(self): - b = """x = raw_input(invite).split()""" - a = """x = input(invite).split()""" - self.check(b, a) - - def test_6(self): - b = """x = raw_input(invite) . split ()""" - a = """x = input(invite) . split ()""" - self.check(b, a) - - def test_8(self): - b = "x = int(raw_input())" - a = "x = int(input())" - self.check(b, a) - -class Test_funcattrs(FixerTestCase): - fixer = "funcattrs" - - attrs = ["closure", "doc", "name", "defaults", "code", "globals", "dict"] - - def test(self): - for attr in self.attrs: - b = "a.func_%s" % attr - a = "a.__%s__" % attr - self.check(b, a) - - b = "self.foo.func_%s.foo_bar" % attr - a = "self.foo.__%s__.foo_bar" % attr - self.check(b, a) - - def test_unchanged(self): - for attr in self.attrs: - s = "foo(func_%s + 5)" % attr - self.unchanged(s) - - s = "f(foo.__%s__)" % attr - self.unchanged(s) - - s = "f(foo.__%s__.foo)" % attr - self.unchanged(s) - -class Test_xreadlines(FixerTestCase): - fixer = "xreadlines" - - def test_call(self): - b = "for x in f.xreadlines(): pass" - a = "for x in f: pass" - self.check(b, a) - - b = "for x in foo().xreadlines(): pass" - a = "for x in foo(): pass" - self.check(b, a) - - b = "for x in (5 + foo()).xreadlines(): pass" - a = "for x in (5 + foo()): pass" - self.check(b, a) - - def test_attr_ref(self): - b = "foo(f.xreadlines + 5)" - a = "foo(f.__iter__ + 5)" - self.check(b, a) - - b = "foo(f().xreadlines + 5)" - a = "foo(f().__iter__ + 5)" - self.check(b, a) - - b = "foo((5 + f()).xreadlines + 5)" - a = "foo((5 + f()).__iter__ + 5)" - self.check(b, a) - - def test_unchanged(self): - s = "for x in f.xreadlines(5): pass" - self.unchanged(s) - - s = "for x in f.xreadlines(k=5): pass" - self.unchanged(s) - - s = "for x in f.xreadlines(*k, **v): pass" - self.unchanged(s) - - s = "foo(xreadlines)" - self.unchanged(s) - - -class ImportsFixerTests: - - def test_import_module(self): - for old, new in self.modules.items(): - b = "import %s" % old - a = "import %s" % new - self.check(b, a) - - b = "import foo, %s, bar" % old - a = "import foo, %s, bar" % new - self.check(b, a) - - def test_import_from(self): - for old, new in self.modules.items(): - b = "from %s import foo" % old - a = "from %s import foo" % new - self.check(b, a) - - b = "from %s import foo, bar" % old - a = "from %s import foo, bar" % new - self.check(b, a) - - b = "from %s import (yes, no)" % old - a = "from %s import (yes, no)" % new - self.check(b, a) - - def test_import_module_as(self): - for old, new in self.modules.items(): - b = "import %s as foo_bar" % old - a = "import %s as foo_bar" % new - self.check(b, a) - - b = "import %s as foo_bar" % old - a = "import %s as foo_bar" % new - self.check(b, a) - - def test_import_from_as(self): - for old, new in self.modules.items(): - b = "from %s import foo as bar" % old - a = "from %s import foo as bar" % new - self.check(b, a) - - def test_star(self): - for old, new in self.modules.items(): - b = "from %s import *" % old - a = "from %s import *" % new - self.check(b, a) - - def test_import_module_usage(self): - for old, new in self.modules.items(): - b = """ - import %s - foo(%s.bar) - """ % (old, old) - a = """ - import %s - foo(%s.bar) - """ % (new, new) - self.check(b, a) - - b = """ - from %s import x - %s = 23 - """ % (old, old) - a = """ - from %s import x - %s = 23 - """ % (new, old) - self.check(b, a) - - s = """ - def f(): - %s.method() - """ % (old,) - self.unchanged(s) - - # test nested usage - b = """ - import %s - %s.bar(%s.foo) - """ % (old, old, old) - a = """ - import %s - %s.bar(%s.foo) - """ % (new, new, new) - self.check(b, a) - - b = """ - import %s - x.%s - """ % (old, old) - a = """ - import %s - x.%s - """ % (new, old) - self.check(b, a) - - -class Test_imports(FixerTestCase, ImportsFixerTests): - fixer = "imports" - from ..fixes.fix_imports import MAPPING as modules - - def test_multiple_imports(self): - b = """import urlparse, cStringIO""" - a = """import urllib.parse, io""" - self.check(b, a) - - def test_multiple_imports_as(self): - b = """ - import copy_reg as bar, HTMLParser as foo, urlparse - s = urlparse.spam(bar.foo()) - """ - a = """ - import copyreg as bar, html.parser as foo, urllib.parse - s = urllib.parse.spam(bar.foo()) - """ - self.check(b, a) - - -class Test_imports2(FixerTestCase, ImportsFixerTests): - fixer = "imports2" - from ..fixes.fix_imports2 import MAPPING as modules - - -class Test_imports_fixer_order(FixerTestCase, ImportsFixerTests): - - def setUp(self): - super(Test_imports_fixer_order, self).setUp(['imports', 'imports2']) - from ..fixes.fix_imports2 import MAPPING as mapping2 - self.modules = mapping2.copy() - from ..fixes.fix_imports import MAPPING as mapping1 - for key in ('dbhash', 'dumbdbm', 'dbm', 'gdbm'): - self.modules[key] = mapping1[key] - - def test_after_local_imports_refactoring(self): - for fix in ("imports", "imports2"): - self.fixer = fix - self.assert_runs_after("import") - - -class Test_urllib(FixerTestCase): - fixer = "urllib" - from ..fixes.fix_urllib import MAPPING as modules - - def test_import_module(self): - for old, changes in self.modules.items(): - b = "import %s" % old - a = "import %s" % ", ".join(map(itemgetter(0), changes)) - self.check(b, a) - - def test_import_from(self): - for old, changes in self.modules.items(): - all_members = [] - for new, members in changes: - for member in members: - all_members.append(member) - b = "from %s import %s" % (old, member) - a = "from %s import %s" % (new, member) - self.check(b, a) - - s = "from foo import %s" % member - self.unchanged(s) - - b = "from %s import %s" % (old, ", ".join(members)) - a = "from %s import %s" % (new, ", ".join(members)) - self.check(b, a) - - s = "from foo import %s" % ", ".join(members) - self.unchanged(s) - - # test the breaking of a module into multiple replacements - b = "from %s import %s" % (old, ", ".join(all_members)) - a = "\n".join(["from %s import %s" % (new, ", ".join(members)) - for (new, members) in changes]) - self.check(b, a) - - def test_import_module_as(self): - for old in self.modules: - s = "import %s as foo" % old - self.warns_unchanged(s, "This module is now multiple modules") - - def test_import_from_as(self): - for old, changes in self.modules.items(): - for new, members in changes: - for member in members: - b = "from %s import %s as foo_bar" % (old, member) - a = "from %s import %s as foo_bar" % (new, member) - self.check(b, a) - b = "from %s import %s as blah, %s" % (old, member, member) - a = "from %s import %s as blah, %s" % (new, member, member) - self.check(b, a) - - def test_star(self): - for old in self.modules: - s = "from %s import *" % old - self.warns_unchanged(s, "Cannot handle star imports") - - def test_indented(self): - b = """ -def foo(): - from urllib import urlencode, urlopen -""" - a = """ -def foo(): - from urllib.parse import urlencode - from urllib.request import urlopen -""" - self.check(b, a) - - b = """ -def foo(): - other() - from urllib import urlencode, urlopen -""" - a = """ -def foo(): - other() - from urllib.parse import urlencode - from urllib.request import urlopen -""" - self.check(b, a) - - - - def test_import_module_usage(self): - for old, changes in self.modules.items(): - for new, members in changes: - for member in members: - new_import = ", ".join([n for (n, mems) - in self.modules[old]]) - b = """ - import %s - foo(%s.%s) - """ % (old, old, member) - a = """ - import %s - foo(%s.%s) - """ % (new_import, new, member) - self.check(b, a) - b = """ - import %s - %s.%s(%s.%s) - """ % (old, old, member, old, member) - a = """ - import %s - %s.%s(%s.%s) - """ % (new_import, new, member, new, member) - self.check(b, a) - - -class Test_input(FixerTestCase): - fixer = "input" - - def test_prefix_preservation(self): - b = """x = input( )""" - a = """x = eval(input( ))""" - self.check(b, a) - - b = """x = input( '' )""" - a = """x = eval(input( '' ))""" - self.check(b, a) - - def test_trailing_comment(self): - b = """x = input() # foo""" - a = """x = eval(input()) # foo""" - self.check(b, a) - - def test_idempotency(self): - s = """x = eval(input())""" - self.unchanged(s) - - s = """x = eval(input(''))""" - self.unchanged(s) - - s = """x = eval(input(foo(5) + 9))""" - self.unchanged(s) - - def test_1(self): - b = """x = input()""" - a = """x = eval(input())""" - self.check(b, a) - - def test_2(self): - b = """x = input('')""" - a = """x = eval(input(''))""" - self.check(b, a) - - def test_3(self): - b = """x = input('prompt')""" - a = """x = eval(input('prompt'))""" - self.check(b, a) - - def test_4(self): - b = """x = input(foo(5) + 9)""" - a = """x = eval(input(foo(5) + 9))""" - self.check(b, a) - -class Test_tuple_params(FixerTestCase): - fixer = "tuple_params" - - def test_unchanged_1(self): - s = """def foo(): pass""" - self.unchanged(s) - - def test_unchanged_2(self): - s = """def foo(a, b, c): pass""" - self.unchanged(s) - - def test_unchanged_3(self): - s = """def foo(a=3, b=4, c=5): pass""" - self.unchanged(s) - - def test_1(self): - b = """ - def foo(((a, b), c)): - x = 5""" - - a = """ - def foo(xxx_todo_changeme): - ((a, b), c) = xxx_todo_changeme - x = 5""" - self.check(b, a) - - def test_2(self): - b = """ - def foo(((a, b), c), d): - x = 5""" - - a = """ - def foo(xxx_todo_changeme, d): - ((a, b), c) = xxx_todo_changeme - x = 5""" - self.check(b, a) - - def test_3(self): - b = """ - def foo(((a, b), c), d) -> e: - x = 5""" - - a = """ - def foo(xxx_todo_changeme, d) -> e: - ((a, b), c) = xxx_todo_changeme - x = 5""" - self.check(b, a) - - def test_semicolon(self): - b = """ - def foo(((a, b), c)): x = 5; y = 7""" - - a = """ - def foo(xxx_todo_changeme): ((a, b), c) = xxx_todo_changeme; x = 5; y = 7""" - self.check(b, a) - - def test_keywords(self): - b = """ - def foo(((a, b), c), d, e=5) -> z: - x = 5""" - - a = """ - def foo(xxx_todo_changeme, d, e=5) -> z: - ((a, b), c) = xxx_todo_changeme - x = 5""" - self.check(b, a) - - def test_varargs(self): - b = """ - def foo(((a, b), c), d, *vargs, **kwargs) -> z: - x = 5""" - - a = """ - def foo(xxx_todo_changeme, d, *vargs, **kwargs) -> z: - ((a, b), c) = xxx_todo_changeme - x = 5""" - self.check(b, a) - - def test_multi_1(self): - b = """ - def foo(((a, b), c), (d, e, f)) -> z: - x = 5""" - - a = """ - def foo(xxx_todo_changeme, xxx_todo_changeme1) -> z: - ((a, b), c) = xxx_todo_changeme - (d, e, f) = xxx_todo_changeme1 - x = 5""" - self.check(b, a) - - def test_multi_2(self): - b = """ - def foo(x, ((a, b), c), d, (e, f, g), y) -> z: - x = 5""" - - a = """ - def foo(x, xxx_todo_changeme, d, xxx_todo_changeme1, y) -> z: - ((a, b), c) = xxx_todo_changeme - (e, f, g) = xxx_todo_changeme1 - x = 5""" - self.check(b, a) - - def test_docstring(self): - b = """ - def foo(((a, b), c), (d, e, f)) -> z: - "foo foo foo foo" - x = 5""" - - a = """ - def foo(xxx_todo_changeme, xxx_todo_changeme1) -> z: - "foo foo foo foo" - ((a, b), c) = xxx_todo_changeme - (d, e, f) = xxx_todo_changeme1 - x = 5""" - self.check(b, a) - - def test_lambda_no_change(self): - s = """lambda x: x + 5""" - self.unchanged(s) - - def test_lambda_parens_single_arg(self): - b = """lambda (x): x + 5""" - a = """lambda x: x + 5""" - self.check(b, a) - - b = """lambda(x): x + 5""" - a = """lambda x: x + 5""" - self.check(b, a) - - b = """lambda ((((x)))): x + 5""" - a = """lambda x: x + 5""" - self.check(b, a) - - b = """lambda((((x)))): x + 5""" - a = """lambda x: x + 5""" - self.check(b, a) - - def test_lambda_simple(self): - b = """lambda (x, y): x + f(y)""" - a = """lambda x_y: x_y[0] + f(x_y[1])""" - self.check(b, a) - - b = """lambda(x, y): x + f(y)""" - a = """lambda x_y: x_y[0] + f(x_y[1])""" - self.check(b, a) - - b = """lambda (((x, y))): x + f(y)""" - a = """lambda x_y: x_y[0] + f(x_y[1])""" - self.check(b, a) - - b = """lambda(((x, y))): x + f(y)""" - a = """lambda x_y: x_y[0] + f(x_y[1])""" - self.check(b, a) - - def test_lambda_one_tuple(self): - b = """lambda (x,): x + f(x)""" - a = """lambda x1: x1[0] + f(x1[0])""" - self.check(b, a) - - b = """lambda (((x,))): x + f(x)""" - a = """lambda x1: x1[0] + f(x1[0])""" - self.check(b, a) - - def test_lambda_simple_multi_use(self): - b = """lambda (x, y): x + x + f(x) + x""" - a = """lambda x_y: x_y[0] + x_y[0] + f(x_y[0]) + x_y[0]""" - self.check(b, a) - - def test_lambda_simple_reverse(self): - b = """lambda (x, y): y + x""" - a = """lambda x_y: x_y[1] + x_y[0]""" - self.check(b, a) - - def test_lambda_nested(self): - b = """lambda (x, (y, z)): x + y + z""" - a = """lambda x_y_z: x_y_z[0] + x_y_z[1][0] + x_y_z[1][1]""" - self.check(b, a) - - b = """lambda (((x, (y, z)))): x + y + z""" - a = """lambda x_y_z: x_y_z[0] + x_y_z[1][0] + x_y_z[1][1]""" - self.check(b, a) - - def test_lambda_nested_multi_use(self): - b = """lambda (x, (y, z)): x + y + f(y)""" - a = """lambda x_y_z: x_y_z[0] + x_y_z[1][0] + f(x_y_z[1][0])""" - self.check(b, a) - -class Test_methodattrs(FixerTestCase): - fixer = "methodattrs" - - attrs = ["func", "self", "class"] - - def test(self): - for attr in self.attrs: - b = "a.im_%s" % attr - if attr == "class": - a = "a.__self__.__class__" - else: - a = "a.__%s__" % attr - self.check(b, a) - - b = "self.foo.im_%s.foo_bar" % attr - if attr == "class": - a = "self.foo.__self__.__class__.foo_bar" - else: - a = "self.foo.__%s__.foo_bar" % attr - self.check(b, a) - - def test_unchanged(self): - for attr in self.attrs: - s = "foo(im_%s + 5)" % attr - self.unchanged(s) - - s = "f(foo.__%s__)" % attr - self.unchanged(s) - - s = "f(foo.__%s__.foo)" % attr - self.unchanged(s) - -class Test_next(FixerTestCase): - fixer = "next" - - def test_1(self): - b = """it.next()""" - a = """next(it)""" - self.check(b, a) - - def test_2(self): - b = """a.b.c.d.next()""" - a = """next(a.b.c.d)""" - self.check(b, a) - - def test_3(self): - b = """(a + b).next()""" - a = """next((a + b))""" - self.check(b, a) - - def test_4(self): - b = """a().next()""" - a = """next(a())""" - self.check(b, a) - - def test_5(self): - b = """a().next() + b""" - a = """next(a()) + b""" - self.check(b, a) - - def test_6(self): - b = """c( a().next() + b)""" - a = """c( next(a()) + b)""" - self.check(b, a) - - def test_prefix_preservation_1(self): - b = """ - for a in b: - foo(a) - a.next() - """ - a = """ - for a in b: - foo(a) - next(a) - """ - self.check(b, a) - - def test_prefix_preservation_2(self): - b = """ - for a in b: - foo(a) # abc - # def - a.next() - """ - a = """ - for a in b: - foo(a) # abc - # def - next(a) - """ - self.check(b, a) - - def test_prefix_preservation_3(self): - b = """ - next = 5 - for a in b: - foo(a) - a.next() - """ - a = """ - next = 5 - for a in b: - foo(a) - a.__next__() - """ - self.check(b, a, ignore_warnings=True) - - def test_prefix_preservation_4(self): - b = """ - next = 5 - for a in b: - foo(a) # abc - # def - a.next() - """ - a = """ - next = 5 - for a in b: - foo(a) # abc - # def - a.__next__() - """ - self.check(b, a, ignore_warnings=True) - - def test_prefix_preservation_5(self): - b = """ - next = 5 - for a in b: - foo(foo(a), # abc - a.next()) - """ - a = """ - next = 5 - for a in b: - foo(foo(a), # abc - a.__next__()) - """ - self.check(b, a, ignore_warnings=True) - - def test_prefix_preservation_6(self): - b = """ - for a in b: - foo(foo(a), # abc - a.next()) - """ - a = """ - for a in b: - foo(foo(a), # abc - next(a)) - """ - self.check(b, a) - - def test_method_1(self): - b = """ - class A: - def next(self): - pass - """ - a = """ - class A: - def __next__(self): - pass - """ - self.check(b, a) - - def test_method_2(self): - b = """ - class A(object): - def next(self): - pass - """ - a = """ - class A(object): - def __next__(self): - pass - """ - self.check(b, a) - - def test_method_3(self): - b = """ - class A: - def next(x): - pass - """ - a = """ - class A: - def __next__(x): - pass - """ - self.check(b, a) - - def test_method_4(self): - b = """ - class A: - def __init__(self, foo): - self.foo = foo - - def next(self): - pass - - def __iter__(self): - return self - """ - a = """ - class A: - def __init__(self, foo): - self.foo = foo - - def __next__(self): - pass - - def __iter__(self): - return self - """ - self.check(b, a) - - def test_method_unchanged(self): - s = """ - class A: - def next(self, a, b): - pass - """ - self.unchanged(s) - - def test_shadowing_assign_simple(self): - s = """ - next = foo - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_assign_tuple_1(self): - s = """ - (next, a) = foo - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_assign_tuple_2(self): - s = """ - (a, (b, (next, c)), a) = foo - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_assign_list_1(self): - s = """ - [next, a] = foo - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_assign_list_2(self): - s = """ - [a, [b, [next, c]], a] = foo - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_builtin_assign(self): - s = """ - def foo(): - __builtin__.next = foo - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_builtin_assign_in_tuple(self): - s = """ - def foo(): - (a, __builtin__.next) = foo - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_builtin_assign_in_list(self): - s = """ - def foo(): - [a, __builtin__.next] = foo - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_assign_to_next(self): - s = """ - def foo(): - A.next = foo - - class A: - def next(self, a, b): - pass - """ - self.unchanged(s) - - def test_assign_to_next_in_tuple(self): - s = """ - def foo(): - (a, A.next) = foo - - class A: - def next(self, a, b): - pass - """ - self.unchanged(s) - - def test_assign_to_next_in_list(self): - s = """ - def foo(): - [a, A.next] = foo - - class A: - def next(self, a, b): - pass - """ - self.unchanged(s) - - def test_shadowing_import_1(self): - s = """ - import foo.bar as next - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_import_2(self): - s = """ - import bar, bar.foo as next - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_import_3(self): - s = """ - import bar, bar.foo as next, baz - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_import_from_1(self): - s = """ - from x import next - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_import_from_2(self): - s = """ - from x.a import next - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_import_from_3(self): - s = """ - from x import a, next, b - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_import_from_4(self): - s = """ - from x.a import a, next, b - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_funcdef_1(self): - s = """ - def next(a): - pass - - class A: - def next(self, a, b): - pass - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_funcdef_2(self): - b = """ - def next(a): - pass - - class A: - def next(self): - pass - - it.next() - """ - a = """ - def next(a): - pass - - class A: - def __next__(self): - pass - - it.__next__() - """ - self.warns(b, a, "Calls to builtin next() possibly shadowed") - - def test_shadowing_global_1(self): - s = """ - def f(): - global next - next = 5 - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_global_2(self): - s = """ - def f(): - global a, next, b - next = 5 - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_for_simple(self): - s = """ - for next in it(): - pass - - b = 5 - c = 6 - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_for_tuple_1(self): - s = """ - for next, b in it(): - pass - - b = 5 - c = 6 - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_shadowing_for_tuple_2(self): - s = """ - for a, (next, c), b in it(): - pass - - b = 5 - c = 6 - """ - self.warns_unchanged(s, "Calls to builtin next() possibly shadowed") - - def test_noncall_access_1(self): - b = """gnext = g.next""" - a = """gnext = g.__next__""" - self.check(b, a) - - def test_noncall_access_2(self): - b = """f(g.next + 5)""" - a = """f(g.__next__ + 5)""" - self.check(b, a) - - def test_noncall_access_3(self): - b = """f(g().next + 5)""" - a = """f(g().__next__ + 5)""" - self.check(b, a) - -class Test_nonzero(FixerTestCase): - fixer = "nonzero" - - def test_1(self): - b = """ - class A: - def __nonzero__(self): - pass - """ - a = """ - class A: - def __bool__(self): - pass - """ - self.check(b, a) - - def test_2(self): - b = """ - class A(object): - def __nonzero__(self): - pass - """ - a = """ - class A(object): - def __bool__(self): - pass - """ - self.check(b, a) - - def test_unchanged_1(self): - s = """ - class A(object): - def __bool__(self): - pass - """ - self.unchanged(s) - - def test_unchanged_2(self): - s = """ - class A(object): - def __nonzero__(self, a): - pass - """ - self.unchanged(s) - - def test_unchanged_func(self): - s = """ - def __nonzero__(self): - pass - """ - self.unchanged(s) - -class Test_numliterals(FixerTestCase): - fixer = "numliterals" - - def test_octal_1(self): - b = """0755""" - a = """0o755""" - self.check(b, a) - - def test_long_int_1(self): - b = """a = 12L""" - a = """a = 12""" - self.check(b, a) - - def test_long_int_2(self): - b = """a = 12l""" - a = """a = 12""" - self.check(b, a) - - def test_long_hex(self): - b = """b = 0x12l""" - a = """b = 0x12""" - self.check(b, a) - - def test_comments_and_spacing(self): - b = """b = 0x12L""" - a = """b = 0x12""" - self.check(b, a) - - b = """b = 0755 # spam""" - a = """b = 0o755 # spam""" - self.check(b, a) - - def test_unchanged_int(self): - s = """5""" - self.unchanged(s) - - def test_unchanged_float(self): - s = """5.0""" - self.unchanged(s) - - def test_unchanged_octal(self): - s = """0o755""" - self.unchanged(s) - - def test_unchanged_hex(self): - s = """0xABC""" - self.unchanged(s) - - def test_unchanged_exp(self): - s = """5.0e10""" - self.unchanged(s) - - def test_unchanged_complex_int(self): - s = """5 + 4j""" - self.unchanged(s) - - def test_unchanged_complex_float(self): - s = """5.4 + 4.9j""" - self.unchanged(s) - - def test_unchanged_complex_bare(self): - s = """4j""" - self.unchanged(s) - s = """4.4j""" - self.unchanged(s) - -class Test_renames(FixerTestCase): - fixer = "renames" - - modules = {"sys": ("maxint", "maxsize"), - } - - def test_import_from(self): - for mod, (old, new) in self.modules.items(): - b = "from %s import %s" % (mod, old) - a = "from %s import %s" % (mod, new) - self.check(b, a) - - s = "from foo import %s" % old - self.unchanged(s) - - def test_import_from_as(self): - for mod, (old, new) in self.modules.items(): - b = "from %s import %s as foo_bar" % (mod, old) - a = "from %s import %s as foo_bar" % (mod, new) - self.check(b, a) - - def test_import_module_usage(self): - for mod, (old, new) in self.modules.items(): - b = """ - import %s - foo(%s, %s.%s) - """ % (mod, mod, mod, old) - a = """ - import %s - foo(%s, %s.%s) - """ % (mod, mod, mod, new) - self.check(b, a) - - def XXX_test_from_import_usage(self): - # not implemented yet - for mod, (old, new) in self.modules.items(): - b = """ - from %s import %s - foo(%s, %s) - """ % (mod, old, mod, old) - a = """ - from %s import %s - foo(%s, %s) - """ % (mod, new, mod, new) - self.check(b, a) - -class Test_unicode(FixerTestCase): - fixer = "unicode" - - def test_whitespace(self): - b = """unicode( x)""" - a = """str( x)""" - self.check(b, a) - - b = """ unicode(x )""" - a = """ str(x )""" - self.check(b, a) - - b = """ u'h'""" - a = """ 'h'""" - self.check(b, a) - - def test_unicode_call(self): - b = """unicode(x, y, z)""" - a = """str(x, y, z)""" - self.check(b, a) - - def test_unichr(self): - b = """unichr(u'h')""" - a = """chr('h')""" - self.check(b, a) - - def test_unicode_literal_1(self): - b = '''u"x"''' - a = '''"x"''' - self.check(b, a) - - def test_unicode_literal_2(self): - b = """ur'x'""" - a = """r'x'""" - self.check(b, a) - - def test_unicode_literal_3(self): - b = """UR'''x''' """ - a = """R'''x''' """ - self.check(b, a) - - def test_native_literal_escape_u(self): - b = """'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - a = """'\\\\\\\\u20ac\\\\U0001d121\\\\u20ac'""" - self.check(b, a) - - b = """r'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - a = """r'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - self.check(b, a) - - def test_bytes_literal_escape_u(self): - b = """b'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - a = """b'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - self.check(b, a) - - b = """br'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - a = """br'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - self.check(b, a) - - def test_unicode_literal_escape_u(self): - b = """u'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - a = """'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - self.check(b, a) - - b = """ur'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - a = """r'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - self.check(b, a) - - def test_native_unicode_literal_escape_u(self): - f = 'from __future__ import unicode_literals\n' - b = f + """'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - a = f + """'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - self.check(b, a) - - b = f + """r'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - a = f + """r'\\\\\\u20ac\\U0001d121\\\\u20ac'""" - self.check(b, a) - -class Test_callable(FixerTestCase): - fixer = "callable" - - def test_prefix_preservation(self): - b = """callable( x)""" - a = """import collections\nisinstance( x, collections.Callable)""" - self.check(b, a) - - b = """if callable(x): pass""" - a = """import collections -if isinstance(x, collections.Callable): pass""" - self.check(b, a) - - def test_callable_call(self): - b = """callable(x)""" - a = """import collections\nisinstance(x, collections.Callable)""" - self.check(b, a) - - def test_global_import(self): - b = """ -def spam(foo): - callable(foo)"""[1:] - a = """ -import collections -def spam(foo): - isinstance(foo, collections.Callable)"""[1:] - self.check(b, a) - - b = """ -import collections -def spam(foo): - callable(foo)"""[1:] - # same output if it was already imported - self.check(b, a) - - b = """ -from collections import * -def spam(foo): - callable(foo)"""[1:] - a = """ -from collections import * -import collections -def spam(foo): - isinstance(foo, collections.Callable)"""[1:] - self.check(b, a) - - b = """ -do_stuff() -do_some_other_stuff() -assert callable(do_stuff)"""[1:] - a = """ -import collections -do_stuff() -do_some_other_stuff() -assert isinstance(do_stuff, collections.Callable)"""[1:] - self.check(b, a) - - b = """ -if isinstance(do_stuff, Callable): - assert callable(do_stuff) - do_stuff(do_stuff) - if not callable(do_stuff): - exit(1) - else: - assert callable(do_stuff) -else: - assert not callable(do_stuff)"""[1:] - a = """ -import collections -if isinstance(do_stuff, Callable): - assert isinstance(do_stuff, collections.Callable) - do_stuff(do_stuff) - if not isinstance(do_stuff, collections.Callable): - exit(1) - else: - assert isinstance(do_stuff, collections.Callable) -else: - assert not isinstance(do_stuff, collections.Callable)"""[1:] - self.check(b, a) - - def test_callable_should_not_change(self): - a = """callable(*x)""" - self.unchanged(a) - - a = """callable(x, y)""" - self.unchanged(a) - - a = """callable(x, kw=y)""" - self.unchanged(a) - - a = """callable()""" - self.unchanged(a) - -class Test_filter(FixerTestCase): - fixer = "filter" - - def test_prefix_preservation(self): - b = """x = filter( foo, 'abc' )""" - a = """x = list(filter( foo, 'abc' ))""" - self.check(b, a) - - b = """x = filter( None , 'abc' )""" - a = """x = [_f for _f in 'abc' if _f]""" - self.check(b, a) - - def test_filter_basic(self): - b = """x = filter(None, 'abc')""" - a = """x = [_f for _f in 'abc' if _f]""" - self.check(b, a) - - b = """x = len(filter(f, 'abc'))""" - a = """x = len(list(filter(f, 'abc')))""" - self.check(b, a) - - b = """x = filter(lambda x: x%2 == 0, range(10))""" - a = """x = [x for x in range(10) if x%2 == 0]""" - self.check(b, a) - - # Note the parens around x - b = """x = filter(lambda (x): x%2 == 0, range(10))""" - a = """x = [x for x in range(10) if x%2 == 0]""" - self.check(b, a) - - # XXX This (rare) case is not supported -## b = """x = filter(f, 'abc')[0]""" -## a = """x = list(filter(f, 'abc'))[0]""" -## self.check(b, a) - - def test_filter_nochange(self): - a = """b.join(filter(f, 'abc'))""" - self.unchanged(a) - a = """(a + foo(5)).join(filter(f, 'abc'))""" - self.unchanged(a) - a = """iter(filter(f, 'abc'))""" - self.unchanged(a) - a = """list(filter(f, 'abc'))""" - self.unchanged(a) - a = """list(filter(f, 'abc'))[0]""" - self.unchanged(a) - a = """set(filter(f, 'abc'))""" - self.unchanged(a) - a = """set(filter(f, 'abc')).pop()""" - self.unchanged(a) - a = """tuple(filter(f, 'abc'))""" - self.unchanged(a) - a = """any(filter(f, 'abc'))""" - self.unchanged(a) - a = """all(filter(f, 'abc'))""" - self.unchanged(a) - a = """sum(filter(f, 'abc'))""" - self.unchanged(a) - a = """sorted(filter(f, 'abc'))""" - self.unchanged(a) - a = """sorted(filter(f, 'abc'), key=blah)""" - self.unchanged(a) - a = """sorted(filter(f, 'abc'), key=blah)[0]""" - self.unchanged(a) - a = """enumerate(filter(f, 'abc'))""" - self.unchanged(a) - a = """enumerate(filter(f, 'abc'), start=1)""" - self.unchanged(a) - a = """for i in filter(f, 'abc'): pass""" - self.unchanged(a) - a = """[x for x in filter(f, 'abc')]""" - self.unchanged(a) - a = """(x for x in filter(f, 'abc'))""" - self.unchanged(a) - - def test_future_builtins(self): - a = "from future_builtins import spam, filter; filter(f, 'ham')" - self.unchanged(a) - - b = """from future_builtins import spam; x = filter(f, 'abc')""" - a = """from future_builtins import spam; x = list(filter(f, 'abc'))""" - self.check(b, a) - - a = "from future_builtins import *; filter(f, 'ham')" - self.unchanged(a) - -class Test_map(FixerTestCase): - fixer = "map" - - def check(self, b, a): - self.unchanged("from future_builtins import map; " + b, a) - super(Test_map, self).check(b, a) - - def test_prefix_preservation(self): - b = """x = map( f, 'abc' )""" - a = """x = list(map( f, 'abc' ))""" - self.check(b, a) - - def test_trailing_comment(self): - b = """x = map(f, 'abc') # foo""" - a = """x = list(map(f, 'abc')) # foo""" - self.check(b, a) - - def test_None_with_multiple_arguments(self): - s = """x = map(None, a, b, c)""" - self.warns_unchanged(s, "cannot convert map(None, ...) with " - "multiple arguments") - - def test_map_basic(self): - b = """x = map(f, 'abc')""" - a = """x = list(map(f, 'abc'))""" - self.check(b, a) - - b = """x = len(map(f, 'abc', 'def'))""" - a = """x = len(list(map(f, 'abc', 'def')))""" - self.check(b, a) - - b = """x = map(None, 'abc')""" - a = """x = list('abc')""" - self.check(b, a) - - b = """x = map(lambda x: x+1, range(4))""" - a = """x = [x+1 for x in range(4)]""" - self.check(b, a) - - # Note the parens around x - b = """x = map(lambda (x): x+1, range(4))""" - a = """x = [x+1 for x in range(4)]""" - self.check(b, a) - - b = """ - foo() - # foo - map(f, x) - """ - a = """ - foo() - # foo - list(map(f, x)) - """ - self.warns(b, a, "You should use a for loop here") - - # XXX This (rare) case is not supported -## b = """x = map(f, 'abc')[0]""" -## a = """x = list(map(f, 'abc'))[0]""" -## self.check(b, a) - - def test_map_nochange(self): - a = """b.join(map(f, 'abc'))""" - self.unchanged(a) - a = """(a + foo(5)).join(map(f, 'abc'))""" - self.unchanged(a) - a = """iter(map(f, 'abc'))""" - self.unchanged(a) - a = """list(map(f, 'abc'))""" - self.unchanged(a) - a = """list(map(f, 'abc'))[0]""" - self.unchanged(a) - a = """set(map(f, 'abc'))""" - self.unchanged(a) - a = """set(map(f, 'abc')).pop()""" - self.unchanged(a) - a = """tuple(map(f, 'abc'))""" - self.unchanged(a) - a = """any(map(f, 'abc'))""" - self.unchanged(a) - a = """all(map(f, 'abc'))""" - self.unchanged(a) - a = """sum(map(f, 'abc'))""" - self.unchanged(a) - a = """sorted(map(f, 'abc'))""" - self.unchanged(a) - a = """sorted(map(f, 'abc'), key=blah)""" - self.unchanged(a) - a = """sorted(map(f, 'abc'), key=blah)[0]""" - self.unchanged(a) - a = """enumerate(map(f, 'abc'))""" - self.unchanged(a) - a = """enumerate(map(f, 'abc'), start=1)""" - self.unchanged(a) - a = """for i in map(f, 'abc'): pass""" - self.unchanged(a) - a = """[x for x in map(f, 'abc')]""" - self.unchanged(a) - a = """(x for x in map(f, 'abc'))""" - self.unchanged(a) - - def test_future_builtins(self): - a = "from future_builtins import spam, map, eggs; map(f, 'ham')" - self.unchanged(a) - - b = """from future_builtins import spam, eggs; x = map(f, 'abc')""" - a = """from future_builtins import spam, eggs; x = list(map(f, 'abc'))""" - self.check(b, a) - - a = "from future_builtins import *; map(f, 'ham')" - self.unchanged(a) - -class Test_zip(FixerTestCase): - fixer = "zip" - - def check(self, b, a): - self.unchanged("from future_builtins import zip; " + b, a) - super(Test_zip, self).check(b, a) - - def test_zip_basic(self): - b = """x = zip(a, b, c)""" - a = """x = list(zip(a, b, c))""" - self.check(b, a) - - b = """x = len(zip(a, b))""" - a = """x = len(list(zip(a, b)))""" - self.check(b, a) - - def test_zip_nochange(self): - a = """b.join(zip(a, b))""" - self.unchanged(a) - a = """(a + foo(5)).join(zip(a, b))""" - self.unchanged(a) - a = """iter(zip(a, b))""" - self.unchanged(a) - a = """list(zip(a, b))""" - self.unchanged(a) - a = """list(zip(a, b))[0]""" - self.unchanged(a) - a = """set(zip(a, b))""" - self.unchanged(a) - a = """set(zip(a, b)).pop()""" - self.unchanged(a) - a = """tuple(zip(a, b))""" - self.unchanged(a) - a = """any(zip(a, b))""" - self.unchanged(a) - a = """all(zip(a, b))""" - self.unchanged(a) - a = """sum(zip(a, b))""" - self.unchanged(a) - a = """sorted(zip(a, b))""" - self.unchanged(a) - a = """sorted(zip(a, b), key=blah)""" - self.unchanged(a) - a = """sorted(zip(a, b), key=blah)[0]""" - self.unchanged(a) - a = """enumerate(zip(a, b))""" - self.unchanged(a) - a = """enumerate(zip(a, b), start=1)""" - self.unchanged(a) - a = """for i in zip(a, b): pass""" - self.unchanged(a) - a = """[x for x in zip(a, b)]""" - self.unchanged(a) - a = """(x for x in zip(a, b))""" - self.unchanged(a) - - def test_future_builtins(self): - a = "from future_builtins import spam, zip, eggs; zip(a, b)" - self.unchanged(a) - - b = """from future_builtins import spam, eggs; x = zip(a, b)""" - a = """from future_builtins import spam, eggs; x = list(zip(a, b))""" - self.check(b, a) - - a = "from future_builtins import *; zip(a, b)" - self.unchanged(a) - -class Test_standarderror(FixerTestCase): - fixer = "standarderror" - - def test(self): - b = """x = StandardError()""" - a = """x = Exception()""" - self.check(b, a) - - b = """x = StandardError(a, b, c)""" - a = """x = Exception(a, b, c)""" - self.check(b, a) - - b = """f(2 + StandardError(a, b, c))""" - a = """f(2 + Exception(a, b, c))""" - self.check(b, a) - -class Test_types(FixerTestCase): - fixer = "types" - - def test_basic_types_convert(self): - b = """types.StringType""" - a = """bytes""" - self.check(b, a) - - b = """types.DictType""" - a = """dict""" - self.check(b, a) - - b = """types . IntType""" - a = """int""" - self.check(b, a) - - b = """types.ListType""" - a = """list""" - self.check(b, a) - - b = """types.LongType""" - a = """int""" - self.check(b, a) - - b = """types.NoneType""" - a = """type(None)""" - self.check(b, a) - -class Test_idioms(FixerTestCase): - fixer = "idioms" - - def test_while(self): - b = """while 1: foo()""" - a = """while True: foo()""" - self.check(b, a) - - b = """while 1: foo()""" - a = """while True: foo()""" - self.check(b, a) - - b = """ - while 1: - foo() - """ - a = """ - while True: - foo() - """ - self.check(b, a) - - def test_while_unchanged(self): - s = """while 11: foo()""" - self.unchanged(s) - - s = """while 0: foo()""" - self.unchanged(s) - - s = """while foo(): foo()""" - self.unchanged(s) - - s = """while []: foo()""" - self.unchanged(s) - - def test_eq_simple(self): - b = """type(x) == T""" - a = """isinstance(x, T)""" - self.check(b, a) - - b = """if type(x) == T: pass""" - a = """if isinstance(x, T): pass""" - self.check(b, a) - - def test_eq_reverse(self): - b = """T == type(x)""" - a = """isinstance(x, T)""" - self.check(b, a) - - b = """if T == type(x): pass""" - a = """if isinstance(x, T): pass""" - self.check(b, a) - - def test_eq_expression(self): - b = """type(x+y) == d.get('T')""" - a = """isinstance(x+y, d.get('T'))""" - self.check(b, a) - - b = """type( x + y) == d.get('T')""" - a = """isinstance(x + y, d.get('T'))""" - self.check(b, a) - - def test_is_simple(self): - b = """type(x) is T""" - a = """isinstance(x, T)""" - self.check(b, a) - - b = """if type(x) is T: pass""" - a = """if isinstance(x, T): pass""" - self.check(b, a) - - def test_is_reverse(self): - b = """T is type(x)""" - a = """isinstance(x, T)""" - self.check(b, a) - - b = """if T is type(x): pass""" - a = """if isinstance(x, T): pass""" - self.check(b, a) - - def test_is_expression(self): - b = """type(x+y) is d.get('T')""" - a = """isinstance(x+y, d.get('T'))""" - self.check(b, a) - - b = """type( x + y) is d.get('T')""" - a = """isinstance(x + y, d.get('T'))""" - self.check(b, a) - - def test_is_not_simple(self): - b = """type(x) is not T""" - a = """not isinstance(x, T)""" - self.check(b, a) - - b = """if type(x) is not T: pass""" - a = """if not isinstance(x, T): pass""" - self.check(b, a) - - def test_is_not_reverse(self): - b = """T is not type(x)""" - a = """not isinstance(x, T)""" - self.check(b, a) - - b = """if T is not type(x): pass""" - a = """if not isinstance(x, T): pass""" - self.check(b, a) - - def test_is_not_expression(self): - b = """type(x+y) is not d.get('T')""" - a = """not isinstance(x+y, d.get('T'))""" - self.check(b, a) - - b = """type( x + y) is not d.get('T')""" - a = """not isinstance(x + y, d.get('T'))""" - self.check(b, a) - - def test_ne_simple(self): - b = """type(x) != T""" - a = """not isinstance(x, T)""" - self.check(b, a) - - b = """if type(x) != T: pass""" - a = """if not isinstance(x, T): pass""" - self.check(b, a) - - def test_ne_reverse(self): - b = """T != type(x)""" - a = """not isinstance(x, T)""" - self.check(b, a) - - b = """if T != type(x): pass""" - a = """if not isinstance(x, T): pass""" - self.check(b, a) - - def test_ne_expression(self): - b = """type(x+y) != d.get('T')""" - a = """not isinstance(x+y, d.get('T'))""" - self.check(b, a) - - b = """type( x + y) != d.get('T')""" - a = """not isinstance(x + y, d.get('T'))""" - self.check(b, a) - - def test_type_unchanged(self): - a = """type(x).__name__""" - self.unchanged(a) - - def test_sort_list_call(self): - b = """ - v = list(t) - v.sort() - foo(v) - """ - a = """ - v = sorted(t) - foo(v) - """ - self.check(b, a) - - b = """ - v = list(foo(b) + d) - v.sort() - foo(v) - """ - a = """ - v = sorted(foo(b) + d) - foo(v) - """ - self.check(b, a) - - b = """ - while x: - v = list(t) - v.sort() - foo(v) - """ - a = """ - while x: - v = sorted(t) - foo(v) - """ - self.check(b, a) - - b = """ - v = list(t) - # foo - v.sort() - foo(v) - """ - a = """ - v = sorted(t) - # foo - foo(v) - """ - self.check(b, a) - - b = r""" - v = list( t) - v.sort() - foo(v) - """ - a = r""" - v = sorted( t) - foo(v) - """ - self.check(b, a) - - b = r""" - try: - m = list(s) - m.sort() - except: pass - """ - - a = r""" - try: - m = sorted(s) - except: pass - """ - self.check(b, a) - - b = r""" - try: - m = list(s) - # foo - m.sort() - except: pass - """ - - a = r""" - try: - m = sorted(s) - # foo - except: pass - """ - self.check(b, a) - - b = r""" - m = list(s) - # more comments - m.sort()""" - - a = r""" - m = sorted(s) - # more comments""" - self.check(b, a) - - def test_sort_simple_expr(self): - b = """ - v = t - v.sort() - foo(v) - """ - a = """ - v = sorted(t) - foo(v) - """ - self.check(b, a) - - b = """ - v = foo(b) - v.sort() - foo(v) - """ - a = """ - v = sorted(foo(b)) - foo(v) - """ - self.check(b, a) - - b = """ - v = b.keys() - v.sort() - foo(v) - """ - a = """ - v = sorted(b.keys()) - foo(v) - """ - self.check(b, a) - - b = """ - v = foo(b) + d - v.sort() - foo(v) - """ - a = """ - v = sorted(foo(b) + d) - foo(v) - """ - self.check(b, a) - - b = """ - while x: - v = t - v.sort() - foo(v) - """ - a = """ - while x: - v = sorted(t) - foo(v) - """ - self.check(b, a) - - b = """ - v = t - # foo - v.sort() - foo(v) - """ - a = """ - v = sorted(t) - # foo - foo(v) - """ - self.check(b, a) - - b = r""" - v = t - v.sort() - foo(v) - """ - a = r""" - v = sorted(t) - foo(v) - """ - self.check(b, a) - - def test_sort_unchanged(self): - s = """ - v = list(t) - w.sort() - foo(w) - """ - self.unchanged(s) - - s = """ - v = list(t) - v.sort(u) - foo(v) - """ - self.unchanged(s) - -class Test_basestring(FixerTestCase): - fixer = "basestring" - - def test_basestring(self): - b = """isinstance(x, basestring)""" - a = """isinstance(x, str)""" - self.check(b, a) - -class Test_buffer(FixerTestCase): - fixer = "buffer" - - def test_buffer(self): - b = """x = buffer(y)""" - a = """x = memoryview(y)""" - self.check(b, a) - - def test_slicing(self): - b = """buffer(y)[4:5]""" - a = """memoryview(y)[4:5]""" - self.check(b, a) - -class Test_future(FixerTestCase): - fixer = "future" - - def test_future(self): - b = """from __future__ import braces""" - a = """""" - self.check(b, a) - - b = """# comment\nfrom __future__ import braces""" - a = """# comment\n""" - self.check(b, a) - - b = """from __future__ import braces\n# comment""" - a = """\n# comment""" - self.check(b, a) - - def test_run_order(self): - self.assert_runs_after('print') - -class Test_itertools(FixerTestCase): - fixer = "itertools" - - def checkall(self, before, after): - # Because we need to check with and without the itertools prefix - # and on each of the three functions, these loops make it all - # much easier - for i in ('itertools.', ''): - for f in ('map', 'filter', 'zip'): - b = before %(i+'i'+f) - a = after %(f) - self.check(b, a) - - def test_0(self): - # A simple example -- test_1 covers exactly the same thing, - # but it's not quite as clear. - b = "itertools.izip(a, b)" - a = "zip(a, b)" - self.check(b, a) - - def test_1(self): - b = """%s(f, a)""" - a = """%s(f, a)""" - self.checkall(b, a) - - def test_qualified(self): - b = """itertools.ifilterfalse(a, b)""" - a = """itertools.filterfalse(a, b)""" - self.check(b, a) - - b = """itertools.izip_longest(a, b)""" - a = """itertools.zip_longest(a, b)""" - self.check(b, a) - - def test_2(self): - b = """ifilterfalse(a, b)""" - a = """filterfalse(a, b)""" - self.check(b, a) - - b = """izip_longest(a, b)""" - a = """zip_longest(a, b)""" - self.check(b, a) - - def test_space_1(self): - b = """ %s(f, a)""" - a = """ %s(f, a)""" - self.checkall(b, a) - - def test_space_2(self): - b = """ itertools.ifilterfalse(a, b)""" - a = """ itertools.filterfalse(a, b)""" - self.check(b, a) - - b = """ itertools.izip_longest(a, b)""" - a = """ itertools.zip_longest(a, b)""" - self.check(b, a) - - def test_run_order(self): - self.assert_runs_after('map', 'zip', 'filter') - - -class Test_itertools_imports(FixerTestCase): - fixer = 'itertools_imports' - - def test_reduced(self): - b = "from itertools import imap, izip, foo" - a = "from itertools import foo" - self.check(b, a) - - b = "from itertools import bar, imap, izip, foo" - a = "from itertools import bar, foo" - self.check(b, a) - - b = "from itertools import chain, imap, izip" - a = "from itertools import chain" - self.check(b, a) - - def test_comments(self): - b = "#foo\nfrom itertools import imap, izip" - a = "#foo\n" - self.check(b, a) - - def test_none(self): - b = "from itertools import imap, izip" - a = "" - self.check(b, a) - - b = "from itertools import izip" - a = "" - self.check(b, a) - - def test_import_as(self): - b = "from itertools import izip, bar as bang, imap" - a = "from itertools import bar as bang" - self.check(b, a) - - b = "from itertools import izip as _zip, imap, bar" - a = "from itertools import bar" - self.check(b, a) - - b = "from itertools import imap as _map" - a = "" - self.check(b, a) - - b = "from itertools import imap as _map, izip as _zip" - a = "" - self.check(b, a) - - s = "from itertools import bar as bang" - self.unchanged(s) - - def test_ifilter_and_zip_longest(self): - for name in "filterfalse", "zip_longest": - b = "from itertools import i%s" % (name,) - a = "from itertools import %s" % (name,) - self.check(b, a) - - b = "from itertools import imap, i%s, foo" % (name,) - a = "from itertools import %s, foo" % (name,) - self.check(b, a) - - b = "from itertools import bar, i%s, foo" % (name,) - a = "from itertools import bar, %s, foo" % (name,) - self.check(b, a) - - def test_import_star(self): - s = "from itertools import *" - self.unchanged(s) - - - def test_unchanged(self): - s = "from itertools import foo" - self.unchanged(s) - - -class Test_import(FixerTestCase): - fixer = "import" - - def setUp(self): - super(Test_import, self).setUp() - # Need to replace fix_import's exists method - # so we can check that it's doing the right thing - self.files_checked = [] - self.present_files = set() - self.always_exists = True - def fake_exists(name): - self.files_checked.append(name) - return self.always_exists or (name in self.present_files) - - from lib2to3.fixes import fix_import - fix_import.exists = fake_exists - - def tearDown(self): - from lib2to3.fixes import fix_import - fix_import.exists = os.path.exists - - def check_both(self, b, a): - self.always_exists = True - super(Test_import, self).check(b, a) - self.always_exists = False - super(Test_import, self).unchanged(b) - - def test_files_checked(self): - def p(path): - # Takes a unix path and returns a path with correct separators - return os.path.pathsep.join(path.split("/")) - - self.always_exists = False - self.present_files = set(['__init__.py']) - expected_extensions = ('.py', os.path.sep, '.pyc', '.so', '.sl', '.pyd') - names_to_test = (p("/spam/eggs.py"), "ni.py", p("../../shrubbery.py")) - - for name in names_to_test: - self.files_checked = [] - self.filename = name - self.unchanged("import jam") - - if os.path.dirname(name): - name = os.path.dirname(name) + '/jam' - else: - name = 'jam' - expected_checks = set(name + ext for ext in expected_extensions) - expected_checks.add("__init__.py") - - self.assertEqual(set(self.files_checked), expected_checks) - - def test_not_in_package(self): - s = "import bar" - self.always_exists = False - self.present_files = set(["bar.py"]) - self.unchanged(s) - - def test_with_absolute_import_enabled(self): - s = "from __future__ import absolute_import\nimport bar" - self.always_exists = False - self.present_files = set(["__init__.py", "bar.py"]) - self.unchanged(s) - - def test_in_package(self): - b = "import bar" - a = "from . import bar" - self.always_exists = False - self.present_files = set(["__init__.py", "bar.py"]) - self.check(b, a) - - def test_import_from_package(self): - b = "import bar" - a = "from . import bar" - self.always_exists = False - self.present_files = set(["__init__.py", "bar" + os.path.sep]) - self.check(b, a) - - def test_already_relative_import(self): - s = "from . import bar" - self.unchanged(s) - - def test_comments_and_indent(self): - b = "import bar # Foo" - a = "from . import bar # Foo" - self.check(b, a) - - def test_from(self): - b = "from foo import bar, baz" - a = "from .foo import bar, baz" - self.check_both(b, a) - - b = "from foo import bar" - a = "from .foo import bar" - self.check_both(b, a) - - b = "from foo import (bar, baz)" - a = "from .foo import (bar, baz)" - self.check_both(b, a) - - def test_dotted_from(self): - b = "from green.eggs import ham" - a = "from .green.eggs import ham" - self.check_both(b, a) - - def test_from_as(self): - b = "from green.eggs import ham as spam" - a = "from .green.eggs import ham as spam" - self.check_both(b, a) - - def test_import(self): - b = "import foo" - a = "from . import foo" - self.check_both(b, a) - - b = "import foo, bar" - a = "from . import foo, bar" - self.check_both(b, a) - - b = "import foo, bar, x" - a = "from . import foo, bar, x" - self.check_both(b, a) - - b = "import x, y, z" - a = "from . import x, y, z" - self.check_both(b, a) - - def test_import_as(self): - b = "import foo as x" - a = "from . import foo as x" - self.check_both(b, a) - - b = "import a as b, b as c, c as d" - a = "from . import a as b, b as c, c as d" - self.check_both(b, a) - - def test_local_and_absolute(self): - self.always_exists = False - self.present_files = set(["foo.py", "__init__.py"]) - - s = "import foo, bar" - self.warns_unchanged(s, "absolute and local imports together") - - def test_dotted_import(self): - b = "import foo.bar" - a = "from . import foo.bar" - self.check_both(b, a) - - def test_dotted_import_as(self): - b = "import foo.bar as bang" - a = "from . import foo.bar as bang" - self.check_both(b, a) - - def test_prefix(self): - b = """ - # prefix - import foo.bar - """ - a = """ - # prefix - from . import foo.bar - """ - self.check_both(b, a) - - -class Test_set_literal(FixerTestCase): - - fixer = "set_literal" - - def test_basic(self): - b = """set([1, 2, 3])""" - a = """{1, 2, 3}""" - self.check(b, a) - - b = """set((1, 2, 3))""" - a = """{1, 2, 3}""" - self.check(b, a) - - b = """set((1,))""" - a = """{1}""" - self.check(b, a) - - b = """set([1])""" - self.check(b, a) - - b = """set((a, b))""" - a = """{a, b}""" - self.check(b, a) - - b = """set([a, b])""" - self.check(b, a) - - b = """set((a*234, f(args=23)))""" - a = """{a*234, f(args=23)}""" - self.check(b, a) - - b = """set([a*23, f(23)])""" - a = """{a*23, f(23)}""" - self.check(b, a) - - b = """set([a-234**23])""" - a = """{a-234**23}""" - self.check(b, a) - - def test_listcomps(self): - b = """set([x for x in y])""" - a = """{x for x in y}""" - self.check(b, a) - - b = """set([x for x in y if x == m])""" - a = """{x for x in y if x == m}""" - self.check(b, a) - - b = """set([x for x in y for a in b])""" - a = """{x for x in y for a in b}""" - self.check(b, a) - - b = """set([f(x) - 23 for x in y])""" - a = """{f(x) - 23 for x in y}""" - self.check(b, a) - - def test_whitespace(self): - b = """set( [1, 2])""" - a = """{1, 2}""" - self.check(b, a) - - b = """set([1 , 2])""" - a = """{1 , 2}""" - self.check(b, a) - - b = """set([ 1 ])""" - a = """{ 1 }""" - self.check(b, a) - - b = """set( [1] )""" - a = """{1}""" - self.check(b, a) - - b = """set([ 1, 2 ])""" - a = """{ 1, 2 }""" - self.check(b, a) - - b = """set([x for x in y ])""" - a = """{x for x in y }""" - self.check(b, a) - - b = """set( - [1, 2] - ) - """ - a = """{1, 2}\n""" - self.check(b, a) - - def test_comments(self): - b = """set((1, 2)) # Hi""" - a = """{1, 2} # Hi""" - self.check(b, a) - - # This isn't optimal behavior, but the fixer is optional. - b = """ - # Foo - set( # Bar - (1, 2) - ) - """ - a = """ - # Foo - {1, 2} - """ - self.check(b, a) - - def test_unchanged(self): - s = """set()""" - self.unchanged(s) - - s = """set(a)""" - self.unchanged(s) - - s = """set(a, b, c)""" - self.unchanged(s) - - # Don't transform generators because they might have to be lazy. - s = """set(x for x in y)""" - self.unchanged(s) - - s = """set(x for x in y if z)""" - self.unchanged(s) - - s = """set(a*823-23**2 + f(23))""" - self.unchanged(s) - - -class Test_sys_exc(FixerTestCase): - fixer = "sys_exc" - - def test_0(self): - b = "sys.exc_type" - a = "sys.exc_info()[0]" - self.check(b, a) - - def test_1(self): - b = "sys.exc_value" - a = "sys.exc_info()[1]" - self.check(b, a) - - def test_2(self): - b = "sys.exc_traceback" - a = "sys.exc_info()[2]" - self.check(b, a) - - def test_3(self): - b = "sys.exc_type # Foo" - a = "sys.exc_info()[0] # Foo" - self.check(b, a) - - def test_4(self): - b = "sys. exc_type" - a = "sys. exc_info()[0]" - self.check(b, a) - - def test_5(self): - b = "sys .exc_type" - a = "sys .exc_info()[0]" - self.check(b, a) - - -class Test_paren(FixerTestCase): - fixer = "paren" - - def test_0(self): - b = """[i for i in 1, 2 ]""" - a = """[i for i in (1, 2) ]""" - self.check(b, a) - - def test_1(self): - b = """[i for i in 1, 2, ]""" - a = """[i for i in (1, 2,) ]""" - self.check(b, a) - - def test_2(self): - b = """[i for i in 1, 2 ]""" - a = """[i for i in (1, 2) ]""" - self.check(b, a) - - def test_3(self): - b = """[i for i in 1, 2 if i]""" - a = """[i for i in (1, 2) if i]""" - self.check(b, a) - - def test_4(self): - b = """[i for i in 1, 2 ]""" - a = """[i for i in (1, 2) ]""" - self.check(b, a) - - def test_5(self): - b = """(i for i in 1, 2)""" - a = """(i for i in (1, 2))""" - self.check(b, a) - - def test_6(self): - b = """(i for i in 1 ,2 if i)""" - a = """(i for i in (1 ,2) if i)""" - self.check(b, a) - - def test_unchanged_0(self): - s = """[i for i in (1, 2)]""" - self.unchanged(s) - - def test_unchanged_1(self): - s = """[i for i in foo()]""" - self.unchanged(s) - - def test_unchanged_2(self): - s = """[i for i in (1, 2) if nothing]""" - self.unchanged(s) - - def test_unchanged_3(self): - s = """(i for i in (1, 2))""" - self.unchanged(s) - - def test_unchanged_4(self): - s = """[i for i in m]""" - self.unchanged(s) - -class Test_metaclass(FixerTestCase): - - fixer = 'metaclass' - - def test_unchanged(self): - self.unchanged("class X(): pass") - self.unchanged("class X(object): pass") - self.unchanged("class X(object1, object2): pass") - self.unchanged("class X(object1, object2, object3): pass") - self.unchanged("class X(metaclass=Meta): pass") - self.unchanged("class X(b, arg=23, metclass=Meta): pass") - self.unchanged("class X(b, arg=23, metaclass=Meta, other=42): pass") - - s = """ - class X: - def __metaclass__(self): pass - """ - self.unchanged(s) - - s = """ - class X: - a[23] = 74 - """ - self.unchanged(s) - - def test_comments(self): - b = """ - class X: - # hi - __metaclass__ = AppleMeta - """ - a = """ - class X(metaclass=AppleMeta): - # hi - pass - """ - self.check(b, a) - - b = """ - class X: - __metaclass__ = Meta - # Bedtime! - """ - a = """ - class X(metaclass=Meta): - pass - # Bedtime! - """ - self.check(b, a) - - def test_meta(self): - # no-parent class, odd body - b = """ - class X(): - __metaclass__ = Q - pass - """ - a = """ - class X(metaclass=Q): - pass - """ - self.check(b, a) - - # one parent class, no body - b = """class X(object): __metaclass__ = Q""" - a = """class X(object, metaclass=Q): pass""" - self.check(b, a) - - - # one parent, simple body - b = """ - class X(object): - __metaclass__ = Meta - bar = 7 - """ - a = """ - class X(object, metaclass=Meta): - bar = 7 - """ - self.check(b, a) - - b = """ - class X: - __metaclass__ = Meta; x = 4; g = 23 - """ - a = """ - class X(metaclass=Meta): - x = 4; g = 23 - """ - self.check(b, a) - - # one parent, simple body, __metaclass__ last - b = """ - class X(object): - bar = 7 - __metaclass__ = Meta - """ - a = """ - class X(object, metaclass=Meta): - bar = 7 - """ - self.check(b, a) - - # redefining __metaclass__ - b = """ - class X(): - __metaclass__ = A - __metaclass__ = B - bar = 7 - """ - a = """ - class X(metaclass=B): - bar = 7 - """ - self.check(b, a) - - # multiple inheritance, simple body - b = """ - class X(clsA, clsB): - __metaclass__ = Meta - bar = 7 - """ - a = """ - class X(clsA, clsB, metaclass=Meta): - bar = 7 - """ - self.check(b, a) - - # keywords in the class statement - b = """class m(a, arg=23): __metaclass__ = Meta""" - a = """class m(a, arg=23, metaclass=Meta): pass""" - self.check(b, a) - - b = """ - class X(expression(2 + 4)): - __metaclass__ = Meta - """ - a = """ - class X(expression(2 + 4), metaclass=Meta): - pass - """ - self.check(b, a) - - b = """ - class X(expression(2 + 4), x**4): - __metaclass__ = Meta - """ - a = """ - class X(expression(2 + 4), x**4, metaclass=Meta): - pass - """ - self.check(b, a) - - b = """ - class X: - __metaclass__ = Meta - save.py = 23 - """ - a = """ - class X(metaclass=Meta): - save.py = 23 - """ - self.check(b, a) - - -class Test_getcwdu(FixerTestCase): - - fixer = 'getcwdu' - - def test_basic(self): - b = """os.getcwdu""" - a = """os.getcwd""" - self.check(b, a) - - b = """os.getcwdu()""" - a = """os.getcwd()""" - self.check(b, a) - - b = """meth = os.getcwdu""" - a = """meth = os.getcwd""" - self.check(b, a) - - b = """os.getcwdu(args)""" - a = """os.getcwd(args)""" - self.check(b, a) - - def test_comment(self): - b = """os.getcwdu() # Foo""" - a = """os.getcwd() # Foo""" - self.check(b, a) - - def test_unchanged(self): - s = """os.getcwd()""" - self.unchanged(s) - - s = """getcwdu()""" - self.unchanged(s) - - s = """os.getcwdb()""" - self.unchanged(s) - - def test_indentation(self): - b = """ - if 1: - os.getcwdu() - """ - a = """ - if 1: - os.getcwd() - """ - self.check(b, a) - - def test_multilation(self): - b = """os .getcwdu()""" - a = """os .getcwd()""" - self.check(b, a) - - b = """os. getcwdu""" - a = """os. getcwd""" - self.check(b, a) - - b = """os.getcwdu ( )""" - a = """os.getcwd ( )""" - self.check(b, a) - - -class Test_operator(FixerTestCase): - - fixer = "operator" - - def test_operator_isCallable(self): - b = "operator.isCallable(x)" - a = "hasattr(x, '__call__')" - self.check(b, a) - - def test_operator_sequenceIncludes(self): - b = "operator.sequenceIncludes(x, y)" - a = "operator.contains(x, y)" - self.check(b, a) - - b = "operator .sequenceIncludes(x, y)" - a = "operator .contains(x, y)" - self.check(b, a) - - b = "operator. sequenceIncludes(x, y)" - a = "operator. contains(x, y)" - self.check(b, a) - - def test_operator_isSequenceType(self): - b = "operator.isSequenceType(x)" - a = "import collections\nisinstance(x, collections.Sequence)" - self.check(b, a) - - def test_operator_isMappingType(self): - b = "operator.isMappingType(x)" - a = "import collections\nisinstance(x, collections.Mapping)" - self.check(b, a) - - def test_operator_isNumberType(self): - b = "operator.isNumberType(x)" - a = "import numbers\nisinstance(x, numbers.Number)" - self.check(b, a) - - def test_operator_repeat(self): - b = "operator.repeat(x, n)" - a = "operator.mul(x, n)" - self.check(b, a) - - b = "operator .repeat(x, n)" - a = "operator .mul(x, n)" - self.check(b, a) - - b = "operator. repeat(x, n)" - a = "operator. mul(x, n)" - self.check(b, a) - - def test_operator_irepeat(self): - b = "operator.irepeat(x, n)" - a = "operator.imul(x, n)" - self.check(b, a) - - b = "operator .irepeat(x, n)" - a = "operator .imul(x, n)" - self.check(b, a) - - b = "operator. irepeat(x, n)" - a = "operator. imul(x, n)" - self.check(b, a) - - def test_bare_isCallable(self): - s = "isCallable(x)" - t = "You should use 'hasattr(x, '__call__')' here." - self.warns_unchanged(s, t) - - def test_bare_sequenceIncludes(self): - s = "sequenceIncludes(x, y)" - t = "You should use 'operator.contains(x, y)' here." - self.warns_unchanged(s, t) - - def test_bare_operator_isSequenceType(self): - s = "isSequenceType(z)" - t = "You should use 'isinstance(z, collections.Sequence)' here." - self.warns_unchanged(s, t) - - def test_bare_operator_isMappingType(self): - s = "isMappingType(x)" - t = "You should use 'isinstance(x, collections.Mapping)' here." - self.warns_unchanged(s, t) - - def test_bare_operator_isNumberType(self): - s = "isNumberType(y)" - t = "You should use 'isinstance(y, numbers.Number)' here." - self.warns_unchanged(s, t) - - def test_bare_operator_repeat(self): - s = "repeat(x, n)" - t = "You should use 'operator.mul(x, n)' here." - self.warns_unchanged(s, t) - - def test_bare_operator_irepeat(self): - s = "irepeat(y, 187)" - t = "You should use 'operator.imul(y, 187)' here." - self.warns_unchanged(s, t) - - -class Test_exitfunc(FixerTestCase): - - fixer = "exitfunc" - - def test_simple(self): - b = """ - import sys - sys.exitfunc = my_atexit - """ - a = """ - import sys - import atexit - atexit.register(my_atexit) - """ - self.check(b, a) - - def test_names_import(self): - b = """ - import sys, crumbs - sys.exitfunc = my_func - """ - a = """ - import sys, crumbs, atexit - atexit.register(my_func) - """ - self.check(b, a) - - def test_complex_expression(self): - b = """ - import sys - sys.exitfunc = do(d)/a()+complex(f=23, g=23)*expression - """ - a = """ - import sys - import atexit - atexit.register(do(d)/a()+complex(f=23, g=23)*expression) - """ - self.check(b, a) - - def test_comments(self): - b = """ - import sys # Foo - sys.exitfunc = f # Blah - """ - a = """ - import sys - import atexit # Foo - atexit.register(f) # Blah - """ - self.check(b, a) - - b = """ - import apples, sys, crumbs, larry # Pleasant comments - sys.exitfunc = func - """ - a = """ - import apples, sys, crumbs, larry, atexit # Pleasant comments - atexit.register(func) - """ - self.check(b, a) - - def test_in_a_function(self): - b = """ - import sys - def f(): - sys.exitfunc = func - """ - a = """ - import sys - import atexit - def f(): - atexit.register(func) - """ - self.check(b, a) - - def test_no_sys_import(self): - b = """sys.exitfunc = f""" - a = """atexit.register(f)""" - msg = ("Can't find sys import; Please add an atexit import at the " - "top of your file.") - self.warns(b, a, msg) - - - def test_unchanged(self): - s = """f(sys.exitfunc)""" - self.unchanged(s) diff --git a/PythonLib/extra/lib2to3/tests/test_main.py b/PythonLib/extra/lib2to3/tests/test_main.py deleted file mode 100644 index 7f8b25ca..00000000 --- a/PythonLib/extra/lib2to3/tests/test_main.py +++ /dev/null @@ -1,149 +0,0 @@ -# -*- coding: utf-8 -*- -import sys -import codecs -import logging -import os -import re -import shutil -import StringIO -import sys -import tempfile -import unittest - -from lib2to3 import main - - -TEST_DATA_DIR = os.path.join(os.path.dirname(__file__), "data") -PY2_TEST_MODULE = os.path.join(TEST_DATA_DIR, "py2_test_grammar.py") - - -class TestMain(unittest.TestCase): - - if not hasattr(unittest.TestCase, 'assertNotRegex'): - # This method was only introduced in 3.2. - def assertNotRegex(self, text, regexp, msg=None): - import re - if not hasattr(regexp, 'search'): - regexp = re.compile(regexp) - if regexp.search(text): - self.fail("regexp %s MATCHED text %r" % (regexp.pattern, text)) - - def setUp(self): - self.temp_dir = None # tearDown() will rmtree this directory if set. - - def tearDown(self): - # Clean up logging configuration down by main. - del logging.root.handlers[:] - if self.temp_dir: - shutil.rmtree(self.temp_dir) - - def run_2to3_capture(self, args, in_capture, out_capture, err_capture): - save_stdin = sys.stdin - save_stdout = sys.stdout - save_stderr = sys.stderr - sys.stdin = in_capture - sys.stdout = out_capture - sys.stderr = err_capture - try: - return main.main("lib2to3.fixes", args) - finally: - sys.stdin = save_stdin - sys.stdout = save_stdout - sys.stderr = save_stderr - - def test_unencodable_diff(self): - input_stream = StringIO.StringIO(u"print 'nothing'\nprint u'über'\n") - out = StringIO.StringIO() - out_enc = codecs.getwriter("ascii")(out) - err = StringIO.StringIO() - ret = self.run_2to3_capture(["-"], input_stream, out_enc, err) - self.assertEqual(ret, 0) - output = out.getvalue() - self.assertTrue("-print 'nothing'" in output) - self.assertTrue("WARNING: couldn't encode 's diff for " - "your terminal" in err.getvalue()) - - def setup_test_source_trees(self): - """Setup a test source tree and output destination tree.""" - self.temp_dir = tempfile.mkdtemp() # tearDown() cleans this up. - self.py2_src_dir = os.path.join(self.temp_dir, "python2_project") - self.py3_dest_dir = os.path.join(self.temp_dir, "python3_project") - os.mkdir(self.py2_src_dir) - os.mkdir(self.py3_dest_dir) - # Turn it into a package with a few files. - self.setup_files = [] - open(os.path.join(self.py2_src_dir, "__init__.py"), "w").close() - self.setup_files.append("__init__.py") - shutil.copy(PY2_TEST_MODULE, self.py2_src_dir) - self.setup_files.append(os.path.basename(PY2_TEST_MODULE)) - self.trivial_py2_file = os.path.join(self.py2_src_dir, "trivial.py") - self.init_py2_file = os.path.join(self.py2_src_dir, "__init__.py") - with open(self.trivial_py2_file, "w") as trivial: - trivial.write("print 'I need a simple conversion.'") - self.setup_files.append("trivial.py") - - def test_filename_changing_on_output_single_dir(self): - """2to3 a single directory with a new output dir and suffix.""" - self.setup_test_source_trees() - out = StringIO.StringIO() - err = StringIO.StringIO() - suffix = "TEST" - ret = self.run_2to3_capture( - ["-n", "--add-suffix", suffix, "--write-unchanged-files", - "--no-diffs", "--output-dir", - self.py3_dest_dir, self.py2_src_dir], - StringIO.StringIO(""), out, err) - self.assertEqual(ret, 0) - stderr = err.getvalue() - self.assertIn(" implies -w.", stderr) - self.assertIn( - "Output in %r will mirror the input directory %r layout" % ( - self.py3_dest_dir, self.py2_src_dir), stderr) - self.assertEqual(set(name+suffix for name in self.setup_files), - set(os.listdir(self.py3_dest_dir))) - for name in self.setup_files: - self.assertIn("Writing converted %s to %s" % ( - os.path.join(self.py2_src_dir, name), - os.path.join(self.py3_dest_dir, name+suffix)), stderr) - sep = re.escape(os.sep) - self.assertRegexpMatches( - stderr, r"No changes to .*/__init__\.py".replace("/", sep)) - self.assertNotRegex( - stderr, r"No changes to .*/trivial\.py".replace("/", sep)) - - def test_filename_changing_on_output_two_files(self): - """2to3 two files in one directory with a new output dir.""" - self.setup_test_source_trees() - err = StringIO.StringIO() - py2_files = [self.trivial_py2_file, self.init_py2_file] - expected_files = set(os.path.basename(name) for name in py2_files) - ret = self.run_2to3_capture( - ["-n", "-w", "--write-unchanged-files", - "--no-diffs", "--output-dir", self.py3_dest_dir] + py2_files, - StringIO.StringIO(""), StringIO.StringIO(), err) - self.assertEqual(ret, 0) - stderr = err.getvalue() - self.assertIn( - "Output in %r will mirror the input directory %r layout" % ( - self.py3_dest_dir, self.py2_src_dir), stderr) - self.assertEqual(expected_files, set(os.listdir(self.py3_dest_dir))) - - def test_filename_changing_on_output_single_file(self): - """2to3 a single file with a new output dir.""" - self.setup_test_source_trees() - err = StringIO.StringIO() - ret = self.run_2to3_capture( - ["-n", "-w", "--no-diffs", "--output-dir", self.py3_dest_dir, - self.trivial_py2_file], - StringIO.StringIO(""), StringIO.StringIO(), err) - self.assertEqual(ret, 0) - stderr = err.getvalue() - self.assertIn( - "Output in %r will mirror the input directory %r layout" % ( - self.py3_dest_dir, self.py2_src_dir), stderr) - self.assertEqual(set([os.path.basename(self.trivial_py2_file)]), - set(os.listdir(self.py3_dest_dir))) - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/extra/lib2to3/tests/test_parser.py b/PythonLib/extra/lib2to3/tests/test_parser.py deleted file mode 100644 index f66cb6b3..00000000 --- a/PythonLib/extra/lib2to3/tests/test_parser.py +++ /dev/null @@ -1,227 +0,0 @@ -"""Test suite for 2to3's parser and grammar files. - -This is the place to add tests for changes to 2to3's grammar, such as those -merging the grammars for Python 2 and 3. In addition to specific tests for -parts of the grammar we've changed, we also make sure we can parse the -test_grammar.py files from both Python 2 and Python 3. -""" - -from __future__ import with_statement - -# Testing imports -from . import support -from .support import driver, test_dir - -# Python imports -import os -import sys - -# Local imports -from lib2to3.pgen2 import tokenize -from ..pgen2.parse import ParseError -from lib2to3.pygram import python_symbols as syms - - -class TestDriver(support.TestCase): - - def test_formfeed(self): - s = """print 1\n\x0Cprint 2\n""" - t = driver.parse_string(s) - self.assertEqual(t.children[0].children[0].type, syms.print_stmt) - self.assertEqual(t.children[1].children[0].type, syms.print_stmt) - - -class GrammarTest(support.TestCase): - def validate(self, code): - support.parse_string(code) - - def invalid_syntax(self, code): - try: - self.validate(code) - except ParseError: - pass - else: - raise AssertionError("Syntax shouldn't have been valid") - - -class TestRaiseChanges(GrammarTest): - def test_2x_style_1(self): - self.validate("raise") - - def test_2x_style_2(self): - self.validate("raise E, V") - - def test_2x_style_3(self): - self.validate("raise E, V, T") - - def test_2x_style_invalid_1(self): - self.invalid_syntax("raise E, V, T, Z") - - def test_3x_style(self): - self.validate("raise E1 from E2") - - def test_3x_style_invalid_1(self): - self.invalid_syntax("raise E, V from E1") - - def test_3x_style_invalid_2(self): - self.invalid_syntax("raise E from E1, E2") - - def test_3x_style_invalid_3(self): - self.invalid_syntax("raise from E1, E2") - - def test_3x_style_invalid_4(self): - self.invalid_syntax("raise E from") - - -# Adaptated from Python 3's Lib/test/test_grammar.py:GrammarTests.testFuncdef -class TestFunctionAnnotations(GrammarTest): - def test_1(self): - self.validate("""def f(x) -> list: pass""") - - def test_2(self): - self.validate("""def f(x:int): pass""") - - def test_3(self): - self.validate("""def f(*x:str): pass""") - - def test_4(self): - self.validate("""def f(**x:float): pass""") - - def test_5(self): - self.validate("""def f(x, y:1+2): pass""") - - def test_6(self): - self.validate("""def f(a, (b:1, c:2, d)): pass""") - - def test_7(self): - self.validate("""def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6): pass""") - - def test_8(self): - s = """def f(a, (b:1, c:2, d), e:3=4, f=5, - *g:6, h:7, i=8, j:9=10, **k:11) -> 12: pass""" - self.validate(s) - - -class TestExcept(GrammarTest): - def test_new(self): - s = """ - try: - x - except E as N: - y""" - self.validate(s) - - def test_old(self): - s = """ - try: - x - except E, N: - y""" - self.validate(s) - - -# Adapted from Python 3's Lib/test/test_grammar.py:GrammarTests.testAtoms -class TestSetLiteral(GrammarTest): - def test_1(self): - self.validate("""x = {'one'}""") - - def test_2(self): - self.validate("""x = {'one', 1,}""") - - def test_3(self): - self.validate("""x = {'one', 'two', 'three'}""") - - def test_4(self): - self.validate("""x = {2, 3, 4,}""") - - -class TestNumericLiterals(GrammarTest): - def test_new_octal_notation(self): - self.validate("""0o7777777777777""") - self.invalid_syntax("""0o7324528887""") - - def test_new_binary_notation(self): - self.validate("""0b101010""") - self.invalid_syntax("""0b0101021""") - - -class TestClassDef(GrammarTest): - def test_new_syntax(self): - self.validate("class B(t=7): pass") - self.validate("class B(t, *args): pass") - self.validate("class B(t, **kwargs): pass") - self.validate("class B(t, *args, **kwargs): pass") - self.validate("class B(t, y=9, *args, **kwargs): pass") - - -class TestParserIdempotency(support.TestCase): - - """A cut-down version of pytree_idempotency.py.""" - - def test_all_project_files(self): - if sys.platform.startswith("win"): - # XXX something with newlines goes wrong on Windows. - return - for filepath in support.all_project_files(): - with open(filepath, "rb") as fp: - encoding = tokenize.detect_encoding(fp.readline)[0] - self.assertTrue(encoding is not None, - "can't detect encoding for %s" % filepath) - with open(filepath, "r") as fp: - source = fp.read() - source = source.decode(encoding) - tree = driver.parse_string(source) - new = unicode(tree) - if diff(filepath, new, encoding): - self.fail("Idempotency failed: %s" % filepath) - - def test_extended_unpacking(self): - driver.parse_string("a, *b, c = x\n") - driver.parse_string("[*a, b] = x\n") - driver.parse_string("(z, *y, w) = m\n") - driver.parse_string("for *z, m in d: pass\n") - -class TestLiterals(GrammarTest): - - def validate(self, s): - driver.parse_string(support.dedent(s) + "\n\n") - - def test_multiline_bytes_literals(self): - s = """ - md5test(b"\xaa" * 80, - (b"Test Using Larger Than Block-Size Key " - b"and Larger Than One Block-Size Data"), - "6f630fad67cda0ee1fb1f562db3aa53e") - """ - self.validate(s) - - def test_multiline_bytes_tripquote_literals(self): - s = ''' - b""" - - - """ - ''' - self.validate(s) - - def test_multiline_str_literals(self): - s = """ - md5test("\xaa" * 80, - ("Test Using Larger Than Block-Size Key " - "and Larger Than One Block-Size Data"), - "6f630fad67cda0ee1fb1f562db3aa53e") - """ - self.validate(s) - - -def diff(fn, result, encoding): - f = open("@", "w") - try: - f.write(result.encode(encoding)) - finally: - f.close() - try: - fn = fn.replace('"', '\\"') - return os.system('diff -u "%s" @' % fn) - finally: - os.remove("@") diff --git a/PythonLib/extra/lib2to3/tests/test_pytree.py b/PythonLib/extra/lib2to3/tests/test_pytree.py deleted file mode 100644 index ac7d9006..00000000 --- a/PythonLib/extra/lib2to3/tests/test_pytree.py +++ /dev/null @@ -1,494 +0,0 @@ -# Copyright 2006 Google, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Unit tests for pytree.py. - -NOTE: Please *don't* add doc strings to individual test methods! -In verbose mode, printing of the module, class and method name is much -more helpful than printing of (the first line of) the docstring, -especially when debugging a test. -""" - -from __future__ import with_statement - -import sys -import warnings - -# Testing imports -from . import support - -from lib2to3 import pytree - -try: - sorted -except NameError: - def sorted(lst): - l = list(lst) - l.sort() - return l - -class TestNodes(support.TestCase): - - """Unit tests for nodes (Base, Leaf, Node).""" - - if sys.version_info >= (2,6): - # warnings.catch_warnings is new in 2.6. - def test_deprecated_prefix_methods(self): - l = pytree.Leaf(100, "foo") - with warnings.catch_warnings(record=True) as w: - warnings.simplefilter("always", DeprecationWarning) - self.assertEqual(l.get_prefix(), "") - l.set_prefix("hi") - self.assertEqual(l.prefix, "hi") - self.assertEqual(len(w), 2) - for warning in w: - self.assertTrue(warning.category is DeprecationWarning) - self.assertEqual(str(w[0].message), "get_prefix() is deprecated; " \ - "use the prefix property") - self.assertEqual(str(w[1].message), "set_prefix() is deprecated; " \ - "use the prefix property") - - def test_instantiate_base(self): - if __debug__: - # Test that instantiating Base() raises an AssertionError - self.assertRaises(AssertionError, pytree.Base) - - def test_leaf(self): - l1 = pytree.Leaf(100, "foo") - self.assertEqual(l1.type, 100) - self.assertEqual(l1.value, "foo") - - def test_leaf_repr(self): - l1 = pytree.Leaf(100, "foo") - self.assertEqual(repr(l1), "Leaf(100, 'foo')") - - def test_leaf_str(self): - l1 = pytree.Leaf(100, "foo") - self.assertEqual(str(l1), "foo") - l2 = pytree.Leaf(100, "foo", context=(" ", (10, 1))) - self.assertEqual(str(l2), " foo") - - def test_leaf_str_numeric_value(self): - # Make sure that the Leaf's value is stringified. Failing to - # do this can cause a TypeError in certain situations. - l1 = pytree.Leaf(2, 5) - l1.prefix = "foo_" - self.assertEqual(str(l1), "foo_5") - - def test_leaf_equality(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "foo", context=(" ", (1, 0))) - self.assertEqual(l1, l2) - l3 = pytree.Leaf(101, "foo") - l4 = pytree.Leaf(100, "bar") - self.assertNotEqual(l1, l3) - self.assertNotEqual(l1, l4) - - def test_leaf_prefix(self): - l1 = pytree.Leaf(100, "foo") - self.assertEqual(l1.prefix, "") - self.assertFalse(l1.was_changed) - l1.prefix = " ##\n\n" - self.assertEqual(l1.prefix, " ##\n\n") - self.assertTrue(l1.was_changed) - - def test_node(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(200, "bar") - n1 = pytree.Node(1000, [l1, l2]) - self.assertEqual(n1.type, 1000) - self.assertEqual(n1.children, [l1, l2]) - - def test_node_repr(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "bar", context=(" ", (1, 0))) - n1 = pytree.Node(1000, [l1, l2]) - self.assertEqual(repr(n1), - "Node(1000, [%s, %s])" % (repr(l1), repr(l2))) - - def test_node_str(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "bar", context=(" ", (1, 0))) - n1 = pytree.Node(1000, [l1, l2]) - self.assertEqual(str(n1), "foo bar") - - def test_node_prefix(self): - l1 = pytree.Leaf(100, "foo") - self.assertEqual(l1.prefix, "") - n1 = pytree.Node(1000, [l1]) - self.assertEqual(n1.prefix, "") - n1.prefix = " " - self.assertEqual(n1.prefix, " ") - self.assertEqual(l1.prefix, " ") - - def test_get_suffix(self): - l1 = pytree.Leaf(100, "foo", prefix="a") - l2 = pytree.Leaf(100, "bar", prefix="b") - n1 = pytree.Node(1000, [l1, l2]) - - self.assertEqual(l1.get_suffix(), l2.prefix) - self.assertEqual(l2.get_suffix(), "") - self.assertEqual(n1.get_suffix(), "") - - l3 = pytree.Leaf(100, "bar", prefix="c") - n2 = pytree.Node(1000, [n1, l3]) - - self.assertEqual(n1.get_suffix(), l3.prefix) - self.assertEqual(l3.get_suffix(), "") - self.assertEqual(n2.get_suffix(), "") - - def test_node_equality(self): - n1 = pytree.Node(1000, ()) - n2 = pytree.Node(1000, [], context=(" ", (1, 0))) - self.assertEqual(n1, n2) - n3 = pytree.Node(1001, ()) - self.assertNotEqual(n1, n3) - - def test_node_recursive_equality(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "foo") - n1 = pytree.Node(1000, [l1]) - n2 = pytree.Node(1000, [l2]) - self.assertEqual(n1, n2) - l3 = pytree.Leaf(100, "bar") - n3 = pytree.Node(1000, [l3]) - self.assertNotEqual(n1, n3) - - def test_replace(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "+") - l3 = pytree.Leaf(100, "bar") - n1 = pytree.Node(1000, [l1, l2, l3]) - self.assertEqual(n1.children, [l1, l2, l3]) - self.assertTrue(isinstance(n1.children, list)) - self.assertFalse(n1.was_changed) - l2new = pytree.Leaf(100, "-") - l2.replace(l2new) - self.assertEqual(n1.children, [l1, l2new, l3]) - self.assertTrue(isinstance(n1.children, list)) - self.assertTrue(n1.was_changed) - - def test_replace_with_list(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "+") - l3 = pytree.Leaf(100, "bar") - n1 = pytree.Node(1000, [l1, l2, l3]) - - l2.replace([pytree.Leaf(100, "*"), pytree.Leaf(100, "*")]) - self.assertEqual(str(n1), "foo**bar") - self.assertTrue(isinstance(n1.children, list)) - - def test_leaves(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "bar") - l3 = pytree.Leaf(100, "fooey") - n2 = pytree.Node(1000, [l1, l2]) - n3 = pytree.Node(1000, [l3]) - n1 = pytree.Node(1000, [n2, n3]) - - self.assertEqual(list(n1.leaves()), [l1, l2, l3]) - - def test_depth(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "bar") - n2 = pytree.Node(1000, [l1, l2]) - n3 = pytree.Node(1000, []) - n1 = pytree.Node(1000, [n2, n3]) - - self.assertEqual(l1.depth(), 2) - self.assertEqual(n3.depth(), 1) - self.assertEqual(n1.depth(), 0) - - def test_post_order(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "bar") - l3 = pytree.Leaf(100, "fooey") - c1 = pytree.Node(1000, [l1, l2]) - n1 = pytree.Node(1000, [c1, l3]) - self.assertEqual(list(n1.post_order()), [l1, l2, c1, l3, n1]) - - def test_pre_order(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "bar") - l3 = pytree.Leaf(100, "fooey") - c1 = pytree.Node(1000, [l1, l2]) - n1 = pytree.Node(1000, [c1, l3]) - self.assertEqual(list(n1.pre_order()), [n1, c1, l1, l2, l3]) - - def test_changed(self): - l1 = pytree.Leaf(100, "f") - self.assertFalse(l1.was_changed) - l1.changed() - self.assertTrue(l1.was_changed) - - l1 = pytree.Leaf(100, "f") - n1 = pytree.Node(1000, [l1]) - self.assertFalse(n1.was_changed) - n1.changed() - self.assertTrue(n1.was_changed) - - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "+") - l3 = pytree.Leaf(100, "bar") - n1 = pytree.Node(1000, [l1, l2, l3]) - n2 = pytree.Node(1000, [n1]) - self.assertFalse(l1.was_changed) - self.assertFalse(n1.was_changed) - self.assertFalse(n2.was_changed) - - n1.changed() - self.assertTrue(n1.was_changed) - self.assertTrue(n2.was_changed) - self.assertFalse(l1.was_changed) - - def test_leaf_constructor_prefix(self): - for prefix in ("xyz_", ""): - l1 = pytree.Leaf(100, "self", prefix=prefix) - self.assertTrue(str(l1), prefix + "self") - self.assertEqual(l1.prefix, prefix) - - def test_node_constructor_prefix(self): - for prefix in ("xyz_", ""): - l1 = pytree.Leaf(100, "self") - l2 = pytree.Leaf(100, "foo", prefix="_") - n1 = pytree.Node(1000, [l1, l2], prefix=prefix) - self.assertTrue(str(n1), prefix + "self_foo") - self.assertEqual(n1.prefix, prefix) - self.assertEqual(l1.prefix, prefix) - self.assertEqual(l2.prefix, "_") - - def test_remove(self): - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "foo") - n1 = pytree.Node(1000, [l1, l2]) - n2 = pytree.Node(1000, [n1]) - - self.assertEqual(n1.remove(), 0) - self.assertEqual(n2.children, []) - self.assertEqual(l1.parent, n1) - self.assertEqual(n1.parent, None) - self.assertEqual(n2.parent, None) - self.assertFalse(n1.was_changed) - self.assertTrue(n2.was_changed) - - self.assertEqual(l2.remove(), 1) - self.assertEqual(l1.remove(), 0) - self.assertEqual(n1.children, []) - self.assertEqual(l1.parent, None) - self.assertEqual(n1.parent, None) - self.assertEqual(n2.parent, None) - self.assertTrue(n1.was_changed) - self.assertTrue(n2.was_changed) - - def test_remove_parentless(self): - n1 = pytree.Node(1000, []) - n1.remove() - self.assertEqual(n1.parent, None) - - l1 = pytree.Leaf(100, "foo") - l1.remove() - self.assertEqual(l1.parent, None) - - def test_node_set_child(self): - l1 = pytree.Leaf(100, "foo") - n1 = pytree.Node(1000, [l1]) - - l2 = pytree.Leaf(100, "bar") - n1.set_child(0, l2) - self.assertEqual(l1.parent, None) - self.assertEqual(l2.parent, n1) - self.assertEqual(n1.children, [l2]) - - n2 = pytree.Node(1000, [l1]) - n2.set_child(0, n1) - self.assertEqual(l1.parent, None) - self.assertEqual(n1.parent, n2) - self.assertEqual(n2.parent, None) - self.assertEqual(n2.children, [n1]) - - self.assertRaises(IndexError, n1.set_child, 4, l2) - # I don't care what it raises, so long as it's an exception - self.assertRaises(Exception, n1.set_child, 0, list) - - def test_node_insert_child(self): - l1 = pytree.Leaf(100, "foo") - n1 = pytree.Node(1000, [l1]) - - l2 = pytree.Leaf(100, "bar") - n1.insert_child(0, l2) - self.assertEqual(l2.parent, n1) - self.assertEqual(n1.children, [l2, l1]) - - l3 = pytree.Leaf(100, "abc") - n1.insert_child(2, l3) - self.assertEqual(n1.children, [l2, l1, l3]) - - # I don't care what it raises, so long as it's an exception - self.assertRaises(Exception, n1.insert_child, 0, list) - - def test_node_append_child(self): - n1 = pytree.Node(1000, []) - - l1 = pytree.Leaf(100, "foo") - n1.append_child(l1) - self.assertEqual(l1.parent, n1) - self.assertEqual(n1.children, [l1]) - - l2 = pytree.Leaf(100, "bar") - n1.append_child(l2) - self.assertEqual(l2.parent, n1) - self.assertEqual(n1.children, [l1, l2]) - - # I don't care what it raises, so long as it's an exception - self.assertRaises(Exception, n1.append_child, list) - - def test_node_next_sibling(self): - n1 = pytree.Node(1000, []) - n2 = pytree.Node(1000, []) - p1 = pytree.Node(1000, [n1, n2]) - - self.assertTrue(n1.next_sibling is n2) - self.assertEqual(n2.next_sibling, None) - self.assertEqual(p1.next_sibling, None) - - def test_leaf_next_sibling(self): - l1 = pytree.Leaf(100, "a") - l2 = pytree.Leaf(100, "b") - p1 = pytree.Node(1000, [l1, l2]) - - self.assertTrue(l1.next_sibling is l2) - self.assertEqual(l2.next_sibling, None) - self.assertEqual(p1.next_sibling, None) - - def test_node_prev_sibling(self): - n1 = pytree.Node(1000, []) - n2 = pytree.Node(1000, []) - p1 = pytree.Node(1000, [n1, n2]) - - self.assertTrue(n2.prev_sibling is n1) - self.assertEqual(n1.prev_sibling, None) - self.assertEqual(p1.prev_sibling, None) - - def test_leaf_prev_sibling(self): - l1 = pytree.Leaf(100, "a") - l2 = pytree.Leaf(100, "b") - p1 = pytree.Node(1000, [l1, l2]) - - self.assertTrue(l2.prev_sibling is l1) - self.assertEqual(l1.prev_sibling, None) - self.assertEqual(p1.prev_sibling, None) - - -class TestPatterns(support.TestCase): - - """Unit tests for tree matching patterns.""" - - def test_basic_patterns(self): - # Build a tree - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "bar") - l3 = pytree.Leaf(100, "foo") - n1 = pytree.Node(1000, [l1, l2]) - n2 = pytree.Node(1000, [l3]) - root = pytree.Node(1000, [n1, n2]) - # Build a pattern matching a leaf - pl = pytree.LeafPattern(100, "foo", name="pl") - r = {} - self.assertFalse(pl.match(root, results=r)) - self.assertEqual(r, {}) - self.assertFalse(pl.match(n1, results=r)) - self.assertEqual(r, {}) - self.assertFalse(pl.match(n2, results=r)) - self.assertEqual(r, {}) - self.assertTrue(pl.match(l1, results=r)) - self.assertEqual(r, {"pl": l1}) - r = {} - self.assertFalse(pl.match(l2, results=r)) - self.assertEqual(r, {}) - # Build a pattern matching a node - pn = pytree.NodePattern(1000, [pl], name="pn") - self.assertFalse(pn.match(root, results=r)) - self.assertEqual(r, {}) - self.assertFalse(pn.match(n1, results=r)) - self.assertEqual(r, {}) - self.assertTrue(pn.match(n2, results=r)) - self.assertEqual(r, {"pn": n2, "pl": l3}) - r = {} - self.assertFalse(pn.match(l1, results=r)) - self.assertEqual(r, {}) - self.assertFalse(pn.match(l2, results=r)) - self.assertEqual(r, {}) - - def test_wildcard(self): - # Build a tree for testing - l1 = pytree.Leaf(100, "foo") - l2 = pytree.Leaf(100, "bar") - l3 = pytree.Leaf(100, "foo") - n1 = pytree.Node(1000, [l1, l2]) - n2 = pytree.Node(1000, [l3]) - root = pytree.Node(1000, [n1, n2]) - # Build a pattern - pl = pytree.LeafPattern(100, "foo", name="pl") - pn = pytree.NodePattern(1000, [pl], name="pn") - pw = pytree.WildcardPattern([[pn], [pl, pl]], name="pw") - r = {} - self.assertFalse(pw.match_seq([root], r)) - self.assertEqual(r, {}) - self.assertFalse(pw.match_seq([n1], r)) - self.assertEqual(r, {}) - self.assertTrue(pw.match_seq([n2], r)) - # These are easier to debug - self.assertEqual(sorted(r.keys()), ["pl", "pn", "pw"]) - self.assertEqual(r["pl"], l1) - self.assertEqual(r["pn"], n2) - self.assertEqual(r["pw"], [n2]) - # But this is equivalent - self.assertEqual(r, {"pl": l1, "pn": n2, "pw": [n2]}) - r = {} - self.assertTrue(pw.match_seq([l1, l3], r)) - self.assertEqual(r, {"pl": l3, "pw": [l1, l3]}) - self.assertTrue(r["pl"] is l3) - r = {} - - def test_generate_matches(self): - la = pytree.Leaf(1, "a") - lb = pytree.Leaf(1, "b") - lc = pytree.Leaf(1, "c") - ld = pytree.Leaf(1, "d") - le = pytree.Leaf(1, "e") - lf = pytree.Leaf(1, "f") - leaves = [la, lb, lc, ld, le, lf] - root = pytree.Node(1000, leaves) - pa = pytree.LeafPattern(1, "a", "pa") - pb = pytree.LeafPattern(1, "b", "pb") - pc = pytree.LeafPattern(1, "c", "pc") - pd = pytree.LeafPattern(1, "d", "pd") - pe = pytree.LeafPattern(1, "e", "pe") - pf = pytree.LeafPattern(1, "f", "pf") - pw = pytree.WildcardPattern([[pa, pb, pc], [pd, pe], - [pa, pb], [pc, pd], [pe, pf]], - min=1, max=4, name="pw") - self.assertEqual([x[0] for x in pw.generate_matches(leaves)], - [3, 5, 2, 4, 6]) - pr = pytree.NodePattern(type=1000, content=[pw], name="pr") - matches = list(pytree.generate_matches([pr], [root])) - self.assertEqual(len(matches), 1) - c, r = matches[0] - self.assertEqual(c, 1) - self.assertEqual(str(r["pr"]), "abcdef") - self.assertEqual(r["pw"], [la, lb, lc, ld, le, lf]) - for c in "abcdef": - self.assertEqual(r["p" + c], pytree.Leaf(1, c)) - - def test_has_key_example(self): - pattern = pytree.NodePattern(331, - (pytree.LeafPattern(7), - pytree.WildcardPattern(name="args"), - pytree.LeafPattern(8))) - l1 = pytree.Leaf(7, "(") - l2 = pytree.Leaf(3, "x") - l3 = pytree.Leaf(8, ")") - node = pytree.Node(331, [l1, l2, l3]) - r = {} - self.assertTrue(pattern.match(node, r)) - self.assertEqual(r["args"], [l2]) diff --git a/PythonLib/extra/lib2to3/tests/test_refactor.py b/PythonLib/extra/lib2to3/tests/test_refactor.py deleted file mode 100644 index 543fd421..00000000 --- a/PythonLib/extra/lib2to3/tests/test_refactor.py +++ /dev/null @@ -1,321 +0,0 @@ -""" -Unit tests for refactor.py. -""" - -from __future__ import with_statement - -import sys -import os -import codecs -import operator -import StringIO -import tempfile -import shutil -import unittest -import warnings - -from lib2to3 import refactor, pygram, fixer_base -from lib2to3.pgen2 import token - -from . import support - - -TEST_DATA_DIR = os.path.join(os.path.dirname(__file__), "data") -FIXER_DIR = os.path.join(TEST_DATA_DIR, "fixers") - -sys.path.append(FIXER_DIR) -try: - _DEFAULT_FIXERS = refactor.get_fixers_from_package("myfixes") -finally: - sys.path.pop() - -_2TO3_FIXERS = refactor.get_fixers_from_package("lib2to3.fixes") - -class TestRefactoringTool(unittest.TestCase): - - def setUp(self): - sys.path.append(FIXER_DIR) - - def tearDown(self): - sys.path.pop() - - def check_instances(self, instances, classes): - for inst, cls in zip(instances, classes): - if not isinstance(inst, cls): - self.fail("%s are not instances of %s" % instances, classes) - - def rt(self, options=None, fixers=_DEFAULT_FIXERS, explicit=None): - return refactor.RefactoringTool(fixers, options, explicit) - - def test_print_function_option(self): - rt = self.rt({"print_function" : True}) - self.assertTrue(rt.grammar is pygram.python_grammar_no_print_statement) - self.assertTrue(rt.driver.grammar is - pygram.python_grammar_no_print_statement) - - def test_write_unchanged_files_option(self): - rt = self.rt() - self.assertFalse(rt.write_unchanged_files) - rt = self.rt({"write_unchanged_files" : True}) - self.assertTrue(rt.write_unchanged_files) - - def test_fixer_loading_helpers(self): - contents = ["explicit", "first", "last", "parrot", "preorder"] - non_prefixed = refactor.get_all_fix_names("myfixes") - prefixed = refactor.get_all_fix_names("myfixes", False) - full_names = refactor.get_fixers_from_package("myfixes") - self.assertEqual(prefixed, ["fix_" + name for name in contents]) - self.assertEqual(non_prefixed, contents) - self.assertEqual(full_names, - ["myfixes.fix_" + name for name in contents]) - - def test_detect_future_features(self): - run = refactor._detect_future_features - fs = frozenset - empty = fs() - self.assertEqual(run(""), empty) - self.assertEqual(run("from __future__ import print_function"), - fs(("print_function",))) - self.assertEqual(run("from __future__ import generators"), - fs(("generators",))) - self.assertEqual(run("from __future__ import generators, feature"), - fs(("generators", "feature"))) - inp = "from __future__ import generators, print_function" - self.assertEqual(run(inp), fs(("generators", "print_function"))) - inp ="from __future__ import print_function, generators" - self.assertEqual(run(inp), fs(("print_function", "generators"))) - inp = "from __future__ import (print_function,)" - self.assertEqual(run(inp), fs(("print_function",))) - inp = "from __future__ import (generators, print_function)" - self.assertEqual(run(inp), fs(("generators", "print_function"))) - inp = "from __future__ import (generators, nested_scopes)" - self.assertEqual(run(inp), fs(("generators", "nested_scopes"))) - inp = """from __future__ import generators -from __future__ import print_function""" - self.assertEqual(run(inp), fs(("generators", "print_function"))) - invalid = ("from", - "from 4", - "from x", - "from x 5", - "from x im", - "from x import", - "from x import 4", - ) - for inp in invalid: - self.assertEqual(run(inp), empty) - inp = "'docstring'\nfrom __future__ import print_function" - self.assertEqual(run(inp), fs(("print_function",))) - inp = "'docstring'\n'somng'\nfrom __future__ import print_function" - self.assertEqual(run(inp), empty) - inp = "# comment\nfrom __future__ import print_function" - self.assertEqual(run(inp), fs(("print_function",))) - inp = "# comment\n'doc'\nfrom __future__ import print_function" - self.assertEqual(run(inp), fs(("print_function",))) - inp = "class x: pass\nfrom __future__ import print_function" - self.assertEqual(run(inp), empty) - - def test_get_headnode_dict(self): - class NoneFix(fixer_base.BaseFix): - pass - - class FileInputFix(fixer_base.BaseFix): - PATTERN = "file_input< any * >" - - class SimpleFix(fixer_base.BaseFix): - PATTERN = "'name'" - - no_head = NoneFix({}, []) - with_head = FileInputFix({}, []) - simple = SimpleFix({}, []) - d = refactor._get_headnode_dict([no_head, with_head, simple]) - top_fixes = d.pop(pygram.python_symbols.file_input) - self.assertEqual(top_fixes, [with_head, no_head]) - name_fixes = d.pop(token.NAME) - self.assertEqual(name_fixes, [simple, no_head]) - for fixes in d.itervalues(): - self.assertEqual(fixes, [no_head]) - - def test_fixer_loading(self): - from myfixes.fix_first import FixFirst - from myfixes.fix_last import FixLast - from myfixes.fix_parrot import FixParrot - from myfixes.fix_preorder import FixPreorder - - rt = self.rt() - pre, post = rt.get_fixers() - - self.check_instances(pre, [FixPreorder]) - self.check_instances(post, [FixFirst, FixParrot, FixLast]) - - def test_naughty_fixers(self): - self.assertRaises(ImportError, self.rt, fixers=["not_here"]) - self.assertRaises(refactor.FixerError, self.rt, fixers=["no_fixer_cls"]) - self.assertRaises(refactor.FixerError, self.rt, fixers=["bad_order"]) - - def test_refactor_string(self): - rt = self.rt() - input = "def parrot(): pass\n\n" - tree = rt.refactor_string(input, "") - self.assertNotEqual(str(tree), input) - - input = "def f(): pass\n\n" - tree = rt.refactor_string(input, "") - self.assertEqual(str(tree), input) - - def test_refactor_stdin(self): - - class MyRT(refactor.RefactoringTool): - - def print_output(self, old_text, new_text, filename, equal): - results.extend([old_text, new_text, filename, equal]) - - results = [] - rt = MyRT(_DEFAULT_FIXERS) - save = sys.stdin - sys.stdin = StringIO.StringIO("def parrot(): pass\n\n") - try: - rt.refactor_stdin() - finally: - sys.stdin = save - expected = ["def parrot(): pass\n\n", - "def cheese(): pass\n\n", - "", False] - self.assertEqual(results, expected) - - def check_file_refactoring(self, test_file, fixers=_2TO3_FIXERS, - options=None, mock_log_debug=None, - actually_write=True): - tmpdir = tempfile.mkdtemp(prefix="2to3-test_refactor") - self.addCleanup(shutil.rmtree, tmpdir) - # make a copy of the tested file that we can write to - shutil.copy(test_file, tmpdir) - test_file = os.path.join(tmpdir, os.path.basename(test_file)) - os.chmod(test_file, 0o644) - - def read_file(): - with open(test_file, "rb") as fp: - return fp.read() - - old_contents = read_file() - rt = self.rt(fixers=fixers, options=options) - if mock_log_debug: - rt.log_debug = mock_log_debug - - rt.refactor_file(test_file) - self.assertEqual(old_contents, read_file()) - - if not actually_write: - return - rt.refactor_file(test_file, True) - new_contents = read_file() - self.assertNotEqual(old_contents, new_contents) - return new_contents - - def test_refactor_file(self): - test_file = os.path.join(FIXER_DIR, "parrot_example.py") - self.check_file_refactoring(test_file, _DEFAULT_FIXERS) - - def test_refactor_file_write_unchanged_file(self): - test_file = os.path.join(FIXER_DIR, "parrot_example.py") - debug_messages = [] - def recording_log_debug(msg, *args): - debug_messages.append(msg % args) - self.check_file_refactoring(test_file, fixers=(), - options={"write_unchanged_files": True}, - mock_log_debug=recording_log_debug, - actually_write=False) - # Testing that it logged this message when write=False was passed is - # sufficient to see that it did not bail early after "No changes". - message_regex = r"Not writing changes to .*%s%s" % ( - os.sep, os.path.basename(test_file)) - for message in debug_messages: - if "Not writing changes" in message: - self.assertRegexpMatches(message, message_regex) - break - else: - self.fail("%r not matched in %r" % (message_regex, debug_messages)) - - def test_refactor_dir(self): - def check(structure, expected): - def mock_refactor_file(self, f, *args): - got.append(f) - save_func = refactor.RefactoringTool.refactor_file - refactor.RefactoringTool.refactor_file = mock_refactor_file - rt = self.rt() - got = [] - dir = tempfile.mkdtemp(prefix="2to3-test_refactor") - try: - os.mkdir(os.path.join(dir, "a_dir")) - for fn in structure: - open(os.path.join(dir, fn), "wb").close() - rt.refactor_dir(dir) - finally: - refactor.RefactoringTool.refactor_file = save_func - shutil.rmtree(dir) - self.assertEqual(got, - [os.path.join(dir, path) for path in expected]) - check([], []) - tree = ["nothing", - "hi.py", - ".dumb", - ".after.py", - "notpy.npy", - "sappy"] - expected = ["hi.py"] - check(tree, expected) - tree = ["hi.py", - os.path.join("a_dir", "stuff.py")] - check(tree, tree) - - def test_file_encoding(self): - fn = os.path.join(TEST_DATA_DIR, "different_encoding.py") - self.check_file_refactoring(fn) - - def test_false_file_encoding(self): - fn = os.path.join(TEST_DATA_DIR, "false_encoding.py") - data = self.check_file_refactoring(fn) - - def test_bom(self): - fn = os.path.join(TEST_DATA_DIR, "bom.py") - data = self.check_file_refactoring(fn) - self.assertTrue(data.startswith(codecs.BOM_UTF8)) - - def test_crlf_newlines(self): - old_sep = os.linesep - os.linesep = "\r\n" - try: - fn = os.path.join(TEST_DATA_DIR, "crlf.py") - fixes = refactor.get_fixers_from_package("lib2to3.fixes") - self.check_file_refactoring(fn, fixes) - finally: - os.linesep = old_sep - - def test_refactor_docstring(self): - rt = self.rt() - - doc = """ ->>> example() -42 -""" - out = rt.refactor_docstring(doc, "") - self.assertEqual(out, doc) - - doc = """ ->>> def parrot(): -... return 43 -""" - out = rt.refactor_docstring(doc, "") - self.assertNotEqual(out, doc) - - def test_explicit(self): - from myfixes.fix_explicit import FixExplicit - - rt = self.rt(fixers=["myfixes.fix_explicit"]) - self.assertEqual(len(rt.post_order), 0) - - rt = self.rt(explicit=["myfixes.fix_explicit"]) - for fix in rt.post_order: - if isinstance(fix, FixExplicit): - break - else: - self.fail("explicit fixer not loaded") diff --git a/PythonLib/extra/lib2to3/tests/test_util.py b/PythonLib/extra/lib2to3/tests/test_util.py deleted file mode 100644 index 2fab8b9a..00000000 --- a/PythonLib/extra/lib2to3/tests/test_util.py +++ /dev/null @@ -1,594 +0,0 @@ -""" Test suite for the code in fixer_util """ - -# Testing imports -from . import support - -# Python imports -import os.path - -# Local imports -from lib2to3.pytree import Node, Leaf -from lib2to3 import fixer_util -from lib2to3.fixer_util import Attr, Name, Call, Comma -from lib2to3.pgen2 import token - -def parse(code, strip_levels=0): - # The topmost node is file_input, which we don't care about. - # The next-topmost node is a *_stmt node, which we also don't care about - tree = support.parse_string(code) - for i in range(strip_levels): - tree = tree.children[0] - tree.parent = None - return tree - -class MacroTestCase(support.TestCase): - def assertStr(self, node, string): - if isinstance(node, (tuple, list)): - node = Node(fixer_util.syms.simple_stmt, node) - self.assertEqual(str(node), string) - - -class Test_is_tuple(support.TestCase): - def is_tuple(self, string): - return fixer_util.is_tuple(parse(string, strip_levels=2)) - - def test_valid(self): - self.assertTrue(self.is_tuple("(a, b)")) - self.assertTrue(self.is_tuple("(a, (b, c))")) - self.assertTrue(self.is_tuple("((a, (b, c)),)")) - self.assertTrue(self.is_tuple("(a,)")) - self.assertTrue(self.is_tuple("()")) - - def test_invalid(self): - self.assertFalse(self.is_tuple("(a)")) - self.assertFalse(self.is_tuple("('foo') % (b, c)")) - - -class Test_is_list(support.TestCase): - def is_list(self, string): - return fixer_util.is_list(parse(string, strip_levels=2)) - - def test_valid(self): - self.assertTrue(self.is_list("[]")) - self.assertTrue(self.is_list("[a]")) - self.assertTrue(self.is_list("[a, b]")) - self.assertTrue(self.is_list("[a, [b, c]]")) - self.assertTrue(self.is_list("[[a, [b, c]],]")) - - def test_invalid(self): - self.assertFalse(self.is_list("[]+[]")) - - -class Test_Attr(MacroTestCase): - def test(self): - call = parse("foo()", strip_levels=2) - - self.assertStr(Attr(Name("a"), Name("b")), "a.b") - self.assertStr(Attr(call, Name("b")), "foo().b") - - def test_returns(self): - attr = Attr(Name("a"), Name("b")) - self.assertEqual(type(attr), list) - - -class Test_Name(MacroTestCase): - def test(self): - self.assertStr(Name("a"), "a") - self.assertStr(Name("foo.foo().bar"), "foo.foo().bar") - self.assertStr(Name("a", prefix="b"), "ba") - - -class Test_Call(MacroTestCase): - def _Call(self, name, args=None, prefix=None): - """Help the next test""" - children = [] - if isinstance(args, list): - for arg in args: - children.append(arg) - children.append(Comma()) - children.pop() - return Call(Name(name), children, prefix) - - def test(self): - kids = [None, - [Leaf(token.NUMBER, 1), Leaf(token.NUMBER, 2), - Leaf(token.NUMBER, 3)], - [Leaf(token.NUMBER, 1), Leaf(token.NUMBER, 3), - Leaf(token.NUMBER, 2), Leaf(token.NUMBER, 4)], - [Leaf(token.STRING, "b"), Leaf(token.STRING, "j", prefix=" ")] - ] - self.assertStr(self._Call("A"), "A()") - self.assertStr(self._Call("b", kids[1]), "b(1,2,3)") - self.assertStr(self._Call("a.b().c", kids[2]), "a.b().c(1,3,2,4)") - self.assertStr(self._Call("d", kids[3], prefix=" "), " d(b, j)") - - -class Test_does_tree_import(support.TestCase): - def _find_bind_rec(self, name, node): - # Search a tree for a binding -- used to find the starting - # point for these tests. - c = fixer_util.find_binding(name, node) - if c: return c - for child in node.children: - c = self._find_bind_rec(name, child) - if c: return c - - def does_tree_import(self, package, name, string): - node = parse(string) - # Find the binding of start -- that's what we'll go from - node = self._find_bind_rec('start', node) - return fixer_util.does_tree_import(package, name, node) - - def try_with(self, string): - failing_tests = (("a", "a", "from a import b"), - ("a.d", "a", "from a.d import b"), - ("d.a", "a", "from d.a import b"), - (None, "a", "import b"), - (None, "a", "import b, c, d")) - for package, name, import_ in failing_tests: - n = self.does_tree_import(package, name, import_ + "\n" + string) - self.assertFalse(n) - n = self.does_tree_import(package, name, string + "\n" + import_) - self.assertFalse(n) - - passing_tests = (("a", "a", "from a import a"), - ("x", "a", "from x import a"), - ("x", "a", "from x import b, c, a, d"), - ("x.b", "a", "from x.b import a"), - ("x.b", "a", "from x.b import b, c, a, d"), - (None, "a", "import a"), - (None, "a", "import b, c, a, d")) - for package, name, import_ in passing_tests: - n = self.does_tree_import(package, name, import_ + "\n" + string) - self.assertTrue(n) - n = self.does_tree_import(package, name, string + "\n" + import_) - self.assertTrue(n) - - def test_in_function(self): - self.try_with("def foo():\n\tbar.baz()\n\tstart=3") - -class Test_find_binding(support.TestCase): - def find_binding(self, name, string, package=None): - return fixer_util.find_binding(name, parse(string), package) - - def test_simple_assignment(self): - self.assertTrue(self.find_binding("a", "a = b")) - self.assertTrue(self.find_binding("a", "a = [b, c, d]")) - self.assertTrue(self.find_binding("a", "a = foo()")) - self.assertTrue(self.find_binding("a", "a = foo().foo.foo[6][foo]")) - self.assertFalse(self.find_binding("a", "foo = a")) - self.assertFalse(self.find_binding("a", "foo = (a, b, c)")) - - def test_tuple_assignment(self): - self.assertTrue(self.find_binding("a", "(a,) = b")) - self.assertTrue(self.find_binding("a", "(a, b, c) = [b, c, d]")) - self.assertTrue(self.find_binding("a", "(c, (d, a), b) = foo()")) - self.assertTrue(self.find_binding("a", "(a, b) = foo().foo[6][foo]")) - self.assertFalse(self.find_binding("a", "(foo, b) = (b, a)")) - self.assertFalse(self.find_binding("a", "(foo, (b, c)) = (a, b, c)")) - - def test_list_assignment(self): - self.assertTrue(self.find_binding("a", "[a] = b")) - self.assertTrue(self.find_binding("a", "[a, b, c] = [b, c, d]")) - self.assertTrue(self.find_binding("a", "[c, [d, a], b] = foo()")) - self.assertTrue(self.find_binding("a", "[a, b] = foo().foo[a][foo]")) - self.assertFalse(self.find_binding("a", "[foo, b] = (b, a)")) - self.assertFalse(self.find_binding("a", "[foo, [b, c]] = (a, b, c)")) - - def test_invalid_assignments(self): - self.assertFalse(self.find_binding("a", "foo.a = 5")) - self.assertFalse(self.find_binding("a", "foo[a] = 5")) - self.assertFalse(self.find_binding("a", "foo(a) = 5")) - self.assertFalse(self.find_binding("a", "foo(a, b) = 5")) - - def test_simple_import(self): - self.assertTrue(self.find_binding("a", "import a")) - self.assertTrue(self.find_binding("a", "import b, c, a, d")) - self.assertFalse(self.find_binding("a", "import b")) - self.assertFalse(self.find_binding("a", "import b, c, d")) - - def test_from_import(self): - self.assertTrue(self.find_binding("a", "from x import a")) - self.assertTrue(self.find_binding("a", "from a import a")) - self.assertTrue(self.find_binding("a", "from x import b, c, a, d")) - self.assertTrue(self.find_binding("a", "from x.b import a")) - self.assertTrue(self.find_binding("a", "from x.b import b, c, a, d")) - self.assertFalse(self.find_binding("a", "from a import b")) - self.assertFalse(self.find_binding("a", "from a.d import b")) - self.assertFalse(self.find_binding("a", "from d.a import b")) - - def test_import_as(self): - self.assertTrue(self.find_binding("a", "import b as a")) - self.assertTrue(self.find_binding("a", "import b as a, c, a as f, d")) - self.assertFalse(self.find_binding("a", "import a as f")) - self.assertFalse(self.find_binding("a", "import b, c as f, d as e")) - - def test_from_import_as(self): - self.assertTrue(self.find_binding("a", "from x import b as a")) - self.assertTrue(self.find_binding("a", "from x import g as a, d as b")) - self.assertTrue(self.find_binding("a", "from x.b import t as a")) - self.assertTrue(self.find_binding("a", "from x.b import g as a, d")) - self.assertFalse(self.find_binding("a", "from a import b as t")) - self.assertFalse(self.find_binding("a", "from a.d import b as t")) - self.assertFalse(self.find_binding("a", "from d.a import b as t")) - - def test_simple_import_with_package(self): - self.assertTrue(self.find_binding("b", "import b")) - self.assertTrue(self.find_binding("b", "import b, c, d")) - self.assertFalse(self.find_binding("b", "import b", "b")) - self.assertFalse(self.find_binding("b", "import b, c, d", "c")) - - def test_from_import_with_package(self): - self.assertTrue(self.find_binding("a", "from x import a", "x")) - self.assertTrue(self.find_binding("a", "from a import a", "a")) - self.assertTrue(self.find_binding("a", "from x import *", "x")) - self.assertTrue(self.find_binding("a", "from x import b, c, a, d", "x")) - self.assertTrue(self.find_binding("a", "from x.b import a", "x.b")) - self.assertTrue(self.find_binding("a", "from x.b import *", "x.b")) - self.assertTrue(self.find_binding("a", "from x.b import b, c, a, d", "x.b")) - self.assertFalse(self.find_binding("a", "from a import b", "a")) - self.assertFalse(self.find_binding("a", "from a.d import b", "a.d")) - self.assertFalse(self.find_binding("a", "from d.a import b", "a.d")) - self.assertFalse(self.find_binding("a", "from x.y import *", "a.b")) - - def test_import_as_with_package(self): - self.assertFalse(self.find_binding("a", "import b.c as a", "b.c")) - self.assertFalse(self.find_binding("a", "import a as f", "f")) - self.assertFalse(self.find_binding("a", "import a as f", "a")) - - def test_from_import_as_with_package(self): - # Because it would take a lot of special-case code in the fixers - # to deal with from foo import bar as baz, we'll simply always - # fail if there is an "from ... import ... as ..." - self.assertFalse(self.find_binding("a", "from x import b as a", "x")) - self.assertFalse(self.find_binding("a", "from x import g as a, d as b", "x")) - self.assertFalse(self.find_binding("a", "from x.b import t as a", "x.b")) - self.assertFalse(self.find_binding("a", "from x.b import g as a, d", "x.b")) - self.assertFalse(self.find_binding("a", "from a import b as t", "a")) - self.assertFalse(self.find_binding("a", "from a import b as t", "b")) - self.assertFalse(self.find_binding("a", "from a import b as t", "t")) - - def test_function_def(self): - self.assertTrue(self.find_binding("a", "def a(): pass")) - self.assertTrue(self.find_binding("a", "def a(b, c, d): pass")) - self.assertTrue(self.find_binding("a", "def a(): b = 7")) - self.assertFalse(self.find_binding("a", "def d(b, (c, a), e): pass")) - self.assertFalse(self.find_binding("a", "def d(a=7): pass")) - self.assertFalse(self.find_binding("a", "def d(a): pass")) - self.assertFalse(self.find_binding("a", "def d(): a = 7")) - - s = """ - def d(): - def a(): - pass""" - self.assertFalse(self.find_binding("a", s)) - - def test_class_def(self): - self.assertTrue(self.find_binding("a", "class a: pass")) - self.assertTrue(self.find_binding("a", "class a(): pass")) - self.assertTrue(self.find_binding("a", "class a(b): pass")) - self.assertTrue(self.find_binding("a", "class a(b, c=8): pass")) - self.assertFalse(self.find_binding("a", "class d: pass")) - self.assertFalse(self.find_binding("a", "class d(a): pass")) - self.assertFalse(self.find_binding("a", "class d(b, a=7): pass")) - self.assertFalse(self.find_binding("a", "class d(b, *a): pass")) - self.assertFalse(self.find_binding("a", "class d(b, **a): pass")) - self.assertFalse(self.find_binding("a", "class d: a = 7")) - - s = """ - class d(): - class a(): - pass""" - self.assertFalse(self.find_binding("a", s)) - - def test_for(self): - self.assertTrue(self.find_binding("a", "for a in r: pass")) - self.assertTrue(self.find_binding("a", "for a, b in r: pass")) - self.assertTrue(self.find_binding("a", "for (a, b) in r: pass")) - self.assertTrue(self.find_binding("a", "for c, (a,) in r: pass")) - self.assertTrue(self.find_binding("a", "for c, (a, b) in r: pass")) - self.assertTrue(self.find_binding("a", "for c in r: a = c")) - self.assertFalse(self.find_binding("a", "for c in a: pass")) - - def test_for_nested(self): - s = """ - for b in r: - for a in b: - pass""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - for b in r: - for a, c in b: - pass""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - for b in r: - for (a, c) in b: - pass""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - for b in r: - for (a,) in b: - pass""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - for b in r: - for c, (a, d) in b: - pass""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - for b in r: - for c in b: - a = 7""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - for b in r: - for c in b: - d = a""" - self.assertFalse(self.find_binding("a", s)) - - s = """ - for b in r: - for c in a: - d = 7""" - self.assertFalse(self.find_binding("a", s)) - - def test_if(self): - self.assertTrue(self.find_binding("a", "if b in r: a = c")) - self.assertFalse(self.find_binding("a", "if a in r: d = e")) - - def test_if_nested(self): - s = """ - if b in r: - if c in d: - a = c""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - if b in r: - if c in d: - c = a""" - self.assertFalse(self.find_binding("a", s)) - - def test_while(self): - self.assertTrue(self.find_binding("a", "while b in r: a = c")) - self.assertFalse(self.find_binding("a", "while a in r: d = e")) - - def test_while_nested(self): - s = """ - while b in r: - while c in d: - a = c""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - while b in r: - while c in d: - c = a""" - self.assertFalse(self.find_binding("a", s)) - - def test_try_except(self): - s = """ - try: - a = 6 - except: - b = 8""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - except: - a = 6""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - except KeyError: - pass - except: - a = 6""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - except: - b = 6""" - self.assertFalse(self.find_binding("a", s)) - - def test_try_except_nested(self): - s = """ - try: - try: - a = 6 - except: - pass - except: - b = 8""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - except: - try: - a = 6 - except: - pass""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - except: - try: - pass - except: - a = 6""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - try: - b = 8 - except KeyError: - pass - except: - a = 6 - except: - pass""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - pass - except: - try: - b = 8 - except KeyError: - pass - except: - a = 6""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - except: - b = 6""" - self.assertFalse(self.find_binding("a", s)) - - s = """ - try: - try: - b = 8 - except: - c = d - except: - try: - b = 6 - except: - t = 8 - except: - o = y""" - self.assertFalse(self.find_binding("a", s)) - - def test_try_except_finally(self): - s = """ - try: - c = 6 - except: - b = 8 - finally: - a = 9""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - finally: - a = 6""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - finally: - b = 6""" - self.assertFalse(self.find_binding("a", s)) - - s = """ - try: - b = 8 - except: - b = 9 - finally: - b = 6""" - self.assertFalse(self.find_binding("a", s)) - - def test_try_except_finally_nested(self): - s = """ - try: - c = 6 - except: - b = 8 - finally: - try: - a = 9 - except: - b = 9 - finally: - c = 9""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - finally: - try: - pass - finally: - a = 6""" - self.assertTrue(self.find_binding("a", s)) - - s = """ - try: - b = 8 - finally: - try: - b = 6 - finally: - b = 7""" - self.assertFalse(self.find_binding("a", s)) - -class Test_touch_import(support.TestCase): - - def test_after_docstring(self): - node = parse('"""foo"""\nbar()') - fixer_util.touch_import(None, "foo", node) - self.assertEqual(str(node), '"""foo"""\nimport foo\nbar()\n\n') - - def test_after_imports(self): - node = parse('"""foo"""\nimport bar\nbar()') - fixer_util.touch_import(None, "foo", node) - self.assertEqual(str(node), '"""foo"""\nimport bar\nimport foo\nbar()\n\n') - - def test_beginning(self): - node = parse('bar()') - fixer_util.touch_import(None, "foo", node) - self.assertEqual(str(node), 'import foo\nbar()\n\n') - - def test_from_import(self): - node = parse('bar()') - fixer_util.touch_import("html", "escape", node) - self.assertEqual(str(node), 'from html import escape\nbar()\n\n') - - def test_name_import(self): - node = parse('bar()') - fixer_util.touch_import(None, "cgi", node) - self.assertEqual(str(node), 'import cgi\nbar()\n\n') - -class Test_find_indentation(support.TestCase): - - def test_nothing(self): - fi = fixer_util.find_indentation - node = parse("node()") - self.assertEqual(fi(node), u"") - node = parse("") - self.assertEqual(fi(node), u"") - - def test_simple(self): - fi = fixer_util.find_indentation - node = parse("def f():\n x()") - self.assertEqual(fi(node), u"") - self.assertEqual(fi(node.children[0].children[4].children[2]), u" ") - node = parse("def f():\n x()\n y()") - self.assertEqual(fi(node.children[0].children[4].children[4]), u" ") diff --git a/PythonLib/full/BaseHTTPServer.py b/PythonLib/full/BaseHTTPServer.py index deaf2f96..3df3323a 100644 --- a/PythonLib/full/BaseHTTPServer.py +++ b/PythonLib/full/BaseHTTPServer.py @@ -362,14 +362,25 @@ def send_error(self, code, message=None): message = short explain = long self.log_error("code %d, message %s", code, message) - # using _quote_html to prevent Cross Site Scripting attacks (see bug #1100201) - content = (self.error_message_format % - {'code': code, 'message': _quote_html(message), 'explain': explain}) self.send_response(code, message) - self.send_header("Content-Type", self.error_content_type) self.send_header('Connection', 'close') + + # Message body is omitted for cases described in: + # - RFC7230: 3.3. 1xx, 204(No Content), 304(Not Modified) + # - RFC7231: 6.3.6. 205(Reset Content) + content = None + if code >= 200 and code not in (204, 205, 304): + # HTML encode to prevent Cross Site Scripting attacks + # (see bug #1100201) + content = (self.error_message_format % { + 'code': code, + 'message': _quote_html(message), + 'explain': explain + }) + self.send_header("Content-Type", self.error_content_type) self.end_headers() - if self.command != 'HEAD' and code >= 200 and code not in (204, 304): + + if self.command != 'HEAD' and content: self.wfile.write(content) error_message_format = DEFAULT_ERROR_MESSAGE diff --git a/PythonLib/full/CGIHTTPServer.py b/PythonLib/full/CGIHTTPServer.py index 50e0f7ae..5620083c 100644 --- a/PythonLib/full/CGIHTTPServer.py +++ b/PythonLib/full/CGIHTTPServer.py @@ -106,25 +106,21 @@ def is_python(self, path): def run_cgi(self): """Execute a CGI script.""" dir, rest = self.cgi_info - - i = rest.find('/') + path = dir + '/' + rest + i = path.find('/', len(dir)+1) while i >= 0: - nextdir = rest[:i] - nextrest = rest[i+1:] + nextdir = path[:i] + nextrest = path[i+1:] scriptdir = self.translate_path(nextdir) if os.path.isdir(scriptdir): dir, rest = nextdir, nextrest - i = rest.find('/') + i = path.find('/', len(dir)+1) else: break # find an explicit query string, if present. - i = rest.rfind('?') - if i >= 0: - rest, query = rest[:i], rest[i+1:] - else: - query = '' + rest, _, query = rest.partition('?') # dissect the part after the directory name into a script name & # a possible additional path, to be stored in PATH_INFO. @@ -308,13 +304,15 @@ def _url_collapse_path(path): The utility of this function is limited to is_cgi method and helps preventing some security attacks. - Returns: A tuple of (head, tail) where tail is everything after the final / - and head is everything before it. Head will always start with a '/' and, - if it contains anything else, never have a trailing '/'. + Returns: The reconstituted URL, which will always start with a '/'. Raises: IndexError if too many '..' occur within the path. """ + # Query component should not be involved. + path, _, query = path.partition('?') + path = urllib.unquote(path) + # Similar to os.path.split(os.path.normpath(path)) but specific to URL # path semantics rather than local operating system semantics. path_parts = path.split('/') @@ -335,6 +333,9 @@ def _url_collapse_path(path): else: tail_part = '' + if query: + tail_part = '?'.join((tail_part, query)) + splitpath = ('/' + '/'.join(head_parts), tail_part) collapsed_path = "/".join(splitpath) diff --git a/PythonLib/full/Cookie.py b/PythonLib/full/Cookie.py index db32980a..10823637 100644 --- a/PythonLib/full/Cookie.py +++ b/PythonLib/full/Cookie.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# - #### # Copyright 2000 by Timothy O'Malley # @@ -59,7 +56,7 @@ >>> C = Cookie.SmartCookie() [Note: Long-time users of Cookie.py will remember using -Cookie.Cookie() to create an Cookie object. Although deprecated, it +Cookie.Cookie() to create a Cookie object. Although deprecated, it is still supported by the code. See the Backward Compatibility notes for more information.] @@ -193,7 +190,7 @@ Backwards Compatibility ----------------------- -In order to keep compatibilty with earlier versions of Cookie.py, +In order to keep compatibility with earlier versions of Cookie.py, it is still possible to use Cookie.Cookie() to create a Cookie. In fact, this simply returns a SmartCookie. @@ -429,6 +426,8 @@ class Morsel(dict): "version" : "Version", } + _flags = {'secure', 'httponly'} + def __init__(self): # Set defaults self.key = self.value = self.coded_value = None @@ -529,21 +528,26 @@ def OutputString(self, attrs=None): # result, the parsing rules here are less strict. # -_LegalCharsPatt = r"[\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=]" +_LegalKeyChars = r"\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=" +_LegalValueChars = _LegalKeyChars + r"\[\]" _CookiePattern = re.compile( r"(?x)" # This is a Verbose pattern + r"\s*" # Optional whitespace at start of cookie r"(?P" # Start of group 'key' - ""+ _LegalCharsPatt +"+?" # Any word of at least one letter, nongreedy + "["+ _LegalKeyChars +"]+?" # Any word of at least one letter, nongreedy r")" # End of group 'key' + r"(" # Optional group: there may not be a value. r"\s*=\s*" # Equal Sign r"(?P" # Start of group 'val' r'"(?:[^\\"]|\\.)*"' # Any doublequoted string r"|" # or r"\w{3},\s[\s\w\d-]{9,11}\s[\d:]{8}\sGMT" # Special case for "expires" attr r"|" # or - ""+ _LegalCharsPatt +"*" # Any word or empty string + "["+ _LegalValueChars +"]*" # Any word or empty string r")" # End of group 'val' - r"\s*;?" # Probably ending in a semi-colon + r")?" # End of optional value group + r"\s*" # Any number of spaces. + r"(\s+|;|$)" # Ending either at space, semicolon, or EOS. ) @@ -588,8 +592,12 @@ def __set(self, key, real_value, coded_value): def __setitem__(self, key, value): """Dictionary style assignment.""" - rval, cval = self.value_encode(value) - self.__set(key, rval, cval) + if isinstance(value, Morsel): + # allow assignment of constructed Morsels (e.g. for pickling) + dict.__setitem__(self, key, value) + else: + rval, cval = self.value_encode(value) + self.__set(key, rval, cval) # end __setitem__ def output(self, attrs=None, header="Set-Cookie:", sep="\015\012"): @@ -644,7 +652,7 @@ def __ParseString(self, str, patt=_CookiePattern): while 0 <= i < n: # Start looking for a cookie - match = patt.search(str, i) + match = patt.match(str, i) if not match: break # No more cookies K,V = match.group("key"), match.group("val") @@ -659,8 +667,12 @@ def __ParseString(self, str, patt=_CookiePattern): M[ K[1:] ] = V elif K.lower() in Morsel._reserved: if M: - M[ K ] = _unquote(V) - else: + if V is None: + if K.lower() in Morsel._flags: + M[K] = True + else: + M[K] = _unquote(V) + elif V is not None: rval, cval = self.value_decode(V) self.__set(K, rval, cval) M = self[K] diff --git a/PythonLib/full/HTMLParser.py b/PythonLib/full/HTMLParser.py index 5a55e264..fb9380e1 100644 --- a/PythonLib/full/HTMLParser.py +++ b/PythonLib/full/HTMLParser.py @@ -195,9 +195,9 @@ def goahead(self, end): i = self.updatepos(i, k) continue else: - if ";" in rawdata[i:]: #bail by consuming &# - self.handle_data(rawdata[0:2]) - i = self.updatepos(i, 2) + if ";" in rawdata[i:]: # bail by consuming '&#' + self.handle_data(rawdata[i:i+2]) + i = self.updatepos(i, i+2) break elif startswith('&', i): match = entityref.match(rawdata, i) @@ -462,11 +462,12 @@ def replaceEntities(s): else: # Cannot use name2codepoint directly, because HTMLParser supports apos, # which is not part of HTML 4 - import htmlentitydefs if HTMLParser.entitydefs is None: - entitydefs = HTMLParser.entitydefs = {'apos':u"'"} + import htmlentitydefs + entitydefs = {'apos':u"'"} for k, v in htmlentitydefs.name2codepoint.iteritems(): entitydefs[k] = unichr(v) + HTMLParser.entitydefs = entitydefs try: return self.entitydefs[s] except KeyError: diff --git a/PythonLib/full/SendKeys.py b/PythonLib/full/SendKeys.py index 775d78b4..9d01bad5 100644 --- a/PythonLib/full/SendKeys.py +++ b/PythonLib/full/SendKeys.py @@ -1,441 +1,446 @@ -""" -SendKeys.py - Sends one or more keystroke or keystroke combinations -to the active window. - -Copyright (C) 2003 Ollie Rutherfurd - -Python License - -Version 0.3 (2003-06-14) - -$Id$ -""" - -import sys -import time -from _sendkeys import char2keycode, key_up, key_down, toggle_numlock - -__all__ = ['KeySequenceError', 'SendKeys'] - -try: - True -except NameError: - True,False = 1,0 - -KEYEVENTF_KEYUP = 2 -VK_SHIFT = 16 -VK_CONTROL = 17 -VK_MENU = 18 - -PAUSE = 50/1000.0 # 50 milliseconds - -# 'codes' recognized as {CODE( repeat)?} -CODES = { - 'BACK': 8, - 'BACKSPACE': 8, - 'BS': 8, - 'BKSP': 8, - 'BREAK': 3, - 'CAP': 20, - 'CAPSLOCK': 20, - 'DEL': 46, - 'DELETE': 46, - 'DOWN': 40, - 'END': 35, - 'ENTER': 13, - 'ESC': 27, - 'HELP': 47, - 'HOME': 36, - 'INS': 45, - 'INSERT': 45, - 'LEFT': 37, - 'LWIN': 91, - 'NUMLOCK': 144, - 'PGDN': 34, - 'PGUP': 33, - 'PRTSC': 44, - 'RIGHT': 39, - 'RMENU': 165, - 'RWIN': 92, - 'SCROLLLOCK': 145, - 'SPACE': 32, - 'TAB': 9, - 'UP': 38, - 'DOWN': 40, - 'BACKSPACE': 8, - 'F1': 112, - 'F2': 113, - 'F3': 114, - 'F4': 115, - 'F5': 116, - 'F6': 117, - 'F7': 118, - 'F8': 119, - 'F9': 120, - 'F10': 121, - 'F11': 122, - 'F12': 123, - 'F13': 124, - 'F14': 125, - 'F15': 126, - 'F16': 127, - 'F17': 128, - 'F18': 129, - 'F19': 130, - 'F20': 131, - 'F21': 132, - 'F22': 133, - 'F23': 134, - 'F24': 135, -} - -ESCAPE = '+^%~{}[]' -NO_SHIFT = '[]' - -SHIFT = { - '!': '1', - '@': '2', - '#': '3', - '$': '4', - '&': '7', - '*': '8', - '_': '-', - '|': '\\', - ':': ';', - '"': '\'', - '<': ',', - '>': '.', - '?': '/', -} - -# modifier keys -MODIFIERS = { - '+': VK_SHIFT, - '^': VK_CONTROL, - '%': VK_MENU, -} - - -class KeySequenceError(Exception): - """Exception raised when a key sequence string has a syntax error""" - def __str__(self): - return ' '.join(self.args) - - -def _append_code(keys,code): - keys.append((code, True)) - keys.append((code, False)) - -def _next_char(chars,error_msg=None): - if error_msg is None: - error_msg = 'expected another character' - try: - return chars.pop() - except IndexError: - raise KeySequenceError(error_msg) - -def _handle_char(c,keys,shift): - if shift: - keys.append((MODIFIERS['+'],True)) - _append_code(keys, char2keycode(c)) - if shift: - keys.append((MODIFIERS['+'],False)) - -def _release_modifiers(keys,modifiers): - for c in modifiers.keys(): - if modifiers[c]: - keys.append((MODIFIERS[c], False)) - modifiers[c] = False - - -def str2keys(key_string, - with_spaces=False, - with_tabs=False, - with_newlines=False): - """ - Converts `key_string` string to a list of 2-tuples, - ``(keycode,down)``, which can be given to `playkeys`. - - `key_string` : str - A string of keys. - `with_spaces` : bool - Whether to treat spaces as ``{SPACE}``. If `False`, spaces are ignored. - `with_tabs` : bool - Whether to treat tabs as ``{TAB}``. If `False`, tabs are ignored. - `with_newlines` : bool - Whether to treat newlines as ``{ENTER}``. If `False`, newlines are ignored. - """ - # reading input as a stack - chars = list(key_string) - chars.reverse() - # results - keys = [] - # for keeping track of whether shift, ctrl, & alt are pressed - modifiers = {} - for k in MODIFIERS.keys(): - modifiers[k] = False - - while chars: - c = chars.pop() - - if c in MODIFIERS.keys(): - keys.append((MODIFIERS[c],True)) - modifiers[c] = True - - # group of chars, for applying a modifier - elif c == '(': - while c != ')': - c = _next_char(chars,'`(` without `)`') - if c == ')': - raise KeySequenceError('expected a character before `)`') - - if c == ' ' and with_spaces: - _handle_char(CODES['SPACE'], keys, False) - elif c == '\n' and with_newlines: - _handle_char(CODES['ENTER'], keys, False) - elif c == '\t' and with_tabs: - _handle_char(CODES['TAB'], keys, False) - else: - # if we need shift for this char and it's not already pressed - shift = (c.isupper() or c in SHIFT.keys()) and not modifiers['+'] - if c in SHIFT.keys(): - _handle_char(SHIFT[c], keys, shift) - else: - _handle_char(c.lower(), keys, shift) - c = _next_char(chars,'`)` not found') - _release_modifiers(keys,modifiers) - - # escaped code, modifier, or repeated char - elif c == '{': - saw_space = False - name = [_next_char(chars)] - arg = ['0'] - c = _next_char(chars, '`{` without `}`') - while c != '}': - if c == ' ': - saw_space = True - elif c in '.0123456789' and saw_space: - arg.append(c) - else: - name.append(c) - c = _next_char(chars, '`{` without `}`') - code = ''.join(name) - arg = float('0' + ''.join(arg)) - if code == 'PAUSE': - if not arg: - arg = PAUSE - keys.append((None,arg)) - else: - # always having 1 here makes logic - # easier -- we can always loop - if arg == 0: - arg = 1 - for i in range(int(arg)): - if code in CODES.keys(): - _append_code(keys, CODES[code]) - else: - # must be an escaped modifier or a - # repeated char at this point - if len(code) > 1: - raise KeySequenceError('Unknown code: %s' % code) - # handling both {e 3} and {+}, {%}, {^} - shift = code in ESCAPE and not code in NO_SHIFT - # do shift if we've got an upper case letter - shift = shift or code[0].isupper() - c = code - if not shift: - # handle keys in SHIFT (!, @, etc...) - if c in SHIFT.keys(): - c = SHIFT[c] - shift = True - _handle_char(c.lower(), keys, shift) - _release_modifiers(keys,modifiers) - - # unexpected ")" - elif c == ')': - raise KeySequenceError('`)` should be preceeded by `(`') - - # unexpected "}" - elif c == '}': - raise KeySequenceError('`}` should be preceeded by `{`') - - # handling a single character - else: - if c == ' ' and not with_spaces: - continue - elif c == '\t' and not with_tabs: - continue - elif c == '\n' and not with_newlines: - continue - - if c in ('~','\n'): - _append_code(keys, CODES['ENTER']) - elif c == ' ': - _append_code(keys, CODES['SPACE']) - elif c == '\t': - _append_code(keys, CODES['TAB']) - else: - # if we need shift for this char and it's not already pressed - shift = (c.isupper() or c in SHIFT.keys()) and not modifiers['+'] - if c in SHIFT.keys(): - _handle_char(SHIFT[c], keys, shift) - else: - _handle_char(c.lower(), keys, shift) - _release_modifiers(keys,modifiers) - - _release_modifiers(keys,modifiers) - return keys - - -def playkeys(keys, pause=.05): - """ - Simulates pressing and releasing one or more keys. - - `keys` : str - A list of 2-tuples consisting of ``(keycode,down)`` - where `down` is `True` when the key is being pressed - and `False` when it's being released. - - `keys` is returned from `str2keys`. - `pause` : float - Number of seconds between releasing a key and pressing the - next one. - """ - for (vk, arg) in keys: - if vk: - if arg: - key_down(vk) - else: - key_up(vk) - if pause: # pause after key up - time.sleep(pause) - else: - time.sleep(arg) - - -def SendKeys(keys, - pause=0.05, - with_spaces=False, - with_tabs=False, - with_newlines=False, - turn_off_numlock=True): - """ - Sends keys to the current window. - - `keys` : str - A string of keys. - `pause` : float - The number of seconds to wait between sending each key - or key combination. - `with_spaces` : bool - Whether to treat spaces as ``{SPACE}``. If `False`, spaces are ignored. - `with_tabs` : bool - Whether to treat tabs as ``{TAB}``. If `False`, tabs are ignored. - `with_newlines` : bool - Whether to treat newlines as ``{ENTER}``. If `False`, newlines are ignored. - `turn_off_numlock` : bool - Whether to turn off `NUMLOCK` before sending keys. - - example:: - - SendKeys("+hello{SPACE}+world+1") - - would result in ``"Hello World!"`` - """ - - restore_numlock = False - try: - # read keystroke keys into a list of 2 tuples [(key,up),] - _keys = str2keys(keys, with_spaces, with_tabs, with_newlines) - - # certain keystrokes don't seem to behave the same way if NUMLOCK - # is on (for example, ^+{LEFT}), so turn NUMLOCK off, if it's on - # and restore its original state when done. - if turn_off_numlock: - restore_numlock = toggle_numlock(False) - - # "play" the keys to the active window - playkeys(_keys, pause) - finally: - if restore_numlock and turn_off_numlock: - key_down(CODES['NUMLOCK']) - key_up(CODES['NUMLOCK']) - - -def usage(): - """ - Writes help message to `stderr` and exits. - """ - print >> sys.stderr, """\ -%(name)s [-h] [-d seconds] [-p seconds] [-f filename] or [string of keys] - - -dN or --delay=N : N is seconds before starting - -pN or --pause=N : N is seconds between each key - -fNAME or --file=NAME : NAME is filename containing keys to send - -h or --help : show help message -""" % {'name': 'SendKeys.py'} - sys.exit(1) - - -def error(msg): - """ - Writes `msg` to `stderr`, displays usage - information, and exits. - """ - print >> sys.stderr, '\nERROR: %s\n' % msg - usage() - - -def main(args=None): - import getopt - - if args is None: - args = sys.argv[1:] - - try: - opts,args = getopt.getopt(args, - "hp:d:f:", ["help","pause","delay","file"]) - except getopt.GetoptError: - usage() - - pause=0 - delay=0 - filename=None - - for o, a in opts: - if o in ('-h','--help'): - usage() - elif o in ('-f','--file'): - filename = a - elif o in ('-p','--pause'): - try: - pause = float(a) - assert pause >= 0 - except (ValueError,AssertionError),e: - error('`pause` must be >= 0.0') - elif o in ('-d','--delay'): - try: - delay = float(a) - assert delay >= 0 - except (ValueError,AssertionError),e: - error('`delay` must be >= 0.0') - - time.sleep(delay) - - if not filename is None and args: - error("can't pass both filename and string of keys on command-line") - elif filename: - f = open(filename) - keys = f.read() - f.close() - SendKeys(keys, pause) - else: - for a in args: - SendKeys(a, pause) - - -if __name__ == '__main__': - main(sys.argv[1:]) - -# :indentSize=4:lineSeparator=\r\n:maxLineLen=80:noTabs=true:tabSize=4: - +""" +SendKeys.py - Sends one or more keystroke or keystroke combinations +to the active window. + +Copyright (C) 2003 Ollie Rutherfurd + +Python License + +Version 0.3 (2003-06-14) + +$Id$ +""" + +import sys +import time +from _sendkeys import char2keycode, key_up, key_down, toggle_numlock + +__all__ = ['KeySequenceError', 'SendKeys'] + +try: + True +except NameError: + True,False = 1,0 + +KEYEVENTF_KEYUP = 2 +VK_SHIFT = 16 +VK_CONTROL = 17 +VK_MENU = 18 + +PAUSE = 50/1000.0 # 50 milliseconds + +# 'codes' recognized as {CODE( repeat)?} +CODES = { + 'BACK': 8, + 'BACKSPACE': 8, + 'BS': 8, + 'BKSP': 8, + 'BREAK': 3, + 'CAP': 20, + 'CAPSLOCK': 20, + 'DEL': 46, + 'DELETE': 46, + 'DOWN': 40, + 'END': 35, + 'ENTER': 13, + 'ESC': 27, + 'HELP': 47, + 'HOME': 36, + 'INS': 45, + 'INSERT': 45, + 'LEFT': 37, + 'LWIN': 91, + 'NUMLOCK': 144, + 'PGDN': 34, + 'PGUP': 33, + 'PRTSC': 44, + 'RIGHT': 39, + 'RMENU': 165, + 'RWIN': 92, + 'SCROLLLOCK': 145, + 'SPACE': 32, + 'TAB': 9, + 'UP': 38, + 'DOWN': 40, + 'BACKSPACE': 8, + 'F1': 112, + 'F2': 113, + 'F3': 114, + 'F4': 115, + 'F5': 116, + 'F6': 117, + 'F7': 118, + 'F8': 119, + 'F9': 120, + 'F10': 121, + 'F11': 122, + 'F12': 123, + 'F13': 124, + 'F14': 125, + 'F15': 126, + 'F16': 127, + 'F17': 128, + 'F18': 129, + 'F19': 130, + 'F20': 131, + 'F21': 132, + 'F22': 133, + 'F23': 134, + 'F24': 135, +} + +ESCAPE = '+^%~{}[]' +NO_SHIFT = '[]' + +SHIFT = { + '!': '1', + '@': '2', + '#': '3', + '$': '4', + '&': '7', + '*': '8', + '_': '-', + '|': '\\', + ':': ';', + '"': '\'', + '<': ',', + '>': '.', + '?': '/', +} + +# modifier keys +MODIFIERS = { + '+': VK_SHIFT, + '^': VK_CONTROL, + '%': VK_MENU, +} + + +class KeySequenceError(Exception): + """Exception raised when a key sequence string has a syntax error""" + def __str__(self): + return ' '.join(self.args) + + +def _append_code(keys,code): + keys.append((code, True)) + keys.append((code, False)) + +def _next_char(chars,error_msg=None): + if error_msg is None: + error_msg = 'expected another character' + try: + return chars.pop() + except IndexError: + raise KeySequenceError(error_msg) + +def _handle_char(c,keys,shift): + if shift: + keys.append((MODIFIERS['+'],True)) + _append_code(keys, char2keycode(c)) + if shift: + keys.append((MODIFIERS['+'],False)) + +def _release_modifiers(keys,modifiers): + for c in modifiers.keys(): + if modifiers[c]: + keys.append((MODIFIERS[c], False)) + modifiers[c] = False + + +def str2keys(key_string, + with_spaces=False, + with_tabs=False, + with_newlines=False): + """ + Converts `key_string` string to a list of 2-tuples, + ``(keycode,down)``, which can be given to `playkeys`. + + `key_string` : str + A string of keys. + `with_spaces` : bool + Whether to treat spaces as ``{SPACE}``. If `False`, spaces are ignored. + `with_tabs` : bool + Whether to treat tabs as ``{TAB}``. If `False`, tabs are ignored. + `with_newlines` : bool + Whether to treat newlines as ``{ENTER}``. If `False`, newlines are ignored. + """ + # reading input as a stack + chars = list(key_string) + chars.reverse() + # results + keys = [] + # for keeping track of whether shift, ctrl, & alt are pressed + modifiers = {} + for k in MODIFIERS.keys(): + modifiers[k] = False + + while chars: + c = chars.pop() + + if c in MODIFIERS.keys(): + keys.append((MODIFIERS[c],True)) + modifiers[c] = True + + # group of chars, for applying a modifier + elif c == '(': + while c != ')': + c = _next_char(chars,'`(` without `)`') + if c == ')': + raise KeySequenceError('expected a character before `)`') + + if c == ' ' and with_spaces: + _handle_char(CODES['SPACE'], keys, False) + elif c == '\n' and with_newlines: + _handle_char(CODES['ENTER'], keys, False) + elif c == '\t' and with_tabs: + _handle_char(CODES['TAB'], keys, False) + else: + # if we need shift for this char and it's not already pressed + shift = (c.isupper() or c in SHIFT.keys()) and not modifiers['+'] + if c in SHIFT.keys(): + _handle_char(SHIFT[c], keys, shift) + else: + _handle_char(c.lower(), keys, shift) + c = _next_char(chars,'`)` not found') + _release_modifiers(keys,modifiers) + + # escaped code, modifier, or repeated char + elif c == '{': + saw_space = False + name = [_next_char(chars)] + arg = ['0'] + c = _next_char(chars, '`{` without `}`') + while c != '}': + if c == ' ': + saw_space = True + elif c in '.0123456789' and saw_space: + arg.append(c) + else: + name.append(c) + c = _next_char(chars, '`{` without `}`') + code = ''.join(name) + arg = float('0' + ''.join(arg)) + if code == 'PAUSE': + if not arg: + arg = PAUSE + keys.append((None,arg)) + else: + # always having 1 here makes logic + # easier -- we can always loop + if arg == 0: + arg = 1 + for i in range(int(arg)): + if code in CODES.keys(): + _append_code(keys, CODES[code]) + else: + # must be an escaped modifier or a + # repeated char at this point + if len(code) > 1: + try: + # number in hex is also good (more keys are allowed) + _append_code(keys, int(code,16)) + continue + except ValueError: + raise KeySequenceError('Unknown code: %s' % code) + # handling both {e 3} and {+}, {%}, {^} + shift = code in ESCAPE and not code in NO_SHIFT + # do shift if we've got an upper case letter + shift = shift or code[0].isupper() + c = code + if not shift: + # handle keys in SHIFT (!, @, etc...) + if c in SHIFT.keys(): + c = SHIFT[c] + shift = True + _handle_char(c.lower(), keys, shift) + _release_modifiers(keys,modifiers) + + # unexpected ")" + elif c == ')': + raise KeySequenceError('`)` should be preceeded by `(`') + + # unexpected "}" + elif c == '}': + raise KeySequenceError('`}` should be preceeded by `{`') + + # handling a single character + else: + if c == ' ' and not with_spaces: + continue + elif c == '\t' and not with_tabs: + continue + elif c == '\n' and not with_newlines: + continue + + if c in ('~','\n'): + _append_code(keys, CODES['ENTER']) + elif c == ' ': + _append_code(keys, CODES['SPACE']) + elif c == '\t': + _append_code(keys, CODES['TAB']) + else: + # if we need shift for this char and it's not already pressed + shift = (c.isupper() or c in SHIFT.keys()) and not modifiers['+'] + if c in SHIFT.keys(): + _handle_char(SHIFT[c], keys, shift) + else: + _handle_char(c.lower(), keys, shift) + _release_modifiers(keys,modifiers) + + _release_modifiers(keys,modifiers) + return keys + + +def playkeys(keys, pause=.05): + """ + Simulates pressing and releasing one or more keys. + + `keys` : str + A list of 2-tuples consisting of ``(keycode,down)`` + where `down` is `True` when the key is being pressed + and `False` when it's being released. + + `keys` is returned from `str2keys`. + `pause` : float + Number of seconds between releasing a key and pressing the + next one. + """ + for (vk, arg) in keys: + if vk: + if arg: + key_down(vk) + else: + key_up(vk) + if pause: # pause after key up + time.sleep(pause) + else: + time.sleep(arg) + + +def SendKeys(keys, + pause=0.05, + with_spaces=False, + with_tabs=False, + with_newlines=False, + turn_off_numlock=True): + """ + Sends keys to the current window. + + `keys` : str + A string of keys. + `pause` : float + The number of seconds to wait between sending each key + or key combination. + `with_spaces` : bool + Whether to treat spaces as ``{SPACE}``. If `False`, spaces are ignored. + `with_tabs` : bool + Whether to treat tabs as ``{TAB}``. If `False`, tabs are ignored. + `with_newlines` : bool + Whether to treat newlines as ``{ENTER}``. If `False`, newlines are ignored. + `turn_off_numlock` : bool + Whether to turn off `NUMLOCK` before sending keys. + + example:: + + SendKeys("+hello{SPACE}+world+1") + + would result in ``"Hello World!"`` + """ + + restore_numlock = False + try: + # read keystroke keys into a list of 2 tuples [(key,up),] + _keys = str2keys(keys, with_spaces, with_tabs, with_newlines) + + # certain keystrokes don't seem to behave the same way if NUMLOCK + # is on (for example, ^+{LEFT}), so turn NUMLOCK off, if it's on + # and restore its original state when done. + if turn_off_numlock: + restore_numlock = toggle_numlock(False) + + # "play" the keys to the active window + playkeys(_keys, pause) + finally: + if restore_numlock and turn_off_numlock: + key_down(CODES['NUMLOCK']) + key_up(CODES['NUMLOCK']) + + +def usage(): + """ + Writes help message to `stderr` and exits. + """ + print >> sys.stderr, """\ +%(name)s [-h] [-d seconds] [-p seconds] [-f filename] or [string of keys] + + -dN or --delay=N : N is seconds before starting + -pN or --pause=N : N is seconds between each key + -fNAME or --file=NAME : NAME is filename containing keys to send + -h or --help : show help message +""" % {'name': 'SendKeys.py'} + sys.exit(1) + + +def error(msg): + """ + Writes `msg` to `stderr`, displays usage + information, and exits. + """ + print >> sys.stderr, '\nERROR: %s\n' % msg + usage() + + +def main(args=None): + import getopt + + if args is None: + args = sys.argv[1:] + + try: + opts,args = getopt.getopt(args, + "hp:d:f:", ["help","pause","delay","file"]) + except getopt.GetoptError: + usage() + + pause=0 + delay=0 + filename=None + + for o, a in opts: + if o in ('-h','--help'): + usage() + elif o in ('-f','--file'): + filename = a + elif o in ('-p','--pause'): + try: + pause = float(a) + assert pause >= 0 + except (ValueError,AssertionError),e: + error('`pause` must be >= 0.0') + elif o in ('-d','--delay'): + try: + delay = float(a) + assert delay >= 0 + except (ValueError,AssertionError),e: + error('`delay` must be >= 0.0') + + time.sleep(delay) + + if not filename is None and args: + error("can't pass both filename and string of keys on command-line") + elif filename: + f = open(filename) + keys = f.read() + f.close() + SendKeys(keys, pause) + else: + for a in args: + SendKeys(a, pause) + + +if __name__ == '__main__': + main(sys.argv[1:]) + +# :indentSize=4:lineSeparator=\r\n:maxLineLen=80:noTabs=true:tabSize=4: + diff --git a/PythonLib/full/SimpleHTTPServer.py b/PythonLib/full/SimpleHTTPServer.py index 1a172968..c140a273 100644 --- a/PythonLib/full/SimpleHTTPServer.py +++ b/PythonLib/full/SimpleHTTPServer.py @@ -14,6 +14,7 @@ import posixpath import BaseHTTPServer import urllib +import urlparse import cgi import sys import shutil @@ -43,8 +44,10 @@ def do_GET(self): """Serve a GET request.""" f = self.send_head() if f: - self.copyfile(f, self.wfile) - f.close() + try: + self.copyfile(f, self.wfile) + finally: + f.close() def do_HEAD(self): """Serve a HEAD request.""" @@ -66,10 +69,14 @@ def send_head(self): path = self.translate_path(self.path) f = None if os.path.isdir(path): - if not self.path.endswith('/'): + parts = urlparse.urlsplit(self.path) + if not parts.path.endswith('/'): # redirect browser - doing basically what apache does self.send_response(301) - self.send_header("Location", self.path + "/") + new_parts = (parts[0], parts[1], parts[2] + '/', + parts[3], parts[4]) + new_url = urlparse.urlunsplit(new_parts) + self.send_header("Location", new_url) self.end_headers() return None for index in "index.html", "index.htm": @@ -88,13 +95,17 @@ def send_head(self): except IOError: self.send_error(404, "File not found") return None - self.send_response(200) - self.send_header("Content-type", ctype) - fs = os.fstat(f.fileno()) - self.send_header("Content-Length", str(fs[6])) - self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) - self.end_headers() - return f + try: + self.send_response(200) + self.send_header("Content-type", ctype) + fs = os.fstat(f.fileno()) + self.send_header("Content-Length", str(fs[6])) + self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) + self.end_headers() + return f + except: + f.close() + raise def list_directory(self, path): """Helper to produce a directory listing (absent index.html). @@ -156,9 +167,9 @@ def translate_path(self, path): words = filter(None, words) path = os.getcwd() for word in words: - drive, word = os.path.splitdrive(word) - head, word = os.path.split(word) - if word in (os.curdir, os.pardir): continue + if os.path.dirname(word) or word in (os.curdir, os.pardir): + # Ignore components that are not a simple file/directory name + continue path = os.path.join(path, word) if trailing_slash: path += '/' diff --git a/PythonLib/full/SimpleXMLRPCServer.py b/PythonLib/full/SimpleXMLRPCServer.py index f15cd62f..5324e921 100644 --- a/PythonLib/full/SimpleXMLRPCServer.py +++ b/PythonLib/full/SimpleXMLRPCServer.py @@ -188,7 +188,7 @@ def register_instance(self, instance, allow_dotted_names=False): are considered private and will not be called by SimpleXMLRPCServer. - If a registered function matches a XML-RPC request, then it + If a registered function matches an XML-RPC request, then it will be called instead of the registered instance. If the optional allow_dotted_names argument is true and the @@ -704,4 +704,5 @@ def handle_request(self, request_text = None): server = SimpleXMLRPCServer(("localhost", 8000)) server.register_function(pow) server.register_function(lambda x,y: x+y, 'add') + server.register_multicall_functions() server.serve_forever() diff --git a/PythonLib/full/SocketServer.py b/PythonLib/full/SocketServer.py index 26611b74..122430e3 100644 --- a/PythonLib/full/SocketServer.py +++ b/PythonLib/full/SocketServer.py @@ -121,11 +121,6 @@ class will essentially render the service "deaf" while one request is # Author of the BaseServer patch: Luke Kenneth Casson Leighton -# XXX Warning! -# There is a test suite for this module, but it cannot be run by the -# standard regression test. -# To run it manually, run Lib/test/test_socketserver.py. - __version__ = "0.4" @@ -296,6 +291,8 @@ def _handle_request_noblock(self): except: self.handle_error(request, client_address) self.shutdown_request(request) + else: + self.shutdown_request(request) def handle_timeout(self): """Called if no new request arrives within self.timeout. @@ -416,8 +413,12 @@ def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True): self.socket = socket.socket(self.address_family, self.socket_type) if bind_and_activate: - self.server_bind() - self.server_activate() + try: + self.server_bind() + self.server_activate() + except: + self.server_close() + raise def server_bind(self): """Called by constructor to bind the socket. @@ -513,35 +514,37 @@ class ForkingMixIn: def collect_children(self): """Internal routine to wait for children that have exited.""" - if self.active_children is None: return + if self.active_children is None: + return + + # If we're above the max number of children, wait and reap them until + # we go back below threshold. Note that we use waitpid(-1) below to be + # able to collect children in size() syscalls instead + # of size(): the downside is that this might reap children + # which we didn't spawn, which is why we only resort to this when we're + # above max_children. while len(self.active_children) >= self.max_children: - # XXX: This will wait for any child process, not just ones - # spawned by this library. This could confuse other - # libraries that expect to be able to wait for their own - # children. try: - pid, status = os.waitpid(0, 0) - except os.error: - pid = None - if pid not in self.active_children: continue - self.active_children.remove(pid) - - # XXX: This loop runs more system calls than it ought - # to. There should be a way to put the active_children into a - # process group and then use os.waitpid(-pgid) to wait for any - # of that set, but I couldn't find a way to allocate pgids - # that couldn't collide. - for child in self.active_children: + pid, _ = os.waitpid(-1, 0) + self.active_children.discard(pid) + except OSError as e: + if e.errno == errno.ECHILD: + # we don't have any children, we're done + self.active_children.clear() + elif e.errno != errno.EINTR: + break + + # Now reap all defunct children. + for pid in self.active_children.copy(): try: - pid, status = os.waitpid(child, os.WNOHANG) - except os.error: - pid = None - if not pid: continue - try: - self.active_children.remove(pid) - except ValueError, e: - raise ValueError('%s. x=%d and list=%r' % (e.message, pid, - self.active_children)) + pid, _ = os.waitpid(pid, os.WNOHANG) + # if the child hasn't exited yet, pid will be 0 and ignored by + # discard() below + self.active_children.discard(pid) + except OSError as e: + if e.errno == errno.ECHILD: + # someone else reaped it + self.active_children.discard(pid) def handle_timeout(self): """Wait for zombies after self.timeout seconds of inactivity. @@ -557,8 +560,8 @@ def process_request(self, request, client_address): if pid: # Parent process if self.active_children is None: - self.active_children = [] - self.active_children.append(pid) + self.active_children = set() + self.active_children.add(pid) self.close_request(request) #close handle in parent process return else: @@ -636,7 +639,7 @@ class BaseRequestHandler: client address as self.client_address, and the server (in case it needs access to per-server information) as self.server. Since a separate instance is created for each request, the handle() method - can define arbitrary other instance variariables. + can define other arbitrary instance variables. """ @@ -704,7 +707,7 @@ def finish(self): try: self.wfile.flush() except socket.error: - # An final socket error may have occurred here, such as + # A final socket error may have occurred here, such as # the local error ECONNABORTED. pass self.wfile.close() @@ -713,9 +716,6 @@ def finish(self): class DatagramRequestHandler(BaseRequestHandler): - # XXX Regrettably, I cannot get this working on Linux; - # s.recvfrom() doesn't return a meaningful client address. - """Define self.rfile and self.wfile for datagram sockets.""" def setup(self): diff --git a/PythonLib/full/UserDict.py b/PythonLib/full/UserDict.py index bb2218ab..732b327c 100644 --- a/PythonLib/full/UserDict.py +++ b/PythonLib/full/UserDict.py @@ -1,7 +1,24 @@ """A more or less complete user-defined wrapper around dictionary objects.""" class UserDict: - def __init__(self, dict=None, **kwargs): + def __init__(*args, **kwargs): + if not args: + raise TypeError("descriptor '__init__' of 'UserDict' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + if args: + dict = args[0] + elif 'dict' in kwargs: + dict = kwargs.pop('dict') + import warnings + warnings.warn("Passing 'dict' as keyword argument is " + "deprecated", PendingDeprecationWarning, + stacklevel=2) + else: + dict = None self.data = {} if dict is not None: self.update(dict) @@ -43,7 +60,23 @@ def iterkeys(self): return self.data.iterkeys() def itervalues(self): return self.data.itervalues() def values(self): return self.data.values() def has_key(self, key): return key in self.data - def update(self, dict=None, **kwargs): + def update(*args, **kwargs): + if not args: + raise TypeError("descriptor 'update' of 'UserDict' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + if args: + dict = args[0] + elif 'dict' in kwargs: + dict = kwargs.pop('dict') + import warnings + warnings.warn("Passing 'dict' as keyword argument is deprecated", + PendingDeprecationWarning, stacklevel=2) + else: + dict = None if dict is None: pass elif isinstance(dict, UserDict): diff --git a/PythonLib/full/_LWPCookieJar.py b/PythonLib/full/_LWPCookieJar.py index 90cc633d..d91cb514 100644 --- a/PythonLib/full/_LWPCookieJar.py +++ b/PythonLib/full/_LWPCookieJar.py @@ -18,7 +18,7 @@ iso2time, time2isoz) def lwp_cookie_str(cookie): - """Return string representation of Cookie in an the LWP cookie file format. + """Return string representation of Cookie in the LWP cookie file format. Actually, the format is extended a bit -- see module docstring. @@ -49,7 +49,7 @@ def lwp_cookie_str(cookie): class LWPCookieJar(FileCookieJar): """ The LWPCookieJar saves a sequence of "Set-Cookie3" lines. - "Set-Cookie3" is the format used by the libwww-perl libary, not known + "Set-Cookie3" is the format used by the libwww-perl library, not known to be compatible with any browser, but which is easy to read and doesn't lose information about RFC 2965 cookies. diff --git a/PythonLib/full/_MozillaCookieJar.py b/PythonLib/full/_MozillaCookieJar.py index 00e8bcf9..585bc179 100644 --- a/PythonLib/full/_MozillaCookieJar.py +++ b/PythonLib/full/_MozillaCookieJar.py @@ -39,7 +39,7 @@ class MozillaCookieJar(FileCookieJar): magic_re = "#( Netscape)? HTTP Cookie File" header = """\ # Netscape HTTP Cookie File -# http://www.netscape.com/newsref/std/cookie_spec.html +# http://curl.haxx.se/rfc/cookie_spec.html # This is a generated file! Do not edit. """ diff --git a/PythonLib/full/_abcoll.py b/PythonLib/full/_abcoll.py index 0438afda..b643692e 100644 --- a/PythonLib/full/_abcoll.py +++ b/PythonLib/full/_abcoll.py @@ -143,7 +143,7 @@ class Set(Sized, Iterable, Container): methods except for __contains__, __iter__ and __len__. To override the comparisons (presumably for speed, as the - semantics are fixed), all you have to do is redefine __le__ and + semantics are fixed), redefine __le__ and __ge__, then the other operations will automatically follow suit. """ @@ -165,12 +165,17 @@ def __lt__(self, other): def __gt__(self, other): if not isinstance(other, Set): return NotImplemented - return other < self + return len(self) > len(other) and self.__ge__(other) def __ge__(self, other): if not isinstance(other, Set): return NotImplemented - return other <= self + if len(self) < len(other): + return False + for elem in other: + if elem not in self: + return False + return True def __eq__(self, other): if not isinstance(other, Set): @@ -194,6 +199,8 @@ def __and__(self, other): return NotImplemented return self._from_iterable(value for value in other if value in self) + __rand__ = __and__ + def isdisjoint(self, other): 'Return True if two sets have a null intersection.' for value in other: @@ -207,6 +214,8 @@ def __or__(self, other): chain = (e for s in (self, other) for e in s) return self._from_iterable(chain) + __ror__ = __or__ + def __sub__(self, other): if not isinstance(other, Set): if not isinstance(other, Iterable): @@ -215,6 +224,14 @@ def __sub__(self, other): return self._from_iterable(value for value in self if value not in other) + def __rsub__(self, other): + if not isinstance(other, Set): + if not isinstance(other, Iterable): + return NotImplemented + other = self._from_iterable(other) + return self._from_iterable(value for value in other + if value not in self) + def __xor__(self, other): if not isinstance(other, Set): if not isinstance(other, Iterable): @@ -222,6 +239,8 @@ def __xor__(self, other): other = self._from_iterable(other) return (self - other) | (other - self) + __rxor__ = __xor__ + # Sets are not hashable by default, but subclasses can change this __hash__ = None @@ -434,6 +453,7 @@ def __iter__(self): for key in self._mapping: yield key +KeysView.register(type({}.viewkeys())) class ItemsView(MappingView, Set): @@ -454,6 +474,7 @@ def __iter__(self): for key in self._mapping: yield (key, self._mapping[key]) +ItemsView.register(type({}.viewitems())) class ValuesView(MappingView): @@ -467,6 +488,7 @@ def __iter__(self): for key in self._mapping: yield self._mapping[key] +ValuesView.register(type({}.viewvalues())) class MutableMapping(Mapping): @@ -529,23 +551,25 @@ def update(*args, **kwds): If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v ''' - if len(args) > 2: - raise TypeError("update() takes at most 2 positional " - "arguments ({} given)".format(len(args))) - elif not args: - raise TypeError("update() takes at least 1 argument (0 given)") + if not args: + raise TypeError("descriptor 'update' of 'MutableMapping' object " + "needs an argument") self = args[0] - other = args[1] if len(args) >= 2 else () - - if isinstance(other, Mapping): - for key in other: - self[key] = other[key] - elif hasattr(other, "keys"): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value + args = args[1:] + if len(args) > 1: + raise TypeError('update expected at most 1 arguments, got %d' % + len(args)) + if args: + other = args[0] + if isinstance(other, Mapping): + for key in other: + self[key] = other[key] + elif hasattr(other, "keys"): + for key in other.keys(): + self[key] = other[key] + else: + for key, value in other: + self[key] = value for key, value in kwds.items(): self[key] = value diff --git a/PythonLib/full/_ctypes.pyd b/PythonLib/full/_ctypes.pyd index fb19ec1a0d9a33c8eae56a6b5d2e8d8c0f3fc692..147df733d4911331d2ac6935395cb7186812254d 100644 GIT binary patch literal 91648 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

BB8XssQ)Z?cW_vZ9=wi>Qd%6Fh9V2AM>l2 zU&8#k%%8=4n(*ONn*HHaq7RVNm`}7MoJviBbj*BeDx_xSQ&$cgpzoQ)U%RjQ&TFNx&;4*7R}cR3~K-i-%fn7T4N16Sf{PdRq-<2(j* zw#+ecr$646EEJvo80UNtd%9xG&{+QTaqPQu5T!1HdKP!>J{Y3gui6*dlPcgYR@=V% zgwW2}>#>(6Zp`lMNIP9AoH&ji|Ihz6Plyp-fO{S8Fx*#g!u2u2MQ~TbO@K>>D}*b9 zlUy;v7`O}IesIPJ$KcxGo`t&~?q_gbxB|EwI6WNwjlk~(aD(8w9Wlb^aBsjp2lp`C zI=B^Zi{KW(&4SB;ONZ0LY2Xsz&S0VHE4WU$kKhi$y#ZH@_Rt@!9!-$;nqbIo0=sRZ zuqL#d{=UH{;V%$lgfuuO+|6(ea2w#Bh1&yn5bp1Af&nmq8v|#7y8*5OZYkVaxX0kO z!ySa{ggXN_)EFaN1D6eV6Wjv0)o>5Oy$W{#?(cBja2J?RHk<)&65I^98n~aqt%G|Q zZadr?a2;^naEay^;c7Sut`L2>3BNUPO>lR?ZGw9N?f~3TxRY={z$IH^gv;Pea5uo+ z47UjGPPhl*w!rOz`vmSAxI}A=FdFU{>agRt0B!-?61cT+o8Y#>?SgwB?sK>S65s`w z2A2+309OLn0Jj!y3)~*Kqi`qT2H;D`$#7T0S>R^D)x)iVyB}@~TpQd$xMOhLaPb)D z(Qp&s^5Eve)xa%>y9@3KI6c}t0#1PYREPXV)mkjrV7UKwa z5UvgGLAbSWOX0k5C2)Cg65M5Q32>hSuMWYr!94}{HtKu1e z{r4USeeW=OzvGTqX45ak4Z#I>WL%7JWO$4)kiHv_zc%Iz*%$PBAJpqTsn@&E>pia5 zdu*@wm|pJ}^?D!B>;1xB@5#O1HNX36^s?en$#;3;g=?>U=hAes>q_-|iR1jg+^veo zK_T|n#(%OQ3$VX7{*#T;U=6)yXv*tqeWiiwvKo)3qBKyd2{igV zeoeJkQ_vWws`IjDy31MU1b0DQwKw3YM{z=+%A=_(Ti_`VXaZH$evOYu@n63tP^U>l zjTP4|uCESw#tA}s9dddDe##puuc*4#SL4aZM8yhDn&i$j{CKz*=05Ulr{C0!&QX|sdg@&Fa7>X*{Cg2oJrE(oBv zexIkjy0Q@+1pw>k2WzR33?zbpcloJjx_Xa4Si@5Zc&0Q$sisn?5%4Lm@{}*sRMypN zJoWW;_2>2^~dx4Yg`5iDnK zZn-1w%KExmcU>^xE3GfB<>}ZUdP{5M0mNw4dpw%7saZ3!3N;xy6Q@qj(iG?97HRS) z-H?@0d6U2)v+@_Y=J!)BL&ko~V==rnz=c44wRe65l?4T->q{5+ z(^h%%L|WOSoicXvk}=}$0PAry4a0r8;y!R-xYBQX`BaeeReRkPH8s$r2wlp8m6e`) zcX^$Urky&BKbKZi0H@h_u=EVKU^nvAcmkjvrJ9AFMh(T_v7(yIvC{g+2<$TvR0up- z1X7ZQ@>46u!;KT%rDXtHX?XzHFbU!A%4$zdg`eRD;p}|ioTmYkF+j5cb5BmLP=oxX zUP;w{p{}wL;L?XHf&KYswE zOH)^=DGg|9Jf;4ChQiAl(K(t6z3Pd;Dc>(CU=-X{Ahk7A6UTY^9VG%W%7UQ1D4y`t z?*VD7h|-nXAgV)KOTB0a>oaI)u%?3M6R5QpKqHdt(ey15^rBQD#8j`pv9_$PMl&|m zKbGaLtP6Sxa4wfiP~fOZC29{M;w|^6d#=!Pl$lBc?Jo7Z*)U^->oFofmY*{5sZ!(d z&JR>+lzurK8tr)29KaOi5;D6Zv77->eX8)P(nWw%psv1jKDDv34)Fz%G=gw7p5^&Q zLs?VjoiAX}#|AVUBcni%q>D6PHP|Xhz_j44F0ZSgYS}#g(e!TKO@^zCIq@!4cq*&C z7);GrCBfKeYsPC9S5=osK|_P*uO0&V0ZZ}-<$y^L4we&P zaXlcy7?vO`!MnQ*@x(y;v{5cs?sNoKk%#`ynJ1FCPp9P4fbTLY;AB4g`*+GqD8-!h z&WE^CUImT@Qc$mq5s4V3)m|dIb$~hQBg}^cBjZwJ9{7VkUtK*XB6hSy=9K`8!bh3F zgAwEJPNcy|p-%APau7bMqSu6QD}sO;m;Ihwf*zV!G}nRWm=lnOY8f?wh^5L?RqDr_ zU^J6YGcZ!fUlpK%HKp@G0{g;Bj_D2VDA~ZAm4y>vB}4-zgb;#8o_kHZ@xaq^kik+& zgX4*XPX!z)J(Eh1D*!Hr0%qO1Oh|12KCnJ1VjzZDmb_>ZR(L!V(Mke2Enr@?b%qN--| zc+Gs!PDaLrYOhM-W$hn-HWH{RK@f=g0y>m~kx8PLR5wv#MQ)4E>uKOznmOa;i9csN6Mp8+8>eB7pe9Dk z;35+Bi$JWNnnFZc_EMXaZY$)ZK0+k(m*xxkSLa95M`k+bc#(4I>MN>A?v*Q3_+hnw zY5tO{fJbN-`pe~er8;E<33Q4O5-Bh$2+2YQaGB482$FC<4-JXUV2NhA8m19^<#L+B zih(b;1gjy=Q)1pA)~VWRMtwLwdc1YP`Bjk=46akB=jDMQ&Zn8833`>{1t4>8R8o5A z11F%0{FtM)JC(o8k8;=(2ONTQibb6mMrT5yE5{pKpP`XgqPBCqSgWhadO(T!WqRxlOPiyFDpDUuDnB0=`Y$Nz%dOSlzY^FJ{16ZCl~Ch z#>nz%YK2532(_j9h}8&oyvcf1B(MV0x4N8kb~ZTZJ@Apq$BfGf00VIlB2sLUxu{Q| z!%+4cfs2qTN^2nNlA0-0dr?L;3Az;?ka4^NTRgHffXOVQIm0I|!&THFS~Wj4jEynr z3i>mO5HcXI)_F1dK&I;X-X7$@Pt%tq?X%aV9&1KpW%W=0|E2oVQtQDf7=HA^jRINq`mr7=6G>qfvVy>vNB4av1iTq&e{pnHT2&~URHc8!+$ zr=+X%sgr?c$o)CXmNF?9%qAYh-Vc}FTiymQl6N`WYh53c5@PgUJIr&p37UT+oZh~$C4V>Ez z1HJL&iGtKjCW&Rr@8xe3s6tb1{NCsBqT`Wa^}N_GjkWsUMwLN=T< zeX<1GOOY%Mxbv9y2fS=7CIQ4f)w4K_gtp0^K!C((;2&pivT6%dNv*)HaCs6%qCq4P zN_tsjCUT4={(6?g<+9=*tcLo`m>DUrXiF(ZKwUShG1A}biKms7mM`>AC>O@k3nf+p zBW9_wh~w&bk7(YivD8-C76uE#LeSK{C6IAdp~Z4%8119E-lsaGt*oqe`|3SDH>{DG zN=#31ZDO8)m@2NO&QIpgUh&FUX4cdI^ckf6MFyJVhamJ9r^*NNHr-oOS6VT(ZZW0p z@m|pA#zZO1%0@f!oI5r0jB4E3umv$wDriMbjk~9&SE@3LpwwL$^wOe`4zywzY znMC`=^`$-^aHg(|?Di-R56Gg-bB6b%;Z7*$CTS(1JdaQ`WH7SogA+j#QRoVTm~0>J zFN_!zvu1IrqrB7y(>Rj_P`9U{+~cDjOByb%X%?b!}yaw#LD8VSGUFmrR6SXF){ z<_op$I^K>tpQoOdU@9QGW29kk?VT3(QnL2L*r;I=L7#Y-lSs~{aqB0JgP2uAAnYd% zSzXbp#Xa+5K(QD>ao3|eatc-X(fGc3Ss$TmDB0BQQZ%Msz3R~}B~7Gds(O9(00-#Y ze4s4}RAgf4-7jw)CMJL!nsoU9aIT1BR5eB#l#+wViO6cMz!@SI^RCJ8V86eY8YSCUv1AgmI3kHML zL6Sj~@&H_l5|&m=Y8D~bp{rMT{N?r4j6yNp47LVI%~SHPmelM<$gj@7Vrl*r!W3q{ zlQrYisQ%bXePp_+%!JSpzP7dQMr3`A%n=G}MNQ1MUe;LeA>PY=)q=fZG3dkGxMWWj3aU$yX{b7S2aF0D zdx`Fw>rtEVrs3FCVrXN-?q16J0z#|B@iy@!q6~GdQI+(r*MU(5DOyv~% zfI{vpSHb0mGI(Pi$qd(DJvFM&T+g%_5**4%CROCDjBHx-;&KnhgD*NoY)DMuXEG7> zUA7;bC6y8n-HscVp-#-F5hfF`Fdfd$>SC&yBh?R!Z>8S>_(^c%HD%QS_C~a`|8(OS z&?yJf5P9nle;IQ?T?_$ew*bb7V=LMRD}5g;zETMC^o&2tiVV_mO(;rTX%%lgEFTRF zGvq}Fgb`xNX)!1Y+mWTsep{c~Lw-~6S}sEtznFM}lKZR~{abYu@%1KU9gCTHCKVMI zQu$GYmiYsw1ek@~4(OfPxf-T_sYpC$+`C_wqS-1Vc!UTcfldQySQ-T zl!E-c+^JdaqTHLZ7*P4zD9~)egt=4dDj>Z1=gRmxx2C#`cv7u@QTbdvKw~1EeLgMm zM%Hgt<^aV?jCls5E&f#c9GgMzQg5BNv9>OVH4oKue?>q)Ud#kq#tDGcZp>|WS$*9? zkJnvSQz18zv}nFCf$b77hXtz3scb-GA?0Des^U@ob;>%if+J|>SY8pVl2NYnM0nZb8N*3Q^E?g0G@1TJ`Ox zqtEIm99{_1d%OIryifm{?`gXNzeYGE{6MdCI-EA5{7U>0Rs09vj7<3gP90yOig#}q znG%FETuVLTfA!dZM?1PkjE{z`L)bBd#i_zJBCH)@8dca1>>E6Zu#KwnhGMU26~g-a z`|qCF|L&Rn@1EKJcY9{D2EZIgirPeFPt^bl$%82>i(8`naYa4eKN2!wtH8olF|)F&%!?Vcce2of z4Wnd@%d4)1$r}IPhO~N56Be=&CzxOfj#wJ8ZEhuy@;dE0Oq9?*k4&kX&Fda7s0_% zM?<-ry1;e{%5=a@=@cAB7deDhDlm(L#Lx_x3DYN(csC|s1FKCCu0VbnPBMVx20{Mk zHRj8vL0;iDf|3fYvgN(YSZQ10DaLhuYUs|SZQe@nzlp{WJ}Mbe77WsmC+n$XJi2Ki z#>3|fFLVf--L&lpZG)UC2$ zsiqIK1z}h;EZ1KYEMq%Dgx|`wVNm4ExVEV=lk85kTE>=YxHSnE15%F^98kI-{DFE! z7{y8r&_oepS&NzQ%etnF+Wm5EC>cn`P49y6IZEh>_t7~&0Xf)eDp~%hMOh8Pt5hRf z&nti$B?#Ml;RSCtt#;Hk*roBFSB-Tb z_O?f9gG^Z{a3;dkW5CJTNh%$)wh+q<)wK#H-OEa^bx#4V5Wie6w^JtE!ec#p#oH_h z|CGz3j&qc3qE-<%AvzM_C##T-;hsGA72NxaoFBy5(;(w?LKG&z8=@^r>V;H_f^CRH zVZysKHk>F;_mYMz+!3jZxZw+8y60iSdj2fyvbOirc%NjRx^|bX= z5MH3P*qQ2?L>7h|tT_q7z#grm*oDFalpnmL02_=0!k`{0rh9psEb4VFZB}*j9}e%S zb(4Tjn0H#lM_`rZrG;N%hiWbY6hPS-m=jy&+NhbBz`|}-D#Ge9(fTnEbT*6R9kx;j zvH}uPT_HR!mjMhRJe&z*McraQ`XCqyW>I1z+=_NZ@HIk@cM@b6)nEuAq^s(nHf)KO zFJs7l3ZXd*8$R}b%ObBJyrF~_VQV-a7~wpG^<*lbg3(?v26DRRn9F3fUTJMl(NU<4 zhBKsFk9XolVBBmvKS=#yLO4fOU#InWXXb_kQr`-1QbYBiG{XzdU4NJW7gQ5K&8 zZZ7LVb|NfpiiSrez8QkBIvUP^8K$y9f1-mztJwF-HD-GPUODn#cFmDhG%27xP}wdhp1i-B>1qWQ=JND&W83Tv>}9JJ8OiH6s<9*)UT$% zgQGD(7bdz2+6ST!$ULO#S#Z@w?YoU^^ z!tD)0=qZVDV*>|~R>kxjH-K%ygQQyvS{HeCdxT*z?$TQSe7C0oDw=RU-k9FtuEdHk zeI3v3&hYtWmHPr<1hhHl#u%y^<(CELYB?tj^LD=81&1xMFl4Cf|SuQViR8DzwF5KxOSh34Awh zI`+fU;UKDkOJH*6g-1!(KYMg+u0K--Oaa!kXgAE`vD1Q{`o;n**^`KiUFjKor-N`W z>E^}QJj{>FJEItpIt?LcO^D6tJ8kN5WTztDne$jl`|5;@v?YVwW3>znAwwKE1O0If8l-w2$e!cj$1_Z%UviX-pM#EL zr=t1U=m9KNc|K2-hHW)ux#A$%(jPA;QT2R2d**Fmk8B^g?;Z35?$E?&e`(2~?Ri}F z^1{fJ4psOhgs(-IX4}Y=ld5o9L-V~oGNm0(oxTF$$p=QJ_~5#ceiMF^-x`?$p;Ksj z6KUb%CPnL|MHnsOo8XcWz6rkq%B(_o3F=(CePjxKSEmcl?Rd^XxaP%?DcYAtrlcW! zE1rFLriH6E{3h?fx&*@0Uq)Z>oQv?auORQM7*B*J<2U)Wktww1<->1V8&BVbXJO~a zlstr&;CIt5p1uRm9eBP4;pw{phu4t?0D&2>(V zyy26dfWQ>xS~Qc#(&msL0D%FAjF1wN5p=PH1c=hGY0;sG#noO>FK=rk(S??F>9{OU zIYE=lPvd&X=8o-Glz^?WCa{wp_{KB!9ZA|C3tY!h{YZoW{?$2 z(G?Ro8By;+O(Us=HIa(|2?=D7r|prR2AH!0WM0;!1^qCw(^(2lW?tSn91_EpLAml$ zoF*XIfoiP|Oh}+TL2^hf4uE2_3)M`q5Mt=K2=-I3vyPE{%d{xWcEBXmGJA^BO29L^ zZ#IpW$y&My_UnWMieylbYok4`Jz9;O$=JFX^rPL-F<`}}J&da5hG;z`rPo!a@nvmR zg*0=p)ECZ1l^(KXvq>>SI4aT336{rmHiulTHQj_w2+Ohx?mJT zCu@Ri)h7X)d6d1lNJz4tkdDGr!p z_|{S!1A4px2{g;KYCW=g@pQ=>5Z$_pN&!@i*#25TF`o4WQc;-{l^zDdmljAqwc`dmod3*_;^WaLJ;O{xPqf+d6 z*W4AYe>~oOcvtEljraCP`1^BN;H#AXA^zTh_c*+F$?vPPN2PR+Lj1!#UOO3gtKq#( zey8>y!TZ{E(ee-AU3g6HPY&c@y!#&I?;DWcauw1ep4#I>{C31QJ zw;u1w$gi}21>U=mUU_f8yB7Ud;8}zBbk#exQT?anqpWihec(PCc+(O6hIj2HeBK_xy8-XM;r!i#^yBfqX#{`YfcLZEP{+t~ z8KrZSu;U!_T3yiD`m^?bxj&nJVt=S@$@RSN|0!M&o@q2uJUaxKY`r{6|J87yXEi?T z_z&Tyluh`s;T-s2nRXU@QVNiNyHb7{J`im$xeB^1+_`9b;y}KKQK_clf2+T+LuH<$ zte=eksXwj1Y>dZ8$CTbnuIc%{DJ}X={iQVRMjrNmgZ`-TXy`d$p}?Mg&o&R0G-Tg9 zdEVJ^Wo^;fk$!qVHlseWTaf%h zeOizA6>#)S@*Mrn!h4>aP9uknz&jrM{3W|!UxMp$@;0Q)zh?%aU+GbKx(n|GNT_NS4{SEud$tVOxK!`i3gmg0d|3Oi7i&jEW8T<Dg!|;M3j7x2A|1kW%8w>YCBBEOi_`Cl{POZ|}6~ zek7u91^;@d`>F3rKTd(yoDKhetgN=1dHcJv{=I%2L*4&d{b>Jx*bkEH6xe7=V8e#n zS^+uF6Af45)#KLo6Z>npX;jMGg8p$w8MkxM4W;h0{cd&t&&G}9maYYmnc=pg4`(Zv zXsmW&l%}37-A@VMigJERy8rDo>hap}Bjcs50ll1ac6dVqg$zK)%{BMiEgsK zN#CyjTK}CsMl28m;u7&S@wE7Zm~6PjFv)PA;dh1)4V{M14LQbq<8tHE#$(14#;=Sq zrbJVPsmA0tEiv6^+Gu*-wBOWj`jhE9Q;a#@yxF|P{Co3D=J(7;&HpqHwj^7ITkMt$ z%MF%iEiYQ$vK+E}Vfn`Ly+vcSTeGcGti{#^)5X^b>gDway5`O+e3 zne?KxOWH4;l)jd}lX7iA+fLg@wm7@pzS+LVZgMysS&lr%ZH`rrR>x+?Q;v4W_l}F4 zBb?Vbi<~z*7dRW8cRJTPUvnOIe&!tDvb)}Q{mUh2aOVKvGC-T8y+k`sJ5TG^uGMbP z{!06d_62Q+wp;7bg>+Bqw(7R&_UJy%}eN@5PtI!{P_xF)`L~zTqN+-e5JP8;T7t8Qw9BF&%au-!NZkaab}fb1h3Ow^>$OHd}sgc^B|H zZ8>APz&gyDX}#I%x30H7V13*Ap7p5pg!P}+@2yuz6_Q`NS9(U;Chd^kmfn-%Y?s+Y zTd{49?JnDWwvD#m*q*n&V*A)O#xB~Y+n3m1wtrzi-!a@V+M#zi97T=_N1bDx;}?!2 zj;|fxIkZl*)9IY+Yy$MwId?b*xrVw@TvxfSb=h1Gxc0iMb*TuKQ zPsE{y6obyN#IV9}r{NyM&kYY6HXD8e*nMI+&q!D|!?+gE+hE*i++_TV@p6;S*=sof zoD;2C)|u7{>q2Y2^=H<*tq)tbSbuMQ$$H58zEzOMO4mu*Ql7LxS|ja~=G*+XCAJrB zyKQgS{%-r$HrRf>z0h7`_XB>9+n=?6Vjt}|?kER->0B0ED(rKubggmS>w41ltm{SB zEug^*`+B`Ncy?7QF<1$@b6NWG}M-2 z8)K`o-D~@$?IGLCwq3UUwr_0T+eX?m?Kc889tNE?_OswqyG(KbQT0 z_9^X0+P`VP(+<+@)xD)VtUIOqmu`Um0{t-kXyDa#`U3sK`aSvs`gipo>pS&d=x2z3 z6+aj6Fx&;|^^D<^;RnM&W1{g=;}ym<<5Xai&)8^eGHy2RFt!=@821?u7~75GO!u39 zWm;;Evs`Q$X}JOrA$nC{nQ6J%a+l>k%SOv()-Al?nU2@Ic|0?bo!i&oXednokyI1aenI5xW>9BxMsU5UF%$X zTyMG#y1sJ>C4w*p_%TI$Kj_b9ZIaHW%hXlqZqcpNZPJav^EdN)M8 zSk#K?V!jv@my36c+r;<8FGay%0KHjlxZ7|)=FLvSKEqcAComz;SZ7>hTxNXJ_#va) ziKaT!BGWS9!gkY}rf$=PW}|tYxyI}_FERhh+-d&8{Ehh<^xcWRmspxDj{zfIwY+XQ zY#D4#whjlKo?|Vw&bQWB8?4K$&DM0OK$c+rr)r(QU96D*M^H%h&s_JW{G)Xk?0ZYFr#(@Zl}TJG=^!0n+yvL4;Y>YweB!n zWV{SBh~W07@u2ZDVLUR7W&h%{k_LM!%cP zJI(Ky|7QLYP>i=ES<)@pmiZR1C1`olvdgmH(r)?8^0g(wdY#o|z0tbY`d8~0)>FWq zu=OHoxOBBNUNT5FDMKm*Osl0^r6y^mv_bln^oaC=^s=;5dRICkeTX^uPw8LM1-6TA zm)fqiX>CT^WZP_;+g5I?w$<92Y%6Vd+Sb`NfZ{)FdknPeRZy=tZSUCLvwdLui|s4h zY1_G|50yV35jXV@p(r`V_2E9}*FuYHkyslCa*%6_N)SN4ZN>7KFg zvhTIOW&el$Yx^1dAjicHjYA7ezX9`krsHNuxnqID=eX5zyW%riJc&8J z&GCw3x8q$$hvTH<1YF+FQ~8~o%4@Z}-qYs`9#?p$-Zc>y@{M)Sjt+hDE3E0PJ&(~h4CHRliYPDuCYPV@$)&4>Iw)Q>kQSGM~r&EwC2kH`a!*ru{S3$lsfQn`7@^l5dV%;p= zTwMt$T9vLw=hFo+mP>U_x{dlrFn;?%vp>^Y#d%^AMsA(>u=s-bhWM%Y4~$)+VT|Eg zaJxLrPmjTGSYudgSZ~;1*l5@U3E>ID7QHl)Ay!JAZ=;Qv&}b~=R-n$*8H;hJ4mNjTeOxHmisN6EN_6y zkHP%B!I}>m-vEj94$${cte;~9$6)M?QYj>?UD94D8M0NDZK`diZJy1C8TX{^Y1`Yj znf7J&R(qR$jKkt^J3NknW2xikj!llw99KK5oKHDNK!Uo)<#1)XX1Uyu6E?bDa_yrr z*aSTaWAK7@kG4~r3pgzS^?wTT=MLR|-P^$X0s6s^q9*7qpmTYUq-ylH=o|E{`k(6` z)IWup@Fw8+h5jP(Qc;7s;DCHpCN2R^n$5`SaXDzj~TJE(xV0p;$iseg-4YI1+>alvQLGTLVlDnPw9|m?cZ1L1OHsNp`ZWD`y;eU< z@77o9PlDbY7LNiuzXpB|H>4VjhFn7dq_Lpk4oDl18eTNC8TLYQ{ih+;INW%xQE#*w z3ymJ5A2Qhk#)pkh8b_P10ynXl8cionUz_60=bLkZhr1w&y>IqI=HF!*X1x`X>Alup zS}&7Q0h=eKOCWV!XER{_ciXJ!@rz8RI&SZ>CpyMC(jAi>#f~|^wND-Yfc6vTe8KsO z^IPX!%=5QgAG(gYgf;N<6o z>r*i^^7S(zC)GfDZh}1cjQ$1vE0`6B^&jfH^`pT5uMuwq@4pE=VmW5TBj6C*#8)vh zz7W3=6AYJu)?5ckpuupPVU=MWB{z6(TL)ue-Rg!j*cB%Hy+ADSAbXwhux;EV(bw_o7)lJeTi^IgL#0jDWy`Lkt zh-<~4i%*HqiGP4L@vb<`Fy7!W95pO5wxAauKt}x1IK-60^!fv)uT0;96OJ_BV4h~4 zWxmtA-rSD%e{Qy0x-7-kD(gn;X6tXPyRC0p4_c2~zqEE+%~GqhUU~q!X9DDtOk0kv z)Al)f^Bwv!$ew7w2olF-_A&NrAa$6a!B4X1*rx)gZUP@8NwMDEU|()u0l8zX{eEZ< zd~QEye+hH@b!ZX??MLh%*^k-(4$S`slE?r@yyF7LP{&BfBUeMe(1Y$eA%EZCC;&dr zb(A@(AZ-R5OB_wG53GTHy8#q|tOQ%3f9!DVa_n=w?KtFk9}>!^Oh)N;{DAqB;7oR2 z;vDU~(wPSQH8>?msoBmvXCY+Oo1GP~Dv(^i)cG^#YUf?hTYl->RN10&w)`oeX}C3FeGXpDIREEfi?U7HPhH6I*$wRV&C zdF@M}S|7lIaZ-CmI{-SlMt8MtGWhU3T@d!3dv%ZN_UZntJEl9S8?L`he-)_P^?JL0 zihcppFh0>Ii8H}5?h_vn9}*uIe+x``S==S=7u&@@i64P4e~#HQ05%S?4rvVInBI|P zm<|qIVyHAMH8ewq-(Yye@FeuogRmU^({R3VgmJp@CgZKpxi&%C+G2bbJZBbYO`WOL z^pNRsQ?mII^Jr!T$u{3>-T>Y7p!qM*-oG~g%Y2^YT8jvMBonry0?Q0oManEykf{Tp zluedZmNk}j&|4pbmE(K^QxHD~zeuMk>es{m^8_@E z9njGC=nv_S=#T0<^vA#(y7Z^?abmofC?<OP@|=gd{%%Wtr6FY8^n#`CUG+?N?QT>?cxq-{rfOe+r>lRIvubtof5mn zGh!m(KgN)T*=vX1mkHT+mSL`;#^5sqU`1ICNr}ry`wT}Q>&6>LL!%iXjRsX8FIk|~ z=fJ{2(5RAXqyS*DR9YdehQ)(mvr&3N+5-6OkoLd=azHu+t>dV4OzMOM?i3`{Gg7=Q z(Kf<18g_s*+jwv#i_OmFdLFDzvutx=9jLK2*p}K>gMW}7vd7kLOJ>>zX%#E%t0UHd zJ@$5cw>=r0D;f5s(Jl?<#(2yP1Lj6Lq@+Ao0cOWs%!9v4o8hjnP_+k9u@=;FGdsli_1?MjT_vfqt>Zu*Y!HkZc?Z ztRHVI2F{c1YBMY`+hJum1nIQH*a=Ci+jzzp4;!k%lny&;gQ>~1!n7K8)J@uu+;LLrQ0G{nUDjSFoRAcVxm!EOAT6V)Pe(T0whEwFq4oOEri%DrbpJcs51(h zq@j}_hucwFZPl&&6e|0yyUT8A*GKSUX+9_kNHKt`v7jPL_0XhktQ3OHI`99w?sLwZ znFQ_oKKtuF@9+26hM76{_jO<2*LB~g<|~^WE{DV6#$Ph&aO}b-{a4Qae)2!VD4u-T zi<2GCP5kBMyPS)EdHFK+&U=g3-1Duk-}BXP6o2ij-~8scqQ!r8NAW$eZx-MA&Ekbi z>x#eetyOnilb1KC#OS)=iyPNm9DZ-Q`Iq%d&2$HTXT7p^x`#g(PjBYW2c}AEjEnJ@U%7gq_d*|0w>f2mNu+rgJ>~uSRyR5#>e0JQC zb$PCHlEd+(EQjM)^6A76@ae-}5YHUbiugOeW;>i*!TfZT19}8J{D)!`q7k*TK8>Hd zvK(!Ax@}9AV-*#j??0c*QF6J%QM@e6QFy*Ocpm&=mZRKWj(MJ>jXckP*F^7F8%5cZ z^Ds-AAFb7xx7noF;kf;pdscll`c;RcO~q4M`)Yj7$EWSTa-hdGvYMm61_hlcpM}ru zW9oHYbI%=jed}xJ4{LH@ZH_DOd2CF*`FQ$&|NC!%K)o0Wi50`mlna5rxs@!7Z7R)=GJcOz%8+s0;|7Y|smM9(jqPL4GPe*6; zwoovce|ueFQGAaQA4$f%TNV7kGY3C&k3S8x?X6M>MB~h(x5`5$+)+|~$hpw?5ixJp zXkpQ6hkE^5g7)s`^;`$2U zF&z*MhdYu{pLjKKw{z2!iuS{JbkNmR4xnyEf7qIi&X{XuV-IQ-h+*++>Dj~&31XY3 zZ1hj2`ez1RdmRq(iullKFAgQvCO0j0F2V>SVt?1EtPlTA?2o_e`fwY1lKTw!>V04= zqOW6LEDLa~S48*T3Qt)7tA7Kx+=wBx3PsFUvKh&IQA&Bd+IRGn_N3gLwerav&2yJXK zR*;+=yP43l8hb{#*;v+T>#i0%wpQ){q2LVE_SkDDz4#q*i}?kSWWT-j2AT{o@B+c# z?8H#_QV?@2>(q8r9X<4MGO0a80u`_?N>286{0!gigDf}aq%K3lNbf^iP@(*SX~0oy znX%L@}PJ}|JsWV2j)eSzZjGMiU`wW!#r85Ur{-_{_med>*Vi~ z$@LrQ8!>;zNCI7u2M#Cmiy0Ii>g@!B!iMZtZ?xmsFHz|eH6Cnq!>KP}iDT&9R(|RD z<-|hHRxE>5aKMV5LyU;uo5O>S^mXG2dIKOg6rxy5iYUq=a+pN)-VL<{TJ z%wQl`)W!3Q5BWgyEsE&vtsJ2h>wgbeiF%J1PE?Kr6E&kDH7b$G!=3xk=@&))Xrl5o zN{2(hGQS0nXpyKK>F8W{>DD0(FBG*MO+miKG|e3pOPWRfY4L~B;lRPx>8`#|t;pvF zS?U(KuE&`UeO7~-Vbl_D=&L`A$pPWr9cQ9H#fBvvqGfb-QtZ{+uCTV4u-RkZVzV3K zEwq#7E?|FX{b1=4vA4H!RIdL8x&Dzv zVPfZH*1pebw&Sz8VFKs}-s1=oF2}9_+8KydtEy-K%#w)Wu^QAXLA~-yMuo<-y*B8v zPBdV%TRe5>Hp)oGQgs44Sl-YB+*Xn~qPG#>*MHl+`EX%TICht~zd-cpkM1Pi6fFhl z%S7Abz?C4@nCipZ{x^7r8WWQ_D`gj`s*ohC@C;_}YQuy@ohP`JDOjmh+wCjxt&}rR zpTkqk&AtuO!*zN^GMNOgHehLEU&c^kDP*WeEbxdt>c3V@395V070A<|C1U^+_YHV} zIRRfUX0V1pu)2Lxo`xQRm;T%$utAUw@QH{8)b^d{d8s90BLM>1%Cuev2~kjTB6hpN z9fB}nSt9aDV2Sy+OMaWqf2e;jpdNh|dK57qwgw=~mjK4MT(Gq_NJw?Yd@T4x^@?z$ zjym=p{~orBqzbjAmgn9P*b&Pbguz$?s&G_GV6 zvQ3BJl{t_6Wfrrr<^m~qwp`Am%ACibD{+(K&z+1fh`A&oJTvA3{A;i}Z;OVoar>U5 zje{UzG!awOk`_i1gPNh=^&}^Vhj>>zqZhI4=3jQ%t?i_8Xjuj>s~&WcV)N7qg8}Q; z2mYD|ByFcg*<0=j_LeKrSD}D7wdw+KlOm>QL0?M0fkqi#odr>LngodCL(s*}qqun6 zFM$!MF2wM?i<-$o(>MMT@Tl73-5GLgPqg7l??a?upqgVVjjKIGYL>`bOWz-Tn7-#X z8DOH3`pP`0A8^(~OrKqv-k^k30So1wg9?;^#fP7Le{ zq91+jA5Fz(IncRL)c8oaRw^NpM`TeezDs%>j0dCZ*hSE$s>LGG#Uhq2W-4|Wn%HNU z``Yxj@iZ~C{RBNs>R(dp#(rUD;fVeWlrIpE7|~z&PhMt>7$kNf%)kME+Qz(-bfD<3 z?S@37jl2zh;R#&NYIzP2i*$Po0e(g!42U=(QYIhWfM@X$XY@YcZe*T12vz?YF>e?n zs`SHR2p6M#oLr*VF&Jg_tVHF3)sA3qWgkXz=*xOB zYLy$*7|31$dXG&N)j{D*)bFW<6eq0{Om6LsgRrs^HGLt7k#flu@U%qK_le4Wt$t5n zk-zl@Q;}K*TuM<`qP`EyiE<-1n^usNWxv$-bz)$$0+uR4QMm_7!A;+CI#RV!E4~L> z)i1Fw{b{4JwLGb>!kqPsphEDviw96FCQJBHL+pB;B5v}Rb&9hc`&vDlE~)~*%q|af zHJ>Ki&S;f}333dyCy>EdDKt69sDW&Z$3`e5$m2S*Ewwl2m$wS*|un3G8= zvt)g$sl+Z9H+f7QC8Rc^Us8w-G-b0jIf1xwM8Hsd(BJxbk;gjc6qR6$)!G#r8%Z@T zH)gd!i6p}Q+Mxc&Z?K|;PFixrEy`ZE*D*%p%)lIL{X}14jUvkZW%~~4;`QhSktT6t zygRE2#%6X!pzogHMnZ@+67+UzVtxJp9sHEB@OyZC`1vy6x9z;}6AS!@^vIkl<-Wr6 zKrsGla`3Z3u|T2yIzZ#W%=C05*IpoQ@gF)BICt+vQKyu3Hfin$#;T7UN$*pgAjIm1 z9^gv|*ftXXvO~m)i-YE(UxM_{-+_HKq(k(2;e}!tCWJM(63D1HlQYJ9{pcpvZEA{= zYHY>;wg}_tGwv8)UWt$bLB&$bP7m>+*(rX2%>{oCYn2Be#vsMC%08{8KV6o2S4vX7 z6c#^`D*P>EzN)VQ;9*16@wT7HLTON{Cv6UI`(gTBt{9@Jav=Ez!IVt*&%sGTAfBSm zY_+2?ualX=b1%!0(k*`}TD|R$pyxW#tMAy3S_4|cYw(!NF{zW3gA~`vL~?2C@)$v5 z3?WDgw#}IV4WoXbHc@#@U504|^)FF{A5!6h!2(e;5K7b^Q&-T8_32g-ummmi%HKg` zZjj;>yu9Hx5l0nAdBWd;4@a%Gfqq)f8f`--enP3ah};HWhoTJLD?J&f!t|?tK=TQ1 zBOarw2~Wo;J>Nh-LbdTucToQ-ZN~zbr32odbTfZmca_L1l#pGO23gy(Z-bkGHt}qn zl?Qlig=j;k(Mjtc;U@sDR@JOMLJu`|%_MWQ-6W5CH*CSb$1k5&B-N4)DYb;y|05~Q zMAY;JwI7f+BI*xhI)4Ueu1CG?YoLyZ$B0I1L3B1}&Be)FZ^wKpT|hu#P1t?vT6(}F z#Tp)evuk*26ie3rmHN|f_%V(An%ML-e!=t(R4cKZT`OKIEE+6Q*P@>8ryAcgi-St+ z!d;%%@q8}83=IM33oSzQEQdwL*m4EA7y!1djJb+>JPplI$B(bP? zn2K5P@ER(IEQrnqr92OL16A&7%SM^5--}10zvFPUKmx?I6~8wVMJwdYESU&;P^R zulUOI?AHVTCHqB6Mqt>YFVfk8Vdcx}B0$_Wr?+DT_!_>#a9*kM)Gn~5rZ-?}BM{>4 z8&C=8wA9zTNTSms4^1y@pwl9tlec3xXfo;bcHD-_X-1D!plA>u24Q^t=fAbqZw+#} z93)~J(npzlEhPQnM{VKAt zizCb~yd4XSYQ!?U?bqX%!8XhaR~QvG!=n_N)Yj?=dfO-C*}S%2Q;WB-OqIR{lV*$k zcmy-%roY1nz!_ad)9CvTHg@R4tQoz2oawfu9YWN_$maqt?VC*#oP_591Wt6c+um2l@E|NbzhSm&)>w!>b}B7pj{^ zsDzn3LysYzlFneFeiZuVMrvFMn~EY+-7jK89oiyK-JGz}I#s+4)GvKUxO0;Z%{f2b zBWL8uGw_oHJJd2zkv(Q(YHr^{iKy|zyC{6x z4_JK&y0ss$;!v(=8(3oq!4opyt!-#SPbsRp)RN$=u$S0{6QnQd6LArbo)fwRked&)e1?gu^ z=HE(y9;nm*@hL(H1v{sI`!N@%SvBGqq$JV^i6T0okyLXppkOctx)DPemmK?>ng=|XoX z-u7Djj(=NmCK~-(!)O%kjHpK+u*}x367{^hb3^KZbzu8d@QgBs!9+6$q5`$x+uX{q zaZh>Cs!rdC?G(@o-CDzGsPe@?S96$<+LqqpEoPo}+>%Cxx1Ev{$eFBYkD7?}go#)W zF=E{^#>EC?G1?$7Q3vlEBh~^%G>mEw5pL~z8pG>fKVdq=Kw#yW=!5tXG}5%NIf;il znvdNlMifn(F6u|5kM8!Xrxj^WFy1nnlPAK4w^wHlM7{neapiG)&2*Rr-9cbHBmDZ^ zZCJ~WQ_zn&bm{GQju!rkcegX%`P2AFsrR90@WA{0=HYAMHZ1x6F?=AnwEYd{6)8U> z$((+eezaQ(k@`1jI@qo$(qC6s3zRS{+GH+J9$>LW%Hu7g$=F;nd2XO~HWiS0E&&Il zo*aOhz7b!xK_NfY4BnWU0Qk`QbDQ6V0P6S&Eur#se60`0CJ4_FU+c#=-og42_>z3J z_{S5{U-$@`JSObZ8W3Cew*MpQ>QPAlI&}+n7q;(d86XX-JLtFl2kdqVoywZV5Ama2 zG}@k73wCu9cHDFv{nwn<*3)AX8Enuu1Dmny*ndZ>G>z5AK}0EIbl4`V3kjUgP;##1^V+-0ge z75ijP8!go)EQ;@S2U*_F`j~Q$Wxm^xJ5-p#vM}q+N5--jMO054FWg|; z95$jEW9g7E6w1)|K(u2sygQLtR7Bn(=|GV3o0N>+Dh_s(CAHl|qS|g2-T55fU`=2v zhc`Ab%g&?lhB_CchP6kCcax6k3G{l~;igXWG9kiAUZy;XmZ)pF!3JV($s>lhDSBB% z|2kWqzzA}XcpTAoZ>ND+E5-I`8+PC)ZKgzXC~eCvtXhZ$DXfzHSV%?wz3LFR z{d40{;jy|`Stn8C`hljt}Jv`b@cJ63Kd}k_mnJEiF-BP=k zAPmFh+Uj#eeTi))SiVEt=cC`Tv+>qqN9>AtYk?!02frNlSF0+9OQ6Rd8ZsVPyK&%v z{!hd;%8O060rqG8kQ;zYbE$?S!9>R>uugpqzz&KJ^bcT<19UWY;^k~Aik2o;l^~e% zr_xvB=ahTqi*RABI!ef+v+<6J?(w)rc(!jQzE4d`KN8(wo~dvJL@z=p8_3otsbXZX z45SbW6@Y$*Z)&Ac&$b*H?;7Sc!#!1$RQM}W)6x|h4k{7*-;QY@2)3Y@h>5lX8x+Xv z1nZ9d6%eOZ9Mn%y6=?iOc!BSQ#F=f6%*aGtaRdghl~gA)@N5b}Cb~fJ1|tSfzYw_L z#rSE6@nErGF41}@VuA_~Yd-S2p^Ysf?-vUw9mw_ssdu)hJlc~y6jfMYbZT!^F(FMR zW8{oUKhhWzOJ)SRqLZ*CZpk1-6?vkljco3-n%fitdxXvyFRaH2uK<8lwxxmv(|Sl+ zMMSs$!S?~}8c*37F%mc!RVnArsfFChEY7=Aw7Y$Rv(W;3V=|ztRTPMaUd9Zx3cq-$ zlfM*-TE7&2qGPW*_9o;o}CU#qkVPvCBU^KZ+}EZ6QX*6uFR?w&;k zX39%O^Qk15PUz(T^)8^kBUMcEjkh45G#l&?q=@K3wIb?$+9ZUJsG2EC9qa8(50wpq zGT;GB%ffQcwh=FPz)FZ-Vq&*1ttC%RglRKK_q>a@K?$nWsAYNu5Sz=N0W%ns5De9- z%TR>CD%bSemd0d3^B;msf0T4bN~KEFpRQGJM-%k!k!^^NBa#S;gB)dSS>lfbx>~bE z7euzG8G(ZW1L>V`grrSm82T!y&{D}SG%{mssdzww#+A`$>@3KTvnI_l{E^CPf*eU% z@e$ws7bU7@z=A}YEbWJgG;3i5J9{wa%^Xg2qY%@cl+0g9YXG>-s!N+g2m|XByF@dv z9NE$~9^qc)V<;xW@e*?bS7mGiJgJ774xEPws+HbGnIwQr+-N{BLx)cmSzy`{f5*}2 zr82JoTA`8On{;Vah1yCV_%Qm@F9S_b2FwKHso*zdkJTfK6V`E1pAOeJtO1(vl0sRZ z=FIrht$&}?5wf(;J6~+PA@wj{+jONe^$xn$fVmw1(1Ha>|I?}oS;(bD_D9sO(gy%c zzBO(XbM};Vrc5pG_bH_p^QjAqH^m=7GLsQ$3$Y7Ap)?>Q@aez(u7qp!v+8v6B zojrj-S3EDVkGBT-q%a|O)+Zz8q&Y})oc zNQul$!Xs@QfHRUa${<(fZFz^?i}Yc+7pIB(!d_V4>G|SvrX*ruUwOa>nlYDCN99T> z_b+Apc-#M7E*4p%1;962FA@`WECI?bq8tf1Y_6Ib7JK>bS__gm3rb}9DJmPZef(X!xiXf7QD}vDU z$U-qfiKZm5>XSE;bo5(TkEymst*W-`OrmOWZ&fwHBUNFsy+UJe)nY1U32WFyH-IDD zn4l(^R*@+d{NJ(T0cR|LX_7*<*glSJ`J(E4Q?!h!*6NfcMg7>!sBz>s+23oc30~FJ zNv9}BR)+q+V5`J;kxd3uKy0KhC~Bk6PlBf8-=e`2hWQ-S2p-!^c+eMu2Yr4jJVF_!4tY9^bmwoJ?LkM$=+~e;=~FNU zKoL2^N}MycB>g~3ymNxS^2gw)r$GQ;C`-!oDv>(194HjlJ7IjYeD^`pnEmI)d)@1k zZJ1^A>t&sZJ5HP7`8d@kj|9`_FiSUL&fazeWE@5&p5)dtHP_qm9V!58Q;$P}tX1j5 z%*Kn|37%BDiKjn9I=iq}oK}uF)kWUjL4U1UjcMu)2&+ore*^lGDY0$QY;m6l&b&30 zG-db6 zQ{uvMC|SZ!Es5J?A4HPjBjcWEqaVPC^tamh{1@Ys@Ex(L3X1(grNsf1xfGBsu%!=I zqwAF4hR&g2CLFDSaYZp!fcpF0np1Rh$qrIxYT()G)SM{HFnHvCL1aP8yPjYKiDsQb zS%Z7wCyzM+OI-Qc;JoBsI!#Kx;qP z-sSAK!#{HhAg^pZ)PfKE(0nR_dL@;M0&js2qrDJr=BbEk3u|nrBFv6ao%^;O4}@&o z0^F9_NhGAry@32n9haa3bT(Iz>GO`xvv7}&OBi6cjRsGHw__d@Cp$B=hKNAd9o9Gg z3B@wv5Ua)c5o{=U42-VUU>Efa(Xp| z#lMFXF@TSgi=IVYM2@xl=28-h-Na*j^4CceA}Sn3M%pkA^$dl|j;cGb%COcjj8Gh6 zWrSCTOehY3FcaOuGTtREcI!K$uL&U9b!n47E95N zYwbj61SpIEiz$fI(`k#!h+>dLBwH{#bF8v|vB|w>w%fTk{0#cv-AK@gUC4^GjSryA zc7TF%HCu6gans!kHz_(6HMv;x5bWq7re07N) z`kIWInl}Owa#~WpdZcH_l#r`XMrb3AbuMFtndz+%hH@Q@^cpw}N5p~^z2roJ_EDf! z>b;f2^h4T{vViuGqPw*Hx8PGOLUezKe$nB3I@I_iVJEpjwHUM;Z~N=$F#g~&M>GfB zQRnfNA%}5#(fbI3{9qV*BJ2URmiCG_N?*soTK&nvoXvPH>QA~r#qKO}r9r2-Pl=y% zwkl$+4++A9S!K!ixh(jeZl&)>#oqYwocKt#_o2T=ugQ{*fu+-mDE5TlWi!nReAG=* z&{;HS{irtW6sPUfkHYsd?bL2w_lT(Ub7shq6B9wW1&n^ghCsyn&5|~0xkFrgRCAu9 z^AFgTiRh8~8N5T>2)5&0k1+;lw9QnLPfnP0jO2n2P6wg1MN+|VQi4@5n{_!!JVs`1 zuy)V|$AI)Ju(lPA5t{<9!c2V`Gp!tnSB|>NH3-_uA@9R45nGO(1`&bO{~CMq9HW4H z@T*(dDWRy%cC=9jr@<6A5WQA?++OBEKVvLK&?qxVGh-pF_7SQL?uQlzMdT*M)d!Ik z=!;$=}qxIVFM028Iy^2C&_Agt(W{zBj=8=56=mYo>ob{wL>sR{>WDg9(4> zY%Cu@P809UG)QbAU|qJ4RU!==QaP;EoR0T;5-U9&l|HcZvKKIf!#R0QjX!#~vu1Sg znvP0O^jd-KRG(hU6xnHz3YpZaxu-dm{^;#aI8xEw7qJlN{MhXPy6{82sc?11d)ycY zqs7k^-}3|B5u1Jj(Mwso?46~M<_x>gw@yX_$eCV!t1Od=iC&{aa14g;3@hWOp%u{V z6N{>~n&I9`q6cDw6U2J5ERk3s7L^0-vb9QOaH9Awg&VbcxB?c-N;|mHh*-2xRvJYm zjYJ868UHpgVUZ#tL4kA>aE6mwjqYuK5v8jg*r3ythC%8boSelb@~H(K3{*qGxAZ8B ztCx-C>cy5|s77O(v@`WQmi5vlMv7GX0Zc()aYKUEdYS2$-;CB!y~Ye3StdaKoyed8 zi>o{i9^y;X9D`;vK=~P?b>db1e#+3mTKt5mi%1!)gnHp^KS(3p3isRane`-7og@Nr zp5hyU0q-OKf(O_suO;zFd)woF;U|~}usE9i!VUrk4z002ZAzW`oLrxj0sa(lOzUW^ zEYDm)U?5t_1DQxR?m&{dLEND_b%+Kwg^g_>I%_ckr3#0~Be!Dl!-9|Oi^?Hr2|B!E zA$@cnmJA+U3~oA0RGtK4d=3Y&B4lLyh*Y3N_#ySa5coKD&6prr{c%xw3`Z59c7$<2 z_4iQw=+C${YjBnFgyK8E`XzFpJZ*1ov$p{&3`a| zVuqq>E_ra^QqfxHW)eO;P_m?YY{_C-vUqGsP?iM8mMoMd3&)m}%aZc3B`ajfim@fL zWy$Q!lCU2957zxivo)71{U0$UthhLOR9gIAW9HYnM6bvXX`#(=2BGNbyQ2b9|N+o?K-e zaYY=9A#bps7y!^+3D$=6gEUDZd@WWG|2P@TZOk=tywN4^P9S5f0V%A$gug5hQd-^;^A3P}f~4Ls zIHFo4bOZU^iWTBD zq+1bBy1?`Ms@) zB;W`LVt`?07Kng(H?rl|qfd=m;5~M)3EqBv4elYZA7S%$uo(sR`yjZ_xARp}b&~ln zGw{F}B<;0~I)gF4tHlEbVeEoYB$EMXVU(JKtS8C^Fm+|9rIntteI18er)=`i-sry; zXo8DcDgyhPe^2N0sH?Dm!^zFVAvSEZl)JlUb^2T(Bw|sqoaX7Li(r!Z&vH9lt7T0S zJRX6;gqw650|SiGgvS8{rql(@0@E$q2U-9+9B#d^N%$8uY5pat>HU_bN9|9o0RKc^ z7XFa!GBIVV#5`rmIW3C!k@=`+z$jeBe0`68**yRnBooq-*WM^NZ7%R;%Piz{JazUQ zxw4qtmmu2zDBHo}AwpLqS%>shNJ&SGoY7t6GvVVVB8-*dP&O`;nj+`{!q-pA(5taa z&4rDbWFz4-F(&YX91XJkok5&f#ywvJfq_<-GafNO`e5K}OIF#Lz=z-&9}aS~qr4z6 z47M?h?c0VeDg6+;M~>~iQ80Vs@cL;?6LerO(v_4F#^ZH#wk|^01OTb@lb|IbZ3yV- zn;1Qu@LYzpnx~lNOkry(4_(Yw4l0_fPcpk~*6o;{$(!C2; zFXtR7lyd}MJ8>c#qv%9MBo9&Kr3P5NZUV>>wAGpu*x%}cwFn9za5J#=K;nrgljQ}5h{EsnLkbvZD##e;+x;A2@qzZgMzHs> zOTikj*k|abJy5uLJpJ2bi(_Gw%drdPv^R*(dfUs;U8K&I;ecaHbcdfUEs+dQN}YnA z{>B|(2XuU`Aelp1u2bo;x$aXGibD#!j0LvE=2_aoby#Z(%+!!F@9aqhc(^8GxCs33|3Yko?~nQd>x1UP04ml8ZMte|zE>I@WNMJ4!S*7#bfxYx zYMAy1;5h#qSR`H5^eH!I1egl_kY;EjLmy3daXF7NXr;u?I)C#q!s;)Of~|qA|=GsEa*C*H0qM`sf*y6 zBrD74(`_Yqt#LSnUG-aO3Zy2Cu&YW>aX01pViG`r6Mj7T|A`$*ratFSCR+7 zDHOTvS2VE#KG$kvuZDerQ#Wj|e-b?CzBn3d3h5!u8F)K!1 z7OOZ|%slFG0Gw6^l^VvnA8(dEe!3+p%G68DDLNDQ20aMe%p=QjLelc&1=ZI8JRqGk zY<*IL06Rsd-cp4_V@`~H`5`7o>h3LARP*~moNy;FSIL%TV=n-}`UtWljG4a-({_Fu ze=)8ktXGgpTdThb0s)Q?my!GhdQ-RVQrQVo7~e&}b;wv}jfe7t74Q)>zyeHDb0iHp z$iHIlsl;!xV~(z)a8HXb@TZn6@h4Kwx=a70ANV=|E-kh1;;U(?UD=4oc1vw4EH#nk z>Pb6JfQ^>g{F#-u>JhTlWc`HuR^aTPW344yujKpSFt3E?QY`XotYstG3oZL+Y_FY# zz1B63y$07M*ax!lDrP|t++wO>^G!8uj;V%0&a<&*T56L`9n9Nt0aC_EW31H&*$1km zsasfw<8_N)(L^PzYWLNIwkOSi@WU1;00oDDdMZGuIfQ&`BP_;i8W3} zGX2gw06mFf*WjzXcLk@LyH?;iGy;vJC!`?I#@j)GK}I!%KswHx$7T)3lg`+ME=pG) z*J3plIf}K@QKr_5AhTVs(D|87Q(QHkjsDr?fxXQiQtmNz5TV;-O*?gOnw?tsXH0T@ zgB4TE2mVudH`7?X!8BIoL^Dilp7F(GTwv0N6Q0|e#Klco;i7WaeoXogG-rpJ=@=)q(^^0)#8-Y6HaUnG1evwVqkDE`7u~?haP=XXt z=1L|vk^G7Mxn-SmoJd(uaT-~N3ph$UpEFFlTloVv&JdM6FUk?Bd$wNAq(LWxN zF#-mPZyU*o2Zh4^ic(fRWZb-Bl!n#qJU67{nWmgg7llDQpB7lJgw*Fyua>Tvf;(vK zOmgPJ!=}D$wZ_wn=x$yln5cX3l(YCycilwGBC+SorrRLI@9EMVGAP6doXjsR8-liz zj7@|tm6S2rdGyE;j@}FZ6ZtaWMC_yLSQTgfya2S^x+kv)D~1O-znR4tEsE}twPh8P zEwYK|!G)zo=#FsnsC34eUtACz@A1V0j@V{(CdN)vuc9?!^#GQMNt?~b++R+X@Mq}W z?AK5cN47Cr%=Hb7U8<<)ACj(A6^s7!$qize6)HgeOrgsLn(aL}1i%{xr_c z`k$erTf_>xP!}gyW~05j`7nCN*$Koxyc_=>1?rQ(vOW1eo@^!P@kJ5O%sOZ*TZb}v zk*T`nEu8wyD}LKnx|~Y+_Fq-Sb1h%Dm(HVp=?+vr`SDCK5>~8PT%PKe5?Qo7-CpWS z^-Jf5w0s{h-)j47C?v99B8X=O>}C5<#@J@n-bqiY-@_^1?8W$(R?(Z?hi{a)W!3sF zY9+I&8rM}98_@N=Pu2bSmloKYy&2!khDcHMZoHKnQZ<$Txz%V$HwE=(--UmPoO`o% zd`oM188@VAe3g)TyU~#DDeKL4<6iXL1sqIF?9R{XwrKPAO z^4e*;>BSOS-YEXH;Cn4f^?!pPCYY5_)qLWwNJW)>iK1p;DlFb35S8)~+~D}J!}#H( zAA5`+3iVqK%f|Taqe9*I;ieysO_DnN_*4t|NB&(jxAJ%Cs$XIeL3M_#6yH;gb)_E9 zHrkedGxe<6cvk$a)U#X7XKPZ=R+(Lv%jvI`zvYj1^9N{uGrpU$X67?}Qr1jPI)du6 zW)~jlV(A=2@?QmP#KGz|-bONu-$pVE@ov1SWR^WIINo|4mt7~zu1hbQ&1DoPN4wef zG6)9n)NK7*VWj8b=qEr0*1^mS<4b?RED{53+NNb7d`2v|4sC5Y2{=JKJN=3M1hKIm zOdNG^es~sy!kF{JqKf)N>2>3mQvWEOJzgpMLoD`7{2S-bL3k;DX;?kZJFy4L1h1#J zBEZaq`w*^N)q$$D`ZITv00mQyPDymobJA-27%U2m1a1gNa@ z+ZS!62swtShns}F*2kzd6k!}eiheFky44V#p#S4kU}%CqGzx1~<;Y{gQ*1`2xI$xJ zrfSlN`T8=wmT9LSS)QvpmQUkJ`wg%}-k5^RP(>ELD@dmbxp8^56lGWs#Rm`%(OPf~ zjDj}EQ$nT!Iv^#MeOg*<2$2r2I*N|hS7>Vgc{uV^k!)lOz^@gI~}mHRoVMN^t@FIf>x|Dm1+><0&n#Qw6JQx_C<8mybg^ zm805ha**+P{}yy70dLc0cR`vvoR!7M)LTR=Z9%f-rO=`_H58udDe$(RLNSHx^*eDM zo`H0lrke`{6tR&rJxcTf@g@C9@)A3=3Hqb>qRl?jd{gl4 z6wdfKkmXB2&gQTL?rZUOQ2M9k_dfLx^b4a7zQNe@2^ZAq=~i51F$;PKJPb`#H7FnvG7gxf-)E3EmI9bTC5u2A3JW1uq7wwh|}@ zZ&WFJUVmdT?`U9+8%aHR$7s2DxqzxX%pmhI-LcJ(he#d>N%o3Zj6u`3AOn)%lFD+} zNwyOw$azMi1ClYwaIwYkK(AmO$RYBJ>X{-q3$e26YDI9aC@&|!9fd|e#}F=*^bIfX zNJJ`!`5sJ643~9+HgHuWQf3xn=H#mB(Qq|U6|P|O<8(TmK(8v+s!Ft~8HuG%t!kE5 zb)8l<7u+h)*P4@PU0Bxn;Xi@+M~n#~c{e4~FuxEKYNWeJ{sF{CqQre8MC7SP0I6rCDsFpJ*GW!Y)8f{n%twC+bg5 z0ubj@_y;do!l;x4y(sW;^Dhub#w&{!zO)c8W~!TQoDA`33+DDNC?}j5oB{9T9d%@O zdE5V<(1z|~6W?Lg7Pz!ekWX^7}gO(BKs&P*@5W=MR(#szg|l-!KK#v zK3*2Av*@(c!S7ooZWyN6;BDewPo4g14Fdo*FAkd7*ilqW*=&Qe08AVRSb$I5deEpX zxNapZ7ZOR9vvej}0NO@4Ia82WX`T{=;6TH+0p6g%wfL62@-_UMwtu+1DL!vDM?x-C zA4lh@NC-W}En)o3&DaD;Bd~nMRw_ZS*=+fxP<~f-xucDpE)jJXngMOLGurTLQQ&UC zrrBb4@HXe_>;muP>dQ_=ZWwVMEh z)|nlqCu7?tXE6~QYljx%%iQ;ICV9R&EVqFc^oz8f*CAe{G62FOuP0#aBUk-fq$^Pt zjO0!}z8|dHp`^#zD4~MlY-eoJ^q^cF*P=z@VSn17>-6W+7Oz>SO zMmE^F33f7{)KeXsB)v->$a$GcY5qiG*D+ZI`>qNGeOE6AVbrhzETt1E-MaH5`_9PvUZZKKQ(*Owv?;-f&;V!DaBUb4a_r;!niABip$W{Q zM$*X`{jA8Nd4=iSQikJ)95z21qYm@H7CMrBK$#`}DL{B7iGCAk4^1Ucrv0z+z~a!qgU4h2Pph5!#pBecJDMH((y>hl9=K%$w-F-3 zr#hg+;`$raF@-!+ejp!TDNZko^X^{wg=A1y5Vn)+xJ1UYYEZK5+K-pi>c2&Njf-Nx z0khfbo<&--4OF}d^Rn^!R4>1dD0({`4{M87kQb>fdc`~p-X^mJx2~bBR@6Nbqy`c} z#PRbiwHeP-BCbc|@$)I_7CbkURG?Oms3?f9^FxP~#le_QohfS=a<@lami{}j@n|yn z<@M(V050!C^8q#Q^V)MAu>MOD&G@ipaO^xYaBNPSfw_>Gc$^}))It{H`FIOa$M5Fh z^K|pBjNh@n=(l=QgmKiz>(C@fNizy&J5r7~6SU&vF3p%k9&OBKZ3j z{x;z6f8g(V{QVMt|A{|8>deI7Lj3(2zwgDTBkwQrpEJwl&YqB?Oq`Va7a1?l1BxJe zo+KuQ;eh@E<@BKz|kOrJrJY> zbr2*mD~qe7IG5~EdXDq`s9LrUl>=Qd7Y?c7uBVOF9=zTQhf{IUlQlfem!0EuPaxi( zTLAtA?^1!?T!BDXC`Sf+LjCy3&h9?lw$iOXS>=S<@szUf9lR{pZ6Z7F-7o~Rs-E%6R8y8a` z1EhDtYj}!I8ZnS8{0B_H8C?^RMalfd60y)Xq`kM}0SGivL@5BtBcyMy#&4-WLXHO0 z>n@=(u0^q}t%U@6MfH8p&cn(mIgVO%1SoVu#BO~7$JghjBXzA3qmlNib20K$-gDy?|F(nko z?Gqlg=+s0_K}f#@HwF+!Rvr)R^|n8Vtv%C2Z(qruTT8CXlcJ@7d~1I3MSbp9Ft$&d zs+Zx5HmmFmxtsElxhOqr+9Eet7kSobtvGI57zC%qOnr%1ryifn6Q%bn4ZzmNHYNu@ zllcA`d?NgROwxh zqRpb{<9qH{o~Stq*v`g6(5*jJ2BoSAU*2#vq$SN zq7#tbNRT$t&%uQZ92>Wxs-v!PrWKRU52n>X9K&k1nu^=j$_n!tUicv zz(-%#kNh(s16#_3-IZ8v1q@M4m?P=n33MmfRQ0D2^XghaO??>u=-c0?W=NI*cd$8^ zjf=P03y@L<027k0L-c;?1R3PXe3g-fP6ZP`yb5v!RLyr6@ym`!P$h~g=}&IQ6S~)> zr~qHcg>wBWdNPlsQ+!V$;TPD!DBPy%lbB@k4L-(0PEKp2EINmji|FVMBM_Hb(?BZJuZy3*?~ECH=@1iS-%;N_+GKK2e8cKUMR>2V5& z&6dOC6ap@?+i|Y80kdLwroRsk0EG7uFNDLbm0HVjtwq;bj%h6eTFXhTNF&$R`v&R&>DR27%nP25DeAf>O|W0{1QS6*x$v0 zv(aKs@F8?I_AC=)krY%2R!ZluuV0K|aB9~D1QL}4*0+=9H@q!uCB4vcx&8_~plK>9 z@5hW(Fpqu7c>5xBWuI~O5qF9pAO$~|y9!^s-gATE^Xn0_IR;h@qA!$=ZMq-r0Er|% z1MpYIK(Kx5^smF)i#sieB=;d8hSvnv9~*>6_ZYShF2ks&*G2k@_Mn0^BwROCc63g| zkoS?l<=yop?)H>+kz}kqIXD53Lr=mz3q6JAG#qPPEN(y+EcgwRz4Tsq+jVY=dyF1* zB8B{Zd07y-9`$s(kGJUXSkmpAB6b{Cao`>-Y7#W>7a}dFy&uK#%3+^)2lw4$A^}Y9 z;d>zt5FpcE!JSNeH$i;FeSbCwsr0jmdf@I3*BLR2zr8?Y{UklwD~{<$=?eg=ldF{8 zc|@+#Y4iyfD!JG}MQsf>53A=NmK&0iS3S^bJ1QUGKvkI)3rx2(mgqt6#uj5hxBLgA32} zWZ^ZNTmX?|*iBS&l_g*37w*L=f#On&tfnXu9a!xcA>K!U6WnWs?9eMkYyi6u|B?eE zO@MVY8CS#EVma}>zNN8u!PM-?`0qDcSPy)coq z#{20g>XqI?jfS!ht4mHVjNG9Ns z9M4++md9}++z8d41CHIq)Il`GuYkCjYr_YqixW~Y0id<|ha&{b@%o4P?t#er*$r$C`b2p%cAO6Ufj>dFMI>t;quA%i;1>?_ zo8kS(X;W>8!VM`_o$82TCg~j!(gkw33q)HRcyg*D2JF_uX5mIE1eO}Tr0iRDdj@72 zS}oHbCC^y+1{8Iwoisf|-V^G*42^=5tijzW)D|ryRb&+V$iWFZr=H5@UjRR}NoQXg zkIrx>61FsiH=^Nc?x#s7!qwb;5+a7dW2AEH2XMa}h8wos;)b@yHGw$4JqpTq9i&(B zNh-p6cz?`I_@q0d9pAV6A~>-LmnLFYD6%Oxlkti3j{gk#(D^suk3QLHidIeOfb3et z(Ir>4$U*k+i97Ie6?4C7{;b{EqK?LU;K$?tB^WS`|MP%b=@sC3Q4#)yJ`Io9TvRhu z%6V=etGHf9f7m7v1JU^+pI;b`8%X#bqeRfj=Npvr_IObtf!ze-g*~i ztTzf3VH5`_Ys-ipQ^&%BawF1NaS%yNBZ2OgOQ9u6qglNR^?=J3-q9At*LfUpubBtN z+vJe43f{s^Rl@Yz13%tuVHa$Sgo)6M;GB>WTPg!=M$9XUw2To-(AV#*hV}teFy0v- z)(hZR!UGNOIH&8GMzxz|ryw}vj&1H&RKU2%UnWHhR%#@W$TFm0RKRwlNS78IJ0}aI zlAjnMG`bu@eK`Z3mO29sW?nT$3$i(`b~2p!#u_?HF@u&POWJUg8o!5|v=3aHpRQ7y zXOS`^Z|3be*3?Y=x83i&mGZQKzes(j7~v{rvSi+0lyoHS7`ChncZF2w;2I5N--S8H zzJj|6MXw$6@Xl)eo7JRjN7O#7C9JSK$28 zL!J00JUg(C89)?m;lFxt8qgi!8qLS$0k@TmVw84bzP=1q@QNQA}0t5?6i~Eq$X(aLi5h?gT zhtfd0^|{wz@IKtQfYTA5H_w@D#vHI70~U-dwuB2S1Bng_N53pwSlpH3re@bZ`d^?A zx8`_VHNHR}_~^GixJ8hB#)DT8SFLDvb<+Rv5SFMza}DMhw+!~ejfPuEbLd}6`?{$a zmwn5NG^g1w(!{K3{_u_cf@*f_4_-}d+S~p-{p3@8^y^vt(r-r*EOIcB>rA)2N=pMV zSWEMETup|y%~fYDPrhjSr4sa8quWmb#x7>VO5Z|7xWlv@uh75^j>7=6JZ}2XxNWv! zX#K9SZEy)BT@8u1zSJNRfsDu@ZHW)bZDCw2l#``p8ASpkHSelK${dj>HO@xt1IKTx#z9u0zx{W-zI=X2ezL({Ph6 z_bmIZ@u95iU7xED5vcL&P^TgX0IBiaxsL(T=gLKG0Hog6b;9TBrx9uj#FWx{9sxI4 z+eS!U`3z##Kb}_P0cbblJ25DdXMBDTU6A7BT7ulfloGJ2#ZDP;i$l*w$|j-=)jr&U z7=#(<$IEw!3{mUXw?4_%78)_9 zl>b=s0X*9KT{ zA72lV4LI(`Eoc!YsiDx!X}(w?6!AVR&W{%dbe;2ENt*+NE5K#3^KqM)`YbcKb{4;W zGy_C%!=u`7d+d{Np#Jh624lsG?=T#U^6Ti_?=WlBw2CVs26hm824BOq6Lz}+*UKvi z6Lr!6rl2~FAyRgd+&~*RdH#RN@$8GkJGY{<(^vO7tga2K7axh?>Akc2P{Boi?$e>n19?%s_#c12lww!FJ5N5^|^+h9pg zn|yQ^lz0WW3ACKNL%FJJQ{Ppu96qtB@9;<7-TOgIhQq>sR|IuqUr#?L?ITw5=dI`Y z@z(SFC$8uD|AO`W#{2xAxt`6^qncU|c%bOU_7KHmdlq7QIGM5O$Z@e>ZcLM_v#GjC z^fw(j(RB9k^vcnu=@+56DYxIdv%5)~VBaLREWA5WXPoE89@*jR$ea)3%Rx%B@$Sr# zdsluFBMgQY2gPvL$4ZmyaMR6Q$CdT(0c{+)!%d>wnCX$@)9Xihp8ZYJhnsT$;N7`* z&`t9ZeO>1iYV$6)>1)!w_Icagri4HB9ug7zF@dmmCj|F33#KpH+ZiHjlzHjS7&_I^`Ww?asD_62EYj#FE?A)YYkc0xB^^{n`8V zJKC?E=h-iuAjW<*b#*D9wnws?^gS|A+nkTZ4~u0CA_bpJemKX@4<$^9C5mn!@{!|5 zPJkokNMm5omkph@M_az2)xD?bCA8=#Vu-J2WkQjde9~Q1XN+yNa0{ zMPKPb@P)o3AEl8@S_gz5AZFZ{B@W4@VMg8J5Y6ZutxnEJQfY2CcF2?4WexNq4|GWE z$3S3-M@FEUq-c`{;{NG%9NQtqrTmUwOS%>rGW(KE+9dl5p{UfrAJn8d)1Rg^FgaiE z&vCO@{*$uHvHD`hcr!5`9U0u~%;*+#*qbF&Ev%QXrG{cS8RPB#gz+qV?&L724WItP z_+0*JtgnGv*}JXVnJ9F`2c7X>ImAIJuSJixtfWv|T;kCelj|8@DDz2y6^iH6mzDU> zzCL}{**B)Ib&H z#kxM6Ie!d|p$bfMQA7XaN5J8U-FKIr$^AI(p(B~wo%=C>un;Tj^KO5|S9VxxDgE@Q zY~T9-z+95KZ+f>MQM}vED$pN*psd)uXXp^QABq(v1-XBKrjvV)V9Fho9VWODTyZ-6 z?J5cFv;9Eg;pry0OBl+<`p;2pLAe-EE)lO|ailVdcf8w<_{#P%`^bI8yRC~?^t!d8 zqZto*MO2RrAKcH_>)pN=X$|Y&<8^#UAYT7I>tR#^^$Z3IEj9ObHnXq@R5f+AvSjY- zxyWEsa$g1L4r(}a;2wYDK~J>ba5*^pc?dN=26zhlZcO(r%l3FWR=f{BKcD5Fw2QCISd;p^pDsb)_5+1pG z%aYI>0fsjWrSbJNow4ZWyvlRvmR9*{=|Npzh*iF-J2O`~j=D?wq)9Ipz0W{a(4Rx^ zZ5Zd%=zRsv<3=ZztV#HLQJg!H`vpi9GH%jio+#{Nz12dgfB!!vP}jxu4@BZK-290Ihcjfq63Vo&`kSsvmhP+xJ7Z zEq`_Do#SWrEPTLc-l`e3QuoYEfXtm4FMovlCzCjcpwk;d7Ld&NGu@wI?ADtNqi=FH%$wN?_RO5h*bM`HAa7&J*f9ZbmULQ;@+RI3 zp1v(I{__8AJj~0s?x(GFzdd#i7V+VWoDZ*m<9XIk^QBChD@}0Y7>Ah&jW13$DR<;@2o`DhJ zJF#+aG7NBIJ@lr+jGG|kq>T9l-QwnDXS=`#mFT4+k5i90-zh}&`!MS%6!j}@=;2zv z*kx(SY1SO7}rQ`Dh=GUpJbI0j3bAB7se?7s>Vm)aPMmp$E}v)j?h+5Q+#fPBkG}RYERRN zdO9Gux8;vPqXD9UV_!;O9FeolhVh5@69M>&W#oB0^m}=D?{Ztl8DfJHs1)SG@Ug4u z&<~&D!@B})Ikf~FNWX`r{o zS&rmd1T1kshTKwGLK?sTuMhA{tOL(N&@P<*zt7WeORPW2XGFTA3F88<>#2I|Qx1Tx_z*~zVPG?;Yt2(@AmBY(~u z%11-(Zz-xk%oR(}d-fxZj<5m{v=F29L@jP1=ft%s3=|6|p+oRGCB7TCC*eSwB3~KH zk!(8=5Q!#&er*bsNR-FTp82V)!CDGzR?G1*>6vDISsU*)zf{zwlB1utQz>43i*#}$ z%v-N$S;jit);dxk!hC^GikN^gX0N8V=ag^~xtI_{j<&hf0d#LIRlZr*+CS{Co#mx( zx8!%`P1T(P=qUX{ zSbL`#n{T!^_kSuVs~1Z(D9b`eWcu?h@4)IytjwcZpR{Kl5lU0aGo>y-HK7Z>b+7?o zZMIBUfW*6YoTL zIWU9Xa?i^+BejJpwReKg*C?ANisX%5QSYXzg81G7E~`tFg~K(e+4B#_2K%C2{>iz8oW?Uj^K>YFjBy1@ESUdN%w=@gp)h2 zcQ6E!+5RUH!3Cx71inJ=3%zf$x)$)q+mfZGK+Jjb$Gy{v#{0V%Bhep~;ou%mW+dKb-eWI}fMD z@S0&dJ#iu49?uYrO%zW3f=gi&>=Bc1LRuMKkbVE>A?d{uT!A2}{I~`I=ULRvn4o^u z1$3OX02!Cau*1uEsxJamuskGwSkJCAo{b%!HtU?YA17vzz6NFgG^ma;^z_Go9ds7v z7+&C17ecZt&cyx*YY`D-sEy!efZ96H%^~m3DqJW~K$_RZ^c-olC&|snQ~9@iV=5zA zT>55O>5r^Z7ni=3R=VCQbw~5!BOYKAPPk@?TDN_KK(M zX!>|%9`wcs6f(b_1=3Z=`&{K>s<=R#KxosAR~p_FdrxvTt2^cwc>lN)Zw1{qI5Cce ztnuz#>f7}KK!Mn^cAv9J&UpD>?ga>HhGcQ;F*)b^Xqr@ca>7I7$z$E_dxy9Y|Ji z?ZY)e$XJ!4VH&@JAa5bM#XTl{@y@~}u`?R~=A4ZbIFLUiYdu3BlK*d|uRvcPzmLfL zg#!oxKBTp5kbWKk$3OAH_Z)D$MRdw1FR0^vw=x!mmpfEk!Z34DvlB*AR z=EfZsQ@uNHb~gpO?#~ik*svztVnN-+UZ8R@x%#HuuCl}B-p9MO3Gfo)-jzmncBl9_ z;1|*me8sB)wFu8I;?{5j#8N+UVCN{Yi-P)X=2W5+xiJwFE{SN0uf>^2x+jphQk`gY zhsFK4O&zMt1Y;4GnJr_bVzQV5j&^f=zbmoW=LCk`f&pSUqB|;H)gnIq86;~+@BB(0 z#W3}0f9d{NkI3(YXd+!ED8BPJMuZNGWM3E+>n6ywHQa)@fwG3R4U|EwZRo_msf8MQ zCN@x8`L5uLwB7V0(^e20w&7`@H;QulHnyCyX=OQm8(Y5JDyMH_%ju#Q*`B^-mLp7& zviPumT608S09XoMpWyQ)bo%3wPBahU%MUi=3*Mo?ccPn00{A@V!+@iGsJp3ooT`cI z>39mAHW37^5WYOti7#czTJ5F(hq?CwkE*!($2ZwcvcQJBNWdUOqZ0o`EjEC}B^V3| zp(Pj$Bt+y-D`JeaQn-t>LfCkBH8+>5w3VuTr9zRuw(`EEtx^0FOb8~RQ~^>M5ig zDLsIckc^x%?%yAs>OcY57+R5Ikb|m>03{7{2I1P)j^ATmh_j}$j&WG}Ujd789PSU$ zrkaLPvz#p_V|}+B#H6Jl-3D+|XP_=xR^@(@?v0Fim4|pzNIAfGG47HNikS<{IRwd8 z#ReGGf+|Rq$&u(gpqOWYf9QL2aEbhz9w?HFxQuB(_L$I$VA9QP=;5szi%h_A<$WyP zg-Syl8v4*@XQ$B=b}y~xBzj8lE`-+Bxac6h5=y~`R+H&a%djSOLg(u&FHXvXzF6Vj zCcMl(upDJW8*#H=7(h@$KL?K15G6E=vWvS$Fr>}400O;ltnNKtU$1@lyxgN#kmVj^ zsZXa_1aj4H#S9ytbn=%Pb9uUsp&iO%r;izUJ%mf=W(yx5FmdThsMN_j@Scc;S=`*7 z@HWz~0%W%U>3CI}eYPZH^WtkIL1QQKF-XUq#)lfr#YO=w1j_hkN?!s4kp$$#FM%9_ zG~*~XP_<)RnnN)4ni0zi(_Ly=vBroOZjbKrs>u@T_?BqftmZi~ZsrVZjOQ3n@u%4R z3--SG@(t`};5Z;R#UqOO1YR&#ff6RP#3!jGK8@q@F#Ff9fvMwBt*B7D4Yd_zqIo#P z>wI+5OE-73nNV@9sUY%0P+)w#@}l`RCg;#}fH9RA+yDbFwplw#AMJQCiI8%dNU)<9 zz6#YF(CLya2RqyW+k+-lRR!{tS?_lp8Qs)%q-r&N>4i-&mhp^y-D~%9OzqS4wR<3W zS_rwwPHue=vFwMD9O#9ROD5Q|Qv8Me?l0Xquw6!%zE#_iK1gUcH>sA1Dp_hc0sDAH zuE=QCjkDI7QTf|p!~^R&CmwcfyK&BuZ0#H%l?(He9gePtpGPIoJWCy1)q{xP9QYa! zGh6532z}0rA&J&q>`UOr!;<@|$uh*y0`L_-rPNuG`mgY*t=;QTLYwhs6s&>LBrK*R z94`2@6&{8^?Eis-C-EVQms0V)RDYE8OBp{VrtF+c$~H{bM&kP5WAf6bOSkh@g6|{1 zFc`Gtl$mA{9ByEhibNF0&?vw#2vOs4a%rtVie#6dY%-K8tZ;9n!dP%Br->0T$84fh z7$ej&;S6l`!o$GCM(#X_%t9QPt|=9|!Xr*w;a(&H0^rio5N+)q$1C2SVq{5rrSt)4 zd}v6lw4Sgd} zlI8mdTHTSkS$GWU0|eOq2e(zFAuq@_^Pfn|>_jziQuJKe4=(f=C2_-Lco1i%7HeN@YCGF4=AxO_F zWTo9$To>*%OI{T__9DHt2cQ9rF79_k3J@u0-))%3>sV_+J$}jluZ+K(;$xE(lHE*S z;b9myE84A;^)+Y2zS%bX^EU2P%Oc$jX7OR=C%dkEOe>@RYJX z6E_kJKU?sGE;S?|E9QPGGk1$uj(~Qs04SDB0wlDf$=(9}9g^#5uMss-m)PHT#4*PK zBPjJD+qUEEsxe3sxZ8UfeUXg0qTim!JlVc%IBH*SQ|Zs!zKABc1qf@Iv232{mksm~ zSun?EQVMbES>kdh0F3)_fwqGDSR-a?#$9X#we$N;R$`D_#(_N0HrRg<@O`98HQjM@ zi#P=49>xq4wQo*Kww~x-gl=m;nNX8Ena{7-c^yc-|DO?20{i z@?&F?Rt0WrF5Nzak=Q}n=|or_EAcx2oDDGO2TOPO$sbL5aG zz5iiU)4d$yix*Z_dghNvoB$o!w{IrIFss+RW}#?9x47D~nV!SXmp`C8@oYRmX0S zU9yH@Wzi{bD{D2oD!a?srJWlqtBTzv>@H@PwrhYDyQS^is< zE_U7Qdf4@{o5pTByJOhRWOppPSFt;e-SO;BVs|pT`Rq<(x0v0T?3S`ShuwMX-ofr- zc9*bQ#jeWkYIfJK8(=rcZXLUaxh@{#_b1qWirvlZKEv*_>~3dw2fNR+yOZ5l*==HX z54(He`cjuSW6vP*WJ~zhP$_O$U?1A?%(9A{qt&pES!qIr-h%d%&*d)g_(zDRFv)Fm zK-BCIO_yQp*=t2gFtR}v?Xhy)!^X^ylpL0U>zIY@rEP^I^IM1e-?vbV|4yT+iq|SR zW^}B^W!d(+^a#V1iJKsasjLL=STuiM3*%st85X}6DOrBEc#1OH9P1@5I?;iMD75H{`r?)F))LEk#86f433N< zwV+6qm9adf=coNWv4D`}|1FoF>@Cak#{v#T1Nv65AW#LZ%fR7jg9Nu;oUOjzRc>Fm z^5ABS6Sb!UsErk4w7gfLqye&=igN8!Mf*hY^)6iGPYQ2GS-beMzCW!woT&Z92~D*t zu0FX9yCOUOg8h=VmoaH{Xkph1kJj#V?!}CC4;geDYc?Tx1D@09c^G~Uyo|-~@`Lrs zbt&~l33byG>WdPQY~A!kt<|ZuapL=9iNoGh43?oFS54H~5($N0#Gp1v7_Bvd5Nu1J z(7ISC()ds0`51od@eAU&20s@i(59dS52oZV4sSXAh}_#MViP}+s=g^TvJY@iayzsu6wKESabML>=y ztf}76W3I{VvFl)LUmc`=adKM^@|}4MxmaC)0Hu3Az9@riblG)sTGmN6)k!IW071YT z7UMmL-*)`!i=3AqtefuC{>Ich!PNV0T+)P_4bxXwe@oO(a4pouL2ihHLkUnqyUzaR z)J{;%Di4-}1H{EZ+72M(#?OmiI)0h>U4`E`{0i^`t;c}YWAIGJGab(~Jk#*>;_1cH zgQo{iH=b@hU3j|s*Nvpn9Y}8peky)-lyvm;U%$HR>uUUF z-eS#fv2`nwJU6GQe%e@AyE#IquIG$(ckQO`qK>E^tnE&?=}qCkWlL%lSL2p9eO1AaRnAh z2mE`$Hz9sCZt1zHMV*Mf-4i!`tX>&BrhbaEuJ9TGuMgmr46nnHpDbJ?alQo|9;n~) zg?#kT1M=QEI1D>;tP2Vw?vZ7|zVOJ}GXZ3^VrZ0WB!wRb>%q>VcE+{hhOR$oe|D;# z?1ObF)E&bK{!UzdZFf7H>EXrW4e${(4mJ7Yb4Ylwg!_!(K&(YAaG{l%m>Vi3XP?jY zdq)$N{==tgr>|S_xmo;I?ewtwhgPS~0}FKh-i5FQElH#$yn1M*Z|~@)%bTI*azTq2 z2VM`^Nb=4qjA||LYY`byuVvE9Bl9U2e?fEz(`V~$w$xDx^}(;gOCN_#21Z5v<#J9f zsoH~l#nTdAhuq5spnVK1g9nS>jfO4Rk@F%$#19Av#?RzFIu%Gf)i0H0U!KZ$VyR3& zCl!pz+Fk9Ais+z>5xLNd5qU5m?GgEUM5hsXHRkz@**c;(9;`8XLU2+FRi&cKL!+CQ^f{|zFnF)V+0^z{=zB?}F&>(G z)(+;uyN$RW(+$bQ56_d4Rp0Q8`h|Mv)*=tp)19Iltq5vIjN)b3`zx-}As8O&OYPW; z%D=!!eYO>QD#gqFDWU`Fe6Ujp{SZkzUPmA-8@T(z-D22Pl#UC&o%zcX{b^e9@WBl=@4^?_=O$X&h2RN2{j|J zab8;G#K=j*_Md?VHb-DHe z+xllOn*cFD!r-Ip&f5ei_^WUj&;$rPip7^Sf&CEipF;#Up)lV@VPGA&zY2kYO#uAz zE9(GC6VJ^aoy09Zxc2-_!29oHkJwvb`2!q>g3OsbAIuQ`8%$owh<2DZn{X!iYhLhV{Nbrsq~vPWHTGOc}`{b4VVa)DZ9B}Npt zw${B!1$)V9%8!A##eEe1Wx>3}tU;ImvJ{jT=zQ&O34+oH#Ai_rds|OI?bn1Nj0U)* ziGxHxz;!mBIA8%Co&>szccJ4FF;m2G1VqB(0X(3W9g>NyO<079!_yp&tysiyN$mEvK1RHY?i(vu*L=koC10mH#T4+fKRYXZlaApVY+BPNmfT&ow)FiDp(SQAxHFNnyhPwiX+z;?>#xZOU z`~;RPX85@ z-bpkML~>qA+a|{x>aZwqEdQv<5on>uO5`{WPYr_cS7SQSB+euWcDk-ZLG5YDT2BJ% z?I8f6qtTjvu16dPDwPXB7@ls`9>2sgdODOZHK#b{fHy{ zNZrqmjA!|g^b9|;HuK}Ur|@{{(WC=-7=@0ld-&7ftsic`zf{N0F&Ml_X(fZ<@o zSa?N& z?CYUv{r54g*G^mNXzg?_roYWv`z55rB&oSQ+3DK2*^`kGN!sby2NTWtu1qzpIWp}is=F_qrnKsn!&it_fCG; z)hW&0u1Y<$9x;5)%EOt61NqfT$LI{rB(j0Fb$I9vOt%K6X9H8RfhpWTlnjT_$&rU9 zGSzQr!l_Qwgj>xjE>=h2O9{P!V9g|WcX(Iq-4*_A>^&j;3%u7d4E53Q%C2bp>WQe=02eFclc%m=?#LQ z#@oqW(LY%Vqhv>Lvh-zz2XTV*9-knm@;5gjH$$BpI8&ug3!GV|rU%a4uY}%%zbuaf zZ{aoq^DXm_EU-PXw_i^U%e$?lR@kmr?QROifHxy=XdP@pBg!E1~C-K)T(TZJ|13 zh8Pan?!)DX*A=4Tjswn0=w}Fuqxhrv>L`|Bx+fc>E+!jKOf*Le%yNq40jdXadx`46^~?y)L^MI&%?3_(u?EaH{9Y zNFArVIGt?EqA+IY6cQ{oL)67f#h-X=AU$E1w1ueqQC5-R_0xOm7_g1u$Wunt8LRLb z$_}DHyQ?6&58L!O>o#5%lA5FPnnO3K3~Jhw*}D&R#}(y9M3*%mz80@rR>w+RD!wxl ztS&qP-dgu^2%u6n)JeV-Eg6m;q2x(Y~A zNaTTvLtSRq4AO}#)7mVV zbD4dt^|XbE0VE^QNVR`h;LP3rJEa%bQ$;QZ*CgxwtZgLVtpKjcGdO|T)&&487av2O zP|utke3;leonDi5sW(u5#t|s%=R_zv(49c@dSI-F0u(&GM-K(@V)s;w88*1F#o5UA zTxxMrCdYuStqDio#5C_c7{Y3#4g~G#wV#3_4mCq#L?Jb^lPj|(9J667D+7(x^Y8Yj zqeH|2wD$q{uJaGG>l38|Hz2x|g~@)MECW@!ZqgVXxkeK!mEd>5CeTfS^Du|u(c%@V z6z(r=JeFUH7lwf`yESwe3684^z03K~_=HMxgogqKb&Uv0D2>u@ zb9FXns_Bv_oz0k5DX&fMA%%z2d!EE(X?hQNI-kTCd8iNQqR^prBiFb>O)I@!M~1)G z^~b&v+I?yRP(Fhb(YQ$0zj<(5xJYBJ+{I0)f4eYRhP3&UFXbWC^q(}io-Jljp{8}o z6b$1z+|!@Dt+b*{Tuoe|d7QpUHVxy9b~?8v*~t{G8#*h}XcnH#ZY{F$qNdA{^#-a4 z_1kD%DaKoY+;M7!#T>w3w>4p0e&psEOW~h_yEC}^ax$CQ$-(Z(Rm}bR_<-bok(3#M zNe(qBAF%(BurepDk$4pdP8Tm^cO#lkKs~@i9VF}Oy2wSH%?Z)3?1-ncIZ+)Z!@%mP z28ncX6wl@&WV5gAgPqMDe-_mHXT%RMJ2Gz-2T1E#BQXb9JPTRt{$w#}jmF2|Wo+W{ ziW>{qEJ2BGM3Ak^U0JDKFJE0qypaeT86`(I%yGxvDpn3i{9~<=h5%qm99#9{^xyXk zCbS-U0zS%%$(BhkrPawMSr`m$pbu=Tio_YH#yzC^U}7%&s@Gc$6xt6{j>Blq=Bz0# zELi=&h+MAmbkKs;GcFoBI90G+sLKJ3^#IesvF7V`q13DGLY+gkpOWsfc&cfQJ1Hx5 zxYa-}V&7FjcN_av8a%P6ch>PV0NY!`4U^^zvd`8Z2(N(A(eq54C8NgOH8N*6U-W)t zS=g#g?S_i*&Wkc8JDC2H~MOP48KY&QXUOvcGcfVzUyFxo_sVQY* zB?&aNZL~;sRL?X+$M8buT({sngvo1Xxg0h_2gVIGh8{x-gpE-`X=Hj(WM17 z$ffHycJsqL&JUh!E?v*lfTioVHL>S^QR{!|Q6B4zLYG@J0fL{RH|GZTP?r6=a6x(&Ghq#9=XnvB>O?h0JO} zxE`>aYu^?fWLM_eV<(?mlv_xrW|n>&Th9?N7H=R;A?aH_R*o?Y2WM!zjke#;cWmZ< ztOn6b<*}K8dv6IRsFQ(;HnEWq3DsGmNlP|FwA(ANqs_xZ5;uJ=&h#wGolEGoVI$OD zZbqn}gdPp8gb*w^@);f^Y3~e{>T?BR^Pxg-ELRVU@~ezfI0Iq!%NJ=#d}QGA0fBbJ z#j{3dh&cnoq7gap#(sh4KcbZ8PZy`5P24U`hAd4O1ET|aCrCg9BhRCJCsF7_ePEsF z04Q|i-q@aKH}*u=Vo!7o(;z*zCz@vOiORz3g=xN%>I7fQn#*Wg)IQNP3~?YfB#l=r z4Z%^%!nBBz)0Dg5Slt~{EM*gP*Ck@BJx06u%~DCEQCwD7GyA?1h{eR%{mvvw$P?T$ z2SC!PZ4~iDdyEppWf5^9op-FI_~rgou|Eb9xgoxXlvmySZB&TteVlr0GN#kL{^8z^+E=TG>U zbQuKKNAadlij*4Z6*l01Nx;@=Q=p#((4#;-Sp5~hvEyWk|D-tS5g6J1{%D&FUhyM% zwmFy#FJMUtGT>NlUrkYWh&y3+T2@mmykC`b^S(l&@zqt%kUd1VJ$+SPVYEV^g5^o5 zncDe5?a%9)KTA>XiX_YX_e+)glJT46g;SmhXW_V|%DNQ%ZiUyn3V5ws1h4y+=EM1J zDV$Y{;nXZgz}@g$cOU%L-4DNY>z11@1dxmQ8oA%_Z^e>s2BeUm(P@zj%8CapV0oSz~WXjo&HEQM(P)ut6b(f+{8Xf5-O)Uhz>#(O`qZKnnz}TUdBY(k$oWh zjoHTTD8R_N3mKqU^h=`Hf3h+>!~&~^y@YfcQs_h*4#F%|PBhIfBM~X+;$LU%*8Z}t zS)`~p+Q)QIk_7ywddbNoXB;_H)~Qt1sZ`df%T1k1S?oW6!rcfp`NE|te5C=Q3FZuM zvA_0PqUW;+0>nNQZN@t| z2ZOMLso(IQX^v1Fq~!Xhzx(zuojX9g;lUA?mC{fkoK~=hI=3|;NINkjyzsUT&^d-J zw9P`}Wqc6bQ}K_+dMP&K8XYkJ58`61hz_4LN?852X%_5u%VbGBI1)>=+b<1Xw6xvTPNr{+rRNmiwm6T%M4)bDO9y2CLaz)RiOTbi!d zr0F%wTOZmB0vEJCL>6!g+KQ^`kaTsb=tWAEw3lP8s=~zuBoN)7!uAz*gT#jffPF29 zi1ngnsAKmQIx>QHYt=I0f@HKZ8UyMB9OA=ku%Ci#fd`WR?@~c>WRm-nC@~E09lS=Xcxt0@^s5Xq6 zD%{e$2u0{Y5kPgN)}k6yY0Hj)qcpFOwR9szgdZ=WYL+4HqQ>^+;qTq$9CJKrayUFl_~j4A6o40$1OOZ^NsF-aX=D`A*Zp=vL)7u>+(Tz!Nu8=$EI1Pvncb@G^+S6W*YK*n@L9G9b`Va0AX3_Q~4&j3chE);Y z%)2p84H7SdL(`S_a$^Erf~YD*Kd69Z_G$Fo+D={Sy{bw4!QJ$|s&V|m8>a7Rc?5w= z?UdVA>VWDl*cr(qAP1I}P5!Z4sAyX$WDE7fwj_#}JZLmF{RoQVNbD|K!X{$t*^AN8tCi$3pr;$fe zp(@vq(HSx|>wW9MR^l4OFQ!F%(#tr6X7{9V{d*F?klU?K_YCBD>SY?Z@`aj6RXxS36TE+?%Z0wa^8$8Vko2_d97gZd%Z-kz1T@AR%PblL z3*8sIPe~~+?lqeA8kb(<)@wY_!ak(gtnohg+;cBc+s5Jpz}auTMiJ}N66(D9xB9!x zhiGSW7YP&U)7{T6IH&m@+Vd)p8R|hK?^~prA zNJ`yP{6b}YEpnSAV_WDLl6e{k=j^+h-;IsrV+My(BUsQU*8W)98pnzJ); z<><_)`#toTY0hr1^G2LFk2ux$_KMc%`ZMcoT7Tl)zy@NYPmVJY zGOk z*4yj9xGjlZK?Y0=j-%~NTF|2w+Gh+SleOM2{1?Q7bO0oBRO{{W<8)02jy?7TM)pu# ztWvsZ2hnJaEeJb3@6kn$m>RUaSt^M zU@cgzcn3}5&@Ch%dBCNw^yJPJ%0tv=0&D+<tRMTNIF%1*SOs2T*ZVVY}9fQ%3DBq_84vv;nua0@~UK8wGEwPSy)NW`Wn#UqwQ< zFEwshs*lr}6Cu(3hW~TuEqNb6;pfpQ12df&u6$qfs!mG2hQyWQKy_5|eO^*&h?c;B0BN zgPNFn7zDxP_tn_Uzkp6?p`EDdv4gAjnJw8)a+=VM(yDe)H@fXo@Q0FiOBCQDB3+07 zK>QS)+gMbE!C2&=>tjUq6}XgO1yy8bB1ocR{#7Y2w->?lr8<-hea<+0a+`KJ&d?y@ zDnzWTg!}_dAVk$`_&?x@pWVlX8AVljvX_;LJ-9?vsV}T5!xdl}sNU}^TArwcK0~z5 zBgt|tp@6UqApX4;>@J-;W?kKmJrwqd#eF`;8iq43h#@|N5ziq0 z0IdkonG#6kh>QcW7u`jE5uWOP)ZKk}53UGajY^AA>BeUgKkD{0Ch!jfFJz zeVB`ImCH?=OtlYmZwHNG@}5kBQWDw&IP^RijWqh*0!fwIkE9O+K8cb9RNvZ|&>$rW z8UhG4s$7ir0eY?MxrO|qh;oTC-E(RN>6I_b5kG9Ds|!DC@=y8m{mun1ol z;%j)R7>}E4)(fu!LcD!1>Z;OUWdMBu!}|cT?jZo{1)g%9#cew~Vh3I+Vw22g8dAMi>xdDQinr-z-b4HG&g<^%wo>sbdmVrmef>8l)`Tyy6|a!`84nTt^L9{ejm~|7 z>VeR$!4$xHfr7*j09aXR*2L;|ovhnoMhdVW0wk~om`gypi+XSvABK`+-c!h1YvZbJ zD;Hm*&wh0bfep5NS;jdYsu+D;>Qxo`BvDOW9V6)Ia`893YEvAQSVZ*lA^-=aR#Fo- z+7{C35Y!8X?*qhl{y2uHi-R&ohaA3(mSf&mgW-FO*h${Ym)T?ZPng@ZioYTTE$|w! z5|InZ3AEtQT9=ix@-JdH$NKfbU4Z^cIiSJfWrNU;LrV-!_ml`xfY}7j9GV3QdDQjq zSD+O_9=^wE{&^99|sIHZOXVCn@p`&6A+SJ+**;B;%@8AoMg zaL&HE1>LQMryWy~5>E9mPqUW0NL4Hp6Lgm%9jNaWKL$(C_GDtF@10b5ibn1Z8o6_t zB57pO?(#xU0Ln1nU(!K04r1fEedVD4@mfI36$Y1z4xTuh;j&#CrMs0)3qxH(uovC`-UC(lG9eFTFP8i6EUxwr&kYomC1 zwc~co2BEIaT#*0`Hrg3W9S3nrj&>$Ny+k{Md7_w(A3LVs_BN>98x{Tff+ws0t#VakLJE-w&!Vy<{32h<} ztakHUyHVga2}*+7p3&JHMjBU)Vc$L!V9_>$p~QjKs!m2TSxoWmWvw+)WKp?U8|`on zn(l_?$<|ydwoyPdfh&-}&eV?odKnr8i(KWRCl!f^LLkR0*;FxV4m|8tZK`~ync;$P z4(bX$A$=1Ha{%XO#p{sy8{L@EyTx+C5f_&*6+sVBM9&*UN)PfvE154|!RRcyun%WU zUxv#w)2om*3h*=~&*GJd;>hVZB)=vJw2s1~1*Anw{0#O&z!#gc~(S^ouLldt#R0QHQM($#CKl~VKJ0Q{=G z&}y@s86q-q*F8-Kaw2cZ9Dalxs&?KEO(XgOkJt!Yd@W&WBXow)oII}n690u-cfO+4 z!Y^?4dUZ`{d38Q!ED;|d68s|(xUwp6c9D7~b$f(qSfO5wutfiCt=qeDX7H$*6gYdW zzd(k2H4(t9mJ3b0uHzA=1oJ?v;87(w0Z*&YW8R-2krGY-hMFoXmC(HiiAtF5J*zN9 ziw#^}>?3iY;?;PF zLJ1MAiE8Ws$;~dzAhAp-sG5tFx4z(%*iM2rDEgtfdmb2Lg}K_*n&QyYtyS}0nGK+- zy-3%Z&{K*0ov6A9n7&yw58`VyFY<+2ld3&{LD)0ju^WRDq9fW^rjo%JwZ@4G zl#7`u=0B$>%o+!EupUkyY2c`*HI8%8X;|5lUc0vES|q#X=cF&lKi4QKH8SLMlC(0t z1L_R2R^iMl37m|gIbZ{Q-gCqv_6ECMI>(_cor#NOrFu=V(H6Nqx?@<5Ej`QMAtnHl z63?T=bBK}QG?Q7P`2;b^BoeLaCLN8{Lsf7| zmiP?(v_?t_%c#fcgZ2EFcneG^@RtQ@5*+@Ls{K@X*uHBZNO51Ze*9Nra38W%Pg$x@ zPs9%gr3eks(20S-U=+gzNGnRLtFggYE}jPqe2u1kIAT-^cwgJfYs;+$!bz+~+El$t za4P`dOZbX!$9zrrYTJmb;GEeqJg_=!C-zElLhm9}dY6`!iqBR>+fk4Rpu7n6GfWmp z+Bq&(oHAG5zuM!$%8t&~N}N^t3WN0N$;w(TUvVQ`a*)t*SgoO_-hp{ zB*2Iq*4 zCAb}*fk`tVx}lfV2?a{%3Vusmq=d%c&FHQ=fLf{$>eKi*0*-~T-U1rgZ91o?1V6`D zz~@tf0xxaMqY%-tiw4L@GN_Eaz_ccc@BWOdjCw1+?z|LTEtf;pVHQWzT0OPBH1O5z zE0E)=Xk1D-xhpU8A;Q`?w2T0+dOd?F#GH(;<9}q}nHRfTGC&@lu zD$aKE=#4tK!>lQW=H&_2jnO>k+%3llb+qk+dmzUl(*+)W_oYmRh>cGHmZsX-q?%oX z2T{-OmiXWvTMo&tqFl9iXN;?25tLM3asODF{HYhy{TR%zy_mzuoeKXj@$_qblWS5$ zTv2rdB@)NMbHMRnj>3;^zOnQbd8a~3zYfSST4!*TCF8qX&|%)n$RCX4muRUVwqXg2 zxf$v89VzCZ;Zli4p@QFp)i*pAV7^~2-b9nYgg5eabbTWk%SAEeGk{VpTn;bs9Kr$o zxQuf($Kj!U53E<=7CgH2BccAzaYqMgYu0ivEhUIxk{%xb2z~R2zTg9D>Ybnw775wK@TDEw zS<4_w{w_-yndiVpJ8e2Ed3i+VtgCr}GjQslGcMUYJUP zpboQU8D^0Wpx|ZVhd6x$Vv%gnf3qzY^iQ;ItfJMUr~pi5<-fX;WISor6S>}4@Bx-Q zC@QkPrwCcwE1(7Z9vNCD(vfkQc#aSMM3;WF93zR{JiJf@ZRzq8wupfi-q)dZ(k^7_ zDHL5|2HT&q8nEDhIQlf?wz5i;8jd3Yf z9iw?LpJPC08&P!_pO6{Q)-Jx2Kues*kkvwT-HRSoNuDD<0K|T9k*^g}Q^CuGY20Se zo6|m`$}JbOpCN|u)VtKfC-Qq}3;C=E-sQp%7c-lvOa)izhOnR^5r;8aT|U2iMMtbc z&>+B4>AZ{A7>Z*#iBP6YFrF31qcCU=I4C_ry!UdfW1qop6BL&~t}+QN1jYG_o)A-S z5{3UoAN(6J`0?k$YkBGaL7UT~s^}?NwxP60axfEvyeh?Lhz+V7bFfK#ybK^yiB`n! z=9E`d>Em(a>{Ae7=P`us5^x}0^0ls1*p2`dy3OV5UGce=w}YhKix#S*tLRNs+BxAc zVRa&!w|%LkW~1@$jv5JG#Em`}4_o64y~e zo8fIucoyl%s}2xRgQFe5kW^(&cn03^zz)b^a5;VL5$%Kv@4mAuzA0|P*p{23{uLin ztQ#qsxDsA^iuI06kG!Hu)@$EWn9`Bb+L9oJO9*(MuO7RlD|>7mt-N zHgJrr!k}gkXb6gY(pK1>#sKZ8XTI*F%{&XCYz5z zhr(4ih_r!xTg0z0k(Z4cL`6?`i(exx^d!5f!>&23G3ndcCVa>HHZdf4NKedEyrNJ*ol`*9D`f)FU3brUGdk92?P%bjahoO zwv`g_y|?1`Wfe1c~F|IB~e(WS;sL_e9bFwuyN8BI~{?=mjtxMISz>*+|0p1?rRQ10ZPud zfRyjxibH7NGK)1o$Hb2_%dtX7YgRzwVc>Y8rQU%vifRQWF!h6IZv%sQdgx2&AqE=6n2Poiov zXPxrxUGW#|MzM@$o>zi9w7F`n&FJ52UVyuGDSvU*ZGSQMoQiW-QIE$B z5j~|f(LofW2;T5ec%mc==YwV>O|ug0W8$!X3(;$NMQ#Rd@IoU*0)%Q+F4WJiV$@%G zSzX4=Q#4I!LIdAIN=5VuRIyk}(VhB9>3*l~C&LZ2!Bkdeu016Nqg#PBpo!%n*PB;< z1Nw_`A$8>~MtAe4iKa{OHLsY6%Mt&esY)e|x?gQaclK74Qv&-iY{&$Px27X6eZm;H zn1#@s5!-=rsH5jSPd)EQPN(l9SXyd|+`lw8NA==V1nzs`#H@UFK(qHwz+st~-BNzA zJHNE79EwFxS??1IZdE6hib+5Ri-aD0T~iLRcXz4fKLscjx2gHJfFzyDm1n&#i&m9hAnh{M1KK&d_X zLw7d1GJM1{TWFHt$(`p>FQ}44dB@l*ej&Yaeny8j^8r{r^{gaJ6sz_0jbawNQNWuJ z^JN;`a?3nQ@K(Io$-XIOBPdMwK#b<{TrUoOHhIk7Y(NQott(E{Hq+ZejBPH2VYA#` z6p9<@s1r^t<7R3CaGiAr&^DSYq6xgj3A9BM=!=gsrx>N~&>`MU`v(%&&LrVx*J2#j zZpsfIV~+%dC(9s4nXz!OK5H?qbd!$H&n8Jr}i}EwC1nSw^6es z?-7RsvXQo;B^o>V{SbX$ zpZBBaHzb;l$i;aLiFSI3=!gu>d!D{ikUtQ?@yI3BZtGB`Ub6)9P84u9eJor|W`knO z+nv-vFz&G`ms0UF)DfxZi>-{X5ym}JyQ`ZAsj`aKW_^ z!8BYvyTp7G^F(vnI9DL^3+kkEv1P%B#-5<1R|Z6d+M5=yZ`x^)Mh_k%mLeStZ{nMM zIJ6k=gwg1+!ddP1@mzYvMPiB#cX

OveH{au9k&PbZm^Szign6O4la9V0VuaA|)| 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 z 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≫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 z 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 G|M@RjyrGT& diff --git a/PythonLib/full/_elementtree.pyd b/PythonLib/full/_elementtree.pyd index 678abf3a953c921a0b5d0df98585261da594742e..8e796fd40320c2434aad6e3bb025cbc2bfd1d003 100644 GIT binary patch literal 143360 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

TrjitLael0SZG3l!6z5OG5a~_!3XJ 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 LkOlHT=J$U9X}q+n literal 214528 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 ); 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

5}D=PpK)*p<^=zq5o&%{Rq-o!ZaJ)i=!wLJ z__{kesk|msi!$(F@aS>pdO14Ac7hG}ri6%o`WkrQ?#=QnkiA*J!#ppK^~hxbf_ARg zV0nNyoECj&gy;NPtypgYn?(4aSv)8gX7?@zXF9_-^4Iq&Gp{6PD`Bl+Fo`3xFkP)FF2 zD(;;-@o5cJ{sq5J9I5dNC+^@*yxc;B&HQ*t>`=T!uN;cno%&38BlGrKN8$-yhzeF$ zi$DIUJgyXeU;<{EoRxVy>*8;<5TW(}2O_XjOWfQjvm?K|)n9xZhrHtB7-6?$642rhs*rgD?U|zsT;*l%=hu8_RK82+C!iVb zs_u%C$WxX&Q^y`Mnd$@!a7_&3ax^3{53*TUT{D;$HzA|4L=ihX)uh9FqRbBTO}IRA z_(dLe_D-78$(!H@$wMC{aA#UxW^_)ewIAL!rP48?GkQ#7WjHVY>b)uUX-bk+v!Cp| zi9GJs=;d0G>yw++3}`QxEBbg*Pvx>_vm3cyg)f)uHH#ZB7i+<^C$j<$VHs@_U6=?dnH5EgCLV%5 z@X3$S(+=FSDLV>D}C76~zRe^)Marr!1=T zFs59!a+!>kJHsC$8+K0qN3%u3lM{9jFcSZX9(ot4#Vb540NC?i%73*!Y`e_s=`M>T zs}gyS11N6@1V7^9*l{c2q~;&qJdd$HDPvXlbjh^}ra8Z*7k5(ufyp0W+)3@3$px-5NjUUz!m;?*mjlD_>&rls zf$FbMniCRvunC`{7XmFtrPGr()Uf2m>kd4{lPHL`<#zDPqW>}r_p*E37}=Tx zWVS}F$ZiV&&rCqIl($pa)jaMt36mTFN^|+=;9n7W%p5$QDiF*}rxFFJ z)|ybfJwmY@Lc_r4^QB~=!+G~BkWZxBy!(0iJnY;U0lS80C8ZEie&a`c&+nhTS=LbR zJ)>j)JK2ARx%ojJ(~d(m^MrWT4zc8Ce9pFIG$uTB6Q2!mgQ{;ED+hhTPUZn&p8Wp0 z)Q=j}HXb`4OBJ}I#i`*{k;A(L&HQuHl!5S!WJ=P0w(S2@E)MZnuJ9Od9Db9PDOOj~ zxJlxy_c2h7G_#~Bik0Q>3RgJF+Oty%vdT63oCQh{|6{1)1~0HtqYhKas-MSKf;-fVDbQco`l_ZMi~)NjM$bZPt;)TTM1sDnB2-FSnH+st0TIa7_f9 zsV6mM`{CE79HDI&5g9%ZbkckSBXT$&bBs4SgZ;^2k2U-ECQaF8bRFJx`1L7Uje#lM zhhLonkuu`-5d$DyLCr5(c$h|VMKU|0Ysx^Co4t`%*ZfNQSpTNKnBlMx+e@GWAa0%E zXBd_5E&iA!cNFmysUI|J_=v)q?;ld;b}4O^+4N(+tCeOcHp*chqSH=P>(4DhSb#=A z_`A=zloCiY#!n#81;$2wa=@SqJ1m4UH@8@Vx4Tk139G$!t39dri$YIG{1;8F^v>WX z^|tXqpI=PT)Fi7mw-D!d-GNqKnuqfl(T))!xDk*1%KL~gbtqK3A=JFFr}AEX_9`C? zRX!A|{8^~-;ZWrxp~^==eiKhh)77uhE7^A@A?rewZP4#7p-JvvzjtjOtmRq~)x6QDyx-W>`AOD>d4Djr8@o1CJ|3=ou(9)qtMd~$%`F>h z|F~h^V`{2Tx`Dd)|4th#Z16&^JV<(kM>#S)eE=S(_74y#4??6^&+alR+rp&^CNW=yC9l_wLeRtrcqO2%zGHn?;WEV zcTsIzD2si#?~B^a{cAK9uI)%@ZQvAId%$W9mz8}YnxA){(Unhf6B?4-CJ%1Wu4cwZ zk;?nsA2~PTA`|IFDis;(Z9n#xpGv?A_BX#Ps8SFs-9D+wYhKRxT9@-^^_y?#T>>a@ zQ*H<^O=dsSx|5sw&Iv}6yOY1#GM<zp)t)lF^a=m4(kBBG1V#1d ze}FkgCjdkkk zK(rM%f@glg1354|+=3AuQyfB@%)Z3fhAy$9?e$c?%Y{uSCq+JVb;cJ3)Le$wC3@>j zi8*}dcL(z?Vb90z4_nS@sy8#$?XmVNU406B24I`C1wt~?0c>ud=_jR#iacS_BiT*! zg}Imfge%mJA$4$4l7RH#%7Z}FelKBu)Zf0qkVscSm=Zj%>M(7S>zv3kV*Q0Sb1f-5 z`*`Od@Jc8dd#R6|Lyf`yH3>0Pm7!^1SwEp)Ay2c!lc%8(-0NaSNopxHIay5-`8s#M z|C}bj8Fo3kD9K8#9K0x-g_<;1JkQcE5{<`qjGkb^v6LLgV<0pmm-(3l*UAo2ja z$OEcVh=I*2aaAYvWov1UDH(_^iA%kV6oTp1t9`%LY7KEiXi(RT8oFzzboEH~nyB25 z{erh}aBlauOchJQ{KG^jZ?}z4*)r4p+=i6qQFz}TsyHLL)o*hoZ%Cmmxrx^7T?9NG zN^13wAv8SU6p!y{ee2fN&a(<;O^Pf?WQtDP>8R;HeA)SBrZ$XbEkurBzM@CZk z9$hQPtM?g6)v4#@*Ifs!l3Vx%SoGW#ZIP(h39O|)4^Ra~Sm%73{u1c(f4xo7 zc7jjq#sdfdx;UqwGF0>a`lpdzZ_KyVhwql5dc)t9k2*E$2`rbwIzoXbe2XeIThF+fFwt|qJl_?~S4#vEHByE5lZ}~_-l7V<7r!G-b zg(_Y@lF#UfB^MZ=fDzxGvz=rSl>ZwPY0#NK7Q41z{48u(HigZR^*+rYcs@?pcKABH z)Sa=yzZaKJv7QhQ!e1C&nB2TwqKkje>Oc@S?eDuJ+I}nT&$n@BvqUm=Jq)j2d9B1< z$d-iflsEO^r#JH9QU64fTi+Pgu_4sk@+17T6lhd056?&%GLvPxC$u5XwlOqSPxuY> z285UiVAK+5TWl_1{6uix%q2#?4pAlv2CSq5wGJ-H^l*7H_ieo~5hV%sqH~R-`2+43 zmZum;8tcMs1qbvvzasQrr6XCxMt%?dkhPAbyOk^47;n@uJg7Qccu;EXWITc zkiPr56?ueU^ky+vy#Sur>q45%?@B#Nd+x54uN&LFW=oA8^`Ve*wW1>p-7PR_CSPE% zWQ>TD2!j7NYmgPUeVH3DU}Q94s2jRe7^nZkxC{+jc(+W3rTv2OT=*_oe^dTE|E9~b z$~K%)E+Xg;`^t^y^S6_)s=KXNCe+%Jd962mU-A2Vms}BFXG{!8Gsd*?h;F5Qepx~j zjDjFDHCYYy^~7Y+ix42&n@Sy~sXS2+E$p(gAF@rsj`(?NN)B(>Nt3{+{O?g~FVeu3 za2$jl0~4Cg<0;0le7iANCUgq#z0@8p;?+Z&9rPBOM=0Q9WVF-vPe%6on+U#@KO&r| zzuaykDQm|19W5D<3hu*e{sJz?0f890`reBeTcem=qo19|$WpZ79nvtx(r|a!GRR<6 zK;IbY>H84Vf>w-T zBDf~TgduM$Psx-U(?ftbKI zO7CEw?~tTr#-0Ev!|a1oh6$m7=QnQOcF7W>4&(snSaI4I$hmmbs|N^M1sWyKZc{QB z#Z!0c0fY);-I)Hyg?rVddLk{~SiiT~Mi|_J;892OFr(-P0v~|7j(k;$Y|ZklJJ{6Cj~eLbg8t*cs|^Y--$l z*4!B*Q^h{oBq7+Z9}6fjg)HCxUD)$~W3ryXPpzlg>KyrH7Qqbq)o;$R);C}in_H`@ z{{k4Sq%dymIcE5zGq4;Yi&>Kms%>1R&Zy%ub63PqstMop->5{JpzUq57=9z#TlFQt zOYdV~xOxp_rBRf|#c@;>-9NTQHh|1oJBaOUWQERHfVE_rm@W+mG}6RqXgu4+6IaN| zO6h}y3DIcXU>vtggM@raL=QVp!#;ir%vzpB?gM8=jnyH^=bghP=6kCokm9LzN%$PBlC? zg}gTzo*P4646q79-U7o@6!I1sp5lh{WXdx#!ruO{S~HKazUeD0tTh05m-{$1k>d02<&e;pMlLgPPoc5E2@Tkxy! zXUL%Y;W>nj74@|ZwWh>Aw38Z+|06!B=B;b!M)(TLPt z%j%_2V&5_*>F)pw5Arh$T1FV^qs1cFl*@aI^M{?+PC;hWIr!?*Q=-1am#2YRyE&*( zrCn7?l9z1`9HG3MqSN^(6Z8t+|!u2rWFQN@dvMLM6lAdfk+H2g!@1 zQ^Q_N!U##K{Os8liu30{OmUUNe!9G>i#S=_Rxz|roUkPd6e(U>sX6}#t z^0DB8>@$pb=8S?(f_w{#j(NhH9RH^$M8lQsdS3 zGp3zM&Uu2+w_l$;?S^>H`MusF&Q zRk3C`VOtGb!6FKoLMJUciZ(Mv-DNhj$P|;oMtOuXB@hj2V>>}~&ezR2H!7Y4dq|O% z?!0Rk-y^wy+O;>uRYvn+N0!m4TJ)71@EFMpq%-NZBFh%102VCD-x_~zY)2s1KDxYZ zci>3hRc2w4bdElu!UD+BSUo9np{^_T8D{nT=RI%=+(o{esR)YBdt27Ut_PtXVmhPW zXn;@|39rp=9lEGbI4Uhd>>F-cUy5|jTJKFlO{*KftXF)2wO053<@FTT4_Jfu`Ap;U zO#WTPzyHHOfd}>*bTZNRIF-XyGh%x;Q;jiOD%`@gF9`^kRhCb5(q@^7i8*)*ca+SY z-{|~Nr*VX0V|}7+iWW01-H3unl-wQS*B4og$A#$p%@ionZFZ=KzNE)4JqC{s_pfcK z3LYJ^wwxBT4^_=g2`mu0OuV0r=YX9$h#b}skok+Wr8St*w#KWuW?MiEbb|P5zjcyA zm&7|1*;Azs>*cA71qon%U=!gao*YAMwF~G0lMr6Ad6G|98Z8rzEm@9w^JZ%TT@PpY zkDPe8&GptPHvQjVS}TGrWl8n^5_)J#dUB-najV$}sC$aYDCe0jgI=7K>dZGf$;OYi zE?6WPzDb>&~)|<>7IyZMC=UEq%4U z*4k=Yq2Nm;pac{Z&{lk@qSD)wE>~lvB-Y6OzcbIXo81sw@Bj1D51ZZdI%m$DIdkUB z%$dVS8utG%Q&O-G>1JK}z%u<^QLcZQcIEUe=BNsITd=c=?-|hlia8N!8RM7W9pbEE z9(7jSc(wV{?&5Q9S$Rg{GQn$`gIDyUf>+QwK3q#Bx7bpOopi4+a=v(XMa~Q_N@cA) zLv1^@$W~xJ_bJ7>^L!zyMBNW_5>d{P+@((lugIt+wj_z2_vS_>a}$Uk(Cg+ylm>L| zB30s9>3Qs44>jfe76nCD9KhVMauUA-ExRliF`3alYH7;$XPF^xQyLS&Q&0SOv zm%?3E=4LL&gg-zF|6Z^+UsH5lfP`l7{cvpeL3xwN_BmCDH-i|nz|rpCYG zm8x0a&WZcJjU*sJkMzD0y-3Q4#wjXiC(i$BLBpFcQkx=kswS`cJ*^X;o`+cfl|FOD zNI(K#>=5#qeZJs^`{MU_nTOjFIRodr%6rXXmN5ENv>}B}(&x8Q^abLb`kua))TFaN3>%=k=F%Qu#T9BN#xFVSd+BwO24fa6Q_F&f!AePFLCG=Y)-_pMt{*4|^ ztvp$xzDctDZ4S>)&r?8cz6&!`jyaBPS9j%%I_`1oy~w$Yq?rhB%l&4>agJbF>l5fq z=qDd06QLgoB3jLMB^jT6G&ST2;ifbMxhow?;k|?6@M4l3YiC`Z!Fb(NvvIku=CpLF zYgs(W3e zLt^fmxo=@H>vKSPv0d^)__(S%fADK-nP&SG9D^=)Fb;A3G5jARfYQFqJs;|R@$pWG zNbL%sgoU2q@L`utI+G;I5gpd`{&=g$lBWVhq4YFv^gX!IOISW@)`N*hbdIzoa*M)i zvxlb{jL{yu1QyGdIor~2+G#AKY&H)`aidY@GA9({c}ic+4Ub&^28^j4Dzi@(ierUi zUw~6kp8Nt|ISxaYZ$sf0gnmFV@uqbfVjMihE;5ilHD82*kcKc-Lm`5b+@U*fQ8qu~ z{6`b`HS^NlhX5tFq?r2?5HRI^tYbxA9I~o(c=u%tFHe~)hW2z#d`hL_#9}*#Ll;8L z0*s@Nc#k~(OKLnKvtXXyzzDJ7ikwY^Ohm+e9h}AoP=vwH;KjUD>p|IxUM#Q{wb(8z z@YU+7ZL40T^VC#K2tSn3zj{Q3V(o)D9cOaoF(teyof*^%+3U>At90?{vzIdQ6-O$g zgB|tG`!c@YF{CQdZxOxP%lATP0ObULlmiI96M^3dAhz#!{AjXqtZxvHZ#E#ktu3mp ziVm*YECb45xc~Zg_A2MKI^M4xT2xC?i)xX(sN`ulXHnhABdofpMwp*}y|#vc$O9Fr zP28CrtaDk$r?aw74Hu+yot5=D^IDs;vX-w!fUb2vr|Wa;g8cS=0YGr!>lb|=n{Klw(wz)=1-()o41p#n0$X@9N% z7%Jjl=9J0GUo?~-7%Bf;@@?5%{f^5aF=BWhUZdEi!oFm+mwYb;a$Vt2dm>Mw1By;( zKix3Okzn#6oKwS}Wx}#0k<(3Ct4^674DEd34SDbec)&~`sTycreTsd7Zp}X)txYkJ zXVbyFs`fw!Ps|78mEp*Ey}-!l0t1h$mXKArHpR|3ZORKW!+YJ>GQ@&2r-S&Gbnwyc zYP)|_$L>dwp!xAPWHXeXGO@botn;tnXU6OjpXo=E#Hh~2(e&GVHJ4wL8pm;VU9mM* z^LG(rqmc$TKPX?}^ zK${eld1jD8*2U7`3hR7nPyro^kz%L%FHgaD-@lCr-z@WMn%W}pIWS`?!xouKT--ED zzD9{5l=S3Dw}KpJD2Zo)ANo1A%L_;Da+0}ZSeK*daWs^ss7drOb0fC*m#aq{!nx+{ zJBJNH?q(+biOmN>YVjj^5ch-YEV=hx=0g2)dM(PA5&OGoZi-+x|yG^s=f{u=Gta#m2e=;#MwFDVm? zj#JpoQDQW;hWEU~$yh5Mx>6b{5~it?o6S9)^Ga&JD01|E4;G?>$Wjm5WBpJfdS&4E zCTA~^B_7@eVTRqZj!X=%zQmp~aVfsKr1{;u-3@007OMH6j$43yZ?X3Bec^ z1r56KrRFycF5}HY>G1a%c)vmMo|(mWBH_5EC60ZLyj(1PR-Hel?2&4JuKQH|_5Xh@tMwx9YzD823PjG7qC%x% za7LEP`N&h|HkpR4qFky!|Xr#%}C+;Rns&KR`gqe8;FluJ>D=tNrUe?tOXL z4lHCaIpT^5G&Cy;cx> zV-SeXn9i%NH+){X@dmUFM_`Zk!W4u=u^kb@vL3s=(B}LtmI3pITLwsEnK|Y}`o%clTdt7=YE0`w&hG9{ zrLUr9@lreNK0J&)$02#5wq=0jTO2+FykR9{S>t6uYJ7m3{1`TMdsOG4#eK^ z+;T4zKL^`4vadCS58tuTe(f%BDTxhGmJKx^k%_lsqUaa*90s zS5mJlGChgWK?&7W!+DhJKRB?)I^ z@-fsXb=H#zt~H|3@!)E|fz#06!Vx9{<9@m2d2GhOqi zIN}hdzb5iIf-lX*hv##A!DFXXpqLu${CC83eir5gJC{3Oi}>2?d@bf{o%2=Vxn0ax zVO{6*m%)@^R(2fDF}Sjnwn9~&uRG@GOK~;BtqG~^6})PCzSGYVsR_-SUG>5G!rXO@ z$yEsqgr{lt#5*-#Zke+3Yo>~+@mz6duDVc&1fCV_dJCj%L>cl7cYE?@GJAWcM zyrxKQF%A*Ka=Rp#IdnW9-WBM@ldrl+{GR7Fp)AEIh~QqcOSGd%kmPETVV*H^a;2_# zKP)c2f?@vkjeOCcioxYH8h(UBU{2+-;@}-P3lxpt5A!LlmFk>J9w>CAE6AO8!GdfH3NUPtw_OlEizlT~PU zf2Ute$i<^-ec_4g7JFnCCBzU!)QGX^-JjR}S!U@384dncD?Lr-?T94n)`vhSSCzL4ho=W&0lE&(W8hc8Li1QX%O$`nB0YR>6T%gvjBo~Qam&yBr zGIxE$gqP#b_$>XV;~ETfC%siix!|L;d4)iC?1DQK0f{nFOWKQZynm6s zsll8>I!QCjdb|vjj=ej~cbx_*NT23m6?k`4IdK}M1#iDV&|E*&p(}{D{nVC?!X&4#c|%vV0Kc8n84{uMOdjF zMpK_52aH^)G^0}K$E`%f*K|+CZl%;c$VgWs@C%fB!A`kgurERKJYOPxM$ct~L2yya zQ-7NS@IP&)HgvBivdF2WvE@^|J+s!u!|r7g(}sHs{h1&Mx^jEhu@{cbSp!$D#e@#% zgtbi-P}lyy0CoDm0CnQ>#E05C_I`^t#hBzK8}&wHf)fEZ zzz&_|&oO|L$+GBs{_*-O@aBhge zTdI*(^GD0sDpOX1Dd_Zkmr=6K-0zm;$gZ)8@jc}P*=7nM&e%{GigW{x{9BBHmzd6v z5l;m1M=VZE1TaFM7sH*AiShlx7SWI8kvzgUPale!jqeKT*L<6(MbQhzDBOo-d9ZUH zRbub^gPoV?7haB%7$uvl&mI@r@<&>GSa4y!`9-Ev8VGhC71%D#iHx^zT56v5(;uC2 zPj%B$I|>tsoNIRAmW;$WGc4ke6W&D{S((4(RuW7B%o28}f)rLoUE=&*P+az8=d=c(x)F^T5LqM7=*7~DJ}onU3#(+RBH zl+V5zASQ;lkQJY|zV~Lhch9`5`IVE%V=VUj1TnP>VxL{=vD%g#sSZ`+>%MTGl#)P+*wG&84n=Qt3dP>f3x4%ol9Q$JS983f9ybVZbs#nnT8+775$k6haVgqD zP3H4obqK3~Uy0JqKa@EVpI&E<-uVyk+Fq23BOKvLF#Ny}tmA~VHPhX?5`2c^Zt%$L zP)UULi|rHaCV54ssIj3feV9dwlH}AfFJR5PR%vCvwJ4l=2arj_7V8^8EB`9_H^cq+ zMgFFVl`kT1--1gH=$1ovWIWbD_PgeEA+;w0VgudKgr=_xp$LvO6o)v~hEw_FNU*hm zY8^-~NNw2Q5hVCWPylr@F6*e2U4CI^`7e%C9{94>WARrU1gq8sbt4FgwSgqrntAIUv}MauDf)>{bu=MQ{u-`0;|`2D36Qca*>A}Ws1aNsTNgFeZaFU zRQ7=fQwWc}lNcQ-SmIYEr@UVF0hd*$>&-c@@gnZiZwet%zj);+y!Z*tgzZhBV6*qR zM(N3%LEnI8Ef2U}JW_J=epyXRp-g8r{pdP8jvLHqAXn8?YJTnf{%V~LLdaGlk)i)c zb&F#H#&*JboVi%Gz0JPa7fY4|zbe*9_#k7#!;`i;B^WC#+umQhR3v8tk47$Fou3;1 zp735ZLv%Q1yzcMj#fww?lE!&#SCHvqlZ2kKZak!d96P3$Ly(`0ITSYz0%?=crlE^` zO(3hJ*Ug7zsNYNvb<^k6xtb9|Zz$hbqM1a;0X1?Ca4XI6wk?|^>bUlC&K*$dd~bPI zDA}l@1|QqwajM)JysJC)Vw_{Rsrmp+Nc$Vp5Z2zLEczg^1+MR^uG3Z^^w65KR*+~-(! zO;tNqFXZTsf;hf-+;w&`xapJ0%d7TBXUwY_AXE`bvt@xYEUGyJA=9zN*wq3ci z&HQAwE?Z{>4H1#e>pr2*eYcEblUV67^$ZJQ-Cj9+Ndz+Q75m4&*GOFvWfJGv@&+JDpOvIeNjjBlNO{sg;v%{f zD*|Xq_zO}*bgu5~Zdt{5b9$=J^hPGg<-bOIeE(&k94bYEXpRZmD)GV?5-(TJUxEqE z=l+b`frEi46@IYI-Ztz;26$yLi5M!{_*fN`yoWEX_6)vwpSKEVh9!!tfcB`$oeb& zY6BrY>6z~=hu26K|B(s)dFDCQm9eW+)IsO&&HGQz@^=ybE&eSf6?TPnj;zlsFGF@hw>iJk(0`E7>1g*--wPVdilzw$5#EE zQ&sPFTnGth@dt!`fl#b9BBL5ii)dM&K*^u#K;n+kevUnk%cDkf{=aK^I`OT%Ch;8+ zQYP|1O*3130FwCGt-9C~V;jt^ZwmQC?H#vkcdgu*n4i5WYIPE$1uL)XZIi8Rhv}B1 zLruVpib0DA@EDL0he=kC_@;!6=jW(^jSjY!(SmM3xlH0GiROe z@*BqrP%InWNLnbp%}Itl>ZYUp@+ewQAP!*528hZf+d_Y&jqV}EOJ=e{Cj9-9m8O5j#8@ff}G zvxs)R46Ccc?)HsWEw5xrGX@B28oiTwToOQ zwE`5-CD37xx$~Gd3UOBBF|5uR(u{`Tp41R`!nZY;cVBZ?V(^Y~@^xnhDp8-BJnR?g zCy~xMqLWya)Om?C6PlRPZ-TWm!!kd*z#p}*D z{u#PJh)-H#Zto}FQ8)Rxo+P8CapIcLdI9}TGgo8Krb}gYz#OJdPfg)ZD5>=pQ;&O{ z;?tvf_Er9bH}-VWp4epKFA&7LrVv%JtU9@3ll#DaX`jeE!VxYqXHf6~csukdS&f?}E=A=00S4+X?uk z=G{aKJJ&4=(}Mn1CRGA&GS}--VklO#@HB@$V}~?;>nqK6AM;imR@x_^T?zk6O&BRb z@!atRIxm7cL*f}J_R=eT=HY7vS|Pb&Ea*G06w(QTF8hR@T(dd>WFh>`@!~BXMXWU1G>@Njmdx=!&))Fv3`?0&VL{3d@E8f>+)^%ISBYYXV z${U*EH@o&KeW7K-vaJuD`*$IuYtt=El5TYdpt45u$RASlb!EjX>TBh$6lXhs1#r!a z=O|dk%}m}jck+lHX)gV(QrNU+2yAAWz^cueq_Zd;0uz!VrXgIzB`HYXoQ@s#kQ0Au z^W$%9;1t|geO+sc5v$yI4=I0PMme|CN0e^ITUf*^rbQ&ICP%Ug@EnJ^9Ef$#Io4U& zrN=`WFqXGEYs`#&J8Ddh*-@Yrn7I+VFs0~M!kxlSqyCD0$gPF;ijci??HeLXo~}2?2pOP4KJMJ z4cUvt`0YZJhso$^Gh0fcC(DIAVvF1$w$9jRN*xGYtAMbmem397NAD6EvFl6imJ*5+ zEfbD|Zi<`zR?|0HMpf+Ak&AzHuA+zGBmavm|Q|#^p+bxD3e<%@@z?!1ZhA&M6cgRaQ0x)=5L7~itlIL$c<|{Nn zaXFEmJtwxKuxdqM)xCT~YlKcBd>O`gt5~A4B2FrP8eJCv;h%LEXO1@MHG4#tS=IJ5KCUxXYBoC zv|x+uZrE2XE9E#_(#*9FyiKhl%H($WY{)TQ6OudX%f}B<$Bk)Jya636b(9NI*_&kd zK2q)TMTlY@usvmZ=J6dy~X#FQUbqjz-)?)&GOZ1vO$E+00(P z@DtKDyHsQ{G6|CgxjYTI)cL(*#3#3d`JtxlE3}0BeIY~!l@zV|o%S#<-Ggk$!8;zM zFPR*Etn@URcaUPmb_h?^VCVC|&STNi34sRu3BP>pVS&X`bpp#h>KD25) zG*xIG4XO=H*N>#-d4al0I*`UaWpRndl4@|5%MSH~Ol94;s3g6V$xRGl$TYjYi zLt+eIO)X;{Jgh^Si2-F{wL75T?Q><~YC=rMc;4y*l2sD#xKNy5o7N!bMz4r<=fbNC zmE%S0LE8K8*+AP<&P-1|b>v9a`9m63KI6F32set86nEoGS^nonOoU!uo8y*3Ry6PLA>%LwG>Ht3Gelbv5onsibE()6zCx<|%+3m_S(p|Fpq9=ndr*c|#9P^oA10dqds) z8_hpSll}S-?oxW?#dF`>*evH!5Ohix;PTaWFSn}_v!?0vt#r)`Vm>bR)SxbjIB*n= z7|}4~z_EBN_>bcHEqmbU;WMB#Wlt_j;&qps?$Z?^>0t@?8#PA5k|Xo1X;0=*QB0T| zUw#Ld@w$LnH>@HmA!Lff#M>BXYieM#|8HOeVf0)OoU311|A2x%q8p?j?e&yn9Z@jEqtoqRXP(JQmYWHp*^>8x>ClH!tB%@SND zSJ9kKBOEKd41xIs2Oc*gLt1m>dl%mzyFC=aQN0jsgYpYRLfT4I5Pxreu=9TKey<;9 zFvph|8~pv&*n!;G&XS5yzxx@fNsmli58+P~l8MRK_KONO}_H zn^~pDOhT|zeA7ikgB?tCY?}$cC}n(Bexja3>tA1yqhZHoj{PPjKttjDDP zCJG8#HD(RP^4D~Daw7F|A3VnqbyjkmJWMIPVHmiQ;9<^>f0tv3>~PggIfTJ01m2@| zxqV8bdDj^RdFO!R#J6KRa)rpiZm{crX()V`K%#8uH}dlb{OtXSe7h$FVj6Lm8SfOx zVOe4Cw<#da1UrQl;`qL1W?po( z&5I$2#dS#hXN4I0Vn+vqU5@}<)%&YX4bi9T~ngcc|&94$|R=AqVAXF(1@+?QNA5UqeNh2cP*S5?i-G@>jY`%3~N<6 z2FKXLoXpW#9!_{g5uW7PUHd4s?qz!IF&rHbuR}Z_g)IWBQ2UM7AEoC*DhBn57&Ir{ zc|kZy=ZUr1{H}*{6#vDJ!eM2@iya*w?A)qfJ`8q>pdi2mJAb4}dAzc!U)bN)=$HJ+ zt+AuIgb+D8I`T!H^Wg1U70{CsfO~)?_-Z55=`jhYDfR^7R;2I`2w7M$OI4?7y5}oN@S)6wL0iNF4;Ty+_J&?E|JVnZjnMg0Jk%ciJkDz?u zeJ!yhcJ#w&In%?s^X{M`mfKaGTO%_#Wc7)&rKzNC#J|)qc4QVORL|L zR$Ekg+$RP4%KE+UdH1uj<26ZIkyC6TMh?>{rx&}}C&G+R1fwt%U7Vyu51R;=`nqOW3~#1Kjenzc3dgDau(_%#?&mP9H~;>u zpw$l_ir?U?*aua$hluhW8yFS*YA*vwmUcx>=ZMQz66f-&)fCCYd(v!VYHye!R<;Bp z3&J;mtJHeBlWJRb^I?{rqGe@2a6oIamht{F+6+8BoJR6{C@2$i*u{zysjpXq!L|oH zSlHj1(e_HpCVmXsgPZ);xZb~L)qn%pQJ(j4rt*&7XPpcv&(B%5RhhN z$NB`4Blnw)43QBMMk87n{`F94oW6SxKuy*qiF{6A5~iS~aLq+Ik=YyoltyO$o6v}c z*CwU`=4rtlxwk^$KgkzCLg}|~4e_?* z&PjK?@@UB0Z#iy4sTr*q6hKk8eNn`plVwXSk}WlQ9J^rb^MkMvVKK3HauYR(5fX{K z4{95LqR|<=W<>+$OIS!ERCR8>Sz^#)@_c@ zEvxSqr~61aoDZ^eOH8wp^Uaed>FCn}RQM-S=re$jE|hD2=oAVMW*|`Zxh=ov!`wEk z31)1B9Zm650>HLs&8G`J?!)k0%85dSN2VvRy1m;{rbq5HE|cf!?#KgWcg8-*C4l^@ z;F_5^(a~#e_P~LQN!R_10CfgL9Rg8(AnI^~SvcRtQE*)urPTIq)$vvJhk{*lB4>Z7 zsyD$d2@C@J0*9l(;d{KS#iEb)t>4254KwrZbu9;hkY_S#PzB`$@u<+Y?3RPo@VjD1 zUCc!r+nYHFdU5&r1E7Ufov4P2XF-UlJId|Kc;O{Yjpi<7Q1@u0E0#kiGHau+RZL0D zA6JNNitqz3j#2Dm2g-JO1{X1QbMRO9y)Ip+qs#e__uwDCe|(J^4s1w>T2 z3WU;g2qLicwZ`%`5j)-oqRFi3$celIO$YY!fOlb`)xxvT63(G_4I_q@pj8RAa~N7J z=lejT`F^eFD-O$9=}4qStl3)1t%Yng0~QVKEqjssSd7f9*1{e6o_p6uFS3`Fd!Mgr z;bE!pf5~Y7D-)N`n72>R(eB7cHRQ4$+7hYhaOc)rrj5ADA9m^hfH$jNOKI1>RTHY7 zkA`t=t8AGX6+;y%!m{y~z3*)=vD(Wu;Mr(iCD66A4zq+JoXvctB}BTf5j{3=wtG3liTXeSLoi7l z|MvJ7`1Q!uoc7HRm#|NXpKAupnUx2bXnzA?JsV0&Pg!qs;47kc}|0w z$XC7L%W_&BKx03M;EOo34*x8I+QHUvD0MYP3PQx|dfq6PlX1X! zMk&rxc`dltCY_wWfOD|v=7_PRSgG><@bjdKq}xfqSP8Q-e7UH8tEy@P?H9xYYXG9( zw@waNao;+0dCxhzyr&=|xd{j~Kn&(PR33s!RCDK(qCFI74@0!h@l?jq!k#&sCo9za zDuqyv^bl0OKHDC^B6)tG)p2YPGYECDsxL&fid~R!d!8~{KT*`-Ek&dEuAAr%t-q#7 z=qn;>#1KH_;3m}`XpM`D(Tw9Aag*3o!P~_&vO^SjDOAe!tV~&S+}ckUUCN%pWvpIM z&Mhq@de-sqrsmd0=P7GNStBh}E)U=_(Q%8YpFK^S+!xY^yNgUGzu(b;=24kbo;=v$ z_l{QFt;`Y3Nvu6E$3Z7jwuL@dm+{tBRrl&sJODO_=WVN&2Uh(UT^`=L?I%zJ%~pV? zZqn*)$zl*Nq{0TXcdiObQU+QkcBJ#5fLt-i(OWT(>QJvb%(ZjiY#pfS>7QYA)TiRn zs4G50i6NakqUy?z9!81;zD4_UXvqcnVU&0{2Z^b%?cq#QE&nj_1(!l?UF?~l1PW`Fl41zQgxB_?zM-@|X1|9E0Wrq2qu9Fow)s z9QjXl@Z3zX7~bXiq zNbKHMt6qzaO0&u%+j1kv_tYG63i=`ezH4o-6+Oh^IubmxErkByIjg>p_cId{Dz;We z4_Q$|u+Z360PeGQ+S@CV6-UhSU8;+^O2aW#;7hWA75;09@FNHEnuE+A&I<5}MY7=BP6baLo&XVv?`uZfR@cfj6WYw~Hgs&Cc3c73025U8YXN41}fy+3&s zl-J?!e!rl)YuD-l&Z9_(gh<)yO%ztglB;HGJnt8vCD6WD>NWhxr3KwE98bqnoW%j*m#L{j#%%-N;2;lnMJ#j+}8kUn>XKQ2;89*cI^vxPG&re0&PzSIkEvxKE)je zDB?OJGFK+{Qt_;>8Pp*(o9;`2U-bMkM*!+f6Bn54Xj!I6;6wAAhRB-^k2j`UJUtk$ z9}(zAqKpxm6yHLT~FU zz}tMJ@d_|fUT{-xaMPr+?a}F&A>VjmaMNX;;HE1*B$S|Rx$z7VC~##i3BlM=?~TWk z;0>AaR90h%tx^D-}jOFXBU-a!oY*@^WYtIx}h$8xOTzj}x znG-*+x>}^d#DGniw%a`{mgzfm zv0O^i*isNr;6ib}V!=G93kE-$7L0djmpS4hTm{4r#Z2c3Y?W%w-=5Sp(Vbx=kB(T_ z#}1+wyg)8m;U@I(u^uLz=1-w{dC%dy8O>|sgLE=aj+TQ?C*P(MYaX)afOUd&wu7x9 zU~ZHC_OE&f*NFDR;jJ^gp_Ktud{c|j%^E= zcb)*GovYsX7>3y=tKZ}v*M3?=oiQ+zv{Nbv#$&u+ha3r0!ID10o`QIM+(KXGLu*B3 z4|yMu803Sdo8>9a_;>^GZdE8UJ~l93nCk%4!A;?Zy!i~bI+~37Q&yj`qr8wFU(Rb3 zvG!0>-h@W^9=TLJ2yl)=JgniRl{Ql}OIT6>%W=9z-6owamNrqYyb>9g$w3mi9*i)k z&dV_EqlUI0d{^v0n&8FC+uT!j>IsUh6)W?CS%nd#cz~aisS@1%rNsFru8(0IZpgV_z=J=?JESUCPhMyX*I^Ye{m^ z@_WH;;u<^D|N2S%_D^}g%}n~OD8aC;mFd&;7XOrgwAnMwaA|X4gAr1tyotq+@}KU{y|L5RNpa73I>@20b~Z;#A)G?gidZH3K?>f1l)^ z;rA>2lkcg2k}rrBd0y<7S$TtvDeK8I8H5;`s-{wc;t!_ns73fN1>}<}Cs5}+fSHNh zP}PRy)H2q-S;!_IyR(3Xdk9cmpF9u#eq8MR{F_Qac;`i4#LCDdCzd8#9pMT^G-720 zJ4K6@c@U#up9cQ=EBls&`AEEkEC=b)O@X-uVIiS+vghh)!IyZ1<{G)9o$UVp1?5f> zp*5!!1$^>F_Y@$eZ*bJeT~K>Ybf$e{;p5*0(ns!{e50A7qy$>Hl)rR_T~NBSL$sVVretLDu^_Rx2}r@t51DQS zYlVRI+ca2@UJh8Cwzyskc8cOq;8^H@RSsC|^MPoVhj$$Fqm!5rPAF%q&8dDin)EJk7ChD3H?+$K)Cj;peeaVxD3oN-{02NXh6g$w@*WXcf7| zMXV<++9Giz!{Vdk+SB{O>9dBMMP)#Zz3UM^0B3kbmvDd#8hlFk3;ri@fb@7kn7J8fZ(8<5%a-r4&YP+uaSpIDK)fy`_N-Whl0U4 zw1f45>{a83)~730t+^!62?pwAPmGJ__2}SN*U^4()7Q-`Zzx%M_Y3@ijCyj`eKU}4 zL$pww<+61xT2M$cbB#RSN{TMW-@_Sm%;WP!s0enpfl46isfJXUDSiFV@^CEha3pX6 zdR8o_upWj!51@1Tw}gM^^6%&T%klA_hkvKudTxL&*2{YRXvgMNEfNnY8F?>yFrszUg6M=wo(wUD>ch~ zF72#Xe&u%S605^+b@*i8NP8u*r`*7dGR#Zug&YnV%zgjm#wfyG*Et}=M@J0CwSro1 z=q?Io2u1(eg)EIF+3)4_s?x7rfbJr;pE<5v;s4TPG1bHRrqR1c4sMst*If^fd6A*< z%Ub&Zw7=rUQ&)a5d)QOVXT9lROTqX8@8)0Jci(;eZ`gmM&Ao4nG>!G)@$oO;_=q6O zwAR3K`c@KMi z>n6YHtaG7f^WQE&xfF8D_`h^=+4cs+axX6zG?;p-S(9OhsX=4tTJ`jB)SNlIl#80u zuqZCF!Jca7=VoK4*~QMA+1NS3d0bubbHUs+eooL(28txMT>B~WNkx%db)6Fy4|nHT>9tUw!c6ngmy=^;GU=trtI}- z4DK;@Z4n?|EZC+Th>whEFcTIjXCh+vPV>84McEnRX+UhnlO2J|+{lF-Sc|Hj!>PGe z?BGh}MJ9svji>hJdq6{22v&r&r%dJ1K@qq_D#L>_ewig+w^d7i}%? zVi6!LkLvdlE;JyqUkHBD&67K@4R&jvsKd<0QvvCD^V*3FB^5`kd%)}EOg#jf!05s! zrgq~@5GcfnD(Yp5MR_f;D?;Yx5DETH}@=lJ%*%4{ZHa2ogPy;iz~jKJQ2JEvzSON3;$4-0t6=w5j-iCFkJ3p0z~dg zWjk`0kUn_Wp2Z&1uPg4}&5YGLNX;`LaOu43l4pE;SBXi4DEj`mBGcwo6SCIhW^+>3 zZx{bOd6<^CQ>alSXXmTGvM@clVX0~?R1qI{<9+P~&|=v(^d{SWj>05~5WJHwIcOoe zdy9gbtgF8e2*tXK66bXHhSEPniOE0DNy4AT+dI2^F%WW#`4a`fP3xpe^O5cXu>gdm zq4Q{nK|i+IFt)ueU4=>pIC{YRc(S3JGj_+!1E zTmFhpHSVh#rc8C{9mP>7mh^R;8vY3#ZC=Aic);a$XP5==r?{Q0H16b*k-(AsHIagc zWk*9*xerwkVP`r{YmO5iqWcX$*O;T%7ndJ-KDgaccQOeD>_H3`Dl04s&0BYJyZYz?nqiDD!`^wL$#n#5GJ@kft@# zd^t$S*+B$E^xwN^R^zp~KGUMJ!1vbf6YtxQ{SPEC2ISniy20e!vC8phNYar3rNjf5 z-@uHVx8UsA0S&yFcG6_N)*jl8{@_PB4~`2}Jjn*rpLc*@U^zK!xRT^jwatn@iuq`; ztB(tI`~7&!=CXgp@0M6zWqYl=w~`gV`xf`ttNKeKN=V*L{dKGR3*B>)R|K7!Pg(J$ zq{r)Wr9H-IJ+_;CD_%;fwefo#_7kIper-+1RyE(T*N$J2w|RYGaNYRzfpIgQT6cS% z08$+rs9yEw&EJNVSY7hs99G=-lnQF^Htork20j=l$W^a38zy58vaDb@vrc z`djv_?DSbQN%>c;$7b?vcrL!4lKThiv8(wuJa?K?_gU+)sUy^#=G5)6i?e#%a6ra> z_d$W@o|pXgQ94Cs zL|Rk^1ZV;V9ZAw_JeH!EsQ5?lp4a^q1Csbs@cwQ;tg2#L#k2CYA}$prp-YiNK_^+d z)?^nLCsn}IRK06Uz(3+&D=KzD)Tv4opsFY^;n+_)*aZp!Fy!VB%@+~_W`C&8zEORsHADy zd0c_f;xZ1+kO4R?2re{9kl-W<&LpYF`6-x|pWF23yYh8EW7}HcOp!a0q;$J;XKn1H zik+UphZ(sH#hpS*zGrQWP{i7>Mhd28%ZelYfo=KBMpniQ9?~N6NjrzExRKu*6$7@{L8x=Lj<> z$<|{T@QNl8;#NK`D~Oima~P0>Y-6!`6m% zWfDH;%Gbqq#L4nUn5~wA~ok1Cy{LGrc{UglaOX(T>Ue*lmJ7xx- zMwp_L;WHQ!M!u=$2`jFC48vBaIK`6t7>tl_Ze44`w-xJEqVmI}+AG)czhl#&rkk~@Qf9Qm0wg9k>K!8g(~ zcu&?0zI+T9ecsyeLq+^zMSO@3t#~1y*$A_`3I(W5HM^~Nh;P}s8FM66Q*$H*t**sR z#U~YU(h4HXF)cXwm2|7?TBpMAwSv^P;#Yq}1xZI5=Ti$yO)DPelNszEX$B=vi%Oki zW>6cF8Pq1yGbqjK#7KA4cIHMP(^P@lNs`fNl8oF<%AP^N@-Z`LhR>k2;ax>N?0LEj%MA zv*HK%l}!N^8zfCDNKwRMr@{`WLf;4#Buy(wQLD=b%B*;fAZ}Cr<0H+T zAEI!4qZ};a?VGI)5Ax-`pKcaI&Wc?WV~U} z&65-FuruA=oxo;2_5#gX8~5-Ty#J`b`yGG9W0DbX@VZsyc#Nb=T6O~!8zs%U`z}7y zRpm##A=jWA1?|HY!$ zR7!Jc?6I3E``%9-{R9t&yhCBtcGz8yO2x;PlK-%pv~S!>f)^l)FPu??_1BD3?2WII zv~I~@aMRNK!5LR3?Tw;bDPQuTld$Bdz3~YWW=x88`_?Tv>K6O3d`U9)S5NepwrW&j zJE~(n)v?b9JdTFN)wXEQ!LDx*Nlk1KFi3pH)R%BMg!WGK)Lda~YAq03L~dD7$31hE zImgZ3y?gW3;3s{XkafS(H~e}f^I}D+r7u?gbCYNVN4!|!vLq~J0pjb=NGW_yhP3V4 zpL?I8rBe4P$G^#6AzEmg$5=)R2a;k!hW=#AG^ znycSZO(N=9$Bu4JDN5CgD(6fkbod;+p%xSpe*+DoS~(DFB3~}YJ}+%7nc=iiXo{US zl5~C z)Y|Q*niw*tdbo|jw0@gB2G%jr&N-69%@Nl!nD`y<6ikuRu1xsn55 z&0t4OBA-|uL`Z0EZ8gV#S8NWMEv$x_E23$>#Y><3#J_Q%xv8zqeDkj|P`P}biiv1- zl{T_!D=JFtNyfEtpXqZUlxGX=i!XjhqRxoZX%N2>q1w>#dvKJKEv)0``JP#@oAQKZ?@W6Gbb;Od^$b4;PK8G-6$}8DdV!c(hOkLDS#bLoW#MEg@+c z{i{9T`qoFz2%jiZoJA&8rt*yxnYgAz=Br6DuO5I}I@G|k@+M#OG`pa(JX$Pae4-N> z3zl046k`O8a_f;=d6U0=Y8&@niK7y z^tU+F;W;$0NPo$#bfORjHgH1l2i@^2MtOKCgcs~OZf1M}Ij=Enw_h{AQc#7-b^Zd% zz$bUUF0tniJT42Mst0G24$SEb&9!A}(sw;Jji2_i!8jPfUu=h2KGfb- zl;Ba^zE$1!Ye3GZI54jCxJyf}TYjX-ZKBU_nzB`~36m9p8z)IoZ1n zO70%WtGvwDahiRR{p{K|CUduNOWyq0t^>2}Szmqr9R+#HK=eE+#@hRGq9@Bd5VEw* ze%(B6yPP4|xsxH$hcKpx__`1v65mp8a>(WT_Wq8Fct;Y4%@$00SDi^1#=n{Gz>6GC zatL!Qo(Ehu`23r(r#x26p*f3qe{t15J33ga9Z!*`a63+x%Q+yxBdfXDT%H0TvS41- z(N%B3aRguZr!?$+-~L`)P%1^usp*2J0cGr|WLXOyNXpk-x&|y#c zb#SM|86U-$cAw3>-CE-Eq*Ai5<)a0g*Q+yKdn8;D2@MEo6Puna#yU>J!eVJg)yHx*Apf+OBU zkjCI0E1+Wh1dEPr$2-4?ALgBZ2wxh6FID1?5<99gh;fSn%O_a@q$2^q*uYgZ8vfgJUSArE>?z8U} z*c-tuE+2iS{sd{4T`$=ATV)}GX%=FXgZgZ;`(K7g0t?g2)XM(Q91yP$vWgM$FHrUz2yZzNiEgMYQp-kuoWYJXssLF7_; z*&&r6f}QtK2=m18gmQn`a;$W#`Z~swRJhh2)4z|Wy5%i|cdQ%OkXXwn*c0NB-wYB0 z@ok<>i{{l4=IL+N9AE5Krr{Gkb99%G==wMf^@-1HQTPhE=Qq!*tEgiB0_ju8cGcOK zn>b8OINEGqM=_Ap4`#D8-)+yE*a1)U+*td;930fdXRN5P8CJ4-sLeMStHhTGcFKKw zvVJhJL9uOrP}y!=zr~Ijv^^g(fL+x0VM}nD2u4q_AVjROpDU|BY_%VL{;k;4o@9L= z%-XDa5nsn@=@-TyJyRc&(6L3KVxFr(()vLCMn#UgM%nutG%mR~z10-${lLC`gAyPm zCH{*eam^I`3qL!|ECFtgr)4l`^}^4Tj{H)!xzU6sNd*z&kiZVeY(g!u_G01zP>$r$ zh!BYrHQBBe*=$^$RSQ=+;0hqgg++ENkz$MNS-07(BAksbd(rHY1&)LT6Y41GspXeg z?x`ho_`m7J3A>RJn+wcY`&AxF8x9QTZ)yVXQ*(*u--LK_MHYcnrpQhY>-X;S?u!R( z=f2sVY!}C@N!8w`psK$)uhnGQmm#mk4o$=QL~5!9;0y8uX`_-HZhoUoNHS!g*j?(dw#%$9m|y|do5fW_w?`U{_A9vv~v7;s{f_f z8=n4`h^S@njJ@lLH_FkdcQPfW?3I*Uo&|DJ5|gLA6zk&be> zM}IQNmIKx@LwqiGw7(S8v>cL2uv+%tS#hN5C~mcm;8VESYUzs?N_?Yu;p({WPMEi> z+~eq<=Y2;_d3p@4?|uAkA-ap^>>Fq?hDm<>^Pl-XoQ{a5-~JY;+!j!8sHY{Sl~YCt7mqZ05zC@FZyrHG066SBGw z+{>m~EY{?ctLhy~0C6M23lzW6xAv_80>E7ryXmsW8e zIIud`-WhzLCw`t^Y~j})%>lIt16FirdoW&GZSqcJWUoS4iPO<~Jbn(nKO!8$Oq(bo zh>=A&Q(%kkwA&96&uV+@z@=sTTVva+iIi$BJ7~T+NeyqErrTj?2I3G2oB4_RY@Tne zf6%JmW7TiA>i2J93nbFqqp~!{#UWEpEG_q2?GIV)FZ9pdq8nVK%pS$!@#{#c20Bhq z|0S$(0}$5k{=HV0QC&=jxVE#tJib@w(W4YkxJ zEiqv=;-aCj9#vOsh4mus<}j;Snp(BdZhvBtJeGVk6*S;woPbZflN}dl@YeTP8ZCzx z#C;8mDBbl+`(L0*QlxF^_n<&w-qGe&W{{xS;&uOP{_<}3E0xi{j?akvq%o;>3ugBS zZkx=?v1#P~Oe@JFW{GmKMefOzH8eWqB;<|fMie({7ga_3;>Al=Z9tHb!wEn&I|Q&K z1y-caLD>C*bbFhFu)nf&oNfLS01WGgtBJ^hpDZ&YlVmPbg@(JaZv}CPF6`M&US)%m9NA!NCO6tN#$i~;3JL`X3O_6n zFt!d!37J)Ib*qM-fyT2%hKc6Lb1E|MW={rpobT2cE7YGkZosrJshn$N>v$8Ap^}lDe1nj-$;s1qW%`HVc zI^wD6BzQl9#jsOTp6m!2rzSC<$G=if9ld|k8p?-K0KwgVgJ5PZJ_&gCn+xR6fH_zG z^vPoqa*Ub^;zT)EB7Zr97b&xl<5WKIg%W2Ou^N=G!d=HoZatDauUeW`B_LgQM%Ep} z!Ch&KQqtC=5@cCM7+iO~WIi2y;Az4cc7p({EalCIwL)>Lctkx?*=#=HfG>S~%V{f= z;&-SCi$}ZE9PGTATvX6Vu_!0bx1Yy{^pX!8hrDG{(Fu0LoA>a*(`QRH<$<#$ug5+L zL`77WXle3NL$Ly2zZ5-*A0b(~ZFKibC#H`8Ba!3DDiIm|jK4em#HB9lgzCWup4CAe zAzIB%>A@^}SLZ_N?~<}0FJmx^hFbpxxx)tYMNZRF@lL6zgOQ-~O$}|lfMga|y944S z?jHLC8I1j`{Zj0@(h?8Bd5VIT+>ZblQSy-_{);vcN59Z)p6+uYBKT`IG~Ip|wLC&W z4ju)<9EitJq#R7xgLqVw3c{2>jHM$YHNYT_z?6lNe7{J?Seha`nUnkAtyFzRBPkU& zHtBraeQ65(jrP&Roq%?`5UZl>Z$`YYPh(MVV3Zazet8W&NE zVhQA&zcv(s&n_$`5GMx(|nG<0!QNOs<7mUFG3+qmQelCLkrQD z)~58OqFO+0d+u;mDQ6m2wIH`5M$Z47FH^cqGjCy4`{7la7%xX0bN~YoNMH0c)dBG8 zTpGBGQou!O6iEls1;VKJ4%l~fIm#Pn5XYskr&w%)Rg zTOoQ(gaGGAIi$`!Z>>G2q^j?R3VT7IY=^yvtFyAFVh4iO0)l2mPQILNZGwb7vZ|Si z&4{Ww)&gI`Q^)xURqMeO)(s`gUG1kX$gJJixodd*ktlkalnWOEw^Uzd7sa?Gc!HP0+O|QXI5Kk&SVb}4lpP) z`3uUM<4F-g5PJMCe#dSt%?WlMk_o*vuvrvH2#sHa%oX!ds7{W3vqgC40FxSuHWO z=5R^m^tj`!RFA7P+td4f8S9*Y^M-l!D&i1bluJ+{(UYENFYvD{GEL6b78@87+2{-* z@k?$o2v)=3@}g6<>}gVVv^gVH)*G>60|k*zr$VpVT*wf8y>+?#@PhbU*9~V z>6xc`L33SJHQ6`Qt}r@d%oleTXzQ*lM)2Wswa?|m!8=66Lh`O$;tO_(BRCR6LKO`GYlY8h1BYF&bev=d<4eCYsQxY!Vu=jh(L5hZH;0JL&PA(ELaIMyY!_A5 zia9_n<^V)hF=s=24q=UK4ls6mHfxJ@z__~BGs0NMRKBf|u^u%S2n!W?XG-`irY6N3 z=Y2lDD1ru7NoLzNZ7R_KNBY+P2&v)r8d4>;XL$*@X|3vx67kAZepz?J#28}Bo83>j zoFqcrOae6do4C4flm1n4j3?b-mTGv=9qq`g^;ZHXTGkG3?H$Fiv;7Qh61qN1P|jj= zaYM0$3_*7HTi5&IwM5i#)SvBvxbK3hdCv6mVyAh_8{6)SeLm!|{}Fu>+Y8i-sFFLb5+(BE zZ@5dHyNF{Zd9^h%-SHfQmyb~wF`$49{^<>1%bdVUl7Tlb$0t5C* zt#RM4n;Ou95os}GM*mxWPT7FnGo>cf|KgMn#tcZ9xhFyu`>gf@qMrT=lNV%n;zQL&48k7Y82wG@ zTL|ZPxW~txBKhrognVre_00WGRh=TKS+fW)f6%(cA0y0NcZhh3RexOd17i5oZ)}IJ z>W}TGLWN}?lsz5yeY5OuciM#o7TpQO=Aadm;0h8~km+MZ3!f6Wnnh8nW$2dF!l*Tu=1=& zquDbEL1FVjU@YOpV^jg-1pFIW;c_m_HgoL}86?9LN*CcrhmSdRSooN5i*TC#V*PZ5 z6L>Z=Wwm5tB%irRTr}A3az>#tFG9p zE3xWIt-7gJ-88GN+^Rdzs+(!m&9ds|T6NV{U7gbgJ8^wmoR=d%g#}-{qsUyPf2Wyd z{vM&n6uk;b%Y~W%VSn-iEL+a!o$oh^~dL-<`E@>Iq7v*WN_|kQK`uT zU+7VYq)dcHc}=X8e^c4x`BTEbX`(bhQWw?HRP*%9)ZaQet@-RekY^PTxl9a}&c$UA z`rT43)6`@3K-9trFB523)46b6-gG5q9%_xM=TsX}B2&tG_H-<8;5BjKmyzE=oK= zqz%t1lyQlG95~JQ|D*s5kQ=1Ci9NMCH$A!VZeED)sTQN?BvDBO8hP2QM9%81=I(O@ z7W7e(upG-f2)k_OI&mm@1ihLxj|8D$NSdhVv1ZRTW5K>iZ=*nych}8j-2U)h5sRIc zP9Yj`sF_P(FnNBueZfUQ>E1cV=`oHZSMK@Gk$Jom?viuq#3d9i}7agbL z7a~KaedYFeTTxTIwy41zf%sKSiJ17JX`IQXHJLZlX)o9XR=&Nc+FDp`x6QR$=h{2c zMxW4oYgpcWQ%=#gGS57Wg`>!x<>B!|$@%6dYWP?JTmOu?iI}-UxCCRwIVy|uU4S`2C>A(ntrMdd0ARkYl?)1fsgHw2B$|F`x&Gnt8??Y-~w`bg%SefIZW zd+oK>ULSHV%#pkBzB~?Jr`i8{f3}4WO-7NAnV!TlBWMdw5QmkXmOn7@C6)P}mL~*+ zLqz7f+CWSyq35|<jt66vDxSi7H#%X?w4>jnT&YlsSw?=)?$_Jt<1MfCv#Lk#% z59p15RR4Kw5dd1+;Hp-yT_4AFxw`yoGLKNUo_ijrDuPpF2Im#;gYKDwa;L}?CG_xw z`D&%k$dT*0dp(I8W))4Cws!dtNZ&ylX8Gdloxa%cY3HuU;Q)8UT+3gej zE5{QI#&{gXGAICP(As$!Yq#fS#71(h``fHn-gS+R4Q3xt+?4Uk0aq?nPwv@Wn5!M@ zXRp2bGW4^{-1P`$=4<$(4|@AgVh%x;s&Ss}EzE!;Smuje3DJ{D_6+$usit)$fBZ7R zqPIIpJ^G|ZoyS!`03PI0SqEhox7c_MCcZAJ+d!I}oyYl}p`J|pZo+2}D^HAr>|$x> z!6CHhh<_){jdc|EX43}z4swIpcP|g&Cby%r%ym6o_Oyu1TJVdfSwMw*#LE8yf9!=b z3gUuZZ53S1-Ga~na*#x?I;O57$}sDwxuWP*pDLgI9;Sks7G5M9;x+a0T6D!VCjFz- zyItfTOg{@*T!+;BJ$N;sOwi)b65nTz z+sGIzzc;=8z?_t_@9dKvg#MgXb_6rfs>=@c|2I{%uHcWomRr8bvwHLQCtl565)VPG zM;OL5X&hCJjCys-d!2%oMAd@tng+26kR*ZeIsWxNLm-J`Im3!gv{Z^;ug0WM4SWxU=C4j0mtqO6I#s;4y za4m9+6A(8!W~@l~zSL0)Ntirdw0}%Z{i2syUbLj6pYNM-=Dkf5fC@M@PMaABP_ zDWUXvqB&cVHr2`gL2YVd3dMACc!C;L-^220D zC(B-RY?a_YPm6(pI&hc+1DRC62n3RFwqRKF@v_>o+N!E+l&@E$AMWrP`kiY{Q9tUT z5WMH9k$M+5Q@FPyx(TuTCU1zBIzJoFFHQ#jcUaE#y3fpqkm63E$|1(JPv0c+PWFp;Dvv9ZJI!j_b?H z|9zU#7|t)OSi+;#faHOgj_O9k3Z|De$PVgHd$;n-<$}=FfA}8^nPyAOfyiBw)_IqV zO#TC6f+NDSz1}zxkEd|`CI$}M#Tl+E^0;J5d`o_TjKf=dY-mrrhbvwj(cfz?nfU!| z=ZYihTstG`yfZQ{1xl^C?&J-~+>{#-{PLyTfXq$YfONF(ero7I`>I2w#clXb?*Y&W zWw$xsp(eP#!_H?Az{Xmf<17_Pq!(HoM5TJuniJgvhEw(Q{l?lu&Iiv}R8e=iDff zNUSE@I9C(vz$OPWq>5EuD2>1Dg0@I;{Z>-u#)jxM^}>Mk2x3L>6G~0dvOOyLN|K>^ zg0bSM7+g|q%^Qn1{x+_od)1<^B=6q7LylH7HSIU>1#uY$%YU)ra$odrFAv(X8}k*r8i!E_Q~x z^tUh+J>0zkmjo#315+(@#x7xXz9tzmF^?%bGS_(pB|HFKsROmAI zVx3*QO@0@HesHb_Ke8#`z>+0s`nL9L2u^adbk1R9ce7L-S9!0D#_ZRpN3PdXp za06Yr%POCS&rcSU;A9i$xg0o2-nQ75>ffn+P*;QtH5P-jaFYHIq(Czh{BHOOI(12)beqVWUKS&WTY6CLrx@l zKSeqX8;WRllzqV!8_%iXznJ;as&O_@MJxQO@K>6y&;<_?5k@NkQPUlaBjEARli`SRN7q!T;C1x` zxu<(EJZSRx1uwPUC?8MeBe)Q)>Lir1w4X5+OEV=?k;4MM0=sLe2pmeB5{xpicH~uV zB|R;h0<7t-IRC0&vX^EI@h*-+(jH@I?FKgLuE;fGreStyE z2<6Kc;r!hAx%BNo>wE_b2_zp>t$#`)wSO=w$^#X<0px@8Q73p_tzVo(X)mUHw_X-D zau9jc4gEPDBL^EL18@CxZlo;}tIT%lz`WPqOCk?I>mOCoxp=DdR@FfA6-sWat{_^r z8{3n*eEL;I=bkZM=8Iy599&$N(y86@nGPP5z`V~?sW-2e-l3irn9LRwmBVLbR08WS z=^Z7oev))`m<;x0cI}b9C%2V?GT_F>>T^3Ca&J*LJZd0!A0*>PY9r23qoIT9-cAA6 z-DG zx{$mh{M%CU4%T5t*!7dpH`SN@W0URIr?mghf9m$t4_cWMOaN2i!{EVJJEF5I3 zCB{g$`k!BZYJxYw2dimC82E6Cz4Xj^g77y1PVQ6y&&-UL9tVLH92swSr z-wbm%_u7ok*<8gZ-BS}+x;KkcYn24%%vPiJv7b8&)HtGVC8t{NvDU}Z+iP{Y)7o!c zHsJm40q=!F((;@6$kgy4;dAi69=yU@=G1}-nVEf$3Sf9e5-|`mmW|htVXZ9Co&NHh zeR0E(GMb~AD4r~HQj&sQU_dVROMP7Bu9S;b^~d*8^JWD*lX?FjghK3<1VU+Dklx?c zJp9+likzM5 zJ6JL!rGg$FUSo|T;l4nIgKISLNq&+9;=&umi)hAidw63|vO?!Iy_Z}~8_Le0!b<*K zZ2z_{9G2d{^#k5p2fX(UcwaC)y?on%_X4nL0(mmYvi^sPMEH=^h7;eT1?$me-)-$! zU-pSM?;);T`^R2mMGj!Eul$&ksllu)`)Utz%pHo>?kCWY65z(} zNaa~t=$ascs{9Kz{{M9n|LgZMaHWm^y-+tA{~mB^{QnU6U+4KUd-VSY{7?G^|4aMe z|782`uoGxs{ouE0_+R%|@c+R6K5p`V2LJ29Jf|l>@PF!R2>v%lnu#R>63;^ctScjs zFMqO#3tWX`c|%FN32`HV2J*Pqsv?Q_HtDB_Szo#D#2iqf-uFz;&t_dvXy%`{afn=I zK@&Q1RpWU@1#wj@TX3w?V9#gd9m|n0{|E zfom2=>`T*^Bol;LiB(LWm`vc7)DfF9U3d~xhg%ZPn!Y2MAX<*Gk;OZw{~HgU2ioU^ z-#HR)KbdPww~BQMbt>$)+)$$R=i82SbA>4R)D+H-&Log%#UY!NJArg_{DYc$O8WeO zg!)>HT1At8tms8{&@8kl8+$nPC}b$y&l!xAJsmqw?wGVLwmUFP0yW~rT;0WWACyN7 z^3G0Kz$ncHW6Ph=F z?Ee^%kI(W^#&PAdERx(s;}`=`0(`G9KD2`B``FmV|8LY_QGvBSvUOmUrP78tFbEy^ z4`kzzxq|>7YPy{`{1fm4WQvf;XZDCw_A zy54w_F8i+QPDy`C()Iqse9)!0-_7c0lBoBfBQQf_9&9+(7bW#0HS|4pzNqicRNv*%C}ZGaz)@ePe)0!tS_@wqNwGBz#7D+S2CM$k zs&W#el(qz~#(pS@Ss$sZs0UU|&D6gKl~3x08}Kw6vv(Be`-syutH1Vf)UHo^E>+Ki z1(RM6CQaK9uy%)7HAj~S0x&xLF<%^fp2T9e_TN^U!)wVy{ zRU?qWq%??$+rjxYbyeIq=Keuy6AjHW1a_Fv*AN5dh`Lv5HsPPoqX#Xgu}x6Ck1pd% zIbU6bU{sbJ^?8g4T?il=TNpeOfuuZ;4_Cg4UT}9#cxpy4Pi}OB*~M*$;)M-(QT0A6ixT)d*9w8@ zq772!t;RCpMRj?lEl3EQFO{H-JIW~IQiBXc3O{WMZ=!I}9QD+T0RVr6hL!dYwzW=1 zny(%@kZZe*e=gEoG>Igz4yXk+gTlo9Kj#a=P>`YTMNji)wuI;IO|mhLvWO`CFHE^VL?%Qm{e^PJFFpBL+{BJ-x-_?^Se=~zs^VO zU5|nZnqfK%@x5D`>4AEFPhWh?rY&e+=yW{rvo>Si_y=ytM5AIs(bNVPK3ftM!}|v( zB`UrpS@H0cii4M^;DAc!(4W8}1}Y%|q06hlAEVdKMN=XtBR2Y{74$OJVt!tYUKQVz zg|0*nx)Md0j1{6Uk)t&w#PH)Kbqp6FSY$!%qjUmGL`2KRG0YTt0|1##yULB zuQM6k-iayPllKYQMBcnW>w-=6?KZLbW>_mkLvwYBl^31%xUv7)VdWOTlDE4U>He&u z@x}Y9@?HQ>)b7u9%niTqqy_{tp*Ns6#!44&h|F?d8g9>Acl4O(CX(8CALh3^&3ou( z&y#%jJh?^M&)SZW<&p5m87s3X5!$Ti;zYi@m|ZEIqP!$;oYtigz8^t75xNCfQUe z|7rfE0DWcLlog>eWQ1B!YL}+_eVe6`8%uox8nDRpEJ*{3>4c|6Y#YOOh@$rtp15PE z6s!bN3Z9jAJzaitbZ!8OLy(zz<9m9LT~6Mx`#z=~6@ih~{)^8n1XAQeA4*AiL2FP@ zf~-aDKs*Q;Yramlv?dlk&0F~(Djo+lxv5n^9+SM98XY2ddJNtVnX6cyVCFvw6=F0+ zTFCa4tlPSe%aYH`9d;OPhKBQjxQl4j%N{H|Wqj1{(D zz>+(Pf-|IoX+XskfJ;jRPfvpit^OZbFqzWpbn$f37isdpw9RKx63>%dJt!hK@ zd%$8n>Y?KxYi;n{lM2OkYJs7bV&g=#GNr$KE{90^H%Y%-C}f1Hv3s zRVk5*>n;#$xbiR*f?AqL32qcZ>TAn7wUB=3js|lzrd`|t zaVve(R47!`;*NUBTBpuWc+4%0~N3Wo{=X8Dg}#m z$oeGa@_lmhD@Wd(@JXZu$F|{{`!a&t$ca{OAZ+7zZ}gk-NXcBW?PwRnDKX^u8=dDo zxRh*{Sl+pjVb*JNDRwRlP=uA%FQ=fG5UF;V7q5jqR<+w0lu*I*@BqcH__jsRs;PHt z`z-84^!z4mMSRn~=1eCV zI9x$z0&4Ub8>A9U%r4V@m|`xSbzgB@fV-wnRY8=b?*nx6`T@L3U7&B2fSADB)@v{z zzd^FcJ}LyH)d;PWD70q>#$@Tcr>>@6;V{Bf9{8zkY?c^Niu9mg{4L;gl2zzQJ5EjJc!L2h901p;u-G9Y&RBtDSbPmzi*4A zZ>$kz$6K#W5T>IFmBQ%NoBE+YTHhX|6;#Nj_C}_v5wF)7f^Jp^*Z|SSF39P z8Wfo?utrno)uPp*-a7|GPUpblwqY%;8Ap#c`i%{h4xr2!Q{sXH>qF}B+#|v&Ml~7s zCEv=hZtL@*9s`@i(i>vQ@k^8Ti%O^J(dV(0W)g#dVbR}0k?HkVpG{l zDvZ!9k!o7=WtvKh_Z9E7w&!)^Jzp}bXx8$wRXHW7?ysCqFD8nYkgV=`zV780NvF>t zyIrzX=K3TG6z{WM%zGhk8--@AdSQ7Em6WdPkb;yLYq^kaj<-hD*T9M86*2aqR4|pq zYa`AdFr^s4VkC$+1c3G?{P&4wp(qHPqS>@zVuLbIeR!56i`+MdO7r6~gM~5?k*VSK zzOZsKQIj)dg&9zxr)94ZxlRSI6z}tOeAal+*8xJl!imi;2>BYE6S;jKfoQKTn#NwT zR=cb5sj1uuo!~A?mN)}hV9%0k@!E4Pz4ub>KT|1AOx}3a)&a2PH{#gjkE9(>TqE+5 zYB@_GUon!(SgQF##ykQwu$R;^s9etX@jYek!ocv>@jgQEN%~(+x>tqPC+-z>Nj}}d zCu@gTm+lPaEYYboI0f9NhF>ml*@W8+XbOB+xqT2q(ogv zlbUOCXgfoD0GO#>y6n@qZ*SvPbCQ|LQ)oAN)bxUOw&36Udt@4+zWB)fJZNV_oSdin z{|*fKyRU*&7^)3RZdDuave|{+*sV+jB1vW=PgNtK71jWGT#i+NcLO8700XX>+SB1h z#(DXDP*UsH)7O&qck@@2IT1z7T3>Ny9QHokyF55fUGuFzgx8ugi+Mr%9F*VEXC3rQ zpCIhuzZRGox^1Z_Pv=<>%2&8WFbi?mXJ7c~@#m-c>w80qAWP3?aA6P9=pe33Uq^AU zjhQgXGe~v@&+!YBpsfx3Q(0;zs3Kc^v!yRy=WmqvO!e=Yk0}s&8>@&T{^#0^n4qR! z{4>8Lm`p4*TlTG~)^%Rxe_QIjnLo)o2dT5Dv&P>{ovlOo!Y!r>J5Zh}J5=Sro78&$ zM*iBZ=BTrEtCNH_?GX3=^Xx{=dRId}v=-G4@me3+;s{la)}Iy|xYRzHf;>@Q#VScF zgJ(x)-V&Sf)FU*&9Nfg}Y5osEd*3qp5*zo_6XsJjpM({uuTgb;FqBP+y0V25#7Fk9 z;P#NV1o^J2n`sG0AO7bkUu9;@slEY>fL)TL=x5=zrg$GDZOJLuA_NN-)Tl2_(HQ=x z^6u+k6KT9=$#sG_piyB?}UBm|Vplnp_dcjHTX^rA|D^P`S7@`>8a7 zcz%Y9^~D{6cfPSb^L4;d+9<8*riZUHa5||*JviAwuAMT@zl`x3JDvnSxk#P6PGj3x zu~onns;4j3WuP`%1pD|`9;e8WwT2GolFEew7rn_VS=<-M(cN+SKJhfmB@5CuZJNNT zI)N-Fuu9+yVmxMF=LNW|Rjw~AQIJ+bS8k@FKHY~oUvL7Zmlit&jU}Pk>2u>V)&;xb*nOgz_K)EcZqZS1s&g%nrW7 zkvC4TF7mwJ_>L{ZLZJiHt*%mYq!_u~dN49SVmqSnlm7uZ!fe+k4d6 z^gCJZhq~OFol8`q9+*_82d3|f#70?=L5{vBa9TO>3a{=b3R(8JPSnw%>7%lm1Wz#! z$IZW#Z^xa6FTS5hsHSKP1iZ+ZBxZf>+HIy=lvR)HO)$ag1!#+|pTjI0goW57tvrm* zfcMYn!=!)jH^tHw9!GyNJ%4F_+IwV1`g@&!7pG%<sHxw2Dip=jf;^r@SJ$D2;4s4KUb+ZM4q9tT#}-L#y&Gx{(~M1&^Y15b ztE3`cd|MI@q$Ip(Y8Ja0Gd-IAg?`W^z!`oYttH5m*(;*+R;k8DgL<$!lyE8c%6)0z zj19TXa0_xCdN#LVfn1Rsjcdc~jM>d?LHw_ZUCBr{UxXrZ`Q8rHuD#q5;N~lk9bFNR z4YxW|PqS!Xs=ka36nQp};+*QQa)f7dd3J8!Zp%o9Li zGG!M3sY2!3ITCB6>6xkh`~u8kO&xJ;SYcrcvpRA29H~4IsojGctFryJ7LKpi(_AD+ z7DAu{xtQe;4E>QJCWe$UV{)%!~Ggd!3$di2?@tobKndyq?WDp3QSJ z$~~LwGRoTz6tutN&1=^w?eDq}B($TdP#(KfXVW=I)JbQPq#wpb%ap(%d;S@095fH( zx%(G1pVf`J1OC{3!Tmv(?nLJAN_)z@u0Z8eqOuc3uVW6Z8a~TyH=Asj1%nqOr8(%? zykN*-D@24C40LMusu^11$RW^Jg}ZgD>>z3sJ22&Fd^I*!O6Z(qtWu+sInR=uq20Jl zqz9gse~3(=Oq)GvZt35CX8?g^fzC7`+tX1RxNdqT{R!kw7dQ=OpBa~SddICAWaYOw z-pljGvY*PI$04%~<(dQovfV;1DmF6l*Udy<2XbQq7ci)*MB3FXe>oC`=6$PA>***A zmf;m5eDoCT8=u|u467AB77t!>q(g4<0_TY3RGE7|4CmMMI9a{MJnR&++RfNl3iI$R z+3B}8Fcd_dtKVW-;TI{5e=9fI3AOS0xFM{ntDcWj-PA9F_oxoM{EAV=- z*MtBvSW9$!9%4F}e0_6=9ii`t^#*cU5zKi-0|PPbEcz1+|b(^TA{P2%>N!xxV%0Z5&5luU$gJ>M9ZVfEtA;S@v%ugoP4K!2a zXBPMszqF1>$Q@g3Z=bt$A5p&e?r#hVkj&SS83Cep<9xk&=8D=Kn=Bu18c@>+TEXqt zZ{*v?N&N+{m4c|29NCW8-VqR;n9^k?ZEDOdZvj*FR6T_2M4(&YdtLMOL##|L=CkP| z{Dy?%!o3Q@?Ma?{7BT>Q(pSaTz2k6r9Z@G@6z&|ZF1nftolL&*X8n*qUoDc+iGd42 zHP=`oF3b+^l=@su;AG$PO=T^wG|u4Tbe}g=BF6Fy5YA2>9J_$Da|RZeM1gz?h}_jp z0r))#`+J3~rwr$Dcsop60pojTNz8&w4%sb!Y1`5FI#8bjB(e{Q~ugb}Q&y*H~2H za9n3@TNZel#a@<5D_EpbM_>}zY$7w^j;zYyR{qmQi*K!l8|DrLkQ8G!FdXyTDF;cPOw zZx?wzW1DcSns{8YWjV$?&CAFqGsC9^%-vKbvXr{K_489}yOLa4M>5zV+|YVWof(1L z*0t2lI81|Ko9roOZlNXZq}Fd|PLIP{odB z>bBB~2BlCA^?{z5;4?(8fGz*LZ24in-A%(8(NJFoEcqN{`|D`PS-caWKN}yVgN(Vp z?c62{J(G_Q*E+0qwmhMYw6;4h!xImcnuWFhQaqzWBMB!>@|6Br=35n*@#IRFdovZ)KM zZl4SSL5cfu2C=i$H^UVw@_lG+4~^5qY(s3CYv))eIpT9%rM_*A?;`Hj7dZ&A?Q4eQ z8cBbJa&&`Z)va=G%f@rd7Pfu+=?F!vhqq1%kt4>Aeg2JqgHGk%I@qUvq+KiLCwv#1 z`cxUTo#x3;_m@!0znUYgArCj$(Rs_2x=HioV)G^4K{rp-IBInl#Gj3b6`M~M83Ice zboJ-MzaOS#Wd(Ig1oofliZ{J0dW^b1lyNIj{ZHH?Wt)bjRcuJ=Sb24Zsj=1!ZoV1Z zv)$5*qzV@otuYKihE)wQ8C&AfI@*eeC_MGWiBFo^}ys)E4yopETOt(1=w7! z$jZbUNwBwG9XeG;%xM$!`G+t#BmK3PuVRv#_zk^w%sqx|QpbGsYt+BJFQxjGh9qPF z>XOG&z#mm>-;U5l6WR&u6`dRvY6J^)7yx?v3cVd|@6R0BpYc*xc)RlotQdlCCDcR= zN3@%tEA5bwv8b)e!R+`0X|l1 zSaSik(I;tO6Q@(@*ha5+y;_CCH4V+D9tWDo(3BawfU>YEa_q@=DzvL_Ezs3dd;d9; z*nk>7nN2RFWHzf3H(*aJl~W%EqNyHx25>?ZGgV^^tyT@xR8_@d@5t8mnJ3VRdIBuOE`t5m2I{_F!xO=a4RCM9*rx$<>3TOB};F;kt z0pouuhbKWnXmUEdrpPt${-_@Qp0*Md;RuS)9P(^B1kI^JIVzs(B)YC@`H>zob2OPs zg$g|*+`wOalCTL4^G!T5KEn%F+Epi-CNxs{jbI&#ggM0 z{kh|jtc+*)7mP<|ON{6KYrk+jx(70zqkl^s&;ApRC+HfuK;~FVT_!1=99HSn6E0I? zd&_wt;tx1%hhGXa&~pfZ#ljg()4yK&YhrxAM<^nj3Iy<(`0@a-te8vJr(F(=HY1c8 zTipmHQefhrg+D2l9N3LhPB<`zAz2y5SLS{`{ON3o@%;BSCmxUZhcg4xoe&=i{b9v}Gd>ZJcPCn09uKv#ysFu&QxO))#u;W3R z__h7-K7P0IPktqB7ysUp-<1E1=x-by9)pYBT;--BaE2EI!+ocU=EK7Xai6%*V7(Z~ z^>1b2d=7;=q2jOO=e&Kn#heE8Pc67Ze9 z@Wk+)1aI930q+|LXTa>qe*I_rFT+muzq9!B`Y&1O|F$cS*Z(cjiLRAjPuwrk{=?VH zwRKyt*gxqVxaJ=Ml5CEj+Nq~BR2mx4bs5Ce>CuX_)%Y*lC%Inl8mpkL8Y1eq>^RCT z5q}QOhU(Z(y^_bFr;q>Y&I zqFjE1i1oTfFibRppQLnm_6^Z_4eI-LX)SFo(Ow~m8K{4aqE#n~R?}@oEB#yVm)j;Y z=&Aa`Kffk5$=2oBn^d$i;Q&$!8T}vM+gLxz{G|`*9OX1!T9jluwur5~^~py+3txqK zZ6r(GY2wz3dHVrIzBOP;Y_2Ahm+&NjX>Q zT-KGMM~$~u@!&BFe^n$6Mxf@>x99M5)evf9tD@LsRwqPj+eOr-Hl7c1hF5~1_WXF; zm1pD^nO#pflG6NYy9#X}KX9}O{46Sp2y(lTt#kXJ18Dj>jr)L4fOU?+03qJozRO@@ zAsNQD!o=>g@~TzzF+C#ex3Qz9up@XevVOOHtu0--CZQ`q5Kvs` zf`(6358$T=6%!f)D~CK5@z23mnWMf3+}< zBIfE6Ys@MUqWt4$a8hVXApdCG6h7t*4vv<8YIl}0gIn*D>=N6HHi8dXm!rYi;5820 z!Ur-d5?S{(&a`qFun}S)>Tv#0!~#|7*S#QuTmvJckZ_3TBrBO|mC;})@gQ0HIMkERT) zv^Ky0zoNILSn@nSGU0R2bF#7kA6{|1^IXmY!|zFrN%27t9^(u72i*suM_&K4J}d+e zwcg$RzZ#DeOOEI4&mE6sWjv>U!FY7G1by{0n2i&S$L3#k4}{+vWJY7wN8{7$Q}iRW z&6sTGeb%-}?L&n0Sp2BE1Q-N4+#}JYe6I(*zPH)TW7y2->rEE*_8xeH`RdeNT3I1d z_JFU`(~LhW2N^wpp*R$>#%_!(egs#gp+~SU8x^g5tiIaZ2Kn)A87+H^y^|)J*o`qw z>UDH9;LY|O@!XS3y~jVqP8o2BHLUU93sqKU4zR@AKs{8To*UA{SCdz4h8_f>G2`k4 z8>~Dzy7)1|DxrVs&T57G7rB>Tmq+Ya>41PaU zBzCz!p_rBrLq374PV@ge^Ajzfp{H0{zEWLaT29EVu|LNy4KP9}^EqujQc^%;aj*4B4H`{;v-K8tt6iGQ5H|mw3s`rw4aC+Q<=xZdZCsUF zG}xx4Jk3KTsovS(L%mG&()4tDnzeneNF9kYKVhj8$Cn3ihJ>OE(A(gsh9s0g_39^k z1$d>U=D*0uR%C4b9luY@#Ht`Z3Ps^QaIM7V4k@_adK_ep^y+5t+ab3*>Vlt>3tf;5 zmahOeP~V~uLxpU*tmzzf zZh}54u=J&YvZudHsXy=4m~Xc4vc}g%VKkl=E$O(Lpp4yC1ZDm;Y0dAWI?We>z9dzi`~+#XIlfUf)~6GaBZZ**qZg zlNYU+uI{eUL+?67ed3$v&z29D>7C*i`viVX#tram(opBu)n#asE_QXJ(6W?QA$I~56K0qm7n zS){q63-i@TN!zQbsAFn=0_@f zRo3fzWi>}(Xr+WJg*1kW28YW1o(LfFyXMkt;wH~z!%~2-YS=GH9*mgt)w$BOUb+S$ z;>!tW<%=pZ{WmaVTjv7Hn*iObQcd!{?fgf&zT z)HRS;|zEq%w{a8rR zz-gM2Jcye;Xf`DE!I4}Akumr>yGN6~dIGJ{)|CYi%%k+BHOwt1_BKvzeQ7PkqS!}r zaT**=oqrUuQyUM@@X++6T%Kj}_MhRY-rz6gX1m%2-{6IkXb?-s0y)k_3r>qtU=WJt z!&?+p!B*&-d)SIe4mIO+O|@~YCNkP3i{_l+F5-+yXW8|Bmixlu9`nQqPR%$4<5Zz6@}QW)qz>|a05 z4fJQ=vR|#RD+l(B1o^OqVrC!S-tVYWn=?7&KrI-#INmC1 z9=H`yD<1&iE_QLblVvR{fCCy`ua-+4d65|f)(C5P0af85U>y5W4y~UjD@wClmu=dY z(oxRMYhV2|&cqzHCnj`QT}g`E)`{8FfXM_tAsm0nsRHUXK!+@729C9G@@}*Xm~WC$ zB@>9+`XkNUxHQ0UfukX7!(a_r_I-}zA68>sLr_%+;ak$a>HUD=ra0~zX?cAwH(|BV znCE-mzV%<9y!Dry=06MF%WoC{>Yfr$Qy$rKRfNeP&`KNLkJ(?ts>0g}=Br0^ODKf|Cpx#p^#Ulrb7pw1p5C`Yh=Ja9ga9d4wsxwMf5NBG92vKp>K7l=RH zJlkoi%$~>}QfD!xeky0oQvZ!?w$%D_k5~V1UzTvR+=s5kK|4-GQSZ`4( zk!ed?@0XxRfQA0`W*XHs1nvMjkGtNNrG1kXOw?Cr-BzI1@HtI7!}|T-;oTVo zgCK$fc%G$iCpw?R{o8M8dH_V-wrMc0cyG zDvrHn0(7+&u->BnDLQ+=g016YFY+L@O>(t1ApUz!rft8 zi~j{Q2J(*VvtE$#LRS^H-3vuAWc}6Ihf8tfjN!xb_mMiZ#a9<3Y@oXMDwEciS`Nj_yu`x1n@}`dx-3Wrcy{JqK zCCL2;cj(jG>PC_8h)CP~IzUbNrLk&jrnVtDQ#823ZG){>xtvq&UlW!!FxbR-Bx*z{ zUQbGfhOS1ksu!j80iiF(pnwWKU?)uSi{vhKcDHPh90jxW{Br&es#7O7>R!m{-64L7 z%3W&wO{lx!e`(30j$Lr3mZz?&xJ{k@4V&MltKAAl>GS_YIryA=dIWFsPz zADY+??-J<c&)N|?%$B{U*Z;N9x4>J#03jal%Ygb5Nl<7V6RHod{c}ptf~V2 z^%cDRlxx-csm;XHR?=>AqTaobTcGiLLoeU3lBXI^jpK zlf5uFT)cPSuZa-dz0MVfAaOc8n=?I|FPyMFc)Dlv6&aq*w`K4=if58<%j9`5&sm<$ zbFwD1xA&eJ-jQJdNY2O9h!S}8w{CN*|Dr281K;PkyXvwSN@9Fz7Ligup_?EXboqRB ze`@*su2ISIqHNjwu*BeaRyJeHs_{Y5tsmiUmJLvN1E?^IXdEn@w_crkPNqZW)%!0{ zpjp90roos%OFaUJxbL2Jf?8_S8{^Yz88NUHD$r9Ly{an8R$ziXEsw~Qr%tj0i(%sZ zN7Ah+CFPSmE#l0@8c}iukK%OBnmf^IpK!%QPs_vdHh;Xea(wuxb9ug%W!bwfwr@}jBx-!Xntvd^uvi*GZxOFFaE?~WniR{!2&xYXO(ZbGCd#3T z5l$#iGZaQaR=Z2i39q5hxc)+w6si`ge7_cji{;J>M6Y3nW_yD-AtkX^x<7ArW~a{% zMu+LMgDGA5>;UQmXGh3>xhhH}{|){d+mHYHyIgiqkMp29hb~J3bGn;Lc{Hy1GQh$H6 zWWEO0+syrL>w_95f4BPHxpME7z|sehZemFo-r)kxVb++$%zv6FeH5Ozd98pU4mWd9 z2TDiADHs&_6V6MpR@);kas|m-Gm;ooCnhi`xV3`#YzNTmeDw7J7_(k*2l=OARELXp{yUry!ha`=ZKJ`YldKTVbbqK z?xmdzoP?kmU8i*C0^;`iA}%DW)Wt!4DzkPTC{<2I1yd@gKPscWGu0*3i({VOChLWd zC&*(OM>JQ#bjtq(IZ9@zr5LU*jC@^@J&R`8-?2xc! zpvVS_Xr1QKT0S=$>i~Z}sMd(khT+vz?oj>LNRpP3Efe}PZ;QZ-s=Q1S9gtbsYS>IJ zCE8kgmU0`5rkIxS5r3kB=29el!;%udU)T~pE)k9$3;Y<%z`$M5How#H#G>Va*!_$_ zrefXHjWo_JG6K<3A*^y*OK6yy6))792N6aO4j(d>f$D9|$4VrwWjakS%5-*^g0>dg!cd3GwVpt!Dfexdye z3E!oL5IS8?{_u5|+k>2!&q^`Kq0h=7?F+rw;>2J*EfS=HKAGVSeO88-$Th_blYRxc zGgsd}%d>?2UEH;l`je1i9sm<`yXp>+b8m564WS{B>pdcq zwnK@@_7~j;pV|J-RuR5Nmw6w)7vh9D9p!%?!13!{mepY2D#R{<1UM<}OKJ$Rc+O`& zo2X-^O{-(J3V+CudmGmZWopy*(qqPpvcuDp_CSes$+DPAI48;XP|j53w;ySPs-z;YaR8^*w@qYZfDj z;ms;jM&#dLVhMpxe$4tXUWV&`mEq1vR8}u{Ei%*zelaahAL=dY>m_=qb*iwxT57G# zXG1V-!t_bNmc-D5o;r1eiKNfczG*(u`mS9+^`j`%k6v~?EblZuxOMmDq27UC_4?GQ z(V!=R<6xE?1La_cfLmp*#Lrr}R*(lsBjv{P=)e==b7KCEKYq+#QQYvi3XUhFm=-eB zX=$3Bb{s*2m{O;dvS&iL)O(V3P2grYI`?a8>{LCO!h-0b8iG0(tv$d%Zu5D+tmc~2~`5b4_?1cfIt<5 zPIrA>>w&>e?^gNqbQ^!vS<5s4GDVlGj|B;0vlK)xo0~GpaWRX8u5Gm+yg z4|Pl}00I`NO6zAb1edL!neu6%V=AH!;BC7n_EC#4 zhy+Nd%wHcP88CmMGW5Cgmzv?Y^Ou^TfBv-lw>zLC0#()&CT)zG6*(4faMr77&u5Ec zI3_^Ltb%{l^Yn!i(Lc6^u{G+*&LlPxDvt^Lr{{$E;PRRiQM(MpQy^i01jz9MYbe)$ z(sN)(a^{SCxqN?0%4fEwaqF0p!|YC^5V(Tz_(ck%H)mIrzCb#xAGg$Y3~W=bAR?Tr zg?n>6-@1-0thH{pUO}Oztk-dVu^- z3m)NavFw1VL%hf3F-Xp1TxHMTdzY6YV(>A{64eaI(K8kwD(;!E1KZikgSI~*j9!OC zug=NvRd##AkoeqT_ZIK$>BtDov|ea=GcaNT#O*A;mvt}CMYrhXqi4KeZ9B5px5IOf zD2w`@_e5pa_OuhwXDtsC-UtlxEj}D@`rZuQw4qG(bm97Ey|ZL?`OBZQ#6w_8JQLEX zPQ==$W^HTl%`TbYTqDUR(b1RIy>qJejy)&5^S}(tdFQJtd?159d497kYcKV#Ig6om zl`|>6-~rEFEwt!AlX1pQ^Gk%~*ciV{en$9Dl^?f%9~olV#`*Xx$*hsDcZ)!@ieF&s z#%UQa9$&RsNDvn)*L`SliDGuj#_xyPr8ZBY`EX&wS>&aWNy*pb`JmzRdO>+s7COFe z&WlLs(MagANa(pph>PLFk_LH1PqjshoU|FDE#C zhVS|1AC!a&gCo_d+a=1@qmi;g(VKi{5H~GxY6@Hrs}!kyjQURUuayqm#;kSyBA01g z&TH2x*ywPZE(SshfF0-DK-;^!ov| zn0G6y60-@D%1iTOUUiUP=!K3db+=|FAW8NvB z@HthsJF6oS+5_8+k1jsk^<}EC%EscjylfZJL4I1TZSu3pjz19U!#`$N?pZ8i#phqx zb*DTob4G%QCOpkJ7-l(ohisoW%6dvTv{uP6K*{iPWzv>(L&P}KPYYjN*{ zqZ8hUl(EBGBa0u1(RCuy?Xt?+tWYah$XEH$ieVA2??ca>BF3NaAsZo<8JW~ME7$aN z(pHI}sJDsw(#^npZL1Y*v#0!f(%w)jw5gg9^iMBCo|(fu_{wAnB*^Vyl&n0>T1Hd* zfK~ZK7I?^cQ8a&jVs&akN}E_CVAxltJa;Y;(5*z)tNx4>)C%s2PX4|0W9!UhC-&SV zC(tvTKvn)SQo9-fCjXe^BrTWM@$x!@f(a}vbeX#ST&WYJ>sC!v-?d1xUYIBudo>)| z%k=Guy4Oc4AF{W!xW}ceW92v4-K?AJ$OmHC#1|}kATn)|HFS;*y0$~TmRD9@VB(1_ z=Du?cqB)EWJk8y-!c3KQC$g79$Z){=wk>}xF&P?Em;b`5e8_hcsH;nKtm{E3Om%NG zQC-<{Qr|-)74H*&#f$fP?)q;!NFWn9mI@2S;JK&G6JcnUg|Du3s0Mx;kipAm(f;bA?JALIpO}*#mx!K(LB*)6-{5aD=`j+ z4g5MJxY-^498^d*8huxT{9&uI&2nRY(myF? zMxI2k)e0S+DN}@oYv{0#LEd?xjn+8QL(c#j++eymc(4T!W&1@5y7s_?-PRiu z+9Qh}!%je!e~`%cnCIGuvN}p8dp&n)5O;Wm5$J7JDrdz%&<Iw`Pt>AM! zPs8&0iiuQVJL%OFkDSn4f`cQ}DpQUS{!rt}|{8`>@mt z`1F0VuzjDyaSdox_!O*;Pzn7!E@MC;YwXo5AXoDRvuRVBF1wRI{MR~3RE3_v_|Kn>egf7idjziXvlmF3UY#oRDwJw; z<}6K)LW@G0Lagq>ucta^^|82eq7J7?B<=r4S0tf;xB$fAoyUI^q-3bY!C-Sh7{SFz z<+)V~L7lmU=F(AUy49u22)Oe{{)o`X)BFJ?!yPVscE4OMLO8u^_6v@ijh`!a+x_iw zoIg(rhs|mJJnGka)%KYpb|7aLX-Mz-nG}0nt-j*Z_)~ITVT!Ctq7@ftT4=?onh07k z59(*dl|uIHl!!Oaue{8VO2av1pc)*p^LfxT)R~5A%BG^&NkTJ8R0BHTh~*`Ui~F9+ zz62f)x8=60tgUB~CsMl`sx3PCe(6b)z^y%?e(*KUziu3OB0?DKKbx#wyV<~2*#UTk z;Nec^T@+xjD~klbap3q_fQa*1S?bxo(1GQ#*bx5(QtSs(j103SL)jrgP3uTfQ}lbU zyx%5Sf_tpp>fPH7@(Ph+aO^>8$8*6FaPc8IK?N^g(cg*Z>7fa{4dH|D(q8-IIJG~^FUV3JKIU5f7RN4C zAJiC@>nhQcmeGYExDHg+s6`M18p;BzEZp*PjMXZ?urPjMW+KqJeUT~`@jOC1{KDf@ zb(U(GTBO1qsq)(7MPymNdUu6XBmyA7WiQPOsmkyKAz#euq#@*INLOo5vk|h`mtJU< z7g08+B2r!yD~iu8;JVJ5n{Q29XVn$@K3sGsD*@J^is@%bBxY@uU!^v`Y zD<%wqBO2xt0_!UOO$eja$O#&Eb?mBpR=;07QT&L|M0j<9BXEjn4f}T;!gR>L_H;l^ z=czth$`qtqaM+i4av3Kuk$Xi+?@w*|7|r3*QbM)Q z$nGYAKf-Hhe{8b-`jqxxK1;W+B9pl06aoILh>7j~;+*?4{e9TvPwy`mDS9wZ=m~Ig zXI_w)8a=_-Bc#n&t0Ub$#g^w0=B2o&9_$wh9u(_}scax?HL(J_#Q@`6dE*d4gG@c` zmoo*siQtfi1}=TN^7%+Yje2J~FmeXc+MUcs3`?v}gJ(|iSW$Ax#;D9q5fLh27*ce@kaYl%5{xWN%T6+Bv_+Ez+F z+6iQZnzs$NCna<#tA<2ms(!mw-t=Wv$UoxvggEJjQeu&(O`#&HEuwqFhYntbk->@V|GUCJ0l#>IQPyq~Mz z56Qbo_0$;sPJm-i^TWKufwEaT)bDQ8ThF88L>ZWp5Mhvek*N$GFWucyx3G&2--}H{ zqvg3qjoRAV{z;bbnPm_SFR1B6JWGJrNfbBWHIt{P(-hv`bOCw8f6d(@H)%S4#*P{( z1pN}s_m4{!($>GM0Q3$q+yiIpkk)A30Bb07AaPfYX^CoscBPzEhhfRdX+ zi|<$eEtxc8xKn>t6ct6WO!#OJ0ve!fd=>bUKqT34*9^qYMuMFS8)(wS2UWcby{C9^#`8-`J+gN6xwSo3ym-;0TLF>8l ze7^s}#BgJ$`!7yDkJ4@z_1t0IC@S=60RA<~s_zy+<(5gb1hpFXPPY8U5~>&A{ry+_ zfx2Xhz`goasV0lW^L@Nm1L9x zPxB>ms^H?P@~|)%f+7;bMb9rEr5^|R5s zX|WWL{l$JdqN*9A+Ajm;EZMJK;RzyLJ+FUz)i(Xxr=HTk-9T5NzcDeziOqY1Ol1X? zcYRrQ6q22f)Gx2sJ7Jt(XnnmC5`E#0V65c5Sn>wFhyfv3Jk2@0hF7~Co)%FVF#2R2Rxsnjlg7cHo2=oqcTh2Z9Tk6l6=oeIQhF`E% z>hy2Xi}j18D39AAhcaiMtdPNFu-y7Y!Zn0?kXfcLV$=vr zq+)0I*Gscq(%!m#Lt5U(CZC zz6mM;^y1}(*4yDGg1t@+Hxa!4A}YJUuFTW&6B(O`Eff8iji=-QjF_(Q$q{;}#bO12 zJ-F&RxKbkedWnZ+Sj&0P1O#f0vnNc#W#~%Jl%Taxi7%+x9M`C==MWV7ZBc+BNo>nm zRz!W`+-JKfDDF>WeX~RotJ%d_nl0<4x@{y|q#WWQz zwHZm#&`Ye5Ss5a%;`Ch*Uneb!@_f@g%hQvQ5vagueylaBCo>~3Qs~mLE%uS)X%;=v zSaBV2Hv39FrBZ$!iP{gzS2>j#BfAdg@ZGVw)HA`#>2cr(zaALNPZS9lwcAiwrVsN>43DY>M$gOgDz~Q~a zynEFVzVe|!{lh$rRsU@s^3{Ix0ITn5E~F;Tk32QyLP(%lMTM~(s}mPih4L|rkGTKG zGmM%lsI;+2Y`9tBbLCCzgd)B8b+HXmp5|9T#G)LzpomDf>U;ekw#WyZLZJo3VmKre zIm)#XAN<<@C|a-QavWCG)znb=DfrRT2*uNUrxcT1J39pE5FJSZL9o8*6xaCU1-d-< zGy{^>U?9WOd^?ZIeF4{w4)C<++h6BhNDLxVb7tD|eq3RHgq~`)Uf$qW#E<@LIhC4D zv%CUSNaDTKP~6wAO~TbtN=v>f_5SQ6Tpg6empJ{N2H@E!n+bW6UtdFa&(-S=^6)fo zl}wDhcqdJMM`sLPPgVKHZSsRP$tESZw&bf)jr~pDX4i&OopRIY6S`4>#oudK)QxJf zrp()gEEKa_#ER&60TL-X+TX_MrVV#hO-<}{d|r8_K^gkj`|})=gBu8|A$flPjJziY zxXf(JuQ`#r{vT~`0v}~{HU1}L5(XHZK?jWzB}z~<*hYg21~nK$f^1nJaRIcgwPVCe zbp}OtC#d7&ptY`D)oNS2YV880m9+$fipyKYx}ml8rb8=M3IQVdf6uwkGfM#9x4+Nl z|Isir&%Mvx&$(wmXL&!{hf00!^RqZ2%$x1&GPm&qne6A}1aX*B=cLzAv{iCk=%Iu> z)}~>pE-CWI)mzJJ_zdOvsb1UB1q0oIg@$ zo}_L`YfGcqn;E)ls{jp>K+xmA7N(c{SUVWHi4 zR>{a&n}=)%sbaY!r;(wW9xyYehea*pn>rVG8Lkv^)Sy{JJHmaq{2k0;KR~iS~!Ll2#EvIzd*&< zfz-uP=X7bbvDN$sFwvU;(o!HuVp{aUcfG@Wi#s}XtZ&^Hty8+=w z@Y^pJq}T3s`*^r_()PX~rvt=Q0#*rwQ6vk_@ZhrdJ_S8)UU;I;4hu@wXGZ3*i8&7? zgog3u$F3(p?dbg2H9{xGX0fwjp#@_n3-Pqkw6G2Ajv$-TmL_w$olR;uh{U3x(uT$s z;{KUGY4bv$oF{LB zK+CG=Shj|JKMYAxV@Zl@Y$K9SsXIPjsgn6hl^igSrklW@{WF?4#WvAVyOU{xFLD~0 zmTu&l&urwa{yG^~&fTk#V7d{J{U3QU4||P#aF~(2K&WE7BEHXTq{(Zpc9*9sac!#&~yfS^kGHT z!>-PY^&trU1RldmF#^TM*nNLETtzB^^h82~u0v(6qwD+&N3@!GXXuEPvyGl3nO@-@ zJ~n+Oix~zYuN{fL9d&;8BF{O#qfTjt4$0n@*HI@sB!ai>=FZG+Zg{%6=O!K6To9_a zEH$eM}L>2uZNfga$5Ri-6#ZD2{vI)fg25wAXCE2|{>eC(Y+Ro%% zd;cPgIa?%#agz}~knwLva2YVzv+R|HgGE|f8*1goxocj!fp(ci0Y$u;ADihMEl9mZ zQF()S#v&EK`a)JTj)nr19)w42Z8Fn!Q~jwSh!}7&A`61)<4uY)gWTaY^Xy7RdeTma?p6Peh3%#w~I1p91D@%W{V`vse%5D9#x;Hf$V-Bw>Ey8}k##2NM^|3yr?)r>(wVLhv$i zsB#|rgNcFqIFR!=5KM@lQG9JE-ho0e_H9~r21?t1mB;*O^d+QCL00;cbndhz+pRwX zWOolHe#1|vF=U(JdE)q6h0`OE#+v9=E==V7n5HDS$o)7PYiHj{cB5JKG>QZb96FX6hGjP z4aJj|6G6f`&&vuYD>L@NqO99Fejv2)QlTMYezd)Trh@eaTUyMYfFRm;rk5mr11-=b z=Yp8`ZZB9*vS zi;ne$L;!}&r=xsh13C1X&7!BUmY1;}=e$_H2_aPoSyor)*u!)ZtZfeaYsPC09`htzlYvnJoa8R^O zN#An~<`W>qd++nkWONvq;RcW^!BxIa83>1wGQ=)MOMkqW3_sUoRw-l+CwOph*;j`;=`L0@ix1aUCA5b8pS zx^SYdI8j%Ua{}(=C86k%6JpxwyNij%*M*t@h{gs~2z|s%1f~+;kN4J7>7*a=4W+SN3!+8{7X7l2yU~PTB;!s zS~lssozoUyTiO_3SK6e#K2165qRwUROl6*d^|2uuoh~^>9_O{l8W$X(&ja{ZfP;3FHQ!wuoJo)?BQT2%5zpgm^ArB) zCoXI)y2uxLn!jJWpYmP){^fq2cCjy=g9Cb-UUA_d9mc{_bt_7kVsXLRf)@nL8Bde> zZ~*(ua*3V&bb|GXaw<9IZWL3_!V>4*@;3;bH`54s1{|@i-G~tmPMWT4Uxe%rLJ^4) zMIjia4*e{j8E-))^ z`Qi=c;;gquAm>(DbO25Zm>nu_2^e#jyBSv)NKS^GCexn+!a~qF*eMoGPAqLKSVMEf zZ6LtvTldOgcL6|--WGYFN#z)|RLnmA=;<1e$h~N$_h+_Rt6&Wa@nZS5g3SdR3pO_v zbnpg3ZPPqXj(A1qVlY!Oke3W^(Kzr0n;XEk1)Eti=%t+nTbdgala2ZFKDp(=Z~_n> zC@>4Z3~7ZHhBbdge8VWx%d&wllI3t)`6h0TX|jIY?wprhtX5ZfS8F+{aZwU9(fDq2 ztGqvXN7AQ?21Dn#0TODS8H0LXEii8m{Y!^kITDK<%;~}6lEIZzG*a{BfNX+XCiSKY1=4Z)SyXV z&kxG`hKR3D^h!kc85W%J9LTU>8#rUz%}1eNI|N@`e2Fh~gZuX+pV@zZ;kW!{(R;Gs zlL;U>lfc@}!s16;%hzFTu}ksi%LiMU8Rs2)73szgmM)m80}Ld653}}R#mmT4ehtyg zuC*jfe%Xozz_s7BP%Us80MNmJ(9u{t^t4EE9mVkt5`kV35Fq>Wl9_Xe%3lC}0Zfdkza_m2mI>rb zaLw46oC;|-F?knF{~Zk*aRkEk$w>nV8U)?*Al1odRB@@G&2F~?%w9D zUyy1-Idy@llfK_Jn5jI8ZzvVg;B;qZadK)Y#w@1uZb5mXeUvLbzNVCS|I9P)^wjxE zOolO#*TioqDLFB}g?KZS{}Ci2t?NDC(!}_O$g`Qqm;4qzEJ$g9YAN&ASh2iv`<3 zi10Wg77cPXIeiP(Ci-G;ShaTW=DlykK1vPRyB(hYx5TIw>NMviKzvLOId(k$n%{DoLeyvHBA zC_djGTHs^L18pJ1R%f4}avhNy4AWObz&?p<#WD@oO4z1jxf4=%7Ugw51AuY!1n-H+ zm;HRXO0Ma#`9zKh-r3A|&`W=$0{Gy`i*CJdiX zMlJ)Yn&_v}`qaQiW_4w{5;eGxq>@;tkZqFbK_6KvOeWZBXPEd{mKBp4fTSc*t&2l`^CF1C@?EilKrVvPMC+^vS!tHktkbvsBuI%hL7I z=||@zCNf9Dd$aFELv;o;G?EHuoB2Ck2?1Qg8ga;vO-{PK+r`fV`(y&q_SvY2zEP{K!X8Zevo~9U3ZhYHdt8oyeN{@$BKIJLqU8KYM2(cidE>@+Wp~cw`IdjKyJ68Ic6YucjKOq+PwSE|i zgmvL%rnqVySIUFfr)xNi5EBwrh&68a_U z9XH7rnHDtki?uq_=FlMxGeiD;KqRTE{-3#?F5utJSI&EM%r8MZQsrjVK+Y>TT7QDb z*?-dtnzQzRh>FM&E#5P}ln{{3&8;n! zYbrOJTe&?rEUB}2o*yem+TGCD$YqfClwu(Ua)HwlKrG&*k2|0A9uHLml~hS&11qxP z`t;ti8QtdoUAh_4t+PJXw_|(><$0M%FZO`z`6k-qMH1{$n~PS9*gJZGj=i7zTB@HR zx<3Nz=tUA==VGBEUoSzEKKz#p zH?!b(Xa*I&&$ht>I}Yz(!sO&UNsP_?9bXg9DJKAK&hNz7+~16^QSf(5>*`W=&G{Gt z1GD>M8_W|2xPRng5!y)AHB~6;&4Ht!PzcHvY_DTI^!5vxzsp0pEQ9T0u?oL(kTBP{Vf<%o-QS7%eLKiy& zP>VQNJL}~gY!};c@z$Ie0LS7CCqX&C{iYO)5+GvcbR9TCcrpz~7VnxJTqe|#vu&y{ z6J`n9;B`~xbrbte>I;!;W$V92Rd3(wgXWxn>ZYY?oaW)AggV`sSVk+QPC+9Bf>)S` zFKR;%Y4)(Iz=zed8FL0m7tI`#fdkx`#E#XFQ%6Bk_XFEaVBuX@>U9}$2pS@D#NTCD zm#BHj`Oxyb{;u8E?fJX-J%5)O>hCgVI{q$N=L@^#o&VqcUFhHXyGZ}7kxc*Z5i5`W z&7+^9sm%Dh=y=87rT2KBwe=72chSjg&;<~G7dP>R3m}QHmOAnd{fbR1bMmop-s3xq zxzQnZZV5TBxn{{`LqD;js?N(>G%Ny2%Uf}s>~{57Zb~148O*qp?)FufS1O6n>|7Ow z^Vw)tahf3o`>L-6;`Z0fJZ%bkaM3wf^<2-dcvtnJ(<0AEvtQ0`w!r-JAKL7d>2}SP z=K^+E!s28QZ2ueQ&LlXBCQJ%yaij_GDG?K3X9h~kYcdwTtHry2l?<8pB_GfT(Fk{m z+4N3nOxO&()C8RC1xQi4R?DN>;(Ai=1n)eZABbVcU5-2D4x~d>=JMrlXI$ktJ;HlKcQ-sI^=ndvbRxi*_FQ&0HW> zMJ$9d0d|?*4MEj22P5JPu%exRI)A`Fd&ZCH6FtotAHr6+AvwOfVKojSdFHCmvlt6^ z+VQN6xQUn}PF5BB%Mmsm>39+#C79++c0b!YJw zVZO()sb(x@_@F?D>~2WNo0kX~?Z?h{pX^huacNI@;*G7o&@TRbmm!Pe)5HDpDd$)0 zCq*j1UE_4&Ho}yO)iA~$*nVw=nK)si=QqS8W7Eh;KlazFP?V{lFN+U>SC$p0Dn7p< zPZ>{iY(SDmP;q6;?ATEVHmaCYw;m{2-*MB{(^LZQI&Eq;87OpC%lH7{$_s_}|3{`5(Jb z=W|-tn0wDh&hlaAqjQl)na|`vqj_w(_6bJAf_d+iqrSnmB}AWU$8>M;FPR_dQMbG>$}jg3!tc7hx1oZ2l?`>j2K4%`6( zM)WMeYkNMS%^Ml5*5UP@RNBN~5|ivyo5>!q;y?k}7yj(#NT*3w9-Z75@_TO|LB` zNk#OMxakueF8>50Vo$4p+__xdfuY1*dGbyWT9;XZ(LESWu~`!YZ)gYy>5&TGV|-0z2Wk1_`(u3DFevEADu|Aq9+=RgLX(YR3GiG`LKTX?%VO7kqqv zDRD8xJS`d$TdrvT`1}!QqsyrAbRPfU95AsMt#d8LIz%yeNlb!p_Z~=C4>87=z7^9B z40;f@CCJ4vA%uMofyV}H5(A$Y+qfOU!_CDkh~WKZbkOUo8DqD_`(HUjhAEedjdW#) zIk8$;{u(kw6hnQ5K>NE8Z4k#?Nie+KbX|8j)8B$zJ3%ajR zb`pIeVl_XTE{9-f_J|9oPSYd*=OLLuF+6T&^e=|0$d2lBT`!1H=Z%L9m4R`iLz2@Z6E` zL+W$xULF=d{OP@3_#r@bA%1*(diY_dDaz}GANI3`Y5cI;{9vfy2dJXA1UoDfP?Y5e zw%^8AIYu|hqsjiN$-5T?BjT^6=CPe$md9LtfNZ=l4a#4VryeM;Dsn-YFzYTTf1Yo- zpgj2lQ689!QRfLu1t{-OP?o^I7L{92{<3*%hXv(6l*AW)AfS8#yNBvnL7CJmIcFnT zUuK?mU)jc-*(AVZ7ody?*#qV0q(EQ<8SPGI;+Q>af#v_mQU6R>ew7+~*D5e$id*bp z?YD_cfdab?3cC#oyVcy<+v7V9#^28$ur9ty!MD~0-?ak0HKB$a=zW@~5H9qJ3#dD? z=4!xEU}8dX6Tk-o-r0nPM8fq#vIX1K6r15s-=WZ3YlP+mDhFidxkUgRkF5?&jW=*( zpv>@S+dC+Nw%z_Ep>4Ziznn|MXvs7qJfIhB7o?kd0>Tl@jZt5t`G%tUP-={7>#@-z zgvYj7LiPH^?s|6v{WHq7LLYx5=s$p>1|*6}ptH}M`!Br_pxCkTJ1=sDY?~&dJkAER za!E%qLCOJjVGqpqcm4}d9}Eqg1?q2s8VOMW2M(z32Gj@4{eJ=VuHK;j{1<(pzw`Gg zf3NVDLm%YuQ=D;#-Dr1rnx7Ic4@Z!?-DG8_0u3{`$F>m~e@F>5g$O0xra zOs>A04$?@Z+k9aNNCZcHP#lp7g6&gjOai$C+iUqIh~+{)1&h205|NBI7Kw;NM3KmP za}jrjd%u2Oo?5!Q%zc^KULo^{d91Rv(O>UlzMWnz|4j(+#9$QQ5}OLv7*{HxD=1WIY4E4EK^(+H?FdH4 z>mbv@J94@awFH+*kfFm5sV&_?SXvOjqxd??wls#XV{A** zsm>+|@kgPsn%2gp&STvkM23`Jw@_yxD2Jzuv!8}LHB??psk5krcS`^!U$n9{Iewfg zJve1Z`W}*S-Qqmem~5$UGX6}#Cy*@)g(m@0Ss?hglhg0MM3uec$H+a|9BUEAfN1kR z=hhINmdQ=YD&V&>Qe1)vLyyxfH)R9AM#eupIAFi{5WzDKZ)}QhE5dYsLD@Ld7oTp| za9-j#riSv8D6(Lcu~=fFf1jAH&?tn}g0c#C2(b&C@x!^QrW!)-mS zY#Q=onz=0dzMfQ8&vIV|!98WT(^5}{Iw)v_C#B6zR4r-Lg~^c7I{?x2e4Avxe(4D} zH3_>fX93lDwRk{{;ONj%BM+Ht{(ug~Dg6HMCddSF6Bx%_2WO^o2QAB7v5U-_>;6mA zb5(K-ILVr8na*{Fo$J+huGiSPM(kW?=gxHoz0Q`omN_lsm@5;-8P92eXPE47ZA{}z zBw6B}C4`6{E2}3b$SBlF;9V)fm<3NQ*oY}5VubbJ_;m3aTkN!qz{juEOng^Ll*af0 zCEn1_$E2cFR&As+RaR}3WD1|e@yDrxgU-T_lk*Qv^@6ZO0y1*;QHu#Y5`LSos~m*4 zby(_RA!32v!#ao#*&VfD4~lhL8P>1fNe?S1CCrrhi{Z@+nRkRnYNXE*eJ78+Hs1 zA7ZUC-Wx+SrkTXP;w>AeTL@9X9(uY**&QEacf8u}__*91A1UWdb{yC2>h$U6&SM$b zbi8+67BT7vjTW;S#I7%cAH(MjhY23J#E`g5KnG9MAYoZ96ORl7%Ti5zCT6)#6P|*d z`$smVeoT?--90glM?Q%>PlVBa=ay<{wn8)Jc-p#UoPMv+@Adk*kL9XWzOCg6vLy1eT=Q}gX&?-lpMdua^V4sa5 zM{`?@)r9oKH|rl)R7*<9w!)^$H62C84+KKy1D-PH5@C&sf2#B^D`s<)xXWcDRpPfv z!T(8)|r%jpHOQ`O{Cy z)RF2f@^fC%O2vk@eL3=oiuPB4`14jevO-^cRj+2zGppgVDDB9-(9?!HyZQ3}$RddR zt$;)iS^1>x{&I?1oHW`O1HGwM3v)b*!m}LNFAJNcmmKW5GSjlH2lINoY3t;$v&m?I1ub8OQTCCOH_*d?%2)3<_lxXRy zBb1hE>35D$TBfCok5D>XOTTc0(h*u(bJ)`O#{R2cWbCWtu$XrTf^eWhs6GA z7VTW4`N1|cw?vIf`xeV-YzVQ~e)EriYOV&%m(jzoSRxCt1ufmHgN5aCwb%q=LSv1$ z%RHj>oq=$!De{)+(Oxu@Cb&=%TrL6DR_x}n*l%8PbV!t6-3^ftU#U1WQ&G%^R}AMd z6-P?x#`v*72j(*8Gq|%C3W!f%4LC&!k?^|(+Iv%JkVf1R0*x- z=*}t6cgs6+%7Gs+w`;|M!JsKVS@zI(;k}T`vEdkw#7Bo>rHF1wGk&R>qw(b!5}Oh) z;zr@{e1cgj*SPqlkpKoAyeg8y=tc2Sq1b34@I`*zE%=2X_}$P=>xe7pa0Ib0iWO=U zDiVeJjO1)c6wD$qPo~k_`4Tw6+2z^<^X>_&?qPk+Cm0ZF{N3-ZC2sIqd3n_%6%_o1 z0=dFfKtDNPPxNc10Bck^&l19F)sLiwXWfczJaGuWPQDE}sNcM$yC>Cu)$gUsa<__@ za@f`vxKAY57`x!L{uEZB()!6#ajU%A>{bj+t7*R{}RWvWd6ChZ%Lu#Jk)>IO* zR_;(ckbyFgfvXI4QiZE_N!5eL*|~|Ys2$Hvo@9;VBzGJSNrgZSuWWH&5upi=$+Uh{ z15$zy`pK2yW1=Ne>nW|Z=!>?|hjSah#- zu}k@tWmE}H$d2>Od1ZeUoA+%n%QXz3@51}!Bz`f8hIyO$ruekrhcgpp1U?D=W@A(f zgS{cjNbD|?)4L3+h|qU44UhO5|OU ztlsJiNx(MrKG@sO5t{ORm!`a2Vt*=4In1Lee{-usWG|ZXzIlpkwNItNw8336xUczB zKeLlLiuTQKQ2*N+#Q4}IPoBgH#L{hIJA~Kz>MEf)GAe;!E7e#fh-TUw)6WbKa&-R57< z6UJ-0zjCu>%D%gH!cZh=A1BU<`8~Sx?wUZEKlqz2r(o~9gL~p1?r+PBcN7}maos%) z=Azkldon|``ynKQgB8E4DVG62Ffv*ET*sBMG#s}9_9fj+rO!+QvlIGXaMqgWO?s4? zh5j_hDH;@DnrQyf24IPkOyV3i)y5wUn0CUY+D*N{+tl|+SSYx2ysr(enPxhQb{SZO zmB2Y?3h_8Yp-Fg(A}grj6yu)BU_#n=BOzjn%@vdMgv&Cm8Qo`A@WC~QIe#teasL&P zj@fP}4shobYxm}x5&&+KPSzYmX{OrulE{C+Q!BpDLbzmdvVOn0u|w%jt|39Mx`lQ< zX}zDeF3%kr|MT(MxLzTMK=b98NVbF21*rA|kwW>620brzrgL}eknW4~Z zX{5i@eK<3al@c1(e6TT#1ojS-3vW1cgF(8;UvZUR0+bM>cNccvbDipI__z^vqw2-j zu*lbBhT;?yDLwh9P+L*5ez!?_&AJf1XKfcX=Ss~7vTOdwe5qH>m zot~$=K!w5f>-d_Sj>aeA2WVB0Ae}}XX-LAZXhS#KhGuI+O8Q7cAMjnKP zsxO33#mzd5tzwkmJc;oFPLo9l-(_wla4)|u#vixE%*BMzLiOj-qa|B>O$P4PeN>{i zNlOwdi_cxJ_=NXJeYT5bhVM+)8m-Wv@tfd}P;}E->&dIYJ&2*w?(jUiT}b5lW&>d(q4n0~i8$ zlGZzRN<_>n>>2l7Jjy(6U+lb;GBLNR@tN}=2vucDlze$wU^Xy)>*h05t94-@hPmch z<|nKhOOBductk=|uMpBAJ*E@5Z2ZBYOUCi9wjB3bjxM0p*!iy1 zax)O7$R_#|l;lWQB89oFV67mncz}Qb53oRP0!w<~Grg7wY!()-1Pma*IAH=TN`aa0 zYkW2&CA+NrD6<}&m(jI{(iJ{LScIhL)-l4J+y+w%Fp--uHXuu|WNE}fi1T1XUNlcC zivwY%H`2MGVL^135{UZD4Kp=h+ z6ey!7GOfQTdf#E=QAE4jgw7&42kJ!VhDmDBl?XjI{EB$yJY>TSx$Kt$s~gSnd)?(AVM#F~o@O501rdi=X6zW^ zGm+Um`?hhnp^pUd%w;RCnr*kiQlRVIet}D8MX*m$kU|(o)Hf~f48)zWd!GojNqI@WCV?7F-j#@L=ZhjgacDP65)U(?G>;- z6dJw#B%Y6x-(2|$ogi}uQT3n#5j99@)w&oaGd^ctv82Sw$7@u6gsb+)`lYXD{LfE| zh(+v*1q?fKUj(D}&n4@RF*p9+17CM$@L2-+9|m+C<+SEV^e=oEVvV*W`OS(ar7iCk z-fxEXZYv2f4<>jM;1cwEh1_WASG$c_rNii~U{#5Hh?2!;qPv;nxH8l* z!S-T#USRThWUuhP@&GephRc@DbB=2=Bkhnc{Gp8Sl*l;g=Bey%_L-$_H=E_+BY*fP z9~JAR;^WyBKQ))R6(5s|nt<{HVOwtwq3AW0qMTHVX1j3d~7j11Y54So5l z!2X7m)~U=EJVQ&++SMR6H6ukQh_P{3L0blwbx1~R6Gd#p2y*h&2G^j$1i)AD;Re7)JyDp5)a zknNXS^QPidP+-db2&ei~?xEX|bSs=He&nYf7OaX_Lf&Js0M$&IGLFx!e$@Kms!!Z} zAw|5|%mUyhI7t>@&gfa8BVgh`tvCb|hnkxI8$|5%YN2ZV;tXbxHI^BUuR0JtZ}e3@ zG=M)5#-h&05Qo8Y;VR!?{9mzXwT|1Zf!nRGDrMf+r{3+R$S~gJi+x|FDeSGoG)YG) z-(;!;IOeM!$omC+$A?(v(+`0Vxz)G-mh}VnSwD9J?U_A2Lk*^Z;Xmfbhtx(tSi&L= z;N)a(tIvHF6>#k#Z7}xb{}5o3&Dvr&YlDvdf8?o*KG=Sdcj$xdL{RU6{3vZ`Rt`4Z zZ}cu{Nim7EwA5XTxm4HI?#Q&ZD|7yjmDU7|nj--_3ujk+LnwZbWITA0^svVFOyW)R z9jp}braj==o)KP`c$5EhIlW-JAP8|Vmen*bXP$q^b9|E*n4b-SrrmCeF6T&#@HE)I zRf@1~+rTF{wv50brnOTJfVffyuwq@wJDq}Com&L`dSbqt&N$>o-FA&VIFK(sOxZh% zDpHUyPm_NQvM5sjD*j=tS=jtgA(rl=jS~5mMn}7s{7LCXPxol8+uTMyF;lps=oz7k znryQ`s3-R-W`%^IMH8-_H3EgDWYe1+a z7Q{Go?l9%v^wzF?B^fRAw=^}OuX3X}B(=IUQ5vdIXC>miy{Kaz)v1D)AN zoKU68j%%AAao?+nBqz=`!+14yO%mgB?E4}ovcj$=q<>@yn~2ykfAPxthI{x@;@dZ~QV7Bzo;(KwPQi=R6;Wl4Kt%jyG>rpbPyDPGErBsBzv5IPM zg+`c*?9e)e8(6wn4@9!YA5$g4P0G>x#H`PrgBCOO+q!?^F6%i6{tSZvf}=kO`6)7; zXnm_rFIn3~7}g=wZ-t-JM~zTTvE63k`7-B{Wp6HSi->r@Tlc!L$*DJ(pZ!wTN_^GC z)Hqt<9JK*2DVp9aHWz9>eVBBj8LNKrIc+v`nLPWFSx=Obn5q#dB%eIk=FT1vGD=ZV zw>cH7!AN=Lx#@Dt3e4WF2a+Tnp}W=SS+Ix@8p*nkUG$v`Po6%6WDJNiE8mRo^Tm9L zA>6h5LcwM4(|Cu_E?gU;WOEjyXHz|X$f}vntk4N`0g8M8J+XS7VOVs#>|e zNRK(P<|4ReJ+Nm-_S2%xTj_0Qx4H3IT|M*q{p`j;v*zz|Xxt-3h^vFPaQ%ChUowZA~m1pXAS{Z??^0SRVjZ4SmV z#WeU8CZ}F+KKBbW;t4+s31mz#lU9G#%h40ewyjy~;Ots^kk~47`^1P?v%7`{J1Zf^u}jo7 z`+jy^Y+*dBkuoh^c7#&#j6dFdL0;AJ)9u!SHaef8+WmrCfxJ~48| zhPQILrHMN&gdVescuv(FVvSPgQ2yk@?K72B$-dBIHI%j9PUDtkuH zuLv#|a^H=QydrVeU3cyMsNnUr`wN_PYt4{?bm;II z2@kZ^XFGY#j8Q{5JUFFfW*}LYUsY2r;!pOs}WbEIt5nadhoPVXDl(t~QR<~Kc?vf%j;do};e&UdJgbs6(j-w)s%Ap%(p z7{Ph-u~_t*p)aWcBWZF2&eVVj+n=YpHwPIz$b&Ss%ye(lYW+Ptixf+4&@{@zv_)i) zrGki zIcvDt4e89!+nwrWpQWAj_S*9!#-R*7gi=8~fyFQ$<={*k zxg%589UnJqKun%F2aBww3+DjZlL6I*B?WVJ*qIPEPjE>~=CrG-DbcaH@7w!1$36^k zI*3)O>G(bSv9x{I5z70x_G3THl#4tL2Jb=pMD1HS6mioxItbVC*m>N%9eD!3dNLVu ztqM>Cg2LvbLZreHE?$l&c}u=mq>?BWf@SN`S;+a_N!lx%1eF!5eA6}WTpufpzu1F; ze+Bv2_6n}>UHFIy!rvAX< ztZQN2o-4~@-A<1Dn#!7{!+WE?pDA^#pKs>=Ky5BL6XljC!)saCvd{ep7~2TYRlaF1 z!Iu^9FspLwk|lLHzUh|#!Q5%LnXHK^NL|sbu(tfiV4F7qx?y)R_}W9f6fJ)z@i9nv zw7qgoyehv1DYBToi>p#ebZFbu6~Csd$ecDS1mADko>FNOfw}|Ma0~IXGlv*gsO}r( zC9@rEmTZS8`jLLWD^s5%jd+|yUo)(CBjOGynq(`My+^)T!Rb=IE*)ieOoY`c{EVG; zSV7pfCwmR;={z5@+tUs!2YaG-WsY*6UaBxFT0Vje#}|4xAUCv6hA1kztvdebAHA`s zSOr&bTg~Ctkp4j%MJo zj8Ho*4BcbCyb z*Xk+D*1Z!1Wb=*@W3VyT-gjZCdZkAFZMI|su2&tdyXZTe4 zyzHP#{z_fTGJGgZ9tqS%z6hlM_oNpMXWMmp7n0mJ1#skq*nyM)bKL4G;;wLr@Hmfr zwNXv{5^HQp#=1m|w%&B1znaCGobPeElZDAWgLu52FFSnv833LQIp$#*pIQBwo(>dy zY6Y;~9F3Ztj)z)}ocPeDaZ-W#dQNS; ze`Wj)uUZ>}+LhUfCL=Xalm;PrP_40i5JB(DQaEC#hD>yX2wn+d+mGoA;9SY=h(x(~ z>FB$@5dZ;bye3l6Tp|Lo_LJBfHF6qBHCHGmn4rbXxj>~ zog*5}!?>~#{4f4~SNsKkf+&C-EygJcc-6EKA@8^;dKy789YvcE7qk4K26ONjz0?qE zuyo=^8MgRZOnLNF2HThL)r0d#srK1$e$w|W{N6~-&w}&+eAm{iqaHZupogbDF@FxI ze&n1Ei za_saz+gi@=z6%}*wohl6@q?1^PHvSJJJzY*SkIS9Sor^@2md*`O7Y-1^kNIP|49)+ zaQPmvf2ugMV4X85h#%|&%9q=M!LtrCKocc$OX(P1v18ccjo~?|Xvc7zH-=#Qt>B=; z-fY44Mz?PXCX(tGA5|S(cB8Zr^P|HN=Uz#&7%#9;Af|8ei$tkN;^&RU%JLMM2Y)Wt zl{uMkaDt+3R&Yhr!FB>X^mwRRuRM#YZ-dISs5;m#O7_Fx=M_{D{48M)oGF(9$Ro_) zi;)z8%w#WA6TaU3h)`u>2b?G{KMSJ7v4I?ggGKvIJiDLTTku=*;1g_IoVDhU6P4`? zHJVkt0hDf3(qh=vO9PE8K*xWIyokOZ zEO{~l{s~H#4L22MdN)j|%tj(6Sn&N+2w+QY{hO~||9_DRw*Lz={eMp?qq!5cH6jJk z8fINEF?R?O8HgbWT_g5hN~DONVF}Ok%(d-8KZN4=CKHgIU{gGVPMzI`{|5}RE1iwb zppQV4F)#9H0husaHts2DfotM?@pMH2dnU2xP{0BlC}8;)W#obx@eJ6<#kZ@W3RgU_q%~M}tON+BPx2bqXNNAQQj;o#! z{L5`KA}f%}wDnJpk0htW%$<)O=;{111CQ@3jGjhhoaiZS*IMnDTdzJ~zDOlz>>1&h zQ*X34QtY_4FQ%ItE6t6fW@?tGY*2R1?_o1tWmn&}>qXPWYP#{iVc2F*!9r;CWf0Bc_Aq)@AlNRk9WXoywhKQrdKONCKjjN2b|u0Y z%NTNnRvn0aRU<%Kor1Sq=bB18d?B>h>Hk{q#CviFbGY}bEGT14+#H!yh5De*&((kQ zQiZFk^@+ZV`>X3`XB2Fx8mLr3d|OX*UgEs~?Z7Jnww+@w`4|$m zxdKENKydh70BF|*oCuLZ1>1?w*drK*D#Y)-F|EfsiRYexMORq)_fp~CMbaZ0EExEm z=nR#OC+d>bWepJh)ae;L)&veK9*I6!atD{ObFh6l1}QtO_oTuZX=I2(6mGEWOGZ~X zuf^u7hO3?+x!?-5QVzC@^uc+_=_9EFmWgpL^lv}s1u4l$a_1FBL)o81lhr4rWKT^)V7a`VWv8(gOT`B(T-6O)9zN=*KMd^Vf}C@&2G zEIjPe`96_2#7aB*LUl;)&U+AxB_+I-d7nV2QrQpU`;v4)`a|OJOQ@(F_{i1nXfWGq zTp&%vxV2wkRms8b40YURQn<)Y~v3wEl_+ z4?F;^A7H-eRz6iKi|vxBM;UAZacJaIX?|?>8|Rpa`^K)>pZ28M%p2qcB{UGD=^M$X zgVZ(&9Y8R*R$^gHMRdo$n`zI7I6i_Ih4-`r*i(fkD>XH!#GEH%ed|FuH2 zmq4^{(^&4R{<}chtGgjJiI!CTC$u~IKbnHBxmF~p;;N770$wE{3x6RJkj6KNs^Uz` zomd7dQYJlqIkQJA71yo%h8}`m2?=RSxnVrwFQQmLy{|?OT{Q0wo zm6yBn&f`?liPRJ208&qUh!2%|3V$fdbRsi2UkiwMy40-rC95Ig*+B%zzmmhLNC=tX z0do>Xo`4z>u_f%>W~IzNd52g6lLLv%#5dNtEyT_7KW4Vq)@Cy81iiMRzmmGQN|i#h znMsIPb$TFiIXoNBg)4p3obA23oLB$nSMD&Z-JjG~=C#n=Ew8tLq!L$zb(^ltzOdc- z5v^3!2MBg0{z1Te@LMGiPsdV9!Xf3S5P(KhreKQN7VPKJXRd-1*f9}v`W;eCHTujVStWP$8Z77 z6eTK8_*p=vN>{QmxkA z+!85cfm+Rur#u~78!9s%kI=`P(~p}~$A+~|WTck-B3&|Cx~oQx9vP!052j0oDD4Qi zMaF5#d|RTCf5Fz|=H2z*>D(~R&N3nL=&MrHmW(bpUWcI2!^Z14O@pJsrDzBeiPupU zd0((x{|uH(*56>>S*|$F^JjpA1Yt-Fk|;(6@7?QyXtq&-OZKHN1%XE>4JaLr*P$b7 zFdJ`Cj1F)pyt?`ktNozmy)ZfKk-*NOh5QF!1i;0r z<;)0HhYI;(P`1#_xQ7C4@P%@j^K~w7=yY!)F@Kge{khjqyFA-Y9+`V0wYELxgS)g`})~P2*g(7VF%m(ut8^+HSg1E$tfF_<% zuIG>V##f>hOb_A%9mG4>pQZ=#viMma(<#Qms%I4TAgi&Ahq{26>obz&qkivie4#l^ zdIo>;S?qqw_j>+Zcoo%@%3ejt5NyALw)R$wRq^7M=n$v6f+-c72VTd4mE2EwlowG! zN5SO^d-%=g!SJrV-MN^LNv@S2So1NZ7*A_4r?2krY5P*-RyMpXq{)_6zDpyfCn3un zvT?_!`xBKN;>nk3ywN(S*!Pn4UotQ13nUauU+W(Jka+as;S_Eqw4eZ&a}bA<5X5h> zNVoV4n-FudG}i& z@TMG#2J`RpyL&V_flz65=gcK+kPj(VCD}X71E#?8mWwtf=g(gyQ$pu|@)lN=;jzTO zK(@wPYO5~M0I|r18bCPCGEdpo#mD%_>-W7^9Ni?W(79YWWwcn7Z9E*6rrTgh*nFPba=uS zGL2gRcwMG`@D822E6+iKM7}Uq?sQhp@&J_@*eG{s6HEuM!5)H>nGYh9TUZ`ez!M88 zl`xpQwLwXf}cd|MmD7G#1u=ms|d;7*N{$O5f6a!CSY!X&CfhPgz{Oe+w|)51;PEp1I#8rXKcbPN+p9auH>VSM%^r zBjnal8*)oTAQRMW4GVSFvYWLG@|LV6z;1x!Ts5SfTBn)OQ{_vd1A2`&2*FF2$&eAhhn7xzH*RhdC*7T$MQ7fyLgoaW)YJ~7{T z^V6QlAlkuaA6?fJ)Q7E=ga#v+bL6kG5Ui(GY?F%OJe@khS&zN$3xA;LPbj>?OqHTi zio8QF*lp#X`G@SVy7Q4UWu)@htzt|6-Yy#)NN?~%ztW|@>PmMp%ztG3NSu%&$R?Y= z-2tC?rNzoQB%sBQdLNFo_;Dq%Qu4UgN zuGF{w63^`xQ9F@W(M5{;MzJ}d+io{wulWNJJR;L*A+-cTL+~)MsMSv0qRgLd6x0~r zyZx%cYi8};o<+!K&Z{MsXLf%5Zq)u&9}gT-~y2mGe~ZXOR%13`JFzbj}P$&a%pJIm-)`vF?mp*e!tPY_pElB+X3bAon^>ND_IkS z+lhq|>Z+9Ep;-cmrTvzq5BVlr=*;pF7r*M=VEaA%GEG}W4EGj*g*|fjSl;NIFSR7| z@1n6#)nKd(kW&y57yGusf(#^#w_9I8taGB&f5}K*Zm}};Bmhp=+Ma^=zCN*`D2)@- zKcJy9vz|)n8e-qvF*oRRr3Sc3?dfxP@|OOqMP+7>a1-$z#05WVd~edJbVSn_AMf;J z13OhVuuqMTcm7@|ftgq|rDM^(Zt5^~69gv_G0Zm~6WggS`K@YbtW$TGb6?cx9t%;& zoyb7p+;%p29QM=u6<}a4XE~Db15x7S-OY_IlRf_-kKV3EsHmmWcQ-e=y!Om=>8W%h zS)B*#T_hJx$PEdS8p`_D$kYfo)ye!l)Fm+-O!*S+-C1Zjo#-oMtryCjTxc5PyT+m~ zG~>2F*Gp2X|C0Pb3Xwzc>vgANk{>;ddb)l92BZFJM*uy0=*NZ_v z-4|!>$@`XgFf3O3*0Qn}xZ3;D%KMO#Y(eV1LY5*;AI>*tdVK(XnDRpdn&Zg@0Za-c z*zw9uD~A0IKxd;dS-f;kIrfTDj*L&Dr;N_z0vvEhWv;n_r?yUl?YEISr#7Z+rYCHwLS8Mn`6 z$*kLHgBkL%KFwvz^bSzI%zhKb>&A z=3x!--)lj=*TXIeK6Y&hC8!wlw>*ybaC*3-k474^e4LI0EfeHpkA5cy*vT7wq0y{Z z8GrKmto!>tK7;(u!oTsIVO5K29#}Lhc#RQ*$d6q+3NmQZQO;##$350g=0YJKg3C5A zq<9axuHrp~(ZK}7>@cUIjS?RS@qQcSc)70hvf{RNSw`-Oc|OzkCqhkW)#yUv)jj9k zHm&TtjD?s-yV$XME|GDK$?3bAgvuSOQCw*&+GM6L5F`ikjE)!IwFBIj=Wz7YHq;E? zoezI5kyyH9=?E)nd4(l(%hHO`sGygnfbUga2uWH=y}_c$`6Cz_=2+3|iLaMj*k$Iy z%JOpt=?^6jh0n>?y5C6;Vo7_u^n}JEy1<%)#IPEmEH(@YHaOlIXu9S% z8iC0A@{gGBfs^i>+BC$DRogzV@&mM-dRfdH3b>Whp20LJe*Ru9iG7m#i5jltJbHwc zcw7heS39t`+=1Pr0}Hl)iBqH9MiXinBOY4mPNLsp>z2>bbK7MWZvuAQ&}e@}K_%OI ziIg49Mzy=}3CK__hvXd~zZmy4UImF(-9 zct=$~b$>!><6N@Vcfm5@je3Y(?kn@Wm32W$jOzk~O&7D=+Fj-nK?E_ea5jDEkUbg} z`KKT}S?@GoccrH;#p3hdPh|Ipnt<%s~K!62}ua6qZ5lP9=7` zFvB52J-gF;9^v@R_%s5eBD#D1&oWV=DZc0o zVC?g)0czA9Gd%t#{%^*ol0KwC&4VL`A`*%HqB+ zG>;O_BV#L`Wg7N6$42fmvEOVt#DMd1$1~uZDzWKfjcNPMQSS(TijD%I@PU7jC?U_p z+wsQza&d#<5bvJ}da;qpJaN|LriZv}tb-@sZ^agLr{3jUdAw2~uZYoj`t)9Aw&uQ) zYwY3TJ8QoQf8wuvMeH|iXc$TNP+Ii@yevoi@?wO?Vz;?Z>^6BYA&kr^?7UI+mu$Pu z`DwdN)BLtfl0anKaj;g!OE0iio6j&lRTwuQ$f__UK_vj>%*Ls?`f}#rNxLdmsI*IY z_vfV<3`u#Z434f0AB*>nPQO}jJ5h7aCPWV#pXM$YABgWjyy8#bfrLS)NQ-5gvy3`# zEYthl8g(KeV>dABJfk!F))xtxqp;(Kq7dskLG~7n2A6Gxru%I8sgGIsd4igs1wW;3 zz1yg#MxBC+EdVj?5duWnv0c8EIf^dEPuA}-Z$@or=hBF*>RB>8#t+aa+>2SK!o4B| zh5IAKKeP>fwpr&5Zl!T5hXkcd=&TIPe`XNGv)y-+ZT5x5TgmCHeg_?jK!HgAY8NP!*Vexyx0#9;g7V3+iTnqCqtGih5k z<^kTKxHUaPP+f}an4P;6 zsJ6rqQ;+WD(xP4P1o+Qga0z=1pkoNy>*^uXH??FbM79Pp8qTCcO(GNu%k^^WHurk5 z0Z-(LAzz%dCVmdVcEopSisl``AojXBnnpc}2Gb8QP$6kS?@I_?-^d(=i^7s#*q+QQK1b?u80 zd-p^uU0cwT@n*NSpr?4Yp!0`VoY$%$;Wj3Qn9ED$iD=VgdH&z*Kp8kjEG2e=tZTL@ z=;qzhzLpIUni?%p%d4}iJwr9zT)dtXh`B|#Pak!f`S;#tT1 zX0~m7md8N~eYh}C5bf)Vnp6*_ypqgK^F5H%lSYt5NFziT)yv;} z(HcqJhb+2Z6WxCUah#<=Mp!|>Fa!auUCU)~ZqmJ1=0cQQ%fD~by9D)+R7BjHnt26=9j z#PEr8Zn-%dq{s7~IXYCifs3l14Gyp|ViAH}eBIuK}!r#*sjvnN0ck-Dj~>^uR~3I-~G zTG2U<%i?jVaiLVXxqsEBxkZViiOo$~oo+UWeW&zigJ%;4aud=3^x=p-vL@`>zUnzfO{0S|FrHGJc%g>*)W^4k~5e37yz@04RH zSb5o-iv~NdmA}flrpic;b+aB>r7}_lE%q^(d=y13Vg*ss;8tw&)4-TUttpQL?NABV z;_BeNLu8oM#nh;l8pUL80;85VW2qvTCMcuTbWXlF&-?Il*r^{!N2LU}&nqa*>tSE> zWr7=s^GOJ-6YrkntFE|L241(6UCYZ`(5JGex@zNszw>e+KD%sWIKC!ag=08BgZE$? zDwk9R*KOGRVg`rwC_UA31UGZCg>kbdTaMt%wp4c^Dbn4%;BThU-+glQG&76;MS>x+3p=m-a;56`h1R= zzy%%seB}15sb%G`r|j6svUJ(8Zi4kR4vPrBu{i9s!zZjis+$_$mwysRN##u5_B*qh zwW-(@t0ztpWI6g=!L+df<}MhW#7XkQ8T0`EE_)@`$NA*Yt$gEOdp6)0^!6L@YBN%0 zEIO!ShMbyr{_)1idomp_+6GNV*epp%R5j5gDI*N8%dO%UCoM(CY41688kG3E+U{IFvz&F zYXm{n3--Ah=pP3LX%#e6FKFg!=V1APct?L8CLdCiMXSqt7M;9O`Yhkp*rc`O9gDT3 zrIfF&zkLo~m_(VyNS6x zk=ju!-t1MJ7HF%`IeN{pqFN*B)tD5xzIRiXC0p~WUS1ev<;L7SEgW;Jx<6;h(q$o8IW=5LEWQ##atyA{*(0%pC&8oK8d`%SkCfLt)#+P9?h{1;+#2kWkOG&C zV^WjAbT4%K^4#9#ia9nSjuak>w`Z2ipxQjq0%N)WcqL+kAV<+FoEbqplDFa-24LSP zb2gcM*C+=Yxlibyd~@PW^3zXm3lt4=urGehBI4e-yyyM{y~4M6_8gNXL{_6&q|lyi zb*c2YVD7ej%4Z#}9Qsd@VO-ym* z3ZBmtvZW#RJe(LL2wZWw*1s^Te*dic2_<*q7YfqOiw!h?l;lo2!-PJw$onm&t_2~F zoe$N(5KpqGpSF*UOiH&cxa~E;ZJsT0<(r-2QqQ&75P5_y%=E7+2eN)^%k%m>c4K#s z(&+J9OY)*8A&1D1tdUGVk?MDSA^XnP+vJ^M8)d~~!CZ1gNRi*mse2~OAv-yT6nWfF zkK_|!rwe+jFN173HnJ|Ot|bfLV=B-?#TU~*79Vc^q##T8KhXAXHs1_4E7lUPUbTL! zJKp@mjQ73k4l~}i{1rOk-MRq2^-gt(Hx(r+5@So0R`4DQeL2J8^=}j8K$nZLl%W28_)6KA1dZ*c(dG@5*f1T{JYR&#P z&!pm*0WxME>x)@;PxNf6$4acl`>+PHffq!4X(MMO>-vDzzzVeiG9hl#H?7U6C)e|q ziBnY6>RgZ*brrC4GL8XY=)N8KT!uX)+DhbebNZc23H<6y94Aw`n=rI_txMh`CEC86 zglM1qh{&PlEFmn(SC^i(bNv6u+PQ#7Rb7ielT4C<3`~FkQ4pdA4F(mB3Nb+wAP>dB zBrzF<0@_+TrdCmBd?q0{p=CG>wXNR1yj82WwXOG7TZ=)gCZr`GsEAhaQ3a&!PKSFN zl|qon{C{ijGm{Aqwf+8lUznM5_G9g}*Is+=wbuj0S{dr;N3>pg98ne+Z)Wiw&R{Ab z<`y{BS#FzkXpm&S8o5s%5EBJ)h*1}d88def#E1!=)U?3=un_r(NaanD`ODR;MVihB zGlrS@#t#UCF6K_Xi_J~kE^>0y(nRfLk@>AEwouoO`*YX7@MUIygLI&r|0!Y+5=36p zSK^hb-j6Jps9rRc7R77HX}ZOQRmDIZ78vU5(jfsawf-YDJe`1K;5ap$OLRBmA`nM? zV!V=|o`BUdV3OF>48*V+ObqxgMj8j8`eb#5={+%E#w)j__`WbxS(;YT!Cv%YG~I35 z!NzG!piei^oy&z!*eI+nQJ-FI^9fDGG(p~55l&NTV;CPcVB+iwr$Q1F{1Rf>MA?eh zcB>bt9i7R(D%?lo4ZD#Se|(roffZOsb_Of_Vn)$%RHv(`2Ecks1L>hlxH5u~dE@W` zMMjS}IiLzQrpMqTI3Nko>PWE#U_cc|fXp{`wK}L_hBb)^D`n*0jKHyXvL5(-hF_Hb z_Lwy&>o@U0rN)PjFaaabW1nPk<9eIujEj<-(mp?PssY!iWDxxEzTR7|SHFas<|bKg z@P{I=QQeE~4iso}Uiud_4EH}z!Co(m2vX@5uw;JCeKNtnv9?BTmK;*BBxL=GOjWIy zXZdoL&X?2 z@m1&|nw{U~d0wAUq(ccCS>qxysSr9T#2T&hR>8?!K5u2CdhS83#ZNm3n8Vv%j9FWE z?8$2sUkzEB151`3b%CPSlZn6Sv-*nU*0LqDLnN)}Ehu!eOgK!g9-?EK($pkNFk@C& zV7a6V#oWrX&QXrv6XsL|_ifGWcvmW)hyN+@kg~R0n}~@tpP&F?pS!jB1(DS@DB(EY zMKP#34*pw==22qo`G3n>zr1Z4v0efNsv0@e!U|)7Q9$D?E(r|tscHj7!Y~|r&qiE` zyMD~6wPrtq-m!-|c~=(2(vF1jn{OGwL_*LOo?%i3xK#R&=$uf*pk=A6r^+ewpxG8i z74EPraZob$T)7DMR{sw}dot5DhW?gm^{q!fL{TF~w45|kUfV_JV$9w+N4|#VKA{)@ zI2ihxyD!q{C>|ef=xZKsJOZ>0zydPA1t-3+othdI)<WFbQjLzcGX1ad zR-?j82&CQ&0T} z{Ae!@QY~N}6GoicN2t})CXP(|aQMzuleji&9m4}Fv#r??O9^IHhY0|)90OQAN=-Si z9)kx=lzmX&xtxNEM>Q9S2M1wIRy#98f6X-LdHGq5n>|aHv~TYK;uLJub&jFLX33&! z#Q6CV>sGOhonehG+M;^`=yUCOzD!Df$<~(4)z0Dr+oP%OSi5tiY3%;a@{$*u-(Ou30LQat0#u5^TO5n;p&304tE-dK@7u-XT5u9WOg7U ztUn)l4n0CiPhe8t7)u-z*NmLz$kyX63J`Lm) zb(S0qObcfq}>7wwqiVvEz7Ms{(PtEIrF>g5z|wh%k;&u})kKg%^3cZQRD zs$3c_4=VC1ci6$LFc!sX#4XrBhARttD)9{?x2+)*_;{S3N`E2|Rp$Hbn^HE2i;F7@ zh@exM=Z#3bQ2#^1xRLmW#Im^Re2|?Msm@W=sOUg!tTI39ECW-a)_jy)_tIaewIC(f z40?i(VBRe{fIRpe)kgv%LD5_DmI9H+)=_5z!I|dA_>~)!6~%B_DCr5#DsC;nC^n9; z89FbAAgn-NxDogwK4Q>yQtjcG-fjTTu_Qk_OmLi_YPxSOlyarn?&h&l*` z3}BWQq;;0`w5Aeb@UCfralYD6mp1wc2|V~(z?I9V5v&|gC2ojSTL3|c2hf1J591OI zho^m*DUF2LDE09e`K`|;FHieEkcQY?cxM4pe1AQLFpYyXB{(K&*Q&IY2I0cl= z`jk|y(fc=fawd1mLelnbvV*f!=dfpBoP(j?_dpWK8B4*EwY@C#Nh&Xv&-B&TtKJvv zT7l~^Q$$azzIC?^IEfIYu20u(`9tU)B7~h*)EUk9zfAikMv7*NtkYA}!}B%8L?_D; z0S7#$q^2Jbtl93ODhcWj5>mpv(E5^*X3gwJ9F=t-iv~wl)=lZXgNx?(P`ZU+k+f)r z3NU)TNUp&+i(x_y^+Q@Sh0hcvmQ4!tZ1~LSX4%ZSF=^TCsnO8Oib-&p;7yvw{m}Rr ztj9EmnS6Zue$-TtmO^58z!inQ7DFEJ7QE)ARU2^r}ZgKKVt)|Kt z`{mrEm$nfq#n3kzcpEeggT{XqUX7o?2=qFtc7yK!Y9mnCC>cs$)>|js#2)=YoVbz$ zG7WBGp?SyK#KfIjNX)bH5xzlYPY`xelNk|MSuSz<9I}zkG)+ZsVWQk9>R~u$J8LZ2 z8Fb^b`V1!wCMBBX<;Ugq@qMfuf^6gn)8c~k)M?KPz(RRbWmW?dL-!1w+j^gtbmYnl zSBL>wyeFj3V^?k(i|vchCzqX~x42)=Z_Xeg8uFF>(5I?a2tN{4jaD3KlJLnGmY7;V z_&04MZRniCP(iOxR z{QH`lZ^GK~G$9RfGpAy@YL}woY%(ZXX&Awe=mS2&lDaP-(Q2(k`x%CP_%MdKf%d+P z=9y)Q*rI&$l^uAXu>a15C5PGE4hwXGjb@E%ne)Yk??*>As;$~13)}~;m?tL`LEpF7 z9YLQ*DrA{e!~1FEi28o=S;2oQG-FQR%S3W!lNhG%sn+Y@C^z?He6QFio0njnox)kP zrKHP8k{L8C%Y_+e;oco7mpc)C&LM+FRX*{7FD_mnLS+>~nP$MR?TWZlO11}!BhFzZl`i_f*z`A7FJ`YY@nt*kl?0NsBFh@wU8 zrb8-5A*>|80}Cw_Vs5XMR>u_!`;!2~&7qjk^!Lm$QphN4?!5z^XEuZNVOGQb%ft1~ zXohUlxX4tvNHaLH-m6l9Nbk0Z-0tQsf_)!sC)_Gy3vwl45OM7$uCRQ0C2!w0tnf9E z-~AuLKl;K;^LnbZv~16Jf>O*E!=FV|6APb6&alWWF|mZ~nS0*=pr;Thp+`PbB3Ge^ zZ9T=xBq@$p)CIG5J4JvCJAX@6h8XI0g}S&#Yn>jMA44l?^f}h}SdHY-shcl#CcWoO zp@Ll+k#+g|R7T2S|M05py|gH&1k5Zk&TUi=?U61-)U9pgecuOSZ82@gK=k^R$X4C) zi@eZbAsTJ%#H8(ePZNfr_0VCPXynd8J@U?wSJ^ES#EVc17q#`g-;JpQklI`ToJ4Y- z!NKj7a0B;Q-;gMP8bfIHiE)$NSPR;6d@AcN0%UeHuZ6Z4OOE)ntA8>yd79V=T5?2U zk2v2aS9cA3r#4dhkWZZh%}TMc5$Asj(!FWO=RP%KwN^@ztw9DO z%&v(0t=fq5NA%cO=M@&US6*@3BaW*%^`e#g4alsQR4WxZK8|N!5oFi6rjq~S4`uZc z=Tkl~yjBq2z?1B>?MnlBAU^G5%l%};`DEIQVOPnEw~fH}B-H5)bveSWz{dtPLnun< zX>b3EeHX||ufVch%*GBl96qs4!Z(M>CVeF#{OXN7u5j z8gi|ErTE5m(e#od!CX8eb6}&`UDWBDz__DkNk6tm)0R6ahkbCK%K7$@n0ko+@N>k2 zMBUF<-sLOHd?{1+%9r;1PJj^>wFCVj<{zAl+k4E{GQK{?S2;aB&8Jn750@Th1;q$6 zJ33W)+jX1TH{xeffcurjd5vE6{gpQF^t7+w`HI*>2o&o@6&b0GMXo;5njy;A=+qUl zfAEZ7SMqB@D7JvFqyUX#^BIbb_dL`YnVaIEGqLNQK1&)|ol zeKh=KtVA)yo6g@A{8g)h!4@Qs29>8(m-Ikqxt=xRCn<)T5{je1+FZyK39YWDr9^YFW6u~3Fnr%eeIqEHpHqDRgySMz4q zntm5_&*6KXDYu`nEG*fQoq$oQ$)j1Cv9_kg)Teq*1CFYBC11j1O#w_^O7KS0Q?7c? zyp}lK)95WHf(h|fwOKz6j)`2C&l=5@u6}0EUN31r+2;!s0@G;Nuk4_JAy zk?GP{@GPnRYQJ@Vdnd)D4XM2UdwL9{&4WAS!mJ{93U@bzmJj#WQ;t1H ztMn?er#O=c2TlpKplBMwb&g#3rK_K`!4QLa<{0A93Iqy%<~jKuBKFhO1t(A;bo>B& zkA$|;=-=f2>GST#rCQ>CyvHMegO=mok4sTDyNzdPoF?@p8;|V&=C)rKv-f0GQFMaa zeksqkX72Yj5a@B#&$?up%l&@sdU>d(a2c=9QXQLzj<2KtsNd7MpHG6x?0=s>eyKJ% z{*fmfzt}rSSrE`QMI&J75pQt(x>REP=bw1|-2ck(2Xwn~b*_HisfRDef!g)bj+!#p z9zX3%81mv%Y!$!$G%Eh?z^TQj*eZVgS+6gB{neLoR>`Rsy+%&*lVcS9-GLm;%tX+( z>lj^s$;W{S_3DHF6Oq6fmaN-u^A(8JXJ~-P4Fjb(8vPi54KJI@4!e zLN@etweh3FCXoG7TF9)|Z6BRVmp6zK8dR4#MY$Q4OKpv61CURV1hw=-V5}Ry4KHUAa z>Uy^(u#z6nS|U5bXk5iJ1H*j@`-^(45qx!uWr#tWT;j_Xv_hBMZ_RTRZi4(~GX?gW zugM$S?&nCvyuvr?*yh@ob2-+~Uvz+FWNi$?^?yS)Cz@F+_a4?MlGRxFFV|JDqGor= z`J9ExKU4Z77mFC?SUsFkRjaPkdLABiu#siTtXD zMg-Vbg@4xcm78`hqMZ`tf$ZjI0Lt`Eb4^4IV_MGP+JdQQ6!)5=DS}y=ATItmrf8UD z#JaRkm$nnw#^1>Wh({O4SxJUSaoMUG`YR0*{<{xA`aEmW5$q*U#wV(fC-q9agSAEm z8=4wd&m4Ygl!i~@q!=D$TYgZ34#u%s8?Y*8U1BlfR)?O`tJVKcSqB&MpIJSugX`4d znR*>0j7@|;GTRW37zzbWZdBsMqI+&WuTlMv$ZMh)YR)J8A(5)&=m(-ki!IRjdQJ^b zwCJOUWAak$3zlg60#Sge>qtf=1WNnzn>rUE=oimuooZD%L#0o0w0V;Bg~DkX2s;Wj z)`e?aYLNtTaa*os5^>Uia!>?d(`c36Cq%~GcJTsNU@9`-H{)&fQFIB$B0^1F zQQZMguFz?y_mkoijHq8Eo?j5F=x1)D77=|(7SEut!4WO=raU&u1;jZ;r=d<_?+KCd zyVJ8$yJd+tBiB$ur7~qj?-b{H*2)=(gA{=I_%_;_;*BW9y z8+bIa!cLDvtS1{{)r|JeOyBXhydKEOVYZ?0 zJ#LFYX@N1tGlQP+J&9DLA_(}@wSNP1eX`_&0}|s+;*QIb>k}vZr1j>BNZdd0Foref zVa;X9a3|h}8Ao(DK|KT=Vwh30uXvs-a1qNdla}>T){EjjdC&SQS8`X*1cOsg`(}B{ z@}7;JaG&+INGwY8ky^4ZNR#T?sUV2pH3+=gT(m)1pBS>R(!8qs4%7z=oET}$A$rn< zz^<2vr(ME1$>w#k54(|VE|4Oql2xu`%lfK@u;8bUkujcR*o&#@pzOahQ8$|5j zZhsWvBEl8B7`WI~VI>o3*j2~%oFcTMa8)ADQJNFS045Tbw4NGG!yX^T8Y*26b*{%Y zD7#KQr#(8HRV9}+@3mTqSu=z@Pb4iImpqR<-A9qADQJ8 zGD^bp`P@k{PvSO^LcfuFh+FzHTc7AeRiI0lrZb!--T}iB`A`~I%ko%W?Mou6$7aUMuI$7|9 zx~4fhZKu^!spio}Nni7GR`+qVaoe`R?+QWGnZ+4_2|gp+Up5m)D%UB)u(RFwF^uC9 z=A}48%!_aiF!LV&U-*rEo+A|O+UbW(YL}JVn z=9mC~o0S|qfyV}4A!Owwtr_}zrhOV4&CL>3yiQF5&&53cBG~(?e=@6K)PLE z8-{n>zz~t(aCC->F;cobUpJMhn~ILtZ4mrjn)nG#L`Rq=HgergANn$NSktW?5(^=E zllX(I;!qRnjPf$npMFOzu>l{?N!QL%-RP$-hDTz;aJ!SsC-o8nW^^=9U&n_wI*j`< z&JNP*W^CVviJ4&Ua6-vpc3Yrc1!iFo-G15HJLKlXf1jKs&sl%7U~k3QMp%#{_gzen zm-4rSzjpqr`D>6rn_lB4ncZqQgO)*H8bd2O42S3Lr>f^2pk4U@0W=*5j`072 zGLgy~dLQBwtJyRiX*UyljurEBQkV)z;$B{13pp2M^8ejMMHD*dgz~K!UiI=d{Js?C z#uCMR@qH_+RxNDNo87F@pkjGBp+VGGLE8+_ws|aQYapZC?f5=}6`MJWsPLNl=@Ca< ziqL0K`=$R6bUy?+VxFt6n`V$Br&yuT2Wa{h{^au!{@U&DV(7sX{;}BrCHB3`YXW69 zP?rN#^SJcvNTm~Fd(Hsmurc}C=)?#Gj>cDU6SAL50g0z;7r@b;vU;F_0!fc}i8Js! z|K9~(xskLdGg95F))i`KWhQldG)>J6dd}i+9DkSbcPf9=_#0ep#vjR*4EzOw!jKvl z>UZ989>C{}2csHp8)h3`GZ@^{WFR>QO zv8Wbt24}rHk%+sCwiLU_-EMUaGMq+ru^iGN)Nq`FRBa#jNG_5e=kpHY8@_-903k_)LM{|uYIS==w9K4`sL4?z8u!tua_ zmsjvzJRzp|n*hO{bsb7AGB2PuOtnFX({q9Fs|InI5?PaRoy5AkS$*$zVLx)98I}lU z=_j#UO2-|^wDhTJG7VBOlY87XVo(`h1dI`QtrRp~0n>*? zou;F!+0xnIa&rX;myLipC7Dklivj~AWG%Gq2u${iR(>d*Ds^jtjmQLTSF#odEs0Ef zj9<%dH2dnEdhF8d1=8&4$8B~(yjkN)!CJaSCdJJKwIn!nJMI84K2u6b2%trrx-hjW7fEs?v7$4q zdz_&j3B8+P-lEYMs$2N5rJk}zR-2BjMht%EZ$wrL;kGbZ!a|ohRqvi7tYBjIFLqT% zU+}*ybNB0HTKcD2cZP;xi48=zYS61b@PDxWB}DMv0kwI zZoT%A`$Y59!wno>!@KCtthqG%n3p4VFWrMqk;x^J;%vkuS?QP|_3elbaa(EuL+}5$ zC-8i}q0f(xq0fD4#}qwA+uc+n`D56;aMe&}LS>#rpXUuWJHycD@tVCS-fV(Cb<>{6 zGO?i$5@mXhA<+kRYLJJJ=);*wB$_kfge3Y4!=(pFR4Qr`z4;fPOQMWV<+2$--{NA2 zt`AD!IB8GrkhvB7Ho~No*#hu)3omn;@@9%RxqbRRjETzi%jKV$=nQkx&ygjPG|x!| zBxXw7`86gSZ%lIac;pVL4!q(YhP#H9>E(#>pbio^xTf-tyQcnnx}NLAT3ukTDi2eF zI?94|ngayi?lVkQD&(nBwb>MpzFMNi}a$N@g1_;s?L($S6a=UE>l0Iw@flN+TYu?(bZ>1Y?d^w^!ZWC>_e4 zno3%WxZjPeefh_HAH=(Xy20`|O^)%mL*M?q>%|68mNKW~Mztf|5szyks2!vIHRFX0 z9(-0ScT~X)iIxuY!Aw{UH0a(FVe;uu@&O5*4*1<{+6jm0)NwXP^sLp(3nlq`V#D`K zS!V@|jL)q-ROJSQ6TN_^?<)_I-$S$(2!C=TqOQjicvWV(a2Xq=TW_xRF?j8aMBlIEmqsB)yYQHPq{A z_lJ+c#xgb4KoRH7aZH%cj{M%E@3&XU~x8AN}H)QP1M&a^oGAW{>bR~oEF zO@z9qE4oxX7d-8&c*t72kR;D25#L27f0rjz*=4=gQ^`F9i29r4r$PZCCz$fsoGY!x z`wd|F^0@d$d+dQrN!OlJW;y?K-}l_vvjoS%X;ycY>Uj+vWWQ&PB%uTHl-L|Egt1=s z?lPBYi6)~j!GTs(XNwv|+)8WuNN7?n*S_D9`kOs#xZ#N<>pBMQ0d>VTU`@7<77CU9 zQS_5&g2^YxojiT8FJf=w_O!1A!jMY!w7)}_@@3_J@&xl&yA1JsiHz6d-!n>0M3{)NYdW|)EIcgfIPXhUO-4_D=Y7;T4?jfwm< zy8Aa+4rnoJEHrmqvrb|Of{)T4=p{&G{p;gBUKPwT<3EiV(PRHHRT+Cva&JA)nXwbQ z*eyNgAKT+~c8|yJ@4yWP<7=3OV|tuwdi-N@j}1vZhN}v|_=wPQOri3bFHC{K`px|f&nV53W!$+&KD|K3eE?%|b(0N;L{ZmmVVZ$|3afOCriK8q@fHR$ zXK6TfK&v@wHO+&NpGBo_SsOm}H*+aOKO`}p%Y~?{?mdi6-v`OBm9O(_aCubCWuZ}g zc)UR117f`MAQ%3D6`sFM2z%ZyhJ4_V0827X=f&mUf-eWi4LoJV$qJ`MyIbeE40P=EIgIXWn!q+mC~9%n*y#- zYmWUjJM@X8)ycEeP-}LI{+1^;p@cuFo>)d!xKMFQD`^06x*rwx=IIBH))D$at)pv? zYnV50#Wfl*i@1O;>k@T2JaRBTiDno{2l6=o`8<0!*+vr=BX1Hao0|lP>Ui;Bq$paV z9Wg1CI4IlOvdC+oA7M=wi)&aKF!1@D`w$I*+=s0Hk)Z&6kFj1J_g*w9DZWhnzUMRJ z+w4sqPv&QiM~X6@)Xy1@E*2lp%B;^FkA^_T)BD4u@qE$w5Wb(7kE*|Y)_mxr0`^Zw zK6^fNu{ivH9R3;b>zgHsFQkDG`@=KL5UyU_yd>Em*!G#wLVc&}D)Xd9e zz|OdRnCyC?eJa^`RmYR8{iOi67& zWL3_!s@+H_;~0@wRAxHipVuV4F~w|ZH~QNO+-bN{McpRq0IZ<>GWV)n-^b-7L$_^P zt+=j#-Wg6fgSIy@n zha_UnE9!eRMWLTmMmLJ&9Jk6$(4Wyt0!d4@-ukqxd^uHO6o)GDH>Aa+gMd*x%V|mfo*wWTaaZO>~-cw&Q3at@XQM*N1OUKa&WK9o5JVK6b&E}q?v&@#r zllAvK>9TXQcZ?L8OMg^;BynFO|LL$3DS_cV>0+b`8d9`@DisPsItGP)Czh)6jvG9& z%P>gK5lcUmK#j@Ijy6=KAu&`Yp=x(F|6jxHC2mx%&_-9-9OSfes_6=Im|i7};+#nJLiKl#W)$`zR^NE5pKaCm znLyeh7wEm?UUk^<4}p)xOqxB60lkC*g$@UiW8`^R>@0G13of&4fJ0srA5rx>bv1(q ze&3M%+uXRV5hjy|7%q5WH`4eo!t zK5PGzqM&*9!O!0Rbg{(#mv$_9Y2BvKC*+7WM?)a{_tftW-M{4|mpI6I+U1zc*{v~f zF8|}Za0fCucHZQVt7WD*cH0RqYTU|_hgGHZks7xxMOV1h z?efq!S68n_cGlIem4|nfskaD9Yb~hO&A9h#!&kSOtD7P2G|y>Cy#e}(hpndRN`!xN zmwfDLzmx;C`h{1_V&iu|SQ;#KhnMDrmlhx~^F9_{Iy1bqG`#e>@Y1=75$^v*VubF* z2xb3{w`1?99TG(}iGwg7Ux;3$T7q82zxP@6qT`g-s?q=aY*Qk+(LqF}F_rPA72YGL_iitlTl|fgWtpv-r%^w|=W_xhIal0(guyO6SFE zeXEBRD80%94I!H1fO$$F%VQ>+Y@B27)`$euScd%Z-+dUiVB)V!I8CGRoC%WmJ(cRJa6S)XUjI(z^ABO^fm&{fnnMsggbIk~@tJ z%d=98Btfyi65L>_um1269b!8{P}bJT06f9EJ>H?b{x4qZ9-9l&dN@~|R{ugODBmDM zz*O`4d9aGb68}pF*c&e9#^yR1ZWMiILFq5mu2ZAQVXtC-{_Cc*Po=PPjW^K9GJ|+BNd-;xxFxtgq;uIEPEA^V+a#A8p?EL6TJIIz z+d2Y3oK&D=%~8J}JnHw;NB!P*)bDqP{s!NVJPi3W)x$e>{%&OUqw)*c7(oOQhIkNN zlGcNMt$Bz6O6Yx`+t;y=W=X9c!DUbI7M#>{gTIewO(TgV8d-3idM#5%B;g8$?;o#E zuPaiszfpp@v)8iaGdtK%3x{sl@2j&DiAe^T)0v>B7tqnBCC3ERHSje0r#}a+dgfEe z+zAG*K>&AiuhG<`s;?Y~X#k9dGkM$^1`R^?(I7Mm2twi#+x&EVH;$-t0Ydvh$dH=u z?vN!GA9eLLYFCCm`(oq6=SVL;vR~)2`k;L2U9jXA9uXV+F8|BM(ixoO|6c*2Jel;* zQGZFZK}cd(ZZs=Lg$noFV_HRG8m?<4MB)8^L-yduZ_#1tCbt6Zgi{c}` zzAupjwqD*hctse%1u1xie^L^CR^1R;aFd#6+Om$I$-PXAicZhqq1lI28VL^=4`U8`$ig;xC}DNO^)mR;Q`oB}#zO z$$F7?d_5Tn4)xtck=_{`luUQq%*tR%eg#Ve>efc8zriA%IAmp(f2yuDwHeByZj&^~ zaOaL2=|x?{Tc7`eD@JBF`b+u0$*Jn~F)j~&y(oDO!9UGU@-Ik2?3_7~dCSyC4ttPt z{>43!qs%L6G4iRldrSj^n8ynSC)WDRZYpRLEp?&&BCi(AT3HcyIFeKCSvTKdWmeXP z$52CKT=u9x>8*#h?BNSN57NWr>Op$AG(itnvkMq{sPW$_vz$a-)@F6Ffm;*AlFJ4O z;`(C<;wx&TDQgo%CaVKtU~Rbc%FG+A9S3jQ@p{~xk|2j|z4O3-qV%?Hk3Posn;6}; zZI2xF`)K=e%Ml)xRD4@#mQ)}Va8J5?=_3hT=*0SvDaX}^G&T9Fg$N4b%8%`NUy6z2VAyb?7&O9^!fmd%3*nHp5#q zL{lQw(^Z(ZY;P;k7_sO-UunV$?$)RbXV|JSvc*t&g03nZjlwv>ss3}_;h35^=Wwj( zfVPs`2C<*w56eol0T5!p8GAc>Jl)!&h+Gx-2qow0i(gZ8VpB}tzT{Ya(OGfRjiCjS zY*(xq^TRV}Va$*gjM)aF@VCV)+DbFGI)&QtOn^SsFYcR$Q^XPERQ@9xIHA&RE6Xa+ zr`_Z_4@;fv`7b^u!bn|^T<0FAy8n0VjJM?>Sfs0h+43DrSiVn`?;oqNe3+x;Q3fjj zg=<1t!t9jall|+Y!#T+vo~yb)jbpGevdpEiDD$C1UB?mVFa%}Re3B*Gvx%lA9>{q-M}{f)vLD&R;ulhC;2xe+L;oWQ!Y&G>^M}5y6xahp?mUD0&X2XScl$k| z8|&2`_=DzO!I363x7?#!o1Gpq`X!2BB1<&JYesOE- zXyRRTxc`t8Ny7j7Z}32soA!sg_|QHvjtL=5`@(Q1`A11ZvP)>Vtj$eRRA!=Pa*tz^ zdK@9&6Fsh%>ePGXaD2{XD)c|P$kY4bVCg1Sd7*mLlohl0o-#M}IlIE>WdD&Wl|wp^ zDl^owc=JSK-@@6-n;Ra*8HRYpngH~sLFLK*x??Jrs-k#hs5ftrqtYKuNCH|h*=1vs ztJlZ)8oDb#C6MR8R+`cQ(c|lHj8dQ2!z4|O*I{S0sc$UY=!-0Kyzo_OY>>igS1D^r z4oj!_#fT(QRbDRxDN{c;4QLr!@21w~$Sn?i-@JNMdHW9XRMn-Tn?!$ZuhX_m za6r5#FMef;P_y`$fpUL22puzkHQJWI>5%l~1LbZ5h5a@Ht8R`gXjPBJ zi|P{|{yC1u;3@34$WJ0aUdETe2p`cl;|4Zg<0RpA+&7p%NO1jq+BLWi5D>!ZW9<@6 z|AzuvIdd5AvU--f!1RX&nC?&x1)C#x(VmU(SIPA?l@f$nI>FVQl~ko|HBc%S_tHQxBOoSObf@7sqzVf;mq8Y1Gg2 zKX*+1$!cjFhD3F#zha-5=$U+ue?-ndP~pzwfcIg?K+Q;$qaDuqBeT6aP`>)fY!RKD zCEcDivIpYd7nyT6h`4?(auP?B%`0|y@;vgN&B%FehdPPt=yy{+I?dX?Vow{d+CFKM zhZE)Dcp~ugy+FQag<_LhCm?h3qeBWtBGQJMsO?!@QGCIa7rQZQXT5*_U%A4Jyf6uF z7i+T9HiO)7&CZB7R?_7O-Nxa>;4cT>8U!-Ce0Xg0Uu6~`qBOKhWhEEZk z=iues-sxGjH$%#DOEw^Z4PGuBUie;GP0rNC*|q)~=@}9G?qxPwJZooTEfQ+kcWU5d zf(u$Tx!(F(f54QwQkTk(5*#kKzRthKJiSCe6`r;>gSrx+t!AIqu*+(B*Jv7YHFE0I zAK8Q80>b?M451yU*q292Zm=N>g@}BlGcR@ce=vPywhr7CZh2jOxlGfJwEat}h{tzD zcF9i9w=ZHy0%dS1!qp;aAV`+%O50zbh+H)jt(Kj2s6X7+_Cn#{X$?7zb=I4O+clDE z_5GoVsL+0h+zz4sR9Xo*OL}hYBt+F#(kAqNKTX3%gp<%3`P!0OW$bly`*NFN^%bVp zrd3D?J)alN{Qy%>+#QBVs0P|2rUY#l_NBd7Qt|q&J-rn)6KdI&5-1c?^`OgvS4(2R zDsX9Hw9gr|^yW|jSA2e@gkobn?Qb~cOOB`gCH-Zbr~ME5%gLU0NmdbxjrO$vMt{Ln z?HBsXcu)Jo`b(~-{rmb$hG*qRy8Zr0gTnkT;!dlJU5>1;aKnG%(cH064;PMTdE^o$n)*#nhKaw1%Gwdsz3jfW-G)8 z-)h;5UYCd|l3JkX0OqB^e>-r(iQL$e11A83d+Cy}gP4_CM;wYdf@A{kH)EC|-y-)a zY@aQ}=i)9vh9h!<>YbICiu2_7$^81?<*o95L$8$Hd5|OQ$Alpb#hk>x7Xq#6Puq&J zgYyZE?_UImBTNT__OzcY6>v9Lt4%cTa8bY-FBzL#C$4s$SDJU5yL5QKRXQTzEFBgs zFKxYJmZVbHD`3e)=p~`*2EqD~XqO2&Fu6{Z4n8G%V60bis)bte#I7}Xxqnw;j&cUe zeTi~9w8}EEf34W>S?A7RvAF#EWRPFi)|qfg&syS+#3ZuHJJHG{N`0|3fu7LjXnA#5!Zx+MYlNOWYkOJ#*u?tODQD`+EMG`_FQro0l^N#XLiqY% z^S`AQ#FJLhA8L6Q3saWVmxaC>`lmKzmsITZgqG@`+lykod&R^phDGLj+GLv1uSIgw zYGo>VeM|+~1hoBflW|)TPLGr%#!^XVE0#M&%O4!;SK~y!8hl&8TkiiRx1LET7tcE9 z$zF{u7DS0Q&eZryqmTqZd6&5+?azKeJ^+dY-Jh5UYp~JRI7#@_@G~?Fy>ev`iVgRy z6yH{e37u^uC(A1%$h>OE2)>>)g3`g}+G&mvh<|c?1d|5e5_nFJz_a#RA?gK;BIl&K z_$Y$fz*3I_LNTN0y^w-_=K@AC5|Db!`59{Ihm0>5P$4o;dznzckoo)7#R-&tOxjbM zJkm=@MMDrK!rcs5o4kfV?z=QKr8nDdVUW;o7;NDwoj6sxd{bxvul&VCpQ<(mkSbQ* zM}giA@(v)b5+siXRCUH+6E{(UEw}f2KE3|OD8i(DQ`=R#dMf%Tozi6kpMbFAK&-&xugaCI<7 zd8F%2_N?2{wL2rU=hCbfR~%{syxUwIOq&#-?G6Dx-fCazuHfaNBWcaQTs_+%Z3UlR zJv&u@`ITqgY=>uEU8*#?>(bC}PuDJKv}?CJYh%{t6^Bv~plU>3@ZgoAkV#1s3!ohc_jcCD8&?B5_^S?qA{gz+D@ycar|$G_YcS39RWhte6T8g*7*{+tIaq zQZlS@RDM3-DNfJ5FUgt#aN*RNR0KIfKXOP&`p0=`T%a2Oj-8o88e zt7;wP$8SccN191--c}#_1frS4U}>sMis!cNNo#wt-!w(L$xVH3%QErZp--6TJ`hNg z3#7?OZF?MTFAkU{X+OEif3*jhp}|>!pU6=|+cY8Ja2grTdrW%lnbYTuD+Ui|oU-a0 z!xbGIDma3Wk$v%V;g;>;mTe|$Zjyqba3l63#Vt9cU#!T<;Ecl&WJOm>9}Mo0)AOx) zOhqg|a>b(b?8hAecT=Ea1s(TZ!egud)mXIg@id;cbgY!81^Q`MEH!#5%&#+09I4q{ zOWfSo)V{bWdUMXRWnW6qMn2w&p1@JX$@=Z+DE}&|cYIUY*eiQ`zqObErL6?TZ)x;@ zU*74+4|y9o zVZ$;8%?@-Oqtl1c7LWgDGOlL+>+NH6!Qii_;tvjN3&~SAtf%7jF}wl2+4{#g`EeO( z>*S4ii9}0(Aqy~&&F@M4rfw>Aqf>q%mX!MOMDy4wk4I8Wq+E)LFM(Cjfqd4!Q2GVY zoK0?XZK`+&2d2%4>7&g(i~1VDKzioT3#DpaXEfn?&geN-!|QdFb*LXq)LVYIVl$cq zkAEx0w0flXRB5)R!&GPL|lQXL+2)^19W2O$6R;nxmFV5hVHD2*ArwHIL(lqUp$XH z9_Bxr*4E$6clE!2{Y1nZ@PazvCFpgLnr+vxVveiQvoGQAbzgdRE-3jspLZ-Iwh4a? z{5{Cub^IloO$P)q>~^vxH=V<9Hy~W|dvLTv=W6 zD)f)k=oPbsaDr#)myM1}yF_l+p6slRo^?Fw+D-ASji!P#Izi6D zt*}3>4_O`(!-U6O>($XOF{~NE`Do=0aAUox7;~7Vj5}`f0Q}5lEJeSD$LZfL9K4IR zsA~?fht;?pW7zVq@Jp{uZ)uFfH`Krw6*T11_4loge==(CrLltvC_`jq>~O z!EU|wM)HVfw`Z*QAa;;l;2k{EbqK=6-QmfD>QtE*Gak#ey1}(-)ZnlZQzq{lpcwpG z>#euDqOMgZv8{ztQZ)jG#%_qWS0njX@ocqTWiwlqT_&H|_NQxA_Nr<}D8s~lICg(G z_|)}BJ}cu=!~0_~heH!Y8pN}< zNg64YMudZ_m4l6Vr4dwBqpXEai*R+$<`xdCb6f{f+5)$&xJREzJN(oPq<2W;b{7HD z#dBYhF0=+NQyR(=g?wuO<+Y@nB-ZZ1w!gl)ut6QKp-~%-^%tlFb@TTs60;r1Vi2 zA{XiH&9inHubT4w?WT@f*U<+}pVZOVBd2qZ+JoMdrq-14cu*fe=8>zXC8i=@zoVrM zqXdhW4!#*KZ=R4hx$O9JuLEzN$gLT5ZVVHZ(FsCe%Y0<-6mT2tqoTh9X9(vTlo5dAgG$U)| zDoHoUK$i`+Rw9r41-4TKw#LCXvZop%n^>!f?Ae8huEh35&q6NLG@7A4ZyDEMQ6g>- z9gBK`mgslw+dPr@GTrKzkBFBs;@4@W*_o!s5(4eSs2{p(8oXZzn~L{d@(ezeA9_RXwO%5>i|H zQ;nFtVm*~Bp|ZtFGYK$`5*`g03p#LD(E+1R_pH0(LRD+jL|fJTI9#n)X_$5!(%q^q zG~LAaIwNAQVx`GV-M<7lRYmmS!dg|^^^^AxJ)iD+E4R^F=8|x=i_z#JR(RHmg@fL2 z3O5loIhtYM?Ts~m4=bVwYU30;b*8=J5MPubz2fHH(m)}1Zf;iV_Gvn4Xt4ahW=8v-&pdWCqm$mAJ9e(d5moC(CX;2Z#^2 zOXS6{L<_{%QJ3hDhRk-L4Ex3i!2#CHlwzEjC9t&m$&EtA@;=Wh^YS6#!I3v0_+eP% zYu6=v;eZ9+k8UEy;wq#YmaqN7@R93)OGg}js7s!kV3`a;!++J_dgERY{Gde`g*AyG zi(AIqC$Dl>y^px1vEq}$6_2-m!@gg6e6@3YY3uUQrFktb)Z)(45y6aAb5D69n!btu z&zTcC>}?(!sd&Px%8cfeIg+5~MekIV6gR)XVea%u%@eiiwD{ZQW0o#TbiRL_-8p2o z$iDDfqTaKg>Uc?#lIYO*U{<602WuL1E$I#&%9Y=fAu;`%J4Gf(t3}nb`o7I6T_Dov z@pBzov_-rqV|XLF5GTSll8f83CP;&A%`;;Q<&cd#5{v(x)j7FspA>t(eYL#%WV&aK zmoJRc-TW8N^Vy!~mpLLi-;Lxn@+~#-Els}N-}vOY=!KqNmL6{C^E~f$%EPA{`%vvf z8e^ePvOM47Ou|*gNM2@mp1&$n*Q%ES{2CT+*vkvokcU~}2F1hSgAa+E(R|ZtuN&B! zuLsiQ*RH;5MBCx%%~!V_E?$0RDCY4zzr*wVJIOWnH-2512pwqrIXn09x1Z|;#fsa< z_r0~2`*+Pa@YU%{M!%a1>WO-6uP`_$fa5*1(b^cNW|sQklx61Ytv<1I;)^d%zuE8? zCQdGGLx+cBWI#}C&zcD`LCv{L9#N?E=6T0HE&>?0`vdBUJlyEY;!%V64$aA_Co@SUQ znRY#%=t(qF-+b0;?{GotX@b;KR+nX!PH!GpTD*L;o~KSdPhNqCtOyPJkH$5K?N7gv z8)h$Q7$l}fPDF6b0`t}RrwNKLs}nAlcl7EPW;cl9$4)ywiVgpk06~Pp?jsgILnVIx zlWd;c&ya#x3_3E*Ik1gul$rn1=3$$Z38SpC-mI7T@w6Q}H<-7&%28V0d{XJcidOn*Qw~K8gMd$Or!rum4jd?f!Th)+`}PtApa){ zWKke+Cd644{ei!Lm&X3rKDbohq$a<~X+F4LM5lC#cAlaKBmUA^utFqdVYny}1_%>< z!Wi&F!*~fz79BwMn#LJe%!+Gz@$+BIf0Wx{pSX9Lj4y9JfZ$sf#IS4 zO9SaTXk2^eU1m_yd+=Lg*5+E;Au1_Sz{??riA?Vh2q3kmqm=_S@WDN>u-R_fputL<*m-h0|EMp;3mvCu}Y=$rpi($hlP(WTw` zQlg~4HJf-wt8=nfjiN|-Nk((uCKNFe1L}vNJ!xqhySUxo9?no3*~PF4)gr=R{Dnsc zo*8mq^T<)Zq1W1`bbmF3-xwSFm{tw2F$N3UTGI*an;w{`y$?}njJ-e{s2fCg1Hhj4 z(M)(zr;y@$FSSVwDe>A@XJ0%jcyjxW!06Rp$Hldd;K)#CYN#s}qpZCoa!x1F?oKxB z;Fylso3WUNPD8BQxk|V5#hc*D>gXn}`4^i=$xBH&3W^(b6OqUAnc6Qp9?!}TMTppZ z6gc*NiT>h4+jEa|NSZiM$=xvPpte0xUXFu>4oZsT z=_@+$g3z_ZdqpNBQRJ)rk({Dgp?Ey$*n|Zu(;8>@NtZO zgj%QNyjPDfkP&wt5?ZfhiBY;s}oXahBf^_Wws-5E;Fr-%EhoBrXif&lorvOdDB@_ zUX4F;Rh5)9cPt@i?KMpDP;UuMf8q+E8~!5pGJ_^COY{&rQXt7Bn&_B5^ta}3I{u3k z^v3;X8#aCV1^j2FiuRvfhesTI?`j>7W5vG5nW4cW0EidgrA7jlMXqAnhywaoeRyfT z$49&=J1#~M=Ndwlnfy)G_(oyO){AbFfx=d1EG6d>=#k_F%JUqwD01p+Cxx5KqQn9PFsKCheTz2C-616;#U;u zpU_ZM1{p z>zva28_LAnAIx8p2ydz>QDSK>O>VzcjCYckz=@O~|7J219Tf9u$QQo^Y{({axk=-lcSCP1Cs$nTmqRBUKOi?*YRs#qr;kOP#d>qCUAArfq+0(BMm9?n>rQ9ze36j%``arC{1!j({qqI(7x4?Am7i?9{B(>NH-7sTj(V?L4$6Q_f0hFsMcx zA&N&eFCfeSL|DDrnGyORb3H17l)|mg3R+&<)4sif&lD4e_YBb?h(Uth(BM;;waa-~ zT{;HjOy;M$kZ**-7sJSilwL|MKT16TjOrxbB@w7R*H;yeq0fz6tLYW}C^C4Xgu>3% z(Nco_>e1iZ+`+TUEH& z7q+Keczm4Coh^5=*qD3TLsHrR`*^%;;5tm+++x`}Yx?D+GQLMNO*A4$9RTh_ ztkZ#Q|EHO0-b`vZPvlG)N<(%pX|iL-6&rr~2O~C|=fi(oM(VVVz|UF+{Gwns;$M6d zs!##Dv=kt2gu%qSA8SExpL#q#P%5=u!f?*P`Vc30{3qIcBA-96=Oy5J4mrNj@1wAaxI6HPi_$$I)C`KqPbVEm&8 zgm>j3SR5~Yrxe9(V)PSID7i1;h{FGYoA{l&Sp59<0QSN|$oANLW*P$ILUpK8kJIQ5 zI)tJA8{?5`iSbn3|5@YFESvaWzxwR)=wk8l{PCF+kB6z0nd2@~V32T5XPOboG<8Tg zt$$-YQY|r_JHGc>;4<# zk!p$Y{QSG0H6AGnz5SF3V4pP}T`WGHDW5T(M1F7$gN*1~xc|X;^-9vEq65))61&xaY9@yd%0Q23 z(KQd?9WvLDZL5wwUvfc9w098|mO7!L{UlXXM?Oky{t~c)&7c3*-;Wx=>i!qbGXOp! zvc#$W@$x{dR~!h|uQ5%0aeXlLUFz3TeL~|=xM*9ClP9Lv?r=qRhoQu!aL=k@J}%) z=Qw-I^9WdD7vN=%OOjAZ@u%pnrD z!G!rAe1H!0nqp9heVk}2GO;5OR}UR{e5?l1=TB(_4_j3!oq-1(JUjksqIq>{{1t(- zRTw|)dhBJB(tf40;nZ@ox0*`oJ)81(W`c&YqFU)RRV7W=)R_Ci3hW8QGPFlZdJ>aH@^M`vt<6 z)u9WR<$4Lxxk-IPu8GlK%F1vf@(rjBx0;o4hnDOYY5Bu!)p7WBHaZc)wg7bKQio?{ zCtu)VCWFc^H+~umSIGgU{b70DjsEp|8imL&m3aF@^{;lSSf7jQUDC{S)p}8ws59mZ z^@xyECaTpl1*X2{ZoJ5nOr^NcL@PL;hCL>18^UQRVWGy&p)i7|7^scPIVk=J@8*U9 zuewXSkGgxRw1CAehUU{rgnl%A+Vdi(N!%?eax^;8$QgA0vdFAVX0c1g>!}6DU;VSq zbv*4)@G!}Q?{J#zMa-6Gt(atomZKDyYc-fg>-YP_B0nVMxS?mhtlL%(1^ zFk)lD=1-5EZ)3rBJcFDX)l$=!xMm;RxkN986V<=&==$83y{vBf3f2{pXZ)eACFbHx z){n5-0UhBqaepxOe@-mlu%z7Rt@5n#fGt^CB+ql5`tGOcT-&n59U=rT71g=Ra`2fv z{lYIbyY@l28CDUR&@-ib9A)t+rh838>OcPbsP0{y(%AUX6lT_8F8m*Vx3Lo>nNDC7 zZ8?jJ0+>3r?2{Kx6BMOfC}lg-)^uj1dWx!jMoSs?e6VvlGO3svF47y84JYt1K8~k> z@_RSLB_Typ*0z?L8H&*=49VEWT8iWh)19*GnNFWO*TzHZdD<*)+clcA}5_4c6x-uaQ#Mf35UyTzTfDw;q&;bj4sa2`cM=(>n z%q{N5V#cL%gm?VGc@(wU_ji4G1W3{>W+Jr7aTig~eO5`y!Im@OzoK|L$UY)zdQ6&b z%>PrA^RV<0;HZ4C`5o;L0SiEeJ-P$PcSfjF+U&H(m27M|OK(gYX^=S3ZrPZ&pwr?e zTH@J()8%rD;wmfI*!%_n5f5lbV5~K~WOFOK2H|MC2uFK4kgOogmZlP}j;Y`&_Oxc9 z=E+p=;yJsNmvIXU@FBtrDBzA1q@3#ifvlPWW(VW_syUGbewF+5kcGn>1V?#Q-PhRm z%>7zmI_diQtc;SKfcH*IsNC}o zzt#N!uOzV&o{XtJo!}Hi;THGP*b*)P&| zd^DBch|IrHU2b||pOV{fH^Ny3Y+Q^Xv;`ArhL8N^S`Dgb9)`}CtT#FANbC-HrT`e1 zJ$4gaSg#JW0NM;H-~akCqnxH*{Efk;eceyCtdu|ryPUd(K1FM(at|JkNu1MgCh(c` zar47>I8l1wt5l_9p+A5Dx89=(w5m^=0!b|jKNY=5qe_B*$#RepBrgk4cnSzUN%D54 z(4kNL@&H$p@NJi2EjHaG*3XupSUt#=qZ6Z7hs%u#j?II(XwX&>VvNjHCzc)R&|ZPf zZFZ?7R;8O{@`tQP^SjLUCXslMyeH3bwUa%HM8~ylhn&H}Qb%xN$Ag>>)fG%F9u(6w z$68(}J-M##E=^-KpNy_9`W}{3cm?C+aHC-`i*y-xaz2J+dvYe<9A0a7`Q10_oN0S| zDt0k%W6?)?KtiLV~!t>Ol5M`O+Ebjb83Nc3GdO(*AVhbibnSdQP1?!wv7M zex6x1JH2eIY!hk={2VUHblC+P>(rkPq+{|@h2im?fT^vnFfLb-7=$juR0qhBC2Mw+leGX!)|`svt&i>w-F;537C=6G&8XftPUEGi!N1y^eGm7w|WYzqy;{=2xev zZ>^A(DEc_bEs<05N^lq)&(&Edn-*G*;ey+zI`qGqx&%F-aRJZ3_|BtsffseAf8vnCQ$N(cV zNR+4%qC|}a5e+IB&;-b$2xO5&RF+z+)7Vzj89*fgI!WvBI7+Kl?P9gHt?g@HwJHX2 zVbKJ|;#L)l^`(}!Hyzqyr7;Ma-}jvR%#yH3`~SZ$pAVCn=eg^-=bn4+S$nuDkKP)k znTZ;%F*G2mf2~DMCl)!Hxk4U`Wlm%8T`)9wi;(GJ{_}sJx3$un8NG}9JIz_4_xVzhEM^V0HRjtN zfqs(s-cK6Rf~%tQJu8ROclj-i16tqkw~2)x%Gt1>! zfM?o3>XBC;(Te+spL}PfYBTvL&nmZAAnUba<6A5ihJ9C+ZoU3;|5L9;XXTIHn*B1P zm4)_PU%fK(mZ}jeaam`ABdIP;(2lP72LDs*A{+NnH(W>?(OHGmD=O)|YU0wO0{^#O z=9U;g7LTDV028qlcvWLISj7@cE|&|0&XWRuZfT z|96;C(m&UjFYT4=9zM5lp)GtLg`JssPJ_Vw{6>3vn(R?ejK%E}QdXO5(uNuKcZ<$E&2=h{=}ZKA`u zr_N?GP@DC-BfZ?#-d!ZqnpxyD6zWjpmCN@e52fe*t6%3_B2keZN}Ejwr70F)%aF7k z8CGy1O_~4FhR7Q;gaR1GyWp9|klCU6ki|+~KtX(F0XwyH7Y^v6ZUwXpwN*0C_)LYq z^51&A$m7zl;_dJK{y&mGOSPo@`IMyz`g$OJhZKbkI8lY}>9TJ3JaX@wS}egk{q#qN zxUX0aM@Jyi=YeCB(r5Goh424I^O0)F`83{qsQE}y=2NFa_XEtw%E#dbwP0dKZ{By1 z86~%>ei42W9z>=HM#-Qw|ChR#ialQY^1kzHf1&U1#CiF7`R1fra=usJbg21CQRaKa zx24db=Bou0^Znxw|NZ&upk%&htGlPp*ZV*J(Rxa?K(8IVwX8?j|ch?K*gQ*O2onzCOK#(K+kg`YZF#Jr?`_ZP@=`l6mf> znb!V)LssjyzV`n}q}2kcOJW}`pIGK^len))kHJkp1~(n3GX;+d@GUp}zod~LVlACq z0DH;Y%UDWUO02)1*iT#T-nB2?sbmaE@=i0qSTUorv}EZ!THU!p@_e5LD+$ z1j?08ry$M%+`q*fXA6v)o$omhd*8GU47X+%wZ6B{tkjBy*OM%aLz2POCQKJz0AB&>J4uH)XQ z_gTFkLQ=RFHj>1!z@EEu#WC~l7Mh2E64i*@v!=;~4a0u5A6r_KXHJ6z2}QVxU8n1b zI_MOPyGLQ%JyMLv3f6E33&ckX8y+kGFLZ8Qa^*`TUFMDx0Fl=$7rJoR24u%E5wqpP zPo(?SI|Sh*|58@hweoecI3_h^2k)fGhTeB{3jVhL1{y0Xvs>9Mlg9ene#B3?q^Vit z5g0(dR&TGRl^!Vaw4%bGJ&>mr6;m?9)PC0mhX1xRfgP8&0=es*EZ?_a=qQ`u_ZMpu zGNvIsZ#ud&*Zi2ocx}J6O;_pu_((Kj7c=YY2|-I#M6I`J}`NvE&&r~kw-GM@3laZ8IF-@fCVtfRjhBG83_p}?P*>JesqzdsyDcu z=F)e>ng|a}{*OSzsb0EFPsEm!f*Ld3;h~H5w!@#_r~5~Wv9cGjvX(PsWzFDGN>h{ajK1uo>Z8SeN%zOL zde9=zqJ@YS%z0|qqXK-{{B%GzEbbEd#A0myB~R+LH)UNgOa2M6mdoigH&w08Rx98@ z27;v5A_<4=hMf?@Qz#9|auAVwkEWUD@?TUGqM4%goE z#HM4-^4C+FAapyCwbGG4zHrT*a`iiG0&uB7B$43{o&a5s%*FKzpC3!TG#_VcL}DgdE(!lpTF&C>Ee8(-A5VoFZP8R zIsROBh$N<;h(gL__FO{K66xm>dtiG6uCoo=D|H1RXM*_d6>umoMh)*$kaK0G1lzqkE@bOxZxK*<=LqIf=u=;>SA~ zy;CLf#|{Z>ROXEnYd)4&=6K#(b%!r-+Jm$b`XZLGDpd-N=09`;CoVZvniCK+&8e=>BwrRtv9o1onP@nNCD|G@r|>=ti)|0 z_!^bW--gPT3Aj?laxBh8{P+|bNvy*VfFq6SBeT@|VIkW~Fu+U9jcD_Bp(exw!t}$b z<+_2(mIRTg4|*@vRgcn#C>10y7Y^+cGTXP_H8`*=J-SwXu+WyBYsVv+>YWMx9XRIT ze2>a9Q2Mezwq8~gcP`YUe$sgk7PwBjg^K9ealdBoi){=F^w{LxiD%^{)TH^|#ac-k1hbwliSYo474@SK;-Q&M&eRR67 z-b{bf9x@e%aTNsR5VkZVAP#CcE1qNS`K~=0_nIwF(#>20q|8tLu-D#s?Uw!g`%!NN znM}CjZ13t}8Df=?_Vs_yifqrWEajw;5Fg7t&c^uA20U3$Zl@o-f|_?&yesBe9eoEk z0j!d3!NTJh+Yzy;Ux`g$Z1&ux!|N)O1MLP+c6aAgpMWi!xJbEdxZWANCBon)XG7J6 z;+nKBd=z}t-#wU#a^cO0`i>SaNL<;PcV~oOQOm2AV@Lyb(TaUeuQN2#g_l7%ry4T; zPXHOY*#jf-E2iLf(?$F%cjw=}U50J#5kdu`kxXJ}aGXVmi~Ne9Nh}2axJft@G|Y|S zS#8jzE+2MUDDnhHBO9}bWNLf*U2Zu%JuiCP!DVuoHm!V^PqM~#z8E;L}u3)ewa-Zo)_xLHd9zW-j zyj~8Dm7d(lpIwiiEl;y#{XKq$#%2U+;b%+MnQcE5e$o@!=o83>e~h}gBESIMVd(xO zZ)Uc+eiQR?-AZ5^Ml^+jWtS_8R+YzQecAl;4n+f)G@+zOZt6>3Y7m!`9`n?6OFXwS z5{ReWYJ=En>Tn{_o(QKS7X#RSud{GGPOHM-tda*ab~||E&-6O)=>A=KOj7OwDB1=!~$ccvWD3 zG^0nI&dwFW#=QQAz~e&KiotxyTBpvusm1PJ7dX{LX6tw00GdTl8!rpWrCrlPC7@T` zZJv?>lIrvjm+p;RLb$pAALU<|ha0iZhV_Rq%K>{NQRBs=>w@u-8)4{&S^MeIOhSyT z_sOI1M;vh^9bR*vV$?j4KrC0nHgY-=G-4X|t_+lE{-O>fl`Y7iQswnXQ^lp>qV6I-G;2!xe%q0b_OW^DFDq(FI? z*r`R|vz>HSnmIIqHRrQV#Y1dfb&}t**;)b+*NZq=CBKu*-(1S31e9xKHtt-3EzE@zVvuPjBPG%x20K zyQod(?d>A>2#pl3x(P-N5(CYtGWXFS9QD&~gX&XWfaOzU(i%jZYpjTK4r#5Vbm@7d z)c9ZbBA1J)6#=*asosPCaO!q)z}x@HKhVvoUgYW6jDD(UTYr3Z@k?GLZHIo^`nmWe zQpa3;0pvzUt})-^+Md%f9IVadG+HxxOx zfgHzx*W#RcuX6JEUtUBjhktt>hOvzC|3L3&^PtbstoW2Q)MRWv5mKFXzESb@h|7kQC`m ztfxy~ATH<2R%3&%YdNhyeX+KRH3pMPk`}VP94LvO@=%gD=g)&|53V)Wp07I(5|9kC z1HP=-na9GW#RsYIMq?5^pOD9qJzoE}*1)?HYTmmhClI?!UevX3XQkHc;=^2X7s%Kq zPwCW+=`pg?lB<|Lud$`~N$JT4DE(oFTUtA5Xn_dtGwJv&ILpGu!Xn ze<*h*iX;7=;*HrZ*5pg;j~$@+mk(IHK#G6k0L9Nv4t+NOQ1KusmOZBOODL!;sMZux zxl3eZ631|&$C={|kMpmdn(bdbokSn?nKk~^*|nGww2#1WOazRvm^5ZS$dSd$>k_GP zWMaVICdP*i9c}V5qqA+N{NZ1tfAuh$%f#Mk@N0F!VtUi;7n1h-M>K)g4QDcpEcx$L zUZ&@D>{)4M^m^yRSu1B{RuOKk$Jw;LE9;}5f;@l7{^&s`CLKif+JEapw%h!9?y|>psB0z&@G9=ue`)r-(0AR(P|%hhet^=O z6Q%ExkxSs28qXR5mszuogVbW$nrXCQ`!#QT$C6bf1o~1!%Y4&q#OXbMbxzH94*W3E!%k?WKjPoN_H<4lc(KguH(9!)5+)fN zgI|@WPxXJ=Do-Ei_f(G3YHw}ueqO?leM4Up)l;PxqzA=)X$tp{ho$b9`@ckXT}xCCiRt1f^jIsE@6|L61n&-@Sbzmxw%S*Az$pH5Pt zcbwPe%jeSKYcz<*3%Ak2Al@Sxu_@)jjQRE~yu|$To9r1}RtQ@5K#0Cxe-)6^> zN?oq?>|yM#JIoreMtKu|tK=wBr+ngnu|l%o6@e;KHCfn7|E=F)=W~K4A@fj;CS=WmR6&Uupe$JY=wP9IZ(%41p7Z7VGQPX$xaMZQn=iI1LMB0&;194@ z!hqd;2M51=0K2@;#=;XE6wT}?gnjPpbA$83O z!S9@)9KC(Tes*S0~)#Vs``g zi>J9?JWUW2EVL!ahF~|$b&q)%*GiD<{|390w`|$@`$Hx?$3i8CT_2vI5D8VTnFhr< z%-v32%?e*rW}|5UC>9j0lBOWVTpaj#3iJ+6#l04Rql70&cZw~hmH>+ zN+eP5rvy;iqm(2jpvrH8-g|sp6U+{B6h$>31Bxuu@1 zkU~%4Mua2X6$xmQ)N1UMb(3d7dB-H}Ty}SfUwBySmvIFZWKMA8({BY zsE(e7sQ`NiQ^?K0Mo7-ym$**YML9v_2VW3(Tb#Q^elU;LkRPl~hRHkF4!7r*UY}o9 z*UbN;9iEIUm*6RYUm_o|5d$$M)<<9<@P&s|g8U@!V^vENfUPbzx3#!XRYpQICV;=1 zKuUIgM0ML|E)Dg?D7Ns2B)yjS#rFE1U|GIo&bQ4at?huSaIL~$z_pHf5mxC{b1b0} z*=FN{Tcm}>X=o(MCbPHslV052&w~xhG9w%rUw+psyum1dLpyqOB5*^bIY9P~P_EhY zGoldSPstz3(Dc^ed(!kGD#d>yg7PZ#0=nYiXM;QBl^oCUtK^lK^4V8E4#wq`*bv62 zHyv%>cucp3Hi^RaRk8xah|l2W@7`S7SYzftDn-Qnp-qx#279D|a%o^tP!^;8=X_6W z5}n=g%#Ir3q!m`Dv@}4k$kgqfgkJBhFXRM%?*2FYy^jC#SDszS|K5${c@lZ*LJ!H$ z#i6e-IE?uu7Px9@Y*yI(a;bJH4qTEe=Xf;@vWG*1WL**&^-(J;b120F zD_GO7NS51Ou13<1mpA1GFYZ?)H(A6Zt&AWf;pOQ?PF`6#&@FNtK9OV{o9(TY1HH~{ zR}Tr_W#W?;Jei@khiSrv9#Y1IH-FOG5PXJfCa8GFEsBblSvV%PpX#4+K=w5>mBNHb zswkmivW*5<#iRx@*%#cD?%9`n9gbklxYS$Zxo`aiqu5pJqg9^JOsJvC#kY)13WGmv5oEy8Kp zAW%4nb0YC)12$;2v!%mxPKI#^ODL&ZXfo5>_MC{EP~%L@nm>;XJJp1^^tXydgHy&KHoSF$!?3Pc?1g`}u$3dijo=qjRfJn;vTORrzrz5B^y4=di2 zR7>g?PMLlv{el!lzi{FeQt06N1ud4)FZ}fD`w?xMk^_2?jK8B}5D9SZrwTZ^6DU0i zOIVH2U=aehUp!(+AU;rpzwMXvbmfg~{0JkBRLbQ|g)|mrg=j;-G!>0kr}7dTlC*pWAe^DE8!1dEXnvss9`>8|;1GYp4vRv>wsqeN1PordD=)xYbnZ#XRcmTF1-uBtv1eoImC zd&>Mn7Ag`nw zvnRD^z{-RW@5#%~9)C=1m`giC!%9EHaAkruT=BIN;xV3$|ARAomvd}%E;+JH>H9>d zX5)zsYl#H@%e|9cd$3mN@wfhv7mU)iR>9~qgJUg`JdSL16RR*)S%;5iqq$$%Cr|Vc zrYe8CK?#6Z@Z2ChipTNz?y5jmc&wVJaf*HeKGPQKR7dzK*Ps><>M49$GWI>q6cA*=0 z%eMB@`4P^CW->8CoQmzp3Zl8u`Cfcjv$u6tS#y?cR^PePzj`Q}533eDPDu{5)7dh3 z!%RSk&g3Yp(c%fi7HPyY42u^vZ0SI!gd%3R<5$C$zGf|0GZD9jq(ZhUQi*ll$c@gt z|Lug$O>e^Hrs^xPS&L2E^$O>%#gsZCW4SC^pfi`5Am%Wb?SNAf1PrCk3%`2&K^<@LS?>LHI%3jS`UH zY0|PX@rx`yhRv|bVhOkz1q&#kb_vs;#M$ zk=$TM(r2=?%X}MQaAyBhc9dL)dqbnBXPzJs4S*ajEEW01aN}&OHK*G)=EJ_G?7R}g zKF>V5kgJq=nx^0z5V}cUdLBzYF)@zY>XILEZ8;N!7cqptwOBSFW*Dv@mdnLZD#McTeN%q`^hNG0#Z`*$xAD zDW)m&=XEkD4AflqgBE9VU`7LaMN;0_x~p81YH*E+P|evinSQvY5C-@+n7f-{m4rV( zA^10n_eHl)P0!c0wi{7|b=qPC9t}8g{p}|@om3nV7hg`|c>-UG1z%c;Xapn*fOP|x z?h5KRB2@mBTfaksBv{viKF}yLH`95eY148Eq)825?>lTQQAX^+Y*7{_b%?y%d=`BM z5T_-jW-c>!be;LYc1?i+KznMu0|wINIMOy2^Wi+B&}ELG!)!Xj&gc0?#=myC9AtYR zVYLKy$2MJ3&-SePYi!ne=Ebk20M15}xK0EktEp`;(;r96CpNwFJFtis;Q_e}*o^L+ z1b&L_c(k6Ah7-cV9ZrT1b?U64S_r$u^(y>Cd|SjPpM0| zxWPFq6a^=I->1qJXLUl^asp?? z@v3MUuAv#f0WgkWa=#dYymgldcBPRlf7{n+1j3~rmcgIWWvue%u5Zx^@*kw6h5Z#0 zsd%A_Jx|N(I9m?WtT0>wmde~S<&yj$T|NC<>K|_HMN%~@e(lqu<2(FLFSDHvqtj5y zzttfr7mJ2v2@J|hMKx9EzcmiWfY`X8WLwu2A~e38NwhEFBesOo7%_c-fs0En@&zaJNS;q$DW=b+a4zHpBDInHHi z?DN5VLDIN3*Vj*yX!L1m?%}oc#Uv}8Tys(9jH%b4Bm(U^pgqp~eQw`t&_zH*^NEVK z@?L?$jeNM6WudV7>J;Vg$2$ta(ep&(AvP-WS`#e#qU;rO#~;8+IVY50hX&Pf?!U@r zkNbjUw#0Rm0B7p0u|VY4Ks4zva*-`EQyM|vb0m$>=6oC+%%xHgd#^H&B=#e(DvEW< ztD5KfHUzJQ=wv*%L^{~u$}7C*4#B_tCH%{)GtZsr`j>ZP!NjHKm-DyXM@{E0X?tQ;XhzfQ zc5%!K-a=EdhxeK|*Q;8wJrbEwUGqtsX_)V8t z!${l78bL0z@5=(w0~pN3?|x3@FdJ4L-i*Q}PMbgnlQ^y)SF{Un9=}s`k#m-aoSmbP z7(x*BreM27=IqG;ct76`gTDkW`|EO%eD~uj65u1U(@xvU%Luv)UJ$h zk}|QgRQ~P>{+6EVdf!&;^S6m5J79{n$x_xt)_ZEr2RF-^&+QXlXKYhTtn#|#YMf-= zy7C}k>iP$_cxRZC<;0{Zr_LL@C^J)QDwl3<{<&hc9W|IaiNabmiUUqI>_&E=7Pq{- zU$S=D_D!aJA&x}84o_Bwxf;*8uFsf}naek4up0~C8D{eoXdDJR|56zZL0@x%?=jz+ zd9uI_xjM8zr#lapO!%$Mk-O%VQo7VTa8Xe^Q6ITqVT zx!ScEY$0>)uV~dC6U(j$59qGU^M>DNpXWXfbG*$TJDrNbCjh;Mj!Nrs(V=@x7;i4) zg5~J$>k`W>=UD~$aDXph&vwE7b2>1dpY;K|zg5u9@kh(O9Cg*+Y;S$+E*W`Ut-1Fh zKrdt|Gv7I1P$pM^-gTl>Ai!=;a0j5QO@eZZpiUJ&Svg#cRwemSmUWjqkOA&MJw?N5 zu?Z7IW40N41)a_E3W?0^W)%qpUR;PE z$o@<85c9}l12}!qCClA^9F{$DhUzW%sb?&i-f^jiQe!fxr5i{k@pIUAo`MeHx=#N zox<&0FUZ|&;>W~h_uwzEk4AQr5WR*br2BQDMO7l3A>N>LjiJ;h!W5E*9VU7M0}D#- z)AsMlw*+ovnj;tJ!QFKd?+&Pr`Eb4#2=1kxb$XxT%-xyxvqao@8sPl;pjKjYe(+VP zUeNWVbo-&SAq+$UqvUimx6{KR+qh5LD2|63%tvzXYzAPS$=`>lg>olL$Uj1;lBUZV zOi4V2_}L<6H^J8D5f^t>7#`v8KO3$lJ-L;^-KSy~=R`0#g4v7RpNr@^te$x~ac;?g zc3_Qp=m=#T@#x_sILg(h%e& zX&I+4;XQb$&yNchOTEETuT1Jyc^ZgUsTC7etO?#S$q!2;OqDCVf4wZUH?4ror-2*R zZ&%5IENoIYu6d2Y2{!$p7~?E7jh8EeCPKo_@Cr?+HREp3)}mrc8V)p=GNjG4kSK-{ zOpG`BGU@ae*;$=pb`eZUjD6plrF7_YtU65PUFetwQ_cZNcL|@RWAC;Up2_5(eK5gIRf*PDTUV>e29r@7jt&`9vcvA@o}{%U6}yN(`J>F%p0n;bzHiOpQCBrkmQY=aoDBH6lSauUx95Z!mA(?gE=S>Y;V4TPt;z zx$9rw5Stq?qhP?{5H=ETpKr3zB3%{W&Q1V?%;g3 z8GobHLg_H8r_L{_wSnq1#e0xA2s3(;da|{zNUw3UnPY3rOH_%p6myI}N}=VYWnsi? zBzDU*Um_#1L>b!$&-A7_>#G?kN!6zyM0AI(^^`4ZMe)b76e;4ADI^E8~MD{1kV-*cT}5ozAv`VT4^ z9}OoPbSgze0e9o8uY;-!JK%#GD4B=-8`R6G948!z%I}F1dSiY@XintDyo^wNeQm0^ zzg49I6(p$$G>XJkj#<1GBp#=zh4Ok|Yc%2a6g%h5ck}EKfwQrfBhiz5VwESiq)*Oo z{@$pIlN@mHLEg7tonC01d5J=x#|9YNq=e~D+>bCEOIA#70`NhwxEzHkn8WajToTXp zXAn@COmRZWo-7j-P}E-f_4s+jeSjyc$6{QQ%{jZC-^du&N={bObnhp!v~t;(JP}y` zidLh-iz7~covIh1Ky41>RG0_We}w38X73ZU#U#`lJ;&Vr6L5vzN`d`spiG$6T` zD$So75?HGAv(fCJL7Gz{k*+b5`E{79x<9oVsqNBMAN8!ZY2_C`89u}d=X zd+Rr{oa?7^J=&RG_S{HEPV5p~N`}~BCB_jt%F0J1s&Zvra&WBM{OC9dizXR1pb7oq z0erz6P)LlRBya;7$!d0-(u>oB!!lFLR&_&cR>+K=E&CHc8rP0&I#(hwX%vN>1Y_;V zgk;S2fi}qb|9*|0pz-0vl*ZV4cD``zpotN6G~kpFf8o=DBl*=HN?{1LYA;+&H#2;- z3CqbHT$bo2UJ3GfqeW1j>l5J-G1IkB$ z-3?|`wjvz(dw$s9Jg~(kr^iwlAG)iltTEs@qCr#nOutXpn2SS2kDDNY?5Y2HTV^ae(W&MFx-8wg z^zQjKu8nq@v_ob+O4gxA$Z;|w>x$SHg0B4MK>mYLl)mQ3B9Bd#&+k+Iv4fN+KZ5f~ zNq0h5-5bh|h4(ek2f^Q)Z5^gFikXpGcAr?mJe7$?hvo9FE!IrCJ?+;R_xByh7*BkU9I9$nl4cYrciyrG2FHW z>nE5v&`sz)XX61cy52-fBo)BZg`)<`MY&eXP28=TP!T5ICvNKf-phQ{L;#fZnXxl* zuINL;+64}PBqAKaytkJ;!Pb!Ms$2xS8EB_X$;3IrHfCLrToCPF2l}WD z#-7^Da>$y$ehN`e-^>H?Do$?Z_6OhYBQIz-eSb4wxt~MLrC>5XLfh2Oz0XT|b@1qV zT~5AK{0+A~=_uLWS)bpYl-Ks|?blvpXMr*kjgp{HTSdTV{y0U%6Ksl>QxNjpXv za)wrzSj8?2_UP=LZtN>Fn0fUveBb5l@wZMD;WnpLZc}C*XZsFQq&|{Dd0a943YM6NsnU=YlT?dY1~ zy(U$+m=|9V*pLDgpRRjxy9RBp0iFah!h;|#87un>rQN711e%e^QOP`(OKC{u{*ejf zE({M6Gr9?kE1qMnTc3!FwfHXK4oG1+maed$yFW4H{f<|mhvF}QdkWH$57%yGxZtum zOIz57dr)`^F5kKS)r|x2+Rmxvho_ET**Jh#Wy#M>eh#mxtqZ5Z#nIE`GPjUZl1S%0z6%ny4OIbpa_5_GQ7xiL=!N1|)7Axp)9RDzY> zrdtG$hZxoe`0M2%$jHFiF5ifhSXow^tekfNHg85`ORv*w{S~)xCY|{^dnNTmKI;w5 z*WjN?>)kCaM*~g|-(^Rsr51UV=5;7l*yvCtjpsxZ6F0@UWHsaf;a|!2E#y2Fj z{mCsM_@FnZZhQX{$YJP}-n`tTQ_aIX_(XZ}60V)YN(13>8XD@f$c=bVof7HI3XMc! zk)!GoW9(FdOS8{12?)~Zu!=Xm~K#Q%W% zx0JuqpTZm20vS?8J3z)G$!E@ah^Rxn`@T9(ju|A9&4b#9(wuV0Dp@8GSfca{N^3H( z^Ae?(zJV!qX=R{gQ2XhLTFy+Lvlx#*&-Hnvo*NqeQ^a`CWOG^P*$q1ZYT?SE=N=vY z4R_u}N0I5~+=k5XI&Qj)yerGI&aKP}KknX=WZ>>UoZB#fywSUIIAOkWL`X~aJ!fF) z`j+9N*Jtlq{>j+TkmW7CV?*Bgb|f1cu;%VrH5iGQS5k(}k8D4EUTO^l9`Lqufp?A< zcdbMRO=b9|HI+3&oqFFCwHi8-@F0STOg+o;e?%I5DLircd1J#3@OHwuWa&7LWgI>!KGYx7eOloI$FPU3yxZyqqmf93L9(%(DO-BQ^_kgDH1RlF)%-1i%-C@?bqV`{ae)Wxs7d4Ys`vF7+oX7yZS(l z9l3vFc7Gv^+$t3f30>@paN^?5snS3^cRyP;q|x9MEh`b}=?(u`_%bKEw4)`TLopB4 z`ylZ|82_l#5%+S&bci&DdY>-K(0T$ys*w?YDuO(OgIJ2oNiBP(p?)6hv?05<%;7h=PdH+!S5vj4e&hB~u zYOY9%EeUDb6=x?dAi1i_M{xBqty#%*0-LMN^hD=+a)5bbogua6Uw_w*8qE({;jF}Y z)f2_+Tk~^y8;n>o=;bDSeA*%l(ky*J@zgyC_EQ%M{nOO!Tg)4)T#%d=Jeq}%RV_|} zJRPTSN%M_K^ilK1lRAEUmeGVVhXd*PlSd`gyk2CYgV@zAG zM;Azs;bYYkN%9}SJevoA4$X{ZP;tUt!xZl$9b2b)_ixgP7ibU{7-8jzTC@6}+AnnM zN5M;&XkVndz;sUrIEXGNgw4)!GA34dLxsUbG9R%hPA=V0b29T`GOBV(hQ8B7k(R!Y?7V2Ii#au~8-t5chA@(Ddz-+C$YdV{m=!l05UnBVcbRmSnJmo-}(i zK?zhkdTqbS(wt~zK4ZStF0T79q5;7{&Ui z^BCs#^EB!NS+=vyRm+9D3Lnq8$DbU0Jkcu8@<3VN`zt#c^#tY;%5Vq)M)8fBU_ec6 zeelk|kkffK`2db=+-RA8QZ($FHYS1etGQ|At3$S-` z7OM!DFwPY{u^HQI8|n#7r(-Ypjf_2&FT(NGC3+Sc8|X%@O=E0}|LqkmoTcIJ4Zg{86Ve8q2H&Fn;mhzoAHMfuAdrA>?9_w9cSjei`^@G8z}NPig0F`((LpU9 zv&H+u_hKR_DSZ8}{eOq=HtbRpqkpxy@90zTRm{xjH+F$A1C`}Ap^uaU+L-vg1Kx@g zVxxWA@lW~XVH)jHy6fzo3|GlQd6|wGpQ^9FA57HOU*AmCm)~98ytV5~{UuLRf47$K zN&ou$%0zwrRhgM}1y+A3D2)-Xiq!!d)jE7)<=EoLw$McNgoUE1&ZX0kuvtK%zj z$H(sl|HurOqSSoW$?rRNC+D|I=Hp4dU!KqJko#WuAJX7{Bfg6X9bm*gHMQ`E<}a>A zq8;%Z&VuBK8IShgnreT4c${S*?!~G{#y^#{yB$if6oi)_^@|u|M~0q zi&E`#7LsHIJ+UGyd~5unTg)w zw|%cfV8wyn13&JCbft`nnQP0Wx=FnkIiZ<+@b`gdcz=BV_ux}tT6Vxp!?9WDnc%i-W6?J#qy{Dx?IMMzKZu|UR&(ch@N1x~sW)blT`Gy-<4Z?*9X}|8szM0O+{we??^} zKDYgA`nE6dZuVw}{lbQ-WZBFi0HF24V;i&=9{4^|Sh9}fN!SO}AQYD};*EL>KEv>B zXe@Dstu+fWVX`r5#{xeD*#oc#!dk)&M%Jh4oAe&x$#QqOEO$;2hsqs3Ng#XJ3&)gs$3!%Tj+gYm1MkH7dlS!odmVjK~0%rg*p|} z0=YYEeBf4FCcjUafxWNk3$A{>g!c>$>+^Py%q&0~(txG{(%>-Wt_QT9ggP{n zRJiMpOaWIYjE;;3@$)qG){yV!8lpK_;P``gQbecSwOR_3lzs}Acz>(-Rw5~Pf#?s4 zCyWNr?7EF_sd4{=Ux~S;jXQF)Hv{`78N1j6CrY?u|IFNT27|r98$ULBgIu(RX)ut! zrJ4rCD!omaHP1gx18W6*<{Q=w)aj6^2W5!5bhh4L>sM^oU#?+$U97k{B?mr>JjQ(sN@RPgy zAUv4^>{?9h^{Oc7V0I#B1z|2OB2^nrVYGwFw7|@MRFQ^({Z?G3qppT~pi^pAjzdUQ zBBH$hx)UMTN>8|ux*LlXPFMog$B<$DhLC`we~b%x2=8OR*zMY2evuu#!K0z-X`dViH>$L z9DB6RXiJ`%p!q+1^)(Gf@@9ek&S%b6GnDaRIJ;jw3*aHfXwHCic)TF8^&~vz2|Pme zz(X8Et-*2v9v>Sbcqu%#S$O;+3wX@WGY_!yAZ@vBNJbYP0~8+Tn5jh5jE-bHeJ!k5 zpMLQ8D=~m{s}}}Ort@@oEHGcQT_@oY0v73bf>Xaq&71tdZ!f(elP%e=+SGYv%sTxL<^Hpte2QRE26Uu))HB74n~ zjwbuV<9EeLc+BVrkC2&b`%S<@%^3m7Rlu+hNWzyUL9$Y#Y+4lg``bZq=ccykZKj zuue?VqjP;F+aS5)=|Tcu6!i^q{jNWDJN*evFd+^Q?Aj+*2;=W%Qe)yiDvptgbUVf& zh|k{^3Eqj-$PuPCgyRFWoGBMNM?>GsxSOo0p|ttg5>jGZR8-Aui4ro7TwO$u65qyD zyd0;8rE>CD?9D(g0^}z7Z^z3ygq07o|Z+~kqz0> z(fgb~MYBJP2TCh^{@bT9 z8iIcm$0nT#oF~!XxQ340(`%|4O{|G!yr^hG_GcZrlR*{$!?v#~d5IBDan=)yF0!Q>Po{-eT2%H&+&cdz`%VP6&mg3t>k^f1EjsL#*^2>%)wZr%+JHY!^Qc(f zi%d0R^lLHCUE5b<5s2|R#>!ol?$d+-#PYb`p))&kjSW(DqCJgJ13jR_#{#Q;AZ0M~V9aUkBKoSOXUdR=#(Z|j zn_`}r40&Vv0R0pj%m8x*Q!ue!8h^Okd`B!mQHi&NVwLZ~&gr~4{g$2*`D|cw z4tJUONarXW4k;pIGnqIRYlGmLF2tnFt0rYK{k+4BwiG%#Qn9a~GP2H7`tj0x=Fejh zl)>!FX)-<{9)U7sC0d+QEj(<4T~ibeEbFk?Y?igo?07q|tf}P$RJv4(cM2HuNrkhkyV9E#T3`u93ndOkDEjBBZV~nBAqY!a@T2B@VcOC0 zA`MBmmV&C!_?0fB(_9d(gw$)Pkv2BmgGDl(WIPTE7uv#+77o11ywD;BaJ>ZYMZS!w z?)J>V6@lmwXGS3o)OdzPVP`6R(V6+IS@^ufzB)d*Y6Rk=lirYiJwI`GTdtaB#7}kd zAyMX%H}xgwa;`>8h!0ISS`Ge%VOgrIWQiSIZQ4dil~gp~BnpCmmR}BCNbHS=GDA}z z$_gFX;4BW9FG_F^?j>{hJMZ6O+2$v>t5+<&5VKhcUvMhn2*$OHh+X2r1bNb<88OeJ zlFPow>+#%1Uz5?j z9y}4ZHC=Lh6Ni7=4f5*1EwS#8B8x=`0*V~0{PFheaa)ka2ghb%R$;{@jHK@Kx`=cZ zkdMmWR>}MbEP1>v=Vj^S@|A?0Tw+0-vUKe-_M~Nbean}L)+qJQ$rzoP{y^!8*kaG{ zjm~5l>Oq;tlJ4gvfPlpJjCszvcl3tWdt!NQ9vB5@^XNgO%k7EhViA!`Bt~f8dz}01 zNbZvxi8rz#y>)xP1`t?7kndijXNbxYRP+cbL{4Z{GFLIo{CKN8k?~Y}8fov;$i$46 zfn*i)uRan7p~%Ec%q}kASFPmo8d&37vB0-%xyY6}%k+yg0XCrq@BHv|Y&S~Y(EKj+ zl(bZSz4;`DLh>LeM*zwpro`VCx=$LsQ1+Dgn^piXeo37DWj^!#0+u0#n*v3~2mdc7 zedv_AH55q{n59L&(vL&+IF_BpRzq}AtvQ*_qYuK76i7~{ZDQo}{584}BRyA#2NNyM zmk}Nb2TrupDzlpnjOBbM{EGPG<(g5?eM;IHs2XAB%cu3Vzn+#ps}G6nvMzKi2i?)w zUmq!!DV|5`%;S0!_f*DzQ?jnk{50|Fd12Cka{?pmd?Fexnj5pr*!bIKg8;}`s%mO9 zaDnrV)iF#Ksqs0^5NLyW;BHm&dm^)n%ba;du+ct{hG;i#WE$+L&GAf&`^{}~w%hgS z=2B6@r9y+yz=j9nUTOxUrpkNR-S=>>VFyNf8pFdBO!kO^B@R%*=WMJrFTM`Ab}fBO zUx%6mYUaadkQ^hU3tcAB>Sb5~+*H7%;uSY)X7rF>UJNqkyGVqp3gg39%qm_^znxWu zd%jGEX!IJcJ;mnZAIf#sM~j&fc`!9qqS-3*-hn6PnG8v$`X){3)oBE? zWcfYc;|`HNOS$F^tuw#=iq3NK-CVbl^ZYKA1q@UHEvA~^zs5YbE`7w#^Jbmrz{EVi z+Fex~2%pN3h;NxlCiY)nQqqV4cc7^OYpdzMk$VPQ^U_>*y3P<_GKhG~0)--(b&)%3 zNgpJUYU*^>nReFH%J49%TxVgQiMPv8W#SVVqfA`lTCGaXoLhL_y$4?3_Mp4I^?2S#U&A!cApKKe2L>N?Hu_jTew@kKpuX788R~Xn^@>i|zN@7JYoBBk2^A8JlLR#zbtFlb_)IvdN*dPFum3NY9|f zvq+`WbLN0RWahZc_!K^~;*fyuXVoel?9 z%p50onRqT=meZ!wIn`XnV1UZ4H-H#2I?my9S_%l;6`AyFj)Y%x3PaBeU(|J!Q+S75 z%)0wXY7TZv9-F+O{aZYOa79C%ON$`45)GE?Wa*JS2mXL7kYs_GL$xFx)ilZ|xM_y4>i=cT-9d*V# z@0&9up%qF@4)*Yky;CpddYNxKqbTa06&hPZ?x#ggMl7$)@w~O_4qqVBQ>EKGkl}BW z%OBfYqzd?ERhiFT0nWt7!Y#KKWC>)1t_D#8=Hzxo_lpJHPgQguD(67$`1naqM(@-b z`dA@^zKr;RGFur+{JRwCEFVu78IcQ$;Zx|P2;46UTHHV5UZrAg4F%^E!T$jCH(zQA zT)OxRj&CwwVra4tw#tjN?Atb=I@OZE3@u6lvQYu~WdJ$u;D9tODL{T%0I74ZK%8`? z;uI4s>?&&(g8R(Sn2Z=uDOstM>q<-bZtkK&iPY zNPwd?=FBgpL&66-{l=oxr3pw(foiJcD*=f|UQUBV2uO5?Mws6{2_un&zz@X$j>wJ{ zFu!&oFi9Zb11Bt+Z2=C|#)VEh^ z9to3}0^?i^nxj*z6%>rrR~P&q2fNuvHIaHwy$GlbkprPOl)GZO@*VZ&zi}HE4Y7xC zdDJnty(rKJ)sl3~84PN2jV>Yq;ma)}O5a&}Z0YNq48rBDN&t?g(U-;t0sI1MdJLQj zOG%U{mmPK|sSt(C&DY$BtvrKWJtK|4EiD>H4TxN{<#Kbu%`P-)cCsKP3!Jt?zo&8f zJdEkw^c@N=`Xf7@d+SfN@B zT`}le$$`5$az4FNFO&&TGLK!AFWV`vRxr;_;FgOKv+ms!)mW66T$M_OeV+8D=rXUAi|ne%f35n*Y}6aM}U@R?ua& zX_u+-32Lx*Pe>wjf_#fo|chde};eMCD30__PI#Y^8wk^AG3cIk38~7mq>UHaJ zt=pc7Xld7qKbIBK*=O=O53w67g01*Vp#kkMaTyyQ@`ilfQ^x1=J4b$}nQCh{A6M$o z)5V$<48E^ev%$RhQE#uSMwhKMELfFR$W=tY-8Bn}oIZHIn^K-pV{oJ=C+uY;o-n&V zc^#4am55%a6hGvVDUQnu;Z(r6m~XPuDvr{M$BU(u5~L|(ZVCO9sZnG6@{my}zP;o0 zZ*OR_ymJGye;VyVqNQ zdP3z2Q1r(L_8AD`*PQU_(q{am?)6^s0ZbYH5bd?DyK#6stBR|)4pL+$EZCTJvS7&z zqzm5zwO{+6wO`o3eI4#mV1?-wrRb)J$r5?NC>$ryvObp8T3s9(*jhbC2t%K_3qTp4 z)*ndyxn0lEKwpUWeSaVCRX05ocx9n$s~q!-^TE6Dxeu)ioh=|dBhoUiEIhiYh0Fe~ z=Mz_}Va_Ig*Q`^nZHV}sw0O0jdEy&4+kk(+>$Z zBflXxe%_8uyj>(*|1_?FFPSqp$SL1)j*8WXa71zU&6BtiZ$!@Zga((FZd$rSbVRgy zq1?)cNSi*hwo@67hs7HUr>XXFNSV^$BluN8X2fW9b+r1TXmw4r`r>HyCDH0ow0cRj zdTI2Q<%}hIiyUgvTSN~Vy+x)Ly=9etipnQ?iyVW|TYjLQ_v`0_e8$Q};??&b{fSt; z!FgQD0jZGRY$Y9EXGDI>KWDAf1!8{lBUIy^5&0?qVmDWt7*Aq1hfJINT`R*eH}RE| z!0qWk?Jqf4`>&qTzx`)) zwUy7}* zmylOU{54xceiFabsmM3eH7-puPT+p+`Sxq?D051Bdp?>8)bNp4Yd$Mi(4_53+g_wy z#+SkHhVR$haI-ZhH9VaN!t5IKa@w%A`?F-b`;G6!{Te*ld@HR%Nf0YT%oBg-3K?FX z2xf`)6#E5!8qDol2J50ntojObPI`NIPMhz78=#UEd#BBo^C9@={}TPP)Q<6Lys21A zwb?!jBGM8vTjlR_O00gv*FFYP>E+AZ@)J_!Pva{@Jz9Brv~oeT^2%ssFk1Q5&dP-x zni^>=Q6G=-SXFgRY-Tm`U9i+{B%-Ha;u&iU)y3w8>dmsm3!61BcDsxz_D%V$tubFr zybU!wjh9CoE_bTva)C4J%IM51oyK6aA?Q?nmF}I&%bi&ZBkM-q8~I>l_J;L6Ii;0L zqcayS{`In?A(G+`abge#HrB8x64P&q_N8_~ zpHK}Wzk^r&p0z@4}?fJfaRw(&V@MHEE&f zwmKovs=xIr(4r57j&%I}fb;hh$)9fnZ>FEn7G4Uj65&OT5{#-b721VJ<`ku%D7+gQ zYX}i!`P9TaBmfnn<;`2sA&WvFfFa3OZp0X36ZF}R_CDf`Y^XMGjNIE>-S;H}V?5X& zZ~$UdW&MTFx{on0a^%9p+P?@ix~E~6Dy0uXAyvx zEdn9TnVC3iP6`eX3iUNvbvyFV`_kKtR>%6>)$b^jK2q1k7W5rN7(WY>EAKt ze*VtytSpnkCYI5*?-QMMtP-a!4q}skqU?S_mI1vaNmUf9Gf|& zHr6<%&ipm`>2gM=)8cLn0$6ptYM6@9VNYW(Uu}JGWllkT0wzm%Y^8>vU&40ysZstIhDsr zL|s5U%{_AB0VbCNlkvRKiS#yG!YHMN{N=<;-F6@u_l=FfL zCk7uEq@L2Zvp{+kU@Eq9c{0sL^X0V;6}S5E5zafNj$aIII0d+BUU~68w9*oE=i{x`*;lPT zjxup_{ZgN;mWt~GSCt1>Wqu@Va>XulxBlH}ZWmUIj3DosHhr?&H0$3U6V|_5&DZqr zKJ#V$Ymoi5R&(bj=zXN645j?8&?y3dT5~0+q&VwuJw*!4-YK)MGZ)$CaZ<+0!VqxV zbTx=oFI3szDjS^{N?W1RV-23VdUIT=q4#+!tvKP`4JJGFyo2X)99ed2gZ1W~RDJ#nW{)wAth;I#!iU^@l*HdHS%<}5fj@X&I&mx z8|&(=D+KG{Z=EjhhdAFB+SSOa_3#e)DAe5QdSaC!BIPx@t!cCv*!Rt*!hJGWdnJjz z^56oKx6K81m~HRU=ESKUf2#=ct&!iibp(RV1dx@EbPyf#extJmp8szf?Q9;GM+|y^ zvr31CEPQScgg-erv4DdpGL)y?D$99dhx?E|!M2Au;4|KH=596LwNDm^gAGl#QnayF z;9!Rksv#?fzg;4EM+cM(txt(gFt^32m3%W6K9li0})gZECboLG|a0xp|whyQ95Oe-C-H#XrtP6cm zZx%9rvzHG^h4PWWg7De?R!0CuJp1*YSXGF0%BE+%EIMi};#}9%*Ejag#xX${hby@X zM%Lv!n~4-)-ms-=Si=U^E>-Hh*tY~nSg%KHk<$d@D|R>3)lg`Mz4{$vS2Siz3??MW zbdUee^`v{gjHSxuns}rPFf8^AIp%C80y0C_(o8oJ>lfLXr}tqwg`AI_Hvu8tXK>65 zB+X5r2mo>3WCBCYSCe$DOv#$Lj0e2I)XQG96~xP+7o(MGoCNvd&@|IHTUp|FS>D*J zd~=rl`Lc^jN|3|(W($`=LMSM4Bvx9&Bog|#n@g`*rt7iWEVk=nuGPOi=4zQ9YZ00! zgoRu}ip)aGjt8HWmJy|z2r}dXsTXHelaqWtT6fiM^AoZuGQgvh5ShF9mEgw+HQ};6 zdIRn>?Tp0ln`0n5xQ>9mS}kyc&$9zM)Q_TD{TF{_b@uJ&5d@Q zwv&?lOG$U*#ISGCC}(b->~pTXd5=lP&4u-KYU3#!exR~6?7RMt2{buKIDF-oD-dU3 zM3pD>B(nZ;lFk$7sn%QvJzyWDb2rLA2`ScFHc-!tth-#|RNeKWGOhFa7PkBrOuQ{G zSWh4MwULe0btY?zR!K^VbbGu~6MPgKI&)H{0(9dm4bSQCiY(Gzi0m)2BrhXG&?&4` zujJ-k6I^%^$`~#4#ZQID&bRSt5^_T42=yv_iD>d78wx&}2TMKzbMM#f8+P{tUV5|! zjM=?qmmumK7Tl0lc90~25Z-1S_9c;J^k0zdzcH=e1NX=z=G)mE+A zYU>h23m8j4QBnLXS{H1sy>a+7DndXc|KGXyy~zwgzxLnnGt7JMuIHY6?zv~Js!>x& zGH&(^B$=oq1;x39ECO?j>+5Q2)K}lQQn&FE68J0o9krnx%E$;l=9YGrB{E`nCR2-} z=UuLr(q+ekoTHW)>`8vUns7nq#Y*ivdBd9A*N9R#IhFEReGfGc;w%GNy=WypN^MNdBKU> z2zP5cW21y%mUI<%E=ZF^^86;~MWt#yBh3>DbyA34?GPsKoR(c>tZSKbyT!uo`0fj` z?J@!oW!X8)?E2iocjxyVvmHG2%W*X~w;gW|{>O{gB;i9y(aM>CnLG*KE>HC&*zN(LbIh<;>tVACe`K1}x8^Y~))S>Pton0bu)8*; zr<9WNd@F9JdKWHn?$%sg@yWPk=?^@iTIiiU;C!effztA!Osj=7pQOpGoMcDXhz#8C z7pw8(_IIy+Vl4rp^*f#EFnF#wc|$+hUQIus(cmAZmKJ`vcnvdZP33=)^ayTbuxXnz zD>tQks!HqBMW<<~^~l^FD5u}pA00o@9$M$pyRLqXxefD-5Zugs?e*Y?n)kU2Pj0l8 zeF|y={+5UNu(Tj0T7}j2J^Ti8IOezPX*$C3Z%dg%9_zH?!q*n>Cgkf3+&~uBw2~&X z+k9U-IglDkFT#yy@ow?u@fq4jKnD+D{5E$>P+Jb(CZ9>9En=Y9a3)(vPR^wh^~7|L zLTf2sTCd}el{n-VK68i6@-_r@mJz*e-C1u`$L!saK=1497sqUzu+jccc7(d<9eccAX^wN`ap{f7Ug6`1Z zqT<3$i@z@16gr9|W3n)@NlObnq1577jD-*q7dru$okpJ}0$iQMDmFCya`%{Rsb9*9 z=UEYXuLXZ*PHX4!LVda`VM&DyBK}-(Y7ZtfT-Dk@Im?AZx@wKrF!uHF{XNp;(Ef2^ zarjkJJZX=oChl>y`mlTaQt=m%eO}#rlb7rhUZ&S3uTbaXP~B^jpOvu5$MfMei^CQ?W8qo zIvx6nU+0-gl{pmmzSFm&iw(5V-m!Q4sM!Zbz1V-pl)|?qa{V^BO_dxd8qys@$BKwnUryAc(na;5XfSGL{O%c_5fRmA|pnNMisk#^3!b?`1LsAi~`( z6o5f%jVxcjeDCL}f7`e})fOTQ`?hW4KfGhM+3jOqL{AXPG+F4souEZZf~&|!QWl38V!Vs^i2lHUH|uA!lk zcBzO`0;I~+xdX8j#jWikb8FGR8h+Sn(TPU z7tgrT_P)asH=Thr&prqbcQR|KL`6n_Fo&7y6#bk0r8+dVRM%1Lv#*ueh>%;$SCVeX z(x09}YJ3Vod~A#TO{h1ClPXqW&Fuy8b?~>AY?FV3B}q=vv?9zmrfe+ISi=38DRr0bO`yAR~KFz zZ}Hz!+i7t)Ez*+vIM8&^EL^=nqbjRCW$7wkKy$FV18K{;I^NdZx-G1U-n!JF@2&EJ z2Fo+s`}D4PpF0YSQYKOBK3$7|y>;ZS_O^R^*O>exr!NBbN{wqxjpKVpq-{Hr*Y%(Z z{mVf?J!t6guVn?qhV73~m{&1Sv z7iws*0JAnUy0R38jWg&UE#ITMK6X0S=&7L*u;+32le94lyBW7R zJ4K{R=hFj(pUsMqR=0}YV@$EdT*V$Pt^*U^Ec`MUDBO=vocOCDxitpab|!c0!k4wR z?Tw&u;ftZ`3#yFu?bU_v2FD?CjnvGF*6tz)*T-C0BNa*wyuh)%Kd zBq*KU!!Nz#ZvP;cL4+$mVw2Z)=}6Jl&H<`^O`)EsS<$)Pb4DQw*ceGAhan>2ZTXCT za3rHWB~5xHzW#{S?uaGBV5jbm@cEtUUsoBDG1H+LLQ%|TM$@S_@!2FfFQ%n9eK=l? z`==~rc064kw_s$v_6Yp-exbY4I;WZN+|Cvk`h(2Gpv#g8adbIR&?V23n6}C2@|D{1 z4~;IOdDCQNPFA=rQ<5f4B*OQBRk{gDnnY?*ArnTf;bPk;b!&2U9ce3igXq(TT4z$; z%qCR_+d`ZdJJSt-ke&27AzqaeXDhL?VJ1;C3!nGyN`y~+FZkrChUDrFd_+V#)S4NG zPx|5DllZwed=kGV!snM}$yhK09|`8D;d99q{~>(p?H?F|-!#imRapwililP+{8UT~ zDzu8clJh|VP!(hZk2KN1qe?_%2$lQV87lw5gM?5*vX-F*YkrB5NmMh*QB$dYI0VYC zor-SqvIZ)3FwfJy5#s68dBZn(J$`cvl=vF@g*WKfV>i;(Izc>@-jAI(8|FR`nUh22 z$d`O-s<7NmlFE+Fe7aaJgna4;HR7`<*N8kxcof8B=98e%k|(I5ljP5;J993BOUvjpW>$w!1{(%?Fvr!{*}TL!@H}aWuBX( zWqs7L{rk)%<2dUc8Okpx5hoqH)R!Na&fV=`c%ZH85_q8XZ@ENpno!;k;DHKdM76$p zWa?k&SX2TLIhtzJbvoH0zziKDZFO0?t;p;ymGMJE-Q2FUKHbb%=#f6UzS6<_aDhD1 z+P+`p^RcxDENOg+DGCI+7V+$Ik=KlHuMMefze8xA*3giI+w+4@`~z4+kXq`*~pA!pRDCy zNKcL-Jx6?;Kzg43wU8bvB~TyD8p5wsp)mUwY0PPFp(Z`cxoIVlp5SFVJmm!9SE@%J z=Q1N&xD)I$*$cUbIvgp~A;k!yAqSz;tr1+oV;K{=tzrCV6=vVrjB9V^xBB7VHC$*Y zO`WiFe>a=}Q{zVDvqVMFDn=2pSCx-X4XNR_0HkOAiF_~wZwMBlz>n3M38!e7&$#?m z5b-XMTNZ~KQ;v{T$SB_ISrR)QKP5HfZqa6V#k(LG-tOXF=+sxkg5zXybFB&)Rno@z zM&0+WySVzYa$T0Qwwc^lPelyGg5_GZQt|el`A5s&Q&;p z5YtmgyKz9LS_;beb-syA$&eOW2vwVwmubB<0Ml*UWCK9Kqh`FG$VQ$s>U`q5 zZba-19lh94F}L-z)MU4HAx`a5-JF;{b2*XRIPct|m%2Uu32sIb1WoAO&}wyujx`7h z3=4Mj9`-+XIK!6WN&DMQ0VrhY!#y|)i6RNb&y^5I#d5VQlB^~hf(3TD4{}v+pCjtY zN>Qm-H)K?5#iU^Wa5Q_33^fj>lhu5;KaJ$W8`5EpSg@Smm3xe#qhkJnx=eGX;Z25f zf0K7+H4n?VCw@MZGtIUVzZ%X|^ZfPziNcGWUX(~WTVQ{;$2-xncu~`2#ZCj=vXj0X z+Wz3Aucm!HS+AJoL>6U5&I<&wa2?rK?~}+>(I585kTU-~neURLbO2PnYa~~@+NZ6T zgh~8_)N>qZo;bG_moL`YUx?#XeI<9|6OVUD?XX~O!v)c@YvNd+ts4JFFJn*2j|JXH zXt(%J?W0}cc}S8DaeyE1Qbn)0$d!+{jk~#&i&75$d6YhZhRX?b;zQ;H3LUMZG)2p< zi-kaf*p-|$dnqk1F1KG-ANe`>74A1ezkOC;Ih!;7VjZ_htt=AWz!xKWb!H_d zVNSeJS#p?%-S%}_xypu@cdBt>~xK&)(8AMI=mRBv1$qB>%8Xj(8Uw z-h!QS*q!-KLXrzLmM7}O?Psb8S-@c~c)gJfz3gq0PwjQ~c$!!W3^eb0 zNTvQokRe2Ql2bEzxPEoB>8};)Kzc%m4F5lfG)(<#?2EkWa@6GXJkb!T>D9#$b&NYD2tE@c!bAC?@}fhAYvkkEby)03#9{t_SHT%f zz@qhN>Ebx%4pMDz8q9SB6v9JrMIvlLd3KF`u@5uV$ZUnR8%oI`br>47xwip-^L!fP z5H8B9RF7-V6$#mdA}hhPsZ;&AOcR@xr4$wm1`eIz)ppV4{BxOou4s5iSl7v%g%PrH zM-0%xjCZRsW?ZqkdpC-YG^KQcth*9ReXY`*QU!>58~Rr3V2W}u9cMMl;L@xHX<9C8 z@uv5vZExr)$JqKyMp{i$LaVmi)A$(m2UDWs4l3H`W!W_-6An~WM;muz%v{WjjAA*2 ziR=0n>aUZkYV}}|p>?r&jj+F-s@2dm*-u_aE``A!twOR7s3;y}T2$ZJUYyN4;?Mj?K~;LJ4=^QhEWI@9 z2>$JoJCc1aUM3)oJ=beb&BFei117W^+X+k#S=-~Z33qD?UB;0pLp5zPNaS7wE7d)z zE)m9>{oi2yH_TD)vpGzmp$~|36UuGoCJepUx7$;*WexkS7a#cWmTq;Fagx((^a2Hv z*Jy<5XZq}TML;sshgxPT`kn(^Jcz5`*u_FA7p(r34@jX<*Lu{G&SJ#|X@RF+tS!=f zF-7!Zou~fzxJ^CcXIPd&r~S zs#n`tZx@iC92w|tFI64&r@Gv$G0-(riIbUeS*dt@9w|r8K>3r(HCOu&x3$Wc+ggPM zj#D>xd|E=uX{z4WaRW80cWiG~?-VoGp3}6HaF0-;!cG3>qnRA17(ZLa>z@S93HY0j zVIBMMpPUphcc16p7R;2r!{TP`RreLl61kMf5O2GsPw05PY6T_0P^_-3LOSjEE5GzQ#y-&t z8T-&WT?X^Z#KF9xZrPd)P5Xn6GP)4NlKhdNb9SUYz--$y1g9cpS@x+_s@TIVjWebK zzaK9jx#4L#K!QMGSPF1>V^`o0B%%X#*^!|8l1z-VyMv=$Y2K@Z?w}IQM9yGi!Ft$d z8&X*&J%J%TtcFY9XiWA;uGJ`0N!lL+$rq-lqFq-xV#(3?ChP!wM+$q613fZSm>TXA zkqo%B!A4(~ZU-WRW9jX{mM&|3)H%|8(L2jXo4C%=A3cIfp7<3^pZ7ADyL%00h&m;C zFnX(szf@(6;s*=74l12Y$tFNZTmu8EO7z-oSEp{lOyt9Ry}~X6*b&zA(!l)028O8HOarkZdqGxBJtkD^H&DtP zf{(`95T;^I zq(Eh~MTSO@aFq2E?@cj7TQb;snf9G&Y14t&YIs=0Z?}RO} z!E1A+SKnHpg|W1?LJSdB6mCXyw_DmzB1?nR4-RRcD3*c7k=6kz8lrA|C`YKlrf5gA zG&wzxx*>H#bd^^x-3BZ$Cf?JtbSdCv^3r9gw>ImU#L7w4V&}7XpJlF3r<_^5w?)3* zITzQ0&{V50uU+s86f7H)R19}mE!CFUKq;tK5@c(lUSwe&}J_J%lnbl^H_wn}@W+ONgh-nNcGFdkd&LE-(WH;nJjTlMfwMA+f`%eyr{ z(gyyYa+>DH+Uz$v?&6Y2{u4FUX~{ZIy8TsRw|=!G-tFykXsv<&Lj1Rw|J(zU$hTf# zws^vuPJDPmY9vM+9V1jM9&r>3WTG|^t*VRYJ$Uhk(hD*gQz98tVlSa6A=Er+?O~J1 zA4`Vy#ym(5w>gxvDJW+pQ1vn*Y7nrLles9i-O%4e13Wmq@Y&wR#fmVH-QlxS8?R@C z1Vd%z)3}$=Y-Rqzp|2Ya&{qqxAL+@YORVwr);) z22k?MB{@e*Fk9}8UV z!DGV!FBsD;NCd*v1pF!P(Y>OY#F)MkE{J@$XiPZxCO_s`b< zdVW%0&+m+~`1}sLUb5zgna>)C zR=#$;z2$%tcxi+xM?l`hGc zQn+pLyPRDwLeZoL|B6wx6>jYGAa@NOz4YvS$6++&U%I4EeyDG_J%umW$c))!Z(H^c z8O)7o=Z0TCIK|&Gl_&1pgf&M5T(awpZ=${lg`05$id5`uDn`^0oro?sl(k->Gpt)G z>+y5qHQ2L1jt$Y-Oe}dPk$l#hP#ZGeJ~WDy40)UwbT-Wb;^GmAqd!cKPR3HcExfPq z4HAYiCtCUI@cy(L(!#1f=8u-I*Cu-+WDlz|aMOwUh9RIxeficw8~)+#x2-gMFlG6m z#m|OIx>B&mT>MzL@jV#ooh*>Q`A^i6OBtSfp-lW?`o-5KdZk?ZwCG;O+b}@uFxOrw zOZdCL?CW;iTI4p+pGmu6>gl<6nEFKVl5!*z)&sPpK|#|ZP>Vfa{UPC1vAnw75<3XD zl*qz6Zh|r4n4%vd-1mu883RaH=pp#nn3)p7tBK;!xr2{Yu42GQDS+X&I{;TgmKbz3^YXLa4CX?deP zYRzpz(KxMor;(2zDvVb~T7lw0SB5Y}ey0hcxe^+BW6mpSywauTga7k3t34gRZypaU-YV5Ug86rxRXjjF-ctIvp{A8|(x`plV!fzY^iA-f*f-6OQDJu}kJ zuGF{RL6Kqfq3`UedZp(i#?-57C~v)%ik1=_Mm+x%qmawO<XUoTyR}sQ&N=Q zAw(MOnZVo$Z_YvbP0gWl#~MuR*Ro2+vQDH2*cH4^l-)NPOL)_BXXA@kvP5j44EL_k zk>N=K5RU*vn$9w?nG*XQGnNms>{DW^!(^vn>KX~a6K4etJ{prn5tu$^l$wGA!+Ybv z!B&IH-LZjWuoJR1p_}8jDa&qWt8bVGB(_Q5;FdR=N|0j(h`t{W96#}w44Ts?v+xVF zk2-;C4yvfd!YJ%Iyl38s?9)q1MXgQVX1M=oDW} z#-8J|DpzC2&E30OEet}@I{`nLtb*10gSwn|@&=c-BDU{PJGF2VDS6}u*9q%I_6P5i z0#u>up>YNkhS_~ZV~2yJ3UNvh=@T`=7R*$ikwIP0pALy16<(O>3H?3cWtE&LsD3Aa zlhx76G<62iWk8Um_$?0n?bpK{p5TOVhlm2RkyPOW*yC6wBxW27ZAc4OAz7AjPW5(??DUKGb=nX%xrj<4er&e49IVEm8V zpd)(bS(1FORV0LQ;{1UcYnpS78st<~GxlT8jUJ#&^Z=r^s}s%higY=&kj8gtMxR5= zzp_6JD6E^KTK|@!d#Cn_S1b~=vQ>{F2)Fy5QuWquFH+i$%~feMyBUPN_Jp*ni`qvjZ7ulw=Xg^5SdEw zB7(MN?=3-Gh~>uYU2xXs&N-UM5Q+ml!HG+U> z`J=TvG@wy?>`;LM%~tf7Q*ejIi|x8hReI||Ebhg>PxP2mQ0}=xs?5TDjpH=ElpFz* z*xDlFYBi^fs0zko|Kruf8HHhLS?n(fE$Ab}Q`i-{SUpvD(3s_omM-_Iw<0{lK+p4v z9sbWv#t^z4SFg5Eluf`KtW|(1`E))`z5HiA#g3zeD$L$xH)b#Ux5wkpcJR2DmO<(!io&?>NO7S!k!-_@1=JA_XUk zjN`6K7aiy|132_U1C8S8UV2Fy+SWFelMsH#QcS|g4;h}kEl{_ z07z%-Me>#qa&uj_-=WT~d>eKL{A^w^qGql@~0;K+HlZ5BBQ+VxZL71U-dDDt0Xz1@u=zMNO7JDxOq zBS{5o7fntg@Zk-4NzYZn;Qd>N^W(5P>>*xY+SPV1+QKbG3}CX1$&1i$qnFR9B>T+0 zJuMyGP#!J4)*T{z?H5nz@xkax4p{brXe3hcqr>>H;sAzBPq0g1?JHrn2`|ESEMPmL z`8Nru!i#b|!O`##{yMb>=R|#C1Htk3%p6fwo@$m33@3aG!m~1U3GI=S>WO$pLvnt< zcU6M*kD>o{5=7}1aK^Yo%tv00Em%h!zK1n9OZ?p1AT05#;|d|7iKbjp)~VK~7=7wo zx)~t$RPQV!Nlj^PteEZeD@8?vbs}OUcRy-k_2PY994)w=AqipOL+J!2N&F%MN-Q z^;s#_IEvMeXZ^&Yqy{^V32)YeRRk@n-9;Fpo}_2~=s}i30wI$;!cXF}{=)2L-4UtP z4yX{F0|g6n{4HB4C6cBW#gy#|_NpAX>lmMA?**OC1f5VpS=do*1_{stdAMssbeg9-c0#3k>z{@=>kTm(gp9U*jA(LWSPxY2HLV1|z8 zc>FD&GmkwbKD_q-#V-OtZ<1Lqp}NfS4c<8k1KAK}?>NcZOp+J)=1`MO8p6X*dT+!3 z-=shM$KfV@gfr<&q32A4Ngu0ctcSdn{5Ue>3pLM+>_JWGkmLY*?mt1P)id{6^Yz~X zkdobVXKM7JweR&;0EOJGp?8SJ*M%n2^kvb8Xu07ERU3| zh?LwODY+|BvN}?7Pr;(x&?(kA9FxYR$mKu=sWFckDyFXz#OZleE&Dfyo?I%TCCe+Z z^-*hYcINGGz7KpUSTs2}xSnu>gGiR5;o)!oso?5VNiP~In6&shbK|yCqK!{PE1rsm z7|mnq&R>cBy1)5iDO>VH!-N{XJtsF?HS8hhknlH8mai3$vAY^ht%+7&Yn71GM5Mw8Et&f?ek$Z!s+u9KG^5ws?Q$T-@SewP|*A&fomAo zxkRN9m#WZ6>w1AtF=gXazE<^rRKus^0coP*K|AztRkZdgOw=Az`NQMquGncYDSMuT zetRs|Ae}9f&KC7_rgmb%uT}OL+B70|mo4ylu*$w57kiiGD)%F2s%XcT$xtK`UVJG1 z)zaVVp{V5q5rGMq{UEBuEOqe*8fn{0)&K~mzg+FOn|?wMvvtzc)}8!D!(Xxnksi|Zcna^Bgg61wM4`=#~oIyAkeZ?3xo?WyLllbi2Cx%uuB%H^v*}Bp{p_3IP5Qd>469 zmZ;4*M?_}mlah93eY7c0XPHrZ_vxXlxqF$c!+E#81m}&;OHl4)fGJmGiz_mirRuM6 zM$$N_P94=_ANQ=FQt4#&WV%$1okj+tY)-KZeB2^snUOLd7G#*6XN!eRX)a23b#1>m z4v71llke(UIm3ci+UH!(KXdU0MnZFV^UKE`)@vG@wdcjm@36g$I7JFDp>OElbBX+3 z+sg}`N-Pz&moEr5Y1>P8rzyz=R?#0;R0lyv>q3qlCnd!unYV`HAvc%u5rLmGJGGS8x# z@HtcL0WXOSd?#>61gwE|sQ#E@N5^yCsYh4u>+XpoK}+hFz24ly8$>da)-4A|km zuHJKp3ReyPrTq^HGyGb2cu}sWKDsE+kuiskw|2=w=)11F5J#v-ey3;A6SG7NEV(3% z1e@8ADzdu=tN(YS{AO}*^g_#;$%2(ra~t|ptG6@aSSg0Q*nw_Wmwg^5*GqW^xn{{* zWyy(hh`%Vpbvd48!Lb;w&#EL0*qdDHSZ~f5HTY9T)7a%%GKh((&@c9N_pqTexvC&b zth7H=*Rq%nC%Yua67z)C`{*rB#rCV`eygXePEBmWB}XE^z#k8@Sj~Qq*rP!pjQlZ& zvftO6c3efFy~L}-+V!Xo?F%w%3a-mU(EXvh;!|-^M;^N!=oR=5+8isaiUPF3h#%T4=F9anr%VPK1on^7r)RCZ} zXYIxl%^l)QftZ}E@!9ss!-M8Xe~B$Jk1JG-{SGc9KA}RSc_+hSmi!ctC-@B6N4fl$ z$A6>wZ!G`i^WVh6PJgqgdAFctGeSGZS{*%q>;&+KV=S%uXV&!z4L~NpVEnDcDQA|Z z1W&Y3fE|MH2h^6|==sXx(YvSPQU1sSeR?`%bHFS>!pKL?i-D z3&dnQE(idxt}t$Fe3~hnJ2HQ=x;f_T?_fE!D$8b5_OG^UGNI^`3E@el4K&97W^o{u zOOCa!X0YzMl>IJx!Ee-vIpyv0Ih(Kk-ms%E~Q%t$ymE&CU` z@*r^_&~#PCeUH7iXu71|bYnFm_XZ;M)>{uT&+6v{G|GQ3k?RZrhhu^Ah&Af>67mE^ zC}M&`_LdAu_y^)mK~g#=bQkWm-)TBSyLx>*O{AH)dL8|XWJMEK?S1~{KgzParas6q z{`qTo6yaQ#jyMsIU-2OZH2OGf>W9!pJ0gYHHNhZsp>ek*eZ@zl=UdBQ5WATk*qNYVGcy-Z4bEQ zLnkVY+W(v$?@?|~ls=)S^xKTb9)CB}OOG?-qVztO@ANl6tV`!J6jS;>Q+lYy z1;iQ2D{kpvQ$u(CUxY}hXLWxlxPlGxZmhuIf%v;RYbh`4|8ktX=8h;!OVP6%it35i z?>^>BO&kI}>gxEroQBa(H8X#yMp}gTG$K0&F!7Z%KQumPijkkT@qdRLQEIjJd4WR> zU{yyGvuw|vBCj_zi%ZQ6qiM>wCGmVf7}%Fs=SwyfKOb0+!gB zs)N1Fz8~+_M5|paJa$5b-`n+p_9=lPsnAy~#LdaGp5rfB)s6daRWuto@N50720{hN9mn+X3yoxS%Y zHGYWmlPR-3xeS=Saw7{5HDKy#_5}g4zz^6dvQokRT3cWMi#O^9^*_s{2c3|}O?VJr zf9NZM-%KZdL?)M{1RMcBs+fR$e?wz(@9*JVhsX~gj{8|kJ6*;SX?!qJ@kEg1A|bpZ ziwJ{nkVULaw0PjMzZt?`r#ew?#E+|XS&-T%WO0kgAz&&I1?xOK$BY+^uAS%9rfG~| zH~3e*7^!_s1eW5oi_K!i3X*0d%Pt}%Yt+AP)$jmxmxUW2!y(2lxd(ga>LMx-E$xY_ z8l5g65E~e6d|2QASE!NHi8ii4uHL?a+Efcog1MP!mpp9OKFHnMz8;(Ril?g7RRiQ; zWMTZbNsLEx9nixKy=^9IZ|a%9^9nH>VLXW7s-59tFWP5gw|0tE0KqT;_7)P=ja)(H zsjB@~4!*=28Sb`QMz4!kV(wz^Lz4ahS6efXl{bh$sRE1E39oA8n5jDc=P)O(rUwr5 zDDohCYCwExu`n*EDz68;+!K0%Gg`93-d}?<@8Jkyj7Y?REoregli$6sS|D zX^6v0n9c?|o$-VeW$uJm=csSqI?QZ|4?d|+9h&(ITAya2ta(r;F*4b&F8`$i;yIFB zHB-c#3w)9BERxoMkqW1u*<*>Dg?&SNg!{fExw*Y+h})cTZtbyP!k-q09-`4E_1~pF z=86a_;5gGFF=Q0!?cf5WY!AQE<(GEK90~gv%n?(LH#HZH6^JL&heBGIi&}c99;oAi zE0*QQTC1p>+~YoVz3K5g{9!M=p_kkKtx$80ELbm z&mO0hq!1b;!tQbMU9!NP)L_x0^wT={mwDMUEoj+7FJdv;_o>%$;%YC;k`dC&(KYJF zFUKiX@JN-b&zWHV$PHOejKMZ_4^`y8=AsG9jop0_VY{<+NCUm!thoGDRD{qcHd)0z zsDi=$2-Kx`UZnP^NX3JQ7sFje3j%PwD1=^BC%kEJnxp%=ta?O<(b>dE2$hd*S&wUns_k+(fa9#KNe) z+TM;Yq56^LrG)7@OVAia%8fq51UWvSTgS$IK&xbUC=76VDGT5Pnkc<73ixpe0aXn% zbBOB!{q)>84$E+x`EcKu@b?LO#Kup;yYIzsMPI$yK9`|PzvV``Ry0kCh7J(e;11^(({7KQOx==G=#xo3a9OnBZORmlfijXEWN{&{sgsO1N80}$I z;TMTSbo6|E*J9;vM(aWt4lxuKEx2>txSDgepP#`vOp{6{Ysv$n}|r z4Rxmps2sM_v)QT89g&J)%@sHUO|_J_N(TOZ?BQ(Egz{t@A%{2y}I7pBXO%$^&kN317%9(lN&L&sWwV8F=- z!?)@p#3cGC5_qt!v>zTjqgbMnK%zP&x$!F`dJxo{%=7_Yx`AH3y~rCryE}BcTy_sw z&&%=|ZzFd@?z*KH(riRJ?r)ad1h{5Gjry*Q1NS%bQsP|x_8d_VEEz^zHD{q5{T`T$ z6F%f)Fw!PJAus!j>8AI&NQo~-ni$ZY7O%<(JWl zT?&1IK|TV_BIVf z@Qw+4@UlKj7MT%EbhJR610RG)o;FLK^!js&corgLL}_n11C+m}7aPKiv-mtU}4H4`a8 zgjM3R$epYX_-9+qr4mO5QLDN|Vkb%<0iW^_BBZ@cq*W#l1#|^HgN{>{S>HWm_r8Gv z$B-XkM$%#71lKmp694PMBOjqE2G+ze%CSk&C~6h5GhUdNXIGBqpV5$(iFV~!n5%Ji zQ9b}To{>p$0hy2SdJ!pRi^_!3A}sduZEQ@`Wn*Qqz}8tAf$8WUE{BTDs@RGX zbsqAQ!wW~ly0@1Gq*c2pk4=%`u%`NOWP(dh;IlM;Q5&JQe$Ef8OIUJlJ$uy~QB8+5 zgBnKy<|}4Mk4clbX8N0jL`YBmW~_)jI11yh4|}bHExK)ety)Z5+)rk=aZ61hRMzxN zb<7H(Dn!Sc-zq}Yc;6qXT2o$FNiMQ|BWB>U+X^z~OKI)S>bCxcI-#euK|_+j6^+KY z$y{Sek<@T)^6d7gujEci?hj59#uQ)AB>3eU_z8sUqOt!6{1zwouut8Q&_fdZV7s+` zvD7{%AG|m_yf6?zzgi2ndXDjI96L^Qu%pcq8BTH+->4_$lITD%4nPM#@F$A|fVKjtZ38G9&L=;OT$H_C@ui8zuLvclrCJA3E4ZgrOfG_7C4qr}+?>Ftp zlibnQYED8&24x(0wlXRMPtgyB7ghq#2l=%O$9#GNr2ix1P6Fwh%5R!G1f-8FcR;#B zsw9E*FX}xlOwbTIbmQe(xtXNfsb@=Uj@psCgiq>1>6`>x=p z7>C+L7k)2(e$=ar-D*%m7l-2Kq41oM08hFDo_l-2^9{9LOZ9w*!1E&F4Klb~Ykx0z zzMxi^Du+i=T_Fjcud10n6?)(~BMF{g^_uLPD$i8=UU**Oz!RGtyJ*(;!c&ZLl9$Y@ zHr{fW{Z8;b1kRiYIs%M75pt;;UU-RzoU7nzsGs;@`M)k(y$<2l#VmUeqRX-V`Ic;}lx?DkVfD(^nsGQUFsE zX6UnITsjUx>`B{Gm`dQcQ{>GRREYhWoRaH)YR({t4NCS`&6D2}J0=~*r9%tynoO*= zl{TE{z?z0WkvTrQ>T($Y{2lkDCH>n=HLojOWBJ}D9`5TU`|3J5rc?-9Q#~{YrW7$j zPA^<=y_RJ8mO+3;dq(q`$< zY)NxVRm~K3=N8|L%+JRCY1vKQUof1|@!<`#3Nmp|+~6%13&FkNeO}I_N5Kk2Qz`uX zz5I;(b_jf`;L=L%OtQV{CUV0IXL*80F&qxo!Qq9MV@3_nmEuSbS({6()z`w|1az|G zwJ!otrJ9|2Lvo?Fbu@WdPm@2;O-{1sT>@B}dKS|u8bM@_h? z_r>i{<_~yK9~NG$w57K8R*y(_7P7f%!-dwnlKX3&`097|FQ4N5|C!rBPYkE;iwEHJ zFST|5eUtl7?yq&nA< zIPF@lqg~}2wlfI z=ZNk!ilHBNFWHKa?7&&B^5?4i`Rz7-SG;k*(>Ur}oH)S~iKP!OaA95!zVxo057G+5 z0UWrO^`54UXoR4ut;!woTh{&YMxR4t$H4 zQZKfNxKu;PdlOH1DjsN(2~~BIP$vF%qohGaG8j4{TG3518z(Afhjg|6T^d>^$gAx2 zU?J1_n3Dahzw;g}jU8>z?gZzXej_u(bSreR^`VRzqYxMA*Xl8kHDh*Dm5vkpN+&z} zNc~&%BpEo`Ol8FQLCoQ>CjYlQl)Pu$r9`YeTYT{&WGaPajD`quw42^MvGVm|t*!@( z8hR&D9%QIH8R`HlW`^4FBN#T4*E8B}V3AZ}S^_!3{I z{8R2DJx7s!-eh6`V*05@xs8R6wItq@*(@7OCH8|)-9fYMWkT?X?e?C`x8rF(TV4D# zrSFu-=jE|jzP>J4eTb2g#^)T-PmtYvx0($GfQmTGjId5}hw4(P@{3jDA~N;9L5mo1 zb($kw^bU2`9dbN$N-UEDg?mF8RzA(do)yYZz$@d(sXlRi`hbW8V$`_YA;gzWT#bJt zq))5P_+A|UezJVOfq>J3YXht@K155e>lh}lm#|Yr5J*bi34{(;7lNU*V32Qsb%B&E z3v|SQ!}@9-T%6eYJTy+Px!10tK>*eFb{up~MJu1xc><`&vdW&r*)su#j9*9Ty5g-$rpns)$^aL5ZH+HNj zzlWRGLyh`GI7Xdcu8gCX2KJUsWJ50@Xi6Cp+~6pqJy0Eg#ht_NqGn8^9% z@-f6G$&eX$p2Do4a-Qyi-d>TxiuE2Ul+P2`C`ZXFwn;Bdjb zY^gbjr^sBXnXNrQ@DHp~X`5w9yl2U!&EN7v$hxSF$bpi6)+$zz!ejj_SMt&Nhb-uA z^d2jVPVctA*!WpWY51emLQ=#aAa5F02Uldnwe6hmi;Lg)0en>y6^T>uJz_YeU zL-F%ttw=N*0&3R+bLPFvMLKf5H+4_sVqfYW|1%lg=jY{Z{AXtW9e8e@!%_~g`-MOA zMsfyD_&X*+VW#Q{?a-#^O*wYI==sa={uBH3@!<|(xYEiI3VaDKA*q@|8SPWFbO70Y zPRH|5)ugH1pr^9LYqyhpj)v=0oopT^WF~U7yi_-nwn}sajN4I-uW6zecziYoybPld718jeM?B~kZvt{h!^V&4b9u__S<^zOzWY~luF~ctN z>R^N!PNOVrcE{NaTQxEW7DuRw-}<*ew3y*^Ji<4&PNf>R$*im9@h*gqVy_LbzNBEZ zczy?tXx-|$FPYov_Kw1@n(~P3lnWcPVwNBP&0_Ts;{=hT@f==tXd|8d(v8@4bxfiD zS;Fc0TR!F4o|B27Vu00;qS2}IJ4VSUFh)NeJNlK+NrCgcg&X}VMWoB+V6%VaZ}~;z zIz6cL`!Q`f{mys#eM4UL$69fPSj@;rHN*KNF=A;_zR4i;x5>`8U&)J^jK{x1-$i6H zuc#5u*Tqip30qWu=hfBnO4LO7rEu;L8ffF0l7lADv6Des66~|JnO_|hoVprY&w7L^ zq<}q^Pnx<#i$4N`PYN0g&gQFiy!%bZGv%w#`MRIIbe6fdh*JlPg`EusZv(7Td5o6L z@Awyl3+?ZDvOL>BJaARqo(5QFNP#H>I$jdWb`wD*TLcg$1=(Z#Qki$|?~ZTVCcia> z3VO?S;Dsc3oCm0Kt17EG1$Rx7N&4)~U{RJvj_J~TaiHT0DT@tAWoGy$yb-RnubT|( zmZmO#R*oHPLv#|xQ`gr~-ms39PxA!_gGd?XsNiG0^sDhvj%gt_@bTvmgO)$lxX7$& z#cBm6AL2zMWnbiiB6}0M7mvUBZJ>izUGVM|eu_H;X_Vw8{tZfTQZn4p@>wuQTCVfa zjQ<%?V~!4gbTD$>BncE-2{o-|MYG``{`97B5ONCivwkddoEnJL2_Wny!Z3f_37B^X zn4wKzaX%}l%M6H}D*1W+En-Xy=wHBe)T zI_i3j4;0O+Qm;NIOuy(Bwe5~}*Ff=#Z`WvjN{_pP0}0CSAt9X{0K?65wt3E019)Z? zCX12qSkAn3qZ|4!?QEPAU579Tou#SSQ_MzA2mq4JP)AqVZ454(dA|FC9x}jgkw7%o z3Yn!aG&(G|koRiX`3FDO$2QA?RaI!Mb&HhJ_dy9#YAxikW2gMOL_W-y>Tk>AWO=+w z9>0c%w1mo-M`0xx*Zj7cO4;uP>@>v!qYUnee5JlED={VHWakM-~J@pgaE&RR1b=6-`RU=k~Pxg7A1ivlKPhz2M?^E~V|Evdfto5lL)WZ0n z%G6sw*7I{+zaT)U-}N->R98KQO_-zLDiWG#eI|9wZj9G0RjaA1v#CmX9VjDR&n4S! z&9Im9l{hg6l!D|k&hN@Er{!OH?s{rdFy@cOeib^w5`}>?RE=e8MeD3S`H_P}t`!!E1KP;(JgM*-TxpSg#PZdh_h>3e z#9#cv(rHGM+W54q)cvNBjt7NabrsCXB)C8sET_oiN}kc18l{YS4myv;QNdgbJ>wc|tD08`LZ`8>g(7*=u2z#`yXHA(uo zJQ3?pR)2BpJ;ZzeGlRnaI9LVs3PkE9B?v(r4ytv;ePE=Ji3_Z=d%8{l_KngA9F+_p zcBzE%UxL|H^@KOU$`90{mjzOp)X%U=s84_&c38MPkOB@01*ShA!YXkQV~ew{kw9#c zb*zlGv1hbqo&%+;l1!Zni-qtOObYg`SFLyJ#Q;y}7re>RSX2c$&QY`ET!N^Aj}9)l zlB)#y74bF*A0jvYUEJOa_xhW^fKnDTv2sfP@cElRc&t$$bg<<} z*uI-YTqCV(WX#1qV;1GetZOtTcKpzwLn;TYdKeo3iQP0XE?dICv^aNTH~HR`07{*{ zPQ;bwY>F4s0;sOSt_344f}$O=ma~vwo1XSDfc1+h;9lwXJtkNB12pWnNLuHx6t_@} zyX}}pCCC39UuwJBd7BnS`mC^&5_F7R-qO9mkM$bd?FN3UF=iV7 zKL)U3xJM{CaDb35T3jEQovAMV%uu6}PO?uPyv?H^3FQb- z1!j6W#81q+Qks~`W1I>$s=F=Oa?I411U+{basJR?uJuZz{mfMrBCP?Sd=^ zuhKo#si$cOfWtM=*Czg0IJ6|qWv#C8s;QvM=_$zh$q@u0y3WprGrUIfItH&0tM<^* zHUa+DJHEH`y=SeQ}B6wj-h9*g{;JNT$?=%-);}XIgo*<)U0! zV67>?IdRhm-jSN0Pm&kfVk36+mZ2+BTx0!m@rOW*yPejJ0xxs=+^WHZ#OcE8DpLG^lUUis;4gRaVuh zKeFS(FJ;*W*-MMiw7-TvP5UP&wVx~PKkzf!r|~gv*2o7L93?9PL{On!9 z2jSjUKFVinb-sSRSik0a;9q%{)Oub0{sBXJ{LR<#qNkrfJ!bm(5pV0QR@3TPJ*`Tp z3c0(>snKzTv?YFSOi{v#OxBWh9ie@!6i_cMk@es!S@ZnOgD9?^^r!x!GrGL9+L|MUwcgCCc!PVmj|u=&^$gz)A@GUr0U9= zdInsn>S2sTc&4=?RR1LfvemN2#1jIchfzv5B);ZOP}n&?g>ZpldvL+wKW$g1AN~Uo zPSnxg^(jwz4*#iaGJ~GRv@-0nB7RN`Z|b+c5390HNS3;F4d;fS-z0IPzJd1=_}9g_ z*TJ}l*}(#FeJ5gV)fuqMmDXm15+~se=pfn@D(fW)UI@WaYj(gvQ(o$xz$b%S(qf&{ zqUdH=mC5Q~k4lR>Op7}ZemO06f;;s!mf}M!gCD!4#57S+JTPBVX=(cv*(D$n-w*J; zPTkV;P0QYqKJv}`WBGPX&$pkMdPVg$V!D}OoiDu%B3KK*^W}G%m1FuFU8g3v^@zuX z5S8|Py1k?0@5^LhywB3_Q{(SX;k|%=2v{|-zDh#LzD>_?=)63_-9oYB1XqjAkbG7# zka6hk+Eu(%ZL>6emy5fWoPM>44TUIGKYU^yvh>3{<{?KvY&8!i(B^vcfRYSp#h>H> zVx@)LzkLWA1SR9)zf+eox6z5GF7$WVE@6w~F0OKY()xK+>QB#;OI6FY{6$5d<#=;x zPxaB-}~>4pQe)1Wv7?qB9hOgoPk7Zyw%Z`kQvJ+J*a-_tu^$frxzbsxGk+pt@y1o zHvdX}HPvm?uf0mTih9qC`qB$uS(}Tme=u$Bg_8#cxP4UFQ2|u7Wldv)Zh1?uJea<6 zIB!WA;=g$gKTLO;u$#0tx%4F}X&~YMHEx45?Tzr+_zi!)%7DV0UkwMXrK^C)Z-3f9 zaQXer-BY=2*Cm`pddbF@bWI=-z{f0EB{mY5KOhAnS11B{KRs4NXHO&5>$XM%QG58r z+xrK)w?|qg$*W1c>fR3L`@-&Tcq})MJ0ee)>uMAA-^u##H2pW9zl9&zr_H04V2(9| z3N_ttM_S~ob*=j(rNS@BI}heb3?}@7yy8K$veB0FdBEeDtMgK-GhI1Clv zPn&nwz`*-CdD?ftj!NMwbxWEECIj{=d93bUCG90P^k8yBC+UVP(@?`Sx0T|yqgeXmsP-VRwQjaICwYACW-$p>aAjqo~`nY{BE;Akj{maM5%O`cn7% zS?w)8>WPXgs()2>uadq2)v+2TGYm}Zs1&P;u9APMmB;NxuWIll?UG}_5^2e!hzv~0 zYI&pjxl+BFq6g-nnDBmt1n{)$Eko}f>mFuX-~G0|!)i6ZA}w9A8@IVn8ba^6Ptvoc z+$RmMF84`eX68KIUZh3#h?VU=dE{xd`;;k9lia6Vc`A3GSpRNohWjMol~o(UsGX%J zt+am7K=3zz11A{Y0ixRozu@eEkMx7H_utYFG7PpuyMB;S@bH{|kU{Y9xPFi^@UVsl z;TKl(FPQBY%5^@UNNPcXD_#5{8x zRO(gP_ey&;?&@P73Cgy&2wYDRR9`R~sM6hx0b0p_=O^Vd4m4#x5sGIJ4*q*`Tfr`Ew=o9$?xw* zp2R)6J9eygL};_GP~B01gY(|jhlBy>%rkmrwqniOPdffI$dT4K1$X~gIxW#)G zWtDuYW;yarix&&r2_GMy7dJjYUJoY0w>##wxuOliVRmd4{B`skaU~ zLz2g8cSx&pO)FV$cQ3FahYqQdGI?@Ya#k&2Nb;#?NU}{B(#7_@qxog>pXwpSp(N!Q zlCGwT-66?id`NOWBtR(~PfS`Lw z5pNiXp@q58sJyOH8^6^c=^iqf&%FrdsyrE$y2ljKNN87dULFyNyXPWdjw(KeHF^sT zNP>7rmKj43M+eSsOq|WZ0tM!?Ij0K=DP#F)%+t@L5V|uRWB#Egy$F%9x z2_0j0Lc9B9cu5jQ z49{gqHr*4>=DqIi4gKn1QK8=@JMEH>8v>QYS;?kEwBnwshHMNqKkgoq!}FDP$zu{b zs&K?KI=U4 z2*u38dII=1jEa^|RGk(2V&llr*>3e}_}u_Tdq!79(xatdu)SLhwnTvMZK#NyV7hwj zm4vQ-Ikl%N5xR%YXs9~0s}|FhEPxrPHjDWD4S}}LHH#p65~hsmmqc5OWE|ES!r-si z$0Cu&@+8wTBbjDGv#Npdp@=I7_ps104L?jC%PDH#`OdUuXFzG%J*)5c1tLUP;aT>h zZodYo+B@hY5bq-!@DYD=iaXs*ZtUXrGZG)aB+%xoRc;?fAa1v{r$0d_s*$<5fjmD# zZw1Lp4Zi}&v8v5RaiTr^`B!`Ri^2EUCq+q+W6X&QtQJOaXkRDNmxe};8L3D*)m_^J zv;-e^2H-{%GV{|YBj8*3oGhdZzSp(!4`LDGp#nbSx8k3q;}RszZ@hZ?yhPM#@Jh5u zlJTi;5fE|#j!w@aM3^YJMK`4f92<#F#d;6KsU`{2X3|0_Gai zgR{(foJ=gB*1fKA#zopgO{ncsjO!i(iy1|@YY0in9+l>A8$WI>X0JI7<&o zh4qNMNy7gGc{BP6JrrLYWZIxk-2*3P_L*RVSe)cp>!imdfSszE-5!lH9k=!_f!8>E z<4NuV8kE_Sunrx!Nko0YGwtbOPy*VdXt0(NE6zom-(R88=6Fd4#UTU#P?3#Fe6#v! z=z;FoNNa=izK}m1ckxHk5RqhvB9&D&Y9-vLYq`|V+RAq{?XjQOs9N!QDo0z71yR5R z$;GNDTUESlWh-`fC&KYYBEEsvDZtFsxT|9!KFvV+4$oqUS!V+<*MtlF)l2-+FP$YmN}^t~ zj{z8wrE2wfBxYSvrWsVV+VZGup@7lrAR@0q5nbf1Hn~aFqvor-?$on#KfN9!D`TInC0os^Oi|Vgi=6F5Qyk@9NSY z@~d{TFS(g5)}j5 zdfBG5Mcoxpa=}fM&BH2fvq;jBRNlw%=xDJ&1`!#&(o*L9`Wa1uYQGAqUNqx+;OUq#aLy8>7&tCacy*z z<79h(BjMNvovWkEbcqvIEwLI{Xc1AA6a2t?W&)f7UIMGOyskOTz!c)j98u&G?$Lh(36^7~^KzTEZ1Rtw&l5 zbHQiV-^a!}(`9{yNL6x9!K#O*EF9Vt%~1yNIkRmLpQr1E%OFZSw$L!OaMsa~dcEkm zqthga-J&M2$Q9t_xOpKxbR+Z14Qv}n0MJB+XnGWzm8pD_oPIn`-VC= zQ&%cs+qLRTjT%PZTHQGt@vIl>cQ2~Vc^CH`5!WOl65TsOjxB@zc=Aiu6TO`0w)9D7 zVL%adCwKc)Jv|LeZ(Y~mkpSx67CFj*6{8_2B}fcP)D_XZz&9=?=kMhF7SEq=qZ6?e zN0{5WUzhv|u6)cpn%> zx*nE+1O8u7P5T4<=^4R0|8sID;xzwH(Q3 zGKd0d4f|(C<)GeCHCz9^6}SrBOBq`Et5%KHy@A4Z;B1D&1ax4NH|1=PxV%2_tv(6s zzCxY*eQ^}oPo1C7Bj3@q*An%0Hna}nb7K8HgZS)NPgUxZ%Z`T8KglE@DoJo$H|*y$ zl4^wRz3=D<)%?etuhv>0X-y}vaL7ie`rorfw?tdbrgP$Yrhf$mg2Y&B(0Hyl4To$dMWlT_}4hv?2sEMuAO+ajiadk#pnaznSiRS>s-t! zi(UB#(F(TqElsjM!I^V9k>-i7l9cZZj=`o-;;U>RPPN2W=?h%$U6bTpGd^cykbv~g zyDs&vnTayzbxvMng$^g(^(9`A;JPGUcteMi?;6XCWbc~GlXKRig}1(cQfQMin!+vm zK?od#D-1{=`lbuxsZhRmJvW$&&&k_EA3B$`x9%ViIpQ(?MGNM|CJSpIbg-#|Il<95%EC)h zBW-pUaq!*WuFKz;ziH{PShkep*M+fYt^GPQF9&dX=*BH?KM|gCw?$^Ahs*obf(6po z*nSX&t&l)b^!GXO*2Q7K!)}E@Aw)^&wQ(dQ^x8XGx7i(rTo0LTzAfK7PY-TJ@4SD? z=oOYY0PQ_*)80bES<0%^hxtd0W6{zLm%lCR0^$NCM_d=dv~$)&*NWL{H?!3q?%%FZ z8THa`CaYa7>%7aw@;=m{#BZ7muJ&8_{|OpZ|F$<9+Z z+R3#4Jh6IzJ2GK(eqApL{F^2D^2FpGb&;K1+{=afPY=r0&l;BVTJn}~`JTws(YVOS z|2?#dhwt>bW~o@y7w`J1GdK(q+wA?py6E|>n{nhz%N)^37+NjOY@Y52p45D|6W39p z4N2kZx6MaLiJ;Vwl5$`?Xwa>udebO2-oeZYw<(e;gRA_>34`@&OT9M{}$lORbG6GVsKZ zRezl+V5FV^JN_3y)GzW30U?gr7``mr=n6Nw!;PMBW4dhES!XARKXpk*3FbEFk(>0E zBVln4d|~I%XLjyGUf@o8$TR!*Arq_zxtI(*ElI zj7r}pF0dWQA0%w>6`8VPMOhrn578dxOaNOCIqhJlH^{*>|B}fUO=;uk9G7KC{!d{E zqobf_L$-tmf;Z3pI=+TsJ79FXuEkxL^omD&I~vsON@z@xJH{1f}LZq=DXTO~@C zcB_U_o&nEl5@jkB{jlf^oKxW!og6z5iB?Gz2QVm#d0Q`s*LI3NWzWUjS;Z4%Q7*0- ze16BBkn$FF^8W}~%3}RN*+9hSR-)(%Pemht>Dl?Eo`y4UmJ)F_?{nSn08bIu{lOI6 z*eCxHkPtEScyyT=rpyhv@S{u}_2h{S0^A0HUW1oKBSa3zHc*g0ZV)_iKL~iC22Ac# zLk$?(UexDI3XJQVN~!9BWzrE%r^Xwo!BUI#YwrX9fOJ#%t~K5Zn;bD6Ts&EMRge40UCIE;iRoe+4iCz-gLT-KLZL(*&5Oex-Q8rvb6;jIzO#(nDx?eTiGr*A_lvE%6A&CKA#vRV5S*=(2Y$&faZS6qK7Y0hdT^MgKf>1-SKL6IQX%hUN zP6Y;=h7G1-f*NmaWLw7GymF78?Z4SN&^X$3do#jw=Kud@Zz8;3hwsa0DMNr&6E;~4 zEGl3MsPtv{jOx+AHag5B{U&RK8ub|4HZ5B6w#LW9;4SNuA>9P)VYYNW&Z(hxri61*82UXA3u6V z4`_O5yzU`{$nUB{)Ww@L`;C7gX**$2_#ZW`$lZ(+6$uJ}b{}jV)zyK(1&ouio!3lc z5WGYx9arIr^(5HXd4s(CuOnUtC{%rS=*vW+PPnhCMdB+m1c$n*kTYbop2g`!^8C3Q zm5&l=DKl(YTiIRdpRN>Z7Y#<1bwL$G&@agmYCRZ}j?cgMAdqca@ zeE#L8KW?G~&9s|NVL5@E&5VlrrG(%F%oP37N~13)%1W=+9a^8n*j)G>rl>9I*GM(= zl+w6Cuh%F*(5T^KGgFsAm9_c{Yz#Sv99=9q7feg4vyq39a0UuJDl) zk9x20Fc|NTz6150i+HSvL}31b0tRQNXtJsc?KkJju*Rr~HAS^2Qj{F(Kh=Bxf76ZL zHO&PlrKK~`Pv9a=azf9+WX>zp8DOMGj_+85-X-@I_cc6RPV^1vBibkrORq5xw~JSx z>DVv-oTSmOfiJP28U-pyiaRy(I-*yZ9)09)(@+UHNRU?|eZbhT2UC-#*|9#FkO&-- zEU}zpi8@tV^UA`mZ zhLaHw-G(T>AWf8Crf-M|76M${2jG? zc7eepviY1V+uVgMn}hpvHrQ3R`-Z{;7h;w=wft@6fX(7~N)-Wf9%!b|MP7mX&3QXTa`4(S38oqs?e|)ntTF zriF~~7d0A-vcfDRDm>jqvOXTLV$BtP$s$T-QuytBmbXNzBziK7%fMNLtH)bYV8T8^ za#0ywTB6S<)ooPJU7Dq<)@UT7Ad7#LCp?zPIrO!RUh7KO@SRzh4=+u%F3aym%*$Fv zHqkR#23>~B2kbLc|3a7JoXf0KM$$fFPDxe6osCF?V7W}vcX2Y3aT#2A>|-d$kjVZJ zy37&WVa;MU5cvK4(B@(D!dGUH-n1k3SK5QIp>=y!ZRkzdhR1<1wixim`y&v!`Y!dm zb9H}6$<$bs@iX0uGyLLJs=YBGIdL+6mY6oQtG6m#lwnN->PSIyZH;;j2kTaoJQli$|$&$pxC=nuI&@+QvrKD5y! zW04=OWyP*Pu`skIf?OPlyXJ@8=4GvV4TdkDs_6klzY^bL?k_Gie0>l3gjO zscCZe|N5VM*w7k=n?4izs!o?7WR+%xZiD3ASLDCdkYv4vm}vyGj_H6NSm-E-1gddV zb3yv>Kw4q``lbJhIt%fv;qkEudlk{6nMqt-t|^Xru@R-q_gEWhA`6`&?~L(>F4?!i za3|0kR=MN%CoVgWuiG}iyCe&Ob=Z#byGyh%L)RE@t)_QY11Q!7?Kso2rxRQ<-9t=Y zwH9T=g66_dP{R19mX+bFj;(L++`t*FeJl;Jv;`O9E(V2o1m(%F zuFeR(?;Y`$xNa%T43}ocG)!XJXz~7(_TYz+UE)1-ZR@s17)wlkLtAB zIX_^Ci@cuUFi$hi(-0JouR(n`I_%Th>i~0J|rK zmB^I?+Hz{yelez7G}*f*oOznCgGm2`v~*qjY%9Ie$Kq<{7+KEC0=utqEZm7!`($0L zdYDo42f+ZtR_7Xpl1z1mya^BIU2dQK5v`-JGrY)?nD%{AhHJB8DRj{Sjw!xP7cWRJ z%b@nqd){GJXIQ?>aIHqU@QLz_3Tfe!qvI{~J|Mc2xF3|+%CLPDnXbs}`Tq zn|_&(10wj}}7K_7Gz+EL~ioc0o)K(GZh#lO8%GOO`b%zrx*MZ;Z-4M5J`9DBV0Cnol*e z356$&EQz>Y`6OG4Bg?O%KqBw7gTTgd2wL`3sHxh4I}*l50wwMVSHDWTt=q2!SpYR$ zfbzDA@yRRqQFNy?T0M2MICa>~7OhpzgZ*-xQ3dWwJ0n+rtiEQNVl}*t+=~5fz!z%R z>Ifh+-0ld@hFh^PdWEAWz17#j%tR`S8tn1K>UO*{<0E^zRlT#aMg?L;NjIEeInoqw z%RPdl;y0M8br+vhXS$eE71>(^mCCzV(CvNj@9e+)%>dbcD}UlxAEOqZZm@omtUSw= zx)w7U*|<97x#4Y15p|n_XIRy{SxgY!wYzvXB}fcd4%fC)zayHWDnXc4$_6S>B!$fS zKniKP1mVcFdGj-aReU2l97Gf*R=h!&8inp8rJ^A&1(#-o>vpT*Qcn4+5;(3{Aq>!@ zr(A!EQC^OYR@KwU#OnVMRkw@sejJ)4_1{?rnqt7Eg;lEOd(d}qmr>dE`a2{~5r29L zWu*iqZBjp(A}DI|`q#=wK~K+_^0CAfnl=zbgY~bJ0U6s1?C#?20(8&&lBVGeb({D| zC_hA;W#(k{ow@PdlNsN;`zt~Xj4Gxrwi|GO+HjdCaM3H`?97nj$zK&bxWh9=j*qNM z%kgCs4w2n`3&qL#H|i{COf1YGystyHoQZqs_zD4jWb~y)HD4qIGK@l8Lk&3byh-cK zy8VaP{tl`c`_U*$RK_FtowXixp)UL{a%yBnuj)<}4cTs9KyPT?`!7 z1YD_DbSs_nH#rM}N$yn7T3YcILU+|Kik>=eF0g_wA!W69)F8<9-?SUlp30{V zVaDnj+J&5)e$v_0s|o4j#Ao-9_Lp5%6WYRlF4Iwqa+`-D9KkPX)%8fpY`gdlIdoPB zkW)}B(_@V8ZH$l67`Ii{1?kal`W;_*{3h_r;+M^DGQab5?^mc9-_)c>yon6rO{A;H zVm;MN@jpTSb|Ky&bvK&2b!du@M}h$zmR`tkHl7651s8LMg!?jZd$W#}6{usTm-Qz& z&ESgfGp(A(xdtn_Omr%|t>=SJKxfF3hFKFmYW#4hsuWT6rrZg-^SrHMW$%AonpMP~ zo|_?BzZ~=QR15j;{yMF($+qlL?nUPZCux#i2)9Sh*F<3DQ^T@^`(#=boPWFWlLB7< zOOk4nq#7lu))N8xO-4T6xRs|thN_&zwO%hZt|!%y-qw9`>#4d=1TW}8Z1*H!1}k__ z?;E%#dm6na?8?8DGNLbvA4I$b{rouy5I-;K;`!v#Bv|IIq(idRlg;)XswvI?N6B-a zUMp+t2dG0YSY^y55LEl*FQ&gN*#`Aru?W?NFh|wLmZVHe&l&6E#L5jli+(lw*gBal z2341&4`rF?mBjUzjWG;%HM$M#lhni7JD=u{m=j&Ar6l$-dHdE)N9w<7{(U@sbIBHm z@15we;FF}lx6PPJena7|Kg>yW(a$1 zD3HT9%nNX)A$B<~!`oN|K|e$!{RL_K{We=YPp!(-1T7+5&D7(0Q4k>atu4|@ju4KZ zKIF4ZM*A~^Bk;t1(=tiq!u#(y{p>^wRGx>3Ac3!f<1|@0^y_R$-6xYVIx5sZE{Hw? z&ztVIVG@lgJ;_wDg-^96u~xd!5SwR#OwhKn^`?<@#tuE&yg%4@<(c|8at2wF!jo|K zml>R3jlz$11#S{wzC!nec6Ep&C=F|>oJQg>Og(8nGG^U#?TRgAd>m-HL*2>Ed6#fZ zYrWZC5FC|$XG(h^7c~QaW#Xc{{7@x_3*Y7mh!G~~lBGwbzq`?3JVHKNm9wG7+P-!i zy&wSfhUTW$kHP;~X`eK8zl`PPadmn7o-p(c%FX=B`pn%3Bwz{y*9p-b(!Ttf)S zyi4CBh9D5_{A9g-84EK_fuH=?lx0vSoj)!(s#c9P z&DC#(9(Yx0TB={!*fjVE?J0|tx2t<$uT*M_O=zo3!4jN?>Y_52lc+*X&~)pL)1A;y z4H4}wvNj-5vIgSvBnw?#(GqA(Su2+sqN?1;LQ{sFvAJrVQHZfDCp3rTN{EBvL$m2Z z@znXrzCWMZR~7o3OS>BuXHV7N6Z8xFo~>ouv1&GmFeksOp|-~VG?@p+W(%`gR|wkn ziWOw_p{jTpqjedg9P(0qp#7V4ga1bI)DM$j#o1%`59pNm(pTNrOG7hbLLb8k%-;?H z#_Db+_HF9rg{_+x{j0`$3s2m4ja%!!YgBqpZ<{BzWpiNIa`zR5p##oEz2GLfi&crq zw=yB4$v1KBb{dh>YwKGaJG(V-l>DN}@|pSP+4aZRsL+48yIoqN&j*_G0Hh2RL;++g zXN`BAwl-4$`N-Ihx4A~O5XXAC^NONDa4^y;c58?}4bNBvke`W#Shi0=k-7Fp4jglO zSAGWkLXJKsa@}~x!+K}WbIuSznr0yh-O+dffF*D7uF06T{_igDn(w~EJhFVWcWuTr z1a-0J3TGk5zWEzbe#Bp$1;Ugk_*AgB(1_7BNs90 zxK(|OpahcCQcdJ7Ze!B1b3VCPMU;CGBC_P#qU!U6Ll~=$53fH`3s}Yv{I_G%6{FI% zJT`s$=-??W+X7?Se9q|=&LB>UlW1|vw%~3wDpO8f7uqhvbhzFj=)v5PO@FoP0>ICS z<@dIVWkbhQa$4Odm?yBJN;?AW3+upBnpZWeFhbx)wPE z3K4eG+fu+?0$kU|;5xwu21{O)ENZb`**{RD@`z{m7!yF2uW3q^$`pq zMO`yT){OHELT}b!n)9<0!)Nf)j>Vs|wceIIcKjX7bzLV4;f#*QV%6B=^TgWcZFz&e zf5%ThS7n!Wtcz84g6;FR+#=OT8wo}u@oY{oBlvs!bJw+>o%83$U%Z;niN6(6nE~v? zVN#zPrn97)-YTlwsY9CfIqBhZSF{It%iyvmK4rsS zhsdj$NJKbJP^|Jdkh(_7x1(vWGj{-w7hB=msMqg`lq00UvBb`B!|rgyE@av2ZzF_< zv;6S3w8J;8;7*psMbs$!QaRe!QdKmc(`r90PDO6YEW*dkdMC$RIw`F0GgI&S9H~uG zf<>G2vqyt9lbHLM{rXmH716Xbf=N3%a*kbiyfNXLs@2 z;P9A8G=QFZBnF2gjjgSeQ!%_zi|>oQ=%U*g7L<=1lEDhTjUxJ&H0F=0=f;;fE=54f zj3D|Y-)4%kSG&W%NOSQ5-;D}b80mQL&!S5@NTo=R$ znEICO*$Y+&k6a*OPF-p+;uggrd|ffbC^8bsv6a%_! zvf4FFlSlLhOE&@2acN*=m4^~5ec{z|RR=#t3vrdS*%ygC!=*x#n6;(5Raz``(A6sM z9msiw#$oEQifj9SE_Da zh&-h)FvHRq0sX(`U2G^qt0#020!di9mFOm_>u1M_BGy@4b${(TqQB4|951KfXqbds zrJ-<|a3q_X?$*it6}ZBWpT}KrY;0?2&c9}vI#75CjwNv1%P)~eE&rGjbn<8h#|@E) zyw#vq*jmz@47>>@wSi2}FzzDNFQK5F8fkPP4_hVaJJcQckNA_`Cn7q;DwReU^Rmbk zz9VQbO;R1@G~&zbi=+^$Yn9K08$JD1dXfdQ9H`H>UKY3@na2en_Gr2gRYx=ueKt&* zENhi~i$ny_isS>ecAD_(dMU_){$(jyokPIbNNXG>pK@b)5GjADzOX|5`v=mK>6CV! zrBR26M5#|BbAIyHdEwD|0f~1gad@+4roo?I2{vvK2+fwSqn>+pVVWjb8R?93PRLcO zogv<%GT!MqmgvS6zIZ=wqOi79?3P-B+!YM>wtSOom37+FY(DEp_!qz}YX*L6INcfk z{ZjWg2J7bhW=*QDc&?mua$w#yqWQ9^!Ko$9mz@{9pnh11U$%tt63+Cy;G6Bz;`m^5 zsyl}i(Uw{;Jm6)$#b#|}TZyxzV0dtEGYU;-`o%z^ePLqegX+seGS?3;@ynhsp~g{? z>FbG^l9Y2uCY%rx2XvrqV)MbGr76t^uWuaLeDM5$yKUonQwoMHN-l}+=G=_Ioa#`Q za$pxuTRyQQj3$VkecaXyh)urcJw ze)D#9uPNh*{pJFhg^Dwca1rwn@c{ID#Rdq38B^Z7uS%R-G=Eyb=fwF$lu=Ph2^T*^ z2%?Xz?y&aF8xF1rzr2`bLwD;^{-%+syZFf|T*7sa5rZdECi0&2!s)+7Uva&EF;w5l zdczSeZdTQE^!X#I?yYiOW7Rd+s-nSnG93Lal0i;v)Y*eywn*xRhqRCgV z<0?o?j}I(ybZ8M=h>Q3(Hac!VJe%kfLXVG?5X2GVgE=7Fx{wV!Q+Mu;+VJX?+=sQl z$?&SBa^D(|zmG51f1CNMdJi)B;ZC_l9{$2Zxb+da-L7vR;ucrXElXJCs@7kh8flr~MONdHa>kswcdk>*ICH`6!`bEQUCm(!sf z!cj4JAwq!n0WnvA|2MyMS`1%N@HOk%;mcd}n^|4v>X_Cl2?7nK36a_P!&ogA>$JbV;W~_Th4?hI+GVw!uvWya~8~~^?9Z)GAKK!y$j5RX(^)6Q)%TuW&`Jid6s^O$V z2PB}S4_*f*Oy$<&LL_=+SJmArA)_eVq1q3`uz9ZkU>uu0-1+|zfBYkN-K|20;Ls6$ zKJ>EO6C2EhG}_x*z}usA>Hjhu;wTf_!z1x!V`+FCU7>?T0hZ@N_EHg;F_b5asd5Nr zcJP_h-UqjFW4$ckSgQp<8^`a(z(PN=1_WvhS0ukvsm_*Va14R?^hkaeWQSgsI$1YM zL0vAlL-%{|TpRH!DFKuRF9D~~I={rNFtjIAMnw0tuS;JX>Mah{jQZ2np z4pJCI4PO5=!N$#$)+48n;M~%|qc*ZyvZ(1xB!myiXT+0>0(-LNbl#TxB�k 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 z07≻;HyQ@-#gNq!{G|n7iE` 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 z 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 literal 487424 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

OzaHgPI)+1&Emo^STIDaG@2MLTz@T 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

^ChawbvMO1H#_SMIO29!ys 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

H;vWD!662KHJf;auq*Sgpi%_Dbtk=dwpE!Q{uT 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�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�HG7c?au}*kt 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 z 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 diff --git a/PythonLib/full/_multiprocessing.pyd b/PythonLib/full/_multiprocessing.pyd index c11038c8197fbb6749b0ac58ed1696efdd1f8d0e..69d5306f37c64c5387db564cc1e43c9489a09f09 100644 GIT binary patch literal 27648 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

MaW7cxqunXtMHLS?8 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 PRnjbA{6DV0D+m4`OUg^h literal 112128 zcmeFa4}4U`xj($gZjuEy*#!~|l0cNiq5+$Bi4vD+kZg!baKn;aQb>Xo=ys(_@f-vt zA@L+Mo8v0?{G+J`s&E8x$+{un`Y z(!7_GOwUbu{jz;AD__5CP2l@?XKdYe*Y~#F_JfSuZ@cr(yQGZoZpzpu-hIqkAlw(X#N#%ZR>oLNY)zThi0d`QUN$Xe zs>xIoV=~<ih{gvpQNHL~e0KjV#l#KT;zLf4pK>z=L{|{2Yr+%u8X!eKx8D-k*RXoFuA44E0=i}@@dK8~p zX1K?ZKDS|5PH47#ckWy@M@!jw+uXSxpO#|7w{pnpY^`k9QWoQbLTX|rC7ZrlOIgU{ zEd*^YAfPp{a60DLg7Ruoh9CNl_@&swVPMzZEo1E>KNz0Eb774Qvtl ztQ@6{3Jc$4I*K|kz~BA&3*c`x{)+L}+lmTnlJ?aUU zjFh4o3k2qd)}8UrR`pL6?W%iJEgA8k9iyOxa>(Kd)T0twN~%anX>_!}SLzLX28ssp zU%>L)xpM=JJnbN|sy)h~%Ar&(sbvAevP~_rsKu#1?I;ihy1tC~d5pb4kHCmNM7~Us z&u39@M80n1Q}c6Bmw@$GR1#IF)!tZ*d}^)Z~d1}jj0$ahq2yAJD&BCz}D8L^!kw`gY zWBw~lCPMly_|+3gi$)O1gE2u9x)9ynLS5g`Doqc@1O~wh;7>psTICs(Vu`3*RpmPB zJuPJ^zSWTiO$-WjT_(^PJ!}oRN0IRo%`R_M{X{T7Czzhw6Ig)6e$gaU5S()rlG@Z; zEov!}9wXYiM>VVbZMB#{9uCrTix}I)7=K`Cv{8Dh3H;?lNzV{BmDtoWYtW>Q5c8@x zTD_$hPfO59zdER;96}Q6#9{erEu|39{C|owndHmV#6oK8bZ_8D_1wAOcYP#PDP3A6 zXZMbCJ#$*m^;8w}&q)IY{EfllLjj$nMu3pKCL^lb;TpUh{ ztI^X1U#gNc1+A{)==HjN1Z2`B3i|<-oz)NIRdKUMHN8gFR&|9nTsE?rcQLvd4b9=b zX|I0(IaT+F**zL^TU~C)_Gwl7l8u~5_kf^7$c!FD)FnogS~7~tmag`&4{IO*583p# z%*0qXmyLq1gPg7_tVkmo;ZsM(>8ep9tfCR>G&J*BQBahQL^w{bWVOVqmRh|)*%Nk; zctj⪰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

0r_kj6n_XZvfV5c7(@> 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 diff --git a/PythonLib/full/_osx_support.py b/PythonLib/full/_osx_support.py index 5a0b71e9..d2aaae79 100644 --- a/PythonLib/full/_osx_support.py +++ b/PythonLib/full/_osx_support.py @@ -151,13 +151,13 @@ def _find_appropriate_compiler(_config_vars): # can only be found inside Xcode.app if the "Command Line Tools" # are not installed. # - # Futhermore, the compiler that can be used varies between + # Furthermore, the compiler that can be used varies between # Xcode releases. Up to Xcode 4 it was possible to use 'gcc-4.2' # as the compiler, after that 'clang' should be used because # gcc-4.2 is either not present, or a copy of 'llvm-gcc' that # miscompiles Python. - # skip checks if the compiler was overriden with a CC env variable + # skip checks if the compiler was overridden with a CC env variable if 'CC' in os.environ: return _config_vars @@ -182,7 +182,7 @@ def _find_appropriate_compiler(_config_vars): # Compiler is GCC, check if it is LLVM-GCC data = _read_output("'%s' --version" % (cc.replace("'", "'\"'\"'"),)) - if 'llvm-gcc' in data: + if data and 'llvm-gcc' in data: # Found LLVM-GCC, fall back to clang cc = _find_build_tool('clang') @@ -193,7 +193,7 @@ def _find_appropriate_compiler(_config_vars): if cc != oldcc: # Found a replacement compiler. # Modify config vars using new compiler, if not already explicitly - # overriden by an env variable, preserving additional arguments. + # overridden by an env variable, preserving additional arguments. for cv in _COMPILER_CONFIG_VARS: if cv in _config_vars and cv not in os.environ: cv_split = _config_vars[cv].split() @@ -207,7 +207,7 @@ def _remove_universal_flags(_config_vars): """Remove all universal build arguments from config vars""" for cv in _UNIVERSAL_CONFIG_VARS: - # Do not alter a config var explicitly overriden by env var + # Do not alter a config var explicitly overridden by env var if cv in _config_vars and cv not in os.environ: flags = _config_vars[cv] flags = re.sub('-arch\s+\w+\s', ' ', flags) @@ -228,7 +228,7 @@ def _remove_unsupported_archs(_config_vars): # build extensions on OSX 10.7 and later with the prebuilt # 32-bit installer on the python.org website. - # skip checks if the compiler was overriden with a CC env variable + # skip checks if the compiler was overridden with a CC env variable if 'CC' in os.environ: return _config_vars @@ -244,7 +244,7 @@ def _remove_unsupported_archs(_config_vars): # across Xcode and compiler versions, there is no reliable way # to be sure why it failed. Assume here it was due to lack of # PPC support and remove the related '-arch' flags from each - # config variables not explicitly overriden by an environment + # config variables not explicitly overridden by an environment # variable. If the error was for some other reason, we hope the # failure will show up again when trying to compile an extension # module. @@ -292,7 +292,7 @@ def _check_for_unavailable_sdk(_config_vars): sdk = m.group(1) if not os.path.exists(sdk): for cv in _UNIVERSAL_CONFIG_VARS: - # Do not alter a config var explicitly overriden by env var + # Do not alter a config var explicitly overridden by env var if cv in _config_vars and cv not in os.environ: flags = _config_vars[cv] flags = re.sub(r'-isysroot\s+\S+(?:\s|$)', ' ', flags) @@ -450,8 +450,16 @@ def get_platform_osx(_config_vars, osname, release, machine): # case and disallow installs. cflags = _config_vars.get(_INITPRE+'CFLAGS', _config_vars.get('CFLAGS', '')) - if ((macrelease + '.') >= '10.4.' and - '-arch' in cflags.strip()): + if macrelease: + try: + macrelease = tuple(int(i) for i in macrelease.split('.')[0:2]) + except ValueError: + macrelease = (10, 0) + else: + # assume no universal support + macrelease = (10, 0) + + if (macrelease >= (10, 4)) and '-arch' in cflags.strip(): # The universal build will build fat binaries, but not on # systems before 10.4 diff --git a/PythonLib/full/_pyio.py b/PythonLib/full/_pyio.py index 0986ed23..f022a4e8 100644 --- a/PythonLib/full/_pyio.py +++ b/PythonLib/full/_pyio.py @@ -7,6 +7,7 @@ import os import abc import codecs +import sys import warnings import errno # Import thread instead of threading to reduce startup cost @@ -25,8 +26,8 @@ DEFAULT_BUFFER_SIZE = 8 * 1024 # bytes # NOTE: Base classes defined here are registered with the "official" ABCs -# defined in io.py. We don't use real inheritance though, because we don't -# want to inherit the C implementations. +# defined in io.py. We don't use real inheritance though, because we don't want +# to inherit the C implementations. class BlockingIOError(IOError): @@ -192,38 +193,45 @@ def open(file, mode="r", buffering=-1, (appending and "a" or "") + (updating and "+" or ""), closefd) - line_buffering = False - if buffering == 1 or buffering < 0 and raw.isatty(): - buffering = -1 - line_buffering = True - if buffering < 0: - buffering = DEFAULT_BUFFER_SIZE - try: - bs = os.fstat(raw.fileno()).st_blksize - except (os.error, AttributeError): - pass + result = raw + try: + line_buffering = False + if buffering == 1 or buffering < 0 and raw.isatty(): + buffering = -1 + line_buffering = True + if buffering < 0: + buffering = DEFAULT_BUFFER_SIZE + try: + bs = os.fstat(raw.fileno()).st_blksize + except (os.error, AttributeError): + pass + else: + if bs > 1: + buffering = bs + if buffering < 0: + raise ValueError("invalid buffering size") + if buffering == 0: + if binary: + return result + raise ValueError("can't have unbuffered text I/O") + if updating: + buffer = BufferedRandom(raw, buffering) + elif writing or appending: + buffer = BufferedWriter(raw, buffering) + elif reading: + buffer = BufferedReader(raw, buffering) else: - if bs > 1: - buffering = bs - if buffering < 0: - raise ValueError("invalid buffering size") - if buffering == 0: + raise ValueError("unknown mode: %r" % mode) + result = buffer if binary: - return raw - raise ValueError("can't have unbuffered text I/O") - if updating: - buffer = BufferedRandom(raw, buffering) - elif writing or appending: - buffer = BufferedWriter(raw, buffering) - elif reading: - buffer = BufferedReader(raw, buffering) - else: - raise ValueError("unknown mode: %r" % mode) - if binary: - return buffer - text = TextIOWrapper(buffer, encoding, errors, newline, line_buffering) - text.mode = mode - return text + return result + text = TextIOWrapper(buffer, encoding, errors, newline, line_buffering) + result = text + text.mode = mode + return result + except: + result.close() + raise class DocDescriptor: @@ -266,11 +274,12 @@ class IOBase: Even though IOBase does not declare read, readinto, or write because their signatures will vary, implementations and clients should consider those methods part of the interface. Also, implementations - may raise a IOError when operations they do not support are called. + may raise an IOError when operations they do not support are called. The basic type used for binary data read from or written to a file is - bytes. bytearrays are accepted too, and in some cases (such as - readinto) needed. Text I/O classes work with str data. + the bytes type. Method arguments may also be bytearray or memoryview of + arrays of bytes. In some cases, such as readinto, a writable object such + as bytearray is required. Text I/O classes work with unicode data. Note that calling any method (even inquiries) on a closed stream is undefined. Implementations may raise IOError in this case. @@ -412,7 +421,7 @@ def closed(self): return self.__closed def _checkClosed(self, msg=None): - """Internal: raise an ValueError if file is closed + """Internal: raise a ValueError if file is closed """ if self.closed: raise ValueError("I/O operation on closed file." @@ -641,7 +650,6 @@ def readinto(self, b): Raises BlockingIOError if the underlying raw stream has no data at the moment. """ - # XXX This ought to work with anything that supports the buffer API data = self.read(len(b)) n = len(data) try: @@ -656,8 +664,7 @@ def readinto(self, b): def write(self, b): """Write the given buffer to the IO stream. - Return the number of bytes written, which is never less than - len(b). + Return the number of bytes written, which is always len(b). Raises BlockingIOError if the buffer is full and the underlying raw stream cannot accept more data at the moment. @@ -768,7 +775,7 @@ def __repr__(self): clsname = self.__class__.__name__ try: name = self.name - except AttributeError: + except Exception: return "<_pyio.{0}>".format(clsname) else: return "<_pyio.{0} name={1!r}>".format(clsname, name) @@ -989,7 +996,7 @@ def _read_unlocked(self, n=None): break avail += len(chunk) chunks.append(chunk) - # n is more then avail only when an EOF occurred or when + # n is more than avail only when an EOF occurred or when # read() would have blocked. n = min(n, avail) out = b"".join(chunks) @@ -1209,8 +1216,10 @@ def flush(self): return self.writer.flush() def close(self): - self.writer.close() - self.reader.close() + try: + self.writer.close() + finally: + self.reader.close() def isatty(self): return self.reader.isatty() or self.writer.isatty() @@ -1488,6 +1497,11 @@ def __init__(self, buffer, encoding=None, errors=None, newline=None, if not isinstance(encoding, basestring): raise ValueError("invalid encoding: %r" % encoding) + if sys.py3kwarning and not codecs.lookup(encoding)._is_text_encoding: + msg = ("%r is not a text encoding; " + "use codecs.open() to handle arbitrary codecs") + warnings.warnpy3k(msg % encoding, stacklevel=2) + if errors is None: errors = "strict" else: @@ -1531,7 +1545,7 @@ def __init__(self, buffer, encoding=None, errors=None, newline=None, def __repr__(self): try: name = self.name - except AttributeError: + except Exception: return "<_pyio.TextIOWrapper encoding='{0}'>".format(self.encoding) else: return "<_pyio.TextIOWrapper name={0!r} encoding='{1}'>".format( @@ -1997,11 +2011,17 @@ def __init__(self, initial_value="", newline="\n"): def getvalue(self): self.flush() - return self.buffer.getvalue().decode(self._encoding, self._errors) + decoder = self._decoder or self._get_decoder() + old_state = decoder.getstate() + decoder.reset() + try: + return decoder.decode(self.buffer.getvalue(), final=True) + finally: + decoder.setstate(old_state) def __repr__(self): # TextIOWrapper tells the encoding in its repr. In StringIO, - # that's a implementation detail. + # that's an implementation detail. return object.__repr__(self) @property diff --git a/PythonLib/full/_socket.pyd b/PythonLib/full/_socket.pyd index 2bbe3d05244fefb9cb39230a327e07f3c7c02e8c..356039a3b227834858cdafa6ab889a6178e02672 100644 GIT binary patch literal 46592 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%0AH8eDN*oob&PcVjw35wmUSQ6DhZaBh=djH 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 literal 167936 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 DlbY1; literal 140800 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

O;BHk+4?s$N4M6!{-}(lu*s_V8 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 L{H(zLrocY{a8K$w diff --git a/PythonLib/full/_ssl.pyd b/PythonLib/full/_ssl.pyd new file mode 100644 index 0000000000000000000000000000000000000000..f9ba6b225f706c7a664c330f423b4e52d8db43ed GIT binary patch literal 1411072 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 V@fFh|662Q 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 z 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

4?m?QJKmnQ~#oS5;ZDd)0@@U}8lMD*G4m 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 z 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%0AQw6qLyx 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

kN^NB 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 bxq<__c4vgcGPC_AsbD& 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

2cDL?X3$IM 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ĆOv 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%0D(~*HbgwHSL42CGOIx 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 _CACHE_MAX_SIZE: _regex_cache.clear() - locale_time = _TimeRE_cache.locale_time format_regex = _regex_cache.get(format) if not format_regex: try: @@ -335,9 +342,9 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): # though week_of_year = -1 week_of_year_start = -1 - # weekday and julian defaulted to -1 so as to signal need to calculate + # weekday and julian defaulted to None so as to signal need to calculate # values - weekday = julian = -1 + weekday = julian = None found_dict = found.groupdict() for group_key in found_dict.iterkeys(): # Directives not explicitly handled below: @@ -434,14 +441,18 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): year = 1900 # If we know the week of the year and what day of that week, we can figure # out the Julian day of the year. - if julian == -1 and week_of_year != -1 and weekday != -1: + if julian is None and week_of_year != -1 and weekday is not None: week_starts_Mon = True if week_of_year_start == 0 else False julian = _calc_julian_from_U_or_W(year, week_of_year, weekday, week_starts_Mon) + if julian <= 0: + year -= 1 + yday = 366 if calendar.isleap(year) else 365 + julian += yday # Cannot pre-calculate datetime_date() since can change in Julian # calculation and thus could have different value for the day of the week # calculation. - if julian == -1: + if julian is None: # Need to add 1 to result since first day of the year is 1, not 0. julian = datetime_date(year, month, day).toordinal() - \ datetime_date(year, 1, 1).toordinal() + 1 @@ -451,7 +462,7 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): year = datetime_result.year month = datetime_result.month day = datetime_result.day - if weekday == -1: + if weekday is None: weekday = datetime_date(year, month, day).weekday() if leap_year_fix: # the caller didn't supply a year but asked for Feb 29th. We couldn't diff --git a/PythonLib/full/_weakrefset.py b/PythonLib/full/_weakrefset.py index 990c3a6b..627959b6 100644 --- a/PythonLib/full/_weakrefset.py +++ b/PythonLib/full/_weakrefset.py @@ -60,6 +60,8 @@ def __iter__(self): for itemref in self.data: item = itemref() if item is not None: + # Caveat: the iterator will keep a strong reference to + # `item` until it is resumed or closed. yield item def __len__(self): diff --git a/PythonLib/full/aifc.py b/PythonLib/full/aifc.py index d8b7fab7..e6783277 100644 --- a/PythonLib/full/aifc.py +++ b/PythonLib/full/aifc.py @@ -288,6 +288,8 @@ class Aifc_read: # _ssnd_chunk -- instantiation of a chunk class for the SSND chunk # _framesize -- size of one frame in the file + _file = None # Set here since __del__ checks it + def initfp(self, file): self._version = 0 self._decomp = None @@ -341,10 +343,16 @@ def initfp(self, file): self._decomp.SetParams(params) def __init__(self, f): - if type(f) == type(''): + if isinstance(f, basestring): f = __builtin__.open(f, 'rb') - # else, assume it is an open file object already - self.initfp(f) + try: + self.initfp(f) + except: + f.close() + raise + else: + # assume it is an open file object already + self.initfp(f) # # User visible methods. @@ -357,10 +365,13 @@ def rewind(self): self._soundpos = 0 def close(self): - if self._decomp: - self._decomp.CloseDecompressor() - self._decomp = None - self._file.close() + decomp = self._decomp + try: + if decomp: + self._decomp = None + decomp.CloseDecompressor() + finally: + self._file.close() def tell(self): return self._soundpos @@ -559,8 +570,10 @@ class Aifc_write: # _datalength -- the size of the audio samples written to the header # _datawritten -- the size of the audio samples actually written + _file = None # Set here since __del__ checks it + def __init__(self, f): - if type(f) == type(''): + if isinstance(f, basestring): filename = f f = __builtin__.open(f, 'wb') else: @@ -778,7 +791,7 @@ def _lin2adpcm(self, data): def _ensure_header_written(self, datasize): if not self._nframeswritten: - if self._comptype in ('ULAW', 'ALAW'): + if self._comptype in ('ULAW', 'ulaw', 'ALAW', 'alaw'): if not self._sampwidth: self._sampwidth = 2 if self._sampwidth != 2: @@ -844,7 +857,7 @@ def _write_header(self, initlength): if self._datalength & 1: self._datalength = self._datalength + 1 if self._aifc: - if self._comptype in ('ULAW', 'ALAW'): + if self._comptype in ('ULAW', 'ulaw', 'ALAW', 'alaw'): self._datalength = self._datalength // 2 if self._datalength & 1: self._datalength = self._datalength + 1 @@ -852,7 +865,10 @@ def _write_header(self, initlength): self._datalength = (self._datalength + 3) // 4 if self._datalength & 1: self._datalength = self._datalength + 1 - self._form_length_pos = self._file.tell() + try: + self._form_length_pos = self._file.tell() + except (AttributeError, IOError): + self._form_length_pos = None commlength = self._write_form_length(self._datalength) if self._aifc: self._file.write('AIFC') @@ -864,7 +880,8 @@ def _write_header(self, initlength): self._file.write('COMM') _write_ulong(self._file, commlength) _write_short(self._file, self._nchannels) - self._nframes_pos = self._file.tell() + if self._form_length_pos is not None: + self._nframes_pos = self._file.tell() _write_ulong(self._file, self._nframes) if self._comptype in ('ULAW', 'ulaw', 'ALAW', 'alaw', 'G722'): _write_short(self._file, 8) @@ -875,7 +892,8 @@ def _write_header(self, initlength): self._file.write(self._comptype) _write_string(self._file, self._compname) self._file.write('SSND') - self._ssnd_length_pos = self._file.tell() + if self._form_length_pos is not None: + self._ssnd_length_pos = self._file.tell() _write_ulong(self._file, self._datalength + 8) _write_ulong(self._file, 0) _write_ulong(self._file, 0) diff --git a/PythonLib/full/argparse.py b/PythonLib/full/argparse.py index 30bae578..1b233b85 100644 --- a/PythonLib/full/argparse.py +++ b/PythonLib/full/argparse.py @@ -168,6 +168,8 @@ def __init__(self, self._prog = prog self._indent_increment = indent_increment self._max_help_position = max_help_position + self._max_help_position = min(max_help_position, + max(width - 20, indent_increment * 2)) self._width = width self._current_indent = 0 @@ -339,7 +341,7 @@ def get_lines(parts, indent, prefix=None): else: line_len = len(indent) - 1 for part in parts: - if line_len + 1 + len(part) > text_width: + if line_len + 1 + len(part) > text_width and line: lines.append(indent + ' '.join(line)) line = [] line_len = len(indent) - 1 @@ -478,7 +480,7 @@ def _format_actions_usage(self, actions, groups): def _format_text(self, text): if '%(prog)' in text: text = text % dict(prog=self._prog) - text_width = self._width - self._current_indent + text_width = max(self._width - self._current_indent, 11) indent = ' ' * self._current_indent return self._fill_text(text, text_width, indent) + '\n\n' @@ -486,7 +488,7 @@ def _format_action(self, action): # determine the required width and the entry label help_position = min(self._action_max_length + 2, self._max_help_position) - help_width = self._width - help_position + help_width = max(self._width - help_position, 11) action_width = help_position - self._current_indent - 2 action_header = self._format_action_invocation(action) @@ -1087,7 +1089,14 @@ def __call__(self, parser, namespace, values, option_string=None): # parse all the remaining options into the namespace # store any unrecognized options on the object, so that the top # level parser can decide what to do with them - namespace, arg_strings = parser.parse_known_args(arg_strings, namespace) + + # In case this subparser defines new defaults, we parse them + # in a new namespace object and then update the original + # namespace for the relevant parts. + subnamespace, arg_strings = parser.parse_known_args(arg_strings, None) + for key, value in vars(subnamespace).items(): + setattr(namespace, key, value) + if arg_strings: vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, []) getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings) @@ -1155,9 +1164,13 @@ def __init__(self, **kwargs): __hash__ = None def __eq__(self, other): + if not isinstance(other, Namespace): + return NotImplemented return vars(self) == vars(other) def __ne__(self, other): + if not isinstance(other, Namespace): + return NotImplemented return not (self == other) def __contains__(self, key): diff --git a/PythonLib/full/asynchat.py b/PythonLib/full/asynchat.py index 911833d5..392ee61a 100644 --- a/PythonLib/full/asynchat.py +++ b/PythonLib/full/asynchat.py @@ -46,12 +46,17 @@ you - by calling your self.found_terminator() method. """ -import socket import asyncore +import errno +import socket from collections import deque from sys import py3kwarning from warnings import filterwarnings, catch_warnings +_BLOCKING_IO_ERRORS = (errno.EAGAIN, errno.EALREADY, errno.EINPROGRESS, + errno.EWOULDBLOCK) + + class async_chat (asyncore.dispatcher): """This is an abstract class. You must derive from this class, and add the two methods collect_incoming_data() and found_terminator()""" @@ -109,6 +114,8 @@ def handle_read (self): try: data = self.recv (self.ac_in_buffer_size) except socket.error, why: + if why.args[0] in _BLOCKING_IO_ERRORS: + return self.handle_error() return @@ -126,7 +133,7 @@ def handle_read (self): # no terminator, collect it all self.collect_incoming_data (self.ac_in_buffer) self.ac_in_buffer = '' - elif isinstance(terminator, int) or isinstance(terminator, long): + elif isinstance(terminator, (int, long)): # numeric terminator n = terminator if lb < n: diff --git a/PythonLib/full/asyncore.py b/PythonLib/full/asyncore.py index 29099bdf..105982f7 100644 --- a/PythonLib/full/asyncore.py +++ b/PythonLib/full/asyncore.py @@ -633,7 +633,11 @@ def getsockopt(self, level, optname, buflen=None): write = send def close(self): - os.close(self.fd) + if self.fd < 0: + return + fd = self.fd + self.fd = -1 + os.close(fd) def fileno(self): return self.fd diff --git a/PythonLib/full/base64.py b/PythonLib/full/base64.py index 85204dd0..38bc61ee 100644 --- a/PythonLib/full/base64.py +++ b/PythonLib/full/base64.py @@ -7,6 +7,7 @@ import re import struct +import string import binascii @@ -52,7 +53,7 @@ def b64encode(s, altchars=None): # Strip off the trailing newline encoded = binascii.b2a_base64(s)[:-1] if altchars is not None: - return _translate(encoded, {'+': altchars[0], '/': altchars[1]}) + return encoded.translate(string.maketrans(b'+/', altchars[:2])) return encoded @@ -63,12 +64,13 @@ def b64decode(s, altchars=None): length 2 (additional characters are ignored) which specifies the alternative alphabet used instead of the '+' and '/' characters. - The decoded string is returned. A TypeError is raised if s were - incorrectly padded or if there are non-alphabet characters present in the - string. + The decoded string is returned. A TypeError is raised if s is + incorrectly padded. Characters that are neither in the normal base-64 + alphabet nor the alternative alphabet are discarded prior to the padding + check. """ if altchars is not None: - s = _translate(s, {altchars[0]: '+', altchars[1]: '/'}) + s = s.translate(string.maketrans(altchars[:2], '+/')) try: return binascii.a2b_base64(s) except binascii.Error, msg: @@ -86,30 +88,35 @@ def standard_b64encode(s): def standard_b64decode(s): """Decode a string encoded with the standard Base64 alphabet. - s is the string to decode. The decoded string is returned. A TypeError - is raised if the string is incorrectly padded or if there are non-alphabet - characters present in the string. + Argument s is the string to decode. The decoded string is returned. A + TypeError is raised if the string is incorrectly padded. Characters that + are not in the standard alphabet are discarded prior to the padding + check. """ return b64decode(s) +_urlsafe_encode_translation = string.maketrans(b'+/', b'-_') +_urlsafe_decode_translation = string.maketrans(b'-_', b'+/') + def urlsafe_b64encode(s): - """Encode a string using a url-safe Base64 alphabet. + """Encode a string using the URL- and filesystem-safe Base64 alphabet. - s is the string to encode. The encoded string is returned. The alphabet - uses '-' instead of '+' and '_' instead of '/'. + Argument s is the string to encode. The encoded string is returned. The + alphabet uses '-' instead of '+' and '_' instead of '/'. """ - return b64encode(s, '-_') + return b64encode(s).translate(_urlsafe_encode_translation) def urlsafe_b64decode(s): - """Decode a string encoded with the standard Base64 alphabet. + """Decode a string using the URL- and filesystem-safe Base64 alphabet. - s is the string to decode. The decoded string is returned. A TypeError - is raised if the string is incorrectly padded or if there are non-alphabet - characters present in the string. + Argument s is the string to decode. The decoded string is returned. A + TypeError is raised if the string is incorrectly padded. Characters that + are not in the URL-safe base-64 alphabet, and are not a plus '+' or slash + '/', are discarded prior to the padding check. The alphabet uses '-' instead of '+' and '_' instead of '/'. """ - return b64decode(s, '-_') + return b64decode(s.translate(_urlsafe_decode_translation)) @@ -200,7 +207,7 @@ def b32decode(s, casefold=False, map01=None): # False, or the character to map the digit 1 (one) to. It should be # either L (el) or I (eye). if map01: - s = _translate(s, {'0': 'O', '1': map01}) + s = s.translate(string.maketrans(b'01', b'O' + map01)) if casefold: s = s.upper() # Strip off pad characters from the right. We need to count the pad @@ -263,7 +270,7 @@ def b16decode(s, casefold=False): a lowercase alphabet is acceptable as input. For security purposes, the default is False. - The decoded string is returned. A TypeError is raised if s were + The decoded string is returned. A TypeError is raised if s is incorrectly padded or if there are non-alphabet characters present in the string. """ diff --git a/PythonLib/full/binhex.py b/PythonLib/full/binhex.py index 8abc9f3e..14ec2337 100644 --- a/PythonLib/full/binhex.py +++ b/PythonLib/full/binhex.py @@ -32,7 +32,8 @@ class Error(Exception): pass # States (what have we written) -[_DID_HEADER, _DID_DATA, _DID_RSRC] = range(3) +_DID_HEADER = 0 +_DID_DATA = 1 # Various constants REASONABLY_LARGE=32768 # Minimal amount we pass the rle-coder @@ -235,17 +236,22 @@ def write_rsrc(self, data): self._write(data) def close(self): - if self.state < _DID_DATA: - self.close_data() - if self.state != _DID_DATA: - raise Error, 'Close at the wrong time' - if self.rlen != 0: - raise Error, \ - "Incorrect resource-datasize, diff=%r" % (self.rlen,) - self._writecrc() - self.ofp.close() - self.state = None - del self.ofp + if self.state is None: + return + try: + if self.state < _DID_DATA: + self.close_data() + if self.state != _DID_DATA: + raise Error, 'Close at the wrong time' + if self.rlen != 0: + raise Error, \ + "Incorrect resource-datasize, diff=%r" % (self.rlen,) + self._writecrc() + finally: + self.state = None + ofp = self.ofp + del self.ofp + ofp.close() def binhex(inp, out): """(infilename, outfilename) - Create binhex-encoded copy of a file""" @@ -463,11 +469,15 @@ def read_rsrc(self, *n): return self._read(n) def close(self): - if self.rlen: - dummy = self.read_rsrc(self.rlen) - self._checkcrc() - self.state = _DID_RSRC - self.ifp.close() + if self.state is None: + return + try: + if self.rlen: + dummy = self.read_rsrc(self.rlen) + self._checkcrc() + finally: + self.state = None + self.ifp.close() def hexbin(inp, out): """(infilename, outfilename) - Decode binhexed file""" diff --git a/PythonLib/full/bz2.pyd b/PythonLib/full/bz2.pyd index 6ae264389291b235694ee8fa1ed60f816715f2b3..8e9737d10bbc86f8e4f4c11a56ac0c96fccd5139 100644 GIT binary patch literal 71168 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

Bn+LA%s-FU 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 literal 213504 zcmeFae|S{YwLg3&Gr)iYGr&Y5Mh%*3Y@$YkHerGdB$GrSVJ5@OU?D$xi#l@Aa&@Lg zC1K)Bew=J4U`62GdI78L*V}7bY`r#U3&GF~C~XnFib5^zrR_;WZ_}D;RLXomYwa_W zNuZYYeV^z3=gpIu+2@@7W39EueqN0(Q{%XPHTt01$G#KK-=_XI|87u^@b5$XTX*-D0#s)b1D8`#mKjXSZ&!Fd$$KZ2jCmIsrYXvn z3`IF8?^>QPD2ff~-MB|7N+UT*!F~KCf0fOk8W9bDcq|K1UMj%9@~3Z(QCWh!(Tj{q zDLwvce@#Z^%_|kf^}P%w`>*A}{q>WLN?H1Iz?lUA{@UO5!8@9Rc=)TYA``(yxax2x z%j76Z)AjeQ`C{;kiZU&LyM+5%{B9p#aT(a+dYMhxRf6X^paB7!K^!#pSEeX^*WY)? zx-Wl8Q9gSW?gKZ4I{fl;@+}@K_5Y{-zo39uoc6gAnIq3<*u-$;fT{h1;O9k+MR?6V zcU>a$S=^5tutY`^!K}oLkVRCQM0J)g@j9~hl0-Dr_w#+9Ni4?wBe-AGhnt7>Kh)oL z+Kik}fm>`vKUSS*gwyQtiS=fm_KRhT;#1p4&n6PuRW*tdIbasY1Ydhxer=dHxh#4p^ilpmpo#EAmlVn_(P@mzr>B?f=X`ForsqrbgzOM%&k1@=Y;O#_ z6e?WcocgKi(~>Aub&*6xj9faOR>4Ml@-+0mQ_0bzS#V5 zr1Zbm+-$Tdp}Bz08aUoQI8i^~@unkK5-Lqfeb6d_P*u{sj56gk|R2`EU5G5l7>Q2eES6f-T65weJo3;Z z4?kKZ;*Ctmlr$VZ9C_HH^oD0Dw$P;BVf;X+9MKhRD5IfYlox>YOrTJ|pY*V%BVh&- zbA_kC=L2TXF$R_ok6qgL;gQCxkT)@9qB5qYb$Nowy+l|*{oVUXB7yoRM-C=d)%W|> z8WNdjs0FF%tX5bApg)LZOR!gcEh=iXa#sA{N{iQl3b_Nex8+f zgREbzw1}!gf4nM-I8jtveC_~=$eu8yxt9q$9mPRd?axeL3$h}ol9(Zmfs|=uNc-{7 z6@Y&);1SDZYi{l2t?8{zq<#amaeY5nODxZU9A6@;^1wQ?+}fb*>UdQiwbck&Z5-25 z;77k`F-JD$D4|)xX>oy1v>(V4jZnkO^L!#?Gyc@EJh$~yK=dRA4=|oHNny*!bRE3e z@j!0tCBkc|18+6U;tk0bxf;}MT%O}|xwQvx$RPD+cp$Fg4>G2mON?Pqfo2WEvcPzy7dWg&D(53X-GFsvY&WzoLo*j+! zW#E2EX(aTgl2%*Lid*2cWl}7LCMPmSk%XW*;?`&s6e?*MwQhP82@?){kS#SjZBf&@v>Y zOpi{G=|t!v=trveHvo$jYg*SgHb8ud{~3Ooc>w-ze<0z1QC?oI!~cJ9IZ?Bs_kC_4 z<TZ2r5)G~A{G3+>`(s}@TI*HWG zBvMt>pMKe&jMRDh$0QN@$)6>DKbDubqC2R67~Ps|pY|i-s+ug9_5vsDF6}=#0W0e3 zoB+E2ii9h0Y#h2-W9U8v5{~af&?&Hi&^<}$5+qs(nF!r_?#l`2rt9S~bgx8_^Y>vI zx~cx0DG~hnh{X4lysTyIY3=%NTvC4mRpGSzFcRg0Fc^ti@FQyS#IW{#V#S(Vm-a1A z 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

    yK^Q1uxCh2=GN)K~Ryaxk|`B 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 c: u = 1.0 - u c = 1.0 - c diff --git a/PythonLib/full/re.py b/PythonLib/full/re.py index aab5d37e..671a9040 100644 --- a/PythonLib/full/re.py +++ b/PythonLib/full/re.py @@ -104,6 +104,10 @@ import sys import sre_compile import sre_parse +try: + import _locale +except ImportError: + _locale = None # public symbols __all__ = [ "match", "search", "sub", "subn", "split", "findall", @@ -225,11 +229,16 @@ def escape(pattern): def _compile(*key): # internal: compile pattern - cachekey = (type(key[0]),) + key - p = _cache.get(cachekey) - if p is not None: - return p pattern, flags = key + bypass_cache = flags & DEBUG + if not bypass_cache: + cachekey = (type(key[0]),) + key + try: + p, loc = _cache[cachekey] + if loc is None or loc == _locale.setlocale(_locale.LC_CTYPE): + return p + except KeyError: + pass if isinstance(pattern, _pattern_type): if flags: raise ValueError('Cannot process flags argument with a compiled pattern') @@ -240,9 +249,16 @@ def _compile(*key): p = sre_compile.compile(pattern, flags) except error, v: raise error, v # invalid expression - if len(_cache) >= _MAXCACHE: - _cache.clear() - _cache[cachekey] = p + if not bypass_cache: + if len(_cache) >= _MAXCACHE: + _cache.clear() + if p.flags & LOCALE: + if not _locale: + return p + loc = _locale.setlocale(_locale.LC_CTYPE) + else: + loc = None + _cache[cachekey] = p, loc return p def _compile_repl(*key): diff --git a/PythonLib/full/rfc822.py b/PythonLib/full/rfc822.py index b65d8da0..9a5b8a23 100644 --- a/PythonLib/full/rfc822.py +++ b/PythonLib/full/rfc822.py @@ -179,6 +179,11 @@ def readheaders(self): lst.append(line) self.dict[headerseen] = line[len(headerseen)+1:].strip() continue + elif headerseen is not None: + # An empty header name. These aren't allowed in HTTP, but it's + # probably a benign mistake. Don't add the header, just keep + # going. + continue else: # It's not a header line; throw it back and stop here. if not self.dict: @@ -202,7 +207,7 @@ def isheader(self, line): data in RFC 2822-like formats with special header formats. """ i = line.find(':') - if i > 0: + if i > -1: return line[:i].lower() return None @@ -956,7 +961,7 @@ def formatdate(timeval=None): According to RFC 1123, day and month names must always be in English. If not for that, this code could use strftime(). It - can't because strftime() honors the locale and could generated + can't because strftime() honors the locale and could generate non-English names. """ if timeval is None: diff --git a/PythonLib/full/rlcompleter.py b/PythonLib/full/rlcompleter.py index 6e4bd12a..7f61c67b 100644 --- a/PythonLib/full/rlcompleter.py +++ b/PythonLib/full/rlcompleter.py @@ -102,13 +102,16 @@ def global_matches(self, text): """ import keyword matches = [] + seen = {"__builtins__"} n = len(text) for word in keyword.kwlist: if word[:n] == text: + seen.add(word) matches.append(word) - for nspace in [__builtin__.__dict__, self.namespace]: + for nspace in [self.namespace, __builtin__.__dict__]: for word, val in nspace.items(): - if word[:n] == text and word != "__builtins__": + if word[:n] == text and word not in seen: + seen.add(word) matches.append(self._callable_postfix(val, word)) return matches @@ -135,20 +138,23 @@ def attr_matches(self, text): return [] # get the content of the object, except __builtins__ - words = dir(thisobject) - if "__builtins__" in words: - words.remove("__builtins__") + words = set(dir(thisobject)) + words.discard("__builtins__") if hasattr(thisobject, '__class__'): - words.append('__class__') - words.extend(get_class_members(thisobject.__class__)) + words.add('__class__') + words.update(get_class_members(thisobject.__class__)) matches = [] n = len(attr) for word in words: - if word[:n] == attr and hasattr(thisobject, word): - val = getattr(thisobject, word) + if word[:n] == attr: + try: + val = getattr(thisobject, word) + except Exception: + continue # Exclude properties that are not set word = self._callable_postfix(val, "%s.%s" % (expr, word)) matches.append(word) + matches.sort() return matches def get_class_members(klass): diff --git a/PythonLib/full/robotparser.py b/PythonLib/full/robotparser.py index ad3be947..a7137a30 100644 --- a/PythonLib/full/robotparser.py +++ b/PythonLib/full/robotparser.py @@ -7,7 +7,8 @@ 2) PSF license for Python 2.2 The robots.txt Exclusion Protocol is implemented as specified in - http://info.webcrawler.com/mak/projects/robots/norobots-rfc.html + http://www.robotstxt.org/norobots-rfc.txt + """ import urlparse import urllib @@ -60,7 +61,7 @@ def read(self): self.errcode = opener.errcode if self.errcode in (401, 403): self.disallow_all = True - elif self.errcode >= 400: + elif self.errcode >= 400 and self.errcode < 500: self.allow_all = True elif self.errcode == 200 and lines: self.parse(lines) @@ -86,6 +87,7 @@ def parse(self, lines): linenumber = 0 entry = Entry() + self.modified() for line in lines: linenumber += 1 if not line: @@ -131,6 +133,14 @@ def can_fetch(self, useragent, url): return False if self.allow_all: return True + + # Until the robots.txt file has been read or found not + # to exist, we must assume that no url is allowable. + # This prevents false positives when a user erroneously + # calls can_fetch() before calling read(). + if not self.last_checked: + return False + # search for given user agent matches # the first match counts parsed_url = urlparse.urlparse(urllib.unquote(url)) diff --git a/PythonLib/full/runpy.py b/PythonLib/full/runpy.py index c4d7cc26..ad4d077a 100644 --- a/PythonLib/full/runpy.py +++ b/PythonLib/full/runpy.py @@ -97,27 +97,35 @@ def _get_filename(loader, mod_name): return None # Helper to get the loader, code and filename for a module -def _get_module_details(mod_name): - loader = get_loader(mod_name) - if loader is None: - raise ImportError("No module named %s" % mod_name) - if loader.is_package(mod_name): +def _get_module_details(mod_name, error=ImportError): + try: + loader = get_loader(mod_name) + if loader is None: + raise error("No module named %s" % mod_name) + ispkg = loader.is_package(mod_name) + except ImportError as e: + raise error(format(e)) + if ispkg: if mod_name == "__main__" or mod_name.endswith(".__main__"): - raise ImportError("Cannot use package as __main__ module") + raise error("Cannot use package as __main__ module") + __import__(mod_name) # Do not catch exceptions initializing package try: pkg_main_name = mod_name + ".__main__" return _get_module_details(pkg_main_name) except ImportError, e: - raise ImportError(("%s; %r is a package and cannot " + + raise error(("%s; %r is a package and cannot " + "be directly executed") %(e, mod_name)) - code = loader.get_code(mod_name) + try: + code = loader.get_code(mod_name) + except ImportError as e: + raise error(format(e)) if code is None: - raise ImportError("No code object available for %s" % mod_name) + raise error("No code object available for %s" % mod_name) filename = _get_filename(loader, mod_name) return mod_name, loader, code, filename -def _get_main_module_details(): +def _get_main_module_details(error=ImportError): # Helper that gives a nicer error message when attempting to # execute a zipfile or directory by invoking __main__.py main_name = "__main__" @@ -125,10 +133,13 @@ def _get_main_module_details(): return _get_module_details(main_name) except ImportError as exc: if main_name in str(exc): - raise ImportError("can't find %r module in %r" % + raise error("can't find %r module in %r" % (main_name, sys.path[0])) raise +class _Error(Exception): + """Error that _run_module_as_main() should report without a traceback""" + # This function is the actual implementation of the -m switch and direct # execution of zipfiles and directories and is deliberately kept private. # This avoids a repeat of the situation where run_module() no longer met the @@ -148,11 +159,12 @@ def _run_module_as_main(mod_name, alter_argv=True): """ try: if alter_argv or mod_name != "__main__": # i.e. -m switch - mod_name, loader, code, fname = _get_module_details(mod_name) + mod_name, loader, code, fname = _get_module_details( + mod_name, _Error) else: # i.e. directory or zipfile execution - mod_name, loader, code, fname = _get_main_module_details() - except ImportError as exc: - msg = "%s: %s" % (sys.executable, str(exc)) + mod_name, loader, code, fname = _get_main_module_details(_Error) + except _Error as exc: + msg = "%s: %s" % (sys.executable, exc) sys.exit(msg) pkg_name = mod_name.rpartition('.')[0] main_globals = sys.modules["__main__"].__dict__ diff --git a/PythonLib/full/select.pyd b/PythonLib/full/select.pyd index 5e4e78b9b835737cf625fd94ea72aead97b93d9a..94d7597fee293f38765b512c3ac4a61d047bf11d 100644 GIT binary patch literal 10240 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 diff --git a/PythonLib/full/shelve.py b/PythonLib/full/shelve.py index c8cba858..4f1e49dc 100644 --- a/PythonLib/full/shelve.py +++ b/PythonLib/full/shelve.py @@ -140,17 +140,21 @@ def __delitem__(self, key): pass def close(self): - self.sync() - try: - self.dict.close() - except AttributeError: - pass - # Catch errors that may happen when close is called from __del__ - # because CPython is in interpreter shutdown. + if self.dict is None: + return try: - self.dict = _ClosedDict() - except (NameError, TypeError): - self.dict = None + self.sync() + try: + self.dict.close() + except AttributeError: + pass + finally: + # Catch errors that may happen when close is called from __del__ + # because CPython is in interpreter shutdown. + try: + self.dict = _ClosedDict() + except: + self.dict = None def __del__(self): if not hasattr(self, 'writeback'): diff --git a/PythonLib/full/shlex.py b/PythonLib/full/shlex.py index e7c8accd..7bef0ddc 100644 --- a/PythonLib/full/shlex.py +++ b/PythonLib/full/shlex.py @@ -230,7 +230,7 @@ def read_token(self): if self.debug >= 2: print "shlex: I see punctuation in word state" self.state = ' ' - if self.token: + if self.token or (self.posix and quoted): break # emit current token else: continue diff --git a/PythonLib/full/shutil.py b/PythonLib/full/shutil.py index 420802fa..3462f7c5 100644 --- a/PythonLib/full/shutil.py +++ b/PythonLib/full/shutil.py @@ -12,6 +12,20 @@ import collections import errno +try: + import zlib + del zlib + _ZLIB_SUPPORTED = True +except ImportError: + _ZLIB_SUPPORTED = False + +try: + import bz2 + del bz2 + _BZ2_SUPPORTED = True +except ImportError: + _BZ2_SUPPORTED = False + try: from pwd import getpwnam except ImportError: @@ -259,7 +273,8 @@ def onerror(*args): def _basename(path): # A basename() variant which first strips the trailing slash, if present. # Thus we always get the last component of the path, even for directories. - return os.path.basename(path.rstrip(os.path.sep)) + sep = os.path.sep + (os.path.altsep or '') + return os.path.basename(path.rstrip(sep)) def move(src, dst): """Recursively move a file or directory to another location. This is @@ -350,18 +365,21 @@ def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, Returns the output filename. """ - tar_compression = {'gzip': 'gz', 'bzip2': 'bz2', None: ''} - compress_ext = {'gzip': '.gz', 'bzip2': '.bz2'} - - # flags for compression program, each element of list will be an argument - if compress is not None and compress not in compress_ext.keys(): - raise ValueError, \ - ("bad value for 'compress': must be None, 'gzip' or 'bzip2'") + if compress is None: + tar_compression = '' + elif _ZLIB_SUPPORTED and compress == 'gzip': + tar_compression = 'gz' + elif _BZ2_SUPPORTED and compress == 'bzip2': + tar_compression = 'bz2' + else: + raise ValueError("bad value for 'compress', or compression format not " + "supported : {0}".format(compress)) - archive_name = base_name + '.tar' + compress_ext.get(compress, '') + compress_ext = '.' + tar_compression if compress else '' + archive_name = base_name + '.tar' + compress_ext archive_dir = os.path.dirname(archive_name) - if not os.path.exists(archive_dir): + if archive_dir and not os.path.exists(archive_dir): if logger is not None: logger.info("creating %s", archive_dir) if not dry_run: @@ -387,7 +405,7 @@ def _set_uid_gid(tarinfo): return tarinfo if not dry_run: - tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress]) + tar = tarfile.open(archive_name, 'w|%s' % tar_compression) try: tar.add(base_dir, filter=_set_uid_gid) finally: @@ -425,7 +443,7 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): zip_filename = base_name + ".zip" archive_dir = os.path.dirname(base_name) - if not os.path.exists(archive_dir): + if archive_dir and not os.path.exists(archive_dir): if logger is not None: logger.info("creating %s", archive_dir) if not dry_run: @@ -434,6 +452,7 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): # If zipfile module is not available, try spawning an external 'zip' # command. try: + import zlib import zipfile except ImportError: zipfile = None @@ -446,26 +465,40 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): zip_filename, base_dir) if not dry_run: - zip = zipfile.ZipFile(zip_filename, "w", - compression=zipfile.ZIP_DEFLATED) - - for dirpath, dirnames, filenames in os.walk(base_dir): - for name in filenames: - path = os.path.normpath(os.path.join(dirpath, name)) - if os.path.isfile(path): - zip.write(path, path) + with zipfile.ZipFile(zip_filename, "w", + compression=zipfile.ZIP_DEFLATED) as zf: + path = os.path.normpath(base_dir) + if path != os.curdir: + zf.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) + for dirpath, dirnames, filenames in os.walk(base_dir): + for name in sorted(dirnames): + path = os.path.normpath(os.path.join(dirpath, name)) + zf.write(path, path) if logger is not None: logger.info("adding '%s'", path) - zip.close() + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zf.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) return zip_filename _ARCHIVE_FORMATS = { - 'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), - 'bztar': (_make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"), 'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"), - 'zip': (_make_zipfile, [],"ZIP file") - } + 'zip': (_make_zipfile, [], "ZIP file") +} + +if _ZLIB_SUPPORTED: + _ARCHIVE_FORMATS['gztar'] = (_make_tarball, [('compress', 'gzip')], + "gzip'ed tar-file") + +if _BZ2_SUPPORTED: + _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], + "bzip2'ed tar-file") def get_archive_formats(): """Returns a list of supported formats for archiving and unarchiving. @@ -506,8 +539,8 @@ def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, """Create an archive file (eg. zip or tar). 'base_name' is the name of the file to create, minus any format-specific - extension; 'format' is the archive format: one of "zip", "tar", "bztar" - or "gztar". + extension; 'format' is the archive format: one of "zip", "tar", "gztar", + or "bztar". Or any other registered format. 'root_dir' is a directory that will be the root directory of the archive; ie. we typically chdir into 'root_dir' before creating the diff --git a/PythonLib/full/site.py b/PythonLib/full/site.py index f1b0ae8c..3b51e81d 100644 --- a/PythonLib/full/site.py +++ b/PythonLib/full/site.py @@ -295,15 +295,6 @@ def getsitepackages(): else: sitepackages.append(prefix) sitepackages.append(os.path.join(prefix, "lib", "site-packages")) - if sys.platform == "darwin": - # for framework builds *only* we add the standard Apple - # locations. - from sysconfig import get_config_var - framework = get_config_var("PYTHONFRAMEWORK") - if framework: - sitepackages.append( - os.path.join("/Library", framework, - sys.version[:3], "site-packages")) return sitepackages def addsitepackages(known_paths): @@ -436,7 +427,7 @@ def setcopyright(): for supporting Python development. See www.python.org for more information.""") here = os.path.dirname(os.__file__) __builtin__.license = _Printer( - "license", "See http://www.python.org/%.3s/license.html" % sys.version, + "license", "See https://www.python.org/psf/license/", ["LICENSE.txt", "LICENSE"], [os.path.join(here, os.pardir), here, os.curdir]) diff --git a/PythonLib/full/smtplib.py b/PythonLib/full/smtplib.py index 7f078400..0c610654 100644 --- a/PythonLib/full/smtplib.py +++ b/PythonLib/full/smtplib.py @@ -57,6 +57,7 @@ SMTP_PORT = 25 SMTP_SSL_PORT = 465 CRLF = "\r\n" +_MAXLINE = 8192 # more than 8 times larger than RFC 821, 4.5.3 OLDSTYLE_AUTH = re.compile(r"auth=(.*)", re.I) @@ -179,10 +180,14 @@ class SSLFakeFile: def __init__(self, sslobj): self.sslobj = sslobj - def readline(self): + def readline(self, size=-1): + if size < 0: + size = None str = "" chr = None while chr != "\n": + if size is not None and len(str) >= size: + break chr = self.sslobj.read(1) if not chr: break @@ -250,6 +255,7 @@ def __init__(self, host='', port=0, local_hostname=None, if host: (code, msg) = self.connect(host, port) if code != 220: + self.close() raise SMTPConnectError(code, msg) if local_hostname is not None: self.local_hostname = local_hostname @@ -353,7 +359,7 @@ def getreply(self): self.file = self.sock.makefile('rb') while 1: try: - line = self.file.readline() + line = self.file.readline(_MAXLINE + 1) except socket.error as e: self.close() raise SMTPServerDisconnected("Connection unexpectedly closed: " @@ -363,6 +369,8 @@ def getreply(self): raise SMTPServerDisconnected("Connection unexpectedly closed") if self.debuglevel > 0: print>>stderr, 'reply:', repr(line) + if len(line) > _MAXLINE: + raise SMTPResponseException(500, "Line too long.") resp.append(line[4:].strip()) code = line[:3] # Check that the error code is syntactically correct. @@ -649,6 +657,11 @@ def starttls(self, keyfile=None, certfile=None): self.ehlo_resp = None self.esmtp_features = {} self.does_esmtp = 0 + else: + # RFC 3207: + # 501 Syntax error (no parameters allowed) + # 454 TLS not available due to temporary reason + raise SMTPResponseException(resp, reply) return (resp, reply) def sendmail(self, from_addr, to_addrs, msg, mail_options=[], @@ -743,17 +756,25 @@ def sendmail(self, from_addr, to_addrs, msg, mail_options=[], def close(self): """Close the connection to the SMTP server.""" - if self.file: - self.file.close() - self.file = None - if self.sock: - self.sock.close() - self.sock = None + try: + file = self.file + self.file = None + if file: + file.close() + finally: + sock = self.sock + self.sock = None + if sock: + sock.close() def quit(self): """Terminate the SMTP session.""" res = self.docmd("quit") + # A new EHLO is required after reconnecting with connect() + self.ehlo_resp = self.helo_resp = None + self.esmtp_features = {} + self.does_esmtp = False self.close() return res diff --git a/PythonLib/full/socket.py b/PythonLib/full/socket.py index aac04f6c..437634cc 100644 --- a/PythonLib/full/socket.py +++ b/PythonLib/full/socket.py @@ -67,7 +67,6 @@ def ssl(sock, keyfile=None, certfile=None): from _ssl import SSLError as sslerror from _ssl import \ RAND_add, \ - RAND_egd, \ RAND_status, \ SSL_ERROR_ZERO_RETURN, \ SSL_ERROR_WANT_READ, \ @@ -78,6 +77,11 @@ def ssl(sock, keyfile=None, certfile=None): SSL_ERROR_WANT_CONNECT, \ SSL_ERROR_EOF, \ SSL_ERROR_INVALID_ERROR_CODE + try: + from _ssl import RAND_egd + except ImportError: + # LibreSSL does not provide RAND_egd + pass import os, sys, warnings @@ -545,7 +549,7 @@ def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT, global default timeout setting returned by :func:`getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. + A host of '' or port 0 tells the OS to use the default. """ host, port = address diff --git a/PythonLib/full/sqlite3/dbapi2.py b/PythonLib/full/sqlite3/dbapi2.py index 00a798ba..0d4dcaf6 100644 --- a/PythonLib/full/sqlite3/dbapi2.py +++ b/PythonLib/full/sqlite3/dbapi2.py @@ -21,6 +21,7 @@ # misrepresented as being the original software. # 3. This notice may not be removed or altered from any source distribution. +import collections import datetime import time @@ -51,6 +52,7 @@ def TimestampFromTicks(ticks): sqlite_version_info = tuple([int(x) for x in sqlite_version.split(".")]) Binary = buffer +collections.Sequence.register(Row) def register_adapters_and_converters(): def adapt_date(val): diff --git a/PythonLib/full/sre_compile.py b/PythonLib/full/sre_compile.py index 471753e9..b6689fa7 100644 --- a/PythonLib/full/sre_compile.py +++ b/PythonLib/full/sre_compile.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # # Secret Labs' Regular Expression Engine # @@ -21,14 +22,45 @@ else: MAXCODE = 0xFFFFFFFFL -def _identityfunction(x): - return x - _LITERAL_CODES = set([LITERAL, NOT_LITERAL]) _REPEATING_CODES = set([REPEAT, MIN_REPEAT, MAX_REPEAT]) _SUCCESS_CODES = set([SUCCESS, FAILURE]) _ASSERT_CODES = set([ASSERT, ASSERT_NOT]) +# Sets of lowercase characters which have the same uppercase. +_equivalences = ( + # LATIN SMALL LETTER I, LATIN SMALL LETTER DOTLESS I + (0x69, 0x131), # iı + # LATIN SMALL LETTER S, LATIN SMALL LETTER LONG S + (0x73, 0x17f), # sÅ¿ + # MICRO SIGN, GREEK SMALL LETTER MU + (0xb5, 0x3bc), # µμ + # COMBINING GREEK YPOGEGRAMMENI, GREEK SMALL LETTER IOTA, GREEK PROSGEGRAMMENI + (0x345, 0x3b9, 0x1fbe), # \u0345ιι + # GREEK SMALL LETTER BETA, GREEK BETA SYMBOL + (0x3b2, 0x3d0), # Î²Ï + # GREEK SMALL LETTER EPSILON, GREEK LUNATE EPSILON SYMBOL + (0x3b5, 0x3f5), # εϵ + # GREEK SMALL LETTER THETA, GREEK THETA SYMBOL + (0x3b8, 0x3d1), # θϑ + # GREEK SMALL LETTER KAPPA, GREEK KAPPA SYMBOL + (0x3ba, 0x3f0), # κϰ + # GREEK SMALL LETTER PI, GREEK PI SYMBOL + (0x3c0, 0x3d6), # πϖ + # GREEK SMALL LETTER RHO, GREEK RHO SYMBOL + (0x3c1, 0x3f1), # Ïϱ + # GREEK SMALL LETTER FINAL SIGMA, GREEK SMALL LETTER SIGMA + (0x3c2, 0x3c3), # ςσ + # GREEK SMALL LETTER PHI, GREEK PHI SYMBOL + (0x3c6, 0x3d5), # φϕ + # LATIN SMALL LETTER S WITH DOT ABOVE, LATIN SMALL LETTER LONG S WITH DOT ABOVE + (0x1e61, 0x1e9b), # ṡẛ +) + +# Maps the lowercase code to lowercase codes which have the same uppercase. +_ignorecase_fixes = {i: tuple(j for j in t if i != j) + for t in _equivalences for i in t} + def _compile(code, pattern, flags): # internal: compile a (sub)pattern emit = code.append @@ -37,11 +69,29 @@ def _compile(code, pattern, flags): REPEATING_CODES = _REPEATING_CODES SUCCESS_CODES = _SUCCESS_CODES ASSERT_CODES = _ASSERT_CODES + if (flags & SRE_FLAG_IGNORECASE and + not (flags & SRE_FLAG_LOCALE) and + flags & SRE_FLAG_UNICODE): + fixes = _ignorecase_fixes + else: + fixes = None for op, av in pattern: if op in LITERAL_CODES: if flags & SRE_FLAG_IGNORECASE: - emit(OPCODES[OP_IGNORE[op]]) - emit(_sre.getlower(av, flags)) + lo = _sre.getlower(av, flags) + if fixes and lo in fixes: + emit(OPCODES[IN_IGNORE]) + skip = _len(code); emit(0) + if op is NOT_LITERAL: + emit(OPCODES[NEGATE]) + for k in (lo,) + fixes[lo]: + emit(OPCODES[LITERAL]) + emit(k) + emit(OPCODES[FAILURE]) + code[skip] = _len(code) - skip + else: + emit(OPCODES[OP_IGNORE[op]]) + emit(lo) else: emit(OPCODES[op]) emit(av) @@ -52,9 +102,9 @@ def fixup(literal, flags=flags): return _sre.getlower(literal, flags) else: emit(OPCODES[op]) - fixup = _identityfunction + fixup = None skip = _len(code); emit(0) - _compile_charset(av, flags, code, fixup) + _compile_charset(av, flags, code, fixup, fixes) code[skip] = _len(code) - skip elif op is ANY: if flags & SRE_FLAG_DOTALL: @@ -175,20 +225,19 @@ def fixup(literal, flags=flags): else: raise ValueError, ("unsupported operand type", op) -def _compile_charset(charset, flags, code, fixup=None): +def _compile_charset(charset, flags, code, fixup=None, fixes=None): # compile charset subprogram emit = code.append - if fixup is None: - fixup = _identityfunction - for op, av in _optimize_charset(charset, fixup): + for op, av in _optimize_charset(charset, fixup, fixes, + flags & SRE_FLAG_UNICODE): emit(OPCODES[op]) if op is NEGATE: pass elif op is LITERAL: - emit(fixup(av)) + emit(av) elif op is RANGE: - emit(fixup(av[0])) - emit(fixup(av[1])) + emit(av[0]) + emit(av[1]) elif op is CHARSET: code.extend(av) elif op is BIGCHARSET: @@ -204,152 +253,177 @@ def _compile_charset(charset, flags, code, fixup=None): raise error, "internal: unsupported set operator" emit(OPCODES[FAILURE]) -def _optimize_charset(charset, fixup): +def _optimize_charset(charset, fixup, fixes, isunicode): # internal: optimize character set out = [] - outappend = out.append - charmap = [0]*256 - try: - for op, av in charset: - if op is NEGATE: - outappend((op, av)) - elif op is LITERAL: - charmap[fixup(av)] = 1 - elif op is RANGE: - for i in range(fixup(av[0]), fixup(av[1])+1): - charmap[i] = 1 - elif op is CATEGORY: - # XXX: could append to charmap tail - return charset # cannot compress - except IndexError: - # character set contains unicode characters - return _optimize_unicode(charset, fixup) + tail = [] + charmap = bytearray(256) + for op, av in charset: + while True: + try: + if op is LITERAL: + if fixup: + i = fixup(av) + charmap[i] = 1 + if fixes and i in fixes: + for k in fixes[i]: + charmap[k] = 1 + else: + charmap[av] = 1 + elif op is RANGE: + r = range(av[0], av[1]+1) + if fixup: + r = map(fixup, r) + if fixup and fixes: + for i in r: + charmap[i] = 1 + if i in fixes: + for k in fixes[i]: + charmap[k] = 1 + else: + for i in r: + charmap[i] = 1 + elif op is NEGATE: + out.append((op, av)) + else: + tail.append((op, av)) + except IndexError: + if len(charmap) == 256: + # character set contains non-UCS1 character codes + charmap += b'\0' * 0xff00 + continue + # character set contains non-BMP character codes + if fixup and isunicode and op is RANGE: + lo, hi = av + ranges = [av] + # There are only two ranges of cased astral characters: + # 10400-1044F (Deseret) and 118A0-118DF (Warang Citi). + _fixup_range(max(0x10000, lo), min(0x11fff, hi), + ranges, fixup) + for lo, hi in ranges: + if lo == hi: + tail.append((LITERAL, hi)) + else: + tail.append((RANGE, (lo, hi))) + else: + tail.append((op, av)) + break + # compress character map - i = p = n = 0 runs = [] - runsappend = runs.append - for c in charmap: - if c: - if n == 0: - p = i - n = n + 1 - elif n: - runsappend((p, n)) - n = 0 - i = i + 1 - if n: - runsappend((p, n)) - if len(runs) <= 2: + q = 0 + while True: + p = charmap.find(b'\1', q) + if p < 0: + break + if len(runs) >= 2: + runs = None + break + q = charmap.find(b'\0', p) + if q < 0: + runs.append((p, len(charmap))) + break + runs.append((p, q)) + if runs is not None: # use literal/range - for p, n in runs: - if n == 1: - outappend((LITERAL, p)) + for p, q in runs: + if q - p == 1: + out.append((LITERAL, p)) else: - outappend((RANGE, (p, p+n-1))) - if len(out) < len(charset): + out.append((RANGE, (p, q - 1))) + out += tail + # if the case was changed or new representation is more compact + if fixup or len(out) < len(charset): return out - else: - # use bitmap + # else original character set is good enough + return charset + + # use bitmap + if len(charmap) == 256: data = _mk_bitmap(charmap) - outappend((CHARSET, data)) + out.append((CHARSET, data)) + out += tail return out - return charset -def _mk_bitmap(bits): - data = [] - dataappend = data.append - if _sre.CODESIZE == 2: - start = (1, 0) - else: - start = (1L, 0L) - m, v = start - for c in bits: - if c: - v = v + m - m = m + m - if m > MAXCODE: - dataappend(v) - m, v = start - return data - -# To represent a big charset, first a bitmap of all characters in the -# set is constructed. Then, this bitmap is sliced into chunks of 256 -# characters, duplicate chunks are eliminated, and each chunk is -# given a number. In the compiled expression, the charset is -# represented by a 32-bit word sequence, consisting of one word for -# the number of different chunks, a sequence of 256 bytes (64 words) -# of chunk numbers indexed by their original chunk position, and a -# sequence of 256-bit chunks (8 words each). - -# Compression is normally good: in a typical charset, large ranges of -# Unicode will be either completely excluded (e.g. if only cyrillic -# letters are to be matched), or completely included (e.g. if large -# subranges of Kanji match). These ranges will be represented by -# chunks of all one-bits or all zero-bits. - -# Matching can be also done efficiently: the more significant byte of -# the Unicode character is an index into the chunk number, and the -# less significant byte is a bit index in the chunk (just like the -# CHARSET matching). - -# In UCS-4 mode, the BIGCHARSET opcode still supports only subsets -# of the basic multilingual plane; an efficient representation -# for all of Unicode has not yet been developed. This means, -# in particular, that negated charsets cannot be represented as -# bigcharsets. - -def _optimize_unicode(charset, fixup): - try: - import array - except ImportError: - return charset - charmap = [0]*65536 - negate = 0 - try: - for op, av in charset: - if op is NEGATE: - negate = 1 - elif op is LITERAL: - charmap[fixup(av)] = 1 - elif op is RANGE: - for i in xrange(fixup(av[0]), fixup(av[1])+1): - charmap[i] = 1 - elif op is CATEGORY: - # XXX: could expand category - return charset # cannot compress - except IndexError: - # non-BMP characters - return charset - if negate: - if sys.maxunicode != 65535: - # XXX: negation does not work with big charsets - return charset - for i in xrange(65536): - charmap[i] = not charmap[i] + # To represent a big charset, first a bitmap of all characters in the + # set is constructed. Then, this bitmap is sliced into chunks of 256 + # characters, duplicate chunks are eliminated, and each chunk is + # given a number. In the compiled expression, the charset is + # represented by a 32-bit word sequence, consisting of one word for + # the number of different chunks, a sequence of 256 bytes (64 words) + # of chunk numbers indexed by their original chunk position, and a + # sequence of 256-bit chunks (8 words each). + + # Compression is normally good: in a typical charset, large ranges of + # Unicode will be either completely excluded (e.g. if only cyrillic + # letters are to be matched), or completely included (e.g. if large + # subranges of Kanji match). These ranges will be represented by + # chunks of all one-bits or all zero-bits. + + # Matching can be also done efficiently: the more significant byte of + # the Unicode character is an index into the chunk number, and the + # less significant byte is a bit index in the chunk (just like the + # CHARSET matching). + + # In UCS-4 mode, the BIGCHARSET opcode still supports only subsets + # of the basic multilingual plane; an efficient representation + # for all of Unicode has not yet been developed. + + charmap = bytes(charmap) # should be hashable comps = {} - mapping = [0]*256 + mapping = bytearray(256) block = 0 - data = [] - for i in xrange(256): - chunk = tuple(charmap[i*256:(i+1)*256]) - new = comps.setdefault(chunk, block) - mapping[i] = new - if new == block: - block = block + 1 - data = data + _mk_bitmap(chunk) - header = [block] + data = bytearray() + for i in range(0, 65536, 256): + chunk = charmap[i: i + 256] + if chunk in comps: + mapping[i // 256] = comps[chunk] + else: + mapping[i // 256] = comps[chunk] = block + block += 1 + data += chunk + data = _mk_bitmap(data) + data[0:0] = [block] + _bytes_to_codes(mapping) + out.append((BIGCHARSET, data)) + out += tail + return out + +def _fixup_range(lo, hi, ranges, fixup): + for i in map(fixup, range(lo, hi+1)): + for k, (lo, hi) in enumerate(ranges): + if i < lo: + if l == lo - 1: + ranges[k] = (i, hi) + else: + ranges.insert(k, (i, i)) + break + elif i > hi: + if i == hi + 1: + ranges[k] = (lo, i) + break + else: + break + else: + ranges.append((i, i)) + +_CODEBITS = _sre.CODESIZE * 8 +_BITS_TRANS = b'0' + b'1' * 255 +def _mk_bitmap(bits, _CODEBITS=_CODEBITS, _int=int): + s = bytes(bits).translate(_BITS_TRANS)[::-1] + return [_int(s[i - _CODEBITS: i], 2) + for i in range(len(s), 0, -_CODEBITS)] + +def _bytes_to_codes(b): + # Convert block indices to word array + import array if _sre.CODESIZE == 2: code = 'H' else: code = 'I' - # Convert block indices to byte array of 256 bytes - mapping = array.array('B', mapping).tostring() - # Convert byte array to word array - mapping = array.array(code, mapping) - assert mapping.itemsize == _sre.CODESIZE - header = header + mapping.tolist() - data[0:0] = header - return [(BIGCHARSET, data)] + a = array.array(code, bytes(b)) + assert a.itemsize == _sre.CODESIZE + assert len(a) * a.itemsize == len(b) + return a.tolist() def _simple(av): # check if av is a "simple" operator @@ -361,7 +435,7 @@ def _compile_info(code, pattern, flags): # this contains min/max pattern width, and an optional literal # prefix or a character map lo, hi = pattern.getwidth() - if lo == 0: + if not lo and hi: return # not worth it # look for a literal prefix prefix = [] diff --git a/PythonLib/full/sre_parse.py b/PythonLib/full/sre_parse.py index e37e2cfc..3f6ddd26 100644 --- a/PythonLib/full/sre_parse.py +++ b/PythonLib/full/sre_parse.py @@ -23,6 +23,7 @@ OCTDIGITS = set("01234567") HEXDIGITS = set("0123456789abcdefABCDEF") +ASCIILETTERS = set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") WHITESPACE = set(" \t\n\r\v\f") @@ -69,6 +70,8 @@ def __init__(self): self.open = [] self.groups = 1 self.groupdict = {} + self.lookbehind = 0 + def opengroup(self, name=None): gid = self.groups self.groups = gid + 1 @@ -94,33 +97,42 @@ def __init__(self, pattern, data=None): self.data = data self.width = None def dump(self, level=0): - nl = 1 - seqtypes = type(()), type([]) + seqtypes = (tuple, list) for op, av in self.data: - print level*" " + op,; nl = 0 - if op == "in": + print level*" " + op, + if op == IN: # member sublanguage - print; nl = 1 + print for op, a in av: print (level+1)*" " + op, a - elif op == "branch": - print; nl = 1 - i = 0 - for a in av[1]: - if i > 0: + elif op == BRANCH: + print + for i, a in enumerate(av[1]): + if i: print level*" " + "or" - a.dump(level+1); nl = 1 - i = i + 1 - elif type(av) in seqtypes: + a.dump(level+1) + elif op == GROUPREF_EXISTS: + condgroup, item_yes, item_no = av + print condgroup + item_yes.dump(level+1) + if item_no: + print level*" " + "else" + item_no.dump(level+1) + elif isinstance(av, seqtypes): + nl = 0 for a in av: if isinstance(a, SubPattern): - if not nl: print - a.dump(level+1); nl = 1 + if not nl: + print + a.dump(level+1) + nl = 1 else: - print a, ; nl = 0 + print a, + nl = 0 + if not nl: + print else: - print av, ; nl = 0 - if not nl: print + print av def __repr__(self): return repr(self.data) def __len__(self): @@ -222,7 +234,7 @@ def isname(name): return False return True -def _class_escape(source, escape): +def _class_escape(source, escape, nested): # handle escape code inside character class code = ESCAPES.get(escape) if code: @@ -249,12 +261,21 @@ def _class_escape(source, escape): elif c in DIGITS: raise error, "bogus escape: %s" % repr(escape) if len(escape) == 2: + if sys.py3kwarning and c in ASCIILETTERS: + import warnings + if c in 'Uu': + warnings.warn('bad escape %s; Unicode escapes are ' + 'supported only since Python 3.3' % escape, + FutureWarning, stacklevel=nested + 6) + else: + warnings.warnpy3k('bad escape %s' % escape, + DeprecationWarning, stacklevel=nested + 6) return LITERAL, ord(escape[1]) except ValueError: pass raise error, "bogus escape: %s" % repr(escape) -def _escape(source, escape, state): +def _escape(source, escape, state, nested): # handle escape code in expression code = CATEGORIES.get(escape) if code: @@ -290,22 +311,36 @@ def _escape(source, escape, state): if group < state.groups: if not state.checkgroup(group): raise error, "cannot refer to open group" + if state.lookbehind: + import warnings + warnings.warn('group references in lookbehind ' + 'assertions are not supported', + RuntimeWarning, stacklevel=nested + 6) return GROUPREF, group raise ValueError if len(escape) == 2: + if sys.py3kwarning and c in ASCIILETTERS: + import warnings + if c in 'Uu': + warnings.warn('bad escape %s; Unicode escapes are ' + 'supported only since Python 3.3' % escape, + FutureWarning, stacklevel=nested + 6) + else: + warnings.warnpy3k('bad escape %s' % escape, + DeprecationWarning, stacklevel=nested + 6) return LITERAL, ord(escape[1]) except ValueError: pass raise error, "bogus escape: %s" % repr(escape) -def _parse_sub(source, state, nested=1): +def _parse_sub(source, state, nested): # parse an alternation: a|b|c items = [] itemsappend = items.append sourcematch = source.match while 1: - itemsappend(_parse(source, state)) + itemsappend(_parse(source, state, nested + 1)) if sourcematch("|"): continue if not nested: @@ -357,10 +392,10 @@ def _parse_sub(source, state, nested=1): subpattern.append((BRANCH, (None, items))) return subpattern -def _parse_sub_cond(source, state, condgroup): - item_yes = _parse(source, state) +def _parse_sub_cond(source, state, condgroup, nested): + item_yes = _parse(source, state, nested + 1) if source.match("|"): - item_no = _parse(source, state) + item_no = _parse(source, state, nested + 1) if source.match("|"): raise error, "conditional backref with more than two branches" else: @@ -376,7 +411,7 @@ def _parse_sub_cond(source, state, condgroup): _LOOKBEHINDASSERTCHARS = set("=!") _REPEATCODES = set([MIN_REPEAT, MAX_REPEAT]) -def _parse(source, state): +def _parse(source, state, nested): # parse a simple pattern subpattern = SubPattern(state) @@ -427,7 +462,7 @@ def _parse(source, state): if this == "]" and set != start: break elif this and this[0] == "\\": - code1 = _class_escape(source, this) + code1 = _class_escape(source, this, nested + 1) elif this: code1 = LITERAL, ord(this) else: @@ -443,7 +478,7 @@ def _parse(source, state): break elif this: if this[0] == "\\": - code2 = _class_escape(source, this) + code2 = _class_escape(source, this, nested + 1) else: code2 = LITERAL, ord(this) if code1[0] != LITERAL or code2[0] != LITERAL: @@ -567,7 +602,13 @@ def _parse(source, state): "%r" % name) gid = state.groupdict.get(name) if gid is None: - raise error, "unknown group name" + msg = "unknown group name: {0!r}".format(name) + raise error(msg) + if state.lookbehind: + import warnings + warnings.warn('group references in lookbehind ' + 'assertions are not supported', + RuntimeWarning, stacklevel=nested + 6) subpatternappend((GROUPREF, gid)) continue else: @@ -596,7 +637,10 @@ def _parse(source, state): raise error, "syntax error" dir = -1 # lookbehind char = sourceget() - p = _parse_sub(source, state) + state.lookbehind += 1 + p = _parse_sub(source, state, nested + 1) + if dir < 0: + state.lookbehind -= 1 if not sourcematch(")"): raise error, "unbalanced parenthesis" if char == "=": @@ -620,12 +664,18 @@ def _parse(source, state): if isname(condname): condgroup = state.groupdict.get(condname) if condgroup is None: - raise error, "unknown group name" + msg = "unknown group name: {0!r}".format(condname) + raise error(msg) else: try: condgroup = int(condname) except ValueError: raise error, "bad character in group name" + if state.lookbehind: + import warnings + warnings.warn('group references in lookbehind ' + 'assertions are not supported', + RuntimeWarning, stacklevel=nested + 6) else: # flags if not source.next in FLAGS: @@ -640,9 +690,9 @@ def _parse(source, state): else: group = state.opengroup(name) if condgroup: - p = _parse_sub_cond(source, state, condgroup) + p = _parse_sub_cond(source, state, condgroup, nested + 1) else: - p = _parse_sub(source, state) + p = _parse_sub(source, state, nested + 1) if not sourcematch(")"): raise error, "unbalanced parenthesis" if group is not None: @@ -664,7 +714,7 @@ def _parse(source, state): subpattern.append((AT, AT_END)) elif this and this[0] == "\\": - code = _escape(source, this, state) + code = _escape(source, this, state, nested + 1) subpatternappend(code) else: @@ -683,6 +733,12 @@ def parse(str, flags=0, pattern=None): pattern.str = str p = _parse_sub(source, pattern, 0) + if (sys.py3kwarning and + (p.pattern.flags & SRE_FLAG_LOCALE) and + (p.pattern.flags & SRE_FLAG_UNICODE)): + import warnings + warnings.warnpy3k("LOCALE and UNICODE flags are incompatible", + DeprecationWarning, stacklevel=5) tail = source.get() if tail == ")": @@ -690,14 +746,14 @@ def parse(str, flags=0, pattern=None): elif tail: raise error, "bogus characters at end of regular expression" - if flags & SRE_FLAG_DEBUG: - p.dump() - if not (flags & SRE_FLAG_VERBOSE) and p.pattern.flags & SRE_FLAG_VERBOSE: # the VERBOSE flag was switched on inside the pattern. to be # on the safe side, we'll parse the whole thing again... return parse(str, p.pattern.flags) + if flags & SRE_FLAG_DEBUG: + p.dump() + return p def parse_template(source, pattern): @@ -746,7 +802,8 @@ def literal(literal, p=p, pappend=a): try: index = pattern.groupindex[name] except KeyError: - raise IndexError, "unknown group name" + msg = "unknown group name: {0!r}".format(name) + raise IndexError(msg) a((MARK, index)) elif c == "0": if s.next in OCTDIGITS: @@ -769,7 +826,10 @@ def literal(literal, p=p, pappend=a): try: this = makechar(ESCAPES[this][1]) except KeyError: - pass + if sys.py3kwarning and c in ASCIILETTERS: + import warnings + warnings.warnpy3k('bad escape %s' % this, + DeprecationWarning, stacklevel=4) literal(this) else: literal(this) diff --git a/PythonLib/full/ssl.py b/PythonLib/full/ssl.py index 329b9d10..f28c8638 100644 --- a/PythonLib/full/ssl.py +++ b/PythonLib/full/ssl.py @@ -1,8 +1,7 @@ # Wrapper module for _ssl, providing some additional facilities # implemented in Python. Written by Bill Janssen. -"""\ -This module provides some more Pythonic support for SSL. +"""This module provides some more Pythonic support for SSL. Object types: @@ -52,62 +51,521 @@ PROTOCOL_SSLv2 PROTOCOL_SSLv3 PROTOCOL_SSLv23 +PROTOCOL_TLS PROTOCOL_TLSv1 +PROTOCOL_TLSv1_1 +PROTOCOL_TLSv1_2 + +The following constants identify various SSL alert message descriptions as per +http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6 + +ALERT_DESCRIPTION_CLOSE_NOTIFY +ALERT_DESCRIPTION_UNEXPECTED_MESSAGE +ALERT_DESCRIPTION_BAD_RECORD_MAC +ALERT_DESCRIPTION_RECORD_OVERFLOW +ALERT_DESCRIPTION_DECOMPRESSION_FAILURE +ALERT_DESCRIPTION_HANDSHAKE_FAILURE +ALERT_DESCRIPTION_BAD_CERTIFICATE +ALERT_DESCRIPTION_UNSUPPORTED_CERTIFICATE +ALERT_DESCRIPTION_CERTIFICATE_REVOKED +ALERT_DESCRIPTION_CERTIFICATE_EXPIRED +ALERT_DESCRIPTION_CERTIFICATE_UNKNOWN +ALERT_DESCRIPTION_ILLEGAL_PARAMETER +ALERT_DESCRIPTION_UNKNOWN_CA +ALERT_DESCRIPTION_ACCESS_DENIED +ALERT_DESCRIPTION_DECODE_ERROR +ALERT_DESCRIPTION_DECRYPT_ERROR +ALERT_DESCRIPTION_PROTOCOL_VERSION +ALERT_DESCRIPTION_INSUFFICIENT_SECURITY +ALERT_DESCRIPTION_INTERNAL_ERROR +ALERT_DESCRIPTION_USER_CANCELLED +ALERT_DESCRIPTION_NO_RENEGOTIATION +ALERT_DESCRIPTION_UNSUPPORTED_EXTENSION +ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE +ALERT_DESCRIPTION_UNRECOGNIZED_NAME +ALERT_DESCRIPTION_BAD_CERTIFICATE_STATUS_RESPONSE +ALERT_DESCRIPTION_BAD_CERTIFICATE_HASH_VALUE +ALERT_DESCRIPTION_UNKNOWN_PSK_IDENTITY """ import textwrap +import re +import sys +import os +from collections import namedtuple +from contextlib import closing import _ssl # if we can't import it, let the error propagate from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION -from _ssl import SSLError +from _ssl import _SSLContext +from _ssl import ( + SSLError, SSLZeroReturnError, SSLWantReadError, SSLWantWriteError, + SSLSyscallError, SSLEOFError, + ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import RAND_status, RAND_egd, RAND_add -from _ssl import \ - SSL_ERROR_ZERO_RETURN, \ - SSL_ERROR_WANT_READ, \ - SSL_ERROR_WANT_WRITE, \ - SSL_ERROR_WANT_X509_LOOKUP, \ - SSL_ERROR_SYSCALL, \ - SSL_ERROR_SSL, \ - SSL_ERROR_WANT_CONNECT, \ - SSL_ERROR_EOF, \ - SSL_ERROR_INVALID_ERROR_CODE -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import txt2obj as _txt2obj, nid2obj as _nid2obj +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 - _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd + pass + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('ALERT_DESCRIPTION_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') +_import_symbols('VERIFY_') + +from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN + +from _ssl import _OPENSSL_API_VERSION + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() + if name.startswith('PROTOCOL_') + and name != 'PROTOCOL_SSLv23'} +PROTOCOL_SSLv23 = PROTOCOL_TLS + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import socket, _fileobject, _delegate_methods, error as socket_error -from socket import getnameinfo as _getnameinfo +if sys.platform == "win32": + from _ssl import enum_certificates, enum_crls + +from socket import socket, AF_INET, SOCK_STREAM, create_connection +from socket import SOL_SOCKET, SO_TYPE import base64 # for DER-to-PEM translation import errno +import warnings + +if _ssl.HAS_TLS_UNIQUE: + CHANNEL_BINDING_TYPES = ['tls-unique'] +else: + CHANNEL_BINDING_TYPES = [] + # Disable weak or insecure ciphers by default # (OpenSSL's default setting is 'DEFAULT:!aNULL:!eNULL') -_DEFAULT_CIPHERS = 'DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2' +# Enable a better set of ciphers by default +# This list has been explicitly chosen to: +# * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE) +# * Prefer ECDHE over DHE for better performance +# * Prefer AEAD over CBC for better performance and security +# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI +# (ChaCha20 needs OpenSSL 1.1.0 or patched 1.0.2) +# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better +# performance and security +# * Then Use HIGH cipher suites as a fallback +# * Disable NULL authentication, NULL encryption, 3DES and MD5 MACs +# for security reasons +_DEFAULT_CIPHERS = ( + 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:' + 'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:' + '!aNULL:!eNULL:!MD5:!3DES' + ) + +# Restricted and more secure ciphers for the server side +# This list has been explicitly chosen to: +# * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE) +# * Prefer ECDHE over DHE for better performance +# * Prefer AEAD over CBC for better performance and security +# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI +# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better +# performance and security +# * Then Use HIGH cipher suites as a fallback +# * Disable NULL authentication, NULL encryption, MD5 MACs, DSS, RC4, and +# 3DES for security reasons +_RESTRICTED_SERVER_CIPHERS = ( + 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:' + 'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:' + '!aNULL:!eNULL:!MD5:!DSS:!RC4:!3DES' +) + + +class CertificateError(ValueError): + pass + + +def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + pieces = dn.split(r'.') + leftmost = pieces[0] + remainder = pieces[1:] + + wildcards = leftmost.count('*') + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survery of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn)) + + # speed up common case w/o wildcards + if not wildcards: + return dn.lower() == hostname.lower() + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append('[^.]+') + elif leftmost.startswith('xn--') or hostname.startswith('xn--'): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) + return pat.match(hostname) + + +def match_hostname(cert, hostname): + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError("empty or no certificate, match_hostname needs a " + "SSL socket or SSL context with either " + "CERT_OPTIONAL or CERT_REQUIRED") + dnsnames = [] + san = cert.get('subjectAltName', ()) + for key, value in san: + if key == 'DNS': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if not dnsnames: + # The subject is only checked when there is no dNSName entry + # in subjectAltName + for sub in cert.get('subject', ()): + for key, value in sub: + # XXX according to RFC 2818, the most specific Common Name + # must be used. + if key == 'commonName': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if len(dnsnames) > 1: + raise CertificateError("hostname %r " + "doesn't match either of %s" + % (hostname, ', '.join(map(repr, dnsnames)))) + elif len(dnsnames) == 1: + raise CertificateError("hostname %r " + "doesn't match %r" + % (hostname, dnsnames[0])) + else: + raise CertificateError("no appropriate commonName or " + "subjectAltName fields were found") + + +DefaultVerifyPaths = namedtuple("DefaultVerifyPaths", + "cafile capath openssl_cafile_env openssl_cafile openssl_capath_env " + "openssl_capath") + +def get_default_verify_paths(): + """Return paths to default cafile and capath. + """ + parts = _ssl.get_default_verify_paths() + + # environment vars shadow paths + cafile = os.environ.get(parts[0], parts[1]) + capath = os.environ.get(parts[2], parts[3]) + + return DefaultVerifyPaths(cafile if os.path.isfile(cafile) else None, + capath if os.path.isdir(capath) else None, + *parts) + + +class _ASN1Object(namedtuple("_ASN1Object", "nid shortname longname oid")): + """ASN.1 object identifier lookup + """ + __slots__ = () + + def __new__(cls, oid): + return super(_ASN1Object, cls).__new__(cls, *_txt2obj(oid, name=False)) + + @classmethod + def fromnid(cls, nid): + """Create _ASN1Object from OpenSSL numeric ID + """ + return super(_ASN1Object, cls).__new__(cls, *_nid2obj(nid)) + + @classmethod + def fromname(cls, name): + """Create _ASN1Object from short name, long name or OID + """ + return super(_ASN1Object, cls).__new__(cls, *_txt2obj(name, name=True)) + + +class Purpose(_ASN1Object): + """SSLContext purpose flags with X509v3 Extended Key Usage objects + """ + +Purpose.SERVER_AUTH = Purpose('1.3.6.1.5.5.7.3.1') +Purpose.CLIENT_AUTH = Purpose('1.3.6.1.5.5.7.3.2') + + +class SSLContext(_SSLContext): + """An SSLContext holds various SSL-related configuration options and + data, such as certificates and possibly a private key.""" + + __slots__ = ('protocol', '__weakref__') + _windows_cert_stores = ("CA", "ROOT") + + def __new__(cls, protocol, *args, **kwargs): + self = _SSLContext.__new__(cls, protocol) + if protocol != _SSLv2_IF_EXISTS: + self.set_ciphers(_DEFAULT_CIPHERS) + return self + + def __init__(self, protocol): + self.protocol = protocol + + def wrap_socket(self, sock, server_side=False, + do_handshake_on_connect=True, + suppress_ragged_eofs=True, + server_hostname=None): + return SSLSocket(sock=sock, server_side=server_side, + do_handshake_on_connect=do_handshake_on_connect, + suppress_ragged_eofs=suppress_ragged_eofs, + server_hostname=server_hostname, + _context=self) + + def set_npn_protocols(self, npn_protocols): + protos = bytearray() + for protocol in npn_protocols: + b = protocol.encode('ascii') + if len(b) == 0 or len(b) > 255: + raise SSLError('NPN protocols must be 1 to 255 in length') + protos.append(len(b)) + protos.extend(b) + + self._set_npn_protocols(protos) + + def set_alpn_protocols(self, alpn_protocols): + protos = bytearray() + for protocol in alpn_protocols: + b = protocol.encode('ascii') + if len(b) == 0 or len(b) > 255: + raise SSLError('ALPN protocols must be 1 to 255 in length') + protos.append(len(b)) + protos.extend(b) + + self._set_alpn_protocols(protos) + + def _load_windows_store_certs(self, storename, purpose): + certs = bytearray() + try: + for cert, encoding, trust in enum_certificates(storename): + # CA certs are never PKCS#7 encoded + if encoding == "x509_asn": + if trust is True or purpose.oid in trust: + certs.extend(cert) + except OSError: + warnings.warn("unable to enumerate Windows certificate store") + if certs: + self.load_verify_locations(cadata=certs) + return certs + + def load_default_certs(self, purpose=Purpose.SERVER_AUTH): + if not isinstance(purpose, _ASN1Object): + raise TypeError(purpose) + if sys.platform == "win32": + for storename in self._windows_cert_stores: + self._load_windows_store_certs(storename, purpose) + self.set_default_verify_paths() + + +def create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, + capath=None, cadata=None): + """Create a SSLContext object with default settings. + + NOTE: The protocol and settings may change anytime without prior + deprecation. The values represent a fair balance between maximum + compatibility and security. + """ + if not isinstance(purpose, _ASN1Object): + raise TypeError(purpose) + + context = SSLContext(PROTOCOL_TLS) + + # SSLv2 considered harmful. + context.options |= OP_NO_SSLv2 + + # SSLv3 has problematic security and is only required for really old + # clients such as IE6 on Windows XP + context.options |= OP_NO_SSLv3 + + # disable compression to prevent CRIME attacks (OpenSSL 1.0+) + context.options |= getattr(_ssl, "OP_NO_COMPRESSION", 0) + + if purpose == Purpose.SERVER_AUTH: + # verify certs and host name in client mode + context.verify_mode = CERT_REQUIRED + context.check_hostname = True + elif purpose == Purpose.CLIENT_AUTH: + # Prefer the server's ciphers by default so that we get stronger + # encryption + context.options |= getattr(_ssl, "OP_CIPHER_SERVER_PREFERENCE", 0) + + # Use single use keys in order to improve forward secrecy + context.options |= getattr(_ssl, "OP_SINGLE_DH_USE", 0) + context.options |= getattr(_ssl, "OP_SINGLE_ECDH_USE", 0) + + # disallow ciphers with known vulnerabilities + context.set_ciphers(_RESTRICTED_SERVER_CIPHERS) + + if cafile or capath or cadata: + context.load_verify_locations(cafile, capath, cadata) + elif context.verify_mode != CERT_NONE: + # no explicit cafile, capath or cadata but the verify mode is + # CERT_OPTIONAL or CERT_REQUIRED. Let's try to load default system + # root CA certificates for the given purpose. This may fail silently. + context.load_default_certs(purpose) + return context + +def _create_unverified_context(protocol=PROTOCOL_TLS, cert_reqs=None, + check_hostname=False, purpose=Purpose.SERVER_AUTH, + certfile=None, keyfile=None, + cafile=None, capath=None, cadata=None): + """Create a SSLContext object for Python stdlib modules + + All Python stdlib modules shall use this function to create SSLContext + objects in order to keep common settings in one place. The configuration + is less restrict than create_default_context()'s to increase backward + compatibility. + """ + if not isinstance(purpose, _ASN1Object): + raise TypeError(purpose) + + context = SSLContext(protocol) + # SSLv2 considered harmful. + context.options |= OP_NO_SSLv2 + # SSLv3 has problematic security and is only required for really old + # clients such as IE6 on Windows XP + context.options |= OP_NO_SSLv3 + + if cert_reqs is not None: + context.verify_mode = cert_reqs + context.check_hostname = check_hostname + + if keyfile and not certfile: + raise ValueError("certfile must be specified") + if certfile or keyfile: + context.load_cert_chain(certfile, keyfile) + + # load CA root certs + if cafile or capath or cadata: + context.load_verify_locations(cafile, capath, cadata) + elif context.verify_mode != CERT_NONE: + # no explicit cafile, capath or cadata but the verify mode is + # CERT_OPTIONAL or CERT_REQUIRED. Let's try to load default system + # root CA certificates for the given purpose. This may fail silently. + context.load_default_certs(purpose) + + return context + +# Backwards compatibility alias, even though it's not a public name. +_create_stdlib_context = _create_unverified_context + +# PEP 493: Verify HTTPS by default, but allow envvar to override that +_https_verify_envvar = 'PYTHONHTTPSVERIFY' + +def _get_https_context_factory(): + if not sys.flags.ignore_environment: + config_setting = os.environ.get(_https_verify_envvar) + if config_setting == '0': + return _create_unverified_context + return create_default_context + +_create_default_https_context = _get_https_context_factory() + +# PEP 493: "private" API to configure HTTPS defaults without monkeypatching +def _https_verify_certificates(enable=True): + """Verify server HTTPS certificates by default?""" + global _create_default_https_context + if enable: + _create_default_https_context = create_default_context + else: + _create_default_https_context = _create_unverified_context class SSLSocket(socket): - """This class implements a subtype of socket.socket that wraps the underlying OS socket in an SSL context when necessary, and provides read and write methods over that channel.""" - def __init__(self, sock, keyfile=None, certfile=None, + def __init__(self, sock=None, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, - ssl_version=PROTOCOL_SSLv23, ca_certs=None, + ssl_version=PROTOCOL_TLS, ca_certs=None, do_handshake_on_connect=True, - suppress_ragged_eofs=True, ciphers=None): + family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None, + suppress_ragged_eofs=True, npn_protocols=None, ciphers=None, + server_hostname=None, + _context=None): + + self._makefile_refs = 0 + if _context: + self._context = _context + else: + if server_side and not certfile: + raise ValueError("certfile must be specified for server-side " + "operations") + if keyfile and not certfile: + raise ValueError("certfile must be specified") + if certfile and not keyfile: + keyfile = certfile + self._context = SSLContext(ssl_version) + self._context.verify_mode = cert_reqs + if ca_certs: + self._context.load_verify_locations(ca_certs) + if certfile: + self._context.load_cert_chain(certfile, keyfile) + if npn_protocols: + self._context.set_npn_protocols(npn_protocols) + if ciphers: + self._context.set_ciphers(ciphers) + self.keyfile = keyfile + self.certfile = certfile + self.cert_reqs = cert_reqs + self.ssl_version = ssl_version + self.ca_certs = ca_certs + self.ciphers = ciphers + # Can't use sock.type as other flags (such as SOCK_NONBLOCK) get + # mixed in. + if sock.getsockopt(SOL_SOCKET, SO_TYPE) != SOCK_STREAM: + raise NotImplementedError("only stream sockets are supported") socket.__init__(self, _sock=sock._sock) # The initializer for socket overrides the methods send(), recv(), etc. # in the instancce, which we don't need -- but we want to provide the @@ -117,98 +575,162 @@ def __init__(self, sock, keyfile=None, certfile=None, delattr(self, attr) except AttributeError: pass + if server_side and server_hostname: + raise ValueError("server_hostname can only be specified " + "in client mode") + if self._context.check_hostname and not server_hostname: + raise ValueError("check_hostname requires server_hostname") + self.server_side = server_side + self.server_hostname = server_hostname + self.do_handshake_on_connect = do_handshake_on_connect + self.suppress_ragged_eofs = suppress_ragged_eofs - if ciphers is None and ssl_version != _SSLv2_IF_EXISTS: - ciphers = _DEFAULT_CIPHERS - - if certfile and not keyfile: - keyfile = certfile - # see if it's connected + # See if we are connected try: - socket.getpeername(self) - except socket_error, e: + self.getpeername() + except socket_error as e: if e.errno != errno.ENOTCONN: raise - # no, no connection yet - self._connected = False - self._sslobj = None + connected = False else: - # yes, create the SSL object - self._connected = True - self._sslobj = _ssl.sslwrap(self._sock, server_side, - keyfile, certfile, - cert_reqs, ssl_version, ca_certs, - ciphers) - if do_handshake_on_connect: - self.do_handshake() - self.keyfile = keyfile - self.certfile = certfile - self.cert_reqs = cert_reqs - self.ssl_version = ssl_version - self.ca_certs = ca_certs - self.ciphers = ciphers - self.do_handshake_on_connect = do_handshake_on_connect - self.suppress_ragged_eofs = suppress_ragged_eofs - self._makefile_refs = 0 + connected = True - def read(self, len=1024): + self._closed = False + self._sslobj = None + self._connected = connected + if connected: + # create the SSL object + try: + self._sslobj = self._context._wrap_socket(self._sock, server_side, + server_hostname, ssl_sock=self) + if do_handshake_on_connect: + timeout = self.gettimeout() + if timeout == 0.0: + # non-blocking + raise ValueError("do_handshake_on_connect should not be specified for non-blocking sockets") + self.do_handshake() + except (OSError, ValueError): + self.close() + raise + + @property + def context(self): + return self._context + + @context.setter + def context(self, ctx): + self._context = ctx + self._sslobj.context = ctx + + def dup(self): + raise NotImplemented("Can't dup() %s instances" % + self.__class__.__name__) + + def _checkClosed(self, msg=None): + # raise an exception here if you wish to check for spurious closes + pass + + def _check_connected(self): + if not self._connected: + # getpeername() will raise ENOTCONN if the socket is really + # not connected; note that we can be connected even without + # _connected being set, e.g. if connect() first returned + # EAGAIN. + self.getpeername() + + def read(self, len=1024, buffer=None): """Read up to LEN bytes and return them. Return zero-length string on EOF.""" + self._checkClosed() + if not self._sslobj: + raise ValueError("Read on closed or unwrapped SSL socket.") try: - return self._sslobj.read(len) - except SSLError, x: + if buffer is not None: + v = self._sslobj.read(len, buffer) + else: + v = self._sslobj.read(len) + return v + except SSLError as x: if x.args[0] == SSL_ERROR_EOF and self.suppress_ragged_eofs: - return '' + if buffer is not None: + return 0 + else: + return b'' else: raise def write(self, data): - """Write DATA to the underlying SSL channel. Returns number of bytes of DATA actually transmitted.""" + self._checkClosed() + if not self._sslobj: + raise ValueError("Write on closed or unwrapped SSL socket.") return self._sslobj.write(data) def getpeercert(self, binary_form=False): - """Returns a formatted version of the data in the certificate provided by the other end of the SSL channel. Return None if no certificate was provided, {} if a certificate was provided, but not validated.""" + self._checkClosed() + self._check_connected() return self._sslobj.peer_certificate(binary_form) - def cipher(self): + def selected_npn_protocol(self): + self._checkClosed() + if not self._sslobj or not _ssl.HAS_NPN: + return None + else: + return self._sslobj.selected_npn_protocol() + def selected_alpn_protocol(self): + self._checkClosed() + if not self._sslobj or not _ssl.HAS_ALPN: + return None + else: + return self._sslobj.selected_alpn_protocol() + + def cipher(self): + self._checkClosed() if not self._sslobj: return None else: return self._sslobj.cipher() + def compression(self): + self._checkClosed() + if not self._sslobj: + return None + else: + return self._sslobj.compression() + def send(self, data, flags=0): + self._checkClosed() if self._sslobj: if flags != 0: raise ValueError( "non-zero flags not allowed in calls to send() on %s" % self.__class__) - while True: - try: - v = self._sslobj.write(data) - except SSLError, x: - if x.args[0] == SSL_ERROR_WANT_READ: - return 0 - elif x.args[0] == SSL_ERROR_WANT_WRITE: - return 0 - else: - raise + try: + v = self._sslobj.write(data) + except SSLError as x: + if x.args[0] == SSL_ERROR_WANT_READ: + return 0 + elif x.args[0] == SSL_ERROR_WANT_WRITE: + return 0 else: - return v + raise + else: + return v else: return self._sock.send(data, flags) def sendto(self, data, flags_or_addr, addr=None): + self._checkClosed() if self._sslobj: raise ValueError("sendto not allowed on instances of %s" % self.__class__) @@ -217,7 +739,9 @@ def sendto(self, data, flags_or_addr, addr=None): else: return self._sock.sendto(data, flags_or_addr, addr) + def sendall(self, data, flags=0): + self._checkClosed() if self._sslobj: if flags != 0: raise ValueError( @@ -233,6 +757,7 @@ def sendall(self, data, flags=0): return socket.sendall(self, data, flags) def recv(self, buflen=1024, flags=0): + self._checkClosed() if self._sslobj: if flags != 0: raise ValueError( @@ -243,6 +768,7 @@ def recv(self, buflen=1024, flags=0): return self._sock.recv(buflen, flags) def recv_into(self, buffer, nbytes=None, flags=0): + self._checkClosed() if buffer and (nbytes is None): nbytes = len(buffer) elif nbytes is None: @@ -252,14 +778,12 @@ def recv_into(self, buffer, nbytes=None, flags=0): raise ValueError( "non-zero flags not allowed in calls to recv_into() on %s" % self.__class__) - tmp_buffer = self.read(nbytes) - v = len(tmp_buffer) - buffer[:v] = tmp_buffer - return v + return self.read(nbytes, buffer) else: return self._sock.recv_into(buffer, nbytes, flags) def recvfrom(self, buflen=1024, flags=0): + self._checkClosed() if self._sslobj: raise ValueError("recvfrom not allowed on instances of %s" % self.__class__) @@ -267,27 +791,23 @@ def recvfrom(self, buflen=1024, flags=0): return self._sock.recvfrom(buflen, flags) def recvfrom_into(self, buffer, nbytes=None, flags=0): + self._checkClosed() if self._sslobj: raise ValueError("recvfrom_into not allowed on instances of %s" % self.__class__) else: return self._sock.recvfrom_into(buffer, nbytes, flags) + def pending(self): + self._checkClosed() if self._sslobj: return self._sslobj.pending() else: return 0 - def unwrap(self): - if self._sslobj: - s = self._sslobj.shutdown() - self._sslobj = None - return s - else: - raise ValueError("No SSL wrapper around " + str(self)) - def shutdown(self, how): + self._checkClosed() self._sslobj = None socket.shutdown(self, how) @@ -298,32 +818,55 @@ def close(self): else: self._makefile_refs -= 1 - def do_handshake(self): - - """Perform a TLS/SSL handshake.""" + def unwrap(self): + if self._sslobj: + s = self._sslobj.shutdown() + self._sslobj = None + return s + else: + raise ValueError("No SSL wrapper around " + str(self)) - self._sslobj.do_handshake() + def _real_close(self): + self._sslobj = None + socket._real_close(self) - def _real_connect(self, addr, return_errno): + def do_handshake(self, block=False): + """Perform a TLS/SSL handshake.""" + self._check_connected() + timeout = self.gettimeout() + try: + if timeout == 0.0 and block: + self.settimeout(None) + self._sslobj.do_handshake() + finally: + self.settimeout(timeout) + + if self.context.check_hostname: + if not self.server_hostname: + raise ValueError("check_hostname needs server_hostname " + "argument") + match_hostname(self.getpeercert(), self.server_hostname) + + def _real_connect(self, addr, connect_ex): + if self.server_side: + raise ValueError("can't connect in server-side mode") # Here we assume that the socket is client-side, and not # connected at the time of the call. We connect it, then wrap it. if self._connected: raise ValueError("attempt to connect already-connected SSLSocket!") - self._sslobj = _ssl.sslwrap(self._sock, False, self.keyfile, self.certfile, - self.cert_reqs, self.ssl_version, - self.ca_certs, self.ciphers) + self._sslobj = self.context._wrap_socket(self._sock, False, self.server_hostname, ssl_sock=self) try: - if return_errno: + if connect_ex: rc = socket.connect_ex(self, addr) else: rc = None socket.connect(self, addr) if not rc: + self._connected = True if self.do_handshake_on_connect: self.do_handshake() - self._connected = True return rc - except socket_error: + except (OSError, ValueError): self._sslobj = None raise @@ -338,27 +881,16 @@ def connect_ex(self, addr): return self._real_connect(addr, True) def accept(self): - """Accepts a new connection from a remote client, and returns a tuple containing that new connection wrapped with a server-side SSL channel, and the address of the remote client.""" newsock, addr = socket.accept(self) - try: - return (SSLSocket(newsock, - keyfile=self.keyfile, - certfile=self.certfile, - server_side=True, - cert_reqs=self.cert_reqs, - ssl_version=self.ssl_version, - ca_certs=self.ca_certs, - ciphers=self.ciphers, - do_handshake_on_connect=self.do_handshake_on_connect, - suppress_ragged_eofs=self.suppress_ragged_eofs), - addr) - except socket_error as e: - newsock.close() - raise e + newsock = self.context.wrap_socket(newsock, + do_handshake_on_connect=self.do_handshake_on_connect, + suppress_ragged_eofs=self.suppress_ragged_eofs, + server_side=True) + return newsock, addr def makefile(self, mode='r', bufsize=-1): @@ -371,54 +903,90 @@ def makefile(self, mode='r', bufsize=-1): # the file-like object. return _fileobject(self, mode, bufsize, close=True) + def get_channel_binding(self, cb_type="tls-unique"): + """Get channel binding data for current connection. Raise ValueError + if the requested `cb_type` is not supported. Return bytes of the data + or None if the data is not available (e.g. before the handshake). + """ + if cb_type not in CHANNEL_BINDING_TYPES: + raise ValueError("Unsupported channel binding type") + if cb_type != "tls-unique": + raise NotImplementedError( + "{0} channel binding type not implemented" + .format(cb_type)) + if self._sslobj is None: + return None + return self._sslobj.tls_unique_cb() + + def version(self): + """ + Return a string identifying the protocol version used by the + current SSL channel, or None if there is no established channel. + """ + if self._sslobj is None: + return None + return self._sslobj.version() def wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, - ssl_version=PROTOCOL_SSLv23, ca_certs=None, + ssl_version=PROTOCOL_TLS, ca_certs=None, do_handshake_on_connect=True, - suppress_ragged_eofs=True, ciphers=None): + suppress_ragged_eofs=True, + ciphers=None): - return SSLSocket(sock, keyfile=keyfile, certfile=certfile, + return SSLSocket(sock=sock, keyfile=keyfile, certfile=certfile, server_side=server_side, cert_reqs=cert_reqs, ssl_version=ssl_version, ca_certs=ca_certs, do_handshake_on_connect=do_handshake_on_connect, suppress_ragged_eofs=suppress_ragged_eofs, ciphers=ciphers) - # some utility functions def cert_time_to_seconds(cert_time): - - """Takes a date-time string in standard ASN1_print form - ("MON DAY 24HOUR:MINUTE:SEC YEAR TIMEZONE") and return - a Python time value in seconds past the epoch.""" - - import time - return time.mktime(time.strptime(cert_time, "%b %d %H:%M:%S %Y GMT")) + """Return the time in seconds since the Epoch, given the timestring + representing the "notBefore" or "notAfter" date from a certificate + in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C locale). + + "notBefore" or "notAfter" dates must use UTC (RFC 5280). + + Month is one of: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec + UTC should be specified as GMT (see ASN1_TIME_print()) + """ + from time import strptime + from calendar import timegm + + months = ( + "Jan","Feb","Mar","Apr","May","Jun", + "Jul","Aug","Sep","Oct","Nov","Dec" + ) + time_format = ' %d %H:%M:%S %Y GMT' # NOTE: no month, fixed GMT + try: + month_number = months.index(cert_time[:3].title()) + 1 + except ValueError: + raise ValueError('time data %r does not match ' + 'format "%%b%s"' % (cert_time, time_format)) + else: + # found valid month + tt = strptime(cert_time[3:], time_format) + # return an integer, the previous mktime()-based implementation + # returned a float (fractional seconds are always zero here). + return timegm((tt[0], month_number) + tt[2:6]) PEM_HEADER = "-----BEGIN CERTIFICATE-----" PEM_FOOTER = "-----END CERTIFICATE-----" def DER_cert_to_PEM_cert(der_cert_bytes): - """Takes a certificate in binary DER format and returns the PEM version of it as a string.""" - if hasattr(base64, 'standard_b64encode'): - # preferred because older API gets line-length wrong - f = base64.standard_b64encode(der_cert_bytes) - return (PEM_HEADER + '\n' + - textwrap.fill(f, 64) + '\n' + - PEM_FOOTER + '\n') - else: - return (PEM_HEADER + '\n' + - base64.encodestring(der_cert_bytes) + - PEM_FOOTER + '\n') + f = base64.standard_b64encode(der_cert_bytes).decode('ascii') + return (PEM_HEADER + '\n' + + textwrap.fill(f, 64) + '\n' + + PEM_FOOTER + '\n') def PEM_cert_to_DER_cert(pem_cert_string): - """Takes a certificate in ASCII PEM format and returns the DER-encoded version of it as a byte sequence""" @@ -429,25 +997,25 @@ def PEM_cert_to_DER_cert(pem_cert_string): raise ValueError("Invalid PEM encoding; must end with %s" % PEM_FOOTER) d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] - return base64.decodestring(d) - -def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None): + return base64.decodestring(d.encode('ASCII', 'strict')) +def get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None): """Retrieve the certificate from the server at the specified address, and return it as a PEM-encoded string. If 'ca_certs' is specified, validate the server cert against it. If 'ssl_version' is specified, use it in the connection attempt.""" host, port = addr - if (ca_certs is not None): + if ca_certs is not None: cert_reqs = CERT_REQUIRED else: cert_reqs = CERT_NONE - s = wrap_socket(socket(), ssl_version=ssl_version, - cert_reqs=cert_reqs, ca_certs=ca_certs) - s.connect(addr) - dercert = s.getpeercert(True) - s.close() + context = _create_stdlib_context(ssl_version, + cert_reqs=cert_reqs, + cafile=ca_certs) + with closing(create_connection(addr)) as sock: + with closing(context.wrap_socket(sock)) as sslsock: + dercert = sslsock.getpeercert(True) return DER_cert_to_PEM_cert(dercert) def get_protocol_name(protocol_code): @@ -457,16 +1025,16 @@ def get_protocol_name(protocol_code): # a replacement for the old socket.ssl function def sslwrap_simple(sock, keyfile=None, certfile=None): - """A replacement for the old socket.ssl function. Designed for compability with Python 2.5 and earlier. Will disappear in Python 3.0.""" - if hasattr(sock, "_sock"): sock = sock._sock - ssl_sock = _ssl.sslwrap(sock, 0, keyfile, certfile, CERT_NONE, - PROTOCOL_SSLv23, None) + ctx = SSLContext(PROTOCOL_SSLv23) + if keyfile or certfile: + ctx.load_cert_chain(certfile, keyfile) + ssl_sock = ctx._wrap_socket(sock, server_side=False) try: sock.getpeername() except socket_error: diff --git a/PythonLib/full/string.py b/PythonLib/full/string.py index 97278034..23608b4a 100644 --- a/PythonLib/full/string.py +++ b/PythonLib/full/string.py @@ -145,7 +145,11 @@ def _invalid(self, mo): raise ValueError('Invalid placeholder in string: line %d, col %d' % (lineno, colno)) - def substitute(self, *args, **kws): + def substitute(*args, **kws): + if not args: + raise TypeError("descriptor 'substitute' of 'Template' object " + "needs an argument") + self, args = args[0], args[1:] # allow the "self" keyword be passed if len(args) > 1: raise TypeError('Too many positional arguments') if not args: @@ -171,7 +175,11 @@ def convert(mo): self.pattern) return self.pattern.sub(convert, self.template) - def safe_substitute(self, *args, **kws): + def safe_substitute(*args, **kws): + if not args: + raise TypeError("descriptor 'safe_substitute' of 'Template' object " + "needs an argument") + self, args = args[0], args[1:] # allow the "self" keyword be passed if len(args) > 1: raise TypeError('Too many positional arguments') if not args: @@ -182,24 +190,18 @@ def safe_substitute(self, *args, **kws): mapping = args[0] # Helper function for .sub() def convert(mo): - named = mo.group('named') + named = mo.group('named') or mo.group('braced') if named is not None: try: # We use this idiom instead of str() because the latter # will fail if val is a Unicode containing non-ASCII return '%s' % (mapping[named],) except KeyError: - return self.delimiter + named - braced = mo.group('braced') - if braced is not None: - try: - return '%s' % (mapping[braced],) - except KeyError: - return self.delimiter + '{' + braced + '}' + return mo.group() if mo.group('escaped') is not None: return self.delimiter if mo.group('invalid') is not None: - return self.delimiter + return mo.group() raise ValueError('Unrecognized named group in pattern', self.pattern) return self.pattern.sub(convert, self.template) @@ -541,7 +543,19 @@ def replace(s, old, new, maxreplace=-1): # The field name parser is implemented in str._formatter_field_name_split class Formatter(object): - def format(self, format_string, *args, **kwargs): + def format(*args, **kwargs): + if not args: + raise TypeError("descriptor 'format' of 'Formatter' object " + "needs an argument") + self, args = args[0], args[1:] # allow the "self" keyword be passed + try: + format_string, args = args[0], args[1:] # allow the "format_string" keyword be passed + except IndexError: + if 'format_string' in kwargs: + format_string = kwargs.pop('format_string') + else: + raise TypeError("format() missing 1 required positional " + "argument: 'format_string'") return self.vformat(format_string, args, kwargs) def vformat(self, format_string, args, kwargs): diff --git a/PythonLib/full/subprocess.py b/PythonLib/full/subprocess.py index 3108537c..4b41f5ec 100644 --- a/PythonLib/full/subprocess.py +++ b/PythonLib/full/subprocess.py @@ -7,383 +7,27 @@ # Licensed to PSF under a Contributor Agreement. # See http://www.python.org/2.4/license for licensing details. -r"""subprocess - Subprocesses with accessible I/O streams +r"""Subprocesses with accessible I/O streams This module allows you to spawn processes, connect to their -input/output/error pipes, and obtain their return codes. This module -intends to replace several other, older modules and functions, like: - -os.system -os.spawn* -os.popen* -popen2.* -commands.* - -Information about how the subprocess module can be used to replace these -modules and functions can be found below. - - - -Using the subprocess module -=========================== -This module defines one class called Popen: - -class Popen(args, bufsize=0, executable=None, - stdin=None, stdout=None, stderr=None, - preexec_fn=None, close_fds=False, shell=False, - cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0): - - -Arguments are: - -args should be a string, or a sequence of program arguments. The -program to execute is normally the first item in the args sequence or -string, but can be explicitly set by using the executable argument. - -On UNIX, with shell=False (default): In this case, the Popen class -uses os.execvp() to execute the child program. args should normally -be a sequence. A string will be treated as a sequence with the string -as the only item (the program to execute). - -On UNIX, with shell=True: If args is a string, it specifies the -command string to execute through the shell. If args is a sequence, -the first item specifies the command string, and any additional items -will be treated as additional shell arguments. - -On Windows: the Popen class uses CreateProcess() to execute the child -program, which operates on strings. If args is a sequence, it will be -converted to a string using the list2cmdline method. Please note that -not all MS Windows applications interpret the command line the same -way: The list2cmdline is designed for applications using the same -rules as the MS C runtime. - -bufsize, if given, has the same meaning as the corresponding argument -to the built-in open() function: 0 means unbuffered, 1 means line -buffered, any other positive value means use a buffer of -(approximately) that size. A negative bufsize means to use the system -default, which usually means fully buffered. The default value for -bufsize is 0 (unbuffered). - -stdin, stdout and stderr specify the executed programs' standard -input, standard output and standard error file handles, respectively. -Valid values are PIPE, an existing file descriptor (a positive -integer), an existing file object, and None. PIPE indicates that a -new pipe to the child should be created. With None, no redirection -will occur; the child's file handles will be inherited from the -parent. Additionally, stderr can be STDOUT, which indicates that the -stderr data from the applications should be captured into the same -file handle as for stdout. - -If preexec_fn is set to a callable object, this object will be called -in the child process just before the child is executed. - -If close_fds is true, all file descriptors except 0, 1 and 2 will be -closed before the child process is executed. - -if shell is true, the specified command will be executed through the -shell. - -If cwd is not None, the current directory will be changed to cwd -before the child is executed. - -If env is not None, it defines the environment variables for the new -process. - -If universal_newlines is true, the file objects stdout and stderr are -opened as a text files, but lines may be terminated by any of '\n', -the Unix end-of-line convention, '\r', the Macintosh convention or -'\r\n', the Windows convention. All of these external representations -are seen as '\n' by the Python program. Note: This feature is only -available if Python is built with universal newline support (the -default). Also, the newlines attribute of the file objects stdout, -stdin and stderr are not updated by the communicate() method. - -The startupinfo and creationflags, if given, will be passed to the -underlying CreateProcess() function. They can specify things such as -appearance of the main window and priority for the new process. -(Windows only) - - -This module also defines some shortcut functions: - -call(*popenargs, **kwargs): - Run command with arguments. Wait for command to complete, then - return the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - retcode = call(["ls", "-l"]) - -check_call(*popenargs, **kwargs): - Run command with arguments. Wait for command to complete. If the - exit code was zero then return, otherwise raise - CalledProcessError. The CalledProcessError object will have the - return code in the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - check_call(["ls", "-l"]) - -check_output(*popenargs, **kwargs): - Run command with arguments and return its output as a byte string. - - If the exit code was non-zero it raises a CalledProcessError. The - CalledProcessError object will have the return code in the returncode - attribute and output in the output attribute. - - The arguments are the same as for the Popen constructor. Example: - - output = check_output(["ls", "-l", "/dev/null"]) - - -Exceptions ----------- -Exceptions raised in the child process, before the new program has -started to execute, will be re-raised in the parent. Additionally, -the exception object will have one extra attribute called -'child_traceback', which is a string containing traceback information -from the child's point of view. - -The most common exception raised is OSError. This occurs, for -example, when trying to execute a non-existent file. Applications -should prepare for OSErrors. - -A ValueError will be raised if Popen is called with invalid arguments. - -check_call() and check_output() will raise CalledProcessError, if the -called process returns a non-zero return code. - - -Security --------- -Unlike some other popen functions, this implementation will never call -/bin/sh implicitly. This means that all characters, including shell -metacharacters, can safely be passed to child processes. - - -Popen objects -============= -Instances of the Popen class have the following methods: - -poll() - Check if child process has terminated. Returns returncode - attribute. - -wait() - Wait for child process to terminate. Returns returncode attribute. - -communicate(input=None) - Interact with process: Send data to stdin. Read data from stdout - and stderr, until end-of-file is reached. Wait for process to - terminate. The optional input argument should be a string to be - sent to the child process, or None, if no data should be sent to - the child. - - communicate() returns a tuple (stdout, stderr). - - Note: The data read is buffered in memory, so do not use this - method if the data size is large or unlimited. - -The following attributes are also available: - -stdin - If the stdin argument is PIPE, this attribute is a file object - that provides input to the child process. Otherwise, it is None. - -stdout - If the stdout argument is PIPE, this attribute is a file object - that provides output from the child process. Otherwise, it is - None. - -stderr - If the stderr argument is PIPE, this attribute is file object that - provides error output from the child process. Otherwise, it is - None. - -pid - The process ID of the child process. - -returncode - The child return code. A None value indicates that the process - hasn't terminated yet. A negative value -N indicates that the - child was terminated by signal N (UNIX only). - - -Replacing older functions with the subprocess module -==================================================== -In this section, "a ==> b" means that b can be used as a replacement -for a. - -Note: All functions in this section fail (more or less) silently if -the executed program cannot be found; this module raises an OSError -exception. - -In the following examples, we assume that the subprocess module is -imported with "from subprocess import *". - - -Replacing /bin/sh shell backquote ---------------------------------- -output=`mycmd myarg` -==> -output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0] - - -Replacing shell pipe line -------------------------- -output=`dmesg | grep hda` -==> -p1 = Popen(["dmesg"], stdout=PIPE) -p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) -output = p2.communicate()[0] - - -Replacing os.system() ---------------------- -sts = os.system("mycmd" + " myarg") -==> -p = Popen("mycmd" + " myarg", shell=True) -pid, sts = os.waitpid(p.pid, 0) - -Note: - -* Calling the program through the shell is usually not required. - -* It's easier to look at the returncode attribute than the - exitstatus. - -A more real-world example would look like this: - -try: - retcode = call("mycmd" + " myarg", shell=True) - if retcode < 0: - print >>sys.stderr, "Child was terminated by signal", -retcode - else: - print >>sys.stderr, "Child returned", retcode -except OSError, e: - print >>sys.stderr, "Execution failed:", e - - -Replacing os.spawn* -------------------- -P_NOWAIT example: - -pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg") -==> -pid = Popen(["/bin/mycmd", "myarg"]).pid - - -P_WAIT example: - -retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg") -==> -retcode = call(["/bin/mycmd", "myarg"]) - - -Vector example: - -os.spawnvp(os.P_NOWAIT, path, args) -==> -Popen([path] + args[1:]) - - -Environment example: - -os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env) -==> -Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"}) - - -Replacing os.popen* -------------------- -pipe = os.popen("cmd", mode='r', bufsize) -==> -pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout - -pipe = os.popen("cmd", mode='w', bufsize) -==> -pipe = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE).stdin - - -(child_stdin, child_stdout) = os.popen2("cmd", mode, bufsize) -==> -p = Popen("cmd", shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, close_fds=True) -(child_stdin, child_stdout) = (p.stdin, p.stdout) - - -(child_stdin, - child_stdout, - child_stderr) = os.popen3("cmd", mode, bufsize) -==> -p = Popen("cmd", shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True) -(child_stdin, - child_stdout, - child_stderr) = (p.stdin, p.stdout, p.stderr) - - -(child_stdin, child_stdout_and_stderr) = os.popen4("cmd", mode, - bufsize) -==> -p = Popen("cmd", shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) -(child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout) - -On Unix, os.popen2, os.popen3 and os.popen4 also accept a sequence as -the command to execute, in which case arguments will be passed -directly to the program without shell intervention. This usage can be -replaced as follows: - -(child_stdin, child_stdout) = os.popen2(["/bin/ls", "-l"], mode, - bufsize) -==> -p = Popen(["/bin/ls", "-l"], bufsize=bufsize, stdin=PIPE, stdout=PIPE) -(child_stdin, child_stdout) = (p.stdin, p.stdout) - -Return code handling translates as follows: - -pipe = os.popen("cmd", 'w') -... -rc = pipe.close() -if rc is not None and rc % 256: - print "There were some errors" -==> -process = Popen("cmd", 'w', shell=True, stdin=PIPE) -... -process.stdin.close() -if process.wait() != 0: - print "There were some errors" - - -Replacing popen2.* ------------------- -(child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode) -==> -p = Popen(["somestring"], shell=True, bufsize=bufsize - stdin=PIPE, stdout=PIPE, close_fds=True) -(child_stdout, child_stdin) = (p.stdout, p.stdin) - -On Unix, popen2 also accepts a sequence as the command to execute, in -which case arguments will be passed directly to the program without -shell intervention. This usage can be replaced as follows: - -(child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, - mode) -==> -p = Popen(["mycmd", "myarg"], bufsize=bufsize, - stdin=PIPE, stdout=PIPE, close_fds=True) -(child_stdout, child_stdin) = (p.stdout, p.stdin) - -The popen2.Popen3 and popen2.Popen4 basically works as subprocess.Popen, -except that: - -* subprocess.Popen raises an exception if the execution fails -* the capturestderr argument is replaced with the stderr argument. -* stdin=PIPE and stdout=PIPE must be specified. -* popen2 closes all filedescriptors by default, but you have to specify - close_fds=True with subprocess.Popen. +input/output/error pipes, and obtain their return codes. + +For a complete description of this module see the Python documentation. + +Main API +======== +call(...): Runs a command, waits for it to complete, then returns + the return code. +check_call(...): Same as call() but raises CalledProcessError() + if return code is not 0 +check_output(...): Same as check_call() but returns the contents of + stdout instead of a return code +Popen(...): A class for flexibly executing a command in a new process + +Constants +--------- +PIPE: Special value that indicates a pipe should be created +STDOUT: Special value that indicates that stderr should go to stdout """ import sys @@ -400,8 +44,9 @@ class Popen(args, bufsize=0, executable=None, class CalledProcessError(Exception): """This exception is raised when a process run by check_call() or check_output() returns a non-zero exit status. - The exit status will be stored in the returncode attribute; - check_output() will also store the output in the output attribute. + + Attributes: + cmd, returncode, output """ def __init__(self, returncode, cmd, output=None): self.returncode = returncode @@ -498,7 +143,6 @@ def _args_from_interpreter_flags(): 'ignore_environment': 'E', 'verbose': 'v', 'bytes_warning': 'b', - 'hash_randomization': 'R', 'py3k_warning': '3', } args = [] @@ -506,6 +150,8 @@ def _args_from_interpreter_flags(): v = getattr(sys.flags, flag) if v > 0: args.append('-' + opt * v) + if getattr(sys.flags, 'hash_randomization') != 0: + args.append('-R') for opt in sys.warnoptions: args.append('-W' + opt) return args @@ -645,6 +291,42 @@ def list2cmdline(seq): class Popen(object): + """ Execute a child program in a new process. + + For a complete description of the arguments see the Python documentation. + + Arguments: + args: A string, or a sequence of program arguments. + + bufsize: supplied as the buffering argument to the open() function when + creating the stdin/stdout/stderr pipe file objects + + executable: A replacement program to execute. + + stdin, stdout and stderr: These specify the executed programs' standard + input, standard output and standard error file handles, respectively. + + preexec_fn: (POSIX only) An object to be called in the child process + just before the child is executed. + + close_fds: Controls closing or inheriting of file descriptors. + + shell: If true, the command will be executed through the shell. + + cwd: Sets the current directory before the child is executed. + + env: Defines the environment variables for the new process. + + universal_newlines: If true, use universal line endings for file + objects stdin, stdout and stderr. + + startupinfo and creationflags (Windows only) + + Attributes: + stdin, stdout, stderr, pid, returncode + """ + _child_created = False # Set here since __del__ checks it + def __init__(self, args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, @@ -653,7 +335,6 @@ def __init__(self, args, bufsize=0, executable=None, """Create new Popen instance.""" _cleanup() - self._child_created = False if not isinstance(bufsize, (int, long)): raise TypeError("bufsize must be an integer") @@ -750,11 +431,11 @@ def _translate_newlines(self, data): return data - def __del__(self, _maxint=sys.maxint, _active=_active): + def __del__(self, _maxint=sys.maxint): # If __init__ hasn't had a chance to execute (e.g. if it # was passed an undeclared keyword argument), we don't # have a _child_created attribute at all. - if not getattr(self, '_child_created', False): + if not self._child_created: # We didn't get to successfully create a child process. return # In case the child hasn't been waited on, check if it's done. @@ -799,6 +480,8 @@ def communicate(self, input=None): def poll(self): + """Check if child process has terminated. Set and return returncode + attribute.""" return self._internal_poll() @@ -824,7 +507,7 @@ def _get_handles(self, stdin, stdout, stderr): p2cread, _ = _subprocess.CreatePipe(None, 0) elif stdin == PIPE: p2cread, p2cwrite = _subprocess.CreatePipe(None, 0) - elif isinstance(stdin, int): + elif isinstance(stdin, (int, long)): p2cread = msvcrt.get_osfhandle(stdin) else: # Assuming file-like object @@ -841,7 +524,7 @@ def _get_handles(self, stdin, stdout, stderr): _, c2pwrite = _subprocess.CreatePipe(None, 0) elif stdout == PIPE: c2pread, c2pwrite = _subprocess.CreatePipe(None, 0) - elif isinstance(stdout, int): + elif isinstance(stdout, (int, long)): c2pwrite = msvcrt.get_osfhandle(stdout) else: # Assuming file-like object @@ -860,7 +543,7 @@ def _get_handles(self, stdin, stdout, stderr): errread, errwrite = _subprocess.CreatePipe(None, 0) elif stderr == STDOUT: errwrite = c2pwrite - elif isinstance(stderr, int): + elif isinstance(stderr, (int, long)): errwrite = msvcrt.get_osfhandle(stderr) else: # Assuming file-like object @@ -1034,7 +717,16 @@ def _communicate(self, input): try: self.stdin.write(input) except IOError as e: - if e.errno != errno.EPIPE: + if e.errno == errno.EPIPE: + # communicate() should ignore broken pipe error + pass + elif e.errno == errno.EINVAL: + # bpo-19612, bpo-30418: On Windows, stdin.write() + # fails with EINVAL if the child process exited or + # if the child process is still running but closed + # the pipe. + pass + else: raise self.stdin.close() @@ -1109,7 +801,7 @@ def _get_handles(self, stdin, stdout, stderr): elif stdin == PIPE: p2cread, p2cwrite = self.pipe_cloexec() to_close.update((p2cread, p2cwrite)) - elif isinstance(stdin, int): + elif isinstance(stdin, (int, long)): p2cread = stdin else: # Assuming file-like object @@ -1120,7 +812,7 @@ def _get_handles(self, stdin, stdout, stderr): elif stdout == PIPE: c2pread, c2pwrite = self.pipe_cloexec() to_close.update((c2pread, c2pwrite)) - elif isinstance(stdout, int): + elif isinstance(stdout, (int, long)): c2pwrite = stdout else: # Assuming file-like object @@ -1132,8 +824,11 @@ def _get_handles(self, stdin, stdout, stderr): errread, errwrite = self.pipe_cloexec() to_close.update((errread, errwrite)) elif stderr == STDOUT: - errwrite = c2pwrite - elif isinstance(stderr, int): + if c2pwrite is not None: + errwrite = c2pwrite + else: # child's stdout is not set, use parent's stdout + errwrite = sys.__stdout__.fileno() + elif isinstance(stderr, (int, long)): errwrite = stderr else: # Assuming file-like object @@ -1303,8 +998,12 @@ def _dup2(a, b): os.close(errpipe_write) # Wait for exec to fail or succeed; possibly raising exception - # Exception limited to 1M data = _eintr_retry_call(os.read, errpipe_read, 1048576) + pickle_bits = [] + while data: + pickle_bits.append(data) + data = _eintr_retry_call(os.read, errpipe_read, 1048576) + data = "".join(pickle_bits) finally: if p2cread is not None and p2cwrite is not None: _close_in_parent(p2cread) @@ -1328,13 +1027,16 @@ def _dup2(a, b): def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, - _WEXITSTATUS=os.WEXITSTATUS): + _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED, + _WSTOPSIG=os.WSTOPSIG): # This method is called (indirectly) by __del__, so it cannot - # refer to anything outside of its local scope.""" + # refer to anything outside of its local scope. if _WIFSIGNALED(sts): self.returncode = -_WTERMSIG(sts) elif _WIFEXITED(sts): self.returncode = _WEXITSTATUS(sts) + elif _WIFSTOPPED(sts): + self.returncode = -_WSTOPSIG(sts) else: # Should never happen raise RuntimeError("Unknown child exit status!") diff --git a/PythonLib/full/sunau.py b/PythonLib/full/sunau.py index 31b280da..b53044d2 100644 --- a/PythonLib/full/sunau.py +++ b/PythonLib/full/sunau.py @@ -224,7 +224,7 @@ def getnframes(self): if self._data_size == AUDIO_UNKNOWN_SIZE: return AUDIO_UNKNOWN_SIZE if self._encoding in _simple_encodings: - return self._data_size / self._framesize + return self._data_size // self._framesize return 0 # XXX--must do some arithmetic here def getcomptype(self): diff --git a/PythonLib/full/sysconfig.py b/PythonLib/full/sysconfig.py index aa69351b..9c8350d9 100644 --- a/PythonLib/full/sysconfig.py +++ b/PythonLib/full/sysconfig.py @@ -112,6 +112,11 @@ def _safe_realpath(path): # PC/VS7.1 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) +# PC/VS9.0/amd64 +if (os.name == "nt" + and os.path.basename(os.path.dirname(os.path.dirname(_PROJECT_BASE))).lower() == "pc" + and os.path.basename(os.path.dirname(_PROJECT_BASE)).lower() == "vs9.0"): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir, pardir)) # PC/AMD64 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) @@ -273,17 +278,21 @@ def _parse_makefile(filename, vars=None): return vars -def _get_makefile_filename(): +def get_makefile_filename(): + """Return the path of the Makefile.""" if _PYTHON_BUILD: return os.path.join(_PROJECT_BASE, "Makefile") return os.path.join(get_path('platstdlib'), "config", "Makefile") +# Issue #22199: retain undocumented private name for compatibility +_get_makefile_filename = get_makefile_filename + def _generate_posix_vars(): """Generate the Python module containing build-time variables.""" import pprint vars = {} # load the installed Makefile: - makefile = _get_makefile_filename() + makefile = get_makefile_filename() try: _parse_makefile(makefile, vars) except IOError, e: diff --git a/PythonLib/full/tabnanny.py b/PythonLib/full/tabnanny.py index 76665ac9..e48b72a2 100644 --- a/PythonLib/full/tabnanny.py +++ b/PythonLib/full/tabnanny.py @@ -59,7 +59,7 @@ def main(): class NannyNag(Exception): """ - Raised by tokeneater() if detecting an ambiguous indent. + Raised by process_tokens() if detecting an ambiguous indent. Captured and handled in check(). """ def __init__(self, lineno, msg, line): diff --git a/PythonLib/full/tarfile.py b/PythonLib/full/tarfile.py index 44ecd24e..adf91d53 100644 --- a/PythonLib/full/tarfile.py +++ b/PythonLib/full/tarfile.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # -*- coding: iso-8859-1 -*- #------------------------------------------------------------------- # tarfile.py @@ -42,6 +41,7 @@ #--------- # Imports #--------- +from __builtin__ import open as bltn_open import sys import os import shutil @@ -186,7 +186,7 @@ def nti(s): # itn() below. if s[0] != chr(0200): try: - n = int(nts(s) or "0", 8) + n = int(nts(s).strip() or "0", 8) except ValueError: raise InvalidHeaderError("invalid header") else: @@ -418,28 +418,34 @@ def __init__(self, name, mode, comptype, fileobj, bufsize): self.pos = 0L self.closed = False - if comptype == "gz": - try: - import zlib - except ImportError: - raise CompressionError("zlib module is not available") - self.zlib = zlib - self.crc = zlib.crc32("") & 0xffffffffL - if mode == "r": - self._init_read_gz() - else: - self._init_write_gz() + try: + if comptype == "gz": + try: + import zlib + except ImportError: + raise CompressionError("zlib module is not available") + self.zlib = zlib + self.crc = zlib.crc32("") & 0xffffffffL + if mode == "r": + self._init_read_gz() + else: + self._init_write_gz() - if comptype == "bz2": - try: - import bz2 - except ImportError: - raise CompressionError("bz2 module is not available") - if mode == "r": - self.dbuf = "" - self.cmp = bz2.BZ2Decompressor() - else: - self.cmp = bz2.BZ2Compressor() + elif comptype == "bz2": + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + if mode == "r": + self.dbuf = "" + self.cmp = bz2.BZ2Decompressor() + else: + self.cmp = bz2.BZ2Compressor() + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise def __del__(self): if hasattr(self, "closed") and not self.closed: @@ -486,26 +492,26 @@ def close(self): if self.closed: return - if self.mode == "w" and self.comptype != "tar": - self.buf += self.cmp.flush() - - if self.mode == "w" and self.buf: - self.fileobj.write(self.buf) - self.buf = "" - if self.comptype == "gz": - # The native zlib crc is an unsigned 32-bit integer, but - # the Python wrapper implicitly casts that to a signed C - # long. So, on a 32-bit box self.crc may "look negative", - # while the same crc on a 64-bit box may "look positive". - # To avoid irksome warnings from the `struct` module, force - # it to look positive on all boxes. - self.fileobj.write(struct.pack(" 1 or mode not in "raw": + modes = {"r": "rb", "a": "r+b", "w": "wb"} + if mode not in modes: raise ValueError("mode must be 'r', 'a' or 'w'") self.mode = mode - self._mode = {"r": "rb", "a": "r+b", "w": "wb"}[mode] + self._mode = modes[mode] if not fileobj: if self.mode == "a" and not os.path.exists(name): @@ -1652,7 +1665,9 @@ def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): if mode in ("r", "r:*"): # Find out which *open() is appropriate for opening the file. - for comptype in cls.OPEN_METH: + def not_compressed(comptype): + return cls.OPEN_METH[comptype] == 'taropen' + for comptype in sorted(cls.OPEN_METH, key=not_compressed): func = getattr(cls, cls.OPEN_METH[comptype]) if fileobj is not None: saved_pos = fileobj.tell() @@ -1682,16 +1697,19 @@ def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): filemode = filemode or "r" comptype = comptype or "tar" - if filemode not in "rw": + if filemode not in ("r", "w"): raise ValueError("mode must be 'r' or 'w'") - t = cls(name, filemode, - _Stream(name, filemode, comptype, fileobj, bufsize), - **kwargs) + stream = _Stream(name, filemode, comptype, fileobj, bufsize) + try: + t = cls(name, filemode, stream, **kwargs) + except: + stream.close() + raise t._extfileobj = False return t - elif mode in "aw": + elif mode in ("a", "w"): return cls.taropen(name, mode, fileobj, **kwargs) raise ValueError("undiscernible mode") @@ -1700,7 +1718,7 @@ def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): def taropen(cls, name, mode="r", fileobj=None, **kwargs): """Open uncompressed tar archive name for reading or writing. """ - if len(mode) > 1 or mode not in "raw": + if mode not in ("r", "a", "w"): raise ValueError("mode must be 'r', 'a' or 'w'") return cls(name, mode, fileobj, **kwargs) @@ -1709,7 +1727,7 @@ def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): """Open gzip compressed tar archive name for reading or writing. Appending is not allowed. """ - if len(mode) > 1 or mode not in "rw": + if mode not in ("r", "w"): raise ValueError("mode must be 'r' or 'w'") try: @@ -1718,15 +1736,23 @@ def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): except (ImportError, AttributeError): raise CompressionError("gzip module is not available") - if fileobj is None: - fileobj = bltn_open(name, mode + "b") + try: + fileobj = gzip.GzipFile(name, mode, compresslevel, fileobj) + except OSError: + if fileobj is not None and mode == 'r': + raise ReadError("not a gzip file") + raise try: - t = cls.taropen(name, mode, - gzip.GzipFile(name, mode, compresslevel, fileobj), - **kwargs) + t = cls.taropen(name, mode, fileobj, **kwargs) except IOError: - raise ReadError("not a gzip file") + fileobj.close() + if mode == 'r': + raise ReadError("not a gzip file") + raise + except: + fileobj.close() + raise t._extfileobj = False return t @@ -1735,7 +1761,7 @@ def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): """Open bzip2 compressed tar archive name for reading or writing. Appending is not allowed. """ - if len(mode) > 1 or mode not in "rw": + if mode not in ("r", "w"): raise ValueError("mode must be 'r' or 'w'.") try: @@ -1751,7 +1777,13 @@ def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): try: t = cls.taropen(name, mode, fileobj, **kwargs) except (IOError, EOFError): - raise ReadError("not a bzip2 file") + fileobj.close() + if mode == 'r': + raise ReadError("not a bzip2 file") + raise + except: + fileobj.close() + raise t._extfileobj = False return t @@ -1772,18 +1804,19 @@ def close(self): if self.closed: return - if self.mode in "aw": - self.fileobj.write(NUL * (BLOCKSIZE * 2)) - self.offset += (BLOCKSIZE * 2) - # fill up the end with zero-blocks - # (like option -b20 for tar does) - blocks, remainder = divmod(self.offset, RECORDSIZE) - if remainder > 0: - self.fileobj.write(NUL * (RECORDSIZE - remainder)) - - if not self._extfileobj: - self.fileobj.close() self.closed = True + try: + if self.mode in "aw": + self.fileobj.write(NUL * (BLOCKSIZE * 2)) + self.offset += (BLOCKSIZE * 2) + # fill up the end with zero-blocks + # (like option -b20 for tar does) + blocks, remainder = divmod(self.offset, RECORDSIZE) + if remainder > 0: + self.fileobj.write(NUL * (RECORDSIZE - remainder)) + finally: + if not self._extfileobj: + self.fileobj.close() def getmember(self, name): """Return a TarInfo object for member `name'. If `name' can not be @@ -1813,11 +1846,12 @@ def getnames(self): return [tarinfo.name for tarinfo in self.getmembers()] def gettarinfo(self, name=None, arcname=None, fileobj=None): - """Create a TarInfo object for either the file `name' or the file - object `fileobj' (using os.fstat on its file descriptor). You can - modify some of the TarInfo's attributes before you add it using - addfile(). If given, `arcname' specifies an alternative name for the - file in the archive. + """Create a TarInfo object from the result of os.stat or equivalent + on an existing file. The file is either named by `name', or + specified as a file object `fileobj' with a file descriptor. If + given, `arcname' specifies an alternative name for the file in the + archive, otherwise, the name is taken from the 'name' attribute of + 'fileobj', or the 'name' argument. """ self._check("aw") @@ -1838,7 +1872,7 @@ def gettarinfo(self, name=None, arcname=None, fileobj=None): # Now, fill the TarInfo object with # information specific for the file. tarinfo = self.tarinfo() - tarinfo.tarfile = self + tarinfo.tarfile = self # Not needed # Use os.stat or os.lstat, depending on platform # and if symlinks shall be resolved. @@ -2003,7 +2037,7 @@ def add(self, name, arcname=None, recursive=True, exclude=None, filter=None): def addfile(self, tarinfo, fileobj=None): """Add the TarInfo object `tarinfo' to the archive. If `fileobj' is given, tarinfo.size bytes are read from it and added to the archive. - You can create TarInfo objects using gettarinfo(). + You can create TarInfo objects directly, or by using gettarinfo(). On Windows platforms, `fileobj' should always be opened with mode 'rb' to avoid irritation about the file size. """ @@ -2311,8 +2345,13 @@ def next(self): self.firstmember = None return m + # Advance the file pointer. + if self.offset != self.fileobj.tell(): + self.fileobj.seek(self.offset - 1) + if not self.fileobj.read(1): + raise ReadError("unexpected end of data") + # Read the next block. - self.fileobj.seek(self.offset) tarinfo = None while True: try: @@ -2588,5 +2627,4 @@ def is_tarfile(name): except TarError: return False -bltn_open = open open = TarFile.open diff --git a/PythonLib/full/telnetlib.py b/PythonLib/full/telnetlib.py index 727e8f7c..2eaa8e37 100644 --- a/PythonLib/full/telnetlib.py +++ b/PythonLib/full/telnetlib.py @@ -254,12 +254,13 @@ def set_debuglevel(self, debuglevel): def close(self): """Close the connection.""" - if self.sock: - self.sock.close() + sock = self.sock self.sock = 0 self.eof = 1 self.iacseq = '' self.sb = 0 + if sock: + sock.close() def get_socket(self): """Return the socket object used internally.""" @@ -312,7 +313,9 @@ def _read_until_with_poll(self, match, timeout): poller.register(self, poll_in_or_priority_flags) while i < 0 and not self.eof: try: - ready = poller.poll(call_timeout) + # Poll takes its timeout in milliseconds. + ready = poller.poll(None if timeout is None + else 1000 * call_timeout) except select.error as e: if e.errno == errno.EINTR: if timeout is not None: @@ -682,7 +685,8 @@ def _expect_with_poll(self, expect_list, timeout=None): poller.register(self, poll_in_or_priority_flags) while not m and not self.eof: try: - ready = poller.poll(call_timeout) + ready = poller.poll(None if timeout is None + else 1000 * call_timeout) except select.error as e: if e.errno == errno.EINTR: if timeout is not None: diff --git a/PythonLib/full/tempfile.py b/PythonLib/full/tempfile.py index 7154d2c6..7e3b25a0 100644 --- a/PythonLib/full/tempfile.py +++ b/PythonLib/full/tempfile.py @@ -1,10 +1,10 @@ """Temporary files. This module provides generic, low- and high-level interfaces for -creating temporary files and directories. The interfaces listed -as "safe" just below can be used without fear of race conditions. -Those listed as "unsafe" cannot, and are provided for backward -compatibility only. +creating temporary files and directories. All of the interfaces +provided by this module can be used without fear of race conditions +except for 'mktemp'. 'mktemp' is subject to race conditions and +should not be used; it is provided for backward compatibility only. This module also provides some data items to the user: @@ -205,9 +205,14 @@ def _get_default_tempdir(): _os.unlink(filename) return dir except (OSError, IOError) as e: - if e.args[0] != _errno.EEXIST: - break # no point trying more names in this directory - pass + if e.args[0] == _errno.EEXIST: + continue + if (_os.name == 'nt' and e.args[0] == _errno.EACCES and + _os.path.isdir(dir) and _os.access(dir, _os.W_OK)): + # On windows, when a directory with the chosen name already + # exists, EACCES error code is returned instead of EEXIST. + continue + break # no point trying more names in this directory raise IOError, (_errno.ENOENT, ("No usable temporary directory found in %s" % dirlist)) @@ -242,7 +247,8 @@ def _mkstemp_inner(dir, pre, suf, flags): except OSError, e: if e.errno == _errno.EEXIST: continue # try again - if _os.name == 'nt' and e.errno == _errno.EACCES: + if (_os.name == 'nt' and e.errno == _errno.EACCES and + _os.path.isdir(dir) and _os.access(dir, _os.W_OK)): # On windows, when a directory with the chosen name already # exists, EACCES error code is returned instead of EEXIST. continue @@ -335,6 +341,11 @@ def mkdtemp(suffix="", prefix=template, dir=None): except OSError, e: if e.errno == _errno.EEXIST: continue # try again + if (_os.name == 'nt' and e.errno == _errno.EACCES and + _os.path.isdir(dir) and _os.access(dir, _os.W_OK)): + # On windows, when a directory with the chosen name already + # exists, EACCES error code is returned instead of EEXIST. + continue raise raise IOError, (_errno.EEXIST, "No usable temporary directory name found") @@ -413,9 +424,11 @@ def __enter__(self): def close(self): if not self.close_called: self.close_called = True - self.file.close() - if self.delete: - self.unlink(self.name) + try: + self.file.close() + finally: + if self.delete: + self.unlink(self.name) def __del__(self): self.close() @@ -442,8 +455,8 @@ def NamedTemporaryFile(mode='w+b', bufsize=-1, suffix="", The file is created as mkstemp() would do it. Returns an object with a file-like interface; the name of the file - is accessible as file.name. The file will be automatically deleted - when it is closed unless the 'delete' argument is set to False. + is accessible as its 'name' attribute. The file will be automatically + deleted when it is closed unless the 'delete' argument is set to False. """ if dir is None: @@ -460,8 +473,13 @@ def NamedTemporaryFile(mode='w+b', bufsize=-1, suffix="", flags |= _os.O_TEMPORARY (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags) - file = _os.fdopen(fd, mode, bufsize) - return _TemporaryFileWrapper(file, name, delete) + try: + file = _os.fdopen(fd, mode, bufsize) + return _TemporaryFileWrapper(file, name, delete) + except BaseException: + _os.unlink(name) + _os.close(fd) + raise if _os.name != 'posix' or _os.sys.platform == 'cygwin': # On non-POSIX and Cygwin systems, assume that we cannot unlink a file diff --git a/PythonLib/full/textwrap.py b/PythonLib/full/textwrap.py index 62ea0b48..5c2e4fa5 100644 --- a/PythonLib/full/textwrap.py +++ b/PythonLib/full/textwrap.py @@ -147,7 +147,7 @@ def _munge_whitespace(self, text): """_munge_whitespace(text : string) -> string Munge whitespace in text: expand tabs and convert all other - whitespace characters to spaces. Eg. " foo\tbar\n\nbaz" + whitespace characters to spaces. Eg. " foo\\tbar\\n\\nbaz" becomes " foo bar baz". """ if self.expand_tabs: @@ -193,7 +193,7 @@ def _fix_sentence_endings(self, chunks): """_fix_sentence_endings(chunks : [string]) Correct for sentence endings buried in 'chunks'. Eg. when the - original text contains "... foo.\nBar ...", munge_whitespace() + original text contains "... foo.\\nBar ...", munge_whitespace() and split() will convert that to [..., "foo.", " ", "Bar", ...] which has one too few spaces; this method simply changes the one space to two. @@ -379,7 +379,7 @@ def dedent(text): in indented form. Note that tabs and spaces are both treated as whitespace, but they - are not equal: the lines " hello" and "\thello" are + are not equal: the lines " hello" and "\\thello" are considered to have no common leading whitespace. (This behaviour is new in Python 2.5; older versions of this module incorrectly expanded tabs before searching for common leading whitespace.) @@ -403,11 +403,15 @@ def dedent(text): elif margin.startswith(indent): margin = indent - # Current line and previous winner have no common whitespace: - # there is no margin. + # Find the largest common whitespace between current line and previous + # winner. else: - margin = "" - break + for i, (x, y) in enumerate(zip(margin, indent)): + if x != y: + margin = margin[:i] + break + else: + margin = margin[:len(indent)] # sanity check (testing/debugging only) if 0 and margin: diff --git a/PythonLib/full/threading.py b/PythonLib/full/threading.py index e81471bb..527f20ac 100644 --- a/PythonLib/full/threading.py +++ b/PythonLib/full/threading.py @@ -11,6 +11,7 @@ import warnings from collections import deque as _deque +from itertools import count as _count from time import time as _time, sleep as _sleep from traceback import format_exc as _format_exc @@ -564,7 +565,7 @@ def __init__(self, verbose=None): def _reset_internal_locks(self): # private! called by Thread._reset_internal_locks by _after_fork() - self.__cond.__init__() + self.__cond.__init__(Lock()) def isSet(self): 'Return true if and only if the internal flag is true.' @@ -579,12 +580,9 @@ def set(self): that call wait() once the flag is true will not block at all. """ - self.__cond.acquire() - try: + with self.__cond: self.__flag = True self.__cond.notify_all() - finally: - self.__cond.release() def clear(self): """Reset the internal flag to false. @@ -593,11 +591,8 @@ def clear(self): set the internal flag to true again. """ - self.__cond.acquire() - try: + with self.__cond: self.__flag = False - finally: - self.__cond.release() def wait(self, timeout=None): """Block until the internal flag is true. @@ -614,20 +609,16 @@ def wait(self, timeout=None): True except if a timeout is given and the operation times out. """ - self.__cond.acquire() - try: + with self.__cond: if not self.__flag: self.__cond.wait(timeout) return self.__flag - finally: - self.__cond.release() # Helper to generate new thread names -_counter = 0 +_counter = _count().next +_counter() # Consume 0 so first non-main thread has id 1. def _newname(template="Thread-%d"): - global _counter - _counter = _counter + 1 - return template % _counter + return template % _counter() # Active thread administration _active_limbo_lock = _allocate_lock() @@ -818,10 +809,10 @@ def __bootstrap_inner(self): # shutdown) use self.__stderr. Otherwise still use sys (as in # _sys) in case sys.stderr was redefined since the creation of # self. - if _sys: - _sys.stderr.write("Exception in thread %s:\n%s\n" % - (self.name, _format_exc())) - else: + if _sys and _sys.stderr is not None: + print>>_sys.stderr, ("Exception in thread %s:\n%s" % + (self.name, _format_exc())) + elif self.__stderr is not None: # Do the best job possible w/o a huge amt. of code to # approximate a traceback (code ideas from # Lib/traceback.py) diff --git a/PythonLib/full/timeit.py b/PythonLib/full/timeit.py index da9e819b..bf0301e6 100644 --- a/PythonLib/full/timeit.py +++ b/PythonLib/full/timeit.py @@ -78,7 +78,7 @@ # in Timer.__init__() depend on setup being indented 4 spaces and stmt # being indented 8 spaces. template = """ -def inner(_it, _timer): +def inner(_it, _timer%(init)s): %(setup)s _t0 = _timer() for _i in _it: @@ -123,12 +123,19 @@ def __init__(self, stmt="pass", setup="pass", timer=default_timer): self.timer = timer ns = {} if isinstance(stmt, basestring): + # Check that the code can be compiled outside a function + if isinstance(setup, basestring): + compile(setup, dummy_src_name, "exec") + compile(setup + '\n' + stmt, dummy_src_name, "exec") + else: + compile(stmt, dummy_src_name, "exec") stmt = reindent(stmt, 8) if isinstance(setup, basestring): setup = reindent(setup, 4) - src = template % {'stmt': stmt, 'setup': setup} + src = template % {'stmt': stmt, 'setup': setup, 'init': ''} elif hasattr(setup, '__call__'): - src = template % {'stmt': stmt, 'setup': '_setup()'} + src = template % {'stmt': stmt, 'setup': '_setup()', + 'init': ', _setup=_setup'} ns['_setup'] = setup else: raise ValueError("setup is neither a string nor callable") @@ -234,10 +241,10 @@ def repeat(stmt="pass", setup="pass", timer=default_timer, """Convenience function to create Timer object and call repeat method.""" return Timer(stmt, setup, timer).repeat(repeat, number) -def main(args=None): +def main(args=None, _wrap_timer=None): """Main program, used when run as a script. - The optional argument specifies the command line to be parsed, + The optional 'args' argument specifies the command line to be parsed, defaulting to sys.argv[1:]. The return value is an exit code to be passed to sys.exit(); it @@ -246,6 +253,10 @@ def main(args=None): When an exception happens during timing, a traceback is printed to stderr and the return value is 1. Exceptions at other times (including the template compilation) are not caught. + + '_wrap_timer' is an internal interface used for unit testing. If it + is not None, it must be a callable that accepts a timer function + and returns another timer function (used for unit testing). """ if args is None: args = sys.argv[1:] @@ -291,6 +302,8 @@ def main(args=None): # directory) import os sys.path.insert(0, os.curdir) + if _wrap_timer is not None: + timer = _wrap_timer(timer) t = Timer(stmt, setup, timer) if number == 0: # determine number so that 0.2 <= total time < 2.0 diff --git a/PythonLib/full/token.py b/PythonLib/full/token.py index 34abf620..45825b4a 100644 --- a/PythonLib/full/token.py +++ b/PythonLib/full/token.py @@ -1,5 +1,3 @@ -#! /usr/bin/env python - """Token constants (from "token.h").""" # This file is automatically generated; please don't muck it up! diff --git a/PythonLib/full/tokenize.py b/PythonLib/full/tokenize.py index ca7b0749..d426cd2d 100644 --- a/PythonLib/full/tokenize.py +++ b/PythonLib/full/tokenize.py @@ -26,6 +26,7 @@ __credits__ = ('GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, ' 'Skip Montanaro, Raymond Hettinger') +from itertools import chain import string, re from token import * @@ -184,17 +185,43 @@ def __init__(self): def add_whitespace(self, start): row, col = start - assert row <= self.prev_row + if row < self.prev_row or row == self.prev_row and col < self.prev_col: + raise ValueError("start ({},{}) precedes previous end ({},{})" + .format(row, col, self.prev_row, self.prev_col)) + row_offset = row - self.prev_row + if row_offset: + self.tokens.append("\\\n" * row_offset) + self.prev_col = 0 col_offset = col - self.prev_col if col_offset: self.tokens.append(" " * col_offset) def untokenize(self, iterable): - for t in iterable: + it = iter(iterable) + indents = [] + startline = False + for t in it: if len(t) == 2: - self.compat(t, iterable) + self.compat(t, it) break tok_type, token, start, end, line = t + if tok_type == ENDMARKER: + break + if tok_type == INDENT: + indents.append(token) + continue + elif tok_type == DEDENT: + indents.pop() + self.prev_row, self.prev_col = end + continue + elif tok_type in (NEWLINE, NL): + startline = True + elif startline and indents: + indent = indents[-1] + if start[1] >= len(indent): + self.tokens.append(indent) + self.prev_col = len(indent) + startline = False self.add_whitespace(start) self.tokens.append(token) self.prev_row, self.prev_col = end @@ -204,16 +231,12 @@ def untokenize(self, iterable): return "".join(self.tokens) def compat(self, token, iterable): - startline = False indents = [] toks_append = self.tokens.append - toknum, tokval = token - if toknum in (NAME, NUMBER): - tokval += ' ' - if toknum in (NEWLINE, NL): - startline = True + startline = token[0] in (NEWLINE, NL) prevstring = False - for tok in iterable: + + for tok in chain([token], iterable): toknum, tokval = tok[:2] if toknum in (NAME, NUMBER): @@ -263,7 +286,7 @@ def untokenize(iterable): def generate_tokens(readline): """ - The generate_tokens() generator requires one argment, readline, which + The generate_tokens() generator requires one argument, readline, which must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as a string. Alternately, readline diff --git a/PythonLib/full/traceback.py b/PythonLib/full/traceback.py index 5ad2838f..0a3dd11d 100644 --- a/PythonLib/full/traceback.py +++ b/PythonLib/full/traceback.py @@ -189,11 +189,12 @@ def format_exception_only(etype, value): if badline is not None: lines.append(' %s\n' % badline.strip()) if offset is not None: - caretspace = badline.rstrip('\n')[:offset].lstrip() + caretspace = badline.rstrip('\n') + offset = min(len(caretspace), offset) - 1 + caretspace = caretspace[:offset].lstrip() # non-space whitespace (likes tabs) must be kept for alignment caretspace = ((c.isspace() and c or ' ') for c in caretspace) - # only three spaces to account for offset1 == pos 0 - lines.append(' %s^\n' % ''.join(caretspace)) + lines.append(' %s^\n' % ''.join(caretspace)) value = msg lines.append(_format_final_exc_line(stype, value)) diff --git a/PythonLib/full/types.py b/PythonLib/full/types.py index ff90e049..d414f549 100644 --- a/PythonLib/full/types.py +++ b/PythonLib/full/types.py @@ -82,3 +82,5 @@ def _m(self): pass MemberDescriptorType = type(FunctionType.func_globals) del sys, _f, _g, _C, _x # Not for export + +__all__ = list(n for n in globals() if n[:1] != '_') diff --git a/PythonLib/full/unicodedata.pyd b/PythonLib/full/unicodedata.pyd index 87e74f88650bd441ec7da995077ec8dcfde3e07c..883789d7c340496ecfb915b0495455a367d208c2 100644 GIT binary patch delta 11797 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 delta 117607 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 diff --git a/PythonLib/full/unittest/case.py b/PythonLib/full/unittest/case.py index b0cb44a2..8f461014 100644 --- a/PythonLib/full/unittest/case.py +++ b/PythonLib/full/unittest/case.py @@ -122,8 +122,6 @@ def __exit__(self, exc_type, exc_value, tb): return True expected_regexp = self.expected_regexp - if isinstance(expected_regexp, basestring): - expected_regexp = re.compile(expected_regexp) if not expected_regexp.search(str(exc_value)): raise self.failureException('"%s" does not match "%s"' % (expected_regexp.pattern, str(exc_value))) @@ -531,7 +529,7 @@ def assertAlmostEqual(self, first, second, places=None, msg=None, delta=None): between the two objects is more than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). If the two objects compare equal then they will automatically compare almost equal. @@ -569,7 +567,7 @@ def assertNotAlmostEqual(self, first, second, places=None, msg=None, delta=None) between the two objects is less than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). Objects that are equal automatically fail. """ @@ -691,7 +689,7 @@ def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None): if item1 != item2: differing += ('\nFirst differing element %d:\n%s\n%s\n' % - (i, item1, item2)) + (i, safe_repr(item1), safe_repr(item2))) break else: if (len1 == len2 and seq_type is None and @@ -704,7 +702,7 @@ def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None): 'elements.\n' % (seq_type_name, len1 - len2)) try: differing += ('First extra element %d:\n%s\n' % - (len2, seq1[len2])) + (len2, safe_repr(seq1[len2]))) except (TypeError, IndexError, NotImplementedError): differing += ('Unable to index element %d ' 'of first %s\n' % (len2, seq_type_name)) @@ -713,7 +711,7 @@ def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None): 'elements.\n' % (seq_type_name, len2 - len1)) try: differing += ('First extra element %d:\n%s\n' % - (len1, seq2[len1])) + (len1, safe_repr(seq2[len1]))) except (TypeError, IndexError, NotImplementedError): differing += ('Unable to index element %d ' 'of second %s\n' % (len1, seq_type_name)) @@ -986,6 +984,8 @@ def assertRaisesRegexp(self, expected_exception, expected_regexp, args: Extra args. kwargs: Extra kwargs. """ + if expected_regexp is not None: + expected_regexp = re.compile(expected_regexp) context = _AssertRaisesContext(expected_exception, self, expected_regexp) if callable_obj is None: return context diff --git a/PythonLib/full/unittest/loader.py b/PythonLib/full/unittest/loader.py index 9163a1a0..3c161b5b 100644 --- a/PythonLib/full/unittest/loader.py +++ b/PythonLib/full/unittest/loader.py @@ -46,7 +46,7 @@ class TestLoader(object): _top_level_dir = None def loadTestsFromTestCase(self, testCaseClass): - """Return a suite of all tests cases contained in testCaseClass""" + """Return a suite of all test cases contained in testCaseClass""" if issubclass(testCaseClass, suite.TestSuite): raise TypeError("Test cases should not be derived from TestSuite." \ " Maybe you meant to derive from TestCase?") @@ -57,7 +57,7 @@ def loadTestsFromTestCase(self, testCaseClass): return loaded_suite def loadTestsFromModule(self, module, use_load_tests=True): - """Return a suite of all tests cases contained in the given module""" + """Return a suite of all test cases contained in the given module""" tests = [] for name in dir(module): obj = getattr(module, name) @@ -75,7 +75,7 @@ def loadTestsFromModule(self, module, use_load_tests=True): return tests def loadTestsFromName(self, name, module=None): - """Return a suite of all tests cases given a string specifier. + """Return a suite of all test cases given a string specifier. The name may resolve either to a module, a test case class, a test method within a test case class, or a callable object which @@ -124,7 +124,7 @@ def loadTestsFromName(self, name, module=None): raise TypeError("don't know how to make test from: %s" % obj) def loadTestsFromNames(self, names, module=None): - """Return a suite of all tests cases found using the given sequence + """Return a suite of all test cases found using the given sequence of string specifiers. See 'loadTestsFromName()'. """ suites = [self.loadTestsFromName(name, module) for name in names] diff --git a/PythonLib/full/unittest/main.py b/PythonLib/full/unittest/main.py index b2536799..ca99ac64 100644 --- a/PythonLib/full/unittest/main.py +++ b/PythonLib/full/unittest/main.py @@ -174,7 +174,7 @@ def _do_discovery(self, argv, Loader=None): action='store_true') if self.catchbreak != False: parser.add_option('-c', '--catch', dest='catchbreak', default=False, - help='Catch ctrl-C and display results so far', + help='Catch Ctrl-C and display results so far', action='store_true') if self.buffer != False: parser.add_option('-b', '--buffer', dest='buffer', default=False, diff --git a/PythonLib/full/unittest/result.py b/PythonLib/full/unittest/result.py index 2cc17d71..8af972fa 100644 --- a/PythonLib/full/unittest/result.py +++ b/PythonLib/full/unittest/result.py @@ -132,7 +132,7 @@ def addSkip(self, test, reason): self.skipped.append((test, reason)) def addExpectedFailure(self, test, err): - """Called when an expected failure/error occured.""" + """Called when an expected failure/error occurred.""" self.expectedFailures.append( (test, self._exc_info_to_string(err, test))) diff --git a/PythonLib/full/unittest/signals.py b/PythonLib/full/unittest/signals.py index e6a5fc52..9fbcc9ff 100644 --- a/PythonLib/full/unittest/signals.py +++ b/PythonLib/full/unittest/signals.py @@ -10,7 +10,7 @@ class _InterruptHandler(object): def __init__(self, default_handler): self.called = False self.original_handler = default_handler - if isinstance(default_handler, int): + if isinstance(default_handler, (int, long)): if default_handler == signal.SIG_DFL: # Pretend it's signal.default_int_handler instead. default_handler = signal.default_int_handler diff --git a/PythonLib/full/unittest/test/__init__.py b/PythonLib/full/unittest/test/__init__.py deleted file mode 100644 index 99b730b1..00000000 --- a/PythonLib/full/unittest/test/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -import os -import sys -import unittest - - -here = os.path.dirname(__file__) -loader = unittest.defaultTestLoader - -def suite(): - suite = unittest.TestSuite() - for fn in os.listdir(here): - if fn.startswith("test") and fn.endswith(".py"): - modname = "unittest.test." + fn[:-3] - __import__(modname) - module = sys.modules[modname] - suite.addTest(loader.loadTestsFromModule(module)) - return suite - - -if __name__ == "__main__": - unittest.main(defaultTest="suite") diff --git a/PythonLib/full/unittest/test/dummy.py b/PythonLib/full/unittest/test/dummy.py deleted file mode 100644 index e4f14e40..00000000 --- a/PythonLib/full/unittest/test/dummy.py +++ /dev/null @@ -1 +0,0 @@ -# Empty module for testing the loading of modules diff --git a/PythonLib/full/unittest/test/support.py b/PythonLib/full/unittest/test/support.py deleted file mode 100644 index f1cf03b1..00000000 --- a/PythonLib/full/unittest/test/support.py +++ /dev/null @@ -1,119 +0,0 @@ -import unittest - - -class TestHashing(object): - """Used as a mixin for TestCase""" - - # Check for a valid __hash__ implementation - def test_hash(self): - for obj_1, obj_2 in self.eq_pairs: - try: - if not hash(obj_1) == hash(obj_2): - self.fail("%r and %r do not hash equal" % (obj_1, obj_2)) - except KeyboardInterrupt: - raise - except Exception, e: - self.fail("Problem hashing %r and %r: %s" % (obj_1, obj_2, e)) - - for obj_1, obj_2 in self.ne_pairs: - try: - if hash(obj_1) == hash(obj_2): - self.fail("%s and %s hash equal, but shouldn't" % - (obj_1, obj_2)) - except KeyboardInterrupt: - raise - except Exception, e: - self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e)) - - -class TestEquality(object): - """Used as a mixin for TestCase""" - - # Check for a valid __eq__ implementation - def test_eq(self): - for obj_1, obj_2 in self.eq_pairs: - self.assertEqual(obj_1, obj_2) - self.assertEqual(obj_2, obj_1) - - # Check for a valid __ne__ implementation - def test_ne(self): - for obj_1, obj_2 in self.ne_pairs: - self.assertNotEqual(obj_1, obj_2) - self.assertNotEqual(obj_2, obj_1) - - -class LoggingResult(unittest.TestResult): - def __init__(self, log): - self._events = log - super(LoggingResult, self).__init__() - - def startTest(self, test): - self._events.append('startTest') - super(LoggingResult, self).startTest(test) - - def startTestRun(self): - self._events.append('startTestRun') - super(LoggingResult, self).startTestRun() - - def stopTest(self, test): - self._events.append('stopTest') - super(LoggingResult, self).stopTest(test) - - def stopTestRun(self): - self._events.append('stopTestRun') - super(LoggingResult, self).stopTestRun() - - def addFailure(self, *args): - self._events.append('addFailure') - super(LoggingResult, self).addFailure(*args) - - def addSuccess(self, *args): - self._events.append('addSuccess') - super(LoggingResult, self).addSuccess(*args) - - def addError(self, *args): - self._events.append('addError') - super(LoggingResult, self).addError(*args) - - def addSkip(self, *args): - self._events.append('addSkip') - super(LoggingResult, self).addSkip(*args) - - def addExpectedFailure(self, *args): - self._events.append('addExpectedFailure') - super(LoggingResult, self).addExpectedFailure(*args) - - def addUnexpectedSuccess(self, *args): - self._events.append('addUnexpectedSuccess') - super(LoggingResult, self).addUnexpectedSuccess(*args) - - -class ResultWithNoStartTestRunStopTestRun(object): - """An object honouring TestResult before startTestRun/stopTestRun.""" - - def __init__(self): - self.failures = [] - self.errors = [] - self.testsRun = 0 - self.skipped = [] - self.expectedFailures = [] - self.unexpectedSuccesses = [] - self.shouldStop = False - - def startTest(self, test): - pass - - def stopTest(self, test): - pass - - def addError(self, test): - pass - - def addFailure(self, test): - pass - - def addSuccess(self, test): - pass - - def wasSuccessful(self): - return True diff --git a/PythonLib/full/unittest/test/test_assertions.py b/PythonLib/full/unittest/test/test_assertions.py deleted file mode 100644 index e8f0f64b..00000000 --- a/PythonLib/full/unittest/test/test_assertions.py +++ /dev/null @@ -1,290 +0,0 @@ -import datetime - -import unittest - - -class Test_Assertions(unittest.TestCase): - def test_AlmostEqual(self): - self.assertAlmostEqual(1.00000001, 1.0) - self.assertNotAlmostEqual(1.0000001, 1.0) - self.assertRaises(self.failureException, - self.assertAlmostEqual, 1.0000001, 1.0) - self.assertRaises(self.failureException, - self.assertNotAlmostEqual, 1.00000001, 1.0) - - self.assertAlmostEqual(1.1, 1.0, places=0) - self.assertRaises(self.failureException, - self.assertAlmostEqual, 1.1, 1.0, places=1) - - self.assertAlmostEqual(0, .1+.1j, places=0) - self.assertNotAlmostEqual(0, .1+.1j, places=1) - self.assertRaises(self.failureException, - self.assertAlmostEqual, 0, .1+.1j, places=1) - self.assertRaises(self.failureException, - self.assertNotAlmostEqual, 0, .1+.1j, places=0) - - self.assertAlmostEqual(float('inf'), float('inf')) - self.assertRaises(self.failureException, self.assertNotAlmostEqual, - float('inf'), float('inf')) - - def test_AmostEqualWithDelta(self): - self.assertAlmostEqual(1.1, 1.0, delta=0.5) - self.assertAlmostEqual(1.0, 1.1, delta=0.5) - self.assertNotAlmostEqual(1.1, 1.0, delta=0.05) - self.assertNotAlmostEqual(1.0, 1.1, delta=0.05) - - self.assertAlmostEqual(1.0, 1.0, delta=0.5) - self.assertRaises(self.failureException, self.assertNotAlmostEqual, - 1.0, 1.0, delta=0.5) - - self.assertRaises(self.failureException, self.assertAlmostEqual, - 1.1, 1.0, delta=0.05) - self.assertRaises(self.failureException, self.assertNotAlmostEqual, - 1.1, 1.0, delta=0.5) - - self.assertRaises(TypeError, self.assertAlmostEqual, - 1.1, 1.0, places=2, delta=2) - self.assertRaises(TypeError, self.assertNotAlmostEqual, - 1.1, 1.0, places=2, delta=2) - - first = datetime.datetime.now() - second = first + datetime.timedelta(seconds=10) - self.assertAlmostEqual(first, second, - delta=datetime.timedelta(seconds=20)) - self.assertNotAlmostEqual(first, second, - delta=datetime.timedelta(seconds=5)) - - def test_assertRaises(self): - def _raise(e): - raise e - self.assertRaises(KeyError, _raise, KeyError) - self.assertRaises(KeyError, _raise, KeyError("key")) - try: - self.assertRaises(KeyError, lambda: None) - except self.failureException as e: - self.assertIn("KeyError not raised", e.args) - else: - self.fail("assertRaises() didn't fail") - try: - self.assertRaises(KeyError, _raise, ValueError) - except ValueError: - pass - else: - self.fail("assertRaises() didn't let exception pass through") - with self.assertRaises(KeyError) as cm: - try: - raise KeyError - except Exception, e: - raise - self.assertIs(cm.exception, e) - - with self.assertRaises(KeyError): - raise KeyError("key") - try: - with self.assertRaises(KeyError): - pass - except self.failureException as e: - self.assertIn("KeyError not raised", e.args) - else: - self.fail("assertRaises() didn't fail") - try: - with self.assertRaises(KeyError): - raise ValueError - except ValueError: - pass - else: - self.fail("assertRaises() didn't let exception pass through") - - def testAssertNotRegexpMatches(self): - self.assertNotRegexpMatches('Ala ma kota', r'r+') - try: - self.assertNotRegexpMatches('Ala ma kota', r'k.t', 'Message') - except self.failureException, e: - self.assertIn("'kot'", e.args[0]) - self.assertIn('Message', e.args[0]) - else: - self.fail('assertNotRegexpMatches should have failed.') - - -class TestLongMessage(unittest.TestCase): - """Test that the individual asserts honour longMessage. - This actually tests all the message behaviour for - asserts that use longMessage.""" - - def setUp(self): - class TestableTestFalse(unittest.TestCase): - longMessage = False - failureException = self.failureException - - def testTest(self): - pass - - class TestableTestTrue(unittest.TestCase): - longMessage = True - failureException = self.failureException - - def testTest(self): - pass - - self.testableTrue = TestableTestTrue('testTest') - self.testableFalse = TestableTestFalse('testTest') - - def testDefault(self): - self.assertFalse(unittest.TestCase.longMessage) - - def test_formatMsg(self): - self.assertEqual(self.testableFalse._formatMessage(None, "foo"), "foo") - self.assertEqual(self.testableFalse._formatMessage("foo", "bar"), "foo") - - self.assertEqual(self.testableTrue._formatMessage(None, "foo"), "foo") - self.assertEqual(self.testableTrue._formatMessage("foo", "bar"), "bar : foo") - - # This blows up if _formatMessage uses string concatenation - self.testableTrue._formatMessage(object(), 'foo') - - def test_formatMessage_unicode_error(self): - one = ''.join(chr(i) for i in range(255)) - # this used to cause a UnicodeDecodeError constructing msg - self.testableTrue._formatMessage(one, u'\uFFFD') - - def assertMessages(self, methodName, args, errors): - def getMethod(i): - useTestableFalse = i < 2 - if useTestableFalse: - test = self.testableFalse - else: - test = self.testableTrue - return getattr(test, methodName) - - for i, expected_regexp in enumerate(errors): - testMethod = getMethod(i) - kwargs = {} - withMsg = i % 2 - if withMsg: - kwargs = {"msg": "oops"} - - with self.assertRaisesRegexp(self.failureException, - expected_regexp=expected_regexp): - testMethod(*args, **kwargs) - - def testAssertTrue(self): - self.assertMessages('assertTrue', (False,), - ["^False is not true$", "^oops$", "^False is not true$", - "^False is not true : oops$"]) - - def testAssertFalse(self): - self.assertMessages('assertFalse', (True,), - ["^True is not false$", "^oops$", "^True is not false$", - "^True is not false : oops$"]) - - def testNotEqual(self): - self.assertMessages('assertNotEqual', (1, 1), - ["^1 == 1$", "^oops$", "^1 == 1$", - "^1 == 1 : oops$"]) - - def testAlmostEqual(self): - self.assertMessages('assertAlmostEqual', (1, 2), - ["^1 != 2 within 7 places$", "^oops$", - "^1 != 2 within 7 places$", "^1 != 2 within 7 places : oops$"]) - - def testNotAlmostEqual(self): - self.assertMessages('assertNotAlmostEqual', (1, 1), - ["^1 == 1 within 7 places$", "^oops$", - "^1 == 1 within 7 places$", "^1 == 1 within 7 places : oops$"]) - - def test_baseAssertEqual(self): - self.assertMessages('_baseAssertEqual', (1, 2), - ["^1 != 2$", "^oops$", "^1 != 2$", "^1 != 2 : oops$"]) - - def testAssertSequenceEqual(self): - # Error messages are multiline so not testing on full message - # assertTupleEqual and assertListEqual delegate to this method - self.assertMessages('assertSequenceEqual', ([], [None]), - ["\+ \[None\]$", "^oops$", r"\+ \[None\]$", - r"\+ \[None\] : oops$"]) - - def testAssertSetEqual(self): - self.assertMessages('assertSetEqual', (set(), set([None])), - ["None$", "^oops$", "None$", - "None : oops$"]) - - def testAssertIn(self): - self.assertMessages('assertIn', (None, []), - ['^None not found in \[\]$', "^oops$", - '^None not found in \[\]$', - '^None not found in \[\] : oops$']) - - def testAssertNotIn(self): - self.assertMessages('assertNotIn', (None, [None]), - ['^None unexpectedly found in \[None\]$', "^oops$", - '^None unexpectedly found in \[None\]$', - '^None unexpectedly found in \[None\] : oops$']) - - def testAssertDictEqual(self): - self.assertMessages('assertDictEqual', ({}, {'key': 'value'}), - [r"\+ \{'key': 'value'\}$", "^oops$", - "\+ \{'key': 'value'\}$", - "\+ \{'key': 'value'\} : oops$"]) - - def testAssertDictContainsSubset(self): - self.assertMessages('assertDictContainsSubset', ({'key': 'value'}, {}), - ["^Missing: 'key'$", "^oops$", - "^Missing: 'key'$", - "^Missing: 'key' : oops$"]) - - def testAssertMultiLineEqual(self): - self.assertMessages('assertMultiLineEqual', ("", "foo"), - [r"\+ foo$", "^oops$", - r"\+ foo$", - r"\+ foo : oops$"]) - - def testAssertLess(self): - self.assertMessages('assertLess', (2, 1), - ["^2 not less than 1$", "^oops$", - "^2 not less than 1$", "^2 not less than 1 : oops$"]) - - def testAssertLessEqual(self): - self.assertMessages('assertLessEqual', (2, 1), - ["^2 not less than or equal to 1$", "^oops$", - "^2 not less than or equal to 1$", - "^2 not less than or equal to 1 : oops$"]) - - def testAssertGreater(self): - self.assertMessages('assertGreater', (1, 2), - ["^1 not greater than 2$", "^oops$", - "^1 not greater than 2$", - "^1 not greater than 2 : oops$"]) - - def testAssertGreaterEqual(self): - self.assertMessages('assertGreaterEqual', (1, 2), - ["^1 not greater than or equal to 2$", "^oops$", - "^1 not greater than or equal to 2$", - "^1 not greater than or equal to 2 : oops$"]) - - def testAssertIsNone(self): - self.assertMessages('assertIsNone', ('not None',), - ["^'not None' is not None$", "^oops$", - "^'not None' is not None$", - "^'not None' is not None : oops$"]) - - def testAssertIsNotNone(self): - self.assertMessages('assertIsNotNone', (None,), - ["^unexpectedly None$", "^oops$", - "^unexpectedly None$", - "^unexpectedly None : oops$"]) - - def testAssertIs(self): - self.assertMessages('assertIs', (None, 'foo'), - ["^None is not 'foo'$", "^oops$", - "^None is not 'foo'$", - "^None is not 'foo' : oops$"]) - - def testAssertIsNot(self): - self.assertMessages('assertIsNot', (None, None), - ["^unexpectedly identical: None$", "^oops$", - "^unexpectedly identical: None$", - "^unexpectedly identical: None : oops$"]) - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_break.py b/PythonLib/full/unittest/test/test_break.py deleted file mode 100644 index dab91c13..00000000 --- a/PythonLib/full/unittest/test/test_break.py +++ /dev/null @@ -1,284 +0,0 @@ -import gc -import os -import sys -import signal -import weakref - -from cStringIO import StringIO - - -import unittest - - -@unittest.skipUnless(hasattr(os, 'kill'), "Test requires os.kill") -@unittest.skipIf(sys.platform =="win32", "Test cannot run on Windows") -@unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " - "if threads have been used") -class TestBreak(unittest.TestCase): - int_handler = None - - def setUp(self): - self._default_handler = signal.getsignal(signal.SIGINT) - if self.int_handler is not None: - signal.signal(signal.SIGINT, self.int_handler) - - def tearDown(self): - signal.signal(signal.SIGINT, self._default_handler) - unittest.signals._results = weakref.WeakKeyDictionary() - unittest.signals._interrupt_handler = None - - - def testInstallHandler(self): - default_handler = signal.getsignal(signal.SIGINT) - unittest.installHandler() - self.assertNotEqual(signal.getsignal(signal.SIGINT), default_handler) - - try: - pid = os.getpid() - os.kill(pid, signal.SIGINT) - except KeyboardInterrupt: - self.fail("KeyboardInterrupt not handled") - - self.assertTrue(unittest.signals._interrupt_handler.called) - - def testRegisterResult(self): - result = unittest.TestResult() - unittest.registerResult(result) - - for ref in unittest.signals._results: - if ref is result: - break - elif ref is not result: - self.fail("odd object in result set") - else: - self.fail("result not found") - - - def testInterruptCaught(self): - default_handler = signal.getsignal(signal.SIGINT) - - result = unittest.TestResult() - unittest.installHandler() - unittest.registerResult(result) - - self.assertNotEqual(signal.getsignal(signal.SIGINT), default_handler) - - def test(result): - pid = os.getpid() - os.kill(pid, signal.SIGINT) - result.breakCaught = True - self.assertTrue(result.shouldStop) - - try: - test(result) - except KeyboardInterrupt: - self.fail("KeyboardInterrupt not handled") - self.assertTrue(result.breakCaught) - - - def testSecondInterrupt(self): - # Can't use skipIf decorator because the signal handler may have - # been changed after defining this method. - if signal.getsignal(signal.SIGINT) == signal.SIG_IGN: - self.skipTest("test requires SIGINT to not be ignored") - result = unittest.TestResult() - unittest.installHandler() - unittest.registerResult(result) - - def test(result): - pid = os.getpid() - os.kill(pid, signal.SIGINT) - result.breakCaught = True - self.assertTrue(result.shouldStop) - os.kill(pid, signal.SIGINT) - self.fail("Second KeyboardInterrupt not raised") - - try: - test(result) - except KeyboardInterrupt: - pass - else: - self.fail("Second KeyboardInterrupt not raised") - self.assertTrue(result.breakCaught) - - - def testTwoResults(self): - unittest.installHandler() - - result = unittest.TestResult() - unittest.registerResult(result) - new_handler = signal.getsignal(signal.SIGINT) - - result2 = unittest.TestResult() - unittest.registerResult(result2) - self.assertEqual(signal.getsignal(signal.SIGINT), new_handler) - - result3 = unittest.TestResult() - - def test(result): - pid = os.getpid() - os.kill(pid, signal.SIGINT) - - try: - test(result) - except KeyboardInterrupt: - self.fail("KeyboardInterrupt not handled") - - self.assertTrue(result.shouldStop) - self.assertTrue(result2.shouldStop) - self.assertFalse(result3.shouldStop) - - - def testHandlerReplacedButCalled(self): - # Can't use skipIf decorator because the signal handler may have - # been changed after defining this method. - if signal.getsignal(signal.SIGINT) == signal.SIG_IGN: - self.skipTest("test requires SIGINT to not be ignored") - # If our handler has been replaced (is no longer installed) but is - # called by the *new* handler, then it isn't safe to delay the - # SIGINT and we should immediately delegate to the default handler - unittest.installHandler() - - handler = signal.getsignal(signal.SIGINT) - def new_handler(frame, signum): - handler(frame, signum) - signal.signal(signal.SIGINT, new_handler) - - try: - pid = os.getpid() - os.kill(pid, signal.SIGINT) - except KeyboardInterrupt: - pass - else: - self.fail("replaced but delegated handler doesn't raise interrupt") - - def testRunner(self): - # Creating a TextTestRunner with the appropriate argument should - # register the TextTestResult it creates - runner = unittest.TextTestRunner(stream=StringIO()) - - result = runner.run(unittest.TestSuite()) - self.assertIn(result, unittest.signals._results) - - def testWeakReferences(self): - # Calling registerResult on a result should not keep it alive - result = unittest.TestResult() - unittest.registerResult(result) - - ref = weakref.ref(result) - del result - - # For non-reference counting implementations - gc.collect();gc.collect() - self.assertIsNone(ref()) - - - def testRemoveResult(self): - result = unittest.TestResult() - unittest.registerResult(result) - - unittest.installHandler() - self.assertTrue(unittest.removeResult(result)) - - # Should this raise an error instead? - self.assertFalse(unittest.removeResult(unittest.TestResult())) - - try: - pid = os.getpid() - os.kill(pid, signal.SIGINT) - except KeyboardInterrupt: - pass - - self.assertFalse(result.shouldStop) - - def testMainInstallsHandler(self): - failfast = object() - test = object() - verbosity = object() - result = object() - default_handler = signal.getsignal(signal.SIGINT) - - class FakeRunner(object): - initArgs = [] - runArgs = [] - def __init__(self, *args, **kwargs): - self.initArgs.append((args, kwargs)) - def run(self, test): - self.runArgs.append(test) - return result - - class Program(unittest.TestProgram): - def __init__(self, catchbreak): - self.exit = False - self.verbosity = verbosity - self.failfast = failfast - self.catchbreak = catchbreak - self.testRunner = FakeRunner - self.test = test - self.result = None - - p = Program(False) - p.runTests() - - self.assertEqual(FakeRunner.initArgs, [((), {'buffer': None, - 'verbosity': verbosity, - 'failfast': failfast})]) - self.assertEqual(FakeRunner.runArgs, [test]) - self.assertEqual(p.result, result) - - self.assertEqual(signal.getsignal(signal.SIGINT), default_handler) - - FakeRunner.initArgs = [] - FakeRunner.runArgs = [] - p = Program(True) - p.runTests() - - self.assertEqual(FakeRunner.initArgs, [((), {'buffer': None, - 'verbosity': verbosity, - 'failfast': failfast})]) - self.assertEqual(FakeRunner.runArgs, [test]) - self.assertEqual(p.result, result) - - self.assertNotEqual(signal.getsignal(signal.SIGINT), default_handler) - - def testRemoveHandler(self): - default_handler = signal.getsignal(signal.SIGINT) - unittest.installHandler() - unittest.removeHandler() - self.assertEqual(signal.getsignal(signal.SIGINT), default_handler) - - # check that calling removeHandler multiple times has no ill-effect - unittest.removeHandler() - self.assertEqual(signal.getsignal(signal.SIGINT), default_handler) - - def testRemoveHandlerAsDecorator(self): - default_handler = signal.getsignal(signal.SIGINT) - unittest.installHandler() - - @unittest.removeHandler - def test(): - self.assertEqual(signal.getsignal(signal.SIGINT), default_handler) - - test() - self.assertNotEqual(signal.getsignal(signal.SIGINT), default_handler) - -@unittest.skipUnless(hasattr(os, 'kill'), "Test requires os.kill") -@unittest.skipIf(sys.platform =="win32", "Test cannot run on Windows") -@unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " - "if threads have been used") -class TestBreakDefaultIntHandler(TestBreak): - int_handler = signal.default_int_handler - -@unittest.skipUnless(hasattr(os, 'kill'), "Test requires os.kill") -@unittest.skipIf(sys.platform =="win32", "Test cannot run on Windows") -@unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " - "if threads have been used") -class TestBreakSignalIgnored(TestBreak): - int_handler = signal.SIG_IGN - -@unittest.skipUnless(hasattr(os, 'kill'), "Test requires os.kill") -@unittest.skipIf(sys.platform =="win32", "Test cannot run on Windows") -@unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " - "if threads have been used") -class TestBreakSignalDefault(TestBreak): - int_handler = signal.SIG_DFL diff --git a/PythonLib/full/unittest/test/test_case.py b/PythonLib/full/unittest/test/test_case.py deleted file mode 100644 index e92b0191..00000000 --- a/PythonLib/full/unittest/test/test_case.py +++ /dev/null @@ -1,1124 +0,0 @@ -import difflib -import pprint -import pickle -import re -import sys - -from copy import deepcopy -from test import test_support - -import unittest - -from .support import ( - TestEquality, TestHashing, LoggingResult, ResultWithNoStartTestRunStopTestRun -) - - -class Test(object): - "Keep these TestCase classes out of the main namespace" - - class Foo(unittest.TestCase): - def runTest(self): pass - def test1(self): pass - - class Bar(Foo): - def test2(self): pass - - class LoggingTestCase(unittest.TestCase): - """A test case which logs its calls.""" - - def __init__(self, events): - super(Test.LoggingTestCase, self).__init__('test') - self.events = events - - def setUp(self): - self.events.append('setUp') - - def test(self): - self.events.append('test') - - def tearDown(self): - self.events.append('tearDown') - - -class Test_TestCase(unittest.TestCase, TestEquality, TestHashing): - - ### Set up attributes used by inherited tests - ################################################################ - - # Used by TestHashing.test_hash and TestEquality.test_eq - eq_pairs = [(Test.Foo('test1'), Test.Foo('test1'))] - - # Used by TestEquality.test_ne - ne_pairs = [(Test.Foo('test1'), Test.Foo('runTest')) - ,(Test.Foo('test1'), Test.Bar('test1')) - ,(Test.Foo('test1'), Test.Bar('test2'))] - - ################################################################ - ### /Set up attributes used by inherited tests - - - # "class TestCase([methodName])" - # ... - # "Each instance of TestCase will run a single test method: the - # method named methodName." - # ... - # "methodName defaults to "runTest"." - # - # Make sure it really is optional, and that it defaults to the proper - # thing. - def test_init__no_test_name(self): - class Test(unittest.TestCase): - def runTest(self): raise TypeError() - def test(self): pass - - self.assertEqual(Test().id()[-13:], '.Test.runTest') - - # "class TestCase([methodName])" - # ... - # "Each instance of TestCase will run a single test method: the - # method named methodName." - def test_init__test_name__valid(self): - class Test(unittest.TestCase): - def runTest(self): raise TypeError() - def test(self): pass - - self.assertEqual(Test('test').id()[-10:], '.Test.test') - - # "class TestCase([methodName])" - # ... - # "Each instance of TestCase will run a single test method: the - # method named methodName." - def test_init__test_name__invalid(self): - class Test(unittest.TestCase): - def runTest(self): raise TypeError() - def test(self): pass - - try: - Test('testfoo') - except ValueError: - pass - else: - self.fail("Failed to raise ValueError") - - # "Return the number of tests represented by the this test object. For - # TestCase instances, this will always be 1" - def test_countTestCases(self): - class Foo(unittest.TestCase): - def test(self): pass - - self.assertEqual(Foo('test').countTestCases(), 1) - - # "Return the default type of test result object to be used to run this - # test. For TestCase instances, this will always be - # unittest.TestResult; subclasses of TestCase should - # override this as necessary." - def test_defaultTestResult(self): - class Foo(unittest.TestCase): - def runTest(self): - pass - - result = Foo().defaultTestResult() - self.assertEqual(type(result), unittest.TestResult) - - # "When a setUp() method is defined, the test runner will run that method - # prior to each test. Likewise, if a tearDown() method is defined, the - # test runner will invoke that method after each test. In the example, - # setUp() was used to create a fresh sequence for each test." - # - # Make sure the proper call order is maintained, even if setUp() raises - # an exception. - def test_run_call_order__error_in_setUp(self): - events = [] - result = LoggingResult(events) - - class Foo(Test.LoggingTestCase): - def setUp(self): - super(Foo, self).setUp() - raise RuntimeError('raised by Foo.setUp') - - Foo(events).run(result) - expected = ['startTest', 'setUp', 'addError', 'stopTest'] - self.assertEqual(events, expected) - - # "With a temporary result stopTestRun is called when setUp errors. - def test_run_call_order__error_in_setUp_default_result(self): - events = [] - - class Foo(Test.LoggingTestCase): - def defaultTestResult(self): - return LoggingResult(self.events) - - def setUp(self): - super(Foo, self).setUp() - raise RuntimeError('raised by Foo.setUp') - - Foo(events).run() - expected = ['startTestRun', 'startTest', 'setUp', 'addError', - 'stopTest', 'stopTestRun'] - self.assertEqual(events, expected) - - # "When a setUp() method is defined, the test runner will run that method - # prior to each test. Likewise, if a tearDown() method is defined, the - # test runner will invoke that method after each test. In the example, - # setUp() was used to create a fresh sequence for each test." - # - # Make sure the proper call order is maintained, even if the test raises - # an error (as opposed to a failure). - def test_run_call_order__error_in_test(self): - events = [] - result = LoggingResult(events) - - class Foo(Test.LoggingTestCase): - def test(self): - super(Foo, self).test() - raise RuntimeError('raised by Foo.test') - - expected = ['startTest', 'setUp', 'test', 'addError', 'tearDown', - 'stopTest'] - Foo(events).run(result) - self.assertEqual(events, expected) - - # "With a default result, an error in the test still results in stopTestRun - # being called." - def test_run_call_order__error_in_test_default_result(self): - events = [] - - class Foo(Test.LoggingTestCase): - def defaultTestResult(self): - return LoggingResult(self.events) - - def test(self): - super(Foo, self).test() - raise RuntimeError('raised by Foo.test') - - expected = ['startTestRun', 'startTest', 'setUp', 'test', 'addError', - 'tearDown', 'stopTest', 'stopTestRun'] - Foo(events).run() - self.assertEqual(events, expected) - - # "When a setUp() method is defined, the test runner will run that method - # prior to each test. Likewise, if a tearDown() method is defined, the - # test runner will invoke that method after each test. In the example, - # setUp() was used to create a fresh sequence for each test." - # - # Make sure the proper call order is maintained, even if the test signals - # a failure (as opposed to an error). - def test_run_call_order__failure_in_test(self): - events = [] - result = LoggingResult(events) - - class Foo(Test.LoggingTestCase): - def test(self): - super(Foo, self).test() - self.fail('raised by Foo.test') - - expected = ['startTest', 'setUp', 'test', 'addFailure', 'tearDown', - 'stopTest'] - Foo(events).run(result) - self.assertEqual(events, expected) - - # "When a test fails with a default result stopTestRun is still called." - def test_run_call_order__failure_in_test_default_result(self): - - class Foo(Test.LoggingTestCase): - def defaultTestResult(self): - return LoggingResult(self.events) - def test(self): - super(Foo, self).test() - self.fail('raised by Foo.test') - - expected = ['startTestRun', 'startTest', 'setUp', 'test', 'addFailure', - 'tearDown', 'stopTest', 'stopTestRun'] - events = [] - Foo(events).run() - self.assertEqual(events, expected) - - # "When a setUp() method is defined, the test runner will run that method - # prior to each test. Likewise, if a tearDown() method is defined, the - # test runner will invoke that method after each test. In the example, - # setUp() was used to create a fresh sequence for each test." - # - # Make sure the proper call order is maintained, even if tearDown() raises - # an exception. - def test_run_call_order__error_in_tearDown(self): - events = [] - result = LoggingResult(events) - - class Foo(Test.LoggingTestCase): - def tearDown(self): - super(Foo, self).tearDown() - raise RuntimeError('raised by Foo.tearDown') - - Foo(events).run(result) - expected = ['startTest', 'setUp', 'test', 'tearDown', 'addError', - 'stopTest'] - self.assertEqual(events, expected) - - # "When tearDown errors with a default result stopTestRun is still called." - def test_run_call_order__error_in_tearDown_default_result(self): - - class Foo(Test.LoggingTestCase): - def defaultTestResult(self): - return LoggingResult(self.events) - def tearDown(self): - super(Foo, self).tearDown() - raise RuntimeError('raised by Foo.tearDown') - - events = [] - Foo(events).run() - expected = ['startTestRun', 'startTest', 'setUp', 'test', 'tearDown', - 'addError', 'stopTest', 'stopTestRun'] - self.assertEqual(events, expected) - - # "TestCase.run() still works when the defaultTestResult is a TestResult - # that does not support startTestRun and stopTestRun. - def test_run_call_order_default_result(self): - - class Foo(unittest.TestCase): - def defaultTestResult(self): - return ResultWithNoStartTestRunStopTestRun() - def test(self): - pass - - Foo('test').run() - - # "This class attribute gives the exception raised by the test() method. - # If a test framework needs to use a specialized exception, possibly to - # carry additional information, it must subclass this exception in - # order to ``play fair'' with the framework. The initial value of this - # attribute is AssertionError" - def test_failureException__default(self): - class Foo(unittest.TestCase): - def test(self): - pass - - self.assertTrue(Foo('test').failureException is AssertionError) - - # "This class attribute gives the exception raised by the test() method. - # If a test framework needs to use a specialized exception, possibly to - # carry additional information, it must subclass this exception in - # order to ``play fair'' with the framework." - # - # Make sure TestCase.run() respects the designated failureException - def test_failureException__subclassing__explicit_raise(self): - events = [] - result = LoggingResult(events) - - class Foo(unittest.TestCase): - def test(self): - raise RuntimeError() - - failureException = RuntimeError - - self.assertTrue(Foo('test').failureException is RuntimeError) - - - Foo('test').run(result) - expected = ['startTest', 'addFailure', 'stopTest'] - self.assertEqual(events, expected) - - # "This class attribute gives the exception raised by the test() method. - # If a test framework needs to use a specialized exception, possibly to - # carry additional information, it must subclass this exception in - # order to ``play fair'' with the framework." - # - # Make sure TestCase.run() respects the designated failureException - def test_failureException__subclassing__implicit_raise(self): - events = [] - result = LoggingResult(events) - - class Foo(unittest.TestCase): - def test(self): - self.fail("foo") - - failureException = RuntimeError - - self.assertTrue(Foo('test').failureException is RuntimeError) - - - Foo('test').run(result) - expected = ['startTest', 'addFailure', 'stopTest'] - self.assertEqual(events, expected) - - # "The default implementation does nothing." - def test_setUp(self): - class Foo(unittest.TestCase): - def runTest(self): - pass - - # ... and nothing should happen - Foo().setUp() - - # "The default implementation does nothing." - def test_tearDown(self): - class Foo(unittest.TestCase): - def runTest(self): - pass - - # ... and nothing should happen - Foo().tearDown() - - # "Return a string identifying the specific test case." - # - # Because of the vague nature of the docs, I'm not going to lock this - # test down too much. Really all that can be asserted is that the id() - # will be a string (either 8-byte or unicode -- again, because the docs - # just say "string") - def test_id(self): - class Foo(unittest.TestCase): - def runTest(self): - pass - - self.assertIsInstance(Foo().id(), basestring) - - # "If result is omitted or None, a temporary result object is created - # and used, but is not made available to the caller. As TestCase owns the - # temporary result startTestRun and stopTestRun are called. - - def test_run__uses_defaultTestResult(self): - events = [] - - class Foo(unittest.TestCase): - def test(self): - events.append('test') - - def defaultTestResult(self): - return LoggingResult(events) - - # Make run() find a result object on its own - Foo('test').run() - - expected = ['startTestRun', 'startTest', 'test', 'addSuccess', - 'stopTest', 'stopTestRun'] - self.assertEqual(events, expected) - - def testShortDescriptionWithoutDocstring(self): - self.assertIsNone(self.shortDescription()) - - @unittest.skipIf(sys.flags.optimize >= 2, - "Docstrings are omitted with -O2 and above") - def testShortDescriptionWithOneLineDocstring(self): - """Tests shortDescription() for a method with a docstring.""" - self.assertEqual( - self.shortDescription(), - 'Tests shortDescription() for a method with a docstring.') - - @unittest.skipIf(sys.flags.optimize >= 2, - "Docstrings are omitted with -O2 and above") - def testShortDescriptionWithMultiLineDocstring(self): - """Tests shortDescription() for a method with a longer docstring. - - This method ensures that only the first line of a docstring is - returned used in the short description, no matter how long the - whole thing is. - """ - self.assertEqual( - self.shortDescription(), - 'Tests shortDescription() for a method with a longer ' - 'docstring.') - - def testAddTypeEqualityFunc(self): - class SadSnake(object): - """Dummy class for test_addTypeEqualityFunc.""" - s1, s2 = SadSnake(), SadSnake() - self.assertNotEqual(s1, s2) - def AllSnakesCreatedEqual(a, b, msg=None): - return type(a) is type(b) is SadSnake - self.addTypeEqualityFunc(SadSnake, AllSnakesCreatedEqual) - self.assertEqual(s1, s2) - # No this doesn't clean up and remove the SadSnake equality func - # from this TestCase instance but since its a local nothing else - # will ever notice that. - - def testAssertIs(self): - thing = object() - self.assertIs(thing, thing) - self.assertRaises(self.failureException, self.assertIs, thing, object()) - - def testAssertIsNot(self): - thing = object() - self.assertIsNot(thing, object()) - self.assertRaises(self.failureException, self.assertIsNot, thing, thing) - - def testAssertIsInstance(self): - thing = [] - self.assertIsInstance(thing, list) - self.assertRaises(self.failureException, self.assertIsInstance, - thing, dict) - - def testAssertNotIsInstance(self): - thing = [] - self.assertNotIsInstance(thing, dict) - self.assertRaises(self.failureException, self.assertNotIsInstance, - thing, list) - - def testAssertIn(self): - animals = {'monkey': 'banana', 'cow': 'grass', 'seal': 'fish'} - - self.assertIn('a', 'abc') - self.assertIn(2, [1, 2, 3]) - self.assertIn('monkey', animals) - - self.assertNotIn('d', 'abc') - self.assertNotIn(0, [1, 2, 3]) - self.assertNotIn('otter', animals) - - self.assertRaises(self.failureException, self.assertIn, 'x', 'abc') - self.assertRaises(self.failureException, self.assertIn, 4, [1, 2, 3]) - self.assertRaises(self.failureException, self.assertIn, 'elephant', - animals) - - self.assertRaises(self.failureException, self.assertNotIn, 'c', 'abc') - self.assertRaises(self.failureException, self.assertNotIn, 1, [1, 2, 3]) - self.assertRaises(self.failureException, self.assertNotIn, 'cow', - animals) - - def testAssertDictContainsSubset(self): - self.assertDictContainsSubset({}, {}) - self.assertDictContainsSubset({}, {'a': 1}) - self.assertDictContainsSubset({'a': 1}, {'a': 1}) - self.assertDictContainsSubset({'a': 1}, {'a': 1, 'b': 2}) - self.assertDictContainsSubset({'a': 1, 'b': 2}, {'a': 1, 'b': 2}) - - with self.assertRaises(self.failureException): - self.assertDictContainsSubset({1: "one"}, {}) - - with self.assertRaises(self.failureException): - self.assertDictContainsSubset({'a': 2}, {'a': 1}) - - with self.assertRaises(self.failureException): - self.assertDictContainsSubset({'c': 1}, {'a': 1}) - - with self.assertRaises(self.failureException): - self.assertDictContainsSubset({'a': 1, 'c': 1}, {'a': 1}) - - with self.assertRaises(self.failureException): - self.assertDictContainsSubset({'a': 1, 'c': 1}, {'a': 1}) - - with test_support.check_warnings(("", UnicodeWarning)): - one = ''.join(chr(i) for i in range(255)) - # this used to cause a UnicodeDecodeError constructing the failure msg - with self.assertRaises(self.failureException): - self.assertDictContainsSubset({'foo': one}, {'foo': u'\uFFFD'}) - - def testAssertEqual(self): - equal_pairs = [ - ((), ()), - ({}, {}), - ([], []), - (set(), set()), - (frozenset(), frozenset())] - for a, b in equal_pairs: - # This mess of try excepts is to test the assertEqual behavior - # itself. - try: - self.assertEqual(a, b) - except self.failureException: - self.fail('assertEqual(%r, %r) failed' % (a, b)) - try: - self.assertEqual(a, b, msg='foo') - except self.failureException: - self.fail('assertEqual(%r, %r) with msg= failed' % (a, b)) - try: - self.assertEqual(a, b, 'foo') - except self.failureException: - self.fail('assertEqual(%r, %r) with third parameter failed' % - (a, b)) - - unequal_pairs = [ - ((), []), - ({}, set()), - (set([4,1]), frozenset([4,2])), - (frozenset([4,5]), set([2,3])), - (set([3,4]), set([5,4]))] - for a, b in unequal_pairs: - self.assertRaises(self.failureException, self.assertEqual, a, b) - self.assertRaises(self.failureException, self.assertEqual, a, b, - 'foo') - self.assertRaises(self.failureException, self.assertEqual, a, b, - msg='foo') - - def testEquality(self): - self.assertListEqual([], []) - self.assertTupleEqual((), ()) - self.assertSequenceEqual([], ()) - - a = [0, 'a', []] - b = [] - self.assertRaises(unittest.TestCase.failureException, - self.assertListEqual, a, b) - self.assertRaises(unittest.TestCase.failureException, - self.assertListEqual, tuple(a), tuple(b)) - self.assertRaises(unittest.TestCase.failureException, - self.assertSequenceEqual, a, tuple(b)) - - b.extend(a) - self.assertListEqual(a, b) - self.assertTupleEqual(tuple(a), tuple(b)) - self.assertSequenceEqual(a, tuple(b)) - self.assertSequenceEqual(tuple(a), b) - - self.assertRaises(self.failureException, self.assertListEqual, - a, tuple(b)) - self.assertRaises(self.failureException, self.assertTupleEqual, - tuple(a), b) - self.assertRaises(self.failureException, self.assertListEqual, None, b) - self.assertRaises(self.failureException, self.assertTupleEqual, None, - tuple(b)) - self.assertRaises(self.failureException, self.assertSequenceEqual, - None, tuple(b)) - self.assertRaises(self.failureException, self.assertListEqual, 1, 1) - self.assertRaises(self.failureException, self.assertTupleEqual, 1, 1) - self.assertRaises(self.failureException, self.assertSequenceEqual, - 1, 1) - - self.assertDictEqual({}, {}) - - c = { 'x': 1 } - d = {} - self.assertRaises(unittest.TestCase.failureException, - self.assertDictEqual, c, d) - - d.update(c) - self.assertDictEqual(c, d) - - d['x'] = 0 - self.assertRaises(unittest.TestCase.failureException, - self.assertDictEqual, c, d, 'These are unequal') - - self.assertRaises(self.failureException, self.assertDictEqual, None, d) - self.assertRaises(self.failureException, self.assertDictEqual, [], d) - self.assertRaises(self.failureException, self.assertDictEqual, 1, 1) - - def testAssertSequenceEqualMaxDiff(self): - self.assertEqual(self.maxDiff, 80*8) - seq1 = 'a' + 'x' * 80**2 - seq2 = 'b' + 'x' * 80**2 - diff = '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(), - pprint.pformat(seq2).splitlines())) - # the +1 is the leading \n added by assertSequenceEqual - omitted = unittest.case.DIFF_OMITTED % (len(diff) + 1,) - - self.maxDiff = len(diff)//2 - try: - self.assertSequenceEqual(seq1, seq2) - except self.failureException as e: - msg = e.args[0] - else: - self.fail('assertSequenceEqual did not fail.') - self.assertTrue(len(msg) < len(diff)) - self.assertIn(omitted, msg) - - self.maxDiff = len(diff) * 2 - try: - self.assertSequenceEqual(seq1, seq2) - except self.failureException as e: - msg = e.args[0] - else: - self.fail('assertSequenceEqual did not fail.') - self.assertTrue(len(msg) > len(diff)) - self.assertNotIn(omitted, msg) - - self.maxDiff = None - try: - self.assertSequenceEqual(seq1, seq2) - except self.failureException as e: - msg = e.args[0] - else: - self.fail('assertSequenceEqual did not fail.') - self.assertTrue(len(msg) > len(diff)) - self.assertNotIn(omitted, msg) - - def testTruncateMessage(self): - self.maxDiff = 1 - message = self._truncateMessage('foo', 'bar') - omitted = unittest.case.DIFF_OMITTED % len('bar') - self.assertEqual(message, 'foo' + omitted) - - self.maxDiff = None - message = self._truncateMessage('foo', 'bar') - self.assertEqual(message, 'foobar') - - self.maxDiff = 4 - message = self._truncateMessage('foo', 'bar') - self.assertEqual(message, 'foobar') - - def testAssertDictEqualTruncates(self): - test = unittest.TestCase('assertEqual') - def truncate(msg, diff): - return 'foo' - test._truncateMessage = truncate - try: - test.assertDictEqual({}, {1: 0}) - except self.failureException as e: - self.assertEqual(str(e), 'foo') - else: - self.fail('assertDictEqual did not fail') - - def testAssertMultiLineEqualTruncates(self): - test = unittest.TestCase('assertEqual') - def truncate(msg, diff): - return 'foo' - test._truncateMessage = truncate - try: - test.assertMultiLineEqual('foo', 'bar') - except self.failureException as e: - self.assertEqual(str(e), 'foo') - else: - self.fail('assertMultiLineEqual did not fail') - - def testAssertEqual_diffThreshold(self): - # check threshold value - self.assertEqual(self._diffThreshold, 2**16) - # disable madDiff to get diff markers - self.maxDiff = None - - # set a lower threshold value and add a cleanup to restore it - old_threshold = self._diffThreshold - self._diffThreshold = 2**8 - self.addCleanup(lambda: setattr(self, '_diffThreshold', old_threshold)) - - # under the threshold: diff marker (^) in error message - s = u'x' * (2**7) - with self.assertRaises(self.failureException) as cm: - self.assertEqual(s + 'a', s + 'b') - self.assertIn('^', str(cm.exception)) - self.assertEqual(s + 'a', s + 'a') - - # over the threshold: diff not used and marker (^) not in error message - s = u'x' * (2**9) - # if the path that uses difflib is taken, _truncateMessage will be - # called -- replace it with explodingTruncation to verify that this - # doesn't happen - def explodingTruncation(message, diff): - raise SystemError('this should not be raised') - old_truncate = self._truncateMessage - self._truncateMessage = explodingTruncation - self.addCleanup(lambda: setattr(self, '_truncateMessage', old_truncate)) - - s1, s2 = s + 'a', s + 'b' - with self.assertRaises(self.failureException) as cm: - self.assertEqual(s1, s2) - self.assertNotIn('^', str(cm.exception)) - self.assertEqual(str(cm.exception), '%r != %r' % (s1, s2)) - self.assertEqual(s + 'a', s + 'a') - - def testAssertItemsEqual(self): - a = object() - self.assertItemsEqual([1, 2, 3], [3, 2, 1]) - self.assertItemsEqual(['foo', 'bar', 'baz'], ['bar', 'baz', 'foo']) - self.assertItemsEqual([a, a, 2, 2, 3], (a, 2, 3, a, 2)) - self.assertItemsEqual([1, "2", "a", "a"], ["a", "2", True, "a"]) - self.assertRaises(self.failureException, self.assertItemsEqual, - [1, 2] + [3] * 100, [1] * 100 + [2, 3]) - self.assertRaises(self.failureException, self.assertItemsEqual, - [1, "2", "a", "a"], ["a", "2", True, 1]) - self.assertRaises(self.failureException, self.assertItemsEqual, - [10], [10, 11]) - self.assertRaises(self.failureException, self.assertItemsEqual, - [10, 11], [10]) - self.assertRaises(self.failureException, self.assertItemsEqual, - [10, 11, 10], [10, 11]) - - # Test that sequences of unhashable objects can be tested for sameness: - self.assertItemsEqual([[1, 2], [3, 4], 0], [False, [3, 4], [1, 2]]) - # Test that iterator of unhashable objects can be tested for sameness: - self.assertItemsEqual(iter([1, 2, [], 3, 4]), - iter([1, 2, [], 3, 4])) - - # hashable types, but not orderable - self.assertRaises(self.failureException, self.assertItemsEqual, - [], [divmod, 'x', 1, 5j, 2j, frozenset()]) - # comparing dicts - self.assertItemsEqual([{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 1}]) - # comparing heterogenous non-hashable sequences - self.assertItemsEqual([1, 'x', divmod, []], [divmod, [], 'x', 1]) - self.assertRaises(self.failureException, self.assertItemsEqual, - [], [divmod, [], 'x', 1, 5j, 2j, set()]) - self.assertRaises(self.failureException, self.assertItemsEqual, - [[1]], [[2]]) - - # Same elements, but not same sequence length - self.assertRaises(self.failureException, self.assertItemsEqual, - [1, 1, 2], [2, 1]) - self.assertRaises(self.failureException, self.assertItemsEqual, - [1, 1, "2", "a", "a"], ["2", "2", True, "a"]) - self.assertRaises(self.failureException, self.assertItemsEqual, - [1, {'b': 2}, None, True], [{'b': 2}, True, None]) - - # Same elements which don't reliably compare, in - # different order, see issue 10242 - a = [{2,4}, {1,2}] - b = a[::-1] - self.assertItemsEqual(a, b) - - # test utility functions supporting assertItemsEqual() - - diffs = set(unittest.util._count_diff_all_purpose('aaabccd', 'abbbcce')) - expected = {(3,1,'a'), (1,3,'b'), (1,0,'d'), (0,1,'e')} - self.assertEqual(diffs, expected) - - diffs = unittest.util._count_diff_all_purpose([[]], []) - self.assertEqual(diffs, [(1, 0, [])]) - - diffs = set(unittest.util._count_diff_hashable('aaabccd', 'abbbcce')) - expected = {(3,1,'a'), (1,3,'b'), (1,0,'d'), (0,1,'e')} - self.assertEqual(diffs, expected) - - def testAssertSetEqual(self): - set1 = set() - set2 = set() - self.assertSetEqual(set1, set2) - - self.assertRaises(self.failureException, self.assertSetEqual, None, set2) - self.assertRaises(self.failureException, self.assertSetEqual, [], set2) - self.assertRaises(self.failureException, self.assertSetEqual, set1, None) - self.assertRaises(self.failureException, self.assertSetEqual, set1, []) - - set1 = set(['a']) - set2 = set() - self.assertRaises(self.failureException, self.assertSetEqual, set1, set2) - - set1 = set(['a']) - set2 = set(['a']) - self.assertSetEqual(set1, set2) - - set1 = set(['a']) - set2 = set(['a', 'b']) - self.assertRaises(self.failureException, self.assertSetEqual, set1, set2) - - set1 = set(['a']) - set2 = frozenset(['a', 'b']) - self.assertRaises(self.failureException, self.assertSetEqual, set1, set2) - - set1 = set(['a', 'b']) - set2 = frozenset(['a', 'b']) - self.assertSetEqual(set1, set2) - - set1 = set() - set2 = "foo" - self.assertRaises(self.failureException, self.assertSetEqual, set1, set2) - self.assertRaises(self.failureException, self.assertSetEqual, set2, set1) - - # make sure any string formatting is tuple-safe - set1 = set([(0, 1), (2, 3)]) - set2 = set([(4, 5)]) - self.assertRaises(self.failureException, self.assertSetEqual, set1, set2) - - def testInequality(self): - # Try ints - self.assertGreater(2, 1) - self.assertGreaterEqual(2, 1) - self.assertGreaterEqual(1, 1) - self.assertLess(1, 2) - self.assertLessEqual(1, 2) - self.assertLessEqual(1, 1) - self.assertRaises(self.failureException, self.assertGreater, 1, 2) - self.assertRaises(self.failureException, self.assertGreater, 1, 1) - self.assertRaises(self.failureException, self.assertGreaterEqual, 1, 2) - self.assertRaises(self.failureException, self.assertLess, 2, 1) - self.assertRaises(self.failureException, self.assertLess, 1, 1) - self.assertRaises(self.failureException, self.assertLessEqual, 2, 1) - - # Try Floats - self.assertGreater(1.1, 1.0) - self.assertGreaterEqual(1.1, 1.0) - self.assertGreaterEqual(1.0, 1.0) - self.assertLess(1.0, 1.1) - self.assertLessEqual(1.0, 1.1) - self.assertLessEqual(1.0, 1.0) - self.assertRaises(self.failureException, self.assertGreater, 1.0, 1.1) - self.assertRaises(self.failureException, self.assertGreater, 1.0, 1.0) - self.assertRaises(self.failureException, self.assertGreaterEqual, 1.0, 1.1) - self.assertRaises(self.failureException, self.assertLess, 1.1, 1.0) - self.assertRaises(self.failureException, self.assertLess, 1.0, 1.0) - self.assertRaises(self.failureException, self.assertLessEqual, 1.1, 1.0) - - # Try Strings - self.assertGreater('bug', 'ant') - self.assertGreaterEqual('bug', 'ant') - self.assertGreaterEqual('ant', 'ant') - self.assertLess('ant', 'bug') - self.assertLessEqual('ant', 'bug') - self.assertLessEqual('ant', 'ant') - self.assertRaises(self.failureException, self.assertGreater, 'ant', 'bug') - self.assertRaises(self.failureException, self.assertGreater, 'ant', 'ant') - self.assertRaises(self.failureException, self.assertGreaterEqual, 'ant', 'bug') - self.assertRaises(self.failureException, self.assertLess, 'bug', 'ant') - self.assertRaises(self.failureException, self.assertLess, 'ant', 'ant') - self.assertRaises(self.failureException, self.assertLessEqual, 'bug', 'ant') - - # Try Unicode - self.assertGreater(u'bug', u'ant') - self.assertGreaterEqual(u'bug', u'ant') - self.assertGreaterEqual(u'ant', u'ant') - self.assertLess(u'ant', u'bug') - self.assertLessEqual(u'ant', u'bug') - self.assertLessEqual(u'ant', u'ant') - self.assertRaises(self.failureException, self.assertGreater, u'ant', u'bug') - self.assertRaises(self.failureException, self.assertGreater, u'ant', u'ant') - self.assertRaises(self.failureException, self.assertGreaterEqual, u'ant', - u'bug') - self.assertRaises(self.failureException, self.assertLess, u'bug', u'ant') - self.assertRaises(self.failureException, self.assertLess, u'ant', u'ant') - self.assertRaises(self.failureException, self.assertLessEqual, u'bug', u'ant') - - # Try Mixed String/Unicode - self.assertGreater('bug', u'ant') - self.assertGreater(u'bug', 'ant') - self.assertGreaterEqual('bug', u'ant') - self.assertGreaterEqual(u'bug', 'ant') - self.assertGreaterEqual('ant', u'ant') - self.assertGreaterEqual(u'ant', 'ant') - self.assertLess('ant', u'bug') - self.assertLess(u'ant', 'bug') - self.assertLessEqual('ant', u'bug') - self.assertLessEqual(u'ant', 'bug') - self.assertLessEqual('ant', u'ant') - self.assertLessEqual(u'ant', 'ant') - self.assertRaises(self.failureException, self.assertGreater, 'ant', u'bug') - self.assertRaises(self.failureException, self.assertGreater, u'ant', 'bug') - self.assertRaises(self.failureException, self.assertGreater, 'ant', u'ant') - self.assertRaises(self.failureException, self.assertGreater, u'ant', 'ant') - self.assertRaises(self.failureException, self.assertGreaterEqual, 'ant', - u'bug') - self.assertRaises(self.failureException, self.assertGreaterEqual, u'ant', - 'bug') - self.assertRaises(self.failureException, self.assertLess, 'bug', u'ant') - self.assertRaises(self.failureException, self.assertLess, u'bug', 'ant') - self.assertRaises(self.failureException, self.assertLess, 'ant', u'ant') - self.assertRaises(self.failureException, self.assertLess, u'ant', 'ant') - self.assertRaises(self.failureException, self.assertLessEqual, 'bug', u'ant') - self.assertRaises(self.failureException, self.assertLessEqual, u'bug', 'ant') - - def testAssertMultiLineEqual(self): - sample_text = b"""\ -http://www.python.org/doc/2.3/lib/module-unittest.html -test case - A test case is the smallest unit of testing. [...] -""" - revised_sample_text = b"""\ -http://www.python.org/doc/2.4.1/lib/module-unittest.html -test case - A test case is the smallest unit of testing. [...] You may provide your - own implementation that does not subclass from TestCase, of course. -""" - sample_text_error = b"""\ -- http://www.python.org/doc/2.3/lib/module-unittest.html -? ^ -+ http://www.python.org/doc/2.4.1/lib/module-unittest.html -? ^^^ - test case -- A test case is the smallest unit of testing. [...] -+ A test case is the smallest unit of testing. [...] You may provide your -? +++++++++++++++++++++ -+ own implementation that does not subclass from TestCase, of course. -""" - self.maxDiff = None - for type_changer in (lambda x: x, lambda x: x.decode('utf8')): - try: - self.assertMultiLineEqual(type_changer(sample_text), - type_changer(revised_sample_text)) - except self.failureException, e: - # need to remove the first line of the error message - error = str(e).encode('utf8').split('\n', 1)[1] - - # assertMultiLineEqual is hooked up as the default for - # unicode strings - so we can't use it for this check - self.assertTrue(sample_text_error == error) - - def testAsertEqualSingleLine(self): - sample_text = u"laden swallows fly slowly" - revised_sample_text = u"unladen swallows fly quickly" - sample_text_error = """\ -- laden swallows fly slowly -? ^^^^ -+ unladen swallows fly quickly -? ++ ^^^^^ -""" - try: - self.assertEqual(sample_text, revised_sample_text) - except self.failureException as e: - error = str(e).split('\n', 1)[1] - self.assertTrue(sample_text_error == error) - - def testAssertIsNone(self): - self.assertIsNone(None) - self.assertRaises(self.failureException, self.assertIsNone, False) - self.assertIsNotNone('DjZoPloGears on Rails') - self.assertRaises(self.failureException, self.assertIsNotNone, None) - - def testAssertRegexpMatches(self): - self.assertRegexpMatches('asdfabasdf', r'ab+') - self.assertRaises(self.failureException, self.assertRegexpMatches, - 'saaas', r'aaaa') - - def testAssertRaisesRegexp(self): - class ExceptionMock(Exception): - pass - - def Stub(): - raise ExceptionMock('We expect') - - self.assertRaisesRegexp(ExceptionMock, re.compile('expect$'), Stub) - self.assertRaisesRegexp(ExceptionMock, 'expect$', Stub) - self.assertRaisesRegexp(ExceptionMock, u'expect$', Stub) - - def testAssertNotRaisesRegexp(self): - self.assertRaisesRegexp( - self.failureException, '^Exception not raised$', - self.assertRaisesRegexp, Exception, re.compile('x'), - lambda: None) - self.assertRaisesRegexp( - self.failureException, '^Exception not raised$', - self.assertRaisesRegexp, Exception, 'x', - lambda: None) - self.assertRaisesRegexp( - self.failureException, '^Exception not raised$', - self.assertRaisesRegexp, Exception, u'x', - lambda: None) - - def testAssertRaisesRegexpMismatch(self): - def Stub(): - raise Exception('Unexpected') - - self.assertRaisesRegexp( - self.failureException, - r'"\^Expected\$" does not match "Unexpected"', - self.assertRaisesRegexp, Exception, '^Expected$', - Stub) - self.assertRaisesRegexp( - self.failureException, - r'"\^Expected\$" does not match "Unexpected"', - self.assertRaisesRegexp, Exception, u'^Expected$', - Stub) - self.assertRaisesRegexp( - self.failureException, - r'"\^Expected\$" does not match "Unexpected"', - self.assertRaisesRegexp, Exception, - re.compile('^Expected$'), Stub) - - def testAssertRaisesExcValue(self): - class ExceptionMock(Exception): - pass - - def Stub(foo): - raise ExceptionMock(foo) - v = "particular value" - - ctx = self.assertRaises(ExceptionMock) - with ctx: - Stub(v) - e = ctx.exception - self.assertIsInstance(e, ExceptionMock) - self.assertEqual(e.args[0], v) - - def testSynonymAssertMethodNames(self): - """Test undocumented method name synonyms. - - Please do not use these methods names in your own code. - - This test confirms their continued existence and functionality - in order to avoid breaking existing code. - """ - self.assertNotEquals(3, 5) - self.assertEquals(3, 3) - self.assertAlmostEquals(2.0, 2.0) - self.assertNotAlmostEquals(3.0, 5.0) - self.assert_(True) - - def testPendingDeprecationMethodNames(self): - """Test fail* methods pending deprecation, they will warn in 3.2. - - Do not use these methods. They will go away in 3.3. - """ - with test_support.check_warnings(): - self.failIfEqual(3, 5) - self.failUnlessEqual(3, 3) - self.failUnlessAlmostEqual(2.0, 2.0) - self.failIfAlmostEqual(3.0, 5.0) - self.failUnless(True) - self.failUnlessRaises(TypeError, lambda _: 3.14 + u'spam') - self.failIf(False) - - def testDeepcopy(self): - # Issue: 5660 - class TestableTest(unittest.TestCase): - def testNothing(self): - pass - - test = TestableTest('testNothing') - - # This shouldn't blow up - deepcopy(test) - - def testKeyboardInterrupt(self): - def _raise(self=None): - raise KeyboardInterrupt - def nothing(self): - pass - - class Test1(unittest.TestCase): - test_something = _raise - - class Test2(unittest.TestCase): - setUp = _raise - test_something = nothing - - class Test3(unittest.TestCase): - test_something = nothing - tearDown = _raise - - class Test4(unittest.TestCase): - def test_something(self): - self.addCleanup(_raise) - - for klass in (Test1, Test2, Test3, Test4): - with self.assertRaises(KeyboardInterrupt): - klass('test_something').run() - - def testSystemExit(self): - def _raise(self=None): - raise SystemExit - def nothing(self): - pass - - class Test1(unittest.TestCase): - test_something = _raise - - class Test2(unittest.TestCase): - setUp = _raise - test_something = nothing - - class Test3(unittest.TestCase): - test_something = nothing - tearDown = _raise - - class Test4(unittest.TestCase): - def test_something(self): - self.addCleanup(_raise) - - for klass in (Test1, Test2, Test3, Test4): - result = unittest.TestResult() - klass('test_something').run(result) - self.assertEqual(len(result.errors), 1) - self.assertEqual(result.testsRun, 1) - - def testPickle(self): - # Issue 10326 - - # Can't use TestCase classes defined in Test class as - # pickle does not work with inner classes - test = unittest.TestCase('run') - for protocol in range(pickle.HIGHEST_PROTOCOL + 1): - - # blew up prior to fix - pickled_test = pickle.dumps(test, protocol=protocol) - - unpickled_test = pickle.loads(pickled_test) - self.assertEqual(test, unpickled_test) - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_discovery.py b/PythonLib/full/unittest/test/test_discovery.py deleted file mode 100644 index e0277d57..00000000 --- a/PythonLib/full/unittest/test/test_discovery.py +++ /dev/null @@ -1,398 +0,0 @@ -import os -import re -import sys - -import unittest - - -class TestDiscovery(unittest.TestCase): - - # Heavily mocked tests so I can avoid hitting the filesystem - def test_get_name_from_path(self): - loader = unittest.TestLoader() - - loader._top_level_dir = '/foo' - name = loader._get_name_from_path('/foo/bar/baz.py') - self.assertEqual(name, 'bar.baz') - - if not __debug__: - # asserts are off - return - - with self.assertRaises(AssertionError): - loader._get_name_from_path('/bar/baz.py') - - def test_find_tests(self): - loader = unittest.TestLoader() - - original_listdir = os.listdir - def restore_listdir(): - os.listdir = original_listdir - original_isfile = os.path.isfile - def restore_isfile(): - os.path.isfile = original_isfile - original_isdir = os.path.isdir - def restore_isdir(): - os.path.isdir = original_isdir - - path_lists = [['test1.py', 'test2.py', 'not_a_test.py', 'test_dir', - 'test.foo', 'test-not-a-module.py', 'another_dir'], - ['test3.py', 'test4.py', ]] - os.listdir = lambda path: path_lists.pop(0) - self.addCleanup(restore_listdir) - - def isdir(path): - return path.endswith('dir') - os.path.isdir = isdir - self.addCleanup(restore_isdir) - - def isfile(path): - # another_dir is not a package and so shouldn't be recursed into - return not path.endswith('dir') and not 'another_dir' in path - os.path.isfile = isfile - self.addCleanup(restore_isfile) - - loader._get_module_from_name = lambda path: path + ' module' - loader.loadTestsFromModule = lambda module: module + ' tests' - - top_level = os.path.abspath('/foo') - loader._top_level_dir = top_level - suite = list(loader._find_tests(top_level, 'test*.py')) - - expected = [name + ' module tests' for name in - ('test1', 'test2')] - expected.extend([('test_dir.%s' % name) + ' module tests' for name in - ('test3', 'test4')]) - self.assertEqual(suite, expected) - - def test_find_tests_with_package(self): - loader = unittest.TestLoader() - - original_listdir = os.listdir - def restore_listdir(): - os.listdir = original_listdir - original_isfile = os.path.isfile - def restore_isfile(): - os.path.isfile = original_isfile - original_isdir = os.path.isdir - def restore_isdir(): - os.path.isdir = original_isdir - - directories = ['a_directory', 'test_directory', 'test_directory2'] - path_lists = [directories, [], [], []] - os.listdir = lambda path: path_lists.pop(0) - self.addCleanup(restore_listdir) - - os.path.isdir = lambda path: True - self.addCleanup(restore_isdir) - - os.path.isfile = lambda path: os.path.basename(path) not in directories - self.addCleanup(restore_isfile) - - class Module(object): - paths = [] - load_tests_args = [] - - def __init__(self, path): - self.path = path - self.paths.append(path) - if os.path.basename(path) == 'test_directory': - def load_tests(loader, tests, pattern): - self.load_tests_args.append((loader, tests, pattern)) - return 'load_tests' - self.load_tests = load_tests - - def __eq__(self, other): - return self.path == other.path - - # Silence py3k warning - __hash__ = None - - loader._get_module_from_name = lambda name: Module(name) - def loadTestsFromModule(module, use_load_tests): - if use_load_tests: - raise self.failureException('use_load_tests should be False for packages') - return module.path + ' module tests' - loader.loadTestsFromModule = loadTestsFromModule - - loader._top_level_dir = '/foo' - # this time no '.py' on the pattern so that it can match - # a test package - suite = list(loader._find_tests('/foo', 'test*')) - - # We should have loaded tests from the test_directory package by calling load_tests - # and directly from the test_directory2 package - self.assertEqual(suite, - ['load_tests', 'test_directory2' + ' module tests']) - self.assertEqual(Module.paths, ['test_directory', 'test_directory2']) - - # load_tests should have been called once with loader, tests and pattern - self.assertEqual(Module.load_tests_args, - [(loader, 'test_directory' + ' module tests', 'test*')]) - - def test_discover(self): - loader = unittest.TestLoader() - - original_isfile = os.path.isfile - original_isdir = os.path.isdir - def restore_isfile(): - os.path.isfile = original_isfile - - os.path.isfile = lambda path: False - self.addCleanup(restore_isfile) - - orig_sys_path = sys.path[:] - def restore_path(): - sys.path[:] = orig_sys_path - self.addCleanup(restore_path) - - full_path = os.path.abspath(os.path.normpath('/foo')) - with self.assertRaises(ImportError): - loader.discover('/foo/bar', top_level_dir='/foo') - - self.assertEqual(loader._top_level_dir, full_path) - self.assertIn(full_path, sys.path) - - os.path.isfile = lambda path: True - os.path.isdir = lambda path: True - - def restore_isdir(): - os.path.isdir = original_isdir - self.addCleanup(restore_isdir) - - _find_tests_args = [] - def _find_tests(start_dir, pattern): - _find_tests_args.append((start_dir, pattern)) - return ['tests'] - loader._find_tests = _find_tests - loader.suiteClass = str - - suite = loader.discover('/foo/bar/baz', 'pattern', '/foo/bar') - - top_level_dir = os.path.abspath('/foo/bar') - start_dir = os.path.abspath('/foo/bar/baz') - self.assertEqual(suite, "['tests']") - self.assertEqual(loader._top_level_dir, top_level_dir) - self.assertEqual(_find_tests_args, [(start_dir, 'pattern')]) - self.assertIn(top_level_dir, sys.path) - - def test_discover_with_modules_that_fail_to_import(self): - loader = unittest.TestLoader() - - listdir = os.listdir - os.listdir = lambda _: ['test_this_does_not_exist.py'] - isfile = os.path.isfile - os.path.isfile = lambda _: True - orig_sys_path = sys.path[:] - def restore(): - os.path.isfile = isfile - os.listdir = listdir - sys.path[:] = orig_sys_path - self.addCleanup(restore) - - suite = loader.discover('.') - self.assertIn(os.getcwd(), sys.path) - self.assertEqual(suite.countTestCases(), 1) - test = list(list(suite)[0])[0] # extract test from suite - - with self.assertRaises(ImportError): - test.test_this_does_not_exist() - - def test_command_line_handling_parseArgs(self): - # Haha - take that uninstantiable class - program = object.__new__(unittest.TestProgram) - - args = [] - def do_discovery(argv): - args.extend(argv) - program._do_discovery = do_discovery - program.parseArgs(['something', 'discover']) - self.assertEqual(args, []) - - program.parseArgs(['something', 'discover', 'foo', 'bar']) - self.assertEqual(args, ['foo', 'bar']) - - def test_command_line_handling_do_discovery_too_many_arguments(self): - class Stop(Exception): - pass - def usageExit(): - raise Stop - - program = object.__new__(unittest.TestProgram) - program.usageExit = usageExit - program.testLoader = None - - with self.assertRaises(Stop): - # too many args - program._do_discovery(['one', 'two', 'three', 'four']) - - - def test_command_line_handling_do_discovery_uses_default_loader(self): - program = object.__new__(unittest.TestProgram) - - class Loader(object): - args = [] - def discover(self, start_dir, pattern, top_level_dir): - self.args.append((start_dir, pattern, top_level_dir)) - return 'tests' - - program.testLoader = Loader() - program._do_discovery(['-v']) - self.assertEqual(Loader.args, [('.', 'test*.py', None)]) - - def test_command_line_handling_do_discovery_calls_loader(self): - program = object.__new__(unittest.TestProgram) - - class Loader(object): - args = [] - def discover(self, start_dir, pattern, top_level_dir): - self.args.append((start_dir, pattern, top_level_dir)) - return 'tests' - - program._do_discovery(['-v'], Loader=Loader) - self.assertEqual(program.verbosity, 2) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('.', 'test*.py', None)]) - - Loader.args = [] - program = object.__new__(unittest.TestProgram) - program._do_discovery(['--verbose'], Loader=Loader) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('.', 'test*.py', None)]) - - Loader.args = [] - program = object.__new__(unittest.TestProgram) - program._do_discovery([], Loader=Loader) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('.', 'test*.py', None)]) - - Loader.args = [] - program = object.__new__(unittest.TestProgram) - program._do_discovery(['fish'], Loader=Loader) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('fish', 'test*.py', None)]) - - Loader.args = [] - program = object.__new__(unittest.TestProgram) - program._do_discovery(['fish', 'eggs'], Loader=Loader) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('fish', 'eggs', None)]) - - Loader.args = [] - program = object.__new__(unittest.TestProgram) - program._do_discovery(['fish', 'eggs', 'ham'], Loader=Loader) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('fish', 'eggs', 'ham')]) - - Loader.args = [] - program = object.__new__(unittest.TestProgram) - program._do_discovery(['-s', 'fish'], Loader=Loader) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('fish', 'test*.py', None)]) - - Loader.args = [] - program = object.__new__(unittest.TestProgram) - program._do_discovery(['-t', 'fish'], Loader=Loader) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('.', 'test*.py', 'fish')]) - - Loader.args = [] - program = object.__new__(unittest.TestProgram) - program._do_discovery(['-p', 'fish'], Loader=Loader) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('.', 'fish', None)]) - self.assertFalse(program.failfast) - self.assertFalse(program.catchbreak) - - Loader.args = [] - program = object.__new__(unittest.TestProgram) - program._do_discovery(['-p', 'eggs', '-s', 'fish', '-v', '-f', '-c'], - Loader=Loader) - self.assertEqual(program.test, 'tests') - self.assertEqual(Loader.args, [('fish', 'eggs', None)]) - self.assertEqual(program.verbosity, 2) - self.assertTrue(program.failfast) - self.assertTrue(program.catchbreak) - - def setup_module_clash(self): - class Module(object): - __file__ = 'bar/foo.py' - sys.modules['foo'] = Module - full_path = os.path.abspath('foo') - original_listdir = os.listdir - original_isfile = os.path.isfile - original_isdir = os.path.isdir - - def cleanup(): - os.listdir = original_listdir - os.path.isfile = original_isfile - os.path.isdir = original_isdir - del sys.modules['foo'] - if full_path in sys.path: - sys.path.remove(full_path) - self.addCleanup(cleanup) - - def listdir(_): - return ['foo.py'] - def isfile(_): - return True - def isdir(_): - return True - os.listdir = listdir - os.path.isfile = isfile - os.path.isdir = isdir - return full_path - - def test_detect_module_clash(self): - full_path = self.setup_module_clash() - loader = unittest.TestLoader() - - mod_dir = os.path.abspath('bar') - expected_dir = os.path.abspath('foo') - msg = re.escape(r"'foo' module incorrectly imported from %r. Expected %r. " - "Is this module globally installed?" % (mod_dir, expected_dir)) - self.assertRaisesRegexp( - ImportError, '^%s$' % msg, loader.discover, - start_dir='foo', pattern='foo.py' - ) - self.assertEqual(sys.path[0], full_path) - - def test_module_symlink_ok(self): - full_path = self.setup_module_clash() - - original_realpath = os.path.realpath - - mod_dir = os.path.abspath('bar') - expected_dir = os.path.abspath('foo') - - def cleanup(): - os.path.realpath = original_realpath - self.addCleanup(cleanup) - - def realpath(path): - if path == os.path.join(mod_dir, 'foo.py'): - return os.path.join(expected_dir, 'foo.py') - return path - os.path.realpath = realpath - loader = unittest.TestLoader() - loader.discover(start_dir='foo', pattern='foo.py') - - def test_discovery_from_dotted_path(self): - loader = unittest.TestLoader() - - tests = [self] - expectedPath = os.path.abspath(os.path.dirname(unittest.test.__file__)) - - self.wasRun = False - def _find_tests(start_dir, pattern): - self.wasRun = True - self.assertEqual(start_dir, expectedPath) - return tests - loader._find_tests = _find_tests - suite = loader.discover('unittest.test') - self.assertTrue(self.wasRun) - self.assertEqual(suite._tests, tests) - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_functiontestcase.py b/PythonLib/full/unittest/test/test_functiontestcase.py deleted file mode 100644 index 63dd8781..00000000 --- a/PythonLib/full/unittest/test/test_functiontestcase.py +++ /dev/null @@ -1,148 +0,0 @@ -import unittest - -from .support import LoggingResult - - -class Test_FunctionTestCase(unittest.TestCase): - - # "Return the number of tests represented by the this test object. For - # TestCase instances, this will always be 1" - def test_countTestCases(self): - test = unittest.FunctionTestCase(lambda: None) - - self.assertEqual(test.countTestCases(), 1) - - # "When a setUp() method is defined, the test runner will run that method - # prior to each test. Likewise, if a tearDown() method is defined, the - # test runner will invoke that method after each test. In the example, - # setUp() was used to create a fresh sequence for each test." - # - # Make sure the proper call order is maintained, even if setUp() raises - # an exception. - def test_run_call_order__error_in_setUp(self): - events = [] - result = LoggingResult(events) - - def setUp(): - events.append('setUp') - raise RuntimeError('raised by setUp') - - def test(): - events.append('test') - - def tearDown(): - events.append('tearDown') - - expected = ['startTest', 'setUp', 'addError', 'stopTest'] - unittest.FunctionTestCase(test, setUp, tearDown).run(result) - self.assertEqual(events, expected) - - # "When a setUp() method is defined, the test runner will run that method - # prior to each test. Likewise, if a tearDown() method is defined, the - # test runner will invoke that method after each test. In the example, - # setUp() was used to create a fresh sequence for each test." - # - # Make sure the proper call order is maintained, even if the test raises - # an error (as opposed to a failure). - def test_run_call_order__error_in_test(self): - events = [] - result = LoggingResult(events) - - def setUp(): - events.append('setUp') - - def test(): - events.append('test') - raise RuntimeError('raised by test') - - def tearDown(): - events.append('tearDown') - - expected = ['startTest', 'setUp', 'test', 'addError', 'tearDown', - 'stopTest'] - unittest.FunctionTestCase(test, setUp, tearDown).run(result) - self.assertEqual(events, expected) - - # "When a setUp() method is defined, the test runner will run that method - # prior to each test. Likewise, if a tearDown() method is defined, the - # test runner will invoke that method after each test. In the example, - # setUp() was used to create a fresh sequence for each test." - # - # Make sure the proper call order is maintained, even if the test signals - # a failure (as opposed to an error). - def test_run_call_order__failure_in_test(self): - events = [] - result = LoggingResult(events) - - def setUp(): - events.append('setUp') - - def test(): - events.append('test') - self.fail('raised by test') - - def tearDown(): - events.append('tearDown') - - expected = ['startTest', 'setUp', 'test', 'addFailure', 'tearDown', - 'stopTest'] - unittest.FunctionTestCase(test, setUp, tearDown).run(result) - self.assertEqual(events, expected) - - # "When a setUp() method is defined, the test runner will run that method - # prior to each test. Likewise, if a tearDown() method is defined, the - # test runner will invoke that method after each test. In the example, - # setUp() was used to create a fresh sequence for each test." - # - # Make sure the proper call order is maintained, even if tearDown() raises - # an exception. - def test_run_call_order__error_in_tearDown(self): - events = [] - result = LoggingResult(events) - - def setUp(): - events.append('setUp') - - def test(): - events.append('test') - - def tearDown(): - events.append('tearDown') - raise RuntimeError('raised by tearDown') - - expected = ['startTest', 'setUp', 'test', 'tearDown', 'addError', - 'stopTest'] - unittest.FunctionTestCase(test, setUp, tearDown).run(result) - self.assertEqual(events, expected) - - # "Return a string identifying the specific test case." - # - # Because of the vague nature of the docs, I'm not going to lock this - # test down too much. Really all that can be asserted is that the id() - # will be a string (either 8-byte or unicode -- again, because the docs - # just say "string") - def test_id(self): - test = unittest.FunctionTestCase(lambda: None) - - self.assertIsInstance(test.id(), basestring) - - # "Returns a one-line description of the test, or None if no description - # has been provided. The default implementation of this method returns - # the first line of the test method's docstring, if available, or None." - def test_shortDescription__no_docstring(self): - test = unittest.FunctionTestCase(lambda: None) - - self.assertEqual(test.shortDescription(), None) - - # "Returns a one-line description of the test, or None if no description - # has been provided. The default implementation of this method returns - # the first line of the test method's docstring, if available, or None." - def test_shortDescription__singleline_docstring(self): - desc = "this tests foo" - test = unittest.FunctionTestCase(lambda: None, description=desc) - - self.assertEqual(test.shortDescription(), "this tests foo") - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_loader.py b/PythonLib/full/unittest/test/test_loader.py deleted file mode 100644 index 3e9756e6..00000000 --- a/PythonLib/full/unittest/test/test_loader.py +++ /dev/null @@ -1,1301 +0,0 @@ -import sys -import types - - -import unittest - - -class Test_TestLoader(unittest.TestCase): - - ### Tests for TestLoader.loadTestsFromTestCase - ################################################################ - - # "Return a suite of all tests cases contained in the TestCase-derived - # class testCaseClass" - def test_loadTestsFromTestCase(self): - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foo_bar(self): pass - - tests = unittest.TestSuite([Foo('test_1'), Foo('test_2')]) - - loader = unittest.TestLoader() - self.assertEqual(loader.loadTestsFromTestCase(Foo), tests) - - # "Return a suite of all tests cases contained in the TestCase-derived - # class testCaseClass" - # - # Make sure it does the right thing even if no tests were found - def test_loadTestsFromTestCase__no_matches(self): - class Foo(unittest.TestCase): - def foo_bar(self): pass - - empty_suite = unittest.TestSuite() - - loader = unittest.TestLoader() - self.assertEqual(loader.loadTestsFromTestCase(Foo), empty_suite) - - # "Return a suite of all tests cases contained in the TestCase-derived - # class testCaseClass" - # - # What happens if loadTestsFromTestCase() is given an object - # that isn't a subclass of TestCase? Specifically, what happens - # if testCaseClass is a subclass of TestSuite? - # - # This is checked for specifically in the code, so we better add a - # test for it. - def test_loadTestsFromTestCase__TestSuite_subclass(self): - class NotATestCase(unittest.TestSuite): - pass - - loader = unittest.TestLoader() - try: - loader.loadTestsFromTestCase(NotATestCase) - except TypeError: - pass - else: - self.fail('Should raise TypeError') - - # "Return a suite of all tests cases contained in the TestCase-derived - # class testCaseClass" - # - # Make sure loadTestsFromTestCase() picks up the default test method - # name (as specified by TestCase), even though the method name does - # not match the default TestLoader.testMethodPrefix string - def test_loadTestsFromTestCase__default_method_name(self): - class Foo(unittest.TestCase): - def runTest(self): - pass - - loader = unittest.TestLoader() - # This has to be false for the test to succeed - self.assertFalse('runTest'.startswith(loader.testMethodPrefix)) - - suite = loader.loadTestsFromTestCase(Foo) - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), [Foo('runTest')]) - - ################################################################ - ### /Tests for TestLoader.loadTestsFromTestCase - - ### Tests for TestLoader.loadTestsFromModule - ################################################################ - - # "This method searches `module` for classes derived from TestCase" - def test_loadTestsFromModule__TestCase_subclass(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromModule(m) - self.assertIsInstance(suite, loader.suiteClass) - - expected = [loader.suiteClass([MyTestCase('test')])] - self.assertEqual(list(suite), expected) - - # "This method searches `module` for classes derived from TestCase" - # - # What happens if no tests are found (no TestCase instances)? - def test_loadTestsFromModule__no_TestCase_instances(self): - m = types.ModuleType('m') - - loader = unittest.TestLoader() - suite = loader.loadTestsFromModule(m) - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), []) - - # "This method searches `module` for classes derived from TestCase" - # - # What happens if no tests are found (TestCases instances, but no tests)? - def test_loadTestsFromModule__no_TestCase_tests(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - pass - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromModule(m) - self.assertIsInstance(suite, loader.suiteClass) - - self.assertEqual(list(suite), [loader.suiteClass()]) - - # "This method searches `module` for classes derived from TestCase"s - # - # What happens if loadTestsFromModule() is given something other - # than a module? - # - # XXX Currently, it succeeds anyway. This flexibility - # should either be documented or loadTestsFromModule() should - # raise a TypeError - # - # XXX Certain people are using this behaviour. We'll add a test for it - def test_loadTestsFromModule__not_a_module(self): - class MyTestCase(unittest.TestCase): - def test(self): - pass - - class NotAModule(object): - test_2 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromModule(NotAModule) - - reference = [unittest.TestSuite([MyTestCase('test')])] - self.assertEqual(list(suite), reference) - - - # Check that loadTestsFromModule honors (or not) a module - # with a load_tests function. - def test_loadTestsFromModule__load_tests(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testcase_1 = MyTestCase - - load_tests_args = [] - def load_tests(loader, tests, pattern): - self.assertIsInstance(tests, unittest.TestSuite) - load_tests_args.extend((loader, tests, pattern)) - return tests - m.load_tests = load_tests - - loader = unittest.TestLoader() - suite = loader.loadTestsFromModule(m) - self.assertIsInstance(suite, unittest.TestSuite) - self.assertEqual(load_tests_args, [loader, suite, None]) - - load_tests_args = [] - suite = loader.loadTestsFromModule(m, use_load_tests=False) - self.assertEqual(load_tests_args, []) - - def test_loadTestsFromModule__faulty_load_tests(self): - m = types.ModuleType('m') - - def load_tests(loader, tests, pattern): - raise TypeError('some failure') - m.load_tests = load_tests - - loader = unittest.TestLoader() - suite = loader.loadTestsFromModule(m) - self.assertIsInstance(suite, unittest.TestSuite) - self.assertEqual(suite.countTestCases(), 1) - test = list(suite)[0] - - self.assertRaisesRegexp(TypeError, "some failure", test.m) - - ################################################################ - ### /Tests for TestLoader.loadTestsFromModule() - - ### Tests for TestLoader.loadTestsFromName() - ################################################################ - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # Is ValueError raised in response to an empty name? - def test_loadTestsFromName__empty_name(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromName('') - except ValueError, e: - self.assertEqual(str(e), "Empty module name") - else: - self.fail("TestLoader.loadTestsFromName failed to raise ValueError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # What happens when the name contains invalid characters? - def test_loadTestsFromName__malformed_name(self): - loader = unittest.TestLoader() - - # XXX Should this raise ValueError or ImportError? - try: - loader.loadTestsFromName('abc () //') - except ValueError: - pass - except ImportError: - pass - else: - self.fail("TestLoader.loadTestsFromName failed to raise ValueError") - - # "The specifier name is a ``dotted name'' that may resolve ... to a - # module" - # - # What happens when a module by that name can't be found? - def test_loadTestsFromName__unknown_module_name(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromName('sdasfasfasdf') - except ImportError, e: - self.assertEqual(str(e), "No module named sdasfasfasdf") - else: - self.fail("TestLoader.loadTestsFromName failed to raise ImportError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # What happens when the module is found, but the attribute can't? - def test_loadTestsFromName__unknown_attr_name(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromName('unittest.sdasfasfasdf') - except AttributeError, e: - self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'") - else: - self.fail("TestLoader.loadTestsFromName failed to raise AttributeError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # What happens when we provide the module, but the attribute can't be - # found? - def test_loadTestsFromName__relative_unknown_name(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromName('sdasfasfasdf', unittest) - except AttributeError, e: - self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'") - else: - self.fail("TestLoader.loadTestsFromName failed to raise AttributeError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # ... - # "The method optionally resolves name relative to the given module" - # - # Does loadTestsFromName raise ValueError when passed an empty - # name relative to a provided module? - # - # XXX Should probably raise a ValueError instead of an AttributeError - def test_loadTestsFromName__relative_empty_name(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromName('', unittest) - except AttributeError: - pass - else: - self.fail("Failed to raise AttributeError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # ... - # "The method optionally resolves name relative to the given module" - # - # What happens when an impossible name is given, relative to the provided - # `module`? - def test_loadTestsFromName__relative_malformed_name(self): - loader = unittest.TestLoader() - - # XXX Should this raise AttributeError or ValueError? - try: - loader.loadTestsFromName('abc () //', unittest) - except ValueError: - pass - except AttributeError: - pass - else: - self.fail("TestLoader.loadTestsFromName failed to raise ValueError") - - # "The method optionally resolves name relative to the given module" - # - # Does loadTestsFromName raise TypeError when the `module` argument - # isn't a module object? - # - # XXX Accepts the not-a-module object, ignoring the object's type - # This should raise an exception or the method name should be changed - # - # XXX Some people are relying on this, so keep it for now - def test_loadTestsFromName__relative_not_a_module(self): - class MyTestCase(unittest.TestCase): - def test(self): - pass - - class NotAModule(object): - test_2 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromName('test_2', NotAModule) - - reference = [MyTestCase('test')] - self.assertEqual(list(suite), reference) - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # Does it raise an exception if the name resolves to an invalid - # object? - def test_loadTestsFromName__relative_bad_object(self): - m = types.ModuleType('m') - m.testcase_1 = object() - - loader = unittest.TestLoader() - try: - loader.loadTestsFromName('testcase_1', m) - except TypeError: - pass - else: - self.fail("Should have raised TypeError") - - # "The specifier name is a ``dotted name'' that may - # resolve either to ... a test case class" - def test_loadTestsFromName__relative_TestCase_subclass(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromName('testcase_1', m) - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), [MyTestCase('test')]) - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - def test_loadTestsFromName__relative_TestSuite(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testsuite = unittest.TestSuite([MyTestCase('test')]) - - loader = unittest.TestLoader() - suite = loader.loadTestsFromName('testsuite', m) - self.assertIsInstance(suite, loader.suiteClass) - - self.assertEqual(list(suite), [MyTestCase('test')]) - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a test method within a test case class" - def test_loadTestsFromName__relative_testmethod(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromName('testcase_1.test', m) - self.assertIsInstance(suite, loader.suiteClass) - - self.assertEqual(list(suite), [MyTestCase('test')]) - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # Does loadTestsFromName() raise the proper exception when trying to - # resolve "a test method within a test case class" that doesn't exist - # for the given name (relative to a provided module)? - def test_loadTestsFromName__relative_invalid_testmethod(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - try: - loader.loadTestsFromName('testcase_1.testfoo', m) - except AttributeError, e: - self.assertEqual(str(e), "type object 'MyTestCase' has no attribute 'testfoo'") - else: - self.fail("Failed to raise AttributeError") - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a callable object which returns a ... TestSuite instance" - def test_loadTestsFromName__callable__TestSuite(self): - m = types.ModuleType('m') - testcase_1 = unittest.FunctionTestCase(lambda: None) - testcase_2 = unittest.FunctionTestCase(lambda: None) - def return_TestSuite(): - return unittest.TestSuite([testcase_1, testcase_2]) - m.return_TestSuite = return_TestSuite - - loader = unittest.TestLoader() - suite = loader.loadTestsFromName('return_TestSuite', m) - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), [testcase_1, testcase_2]) - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a callable object which returns a TestCase ... instance" - def test_loadTestsFromName__callable__TestCase_instance(self): - m = types.ModuleType('m') - testcase_1 = unittest.FunctionTestCase(lambda: None) - def return_TestCase(): - return testcase_1 - m.return_TestCase = return_TestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromName('return_TestCase', m) - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), [testcase_1]) - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a callable object which returns a TestCase ... instance" - #***************************************************************** - #Override the suiteClass attribute to ensure that the suiteClass - #attribute is used - def test_loadTestsFromName__callable__TestCase_instance_ProperSuiteClass(self): - class SubTestSuite(unittest.TestSuite): - pass - m = types.ModuleType('m') - testcase_1 = unittest.FunctionTestCase(lambda: None) - def return_TestCase(): - return testcase_1 - m.return_TestCase = return_TestCase - - loader = unittest.TestLoader() - loader.suiteClass = SubTestSuite - suite = loader.loadTestsFromName('return_TestCase', m) - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), [testcase_1]) - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a test method within a test case class" - #***************************************************************** - #Override the suiteClass attribute to ensure that the suiteClass - #attribute is used - def test_loadTestsFromName__relative_testmethod_ProperSuiteClass(self): - class SubTestSuite(unittest.TestSuite): - pass - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - loader.suiteClass=SubTestSuite - suite = loader.loadTestsFromName('testcase_1.test', m) - self.assertIsInstance(suite, loader.suiteClass) - - self.assertEqual(list(suite), [MyTestCase('test')]) - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a callable object which returns a TestCase or TestSuite instance" - # - # What happens if the callable returns something else? - def test_loadTestsFromName__callable__wrong_type(self): - m = types.ModuleType('m') - def return_wrong(): - return 6 - m.return_wrong = return_wrong - - loader = unittest.TestLoader() - try: - loader.loadTestsFromName('return_wrong', m) - except TypeError: - pass - else: - self.fail("TestLoader.loadTestsFromName failed to raise TypeError") - - # "The specifier can refer to modules and packages which have not been - # imported; they will be imported as a side-effect" - def test_loadTestsFromName__module_not_loaded(self): - # We're going to try to load this module as a side-effect, so it - # better not be loaded before we try. - # - module_name = 'unittest.test.dummy' - sys.modules.pop(module_name, None) - - loader = unittest.TestLoader() - try: - suite = loader.loadTestsFromName(module_name) - - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), []) - - # module should now be loaded, thanks to loadTestsFromName() - self.assertIn(module_name, sys.modules) - finally: - if module_name in sys.modules: - del sys.modules[module_name] - - ################################################################ - ### Tests for TestLoader.loadTestsFromName() - - ### Tests for TestLoader.loadTestsFromNames() - ################################################################ - - # "Similar to loadTestsFromName(), but takes a sequence of names rather - # than a single name." - # - # What happens if that sequence of names is empty? - def test_loadTestsFromNames__empty_name_list(self): - loader = unittest.TestLoader() - - suite = loader.loadTestsFromNames([]) - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), []) - - # "Similar to loadTestsFromName(), but takes a sequence of names rather - # than a single name." - # ... - # "The method optionally resolves name relative to the given module" - # - # What happens if that sequence of names is empty? - # - # XXX Should this raise a ValueError or just return an empty TestSuite? - def test_loadTestsFromNames__relative_empty_name_list(self): - loader = unittest.TestLoader() - - suite = loader.loadTestsFromNames([], unittest) - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), []) - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # Is ValueError raised in response to an empty name? - def test_loadTestsFromNames__empty_name(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromNames(['']) - except ValueError, e: - self.assertEqual(str(e), "Empty module name") - else: - self.fail("TestLoader.loadTestsFromNames failed to raise ValueError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # What happens when presented with an impossible module name? - def test_loadTestsFromNames__malformed_name(self): - loader = unittest.TestLoader() - - # XXX Should this raise ValueError or ImportError? - try: - loader.loadTestsFromNames(['abc () //']) - except ValueError: - pass - except ImportError: - pass - else: - self.fail("TestLoader.loadTestsFromNames failed to raise ValueError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # What happens when no module can be found for the given name? - def test_loadTestsFromNames__unknown_module_name(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromNames(['sdasfasfasdf']) - except ImportError, e: - self.assertEqual(str(e), "No module named sdasfasfasdf") - else: - self.fail("TestLoader.loadTestsFromNames failed to raise ImportError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # What happens when the module can be found, but not the attribute? - def test_loadTestsFromNames__unknown_attr_name(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromNames(['unittest.sdasfasfasdf', 'unittest']) - except AttributeError, e: - self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'") - else: - self.fail("TestLoader.loadTestsFromNames failed to raise AttributeError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # ... - # "The method optionally resolves name relative to the given module" - # - # What happens when given an unknown attribute on a specified `module` - # argument? - def test_loadTestsFromNames__unknown_name_relative_1(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromNames(['sdasfasfasdf'], unittest) - except AttributeError, e: - self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'") - else: - self.fail("TestLoader.loadTestsFromName failed to raise AttributeError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # ... - # "The method optionally resolves name relative to the given module" - # - # Do unknown attributes (relative to a provided module) still raise an - # exception even in the presence of valid attribute names? - def test_loadTestsFromNames__unknown_name_relative_2(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromNames(['TestCase', 'sdasfasfasdf'], unittest) - except AttributeError, e: - self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'") - else: - self.fail("TestLoader.loadTestsFromName failed to raise AttributeError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # ... - # "The method optionally resolves name relative to the given module" - # - # What happens when faced with the empty string? - # - # XXX This currently raises AttributeError, though ValueError is probably - # more appropriate - def test_loadTestsFromNames__relative_empty_name(self): - loader = unittest.TestLoader() - - try: - loader.loadTestsFromNames([''], unittest) - except AttributeError: - pass - else: - self.fail("Failed to raise ValueError") - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # ... - # "The method optionally resolves name relative to the given module" - # - # What happens when presented with an impossible attribute name? - def test_loadTestsFromNames__relative_malformed_name(self): - loader = unittest.TestLoader() - - # XXX Should this raise AttributeError or ValueError? - try: - loader.loadTestsFromNames(['abc () //'], unittest) - except AttributeError: - pass - except ValueError: - pass - else: - self.fail("TestLoader.loadTestsFromNames failed to raise ValueError") - - # "The method optionally resolves name relative to the given module" - # - # Does loadTestsFromNames() make sure the provided `module` is in fact - # a module? - # - # XXX This validation is currently not done. This flexibility should - # either be documented or a TypeError should be raised. - def test_loadTestsFromNames__relative_not_a_module(self): - class MyTestCase(unittest.TestCase): - def test(self): - pass - - class NotAModule(object): - test_2 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromNames(['test_2'], NotAModule) - - reference = [unittest.TestSuite([MyTestCase('test')])] - self.assertEqual(list(suite), reference) - - # "The specifier name is a ``dotted name'' that may resolve either to - # a module, a test case class, a TestSuite instance, a test method - # within a test case class, or a callable object which returns a - # TestCase or TestSuite instance." - # - # Does it raise an exception if the name resolves to an invalid - # object? - def test_loadTestsFromNames__relative_bad_object(self): - m = types.ModuleType('m') - m.testcase_1 = object() - - loader = unittest.TestLoader() - try: - loader.loadTestsFromNames(['testcase_1'], m) - except TypeError: - pass - else: - self.fail("Should have raised TypeError") - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a test case class" - def test_loadTestsFromNames__relative_TestCase_subclass(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromNames(['testcase_1'], m) - self.assertIsInstance(suite, loader.suiteClass) - - expected = loader.suiteClass([MyTestCase('test')]) - self.assertEqual(list(suite), [expected]) - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a TestSuite instance" - def test_loadTestsFromNames__relative_TestSuite(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testsuite = unittest.TestSuite([MyTestCase('test')]) - - loader = unittest.TestLoader() - suite = loader.loadTestsFromNames(['testsuite'], m) - self.assertIsInstance(suite, loader.suiteClass) - - self.assertEqual(list(suite), [m.testsuite]) - - # "The specifier name is a ``dotted name'' that may resolve ... to ... a - # test method within a test case class" - def test_loadTestsFromNames__relative_testmethod(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromNames(['testcase_1.test'], m) - self.assertIsInstance(suite, loader.suiteClass) - - ref_suite = unittest.TestSuite([MyTestCase('test')]) - self.assertEqual(list(suite), [ref_suite]) - - # "The specifier name is a ``dotted name'' that may resolve ... to ... a - # test method within a test case class" - # - # Does the method gracefully handle names that initially look like they - # resolve to "a test method within a test case class" but don't? - def test_loadTestsFromNames__relative_invalid_testmethod(self): - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - def test(self): - pass - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - try: - loader.loadTestsFromNames(['testcase_1.testfoo'], m) - except AttributeError, e: - self.assertEqual(str(e), "type object 'MyTestCase' has no attribute 'testfoo'") - else: - self.fail("Failed to raise AttributeError") - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a callable object which returns a ... TestSuite instance" - def test_loadTestsFromNames__callable__TestSuite(self): - m = types.ModuleType('m') - testcase_1 = unittest.FunctionTestCase(lambda: None) - testcase_2 = unittest.FunctionTestCase(lambda: None) - def return_TestSuite(): - return unittest.TestSuite([testcase_1, testcase_2]) - m.return_TestSuite = return_TestSuite - - loader = unittest.TestLoader() - suite = loader.loadTestsFromNames(['return_TestSuite'], m) - self.assertIsInstance(suite, loader.suiteClass) - - expected = unittest.TestSuite([testcase_1, testcase_2]) - self.assertEqual(list(suite), [expected]) - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a callable object which returns a TestCase ... instance" - def test_loadTestsFromNames__callable__TestCase_instance(self): - m = types.ModuleType('m') - testcase_1 = unittest.FunctionTestCase(lambda: None) - def return_TestCase(): - return testcase_1 - m.return_TestCase = return_TestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromNames(['return_TestCase'], m) - self.assertIsInstance(suite, loader.suiteClass) - - ref_suite = unittest.TestSuite([testcase_1]) - self.assertEqual(list(suite), [ref_suite]) - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a callable object which returns a TestCase or TestSuite instance" - # - # Are staticmethods handled correctly? - def test_loadTestsFromNames__callable__call_staticmethod(self): - m = types.ModuleType('m') - class Test1(unittest.TestCase): - def test(self): - pass - - testcase_1 = Test1('test') - class Foo(unittest.TestCase): - @staticmethod - def foo(): - return testcase_1 - m.Foo = Foo - - loader = unittest.TestLoader() - suite = loader.loadTestsFromNames(['Foo.foo'], m) - self.assertIsInstance(suite, loader.suiteClass) - - ref_suite = unittest.TestSuite([testcase_1]) - self.assertEqual(list(suite), [ref_suite]) - - # "The specifier name is a ``dotted name'' that may resolve ... to - # ... a callable object which returns a TestCase or TestSuite instance" - # - # What happens when the callable returns something else? - def test_loadTestsFromNames__callable__wrong_type(self): - m = types.ModuleType('m') - def return_wrong(): - return 6 - m.return_wrong = return_wrong - - loader = unittest.TestLoader() - try: - loader.loadTestsFromNames(['return_wrong'], m) - except TypeError: - pass - else: - self.fail("TestLoader.loadTestsFromNames failed to raise TypeError") - - # "The specifier can refer to modules and packages which have not been - # imported; they will be imported as a side-effect" - def test_loadTestsFromNames__module_not_loaded(self): - # We're going to try to load this module as a side-effect, so it - # better not be loaded before we try. - # - module_name = 'unittest.test.dummy' - sys.modules.pop(module_name, None) - - loader = unittest.TestLoader() - try: - suite = loader.loadTestsFromNames([module_name]) - - self.assertIsInstance(suite, loader.suiteClass) - self.assertEqual(list(suite), [unittest.TestSuite()]) - - # module should now be loaded, thanks to loadTestsFromName() - self.assertIn(module_name, sys.modules) - finally: - if module_name in sys.modules: - del sys.modules[module_name] - - ################################################################ - ### /Tests for TestLoader.loadTestsFromNames() - - ### Tests for TestLoader.getTestCaseNames() - ################################################################ - - # "Return a sorted sequence of method names found within testCaseClass" - # - # Test.foobar is defined to make sure getTestCaseNames() respects - # loader.testMethodPrefix - def test_getTestCaseNames(self): - class Test(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foobar(self): pass - - loader = unittest.TestLoader() - - self.assertEqual(loader.getTestCaseNames(Test), ['test_1', 'test_2']) - - # "Return a sorted sequence of method names found within testCaseClass" - # - # Does getTestCaseNames() behave appropriately if no tests are found? - def test_getTestCaseNames__no_tests(self): - class Test(unittest.TestCase): - def foobar(self): pass - - loader = unittest.TestLoader() - - self.assertEqual(loader.getTestCaseNames(Test), []) - - # "Return a sorted sequence of method names found within testCaseClass" - # - # Are not-TestCases handled gracefully? - # - # XXX This should raise a TypeError, not return a list - # - # XXX It's too late in the 2.5 release cycle to fix this, but it should - # probably be revisited for 2.6 - def test_getTestCaseNames__not_a_TestCase(self): - class BadCase(int): - def test_foo(self): - pass - - loader = unittest.TestLoader() - names = loader.getTestCaseNames(BadCase) - - self.assertEqual(names, ['test_foo']) - - # "Return a sorted sequence of method names found within testCaseClass" - # - # Make sure inherited names are handled. - # - # TestP.foobar is defined to make sure getTestCaseNames() respects - # loader.testMethodPrefix - def test_getTestCaseNames__inheritance(self): - class TestP(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foobar(self): pass - - class TestC(TestP): - def test_1(self): pass - def test_3(self): pass - - loader = unittest.TestLoader() - - names = ['test_1', 'test_2', 'test_3'] - self.assertEqual(loader.getTestCaseNames(TestC), names) - - ################################################################ - ### /Tests for TestLoader.getTestCaseNames() - - ### Tests for TestLoader.testMethodPrefix - ################################################################ - - # "String giving the prefix of method names which will be interpreted as - # test methods" - # - # Implicit in the documentation is that testMethodPrefix is respected by - # all loadTestsFrom* methods. - def test_testMethodPrefix__loadTestsFromTestCase(self): - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foo_bar(self): pass - - tests_1 = unittest.TestSuite([Foo('foo_bar')]) - tests_2 = unittest.TestSuite([Foo('test_1'), Foo('test_2')]) - - loader = unittest.TestLoader() - loader.testMethodPrefix = 'foo' - self.assertEqual(loader.loadTestsFromTestCase(Foo), tests_1) - - loader.testMethodPrefix = 'test' - self.assertEqual(loader.loadTestsFromTestCase(Foo), tests_2) - - # "String giving the prefix of method names which will be interpreted as - # test methods" - # - # Implicit in the documentation is that testMethodPrefix is respected by - # all loadTestsFrom* methods. - def test_testMethodPrefix__loadTestsFromModule(self): - m = types.ModuleType('m') - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foo_bar(self): pass - m.Foo = Foo - - tests_1 = [unittest.TestSuite([Foo('foo_bar')])] - tests_2 = [unittest.TestSuite([Foo('test_1'), Foo('test_2')])] - - loader = unittest.TestLoader() - loader.testMethodPrefix = 'foo' - self.assertEqual(list(loader.loadTestsFromModule(m)), tests_1) - - loader.testMethodPrefix = 'test' - self.assertEqual(list(loader.loadTestsFromModule(m)), tests_2) - - # "String giving the prefix of method names which will be interpreted as - # test methods" - # - # Implicit in the documentation is that testMethodPrefix is respected by - # all loadTestsFrom* methods. - def test_testMethodPrefix__loadTestsFromName(self): - m = types.ModuleType('m') - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foo_bar(self): pass - m.Foo = Foo - - tests_1 = unittest.TestSuite([Foo('foo_bar')]) - tests_2 = unittest.TestSuite([Foo('test_1'), Foo('test_2')]) - - loader = unittest.TestLoader() - loader.testMethodPrefix = 'foo' - self.assertEqual(loader.loadTestsFromName('Foo', m), tests_1) - - loader.testMethodPrefix = 'test' - self.assertEqual(loader.loadTestsFromName('Foo', m), tests_2) - - # "String giving the prefix of method names which will be interpreted as - # test methods" - # - # Implicit in the documentation is that testMethodPrefix is respected by - # all loadTestsFrom* methods. - def test_testMethodPrefix__loadTestsFromNames(self): - m = types.ModuleType('m') - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foo_bar(self): pass - m.Foo = Foo - - tests_1 = unittest.TestSuite([unittest.TestSuite([Foo('foo_bar')])]) - tests_2 = unittest.TestSuite([Foo('test_1'), Foo('test_2')]) - tests_2 = unittest.TestSuite([tests_2]) - - loader = unittest.TestLoader() - loader.testMethodPrefix = 'foo' - self.assertEqual(loader.loadTestsFromNames(['Foo'], m), tests_1) - - loader.testMethodPrefix = 'test' - self.assertEqual(loader.loadTestsFromNames(['Foo'], m), tests_2) - - # "The default value is 'test'" - def test_testMethodPrefix__default_value(self): - loader = unittest.TestLoader() - self.assertTrue(loader.testMethodPrefix == 'test') - - ################################################################ - ### /Tests for TestLoader.testMethodPrefix - - ### Tests for TestLoader.sortTestMethodsUsing - ################################################################ - - # "Function to be used to compare method names when sorting them in - # getTestCaseNames() and all the loadTestsFromX() methods" - def test_sortTestMethodsUsing__loadTestsFromTestCase(self): - def reversed_cmp(x, y): - return -cmp(x, y) - - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - - loader = unittest.TestLoader() - loader.sortTestMethodsUsing = reversed_cmp - - tests = loader.suiteClass([Foo('test_2'), Foo('test_1')]) - self.assertEqual(loader.loadTestsFromTestCase(Foo), tests) - - # "Function to be used to compare method names when sorting them in - # getTestCaseNames() and all the loadTestsFromX() methods" - def test_sortTestMethodsUsing__loadTestsFromModule(self): - def reversed_cmp(x, y): - return -cmp(x, y) - - m = types.ModuleType('m') - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - m.Foo = Foo - - loader = unittest.TestLoader() - loader.sortTestMethodsUsing = reversed_cmp - - tests = [loader.suiteClass([Foo('test_2'), Foo('test_1')])] - self.assertEqual(list(loader.loadTestsFromModule(m)), tests) - - # "Function to be used to compare method names when sorting them in - # getTestCaseNames() and all the loadTestsFromX() methods" - def test_sortTestMethodsUsing__loadTestsFromName(self): - def reversed_cmp(x, y): - return -cmp(x, y) - - m = types.ModuleType('m') - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - m.Foo = Foo - - loader = unittest.TestLoader() - loader.sortTestMethodsUsing = reversed_cmp - - tests = loader.suiteClass([Foo('test_2'), Foo('test_1')]) - self.assertEqual(loader.loadTestsFromName('Foo', m), tests) - - # "Function to be used to compare method names when sorting them in - # getTestCaseNames() and all the loadTestsFromX() methods" - def test_sortTestMethodsUsing__loadTestsFromNames(self): - def reversed_cmp(x, y): - return -cmp(x, y) - - m = types.ModuleType('m') - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - m.Foo = Foo - - loader = unittest.TestLoader() - loader.sortTestMethodsUsing = reversed_cmp - - tests = [loader.suiteClass([Foo('test_2'), Foo('test_1')])] - self.assertEqual(list(loader.loadTestsFromNames(['Foo'], m)), tests) - - # "Function to be used to compare method names when sorting them in - # getTestCaseNames()" - # - # Does it actually affect getTestCaseNames()? - def test_sortTestMethodsUsing__getTestCaseNames(self): - def reversed_cmp(x, y): - return -cmp(x, y) - - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - - loader = unittest.TestLoader() - loader.sortTestMethodsUsing = reversed_cmp - - test_names = ['test_2', 'test_1'] - self.assertEqual(loader.getTestCaseNames(Foo), test_names) - - # "The default value is the built-in cmp() function" - def test_sortTestMethodsUsing__default_value(self): - loader = unittest.TestLoader() - self.assertTrue(loader.sortTestMethodsUsing is cmp) - - # "it can be set to None to disable the sort." - # - # XXX How is this different from reassigning cmp? Are the tests returned - # in a random order or something? This behaviour should die - def test_sortTestMethodsUsing__None(self): - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - - loader = unittest.TestLoader() - loader.sortTestMethodsUsing = None - - test_names = ['test_2', 'test_1'] - self.assertEqual(set(loader.getTestCaseNames(Foo)), set(test_names)) - - ################################################################ - ### /Tests for TestLoader.sortTestMethodsUsing - - ### Tests for TestLoader.suiteClass - ################################################################ - - # "Callable object that constructs a test suite from a list of tests." - def test_suiteClass__loadTestsFromTestCase(self): - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foo_bar(self): pass - - tests = [Foo('test_1'), Foo('test_2')] - - loader = unittest.TestLoader() - loader.suiteClass = list - self.assertEqual(loader.loadTestsFromTestCase(Foo), tests) - - # It is implicit in the documentation for TestLoader.suiteClass that - # all TestLoader.loadTestsFrom* methods respect it. Let's make sure - def test_suiteClass__loadTestsFromModule(self): - m = types.ModuleType('m') - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foo_bar(self): pass - m.Foo = Foo - - tests = [[Foo('test_1'), Foo('test_2')]] - - loader = unittest.TestLoader() - loader.suiteClass = list - self.assertEqual(loader.loadTestsFromModule(m), tests) - - # It is implicit in the documentation for TestLoader.suiteClass that - # all TestLoader.loadTestsFrom* methods respect it. Let's make sure - def test_suiteClass__loadTestsFromName(self): - m = types.ModuleType('m') - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foo_bar(self): pass - m.Foo = Foo - - tests = [Foo('test_1'), Foo('test_2')] - - loader = unittest.TestLoader() - loader.suiteClass = list - self.assertEqual(loader.loadTestsFromName('Foo', m), tests) - - # It is implicit in the documentation for TestLoader.suiteClass that - # all TestLoader.loadTestsFrom* methods respect it. Let's make sure - def test_suiteClass__loadTestsFromNames(self): - m = types.ModuleType('m') - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def foo_bar(self): pass - m.Foo = Foo - - tests = [[Foo('test_1'), Foo('test_2')]] - - loader = unittest.TestLoader() - loader.suiteClass = list - self.assertEqual(loader.loadTestsFromNames(['Foo'], m), tests) - - # "The default value is the TestSuite class" - def test_suiteClass__default_value(self): - loader = unittest.TestLoader() - self.assertTrue(loader.suiteClass is unittest.TestSuite) - - # Make sure the dotted name resolution works even if the actual - # function doesn't have the same name as is used to find it. - def test_loadTestsFromName__function_with_different_name_than_method(self): - # lambdas have the name ''. - m = types.ModuleType('m') - class MyTestCase(unittest.TestCase): - test = lambda: 1 - m.testcase_1 = MyTestCase - - loader = unittest.TestLoader() - suite = loader.loadTestsFromNames(['testcase_1.test'], m) - self.assertIsInstance(suite, loader.suiteClass) - - ref_suite = unittest.TestSuite([MyTestCase('test')]) - self.assertEqual(list(suite), [ref_suite]) - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_program.py b/PythonLib/full/unittest/test/test_program.py deleted file mode 100644 index 45d90975..00000000 --- a/PythonLib/full/unittest/test/test_program.py +++ /dev/null @@ -1,255 +0,0 @@ -from cStringIO import StringIO - -import os -import sys -import unittest - - -class Test_TestProgram(unittest.TestCase): - - def test_discovery_from_dotted_path(self): - loader = unittest.TestLoader() - - tests = [self] - expectedPath = os.path.abspath(os.path.dirname(unittest.test.__file__)) - - self.wasRun = False - def _find_tests(start_dir, pattern): - self.wasRun = True - self.assertEqual(start_dir, expectedPath) - return tests - loader._find_tests = _find_tests - suite = loader.discover('unittest.test') - self.assertTrue(self.wasRun) - self.assertEqual(suite._tests, tests) - - # Horrible white box test - def testNoExit(self): - result = object() - test = object() - - class FakeRunner(object): - def run(self, test): - self.test = test - return result - - runner = FakeRunner() - - oldParseArgs = unittest.TestProgram.parseArgs - def restoreParseArgs(): - unittest.TestProgram.parseArgs = oldParseArgs - unittest.TestProgram.parseArgs = lambda *args: None - self.addCleanup(restoreParseArgs) - - def removeTest(): - del unittest.TestProgram.test - unittest.TestProgram.test = test - self.addCleanup(removeTest) - - program = unittest.TestProgram(testRunner=runner, exit=False, verbosity=2) - - self.assertEqual(program.result, result) - self.assertEqual(runner.test, test) - self.assertEqual(program.verbosity, 2) - - class FooBar(unittest.TestCase): - def testPass(self): - assert True - def testFail(self): - assert False - - class FooBarLoader(unittest.TestLoader): - """Test loader that returns a suite containing FooBar.""" - def loadTestsFromModule(self, module): - return self.suiteClass( - [self.loadTestsFromTestCase(Test_TestProgram.FooBar)]) - - - def test_NonExit(self): - program = unittest.main(exit=False, - argv=["foobar"], - testRunner=unittest.TextTestRunner(stream=StringIO()), - testLoader=self.FooBarLoader()) - self.assertTrue(hasattr(program, 'result')) - - - def test_Exit(self): - self.assertRaises( - SystemExit, - unittest.main, - argv=["foobar"], - testRunner=unittest.TextTestRunner(stream=StringIO()), - exit=True, - testLoader=self.FooBarLoader()) - - - def test_ExitAsDefault(self): - self.assertRaises( - SystemExit, - unittest.main, - argv=["foobar"], - testRunner=unittest.TextTestRunner(stream=StringIO()), - testLoader=self.FooBarLoader()) - - -class InitialisableProgram(unittest.TestProgram): - exit = False - result = None - verbosity = 1 - defaultTest = None - testRunner = None - testLoader = unittest.defaultTestLoader - progName = 'test' - test = 'test' - def __init__(self, *args): - pass - -RESULT = object() - -class FakeRunner(object): - initArgs = None - test = None - raiseError = False - - def __init__(self, **kwargs): - FakeRunner.initArgs = kwargs - if FakeRunner.raiseError: - FakeRunner.raiseError = False - raise TypeError - - def run(self, test): - FakeRunner.test = test - return RESULT - -class TestCommandLineArgs(unittest.TestCase): - - def setUp(self): - self.program = InitialisableProgram() - self.program.createTests = lambda: None - FakeRunner.initArgs = None - FakeRunner.test = None - FakeRunner.raiseError = False - - def testHelpAndUnknown(self): - program = self.program - def usageExit(msg=None): - program.msg = msg - program.exit = True - program.usageExit = usageExit - - for opt in '-h', '-H', '--help': - program.exit = False - program.parseArgs([None, opt]) - self.assertTrue(program.exit) - self.assertIsNone(program.msg) - - program.parseArgs([None, '-$']) - self.assertTrue(program.exit) - self.assertIsNotNone(program.msg) - - def testVerbosity(self): - program = self.program - - for opt in '-q', '--quiet': - program.verbosity = 1 - program.parseArgs([None, opt]) - self.assertEqual(program.verbosity, 0) - - for opt in '-v', '--verbose': - program.verbosity = 1 - program.parseArgs([None, opt]) - self.assertEqual(program.verbosity, 2) - - def testBufferCatchFailfast(self): - program = self.program - for arg, attr in (('buffer', 'buffer'), ('failfast', 'failfast'), - ('catch', 'catchbreak')): - if attr == 'catch' and not hasInstallHandler: - continue - - short_opt = '-%s' % arg[0] - long_opt = '--%s' % arg - for opt in short_opt, long_opt: - setattr(program, attr, None) - - program.parseArgs([None, opt]) - self.assertTrue(getattr(program, attr)) - - for opt in short_opt, long_opt: - not_none = object() - setattr(program, attr, not_none) - - program.parseArgs([None, opt]) - self.assertEqual(getattr(program, attr), not_none) - - def testRunTestsRunnerClass(self): - program = self.program - - program.testRunner = FakeRunner - program.verbosity = 'verbosity' - program.failfast = 'failfast' - program.buffer = 'buffer' - - program.runTests() - - self.assertEqual(FakeRunner.initArgs, {'verbosity': 'verbosity', - 'failfast': 'failfast', - 'buffer': 'buffer'}) - self.assertEqual(FakeRunner.test, 'test') - self.assertIs(program.result, RESULT) - - def testRunTestsRunnerInstance(self): - program = self.program - - program.testRunner = FakeRunner() - FakeRunner.initArgs = None - - program.runTests() - - # A new FakeRunner should not have been instantiated - self.assertIsNone(FakeRunner.initArgs) - - self.assertEqual(FakeRunner.test, 'test') - self.assertIs(program.result, RESULT) - - def testRunTestsOldRunnerClass(self): - program = self.program - - FakeRunner.raiseError = True - program.testRunner = FakeRunner - program.verbosity = 'verbosity' - program.failfast = 'failfast' - program.buffer = 'buffer' - program.test = 'test' - - program.runTests() - - # If initializing raises a type error it should be retried - # without the new keyword arguments - self.assertEqual(FakeRunner.initArgs, {}) - self.assertEqual(FakeRunner.test, 'test') - self.assertIs(program.result, RESULT) - - def testCatchBreakInstallsHandler(self): - module = sys.modules['unittest.main'] - original = module.installHandler - def restore(): - module.installHandler = original - self.addCleanup(restore) - - self.installed = False - def fakeInstallHandler(): - self.installed = True - module.installHandler = fakeInstallHandler - - program = self.program - program.catchbreak = True - - program.testRunner = FakeRunner - - program.runTests() - self.assertTrue(self.installed) - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_result.py b/PythonLib/full/unittest/test/test_result.py deleted file mode 100644 index eb68c1d0..00000000 --- a/PythonLib/full/unittest/test/test_result.py +++ /dev/null @@ -1,567 +0,0 @@ -import sys -import textwrap -from StringIO import StringIO -from test import test_support - -import traceback -import unittest - - -class Test_TestResult(unittest.TestCase): - # Note: there are not separate tests for TestResult.wasSuccessful(), - # TestResult.errors, TestResult.failures, TestResult.testsRun or - # TestResult.shouldStop because these only have meaning in terms of - # other TestResult methods. - # - # Accordingly, tests for the aforenamed attributes are incorporated - # in with the tests for the defining methods. - ################################################################ - - def test_init(self): - result = unittest.TestResult() - - self.assertTrue(result.wasSuccessful()) - self.assertEqual(len(result.errors), 0) - self.assertEqual(len(result.failures), 0) - self.assertEqual(result.testsRun, 0) - self.assertEqual(result.shouldStop, False) - self.assertIsNone(result._stdout_buffer) - self.assertIsNone(result._stderr_buffer) - - - # "This method can be called to signal that the set of tests being - # run should be aborted by setting the TestResult's shouldStop - # attribute to True." - def test_stop(self): - result = unittest.TestResult() - - result.stop() - - self.assertEqual(result.shouldStop, True) - - # "Called when the test case test is about to be run. The default - # implementation simply increments the instance's testsRun counter." - def test_startTest(self): - class Foo(unittest.TestCase): - def test_1(self): - pass - - test = Foo('test_1') - - result = unittest.TestResult() - - result.startTest(test) - - self.assertTrue(result.wasSuccessful()) - self.assertEqual(len(result.errors), 0) - self.assertEqual(len(result.failures), 0) - self.assertEqual(result.testsRun, 1) - self.assertEqual(result.shouldStop, False) - - result.stopTest(test) - - # "Called after the test case test has been executed, regardless of - # the outcome. The default implementation does nothing." - def test_stopTest(self): - class Foo(unittest.TestCase): - def test_1(self): - pass - - test = Foo('test_1') - - result = unittest.TestResult() - - result.startTest(test) - - self.assertTrue(result.wasSuccessful()) - self.assertEqual(len(result.errors), 0) - self.assertEqual(len(result.failures), 0) - self.assertEqual(result.testsRun, 1) - self.assertEqual(result.shouldStop, False) - - result.stopTest(test) - - # Same tests as above; make sure nothing has changed - self.assertTrue(result.wasSuccessful()) - self.assertEqual(len(result.errors), 0) - self.assertEqual(len(result.failures), 0) - self.assertEqual(result.testsRun, 1) - self.assertEqual(result.shouldStop, False) - - # "Called before and after tests are run. The default implementation does nothing." - def test_startTestRun_stopTestRun(self): - result = unittest.TestResult() - result.startTestRun() - result.stopTestRun() - - # "addSuccess(test)" - # ... - # "Called when the test case test succeeds" - # ... - # "wasSuccessful() - Returns True if all tests run so far have passed, - # otherwise returns False" - # ... - # "testsRun - The total number of tests run so far." - # ... - # "errors - A list containing 2-tuples of TestCase instances and - # formatted tracebacks. Each tuple represents a test which raised an - # unexpected exception. Contains formatted - # tracebacks instead of sys.exc_info() results." - # ... - # "failures - A list containing 2-tuples of TestCase instances and - # formatted tracebacks. Each tuple represents a test where a failure was - # explicitly signalled using the TestCase.fail*() or TestCase.assert*() - # methods. Contains formatted tracebacks instead - # of sys.exc_info() results." - def test_addSuccess(self): - class Foo(unittest.TestCase): - def test_1(self): - pass - - test = Foo('test_1') - - result = unittest.TestResult() - - result.startTest(test) - result.addSuccess(test) - result.stopTest(test) - - self.assertTrue(result.wasSuccessful()) - self.assertEqual(len(result.errors), 0) - self.assertEqual(len(result.failures), 0) - self.assertEqual(result.testsRun, 1) - self.assertEqual(result.shouldStop, False) - - # "addFailure(test, err)" - # ... - # "Called when the test case test signals a failure. err is a tuple of - # the form returned by sys.exc_info(): (type, value, traceback)" - # ... - # "wasSuccessful() - Returns True if all tests run so far have passed, - # otherwise returns False" - # ... - # "testsRun - The total number of tests run so far." - # ... - # "errors - A list containing 2-tuples of TestCase instances and - # formatted tracebacks. Each tuple represents a test which raised an - # unexpected exception. Contains formatted - # tracebacks instead of sys.exc_info() results." - # ... - # "failures - A list containing 2-tuples of TestCase instances and - # formatted tracebacks. Each tuple represents a test where a failure was - # explicitly signalled using the TestCase.fail*() or TestCase.assert*() - # methods. Contains formatted tracebacks instead - # of sys.exc_info() results." - def test_addFailure(self): - class Foo(unittest.TestCase): - def test_1(self): - pass - - test = Foo('test_1') - try: - test.fail("foo") - except: - exc_info_tuple = sys.exc_info() - - result = unittest.TestResult() - - result.startTest(test) - result.addFailure(test, exc_info_tuple) - result.stopTest(test) - - self.assertFalse(result.wasSuccessful()) - self.assertEqual(len(result.errors), 0) - self.assertEqual(len(result.failures), 1) - self.assertEqual(result.testsRun, 1) - self.assertEqual(result.shouldStop, False) - - test_case, formatted_exc = result.failures[0] - self.assertTrue(test_case is test) - self.assertIsInstance(formatted_exc, str) - - # "addError(test, err)" - # ... - # "Called when the test case test raises an unexpected exception err - # is a tuple of the form returned by sys.exc_info(): - # (type, value, traceback)" - # ... - # "wasSuccessful() - Returns True if all tests run so far have passed, - # otherwise returns False" - # ... - # "testsRun - The total number of tests run so far." - # ... - # "errors - A list containing 2-tuples of TestCase instances and - # formatted tracebacks. Each tuple represents a test which raised an - # unexpected exception. Contains formatted - # tracebacks instead of sys.exc_info() results." - # ... - # "failures - A list containing 2-tuples of TestCase instances and - # formatted tracebacks. Each tuple represents a test where a failure was - # explicitly signalled using the TestCase.fail*() or TestCase.assert*() - # methods. Contains formatted tracebacks instead - # of sys.exc_info() results." - def test_addError(self): - class Foo(unittest.TestCase): - def test_1(self): - pass - - test = Foo('test_1') - try: - raise TypeError() - except: - exc_info_tuple = sys.exc_info() - - result = unittest.TestResult() - - result.startTest(test) - result.addError(test, exc_info_tuple) - result.stopTest(test) - - self.assertFalse(result.wasSuccessful()) - self.assertEqual(len(result.errors), 1) - self.assertEqual(len(result.failures), 0) - self.assertEqual(result.testsRun, 1) - self.assertEqual(result.shouldStop, False) - - test_case, formatted_exc = result.errors[0] - self.assertTrue(test_case is test) - self.assertIsInstance(formatted_exc, str) - - def testGetDescriptionWithoutDocstring(self): - result = unittest.TextTestResult(None, True, 1) - self.assertEqual( - result.getDescription(self), - 'testGetDescriptionWithoutDocstring (' + __name__ + - '.Test_TestResult)') - - @unittest.skipIf(sys.flags.optimize >= 2, - "Docstrings are omitted with -O2 and above") - def testGetDescriptionWithOneLineDocstring(self): - """Tests getDescription() for a method with a docstring.""" - result = unittest.TextTestResult(None, True, 1) - self.assertEqual( - result.getDescription(self), - ('testGetDescriptionWithOneLineDocstring ' - '(' + __name__ + '.Test_TestResult)\n' - 'Tests getDescription() for a method with a docstring.')) - - @unittest.skipIf(sys.flags.optimize >= 2, - "Docstrings are omitted with -O2 and above") - def testGetDescriptionWithMultiLineDocstring(self): - """Tests getDescription() for a method with a longer docstring. - The second line of the docstring. - """ - result = unittest.TextTestResult(None, True, 1) - self.assertEqual( - result.getDescription(self), - ('testGetDescriptionWithMultiLineDocstring ' - '(' + __name__ + '.Test_TestResult)\n' - 'Tests getDescription() for a method with a longer ' - 'docstring.')) - - def testStackFrameTrimming(self): - class Frame(object): - class tb_frame(object): - f_globals = {} - result = unittest.TestResult() - self.assertFalse(result._is_relevant_tb_level(Frame)) - - Frame.tb_frame.f_globals['__unittest'] = True - self.assertTrue(result._is_relevant_tb_level(Frame)) - - def testFailFast(self): - result = unittest.TestResult() - result._exc_info_to_string = lambda *_: '' - result.failfast = True - result.addError(None, None) - self.assertTrue(result.shouldStop) - - result = unittest.TestResult() - result._exc_info_to_string = lambda *_: '' - result.failfast = True - result.addFailure(None, None) - self.assertTrue(result.shouldStop) - - result = unittest.TestResult() - result._exc_info_to_string = lambda *_: '' - result.failfast = True - result.addUnexpectedSuccess(None) - self.assertTrue(result.shouldStop) - - def testFailFastSetByRunner(self): - runner = unittest.TextTestRunner(stream=StringIO(), failfast=True) - def test(result): - self.assertTrue(result.failfast) - runner.run(test) - - -classDict = dict(unittest.TestResult.__dict__) -for m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess', - '__init__'): - del classDict[m] - -def __init__(self, stream=None, descriptions=None, verbosity=None): - self.failures = [] - self.errors = [] - self.testsRun = 0 - self.shouldStop = False - self.buffer = False - -classDict['__init__'] = __init__ -OldResult = type('OldResult', (object,), classDict) - -class Test_OldTestResult(unittest.TestCase): - - def assertOldResultWarning(self, test, failures): - with test_support.check_warnings(("TestResult has no add.+ method,", - RuntimeWarning)): - result = OldResult() - test.run(result) - self.assertEqual(len(result.failures), failures) - - def testOldTestResult(self): - class Test(unittest.TestCase): - def testSkip(self): - self.skipTest('foobar') - @unittest.expectedFailure - def testExpectedFail(self): - raise TypeError - @unittest.expectedFailure - def testUnexpectedSuccess(self): - pass - - for test_name, should_pass in (('testSkip', True), - ('testExpectedFail', True), - ('testUnexpectedSuccess', False)): - test = Test(test_name) - self.assertOldResultWarning(test, int(not should_pass)) - - def testOldTestTesultSetup(self): - class Test(unittest.TestCase): - def setUp(self): - self.skipTest('no reason') - def testFoo(self): - pass - self.assertOldResultWarning(Test('testFoo'), 0) - - def testOldTestResultClass(self): - @unittest.skip('no reason') - class Test(unittest.TestCase): - def testFoo(self): - pass - self.assertOldResultWarning(Test('testFoo'), 0) - - def testOldResultWithRunner(self): - class Test(unittest.TestCase): - def testFoo(self): - pass - runner = unittest.TextTestRunner(resultclass=OldResult, - stream=StringIO()) - # This will raise an exception if TextTestRunner can't handle old - # test result objects - runner.run(Test('testFoo')) - - -class MockTraceback(object): - @staticmethod - def format_exception(*_): - return ['A traceback'] - -def restore_traceback(): - unittest.result.traceback = traceback - - -class TestOutputBuffering(unittest.TestCase): - - def setUp(self): - self._real_out = sys.stdout - self._real_err = sys.stderr - - def tearDown(self): - sys.stdout = self._real_out - sys.stderr = self._real_err - - def testBufferOutputOff(self): - real_out = self._real_out - real_err = self._real_err - - result = unittest.TestResult() - self.assertFalse(result.buffer) - - self.assertIs(real_out, sys.stdout) - self.assertIs(real_err, sys.stderr) - - result.startTest(self) - - self.assertIs(real_out, sys.stdout) - self.assertIs(real_err, sys.stderr) - - def testBufferOutputStartTestAddSuccess(self): - real_out = self._real_out - real_err = self._real_err - - result = unittest.TestResult() - self.assertFalse(result.buffer) - - result.buffer = True - - self.assertIs(real_out, sys.stdout) - self.assertIs(real_err, sys.stderr) - - result.startTest(self) - - self.assertIsNot(real_out, sys.stdout) - self.assertIsNot(real_err, sys.stderr) - self.assertIsInstance(sys.stdout, StringIO) - self.assertIsInstance(sys.stderr, StringIO) - self.assertIsNot(sys.stdout, sys.stderr) - - out_stream = sys.stdout - err_stream = sys.stderr - - result._original_stdout = StringIO() - result._original_stderr = StringIO() - - print 'foo' - print >> sys.stderr, 'bar' - - self.assertEqual(out_stream.getvalue(), 'foo\n') - self.assertEqual(err_stream.getvalue(), 'bar\n') - - self.assertEqual(result._original_stdout.getvalue(), '') - self.assertEqual(result._original_stderr.getvalue(), '') - - result.addSuccess(self) - result.stopTest(self) - - self.assertIs(sys.stdout, result._original_stdout) - self.assertIs(sys.stderr, result._original_stderr) - - self.assertEqual(result._original_stdout.getvalue(), '') - self.assertEqual(result._original_stderr.getvalue(), '') - - self.assertEqual(out_stream.getvalue(), '') - self.assertEqual(err_stream.getvalue(), '') - - - def getStartedResult(self): - result = unittest.TestResult() - result.buffer = True - result.startTest(self) - return result - - def testBufferOutputAddErrorOrFailure(self): - unittest.result.traceback = MockTraceback - self.addCleanup(restore_traceback) - - for message_attr, add_attr, include_error in [ - ('errors', 'addError', True), - ('failures', 'addFailure', False), - ('errors', 'addError', True), - ('failures', 'addFailure', False) - ]: - result = self.getStartedResult() - buffered_out = sys.stdout - buffered_err = sys.stderr - result._original_stdout = StringIO() - result._original_stderr = StringIO() - - print >> sys.stdout, 'foo' - if include_error: - print >> sys.stderr, 'bar' - - - addFunction = getattr(result, add_attr) - addFunction(self, (None, None, None)) - result.stopTest(self) - - result_list = getattr(result, message_attr) - self.assertEqual(len(result_list), 1) - - test, message = result_list[0] - expectedOutMessage = textwrap.dedent(""" - Stdout: - foo - """) - expectedErrMessage = '' - if include_error: - expectedErrMessage = textwrap.dedent(""" - Stderr: - bar - """) - expectedFullMessage = 'A traceback%s%s' % (expectedOutMessage, expectedErrMessage) - - self.assertIs(test, self) - self.assertEqual(result._original_stdout.getvalue(), expectedOutMessage) - self.assertEqual(result._original_stderr.getvalue(), expectedErrMessage) - self.assertMultiLineEqual(message, expectedFullMessage) - - def testBufferSetupClass(self): - result = unittest.TestResult() - result.buffer = True - - class Foo(unittest.TestCase): - @classmethod - def setUpClass(cls): - 1//0 - def test_foo(self): - pass - suite = unittest.TestSuite([Foo('test_foo')]) - suite(result) - self.assertEqual(len(result.errors), 1) - - def testBufferTearDownClass(self): - result = unittest.TestResult() - result.buffer = True - - class Foo(unittest.TestCase): - @classmethod - def tearDownClass(cls): - 1//0 - def test_foo(self): - pass - suite = unittest.TestSuite([Foo('test_foo')]) - suite(result) - self.assertEqual(len(result.errors), 1) - - def testBufferSetUpModule(self): - result = unittest.TestResult() - result.buffer = True - - class Foo(unittest.TestCase): - def test_foo(self): - pass - class Module(object): - @staticmethod - def setUpModule(): - 1//0 - - Foo.__module__ = 'Module' - sys.modules['Module'] = Module - self.addCleanup(sys.modules.pop, 'Module') - suite = unittest.TestSuite([Foo('test_foo')]) - suite(result) - self.assertEqual(len(result.errors), 1) - - def testBufferTearDownModule(self): - result = unittest.TestResult() - result.buffer = True - - class Foo(unittest.TestCase): - def test_foo(self): - pass - class Module(object): - @staticmethod - def tearDownModule(): - 1//0 - - Foo.__module__ = 'Module' - sys.modules['Module'] = Module - self.addCleanup(sys.modules.pop, 'Module') - suite = unittest.TestSuite([Foo('test_foo')]) - suite(result) - self.assertEqual(len(result.errors), 1) - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_runner.py b/PythonLib/full/unittest/test/test_runner.py deleted file mode 100644 index 3b661d33..00000000 --- a/PythonLib/full/unittest/test/test_runner.py +++ /dev/null @@ -1,266 +0,0 @@ -import unittest - -from cStringIO import StringIO -import pickle - -from .support import LoggingResult, ResultWithNoStartTestRunStopTestRun - - -class TestCleanUp(unittest.TestCase): - - def testCleanUp(self): - class TestableTest(unittest.TestCase): - def testNothing(self): - pass - - test = TestableTest('testNothing') - self.assertEqual(test._cleanups, []) - - cleanups = [] - - def cleanup1(*args, **kwargs): - cleanups.append((1, args, kwargs)) - - def cleanup2(*args, **kwargs): - cleanups.append((2, args, kwargs)) - - test.addCleanup(cleanup1, 1, 2, 3, four='hello', five='goodbye') - test.addCleanup(cleanup2) - - self.assertEqual(test._cleanups, - [(cleanup1, (1, 2, 3), dict(four='hello', five='goodbye')), - (cleanup2, (), {})]) - - result = test.doCleanups() - self.assertTrue(result) - - self.assertEqual(cleanups, [(2, (), {}), (1, (1, 2, 3), - dict(four='hello', five='goodbye'))]) - - def testCleanUpWithErrors(self): - class TestableTest(unittest.TestCase): - def testNothing(self): - pass - - class MockResult(object): - errors = [] - def addError(self, test, exc_info): - self.errors.append((test, exc_info)) - - result = MockResult() - test = TestableTest('testNothing') - test._resultForDoCleanups = result - - exc1 = Exception('foo') - exc2 = Exception('bar') - def cleanup1(): - raise exc1 - - def cleanup2(): - raise exc2 - - test.addCleanup(cleanup1) - test.addCleanup(cleanup2) - - self.assertFalse(test.doCleanups()) - - (test1, (Type1, instance1, _)), (test2, (Type2, instance2, _)) = reversed(MockResult.errors) - self.assertEqual((test1, Type1, instance1), (test, Exception, exc1)) - self.assertEqual((test2, Type2, instance2), (test, Exception, exc2)) - - def testCleanupInRun(self): - blowUp = False - ordering = [] - - class TestableTest(unittest.TestCase): - def setUp(self): - ordering.append('setUp') - if blowUp: - raise Exception('foo') - - def testNothing(self): - ordering.append('test') - - def tearDown(self): - ordering.append('tearDown') - - test = TestableTest('testNothing') - - def cleanup1(): - ordering.append('cleanup1') - def cleanup2(): - ordering.append('cleanup2') - test.addCleanup(cleanup1) - test.addCleanup(cleanup2) - - def success(some_test): - self.assertEqual(some_test, test) - ordering.append('success') - - result = unittest.TestResult() - result.addSuccess = success - - test.run(result) - self.assertEqual(ordering, ['setUp', 'test', 'tearDown', - 'cleanup2', 'cleanup1', 'success']) - - blowUp = True - ordering = [] - test = TestableTest('testNothing') - test.addCleanup(cleanup1) - test.run(result) - self.assertEqual(ordering, ['setUp', 'cleanup1']) - - def testTestCaseDebugExecutesCleanups(self): - ordering = [] - - class TestableTest(unittest.TestCase): - def setUp(self): - ordering.append('setUp') - self.addCleanup(cleanup1) - - def testNothing(self): - ordering.append('test') - - def tearDown(self): - ordering.append('tearDown') - - test = TestableTest('testNothing') - - def cleanup1(): - ordering.append('cleanup1') - test.addCleanup(cleanup2) - def cleanup2(): - ordering.append('cleanup2') - - test.debug() - self.assertEqual(ordering, ['setUp', 'test', 'tearDown', 'cleanup1', 'cleanup2']) - - -class Test_TextTestRunner(unittest.TestCase): - """Tests for TextTestRunner.""" - - def test_init(self): - runner = unittest.TextTestRunner() - self.assertFalse(runner.failfast) - self.assertFalse(runner.buffer) - self.assertEqual(runner.verbosity, 1) - self.assertTrue(runner.descriptions) - self.assertEqual(runner.resultclass, unittest.TextTestResult) - - - def test_multiple_inheritance(self): - class AResult(unittest.TestResult): - def __init__(self, stream, descriptions, verbosity): - super(AResult, self).__init__(stream, descriptions, verbosity) - - class ATextResult(unittest.TextTestResult, AResult): - pass - - # This used to raise an exception due to TextTestResult not passing - # on arguments in its __init__ super call - ATextResult(None, None, 1) - - - def testBufferAndFailfast(self): - class Test(unittest.TestCase): - def testFoo(self): - pass - result = unittest.TestResult() - runner = unittest.TextTestRunner(stream=StringIO(), failfast=True, - buffer=True) - # Use our result object - runner._makeResult = lambda: result - runner.run(Test('testFoo')) - - self.assertTrue(result.failfast) - self.assertTrue(result.buffer) - - def testRunnerRegistersResult(self): - class Test(unittest.TestCase): - def testFoo(self): - pass - originalRegisterResult = unittest.runner.registerResult - def cleanup(): - unittest.runner.registerResult = originalRegisterResult - self.addCleanup(cleanup) - - result = unittest.TestResult() - runner = unittest.TextTestRunner(stream=StringIO()) - # Use our result object - runner._makeResult = lambda: result - - self.wasRegistered = 0 - def fakeRegisterResult(thisResult): - self.wasRegistered += 1 - self.assertEqual(thisResult, result) - unittest.runner.registerResult = fakeRegisterResult - - runner.run(unittest.TestSuite()) - self.assertEqual(self.wasRegistered, 1) - - def test_works_with_result_without_startTestRun_stopTestRun(self): - class OldTextResult(ResultWithNoStartTestRunStopTestRun): - separator2 = '' - def printErrors(self): - pass - - class Runner(unittest.TextTestRunner): - def __init__(self): - super(Runner, self).__init__(StringIO()) - - def _makeResult(self): - return OldTextResult() - - runner = Runner() - runner.run(unittest.TestSuite()) - - def test_startTestRun_stopTestRun_called(self): - class LoggingTextResult(LoggingResult): - separator2 = '' - def printErrors(self): - pass - - class LoggingRunner(unittest.TextTestRunner): - def __init__(self, events): - super(LoggingRunner, self).__init__(StringIO()) - self._events = events - - def _makeResult(self): - return LoggingTextResult(self._events) - - events = [] - runner = LoggingRunner(events) - runner.run(unittest.TestSuite()) - expected = ['startTestRun', 'stopTestRun'] - self.assertEqual(events, expected) - - def test_pickle_unpickle(self): - # Issue #7197: a TextTestRunner should be (un)pickleable. This is - # required by test_multiprocessing under Windows (in verbose mode). - from StringIO import StringIO as PickleableIO - # cStringIO objects are not pickleable, but StringIO objects are. - stream = PickleableIO("foo") - runner = unittest.TextTestRunner(stream) - for protocol in range(pickle.HIGHEST_PROTOCOL + 1): - s = pickle.dumps(runner, protocol=protocol) - obj = pickle.loads(s) - # StringIO objects never compare equal, a cheap test instead. - self.assertEqual(obj.stream.getvalue(), stream.getvalue()) - - def test_resultclass(self): - def MockResultClass(*args): - return args - STREAM = object() - DESCRIPTIONS = object() - VERBOSITY = object() - runner = unittest.TextTestRunner(STREAM, DESCRIPTIONS, VERBOSITY, - resultclass=MockResultClass) - self.assertEqual(runner.resultclass, MockResultClass) - - expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY) - self.assertEqual(runner._makeResult(), expectedresult) - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_setups.py b/PythonLib/full/unittest/test/test_setups.py deleted file mode 100644 index 9456819e..00000000 --- a/PythonLib/full/unittest/test/test_setups.py +++ /dev/null @@ -1,508 +0,0 @@ -import sys - -from cStringIO import StringIO - -import unittest - - -def resultFactory(*_): - return unittest.TestResult() - - -class TestSetups(unittest.TestCase): - - def getRunner(self): - return unittest.TextTestRunner(resultclass=resultFactory, - stream=StringIO()) - def runTests(self, *cases): - suite = unittest.TestSuite() - for case in cases: - tests = unittest.defaultTestLoader.loadTestsFromTestCase(case) - suite.addTests(tests) - - runner = self.getRunner() - - # creating a nested suite exposes some potential bugs - realSuite = unittest.TestSuite() - realSuite.addTest(suite) - # adding empty suites to the end exposes potential bugs - suite.addTest(unittest.TestSuite()) - realSuite.addTest(unittest.TestSuite()) - return runner.run(realSuite) - - def test_setup_class(self): - class Test(unittest.TestCase): - setUpCalled = 0 - @classmethod - def setUpClass(cls): - Test.setUpCalled += 1 - unittest.TestCase.setUpClass() - def test_one(self): - pass - def test_two(self): - pass - - result = self.runTests(Test) - - self.assertEqual(Test.setUpCalled, 1) - self.assertEqual(result.testsRun, 2) - self.assertEqual(len(result.errors), 0) - - def test_teardown_class(self): - class Test(unittest.TestCase): - tearDownCalled = 0 - @classmethod - def tearDownClass(cls): - Test.tearDownCalled += 1 - unittest.TestCase.tearDownClass() - def test_one(self): - pass - def test_two(self): - pass - - result = self.runTests(Test) - - self.assertEqual(Test.tearDownCalled, 1) - self.assertEqual(result.testsRun, 2) - self.assertEqual(len(result.errors), 0) - - def test_teardown_class_two_classes(self): - class Test(unittest.TestCase): - tearDownCalled = 0 - @classmethod - def tearDownClass(cls): - Test.tearDownCalled += 1 - unittest.TestCase.tearDownClass() - def test_one(self): - pass - def test_two(self): - pass - - class Test2(unittest.TestCase): - tearDownCalled = 0 - @classmethod - def tearDownClass(cls): - Test2.tearDownCalled += 1 - unittest.TestCase.tearDownClass() - def test_one(self): - pass - def test_two(self): - pass - - result = self.runTests(Test, Test2) - - self.assertEqual(Test.tearDownCalled, 1) - self.assertEqual(Test2.tearDownCalled, 1) - self.assertEqual(result.testsRun, 4) - self.assertEqual(len(result.errors), 0) - - def test_error_in_setupclass(self): - class BrokenTest(unittest.TestCase): - @classmethod - def setUpClass(cls): - raise TypeError('foo') - def test_one(self): - pass - def test_two(self): - pass - - result = self.runTests(BrokenTest) - - self.assertEqual(result.testsRun, 0) - self.assertEqual(len(result.errors), 1) - error, _ = result.errors[0] - self.assertEqual(str(error), - 'setUpClass (%s.BrokenTest)' % __name__) - - def test_error_in_teardown_class(self): - class Test(unittest.TestCase): - tornDown = 0 - @classmethod - def tearDownClass(cls): - Test.tornDown += 1 - raise TypeError('foo') - def test_one(self): - pass - def test_two(self): - pass - - class Test2(unittest.TestCase): - tornDown = 0 - @classmethod - def tearDownClass(cls): - Test2.tornDown += 1 - raise TypeError('foo') - def test_one(self): - pass - def test_two(self): - pass - - result = self.runTests(Test, Test2) - self.assertEqual(result.testsRun, 4) - self.assertEqual(len(result.errors), 2) - self.assertEqual(Test.tornDown, 1) - self.assertEqual(Test2.tornDown, 1) - - error, _ = result.errors[0] - self.assertEqual(str(error), - 'tearDownClass (%s.Test)' % __name__) - - def test_class_not_torndown_when_setup_fails(self): - class Test(unittest.TestCase): - tornDown = False - @classmethod - def setUpClass(cls): - raise TypeError - @classmethod - def tearDownClass(cls): - Test.tornDown = True - raise TypeError('foo') - def test_one(self): - pass - - self.runTests(Test) - self.assertFalse(Test.tornDown) - - def test_class_not_setup_or_torndown_when_skipped(self): - class Test(unittest.TestCase): - classSetUp = False - tornDown = False - @classmethod - def setUpClass(cls): - Test.classSetUp = True - @classmethod - def tearDownClass(cls): - Test.tornDown = True - def test_one(self): - pass - - Test = unittest.skip("hop")(Test) - self.runTests(Test) - self.assertFalse(Test.classSetUp) - self.assertFalse(Test.tornDown) - - def test_setup_teardown_order_with_pathological_suite(self): - results = [] - - class Module1(object): - @staticmethod - def setUpModule(): - results.append('Module1.setUpModule') - @staticmethod - def tearDownModule(): - results.append('Module1.tearDownModule') - - class Module2(object): - @staticmethod - def setUpModule(): - results.append('Module2.setUpModule') - @staticmethod - def tearDownModule(): - results.append('Module2.tearDownModule') - - class Test1(unittest.TestCase): - @classmethod - def setUpClass(cls): - results.append('setup 1') - @classmethod - def tearDownClass(cls): - results.append('teardown 1') - def testOne(self): - results.append('Test1.testOne') - def testTwo(self): - results.append('Test1.testTwo') - - class Test2(unittest.TestCase): - @classmethod - def setUpClass(cls): - results.append('setup 2') - @classmethod - def tearDownClass(cls): - results.append('teardown 2') - def testOne(self): - results.append('Test2.testOne') - def testTwo(self): - results.append('Test2.testTwo') - - class Test3(unittest.TestCase): - @classmethod - def setUpClass(cls): - results.append('setup 3') - @classmethod - def tearDownClass(cls): - results.append('teardown 3') - def testOne(self): - results.append('Test3.testOne') - def testTwo(self): - results.append('Test3.testTwo') - - Test1.__module__ = Test2.__module__ = 'Module' - Test3.__module__ = 'Module2' - sys.modules['Module'] = Module1 - sys.modules['Module2'] = Module2 - - first = unittest.TestSuite((Test1('testOne'),)) - second = unittest.TestSuite((Test1('testTwo'),)) - third = unittest.TestSuite((Test2('testOne'),)) - fourth = unittest.TestSuite((Test2('testTwo'),)) - fifth = unittest.TestSuite((Test3('testOne'),)) - sixth = unittest.TestSuite((Test3('testTwo'),)) - suite = unittest.TestSuite((first, second, third, fourth, fifth, sixth)) - - runner = self.getRunner() - result = runner.run(suite) - self.assertEqual(result.testsRun, 6) - self.assertEqual(len(result.errors), 0) - - self.assertEqual(results, - ['Module1.setUpModule', 'setup 1', - 'Test1.testOne', 'Test1.testTwo', 'teardown 1', - 'setup 2', 'Test2.testOne', 'Test2.testTwo', - 'teardown 2', 'Module1.tearDownModule', - 'Module2.setUpModule', 'setup 3', - 'Test3.testOne', 'Test3.testTwo', - 'teardown 3', 'Module2.tearDownModule']) - - def test_setup_module(self): - class Module(object): - moduleSetup = 0 - @staticmethod - def setUpModule(): - Module.moduleSetup += 1 - - class Test(unittest.TestCase): - def test_one(self): - pass - def test_two(self): - pass - Test.__module__ = 'Module' - sys.modules['Module'] = Module - - result = self.runTests(Test) - self.assertEqual(Module.moduleSetup, 1) - self.assertEqual(result.testsRun, 2) - self.assertEqual(len(result.errors), 0) - - def test_error_in_setup_module(self): - class Module(object): - moduleSetup = 0 - moduleTornDown = 0 - @staticmethod - def setUpModule(): - Module.moduleSetup += 1 - raise TypeError('foo') - @staticmethod - def tearDownModule(): - Module.moduleTornDown += 1 - - class Test(unittest.TestCase): - classSetUp = False - classTornDown = False - @classmethod - def setUpClass(cls): - Test.classSetUp = True - @classmethod - def tearDownClass(cls): - Test.classTornDown = True - def test_one(self): - pass - def test_two(self): - pass - - class Test2(unittest.TestCase): - def test_one(self): - pass - def test_two(self): - pass - Test.__module__ = 'Module' - Test2.__module__ = 'Module' - sys.modules['Module'] = Module - - result = self.runTests(Test, Test2) - self.assertEqual(Module.moduleSetup, 1) - self.assertEqual(Module.moduleTornDown, 0) - self.assertEqual(result.testsRun, 0) - self.assertFalse(Test.classSetUp) - self.assertFalse(Test.classTornDown) - self.assertEqual(len(result.errors), 1) - error, _ = result.errors[0] - self.assertEqual(str(error), 'setUpModule (Module)') - - def test_testcase_with_missing_module(self): - class Test(unittest.TestCase): - def test_one(self): - pass - def test_two(self): - pass - Test.__module__ = 'Module' - sys.modules.pop('Module', None) - - result = self.runTests(Test) - self.assertEqual(result.testsRun, 2) - - def test_teardown_module(self): - class Module(object): - moduleTornDown = 0 - @staticmethod - def tearDownModule(): - Module.moduleTornDown += 1 - - class Test(unittest.TestCase): - def test_one(self): - pass - def test_two(self): - pass - Test.__module__ = 'Module' - sys.modules['Module'] = Module - - result = self.runTests(Test) - self.assertEqual(Module.moduleTornDown, 1) - self.assertEqual(result.testsRun, 2) - self.assertEqual(len(result.errors), 0) - - def test_error_in_teardown_module(self): - class Module(object): - moduleTornDown = 0 - @staticmethod - def tearDownModule(): - Module.moduleTornDown += 1 - raise TypeError('foo') - - class Test(unittest.TestCase): - classSetUp = False - classTornDown = False - @classmethod - def setUpClass(cls): - Test.classSetUp = True - @classmethod - def tearDownClass(cls): - Test.classTornDown = True - def test_one(self): - pass - def test_two(self): - pass - - class Test2(unittest.TestCase): - def test_one(self): - pass - def test_two(self): - pass - Test.__module__ = 'Module' - Test2.__module__ = 'Module' - sys.modules['Module'] = Module - - result = self.runTests(Test, Test2) - self.assertEqual(Module.moduleTornDown, 1) - self.assertEqual(result.testsRun, 4) - self.assertTrue(Test.classSetUp) - self.assertTrue(Test.classTornDown) - self.assertEqual(len(result.errors), 1) - error, _ = result.errors[0] - self.assertEqual(str(error), 'tearDownModule (Module)') - - def test_skiptest_in_setupclass(self): - class Test(unittest.TestCase): - @classmethod - def setUpClass(cls): - raise unittest.SkipTest('foo') - def test_one(self): - pass - def test_two(self): - pass - - result = self.runTests(Test) - self.assertEqual(result.testsRun, 0) - self.assertEqual(len(result.errors), 0) - self.assertEqual(len(result.skipped), 1) - skipped = result.skipped[0][0] - self.assertEqual(str(skipped), 'setUpClass (%s.Test)' % __name__) - - def test_skiptest_in_setupmodule(self): - class Test(unittest.TestCase): - def test_one(self): - pass - def test_two(self): - pass - - class Module(object): - @staticmethod - def setUpModule(): - raise unittest.SkipTest('foo') - - Test.__module__ = 'Module' - sys.modules['Module'] = Module - - result = self.runTests(Test) - self.assertEqual(result.testsRun, 0) - self.assertEqual(len(result.errors), 0) - self.assertEqual(len(result.skipped), 1) - skipped = result.skipped[0][0] - self.assertEqual(str(skipped), 'setUpModule (Module)') - - def test_suite_debug_executes_setups_and_teardowns(self): - ordering = [] - - class Module(object): - @staticmethod - def setUpModule(): - ordering.append('setUpModule') - @staticmethod - def tearDownModule(): - ordering.append('tearDownModule') - - class Test(unittest.TestCase): - @classmethod - def setUpClass(cls): - ordering.append('setUpClass') - @classmethod - def tearDownClass(cls): - ordering.append('tearDownClass') - def test_something(self): - ordering.append('test_something') - - Test.__module__ = 'Module' - sys.modules['Module'] = Module - - suite = unittest.defaultTestLoader.loadTestsFromTestCase(Test) - suite.debug() - expectedOrder = ['setUpModule', 'setUpClass', 'test_something', 'tearDownClass', 'tearDownModule'] - self.assertEqual(ordering, expectedOrder) - - def test_suite_debug_propagates_exceptions(self): - class Module(object): - @staticmethod - def setUpModule(): - if phase == 0: - raise Exception('setUpModule') - @staticmethod - def tearDownModule(): - if phase == 1: - raise Exception('tearDownModule') - - class Test(unittest.TestCase): - @classmethod - def setUpClass(cls): - if phase == 2: - raise Exception('setUpClass') - @classmethod - def tearDownClass(cls): - if phase == 3: - raise Exception('tearDownClass') - def test_something(self): - if phase == 4: - raise Exception('test_something') - - Test.__module__ = 'Module' - sys.modules['Module'] = Module - - _suite = unittest.defaultTestLoader.loadTestsFromTestCase(Test) - suite = unittest.TestSuite() - suite.addTest(_suite) - - messages = ('setUpModule', 'tearDownModule', 'setUpClass', 'tearDownClass', 'test_something') - for phase, msg in enumerate(messages): - with self.assertRaisesRegexp(Exception, msg): - suite.debug() - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_skipping.py b/PythonLib/full/unittest/test/test_skipping.py deleted file mode 100644 index d6639d17..00000000 --- a/PythonLib/full/unittest/test/test_skipping.py +++ /dev/null @@ -1,168 +0,0 @@ -import unittest - -from .support import LoggingResult - - -class Test_TestSkipping(unittest.TestCase): - - def test_skipping(self): - class Foo(unittest.TestCase): - def test_skip_me(self): - self.skipTest("skip") - events = [] - result = LoggingResult(events) - test = Foo("test_skip_me") - test.run(result) - self.assertEqual(events, ['startTest', 'addSkip', 'stopTest']) - self.assertEqual(result.skipped, [(test, "skip")]) - - # Try letting setUp skip the test now. - class Foo(unittest.TestCase): - def setUp(self): - self.skipTest("testing") - def test_nothing(self): pass - events = [] - result = LoggingResult(events) - test = Foo("test_nothing") - test.run(result) - self.assertEqual(events, ['startTest', 'addSkip', 'stopTest']) - self.assertEqual(result.skipped, [(test, "testing")]) - self.assertEqual(result.testsRun, 1) - - def test_skipping_decorators(self): - op_table = ((unittest.skipUnless, False, True), - (unittest.skipIf, True, False)) - for deco, do_skip, dont_skip in op_table: - class Foo(unittest.TestCase): - @deco(do_skip, "testing") - def test_skip(self): pass - - @deco(dont_skip, "testing") - def test_dont_skip(self): pass - test_do_skip = Foo("test_skip") - test_dont_skip = Foo("test_dont_skip") - suite = unittest.TestSuite([test_do_skip, test_dont_skip]) - events = [] - result = LoggingResult(events) - suite.run(result) - self.assertEqual(len(result.skipped), 1) - expected = ['startTest', 'addSkip', 'stopTest', - 'startTest', 'addSuccess', 'stopTest'] - self.assertEqual(events, expected) - self.assertEqual(result.testsRun, 2) - self.assertEqual(result.skipped, [(test_do_skip, "testing")]) - self.assertTrue(result.wasSuccessful()) - - def test_skip_class(self): - @unittest.skip("testing") - class Foo(unittest.TestCase): - def test_1(self): - record.append(1) - record = [] - result = unittest.TestResult() - test = Foo("test_1") - suite = unittest.TestSuite([test]) - suite.run(result) - self.assertEqual(result.skipped, [(test, "testing")]) - self.assertEqual(record, []) - - def test_skip_non_unittest_class_old_style(self): - @unittest.skip("testing") - class Mixin: - def test_1(self): - record.append(1) - class Foo(Mixin, unittest.TestCase): - pass - record = [] - result = unittest.TestResult() - test = Foo("test_1") - suite = unittest.TestSuite([test]) - suite.run(result) - self.assertEqual(result.skipped, [(test, "testing")]) - self.assertEqual(record, []) - - def test_skip_non_unittest_class_new_style(self): - @unittest.skip("testing") - class Mixin(object): - def test_1(self): - record.append(1) - class Foo(Mixin, unittest.TestCase): - pass - record = [] - result = unittest.TestResult() - test = Foo("test_1") - suite = unittest.TestSuite([test]) - suite.run(result) - self.assertEqual(result.skipped, [(test, "testing")]) - self.assertEqual(record, []) - - def test_expected_failure(self): - class Foo(unittest.TestCase): - @unittest.expectedFailure - def test_die(self): - self.fail("help me!") - events = [] - result = LoggingResult(events) - test = Foo("test_die") - test.run(result) - self.assertEqual(events, - ['startTest', 'addExpectedFailure', 'stopTest']) - self.assertEqual(result.expectedFailures[0][0], test) - self.assertTrue(result.wasSuccessful()) - - def test_unexpected_success(self): - class Foo(unittest.TestCase): - @unittest.expectedFailure - def test_die(self): - pass - events = [] - result = LoggingResult(events) - test = Foo("test_die") - test.run(result) - self.assertEqual(events, - ['startTest', 'addUnexpectedSuccess', 'stopTest']) - self.assertFalse(result.failures) - self.assertEqual(result.unexpectedSuccesses, [test]) - self.assertTrue(result.wasSuccessful()) - - def test_skip_doesnt_run_setup(self): - class Foo(unittest.TestCase): - wasSetUp = False - wasTornDown = False - def setUp(self): - Foo.wasSetUp = True - def tornDown(self): - Foo.wasTornDown = True - @unittest.skip('testing') - def test_1(self): - pass - - result = unittest.TestResult() - test = Foo("test_1") - suite = unittest.TestSuite([test]) - suite.run(result) - self.assertEqual(result.skipped, [(test, "testing")]) - self.assertFalse(Foo.wasSetUp) - self.assertFalse(Foo.wasTornDown) - - def test_decorated_skip(self): - def decorator(func): - def inner(*a): - return func(*a) - return inner - - class Foo(unittest.TestCase): - @decorator - @unittest.skip('testing') - def test_1(self): - pass - - result = unittest.TestResult() - test = Foo("test_1") - suite = unittest.TestSuite([test]) - suite.run(result) - self.assertEqual(result.skipped, [(test, "testing")]) - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/unittest/test/test_suite.py b/PythonLib/full/unittest/test/test_suite.py deleted file mode 100644 index 72fb527a..00000000 --- a/PythonLib/full/unittest/test/test_suite.py +++ /dev/null @@ -1,367 +0,0 @@ -import unittest - -import sys -from .support import LoggingResult, TestEquality - - -### Support code for Test_TestSuite -################################################################ - -class Test(object): - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - def test_3(self): pass - def runTest(self): pass - -def _mk_TestSuite(*names): - return unittest.TestSuite(Test.Foo(n) for n in names) - -################################################################ - - -class Test_TestSuite(unittest.TestCase, TestEquality): - - ### Set up attributes needed by inherited tests - ################################################################ - - # Used by TestEquality.test_eq - eq_pairs = [(unittest.TestSuite(), unittest.TestSuite()), - (unittest.TestSuite(), unittest.TestSuite([])), - (_mk_TestSuite('test_1'), _mk_TestSuite('test_1'))] - - # Used by TestEquality.test_ne - ne_pairs = [(unittest.TestSuite(), _mk_TestSuite('test_1')), - (unittest.TestSuite([]), _mk_TestSuite('test_1')), - (_mk_TestSuite('test_1', 'test_2'), _mk_TestSuite('test_1', 'test_3')), - (_mk_TestSuite('test_1'), _mk_TestSuite('test_2'))] - - ################################################################ - ### /Set up attributes needed by inherited tests - - ### Tests for TestSuite.__init__ - ################################################################ - - # "class TestSuite([tests])" - # - # The tests iterable should be optional - def test_init__tests_optional(self): - suite = unittest.TestSuite() - - self.assertEqual(suite.countTestCases(), 0) - - # "class TestSuite([tests])" - # ... - # "If tests is given, it must be an iterable of individual test cases - # or other test suites that will be used to build the suite initially" - # - # TestSuite should deal with empty tests iterables by allowing the - # creation of an empty suite - def test_init__empty_tests(self): - suite = unittest.TestSuite([]) - - self.assertEqual(suite.countTestCases(), 0) - - # "class TestSuite([tests])" - # ... - # "If tests is given, it must be an iterable of individual test cases - # or other test suites that will be used to build the suite initially" - # - # TestSuite should allow any iterable to provide tests - def test_init__tests_from_any_iterable(self): - def tests(): - yield unittest.FunctionTestCase(lambda: None) - yield unittest.FunctionTestCase(lambda: None) - - suite_1 = unittest.TestSuite(tests()) - self.assertEqual(suite_1.countTestCases(), 2) - - suite_2 = unittest.TestSuite(suite_1) - self.assertEqual(suite_2.countTestCases(), 2) - - suite_3 = unittest.TestSuite(set(suite_1)) - self.assertEqual(suite_3.countTestCases(), 2) - - # "class TestSuite([tests])" - # ... - # "If tests is given, it must be an iterable of individual test cases - # or other test suites that will be used to build the suite initially" - # - # Does TestSuite() also allow other TestSuite() instances to be present - # in the tests iterable? - def test_init__TestSuite_instances_in_tests(self): - def tests(): - ftc = unittest.FunctionTestCase(lambda: None) - yield unittest.TestSuite([ftc]) - yield unittest.FunctionTestCase(lambda: None) - - suite = unittest.TestSuite(tests()) - self.assertEqual(suite.countTestCases(), 2) - - ################################################################ - ### /Tests for TestSuite.__init__ - - # Container types should support the iter protocol - def test_iter(self): - test1 = unittest.FunctionTestCase(lambda: None) - test2 = unittest.FunctionTestCase(lambda: None) - suite = unittest.TestSuite((test1, test2)) - - self.assertEqual(list(suite), [test1, test2]) - - # "Return the number of tests represented by the this test object. - # ...this method is also implemented by the TestSuite class, which can - # return larger [greater than 1] values" - # - # Presumably an empty TestSuite returns 0? - def test_countTestCases_zero_simple(self): - suite = unittest.TestSuite() - - self.assertEqual(suite.countTestCases(), 0) - - # "Return the number of tests represented by the this test object. - # ...this method is also implemented by the TestSuite class, which can - # return larger [greater than 1] values" - # - # Presumably an empty TestSuite (even if it contains other empty - # TestSuite instances) returns 0? - def test_countTestCases_zero_nested(self): - class Test1(unittest.TestCase): - def test(self): - pass - - suite = unittest.TestSuite([unittest.TestSuite()]) - - self.assertEqual(suite.countTestCases(), 0) - - # "Return the number of tests represented by the this test object. - # ...this method is also implemented by the TestSuite class, which can - # return larger [greater than 1] values" - def test_countTestCases_simple(self): - test1 = unittest.FunctionTestCase(lambda: None) - test2 = unittest.FunctionTestCase(lambda: None) - suite = unittest.TestSuite((test1, test2)) - - self.assertEqual(suite.countTestCases(), 2) - - # "Return the number of tests represented by the this test object. - # ...this method is also implemented by the TestSuite class, which can - # return larger [greater than 1] values" - # - # Make sure this holds for nested TestSuite instances, too - def test_countTestCases_nested(self): - class Test1(unittest.TestCase): - def test1(self): pass - def test2(self): pass - - test2 = unittest.FunctionTestCase(lambda: None) - test3 = unittest.FunctionTestCase(lambda: None) - child = unittest.TestSuite((Test1('test2'), test2)) - parent = unittest.TestSuite((test3, child, Test1('test1'))) - - self.assertEqual(parent.countTestCases(), 4) - - # "Run the tests associated with this suite, collecting the result into - # the test result object passed as result." - # - # And if there are no tests? What then? - def test_run__empty_suite(self): - events = [] - result = LoggingResult(events) - - suite = unittest.TestSuite() - - suite.run(result) - - self.assertEqual(events, []) - - # "Note that unlike TestCase.run(), TestSuite.run() requires the - # "result object to be passed in." - def test_run__requires_result(self): - suite = unittest.TestSuite() - - try: - suite.run() - except TypeError: - pass - else: - self.fail("Failed to raise TypeError") - - # "Run the tests associated with this suite, collecting the result into - # the test result object passed as result." - def test_run(self): - events = [] - result = LoggingResult(events) - - class LoggingCase(unittest.TestCase): - def run(self, result): - events.append('run %s' % self._testMethodName) - - def test1(self): pass - def test2(self): pass - - tests = [LoggingCase('test1'), LoggingCase('test2')] - - unittest.TestSuite(tests).run(result) - - self.assertEqual(events, ['run test1', 'run test2']) - - # "Add a TestCase ... to the suite" - def test_addTest__TestCase(self): - class Foo(unittest.TestCase): - def test(self): pass - - test = Foo('test') - suite = unittest.TestSuite() - - suite.addTest(test) - - self.assertEqual(suite.countTestCases(), 1) - self.assertEqual(list(suite), [test]) - - # "Add a ... TestSuite to the suite" - def test_addTest__TestSuite(self): - class Foo(unittest.TestCase): - def test(self): pass - - suite_2 = unittest.TestSuite([Foo('test')]) - - suite = unittest.TestSuite() - suite.addTest(suite_2) - - self.assertEqual(suite.countTestCases(), 1) - self.assertEqual(list(suite), [suite_2]) - - # "Add all the tests from an iterable of TestCase and TestSuite - # instances to this test suite." - # - # "This is equivalent to iterating over tests, calling addTest() for - # each element" - def test_addTests(self): - class Foo(unittest.TestCase): - def test_1(self): pass - def test_2(self): pass - - test_1 = Foo('test_1') - test_2 = Foo('test_2') - inner_suite = unittest.TestSuite([test_2]) - - def gen(): - yield test_1 - yield test_2 - yield inner_suite - - suite_1 = unittest.TestSuite() - suite_1.addTests(gen()) - - self.assertEqual(list(suite_1), list(gen())) - - # "This is equivalent to iterating over tests, calling addTest() for - # each element" - suite_2 = unittest.TestSuite() - for t in gen(): - suite_2.addTest(t) - - self.assertEqual(suite_1, suite_2) - - # "Add all the tests from an iterable of TestCase and TestSuite - # instances to this test suite." - # - # What happens if it doesn't get an iterable? - def test_addTest__noniterable(self): - suite = unittest.TestSuite() - - try: - suite.addTests(5) - except TypeError: - pass - else: - self.fail("Failed to raise TypeError") - - def test_addTest__noncallable(self): - suite = unittest.TestSuite() - self.assertRaises(TypeError, suite.addTest, 5) - - def test_addTest__casesuiteclass(self): - suite = unittest.TestSuite() - self.assertRaises(TypeError, suite.addTest, Test_TestSuite) - self.assertRaises(TypeError, suite.addTest, unittest.TestSuite) - - def test_addTests__string(self): - suite = unittest.TestSuite() - self.assertRaises(TypeError, suite.addTests, "foo") - - def test_function_in_suite(self): - def f(_): - pass - suite = unittest.TestSuite() - suite.addTest(f) - - # when the bug is fixed this line will not crash - suite.run(unittest.TestResult()) - - - - def test_basetestsuite(self): - class Test(unittest.TestCase): - wasSetUp = False - wasTornDown = False - @classmethod - def setUpClass(cls): - cls.wasSetUp = True - @classmethod - def tearDownClass(cls): - cls.wasTornDown = True - def testPass(self): - pass - def testFail(self): - fail - class Module(object): - wasSetUp = False - wasTornDown = False - @staticmethod - def setUpModule(): - Module.wasSetUp = True - @staticmethod - def tearDownModule(): - Module.wasTornDown = True - - Test.__module__ = 'Module' - sys.modules['Module'] = Module - self.addCleanup(sys.modules.pop, 'Module') - - suite = unittest.BaseTestSuite() - suite.addTests([Test('testPass'), Test('testFail')]) - self.assertEqual(suite.countTestCases(), 2) - - result = unittest.TestResult() - suite.run(result) - self.assertFalse(Module.wasSetUp) - self.assertFalse(Module.wasTornDown) - self.assertFalse(Test.wasSetUp) - self.assertFalse(Test.wasTornDown) - self.assertEqual(len(result.errors), 1) - self.assertEqual(len(result.failures), 0) - self.assertEqual(result.testsRun, 2) - - - def test_overriding_call(self): - class MySuite(unittest.TestSuite): - called = False - def __call__(self, *args, **kw): - self.called = True - unittest.TestSuite.__call__(self, *args, **kw) - - suite = MySuite() - result = unittest.TestResult() - wrapper = unittest.TestSuite() - wrapper.addTest(suite) - wrapper(result) - self.assertTrue(suite.called) - - # reusing results should be permitted even if abominable - self.assertFalse(result._testRunEntered) - - -if __name__ == '__main__': - unittest.main() diff --git a/PythonLib/full/urllib.py b/PythonLib/full/urllib.py index 244cb053..d85504a5 100644 --- a/PythonLib/full/urllib.py +++ b/PythonLib/full/urllib.py @@ -69,15 +69,15 @@ def pathname2url(pathname): # Shortcut for basic usage _urlopener = None -def urlopen(url, data=None, proxies=None): +def urlopen(url, data=None, proxies=None, context=None): """Create a file-like object for the specified URL to read from.""" from warnings import warnpy3k warnpy3k("urllib.urlopen() has been removed in Python 3.0 in " "favor of urllib2.urlopen()", stacklevel=2) global _urlopener - if proxies is not None: - opener = FancyURLopener(proxies=proxies) + if proxies is not None or context is not None: + opener = FancyURLopener(proxies=proxies, context=context) elif not _urlopener: opener = FancyURLopener() _urlopener = opener @@ -87,11 +87,15 @@ def urlopen(url, data=None, proxies=None): return opener.open(url) else: return opener.open(url, data) -def urlretrieve(url, filename=None, reporthook=None, data=None): +def urlretrieve(url, filename=None, reporthook=None, data=None, context=None): global _urlopener - if not _urlopener: - _urlopener = FancyURLopener() - return _urlopener.retrieve(url, filename, reporthook, data) + if context is not None: + opener = FancyURLopener(context=context) + elif not _urlopener: + _urlopener = opener = FancyURLopener() + else: + opener = _urlopener + return opener.retrieve(url, filename, reporthook, data) def urlcleanup(): if _urlopener: _urlopener.cleanup() @@ -126,14 +130,15 @@ class URLopener: version = "Python-urllib/%s" % __version__ # Constructor - def __init__(self, proxies=None, **x509): + def __init__(self, proxies=None, context=None, **x509): if proxies is None: proxies = getproxies() assert hasattr(proxies, 'has_key'), "proxies must be a mapping" self.proxies = proxies self.key_file = x509.get('key_file') self.cert_file = x509.get('cert_file') - self.addheaders = [('User-Agent', self.version)] + self.context = context + self.addheaders = [('User-Agent', self.version), ('Accept', '*/*')] self.__tempfiles = [] self.__unlink = os.unlink # See cleanup() self.tempcache = None @@ -422,7 +427,8 @@ def open_https(self, url, data=None): auth = None h = httplib.HTTPS(host, 0, key_file=self.key_file, - cert_file=self.cert_file) + cert_file=self.cert_file, + context=self.context) if data is not None: h.putrequest('POST', selector) h.putheader('Content-Type', @@ -623,18 +629,20 @@ def http_error_default(self, url, fp, errcode, errmsg, headers): def http_error_302(self, url, fp, errcode, errmsg, headers, data=None): """Error 302 -- relocated (temporarily).""" self.tries += 1 - if self.maxtries and self.tries >= self.maxtries: - if hasattr(self, "http_error_500"): - meth = self.http_error_500 - else: - meth = self.http_error_default + try: + if self.maxtries and self.tries >= self.maxtries: + if hasattr(self, "http_error_500"): + meth = self.http_error_500 + else: + meth = self.http_error_default + return meth(url, fp, 500, + "Internal Server Error: Redirect Recursion", + headers) + result = self.redirect_internal(url, fp, errcode, errmsg, + headers, data) + return result + finally: self.tries = 0 - return meth(url, fp, 500, - "Internal Server Error: Redirect Recursion", headers) - result = self.redirect_internal(url, fp, errcode, errmsg, headers, - data) - self.tries = 0 - return result def redirect_internal(self, url, fp, errcode, errmsg, headers, data): if 'location' in headers: @@ -865,7 +873,11 @@ def __init__(self, user, passwd, host, port, dirs, self.timeout = timeout self.refcount = 0 self.keepalive = persistent - self.init() + try: + self.init() + except: + self.close() + raise def init(self): import ftplib @@ -920,13 +932,7 @@ def retrfile(self, file, type): return (ftpobj, retrlen) def endtransfer(self): - if not self.busy: - return self.busy = 0 - try: - self.ftp.voidresp() - except ftperrors(): - pass def close(self): self.keepalive = False @@ -984,11 +990,16 @@ def __init__(self, fp, closehook, *hookargs): self.hookargs = hookargs def close(self): - if self.closehook: - self.closehook(*self.hookargs) - self.closehook = None - self.hookargs = None - addbase.close(self) + try: + closehook = self.closehook + hookargs = self.hookargs + if closehook: + self.closehook = None + self.hookargs = None + closehook(*hookargs) + finally: + addbase.close(self) + class addinfo(addbase): """class to add an info() method to an open file.""" @@ -1082,8 +1093,7 @@ def splithost(url): """splithost('//host[:port]/path') --> 'host[:port]', '/path'.""" global _hostprog if _hostprog is None: - import re - _hostprog = re.compile('^//([^/?]*)(.*)$') + _hostprog = re.compile('//([^/#?]*)(.*)', re.DOTALL) match = _hostprog.match(url) if match: @@ -1125,10 +1135,13 @@ def splitport(host): global _portprog if _portprog is None: import re - _portprog = re.compile('^(.*):([0-9]+)$') + _portprog = re.compile('^(.*):([0-9]*)$') match = _portprog.match(host) - if match: return match.group(1, 2) + if match: + host, port = match.groups() + if port: + return host, port return host, None _nportprog = None @@ -1145,12 +1158,12 @@ def splitnport(host, defport=-1): match = _nportprog.match(host) if match: host, port = match.group(1, 2) - try: - if not port: raise ValueError, "no digits" - nport = int(port) - except ValueError: - nport = None - return host, nport + if port: + try: + nport = int(port) + except ValueError: + nport = None + return host, nport return host, defport _queryprog = None @@ -1359,25 +1372,51 @@ def getproxies_environment(): """Return a dictionary of scheme -> proxy server URL mappings. Scan the environment for variables named _proxy; - this seems to be the standard convention. If you need a - different way, you can pass a proxies dictionary to the - [Fancy]URLopener constructor. + this seems to be the standard convention. In order to prefer lowercase + variables, we process the environment in two passes, first matches any + and second matches only lower case proxies. + If you need a different way, you can pass a proxies dictionary to the + [Fancy]URLopener constructor. """ + # Get all variables proxies = {} for name, value in os.environ.items(): name = name.lower() if value and name[-6:] == '_proxy': proxies[name[:-6]] = value + + # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY + # (non-all-lowercase) as it may be set from the web server by a "Proxy:" + # header from the client + # If "proxy" is lowercase, it will still be used thanks to the next block + if 'REQUEST_METHOD' in os.environ: + proxies.pop('http', None) + + # Get lowercase variables + for name, value in os.environ.items(): + if name[-6:] == '_proxy': + name = name.lower() + if value: + proxies[name[:-6]] = value + else: + proxies.pop(name[:-6], None) + return proxies -def proxy_bypass_environment(host): +def proxy_bypass_environment(host, proxies=None): """Test if proxies should not be used for a particular host. - Checks the environment for a variable named no_proxy, which should - be a list of DNS suffixes separated by commas, or '*' for all hosts. + Checks the proxies dict for the value of no_proxy, which should be a + list of comma separated DNS suffixes, or '*' for all hosts. """ - no_proxy = os.environ.get('no_proxy', '') or os.environ.get('NO_PROXY', '') + if proxies is None: + proxies = getproxies_environment() + # don't bypass, if no_proxy isn't specified + try: + no_proxy = proxies['no'] + except KeyError: + return 0 # '*' is special case for always bypass if no_proxy == '*': return 1 @@ -1386,8 +1425,13 @@ def proxy_bypass_environment(host): # check if the host ends with any of the DNS suffixes no_proxy_list = [proxy.strip() for proxy in no_proxy.split(',')] for name in no_proxy_list: - if name and (hostonly.endswith(name) or host.endswith(name)): - return 1 + if name: + name = name.lstrip('.') # ignore leading dots + name = re.escape(name) + pattern = r'(.+\.)?%s$' % name + if (re.match(pattern, hostonly, re.I) + or re.match(pattern, host, re.I)): + return 1 # otherwise, don't bypass return 0 @@ -1463,8 +1507,14 @@ def getproxies_macosx_sysconf(): return _get_proxies() def proxy_bypass(host): - if getproxies_environment(): - return proxy_bypass_environment(host) + """Return True, if a host should be bypassed. + + Checks proxy settings gathered from the environment, if specified, or + from the MacOSX framework SystemConfiguration. + """ + proxies = getproxies_environment() + if proxies: + return proxy_bypass_environment(host, proxies) else: return proxy_bypass_macosx_sysconf(host) @@ -1580,14 +1630,14 @@ def proxy_bypass_registry(host): return 0 def proxy_bypass(host): - """Return a dictionary of scheme -> proxy server URL mappings. + """Return True, if the host should be bypassed. - Returns settings gathered from the environment, if specified, + Checks proxy settings gathered from the environment, if specified, or the registry. - """ - if getproxies_environment(): - return proxy_bypass_environment(host) + proxies = getproxies_environment() + if proxies: + return proxy_bypass_environment(host, proxies) else: return proxy_bypass_registry(host) diff --git a/PythonLib/full/urllib2.py b/PythonLib/full/urllib2.py index aadeb737..8b634ada 100644 --- a/PythonLib/full/urllib2.py +++ b/PythonLib/full/urllib2.py @@ -109,6 +109,14 @@ except ImportError: from StringIO import StringIO +# check for SSL +try: + import ssl +except ImportError: + _have_ssl = False +else: + _have_ssl = True + from urllib import (unwrap, unquote, splittype, splithost, quote, addinfourl, splitport, splittag, toBytes, splitattr, ftpwrapper, splituser, splitpasswd, splitvalue) @@ -120,11 +128,30 @@ __version__ = sys.version[:3] _opener = None -def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): +def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, + cafile=None, capath=None, cadefault=False, context=None): global _opener - if _opener is None: - _opener = build_opener() - return _opener.open(url, data, timeout) + if cafile or capath or cadefault: + if context is not None: + raise ValueError( + "You can't pass both context and any of cafile, capath, and " + "cadefault" + ) + if not _have_ssl: + raise ValueError('SSL support not available') + context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, + cafile=cafile, + capath=capath) + https_handler = HTTPSHandler(context=context) + opener = build_opener(https_handler) + elif context: + https_handler = HTTPSHandler(context=context) + opener = build_opener(https_handler) + elif _opener is None: + _opener = opener = build_opener() + else: + opener = _opener + return opener.open(url, data, timeout) def install_opener(opener): global _opener @@ -221,11 +248,9 @@ def __getattr__(self, attr): # methods getting called in a non-standard order. this may be # too complicated and/or unnecessary. # XXX should the __r_XXX attributes be public? - if attr[:12] == '_Request__r_': - name = attr[12:] - if hasattr(Request, 'get_' + name): - getattr(self, 'get_' + name)() - return getattr(self, attr) + if attr in ('_Request__r_type', '_Request__r_host'): + getattr(self, 'get_' + attr[12:])() + return self.__dict__[attr] raise AttributeError, attr def get_method(self): @@ -584,7 +609,7 @@ def http_error_302(self, req, fp, code, msg, headers): # fix a possible malformed URL urlparts = urlparse.urlparse(newurl) - if not urlparts.path: + if not urlparts.path and urlparts.netloc: urlparts = list(urlparts) urlparts[2] = "/" newurl = urlparse.urlunparse(urlparts) @@ -843,10 +868,7 @@ def __init__(self, password_mgr=None): password_mgr = HTTPPasswordMgr() self.passwd = password_mgr self.add_password = self.passwd.add_password - self.retried = 0 - def reset_retry_count(self): - self.retried = 0 def http_error_auth_reqed(self, authreq, host, req, headers): # host may be an authority (without userinfo) or a URL with an @@ -854,13 +876,6 @@ def http_error_auth_reqed(self, authreq, host, req, headers): # XXX could be multiple headers authreq = headers.get(authreq, None) - if self.retried > 5: - # retry sending the username:password 5 times before failing. - raise HTTPError(req.get_full_url(), 401, "basic auth failed", - headers, None) - else: - self.retried += 1 - if authreq: mo = AbstractBasicAuthHandler.rx.search(authreq) if mo: @@ -869,17 +884,14 @@ def http_error_auth_reqed(self, authreq, host, req, headers): warnings.warn("Basic Auth Realm was unquoted", UserWarning, 2) if scheme.lower() == 'basic': - response = self.retry_http_basic_auth(host, req, realm) - if response and response.code != 401: - self.retried = 0 - return response + return self.retry_http_basic_auth(host, req, realm) def retry_http_basic_auth(self, host, req, realm): user, pw = self.passwd.find_user_password(realm, host) if pw is not None: raw = "%s:%s" % (user, pw) auth = 'Basic %s' % base64.b64encode(raw).strip() - if req.headers.get(self.auth_header, None) == auth: + if req.get_header(self.auth_header, None) == auth: return None req.add_unredirected_header(self.auth_header, auth) return self.parent.open(req, timeout=req.timeout) @@ -895,7 +907,6 @@ def http_error_401(self, req, fp, code, msg, headers): url = req.get_full_url() response = self.http_error_auth_reqed('www-authenticate', url, req, headers) - self.reset_retry_count() return response @@ -911,7 +922,6 @@ def http_error_407(self, req, fp, code, msg, headers): authority = req.get_host() response = self.http_error_auth_reqed('proxy-authenticate', authority, req, headers) - self.reset_retry_count() return response @@ -1061,6 +1071,9 @@ def get_algorithm_impls(self, algorithm): elif algorithm == 'SHA': H = lambda x: hashlib.sha1(x).hexdigest() # XXX MD5-sess + else: + raise ValueError("Unsupported digest authentication " + "algorithm %r" % algorithm.lower()) KD = lambda s, d: H("%s:%s" % (s, d)) return H, KD @@ -1136,7 +1149,7 @@ def do_request_(self, request): return request - def do_open(self, http_class, req): + def do_open(self, http_class, req, **http_conn_args): """Return an addinfourl object for the request, using http_class. http_class must implement the HTTPConnection API from httplib. @@ -1150,7 +1163,8 @@ def do_open(self, http_class, req): if not host: raise URLError('no host given') - h = http_class(host, timeout=req.timeout) # will parse host:port + # will parse host:port + h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) @@ -1218,8 +1232,13 @@ def http_open(self, req): if hasattr(httplib, 'HTTPS'): class HTTPSHandler(AbstractHTTPHandler): + def __init__(self, debuglevel=0, context=None): + AbstractHTTPHandler.__init__(self, debuglevel) + self._context = context + def https_open(self, req): - return self.do_open(httplib.HTTPSConnection, req) + return self.do_open(httplib.HTTPSConnection, req, + context=self._context) https_request = AbstractHTTPHandler.do_request_ diff --git a/PythonLib/full/urlparse.py b/PythonLib/full/urlparse.py index 4ce982e8..4cd3d674 100644 --- a/PythonLib/full/urlparse.py +++ b/PythonLib/full/urlparse.py @@ -109,10 +109,11 @@ def port(self): netloc = self.netloc.split('@')[-1].split(']')[-1] if ':' in netloc: port = netloc.split(':')[1] - port = int(port, 10) - # verify legal port - if (0 <= port <= 65535): - return port + if port: + port = int(port, 10) + # verify legal port + if (0 <= port <= 65535): + return port return None from collections import namedtuple diff --git a/PythonLib/full/uuid.py b/PythonLib/full/uuid.py index cb4e5f05..7432032d 100644 --- a/PythonLib/full/uuid.py +++ b/PythonLib/full/uuid.py @@ -44,6 +44,8 @@ UUID('00010203-0405-0607-0809-0a0b0c0d0e0f') """ +import os + __author__ = 'Ka-Ping Yee ' RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE = [ @@ -291,51 +293,98 @@ def get_version(self): version = property(get_version) -def _find_mac(command, args, hw_identifiers, get_index): +def _popen(command, args): import os - for dir in ['', '/sbin/', '/usr/sbin']: + path = os.environ.get("PATH", os.defpath).split(os.pathsep) + path.extend(('/sbin', '/usr/sbin')) + for dir in path: executable = os.path.join(dir, command) - if not os.path.exists(executable): - continue + if (os.path.exists(executable) and + os.access(executable, os.F_OK | os.X_OK) and + not os.path.isdir(executable)): + break + else: + return None + # LC_ALL to ensure English output, 2>/dev/null to prevent output on + # stderr (Note: we don't have an example where the words we search for + # are actually localized, but in theory some system could do so.) + cmd = 'LC_ALL=C %s %s 2>/dev/null' % (executable, args) + return os.popen(cmd) - try: - # LC_ALL to get English output, 2>/dev/null to - # prevent output on stderr - cmd = 'LC_ALL=C %s %s 2>/dev/null' % (executable, args) - with os.popen(cmd) as pipe: - for line in pipe: - words = line.lower().split() - for i in range(len(words)): - if words[i] in hw_identifiers: - return int( - words[get_index(i)].replace(':', ''), 16) - except IOError: - continue - return None +def _find_mac(command, args, hw_identifiers, get_index): + try: + pipe = _popen(command, args) + if not pipe: + return + with pipe: + for line in pipe: + words = line.lower().rstrip().split() + for i in range(len(words)): + if words[i] in hw_identifiers: + try: + word = words[get_index(i)] + mac = int(word.replace(':', ''), 16) + if mac: + return mac + except (ValueError, IndexError): + # Virtual interfaces, such as those provided by + # VPNs, do not have a colon-delimited MAC address + # as expected, but a 16-byte HWAddr separated by + # dashes. These should be ignored in favor of a + # real MAC address + pass + except IOError: + pass def _ifconfig_getnode(): """Get the hardware address on Unix by running ifconfig.""" - # This works on Linux ('' or '-a'), Tru64 ('-av'), but not all Unixes. for args in ('', '-a', '-av'): mac = _find_mac('ifconfig', args, ['hwaddr', 'ether'], lambda i: i+1) if mac: return mac - import socket - ip_addr = socket.gethostbyname(socket.gethostname()) +def _arp_getnode(): + """Get the hardware address on Unix by running arp.""" + import os, socket + try: + ip_addr = socket.gethostbyname(socket.gethostname()) + except EnvironmentError: + return None # Try getting the MAC addr from arp based on our IP address (Solaris). - mac = _find_mac('arp', '-an', [ip_addr], lambda i: -1) - if mac: - return mac + return _find_mac('arp', '-an', [ip_addr], lambda i: -1) +def _lanscan_getnode(): + """Get the hardware address on Unix by running lanscan.""" # This might work on HP-UX. - mac = _find_mac('lanscan', '-ai', ['lan0'], lambda i: 0) - if mac: - return mac + return _find_mac('lanscan', '-ai', ['lan0'], lambda i: 0) - return None +def _netstat_getnode(): + """Get the hardware address on Unix by running netstat.""" + # This might work on AIX, Tru64 UNIX and presumably on IRIX. + try: + pipe = _popen('netstat', '-ia') + if not pipe: + return + with pipe: + words = pipe.readline().rstrip().split() + try: + i = words.index('Address') + except ValueError: + return + for line in pipe: + try: + words = line.rstrip().split() + word = words[i] + if len(word) == 17 and word.count(':') == 5: + mac = int(word.replace(':', ''), 16) + if mac: + return mac + except (ValueError, IndexError): + pass + except OSError: + pass def _ipconfig_getnode(): """Get the hardware address on Windows by running ipconfig.exe.""" @@ -353,13 +402,11 @@ def _ipconfig_getnode(): pipe = os.popen(os.path.join(dir, 'ipconfig') + ' /all') except IOError: continue - else: + with pipe: for line in pipe: value = line.split(':')[-1].strip().lower() if re.match('([0-9a-f][0-9a-f]-){5}[0-9a-f][0-9a-f]', value): return int(value.replace('-', ''), 16) - finally: - pipe.close() def _netbios_getnode(): """Get the hardware address on Windows using NetBIOS calls. @@ -393,23 +440,25 @@ def _netbios_getnode(): # Thanks to Thomas Heller for ctypes and for his help with its use here. # If ctypes is available, use it to find system routines for UUID generation. -_uuid_generate_random = _uuid_generate_time = _UuidCreate = None +_uuid_generate_time = _UuidCreate = None try: import ctypes, ctypes.util + import sys # The uuid_generate_* routines are provided by libuuid on at least # Linux and FreeBSD, and provided by libc on Mac OS X. - for libname in ['uuid', 'c']: + _libnames = ['uuid'] + if not sys.platform.startswith('win'): + _libnames.append('c') + for libname in _libnames: try: lib = ctypes.CDLL(ctypes.util.find_library(libname)) except: continue - if hasattr(lib, 'uuid_generate_random'): - _uuid_generate_random = lib.uuid_generate_random if hasattr(lib, 'uuid_generate_time'): _uuid_generate_time = lib.uuid_generate_time - if _uuid_generate_random is not None: - break # found everything we were looking for + break + del _libnames # The uuid_generate_* functions are broken on MacOS X 10.5, as noted # in issue #8621 the function generates the same sequence of values @@ -418,11 +467,10 @@ def _netbios_getnode(): # # Assume that the uuid_generate functions are broken from 10.5 onward, # the test can be adjusted when a later version is fixed. - import sys if sys.platform == 'darwin': import os if int(os.uname()[2].split('.')[0]) >= 9: - _uuid_generate_random = _uuid_generate_time = None + _uuid_generate_time = None # On Windows prior to 2000, UuidCreate gives a UUID containing the # hardware address. On Windows 2000 and later, UuidCreate makes a @@ -477,7 +525,8 @@ def getnode(): if sys.platform == 'win32': getters = [_windll_getnode, _netbios_getnode, _ipconfig_getnode] else: - getters = [_unixdll_getnode, _ifconfig_getnode] + getters = [_unixdll_getnode, _ifconfig_getnode, _arp_getnode, + _lanscan_getnode, _netstat_getnode] for getter in getters + [_random_getnode]: try: @@ -532,21 +581,7 @@ def uuid3(namespace, name): def uuid4(): """Generate a random UUID.""" - - # When the system provides a version-4 UUID generator, use it. - if _uuid_generate_random: - _buffer = ctypes.create_string_buffer(16) - _uuid_generate_random(_buffer) - return UUID(bytes=_buffer.raw) - - # Otherwise, get randomness from urandom or the 'random' module. - try: - import os - return UUID(bytes=os.urandom(16), version=4) - except: - import random - bytes = [chr(random.randrange(256)) for i in range(16)] - return UUID(bytes=bytes, version=4) + return UUID(bytes=os.urandom(16), version=4) def uuid5(namespace, name): """Generate a UUID from the SHA-1 hash of a namespace UUID and a name.""" diff --git a/PythonLib/full/warnings.py b/PythonLib/full/warnings.py index 08b70afb..84f111d6 100644 --- a/PythonLib/full/warnings.py +++ b/PythonLib/full/warnings.py @@ -7,7 +7,8 @@ import sys import types -__all__ = ["warn", "showwarning", "formatwarning", "filterwarnings", +__all__ = ["warn", "warn_explicit", "showwarning", + "formatwarning", "filterwarnings", "simplefilter", "resetwarnings", "catch_warnings"] @@ -25,9 +26,12 @@ def _show_warning(message, category, filename, lineno, file=None, line=None): """Hook to write a warning to a file; replace if you like.""" if file is None: file = sys.stderr + if file is None: + # sys.stderr is None - warnings get lost + return try: file.write(formatwarning(message, category, filename, lineno, line)) - except IOError: + except (IOError, UnicodeError): pass # the file (probably stderr) is invalid - this warning gets lost. # Keep a working version around in case the deprecation of the old API is # triggered. @@ -35,11 +39,29 @@ def _show_warning(message, category, filename, lineno, file=None, line=None): def formatwarning(message, category, filename, lineno, line=None): """Function to format a warning the standard way.""" - s = "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message) + try: + unicodetype = unicode + except NameError: + unicodetype = () + try: + message = str(message) + except UnicodeEncodeError: + pass + s = "%s: %s: %s\n" % (lineno, category.__name__, message) line = linecache.getline(filename, lineno) if line is None else line if line: line = line.strip() + if isinstance(s, unicodetype) and isinstance(line, str): + line = unicode(line, 'latin1') s += " %s\n" % line + if isinstance(s, unicodetype) and isinstance(filename, str): + enc = sys.getfilesystemencoding() + if enc: + try: + filename = unicode(filename, enc) + except UnicodeDecodeError: + pass + s = "%s:%s" % (filename, s) return s def filterwarnings(action, message="", category=Warning, module="", lineno=0, @@ -62,10 +84,10 @@ def filterwarnings(action, message="", category=Warning, module="", lineno=0, "category must be a class" assert issubclass(category, Warning), "category must be a Warning subclass" assert isinstance(module, basestring), "module must be a string" - assert isinstance(lineno, int) and lineno >= 0, \ + assert isinstance(lineno, (int, long)) and lineno >= 0, \ "lineno must be an int >= 0" item = (action, re.compile(message, re.I), category, - re.compile(module), lineno) + re.compile(module), int(lineno)) if append: filters.append(item) else: @@ -83,9 +105,9 @@ def simplefilter(action, category=Warning, lineno=0, append=0): """ assert action in ("error", "ignore", "always", "default", "module", "once"), "invalid action: %r" % (action,) - assert isinstance(lineno, int) and lineno >= 0, \ + assert isinstance(lineno, (int, long)) and lineno >= 0, \ "lineno must be an int >= 0" - item = (action, None, category, None, lineno) + item = (action, None, category, None, int(lineno)) if append: filters.append(item) else: @@ -287,9 +309,12 @@ class WarningMessage(object): def __init__(self, message, category, filename, lineno, file=None, line=None): - local_values = locals() - for attr in self._WARNING_DETAILS: - setattr(self, attr, local_values[attr]) + self.message = message + self.category = category + self.filename = filename + self.lineno = lineno + self.file = file + self.line = line self._category_name = category.__name__ if category else None def __str__(self): diff --git a/PythonLib/full/wave.py b/PythonLib/full/wave.py index c320238f..28acaa6c 100644 --- a/PythonLib/full/wave.py +++ b/PythonLib/full/wave.py @@ -180,10 +180,11 @@ def rewind(self): self._soundpos = 0 def close(self): - if self._i_opened_the_file: - self._i_opened_the_file.close() - self._i_opened_the_file = None self._file = None + file = self._i_opened_the_file + if file: + self._i_opened_the_file = None + file.close() def tell(self): return self._soundpos @@ -242,7 +243,7 @@ def readframes(self, nframes): assert data.itemsize == self._sampwidth nitems = nframes * self._nchannels if nitems * self._sampwidth > chunk.chunksize - chunk.size_read: - nitems = (chunk.chunksize - chunk.size_read) / self._sampwidth + nitems = (chunk.chunksize - chunk.size_read) // self._sampwidth data.fromfile(chunk.file.file, nitems) # "tell" data chunk how much was read chunk.size_read = chunk.size_read + nitems * self._sampwidth @@ -424,7 +425,9 @@ def writeframesraw(self, data): data = self._convert(data) if self._sampwidth in (2, 4) and sys.byteorder == 'big': import array - data = array.array(_array_fmts[self._sampwidth], data) + a = array.array(_array_fmts[self._sampwidth]) + a.fromstring(data) + data = a assert data.itemsize == self._sampwidth data.byteswap() data.tofile(self._file) @@ -442,17 +445,18 @@ def writeframes(self, data): self._patchheader() def close(self): - if self._file: - try: + try: + if self._file: self._ensure_header_written(0) if self._datalength != self._datawritten: self._patchheader() self._file.flush() - finally: - self._file = None - if self._i_opened_the_file: - self._i_opened_the_file.close() - self._i_opened_the_file = None + finally: + self._file = None + file = self._i_opened_the_file + if file: + self._i_opened_the_file = None + file.close() # # Internal methods. diff --git a/PythonLib/full/weakref.py b/PythonLib/full/weakref.py index 88c60e71..3e1fb815 100644 --- a/PythonLib/full/weakref.py +++ b/PythonLib/full/weakref.py @@ -18,9 +18,10 @@ proxy, CallableProxyType, ProxyType, - ReferenceType) + ReferenceType, + _remove_dead_weakref) -from _weakrefset import WeakSet +from _weakrefset import WeakSet, _IterationGuard from exceptions import ReferenceError @@ -44,22 +45,55 @@ class WeakValueDictionary(UserDict.UserDict): # objects are unwrapped on the way out, and we always wrap on the # way in). - def __init__(self, *args, **kw): - def remove(wr, selfref=ref(self)): + def __init__(*args, **kw): + if not args: + raise TypeError("descriptor '__init__' of 'WeakValueDictionary' " + "object needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + def remove(wr, selfref=ref(self), _atomic_removal=_remove_dead_weakref): self = selfref() if self is not None: - del self.data[wr.key] + if self._iterating: + self._pending_removals.append(wr.key) + else: + # Atomic removal is necessary since this function + # can be called asynchronously by the GC + _atomic_removal(self.data, wr.key) self._remove = remove + # A list of keys to be removed + self._pending_removals = [] + self._iterating = set() UserDict.UserDict.__init__(self, *args, **kw) + def _commit_removals(self): + l = self._pending_removals + d = self.data + # We shouldn't encounter any KeyError, because this method should + # always be called *before* mutating the dict. + while l: + key = l.pop() + _remove_dead_weakref(d, key) + def __getitem__(self, key): + if self._pending_removals: + self._commit_removals() o = self.data[key]() if o is None: raise KeyError, key else: return o + def __delitem__(self, key): + if self._pending_removals: + self._commit_removals() + del self.data[key] + def __contains__(self, key): + if self._pending_removals: + self._commit_removals() try: o = self.data[key]() except KeyError: @@ -67,6 +101,8 @@ def __contains__(self, key): return o is not None def has_key(self, key): + if self._pending_removals: + self._commit_removals() try: o = self.data[key]() except KeyError: @@ -77,9 +113,18 @@ def __repr__(self): return "" % id(self) def __setitem__(self, key, value): + if self._pending_removals: + self._commit_removals() self.data[key] = KeyedRef(value, self._remove, key) + def clear(self): + if self._pending_removals: + self._commit_removals() + self.data.clear() + def copy(self): + if self._pending_removals: + self._commit_removals() new = WeakValueDictionary() for key, wr in self.data.items(): o = wr() @@ -91,6 +136,8 @@ def copy(self): def __deepcopy__(self, memo): from copy import deepcopy + if self._pending_removals: + self._commit_removals() new = self.__class__() for key, wr in self.data.items(): o = wr() @@ -99,6 +146,8 @@ def __deepcopy__(self, memo): return new def get(self, key, default=None): + if self._pending_removals: + self._commit_removals() try: wr = self.data[key] except KeyError: @@ -112,6 +161,8 @@ def get(self, key, default=None): return o def items(self): + if self._pending_removals: + self._commit_removals() L = [] for key, wr in self.data.items(): o = wr() @@ -120,16 +171,22 @@ def items(self): return L def iteritems(self): - for wr in self.data.itervalues(): - value = wr() - if value is not None: - yield wr.key, value + if self._pending_removals: + self._commit_removals() + with _IterationGuard(self): + for wr in self.data.itervalues(): + value = wr() + if value is not None: + yield wr.key, value def iterkeys(self): - return self.data.iterkeys() + if self._pending_removals: + self._commit_removals() + with _IterationGuard(self): + for k in self.data.iterkeys(): + yield k - def __iter__(self): - return self.data.iterkeys() + __iter__ = iterkeys def itervaluerefs(self): """Return an iterator that yields the weak references to the values. @@ -141,15 +198,24 @@ def itervaluerefs(self): keep the values around longer than needed. """ - return self.data.itervalues() + if self._pending_removals: + self._commit_removals() + with _IterationGuard(self): + for wr in self.data.itervalues(): + yield wr def itervalues(self): - for wr in self.data.itervalues(): - obj = wr() - if obj is not None: - yield obj + if self._pending_removals: + self._commit_removals() + with _IterationGuard(self): + for wr in self.data.itervalues(): + obj = wr() + if obj is not None: + yield obj def popitem(self): + if self._pending_removals: + self._commit_removals() while 1: key, wr = self.data.popitem() o = wr() @@ -157,27 +223,44 @@ def popitem(self): return key, o def pop(self, key, *args): + if self._pending_removals: + self._commit_removals() try: o = self.data.pop(key)() except KeyError: + o = None + if o is None: if args: return args[0] - raise - if o is None: - raise KeyError, key + else: + raise KeyError, key else: return o def setdefault(self, key, default=None): + if self._pending_removals: + self._commit_removals() try: - wr = self.data[key] + o = self.data[key]() except KeyError: + o = None + if o is None: self.data[key] = KeyedRef(default, self._remove, key) return default else: - return wr() + return o - def update(self, dict=None, **kwargs): + def update(*args, **kwargs): + if not args: + raise TypeError("descriptor 'update' of 'WeakValueDictionary' " + "object needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + dict = args[0] if args else None + if self._pending_removals: + self._commit_removals() d = self.data if dict is not None: if not hasattr(dict, "items"): @@ -197,9 +280,13 @@ def valuerefs(self): keep the values around longer than needed. """ + if self._pending_removals: + self._commit_removals() return self.data.values() def values(self): + if self._pending_removals: + self._commit_removals() L = [] for wr in self.data.values(): o = wr() @@ -245,9 +332,29 @@ def __init__(self, dict=None): def remove(k, selfref=ref(self)): self = selfref() if self is not None: - del self.data[k] + if self._iterating: + self._pending_removals.append(k) + else: + del self.data[k] self._remove = remove - if dict is not None: self.update(dict) + # A list of dead weakrefs (keys to be removed) + self._pending_removals = [] + self._iterating = set() + if dict is not None: + self.update(dict) + + def _commit_removals(self): + # NOTE: We don't need to call this method before mutating the dict, + # because a dead weakref never compares equal to a live weakref, + # even if they happened to refer to equal objects. + # However, it means keys may already have been removed. + l = self._pending_removals + d = self.data + while l: + try: + del d[l.pop()] + except KeyError: + pass def __delitem__(self, key): del self.data[ref(key)] @@ -306,10 +413,11 @@ def items(self): return L def iteritems(self): - for wr, value in self.data.iteritems(): - key = wr() - if key is not None: - yield key, value + with _IterationGuard(self): + for wr, value in self.data.iteritems(): + key = wr() + if key is not None: + yield key, value def iterkeyrefs(self): """Return an iterator that yields the weak references to the keys. @@ -321,19 +429,23 @@ def iterkeyrefs(self): keep the keys around longer than needed. """ - return self.data.iterkeys() + with _IterationGuard(self): + for wr in self.data.iterkeys(): + yield wr def iterkeys(self): - for wr in self.data.iterkeys(): - obj = wr() - if obj is not None: - yield obj + with _IterationGuard(self): + for wr in self.data.iterkeys(): + obj = wr() + if obj is not None: + yield obj - def __iter__(self): - return self.iterkeys() + __iter__ = iterkeys def itervalues(self): - return self.data.itervalues() + with _IterationGuard(self): + for value in self.data.itervalues(): + yield value def keyrefs(self): """Return a list of weak references to the keys. diff --git a/PythonLib/full/webbrowser.py b/PythonLib/full/webbrowser.py index d3272a0a..23891796 100644 --- a/PythonLib/full/webbrowser.py +++ b/PythonLib/full/webbrowser.py @@ -642,6 +642,7 @@ def open(self, url, new=0, autoraise=True): # (but we prefer using the OS X specific stuff) register("safari", None, MacOSXOSAScript('safari'), -1) register("firefox", None, MacOSXOSAScript('firefox'), -1) + register("chrome", None, MacOSXOSAScript('chrome'), -1) register("MacOSX", None, MacOSXOSAScript('default'), -1) diff --git a/PythonLib/full/winsound.pyd b/PythonLib/full/winsound.pyd index b076414a21f4dbca70fce3028ade1481ba7b1842..bc9f47496d62d191f97810468379bc0e5124dff4 100644 GIT binary patch literal 9216 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 X*zULOwmk%kJ#O1;dm35$wVwY5{4ve% literal 43520 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 65536: + self.requestline = '' + self.request_version = '' + self.command = '' + self.send_error(414) + return + if not self.parse_request(): # An error code has been sent, just exit return diff --git a/PythonLib/full/wsgiref/validate.py b/PythonLib/full/wsgiref/validate.py index 04a893d7..c3278120 100644 --- a/PythonLib/full/wsgiref/validate.py +++ b/PythonLib/full/wsgiref/validate.py @@ -329,7 +329,7 @@ def check_environ(environ): # @@: these need filling out: if environ['REQUEST_METHOD'] not in ( - 'GET', 'HEAD', 'POST', 'OPTIONS','PUT','DELETE','TRACE'): + 'GET', 'HEAD', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE', 'TRACE'): warnings.warn( "Unknown REQUEST_METHOD: %r" % environ['REQUEST_METHOD'], WSGIWarning) diff --git a/PythonLib/full/xdrlib.py b/PythonLib/full/xdrlib.py index ef172dd3..7afba497 100644 --- a/PythonLib/full/xdrlib.py +++ b/PythonLib/full/xdrlib.py @@ -9,6 +9,7 @@ from cStringIO import StringIO as _StringIO except ImportError: from StringIO import StringIO as _StringIO +from functools import wraps __all__ = ["Error", "Packer", "Unpacker", "ConversionError"] @@ -34,6 +35,16 @@ def __str__(self): class ConversionError(Error): pass +def raise_conversion_error(function): + """ Wrap any raised struct.errors in a ConversionError. """ + + @wraps(function) + def result(self, value): + try: + return function(self, value) + except struct.error as e: + raise ConversionError(e.args[0]) + return result class Packer: @@ -50,9 +61,11 @@ def get_buffer(self): # backwards compatibility get_buf = get_buffer + @raise_conversion_error def pack_uint(self, x): self.__buf.write(struct.pack('>L', x)) + @raise_conversion_error def pack_int(self, x): self.__buf.write(struct.pack('>l', x)) @@ -63,20 +76,24 @@ def pack_bool(self, x): else: self.__buf.write('\0\0\0\0') def pack_uhyper(self, x): - self.pack_uint(x>>32 & 0xffffffffL) - self.pack_uint(x & 0xffffffffL) + try: + self.pack_uint(x>>32 & 0xffffffffL) + except (TypeError, struct.error) as e: + raise ConversionError(e.args[0]) + try: + self.pack_uint(x & 0xffffffffL) + except (TypeError, struct.error) as e: + raise ConversionError(e.args[0]) pack_hyper = pack_uhyper + @raise_conversion_error def pack_float(self, x): - try: self.__buf.write(struct.pack('>f', x)) - except struct.error, msg: - raise ConversionError, msg + self.__buf.write(struct.pack('>f', x)) + @raise_conversion_error def pack_double(self, x): - try: self.__buf.write(struct.pack('>d', x)) - except struct.error, msg: - raise ConversionError, msg + self.__buf.write(struct.pack('>d', x)) def pack_fstring(self, n, s): if n < 0: diff --git a/PythonLib/full/xml/dom/expatbuilder.py b/PythonLib/full/xml/dom/expatbuilder.py index 4fba8758..c7033f41 100644 --- a/PythonLib/full/xml/dom/expatbuilder.py +++ b/PythonLib/full/xml/dom/expatbuilder.py @@ -10,7 +10,7 @@ # minidom DOM and can't be used with other DOM implementations. This # is due, in part, to a lack of appropriate methods in the DOM (there is # no way to create Entity and Notation nodes via the DOM Level 2 -# interface), and for performance. The later is the cause of some fairly +# interface), and for performance. The latter is the cause of some fairly # cryptic code. # # Performance hacks: diff --git a/PythonLib/full/xml/dom/minicompat.py b/PythonLib/full/xml/dom/minicompat.py index de4cb4f7..266a7f43 100644 --- a/PythonLib/full/xml/dom/minicompat.py +++ b/PythonLib/full/xml/dom/minicompat.py @@ -65,10 +65,10 @@ def _set_length(self, value): length = property(_get_length, _set_length, doc="The number of nodes in the NodeList.") - def __getstate__(self): - return list(self) - + # For backward compatibility def __setstate__(self, state): + if state is None: + state = [] self[:] = state diff --git a/PythonLib/full/xml/etree/ElementInclude.py b/PythonLib/full/xml/etree/ElementInclude.py index 84fd7548..7e29119f 100644 --- a/PythonLib/full/xml/etree/ElementInclude.py +++ b/PythonLib/full/xml/etree/ElementInclude.py @@ -75,14 +75,13 @@ class FatalIncludeError(SyntaxError): # @throws IOError If the loader fails to load the resource. def default_loader(href, parse, encoding=None): - file = open(href) - if parse == "xml": - data = ElementTree.parse(file).getroot() - else: - data = file.read() - if encoding: - data = data.decode(encoding) - file.close() + with open(href) as file: + if parse == "xml": + data = ElementTree.parse(file).getroot() + else: + data = file.read() + if encoding: + data = data.decode(encoding) return data ## diff --git a/PythonLib/full/xml/etree/ElementTree.py b/PythonLib/full/xml/etree/ElementTree.py index 9f3e75d4..dca69106 100644 --- a/PythonLib/full/xml/etree/ElementTree.py +++ b/PythonLib/full/xml/etree/ElementTree.py @@ -574,7 +574,7 @@ def ProcessingInstruction(target, text=None): # @param text A string containing the QName value, in the form {uri}local, # or, if the tag argument is given, the URI part of a QName. # @param tag Optional tag. If given, the first argument is interpreted as -# an URI, and this argument is interpreted as a local name. +# a URI, and this argument is interpreted as a local name. # @return An opaque object, representing the QName. class QName(object): @@ -1198,9 +1198,14 @@ def iterparse(source, events=None, parser=None): if not hasattr(source, "read"): source = open(source, "rb") close_source = True - if not parser: - parser = XMLParser(target=TreeBuilder()) - return _IterParseIterator(source, events, parser, close_source) + try: + if not parser: + parser = XMLParser(target=TreeBuilder()) + return _IterParseIterator(source, events, parser, close_source) + except: + if close_source: + source.close() + raise class _IterParseIterator(object): @@ -1252,34 +1257,40 @@ def handler(prefix, event=event, append=append): raise ValueError("unknown event %r" % event) def next(self): - while 1: - try: - item = self._events[self._index] - self._index += 1 - return item - except IndexError: - pass - if self._error: - e = self._error - self._error = None - raise e - if self._parser is None: - self.root = self._root - if self._close_file: - self._file.close() - raise StopIteration - # load event buffer - del self._events[:] - self._index = 0 - data = self._file.read(16384) - if data: + try: + while 1: try: - self._parser.feed(data) - except SyntaxError as exc: - self._error = exc - else: - self._root = self._parser.close() - self._parser = None + item = self._events[self._index] + self._index += 1 + return item + except IndexError: + pass + if self._error: + e = self._error + self._error = None + raise e + if self._parser is None: + self.root = self._root + break + # load event buffer + del self._events[:] + self._index = 0 + data = self._file.read(16384) + if data: + try: + self._parser.feed(data) + except SyntaxError as exc: + self._error = exc + else: + self._root = self._parser.close() + self._parser = None + except: + if self._close_file: + self._file.close() + raise + if self._close_file: + self._file.close() + raise StopIteration def __iter__(self): return self @@ -1439,6 +1450,8 @@ def end(self, tag): self._tail = 1 return self._last +_sentinel = ['sentinel'] + ## # Element structure builder for XML source data, based on the # expat parser. @@ -1454,7 +1467,11 @@ def end(self, tag): class XMLParser(object): - def __init__(self, html=0, target=None, encoding=None): + def __init__(self, html=_sentinel, target=None, encoding=None): + if html is not _sentinel: + warnings.warnpy3k( + "The html argument of XMLParser() is deprecated", + DeprecationWarning, stacklevel=2) try: from xml.parsers import expat except ImportError: @@ -1606,7 +1623,7 @@ def _default(self, text): pubid = pubid[1:-1] if hasattr(self.target, "doctype"): self.target.doctype(name, pubid, system[1:-1]) - elif self.doctype is not self._XMLParser__doctype: + elif self.doctype != self._XMLParser__doctype: # warn about deprecated call self._XMLParser__doctype(name, pubid, system[1:-1]) self.doctype(name, pubid, system[1:-1]) diff --git a/PythonLib/full/xml/sax/expatreader.py b/PythonLib/full/xml/sax/expatreader.py index 9de3e723..bae663bd 100644 --- a/PythonLib/full/xml/sax/expatreader.py +++ b/PythonLib/full/xml/sax/expatreader.py @@ -43,6 +43,9 @@ def _mkproxy(o): _mkproxy = weakref.proxy del weakref, _weakref +class _ClosedParser: + pass + # --- ExpatLocator class ExpatLocator(xmlreader.Locator): @@ -102,9 +105,16 @@ def parse(self, source): source = saxutils.prepare_input_source(source) self._source = source - self.reset() - self._cont_handler.setDocumentLocator(ExpatLocator(self)) - xmlreader.IncrementalParser.parse(self, source) + try: + self.reset() + self._cont_handler.setDocumentLocator(ExpatLocator(self)) + xmlreader.IncrementalParser.parse(self, source) + except: + # bpo-30264: Close the source on error to not leak resources: + # xml.sax.parse() doesn't give access to the underlying parser + # to the caller + self._close_source() + raise def prepareParser(self, source): if source.getSystemId() is not None: @@ -213,15 +223,37 @@ def feed(self, data, isFinal = 0): # FIXME: when to invoke error()? self._err_handler.fatalError(exc) + def _close_source(self): + source = self._source + try: + file = source.getCharacterStream() + if file is not None: + file.close() + finally: + file = source.getByteStream() + if file is not None: + file.close() + def close(self): - if self._entity_stack: + if (self._entity_stack or self._parser is None or + isinstance(self._parser, _ClosedParser)): # If we are completing an external entity, do nothing here return - self.feed("", isFinal = 1) - self._cont_handler.endDocument() - self._parsing = 0 - # break cycle created by expat handlers pointing to our methods - self._parser = None + try: + self.feed("", isFinal = 1) + self._cont_handler.endDocument() + self._parsing = 0 + # break cycle created by expat handlers pointing to our methods + self._parser = None + finally: + self._parsing = 0 + if self._parser is not None: + # Keep ErrorColumnNumber and ErrorLineNumber after closing. + parser = _ClosedParser() + parser.ErrorColumnNumber = self._parser.ErrorColumnNumber + parser.ErrorLineNumber = self._parser.ErrorLineNumber + self._parser = parser + self._close_source() def _reset_cont_handler(self): self._parser.ProcessingInstructionHandler = \ diff --git a/PythonLib/full/xml/sax/saxutils.py b/PythonLib/full/xml/sax/saxutils.py index 1abcd9a0..1b89e31a 100644 --- a/PythonLib/full/xml/sax/saxutils.py +++ b/PythonLib/full/xml/sax/saxutils.py @@ -98,14 +98,17 @@ def _gettextwriter(out, encoding): except AttributeError: pass # wrap a binary writer with TextIOWrapper - class UnbufferedTextIOWrapper(io.TextIOWrapper): - def write(self, s): - super(UnbufferedTextIOWrapper, self).write(s) - self.flush() - return UnbufferedTextIOWrapper(buffer, encoding=encoding, + return _UnbufferedTextIOWrapper(buffer, encoding=encoding, errors='xmlcharrefreplace', newline='\n') + +class _UnbufferedTextIOWrapper(io.TextIOWrapper): + def write(self, s): + super(_UnbufferedTextIOWrapper, self).write(s) + self.flush() + + class XMLGenerator(handler.ContentHandler): def __init__(self, out=None, encoding="iso-8859-1"): diff --git a/PythonLib/full/xmlrpclib.py b/PythonLib/full/xmlrpclib.py index b93ea23b..b0e74852 100644 --- a/PythonLib/full/xmlrpclib.py +++ b/PythonLib/full/xmlrpclib.py @@ -49,6 +49,7 @@ # 2003-07-12 gp Correct marshalling of Faults # 2003-10-31 mvl Add multicall support # 2004-08-20 mvl Bump minimum supported Python version to 2.1 +# 2014-12-02 ch/doko Add workaround for gzip bomb vulnerability # # Copyright (c) 1999-2002 by Secret Labs AB. # Copyright (c) 1999-2002 by Fredrik Lundh. @@ -357,7 +358,7 @@ def boolean(value, _truefalse=(False, True)): # tuple. # # @param value The time, given as an ISO 8601 string, a time -# tuple, or a integer time value. +# tuple, or an integer time value. def _strftime(value): if datetime: @@ -392,7 +393,7 @@ def make_comparable(self, other): elif datetime and isinstance(other, datetime.datetime): s = self.value o = other.strftime("%Y%m%dT%H:%M:%S") - elif isinstance(other, (str, unicode)): + elif isinstance(other, basestring): s = self.value o = other elif hasattr(other, "timetuple"): @@ -557,8 +558,13 @@ def feed(self, data): self._parser.Parse(data, 0) def close(self): - self._parser.Parse("", 1) # end of data - del self._target, self._parser # get rid of circular references + try: + parser = self._parser + except AttributeError: + pass + else: + del self._target, self._parser # get rid of circular references + parser.Parse("", 1) # end of data class SlowParser: """Default XML parser (based on xmllib.XMLParser).""" @@ -697,9 +703,8 @@ def dump_string(self, value, write, escape=escape): if unicode: def dump_unicode(self, value, write, escape=escape): - value = value.encode(self.encoding) write("") - write(escape(value)) + write(escape(value).encode(self.encoding, 'xmlcharrefreplace')) write("\n") dispatch[UnicodeType] = dump_unicode @@ -726,12 +731,13 @@ def dump_struct(self, value, write, escape=escape): write("\n") for k, v in value.items(): write("\n") - if type(k) is not StringType: - if unicode and type(k) is UnicodeType: - k = k.encode(self.encoding) - else: - raise TypeError, "dictionary key must be string" - write("%s\n" % escape(k)) + if type(k) is StringType: + k = escape(k) + elif unicode and type(k) is UnicodeType: + k = escape(k).encode(self.encoding, 'xmlcharrefreplace') + else: + raise TypeError, "dictionary key must be string" + write("%s\n" % k) dump(v, write) write("\n") write("\n") @@ -778,6 +784,7 @@ def __init__(self, use_datetime=0): self._stack = [] self._marks = [] self._data = [] + self._value = False self._methodname = None self._encoding = "utf-8" self.append = self._stack.append @@ -808,6 +815,8 @@ def start(self, tag, attrs): if tag == "array" or tag == "struct": self._marks.append(len(self._stack)) self._data = [] + if self._value and tag not in self.dispatch: + raise ResponseError("unknown tag %r" % tag) self._value = (tag == "value") def data(self, text): @@ -961,7 +970,7 @@ def __getitem__(self, i): "unexpected type in multicall result" class MultiCall: - """server -> a object used to boxcar method calls + """server -> an object used to boxcar method calls server should be a ServerProxy object. @@ -1093,7 +1102,7 @@ def dumps(params, methodname=None, methodresponse=None, encoding=None, if methodname: # a method call if not isinstance(methodname, StringType): - methodname = methodname.encode(encoding) + methodname = methodname.encode(encoding, 'xmlcharrefreplace') data = ( xmlheader, "\n" @@ -1165,10 +1174,13 @@ def gzip_encode(data): # in the HTTP header, as described in RFC 1952 # # @param data The encoded data +# @keyparam max_decode Maximum bytes to decode (20MB default), use negative +# values for unlimited decoding # @return the unencoded data # @raises ValueError if data is not correctly coded. +# @raises ValueError if max gzipped payload length exceeded -def gzip_decode(data): +def gzip_decode(data, max_decode=20971520): """gzip encoded data -> unencoded data Decode data using the gzip content encoding as described in RFC 1952 @@ -1178,11 +1190,16 @@ def gzip_decode(data): f = StringIO.StringIO(data) gzf = gzip.GzipFile(mode="rb", fileobj=f) try: - decoded = gzf.read() + if max_decode < 0: # no limit + decoded = gzf.read() + else: + decoded = gzf.read(max_decode + 1) except IOError: raise ValueError("invalid data") f.close() gzf.close() + if max_decode >= 0 and len(decoded) > max_decode: + raise ValueError("max gzipped payload length exceeded") return decoded ## @@ -1205,8 +1222,10 @@ def __init__(self, response): gzip.GzipFile.__init__(self, mode="rb", fileobj=self.stringio) def close(self): - gzip.GzipFile.close(self) - self.stringio.close() + try: + gzip.GzipFile.close(self) + finally: + self.stringio.close() # -------------------------------------------------------------------- @@ -1315,7 +1334,7 @@ def single_request(self, host, handler, request_body, verbose=0): ## # Create parser. # - # @return A 2-tuple containing a parser and a unmarshaller. + # @return A 2-tuple containing a parser and an unmarshaller. def getparser(self): # get parser and unmarshaller @@ -1375,9 +1394,10 @@ def make_connection(self, host): # Used in the event of socket errors. # def close(self): - if self._connection[1]: - self._connection[1].close() + host, connection = self._connection + if connection: self._connection = (None, None) + connection.close() ## # Send request header. @@ -1478,6 +1498,10 @@ def parse_response(self, response): class SafeTransport(Transport): """Handles an HTTPS transaction to an XML-RPC server.""" + def __init__(self, use_datetime=0, context=None): + Transport.__init__(self, use_datetime=use_datetime) + self.context = context + # FIXME: mostly untested def make_connection(self, host): @@ -1493,7 +1517,7 @@ def make_connection(self, host): ) else: chost, self._extra_headers, x509 = self.get_host_info(host) - self._connection = host, HTTPS(chost, None, **(x509 or {})) + self._connection = host, HTTPS(chost, None, context=self.context, **(x509 or {})) return self._connection[1] ## @@ -1536,10 +1560,10 @@ class ServerProxy: """ def __init__(self, uri, transport=None, encoding=None, verbose=0, - allow_none=0, use_datetime=0): + allow_none=0, use_datetime=0, context=None): # establish a "logical" server connection - if isinstance(uri, unicode): + if unicode and isinstance(uri, unicode): uri = uri.encode('ISO-8859-1') # get the url @@ -1553,7 +1577,7 @@ def __init__(self, uri, transport=None, encoding=None, verbose=0, if transport is None: if type == "https": - transport = SafeTransport(use_datetime=use_datetime) + transport = SafeTransport(use_datetime=use_datetime, context=context) else: transport = Transport(use_datetime=use_datetime) self.__transport = transport @@ -1595,7 +1619,7 @@ def __getattr__(self, name): # magic method dispatcher return _Method(self.__request, name) - # note: to call a remote object with an non-standard name, use + # note: to call a remote object with a non-standard name, use # result getattr(server, "strange-python-name")(args) def __call__(self, attr): @@ -1617,21 +1641,14 @@ def __call__(self, attr): if __name__ == "__main__": - # simple test program (from the XML-RPC specification) - - # server = ServerProxy("http://localhost:8000") # local server - server = ServerProxy("http://time.xmlrpc.com/RPC2") + server = ServerProxy("http://localhost:8000") print server - try: - print server.currentTime.getCurrentTime() - except Error, v: - print "ERROR", v - multi = MultiCall(server) - multi.currentTime.getCurrentTime() - multi.currentTime.getCurrentTime() + multi.pow(2, 9) + multi.add(5, 1) + multi.add(24, 11) try: for response in multi(): print response diff --git a/PythonLib/full/zipfile.py b/PythonLib/full/zipfile.py index 66393175..3ab66cea 100644 --- a/PythonLib/full/zipfile.py +++ b/PythonLib/full/zipfile.py @@ -30,7 +30,7 @@ class LargeZipFile(Exception): error = BadZipfile # The exception raised by this module ZIP64_LIMIT = (1 << 31) - 1 -ZIP_FILECOUNT_LIMIT = 1 << 16 +ZIP_FILECOUNT_LIMIT = (1 << 16) - 1 ZIP_MAX_COMMENT = (1 << 16) - 1 # constants for Zip file compression methods @@ -384,7 +384,7 @@ def _decodeExtra(self): # Try to decode the extra field. extra = self.extra unpack = struct.unpack - while extra: + while len(extra) >= 4: tp, ln = unpack('= 24: @@ -606,7 +606,11 @@ def peek(self, n=1): """Returns buffered bytes without advancing the position.""" if n > len(self._readbuffer) - self._offset: chunk = self.read(n) - self._offset -= len(chunk) + if len(chunk) > self._offset: + self._readbuffer = chunk + self._readbuffer[self._offset:] + self._offset = 0 + else: + self._offset -= len(chunk) # Return up to 512 bytes to reduce allocation overhead for tight loops. return self._readbuffer[self._offset: self._offset + 512] @@ -918,10 +922,10 @@ def comment(self): @comment.setter def comment(self, comment): # check for valid comment length - if len(comment) >= ZIP_MAX_COMMENT: - if self.debug: - print('Archive comment is too long; truncating to %d bytes' - % ZIP_MAX_COMMENT) + if len(comment) > ZIP_MAX_COMMENT: + import warnings + warnings.warn('Archive comment is too long; truncating to %d bytes' + % ZIP_MAX_COMMENT, stacklevel=2) comment = comment[:ZIP_MAX_COMMENT] self._comment = comment self._didModify = True @@ -1084,8 +1088,8 @@ def _extract_member(self, member, targetpath, pwd): def _writecheck(self, zinfo): """Check for errors before writing a file to the archive.""" if zinfo.filename in self.NameToInfo: - if self.debug: # Warning for duplicate names - print "Duplicate name:", zinfo.filename + import warnings + warnings.warn('Duplicate name: %r' % zinfo.filename, stacklevel=3) if self.mode not in ("w", "a"): raise RuntimeError, 'write() requires mode "w" or "a"' if not self.fp: @@ -1097,12 +1101,17 @@ def _writecheck(self, zinfo): if zinfo.compress_type not in (ZIP_STORED, ZIP_DEFLATED): raise RuntimeError, \ "That compression method is not supported" - if zinfo.file_size > ZIP64_LIMIT: - if not self._allowZip64: - raise LargeZipFile("Filesize would require ZIP64 extensions") - if zinfo.header_offset > ZIP64_LIMIT: - if not self._allowZip64: - raise LargeZipFile("Zipfile size would require ZIP64 extensions") + if not self._allowZip64: + requires_zip64 = None + if len(self.filelist) >= ZIP_FILECOUNT_LIMIT: + requires_zip64 = "Files count" + elif zinfo.file_size > ZIP64_LIMIT: + requires_zip64 = "Filesize" + elif zinfo.header_offset > ZIP64_LIMIT: + requires_zip64 = "Zipfile size" + if requires_zip64: + raise LargeZipFile(requires_zip64 + + " would require ZIP64 extensions") def write(self, filename, arcname=None, compress_type=None): """Put the bytes from filename into the archive under the name @@ -1125,7 +1134,9 @@ def write(self, filename, arcname=None, compress_type=None): arcname += '/' zinfo = ZipInfo(arcname, date_time) zinfo.external_attr = (st[0] & 0xFFFF) << 16L # Unix attributes - if compress_type is None: + if isdir: + zinfo.compress_type = ZIP_STORED + elif compress_type is None: zinfo.compress_type = self.compression else: zinfo.compress_type = compress_type @@ -1141,6 +1152,7 @@ def write(self, filename, arcname=None, compress_type=None): zinfo.file_size = 0 zinfo.compress_size = 0 zinfo.CRC = 0 + zinfo.external_attr |= 0x10 # MS-DOS directory flag self.filelist.append(zinfo) self.NameToInfo[zinfo.filename] = zinfo self.fp.write(zinfo.FileHeader(False)) @@ -1202,7 +1214,11 @@ def writestr(self, zinfo_or_arcname, bytes, compress_type=None): date_time=time.localtime(time.time())[:6]) zinfo.compress_type = self.compression - zinfo.external_attr = 0600 << 16 + if zinfo.filename[-1] == '/': + zinfo.external_attr = 0o40775 << 16 # drwxrwxr-x + zinfo.external_attr |= 0x10 # MS-DOS directory flag + else: + zinfo.external_attr = 0o600 << 16 # ?rw------- else: zinfo = zinfo_or_arcname @@ -1252,10 +1268,8 @@ def close(self): try: if self.mode in ("w", "a") and self._didModify: # write ending records - count = 0 pos1 = self.fp.tell() for zinfo in self.filelist: # write central directory - count = count + 1 dt = zinfo.date_time dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2] dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2) @@ -1316,13 +1330,21 @@ def close(self): pos2 = self.fp.tell() # Write end-of-zip-archive record - centDirCount = count + centDirCount = len(self.filelist) centDirSize = pos2 - pos1 centDirOffset = pos1 - if (centDirCount >= ZIP_FILECOUNT_LIMIT or - centDirOffset > ZIP64_LIMIT or - centDirSize > ZIP64_LIMIT): + requires_zip64 = None + if centDirCount > ZIP_FILECOUNT_LIMIT: + requires_zip64 = "Files count" + elif centDirOffset > ZIP64_LIMIT: + requires_zip64 = "Central directory offset" + elif centDirSize > ZIP64_LIMIT: + requires_zip64 = "Central directory size" + if requires_zip64: # Need to write the ZIP64 end-of-archive records + if not self._allowZip64: + raise LargeZipFile(requires_zip64 + + " would require ZIP64 extensions") zip64endrec = struct.pack( structEndArchive64, stringEndArchive64, 44, 45, 45, 0, 0, centDirCount, centDirCount, @@ -1488,18 +1510,7 @@ def main(args = None): sys.exit(1) with ZipFile(args[1], 'r') as zf: - out = args[2] - for path in zf.namelist(): - if path.startswith('./'): - tgt = os.path.join(out, path[2:]) - else: - tgt = os.path.join(out, path) - - tgtdir = os.path.dirname(tgt) - if not os.path.exists(tgtdir): - os.makedirs(tgtdir) - with open(tgt, 'wb') as fp: - fp.write(zf.read(path)) + zf.extractall(args[2]) elif args[0] == '-c': if len(args) < 3: @@ -1510,14 +1521,21 @@ def addToZip(zf, path, zippath): if os.path.isfile(path): zf.write(path, zippath, ZIP_DEFLATED) elif os.path.isdir(path): + if zippath: + zf.write(path, zippath) for nm in os.listdir(path): addToZip(zf, os.path.join(path, nm), os.path.join(zippath, nm)) # else: ignore with ZipFile(args[1], 'w', allowZip64=True) as zf: - for src in args[2:]: - addToZip(zf, src, os.path.basename(src)) + for path in args[2:]: + zippath = os.path.basename(path) + if not zippath: + zippath = os.path.basename(os.path.dirname(path)) + if zippath in ('', os.curdir, os.pardir): + zippath = '' + addToZip(zf, path, zippath) if __name__ == "__main__": main() diff --git a/PythonLib/min/BaseHTTPServer.py b/PythonLib/min/BaseHTTPServer.py index deaf2f96..3df3323a 100644 --- a/PythonLib/min/BaseHTTPServer.py +++ b/PythonLib/min/BaseHTTPServer.py @@ -362,14 +362,25 @@ def send_error(self, code, message=None): message = short explain = long self.log_error("code %d, message %s", code, message) - # using _quote_html to prevent Cross Site Scripting attacks (see bug #1100201) - content = (self.error_message_format % - {'code': code, 'message': _quote_html(message), 'explain': explain}) self.send_response(code, message) - self.send_header("Content-Type", self.error_content_type) self.send_header('Connection', 'close') + + # Message body is omitted for cases described in: + # - RFC7230: 3.3. 1xx, 204(No Content), 304(Not Modified) + # - RFC7231: 6.3.6. 205(Reset Content) + content = None + if code >= 200 and code not in (204, 205, 304): + # HTML encode to prevent Cross Site Scripting attacks + # (see bug #1100201) + content = (self.error_message_format % { + 'code': code, + 'message': _quote_html(message), + 'explain': explain + }) + self.send_header("Content-Type", self.error_content_type) self.end_headers() - if self.command != 'HEAD' and code >= 200 and code not in (204, 304): + + if self.command != 'HEAD' and content: self.wfile.write(content) error_message_format = DEFAULT_ERROR_MESSAGE diff --git a/PythonLib/min/CGIHTTPServer.py b/PythonLib/min/CGIHTTPServer.py index 50e0f7ae..5620083c 100644 --- a/PythonLib/min/CGIHTTPServer.py +++ b/PythonLib/min/CGIHTTPServer.py @@ -106,25 +106,21 @@ def is_python(self, path): def run_cgi(self): """Execute a CGI script.""" dir, rest = self.cgi_info - - i = rest.find('/') + path = dir + '/' + rest + i = path.find('/', len(dir)+1) while i >= 0: - nextdir = rest[:i] - nextrest = rest[i+1:] + nextdir = path[:i] + nextrest = path[i+1:] scriptdir = self.translate_path(nextdir) if os.path.isdir(scriptdir): dir, rest = nextdir, nextrest - i = rest.find('/') + i = path.find('/', len(dir)+1) else: break # find an explicit query string, if present. - i = rest.rfind('?') - if i >= 0: - rest, query = rest[:i], rest[i+1:] - else: - query = '' + rest, _, query = rest.partition('?') # dissect the part after the directory name into a script name & # a possible additional path, to be stored in PATH_INFO. @@ -308,13 +304,15 @@ def _url_collapse_path(path): The utility of this function is limited to is_cgi method and helps preventing some security attacks. - Returns: A tuple of (head, tail) where tail is everything after the final / - and head is everything before it. Head will always start with a '/' and, - if it contains anything else, never have a trailing '/'. + Returns: The reconstituted URL, which will always start with a '/'. Raises: IndexError if too many '..' occur within the path. """ + # Query component should not be involved. + path, _, query = path.partition('?') + path = urllib.unquote(path) + # Similar to os.path.split(os.path.normpath(path)) but specific to URL # path semantics rather than local operating system semantics. path_parts = path.split('/') @@ -335,6 +333,9 @@ def _url_collapse_path(path): else: tail_part = '' + if query: + tail_part = '?'.join((tail_part, query)) + splitpath = ('/' + '/'.join(head_parts), tail_part) collapsed_path = "/".join(splitpath) diff --git a/PythonLib/min/Cookie.py b/PythonLib/min/Cookie.py index db32980a..10823637 100644 --- a/PythonLib/min/Cookie.py +++ b/PythonLib/min/Cookie.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# - #### # Copyright 2000 by Timothy O'Malley # @@ -59,7 +56,7 @@ >>> C = Cookie.SmartCookie() [Note: Long-time users of Cookie.py will remember using -Cookie.Cookie() to create an Cookie object. Although deprecated, it +Cookie.Cookie() to create a Cookie object. Although deprecated, it is still supported by the code. See the Backward Compatibility notes for more information.] @@ -193,7 +190,7 @@ Backwards Compatibility ----------------------- -In order to keep compatibilty with earlier versions of Cookie.py, +In order to keep compatibility with earlier versions of Cookie.py, it is still possible to use Cookie.Cookie() to create a Cookie. In fact, this simply returns a SmartCookie. @@ -429,6 +426,8 @@ class Morsel(dict): "version" : "Version", } + _flags = {'secure', 'httponly'} + def __init__(self): # Set defaults self.key = self.value = self.coded_value = None @@ -529,21 +528,26 @@ def OutputString(self, attrs=None): # result, the parsing rules here are less strict. # -_LegalCharsPatt = r"[\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=]" +_LegalKeyChars = r"\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=" +_LegalValueChars = _LegalKeyChars + r"\[\]" _CookiePattern = re.compile( r"(?x)" # This is a Verbose pattern + r"\s*" # Optional whitespace at start of cookie r"(?P" # Start of group 'key' - ""+ _LegalCharsPatt +"+?" # Any word of at least one letter, nongreedy + "["+ _LegalKeyChars +"]+?" # Any word of at least one letter, nongreedy r")" # End of group 'key' + r"(" # Optional group: there may not be a value. r"\s*=\s*" # Equal Sign r"(?P" # Start of group 'val' r'"(?:[^\\"]|\\.)*"' # Any doublequoted string r"|" # or r"\w{3},\s[\s\w\d-]{9,11}\s[\d:]{8}\sGMT" # Special case for "expires" attr r"|" # or - ""+ _LegalCharsPatt +"*" # Any word or empty string + "["+ _LegalValueChars +"]*" # Any word or empty string r")" # End of group 'val' - r"\s*;?" # Probably ending in a semi-colon + r")?" # End of optional value group + r"\s*" # Any number of spaces. + r"(\s+|;|$)" # Ending either at space, semicolon, or EOS. ) @@ -588,8 +592,12 @@ def __set(self, key, real_value, coded_value): def __setitem__(self, key, value): """Dictionary style assignment.""" - rval, cval = self.value_encode(value) - self.__set(key, rval, cval) + if isinstance(value, Morsel): + # allow assignment of constructed Morsels (e.g. for pickling) + dict.__setitem__(self, key, value) + else: + rval, cval = self.value_encode(value) + self.__set(key, rval, cval) # end __setitem__ def output(self, attrs=None, header="Set-Cookie:", sep="\015\012"): @@ -644,7 +652,7 @@ def __ParseString(self, str, patt=_CookiePattern): while 0 <= i < n: # Start looking for a cookie - match = patt.search(str, i) + match = patt.match(str, i) if not match: break # No more cookies K,V = match.group("key"), match.group("val") @@ -659,8 +667,12 @@ def __ParseString(self, str, patt=_CookiePattern): M[ K[1:] ] = V elif K.lower() in Morsel._reserved: if M: - M[ K ] = _unquote(V) - else: + if V is None: + if K.lower() in Morsel._flags: + M[K] = True + else: + M[K] = _unquote(V) + elif V is not None: rval, cval = self.value_decode(V) self.__set(K, rval, cval) M = self[K] diff --git a/PythonLib/min/HTMLParser.py b/PythonLib/min/HTMLParser.py index 5a55e264..fb9380e1 100644 --- a/PythonLib/min/HTMLParser.py +++ b/PythonLib/min/HTMLParser.py @@ -195,9 +195,9 @@ def goahead(self, end): i = self.updatepos(i, k) continue else: - if ";" in rawdata[i:]: #bail by consuming &# - self.handle_data(rawdata[0:2]) - i = self.updatepos(i, 2) + if ";" in rawdata[i:]: # bail by consuming '&#' + self.handle_data(rawdata[i:i+2]) + i = self.updatepos(i, i+2) break elif startswith('&', i): match = entityref.match(rawdata, i) @@ -462,11 +462,12 @@ def replaceEntities(s): else: # Cannot use name2codepoint directly, because HTMLParser supports apos, # which is not part of HTML 4 - import htmlentitydefs if HTMLParser.entitydefs is None: - entitydefs = HTMLParser.entitydefs = {'apos':u"'"} + import htmlentitydefs + entitydefs = {'apos':u"'"} for k, v in htmlentitydefs.name2codepoint.iteritems(): entitydefs[k] = unichr(v) + HTMLParser.entitydefs = entitydefs try: return self.entitydefs[s] except KeyError: diff --git a/PythonLib/min/SendKeys.py b/PythonLib/min/SendKeys.py index 775d78b4..9d01bad5 100644 --- a/PythonLib/min/SendKeys.py +++ b/PythonLib/min/SendKeys.py @@ -1,441 +1,446 @@ -""" -SendKeys.py - Sends one or more keystroke or keystroke combinations -to the active window. - -Copyright (C) 2003 Ollie Rutherfurd - -Python License - -Version 0.3 (2003-06-14) - -$Id$ -""" - -import sys -import time -from _sendkeys import char2keycode, key_up, key_down, toggle_numlock - -__all__ = ['KeySequenceError', 'SendKeys'] - -try: - True -except NameError: - True,False = 1,0 - -KEYEVENTF_KEYUP = 2 -VK_SHIFT = 16 -VK_CONTROL = 17 -VK_MENU = 18 - -PAUSE = 50/1000.0 # 50 milliseconds - -# 'codes' recognized as {CODE( repeat)?} -CODES = { - 'BACK': 8, - 'BACKSPACE': 8, - 'BS': 8, - 'BKSP': 8, - 'BREAK': 3, - 'CAP': 20, - 'CAPSLOCK': 20, - 'DEL': 46, - 'DELETE': 46, - 'DOWN': 40, - 'END': 35, - 'ENTER': 13, - 'ESC': 27, - 'HELP': 47, - 'HOME': 36, - 'INS': 45, - 'INSERT': 45, - 'LEFT': 37, - 'LWIN': 91, - 'NUMLOCK': 144, - 'PGDN': 34, - 'PGUP': 33, - 'PRTSC': 44, - 'RIGHT': 39, - 'RMENU': 165, - 'RWIN': 92, - 'SCROLLLOCK': 145, - 'SPACE': 32, - 'TAB': 9, - 'UP': 38, - 'DOWN': 40, - 'BACKSPACE': 8, - 'F1': 112, - 'F2': 113, - 'F3': 114, - 'F4': 115, - 'F5': 116, - 'F6': 117, - 'F7': 118, - 'F8': 119, - 'F9': 120, - 'F10': 121, - 'F11': 122, - 'F12': 123, - 'F13': 124, - 'F14': 125, - 'F15': 126, - 'F16': 127, - 'F17': 128, - 'F18': 129, - 'F19': 130, - 'F20': 131, - 'F21': 132, - 'F22': 133, - 'F23': 134, - 'F24': 135, -} - -ESCAPE = '+^%~{}[]' -NO_SHIFT = '[]' - -SHIFT = { - '!': '1', - '@': '2', - '#': '3', - '$': '4', - '&': '7', - '*': '8', - '_': '-', - '|': '\\', - ':': ';', - '"': '\'', - '<': ',', - '>': '.', - '?': '/', -} - -# modifier keys -MODIFIERS = { - '+': VK_SHIFT, - '^': VK_CONTROL, - '%': VK_MENU, -} - - -class KeySequenceError(Exception): - """Exception raised when a key sequence string has a syntax error""" - def __str__(self): - return ' '.join(self.args) - - -def _append_code(keys,code): - keys.append((code, True)) - keys.append((code, False)) - -def _next_char(chars,error_msg=None): - if error_msg is None: - error_msg = 'expected another character' - try: - return chars.pop() - except IndexError: - raise KeySequenceError(error_msg) - -def _handle_char(c,keys,shift): - if shift: - keys.append((MODIFIERS['+'],True)) - _append_code(keys, char2keycode(c)) - if shift: - keys.append((MODIFIERS['+'],False)) - -def _release_modifiers(keys,modifiers): - for c in modifiers.keys(): - if modifiers[c]: - keys.append((MODIFIERS[c], False)) - modifiers[c] = False - - -def str2keys(key_string, - with_spaces=False, - with_tabs=False, - with_newlines=False): - """ - Converts `key_string` string to a list of 2-tuples, - ``(keycode,down)``, which can be given to `playkeys`. - - `key_string` : str - A string of keys. - `with_spaces` : bool - Whether to treat spaces as ``{SPACE}``. If `False`, spaces are ignored. - `with_tabs` : bool - Whether to treat tabs as ``{TAB}``. If `False`, tabs are ignored. - `with_newlines` : bool - Whether to treat newlines as ``{ENTER}``. If `False`, newlines are ignored. - """ - # reading input as a stack - chars = list(key_string) - chars.reverse() - # results - keys = [] - # for keeping track of whether shift, ctrl, & alt are pressed - modifiers = {} - for k in MODIFIERS.keys(): - modifiers[k] = False - - while chars: - c = chars.pop() - - if c in MODIFIERS.keys(): - keys.append((MODIFIERS[c],True)) - modifiers[c] = True - - # group of chars, for applying a modifier - elif c == '(': - while c != ')': - c = _next_char(chars,'`(` without `)`') - if c == ')': - raise KeySequenceError('expected a character before `)`') - - if c == ' ' and with_spaces: - _handle_char(CODES['SPACE'], keys, False) - elif c == '\n' and with_newlines: - _handle_char(CODES['ENTER'], keys, False) - elif c == '\t' and with_tabs: - _handle_char(CODES['TAB'], keys, False) - else: - # if we need shift for this char and it's not already pressed - shift = (c.isupper() or c in SHIFT.keys()) and not modifiers['+'] - if c in SHIFT.keys(): - _handle_char(SHIFT[c], keys, shift) - else: - _handle_char(c.lower(), keys, shift) - c = _next_char(chars,'`)` not found') - _release_modifiers(keys,modifiers) - - # escaped code, modifier, or repeated char - elif c == '{': - saw_space = False - name = [_next_char(chars)] - arg = ['0'] - c = _next_char(chars, '`{` without `}`') - while c != '}': - if c == ' ': - saw_space = True - elif c in '.0123456789' and saw_space: - arg.append(c) - else: - name.append(c) - c = _next_char(chars, '`{` without `}`') - code = ''.join(name) - arg = float('0' + ''.join(arg)) - if code == 'PAUSE': - if not arg: - arg = PAUSE - keys.append((None,arg)) - else: - # always having 1 here makes logic - # easier -- we can always loop - if arg == 0: - arg = 1 - for i in range(int(arg)): - if code in CODES.keys(): - _append_code(keys, CODES[code]) - else: - # must be an escaped modifier or a - # repeated char at this point - if len(code) > 1: - raise KeySequenceError('Unknown code: %s' % code) - # handling both {e 3} and {+}, {%}, {^} - shift = code in ESCAPE and not code in NO_SHIFT - # do shift if we've got an upper case letter - shift = shift or code[0].isupper() - c = code - if not shift: - # handle keys in SHIFT (!, @, etc...) - if c in SHIFT.keys(): - c = SHIFT[c] - shift = True - _handle_char(c.lower(), keys, shift) - _release_modifiers(keys,modifiers) - - # unexpected ")" - elif c == ')': - raise KeySequenceError('`)` should be preceeded by `(`') - - # unexpected "}" - elif c == '}': - raise KeySequenceError('`}` should be preceeded by `{`') - - # handling a single character - else: - if c == ' ' and not with_spaces: - continue - elif c == '\t' and not with_tabs: - continue - elif c == '\n' and not with_newlines: - continue - - if c in ('~','\n'): - _append_code(keys, CODES['ENTER']) - elif c == ' ': - _append_code(keys, CODES['SPACE']) - elif c == '\t': - _append_code(keys, CODES['TAB']) - else: - # if we need shift for this char and it's not already pressed - shift = (c.isupper() or c in SHIFT.keys()) and not modifiers['+'] - if c in SHIFT.keys(): - _handle_char(SHIFT[c], keys, shift) - else: - _handle_char(c.lower(), keys, shift) - _release_modifiers(keys,modifiers) - - _release_modifiers(keys,modifiers) - return keys - - -def playkeys(keys, pause=.05): - """ - Simulates pressing and releasing one or more keys. - - `keys` : str - A list of 2-tuples consisting of ``(keycode,down)`` - where `down` is `True` when the key is being pressed - and `False` when it's being released. - - `keys` is returned from `str2keys`. - `pause` : float - Number of seconds between releasing a key and pressing the - next one. - """ - for (vk, arg) in keys: - if vk: - if arg: - key_down(vk) - else: - key_up(vk) - if pause: # pause after key up - time.sleep(pause) - else: - time.sleep(arg) - - -def SendKeys(keys, - pause=0.05, - with_spaces=False, - with_tabs=False, - with_newlines=False, - turn_off_numlock=True): - """ - Sends keys to the current window. - - `keys` : str - A string of keys. - `pause` : float - The number of seconds to wait between sending each key - or key combination. - `with_spaces` : bool - Whether to treat spaces as ``{SPACE}``. If `False`, spaces are ignored. - `with_tabs` : bool - Whether to treat tabs as ``{TAB}``. If `False`, tabs are ignored. - `with_newlines` : bool - Whether to treat newlines as ``{ENTER}``. If `False`, newlines are ignored. - `turn_off_numlock` : bool - Whether to turn off `NUMLOCK` before sending keys. - - example:: - - SendKeys("+hello{SPACE}+world+1") - - would result in ``"Hello World!"`` - """ - - restore_numlock = False - try: - # read keystroke keys into a list of 2 tuples [(key,up),] - _keys = str2keys(keys, with_spaces, with_tabs, with_newlines) - - # certain keystrokes don't seem to behave the same way if NUMLOCK - # is on (for example, ^+{LEFT}), so turn NUMLOCK off, if it's on - # and restore its original state when done. - if turn_off_numlock: - restore_numlock = toggle_numlock(False) - - # "play" the keys to the active window - playkeys(_keys, pause) - finally: - if restore_numlock and turn_off_numlock: - key_down(CODES['NUMLOCK']) - key_up(CODES['NUMLOCK']) - - -def usage(): - """ - Writes help message to `stderr` and exits. - """ - print >> sys.stderr, """\ -%(name)s [-h] [-d seconds] [-p seconds] [-f filename] or [string of keys] - - -dN or --delay=N : N is seconds before starting - -pN or --pause=N : N is seconds between each key - -fNAME or --file=NAME : NAME is filename containing keys to send - -h or --help : show help message -""" % {'name': 'SendKeys.py'} - sys.exit(1) - - -def error(msg): - """ - Writes `msg` to `stderr`, displays usage - information, and exits. - """ - print >> sys.stderr, '\nERROR: %s\n' % msg - usage() - - -def main(args=None): - import getopt - - if args is None: - args = sys.argv[1:] - - try: - opts,args = getopt.getopt(args, - "hp:d:f:", ["help","pause","delay","file"]) - except getopt.GetoptError: - usage() - - pause=0 - delay=0 - filename=None - - for o, a in opts: - if o in ('-h','--help'): - usage() - elif o in ('-f','--file'): - filename = a - elif o in ('-p','--pause'): - try: - pause = float(a) - assert pause >= 0 - except (ValueError,AssertionError),e: - error('`pause` must be >= 0.0') - elif o in ('-d','--delay'): - try: - delay = float(a) - assert delay >= 0 - except (ValueError,AssertionError),e: - error('`delay` must be >= 0.0') - - time.sleep(delay) - - if not filename is None and args: - error("can't pass both filename and string of keys on command-line") - elif filename: - f = open(filename) - keys = f.read() - f.close() - SendKeys(keys, pause) - else: - for a in args: - SendKeys(a, pause) - - -if __name__ == '__main__': - main(sys.argv[1:]) - -# :indentSize=4:lineSeparator=\r\n:maxLineLen=80:noTabs=true:tabSize=4: - +""" +SendKeys.py - Sends one or more keystroke or keystroke combinations +to the active window. + +Copyright (C) 2003 Ollie Rutherfurd + +Python License + +Version 0.3 (2003-06-14) + +$Id$ +""" + +import sys +import time +from _sendkeys import char2keycode, key_up, key_down, toggle_numlock + +__all__ = ['KeySequenceError', 'SendKeys'] + +try: + True +except NameError: + True,False = 1,0 + +KEYEVENTF_KEYUP = 2 +VK_SHIFT = 16 +VK_CONTROL = 17 +VK_MENU = 18 + +PAUSE = 50/1000.0 # 50 milliseconds + +# 'codes' recognized as {CODE( repeat)?} +CODES = { + 'BACK': 8, + 'BACKSPACE': 8, + 'BS': 8, + 'BKSP': 8, + 'BREAK': 3, + 'CAP': 20, + 'CAPSLOCK': 20, + 'DEL': 46, + 'DELETE': 46, + 'DOWN': 40, + 'END': 35, + 'ENTER': 13, + 'ESC': 27, + 'HELP': 47, + 'HOME': 36, + 'INS': 45, + 'INSERT': 45, + 'LEFT': 37, + 'LWIN': 91, + 'NUMLOCK': 144, + 'PGDN': 34, + 'PGUP': 33, + 'PRTSC': 44, + 'RIGHT': 39, + 'RMENU': 165, + 'RWIN': 92, + 'SCROLLLOCK': 145, + 'SPACE': 32, + 'TAB': 9, + 'UP': 38, + 'DOWN': 40, + 'BACKSPACE': 8, + 'F1': 112, + 'F2': 113, + 'F3': 114, + 'F4': 115, + 'F5': 116, + 'F6': 117, + 'F7': 118, + 'F8': 119, + 'F9': 120, + 'F10': 121, + 'F11': 122, + 'F12': 123, + 'F13': 124, + 'F14': 125, + 'F15': 126, + 'F16': 127, + 'F17': 128, + 'F18': 129, + 'F19': 130, + 'F20': 131, + 'F21': 132, + 'F22': 133, + 'F23': 134, + 'F24': 135, +} + +ESCAPE = '+^%~{}[]' +NO_SHIFT = '[]' + +SHIFT = { + '!': '1', + '@': '2', + '#': '3', + '$': '4', + '&': '7', + '*': '8', + '_': '-', + '|': '\\', + ':': ';', + '"': '\'', + '<': ',', + '>': '.', + '?': '/', +} + +# modifier keys +MODIFIERS = { + '+': VK_SHIFT, + '^': VK_CONTROL, + '%': VK_MENU, +} + + +class KeySequenceError(Exception): + """Exception raised when a key sequence string has a syntax error""" + def __str__(self): + return ' '.join(self.args) + + +def _append_code(keys,code): + keys.append((code, True)) + keys.append((code, False)) + +def _next_char(chars,error_msg=None): + if error_msg is None: + error_msg = 'expected another character' + try: + return chars.pop() + except IndexError: + raise KeySequenceError(error_msg) + +def _handle_char(c,keys,shift): + if shift: + keys.append((MODIFIERS['+'],True)) + _append_code(keys, char2keycode(c)) + if shift: + keys.append((MODIFIERS['+'],False)) + +def _release_modifiers(keys,modifiers): + for c in modifiers.keys(): + if modifiers[c]: + keys.append((MODIFIERS[c], False)) + modifiers[c] = False + + +def str2keys(key_string, + with_spaces=False, + with_tabs=False, + with_newlines=False): + """ + Converts `key_string` string to a list of 2-tuples, + ``(keycode,down)``, which can be given to `playkeys`. + + `key_string` : str + A string of keys. + `with_spaces` : bool + Whether to treat spaces as ``{SPACE}``. If `False`, spaces are ignored. + `with_tabs` : bool + Whether to treat tabs as ``{TAB}``. If `False`, tabs are ignored. + `with_newlines` : bool + Whether to treat newlines as ``{ENTER}``. If `False`, newlines are ignored. + """ + # reading input as a stack + chars = list(key_string) + chars.reverse() + # results + keys = [] + # for keeping track of whether shift, ctrl, & alt are pressed + modifiers = {} + for k in MODIFIERS.keys(): + modifiers[k] = False + + while chars: + c = chars.pop() + + if c in MODIFIERS.keys(): + keys.append((MODIFIERS[c],True)) + modifiers[c] = True + + # group of chars, for applying a modifier + elif c == '(': + while c != ')': + c = _next_char(chars,'`(` without `)`') + if c == ')': + raise KeySequenceError('expected a character before `)`') + + if c == ' ' and with_spaces: + _handle_char(CODES['SPACE'], keys, False) + elif c == '\n' and with_newlines: + _handle_char(CODES['ENTER'], keys, False) + elif c == '\t' and with_tabs: + _handle_char(CODES['TAB'], keys, False) + else: + # if we need shift for this char and it's not already pressed + shift = (c.isupper() or c in SHIFT.keys()) and not modifiers['+'] + if c in SHIFT.keys(): + _handle_char(SHIFT[c], keys, shift) + else: + _handle_char(c.lower(), keys, shift) + c = _next_char(chars,'`)` not found') + _release_modifiers(keys,modifiers) + + # escaped code, modifier, or repeated char + elif c == '{': + saw_space = False + name = [_next_char(chars)] + arg = ['0'] + c = _next_char(chars, '`{` without `}`') + while c != '}': + if c == ' ': + saw_space = True + elif c in '.0123456789' and saw_space: + arg.append(c) + else: + name.append(c) + c = _next_char(chars, '`{` without `}`') + code = ''.join(name) + arg = float('0' + ''.join(arg)) + if code == 'PAUSE': + if not arg: + arg = PAUSE + keys.append((None,arg)) + else: + # always having 1 here makes logic + # easier -- we can always loop + if arg == 0: + arg = 1 + for i in range(int(arg)): + if code in CODES.keys(): + _append_code(keys, CODES[code]) + else: + # must be an escaped modifier or a + # repeated char at this point + if len(code) > 1: + try: + # number in hex is also good (more keys are allowed) + _append_code(keys, int(code,16)) + continue + except ValueError: + raise KeySequenceError('Unknown code: %s' % code) + # handling both {e 3} and {+}, {%}, {^} + shift = code in ESCAPE and not code in NO_SHIFT + # do shift if we've got an upper case letter + shift = shift or code[0].isupper() + c = code + if not shift: + # handle keys in SHIFT (!, @, etc...) + if c in SHIFT.keys(): + c = SHIFT[c] + shift = True + _handle_char(c.lower(), keys, shift) + _release_modifiers(keys,modifiers) + + # unexpected ")" + elif c == ')': + raise KeySequenceError('`)` should be preceeded by `(`') + + # unexpected "}" + elif c == '}': + raise KeySequenceError('`}` should be preceeded by `{`') + + # handling a single character + else: + if c == ' ' and not with_spaces: + continue + elif c == '\t' and not with_tabs: + continue + elif c == '\n' and not with_newlines: + continue + + if c in ('~','\n'): + _append_code(keys, CODES['ENTER']) + elif c == ' ': + _append_code(keys, CODES['SPACE']) + elif c == '\t': + _append_code(keys, CODES['TAB']) + else: + # if we need shift for this char and it's not already pressed + shift = (c.isupper() or c in SHIFT.keys()) and not modifiers['+'] + if c in SHIFT.keys(): + _handle_char(SHIFT[c], keys, shift) + else: + _handle_char(c.lower(), keys, shift) + _release_modifiers(keys,modifiers) + + _release_modifiers(keys,modifiers) + return keys + + +def playkeys(keys, pause=.05): + """ + Simulates pressing and releasing one or more keys. + + `keys` : str + A list of 2-tuples consisting of ``(keycode,down)`` + where `down` is `True` when the key is being pressed + and `False` when it's being released. + + `keys` is returned from `str2keys`. + `pause` : float + Number of seconds between releasing a key and pressing the + next one. + """ + for (vk, arg) in keys: + if vk: + if arg: + key_down(vk) + else: + key_up(vk) + if pause: # pause after key up + time.sleep(pause) + else: + time.sleep(arg) + + +def SendKeys(keys, + pause=0.05, + with_spaces=False, + with_tabs=False, + with_newlines=False, + turn_off_numlock=True): + """ + Sends keys to the current window. + + `keys` : str + A string of keys. + `pause` : float + The number of seconds to wait between sending each key + or key combination. + `with_spaces` : bool + Whether to treat spaces as ``{SPACE}``. If `False`, spaces are ignored. + `with_tabs` : bool + Whether to treat tabs as ``{TAB}``. If `False`, tabs are ignored. + `with_newlines` : bool + Whether to treat newlines as ``{ENTER}``. If `False`, newlines are ignored. + `turn_off_numlock` : bool + Whether to turn off `NUMLOCK` before sending keys. + + example:: + + SendKeys("+hello{SPACE}+world+1") + + would result in ``"Hello World!"`` + """ + + restore_numlock = False + try: + # read keystroke keys into a list of 2 tuples [(key,up),] + _keys = str2keys(keys, with_spaces, with_tabs, with_newlines) + + # certain keystrokes don't seem to behave the same way if NUMLOCK + # is on (for example, ^+{LEFT}), so turn NUMLOCK off, if it's on + # and restore its original state when done. + if turn_off_numlock: + restore_numlock = toggle_numlock(False) + + # "play" the keys to the active window + playkeys(_keys, pause) + finally: + if restore_numlock and turn_off_numlock: + key_down(CODES['NUMLOCK']) + key_up(CODES['NUMLOCK']) + + +def usage(): + """ + Writes help message to `stderr` and exits. + """ + print >> sys.stderr, """\ +%(name)s [-h] [-d seconds] [-p seconds] [-f filename] or [string of keys] + + -dN or --delay=N : N is seconds before starting + -pN or --pause=N : N is seconds between each key + -fNAME or --file=NAME : NAME is filename containing keys to send + -h or --help : show help message +""" % {'name': 'SendKeys.py'} + sys.exit(1) + + +def error(msg): + """ + Writes `msg` to `stderr`, displays usage + information, and exits. + """ + print >> sys.stderr, '\nERROR: %s\n' % msg + usage() + + +def main(args=None): + import getopt + + if args is None: + args = sys.argv[1:] + + try: + opts,args = getopt.getopt(args, + "hp:d:f:", ["help","pause","delay","file"]) + except getopt.GetoptError: + usage() + + pause=0 + delay=0 + filename=None + + for o, a in opts: + if o in ('-h','--help'): + usage() + elif o in ('-f','--file'): + filename = a + elif o in ('-p','--pause'): + try: + pause = float(a) + assert pause >= 0 + except (ValueError,AssertionError),e: + error('`pause` must be >= 0.0') + elif o in ('-d','--delay'): + try: + delay = float(a) + assert delay >= 0 + except (ValueError,AssertionError),e: + error('`delay` must be >= 0.0') + + time.sleep(delay) + + if not filename is None and args: + error("can't pass both filename and string of keys on command-line") + elif filename: + f = open(filename) + keys = f.read() + f.close() + SendKeys(keys, pause) + else: + for a in args: + SendKeys(a, pause) + + +if __name__ == '__main__': + main(sys.argv[1:]) + +# :indentSize=4:lineSeparator=\r\n:maxLineLen=80:noTabs=true:tabSize=4: + diff --git a/PythonLib/min/SimpleHTTPServer.py b/PythonLib/min/SimpleHTTPServer.py index 1a172968..c140a273 100644 --- a/PythonLib/min/SimpleHTTPServer.py +++ b/PythonLib/min/SimpleHTTPServer.py @@ -14,6 +14,7 @@ import posixpath import BaseHTTPServer import urllib +import urlparse import cgi import sys import shutil @@ -43,8 +44,10 @@ def do_GET(self): """Serve a GET request.""" f = self.send_head() if f: - self.copyfile(f, self.wfile) - f.close() + try: + self.copyfile(f, self.wfile) + finally: + f.close() def do_HEAD(self): """Serve a HEAD request.""" @@ -66,10 +69,14 @@ def send_head(self): path = self.translate_path(self.path) f = None if os.path.isdir(path): - if not self.path.endswith('/'): + parts = urlparse.urlsplit(self.path) + if not parts.path.endswith('/'): # redirect browser - doing basically what apache does self.send_response(301) - self.send_header("Location", self.path + "/") + new_parts = (parts[0], parts[1], parts[2] + '/', + parts[3], parts[4]) + new_url = urlparse.urlunsplit(new_parts) + self.send_header("Location", new_url) self.end_headers() return None for index in "index.html", "index.htm": @@ -88,13 +95,17 @@ def send_head(self): except IOError: self.send_error(404, "File not found") return None - self.send_response(200) - self.send_header("Content-type", ctype) - fs = os.fstat(f.fileno()) - self.send_header("Content-Length", str(fs[6])) - self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) - self.end_headers() - return f + try: + self.send_response(200) + self.send_header("Content-type", ctype) + fs = os.fstat(f.fileno()) + self.send_header("Content-Length", str(fs[6])) + self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) + self.end_headers() + return f + except: + f.close() + raise def list_directory(self, path): """Helper to produce a directory listing (absent index.html). @@ -156,9 +167,9 @@ def translate_path(self, path): words = filter(None, words) path = os.getcwd() for word in words: - drive, word = os.path.splitdrive(word) - head, word = os.path.split(word) - if word in (os.curdir, os.pardir): continue + if os.path.dirname(word) or word in (os.curdir, os.pardir): + # Ignore components that are not a simple file/directory name + continue path = os.path.join(path, word) if trailing_slash: path += '/' diff --git a/PythonLib/min/SimpleXMLRPCServer.py b/PythonLib/min/SimpleXMLRPCServer.py index f15cd62f..5324e921 100644 --- a/PythonLib/min/SimpleXMLRPCServer.py +++ b/PythonLib/min/SimpleXMLRPCServer.py @@ -188,7 +188,7 @@ def register_instance(self, instance, allow_dotted_names=False): are considered private and will not be called by SimpleXMLRPCServer. - If a registered function matches a XML-RPC request, then it + If a registered function matches an XML-RPC request, then it will be called instead of the registered instance. If the optional allow_dotted_names argument is true and the @@ -704,4 +704,5 @@ def handle_request(self, request_text = None): server = SimpleXMLRPCServer(("localhost", 8000)) server.register_function(pow) server.register_function(lambda x,y: x+y, 'add') + server.register_multicall_functions() server.serve_forever() diff --git a/PythonLib/min/SocketServer.py b/PythonLib/min/SocketServer.py index 26611b74..122430e3 100644 --- a/PythonLib/min/SocketServer.py +++ b/PythonLib/min/SocketServer.py @@ -121,11 +121,6 @@ class will essentially render the service "deaf" while one request is # Author of the BaseServer patch: Luke Kenneth Casson Leighton -# XXX Warning! -# There is a test suite for this module, but it cannot be run by the -# standard regression test. -# To run it manually, run Lib/test/test_socketserver.py. - __version__ = "0.4" @@ -296,6 +291,8 @@ def _handle_request_noblock(self): except: self.handle_error(request, client_address) self.shutdown_request(request) + else: + self.shutdown_request(request) def handle_timeout(self): """Called if no new request arrives within self.timeout. @@ -416,8 +413,12 @@ def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True): self.socket = socket.socket(self.address_family, self.socket_type) if bind_and_activate: - self.server_bind() - self.server_activate() + try: + self.server_bind() + self.server_activate() + except: + self.server_close() + raise def server_bind(self): """Called by constructor to bind the socket. @@ -513,35 +514,37 @@ class ForkingMixIn: def collect_children(self): """Internal routine to wait for children that have exited.""" - if self.active_children is None: return + if self.active_children is None: + return + + # If we're above the max number of children, wait and reap them until + # we go back below threshold. Note that we use waitpid(-1) below to be + # able to collect children in size() syscalls instead + # of size(): the downside is that this might reap children + # which we didn't spawn, which is why we only resort to this when we're + # above max_children. while len(self.active_children) >= self.max_children: - # XXX: This will wait for any child process, not just ones - # spawned by this library. This could confuse other - # libraries that expect to be able to wait for their own - # children. try: - pid, status = os.waitpid(0, 0) - except os.error: - pid = None - if pid not in self.active_children: continue - self.active_children.remove(pid) - - # XXX: This loop runs more system calls than it ought - # to. There should be a way to put the active_children into a - # process group and then use os.waitpid(-pgid) to wait for any - # of that set, but I couldn't find a way to allocate pgids - # that couldn't collide. - for child in self.active_children: + pid, _ = os.waitpid(-1, 0) + self.active_children.discard(pid) + except OSError as e: + if e.errno == errno.ECHILD: + # we don't have any children, we're done + self.active_children.clear() + elif e.errno != errno.EINTR: + break + + # Now reap all defunct children. + for pid in self.active_children.copy(): try: - pid, status = os.waitpid(child, os.WNOHANG) - except os.error: - pid = None - if not pid: continue - try: - self.active_children.remove(pid) - except ValueError, e: - raise ValueError('%s. x=%d and list=%r' % (e.message, pid, - self.active_children)) + pid, _ = os.waitpid(pid, os.WNOHANG) + # if the child hasn't exited yet, pid will be 0 and ignored by + # discard() below + self.active_children.discard(pid) + except OSError as e: + if e.errno == errno.ECHILD: + # someone else reaped it + self.active_children.discard(pid) def handle_timeout(self): """Wait for zombies after self.timeout seconds of inactivity. @@ -557,8 +560,8 @@ def process_request(self, request, client_address): if pid: # Parent process if self.active_children is None: - self.active_children = [] - self.active_children.append(pid) + self.active_children = set() + self.active_children.add(pid) self.close_request(request) #close handle in parent process return else: @@ -636,7 +639,7 @@ class BaseRequestHandler: client address as self.client_address, and the server (in case it needs access to per-server information) as self.server. Since a separate instance is created for each request, the handle() method - can define arbitrary other instance variariables. + can define other arbitrary instance variables. """ @@ -704,7 +707,7 @@ def finish(self): try: self.wfile.flush() except socket.error: - # An final socket error may have occurred here, such as + # A final socket error may have occurred here, such as # the local error ECONNABORTED. pass self.wfile.close() @@ -713,9 +716,6 @@ def finish(self): class DatagramRequestHandler(BaseRequestHandler): - # XXX Regrettably, I cannot get this working on Linux; - # s.recvfrom() doesn't return a meaningful client address. - """Define self.rfile and self.wfile for datagram sockets.""" def setup(self): diff --git a/PythonLib/min/UserDict.py b/PythonLib/min/UserDict.py index bb2218ab..732b327c 100644 --- a/PythonLib/min/UserDict.py +++ b/PythonLib/min/UserDict.py @@ -1,7 +1,24 @@ """A more or less complete user-defined wrapper around dictionary objects.""" class UserDict: - def __init__(self, dict=None, **kwargs): + def __init__(*args, **kwargs): + if not args: + raise TypeError("descriptor '__init__' of 'UserDict' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + if args: + dict = args[0] + elif 'dict' in kwargs: + dict = kwargs.pop('dict') + import warnings + warnings.warn("Passing 'dict' as keyword argument is " + "deprecated", PendingDeprecationWarning, + stacklevel=2) + else: + dict = None self.data = {} if dict is not None: self.update(dict) @@ -43,7 +60,23 @@ def iterkeys(self): return self.data.iterkeys() def itervalues(self): return self.data.itervalues() def values(self): return self.data.values() def has_key(self, key): return key in self.data - def update(self, dict=None, **kwargs): + def update(*args, **kwargs): + if not args: + raise TypeError("descriptor 'update' of 'UserDict' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + if args: + dict = args[0] + elif 'dict' in kwargs: + dict = kwargs.pop('dict') + import warnings + warnings.warn("Passing 'dict' as keyword argument is deprecated", + PendingDeprecationWarning, stacklevel=2) + else: + dict = None if dict is None: pass elif isinstance(dict, UserDict): diff --git a/PythonLib/min/_LWPCookieJar.py b/PythonLib/min/_LWPCookieJar.py index 90cc633d..d91cb514 100644 --- a/PythonLib/min/_LWPCookieJar.py +++ b/PythonLib/min/_LWPCookieJar.py @@ -18,7 +18,7 @@ iso2time, time2isoz) def lwp_cookie_str(cookie): - """Return string representation of Cookie in an the LWP cookie file format. + """Return string representation of Cookie in the LWP cookie file format. Actually, the format is extended a bit -- see module docstring. @@ -49,7 +49,7 @@ def lwp_cookie_str(cookie): class LWPCookieJar(FileCookieJar): """ The LWPCookieJar saves a sequence of "Set-Cookie3" lines. - "Set-Cookie3" is the format used by the libwww-perl libary, not known + "Set-Cookie3" is the format used by the libwww-perl library, not known to be compatible with any browser, but which is easy to read and doesn't lose information about RFC 2965 cookies. diff --git a/PythonLib/min/_MozillaCookieJar.py b/PythonLib/min/_MozillaCookieJar.py index 00e8bcf9..585bc179 100644 --- a/PythonLib/min/_MozillaCookieJar.py +++ b/PythonLib/min/_MozillaCookieJar.py @@ -39,7 +39,7 @@ class MozillaCookieJar(FileCookieJar): magic_re = "#( Netscape)? HTTP Cookie File" header = """\ # Netscape HTTP Cookie File -# http://www.netscape.com/newsref/std/cookie_spec.html +# http://curl.haxx.se/rfc/cookie_spec.html # This is a generated file! Do not edit. """ diff --git a/PythonLib/min/_abcoll.py b/PythonLib/min/_abcoll.py index 0438afda..b643692e 100644 --- a/PythonLib/min/_abcoll.py +++ b/PythonLib/min/_abcoll.py @@ -143,7 +143,7 @@ class Set(Sized, Iterable, Container): methods except for __contains__, __iter__ and __len__. To override the comparisons (presumably for speed, as the - semantics are fixed), all you have to do is redefine __le__ and + semantics are fixed), redefine __le__ and __ge__, then the other operations will automatically follow suit. """ @@ -165,12 +165,17 @@ def __lt__(self, other): def __gt__(self, other): if not isinstance(other, Set): return NotImplemented - return other < self + return len(self) > len(other) and self.__ge__(other) def __ge__(self, other): if not isinstance(other, Set): return NotImplemented - return other <= self + if len(self) < len(other): + return False + for elem in other: + if elem not in self: + return False + return True def __eq__(self, other): if not isinstance(other, Set): @@ -194,6 +199,8 @@ def __and__(self, other): return NotImplemented return self._from_iterable(value for value in other if value in self) + __rand__ = __and__ + def isdisjoint(self, other): 'Return True if two sets have a null intersection.' for value in other: @@ -207,6 +214,8 @@ def __or__(self, other): chain = (e for s in (self, other) for e in s) return self._from_iterable(chain) + __ror__ = __or__ + def __sub__(self, other): if not isinstance(other, Set): if not isinstance(other, Iterable): @@ -215,6 +224,14 @@ def __sub__(self, other): return self._from_iterable(value for value in self if value not in other) + def __rsub__(self, other): + if not isinstance(other, Set): + if not isinstance(other, Iterable): + return NotImplemented + other = self._from_iterable(other) + return self._from_iterable(value for value in other + if value not in self) + def __xor__(self, other): if not isinstance(other, Set): if not isinstance(other, Iterable): @@ -222,6 +239,8 @@ def __xor__(self, other): other = self._from_iterable(other) return (self - other) | (other - self) + __rxor__ = __xor__ + # Sets are not hashable by default, but subclasses can change this __hash__ = None @@ -434,6 +453,7 @@ def __iter__(self): for key in self._mapping: yield key +KeysView.register(type({}.viewkeys())) class ItemsView(MappingView, Set): @@ -454,6 +474,7 @@ def __iter__(self): for key in self._mapping: yield (key, self._mapping[key]) +ItemsView.register(type({}.viewitems())) class ValuesView(MappingView): @@ -467,6 +488,7 @@ def __iter__(self): for key in self._mapping: yield self._mapping[key] +ValuesView.register(type({}.viewvalues())) class MutableMapping(Mapping): @@ -529,23 +551,25 @@ def update(*args, **kwds): If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v ''' - if len(args) > 2: - raise TypeError("update() takes at most 2 positional " - "arguments ({} given)".format(len(args))) - elif not args: - raise TypeError("update() takes at least 1 argument (0 given)") + if not args: + raise TypeError("descriptor 'update' of 'MutableMapping' object " + "needs an argument") self = args[0] - other = args[1] if len(args) >= 2 else () - - if isinstance(other, Mapping): - for key in other: - self[key] = other[key] - elif hasattr(other, "keys"): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value + args = args[1:] + if len(args) > 1: + raise TypeError('update expected at most 1 arguments, got %d' % + len(args)) + if args: + other = args[0] + if isinstance(other, Mapping): + for key in other: + self[key] = other[key] + elif hasattr(other, "keys"): + for key in other.keys(): + self[key] = other[key] + else: + for key, value in other: + self[key] = value for key, value in kwds.items(): self[key] = value diff --git a/PythonLib/min/_osx_support.py b/PythonLib/min/_osx_support.py index 5a0b71e9..d2aaae79 100644 --- a/PythonLib/min/_osx_support.py +++ b/PythonLib/min/_osx_support.py @@ -151,13 +151,13 @@ def _find_appropriate_compiler(_config_vars): # can only be found inside Xcode.app if the "Command Line Tools" # are not installed. # - # Futhermore, the compiler that can be used varies between + # Furthermore, the compiler that can be used varies between # Xcode releases. Up to Xcode 4 it was possible to use 'gcc-4.2' # as the compiler, after that 'clang' should be used because # gcc-4.2 is either not present, or a copy of 'llvm-gcc' that # miscompiles Python. - # skip checks if the compiler was overriden with a CC env variable + # skip checks if the compiler was overridden with a CC env variable if 'CC' in os.environ: return _config_vars @@ -182,7 +182,7 @@ def _find_appropriate_compiler(_config_vars): # Compiler is GCC, check if it is LLVM-GCC data = _read_output("'%s' --version" % (cc.replace("'", "'\"'\"'"),)) - if 'llvm-gcc' in data: + if data and 'llvm-gcc' in data: # Found LLVM-GCC, fall back to clang cc = _find_build_tool('clang') @@ -193,7 +193,7 @@ def _find_appropriate_compiler(_config_vars): if cc != oldcc: # Found a replacement compiler. # Modify config vars using new compiler, if not already explicitly - # overriden by an env variable, preserving additional arguments. + # overridden by an env variable, preserving additional arguments. for cv in _COMPILER_CONFIG_VARS: if cv in _config_vars and cv not in os.environ: cv_split = _config_vars[cv].split() @@ -207,7 +207,7 @@ def _remove_universal_flags(_config_vars): """Remove all universal build arguments from config vars""" for cv in _UNIVERSAL_CONFIG_VARS: - # Do not alter a config var explicitly overriden by env var + # Do not alter a config var explicitly overridden by env var if cv in _config_vars and cv not in os.environ: flags = _config_vars[cv] flags = re.sub('-arch\s+\w+\s', ' ', flags) @@ -228,7 +228,7 @@ def _remove_unsupported_archs(_config_vars): # build extensions on OSX 10.7 and later with the prebuilt # 32-bit installer on the python.org website. - # skip checks if the compiler was overriden with a CC env variable + # skip checks if the compiler was overridden with a CC env variable if 'CC' in os.environ: return _config_vars @@ -244,7 +244,7 @@ def _remove_unsupported_archs(_config_vars): # across Xcode and compiler versions, there is no reliable way # to be sure why it failed. Assume here it was due to lack of # PPC support and remove the related '-arch' flags from each - # config variables not explicitly overriden by an environment + # config variables not explicitly overridden by an environment # variable. If the error was for some other reason, we hope the # failure will show up again when trying to compile an extension # module. @@ -292,7 +292,7 @@ def _check_for_unavailable_sdk(_config_vars): sdk = m.group(1) if not os.path.exists(sdk): for cv in _UNIVERSAL_CONFIG_VARS: - # Do not alter a config var explicitly overriden by env var + # Do not alter a config var explicitly overridden by env var if cv in _config_vars and cv not in os.environ: flags = _config_vars[cv] flags = re.sub(r'-isysroot\s+\S+(?:\s|$)', ' ', flags) @@ -450,8 +450,16 @@ def get_platform_osx(_config_vars, osname, release, machine): # case and disallow installs. cflags = _config_vars.get(_INITPRE+'CFLAGS', _config_vars.get('CFLAGS', '')) - if ((macrelease + '.') >= '10.4.' and - '-arch' in cflags.strip()): + if macrelease: + try: + macrelease = tuple(int(i) for i in macrelease.split('.')[0:2]) + except ValueError: + macrelease = (10, 0) + else: + # assume no universal support + macrelease = (10, 0) + + if (macrelease >= (10, 4)) and '-arch' in cflags.strip(): # The universal build will build fat binaries, but not on # systems before 10.4 diff --git a/PythonLib/min/_pyio.py b/PythonLib/min/_pyio.py index 0986ed23..f022a4e8 100644 --- a/PythonLib/min/_pyio.py +++ b/PythonLib/min/_pyio.py @@ -7,6 +7,7 @@ import os import abc import codecs +import sys import warnings import errno # Import thread instead of threading to reduce startup cost @@ -25,8 +26,8 @@ DEFAULT_BUFFER_SIZE = 8 * 1024 # bytes # NOTE: Base classes defined here are registered with the "official" ABCs -# defined in io.py. We don't use real inheritance though, because we don't -# want to inherit the C implementations. +# defined in io.py. We don't use real inheritance though, because we don't want +# to inherit the C implementations. class BlockingIOError(IOError): @@ -192,38 +193,45 @@ def open(file, mode="r", buffering=-1, (appending and "a" or "") + (updating and "+" or ""), closefd) - line_buffering = False - if buffering == 1 or buffering < 0 and raw.isatty(): - buffering = -1 - line_buffering = True - if buffering < 0: - buffering = DEFAULT_BUFFER_SIZE - try: - bs = os.fstat(raw.fileno()).st_blksize - except (os.error, AttributeError): - pass + result = raw + try: + line_buffering = False + if buffering == 1 or buffering < 0 and raw.isatty(): + buffering = -1 + line_buffering = True + if buffering < 0: + buffering = DEFAULT_BUFFER_SIZE + try: + bs = os.fstat(raw.fileno()).st_blksize + except (os.error, AttributeError): + pass + else: + if bs > 1: + buffering = bs + if buffering < 0: + raise ValueError("invalid buffering size") + if buffering == 0: + if binary: + return result + raise ValueError("can't have unbuffered text I/O") + if updating: + buffer = BufferedRandom(raw, buffering) + elif writing or appending: + buffer = BufferedWriter(raw, buffering) + elif reading: + buffer = BufferedReader(raw, buffering) else: - if bs > 1: - buffering = bs - if buffering < 0: - raise ValueError("invalid buffering size") - if buffering == 0: + raise ValueError("unknown mode: %r" % mode) + result = buffer if binary: - return raw - raise ValueError("can't have unbuffered text I/O") - if updating: - buffer = BufferedRandom(raw, buffering) - elif writing or appending: - buffer = BufferedWriter(raw, buffering) - elif reading: - buffer = BufferedReader(raw, buffering) - else: - raise ValueError("unknown mode: %r" % mode) - if binary: - return buffer - text = TextIOWrapper(buffer, encoding, errors, newline, line_buffering) - text.mode = mode - return text + return result + text = TextIOWrapper(buffer, encoding, errors, newline, line_buffering) + result = text + text.mode = mode + return result + except: + result.close() + raise class DocDescriptor: @@ -266,11 +274,12 @@ class IOBase: Even though IOBase does not declare read, readinto, or write because their signatures will vary, implementations and clients should consider those methods part of the interface. Also, implementations - may raise a IOError when operations they do not support are called. + may raise an IOError when operations they do not support are called. The basic type used for binary data read from or written to a file is - bytes. bytearrays are accepted too, and in some cases (such as - readinto) needed. Text I/O classes work with str data. + the bytes type. Method arguments may also be bytearray or memoryview of + arrays of bytes. In some cases, such as readinto, a writable object such + as bytearray is required. Text I/O classes work with unicode data. Note that calling any method (even inquiries) on a closed stream is undefined. Implementations may raise IOError in this case. @@ -412,7 +421,7 @@ def closed(self): return self.__closed def _checkClosed(self, msg=None): - """Internal: raise an ValueError if file is closed + """Internal: raise a ValueError if file is closed """ if self.closed: raise ValueError("I/O operation on closed file." @@ -641,7 +650,6 @@ def readinto(self, b): Raises BlockingIOError if the underlying raw stream has no data at the moment. """ - # XXX This ought to work with anything that supports the buffer API data = self.read(len(b)) n = len(data) try: @@ -656,8 +664,7 @@ def readinto(self, b): def write(self, b): """Write the given buffer to the IO stream. - Return the number of bytes written, which is never less than - len(b). + Return the number of bytes written, which is always len(b). Raises BlockingIOError if the buffer is full and the underlying raw stream cannot accept more data at the moment. @@ -768,7 +775,7 @@ def __repr__(self): clsname = self.__class__.__name__ try: name = self.name - except AttributeError: + except Exception: return "<_pyio.{0}>".format(clsname) else: return "<_pyio.{0} name={1!r}>".format(clsname, name) @@ -989,7 +996,7 @@ def _read_unlocked(self, n=None): break avail += len(chunk) chunks.append(chunk) - # n is more then avail only when an EOF occurred or when + # n is more than avail only when an EOF occurred or when # read() would have blocked. n = min(n, avail) out = b"".join(chunks) @@ -1209,8 +1216,10 @@ def flush(self): return self.writer.flush() def close(self): - self.writer.close() - self.reader.close() + try: + self.writer.close() + finally: + self.reader.close() def isatty(self): return self.reader.isatty() or self.writer.isatty() @@ -1488,6 +1497,11 @@ def __init__(self, buffer, encoding=None, errors=None, newline=None, if not isinstance(encoding, basestring): raise ValueError("invalid encoding: %r" % encoding) + if sys.py3kwarning and not codecs.lookup(encoding)._is_text_encoding: + msg = ("%r is not a text encoding; " + "use codecs.open() to handle arbitrary codecs") + warnings.warnpy3k(msg % encoding, stacklevel=2) + if errors is None: errors = "strict" else: @@ -1531,7 +1545,7 @@ def __init__(self, buffer, encoding=None, errors=None, newline=None, def __repr__(self): try: name = self.name - except AttributeError: + except Exception: return "<_pyio.TextIOWrapper encoding='{0}'>".format(self.encoding) else: return "<_pyio.TextIOWrapper name={0!r} encoding='{1}'>".format( @@ -1997,11 +2011,17 @@ def __init__(self, initial_value="", newline="\n"): def getvalue(self): self.flush() - return self.buffer.getvalue().decode(self._encoding, self._errors) + decoder = self._decoder or self._get_decoder() + old_state = decoder.getstate() + decoder.reset() + try: + return decoder.decode(self.buffer.getvalue(), final=True) + finally: + decoder.setstate(old_state) def __repr__(self): # TextIOWrapper tells the encoding in its repr. In StringIO, - # that's a implementation detail. + # that's an implementation detail. return object.__repr__(self) @property diff --git a/PythonLib/min/_strptime.py b/PythonLib/min/_strptime.py index 042db6f4..8eb2718d 100644 --- a/PythonLib/min/_strptime.py +++ b/PythonLib/min/_strptime.py @@ -75,6 +75,8 @@ def __init__(self): self.__calc_date_time() if _getlang() != self.lang: raise ValueError("locale changed during initialization") + if time.tzname != self.tzname or time.daylight != self.daylight: + raise ValueError("timezone changed during initialization") def __pad(self, seq, front): # Add '' to seq to either the front (is True), else the back. @@ -159,15 +161,17 @@ def __calc_date_time(self): def __calc_timezone(self): # Set self.timezone by using time.tzname. - # Do not worry about possibility of time.tzname[0] == timetzname[1] - # and time.daylight; handle that in strptime . + # Do not worry about possibility of time.tzname[0] == time.tzname[1] + # and time.daylight; handle that in strptime. try: time.tzset() except AttributeError: pass - no_saving = frozenset(["utc", "gmt", time.tzname[0].lower()]) - if time.daylight: - has_saving = frozenset([time.tzname[1].lower()]) + self.tzname = time.tzname + self.daylight = time.daylight + no_saving = frozenset(["utc", "gmt", self.tzname[0].lower()]) + if self.daylight: + has_saving = frozenset([self.tzname[1].lower()]) else: has_saving = frozenset() self.timezone = (no_saving, has_saving) @@ -250,8 +254,8 @@ def pattern(self, format): # format directives (%m, etc.). regex_chars = re_compile(r"([\\.^$*+?\(\){}\[\]|])") format = regex_chars.sub(r"\\\1", format) - whitespace_replacement = re_compile('\s+') - format = whitespace_replacement.sub('\s+', format) + whitespace_replacement = re_compile(r'\s+') + format = whitespace_replacement.sub(r'\\s+', format) while '%' in format: directive_index = format.index('%')+1 processed_format = "%s%s%s" % (processed_format, @@ -296,12 +300,15 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): """Return a time struct based on the input string and the format string.""" global _TimeRE_cache, _regex_cache with _cache_lock: - if _getlang() != _TimeRE_cache.locale_time.lang: + locale_time = _TimeRE_cache.locale_time + if (_getlang() != locale_time.lang or + time.tzname != locale_time.tzname or + time.daylight != locale_time.daylight): _TimeRE_cache = TimeRE() _regex_cache.clear() + locale_time = _TimeRE_cache.locale_time if len(_regex_cache) > _CACHE_MAX_SIZE: _regex_cache.clear() - locale_time = _TimeRE_cache.locale_time format_regex = _regex_cache.get(format) if not format_regex: try: @@ -335,9 +342,9 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): # though week_of_year = -1 week_of_year_start = -1 - # weekday and julian defaulted to -1 so as to signal need to calculate + # weekday and julian defaulted to None so as to signal need to calculate # values - weekday = julian = -1 + weekday = julian = None found_dict = found.groupdict() for group_key in found_dict.iterkeys(): # Directives not explicitly handled below: @@ -434,14 +441,18 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): year = 1900 # If we know the week of the year and what day of that week, we can figure # out the Julian day of the year. - if julian == -1 and week_of_year != -1 and weekday != -1: + if julian is None and week_of_year != -1 and weekday is not None: week_starts_Mon = True if week_of_year_start == 0 else False julian = _calc_julian_from_U_or_W(year, week_of_year, weekday, week_starts_Mon) + if julian <= 0: + year -= 1 + yday = 366 if calendar.isleap(year) else 365 + julian += yday # Cannot pre-calculate datetime_date() since can change in Julian # calculation and thus could have different value for the day of the week # calculation. - if julian == -1: + if julian is None: # Need to add 1 to result since first day of the year is 1, not 0. julian = datetime_date(year, month, day).toordinal() - \ datetime_date(year, 1, 1).toordinal() + 1 @@ -451,7 +462,7 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): year = datetime_result.year month = datetime_result.month day = datetime_result.day - if weekday == -1: + if weekday is None: weekday = datetime_date(year, month, day).weekday() if leap_year_fix: # the caller didn't supply a year but asked for Feb 29th. We couldn't diff --git a/PythonLib/min/_weakrefset.py b/PythonLib/min/_weakrefset.py index 990c3a6b..627959b6 100644 --- a/PythonLib/min/_weakrefset.py +++ b/PythonLib/min/_weakrefset.py @@ -60,6 +60,8 @@ def __iter__(self): for itemref in self.data: item = itemref() if item is not None: + # Caveat: the iterator will keep a strong reference to + # `item` until it is resumed or closed. yield item def __len__(self): diff --git a/PythonLib/min/aifc.py b/PythonLib/min/aifc.py index d8b7fab7..e6783277 100644 --- a/PythonLib/min/aifc.py +++ b/PythonLib/min/aifc.py @@ -288,6 +288,8 @@ class Aifc_read: # _ssnd_chunk -- instantiation of a chunk class for the SSND chunk # _framesize -- size of one frame in the file + _file = None # Set here since __del__ checks it + def initfp(self, file): self._version = 0 self._decomp = None @@ -341,10 +343,16 @@ def initfp(self, file): self._decomp.SetParams(params) def __init__(self, f): - if type(f) == type(''): + if isinstance(f, basestring): f = __builtin__.open(f, 'rb') - # else, assume it is an open file object already - self.initfp(f) + try: + self.initfp(f) + except: + f.close() + raise + else: + # assume it is an open file object already + self.initfp(f) # # User visible methods. @@ -357,10 +365,13 @@ def rewind(self): self._soundpos = 0 def close(self): - if self._decomp: - self._decomp.CloseDecompressor() - self._decomp = None - self._file.close() + decomp = self._decomp + try: + if decomp: + self._decomp = None + decomp.CloseDecompressor() + finally: + self._file.close() def tell(self): return self._soundpos @@ -559,8 +570,10 @@ class Aifc_write: # _datalength -- the size of the audio samples written to the header # _datawritten -- the size of the audio samples actually written + _file = None # Set here since __del__ checks it + def __init__(self, f): - if type(f) == type(''): + if isinstance(f, basestring): filename = f f = __builtin__.open(f, 'wb') else: @@ -778,7 +791,7 @@ def _lin2adpcm(self, data): def _ensure_header_written(self, datasize): if not self._nframeswritten: - if self._comptype in ('ULAW', 'ALAW'): + if self._comptype in ('ULAW', 'ulaw', 'ALAW', 'alaw'): if not self._sampwidth: self._sampwidth = 2 if self._sampwidth != 2: @@ -844,7 +857,7 @@ def _write_header(self, initlength): if self._datalength & 1: self._datalength = self._datalength + 1 if self._aifc: - if self._comptype in ('ULAW', 'ALAW'): + if self._comptype in ('ULAW', 'ulaw', 'ALAW', 'alaw'): self._datalength = self._datalength // 2 if self._datalength & 1: self._datalength = self._datalength + 1 @@ -852,7 +865,10 @@ def _write_header(self, initlength): self._datalength = (self._datalength + 3) // 4 if self._datalength & 1: self._datalength = self._datalength + 1 - self._form_length_pos = self._file.tell() + try: + self._form_length_pos = self._file.tell() + except (AttributeError, IOError): + self._form_length_pos = None commlength = self._write_form_length(self._datalength) if self._aifc: self._file.write('AIFC') @@ -864,7 +880,8 @@ def _write_header(self, initlength): self._file.write('COMM') _write_ulong(self._file, commlength) _write_short(self._file, self._nchannels) - self._nframes_pos = self._file.tell() + if self._form_length_pos is not None: + self._nframes_pos = self._file.tell() _write_ulong(self._file, self._nframes) if self._comptype in ('ULAW', 'ulaw', 'ALAW', 'alaw', 'G722'): _write_short(self._file, 8) @@ -875,7 +892,8 @@ def _write_header(self, initlength): self._file.write(self._comptype) _write_string(self._file, self._compname) self._file.write('SSND') - self._ssnd_length_pos = self._file.tell() + if self._form_length_pos is not None: + self._ssnd_length_pos = self._file.tell() _write_ulong(self._file, self._datalength + 8) _write_ulong(self._file, 0) _write_ulong(self._file, 0) diff --git a/PythonLib/min/argparse.py b/PythonLib/min/argparse.py index 30bae578..1b233b85 100644 --- a/PythonLib/min/argparse.py +++ b/PythonLib/min/argparse.py @@ -168,6 +168,8 @@ def __init__(self, self._prog = prog self._indent_increment = indent_increment self._max_help_position = max_help_position + self._max_help_position = min(max_help_position, + max(width - 20, indent_increment * 2)) self._width = width self._current_indent = 0 @@ -339,7 +341,7 @@ def get_lines(parts, indent, prefix=None): else: line_len = len(indent) - 1 for part in parts: - if line_len + 1 + len(part) > text_width: + if line_len + 1 + len(part) > text_width and line: lines.append(indent + ' '.join(line)) line = [] line_len = len(indent) - 1 @@ -478,7 +480,7 @@ def _format_actions_usage(self, actions, groups): def _format_text(self, text): if '%(prog)' in text: text = text % dict(prog=self._prog) - text_width = self._width - self._current_indent + text_width = max(self._width - self._current_indent, 11) indent = ' ' * self._current_indent return self._fill_text(text, text_width, indent) + '\n\n' @@ -486,7 +488,7 @@ def _format_action(self, action): # determine the required width and the entry label help_position = min(self._action_max_length + 2, self._max_help_position) - help_width = self._width - help_position + help_width = max(self._width - help_position, 11) action_width = help_position - self._current_indent - 2 action_header = self._format_action_invocation(action) @@ -1087,7 +1089,14 @@ def __call__(self, parser, namespace, values, option_string=None): # parse all the remaining options into the namespace # store any unrecognized options on the object, so that the top # level parser can decide what to do with them - namespace, arg_strings = parser.parse_known_args(arg_strings, namespace) + + # In case this subparser defines new defaults, we parse them + # in a new namespace object and then update the original + # namespace for the relevant parts. + subnamespace, arg_strings = parser.parse_known_args(arg_strings, None) + for key, value in vars(subnamespace).items(): + setattr(namespace, key, value) + if arg_strings: vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, []) getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings) @@ -1155,9 +1164,13 @@ def __init__(self, **kwargs): __hash__ = None def __eq__(self, other): + if not isinstance(other, Namespace): + return NotImplemented return vars(self) == vars(other) def __ne__(self, other): + if not isinstance(other, Namespace): + return NotImplemented return not (self == other) def __contains__(self, key): diff --git a/PythonLib/min/asynchat.py b/PythonLib/min/asynchat.py index 911833d5..392ee61a 100644 --- a/PythonLib/min/asynchat.py +++ b/PythonLib/min/asynchat.py @@ -46,12 +46,17 @@ you - by calling your self.found_terminator() method. """ -import socket import asyncore +import errno +import socket from collections import deque from sys import py3kwarning from warnings import filterwarnings, catch_warnings +_BLOCKING_IO_ERRORS = (errno.EAGAIN, errno.EALREADY, errno.EINPROGRESS, + errno.EWOULDBLOCK) + + class async_chat (asyncore.dispatcher): """This is an abstract class. You must derive from this class, and add the two methods collect_incoming_data() and found_terminator()""" @@ -109,6 +114,8 @@ def handle_read (self): try: data = self.recv (self.ac_in_buffer_size) except socket.error, why: + if why.args[0] in _BLOCKING_IO_ERRORS: + return self.handle_error() return @@ -126,7 +133,7 @@ def handle_read (self): # no terminator, collect it all self.collect_incoming_data (self.ac_in_buffer) self.ac_in_buffer = '' - elif isinstance(terminator, int) or isinstance(terminator, long): + elif isinstance(terminator, (int, long)): # numeric terminator n = terminator if lb < n: diff --git a/PythonLib/min/asyncore.py b/PythonLib/min/asyncore.py index 29099bdf..105982f7 100644 --- a/PythonLib/min/asyncore.py +++ b/PythonLib/min/asyncore.py @@ -633,7 +633,11 @@ def getsockopt(self, level, optname, buflen=None): write = send def close(self): - os.close(self.fd) + if self.fd < 0: + return + fd = self.fd + self.fd = -1 + os.close(fd) def fileno(self): return self.fd diff --git a/PythonLib/min/base64.py b/PythonLib/min/base64.py index 85204dd0..38bc61ee 100644 --- a/PythonLib/min/base64.py +++ b/PythonLib/min/base64.py @@ -7,6 +7,7 @@ import re import struct +import string import binascii @@ -52,7 +53,7 @@ def b64encode(s, altchars=None): # Strip off the trailing newline encoded = binascii.b2a_base64(s)[:-1] if altchars is not None: - return _translate(encoded, {'+': altchars[0], '/': altchars[1]}) + return encoded.translate(string.maketrans(b'+/', altchars[:2])) return encoded @@ -63,12 +64,13 @@ def b64decode(s, altchars=None): length 2 (additional characters are ignored) which specifies the alternative alphabet used instead of the '+' and '/' characters. - The decoded string is returned. A TypeError is raised if s were - incorrectly padded or if there are non-alphabet characters present in the - string. + The decoded string is returned. A TypeError is raised if s is + incorrectly padded. Characters that are neither in the normal base-64 + alphabet nor the alternative alphabet are discarded prior to the padding + check. """ if altchars is not None: - s = _translate(s, {altchars[0]: '+', altchars[1]: '/'}) + s = s.translate(string.maketrans(altchars[:2], '+/')) try: return binascii.a2b_base64(s) except binascii.Error, msg: @@ -86,30 +88,35 @@ def standard_b64encode(s): def standard_b64decode(s): """Decode a string encoded with the standard Base64 alphabet. - s is the string to decode. The decoded string is returned. A TypeError - is raised if the string is incorrectly padded or if there are non-alphabet - characters present in the string. + Argument s is the string to decode. The decoded string is returned. A + TypeError is raised if the string is incorrectly padded. Characters that + are not in the standard alphabet are discarded prior to the padding + check. """ return b64decode(s) +_urlsafe_encode_translation = string.maketrans(b'+/', b'-_') +_urlsafe_decode_translation = string.maketrans(b'-_', b'+/') + def urlsafe_b64encode(s): - """Encode a string using a url-safe Base64 alphabet. + """Encode a string using the URL- and filesystem-safe Base64 alphabet. - s is the string to encode. The encoded string is returned. The alphabet - uses '-' instead of '+' and '_' instead of '/'. + Argument s is the string to encode. The encoded string is returned. The + alphabet uses '-' instead of '+' and '_' instead of '/'. """ - return b64encode(s, '-_') + return b64encode(s).translate(_urlsafe_encode_translation) def urlsafe_b64decode(s): - """Decode a string encoded with the standard Base64 alphabet. + """Decode a string using the URL- and filesystem-safe Base64 alphabet. - s is the string to decode. The decoded string is returned. A TypeError - is raised if the string is incorrectly padded or if there are non-alphabet - characters present in the string. + Argument s is the string to decode. The decoded string is returned. A + TypeError is raised if the string is incorrectly padded. Characters that + are not in the URL-safe base-64 alphabet, and are not a plus '+' or slash + '/', are discarded prior to the padding check. The alphabet uses '-' instead of '+' and '_' instead of '/'. """ - return b64decode(s, '-_') + return b64decode(s.translate(_urlsafe_decode_translation)) @@ -200,7 +207,7 @@ def b32decode(s, casefold=False, map01=None): # False, or the character to map the digit 1 (one) to. It should be # either L (el) or I (eye). if map01: - s = _translate(s, {'0': 'O', '1': map01}) + s = s.translate(string.maketrans(b'01', b'O' + map01)) if casefold: s = s.upper() # Strip off pad characters from the right. We need to count the pad @@ -263,7 +270,7 @@ def b16decode(s, casefold=False): a lowercase alphabet is acceptable as input. For security purposes, the default is False. - The decoded string is returned. A TypeError is raised if s were + The decoded string is returned. A TypeError is raised if s is incorrectly padded or if there are non-alphabet characters present in the string. """ diff --git a/PythonLib/min/binhex.py b/PythonLib/min/binhex.py index 8abc9f3e..14ec2337 100644 --- a/PythonLib/min/binhex.py +++ b/PythonLib/min/binhex.py @@ -32,7 +32,8 @@ class Error(Exception): pass # States (what have we written) -[_DID_HEADER, _DID_DATA, _DID_RSRC] = range(3) +_DID_HEADER = 0 +_DID_DATA = 1 # Various constants REASONABLY_LARGE=32768 # Minimal amount we pass the rle-coder @@ -235,17 +236,22 @@ def write_rsrc(self, data): self._write(data) def close(self): - if self.state < _DID_DATA: - self.close_data() - if self.state != _DID_DATA: - raise Error, 'Close at the wrong time' - if self.rlen != 0: - raise Error, \ - "Incorrect resource-datasize, diff=%r" % (self.rlen,) - self._writecrc() - self.ofp.close() - self.state = None - del self.ofp + if self.state is None: + return + try: + if self.state < _DID_DATA: + self.close_data() + if self.state != _DID_DATA: + raise Error, 'Close at the wrong time' + if self.rlen != 0: + raise Error, \ + "Incorrect resource-datasize, diff=%r" % (self.rlen,) + self._writecrc() + finally: + self.state = None + ofp = self.ofp + del self.ofp + ofp.close() def binhex(inp, out): """(infilename, outfilename) - Create binhex-encoded copy of a file""" @@ -463,11 +469,15 @@ def read_rsrc(self, *n): return self._read(n) def close(self): - if self.rlen: - dummy = self.read_rsrc(self.rlen) - self._checkcrc() - self.state = _DID_RSRC - self.ifp.close() + if self.state is None: + return + try: + if self.rlen: + dummy = self.read_rsrc(self.rlen) + self._checkcrc() + finally: + self.state = None + self.ifp.close() def hexbin(inp, out): """(infilename, outfilename) - Decode binhexed file""" diff --git a/PythonLib/min/calendar.py b/PythonLib/min/calendar.py index d3bd2362..8fcceb7f 100644 --- a/PythonLib/min/calendar.py +++ b/PythonLib/min/calendar.py @@ -142,7 +142,7 @@ def setfirstweekday(self, firstweekday): def iterweekdays(self): """ - Return a iterator for one week of weekday numbers starting with the + Return an iterator for one week of weekday numbers starting with the configured first one. """ for i in range(self.firstweekday, self.firstweekday + 7): @@ -174,22 +174,23 @@ def itermonthdays2(self, year, month): Like itermonthdates(), but will yield (day number, weekday number) tuples. For days outside the specified month the day number is 0. """ - for date in self.itermonthdates(year, month): - if date.month != month: - yield (0, date.weekday()) - else: - yield (date.day, date.weekday()) + for i, d in enumerate(self.itermonthdays(year, month), self.firstweekday): + yield d, i % 7 def itermonthdays(self, year, month): """ Like itermonthdates(), but will yield day numbers. For days outside the specified month the day number is 0. """ - for date in self.itermonthdates(year, month): - if date.month != month: - yield 0 - else: - yield date.day + day1, ndays = monthrange(year, month) + days_before = (day1 - self.firstweekday) % 7 + for _ in range(days_before): + yield 0 + for d in range(1, ndays + 1): + yield d + days_after = (self.firstweekday - day1 - ndays) % 7 + for _ in range(days_after): + yield 0 def monthdatescalendar(self, year, month): """ diff --git a/PythonLib/min/cgi.py b/PythonLib/min/cgi.py index 64ba6d16..7c51b44d 100644 --- a/PythonLib/min/cgi.py +++ b/PythonLib/min/cgi.py @@ -175,7 +175,7 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0): # parse query string function called from urlparse, -# this is done in order to maintain backward compatiblity. +# this is done in order to maintain backward compatibility. def parse_qs(qs, keep_blank_values=0, strict_parsing=0): """Parse a query given as a string argument.""" diff --git a/PythonLib/min/chunk.py b/PythonLib/min/chunk.py index a8fbc105..2d15abe8 100644 --- a/PythonLib/min/chunk.py +++ b/PythonLib/min/chunk.py @@ -21,7 +21,7 @@ usage of the Chunk class defined here is to instantiate an instance at the start of each chunk and read from the instance until it reaches the end, after which a new instance can be instantiated. At the end -of the file, creating a new instance will fail with a EOFError +of the file, creating a new instance will fail with an EOFError exception. Usage: @@ -85,8 +85,10 @@ def getsize(self): def close(self): if not self.closed: - self.skip() - self.closed = True + try: + self.skip() + finally: + self.closed = True def isatty(self): if self.closed: diff --git a/PythonLib/min/codecs.py b/PythonLib/min/codecs.py index f4cd60a1..590238ec 100644 --- a/PythonLib/min/codecs.py +++ b/PythonLib/min/codecs.py @@ -20,8 +20,14 @@ "BOM_LE", "BOM32_BE", "BOM32_LE", "BOM64_BE", "BOM64_LE", "BOM_UTF8", "BOM_UTF16", "BOM_UTF16_LE", "BOM_UTF16_BE", "BOM_UTF32", "BOM_UTF32_LE", "BOM_UTF32_BE", + "CodecInfo", "Codec", "IncrementalEncoder", "IncrementalDecoder", + "StreamReader", "StreamWriter", + "StreamReaderWriter", "StreamRecoder", + "getencoder", "getdecoder", "getincrementalencoder", + "getincrementaldecoder", "getreader", "getwriter", + "encode", "decode", "iterencode", "iterdecode", "strict_errors", "ignore_errors", "replace_errors", - "xmlcharrefreplace_errors", + "xmlcharrefreplace_errors", "backslashreplace_errors", "register_error", "lookup_error"] ### Constants @@ -73,9 +79,19 @@ ### Codec base classes (defining the API) class CodecInfo(tuple): + """Codec details when looking up the codec registry""" + + # Private API to allow Python to blacklist the known non-Unicode + # codecs in the standard library. A more general mechanism to + # reliably distinguish test encodings from other codecs will hopefully + # be defined for Python 3.5 + # + # See http://bugs.python.org/issue19619 + _is_text_encoding = True # Assume codecs are text encodings by default def __new__(cls, encode, decode, streamreader=None, streamwriter=None, - incrementalencoder=None, incrementaldecoder=None, name=None): + incrementalencoder=None, incrementaldecoder=None, name=None, + _is_text_encoding=None): self = tuple.__new__(cls, (encode, decode, streamreader, streamwriter)) self.name = name self.encode = encode @@ -84,6 +100,8 @@ def __new__(cls, encode, decode, streamreader=None, streamwriter=None, self.incrementaldecoder = incrementaldecoder self.streamwriter = streamwriter self.streamreader = streamreader + if _is_text_encoding is not None: + self._is_text_encoding = _is_text_encoding return self def __repr__(self): @@ -120,8 +138,8 @@ def encode(self, input, errors='strict'): 'strict' handling. The method may not store state in the Codec instance. Use - StreamCodec for codecs which have to keep state in order to - make encoding/decoding efficient. + StreamWriter for codecs which have to keep state in order to + make encoding efficient. The encoder must be able to handle zero length input and return an empty object of the output object type in this @@ -143,8 +161,8 @@ def decode(self, input, errors='strict'): 'strict' handling. The method may not store state in the Codec instance. Use - StreamCodec for codecs which have to keep state in order to - make encoding/decoding efficient. + StreamReader for codecs which have to keep state in order to + make decoding efficient. The decoder must be able to handle zero length input and return an empty object of the output object type in this @@ -234,7 +252,7 @@ class IncrementalDecoder(object): """ def __init__(self, errors='strict'): """ - Creates a IncrementalDecoder instance. + Creates an IncrementalDecoder instance. The IncrementalDecoder may use different error handling schemes by providing the errors keyword argument. See the module docstring @@ -456,16 +474,13 @@ def read(self, size=-1, chars=-1, firstline=False): # read until we get the required number of characters (if available) while True: - # can the request can be satisfied from the character buffer? - if chars < 0: - if size < 0: - if self.charbuffer: - break - elif len(self.charbuffer) >= size: - break - else: + # can the request be satisfied from the character buffer? + if chars >= 0: if len(self.charbuffer) >= chars: break + elif size >= 0: + if len(self.charbuffer) >= size: + break # we need more data if size < 0: newdata = self.stream.read() @@ -997,7 +1012,7 @@ def iterencode(iterator, encoding, errors='strict', **kwargs): """ Encoding iterator. - Encodes the input strings from the iterator using a IncrementalEncoder. + Encodes the input strings from the iterator using an IncrementalEncoder. errors and kwargs are passed through to the IncrementalEncoder constructor. @@ -1015,7 +1030,7 @@ def iterdecode(iterator, encoding, errors='strict', **kwargs): """ Decoding iterator. - Decodes the input strings from the iterator using a IncrementalDecoder. + Decodes the input strings from the iterator using an IncrementalDecoder. errors and kwargs are passed through to the IncrementalDecoder constructor. @@ -1054,7 +1069,7 @@ def make_encoding_map(decoding_map): during translation. One example where this happens is cp875.py which decodes - multiple character to \u001a. + multiple character to \\u001a. """ m = {} diff --git a/PythonLib/min/collections.py b/PythonLib/min/collections.py index 0beb142b..f2ad9726 100644 --- a/PythonLib/min/collections.py +++ b/PythonLib/min/collections.py @@ -1,3 +1,15 @@ +'''This module implements specialized container datatypes providing +alternatives to Python's general purpose built-in containers, dict, +list, set, and tuple. + +* namedtuple factory function for creating tuple subclasses with named fields +* deque list-like container with fast appends and pops on either end +* Counter dict subclass for counting hashable objects +* OrderedDict dict subclass that remembers the order entries were added +* defaultdict dict subclass that calls a factory function to supply missing values + +''' + __all__ = ['Counter', 'deque', 'defaultdict', 'namedtuple', 'OrderedDict'] # For bootstrapping reasons, the collection ABCs are defined in _abcoll.py. # They should however be considered an integral part of collections.py. @@ -35,12 +47,17 @@ class OrderedDict(dict): # The sentinel element never gets deleted (this simplifies the algorithm). # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - def __init__(self, *args, **kwds): + def __init__(*args, **kwds): '''Initialize an ordered dictionary. The signature is the same as regular dictionaries, but keyword arguments are not recommended because their insertion order is arbitrary. ''' + if not args: + raise TypeError("descriptor '__init__' of 'OrderedDict' object " + "needs an argument") + self = args[0] + args = args[1:] if len(args) > 1: raise TypeError('expected at most 1 arguments, got %d' % len(args)) try: @@ -297,7 +314,7 @@ def namedtuple(typename, field_names, verbose=False, rename=False): >>> x, y = p # unpack like a regular tuple >>> x, y (11, 22) - >>> p.x + p.y # fields also accessable by name + >>> p.x + p.y # fields also accessible by name 33 >>> d = p._asdict() # convert to a dictionary >>> d['x'] @@ -314,6 +331,7 @@ def namedtuple(typename, field_names, verbose=False, rename=False): if isinstance(field_names, basestring): field_names = field_names.replace(',', ' ').split() field_names = map(str, field_names) + typename = str(typename) if rename: seen = set() for index, name in enumerate(field_names): @@ -326,6 +344,8 @@ def namedtuple(typename, field_names, verbose=False, rename=False): field_names[index] = '_%d' % index seen.add(name) for name in [typename] + field_names: + if type(name) != str: + raise TypeError('Type names and field names must be strings') if not all(c.isalnum() or c=='_' for c in name): raise ValueError('Type names and field names can only contain ' 'alphanumeric characters and underscores: %r' % name) @@ -435,7 +455,7 @@ class Counter(dict): # http://code.activestate.com/recipes/259174/ # Knuth, TAOCP Vol. II section 4.6.3 - def __init__(self, iterable=None, **kwds): + def __init__(*args, **kwds): '''Create a new, empty Counter object. And if given, count elements from an input iterable. Or, initialize the count from another mapping of elements to their counts. @@ -446,8 +466,15 @@ def __init__(self, iterable=None, **kwds): >>> c = Counter(a=4, b=2) # a new counter from keyword args ''' + if not args: + raise TypeError("descriptor '__init__' of 'Counter' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) super(Counter, self).__init__() - self.update(iterable, **kwds) + self.update(*args, **kwds) def __missing__(self, key): 'The count of elements not in the Counter is zero.' @@ -498,7 +525,7 @@ def fromkeys(cls, iterable, v=None): raise NotImplementedError( 'Counter.fromkeys() is undefined. Use Counter(iterable) instead.') - def update(self, iterable=None, **kwds): + def update(*args, **kwds): '''Like dict.update() but add counts instead of replacing them. Source can be an iterable, a dictionary, or another Counter instance. @@ -518,6 +545,14 @@ def update(self, iterable=None, **kwds): # contexts. Instead, we implement straight-addition. Both the inputs # and outputs are allowed to contain zero and negative counts. + if not args: + raise TypeError("descriptor 'update' of 'Counter' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + iterable = args[0] if args else None if iterable is not None: if isinstance(iterable, Mapping): if self: @@ -533,7 +568,7 @@ def update(self, iterable=None, **kwds): if kwds: self.update(kwds) - def subtract(self, iterable=None, **kwds): + def subtract(*args, **kwds): '''Like dict.update() but subtracts counts instead of replacing them. Counts can be reduced below zero. Both the inputs and outputs are allowed to contain zero and negative counts. @@ -549,6 +584,14 @@ def subtract(self, iterable=None, **kwds): -1 ''' + if not args: + raise TypeError("descriptor 'subtract' of 'Counter' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + iterable = args[0] if args else None if iterable is not None: self_get = self.get if isinstance(iterable, Mapping): diff --git a/PythonLib/min/cookielib.py b/PythonLib/min/cookielib.py index f9c8d2f8..2dd7c487 100644 --- a/PythonLib/min/cookielib.py +++ b/PythonLib/min/cookielib.py @@ -113,7 +113,7 @@ def time2netscape(t=None): """ if t is None: t = time.time() year, mon, mday, hour, min, sec, wday = time.gmtime(t)[:7] - return "%s %02d-%s-%04d %02d:%02d:%02d GMT" % ( + return "%s, %02d-%s-%04d %02d:%02d:%02d GMT" % ( DAYS[wday], mday, MONTHS[mon-1], year, hour, min, sec) @@ -464,26 +464,42 @@ def parse_ns_headers(ns_headers): for ns_header in ns_headers: pairs = [] version_set = False - for ii, param in enumerate(re.split(r";\s*", ns_header)): - param = param.rstrip() - if param == "": continue - if "=" not in param: - k, v = param, None - else: - k, v = re.split(r"\s*=\s*", param, 1) - k = k.lstrip() + + # XXX: The following does not strictly adhere to RFCs in that empty + # names and values are legal (the former will only appear once and will + # be overwritten if multiple occurrences are present). This is + # mostly to deal with backwards compatibility. + for ii, param in enumerate(ns_header.split(';')): + param = param.strip() + + key, sep, val = param.partition('=') + key = key.strip() + + if not key: + if ii == 0: + break + else: + continue + + # allow for a distinction between present and empty and missing + # altogether + val = val.strip() if sep else None + if ii != 0: - lc = k.lower() + lc = key.lower() if lc in known_attrs: - k = lc - if k == "version": + key = lc + + if key == "version": # This is an RFC 2109 cookie. - v = _strip_quotes(v) + if val is not None: + val = _strip_quotes(val) version_set = True - if k == "expires": + elif key == "expires": # convert expires date to seconds since epoch - v = http2time(_strip_quotes(v)) # None if invalid - pairs.append((k, v)) + if val is not None: + val = http2time(_strip_quotes(val)) # None if invalid + pairs.append((key, val)) if pairs: if not version_set: @@ -1418,7 +1434,7 @@ def _normalized_cookie_tuples(self, attrs_set): break # convert RFC 2965 Max-Age to seconds since epoch # XXX Strictly you're supposed to follow RFC 2616 - # age-calculation rules. Remember that zero Max-Age is a + # age-calculation rules. Remember that zero Max-Age # is a request to discard (old and new) cookie, though. k = "expires" v = self._now + v @@ -1719,12 +1735,12 @@ def __len__(self): def __repr__(self): r = [] for cookie in self: r.append(repr(cookie)) - return "<%s[%s]>" % (self.__class__, ", ".join(r)) + return "<%s[%s]>" % (self.__class__.__name__, ", ".join(r)) def __str__(self): r = [] for cookie in self: r.append(str(cookie)) - return "<%s[%s]>" % (self.__class__, ", ".join(r)) + return "<%s[%s]>" % (self.__class__.__name__, ", ".join(r)) # derives from IOError for backwards-compatibility with Python 2.4.0 diff --git a/PythonLib/min/copy.py b/PythonLib/min/copy.py index c227a2e5..daf81a3f 100644 --- a/PythonLib/min/copy.py +++ b/PythonLib/min/copy.py @@ -315,7 +315,7 @@ def _reconstruct(x, info, deep, memo=None): if n > 2: state = info[2] else: - state = {} + state = None if n > 3: listiter = info[3] else: @@ -329,7 +329,7 @@ def _reconstruct(x, info, deep, memo=None): y = callable(*args) memo[id(x)] = y - if state: + if state is not None: if deep: state = deepcopy(state, memo) if hasattr(y, '__setstate__'): diff --git a/PythonLib/min/copy_reg.py b/PythonLib/min/copy_reg.py index db171509..89430775 100644 --- a/PythonLib/min/copy_reg.py +++ b/PythonLib/min/copy_reg.py @@ -127,7 +127,11 @@ class found there. (This assumes classes don't modify their continue # mangled names elif name.startswith('__') and not name.endswith('__'): - names.append('_%s%s' % (c.__name__, name)) + stripped = c.__name__.lstrip('_') + if stripped: + names.append('_%s%s' % (stripped, name)) + else: + names.append(name) else: names.append(name) diff --git a/PythonLib/min/csv.py b/PythonLib/min/csv.py index 98480ba1..c155ada7 100644 --- a/PythonLib/min/csv.py +++ b/PythonLib/min/csv.py @@ -93,6 +93,10 @@ def fieldnames(self): self.line_num = self.reader.line_num return self._fieldnames + # Issue 20004: Because DictReader is a classic class, this setter is + # ignored. At this point in 2.7's lifecycle, it is too late to change the + # base class for fear of breaking working code. If you want to change + # fieldnames without overwriting the getter, set _fieldnames directly. @fieldnames.setter def fieldnames(self, value): self._fieldnames = value @@ -140,8 +144,8 @@ def _dict_to_list(self, rowdict): if self.extrasaction == "raise": wrong_fields = [k for k in rowdict if k not in self.fieldnames] if wrong_fields: - raise ValueError("dict contains fields not in fieldnames: " + - ", ".join(wrong_fields)) + raise ValueError("dict contains fields not in fieldnames: " + + ", ".join([repr(x) for x in wrong_fields])) return [rowdict.get(key, self.restval) for key in self.fieldnames] def writerow(self, rowdict): diff --git a/PythonLib/min/decimal.py b/PythonLib/min/decimal.py index 04bf5c26..e5329dde 100644 --- a/PythonLib/min/decimal.py +++ b/PythonLib/min/decimal.py @@ -136,7 +136,6 @@ __version__ = '1.70' # Highest version of the spec this complies with -import copy as _copy import math as _math import numbers as _numbers @@ -225,7 +224,7 @@ def handle(self, context, *args): class ConversionSyntax(InvalidOperation): """Trying to convert badly formed string. - This occurs and signals invalid-operation if an string is being + This occurs and signals invalid-operation if a string is being converted to a number and it does not conform to the numeric string syntax. The result is [0,qNaN]. """ @@ -1049,12 +1048,11 @@ def __str__(self, eng=False, context=None): return sign + intpart + fracpart + exp def to_eng_string(self, context=None): - """Convert to engineering-type string. + """Convert to a string, using engineering notation if an exponent is needed. - Engineering notation has an exponent which is a multiple of 3, so there - are up to 3 digits left of the decimal place. - - Same rules for when in exponential and when as a value as in __str__. + Engineering notation has an exponent which is a multiple of 3. This + can leave up to 3 digits to the left of the decimal place and may + require the addition of either one or two trailing zeros. """ return self.__str__(eng=True, context=context) @@ -1083,7 +1081,7 @@ def __neg__(self, context=None): def __pos__(self, context=None): """Returns a copy, unless it is a sNaN. - Rounds the number (if more then precision digits) + Rounds the number (if more than precision digits) """ if self._is_special: ans = self._check_nans(context=context) @@ -3665,6 +3663,8 @@ def __format__(self, specifier, context=None, _localeconv=None): if self._is_special: sign = _format_sign(self._sign, spec) body = str(self.copy_abs()) + if spec['type'] == '%': + body += '%' return _format_align(sign, body, spec) # a type of None defaults to 'g' or 'G', depending on context @@ -5338,9 +5338,29 @@ def subtract(self, a, b): return r def to_eng_string(self, a): - """Converts a number to a string, using scientific notation. + """Convert to a string, using engineering notation if an exponent is needed. + + Engineering notation has an exponent which is a multiple of 3. This + can leave up to 3 digits to the left of the decimal place and may + require the addition of either one or two trailing zeros. The operation is not affected by the context. + + >>> ExtendedContext.to_eng_string(Decimal('123E+1')) + '1.23E+3' + >>> ExtendedContext.to_eng_string(Decimal('123E+3')) + '123E+3' + >>> ExtendedContext.to_eng_string(Decimal('123E-10')) + '12.3E-9' + >>> ExtendedContext.to_eng_string(Decimal('-123E-12')) + '-123E-12' + >>> ExtendedContext.to_eng_string(Decimal('7E-7')) + '700E-9' + >>> ExtendedContext.to_eng_string(Decimal('7E+1')) + '70' + >>> ExtendedContext.to_eng_string(Decimal('0E+1')) + '0.00E+3' + """ a = _convert_other(a, raiseit=True) return a.to_eng_string(context=self) @@ -6033,7 +6053,10 @@ def _parse_format_specifier(format_spec, _localeconv=None): format_dict['decimal_point'] = '.' # record whether return type should be str or unicode - format_dict['unicode'] = isinstance(format_spec, unicode) + try: + format_dict['unicode'] = isinstance(format_spec, unicode) + except NameError: + format_dict['unicode'] = False return format_dict diff --git a/PythonLib/min/difflib.py b/PythonLib/min/difflib.py index f94b3aca..1c6fbdbe 100644 --- a/PythonLib/min/difflib.py +++ b/PythonLib/min/difflib.py @@ -1,5 +1,3 @@ -#! /usr/bin/env python - """ Module difflib -- helpers for computing deltas between objects. @@ -525,8 +523,8 @@ def get_matching_blocks(self): non_adjacent.append((i1, j1, k1)) non_adjacent.append( (la, lb, 0) ) - self.matching_blocks = non_adjacent - return map(Match._make, self.matching_blocks) + self.matching_blocks = map(Match._make, non_adjacent) + return self.matching_blocks def get_opcodes(self): """Return list of 5-tuples describing how to turn a into b. @@ -1489,7 +1487,7 @@ def _line_iterator(): yield _make_line(lines,'-',0), None, True continue elif s.startswith(('--?+', '--+', '- ')): - # in delete block and see a intraline change or unchanged line + # in delete block and see an intraline change or unchanged line # coming: yield the delete line and then blanks from_line,to_line = _make_line(lines,'-',0), None num_blanks_to_yield,num_blanks_pending = num_blanks_pending-1,0 diff --git a/PythonLib/min/doctest.py b/PythonLib/min/doctest.py index efa07d7e..fedf6701 100644 --- a/PythonLib/min/doctest.py +++ b/PythonLib/min/doctest.py @@ -216,10 +216,10 @@ def _load_testfile(filename, package, module_relative): # get_data() opens files as 'rb', so one must do the equivalent # conversion as universal newlines would do. return file_contents.replace(os.linesep, '\n'), filename - with open(filename) as f: + with open(filename, 'U') as f: return f.read(), filename -# Use sys.stdout encoding for ouput. +# Use sys.stdout encoding for output. _encoding = getattr(sys.__stdout__, 'encoding', None) or 'utf-8' def _indent(s, indent=4): @@ -326,6 +326,32 @@ def _comment_line(line): else: return '#' +def _strip_exception_details(msg): + # Support for IGNORE_EXCEPTION_DETAIL. + # Get rid of everything except the exception name; in particular, drop + # the possibly dotted module path (if any) and the exception message (if + # any). We assume that a colon is never part of a dotted name, or of an + # exception name. + # E.g., given + # "foo.bar.MyError: la di da" + # return "MyError" + # Or for "abc.def" or "abc.def:\n" return "def". + + start, end = 0, len(msg) + # The exception name must appear on the first line. + i = msg.find("\n") + if i >= 0: + end = i + # retain up to the first colon (if any) + i = msg.find(':', 0, end) + if i >= 0: + end = i + # retain just the exception name + i = msg.rfind('.', 0, end) + if i >= 0: + start = i+1 + return msg[start: end] + class _OutputRedirectingPdb(pdb.Pdb): """ A specialized version of the python debugger that redirects stdout @@ -1323,10 +1349,9 @@ def __run(self, test, compileflags, out): # Another chance if they didn't care about the detail. elif self.optionflags & IGNORE_EXCEPTION_DETAIL: - m1 = re.match(r'(?:[^:]*\.)?([^:]*:)', example.exc_msg) - m2 = re.match(r'(?:[^:]*\.)?([^:]*:)', exc_msg) - if m1 and m2 and check(m1.group(1), m2.group(1), - self.optionflags): + if check(_strip_exception_details(example.exc_msg), + _strip_exception_details(exc_msg), + self.optionflags): outcome = SUCCESS # Report the outcome. diff --git a/PythonLib/min/dumbdbm.py b/PythonLib/min/dumbdbm.py index fb54a930..ac73b89c 100644 --- a/PythonLib/min/dumbdbm.py +++ b/PythonLib/min/dumbdbm.py @@ -21,6 +21,7 @@ """ +import ast as _ast import os as _os import __builtin__ import UserDict @@ -44,8 +45,9 @@ class _Database(UserDict.DictMixin): _os = _os # for _commit() _open = _open # for _commit() - def __init__(self, filebasename, mode): + def __init__(self, filebasename, mode, flag='c'): self._mode = mode + self._readonly = (flag == 'r') # The directory file is a text file. Each line looks like # "%r, (%d, %d)\n" % (key, pos, siz) @@ -68,9 +70,10 @@ def __init__(self, filebasename, mode): try: f = _open(self._datfile, 'r') except IOError: - f = _open(self._datfile, 'w') - self._chmod(self._datfile) - f.close() + with _open(self._datfile, 'w') as f: + self._chmod(self._datfile) + else: + f.close() self._update() # Read directory file into the in-memory index dict. @@ -79,13 +82,14 @@ def _update(self): try: f = _open(self._dirfile) except IOError: - pass + self._modified = not self._readonly else: - for line in f: - line = line.rstrip() - key, pos_and_siz_pair = eval(line) - self._index[key] = pos_and_siz_pair - f.close() + self._modified = False + with f: + for line in f: + line = line.rstrip() + key, pos_and_siz_pair = _ast.literal_eval(line) + self._index[key] = pos_and_siz_pair # Write the index dict to the directory file. The original directory # file (if any) is renamed with a .bak extension first. If a .bak @@ -94,7 +98,7 @@ def _commit(self): # CAUTION: It's vital that _commit() succeed, and _commit() can # be called from __del__(). Therefore we must never reference a # global in this routine. - if self._index is None: + if self._index is None or not self._modified: return # nothing to do try: @@ -107,20 +111,18 @@ def _commit(self): except self._os.error: pass - f = self._open(self._dirfile, 'w') - self._chmod(self._dirfile) - for key, pos_and_siz_pair in self._index.iteritems(): - f.write("%r, %r\n" % (key, pos_and_siz_pair)) - f.close() + with self._open(self._dirfile, 'w') as f: + self._chmod(self._dirfile) + for key, pos_and_siz_pair in self._index.iteritems(): + f.write("%r, %r\n" % (key, pos_and_siz_pair)) sync = _commit def __getitem__(self, key): pos, siz = self._index[key] # may raise KeyError - f = _open(self._datfile, 'rb') - f.seek(pos) - dat = f.read(siz) - f.close() + with _open(self._datfile, 'rb') as f: + f.seek(pos) + dat = f.read(siz) return dat # Append val to the data file, starting at a _BLOCKSIZE-aligned @@ -128,14 +130,13 @@ def __getitem__(self, key): # to get to an aligned offset. Return pair # (starting offset of val, len(val)) def _addval(self, val): - f = _open(self._datfile, 'rb+') - f.seek(0, 2) - pos = int(f.tell()) - npos = ((pos + _BLOCKSIZE - 1) // _BLOCKSIZE) * _BLOCKSIZE - f.write('\0'*(npos-pos)) - pos = npos - f.write(val) - f.close() + with _open(self._datfile, 'rb+') as f: + f.seek(0, 2) + pos = int(f.tell()) + npos = ((pos + _BLOCKSIZE - 1) // _BLOCKSIZE) * _BLOCKSIZE + f.write('\0'*(npos-pos)) + pos = npos + f.write(val) return (pos, len(val)) # Write val to the data file, starting at offset pos. The caller @@ -143,10 +144,9 @@ def _addval(self, val): # pos to hold val, without overwriting some other value. Return # pair (pos, len(val)). def _setval(self, pos, val): - f = _open(self._datfile, 'rb+') - f.seek(pos) - f.write(val) - f.close() + with _open(self._datfile, 'rb+') as f: + f.seek(pos) + f.write(val) return (pos, len(val)) # key is a new key whose associated value starts in the data file @@ -154,14 +154,14 @@ def _setval(self, pos, val): # the in-memory index dict, and append one to the directory file. def _addkey(self, key, pos_and_siz_pair): self._index[key] = pos_and_siz_pair - f = _open(self._dirfile, 'a') - self._chmod(self._dirfile) - f.write("%r, %r\n" % (key, pos_and_siz_pair)) - f.close() + with _open(self._dirfile, 'a') as f: + self._chmod(self._dirfile) + f.write("%r, %r\n" % (key, pos_and_siz_pair)) def __setitem__(self, key, val): if not type(key) == type('') == type(val): raise TypeError, "keys and values must be strings" + self._modified = True if key not in self._index: self._addkey(key, self._addval(val)) else: @@ -187,6 +187,7 @@ def __setitem__(self, key, val): # (so that _commit() never gets called). def __delitem__(self, key): + self._modified = True # The blocks used by the associated value are lost. del self._index[key] # XXX It's unclear why we do a _commit() here (the code always @@ -212,8 +213,10 @@ def __len__(self): return len(self._index) def close(self): - self._commit() - self._index = self._datfile = self._dirfile = self._bakfile = None + try: + self._commit() + finally: + self._index = self._datfile = self._dirfile = self._bakfile = None __del__ = close @@ -247,4 +250,4 @@ def open(file, flag=None, mode=0666): # Turn off any bits that are set in the umask mode = mode & (~um) - return _Database(file, mode) + return _Database(file, mode, flag) diff --git a/PythonLib/min/encodings/base64_codec.py b/PythonLib/min/encodings/base64_codec.py index f84e7808..34ac5554 100644 --- a/PythonLib/min/encodings/base64_codec.py +++ b/PythonLib/min/encodings/base64_codec.py @@ -76,4 +76,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) diff --git a/PythonLib/min/encodings/bz2_codec.py b/PythonLib/min/encodings/bz2_codec.py index 054b36b4..136503ac 100644 --- a/PythonLib/min/encodings/bz2_codec.py +++ b/PythonLib/min/encodings/bz2_codec.py @@ -99,4 +99,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) diff --git a/PythonLib/min/encodings/hex_codec.py b/PythonLib/min/encodings/hex_codec.py index 91b38d95..154488cd 100644 --- a/PythonLib/min/encodings/hex_codec.py +++ b/PythonLib/min/encodings/hex_codec.py @@ -76,4 +76,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) diff --git a/PythonLib/min/encodings/quopri_codec.py b/PythonLib/min/encodings/quopri_codec.py index d8683fd5..e4965da8 100644 --- a/PythonLib/min/encodings/quopri_codec.py +++ b/PythonLib/min/encodings/quopri_codec.py @@ -21,7 +21,7 @@ def quopri_encode(input, errors='strict'): # using str() because of cStringIO's Unicode undesired Unicode behavior. f = StringIO(str(input)) g = StringIO() - quopri.encode(f, g, 1) + quopri.encode(f, g, quotetabs=True) output = g.getvalue() return (output, len(input)) @@ -72,4 +72,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) diff --git a/PythonLib/min/encodings/rot_13.py b/PythonLib/min/encodings/rot_13.py index 52b6431c..4eaf4338 100644 --- a/PythonLib/min/encodings/rot_13.py +++ b/PythonLib/min/encodings/rot_13.py @@ -44,6 +44,7 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) ### Decoding Map diff --git a/PythonLib/min/encodings/utf_32.py b/PythonLib/min/encodings/utf_32.py index 6c8016fe..067e1e20 100644 --- a/PythonLib/min/encodings/utf_32.py +++ b/PythonLib/min/encodings/utf_32.py @@ -68,7 +68,7 @@ def reset(self): self.decoder = None def getstate(self): - # additonal state info from the base class must be None here, + # additional state info from the base class must be None here, # as it isn't passed along to the caller state = codecs.BufferedIncrementalDecoder.getstate(self)[0] # additional state info we pass to the caller: diff --git a/PythonLib/min/encodings/uu_codec.py b/PythonLib/min/encodings/uu_codec.py index fb037581..5cb0d2b1 100644 --- a/PythonLib/min/encodings/uu_codec.py +++ b/PythonLib/min/encodings/uu_codec.py @@ -84,7 +84,7 @@ def uu_decode(input,errors='strict'): data = a2b_uu(s) except binascii.Error, v: # Workaround for broken uuencoders by /Fredrik Lundh - nbytes = (((ord(s[0])-32) & 63) * 4 + 5) / 3 + nbytes = (((ord(s[0])-32) & 63) * 4 + 5) // 3 data = a2b_uu(s[:nbytes]) #sys.stderr.write("Warning: %s\n" % str(v)) write(data) @@ -126,4 +126,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamreader=StreamReader, streamwriter=StreamWriter, + _is_text_encoding=False, ) diff --git a/PythonLib/min/encodings/zlib_codec.py b/PythonLib/min/encodings/zlib_codec.py index 3419f9f4..0c2599d4 100644 --- a/PythonLib/min/encodings/zlib_codec.py +++ b/PythonLib/min/encodings/zlib_codec.py @@ -99,4 +99,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamreader=StreamReader, streamwriter=StreamWriter, + _is_text_encoding=False, ) diff --git a/PythonLib/min/fileinput.py b/PythonLib/min/fileinput.py index 04e97bdb..b2e2f050 100644 --- a/PythonLib/min/fileinput.py +++ b/PythonLib/min/fileinput.py @@ -64,13 +64,6 @@ disabled when standard input is read. XXX The current implementation does not work for MS-DOS 8+3 filesystems. -Performance: this module is unfortunately one of the slower ways of -processing large numbers of input lines. Nevertheless, a significant -speed-up has been obtained by using readlines(bufsize) instead of -readline(). A new keyword argument, bufsize=N, is present on the -input() function and the FileInput() class to override the default -buffer size. - XXX Possible additions: - optional getopt argument processing @@ -86,6 +79,7 @@ _state = None +# No longer used DEFAULT_BUFSIZE = 8*1024 def input(files=None, inplace=0, backup="", bufsize=0, @@ -207,17 +201,14 @@ def __init__(self, files=None, inplace=0, backup="", bufsize=0, self._files = files self._inplace = inplace self._backup = backup - self._bufsize = bufsize or DEFAULT_BUFSIZE self._savestdout = None self._output = None self._filename = None - self._lineno = 0 + self._startlineno = 0 self._filelineno = 0 self._file = None self._isstdin = False self._backupfilename = None - self._buffer = [] - self._bufindex = 0 # restrict mode argument to reading modes if mode not in ('r', 'rU', 'U', 'rb'): raise ValueError("FileInput opening mode must be one of " @@ -233,29 +224,27 @@ def __del__(self): self.close() def close(self): - self.nextfile() - self._files = () + try: + self.nextfile() + finally: + self._files = () def __iter__(self): return self def next(self): - try: - line = self._buffer[self._bufindex] - except IndexError: - pass - else: - self._bufindex += 1 - self._lineno += 1 - self._filelineno += 1 - return line - line = self.readline() - if not line: - raise StopIteration - return line + while 1: + line = self._readline() + if line: + self._filelineno += 1 + return line + if not self._file: + raise StopIteration + self.nextfile() + # repeat with next file def __getitem__(self, i): - if i != self._lineno: + if i != self.lineno(): raise RuntimeError, "accessing lines out of order" try: return self.next() @@ -270,90 +259,93 @@ def nextfile(self): output = self._output self._output = 0 - if output: - output.close() - - file = self._file - self._file = 0 - if file and not self._isstdin: - file.close() - - backupfilename = self._backupfilename - self._backupfilename = 0 - if backupfilename and not self._backup: - try: os.unlink(backupfilename) - except OSError: pass + try: + if output: + output.close() + finally: + file = self._file + self._file = None + try: + del self._readline # restore FileInput._readline + except AttributeError: + pass + try: + if file and not self._isstdin: + file.close() + finally: + backupfilename = self._backupfilename + self._backupfilename = 0 + if backupfilename and not self._backup: + try: os.unlink(backupfilename) + except OSError: pass - self._isstdin = False - self._buffer = [] - self._bufindex = 0 + self._isstdin = False def readline(self): - try: - line = self._buffer[self._bufindex] - except IndexError: - pass + while 1: + line = self._readline() + if line: + self._filelineno += 1 + return line + if not self._file: + return line + self.nextfile() + # repeat with next file + + def _readline(self): + if not self._files: + return "" + self._filename = self._files[0] + self._files = self._files[1:] + self._startlineno = self.lineno() + self._filelineno = 0 + self._file = None + self._isstdin = False + self._backupfilename = 0 + if self._filename == '-': + self._filename = '' + self._file = sys.stdin + self._isstdin = True else: - self._bufindex += 1 - self._lineno += 1 - self._filelineno += 1 - return line - if not self._file: - if not self._files: - return "" - self._filename = self._files[0] - self._files = self._files[1:] - self._filelineno = 0 - self._file = None - self._isstdin = False - self._backupfilename = 0 - if self._filename == '-': - self._filename = '' - self._file = sys.stdin - self._isstdin = True - else: - if self._inplace: - self._backupfilename = ( - self._filename + (self._backup or os.extsep+"bak")) - try: os.unlink(self._backupfilename) - except os.error: pass - # The next few lines may raise IOError - os.rename(self._filename, self._backupfilename) - self._file = open(self._backupfilename, self._mode) + if self._inplace: + self._backupfilename = ( + self._filename + (self._backup or os.extsep+"bak")) + try: os.unlink(self._backupfilename) + except os.error: pass + # The next few lines may raise IOError + os.rename(self._filename, self._backupfilename) + self._file = open(self._backupfilename, self._mode) + try: + perm = os.fstat(self._file.fileno()).st_mode + except OSError: + self._output = open(self._filename, "w") + else: + fd = os.open(self._filename, + os.O_CREAT | os.O_WRONLY | os.O_TRUNC, + perm) + self._output = os.fdopen(fd, "w") try: - perm = os.fstat(self._file.fileno()).st_mode + if hasattr(os, 'chmod'): + os.chmod(self._filename, perm) except OSError: - self._output = open(self._filename, "w") - else: - fd = os.open(self._filename, - os.O_CREAT | os.O_WRONLY | os.O_TRUNC, - perm) - self._output = os.fdopen(fd, "w") - try: - if hasattr(os, 'chmod'): - os.chmod(self._filename, perm) - except OSError: - pass - self._savestdout = sys.stdout - sys.stdout = self._output + pass + self._savestdout = sys.stdout + sys.stdout = self._output + else: + # This may raise IOError + if self._openhook: + self._file = self._openhook(self._filename, self._mode) else: - # This may raise IOError - if self._openhook: - self._file = self._openhook(self._filename, self._mode) - else: - self._file = open(self._filename, self._mode) - self._buffer = self._file.readlines(self._bufsize) - self._bufindex = 0 - if not self._buffer: - self.nextfile() - # Recursive call - return self.readline() + self._file = open(self._filename, self._mode) + + self._readline = self._file.readline # hide FileInput._readline + return self._readline() def filename(self): return self._filename def lineno(self): - return self._lineno + return self._startlineno + self._filelineno def filelineno(self): return self._filelineno @@ -387,9 +379,10 @@ def hook_compressed(filename, mode): def hook_encoded(encoding): - import codecs + import io def openhook(filename, mode): - return codecs.open(filename, mode, encoding) + mode = mode.replace('U', '').replace('b', '') or 'r' + return io.open(filename, mode, encoding=encoding, newline='') return openhook diff --git a/PythonLib/min/fnmatch.py b/PythonLib/min/fnmatch.py index ffe99b57..99002e6e 100644 --- a/PythonLib/min/fnmatch.py +++ b/PythonLib/min/fnmatch.py @@ -47,12 +47,14 @@ def filter(names, pat): import os,posixpath result=[] pat=os.path.normcase(pat) - if not pat in _cache: + try: + re_pat = _cache[pat] + except KeyError: res = translate(pat) if len(_cache) >= _MAXCACHE: _cache.clear() - _cache[pat] = re.compile(res) - match=_cache[pat].match + _cache[pat] = re_pat = re.compile(res) + match = re_pat.match if os.path is posixpath: # normcase on posix is NOP. Optimize it away from the loop. for name in names: @@ -71,12 +73,14 @@ def fnmatchcase(name, pat): its arguments. """ - if not pat in _cache: + try: + re_pat = _cache[pat] + except KeyError: res = translate(pat) if len(_cache) >= _MAXCACHE: _cache.clear() - _cache[pat] = re.compile(res) - return _cache[pat].match(name) is not None + _cache[pat] = re_pat = re.compile(res) + return re_pat.match(name) is not None def translate(pat): """Translate a shell PATTERN to a regular expression. diff --git a/PythonLib/min/ftplib.py b/PythonLib/min/ftplib.py index c98290ce..66445547 100644 --- a/PythonLib/min/ftplib.py +++ b/PythonLib/min/ftplib.py @@ -171,6 +171,8 @@ def sanitize(self, s): # Internal: send one line to the server, appending CRLF def putline(self, line): + if '\r' in line or '\n' in line: + raise ValueError('an illegal newline character should not be contained') line = line + CRLF if self.debugging > 1: print '*put*', self.sanitize(line) self.sock.sendall(line) @@ -264,7 +266,7 @@ def sendport(self, host, port): return self.voidcmd(cmd) def sendeprt(self, host, port): - '''Send a EPRT command with the current host and the given port number.''' + '''Send an EPRT command with the current host and the given port number.''' af = 0 if self.af == socket.AF_INET: af = 1 @@ -412,12 +414,14 @@ def retrbinary(self, cmd, callback, blocksize=8192, rest=None): """ self.voidcmd('TYPE I') conn = self.transfercmd(cmd, rest) - while 1: - data = conn.recv(blocksize) - if not data: - break - callback(data) - conn.close() + try: + while 1: + data = conn.recv(blocksize) + if not data: + break + callback(data) + finally: + conn.close() return self.voidresp() def retrlines(self, cmd, callback = None): @@ -435,21 +439,25 @@ def retrlines(self, cmd, callback = None): if callback is None: callback = print_line resp = self.sendcmd('TYPE A') conn = self.transfercmd(cmd) - fp = conn.makefile('rb') - while 1: - line = fp.readline(self.maxline + 1) - if len(line) > self.maxline: - raise Error("got more than %d bytes" % self.maxline) - if self.debugging > 2: print '*retr*', repr(line) - if not line: - break - if line[-2:] == CRLF: - line = line[:-2] - elif line[-1:] == '\n': - line = line[:-1] - callback(line) - fp.close() - conn.close() + fp = None + try: + fp = conn.makefile('rb') + while 1: + line = fp.readline(self.maxline + 1) + if len(line) > self.maxline: + raise Error("got more than %d bytes" % self.maxline) + if self.debugging > 2: print '*retr*', repr(line) + if not line: + break + if line[-2:] == CRLF: + line = line[:-2] + elif line[-1:] == '\n': + line = line[:-1] + callback(line) + finally: + if fp: + fp.close() + conn.close() return self.voidresp() def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None): @@ -469,12 +477,14 @@ def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None): """ self.voidcmd('TYPE I') conn = self.transfercmd(cmd, rest) - while 1: - buf = fp.read(blocksize) - if not buf: break - conn.sendall(buf) - if callback: callback(buf) - conn.close() + try: + while 1: + buf = fp.read(blocksize) + if not buf: break + conn.sendall(buf) + if callback: callback(buf) + finally: + conn.close() return self.voidresp() def storlines(self, cmd, fp, callback=None): @@ -491,17 +501,19 @@ def storlines(self, cmd, fp, callback=None): """ self.voidcmd('TYPE A') conn = self.transfercmd(cmd) - while 1: - buf = fp.readline(self.maxline + 1) - if len(buf) > self.maxline: - raise Error("got more than %d bytes" % self.maxline) - if not buf: break - if buf[-2:] != CRLF: - if buf[-1] in CRLF: buf = buf[:-1] - buf = buf + CRLF - conn.sendall(buf) - if callback: callback(buf) - conn.close() + try: + while 1: + buf = fp.readline(self.maxline + 1) + if len(buf) > self.maxline: + raise Error("got more than %d bytes" % self.maxline) + if not buf: break + if buf[-2:] != CRLF: + if buf[-1] in CRLF: buf = buf[:-1] + buf = buf + CRLF + conn.sendall(buf) + if callback: callback(buf) + finally: + conn.close() return self.voidresp() def acct(self, password): @@ -594,11 +606,16 @@ def quit(self): def close(self): '''Close the connection without assuming anything about it.''' - if self.file is not None: - self.file.close() - if self.sock is not None: - self.sock.close() - self.file = self.sock = None + try: + file = self.file + self.file = None + if file is not None: + file.close() + finally: + sock = self.sock + self.sock = None + if sock is not None: + sock.close() try: import ssl @@ -638,12 +655,24 @@ class FTP_TLS(FTP): '221 Goodbye.' >>> ''' - ssl_version = ssl.PROTOCOL_TLSv1 + ssl_version = ssl.PROTOCOL_SSLv23 def __init__(self, host='', user='', passwd='', acct='', keyfile=None, - certfile=None, timeout=_GLOBAL_DEFAULT_TIMEOUT): + certfile=None, context=None, + timeout=_GLOBAL_DEFAULT_TIMEOUT, source_address=None): + if context is not None and keyfile is not None: + raise ValueError("context and keyfile arguments are mutually " + "exclusive") + if context is not None and certfile is not None: + raise ValueError("context and certfile arguments are mutually " + "exclusive") self.keyfile = keyfile self.certfile = certfile + if context is None: + context = ssl._create_stdlib_context(self.ssl_version, + certfile=certfile, + keyfile=keyfile) + self.context = context self._prot_p = False FTP.__init__(self, host, user, passwd, acct, timeout) @@ -656,12 +685,12 @@ def auth(self): '''Set up secure control connection by using TLS/SSL.''' if isinstance(self.sock, ssl.SSLSocket): raise ValueError("Already using TLS") - if self.ssl_version == ssl.PROTOCOL_TLSv1: + if self.ssl_version >= ssl.PROTOCOL_SSLv23: resp = self.voidcmd('AUTH TLS') else: resp = self.voidcmd('AUTH SSL') - self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, - ssl_version=self.ssl_version) + self.sock = self.context.wrap_socket(self.sock, + server_hostname=self.host) self.file = self.sock.makefile(mode='rb') return resp @@ -692,8 +721,8 @@ def prot_c(self): def ntransfercmd(self, cmd, rest=None): conn, size = FTP.ntransfercmd(self, cmd, rest) if self._prot_p: - conn = ssl.wrap_socket(conn, self.keyfile, self.certfile, - ssl_version=self.ssl_version) + conn = self.context.wrap_socket(conn, + server_hostname=self.host) return conn, size def retrbinary(self, cmd, callback, blocksize=8192, rest=None): @@ -825,7 +854,7 @@ def parse227(resp): def parse229(resp, peer): - '''Parse the '229' response for a EPSV request. + '''Parse the '229' response for an EPSV request. Raises error_proto if it does not contain '(|||port|)' Return ('host.addr.as.numbers', port#) tuple.''' diff --git a/PythonLib/min/genericpath.py b/PythonLib/min/genericpath.py index 7ddb94c0..2648e545 100644 --- a/PythonLib/min/genericpath.py +++ b/PythonLib/min/genericpath.py @@ -10,6 +10,14 @@ 'getsize', 'isdir', 'isfile'] +try: + _unicode = unicode +except NameError: + # If Python is built without Unicode support, the unicode type + # will not exist. Fake one. + class _unicode(object): + pass + # Does a path exist? # This is false for dangling symbolic links on systems that support them. def exists(path): diff --git a/PythonLib/min/getopt.py b/PythonLib/min/getopt.py index 251d89c5..084aadb5 100644 --- a/PythonLib/min/getopt.py +++ b/PythonLib/min/getopt.py @@ -28,7 +28,7 @@ # - RETURN_IN_ORDER option # - GNU extension with '-' as first character of option string # - optional arguments, specified by double colons -# - a option string with a W followed by semicolon should +# - an option string with a W followed by semicolon should # treat "-W foo" as "--foo" __all__ = ["GetoptError","error","getopt","gnu_getopt"] diff --git a/PythonLib/min/gettext.py b/PythonLib/min/gettext.py index 3f475803..765cc8c7 100644 --- a/PythonLib/min/gettext.py +++ b/PythonLib/min/gettext.py @@ -52,79 +52,154 @@ __all__ = ['NullTranslations', 'GNUTranslations', 'Catalog', 'find', 'translation', 'install', 'textdomain', 'bindtextdomain', - 'dgettext', 'dngettext', 'gettext', 'ngettext', + 'bind_textdomain_codeset', + 'dgettext', 'dngettext', 'gettext', 'lgettext', 'ldgettext', + 'ldngettext', 'lngettext', 'ngettext', ] _default_localedir = os.path.join(sys.prefix, 'share', 'locale') - -def test(condition, true, false): - """ - Implements the C expression: - - condition ? true : false - - Required to correctly interpret plural forms. - """ - if condition: - return true +# Expression parsing for plural form selection. +# +# The gettext library supports a small subset of C syntax. The only +# incompatible difference is that integer literals starting with zero are +# decimal. +# +# https://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms +# http://git.savannah.gnu.org/cgit/gettext.git/tree/gettext-runtime/intl/plural.y + +_token_pattern = re.compile(r""" + (?P[ \t]+) | # spaces and horizontal tabs + (?P[0-9]+\b) | # decimal integer + (?Pn\b) | # only n is allowed + (?P[()]) | + (?P[-*/%+?:]|[>, + # <=, >=, ==, !=, &&, ||, + # ? : + # unary and bitwise ops + # not allowed + (?P\w+|.) # invalid token + """, re.VERBOSE|re.DOTALL) + +def _tokenize(plural): + for mo in re.finditer(_token_pattern, plural): + kind = mo.lastgroup + if kind == 'WHITESPACES': + continue + value = mo.group(kind) + if kind == 'INVALID': + raise ValueError('invalid token in plural form: %s' % value) + yield value + yield '' + +def _error(value): + if value: + return ValueError('unexpected token in plural form: %s' % value) else: - return false - + return ValueError('unexpected end of plural form') + +_binary_ops = ( + ('||',), + ('&&',), + ('==', '!='), + ('<', '>', '<=', '>='), + ('+', '-'), + ('*', '/', '%'), +) +_binary_ops = {op: i for i, ops in enumerate(_binary_ops, 1) for op in ops} +_c2py_ops = {'||': 'or', '&&': 'and', '/': '//'} + +def _parse(tokens, priority=-1): + result = '' + nexttok = next(tokens) + while nexttok == '!': + result += 'not ' + nexttok = next(tokens) + + if nexttok == '(': + sub, nexttok = _parse(tokens) + result = '%s(%s)' % (result, sub) + if nexttok != ')': + raise ValueError('unbalanced parenthesis in plural form') + elif nexttok == 'n': + result = '%s%s' % (result, nexttok) + else: + try: + value = int(nexttok, 10) + except ValueError: + raise _error(nexttok) + result = '%s%d' % (result, value) + nexttok = next(tokens) + + j = 100 + while nexttok in _binary_ops: + i = _binary_ops[nexttok] + if i < priority: + break + # Break chained comparisons + if i in (3, 4) and j in (3, 4): # '==', '!=', '<', '>', '<=', '>=' + result = '(%s)' % result + # Replace some C operators by their Python equivalents + op = _c2py_ops.get(nexttok, nexttok) + right, nexttok = _parse(tokens, i + 1) + result = '%s %s %s' % (result, op, right) + j = i + if j == priority == 4: # '<', '>', '<=', '>=' + result = '(%s)' % result + + if nexttok == '?' and priority <= 0: + if_true, nexttok = _parse(tokens, 0) + if nexttok != ':': + raise _error(nexttok) + if_false, nexttok = _parse(tokens) + result = '%s if %s else %s' % (if_true, result, if_false) + if priority == 0: + result = '(%s)' % result + + return result, nexttok + +def _as_int(n): + try: + i = round(n) + except TypeError: + raise TypeError('Plural value must be an integer, got %s' % + (n.__class__.__name__,)) + return n def c2py(plural): """Gets a C expression as used in PO files for plural forms and returns a - Python lambda function that implements an equivalent expression. + Python function that implements an equivalent expression. """ - # Security check, allow only the "n" identifier - try: - from cStringIO import StringIO - except ImportError: - from StringIO import StringIO - import token, tokenize - tokens = tokenize.generate_tokens(StringIO(plural).readline) - try: - danger = [x for x in tokens if x[0] == token.NAME and x[1] != 'n'] - except tokenize.TokenError: - raise ValueError, \ - 'plural forms expression error, maybe unbalanced parenthesis' - else: - if danger: - raise ValueError, 'plural forms expression could be dangerous' - - # Replace some C operators by their Python equivalents - plural = plural.replace('&&', ' and ') - plural = plural.replace('||', ' or ') - - expr = re.compile(r'\!([^=])') - plural = expr.sub(' not \\1', plural) - - # Regular expression and replacement function used to transform - # "a?b:c" to "test(a,b,c)". - expr = re.compile(r'(.*?)\?(.*?):(.*)') - def repl(x): - return "test(%s, %s, %s)" % (x.group(1), x.group(2), - expr.sub(repl, x.group(3))) - - # Code to transform the plural expression, taking care of parentheses - stack = [''] - for c in plural: - if c == '(': - stack.append('') - elif c == ')': - if len(stack) == 1: - # Actually, we never reach this code, because unbalanced - # parentheses get caught in the security check at the - # beginning. - raise ValueError, 'unbalanced parenthesis in plural form' - s = expr.sub(repl, stack.pop()) - stack[-1] += '(%s)' % s - else: - stack[-1] += c - plural = expr.sub(repl, stack.pop()) - - return eval('lambda n: int(%s)' % plural) + if len(plural) > 1000: + raise ValueError('plural form expression is too long') + try: + result, nexttok = _parse(_tokenize(plural)) + if nexttok: + raise _error(nexttok) + + depth = 0 + for c in result: + if c == '(': + depth += 1 + if depth > 20: + # Python compiler limit is about 90. + # The most complex example has 2. + raise ValueError('plural form expression is too complex') + elif c == ')': + depth -= 1 + + ns = {'_as_int': _as_int} + exec('''if 1: + def func(n): + if not isinstance(n, int): + n = _as_int(n) + return int(%s) + ''' % result, ns) + return ns['func'] + except RuntimeError: + # Recursion error can be raised in _parse() or exec(). + raise ValueError('plural form expression is too complex') def _expand_lang(locale): @@ -294,11 +369,12 @@ def _parse(self, fp): # See if we're looking at GNU .mo conventions for metadata if mlen == 0: # Catalog description - lastk = k = None + lastk = None for item in tmsg.splitlines(): item = item.strip() if not item: continue + k = v = None if ':' in item: k, v = item.split(':', 1) k = k.strip().lower() diff --git a/PythonLib/min/glob.py b/PythonLib/min/glob.py index f34534b5..b3d9ec1b 100644 --- a/PythonLib/min/glob.py +++ b/PythonLib/min/glob.py @@ -35,11 +35,16 @@ def iglob(pathname): patterns. """ + dirname, basename = os.path.split(pathname) if not has_magic(pathname): - if os.path.lexists(pathname): - yield pathname + if basename: + if os.path.lexists(pathname): + yield pathname + else: + # Patterns ending with a slash should match only directories + if os.path.isdir(dirname): + yield pathname return - dirname, basename = os.path.split(pathname) if not dirname: for name in glob1(os.curdir, basename): yield name diff --git a/PythonLib/min/gzip.py b/PythonLib/min/gzip.py index a613bae8..07c6db49 100644 --- a/PythonLib/min/gzip.py +++ b/PythonLib/min/gzip.py @@ -55,7 +55,7 @@ def __init__(self, filename=None, mode=None, a file object. When fileobj is not None, the filename argument is only used to be - included in the gzip file header, which may includes the original + included in the gzip file header, which may include the original filename of the uncompressed file. It defaults to the filename of fileobj, if discernible; otherwise, it defaults to the empty string, and in this case the original filename is not included in the header. @@ -164,9 +164,16 @@ def _init_write(self, filename): def _write_gzip_header(self): self.fileobj.write('\037\213') # magic header self.fileobj.write('\010') # compression method - fname = os.path.basename(self.name) - if fname.endswith(".gz"): - fname = fname[:-3] + try: + # RFC 1952 requires the FNAME field to be Latin-1. Do not + # include filenames that cannot be represented that way. + fname = os.path.basename(self.name) + if not isinstance(fname, str): + fname = fname.encode('latin-1') + if fname.endswith('.gz'): + fname = fname[:-3] + except UnicodeEncodeError: + fname = '' flags = 0 if fname: flags = FNAME @@ -231,9 +238,9 @@ def write(self,data): data = data.tobytes() if len(data) > 0: - self.size = self.size + len(data) + self.fileobj.write(self.compress.compress(data)) + self.size += len(data) self.crc = zlib.crc32(data, self.crc) & 0xffffffffL - self.fileobj.write( self.compress.compress(data) ) self.offset += len(data) return len(data) @@ -362,19 +369,21 @@ def closed(self): return self.fileobj is None def close(self): - if self.fileobj is None: + fileobj = self.fileobj + if fileobj is None: return - if self.mode == WRITE: - self.fileobj.write(self.compress.flush()) - write32u(self.fileobj, self.crc) - # self.size may exceed 2GB, or even 4GB - write32u(self.fileobj, self.size & 0xffffffffL) - self.fileobj = None - elif self.mode == READ: - self.fileobj = None - if self.myfileobj: - self.myfileobj.close() - self.myfileobj = None + self.fileobj = None + try: + if self.mode == WRITE: + fileobj.write(self.compress.flush()) + write32u(fileobj, self.crc) + # self.size may exceed 2GB, or even 4GB + write32u(fileobj, self.size & 0xffffffffL) + finally: + myfileobj = self.myfileobj + if myfileobj: + self.myfileobj = None + myfileobj.close() def flush(self,zlib_mode=zlib.Z_SYNC_FLUSH): self._check_closed() diff --git a/PythonLib/min/hashlib.py b/PythonLib/min/hashlib.py index d20e1f95..bbd06b99 100644 --- a/PythonLib/min/hashlib.py +++ b/PythonLib/min/hashlib.py @@ -15,8 +15,9 @@ md5(), sha1(), sha224(), sha256(), sha384(), and sha512() -More algorithms may be available on your platform but the above are -guaranteed to exist. +More algorithms may be available on your platform but the above are guaranteed +to exist. See the algorithms_guaranteed and algorithms_available attributes +to find out what algorithm names can be passed to new(). NOTE: If you want the adler32 or crc32 hash functions they are available in the zlib module. @@ -58,9 +59,14 @@ # always available algorithm is added. __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512') +algorithms_guaranteed = set(__always_supported) +algorithms_available = set(__always_supported) + algorithms = __always_supported -__all__ = __always_supported + ('new', 'algorithms') +__all__ = __always_supported + ('new', 'algorithms_guaranteed', + 'algorithms_available', 'algorithms', + 'pbkdf2_hmac') def __get_builtin_constructor(name): @@ -128,6 +134,8 @@ def __hash_new(name, string=''): import _hashlib new = __hash_new __get_hash = __get_openssl_constructor + algorithms_available = algorithms_available.union( + _hashlib.openssl_md_meth_names) except ImportError: new = __py_new __get_hash = __get_builtin_constructor @@ -141,6 +149,73 @@ def __hash_new(name, string=''): import logging logging.exception('code for hash %s was not found.', __func_name) + +try: + # OpenSSL's PKCS5_PBKDF2_HMAC requires OpenSSL 1.0+ with HMAC and SHA + from _hashlib import pbkdf2_hmac +except ImportError: + import binascii + import struct + + _trans_5C = b"".join(chr(x ^ 0x5C) for x in range(256)) + _trans_36 = b"".join(chr(x ^ 0x36) for x in range(256)) + + def pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None): + """Password based key derivation function 2 (PKCS #5 v2.0) + + This Python implementations based on the hmac module about as fast + as OpenSSL's PKCS5_PBKDF2_HMAC for short passwords and much faster + for long passwords. + """ + if not isinstance(hash_name, str): + raise TypeError(hash_name) + + if not isinstance(password, (bytes, bytearray)): + password = bytes(buffer(password)) + if not isinstance(salt, (bytes, bytearray)): + salt = bytes(buffer(salt)) + + # Fast inline HMAC implementation + inner = new(hash_name) + outer = new(hash_name) + blocksize = getattr(inner, 'block_size', 64) + if len(password) > blocksize: + password = new(hash_name, password).digest() + password = password + b'\x00' * (blocksize - len(password)) + inner.update(password.translate(_trans_36)) + outer.update(password.translate(_trans_5C)) + + def prf(msg, inner=inner, outer=outer): + # PBKDF2_HMAC uses the password as key. We can re-use the same + # digest objects and just update copies to skip initialization. + icpy = inner.copy() + ocpy = outer.copy() + icpy.update(msg) + ocpy.update(icpy.digest()) + return ocpy.digest() + + if iterations < 1: + raise ValueError(iterations) + if dklen is None: + dklen = outer.digest_size + if dklen < 1: + raise ValueError(dklen) + + hex_format_string = "%%0%ix" % (new(hash_name).digest_size * 2) + + dkey = b'' + loop = 1 + while len(dkey) < dklen: + prev = prf(salt + struct.pack(b'>I', loop)) + rkey = int(binascii.hexlify(prev), 16) + for i in xrange(iterations - 1): + prev = prf(prev) + rkey ^= int(binascii.hexlify(prev), 16) + loop += 1 + dkey += binascii.unhexlify(hex_format_string % rkey) + + return dkey[:dklen] + # Cleanup locals() del __always_supported, __func_name, __get_hash del __py_new, __hash_new, __get_openssl_constructor diff --git a/PythonLib/min/heapq.py b/PythonLib/min/heapq.py index 4b2c0c44..f8269e15 100644 --- a/PythonLib/min/heapq.py +++ b/PythonLib/min/heapq.py @@ -56,7 +56,7 @@ In the tree above, each cell `k' is topping `2*k+1' and `2*k+2'. In -an usual binary tournament we see in sports, each cell is the winner +a usual binary tournament we see in sports, each cell is the winner over the two cells it tops, and we can trace the winner down the tree to see all opponents s/he had. However, in many computer applications of such tournaments, we do not need to trace the history of a winner. diff --git a/PythonLib/min/hmac.py b/PythonLib/min/hmac.py index 53881063..9cd1a9fd 100644 --- a/PythonLib/min/hmac.py +++ b/PythonLib/min/hmac.py @@ -5,6 +5,9 @@ import warnings as _warnings +from operator import _compare_digest as compare_digest + + trans_5C = "".join ([chr (x ^ 0x5C) for x in xrange(256)]) trans_36 = "".join ([chr (x ^ 0x36) for x in xrange(256)]) diff --git a/PythonLib/min/htmlentitydefs.py b/PythonLib/min/htmlentitydefs.py index 3dd14a79..1f40d09d 100644 --- a/PythonLib/min/htmlentitydefs.py +++ b/PythonLib/min/htmlentitydefs.py @@ -1,6 +1,6 @@ """HTML character entity references.""" -# maps the HTML entity name to the Unicode codepoint +# maps the HTML entity name to the Unicode code point name2codepoint = { 'AElig': 0x00c6, # latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1 'Aacute': 0x00c1, # latin capital letter A with acute, U+00C1 ISOlat1 @@ -256,7 +256,7 @@ 'zwnj': 0x200c, # zero width non-joiner, U+200C NEW RFC 2070 } -# maps the Unicode codepoint to the HTML entity name +# maps the Unicode code point to the HTML entity name codepoint2name = {} # maps the HTML entity name to the character diff --git a/PythonLib/min/httplib.py b/PythonLib/min/httplib.py index 5c919d2b..f3bb22c2 100644 --- a/PythonLib/min/httplib.py +++ b/PythonLib/min/httplib.py @@ -68,6 +68,7 @@ from array import array import os +import re import socket from sys import py3kwarning from urlparse import urlsplit @@ -215,6 +216,42 @@ # maximal line length when calling readline(). _MAXLINE = 65536 +# maximum amount of headers accepted +_MAXHEADERS = 100 + +# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2) +# +# VCHAR = %x21-7E +# obs-text = %x80-FF +# header-field = field-name ":" OWS field-value OWS +# field-name = token +# field-value = *( field-content / obs-fold ) +# field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] +# field-vchar = VCHAR / obs-text +# +# obs-fold = CRLF 1*( SP / HTAB ) +# ; obsolete line folding +# ; see Section 3.2.4 + +# token = 1*tchar +# +# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" +# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" +# / DIGIT / ALPHA +# ; any VCHAR, except delimiters +# +# VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1 + +# the patterns for both name and value are more lenient than RFC +# definitions to allow for backwards compatibility +_is_legal_header_name = re.compile(r'\A[^:\s][^:\r\n]*\Z').match +_is_illegal_header_value = re.compile(r'\n(?![ \t])|\r(?![ \t\n])').search + +# We always set the Content-Length header for these methods because some +# servers will otherwise respond with a 411 +_METHODS_EXPECTING_BODY = {'PATCH', 'POST', 'PUT'} + + class HTTPMessage(mimetools.Message): def addheader(self, key, value): @@ -236,9 +273,8 @@ def readheaders(self): Read header lines up to the entirely blank line that terminates them. The (normally blank) line that ends the headers is skipped, but not - included in the returned list. If a non-header line ends the headers, - (which is an error), an attempt is made to backspace over it; it is - never included in the returned list. + included in the returned list. If an invalid line is found in the + header section, it is skipped, and further lines are processed. The variable self.status is set to the empty string if all went well, otherwise it is an error message. The variable self.headers is a @@ -265,17 +301,17 @@ def readheaders(self): self.status = '' headerseen = "" firstline = 1 - startofline = unread = tell = None - if hasattr(self.fp, 'unread'): - unread = self.fp.unread - elif self.seekable: + tell = None + if not hasattr(self.fp, 'unread') and self.seekable: tell = self.fp.tell while True: + if len(hlist) > _MAXHEADERS: + raise HTTPException("got more than %d headers" % _MAXHEADERS) if tell: try: - startofline = tell() + tell() except IOError: - startofline = tell = None + tell = None self.seekable = 0 line = self.fp.readline(_MAXLINE + 1) if len(line) > _MAXLINE: @@ -306,21 +342,14 @@ def readheaders(self): # It's a legal header line, save it. hlist.append(line) self.addheader(headerseen, line[len(headerseen)+1:].strip()) - continue + elif headerseen is not None: + # An empty header name. These aren't allowed in HTTP, but it's + # probably a benign mistake. Don't add the header, just keep + # going. + pass else: - # It's not a header line; throw it back and stop here. - if not self.dict: - self.status = 'No headers' - else: - self.status = 'Non-header line where header expected' - # Try to undo the read. - if unread: - unread(line) - elif tell: - self.fp.seek(startofline) - else: - self.status = self.status + '; bad seek' - break + # It's not a header line; skip it and try the next line. + self.status = 'Non-header line where header expected' class HTTPResponse: @@ -516,9 +545,10 @@ def _check_close(self): return True def close(self): - if self.fp: - self.fp.close() + fp = self.fp + if fp: self.fp = None + fp.close() def isclosed(self): # NOTE: it is possible that we will not ever call self.close(). This @@ -565,7 +595,7 @@ def read(self, amt=None): # connection, and the user is reading more bytes than will be provided # (for example, reading in 1k chunks) s = self.fp.read(amt) - if not s: + if not s and amt: # Ideally, we would raise IncompleteRead if the content-length # wasn't satisfied, but it might break compatibility. self.close() @@ -700,25 +730,40 @@ def __init__(self, host, port=None, strict=None, self._tunnel_host = None self._tunnel_port = None self._tunnel_headers = {} - - self._set_hostport(host, port) if strict is not None: self.strict = strict + (self.host, self.port) = self._get_hostport(host, port) + + # This is stored as an instance variable to allow unittests + # to replace with a suitable mock + self._create_connection = socket.create_connection + def set_tunnel(self, host, port=None, headers=None): - """ Sets up the host and the port for the HTTP CONNECT Tunnelling. + """ Set up host and port for HTTP CONNECT tunnelling. + + In a connection that uses HTTP Connect tunneling, the host passed to the + constructor is used as proxy server that relays all communication to the + endpoint passed to set_tunnel. This is done by sending a HTTP CONNECT + request to the proxy server when the connection is established. + + This method must be called before the HTTP connection has been + established. The headers argument should be a mapping of extra HTTP headers to send with the CONNECT request. """ - self._tunnel_host = host - self._tunnel_port = port + # Verify if this is required. + if self.sock: + raise RuntimeError("Can't setup tunnel for established connection.") + + self._tunnel_host, self._tunnel_port = self._get_hostport(host, port) if headers: self._tunnel_headers = headers else: self._tunnel_headers.clear() - def _set_hostport(self, host, port): + def _get_hostport(self, host, port): if port is None: i = host.rfind(':') j = host.rfind(']') # ipv6 addresses have [...] @@ -735,15 +780,14 @@ def _set_hostport(self, host, port): port = self.default_port if host and host[0] == '[' and host[-1] == ']': host = host[1:-1] - self.host = host - self.port = port + return (host, port) def set_debuglevel(self, level): self.debuglevel = level def _tunnel(self): - self._set_hostport(self._tunnel_host, self._tunnel_port) - self.send("CONNECT %s:%d HTTP/1.0\r\n" % (self.host, self.port)) + self.send("CONNECT %s:%d HTTP/1.0\r\n" % (self._tunnel_host, + self._tunnel_port)) for header, value in self._tunnel_headers.iteritems(): self.send("%s: %s\r\n" % (header, value)) self.send("\r\n") @@ -751,6 +795,11 @@ def _tunnel(self): method = self._method) (version, code, message) = response._read_status() + if version == "HTTP/0.9": + # HTTP/0.9 doesn't support the CONNECT verb, so if httplib has + # concluded HTTP/0.9 is being used something has gone wrong. + self.close() + raise socket.error("Invalid response from tunnel request") if code != 200: self.close() raise socket.error("Tunnel connection failed: %d %s" % (code, @@ -768,21 +817,25 @@ def _tunnel(self): def connect(self): """Connect to the host and port specified in __init__.""" - self.sock = socket.create_connection((self.host,self.port), - self.timeout, self.source_address) + self.sock = self._create_connection((self.host,self.port), + self.timeout, self.source_address) if self._tunnel_host: self._tunnel() def close(self): """Close the connection to the HTTP server.""" - if self.sock: - self.sock.close() # close it manually... there may be other refs - self.sock = None - if self.__response: - self.__response.close() - self.__response = None self.__state = _CS_IDLE + try: + sock = self.sock + if sock: + self.sock = None + sock.close() # close it manually... there may be other refs + finally: + response = self.__response + if response: + self.__response = None + response.close() def send(self, data): """Send `data' to the server.""" @@ -907,17 +960,24 @@ def putrequest(self, method, url, skip_host=0, skip_accept_encoding=0): netloc_enc = netloc.encode("idna") self.putheader('Host', netloc_enc) else: + if self._tunnel_host: + host = self._tunnel_host + port = self._tunnel_port + else: + host = self.host + port = self.port + try: - host_enc = self.host.encode("ascii") + host_enc = host.encode("ascii") except UnicodeEncodeError: - host_enc = self.host.encode("idna") + host_enc = host.encode("idna") # Wrap the IPv6 Host Header with [] (RFC 2732) if host_enc.find(':') >= 0: host_enc = "[" + host_enc + "]" - if self.port == self.default_port: + if port == self.default_port: self.putheader('Host', host_enc) else: - self.putheader('Host', "%s:%s" % (host_enc, self.port)) + self.putheader('Host', "%s:%s" % (host_enc, port)) # note: we are assuming that clients will not attempt to set these # headers since *this* library must deal with the @@ -950,7 +1010,16 @@ def putheader(self, header, *values): if self.__state != _CS_REQ_STARTED: raise CannotSendHeader() - hdr = '%s: %s' % (header, '\r\n\t'.join([str(v) for v in values])) + header = '%s' % header + if not _is_legal_header_name(header): + raise ValueError('Invalid header name %r' % (header,)) + + values = [str(v) for v in values] + for one_value in values: + if _is_illegal_header_value(one_value): + raise ValueError('Invalid header value %r' % (one_value,)) + + hdr = '%s: %s' % (header, '\r\n\t'.join(values)) self._output(hdr) def endheaders(self, message_body=None): @@ -972,19 +1041,25 @@ def request(self, method, url, body=None, headers={}): """Send a complete request to the server.""" self._send_request(method, url, body, headers) - def _set_content_length(self, body): - # Set the content-length based on the body. + def _set_content_length(self, body, method): + # Set the content-length based on the body. If the body is "empty", we + # set Content-Length: 0 for methods that expect a body (RFC 7230, + # Section 3.3.2). If the body is set for other methods, we set the + # header provided we can figure out what the length is. thelen = None - try: - thelen = str(len(body)) - except TypeError, te: - # If this is a file-like object, try to - # fstat its file descriptor + if body is None and method.upper() in _METHODS_EXPECTING_BODY: + thelen = '0' + elif body is not None: try: - thelen = str(os.fstat(body.fileno()).st_size) - except (AttributeError, OSError): - # Don't send a length if this failed - if self.debuglevel > 0: print "Cannot stat!!" + thelen = str(len(body)) + except (TypeError, AttributeError): + # If this is a file-like object, try to + # fstat its file descriptor + try: + thelen = str(os.fstat(body.fileno()).st_size) + except (AttributeError, OSError): + # Don't send a length if this failed + if self.debuglevel > 0: print "Cannot stat!!" if thelen is not None: self.putheader('Content-Length', thelen) @@ -1000,8 +1075,8 @@ def _send_request(self, method, url, body, headers): self.putrequest(method, url, **skips) - if body is not None and 'content-length' not in header_names: - self._set_content_length(body) + if 'content-length' not in header_names: + self._set_content_length(body, method) for hdr, value in headers.iteritems(): self.putheader(hdr, value) self.endheaders(body) @@ -1042,18 +1117,22 @@ def getresponse(self, buffering=False): kwds["buffering"] = True; response = self.response_class(*args, **kwds) - response.begin() - assert response.will_close != _UNKNOWN - self.__state = _CS_IDLE + try: + response.begin() + assert response.will_close != _UNKNOWN + self.__state = _CS_IDLE - if response.will_close: - # this effectively passes the connection to the response - self.close() - else: - # remember this, so we can tell when it is complete - self.__response = response + if response.will_close: + # this effectively passes the connection to the response + self.close() + else: + # remember this, so we can tell when it is complete + self.__response = response - return response + return response + except: + response.close() + raise class HTTP: @@ -1097,7 +1176,7 @@ def connect(self, host=None, port=None): "Accept arguments to set the host/port, since the superclass doesn't." if host is not None: - self._conn._set_hostport(host, port) + (self._conn.host, self._conn.port) = self._conn._get_hostport(host, port) self._conn.connect() def getfile(self): @@ -1159,21 +1238,29 @@ class HTTPSConnection(HTTPConnection): def __init__(self, host, port=None, key_file=None, cert_file=None, strict=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None): + source_address=None, context=None): HTTPConnection.__init__(self, host, port, strict, timeout, source_address) self.key_file = key_file self.cert_file = cert_file + if context is None: + context = ssl._create_default_https_context() + if key_file or cert_file: + context.load_cert_chain(cert_file, key_file) + self._context = context def connect(self): "Connect to a host on a given (SSL) port." - sock = socket.create_connection((self.host, self.port), - self.timeout, self.source_address) + HTTPConnection.connect(self) + if self._tunnel_host: - self.sock = sock - self._tunnel() - self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) + server_hostname = self._tunnel_host + else: + server_hostname = self.host + + self.sock = self._context.wrap_socket(self.sock, + server_hostname=server_hostname) __all__.append("HTTPSConnection") @@ -1188,14 +1275,15 @@ class HTTPS(HTTP): _connection_class = HTTPSConnection def __init__(self, host='', port=None, key_file=None, cert_file=None, - strict=None): + strict=None, context=None): # provide a default host, pass the X509 cert info # urf. compensate for bad input. if port == 0: port = None self._setup(self._connection_class(host, port, key_file, - cert_file, strict)) + cert_file, strict, + context=context)) # we never actually use these for anything, but we keep them # here for compatibility with post-1.5.2 CVS. diff --git a/PythonLib/min/imaplib.py b/PythonLib/min/imaplib.py index c576927a..220d6e1b 100644 --- a/PythonLib/min/imaplib.py +++ b/PythonLib/min/imaplib.py @@ -35,6 +35,16 @@ IMAP4_SSL_PORT = 993 AllowedVersions = ('IMAP4REV1', 'IMAP4') # Most recent first +# Maximal line length when calling readline(). This is to prevent +# reading arbitrary length lines. RFC 3501 and 2060 (IMAP 4rev1) +# don't specify a line length. RFC 2683 suggests limiting client +# command lines to 1000 octets and that servers should be prepared +# to accept command lines up to 8000 octets, so we used to use 10K here. +# In the modern world (eg: gmail) the response to, for example, a +# search command can be quite large, so we now use 1M. +_MAXLINE = 1000000 + + # Commands Commands = { @@ -237,7 +247,10 @@ def read(self, size): def readline(self): """Read line from remote.""" - return self.file.readline() + line = self.file.readline(_MAXLINE + 1) + if len(line) > _MAXLINE: + raise self.error("got more than %d bytes" % _MAXLINE) + return line def send(self, data): @@ -251,8 +264,10 @@ def shutdown(self): try: self.sock.shutdown(socket.SHUT_RDWR) except socket.error as e: - # The server might already have closed the connection - if e.errno != errno.ENOTCONN: + # The server might already have closed the connection. + # On Windows, this may result in WSAEINVAL (error 10022): + # An invalid operation was attempted. + if e.errno not in (errno.ENOTCONN, 10022): raise finally: self.sock.close() @@ -990,6 +1005,11 @@ def _get_tagged_response(self, tag): del self.tagged_commands[tag] return result + # If we've seen a BYE at this point, the socket will be + # closed, so report the BYE now. + + self._check_bye() + # Some have reported "unexpected response" exceptions. # Note that ignoring them here causes loops. # Instead, send me details of the unexpected response and @@ -1391,7 +1411,7 @@ def Time2Internaldate(date_time): be in the correct format. """ - if isinstance(date_time, (int, float)): + if isinstance(date_time, (int, long, float)): tt = time.localtime(date_time) elif isinstance(date_time, (tuple, time.struct_time)): tt = date_time diff --git a/PythonLib/min/imghdr.py b/PythonLib/min/imghdr.py index 1683024c..fc864c3a 100644 --- a/PythonLib/min/imghdr.py +++ b/PythonLib/min/imghdr.py @@ -7,18 +7,16 @@ #-------------------------# def what(file, h=None): - if h is None: - if isinstance(file, basestring): - f = open(file, 'rb') - h = f.read(32) - else: - location = file.tell() - h = file.read(32) - file.seek(location) - f = None - else: - f = None + f = None try: + if h is None: + if isinstance(file, basestring): + f = open(file, 'rb') + h = f.read(32) + else: + location = file.tell() + h = file.read(32) + file.seek(location) for tf in tests: res = tf(h, f) if res: diff --git a/PythonLib/min/inspect.py b/PythonLib/min/inspect.py index 93369439..0a6cfd79 100644 --- a/PythonLib/min/inspect.py +++ b/PythonLib/min/inspect.py @@ -155,9 +155,8 @@ def isfunction(object): def isgeneratorfunction(object): """Return true if the object is a user-defined generator function. - Generator function objects provides same attributes as functions. - - See help(isfunction) for attributes listing.""" + Generator function objects provide the same attributes as functions. + See help(isfunction) for a list of attributes.""" return bool((isfunction(object) or ismethod(object)) and object.func_code.co_flags & CO_GENERATOR) @@ -770,8 +769,11 @@ def getargs(co): if opname in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'): remain.append(value) count.append(value) - elif opname == 'STORE_FAST': - stack.append(names[value]) + elif opname in ('STORE_FAST', 'STORE_DEREF'): + if opname == 'STORE_FAST': + stack.append(names[value]) + else: + stack.append(co.co_cellvars[value]) # Special case for sublists of length 1: def foo((bar)) # doesn't generate the UNPACK_TUPLE bytecode, so if @@ -969,8 +971,13 @@ def is_assigned(arg): assign(varkw, named) elif named: unexpected = next(iter(named)) - if isinstance(unexpected, unicode): - unexpected = unexpected.encode(sys.getdefaultencoding(), 'replace') + try: + unicode + except NameError: + pass + else: + if isinstance(unexpected, unicode): + unexpected = unexpected.encode(sys.getdefaultencoding(), 'replace') raise TypeError("%s() got an unexpected keyword argument '%s'" % (f_name, unexpected)) unassigned = num_args - len([arg for arg in args if is_assigned(arg)]) diff --git a/PythonLib/min/io.py b/PythonLib/min/io.py index 22832766..53ee102b 100644 --- a/PythonLib/min/io.py +++ b/PythonLib/min/io.py @@ -19,7 +19,7 @@ Another IOBase subclass, TextIOBase, deals with the encoding and decoding of streams into text. TextIOWrapper, which extends it, is a buffered text interface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO -is a in-memory stream for text. +is an in-memory stream for text. Argument names are not part of the specification, and only the arguments of open() are intended to be used as keyword arguments. @@ -68,15 +68,16 @@ # version however. class IOBase(_io._IOBase): __metaclass__ = abc.ABCMeta + __doc__ = _io._IOBase.__doc__ class RawIOBase(_io._RawIOBase, IOBase): - pass + __doc__ = _io._RawIOBase.__doc__ class BufferedIOBase(_io._BufferedIOBase, IOBase): - pass + __doc__ = _io._BufferedIOBase.__doc__ class TextIOBase(_io._TextIOBase, IOBase): - pass + __doc__ = _io._TextIOBase.__doc__ RawIOBase.register(FileIO) diff --git a/PythonLib/min/linecache.py b/PythonLib/min/linecache.py index 811f27fe..4b97be3f 100644 --- a/PythonLib/min/linecache.py +++ b/PythonLib/min/linecache.py @@ -36,8 +36,12 @@ def getlines(filename, module_globals=None): if filename in cache: return cache[filename][2] - else: + + try: return updatecache(filename, module_globals) + except MemoryError: + clearcache() + return [] def checkcache(filename=None): diff --git a/PythonLib/min/locale.py b/PythonLib/min/locale.py index 7ddfdb78..62aad5ae 100644 --- a/PythonLib/min/locale.py +++ b/PythonLib/min/locale.py @@ -1,14 +1,12 @@ -""" Locale support. +"""Locale support module. - The module provides low-level access to the C lib's locale APIs - and adds high level number formatting APIs as well as a locale - aliasing engine to complement these. - - The aliasing engine includes support for many commonly used locale - names and maps them to values suitable for passing to the C lib's - setlocale() function. It also includes default encodings for all - supported locale names. +The module provides low-level access to the C lib's locale APIs and adds high +level number formatting APIs as well as a locale aliasing engine to complement +these. +The aliasing engine includes support for many commonly used locale names and +maps them to values suitable for passing to the C lib's setlocale() function. It +also includes default encodings for all supported locale names. """ import sys @@ -18,6 +16,10 @@ import operator import functools +# keep a copy of the builtin str type, because 'str' name is overridden +# in globals by a function below +_str = str + try: _unicode = unicode except NameError: @@ -299,7 +301,7 @@ def currency(val, symbol=True, grouping=False, international=False): return s.replace('<', '').replace('>', '') def str(val): - """Convert float to integer, taking the locale into account.""" + """Convert float to string, taking the locale into account.""" return format("%.12g", val) def atof(string, func=float): @@ -344,6 +346,22 @@ def _test(): for x in range(256) ) +def _replace_encoding(code, encoding): + if '.' in code: + langname = code[:code.index('.')] + else: + langname = code + # Convert the encoding to a C lib compatible encoding string + norm_encoding = encodings.normalize_encoding(encoding) + #print('norm encoding: %r' % norm_encoding) + norm_encoding = encodings.aliases.aliases.get(norm_encoding, + norm_encoding) + #print('aliased encoding: %r' % norm_encoding) + encoding = locale_encoding_alias.get(norm_encoding, + norm_encoding) + #print('found encoding %r' % encoding) + return langname + '.' + encoding + def normalize(localename): """ Returns a normalized locale code for the given locale @@ -360,57 +378,73 @@ def normalize(localename): does. """ - # Normalize the locale name and extract the encoding + # Normalize the locale name and extract the encoding and modifier if isinstance(localename, _unicode): localename = localename.encode('ascii') - fullname = localename.translate(_ascii_lower_map) - if ':' in fullname: + code = localename.translate(_ascii_lower_map) + if ':' in code: # ':' is sometimes used as encoding delimiter. - fullname = fullname.replace(':', '.') - if '.' in fullname: - langname, encoding = fullname.split('.')[:2] - fullname = langname + '.' + encoding + code = code.replace(':', '.') + if '@' in code: + code, modifier = code.split('@', 1) else: - langname = fullname + modifier = '' + if '.' in code: + langname, encoding = code.split('.')[:2] + else: + langname = code encoding = '' - # First lookup: fullname (possibly with encoding) - norm_encoding = encoding.replace('-', '') - norm_encoding = norm_encoding.replace('_', '') - lookup_name = langname + '.' + encoding + # First lookup: fullname (possibly with encoding and modifier) + lang_enc = langname + if encoding: + norm_encoding = encoding.replace('-', '') + norm_encoding = norm_encoding.replace('_', '') + lang_enc += '.' + norm_encoding + lookup_name = lang_enc + if modifier: + lookup_name += '@' + modifier code = locale_alias.get(lookup_name, None) if code is not None: return code - #print 'first lookup failed' - - # Second try: langname (without encoding) - code = locale_alias.get(langname, None) - if code is not None: - #print 'langname lookup succeeded' - if '.' in code: - langname, defenc = code.split('.') - else: - langname = code - defenc = '' - if encoding: - # Convert the encoding to a C lib compatible encoding string - norm_encoding = encodings.normalize_encoding(encoding) - #print 'norm encoding: %r' % norm_encoding - norm_encoding = encodings.aliases.aliases.get(norm_encoding, - norm_encoding) - #print 'aliased encoding: %r' % norm_encoding - encoding = locale_encoding_alias.get(norm_encoding, - norm_encoding) - else: - encoding = defenc - #print 'found encoding %r' % encoding - if encoding: - return langname + '.' + encoding - else: - return langname - - else: - return localename + #print('first lookup failed') + + if modifier: + # Second try: fullname without modifier (possibly with encoding) + code = locale_alias.get(lang_enc, None) + if code is not None: + #print('lookup without modifier succeeded') + if '@' not in code: + return code + '@' + modifier + if code.split('@', 1)[1].translate(_ascii_lower_map) == modifier: + return code + #print('second lookup failed') + + if encoding: + # Third try: langname (without encoding, possibly with modifier) + lookup_name = langname + if modifier: + lookup_name += '@' + modifier + code = locale_alias.get(lookup_name, None) + if code is not None: + #print('lookup without encoding succeeded') + if '@' not in code: + return _replace_encoding(code, encoding) + code, modifier = code.split('@', 1) + return _replace_encoding(code, encoding) + '@' + modifier + + if modifier: + # Fourth try: langname (without encoding and modifier) + code = locale_alias.get(langname, None) + if code is not None: + #print('lookup without modifier and encoding succeeded') + if '@' not in code: + return _replace_encoding(code, encoding) + '@' + modifier + code, defmod = code.split('@', 1) + if defmod.translate(_ascii_lower_map) == modifier: + return _replace_encoding(code, encoding) + '@' + defmod + + return localename def _parse_localename(localename): @@ -429,7 +463,7 @@ def _parse_localename(localename): code = normalize(localename) if '@' in code: # Deal with locale modifiers - code, modifier = code.split('@') + code, modifier = code.split('@', 1) if modifier == 'euro' and '.' not in code: # Assume Latin-9 for @euro locales. This is bogus, # since some systems may use other encodings for these @@ -541,7 +575,7 @@ def setlocale(category, locale=None): category may be given as one of the LC_* values. """ - if locale and type(locale) is not type(""): + if locale and not isinstance(locale, (_str, _unicode)): # convert to string locale = normalize(_build_localename(locale)) return _setlocale(category, locale) @@ -584,9 +618,18 @@ def getpreferredencoding(do_setlocale = True): pass result = nl_langinfo(CODESET) setlocale(LC_CTYPE, oldloc) - return result else: - return nl_langinfo(CODESET) + result = nl_langinfo(CODESET) + + if not result and sys.platform == 'darwin': + # nl_langinfo can return an empty string + # when the setting has an invalid value. + # Default to UTF-8 in that case because + # UTF-8 is the default charset on OSX and + # returning nothing will crash the + # interpreter. + result = 'UTF-8' + return result ### Database @@ -734,11 +777,36 @@ def getpreferredencoding(do_setlocale = True): # updated 'sr_yu.utf8@cyrillic' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8' # updated 'sr_yu@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' # +# SS 2013-12-20: +# Updated alias mapping to most recent locale.alias file +# from X.org distribution using makelocalealias.py. +# +# These are the differences compared to the old mapping (Python 2.7.6 +# and older): +# +# updated 'a3' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' +# updated 'a3_az' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' +# updated 'a3_az.koi8c' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' +# updated 'cs_cs.iso88592' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2' +# updated 'hebrew' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'hebrew.iso88598' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'sd' -> 'sd_IN@devanagari.UTF-8' to 'sd_IN.UTF-8' +# updated 'sr@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' +# updated 'sr_cs' -> 'sr_RS.UTF-8' to 'sr_CS.UTF-8' +# updated 'sr_cs.utf8@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' +# updated 'sr_cs@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' +# +# SS 2014-10-01: +# Updated alias mapping with glibc 2.19 supported locales. locale_alias = { - 'a3': 'a3_AZ.KOI8-C', - 'a3_az': 'a3_AZ.KOI8-C', - 'a3_az.koi8c': 'a3_AZ.KOI8-C', + 'a3': 'az_AZ.KOI8-C', + 'a3_az': 'az_AZ.KOI8-C', + 'a3_az.koi8c': 'az_AZ.KOI8-C', + 'a3_az.koic': 'az_AZ.KOI8-C', + 'aa_dj': 'aa_DJ.ISO8859-1', + 'aa_er': 'aa_ER.UTF-8', + 'aa_et': 'aa_ET.UTF-8', 'af': 'af_ZA.ISO8859-1', 'af_za': 'af_ZA.ISO8859-1', 'af_za.iso88591': 'af_ZA.ISO8859-1', @@ -746,6 +814,7 @@ def getpreferredencoding(do_setlocale = True): 'am_et': 'am_ET.UTF-8', 'american': 'en_US.ISO8859-1', 'american.iso88591': 'en_US.ISO8859-1', + 'an_es': 'an_ES.ISO8859-15', 'ar': 'ar_AA.ISO8859-6', 'ar_aa': 'ar_AA.ISO8859-6', 'ar_aa.iso88596': 'ar_AA.ISO8859-6', @@ -757,6 +826,7 @@ def getpreferredencoding(do_setlocale = True): 'ar_dz.iso88596': 'ar_DZ.ISO8859-6', 'ar_eg': 'ar_EG.ISO8859-6', 'ar_eg.iso88596': 'ar_EG.ISO8859-6', + 'ar_in': 'ar_IN.UTF-8', 'ar_iq': 'ar_IQ.ISO8859-6', 'ar_iq.iso88596': 'ar_IQ.ISO8859-6', 'ar_jo': 'ar_JO.ISO8859-6', @@ -786,23 +856,34 @@ def getpreferredencoding(do_setlocale = True): 'arabic': 'ar_AA.ISO8859-6', 'arabic.iso88596': 'ar_AA.ISO8859-6', 'as': 'as_IN.UTF-8', + 'as_in': 'as_IN.UTF-8', + 'ast_es': 'ast_ES.ISO8859-15', + 'ayc_pe': 'ayc_PE.UTF-8', 'az': 'az_AZ.ISO8859-9E', 'az_az': 'az_AZ.ISO8859-9E', 'az_az.iso88599e': 'az_AZ.ISO8859-9E', 'be': 'be_BY.CP1251', 'be@latin': 'be_BY.UTF-8@latin', + 'be_bg.utf8': 'bg_BG.UTF-8', 'be_by': 'be_BY.CP1251', 'be_by.cp1251': 'be_BY.CP1251', 'be_by.microsoftcp1251': 'be_BY.CP1251', 'be_by.utf8@latin': 'be_BY.UTF-8@latin', 'be_by@latin': 'be_BY.UTF-8@latin', + 'bem_zm': 'bem_ZM.UTF-8', + 'ber_dz': 'ber_DZ.UTF-8', + 'ber_ma': 'ber_MA.UTF-8', 'bg': 'bg_BG.CP1251', 'bg_bg': 'bg_BG.CP1251', 'bg_bg.cp1251': 'bg_BG.CP1251', 'bg_bg.iso88595': 'bg_BG.ISO8859-5', 'bg_bg.koi8r': 'bg_BG.KOI8-R', 'bg_bg.microsoftcp1251': 'bg_BG.CP1251', + 'bho_in': 'bho_IN.UTF-8', + 'bn_bd': 'bn_BD.UTF-8', 'bn_in': 'bn_IN.UTF-8', + 'bo_cn': 'bo_CN.UTF-8', + 'bo_in': 'bo_IN.UTF-8', 'bokmal': 'nb_NO.ISO8859-1', 'bokm\xe5l': 'nb_NO.ISO8859-1', 'br': 'br_FR.ISO8859-1', @@ -813,15 +894,19 @@ def getpreferredencoding(do_setlocale = True): 'br_fr.iso885915@euro': 'br_FR.ISO8859-15', 'br_fr.utf8@euro': 'br_FR.UTF-8', 'br_fr@euro': 'br_FR.ISO8859-15', + 'brx_in': 'brx_IN.UTF-8', 'bs': 'bs_BA.ISO8859-2', 'bs_ba': 'bs_BA.ISO8859-2', 'bs_ba.iso88592': 'bs_BA.ISO8859-2', 'bulgarian': 'bg_BG.CP1251', + 'byn_er': 'byn_ER.UTF-8', 'c': 'C', 'c-french': 'fr_CA.ISO8859-1', 'c-french.iso88591': 'fr_CA.ISO8859-1', + 'c.ascii': 'C', 'c.en': 'C', 'c.iso88591': 'en_US.ISO8859-1', + 'c.utf8': 'en_US.UTF-8', 'c_c': 'C', 'c_c.c': 'C', 'ca': 'ca_ES.ISO8859-1', @@ -836,6 +921,7 @@ def getpreferredencoding(do_setlocale = True): 'ca_es.iso885915': 'ca_ES.ISO8859-15', 'ca_es.iso885915@euro': 'ca_ES.ISO8859-15', 'ca_es.utf8@euro': 'ca_ES.UTF-8', + 'ca_es@valencia': 'ca_ES.ISO8859-15@valencia', 'ca_es@euro': 'ca_ES.ISO8859-15', 'ca_fr': 'ca_FR.ISO8859-1', 'ca_fr.iso88591': 'ca_FR.ISO8859-1', @@ -854,12 +940,15 @@ def getpreferredencoding(do_setlocale = True): 'cextend.en': 'en_US.ISO8859-1', 'chinese-s': 'zh_CN.eucCN', 'chinese-t': 'zh_TW.eucTW', + 'crh_ua': 'crh_UA.UTF-8', 'croatian': 'hr_HR.ISO8859-2', 'cs': 'cs_CZ.ISO8859-2', 'cs_cs': 'cs_CZ.ISO8859-2', - 'cs_cs.iso88592': 'cs_CS.ISO8859-2', + 'cs_cs.iso88592': 'cs_CZ.ISO8859-2', 'cs_cz': 'cs_CZ.ISO8859-2', 'cs_cz.iso88592': 'cs_CZ.ISO8859-2', + 'csb_pl': 'csb_PL.UTF-8', + 'cv_ru': 'cv_RU.UTF-8', 'cy': 'cy_GB.ISO8859-1', 'cy_gb': 'cy_GB.ISO8859-1', 'cy_gb.iso88591': 'cy_GB.ISO8859-1', @@ -907,6 +996,7 @@ def getpreferredencoding(do_setlocale = True): 'de_de.iso885915@euro': 'de_DE.ISO8859-15', 'de_de.utf8@euro': 'de_DE.UTF-8', 'de_de@euro': 'de_DE.ISO8859-15', + 'de_li.utf8': 'de_LI.UTF-8', 'de_lu': 'de_LU.ISO8859-1', 'de_lu.iso88591': 'de_LU.ISO8859-1', 'de_lu.iso885915': 'de_LU.ISO8859-15', @@ -914,18 +1004,23 @@ def getpreferredencoding(do_setlocale = True): 'de_lu.utf8@euro': 'de_LU.UTF-8', 'de_lu@euro': 'de_LU.ISO8859-15', 'deutsch': 'de_DE.ISO8859-1', + 'doi_in': 'doi_IN.UTF-8', 'dutch': 'nl_NL.ISO8859-1', 'dutch.iso88591': 'nl_BE.ISO8859-1', + 'dv_mv': 'dv_MV.UTF-8', + 'dz_bt': 'dz_BT.UTF-8', 'ee': 'ee_EE.ISO8859-4', 'ee_ee': 'ee_EE.ISO8859-4', 'ee_ee.iso88594': 'ee_EE.ISO8859-4', 'eesti': 'et_EE.ISO8859-1', 'el': 'el_GR.ISO8859-7', + 'el_cy': 'el_CY.ISO8859-7', 'el_gr': 'el_GR.ISO8859-7', 'el_gr.iso88597': 'el_GR.ISO8859-7', 'el_gr@euro': 'el_GR.ISO8859-15', 'en': 'en_US.ISO8859-1', 'en.iso88591': 'en_US.ISO8859-1', + 'en_ag': 'en_AG.UTF-8', 'en_au': 'en_AU.ISO8859-1', 'en_au.iso88591': 'en_AU.ISO8859-1', 'en_be': 'en_BE.ISO8859-1', @@ -934,6 +1029,8 @@ def getpreferredencoding(do_setlocale = True): 'en_bw.iso88591': 'en_BW.ISO8859-1', 'en_ca': 'en_CA.ISO8859-1', 'en_ca.iso88591': 'en_CA.ISO8859-1', + 'en_dk': 'en_DK.ISO8859-1', + 'en_dl.utf8': 'en_DL.UTF-8', 'en_gb': 'en_GB.ISO8859-1', 'en_gb.88591': 'en_GB.ISO8859-1', 'en_gb.iso88591': 'en_GB.ISO8859-1', @@ -948,6 +1045,7 @@ def getpreferredencoding(do_setlocale = True): 'en_ie.utf8@euro': 'en_IE.UTF-8', 'en_ie@euro': 'en_IE.ISO8859-15', 'en_in': 'en_IN.ISO8859-1', + 'en_ng': 'en_NG.UTF-8', 'en_nz': 'en_NZ.ISO8859-1', 'en_nz.iso88591': 'en_NZ.ISO8859-1', 'en_ph': 'en_PH.ISO8859-1', @@ -968,8 +1066,10 @@ def getpreferredencoding(do_setlocale = True): 'en_za.iso88591': 'en_ZA.ISO8859-1', 'en_za.iso885915': 'en_ZA.ISO8859-15', 'en_za@euro': 'en_ZA.ISO8859-15', + 'en_zm': 'en_ZM.UTF-8', 'en_zw': 'en_ZW.ISO8859-1', 'en_zw.iso88591': 'en_ZW.ISO8859-1', + 'en_zw.utf8': 'en_ZS.UTF-8', 'eng_gb': 'en_GB.ISO8859-1', 'eng_gb.8859': 'en_GB.ISO8859-1', 'english': 'en_EN.ISO8859-1', @@ -982,8 +1082,10 @@ def getpreferredencoding(do_setlocale = True): 'english_us.8859': 'en_US.ISO8859-1', 'english_us.ascii': 'en_US.ISO8859-1', 'eo': 'eo_XX.ISO8859-3', + 'eo.utf8': 'eo.UTF-8', 'eo_eo': 'eo_EO.ISO8859-3', 'eo_eo.iso88593': 'eo_EO.ISO8859-3', + 'eo_us.utf8': 'eo_US.UTF-8', 'eo_xx': 'eo_XX.ISO8859-3', 'eo_xx.iso88593': 'eo_XX.ISO8859-3', 'es': 'es_ES.ISO8859-1', @@ -997,6 +1099,7 @@ def getpreferredencoding(do_setlocale = True): 'es_co.iso88591': 'es_CO.ISO8859-1', 'es_cr': 'es_CR.ISO8859-1', 'es_cr.iso88591': 'es_CR.ISO8859-1', + 'es_cu': 'es_CU.UTF-8', 'es_do': 'es_DO.ISO8859-1', 'es_do.iso88591': 'es_DO.ISO8859-1', 'es_ec': 'es_EC.ISO8859-1', @@ -1059,9 +1162,11 @@ def getpreferredencoding(do_setlocale = True): 'eu_es.iso885915@euro': 'eu_ES.ISO8859-15', 'eu_es.utf8@euro': 'eu_ES.UTF-8', 'eu_es@euro': 'eu_ES.ISO8859-15', + 'eu_fr': 'eu_FR.ISO8859-1', 'fa': 'fa_IR.UTF-8', 'fa_ir': 'fa_IR.UTF-8', 'fa_ir.isiri3342': 'fa_IR.ISIRI-3342', + 'ff_sn': 'ff_SN.UTF-8', 'fi': 'fi_FI.ISO8859-15', 'fi.iso885915': 'fi_FI.ISO8859-15', 'fi_fi': 'fi_FI.ISO8859-15', @@ -1071,6 +1176,7 @@ def getpreferredencoding(do_setlocale = True): 'fi_fi.iso885915@euro': 'fi_FI.ISO8859-15', 'fi_fi.utf8@euro': 'fi_FI.UTF-8', 'fi_fi@euro': 'fi_FI.ISO8859-15', + 'fil_ph': 'fil_PH.UTF-8', 'finnish': 'fi_FI.ISO8859-1', 'finnish.iso88591': 'fi_FI.ISO8859-1', 'fo': 'fo_FO.ISO8859-1', @@ -1118,6 +1224,9 @@ def getpreferredencoding(do_setlocale = True): 'french.iso88591': 'fr_CH.ISO8859-1', 'french_france': 'fr_FR.ISO8859-1', 'french_france.8859': 'fr_FR.ISO8859-1', + 'fur_it': 'fur_IT.UTF-8', + 'fy_de': 'fy_DE.UTF-8', + 'fy_nl': 'fy_NL.UTF-8', 'ga': 'ga_IE.ISO8859-1', 'ga_ie': 'ga_IE.ISO8859-1', 'ga_ie.iso88591': 'ga_IE.ISO8859-1', @@ -1140,6 +1249,8 @@ def getpreferredencoding(do_setlocale = True): 'german.iso88591': 'de_CH.ISO8859-1', 'german_germany': 'de_DE.ISO8859-1', 'german_germany.8859': 'de_DE.ISO8859-1', + 'gez_er': 'gez_ER.UTF-8', + 'gez_et': 'gez_ET.UTF-8', 'gl': 'gl_ES.ISO8859-1', 'gl_es': 'gl_ES.ISO8859-1', 'gl_es.iso88591': 'gl_ES.ISO8859-1', @@ -1156,29 +1267,39 @@ def getpreferredencoding(do_setlocale = True): 'gv_gb.iso885914': 'gv_GB.ISO8859-14', 'gv_gb.iso885915': 'gv_GB.ISO8859-15', 'gv_gb@euro': 'gv_GB.ISO8859-15', + 'ha_ng': 'ha_NG.UTF-8', 'he': 'he_IL.ISO8859-8', 'he_il': 'he_IL.ISO8859-8', 'he_il.cp1255': 'he_IL.CP1255', 'he_il.iso88598': 'he_IL.ISO8859-8', 'he_il.microsoftcp1255': 'he_IL.CP1255', - 'hebrew': 'iw_IL.ISO8859-8', - 'hebrew.iso88598': 'iw_IL.ISO8859-8', + 'hebrew': 'he_IL.ISO8859-8', + 'hebrew.iso88598': 'he_IL.ISO8859-8', 'hi': 'hi_IN.ISCII-DEV', 'hi_in': 'hi_IN.ISCII-DEV', 'hi_in.isciidev': 'hi_IN.ISCII-DEV', 'hne': 'hne_IN.UTF-8', + 'hne_in': 'hne_IN.UTF-8', 'hr': 'hr_HR.ISO8859-2', 'hr_hr': 'hr_HR.ISO8859-2', 'hr_hr.iso88592': 'hr_HR.ISO8859-2', 'hrvatski': 'hr_HR.ISO8859-2', + 'hsb_de': 'hsb_DE.ISO8859-2', + 'ht_ht': 'ht_HT.UTF-8', 'hu': 'hu_HU.ISO8859-2', 'hu_hu': 'hu_HU.ISO8859-2', 'hu_hu.iso88592': 'hu_HU.ISO8859-2', 'hungarian': 'hu_HU.ISO8859-2', + 'hy_am': 'hy_AM.UTF-8', + 'hy_am.armscii8': 'hy_AM.ARMSCII_8', + 'ia': 'ia.UTF-8', + 'ia_fr': 'ia_FR.UTF-8', 'icelandic': 'is_IS.ISO8859-1', 'icelandic.iso88591': 'is_IS.ISO8859-1', 'id': 'id_ID.ISO8859-1', 'id_id': 'id_ID.ISO8859-1', + 'ig_ng': 'ig_NG.UTF-8', + 'ik_ca': 'ik_CA.UTF-8', 'in': 'id_ID.ISO8859-1', 'in_id': 'id_ID.ISO8859-1', 'is': 'is_IS.ISO8859-1', @@ -1213,6 +1334,7 @@ def getpreferredencoding(do_setlocale = True): 'iw': 'he_IL.ISO8859-8', 'iw_il': 'he_IL.ISO8859-8', 'iw_il.iso88598': 'he_IL.ISO8859-8', + 'iw_il.utf8': 'iw_IL.UTF-8', 'ja': 'ja_JP.eucJP', 'ja.jis': 'ja_JP.JIS7', 'ja.sjis': 'ja_JP.SJIS', @@ -1239,6 +1361,7 @@ def getpreferredencoding(do_setlocale = True): 'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY', 'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS', 'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY', + 'kk_kz': 'kk_KZ.RK1048', 'kl': 'kl_GL.ISO8859-1', 'kl_gl': 'kl_GL.ISO8859-1', 'kl_gl.iso88591': 'kl_GL.ISO8859-1', @@ -1251,10 +1374,14 @@ def getpreferredencoding(do_setlocale = True): 'ko_kr': 'ko_KR.eucKR', 'ko_kr.euc': 'ko_KR.eucKR', 'ko_kr.euckr': 'ko_KR.eucKR', + 'kok_in': 'kok_IN.UTF-8', 'korean': 'ko_KR.eucKR', 'korean.euc': 'ko_KR.eucKR', 'ks': 'ks_IN.UTF-8', - 'ks_in@devanagari': 'ks_IN@devanagari.UTF-8', + 'ks_in': 'ks_IN.UTF-8', + 'ks_in@devanagari': 'ks_IN.UTF-8@devanagari', + 'ks_in@devanagari.utf8': 'ks_IN.UTF-8@devanagari', + 'ku_tr': 'ku_TR.ISO8859-9', 'kw': 'kw_GB.ISO8859-1', 'kw_gb': 'kw_GB.ISO8859-1', 'kw_gb.iso88591': 'kw_GB.ISO8859-1', @@ -1263,6 +1390,11 @@ def getpreferredencoding(do_setlocale = True): 'kw_gb@euro': 'kw_GB.ISO8859-15', 'ky': 'ky_KG.UTF-8', 'ky_kg': 'ky_KG.UTF-8', + 'lb_lu': 'lb_LU.UTF-8', + 'lg_ug': 'lg_UG.ISO8859-10', + 'li_be': 'li_BE.UTF-8', + 'li_nl': 'li_NL.UTF-8', + 'lij_it': 'lij_IT.UTF-8', 'lithuanian': 'lt_LT.ISO8859-13', 'lo': 'lo_LA.MULELAO-1', 'lo_la': 'lo_LA.MULELAO-1', @@ -1277,7 +1409,11 @@ def getpreferredencoding(do_setlocale = True): 'lv_lv': 'lv_LV.ISO8859-13', 'lv_lv.iso885913': 'lv_LV.ISO8859-13', 'lv_lv.iso88594': 'lv_LV.ISO8859-4', + 'mag_in': 'mag_IN.UTF-8', 'mai': 'mai_IN.UTF-8', + 'mai_in': 'mai_IN.UTF-8', + 'mg_mg': 'mg_MG.ISO8859-15', + 'mhr_ru': 'mhr_RU.UTF-8', 'mi': 'mi_NZ.ISO8859-1', 'mi_nz': 'mi_NZ.ISO8859-1', 'mi_nz.iso88591': 'mi_NZ.ISO8859-1', @@ -1287,6 +1423,9 @@ def getpreferredencoding(do_setlocale = True): 'mk_mk.iso88595': 'mk_MK.ISO8859-5', 'mk_mk.microsoftcp1251': 'mk_MK.CP1251', 'ml': 'ml_IN.UTF-8', + 'ml_in': 'ml_IN.UTF-8', + 'mn_mn': 'mn_MN.UTF-8', + 'mni_in': 'mni_IN.UTF-8', 'mr': 'mr_IN.UTF-8', 'mr_in': 'mr_IN.UTF-8', 'ms': 'ms_MY.ISO8859-1', @@ -1295,14 +1434,23 @@ def getpreferredencoding(do_setlocale = True): 'mt': 'mt_MT.ISO8859-3', 'mt_mt': 'mt_MT.ISO8859-3', 'mt_mt.iso88593': 'mt_MT.ISO8859-3', + 'my_mm': 'my_MM.UTF-8', + 'nan_tw@latin': 'nan_TW.UTF-8@latin', 'nb': 'nb_NO.ISO8859-1', 'nb_no': 'nb_NO.ISO8859-1', 'nb_no.88591': 'nb_NO.ISO8859-1', 'nb_no.iso88591': 'nb_NO.ISO8859-1', 'nb_no.iso885915': 'nb_NO.ISO8859-15', 'nb_no@euro': 'nb_NO.ISO8859-15', + 'nds_de': 'nds_DE.UTF-8', + 'nds_nl': 'nds_NL.UTF-8', + 'ne_np': 'ne_NP.UTF-8', + 'nhn_mx': 'nhn_MX.UTF-8', + 'niu_nu': 'niu_NU.UTF-8', + 'niu_nz': 'niu_NZ.UTF-8', 'nl': 'nl_NL.ISO8859-1', 'nl.iso885915': 'nl_NL.ISO8859-15', + 'nl_aw': 'nl_AW.UTF-8', 'nl_be': 'nl_BE.ISO8859-1', 'nl_be.88591': 'nl_BE.ISO8859-1', 'nl_be.iso88591': 'nl_BE.ISO8859-1', @@ -1352,9 +1500,15 @@ def getpreferredencoding(do_setlocale = True): 'oc_fr.iso88591': 'oc_FR.ISO8859-1', 'oc_fr.iso885915': 'oc_FR.ISO8859-15', 'oc_fr@euro': 'oc_FR.ISO8859-15', + 'om_et': 'om_ET.UTF-8', + 'om_ke': 'om_KE.ISO8859-1', 'or': 'or_IN.UTF-8', + 'or_in': 'or_IN.UTF-8', + 'os_ru': 'os_RU.UTF-8', 'pa': 'pa_IN.UTF-8', 'pa_in': 'pa_IN.UTF-8', + 'pa_pk': 'pa_PK.UTF-8', + 'pap_an': 'pap_AN.UTF-8', 'pd': 'pd_US.ISO8859-1', 'pd_de': 'pd_DE.ISO8859-1', 'pd_de.iso88591': 'pd_DE.ISO8859-1', @@ -1380,6 +1534,7 @@ def getpreferredencoding(do_setlocale = True): 'pp': 'pp_AN.ISO8859-1', 'pp_an': 'pp_AN.ISO8859-1', 'pp_an.iso88591': 'pp_AN.ISO8859-1', + 'ps_af': 'ps_AF.UTF-8', 'pt': 'pt_PT.ISO8859-1', 'pt.iso885915': 'pt_PT.ISO8859-15', 'pt_br': 'pt_BR.ISO8859-1', @@ -1414,7 +1569,15 @@ def getpreferredencoding(do_setlocale = True): 'rw': 'rw_RW.ISO8859-1', 'rw_rw': 'rw_RW.ISO8859-1', 'rw_rw.iso88591': 'rw_RW.ISO8859-1', - 'sd': 'sd_IN@devanagari.UTF-8', + 'sa_in': 'sa_IN.UTF-8', + 'sat_in': 'sat_IN.UTF-8', + 'sc_it': 'sc_IT.UTF-8', + 'sd': 'sd_IN.UTF-8', + 'sd@devanagari': 'sd_IN.UTF-8@devanagari', + 'sd_in': 'sd_IN.UTF-8', + 'sd_in@devanagari': 'sd_IN.UTF-8@devanagari', + 'sd_in@devanagari.utf8': 'sd_IN.UTF-8@devanagari', + 'sd_pk': 'sd_PK.UTF-8', 'se_no': 'se_NO.UTF-8', 'serbocroatian': 'sr_RS.UTF-8@latin', 'sh': 'sr_RS.UTF-8@latin', @@ -1423,8 +1586,10 @@ def getpreferredencoding(do_setlocale = True): 'sh_hr.iso88592': 'hr_HR.ISO8859-2', 'sh_sp': 'sr_CS.ISO8859-2', 'sh_yu': 'sr_RS.UTF-8@latin', + 'shs_ca': 'shs_CA.UTF-8', 'si': 'si_LK.UTF-8', 'si_lk': 'si_LK.UTF-8', + 'sid_et': 'sid_ET.UTF-8', 'sinhala': 'si_LK.UTF-8', 'sk': 'sk_SK.ISO8859-2', 'sk_sk': 'sk_SK.ISO8859-2', @@ -1436,6 +1601,10 @@ def getpreferredencoding(do_setlocale = True): 'slovak': 'sk_SK.ISO8859-2', 'slovene': 'sl_SI.ISO8859-2', 'slovenian': 'sl_SI.ISO8859-2', + 'so_dj': 'so_DJ.ISO8859-1', + 'so_et': 'so_ET.UTF-8', + 'so_ke': 'so_KE.ISO8859-1', + 'so_so': 'so_SO.ISO8859-1', 'sp': 'sr_CS.ISO8859-5', 'sp_yu': 'sr_CS.ISO8859-5', 'spanish': 'es_ES.ISO8859-1', @@ -1445,19 +1614,19 @@ def getpreferredencoding(do_setlocale = True): 'sq': 'sq_AL.ISO8859-2', 'sq_al': 'sq_AL.ISO8859-2', 'sq_al.iso88592': 'sq_AL.ISO8859-2', + 'sq_mk': 'sq_MK.UTF-8', 'sr': 'sr_RS.UTF-8', 'sr@cyrillic': 'sr_RS.UTF-8', 'sr@latin': 'sr_RS.UTF-8@latin', - 'sr@latn': 'sr_RS.UTF-8@latin', - 'sr_cs': 'sr_RS.UTF-8', + 'sr@latn': 'sr_CS.UTF-8@latin', + 'sr_cs': 'sr_CS.UTF-8', 'sr_cs.iso88592': 'sr_CS.ISO8859-2', 'sr_cs.iso88592@latn': 'sr_CS.ISO8859-2', 'sr_cs.iso88595': 'sr_CS.ISO8859-5', - 'sr_cs.utf8@latn': 'sr_RS.UTF-8@latin', - 'sr_cs@latn': 'sr_RS.UTF-8@latin', + 'sr_cs.utf8@latn': 'sr_CS.UTF-8@latin', + 'sr_cs@latn': 'sr_CS.UTF-8@latin', 'sr_me': 'sr_ME.UTF-8', 'sr_rs': 'sr_RS.UTF-8', - 'sr_rs.utf8@latn': 'sr_RS.UTF-8@latin', 'sr_rs@latin': 'sr_RS.UTF-8@latin', 'sr_rs@latn': 'sr_RS.UTF-8@latin', 'sr_sp': 'sr_CS.ISO8859-2', @@ -1467,6 +1636,7 @@ def getpreferredencoding(do_setlocale = True): 'sr_yu.iso88595': 'sr_CS.ISO8859-5', 'sr_yu.iso88595@cyrillic': 'sr_CS.ISO8859-5', 'sr_yu.microsoftcp1251@cyrillic': 'sr_CS.CP1251', + 'sr_yu.utf8': 'sr_RS.UTF-8', 'sr_yu.utf8@cyrillic': 'sr_RS.UTF-8', 'sr_yu@cyrillic': 'sr_RS.UTF-8', 'ss': 'ss_ZA.ISO8859-1', @@ -1488,13 +1658,18 @@ def getpreferredencoding(do_setlocale = True): 'sv_se.iso88591': 'sv_SE.ISO8859-1', 'sv_se.iso885915': 'sv_SE.ISO8859-15', 'sv_se@euro': 'sv_SE.ISO8859-15', + 'sw_ke': 'sw_KE.UTF-8', + 'sw_tz': 'sw_TZ.UTF-8', 'swedish': 'sv_SE.ISO8859-1', 'swedish.iso88591': 'sv_SE.ISO8859-1', + 'szl_pl': 'szl_PL.UTF-8', 'ta': 'ta_IN.TSCII-0', 'ta_in': 'ta_IN.TSCII-0', 'ta_in.tscii': 'ta_IN.TSCII-0', 'ta_in.tscii0': 'ta_IN.TSCII-0', + 'ta_lk': 'ta_LK.UTF-8', 'te': 'te_IN.UTF-8', + 'te_in': 'te_IN.UTF-8', 'tg': 'tg_TJ.KOI8-C', 'tg_tj': 'tg_TJ.KOI8-C', 'tg_tj.koi8c': 'tg_TJ.KOI8-C', @@ -1504,6 +1679,10 @@ def getpreferredencoding(do_setlocale = True): 'th_th.tactis': 'th_TH.TIS620', 'th_th.tis620': 'th_TH.TIS620', 'thai': 'th_TH.ISO8859-11', + 'ti_er': 'ti_ER.UTF-8', + 'ti_et': 'ti_ET.UTF-8', + 'tig_er': 'tig_ER.UTF-8', + 'tk_tm': 'tk_TM.UTF-8', 'tl': 'tl_PH.ISO8859-1', 'tl_ph': 'tl_PH.ISO8859-1', 'tl_ph.iso88591': 'tl_PH.ISO8859-1', @@ -1511,6 +1690,7 @@ def getpreferredencoding(do_setlocale = True): 'tn_za': 'tn_ZA.ISO8859-15', 'tn_za.iso885915': 'tn_ZA.ISO8859-15', 'tr': 'tr_TR.ISO8859-9', + 'tr_cy': 'tr_CY.ISO8859-9', 'tr_tr': 'tr_TR.ISO8859-9', 'tr_tr.iso88599': 'tr_TR.ISO8859-9', 'ts': 'ts_ZA.ISO8859-1', @@ -1520,8 +1700,10 @@ def getpreferredencoding(do_setlocale = True): 'tt_ru': 'tt_RU.TATAR-CYR', 'tt_ru.koi8c': 'tt_RU.KOI8-C', 'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR', + 'tt_ru@iqtelif': 'tt_RU.UTF-8@iqtelif', 'turkish': 'tr_TR.ISO8859-9', 'turkish.iso88599': 'tr_TR.ISO8859-9', + 'ug_cn': 'ug_CN.UTF-8', 'uk': 'uk_UA.KOI8-U', 'uk_ua': 'uk_UA.KOI8-U', 'uk_ua.cp1251': 'uk_UA.CP1251', @@ -1531,7 +1713,9 @@ def getpreferredencoding(do_setlocale = True): 'univ': 'en_US.utf', 'universal': 'en_US.utf', 'universal.utf8@ucs4': 'en_US.UTF-8', + 'unm_us': 'unm_US.UTF-8', 'ur': 'ur_PK.CP1256', + 'ur_in': 'ur_IN.UTF-8', 'ur_pk': 'ur_PK.CP1256', 'ur_pk.cp1256': 'ur_PK.CP1256', 'ur_pk.microsoftcp1256': 'ur_PK.CP1256', @@ -1554,6 +1738,9 @@ def getpreferredencoding(do_setlocale = True): 'wa_be.iso885915': 'wa_BE.ISO8859-15', 'wa_be.iso885915@euro': 'wa_BE.ISO8859-15', 'wa_be@euro': 'wa_BE.ISO8859-15', + 'wae_ch': 'wae_CH.UTF-8', + 'wal_et': 'wal_ET.UTF-8', + 'wo_sn': 'wo_SN.UTF-8', 'xh': 'xh_ZA.ISO8859-1', 'xh_za': 'xh_ZA.ISO8859-1', 'xh_za.iso88591': 'xh_ZA.ISO8859-1', @@ -1561,6 +1748,8 @@ def getpreferredencoding(do_setlocale = True): 'yi_us': 'yi_US.CP1255', 'yi_us.cp1255': 'yi_US.CP1255', 'yi_us.microsoftcp1255': 'yi_US.CP1255', + 'yo_ng': 'yo_NG.UTF-8', + 'yue_hk': 'yue_HK.UTF-8', 'zh': 'zh_CN.eucCN', 'zh_cn': 'zh_CN.gb2312', 'zh_cn.big5': 'zh_TW.big5', @@ -1572,6 +1761,8 @@ def getpreferredencoding(do_setlocale = True): 'zh_hk.big5': 'zh_HK.big5', 'zh_hk.big5hk': 'zh_HK.big5hkscs', 'zh_hk.big5hkscs': 'zh_HK.big5hkscs', + 'zh_sg': 'zh_SG.GB2312', + 'zh_sg.gbk': 'zh_SG.GBK', 'zh_tw': 'zh_TW.big5', 'zh_tw.big5': 'zh_TW.big5', 'zh_tw.euc': 'zh_TW.eucTW', @@ -1653,7 +1844,7 @@ def getpreferredencoding(do_setlocale = True): 0x1809: "en_IE", # English - Ireland 0x1c09: "en_ZA", # English - South Africa 0x2009: "en_JA", # English - Jamaica - 0x2409: "en_CB", # English - Carribbean + 0x2409: "en_CB", # English - Caribbean 0x2809: "en_BZ", # English - Belize 0x2c09: "en_TT", # English - Trinidad 0x3009: "en_ZW", # English - Zimbabwe diff --git a/PythonLib/min/macpath.py b/PythonLib/min/macpath.py index cd4cb858..9ebd83cf 100644 --- a/PythonLib/min/macpath.py +++ b/PythonLib/min/macpath.py @@ -5,6 +5,7 @@ from stat import * import genericpath from genericpath import * +from genericpath import _unicode __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "basename","dirname","commonprefix","getsize","getmtime", @@ -42,7 +43,7 @@ def isabs(s): def join(s, *p): path = s for t in p: - if (not s) or isabs(t): + if (not path) or isabs(t): path = t continue if t[:1] == ':': @@ -186,7 +187,7 @@ def walk(top, func, arg): def abspath(path): """Return an absolute path.""" if not isabs(path): - if isinstance(path, unicode): + if isinstance(path, _unicode): cwd = os.getcwdu() else: cwd = os.getcwd() diff --git a/PythonLib/min/mailbox.py b/PythonLib/min/mailbox.py index 4cdd7d45..b1e5faaf 100644 --- a/PythonLib/min/mailbox.py +++ b/PythonLib/min/mailbox.py @@ -1,5 +1,3 @@ -#! /usr/bin/env python - """Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.""" # Notes for authors of new mailbox subclasses: @@ -721,10 +719,14 @@ def _post_message_hook(self, f): def close(self): """Flush and close the mailbox.""" - self.flush() - if self._locked: - self.unlock() - self._file.close() # Sync has been done by self.flush() above. + try: + self.flush() + finally: + try: + if self._locked: + self.unlock() + finally: + self._file.close() # Sync has been done by self.flush() above. def _lookup(self, key=None): """Return (start, stop) or raise KeyError.""" @@ -1772,7 +1774,7 @@ class BabylMessage(Message): """Message with Babyl-specific properties.""" def __init__(self, message=None): - """Initialize an BabylMessage instance.""" + """Initialize a BabylMessage instance.""" self._labels = [] self._visible = Message() Message.__init__(self, message) diff --git a/PythonLib/min/mailcap.py b/PythonLib/min/mailcap.py index b2ddacd0..04077ba0 100644 --- a/PythonLib/min/mailcap.py +++ b/PythonLib/min/mailcap.py @@ -22,8 +22,8 @@ def getcaps(): fp = open(mailcap, 'r') except IOError: continue - morecaps = readmailcapfile(fp) - fp.close() + with fp: + morecaps = readmailcapfile(fp) for key, value in morecaps.iteritems(): if not key in caps: caps[key] = value diff --git a/PythonLib/min/mhlib.py b/PythonLib/min/mhlib.py index 856e8780..46311fc2 100644 --- a/PythonLib/min/mhlib.py +++ b/PythonLib/min/mhlib.py @@ -159,7 +159,7 @@ def listsubfolders(self, name): # Get the link count so we can avoid listing folders # that have no subfolders. nlinks = os.stat(fullname).st_nlink - if nlinks <= 2: + if nlinks == 2: return [] subfolders = [] subnames = os.listdir(fullname) @@ -171,7 +171,7 @@ def listsubfolders(self, name): # Stop looking for subfolders when # we've seen them all nlinks = nlinks - 1 - if nlinks <= 2: + if nlinks == 2: break subfolders.sort() return subfolders @@ -186,7 +186,7 @@ def listallsubfolders(self, name): # Get the link count so we can avoid listing folders # that have no subfolders. nlinks = os.stat(fullname).st_nlink - if nlinks <= 2: + if nlinks == 2: return [] subfolders = [] subnames = os.listdir(fullname) @@ -203,7 +203,7 @@ def listallsubfolders(self, name): # Stop looking for subfolders when # we've seen them all nlinks = nlinks - 1 - if nlinks <= 2: + if nlinks == 2: break subfolders.sort() return subfolders diff --git a/PythonLib/min/mimetypes.py b/PythonLib/min/mimetypes.py index 3dde4cd9..157d4555 100644 --- a/PythonLib/min/mimetypes.py +++ b/PythonLib/min/mimetypes.py @@ -245,12 +245,9 @@ def enum_types(mimedb): ctype = _winreg.EnumKey(mimedb, i) except EnvironmentError: break - try: - ctype = ctype.encode(default_encoding) # omit in 3.x! - except UnicodeEncodeError: - pass else: - yield ctype + if '\0' not in ctype: + yield ctype i += 1 default_encoding = sys.getdefaultencoding() @@ -268,7 +265,6 @@ def enum_types(mimedb): continue try: mimetype = mimetype.encode(default_encoding) - subkeyname = subkeyname.encode(default_encoding) except UnicodeEncodeError: continue self.add_type(mimetype, subkeyname, strict) @@ -373,9 +369,10 @@ def read_mime_types(file): f = open(file) except IOError: return None - db = MimeTypes() - db.readfp(f, True) - return db.types_map[True] + with f: + db = MimeTypes() + db.readfp(f, True) + return db.types_map[True] def _default_mime_types(): @@ -385,6 +382,7 @@ def _default_mime_types(): global common_types suffix_map = { + '.svgz': '.svg.gz', '.tgz': '.tar.gz', '.taz': '.tar.gz', '.tz': '.tar.gz', @@ -423,6 +421,7 @@ def _default_mime_types(): '.cpio' : 'application/x-cpio', '.csh' : 'application/x-csh', '.css' : 'text/css', + '.csv' : 'text/csv', '.dll' : 'application/octet-stream', '.doc' : 'application/msword', '.dot' : 'application/msword', @@ -502,6 +501,7 @@ def _default_mime_types(): '.src' : 'application/x-wais-source', '.sv4cpio': 'application/x-sv4cpio', '.sv4crc' : 'application/x-sv4crc', + '.svg' : 'image/svg+xml', '.swf' : 'application/x-shockwave-flash', '.t' : 'application/x-troff', '.tar' : 'application/x-tar', @@ -517,6 +517,7 @@ def _default_mime_types(): '.ustar' : 'application/x-ustar', '.vcf' : 'text/x-vcard', '.wav' : 'audio/x-wav', + '.webm' : 'video/webm', '.wiz' : 'application/msword', '.wsdl' : 'application/xml', '.xbm' : 'image/x-xbitmap', diff --git a/PythonLib/min/modulefinder.py b/PythonLib/min/modulefinder.py index f6f84f3f..e2fee418 100644 --- a/PythonLib/min/modulefinder.py +++ b/PythonLib/min/modulefinder.py @@ -1,5 +1,4 @@ """Find modules used by a script, using introspection.""" -# This module should be kept compatible with Python 2.2, see PEP 291. from __future__ import generators import dis @@ -13,15 +12,35 @@ if hasattr(sys.__stdout__, "newlines"): READ_MODE = "U" # universal line endings else: - # remain compatible with Python < 2.3 + # Python < 2.3 compatibility, no longer strictly required READ_MODE = "r" -LOAD_CONST = chr(dis.opname.index('LOAD_CONST')) -IMPORT_NAME = chr(dis.opname.index('IMPORT_NAME')) -STORE_NAME = chr(dis.opname.index('STORE_NAME')) -STORE_GLOBAL = chr(dis.opname.index('STORE_GLOBAL')) -STORE_OPS = [STORE_NAME, STORE_GLOBAL] -HAVE_ARGUMENT = chr(dis.HAVE_ARGUMENT) +LOAD_CONST = dis.opmap['LOAD_CONST'] +IMPORT_NAME = dis.opmap['IMPORT_NAME'] +STORE_NAME = dis.opmap['STORE_NAME'] +STORE_GLOBAL = dis.opmap['STORE_GLOBAL'] +STORE_OPS = STORE_NAME, STORE_GLOBAL +HAVE_ARGUMENT = dis.HAVE_ARGUMENT +EXTENDED_ARG = dis.EXTENDED_ARG + +def _unpack_opargs(code): + # enumerate() is not an option, since we sometimes process + # multiple elements on a single pass through the loop + extended_arg = 0 + n = len(code) + i = 0 + while i < n: + op = ord(code[i]) + offset = i + i = i+1 + arg = None + if op >= HAVE_ARGUMENT: + arg = ord(code[i]) + ord(code[i+1])*256 + extended_arg + extended_arg = 0 + i = i+2 + if op == EXTENDED_ARG: + extended_arg = arg*65536 + yield (offset, op, arg) # Modulefinder does a good job at simulating Python's, but it can not # handle __path__ modifications packages make at runtime. Therefore there @@ -109,16 +128,16 @@ def msgout(self, *args): def run_script(self, pathname): self.msg(2, "run_script", pathname) - fp = open(pathname, READ_MODE) - stuff = ("", "r", imp.PY_SOURCE) - self.load_module('__main__', fp, pathname, stuff) + with open(pathname, READ_MODE) as fp: + stuff = ("", "r", imp.PY_SOURCE) + self.load_module('__main__', fp, pathname, stuff) def load_file(self, pathname): dir, name = os.path.split(pathname) name, ext = os.path.splitext(name) - fp = open(pathname, READ_MODE) - stuff = (ext, "r", imp.PY_SOURCE) - self.load_module(name, fp, pathname, stuff) + with open(pathname, READ_MODE) as fp: + stuff = (ext, "r", imp.PY_SOURCE) + self.load_module(name, fp, pathname, stuff) def import_hook(self, name, caller=None, fromlist=None, level=-1): self.msg(3, "import_hook", name, caller, fromlist, level) @@ -344,53 +363,40 @@ def scan_opcodes(self, co, code = co.co_code names = co.co_names consts = co.co_consts - while code: - c = code[0] + opargs = [(op, arg) for _, op, arg in _unpack_opargs(code) + if op != EXTENDED_ARG] + for i, (op, oparg) in enumerate(opargs): if c in STORE_OPS: - oparg, = unpack('= 1 + and opargs[i-1][0] == LOAD_CONST): + fromlist = consts[opargs[i-1][1]] + yield "import", (fromlist, names[oparg]) continue - if c >= HAVE_ARGUMENT: - code = code[3:] - else: - code = code[1:] - def scan_opcodes_25(self, co, - unpack = struct.unpack): + def scan_opcodes_25(self, co): # Scan the code, and yield 'interesting' opcode combinations - # Python 2.5 version (has absolute and relative imports) code = co.co_code names = co.co_names consts = co.co_consts - LOAD_LOAD_AND_IMPORT = LOAD_CONST + LOAD_CONST + IMPORT_NAME - while code: - c = code[0] - if c in STORE_OPS: - oparg, = unpack('= 2 + and opargs[i-1][0] == opargs[i-2][0] == LOAD_CONST): + level = consts[opargs[i-2][1]] + fromlist = consts[opargs[i-1][1]] if level == -1: # normal import - yield "import", (consts[oparg_2], names[oparg_3]) + yield "import", (fromlist, names[oparg]) elif level == 0: # absolute import - yield "absolute_import", (consts[oparg_2], names[oparg_3]) + yield "absolute_import", (fromlist, names[oparg]) else: # relative import - yield "relative_import", (level, consts[oparg_2], names[oparg_3]) - code = code[9:] + yield "relative_import", (level, fromlist, names[oparg]) continue - if c >= HAVE_ARGUMENT: - code = code[3:] - else: - code = code[1:] def scan_code(self, co, m): code = co.co_code @@ -461,6 +467,8 @@ def load_package(self, fqname, pathname): fp, buf, stuff = self.find_module("__init__", m.__path__) self.load_module(fqname, fp, buf, stuff) self.msgout(2, "load_package ->", m) + if fp: + fp.close() return m def add_module(self, fqname): diff --git a/PythonLib/min/mutex.py b/PythonLib/min/mutex.py index f8acba4a..3d8f4285 100644 --- a/PythonLib/min/mutex.py +++ b/PythonLib/min/mutex.py @@ -9,7 +9,7 @@ implying it now has the lock. Of course, no multi-threading is implied -- hence the funny interface -for lock, where a function is called once the lock is aquired. +for lock, where a function is called once the lock is acquired. """ from warnings import warnpy3k warnpy3k("the mutex module has been removed in Python 3.0", stacklevel=2) diff --git a/PythonLib/min/ntpath.py b/PythonLib/min/ntpath.py index 4f8f423c..0b85b0b9 100644 --- a/PythonLib/min/ntpath.py +++ b/PythonLib/min/ntpath.py @@ -12,6 +12,7 @@ import warnings from genericpath import * +from genericpath import _unicode __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "basename","dirname","commonprefix","getsize","getmtime", @@ -59,73 +60,79 @@ def isabs(s): # Join two (or more) paths. - -def join(a, *p): - """Join two or more pathname components, inserting "\\" as needed. - If any component is an absolute path, all previous path components - will be discarded.""" - path = a - for b in p: - b_wins = 0 # set to 1 iff b makes path irrelevant - if path == "": - b_wins = 1 - - elif isabs(b): - # This probably wipes out path so far. However, it's more - # complicated if path begins with a drive letter: - # 1. join('c:', '/a') == 'c:/a' - # 2. join('c:/', '/a') == 'c:/a' - # But - # 3. join('c:/a', '/b') == '/b' - # 4. join('c:', 'd:/') = 'd:/' - # 5. join('c:/', 'd:/') = 'd:/' - if path[1:2] != ":" or b[1:2] == ":": - # Path doesn't start with a drive letter, or cases 4 and 5. - b_wins = 1 - - # Else path has a drive letter, and b doesn't but is absolute. - elif len(path) > 3 or (len(path) == 3 and - path[-1] not in "/\\"): - # case 3 - b_wins = 1 - - if b_wins: - path = b - else: - # Join, and ensure there's a separator. - assert len(path) > 0 - if path[-1] in "/\\": - if b and b[0] in "/\\": - path += b[1:] - else: - path += b - elif path[-1] == ":": - path += b - elif b: - if b[0] in "/\\": - path += b - else: - path += "\\" + b - else: - # path is not empty and does not end with a backslash, - # but b is empty; since, e.g., split('a/') produces - # ('a', ''), it's best if join() adds a backslash in - # this case. - path += '\\' - - return path +def join(path, *paths): + """Join two or more pathname components, inserting "\\" as needed.""" + result_drive, result_path = splitdrive(path) + for p in paths: + p_drive, p_path = splitdrive(p) + if p_path and p_path[0] in '\\/': + # Second path is absolute + if p_drive or not result_drive: + result_drive = p_drive + result_path = p_path + continue + elif p_drive and p_drive != result_drive: + if p_drive.lower() != result_drive.lower(): + # Different drives => ignore the first path entirely + result_drive = p_drive + result_path = p_path + continue + # Same drive in different case + result_drive = p_drive + # Second path is relative to the first + if result_path and result_path[-1] not in '\\/': + result_path = result_path + '\\' + result_path = result_path + p_path + ## add separator between UNC and non-absolute path + if (result_path and result_path[0] not in '\\/' and + result_drive and result_drive[-1:] != ':'): + return result_drive + sep + result_path + return result_drive + result_path # Split a path in a drive specification (a drive letter followed by a # colon) and the path specification. # It is always true that drivespec + pathspec == p def splitdrive(p): - """Split a pathname into drive and path specifiers. Returns a 2-tuple -"(drive,path)"; either part may be empty""" - if p[1:2] == ':': - return p[0:2], p[2:] - return '', p + """Split a pathname into drive/UNC sharepoint and relative path specifiers. + Returns a 2-tuple (drive_or_unc, path); either part may be empty. + + If you assign + result = splitdrive(p) + It is always true that: + result[0] + result[1] == p + If the path contained a drive letter, drive_or_unc will contain everything + up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") + + If the path contained a UNC path, the drive_or_unc will contain the host name + and share up to but not including the fourth directory separator character. + e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") + + Paths cannot contain both a drive letter and a UNC path. + + """ + if len(p) > 1: + normp = p.replace(altsep, sep) + if (normp[0:2] == sep*2) and (normp[2:3] != sep): + # is a UNC path: + # vvvvvvvvvvvvvvvvvvvv drive letter or UNC path + # \\machine\mountpoint\directory\etc\... + # directory ^^^^^^^^^^^^^^^ + index = normp.find(sep, 2) + if index == -1: + return '', p + index2 = normp.find(sep, index + 1) + # a UNC path can't have two slashes in a row + # (after the initial two) + if index2 == index + 1: + return '', p + if index2 == -1: + index2 = len(p) + return p[:index2], p[index2:] + if normp[1] == ':': + return p[:2], p[2:] + return '', p # Parse UNC paths def splitunc(p): @@ -134,7 +141,7 @@ def splitunc(p): Return a 2-tuple (unc, rest); either part may be empty. If unc is not empty, it has the form '//host/mount' (or similar using backslashes). unc+rest is always the input path. - Paths containing drive letters never have an UNC part. + Paths containing drive letters never have a UNC part. """ if p[1:2] == ':': return '', p # Drive letter present @@ -144,15 +151,18 @@ def splitunc(p): # vvvvvvvvvvvvvvvvvvvv equivalent to drive letter # \\machine\mountpoint\directories... # directory ^^^^^^^^^^^^^^^ - normp = normcase(p) - index = normp.find('\\', 2) - if index == -1: - ##raise RuntimeError, 'illegal UNC path: "' + p + '"' - return ("", p) - index = normp.find('\\', index + 1) - if index == -1: - index = len(p) - return p[:index], p[index:] + normp = p.replace('\\', '/') + index = normp.find('/', 2) + if index <= 2: + return '', p + index2 = normp.find('/', index + 1) + # a UNC path can't have two slashes in a row + # (after the initial two) + if index2 == index + 1: + return '', p + if index2 == -1: + index2 = len(p) + return p[:index2], p[index2:] return '', p @@ -217,7 +227,7 @@ def islink(path): lexists = exists # Is a path a mount point? Either a root (with or without drive letter) -# or an UNC path with at most a / or \ after the mount point. +# or a UNC path with at most a / or \ after the mount point. def ismount(path): """Test whether a path is a mount point (defined as root of drive)""" @@ -322,6 +332,13 @@ def expandvars(path): return path import string varchars = string.ascii_letters + string.digits + '_-' + if isinstance(path, _unicode): + encoding = sys.getfilesystemencoding() + def getenv(var): + return os.environ[var.encode(encoding)].decode(encoding) + else: + def getenv(var): + return os.environ[var] res = '' index = 0 pathlen = len(path) @@ -334,7 +351,7 @@ def expandvars(path): index = path.index('\'') res = res + '\'' + path[:index + 1] except ValueError: - res = res + path + res = res + c + path index = pathlen - 1 elif c == '%': # variable or '%' if path[index + 1:index + 2] == '%': @@ -350,9 +367,9 @@ def expandvars(path): index = pathlen - 1 else: var = path[:index] - if var in os.environ: - res = res + os.environ[var] - else: + try: + res = res + getenv(var) + except KeyError: res = res + '%' + var + '%' elif c == '$': # variable or '$$' if path[index + 1:index + 2] == '$': @@ -364,9 +381,9 @@ def expandvars(path): try: index = path.index('}') var = path[:index] - if var in os.environ: - res = res + os.environ[var] - else: + try: + res = res + getenv(var) + except KeyError: res = res + '${' + var + '}' except ValueError: res = res + '${' + path @@ -379,9 +396,9 @@ def expandvars(path): var = var + c index = index + 1 c = path[index:index + 1] - if var in os.environ: - res = res + os.environ[var] - else: + try: + res = res + getenv(var) + except KeyError: res = res + '$' + var if c != '': index = index - 1 @@ -398,7 +415,7 @@ def expandvars(path): def normpath(path): """Normalize path, eliminating double slashes, etc.""" # Preserve unicode (if path is unicode) - backslash, dot = (u'\\', u'.') if isinstance(path, unicode) else ('\\', '.') + backslash, dot = (u'\\', u'.') if isinstance(path, _unicode) else ('\\', '.') if path.startswith(('\\\\.\\', '\\\\?\\')): # in the case of paths with these prefixes: # \\.\ -> device names @@ -455,7 +472,7 @@ def normpath(path): def abspath(path): """Return the absolute version of a path.""" if not isabs(path): - if isinstance(path, unicode): + if isinstance(path, _unicode): cwd = os.getcwdu() else: cwd = os.getcwd() @@ -471,7 +488,7 @@ def abspath(path): path = _getfullpathname(path) except WindowsError: pass # Bad path - return unchanged. - elif isinstance(path, unicode): + elif isinstance(path, _unicode): path = os.getcwdu() else: path = os.getcwd() diff --git a/PythonLib/min/nturl2path.py b/PythonLib/min/nturl2path.py index 10ea2728..9e6eb0d5 100644 --- a/PythonLib/min/nturl2path.py +++ b/PythonLib/min/nturl2path.py @@ -4,9 +4,11 @@ def url2pathname(url): """OS-specific conversion from a relative URL of the 'file' scheme to a file system path; not recommended for general use.""" # e.g. - # ///C|/foo/bar/spam.foo - # becomes - # C:\foo\bar\spam.foo + # ///C|/foo/bar/spam.foo + # and + # ///C:/foo/bar/spam.foo + # become + # C:\foo\bar\spam.foo import string, urllib # Windows itself uses ":" even in URLs. url = url.replace(':', '|') @@ -39,9 +41,9 @@ def pathname2url(p): """OS-specific conversion from a file system path to a relative URL of the 'file' scheme; not recommended for general use.""" # e.g. - # C:\foo\bar\spam.foo + # C:\foo\bar\spam.foo # becomes - # ///C|/foo/bar/spam.foo + # ///C:/foo/bar/spam.foo import urllib if not ':' in p: # No drive specifier, just convert slashes and quote the name diff --git a/PythonLib/min/optparse.py b/PythonLib/min/optparse.py index 6c3f4565..bec492d8 100644 --- a/PythonLib/min/optparse.py +++ b/PythonLib/min/optparse.py @@ -204,7 +204,6 @@ def __init__(self, short_first): self.parser = None self.indent_increment = indent_increment - self.help_position = self.max_help_position = max_help_position if width is None: try: width = int(os.environ['COLUMNS']) @@ -212,6 +211,8 @@ def __init__(self, width = 80 width -= 2 self.width = width + self.help_position = self.max_help_position = \ + min(max_help_position, max(width - 20, indent_increment * 2)) self.current_indent = 0 self.level = 0 self.help_width = None # computed later @@ -256,7 +257,7 @@ def _format_text(self, text): Format a paragraph of free-form text for inclusion in the help output at the current indentation level. """ - text_width = self.width - self.current_indent + text_width = max(self.width - self.current_indent, 11) indent = " "*self.current_indent return textwrap.fill(text, text_width, @@ -337,7 +338,7 @@ def store_option_strings(self, parser): self.dedent() self.dedent() self.help_position = min(max_len + 2, self.max_help_position) - self.help_width = self.width - self.help_position + self.help_width = max(self.width - self.help_position, 11) def format_option_strings(self, option): """Return a comma-separated list of option strings & metavariables.""" @@ -913,7 +914,7 @@ class OptionContainer: _short_opt : { string : Option } dictionary mapping short option strings, eg. "-f" or "-X", to the Option instances that implement them. If an Option - has multiple short option strings, it will appears in this + has multiple short option strings, it will appear in this dictionary multiple times. [1] _long_opt : { string : Option } dictionary mapping long option strings, eg. "--file" or @@ -1374,7 +1375,7 @@ def parse_args(self, args=None, values=None): sys.argv[1:]). Any errors result in a call to 'error()', which by default prints the usage message to stderr and calls sys.exit() with an error message. On success returns a pair - (values, args) where 'values' is an Values instance (with all + (values, args) where 'values' is a Values instance (with all your option values) and 'args' is the list of arguments left over after parsing options. """ diff --git a/PythonLib/min/os.py b/PythonLib/min/os.py index 6d598f3e..cfea71be 100644 --- a/PythonLib/min/os.py +++ b/PythonLib/min/os.py @@ -1,4 +1,4 @@ -r"""OS routines for Mac, NT, or Posix depending on what system we're on. +r"""OS routines for NT or Posix depending on what system we're on. This exports: - all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc. @@ -185,7 +185,7 @@ def renames(old, new): empty. Works like rename, except creation of any intermediate directories needed to make the new pathname good is attempted first. After the rename, directories corresponding to rightmost - path segments of the old name will be pruned way until either the + path segments of the old name will be pruned until either the whole path is consumed or a nonempty directory is found. Note: this function can fail with the new directory structure made @@ -229,11 +229,12 @@ def walk(top, topdown=True, onerror=None, followlinks=False): When topdown is true, the caller can modify the dirnames list in-place (e.g., via del or slice assignment), and walk will only recurse into the - subdirectories whose names remain in dirnames; this can be used to prune - the search, or to impose a specific order of visiting. Modifying - dirnames when topdown is false is ineffective, since the directories in - dirnames have already been generated by the time dirnames itself is - generated. + subdirectories whose names remain in dirnames; this can be used to prune the + search, or to impose a specific order of visiting. Modifying dirnames when + topdown is false is ineffective, since the directories in dirnames have + already been generated by the time dirnames itself is generated. No matter + the value of topdown, the list of subdirectories is retrieved before the + tuples for the directory and its subdirectories are generated. By default errors from the os.listdir() call are ignored. If optional arg 'onerror' is specified, it should be a function; it @@ -261,6 +262,7 @@ def walk(top, topdown=True, onerror=None, followlinks=False): print "bytes in", len(files), "non-directory files" if 'CVS' in dirs: dirs.remove('CVS') # don't visit CVS directories + """ islink, join, isdir = path.islink, path.join, path.isdir diff --git a/PythonLib/min/os2emxpath.py b/PythonLib/min/os2emxpath.py index 1bed51d4..6691b7d8 100644 --- a/PythonLib/min/os2emxpath.py +++ b/PythonLib/min/os2emxpath.py @@ -8,6 +8,7 @@ import os import stat from genericpath import * +from genericpath import _unicode from ntpath import (expanduser, expandvars, isabs, islink, splitdrive, splitext, split, walk) @@ -61,7 +62,7 @@ def splitunc(p): Return a 2-tuple (unc, rest); either part may be empty. If unc is not empty, it has the form '//host/mount' (or similar using backslashes). unc+rest is always the input path. - Paths containing drive letters never have an UNC part. + Paths containing drive letters never have a UNC part. """ if p[1:2] == ':': return '', p # Drive letter present @@ -104,7 +105,7 @@ def dirname(p): # Is a path a directory? # Is a path a mount point? Either a root (with or without drive letter) -# or an UNC path with at most a / or \ after the mount point. +# or a UNC path with at most a / or \ after the mount point. def ismount(path): """Test whether a path is a mount point (defined as root of drive)""" @@ -146,7 +147,7 @@ def normpath(path): def abspath(path): """Return the absolute version of a path""" if not isabs(path): - if isinstance(path, unicode): + if isinstance(path, _unicode): cwd = os.getcwdu() else: cwd = os.getcwd() diff --git a/PythonLib/min/pdb.py b/PythonLib/min/pdb.py index 113b4e08..4d35103b 100644 --- a/PythonLib/min/pdb.py +++ b/PythonLib/min/pdb.py @@ -1322,6 +1322,9 @@ def main(): # In most cases SystemExit does not warrant a post-mortem session. print "The program exited via sys.exit(). Exit status: ", print sys.exc_info()[1] + except SyntaxError: + traceback.print_exc() + sys.exit(1) except: traceback.print_exc() print "Uncaught exception. Entering post mortem debugging" diff --git a/PythonLib/min/pickle.py b/PythonLib/min/pickle.py index 508e858d..1b3196ff 100644 --- a/PythonLib/min/pickle.py +++ b/PythonLib/min/pickle.py @@ -269,7 +269,7 @@ def get(self, i, pack=struct.pack): def save(self, obj): # Check for persistent id (defined by a subclass) pid = self.persistent_id(obj) - if pid: + if pid is not None: self.save_pers(pid) return @@ -402,7 +402,13 @@ def save_reduce(self, func, args, state=None, write(REDUCE) if obj is not None: - self.memoize(obj) + # If the object is already in the memo, this means it is + # recursive. In this case, throw away everything we put on the + # stack, and fetch the object back from the memo. + if id(obj) in self.memo: + write(POP + self.get(self.memo[id(obj)][0])) + else: + self.memoize(obj) # More new special cases (that work with older protocols as # well): when __reduce__ returns a tuple with 4 or 5 items, diff --git a/PythonLib/min/pickletools.py b/PythonLib/min/pickletools.py index 8de53dd2..c9366c8c 100644 --- a/PythonLib/min/pickletools.py +++ b/PythonLib/min/pickletools.py @@ -185,7 +185,7 @@ def __init__(self, name, n, reader, doc): assert isinstance(name, str) self.name = name - assert isinstance(n, int) and (n >= 0 or + assert isinstance(n, (int, long)) and (n >= 0 or n in (UP_TO_NEWLINE, TAKEN_FROM_ARGUMENT1, TAKEN_FROM_ARGUMENT4)) @@ -873,7 +873,7 @@ def __init__(self, name, code, arg, assert isinstance(x, StackObject) self.stack_after = stack_after - assert isinstance(proto, int) and 0 <= proto <= 2 + assert isinstance(proto, (int, long)) and 0 <= proto <= 2 self.proto = proto assert isinstance(doc, str) diff --git a/PythonLib/min/platform.py b/PythonLib/min/platform.py index df2af83a..55f2fa89 100644 --- a/PythonLib/min/platform.py +++ b/PythonLib/min/platform.py @@ -28,12 +28,14 @@ # Betancourt, Randall Hopper, Karl Putland, John Farrell, Greg # Andruk, Just van Rossum, Thomas Heller, Mark R. Levinson, Mark # Hammond, Bill Tutt, Hans Nowak, Uwe Zessin (OpenVMS support), -# Colin Kong, Trent Mick, Guido van Rossum, Anthony Baxter +# Colin Kong, Trent Mick, Guido van Rossum, Anthony Baxter, Steve +# Dower # # History: # # # +# 1.0.8 - changed Windows support to read version from kernel32.dll # 1.0.7 - added DEV_NULL # 1.0.6 - added linux_distribution() # 1.0.5 - fixed Java support to allow running the module on Jython @@ -61,7 +63,7 @@ # though # 0.5.2 - fixed uname() to return '' instead of 'unknown' in all # return values (the system uname command tends to return -# 'unknown' instead of just leaving the field emtpy) +# 'unknown' instead of just leaving the field empty) # 0.5.1 - included code for slackware dist; added exception handlers # to cover up situations where platforms don't have os.popen # (e.g. Mac) or fail on socket.gethostname(); fixed libc @@ -531,189 +533,142 @@ def _syscmd_ver(system='', release='', version='', version = _norm_version(version) return system,release,version -def _win32_getvalue(key,name,default=''): +_WIN32_CLIENT_RELEASES = { + (5, 0): "2000", + (5, 1): "XP", + # Strictly, 5.2 client is XP 64-bit, but platform.py historically + # has always called it 2003 Server + (5, 2): "2003Server", + (5, None): "post2003", + + (6, 0): "Vista", + (6, 1): "7", + (6, 2): "8", + (6, 3): "8.1", + (6, None): "post8.1", + + (10, 0): "10", + (10, None): "post10", +} - """ Read a value for name from the registry key. +# Server release name lookup will default to client names if necessary +_WIN32_SERVER_RELEASES = { + (5, 2): "2003Server", - In case this fails, default is returned. + (6, 0): "2008Server", + (6, 1): "2008ServerR2", + (6, 2): "2012Server", + (6, 3): "2012ServerR2", + (6, None): "post2012ServerR2", +} - """ +def _get_real_winver(maj, min, build): + if maj < 6 or (maj == 6 and min < 2): + return maj, min, build + + from ctypes import (c_buffer, POINTER, byref, create_unicode_buffer, + Structure, WinDLL, _Pointer) + from ctypes.wintypes import DWORD, HANDLE + + class VS_FIXEDFILEINFO(Structure): + _fields_ = [ + ("dwSignature", DWORD), + ("dwStrucVersion", DWORD), + ("dwFileVersionMS", DWORD), + ("dwFileVersionLS", DWORD), + ("dwProductVersionMS", DWORD), + ("dwProductVersionLS", DWORD), + ("dwFileFlagsMask", DWORD), + ("dwFileFlags", DWORD), + ("dwFileOS", DWORD), + ("dwFileType", DWORD), + ("dwFileSubtype", DWORD), + ("dwFileDateMS", DWORD), + ("dwFileDateLS", DWORD), + ] + class PVS_FIXEDFILEINFO(_Pointer): + _type_ = VS_FIXEDFILEINFO + + kernel32 = WinDLL('kernel32') + version = WinDLL('version') + + # We will immediately double the length up to MAX_PATH, but the + # path may be longer, so we retry until the returned string is + # shorter than our buffer. + name_len = actual_len = 130 + while actual_len == name_len: + name_len *= 2 + name = create_unicode_buffer(name_len) + actual_len = kernel32.GetModuleFileNameW(HANDLE(kernel32._handle), + name, len(name)) + if not actual_len: + return maj, min, build + + size = version.GetFileVersionInfoSizeW(name, None) + if not size: + return maj, min, build + + ver_block = c_buffer(size) + if (not version.GetFileVersionInfoW(name, None, size, ver_block) or + not ver_block): + return maj, min, build + + pvi = PVS_FIXEDFILEINFO() + if not version.VerQueryValueW(ver_block, "", byref(pvi), byref(DWORD())): + return maj, min, build + + maj = pvi.contents.dwProductVersionMS >> 16 + min = pvi.contents.dwProductVersionMS & 0xFFFF + build = pvi.contents.dwProductVersionLS >> 16 + + return maj, min, build + +def win32_ver(release='', version='', csd='', ptype=''): try: - # Use win32api if available - from win32api import RegQueryValueEx + from sys import getwindowsversion except ImportError: - # On Python 2.0 and later, emulate using _winreg - import _winreg - RegQueryValueEx = _winreg.QueryValueEx + return release, version, csd, ptype try: - return RegQueryValueEx(key,name) - except: - return default - -def win32_ver(release='',version='',csd='',ptype=''): - - """ Get additional version information from the Windows Registry - and return a tuple (version,csd,ptype) referring to version - number, CSD level (service pack), and OS type (multi/single - processor). - - As a hint: ptype returns 'Uniprocessor Free' on single - processor NT machines and 'Multiprocessor Free' on multi - processor machines. The 'Free' refers to the OS version being - free of debugging code. It could also state 'Checked' which - means the OS version uses debugging code, i.e. code that - checks arguments, ranges, etc. (Thomas Heller). + from winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE + except ImportError: + from _winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE - Note: this function works best with Mark Hammond's win32 - package installed, but also on Python 2.3 and later. It - obviously only runs on Win32 compatible platforms. + winver = getwindowsversion() + maj, min, build = _get_real_winver(*winver[:3]) + version = '{0}.{1}.{2}'.format(maj, min, build) - """ - # XXX Is there any way to find out the processor type on WinXX ? - # XXX Is win32 available on Windows CE ? - # - # Adapted from code posted by Karl Putland to comp.lang.python. - # - # The mappings between reg. values and release names can be found - # here: http://msdn.microsoft.com/library/en-us/sysinfo/base/osversioninfo_str.asp + release = (_WIN32_CLIENT_RELEASES.get((maj, min)) or + _WIN32_CLIENT_RELEASES.get((maj, None)) or + release) - # Import the needed APIs - try: - import win32api - from win32api import RegQueryValueEx, RegOpenKeyEx, \ - RegCloseKey, GetVersionEx - from win32con import HKEY_LOCAL_MACHINE, VER_PLATFORM_WIN32_NT, \ - VER_PLATFORM_WIN32_WINDOWS, VER_NT_WORKSTATION - except ImportError: - # Emulate the win32api module using Python APIs + # getwindowsversion() reflect the compatibility mode Python is + # running under, and so the service pack value is only going to be + # valid if the versions match. + if winver[:2] == (maj, min): try: - sys.getwindowsversion + csd = 'SP{}'.format(winver.service_pack_major) except AttributeError: - # No emulation possible, so return the defaults... - return release,version,csd,ptype - else: - # Emulation using _winreg (added in Python 2.0) and - # sys.getwindowsversion() (added in Python 2.3) - import _winreg - GetVersionEx = sys.getwindowsversion - RegQueryValueEx = _winreg.QueryValueEx - RegOpenKeyEx = _winreg.OpenKeyEx - RegCloseKey = _winreg.CloseKey - HKEY_LOCAL_MACHINE = _winreg.HKEY_LOCAL_MACHINE - VER_PLATFORM_WIN32_WINDOWS = 1 - VER_PLATFORM_WIN32_NT = 2 - VER_NT_WORKSTATION = 1 - VER_NT_SERVER = 3 - REG_SZ = 1 - - # Find out the registry key and some general version infos - winver = GetVersionEx() - maj,min,buildno,plat,csd = winver - version = '%i.%i.%i' % (maj,min,buildno & 0xFFFF) - if hasattr(winver, "service_pack"): - if winver.service_pack != "": - csd = 'SP%s' % winver.service_pack_major - else: - if csd[:13] == 'Service Pack ': - csd = 'SP' + csd[13:] - - if plat == VER_PLATFORM_WIN32_WINDOWS: - regkey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion' - # Try to guess the release name - if maj == 4: - if min == 0: - release = '95' - elif min == 10: - release = '98' - elif min == 90: - release = 'Me' - else: - release = 'postMe' - elif maj == 5: - release = '2000' - - elif plat == VER_PLATFORM_WIN32_NT: - regkey = 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion' - if maj <= 4: - release = 'NT' - elif maj == 5: - if min == 0: - release = '2000' - elif min == 1: - release = 'XP' - elif min == 2: - release = '2003Server' - else: - release = 'post2003' - elif maj == 6: - if hasattr(winver, "product_type"): - product_type = winver.product_type - else: - product_type = VER_NT_WORKSTATION - # Without an OSVERSIONINFOEX capable sys.getwindowsversion(), - # or help from the registry, we cannot properly identify - # non-workstation versions. - try: - key = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey) - name, type = RegQueryValueEx(key, "ProductName") - # Discard any type that isn't REG_SZ - if type == REG_SZ and name.find("Server") != -1: - product_type = VER_NT_SERVER - except WindowsError: - # Use default of VER_NT_WORKSTATION - pass - - if min == 0: - if product_type == VER_NT_WORKSTATION: - release = 'Vista' - else: - release = '2008Server' - elif min == 1: - if product_type == VER_NT_WORKSTATION: - release = '7' - else: - release = '2008ServerR2' - elif min == 2: - if product_type == VER_NT_WORKSTATION: - release = '8' - else: - release = '2012Server' - else: - release = 'post2012Server' + if csd[:13] == 'Service Pack ': + csd = 'SP' + csd[13:] - else: - if not release: - # E.g. Win3.1 with win32s - release = '%i.%i' % (maj,min) - return release,version,csd,ptype + # VER_NT_SERVER = 3 + if getattr(winver, 'product_type', None) == 3: + release = (_WIN32_SERVER_RELEASES.get((maj, min)) or + _WIN32_SERVER_RELEASES.get((maj, None)) or + release) - # Open the registry key + key = None try: - keyCurVer = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey) - # Get a value to make sure the key exists... - RegQueryValueEx(keyCurVer, 'SystemRoot') + key = OpenKeyEx(HKEY_LOCAL_MACHINE, + r'SOFTWARE\Microsoft\Windows NT\CurrentVersion') + ptype = QueryValueEx(key, 'CurrentType')[0] except: - return release,version,csd,ptype - - # Parse values - #subversion = _win32_getvalue(keyCurVer, - # 'SubVersionNumber', - # ('',1))[0] - #if subversion: - # release = release + subversion # 95a, 95b, etc. - build = _win32_getvalue(keyCurVer, - 'CurrentBuildNumber', - ('',1))[0] - ptype = _win32_getvalue(keyCurVer, - 'CurrentType', - (ptype,1))[0] - - # Normalize version - version = _norm_version(version,build) - - # Close key - RegCloseKey(keyCurVer) - return release,version,csd,ptype + pass + finally: + if key: + CloseKey(key) + + return release, version, csd, ptype def _mac_ver_lookup(selectors,default=None): @@ -1361,9 +1316,11 @@ def processor(): ### Various APIs for extracting information from sys.version _sys_version_parser = re.compile( - r'([\w.+]+)\s*' - '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*' - '\[([^\]]+)\]?') + r'([\w.+]+)\s*' # "version" + r'\(#?([^,]+)' # "(#buildno" + r'(?:,\s*([\w ]*)' # ", builddate" + r'(?:,\s*([\w :]*))?)?\)\s*' # ", buildtime)" + r'\[([^\]]+)\]?') # "[compiler]" _ironpython_sys_version_parser = re.compile( r'IronPython\s*' @@ -1442,6 +1399,8 @@ def _sys_version(sys_version=None): 'failed to parse Jython sys.version: %s' % repr(sys_version)) version, buildno, builddate, buildtime, _ = match.groups() + if builddate is None: + builddate = '' compiler = sys.platform elif "PyPy" in sys_version: @@ -1464,7 +1423,10 @@ def _sys_version(sys_version=None): version, buildno, builddate, buildtime, compiler = \ match.groups() name = 'CPython' - builddate = builddate + ' ' + buildtime + if builddate is None: + builddate = '' + elif buildtime: + builddate = builddate + ' ' + buildtime if hasattr(sys, 'subversion'): # sys.subversion was added in Python 2.5 diff --git a/PythonLib/min/poplib.py b/PythonLib/min/poplib.py index dc7cbdf0..b91e5f72 100644 --- a/PythonLib/min/poplib.py +++ b/PythonLib/min/poplib.py @@ -32,6 +32,12 @@ class error_proto(Exception): pass LF = '\n' CRLF = CR+LF +# maximal line length when calling readline(). This is to prevent +# reading arbitrary length lines. RFC 1939 limits POP3 line length to +# 512 characters, including CRLF. We have selected 2048 just to be on +# the safe side. +_MAXLINE = 2048 + class POP3: @@ -103,7 +109,9 @@ def _putcmd(self, line): # Raise error_proto('-ERR EOF') if the connection is closed. def _getline(self): - line = self.file.readline() + line = self.file.readline(_MAXLINE + 1) + if len(line) > _MAXLINE: + raise error_proto('line too long') if self._debugging > 1: print '*get*', repr(line) if not line: raise error_proto('-ERR EOF') octets = len(line) @@ -365,6 +373,8 @@ def _getline(self): match = renewline.match(self.buffer) while not match: self._fillBuffer() + if len(self.buffer) > _MAXLINE: + raise error_proto('line too long') match = renewline.match(self.buffer) line = match.group(0) self.buffer = renewline.sub('' ,self.buffer, 1) diff --git a/PythonLib/min/posixpath.py b/PythonLib/min/posixpath.py index d65dc757..f5c2260f 100644 --- a/PythonLib/min/posixpath.py +++ b/PythonLib/min/posixpath.py @@ -16,14 +16,7 @@ import genericpath import warnings from genericpath import * - -try: - _unicode = unicode -except NameError: - # If Python is built without Unicode support, the unicode type - # will not exist. Fake one. - class _unicode(object): - pass +from genericpath import _unicode __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "basename","dirname","commonprefix","getsize","getmtime", @@ -193,7 +186,7 @@ def ismount(path): return False try: s1 = os.lstat(path) - s2 = os.lstat(join(path, '..')) + s2 = os.lstat(realpath(join(path, '..'))) except os.error: return False # It doesn't exist -- so not a mount point :-) dev1 = s1.st_dev @@ -285,28 +278,43 @@ def expanduser(path): # Non-existent variables are left unchanged. _varprog = None +_uvarprog = None def expandvars(path): """Expand shell variables of form $var and ${var}. Unknown variables are left unchanged.""" - global _varprog + global _varprog, _uvarprog if '$' not in path: return path - if not _varprog: - import re - _varprog = re.compile(r'\$(\w+|\{[^}]*\})') + if isinstance(path, _unicode): + if not _uvarprog: + import re + _uvarprog = re.compile(ur'\$(\w+|\{[^}]*\})', re.UNICODE) + varprog = _uvarprog + encoding = sys.getfilesystemencoding() + else: + if not _varprog: + import re + _varprog = re.compile(r'\$(\w+|\{[^}]*\})') + varprog = _varprog + encoding = None i = 0 while True: - m = _varprog.search(path, i) + m = varprog.search(path, i) if not m: break i, j = m.span(0) name = m.group(1) if name.startswith('{') and name.endswith('}'): name = name[1:-1] + if encoding: + name = name.encode(encoding) if name in os.environ: tail = path[j:] - path = path[:i] + os.environ[name] + value = os.environ[name] + if encoding: + value = value.decode(encoding) + path = path[:i] + value i = len(path) path += tail else: @@ -367,7 +375,7 @@ def realpath(filename): path, ok = _joinrealpath('', filename, {}) return abspath(path) -# Join two paths, normalizing ang eliminating any symbolic links +# Join two paths, normalizing and eliminating any symbolic links # encountered in the second path. def _joinrealpath(path, rest, seen): if isabs(rest): diff --git a/PythonLib/min/pstats.py b/PythonLib/min/pstats.py index 4338994e..3908f47c 100644 --- a/PythonLib/min/pstats.py +++ b/PythonLib/min/pstats.py @@ -60,7 +60,7 @@ class Stats: """ def __init__(self, *args, **kwds): - # I can't figure out how to explictly specify a stream keyword arg + # I can't figure out how to explicitly specify a stream keyword arg # with *args: # def __init__(self, *args, stream=sys.stdout): ... # so I use **kwds and sqauwk if something unexpected is passed in. diff --git a/PythonLib/min/py_compile.py b/PythonLib/min/py_compile.py index c0bc1e4e..8334ed96 100644 --- a/PythonLib/min/py_compile.py +++ b/PythonLib/min/py_compile.py @@ -163,7 +163,7 @@ def main(args=None): except PyCompileError as error: # return value to indicate at least one failure rv = 1 - sys.stderr.write(error.msg) + sys.stderr.write("%s\n" % error.msg) return rv if __name__ == "__main__": diff --git a/PythonLib/min/pydoc.py b/PythonLib/min/pydoc.py index 72eb656c..b4b190f3 100644 --- a/PythonLib/min/pydoc.py +++ b/PythonLib/min/pydoc.py @@ -17,7 +17,8 @@ class or function within a module or module in a package. If the of all available modules. Run "pydoc -p " to start an HTTP server on a given port on the -local machine to generate documentation web pages. +local machine to generate documentation web pages. Port number 0 can be +used to get an arbitrary unused port. For platforms without a command line, "pydoc -g" starts the HTTP server and also pops up a little window for controlling it. @@ -27,7 +28,7 @@ class or function within a module or module in a package. If the Module docs for core modules are assumed to be in - http://docs.python.org/library/ + https://docs.python.org/library/ This can be overridden by setting the PYTHONDOCS environment variable to a different URL or to a local directory containing the Library @@ -81,6 +82,7 @@ def pathdirs(): def getdoc(object): """Get the doc string or comments for an object.""" result = inspect.getdoc(object) or inspect.getcomments(object) + result = _encode(result) return result and re.sub('^ *\n', '', rstrip(result)) or '' def splitdoc(doc): @@ -182,6 +184,36 @@ def fixup(data): return name, kind, cls, value return map(fixup, inspect.classify_class_attrs(object)) +# ----------------------------------------------------- Unicode support helpers + +try: + _unicode = unicode +except NameError: + # If Python is built without Unicode support, the unicode type + # will not exist. Fake one that nothing will match, and make + # the _encode function that do nothing. + class _unicode(object): + pass + _encoding = 'ascii' + def _encode(text, encoding='ascii'): + return text +else: + import locale + _encoding = locale.getpreferredencoding() + + def _encode(text, encoding=None): + if isinstance(text, unicode): + return text.encode(encoding or _encoding, 'xmlcharrefreplace') + else: + return text + +def _binstr(obj): + # Ensure that we have an encoded (binary) string representation of obj, + # even if it is a unicode string. + if isinstance(obj, _unicode): + return obj.encode(_encoding, 'xmlcharrefreplace') + return str(obj) + # ----------------------------------------------------- module manipulation def ispackage(path): @@ -223,7 +255,7 @@ def synopsis(filename, cache={}): if info and 'b' in info[2]: # binary modules have to be imported try: module = imp.load_module('__temp__', file, filename, info[1:]) except: return None - result = (module.__doc__ or '').splitlines()[0] + result = module.__doc__.splitlines()[0] if module.__doc__ else None del sys.modules['__temp__'] else: # text modules can be directly examined result = source_synopsis(file) @@ -342,7 +374,9 @@ def fail(self, object, name=None, *args): docmodule = docclass = docroutine = docother = docproperty = docdata = fail - def getdocloc(self, object): + def getdocloc(self, object, + basedir=os.path.join(sys.exec_prefix, "lib", + "python"+sys.version[0:3])): """Return the location of module docs or None""" try: @@ -351,9 +385,8 @@ def getdocloc(self, object): file = '(built-in)' docloc = os.environ.get("PYTHONDOCS", - "http://docs.python.org/library") - basedir = os.path.join(sys.exec_prefix, "lib", - "python"+sys.version[0:3]) + "https://docs.python.org/library") + basedir = os.path.normcase(basedir) if (isinstance(object, type(os)) and (object.__name__ in ('errno', 'exceptions', 'gc', 'imp', 'marshal', 'posix', 'signal', 'sys', @@ -361,10 +394,10 @@ def getdocloc(self, object): (file.startswith(basedir) and not file.startswith(os.path.join(basedir, 'site-packages')))) and object.__name__ not in ('xml.etree', 'test.pydoc_mod')): - if docloc.startswith("http://"): - docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__) + if docloc.startswith(("http://", "https://")): + docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__.lower()) else: - docloc = os.path.join(docloc, object.__name__ + ".html") + docloc = os.path.join(docloc, object.__name__.lower() + ".html") else: docloc = None return docloc @@ -424,12 +457,13 @@ class HTMLDoc(Doc): def page(self, title, contents): """Format an HTML page.""" - return ''' + return _encode(''' Python: %s + %s -''' % (title, contents) +''' % (title, contents), 'ascii') def heading(self, title, fgcol, bgcol, extras=''): """Format a page heading.""" @@ -549,10 +583,15 @@ def markup(self, text, escape=None, funcs={}, classes={}, methods={}): elif pep: url = 'http://www.python.org/dev/peps/pep-%04d/' % int(pep) results.append('%s' % (url, escape(all))) + elif selfdot: + # Create a link for methods like 'self.method(...)' + # and use for attributes like 'self.attr' + if text[end:end+1] == '(': + results.append('self.' + self.namelink(name, methods)) + else: + results.append('self.%s' % name) elif text[end:end+1] == '(': results.append(self.namelink(name, methods, funcs, classes)) - elif selfdot: - results.append('self.%s' % name) else: results.append(self.namelink(name, classes)) here = end @@ -606,12 +645,12 @@ def docmodule(self, object, name=None, mod=None, *ignored): filelink = '(built-in)' info = [] if hasattr(object, '__version__'): - version = str(object.__version__) + version = _binstr(object.__version__) if version[:11] == '$' + 'Revision: ' and version[-1:] == '$': version = strip(version[11:-1]) info.append('version %s' % self.escape(version)) if hasattr(object, '__date__'): - info.append(self.escape(str(object.__date__))) + info.append(self.escape(_binstr(object.__date__))) if info: head = head + ' (%s)' % join(info, ', ') docloc = self.getdocloc(object) @@ -694,11 +733,11 @@ def docmodule(self, object, name=None, mod=None, *ignored): result = result + self.bigsection( 'Data', '#ffffff', '#55aa55', join(contents, '
    \n')) if hasattr(object, '__author__'): - contents = self.markup(str(object.__author__), self.preformat) + contents = self.markup(_binstr(object.__author__), self.preformat) result = result + self.bigsection( 'Author', '#ffffff', '#7799ee', contents) if hasattr(object, '__credits__'): - contents = self.markup(str(object.__credits__), self.preformat) + contents = self.markup(_binstr(object.__credits__), self.preformat) result = result + self.bigsection( 'Credits', '#ffffff', '#7799ee', contents) @@ -1082,13 +1121,8 @@ def docmodule(self, object, name=None, mod=None): modpkgs.append(modname) modpkgs.sort() - try: - result = result + self.section( - 'PACKAGE CONTENTS', join(modpkgs, '\n')) - except: - result = result + self.section( - 'PACKAGE CONTENTS', 'Skipped due to Unicode Path') - + result = result + self.section( + 'PACKAGE CONTENTS', join(modpkgs, '\n')) # Detect submodules as sometimes created by C extensions submodules = [] @@ -1121,16 +1155,16 @@ def docmodule(self, object, name=None, mod=None): result = result + self.section('DATA', join(contents, '\n')) if hasattr(object, '__version__'): - version = str(object.__version__) + version = _binstr(object.__version__) if version[:11] == '$' + 'Revision: ' and version[-1:] == '$': version = strip(version[11:-1]) result = result + self.section('VERSION', version) if hasattr(object, '__date__'): - result = result + self.section('DATE', str(object.__date__)) + result = result + self.section('DATE', _binstr(object.__date__)) if hasattr(object, '__author__'): - result = result + self.section('AUTHOR', str(object.__author__)) + result = result + self.section('AUTHOR', _binstr(object.__author__)) if hasattr(object, '__credits__'): - result = result + self.section('CREDITS', str(object.__credits__)) + result = result + self.section('CREDITS', _binstr(object.__credits__)) return result def docclass(self, object, name=None, mod=None, *ignored): @@ -1345,6 +1379,8 @@ def getpager(): """Decide what method to use for paging through text.""" if type(sys.stdout) is not types.FileType: return plainpager + if not hasattr(sys.stdin, "isatty"): + return plainpager if not sys.stdin.isatty() or not sys.stdout.isatty(): return plainpager if 'PAGER' in os.environ: @@ -1380,7 +1416,7 @@ def pipepager(text, cmd): """Page through text by feeding it to another program.""" pipe = os.popen(cmd, 'w') try: - pipe.write(text) + pipe.write(_encode(text)) pipe.close() except IOError: pass # Ignore broken pipes caused by quitting the pager program. @@ -1390,7 +1426,7 @@ def tempfilepager(text, cmd): import tempfile filename = tempfile.mktemp() file = open(filename, 'w') - file.write(text) + file.write(_encode(text)) file.close() try: os.system(cmd + ' "' + filename + '"') @@ -1399,7 +1435,7 @@ def tempfilepager(text, cmd): def ttypager(text): """Page through text on a text terminal.""" - lines = split(plain(text), '\n') + lines = plain(_encode(plain(text), getattr(sys.stdout, 'encoding', _encoding))).split('\n') try: import tty fd = sys.stdin.fileno() @@ -1411,7 +1447,13 @@ def ttypager(text): getchar = lambda: sys.stdin.readline()[:-1][:1] try: - r = inc = os.environ.get('LINES', 25) - 1 + try: + h = int(os.environ.get('LINES', 0)) + except ValueError: + h = 0 + if h <= 1: + h = 25 + r = inc = h - 1 sys.stdout.write(join(lines[:inc], '\n') + '\n') while lines[r:]: sys.stdout.write('-- more --') @@ -1437,7 +1479,7 @@ def ttypager(text): def plainpager(text): """Simply print unformatted text. This is the ultimate fallback.""" - sys.stdout.write(plain(text)) + sys.stdout.write(_encode(plain(text), getattr(sys.stdout, 'encoding', _encoding))) def describe(thing): """Produce a short description of the given thing.""" @@ -1499,7 +1541,7 @@ def resolve(thing, forceload=0): """Given an object or a path to an object, get the object and its name.""" if isinstance(thing, str): object = locate(thing, forceload) - if not object: + if object is None: raise ImportError, 'no Python documentation found for %r' % thing return object, thing else: @@ -1565,7 +1607,7 @@ class Helper: # in pydoc_data/topics.py. # # CAUTION: if you change one of these dictionaries, be sure to adapt the - # list of needed labels in Doc/tools/sphinxext/pyspecific.py and + # list of needed labels in Doc/tools/pyspecific.py and # regenerate the pydoc_data/topics.py file by running # make pydoc-topics # in Doc/ and copying the output file into the Lib/ directory. @@ -1979,7 +2021,7 @@ def run(self, callback, key=None, completer=None, onerror=None): path = None else: module = loader.load_module(modname) - desc = (module.__doc__ or '').splitlines()[0] + desc = module.__doc__.splitlines()[0] if module.__doc__ else '' path = getattr(module,'__file__',None) if find(lower(modname + ' - ' + desc), key) >= 0: callback(path, modname, desc) @@ -2064,7 +2106,6 @@ class DocServer(BaseHTTPServer.HTTPServer): def __init__(self, port, callback): host = 'localhost' self.address = (host, port) - self.url = 'http://%s:%d/' % (host, port) self.callback = callback self.base.__init__(self, self.address, self.handler) @@ -2077,6 +2118,7 @@ def serve_until_quit(self): def server_activate(self): self.base.server_activate(self) + self.url = 'http://%s:%d/' % (self.address[0], self.server_port) if self.callback: self.callback(self) DocServer.base = BaseHTTPServer.HTTPServer @@ -2203,8 +2245,11 @@ def search(self, event=None): if self.scanner: self.scanner.quit = 1 self.scanner = ModuleScanner() + def onerror(modname): + pass threading.Thread(target=self.scanner.run, - args=(self.update, key, self.done)).start() + args=(self.update, key, self.done), + kwargs=dict(onerror=onerror)).start() def update(self, path, modname, desc): if modname[-9:] == '.__init__': @@ -2350,7 +2395,8 @@ def stopped(): Search for a keyword in the synopsis lines of all available modules. %s -p - Start an HTTP server on the given port on the local machine. + Start an HTTP server on the given port on the local machine. Port + number 0 can be used to get an arbitrary unused port. %s -g Pop up a graphical interface for finding and serving documentation. diff --git a/PythonLib/min/random.py b/PythonLib/min/random.py index 1a3a13ee..11fd35b0 100644 --- a/PythonLib/min/random.py +++ b/PythonLib/min/random.py @@ -98,17 +98,21 @@ def __init__(self, x=None): self.gauss_next = None def seed(self, a=None): - """Initialize internal state from hashable object. + """Initialize internal state of the random number generator. None or no argument seeds from current time or from an operating system specific randomness source if available. - If a is not None or an int or long, hash(a) is used instead. + If a is not None or is an int or long, hash(a) is used instead. + Hash values for some types are nondeterministic when the + PYTHONHASHSEED environment variable is enabled. """ if a is None: try: - a = long(_hexlify(_urandom(16)), 16) + # Seed with enough bytes to span the 19937 bit + # state space for the Mersenne Twister + a = long(_hexlify(_urandom(2500)), 16) except NotImplementedError: import time a = long(time.time() * 256) # use fractional seconds @@ -369,7 +373,10 @@ def triangular(self, low=0.0, high=1.0, mode=None): """ u = self.random() - c = 0.5 if mode is None else (mode - low) / (high - low) + try: + c = 0.5 if mode is None else (mode - low) / (high - low) + except ZeroDivisionError: + return low if u > c: u = 1.0 - u c = 1.0 - c diff --git a/PythonLib/min/re.py b/PythonLib/min/re.py index aab5d37e..671a9040 100644 --- a/PythonLib/min/re.py +++ b/PythonLib/min/re.py @@ -104,6 +104,10 @@ import sys import sre_compile import sre_parse +try: + import _locale +except ImportError: + _locale = None # public symbols __all__ = [ "match", "search", "sub", "subn", "split", "findall", @@ -225,11 +229,16 @@ def escape(pattern): def _compile(*key): # internal: compile pattern - cachekey = (type(key[0]),) + key - p = _cache.get(cachekey) - if p is not None: - return p pattern, flags = key + bypass_cache = flags & DEBUG + if not bypass_cache: + cachekey = (type(key[0]),) + key + try: + p, loc = _cache[cachekey] + if loc is None or loc == _locale.setlocale(_locale.LC_CTYPE): + return p + except KeyError: + pass if isinstance(pattern, _pattern_type): if flags: raise ValueError('Cannot process flags argument with a compiled pattern') @@ -240,9 +249,16 @@ def _compile(*key): p = sre_compile.compile(pattern, flags) except error, v: raise error, v # invalid expression - if len(_cache) >= _MAXCACHE: - _cache.clear() - _cache[cachekey] = p + if not bypass_cache: + if len(_cache) >= _MAXCACHE: + _cache.clear() + if p.flags & LOCALE: + if not _locale: + return p + loc = _locale.setlocale(_locale.LC_CTYPE) + else: + loc = None + _cache[cachekey] = p, loc return p def _compile_repl(*key): diff --git a/PythonLib/min/rfc822.py b/PythonLib/min/rfc822.py index b65d8da0..9a5b8a23 100644 --- a/PythonLib/min/rfc822.py +++ b/PythonLib/min/rfc822.py @@ -179,6 +179,11 @@ def readheaders(self): lst.append(line) self.dict[headerseen] = line[len(headerseen)+1:].strip() continue + elif headerseen is not None: + # An empty header name. These aren't allowed in HTTP, but it's + # probably a benign mistake. Don't add the header, just keep + # going. + continue else: # It's not a header line; throw it back and stop here. if not self.dict: @@ -202,7 +207,7 @@ def isheader(self, line): data in RFC 2822-like formats with special header formats. """ i = line.find(':') - if i > 0: + if i > -1: return line[:i].lower() return None @@ -956,7 +961,7 @@ def formatdate(timeval=None): According to RFC 1123, day and month names must always be in English. If not for that, this code could use strftime(). It - can't because strftime() honors the locale and could generated + can't because strftime() honors the locale and could generate non-English names. """ if timeval is None: diff --git a/PythonLib/min/rlcompleter.py b/PythonLib/min/rlcompleter.py index 6e4bd12a..7f61c67b 100644 --- a/PythonLib/min/rlcompleter.py +++ b/PythonLib/min/rlcompleter.py @@ -102,13 +102,16 @@ def global_matches(self, text): """ import keyword matches = [] + seen = {"__builtins__"} n = len(text) for word in keyword.kwlist: if word[:n] == text: + seen.add(word) matches.append(word) - for nspace in [__builtin__.__dict__, self.namespace]: + for nspace in [self.namespace, __builtin__.__dict__]: for word, val in nspace.items(): - if word[:n] == text and word != "__builtins__": + if word[:n] == text and word not in seen: + seen.add(word) matches.append(self._callable_postfix(val, word)) return matches @@ -135,20 +138,23 @@ def attr_matches(self, text): return [] # get the content of the object, except __builtins__ - words = dir(thisobject) - if "__builtins__" in words: - words.remove("__builtins__") + words = set(dir(thisobject)) + words.discard("__builtins__") if hasattr(thisobject, '__class__'): - words.append('__class__') - words.extend(get_class_members(thisobject.__class__)) + words.add('__class__') + words.update(get_class_members(thisobject.__class__)) matches = [] n = len(attr) for word in words: - if word[:n] == attr and hasattr(thisobject, word): - val = getattr(thisobject, word) + if word[:n] == attr: + try: + val = getattr(thisobject, word) + except Exception: + continue # Exclude properties that are not set word = self._callable_postfix(val, "%s.%s" % (expr, word)) matches.append(word) + matches.sort() return matches def get_class_members(klass): diff --git a/PythonLib/min/robotparser.py b/PythonLib/min/robotparser.py index ad3be947..a7137a30 100644 --- a/PythonLib/min/robotparser.py +++ b/PythonLib/min/robotparser.py @@ -7,7 +7,8 @@ 2) PSF license for Python 2.2 The robots.txt Exclusion Protocol is implemented as specified in - http://info.webcrawler.com/mak/projects/robots/norobots-rfc.html + http://www.robotstxt.org/norobots-rfc.txt + """ import urlparse import urllib @@ -60,7 +61,7 @@ def read(self): self.errcode = opener.errcode if self.errcode in (401, 403): self.disallow_all = True - elif self.errcode >= 400: + elif self.errcode >= 400 and self.errcode < 500: self.allow_all = True elif self.errcode == 200 and lines: self.parse(lines) @@ -86,6 +87,7 @@ def parse(self, lines): linenumber = 0 entry = Entry() + self.modified() for line in lines: linenumber += 1 if not line: @@ -131,6 +133,14 @@ def can_fetch(self, useragent, url): return False if self.allow_all: return True + + # Until the robots.txt file has been read or found not + # to exist, we must assume that no url is allowable. + # This prevents false positives when a user erroneously + # calls can_fetch() before calling read(). + if not self.last_checked: + return False + # search for given user agent matches # the first match counts parsed_url = urlparse.urlparse(urllib.unquote(url)) diff --git a/PythonLib/min/runpy.py b/PythonLib/min/runpy.py index c4d7cc26..ad4d077a 100644 --- a/PythonLib/min/runpy.py +++ b/PythonLib/min/runpy.py @@ -97,27 +97,35 @@ def _get_filename(loader, mod_name): return None # Helper to get the loader, code and filename for a module -def _get_module_details(mod_name): - loader = get_loader(mod_name) - if loader is None: - raise ImportError("No module named %s" % mod_name) - if loader.is_package(mod_name): +def _get_module_details(mod_name, error=ImportError): + try: + loader = get_loader(mod_name) + if loader is None: + raise error("No module named %s" % mod_name) + ispkg = loader.is_package(mod_name) + except ImportError as e: + raise error(format(e)) + if ispkg: if mod_name == "__main__" or mod_name.endswith(".__main__"): - raise ImportError("Cannot use package as __main__ module") + raise error("Cannot use package as __main__ module") + __import__(mod_name) # Do not catch exceptions initializing package try: pkg_main_name = mod_name + ".__main__" return _get_module_details(pkg_main_name) except ImportError, e: - raise ImportError(("%s; %r is a package and cannot " + + raise error(("%s; %r is a package and cannot " + "be directly executed") %(e, mod_name)) - code = loader.get_code(mod_name) + try: + code = loader.get_code(mod_name) + except ImportError as e: + raise error(format(e)) if code is None: - raise ImportError("No code object available for %s" % mod_name) + raise error("No code object available for %s" % mod_name) filename = _get_filename(loader, mod_name) return mod_name, loader, code, filename -def _get_main_module_details(): +def _get_main_module_details(error=ImportError): # Helper that gives a nicer error message when attempting to # execute a zipfile or directory by invoking __main__.py main_name = "__main__" @@ -125,10 +133,13 @@ def _get_main_module_details(): return _get_module_details(main_name) except ImportError as exc: if main_name in str(exc): - raise ImportError("can't find %r module in %r" % + raise error("can't find %r module in %r" % (main_name, sys.path[0])) raise +class _Error(Exception): + """Error that _run_module_as_main() should report without a traceback""" + # This function is the actual implementation of the -m switch and direct # execution of zipfiles and directories and is deliberately kept private. # This avoids a repeat of the situation where run_module() no longer met the @@ -148,11 +159,12 @@ def _run_module_as_main(mod_name, alter_argv=True): """ try: if alter_argv or mod_name != "__main__": # i.e. -m switch - mod_name, loader, code, fname = _get_module_details(mod_name) + mod_name, loader, code, fname = _get_module_details( + mod_name, _Error) else: # i.e. directory or zipfile execution - mod_name, loader, code, fname = _get_main_module_details() - except ImportError as exc: - msg = "%s: %s" % (sys.executable, str(exc)) + mod_name, loader, code, fname = _get_main_module_details(_Error) + except _Error as exc: + msg = "%s: %s" % (sys.executable, exc) sys.exit(msg) pkg_name = mod_name.rpartition('.')[0] main_globals = sys.modules["__main__"].__dict__ diff --git a/PythonLib/min/shelve.py b/PythonLib/min/shelve.py index c8cba858..4f1e49dc 100644 --- a/PythonLib/min/shelve.py +++ b/PythonLib/min/shelve.py @@ -140,17 +140,21 @@ def __delitem__(self, key): pass def close(self): - self.sync() - try: - self.dict.close() - except AttributeError: - pass - # Catch errors that may happen when close is called from __del__ - # because CPython is in interpreter shutdown. + if self.dict is None: + return try: - self.dict = _ClosedDict() - except (NameError, TypeError): - self.dict = None + self.sync() + try: + self.dict.close() + except AttributeError: + pass + finally: + # Catch errors that may happen when close is called from __del__ + # because CPython is in interpreter shutdown. + try: + self.dict = _ClosedDict() + except: + self.dict = None def __del__(self): if not hasattr(self, 'writeback'): diff --git a/PythonLib/min/shlex.py b/PythonLib/min/shlex.py index e7c8accd..7bef0ddc 100644 --- a/PythonLib/min/shlex.py +++ b/PythonLib/min/shlex.py @@ -230,7 +230,7 @@ def read_token(self): if self.debug >= 2: print "shlex: I see punctuation in word state" self.state = ' ' - if self.token: + if self.token or (self.posix and quoted): break # emit current token else: continue diff --git a/PythonLib/min/shutil.py b/PythonLib/min/shutil.py index 420802fa..3462f7c5 100644 --- a/PythonLib/min/shutil.py +++ b/PythonLib/min/shutil.py @@ -12,6 +12,20 @@ import collections import errno +try: + import zlib + del zlib + _ZLIB_SUPPORTED = True +except ImportError: + _ZLIB_SUPPORTED = False + +try: + import bz2 + del bz2 + _BZ2_SUPPORTED = True +except ImportError: + _BZ2_SUPPORTED = False + try: from pwd import getpwnam except ImportError: @@ -259,7 +273,8 @@ def onerror(*args): def _basename(path): # A basename() variant which first strips the trailing slash, if present. # Thus we always get the last component of the path, even for directories. - return os.path.basename(path.rstrip(os.path.sep)) + sep = os.path.sep + (os.path.altsep or '') + return os.path.basename(path.rstrip(sep)) def move(src, dst): """Recursively move a file or directory to another location. This is @@ -350,18 +365,21 @@ def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, Returns the output filename. """ - tar_compression = {'gzip': 'gz', 'bzip2': 'bz2', None: ''} - compress_ext = {'gzip': '.gz', 'bzip2': '.bz2'} - - # flags for compression program, each element of list will be an argument - if compress is not None and compress not in compress_ext.keys(): - raise ValueError, \ - ("bad value for 'compress': must be None, 'gzip' or 'bzip2'") + if compress is None: + tar_compression = '' + elif _ZLIB_SUPPORTED and compress == 'gzip': + tar_compression = 'gz' + elif _BZ2_SUPPORTED and compress == 'bzip2': + tar_compression = 'bz2' + else: + raise ValueError("bad value for 'compress', or compression format not " + "supported : {0}".format(compress)) - archive_name = base_name + '.tar' + compress_ext.get(compress, '') + compress_ext = '.' + tar_compression if compress else '' + archive_name = base_name + '.tar' + compress_ext archive_dir = os.path.dirname(archive_name) - if not os.path.exists(archive_dir): + if archive_dir and not os.path.exists(archive_dir): if logger is not None: logger.info("creating %s", archive_dir) if not dry_run: @@ -387,7 +405,7 @@ def _set_uid_gid(tarinfo): return tarinfo if not dry_run: - tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress]) + tar = tarfile.open(archive_name, 'w|%s' % tar_compression) try: tar.add(base_dir, filter=_set_uid_gid) finally: @@ -425,7 +443,7 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): zip_filename = base_name + ".zip" archive_dir = os.path.dirname(base_name) - if not os.path.exists(archive_dir): + if archive_dir and not os.path.exists(archive_dir): if logger is not None: logger.info("creating %s", archive_dir) if not dry_run: @@ -434,6 +452,7 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): # If zipfile module is not available, try spawning an external 'zip' # command. try: + import zlib import zipfile except ImportError: zipfile = None @@ -446,26 +465,40 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): zip_filename, base_dir) if not dry_run: - zip = zipfile.ZipFile(zip_filename, "w", - compression=zipfile.ZIP_DEFLATED) - - for dirpath, dirnames, filenames in os.walk(base_dir): - for name in filenames: - path = os.path.normpath(os.path.join(dirpath, name)) - if os.path.isfile(path): - zip.write(path, path) + with zipfile.ZipFile(zip_filename, "w", + compression=zipfile.ZIP_DEFLATED) as zf: + path = os.path.normpath(base_dir) + if path != os.curdir: + zf.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) + for dirpath, dirnames, filenames in os.walk(base_dir): + for name in sorted(dirnames): + path = os.path.normpath(os.path.join(dirpath, name)) + zf.write(path, path) if logger is not None: logger.info("adding '%s'", path) - zip.close() + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zf.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) return zip_filename _ARCHIVE_FORMATS = { - 'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), - 'bztar': (_make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"), 'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"), - 'zip': (_make_zipfile, [],"ZIP file") - } + 'zip': (_make_zipfile, [], "ZIP file") +} + +if _ZLIB_SUPPORTED: + _ARCHIVE_FORMATS['gztar'] = (_make_tarball, [('compress', 'gzip')], + "gzip'ed tar-file") + +if _BZ2_SUPPORTED: + _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], + "bzip2'ed tar-file") def get_archive_formats(): """Returns a list of supported formats for archiving and unarchiving. @@ -506,8 +539,8 @@ def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, """Create an archive file (eg. zip or tar). 'base_name' is the name of the file to create, minus any format-specific - extension; 'format' is the archive format: one of "zip", "tar", "bztar" - or "gztar". + extension; 'format' is the archive format: one of "zip", "tar", "gztar", + or "bztar". Or any other registered format. 'root_dir' is a directory that will be the root directory of the archive; ie. we typically chdir into 'root_dir' before creating the diff --git a/PythonLib/min/site.py b/PythonLib/min/site.py index f1b0ae8c..3b51e81d 100644 --- a/PythonLib/min/site.py +++ b/PythonLib/min/site.py @@ -295,15 +295,6 @@ def getsitepackages(): else: sitepackages.append(prefix) sitepackages.append(os.path.join(prefix, "lib", "site-packages")) - if sys.platform == "darwin": - # for framework builds *only* we add the standard Apple - # locations. - from sysconfig import get_config_var - framework = get_config_var("PYTHONFRAMEWORK") - if framework: - sitepackages.append( - os.path.join("/Library", framework, - sys.version[:3], "site-packages")) return sitepackages def addsitepackages(known_paths): @@ -436,7 +427,7 @@ def setcopyright(): for supporting Python development. See www.python.org for more information.""") here = os.path.dirname(os.__file__) __builtin__.license = _Printer( - "license", "See http://www.python.org/%.3s/license.html" % sys.version, + "license", "See https://www.python.org/psf/license/", ["LICENSE.txt", "LICENSE"], [os.path.join(here, os.pardir), here, os.curdir]) diff --git a/PythonLib/min/smtplib.py b/PythonLib/min/smtplib.py index 7f078400..0c610654 100644 --- a/PythonLib/min/smtplib.py +++ b/PythonLib/min/smtplib.py @@ -57,6 +57,7 @@ SMTP_PORT = 25 SMTP_SSL_PORT = 465 CRLF = "\r\n" +_MAXLINE = 8192 # more than 8 times larger than RFC 821, 4.5.3 OLDSTYLE_AUTH = re.compile(r"auth=(.*)", re.I) @@ -179,10 +180,14 @@ class SSLFakeFile: def __init__(self, sslobj): self.sslobj = sslobj - def readline(self): + def readline(self, size=-1): + if size < 0: + size = None str = "" chr = None while chr != "\n": + if size is not None and len(str) >= size: + break chr = self.sslobj.read(1) if not chr: break @@ -250,6 +255,7 @@ def __init__(self, host='', port=0, local_hostname=None, if host: (code, msg) = self.connect(host, port) if code != 220: + self.close() raise SMTPConnectError(code, msg) if local_hostname is not None: self.local_hostname = local_hostname @@ -353,7 +359,7 @@ def getreply(self): self.file = self.sock.makefile('rb') while 1: try: - line = self.file.readline() + line = self.file.readline(_MAXLINE + 1) except socket.error as e: self.close() raise SMTPServerDisconnected("Connection unexpectedly closed: " @@ -363,6 +369,8 @@ def getreply(self): raise SMTPServerDisconnected("Connection unexpectedly closed") if self.debuglevel > 0: print>>stderr, 'reply:', repr(line) + if len(line) > _MAXLINE: + raise SMTPResponseException(500, "Line too long.") resp.append(line[4:].strip()) code = line[:3] # Check that the error code is syntactically correct. @@ -649,6 +657,11 @@ def starttls(self, keyfile=None, certfile=None): self.ehlo_resp = None self.esmtp_features = {} self.does_esmtp = 0 + else: + # RFC 3207: + # 501 Syntax error (no parameters allowed) + # 454 TLS not available due to temporary reason + raise SMTPResponseException(resp, reply) return (resp, reply) def sendmail(self, from_addr, to_addrs, msg, mail_options=[], @@ -743,17 +756,25 @@ def sendmail(self, from_addr, to_addrs, msg, mail_options=[], def close(self): """Close the connection to the SMTP server.""" - if self.file: - self.file.close() - self.file = None - if self.sock: - self.sock.close() - self.sock = None + try: + file = self.file + self.file = None + if file: + file.close() + finally: + sock = self.sock + self.sock = None + if sock: + sock.close() def quit(self): """Terminate the SMTP session.""" res = self.docmd("quit") + # A new EHLO is required after reconnecting with connect() + self.ehlo_resp = self.helo_resp = None + self.esmtp_features = {} + self.does_esmtp = False self.close() return res diff --git a/PythonLib/min/socket.py b/PythonLib/min/socket.py index aac04f6c..437634cc 100644 --- a/PythonLib/min/socket.py +++ b/PythonLib/min/socket.py @@ -67,7 +67,6 @@ def ssl(sock, keyfile=None, certfile=None): from _ssl import SSLError as sslerror from _ssl import \ RAND_add, \ - RAND_egd, \ RAND_status, \ SSL_ERROR_ZERO_RETURN, \ SSL_ERROR_WANT_READ, \ @@ -78,6 +77,11 @@ def ssl(sock, keyfile=None, certfile=None): SSL_ERROR_WANT_CONNECT, \ SSL_ERROR_EOF, \ SSL_ERROR_INVALID_ERROR_CODE + try: + from _ssl import RAND_egd + except ImportError: + # LibreSSL does not provide RAND_egd + pass import os, sys, warnings @@ -545,7 +549,7 @@ def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT, global default timeout setting returned by :func:`getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. + A host of '' or port 0 tells the OS to use the default. """ host, port = address diff --git a/PythonLib/min/sre_compile.py b/PythonLib/min/sre_compile.py index 471753e9..b6689fa7 100644 --- a/PythonLib/min/sre_compile.py +++ b/PythonLib/min/sre_compile.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # # Secret Labs' Regular Expression Engine # @@ -21,14 +22,45 @@ else: MAXCODE = 0xFFFFFFFFL -def _identityfunction(x): - return x - _LITERAL_CODES = set([LITERAL, NOT_LITERAL]) _REPEATING_CODES = set([REPEAT, MIN_REPEAT, MAX_REPEAT]) _SUCCESS_CODES = set([SUCCESS, FAILURE]) _ASSERT_CODES = set([ASSERT, ASSERT_NOT]) +# Sets of lowercase characters which have the same uppercase. +_equivalences = ( + # LATIN SMALL LETTER I, LATIN SMALL LETTER DOTLESS I + (0x69, 0x131), # iı + # LATIN SMALL LETTER S, LATIN SMALL LETTER LONG S + (0x73, 0x17f), # sÅ¿ + # MICRO SIGN, GREEK SMALL LETTER MU + (0xb5, 0x3bc), # µμ + # COMBINING GREEK YPOGEGRAMMENI, GREEK SMALL LETTER IOTA, GREEK PROSGEGRAMMENI + (0x345, 0x3b9, 0x1fbe), # \u0345ιι + # GREEK SMALL LETTER BETA, GREEK BETA SYMBOL + (0x3b2, 0x3d0), # Î²Ï + # GREEK SMALL LETTER EPSILON, GREEK LUNATE EPSILON SYMBOL + (0x3b5, 0x3f5), # εϵ + # GREEK SMALL LETTER THETA, GREEK THETA SYMBOL + (0x3b8, 0x3d1), # θϑ + # GREEK SMALL LETTER KAPPA, GREEK KAPPA SYMBOL + (0x3ba, 0x3f0), # κϰ + # GREEK SMALL LETTER PI, GREEK PI SYMBOL + (0x3c0, 0x3d6), # πϖ + # GREEK SMALL LETTER RHO, GREEK RHO SYMBOL + (0x3c1, 0x3f1), # Ïϱ + # GREEK SMALL LETTER FINAL SIGMA, GREEK SMALL LETTER SIGMA + (0x3c2, 0x3c3), # ςσ + # GREEK SMALL LETTER PHI, GREEK PHI SYMBOL + (0x3c6, 0x3d5), # φϕ + # LATIN SMALL LETTER S WITH DOT ABOVE, LATIN SMALL LETTER LONG S WITH DOT ABOVE + (0x1e61, 0x1e9b), # ṡẛ +) + +# Maps the lowercase code to lowercase codes which have the same uppercase. +_ignorecase_fixes = {i: tuple(j for j in t if i != j) + for t in _equivalences for i in t} + def _compile(code, pattern, flags): # internal: compile a (sub)pattern emit = code.append @@ -37,11 +69,29 @@ def _compile(code, pattern, flags): REPEATING_CODES = _REPEATING_CODES SUCCESS_CODES = _SUCCESS_CODES ASSERT_CODES = _ASSERT_CODES + if (flags & SRE_FLAG_IGNORECASE and + not (flags & SRE_FLAG_LOCALE) and + flags & SRE_FLAG_UNICODE): + fixes = _ignorecase_fixes + else: + fixes = None for op, av in pattern: if op in LITERAL_CODES: if flags & SRE_FLAG_IGNORECASE: - emit(OPCODES[OP_IGNORE[op]]) - emit(_sre.getlower(av, flags)) + lo = _sre.getlower(av, flags) + if fixes and lo in fixes: + emit(OPCODES[IN_IGNORE]) + skip = _len(code); emit(0) + if op is NOT_LITERAL: + emit(OPCODES[NEGATE]) + for k in (lo,) + fixes[lo]: + emit(OPCODES[LITERAL]) + emit(k) + emit(OPCODES[FAILURE]) + code[skip] = _len(code) - skip + else: + emit(OPCODES[OP_IGNORE[op]]) + emit(lo) else: emit(OPCODES[op]) emit(av) @@ -52,9 +102,9 @@ def fixup(literal, flags=flags): return _sre.getlower(literal, flags) else: emit(OPCODES[op]) - fixup = _identityfunction + fixup = None skip = _len(code); emit(0) - _compile_charset(av, flags, code, fixup) + _compile_charset(av, flags, code, fixup, fixes) code[skip] = _len(code) - skip elif op is ANY: if flags & SRE_FLAG_DOTALL: @@ -175,20 +225,19 @@ def fixup(literal, flags=flags): else: raise ValueError, ("unsupported operand type", op) -def _compile_charset(charset, flags, code, fixup=None): +def _compile_charset(charset, flags, code, fixup=None, fixes=None): # compile charset subprogram emit = code.append - if fixup is None: - fixup = _identityfunction - for op, av in _optimize_charset(charset, fixup): + for op, av in _optimize_charset(charset, fixup, fixes, + flags & SRE_FLAG_UNICODE): emit(OPCODES[op]) if op is NEGATE: pass elif op is LITERAL: - emit(fixup(av)) + emit(av) elif op is RANGE: - emit(fixup(av[0])) - emit(fixup(av[1])) + emit(av[0]) + emit(av[1]) elif op is CHARSET: code.extend(av) elif op is BIGCHARSET: @@ -204,152 +253,177 @@ def _compile_charset(charset, flags, code, fixup=None): raise error, "internal: unsupported set operator" emit(OPCODES[FAILURE]) -def _optimize_charset(charset, fixup): +def _optimize_charset(charset, fixup, fixes, isunicode): # internal: optimize character set out = [] - outappend = out.append - charmap = [0]*256 - try: - for op, av in charset: - if op is NEGATE: - outappend((op, av)) - elif op is LITERAL: - charmap[fixup(av)] = 1 - elif op is RANGE: - for i in range(fixup(av[0]), fixup(av[1])+1): - charmap[i] = 1 - elif op is CATEGORY: - # XXX: could append to charmap tail - return charset # cannot compress - except IndexError: - # character set contains unicode characters - return _optimize_unicode(charset, fixup) + tail = [] + charmap = bytearray(256) + for op, av in charset: + while True: + try: + if op is LITERAL: + if fixup: + i = fixup(av) + charmap[i] = 1 + if fixes and i in fixes: + for k in fixes[i]: + charmap[k] = 1 + else: + charmap[av] = 1 + elif op is RANGE: + r = range(av[0], av[1]+1) + if fixup: + r = map(fixup, r) + if fixup and fixes: + for i in r: + charmap[i] = 1 + if i in fixes: + for k in fixes[i]: + charmap[k] = 1 + else: + for i in r: + charmap[i] = 1 + elif op is NEGATE: + out.append((op, av)) + else: + tail.append((op, av)) + except IndexError: + if len(charmap) == 256: + # character set contains non-UCS1 character codes + charmap += b'\0' * 0xff00 + continue + # character set contains non-BMP character codes + if fixup and isunicode and op is RANGE: + lo, hi = av + ranges = [av] + # There are only two ranges of cased astral characters: + # 10400-1044F (Deseret) and 118A0-118DF (Warang Citi). + _fixup_range(max(0x10000, lo), min(0x11fff, hi), + ranges, fixup) + for lo, hi in ranges: + if lo == hi: + tail.append((LITERAL, hi)) + else: + tail.append((RANGE, (lo, hi))) + else: + tail.append((op, av)) + break + # compress character map - i = p = n = 0 runs = [] - runsappend = runs.append - for c in charmap: - if c: - if n == 0: - p = i - n = n + 1 - elif n: - runsappend((p, n)) - n = 0 - i = i + 1 - if n: - runsappend((p, n)) - if len(runs) <= 2: + q = 0 + while True: + p = charmap.find(b'\1', q) + if p < 0: + break + if len(runs) >= 2: + runs = None + break + q = charmap.find(b'\0', p) + if q < 0: + runs.append((p, len(charmap))) + break + runs.append((p, q)) + if runs is not None: # use literal/range - for p, n in runs: - if n == 1: - outappend((LITERAL, p)) + for p, q in runs: + if q - p == 1: + out.append((LITERAL, p)) else: - outappend((RANGE, (p, p+n-1))) - if len(out) < len(charset): + out.append((RANGE, (p, q - 1))) + out += tail + # if the case was changed or new representation is more compact + if fixup or len(out) < len(charset): return out - else: - # use bitmap + # else original character set is good enough + return charset + + # use bitmap + if len(charmap) == 256: data = _mk_bitmap(charmap) - outappend((CHARSET, data)) + out.append((CHARSET, data)) + out += tail return out - return charset -def _mk_bitmap(bits): - data = [] - dataappend = data.append - if _sre.CODESIZE == 2: - start = (1, 0) - else: - start = (1L, 0L) - m, v = start - for c in bits: - if c: - v = v + m - m = m + m - if m > MAXCODE: - dataappend(v) - m, v = start - return data - -# To represent a big charset, first a bitmap of all characters in the -# set is constructed. Then, this bitmap is sliced into chunks of 256 -# characters, duplicate chunks are eliminated, and each chunk is -# given a number. In the compiled expression, the charset is -# represented by a 32-bit word sequence, consisting of one word for -# the number of different chunks, a sequence of 256 bytes (64 words) -# of chunk numbers indexed by their original chunk position, and a -# sequence of 256-bit chunks (8 words each). - -# Compression is normally good: in a typical charset, large ranges of -# Unicode will be either completely excluded (e.g. if only cyrillic -# letters are to be matched), or completely included (e.g. if large -# subranges of Kanji match). These ranges will be represented by -# chunks of all one-bits or all zero-bits. - -# Matching can be also done efficiently: the more significant byte of -# the Unicode character is an index into the chunk number, and the -# less significant byte is a bit index in the chunk (just like the -# CHARSET matching). - -# In UCS-4 mode, the BIGCHARSET opcode still supports only subsets -# of the basic multilingual plane; an efficient representation -# for all of Unicode has not yet been developed. This means, -# in particular, that negated charsets cannot be represented as -# bigcharsets. - -def _optimize_unicode(charset, fixup): - try: - import array - except ImportError: - return charset - charmap = [0]*65536 - negate = 0 - try: - for op, av in charset: - if op is NEGATE: - negate = 1 - elif op is LITERAL: - charmap[fixup(av)] = 1 - elif op is RANGE: - for i in xrange(fixup(av[0]), fixup(av[1])+1): - charmap[i] = 1 - elif op is CATEGORY: - # XXX: could expand category - return charset # cannot compress - except IndexError: - # non-BMP characters - return charset - if negate: - if sys.maxunicode != 65535: - # XXX: negation does not work with big charsets - return charset - for i in xrange(65536): - charmap[i] = not charmap[i] + # To represent a big charset, first a bitmap of all characters in the + # set is constructed. Then, this bitmap is sliced into chunks of 256 + # characters, duplicate chunks are eliminated, and each chunk is + # given a number. In the compiled expression, the charset is + # represented by a 32-bit word sequence, consisting of one word for + # the number of different chunks, a sequence of 256 bytes (64 words) + # of chunk numbers indexed by their original chunk position, and a + # sequence of 256-bit chunks (8 words each). + + # Compression is normally good: in a typical charset, large ranges of + # Unicode will be either completely excluded (e.g. if only cyrillic + # letters are to be matched), or completely included (e.g. if large + # subranges of Kanji match). These ranges will be represented by + # chunks of all one-bits or all zero-bits. + + # Matching can be also done efficiently: the more significant byte of + # the Unicode character is an index into the chunk number, and the + # less significant byte is a bit index in the chunk (just like the + # CHARSET matching). + + # In UCS-4 mode, the BIGCHARSET opcode still supports only subsets + # of the basic multilingual plane; an efficient representation + # for all of Unicode has not yet been developed. + + charmap = bytes(charmap) # should be hashable comps = {} - mapping = [0]*256 + mapping = bytearray(256) block = 0 - data = [] - for i in xrange(256): - chunk = tuple(charmap[i*256:(i+1)*256]) - new = comps.setdefault(chunk, block) - mapping[i] = new - if new == block: - block = block + 1 - data = data + _mk_bitmap(chunk) - header = [block] + data = bytearray() + for i in range(0, 65536, 256): + chunk = charmap[i: i + 256] + if chunk in comps: + mapping[i // 256] = comps[chunk] + else: + mapping[i // 256] = comps[chunk] = block + block += 1 + data += chunk + data = _mk_bitmap(data) + data[0:0] = [block] + _bytes_to_codes(mapping) + out.append((BIGCHARSET, data)) + out += tail + return out + +def _fixup_range(lo, hi, ranges, fixup): + for i in map(fixup, range(lo, hi+1)): + for k, (lo, hi) in enumerate(ranges): + if i < lo: + if l == lo - 1: + ranges[k] = (i, hi) + else: + ranges.insert(k, (i, i)) + break + elif i > hi: + if i == hi + 1: + ranges[k] = (lo, i) + break + else: + break + else: + ranges.append((i, i)) + +_CODEBITS = _sre.CODESIZE * 8 +_BITS_TRANS = b'0' + b'1' * 255 +def _mk_bitmap(bits, _CODEBITS=_CODEBITS, _int=int): + s = bytes(bits).translate(_BITS_TRANS)[::-1] + return [_int(s[i - _CODEBITS: i], 2) + for i in range(len(s), 0, -_CODEBITS)] + +def _bytes_to_codes(b): + # Convert block indices to word array + import array if _sre.CODESIZE == 2: code = 'H' else: code = 'I' - # Convert block indices to byte array of 256 bytes - mapping = array.array('B', mapping).tostring() - # Convert byte array to word array - mapping = array.array(code, mapping) - assert mapping.itemsize == _sre.CODESIZE - header = header + mapping.tolist() - data[0:0] = header - return [(BIGCHARSET, data)] + a = array.array(code, bytes(b)) + assert a.itemsize == _sre.CODESIZE + assert len(a) * a.itemsize == len(b) + return a.tolist() def _simple(av): # check if av is a "simple" operator @@ -361,7 +435,7 @@ def _compile_info(code, pattern, flags): # this contains min/max pattern width, and an optional literal # prefix or a character map lo, hi = pattern.getwidth() - if lo == 0: + if not lo and hi: return # not worth it # look for a literal prefix prefix = [] diff --git a/PythonLib/min/sre_parse.py b/PythonLib/min/sre_parse.py index e37e2cfc..3f6ddd26 100644 --- a/PythonLib/min/sre_parse.py +++ b/PythonLib/min/sre_parse.py @@ -23,6 +23,7 @@ OCTDIGITS = set("01234567") HEXDIGITS = set("0123456789abcdefABCDEF") +ASCIILETTERS = set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") WHITESPACE = set(" \t\n\r\v\f") @@ -69,6 +70,8 @@ def __init__(self): self.open = [] self.groups = 1 self.groupdict = {} + self.lookbehind = 0 + def opengroup(self, name=None): gid = self.groups self.groups = gid + 1 @@ -94,33 +97,42 @@ def __init__(self, pattern, data=None): self.data = data self.width = None def dump(self, level=0): - nl = 1 - seqtypes = type(()), type([]) + seqtypes = (tuple, list) for op, av in self.data: - print level*" " + op,; nl = 0 - if op == "in": + print level*" " + op, + if op == IN: # member sublanguage - print; nl = 1 + print for op, a in av: print (level+1)*" " + op, a - elif op == "branch": - print; nl = 1 - i = 0 - for a in av[1]: - if i > 0: + elif op == BRANCH: + print + for i, a in enumerate(av[1]): + if i: print level*" " + "or" - a.dump(level+1); nl = 1 - i = i + 1 - elif type(av) in seqtypes: + a.dump(level+1) + elif op == GROUPREF_EXISTS: + condgroup, item_yes, item_no = av + print condgroup + item_yes.dump(level+1) + if item_no: + print level*" " + "else" + item_no.dump(level+1) + elif isinstance(av, seqtypes): + nl = 0 for a in av: if isinstance(a, SubPattern): - if not nl: print - a.dump(level+1); nl = 1 + if not nl: + print + a.dump(level+1) + nl = 1 else: - print a, ; nl = 0 + print a, + nl = 0 + if not nl: + print else: - print av, ; nl = 0 - if not nl: print + print av def __repr__(self): return repr(self.data) def __len__(self): @@ -222,7 +234,7 @@ def isname(name): return False return True -def _class_escape(source, escape): +def _class_escape(source, escape, nested): # handle escape code inside character class code = ESCAPES.get(escape) if code: @@ -249,12 +261,21 @@ def _class_escape(source, escape): elif c in DIGITS: raise error, "bogus escape: %s" % repr(escape) if len(escape) == 2: + if sys.py3kwarning and c in ASCIILETTERS: + import warnings + if c in 'Uu': + warnings.warn('bad escape %s; Unicode escapes are ' + 'supported only since Python 3.3' % escape, + FutureWarning, stacklevel=nested + 6) + else: + warnings.warnpy3k('bad escape %s' % escape, + DeprecationWarning, stacklevel=nested + 6) return LITERAL, ord(escape[1]) except ValueError: pass raise error, "bogus escape: %s" % repr(escape) -def _escape(source, escape, state): +def _escape(source, escape, state, nested): # handle escape code in expression code = CATEGORIES.get(escape) if code: @@ -290,22 +311,36 @@ def _escape(source, escape, state): if group < state.groups: if not state.checkgroup(group): raise error, "cannot refer to open group" + if state.lookbehind: + import warnings + warnings.warn('group references in lookbehind ' + 'assertions are not supported', + RuntimeWarning, stacklevel=nested + 6) return GROUPREF, group raise ValueError if len(escape) == 2: + if sys.py3kwarning and c in ASCIILETTERS: + import warnings + if c in 'Uu': + warnings.warn('bad escape %s; Unicode escapes are ' + 'supported only since Python 3.3' % escape, + FutureWarning, stacklevel=nested + 6) + else: + warnings.warnpy3k('bad escape %s' % escape, + DeprecationWarning, stacklevel=nested + 6) return LITERAL, ord(escape[1]) except ValueError: pass raise error, "bogus escape: %s" % repr(escape) -def _parse_sub(source, state, nested=1): +def _parse_sub(source, state, nested): # parse an alternation: a|b|c items = [] itemsappend = items.append sourcematch = source.match while 1: - itemsappend(_parse(source, state)) + itemsappend(_parse(source, state, nested + 1)) if sourcematch("|"): continue if not nested: @@ -357,10 +392,10 @@ def _parse_sub(source, state, nested=1): subpattern.append((BRANCH, (None, items))) return subpattern -def _parse_sub_cond(source, state, condgroup): - item_yes = _parse(source, state) +def _parse_sub_cond(source, state, condgroup, nested): + item_yes = _parse(source, state, nested + 1) if source.match("|"): - item_no = _parse(source, state) + item_no = _parse(source, state, nested + 1) if source.match("|"): raise error, "conditional backref with more than two branches" else: @@ -376,7 +411,7 @@ def _parse_sub_cond(source, state, condgroup): _LOOKBEHINDASSERTCHARS = set("=!") _REPEATCODES = set([MIN_REPEAT, MAX_REPEAT]) -def _parse(source, state): +def _parse(source, state, nested): # parse a simple pattern subpattern = SubPattern(state) @@ -427,7 +462,7 @@ def _parse(source, state): if this == "]" and set != start: break elif this and this[0] == "\\": - code1 = _class_escape(source, this) + code1 = _class_escape(source, this, nested + 1) elif this: code1 = LITERAL, ord(this) else: @@ -443,7 +478,7 @@ def _parse(source, state): break elif this: if this[0] == "\\": - code2 = _class_escape(source, this) + code2 = _class_escape(source, this, nested + 1) else: code2 = LITERAL, ord(this) if code1[0] != LITERAL or code2[0] != LITERAL: @@ -567,7 +602,13 @@ def _parse(source, state): "%r" % name) gid = state.groupdict.get(name) if gid is None: - raise error, "unknown group name" + msg = "unknown group name: {0!r}".format(name) + raise error(msg) + if state.lookbehind: + import warnings + warnings.warn('group references in lookbehind ' + 'assertions are not supported', + RuntimeWarning, stacklevel=nested + 6) subpatternappend((GROUPREF, gid)) continue else: @@ -596,7 +637,10 @@ def _parse(source, state): raise error, "syntax error" dir = -1 # lookbehind char = sourceget() - p = _parse_sub(source, state) + state.lookbehind += 1 + p = _parse_sub(source, state, nested + 1) + if dir < 0: + state.lookbehind -= 1 if not sourcematch(")"): raise error, "unbalanced parenthesis" if char == "=": @@ -620,12 +664,18 @@ def _parse(source, state): if isname(condname): condgroup = state.groupdict.get(condname) if condgroup is None: - raise error, "unknown group name" + msg = "unknown group name: {0!r}".format(condname) + raise error(msg) else: try: condgroup = int(condname) except ValueError: raise error, "bad character in group name" + if state.lookbehind: + import warnings + warnings.warn('group references in lookbehind ' + 'assertions are not supported', + RuntimeWarning, stacklevel=nested + 6) else: # flags if not source.next in FLAGS: @@ -640,9 +690,9 @@ def _parse(source, state): else: group = state.opengroup(name) if condgroup: - p = _parse_sub_cond(source, state, condgroup) + p = _parse_sub_cond(source, state, condgroup, nested + 1) else: - p = _parse_sub(source, state) + p = _parse_sub(source, state, nested + 1) if not sourcematch(")"): raise error, "unbalanced parenthesis" if group is not None: @@ -664,7 +714,7 @@ def _parse(source, state): subpattern.append((AT, AT_END)) elif this and this[0] == "\\": - code = _escape(source, this, state) + code = _escape(source, this, state, nested + 1) subpatternappend(code) else: @@ -683,6 +733,12 @@ def parse(str, flags=0, pattern=None): pattern.str = str p = _parse_sub(source, pattern, 0) + if (sys.py3kwarning and + (p.pattern.flags & SRE_FLAG_LOCALE) and + (p.pattern.flags & SRE_FLAG_UNICODE)): + import warnings + warnings.warnpy3k("LOCALE and UNICODE flags are incompatible", + DeprecationWarning, stacklevel=5) tail = source.get() if tail == ")": @@ -690,14 +746,14 @@ def parse(str, flags=0, pattern=None): elif tail: raise error, "bogus characters at end of regular expression" - if flags & SRE_FLAG_DEBUG: - p.dump() - if not (flags & SRE_FLAG_VERBOSE) and p.pattern.flags & SRE_FLAG_VERBOSE: # the VERBOSE flag was switched on inside the pattern. to be # on the safe side, we'll parse the whole thing again... return parse(str, p.pattern.flags) + if flags & SRE_FLAG_DEBUG: + p.dump() + return p def parse_template(source, pattern): @@ -746,7 +802,8 @@ def literal(literal, p=p, pappend=a): try: index = pattern.groupindex[name] except KeyError: - raise IndexError, "unknown group name" + msg = "unknown group name: {0!r}".format(name) + raise IndexError(msg) a((MARK, index)) elif c == "0": if s.next in OCTDIGITS: @@ -769,7 +826,10 @@ def literal(literal, p=p, pappend=a): try: this = makechar(ESCAPES[this][1]) except KeyError: - pass + if sys.py3kwarning and c in ASCIILETTERS: + import warnings + warnings.warnpy3k('bad escape %s' % this, + DeprecationWarning, stacklevel=4) literal(this) else: literal(this) diff --git a/PythonLib/min/ssl.py b/PythonLib/min/ssl.py index 329b9d10..f28c8638 100644 --- a/PythonLib/min/ssl.py +++ b/PythonLib/min/ssl.py @@ -1,8 +1,7 @@ # Wrapper module for _ssl, providing some additional facilities # implemented in Python. Written by Bill Janssen. -"""\ -This module provides some more Pythonic support for SSL. +"""This module provides some more Pythonic support for SSL. Object types: @@ -52,62 +51,521 @@ PROTOCOL_SSLv2 PROTOCOL_SSLv3 PROTOCOL_SSLv23 +PROTOCOL_TLS PROTOCOL_TLSv1 +PROTOCOL_TLSv1_1 +PROTOCOL_TLSv1_2 + +The following constants identify various SSL alert message descriptions as per +http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6 + +ALERT_DESCRIPTION_CLOSE_NOTIFY +ALERT_DESCRIPTION_UNEXPECTED_MESSAGE +ALERT_DESCRIPTION_BAD_RECORD_MAC +ALERT_DESCRIPTION_RECORD_OVERFLOW +ALERT_DESCRIPTION_DECOMPRESSION_FAILURE +ALERT_DESCRIPTION_HANDSHAKE_FAILURE +ALERT_DESCRIPTION_BAD_CERTIFICATE +ALERT_DESCRIPTION_UNSUPPORTED_CERTIFICATE +ALERT_DESCRIPTION_CERTIFICATE_REVOKED +ALERT_DESCRIPTION_CERTIFICATE_EXPIRED +ALERT_DESCRIPTION_CERTIFICATE_UNKNOWN +ALERT_DESCRIPTION_ILLEGAL_PARAMETER +ALERT_DESCRIPTION_UNKNOWN_CA +ALERT_DESCRIPTION_ACCESS_DENIED +ALERT_DESCRIPTION_DECODE_ERROR +ALERT_DESCRIPTION_DECRYPT_ERROR +ALERT_DESCRIPTION_PROTOCOL_VERSION +ALERT_DESCRIPTION_INSUFFICIENT_SECURITY +ALERT_DESCRIPTION_INTERNAL_ERROR +ALERT_DESCRIPTION_USER_CANCELLED +ALERT_DESCRIPTION_NO_RENEGOTIATION +ALERT_DESCRIPTION_UNSUPPORTED_EXTENSION +ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE +ALERT_DESCRIPTION_UNRECOGNIZED_NAME +ALERT_DESCRIPTION_BAD_CERTIFICATE_STATUS_RESPONSE +ALERT_DESCRIPTION_BAD_CERTIFICATE_HASH_VALUE +ALERT_DESCRIPTION_UNKNOWN_PSK_IDENTITY """ import textwrap +import re +import sys +import os +from collections import namedtuple +from contextlib import closing import _ssl # if we can't import it, let the error propagate from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION -from _ssl import SSLError +from _ssl import _SSLContext +from _ssl import ( + SSLError, SSLZeroReturnError, SSLWantReadError, SSLWantWriteError, + SSLSyscallError, SSLEOFError, + ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import RAND_status, RAND_egd, RAND_add -from _ssl import \ - SSL_ERROR_ZERO_RETURN, \ - SSL_ERROR_WANT_READ, \ - SSL_ERROR_WANT_WRITE, \ - SSL_ERROR_WANT_X509_LOOKUP, \ - SSL_ERROR_SYSCALL, \ - SSL_ERROR_SSL, \ - SSL_ERROR_WANT_CONNECT, \ - SSL_ERROR_EOF, \ - SSL_ERROR_INVALID_ERROR_CODE -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import txt2obj as _txt2obj, nid2obj as _nid2obj +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 - _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd + pass + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('ALERT_DESCRIPTION_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') +_import_symbols('VERIFY_') + +from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN + +from _ssl import _OPENSSL_API_VERSION + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() + if name.startswith('PROTOCOL_') + and name != 'PROTOCOL_SSLv23'} +PROTOCOL_SSLv23 = PROTOCOL_TLS + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import socket, _fileobject, _delegate_methods, error as socket_error -from socket import getnameinfo as _getnameinfo +if sys.platform == "win32": + from _ssl import enum_certificates, enum_crls + +from socket import socket, AF_INET, SOCK_STREAM, create_connection +from socket import SOL_SOCKET, SO_TYPE import base64 # for DER-to-PEM translation import errno +import warnings + +if _ssl.HAS_TLS_UNIQUE: + CHANNEL_BINDING_TYPES = ['tls-unique'] +else: + CHANNEL_BINDING_TYPES = [] + # Disable weak or insecure ciphers by default # (OpenSSL's default setting is 'DEFAULT:!aNULL:!eNULL') -_DEFAULT_CIPHERS = 'DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2' +# Enable a better set of ciphers by default +# This list has been explicitly chosen to: +# * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE) +# * Prefer ECDHE over DHE for better performance +# * Prefer AEAD over CBC for better performance and security +# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI +# (ChaCha20 needs OpenSSL 1.1.0 or patched 1.0.2) +# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better +# performance and security +# * Then Use HIGH cipher suites as a fallback +# * Disable NULL authentication, NULL encryption, 3DES and MD5 MACs +# for security reasons +_DEFAULT_CIPHERS = ( + 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:' + 'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:' + '!aNULL:!eNULL:!MD5:!3DES' + ) + +# Restricted and more secure ciphers for the server side +# This list has been explicitly chosen to: +# * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE) +# * Prefer ECDHE over DHE for better performance +# * Prefer AEAD over CBC for better performance and security +# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI +# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better +# performance and security +# * Then Use HIGH cipher suites as a fallback +# * Disable NULL authentication, NULL encryption, MD5 MACs, DSS, RC4, and +# 3DES for security reasons +_RESTRICTED_SERVER_CIPHERS = ( + 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:' + 'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:' + '!aNULL:!eNULL:!MD5:!DSS:!RC4:!3DES' +) + + +class CertificateError(ValueError): + pass + + +def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + pieces = dn.split(r'.') + leftmost = pieces[0] + remainder = pieces[1:] + + wildcards = leftmost.count('*') + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survery of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn)) + + # speed up common case w/o wildcards + if not wildcards: + return dn.lower() == hostname.lower() + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append('[^.]+') + elif leftmost.startswith('xn--') or hostname.startswith('xn--'): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) + return pat.match(hostname) + + +def match_hostname(cert, hostname): + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError("empty or no certificate, match_hostname needs a " + "SSL socket or SSL context with either " + "CERT_OPTIONAL or CERT_REQUIRED") + dnsnames = [] + san = cert.get('subjectAltName', ()) + for key, value in san: + if key == 'DNS': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if not dnsnames: + # The subject is only checked when there is no dNSName entry + # in subjectAltName + for sub in cert.get('subject', ()): + for key, value in sub: + # XXX according to RFC 2818, the most specific Common Name + # must be used. + if key == 'commonName': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if len(dnsnames) > 1: + raise CertificateError("hostname %r " + "doesn't match either of %s" + % (hostname, ', '.join(map(repr, dnsnames)))) + elif len(dnsnames) == 1: + raise CertificateError("hostname %r " + "doesn't match %r" + % (hostname, dnsnames[0])) + else: + raise CertificateError("no appropriate commonName or " + "subjectAltName fields were found") + + +DefaultVerifyPaths = namedtuple("DefaultVerifyPaths", + "cafile capath openssl_cafile_env openssl_cafile openssl_capath_env " + "openssl_capath") + +def get_default_verify_paths(): + """Return paths to default cafile and capath. + """ + parts = _ssl.get_default_verify_paths() + + # environment vars shadow paths + cafile = os.environ.get(parts[0], parts[1]) + capath = os.environ.get(parts[2], parts[3]) + + return DefaultVerifyPaths(cafile if os.path.isfile(cafile) else None, + capath if os.path.isdir(capath) else None, + *parts) + + +class _ASN1Object(namedtuple("_ASN1Object", "nid shortname longname oid")): + """ASN.1 object identifier lookup + """ + __slots__ = () + + def __new__(cls, oid): + return super(_ASN1Object, cls).__new__(cls, *_txt2obj(oid, name=False)) + + @classmethod + def fromnid(cls, nid): + """Create _ASN1Object from OpenSSL numeric ID + """ + return super(_ASN1Object, cls).__new__(cls, *_nid2obj(nid)) + + @classmethod + def fromname(cls, name): + """Create _ASN1Object from short name, long name or OID + """ + return super(_ASN1Object, cls).__new__(cls, *_txt2obj(name, name=True)) + + +class Purpose(_ASN1Object): + """SSLContext purpose flags with X509v3 Extended Key Usage objects + """ + +Purpose.SERVER_AUTH = Purpose('1.3.6.1.5.5.7.3.1') +Purpose.CLIENT_AUTH = Purpose('1.3.6.1.5.5.7.3.2') + + +class SSLContext(_SSLContext): + """An SSLContext holds various SSL-related configuration options and + data, such as certificates and possibly a private key.""" + + __slots__ = ('protocol', '__weakref__') + _windows_cert_stores = ("CA", "ROOT") + + def __new__(cls, protocol, *args, **kwargs): + self = _SSLContext.__new__(cls, protocol) + if protocol != _SSLv2_IF_EXISTS: + self.set_ciphers(_DEFAULT_CIPHERS) + return self + + def __init__(self, protocol): + self.protocol = protocol + + def wrap_socket(self, sock, server_side=False, + do_handshake_on_connect=True, + suppress_ragged_eofs=True, + server_hostname=None): + return SSLSocket(sock=sock, server_side=server_side, + do_handshake_on_connect=do_handshake_on_connect, + suppress_ragged_eofs=suppress_ragged_eofs, + server_hostname=server_hostname, + _context=self) + + def set_npn_protocols(self, npn_protocols): + protos = bytearray() + for protocol in npn_protocols: + b = protocol.encode('ascii') + if len(b) == 0 or len(b) > 255: + raise SSLError('NPN protocols must be 1 to 255 in length') + protos.append(len(b)) + protos.extend(b) + + self._set_npn_protocols(protos) + + def set_alpn_protocols(self, alpn_protocols): + protos = bytearray() + for protocol in alpn_protocols: + b = protocol.encode('ascii') + if len(b) == 0 or len(b) > 255: + raise SSLError('ALPN protocols must be 1 to 255 in length') + protos.append(len(b)) + protos.extend(b) + + self._set_alpn_protocols(protos) + + def _load_windows_store_certs(self, storename, purpose): + certs = bytearray() + try: + for cert, encoding, trust in enum_certificates(storename): + # CA certs are never PKCS#7 encoded + if encoding == "x509_asn": + if trust is True or purpose.oid in trust: + certs.extend(cert) + except OSError: + warnings.warn("unable to enumerate Windows certificate store") + if certs: + self.load_verify_locations(cadata=certs) + return certs + + def load_default_certs(self, purpose=Purpose.SERVER_AUTH): + if not isinstance(purpose, _ASN1Object): + raise TypeError(purpose) + if sys.platform == "win32": + for storename in self._windows_cert_stores: + self._load_windows_store_certs(storename, purpose) + self.set_default_verify_paths() + + +def create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, + capath=None, cadata=None): + """Create a SSLContext object with default settings. + + NOTE: The protocol and settings may change anytime without prior + deprecation. The values represent a fair balance between maximum + compatibility and security. + """ + if not isinstance(purpose, _ASN1Object): + raise TypeError(purpose) + + context = SSLContext(PROTOCOL_TLS) + + # SSLv2 considered harmful. + context.options |= OP_NO_SSLv2 + + # SSLv3 has problematic security and is only required for really old + # clients such as IE6 on Windows XP + context.options |= OP_NO_SSLv3 + + # disable compression to prevent CRIME attacks (OpenSSL 1.0+) + context.options |= getattr(_ssl, "OP_NO_COMPRESSION", 0) + + if purpose == Purpose.SERVER_AUTH: + # verify certs and host name in client mode + context.verify_mode = CERT_REQUIRED + context.check_hostname = True + elif purpose == Purpose.CLIENT_AUTH: + # Prefer the server's ciphers by default so that we get stronger + # encryption + context.options |= getattr(_ssl, "OP_CIPHER_SERVER_PREFERENCE", 0) + + # Use single use keys in order to improve forward secrecy + context.options |= getattr(_ssl, "OP_SINGLE_DH_USE", 0) + context.options |= getattr(_ssl, "OP_SINGLE_ECDH_USE", 0) + + # disallow ciphers with known vulnerabilities + context.set_ciphers(_RESTRICTED_SERVER_CIPHERS) + + if cafile or capath or cadata: + context.load_verify_locations(cafile, capath, cadata) + elif context.verify_mode != CERT_NONE: + # no explicit cafile, capath or cadata but the verify mode is + # CERT_OPTIONAL or CERT_REQUIRED. Let's try to load default system + # root CA certificates for the given purpose. This may fail silently. + context.load_default_certs(purpose) + return context + +def _create_unverified_context(protocol=PROTOCOL_TLS, cert_reqs=None, + check_hostname=False, purpose=Purpose.SERVER_AUTH, + certfile=None, keyfile=None, + cafile=None, capath=None, cadata=None): + """Create a SSLContext object for Python stdlib modules + + All Python stdlib modules shall use this function to create SSLContext + objects in order to keep common settings in one place. The configuration + is less restrict than create_default_context()'s to increase backward + compatibility. + """ + if not isinstance(purpose, _ASN1Object): + raise TypeError(purpose) + + context = SSLContext(protocol) + # SSLv2 considered harmful. + context.options |= OP_NO_SSLv2 + # SSLv3 has problematic security and is only required for really old + # clients such as IE6 on Windows XP + context.options |= OP_NO_SSLv3 + + if cert_reqs is not None: + context.verify_mode = cert_reqs + context.check_hostname = check_hostname + + if keyfile and not certfile: + raise ValueError("certfile must be specified") + if certfile or keyfile: + context.load_cert_chain(certfile, keyfile) + + # load CA root certs + if cafile or capath or cadata: + context.load_verify_locations(cafile, capath, cadata) + elif context.verify_mode != CERT_NONE: + # no explicit cafile, capath or cadata but the verify mode is + # CERT_OPTIONAL or CERT_REQUIRED. Let's try to load default system + # root CA certificates for the given purpose. This may fail silently. + context.load_default_certs(purpose) + + return context + +# Backwards compatibility alias, even though it's not a public name. +_create_stdlib_context = _create_unverified_context + +# PEP 493: Verify HTTPS by default, but allow envvar to override that +_https_verify_envvar = 'PYTHONHTTPSVERIFY' + +def _get_https_context_factory(): + if not sys.flags.ignore_environment: + config_setting = os.environ.get(_https_verify_envvar) + if config_setting == '0': + return _create_unverified_context + return create_default_context + +_create_default_https_context = _get_https_context_factory() + +# PEP 493: "private" API to configure HTTPS defaults without monkeypatching +def _https_verify_certificates(enable=True): + """Verify server HTTPS certificates by default?""" + global _create_default_https_context + if enable: + _create_default_https_context = create_default_context + else: + _create_default_https_context = _create_unverified_context class SSLSocket(socket): - """This class implements a subtype of socket.socket that wraps the underlying OS socket in an SSL context when necessary, and provides read and write methods over that channel.""" - def __init__(self, sock, keyfile=None, certfile=None, + def __init__(self, sock=None, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, - ssl_version=PROTOCOL_SSLv23, ca_certs=None, + ssl_version=PROTOCOL_TLS, ca_certs=None, do_handshake_on_connect=True, - suppress_ragged_eofs=True, ciphers=None): + family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None, + suppress_ragged_eofs=True, npn_protocols=None, ciphers=None, + server_hostname=None, + _context=None): + + self._makefile_refs = 0 + if _context: + self._context = _context + else: + if server_side and not certfile: + raise ValueError("certfile must be specified for server-side " + "operations") + if keyfile and not certfile: + raise ValueError("certfile must be specified") + if certfile and not keyfile: + keyfile = certfile + self._context = SSLContext(ssl_version) + self._context.verify_mode = cert_reqs + if ca_certs: + self._context.load_verify_locations(ca_certs) + if certfile: + self._context.load_cert_chain(certfile, keyfile) + if npn_protocols: + self._context.set_npn_protocols(npn_protocols) + if ciphers: + self._context.set_ciphers(ciphers) + self.keyfile = keyfile + self.certfile = certfile + self.cert_reqs = cert_reqs + self.ssl_version = ssl_version + self.ca_certs = ca_certs + self.ciphers = ciphers + # Can't use sock.type as other flags (such as SOCK_NONBLOCK) get + # mixed in. + if sock.getsockopt(SOL_SOCKET, SO_TYPE) != SOCK_STREAM: + raise NotImplementedError("only stream sockets are supported") socket.__init__(self, _sock=sock._sock) # The initializer for socket overrides the methods send(), recv(), etc. # in the instancce, which we don't need -- but we want to provide the @@ -117,98 +575,162 @@ def __init__(self, sock, keyfile=None, certfile=None, delattr(self, attr) except AttributeError: pass + if server_side and server_hostname: + raise ValueError("server_hostname can only be specified " + "in client mode") + if self._context.check_hostname and not server_hostname: + raise ValueError("check_hostname requires server_hostname") + self.server_side = server_side + self.server_hostname = server_hostname + self.do_handshake_on_connect = do_handshake_on_connect + self.suppress_ragged_eofs = suppress_ragged_eofs - if ciphers is None and ssl_version != _SSLv2_IF_EXISTS: - ciphers = _DEFAULT_CIPHERS - - if certfile and not keyfile: - keyfile = certfile - # see if it's connected + # See if we are connected try: - socket.getpeername(self) - except socket_error, e: + self.getpeername() + except socket_error as e: if e.errno != errno.ENOTCONN: raise - # no, no connection yet - self._connected = False - self._sslobj = None + connected = False else: - # yes, create the SSL object - self._connected = True - self._sslobj = _ssl.sslwrap(self._sock, server_side, - keyfile, certfile, - cert_reqs, ssl_version, ca_certs, - ciphers) - if do_handshake_on_connect: - self.do_handshake() - self.keyfile = keyfile - self.certfile = certfile - self.cert_reqs = cert_reqs - self.ssl_version = ssl_version - self.ca_certs = ca_certs - self.ciphers = ciphers - self.do_handshake_on_connect = do_handshake_on_connect - self.suppress_ragged_eofs = suppress_ragged_eofs - self._makefile_refs = 0 + connected = True - def read(self, len=1024): + self._closed = False + self._sslobj = None + self._connected = connected + if connected: + # create the SSL object + try: + self._sslobj = self._context._wrap_socket(self._sock, server_side, + server_hostname, ssl_sock=self) + if do_handshake_on_connect: + timeout = self.gettimeout() + if timeout == 0.0: + # non-blocking + raise ValueError("do_handshake_on_connect should not be specified for non-blocking sockets") + self.do_handshake() + except (OSError, ValueError): + self.close() + raise + + @property + def context(self): + return self._context + + @context.setter + def context(self, ctx): + self._context = ctx + self._sslobj.context = ctx + + def dup(self): + raise NotImplemented("Can't dup() %s instances" % + self.__class__.__name__) + + def _checkClosed(self, msg=None): + # raise an exception here if you wish to check for spurious closes + pass + + def _check_connected(self): + if not self._connected: + # getpeername() will raise ENOTCONN if the socket is really + # not connected; note that we can be connected even without + # _connected being set, e.g. if connect() first returned + # EAGAIN. + self.getpeername() + + def read(self, len=1024, buffer=None): """Read up to LEN bytes and return them. Return zero-length string on EOF.""" + self._checkClosed() + if not self._sslobj: + raise ValueError("Read on closed or unwrapped SSL socket.") try: - return self._sslobj.read(len) - except SSLError, x: + if buffer is not None: + v = self._sslobj.read(len, buffer) + else: + v = self._sslobj.read(len) + return v + except SSLError as x: if x.args[0] == SSL_ERROR_EOF and self.suppress_ragged_eofs: - return '' + if buffer is not None: + return 0 + else: + return b'' else: raise def write(self, data): - """Write DATA to the underlying SSL channel. Returns number of bytes of DATA actually transmitted.""" + self._checkClosed() + if not self._sslobj: + raise ValueError("Write on closed or unwrapped SSL socket.") return self._sslobj.write(data) def getpeercert(self, binary_form=False): - """Returns a formatted version of the data in the certificate provided by the other end of the SSL channel. Return None if no certificate was provided, {} if a certificate was provided, but not validated.""" + self._checkClosed() + self._check_connected() return self._sslobj.peer_certificate(binary_form) - def cipher(self): + def selected_npn_protocol(self): + self._checkClosed() + if not self._sslobj or not _ssl.HAS_NPN: + return None + else: + return self._sslobj.selected_npn_protocol() + def selected_alpn_protocol(self): + self._checkClosed() + if not self._sslobj or not _ssl.HAS_ALPN: + return None + else: + return self._sslobj.selected_alpn_protocol() + + def cipher(self): + self._checkClosed() if not self._sslobj: return None else: return self._sslobj.cipher() + def compression(self): + self._checkClosed() + if not self._sslobj: + return None + else: + return self._sslobj.compression() + def send(self, data, flags=0): + self._checkClosed() if self._sslobj: if flags != 0: raise ValueError( "non-zero flags not allowed in calls to send() on %s" % self.__class__) - while True: - try: - v = self._sslobj.write(data) - except SSLError, x: - if x.args[0] == SSL_ERROR_WANT_READ: - return 0 - elif x.args[0] == SSL_ERROR_WANT_WRITE: - return 0 - else: - raise + try: + v = self._sslobj.write(data) + except SSLError as x: + if x.args[0] == SSL_ERROR_WANT_READ: + return 0 + elif x.args[0] == SSL_ERROR_WANT_WRITE: + return 0 else: - return v + raise + else: + return v else: return self._sock.send(data, flags) def sendto(self, data, flags_or_addr, addr=None): + self._checkClosed() if self._sslobj: raise ValueError("sendto not allowed on instances of %s" % self.__class__) @@ -217,7 +739,9 @@ def sendto(self, data, flags_or_addr, addr=None): else: return self._sock.sendto(data, flags_or_addr, addr) + def sendall(self, data, flags=0): + self._checkClosed() if self._sslobj: if flags != 0: raise ValueError( @@ -233,6 +757,7 @@ def sendall(self, data, flags=0): return socket.sendall(self, data, flags) def recv(self, buflen=1024, flags=0): + self._checkClosed() if self._sslobj: if flags != 0: raise ValueError( @@ -243,6 +768,7 @@ def recv(self, buflen=1024, flags=0): return self._sock.recv(buflen, flags) def recv_into(self, buffer, nbytes=None, flags=0): + self._checkClosed() if buffer and (nbytes is None): nbytes = len(buffer) elif nbytes is None: @@ -252,14 +778,12 @@ def recv_into(self, buffer, nbytes=None, flags=0): raise ValueError( "non-zero flags not allowed in calls to recv_into() on %s" % self.__class__) - tmp_buffer = self.read(nbytes) - v = len(tmp_buffer) - buffer[:v] = tmp_buffer - return v + return self.read(nbytes, buffer) else: return self._sock.recv_into(buffer, nbytes, flags) def recvfrom(self, buflen=1024, flags=0): + self._checkClosed() if self._sslobj: raise ValueError("recvfrom not allowed on instances of %s" % self.__class__) @@ -267,27 +791,23 @@ def recvfrom(self, buflen=1024, flags=0): return self._sock.recvfrom(buflen, flags) def recvfrom_into(self, buffer, nbytes=None, flags=0): + self._checkClosed() if self._sslobj: raise ValueError("recvfrom_into not allowed on instances of %s" % self.__class__) else: return self._sock.recvfrom_into(buffer, nbytes, flags) + def pending(self): + self._checkClosed() if self._sslobj: return self._sslobj.pending() else: return 0 - def unwrap(self): - if self._sslobj: - s = self._sslobj.shutdown() - self._sslobj = None - return s - else: - raise ValueError("No SSL wrapper around " + str(self)) - def shutdown(self, how): + self._checkClosed() self._sslobj = None socket.shutdown(self, how) @@ -298,32 +818,55 @@ def close(self): else: self._makefile_refs -= 1 - def do_handshake(self): - - """Perform a TLS/SSL handshake.""" + def unwrap(self): + if self._sslobj: + s = self._sslobj.shutdown() + self._sslobj = None + return s + else: + raise ValueError("No SSL wrapper around " + str(self)) - self._sslobj.do_handshake() + def _real_close(self): + self._sslobj = None + socket._real_close(self) - def _real_connect(self, addr, return_errno): + def do_handshake(self, block=False): + """Perform a TLS/SSL handshake.""" + self._check_connected() + timeout = self.gettimeout() + try: + if timeout == 0.0 and block: + self.settimeout(None) + self._sslobj.do_handshake() + finally: + self.settimeout(timeout) + + if self.context.check_hostname: + if not self.server_hostname: + raise ValueError("check_hostname needs server_hostname " + "argument") + match_hostname(self.getpeercert(), self.server_hostname) + + def _real_connect(self, addr, connect_ex): + if self.server_side: + raise ValueError("can't connect in server-side mode") # Here we assume that the socket is client-side, and not # connected at the time of the call. We connect it, then wrap it. if self._connected: raise ValueError("attempt to connect already-connected SSLSocket!") - self._sslobj = _ssl.sslwrap(self._sock, False, self.keyfile, self.certfile, - self.cert_reqs, self.ssl_version, - self.ca_certs, self.ciphers) + self._sslobj = self.context._wrap_socket(self._sock, False, self.server_hostname, ssl_sock=self) try: - if return_errno: + if connect_ex: rc = socket.connect_ex(self, addr) else: rc = None socket.connect(self, addr) if not rc: + self._connected = True if self.do_handshake_on_connect: self.do_handshake() - self._connected = True return rc - except socket_error: + except (OSError, ValueError): self._sslobj = None raise @@ -338,27 +881,16 @@ def connect_ex(self, addr): return self._real_connect(addr, True) def accept(self): - """Accepts a new connection from a remote client, and returns a tuple containing that new connection wrapped with a server-side SSL channel, and the address of the remote client.""" newsock, addr = socket.accept(self) - try: - return (SSLSocket(newsock, - keyfile=self.keyfile, - certfile=self.certfile, - server_side=True, - cert_reqs=self.cert_reqs, - ssl_version=self.ssl_version, - ca_certs=self.ca_certs, - ciphers=self.ciphers, - do_handshake_on_connect=self.do_handshake_on_connect, - suppress_ragged_eofs=self.suppress_ragged_eofs), - addr) - except socket_error as e: - newsock.close() - raise e + newsock = self.context.wrap_socket(newsock, + do_handshake_on_connect=self.do_handshake_on_connect, + suppress_ragged_eofs=self.suppress_ragged_eofs, + server_side=True) + return newsock, addr def makefile(self, mode='r', bufsize=-1): @@ -371,54 +903,90 @@ def makefile(self, mode='r', bufsize=-1): # the file-like object. return _fileobject(self, mode, bufsize, close=True) + def get_channel_binding(self, cb_type="tls-unique"): + """Get channel binding data for current connection. Raise ValueError + if the requested `cb_type` is not supported. Return bytes of the data + or None if the data is not available (e.g. before the handshake). + """ + if cb_type not in CHANNEL_BINDING_TYPES: + raise ValueError("Unsupported channel binding type") + if cb_type != "tls-unique": + raise NotImplementedError( + "{0} channel binding type not implemented" + .format(cb_type)) + if self._sslobj is None: + return None + return self._sslobj.tls_unique_cb() + + def version(self): + """ + Return a string identifying the protocol version used by the + current SSL channel, or None if there is no established channel. + """ + if self._sslobj is None: + return None + return self._sslobj.version() def wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, - ssl_version=PROTOCOL_SSLv23, ca_certs=None, + ssl_version=PROTOCOL_TLS, ca_certs=None, do_handshake_on_connect=True, - suppress_ragged_eofs=True, ciphers=None): + suppress_ragged_eofs=True, + ciphers=None): - return SSLSocket(sock, keyfile=keyfile, certfile=certfile, + return SSLSocket(sock=sock, keyfile=keyfile, certfile=certfile, server_side=server_side, cert_reqs=cert_reqs, ssl_version=ssl_version, ca_certs=ca_certs, do_handshake_on_connect=do_handshake_on_connect, suppress_ragged_eofs=suppress_ragged_eofs, ciphers=ciphers) - # some utility functions def cert_time_to_seconds(cert_time): - - """Takes a date-time string in standard ASN1_print form - ("MON DAY 24HOUR:MINUTE:SEC YEAR TIMEZONE") and return - a Python time value in seconds past the epoch.""" - - import time - return time.mktime(time.strptime(cert_time, "%b %d %H:%M:%S %Y GMT")) + """Return the time in seconds since the Epoch, given the timestring + representing the "notBefore" or "notAfter" date from a certificate + in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C locale). + + "notBefore" or "notAfter" dates must use UTC (RFC 5280). + + Month is one of: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec + UTC should be specified as GMT (see ASN1_TIME_print()) + """ + from time import strptime + from calendar import timegm + + months = ( + "Jan","Feb","Mar","Apr","May","Jun", + "Jul","Aug","Sep","Oct","Nov","Dec" + ) + time_format = ' %d %H:%M:%S %Y GMT' # NOTE: no month, fixed GMT + try: + month_number = months.index(cert_time[:3].title()) + 1 + except ValueError: + raise ValueError('time data %r does not match ' + 'format "%%b%s"' % (cert_time, time_format)) + else: + # found valid month + tt = strptime(cert_time[3:], time_format) + # return an integer, the previous mktime()-based implementation + # returned a float (fractional seconds are always zero here). + return timegm((tt[0], month_number) + tt[2:6]) PEM_HEADER = "-----BEGIN CERTIFICATE-----" PEM_FOOTER = "-----END CERTIFICATE-----" def DER_cert_to_PEM_cert(der_cert_bytes): - """Takes a certificate in binary DER format and returns the PEM version of it as a string.""" - if hasattr(base64, 'standard_b64encode'): - # preferred because older API gets line-length wrong - f = base64.standard_b64encode(der_cert_bytes) - return (PEM_HEADER + '\n' + - textwrap.fill(f, 64) + '\n' + - PEM_FOOTER + '\n') - else: - return (PEM_HEADER + '\n' + - base64.encodestring(der_cert_bytes) + - PEM_FOOTER + '\n') + f = base64.standard_b64encode(der_cert_bytes).decode('ascii') + return (PEM_HEADER + '\n' + + textwrap.fill(f, 64) + '\n' + + PEM_FOOTER + '\n') def PEM_cert_to_DER_cert(pem_cert_string): - """Takes a certificate in ASCII PEM format and returns the DER-encoded version of it as a byte sequence""" @@ -429,25 +997,25 @@ def PEM_cert_to_DER_cert(pem_cert_string): raise ValueError("Invalid PEM encoding; must end with %s" % PEM_FOOTER) d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] - return base64.decodestring(d) - -def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None): + return base64.decodestring(d.encode('ASCII', 'strict')) +def get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None): """Retrieve the certificate from the server at the specified address, and return it as a PEM-encoded string. If 'ca_certs' is specified, validate the server cert against it. If 'ssl_version' is specified, use it in the connection attempt.""" host, port = addr - if (ca_certs is not None): + if ca_certs is not None: cert_reqs = CERT_REQUIRED else: cert_reqs = CERT_NONE - s = wrap_socket(socket(), ssl_version=ssl_version, - cert_reqs=cert_reqs, ca_certs=ca_certs) - s.connect(addr) - dercert = s.getpeercert(True) - s.close() + context = _create_stdlib_context(ssl_version, + cert_reqs=cert_reqs, + cafile=ca_certs) + with closing(create_connection(addr)) as sock: + with closing(context.wrap_socket(sock)) as sslsock: + dercert = sslsock.getpeercert(True) return DER_cert_to_PEM_cert(dercert) def get_protocol_name(protocol_code): @@ -457,16 +1025,16 @@ def get_protocol_name(protocol_code): # a replacement for the old socket.ssl function def sslwrap_simple(sock, keyfile=None, certfile=None): - """A replacement for the old socket.ssl function. Designed for compability with Python 2.5 and earlier. Will disappear in Python 3.0.""" - if hasattr(sock, "_sock"): sock = sock._sock - ssl_sock = _ssl.sslwrap(sock, 0, keyfile, certfile, CERT_NONE, - PROTOCOL_SSLv23, None) + ctx = SSLContext(PROTOCOL_SSLv23) + if keyfile or certfile: + ctx.load_cert_chain(certfile, keyfile) + ssl_sock = ctx._wrap_socket(sock, server_side=False) try: sock.getpeername() except socket_error: diff --git a/PythonLib/min/string.py b/PythonLib/min/string.py index 97278034..23608b4a 100644 --- a/PythonLib/min/string.py +++ b/PythonLib/min/string.py @@ -145,7 +145,11 @@ def _invalid(self, mo): raise ValueError('Invalid placeholder in string: line %d, col %d' % (lineno, colno)) - def substitute(self, *args, **kws): + def substitute(*args, **kws): + if not args: + raise TypeError("descriptor 'substitute' of 'Template' object " + "needs an argument") + self, args = args[0], args[1:] # allow the "self" keyword be passed if len(args) > 1: raise TypeError('Too many positional arguments') if not args: @@ -171,7 +175,11 @@ def convert(mo): self.pattern) return self.pattern.sub(convert, self.template) - def safe_substitute(self, *args, **kws): + def safe_substitute(*args, **kws): + if not args: + raise TypeError("descriptor 'safe_substitute' of 'Template' object " + "needs an argument") + self, args = args[0], args[1:] # allow the "self" keyword be passed if len(args) > 1: raise TypeError('Too many positional arguments') if not args: @@ -182,24 +190,18 @@ def safe_substitute(self, *args, **kws): mapping = args[0] # Helper function for .sub() def convert(mo): - named = mo.group('named') + named = mo.group('named') or mo.group('braced') if named is not None: try: # We use this idiom instead of str() because the latter # will fail if val is a Unicode containing non-ASCII return '%s' % (mapping[named],) except KeyError: - return self.delimiter + named - braced = mo.group('braced') - if braced is not None: - try: - return '%s' % (mapping[braced],) - except KeyError: - return self.delimiter + '{' + braced + '}' + return mo.group() if mo.group('escaped') is not None: return self.delimiter if mo.group('invalid') is not None: - return self.delimiter + return mo.group() raise ValueError('Unrecognized named group in pattern', self.pattern) return self.pattern.sub(convert, self.template) @@ -541,7 +543,19 @@ def replace(s, old, new, maxreplace=-1): # The field name parser is implemented in str._formatter_field_name_split class Formatter(object): - def format(self, format_string, *args, **kwargs): + def format(*args, **kwargs): + if not args: + raise TypeError("descriptor 'format' of 'Formatter' object " + "needs an argument") + self, args = args[0], args[1:] # allow the "self" keyword be passed + try: + format_string, args = args[0], args[1:] # allow the "format_string" keyword be passed + except IndexError: + if 'format_string' in kwargs: + format_string = kwargs.pop('format_string') + else: + raise TypeError("format() missing 1 required positional " + "argument: 'format_string'") return self.vformat(format_string, args, kwargs) def vformat(self, format_string, args, kwargs): diff --git a/PythonLib/min/subprocess.py b/PythonLib/min/subprocess.py index 3108537c..4b41f5ec 100644 --- a/PythonLib/min/subprocess.py +++ b/PythonLib/min/subprocess.py @@ -7,383 +7,27 @@ # Licensed to PSF under a Contributor Agreement. # See http://www.python.org/2.4/license for licensing details. -r"""subprocess - Subprocesses with accessible I/O streams +r"""Subprocesses with accessible I/O streams This module allows you to spawn processes, connect to their -input/output/error pipes, and obtain their return codes. This module -intends to replace several other, older modules and functions, like: - -os.system -os.spawn* -os.popen* -popen2.* -commands.* - -Information about how the subprocess module can be used to replace these -modules and functions can be found below. - - - -Using the subprocess module -=========================== -This module defines one class called Popen: - -class Popen(args, bufsize=0, executable=None, - stdin=None, stdout=None, stderr=None, - preexec_fn=None, close_fds=False, shell=False, - cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0): - - -Arguments are: - -args should be a string, or a sequence of program arguments. The -program to execute is normally the first item in the args sequence or -string, but can be explicitly set by using the executable argument. - -On UNIX, with shell=False (default): In this case, the Popen class -uses os.execvp() to execute the child program. args should normally -be a sequence. A string will be treated as a sequence with the string -as the only item (the program to execute). - -On UNIX, with shell=True: If args is a string, it specifies the -command string to execute through the shell. If args is a sequence, -the first item specifies the command string, and any additional items -will be treated as additional shell arguments. - -On Windows: the Popen class uses CreateProcess() to execute the child -program, which operates on strings. If args is a sequence, it will be -converted to a string using the list2cmdline method. Please note that -not all MS Windows applications interpret the command line the same -way: The list2cmdline is designed for applications using the same -rules as the MS C runtime. - -bufsize, if given, has the same meaning as the corresponding argument -to the built-in open() function: 0 means unbuffered, 1 means line -buffered, any other positive value means use a buffer of -(approximately) that size. A negative bufsize means to use the system -default, which usually means fully buffered. The default value for -bufsize is 0 (unbuffered). - -stdin, stdout and stderr specify the executed programs' standard -input, standard output and standard error file handles, respectively. -Valid values are PIPE, an existing file descriptor (a positive -integer), an existing file object, and None. PIPE indicates that a -new pipe to the child should be created. With None, no redirection -will occur; the child's file handles will be inherited from the -parent. Additionally, stderr can be STDOUT, which indicates that the -stderr data from the applications should be captured into the same -file handle as for stdout. - -If preexec_fn is set to a callable object, this object will be called -in the child process just before the child is executed. - -If close_fds is true, all file descriptors except 0, 1 and 2 will be -closed before the child process is executed. - -if shell is true, the specified command will be executed through the -shell. - -If cwd is not None, the current directory will be changed to cwd -before the child is executed. - -If env is not None, it defines the environment variables for the new -process. - -If universal_newlines is true, the file objects stdout and stderr are -opened as a text files, but lines may be terminated by any of '\n', -the Unix end-of-line convention, '\r', the Macintosh convention or -'\r\n', the Windows convention. All of these external representations -are seen as '\n' by the Python program. Note: This feature is only -available if Python is built with universal newline support (the -default). Also, the newlines attribute of the file objects stdout, -stdin and stderr are not updated by the communicate() method. - -The startupinfo and creationflags, if given, will be passed to the -underlying CreateProcess() function. They can specify things such as -appearance of the main window and priority for the new process. -(Windows only) - - -This module also defines some shortcut functions: - -call(*popenargs, **kwargs): - Run command with arguments. Wait for command to complete, then - return the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - retcode = call(["ls", "-l"]) - -check_call(*popenargs, **kwargs): - Run command with arguments. Wait for command to complete. If the - exit code was zero then return, otherwise raise - CalledProcessError. The CalledProcessError object will have the - return code in the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - check_call(["ls", "-l"]) - -check_output(*popenargs, **kwargs): - Run command with arguments and return its output as a byte string. - - If the exit code was non-zero it raises a CalledProcessError. The - CalledProcessError object will have the return code in the returncode - attribute and output in the output attribute. - - The arguments are the same as for the Popen constructor. Example: - - output = check_output(["ls", "-l", "/dev/null"]) - - -Exceptions ----------- -Exceptions raised in the child process, before the new program has -started to execute, will be re-raised in the parent. Additionally, -the exception object will have one extra attribute called -'child_traceback', which is a string containing traceback information -from the child's point of view. - -The most common exception raised is OSError. This occurs, for -example, when trying to execute a non-existent file. Applications -should prepare for OSErrors. - -A ValueError will be raised if Popen is called with invalid arguments. - -check_call() and check_output() will raise CalledProcessError, if the -called process returns a non-zero return code. - - -Security --------- -Unlike some other popen functions, this implementation will never call -/bin/sh implicitly. This means that all characters, including shell -metacharacters, can safely be passed to child processes. - - -Popen objects -============= -Instances of the Popen class have the following methods: - -poll() - Check if child process has terminated. Returns returncode - attribute. - -wait() - Wait for child process to terminate. Returns returncode attribute. - -communicate(input=None) - Interact with process: Send data to stdin. Read data from stdout - and stderr, until end-of-file is reached. Wait for process to - terminate. The optional input argument should be a string to be - sent to the child process, or None, if no data should be sent to - the child. - - communicate() returns a tuple (stdout, stderr). - - Note: The data read is buffered in memory, so do not use this - method if the data size is large or unlimited. - -The following attributes are also available: - -stdin - If the stdin argument is PIPE, this attribute is a file object - that provides input to the child process. Otherwise, it is None. - -stdout - If the stdout argument is PIPE, this attribute is a file object - that provides output from the child process. Otherwise, it is - None. - -stderr - If the stderr argument is PIPE, this attribute is file object that - provides error output from the child process. Otherwise, it is - None. - -pid - The process ID of the child process. - -returncode - The child return code. A None value indicates that the process - hasn't terminated yet. A negative value -N indicates that the - child was terminated by signal N (UNIX only). - - -Replacing older functions with the subprocess module -==================================================== -In this section, "a ==> b" means that b can be used as a replacement -for a. - -Note: All functions in this section fail (more or less) silently if -the executed program cannot be found; this module raises an OSError -exception. - -In the following examples, we assume that the subprocess module is -imported with "from subprocess import *". - - -Replacing /bin/sh shell backquote ---------------------------------- -output=`mycmd myarg` -==> -output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0] - - -Replacing shell pipe line -------------------------- -output=`dmesg | grep hda` -==> -p1 = Popen(["dmesg"], stdout=PIPE) -p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) -output = p2.communicate()[0] - - -Replacing os.system() ---------------------- -sts = os.system("mycmd" + " myarg") -==> -p = Popen("mycmd" + " myarg", shell=True) -pid, sts = os.waitpid(p.pid, 0) - -Note: - -* Calling the program through the shell is usually not required. - -* It's easier to look at the returncode attribute than the - exitstatus. - -A more real-world example would look like this: - -try: - retcode = call("mycmd" + " myarg", shell=True) - if retcode < 0: - print >>sys.stderr, "Child was terminated by signal", -retcode - else: - print >>sys.stderr, "Child returned", retcode -except OSError, e: - print >>sys.stderr, "Execution failed:", e - - -Replacing os.spawn* -------------------- -P_NOWAIT example: - -pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg") -==> -pid = Popen(["/bin/mycmd", "myarg"]).pid - - -P_WAIT example: - -retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg") -==> -retcode = call(["/bin/mycmd", "myarg"]) - - -Vector example: - -os.spawnvp(os.P_NOWAIT, path, args) -==> -Popen([path] + args[1:]) - - -Environment example: - -os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env) -==> -Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"}) - - -Replacing os.popen* -------------------- -pipe = os.popen("cmd", mode='r', bufsize) -==> -pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout - -pipe = os.popen("cmd", mode='w', bufsize) -==> -pipe = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE).stdin - - -(child_stdin, child_stdout) = os.popen2("cmd", mode, bufsize) -==> -p = Popen("cmd", shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, close_fds=True) -(child_stdin, child_stdout) = (p.stdin, p.stdout) - - -(child_stdin, - child_stdout, - child_stderr) = os.popen3("cmd", mode, bufsize) -==> -p = Popen("cmd", shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True) -(child_stdin, - child_stdout, - child_stderr) = (p.stdin, p.stdout, p.stderr) - - -(child_stdin, child_stdout_and_stderr) = os.popen4("cmd", mode, - bufsize) -==> -p = Popen("cmd", shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) -(child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout) - -On Unix, os.popen2, os.popen3 and os.popen4 also accept a sequence as -the command to execute, in which case arguments will be passed -directly to the program without shell intervention. This usage can be -replaced as follows: - -(child_stdin, child_stdout) = os.popen2(["/bin/ls", "-l"], mode, - bufsize) -==> -p = Popen(["/bin/ls", "-l"], bufsize=bufsize, stdin=PIPE, stdout=PIPE) -(child_stdin, child_stdout) = (p.stdin, p.stdout) - -Return code handling translates as follows: - -pipe = os.popen("cmd", 'w') -... -rc = pipe.close() -if rc is not None and rc % 256: - print "There were some errors" -==> -process = Popen("cmd", 'w', shell=True, stdin=PIPE) -... -process.stdin.close() -if process.wait() != 0: - print "There were some errors" - - -Replacing popen2.* ------------------- -(child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode) -==> -p = Popen(["somestring"], shell=True, bufsize=bufsize - stdin=PIPE, stdout=PIPE, close_fds=True) -(child_stdout, child_stdin) = (p.stdout, p.stdin) - -On Unix, popen2 also accepts a sequence as the command to execute, in -which case arguments will be passed directly to the program without -shell intervention. This usage can be replaced as follows: - -(child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, - mode) -==> -p = Popen(["mycmd", "myarg"], bufsize=bufsize, - stdin=PIPE, stdout=PIPE, close_fds=True) -(child_stdout, child_stdin) = (p.stdout, p.stdin) - -The popen2.Popen3 and popen2.Popen4 basically works as subprocess.Popen, -except that: - -* subprocess.Popen raises an exception if the execution fails -* the capturestderr argument is replaced with the stderr argument. -* stdin=PIPE and stdout=PIPE must be specified. -* popen2 closes all filedescriptors by default, but you have to specify - close_fds=True with subprocess.Popen. +input/output/error pipes, and obtain their return codes. + +For a complete description of this module see the Python documentation. + +Main API +======== +call(...): Runs a command, waits for it to complete, then returns + the return code. +check_call(...): Same as call() but raises CalledProcessError() + if return code is not 0 +check_output(...): Same as check_call() but returns the contents of + stdout instead of a return code +Popen(...): A class for flexibly executing a command in a new process + +Constants +--------- +PIPE: Special value that indicates a pipe should be created +STDOUT: Special value that indicates that stderr should go to stdout """ import sys @@ -400,8 +44,9 @@ class Popen(args, bufsize=0, executable=None, class CalledProcessError(Exception): """This exception is raised when a process run by check_call() or check_output() returns a non-zero exit status. - The exit status will be stored in the returncode attribute; - check_output() will also store the output in the output attribute. + + Attributes: + cmd, returncode, output """ def __init__(self, returncode, cmd, output=None): self.returncode = returncode @@ -498,7 +143,6 @@ def _args_from_interpreter_flags(): 'ignore_environment': 'E', 'verbose': 'v', 'bytes_warning': 'b', - 'hash_randomization': 'R', 'py3k_warning': '3', } args = [] @@ -506,6 +150,8 @@ def _args_from_interpreter_flags(): v = getattr(sys.flags, flag) if v > 0: args.append('-' + opt * v) + if getattr(sys.flags, 'hash_randomization') != 0: + args.append('-R') for opt in sys.warnoptions: args.append('-W' + opt) return args @@ -645,6 +291,42 @@ def list2cmdline(seq): class Popen(object): + """ Execute a child program in a new process. + + For a complete description of the arguments see the Python documentation. + + Arguments: + args: A string, or a sequence of program arguments. + + bufsize: supplied as the buffering argument to the open() function when + creating the stdin/stdout/stderr pipe file objects + + executable: A replacement program to execute. + + stdin, stdout and stderr: These specify the executed programs' standard + input, standard output and standard error file handles, respectively. + + preexec_fn: (POSIX only) An object to be called in the child process + just before the child is executed. + + close_fds: Controls closing or inheriting of file descriptors. + + shell: If true, the command will be executed through the shell. + + cwd: Sets the current directory before the child is executed. + + env: Defines the environment variables for the new process. + + universal_newlines: If true, use universal line endings for file + objects stdin, stdout and stderr. + + startupinfo and creationflags (Windows only) + + Attributes: + stdin, stdout, stderr, pid, returncode + """ + _child_created = False # Set here since __del__ checks it + def __init__(self, args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, @@ -653,7 +335,6 @@ def __init__(self, args, bufsize=0, executable=None, """Create new Popen instance.""" _cleanup() - self._child_created = False if not isinstance(bufsize, (int, long)): raise TypeError("bufsize must be an integer") @@ -750,11 +431,11 @@ def _translate_newlines(self, data): return data - def __del__(self, _maxint=sys.maxint, _active=_active): + def __del__(self, _maxint=sys.maxint): # If __init__ hasn't had a chance to execute (e.g. if it # was passed an undeclared keyword argument), we don't # have a _child_created attribute at all. - if not getattr(self, '_child_created', False): + if not self._child_created: # We didn't get to successfully create a child process. return # In case the child hasn't been waited on, check if it's done. @@ -799,6 +480,8 @@ def communicate(self, input=None): def poll(self): + """Check if child process has terminated. Set and return returncode + attribute.""" return self._internal_poll() @@ -824,7 +507,7 @@ def _get_handles(self, stdin, stdout, stderr): p2cread, _ = _subprocess.CreatePipe(None, 0) elif stdin == PIPE: p2cread, p2cwrite = _subprocess.CreatePipe(None, 0) - elif isinstance(stdin, int): + elif isinstance(stdin, (int, long)): p2cread = msvcrt.get_osfhandle(stdin) else: # Assuming file-like object @@ -841,7 +524,7 @@ def _get_handles(self, stdin, stdout, stderr): _, c2pwrite = _subprocess.CreatePipe(None, 0) elif stdout == PIPE: c2pread, c2pwrite = _subprocess.CreatePipe(None, 0) - elif isinstance(stdout, int): + elif isinstance(stdout, (int, long)): c2pwrite = msvcrt.get_osfhandle(stdout) else: # Assuming file-like object @@ -860,7 +543,7 @@ def _get_handles(self, stdin, stdout, stderr): errread, errwrite = _subprocess.CreatePipe(None, 0) elif stderr == STDOUT: errwrite = c2pwrite - elif isinstance(stderr, int): + elif isinstance(stderr, (int, long)): errwrite = msvcrt.get_osfhandle(stderr) else: # Assuming file-like object @@ -1034,7 +717,16 @@ def _communicate(self, input): try: self.stdin.write(input) except IOError as e: - if e.errno != errno.EPIPE: + if e.errno == errno.EPIPE: + # communicate() should ignore broken pipe error + pass + elif e.errno == errno.EINVAL: + # bpo-19612, bpo-30418: On Windows, stdin.write() + # fails with EINVAL if the child process exited or + # if the child process is still running but closed + # the pipe. + pass + else: raise self.stdin.close() @@ -1109,7 +801,7 @@ def _get_handles(self, stdin, stdout, stderr): elif stdin == PIPE: p2cread, p2cwrite = self.pipe_cloexec() to_close.update((p2cread, p2cwrite)) - elif isinstance(stdin, int): + elif isinstance(stdin, (int, long)): p2cread = stdin else: # Assuming file-like object @@ -1120,7 +812,7 @@ def _get_handles(self, stdin, stdout, stderr): elif stdout == PIPE: c2pread, c2pwrite = self.pipe_cloexec() to_close.update((c2pread, c2pwrite)) - elif isinstance(stdout, int): + elif isinstance(stdout, (int, long)): c2pwrite = stdout else: # Assuming file-like object @@ -1132,8 +824,11 @@ def _get_handles(self, stdin, stdout, stderr): errread, errwrite = self.pipe_cloexec() to_close.update((errread, errwrite)) elif stderr == STDOUT: - errwrite = c2pwrite - elif isinstance(stderr, int): + if c2pwrite is not None: + errwrite = c2pwrite + else: # child's stdout is not set, use parent's stdout + errwrite = sys.__stdout__.fileno() + elif isinstance(stderr, (int, long)): errwrite = stderr else: # Assuming file-like object @@ -1303,8 +998,12 @@ def _dup2(a, b): os.close(errpipe_write) # Wait for exec to fail or succeed; possibly raising exception - # Exception limited to 1M data = _eintr_retry_call(os.read, errpipe_read, 1048576) + pickle_bits = [] + while data: + pickle_bits.append(data) + data = _eintr_retry_call(os.read, errpipe_read, 1048576) + data = "".join(pickle_bits) finally: if p2cread is not None and p2cwrite is not None: _close_in_parent(p2cread) @@ -1328,13 +1027,16 @@ def _dup2(a, b): def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, - _WEXITSTATUS=os.WEXITSTATUS): + _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED, + _WSTOPSIG=os.WSTOPSIG): # This method is called (indirectly) by __del__, so it cannot - # refer to anything outside of its local scope.""" + # refer to anything outside of its local scope. if _WIFSIGNALED(sts): self.returncode = -_WTERMSIG(sts) elif _WIFEXITED(sts): self.returncode = _WEXITSTATUS(sts) + elif _WIFSTOPPED(sts): + self.returncode = -_WSTOPSIG(sts) else: # Should never happen raise RuntimeError("Unknown child exit status!") diff --git a/PythonLib/min/sunau.py b/PythonLib/min/sunau.py index 31b280da..b53044d2 100644 --- a/PythonLib/min/sunau.py +++ b/PythonLib/min/sunau.py @@ -224,7 +224,7 @@ def getnframes(self): if self._data_size == AUDIO_UNKNOWN_SIZE: return AUDIO_UNKNOWN_SIZE if self._encoding in _simple_encodings: - return self._data_size / self._framesize + return self._data_size // self._framesize return 0 # XXX--must do some arithmetic here def getcomptype(self): diff --git a/PythonLib/min/sysconfig.py b/PythonLib/min/sysconfig.py index aa69351b..9c8350d9 100644 --- a/PythonLib/min/sysconfig.py +++ b/PythonLib/min/sysconfig.py @@ -112,6 +112,11 @@ def _safe_realpath(path): # PC/VS7.1 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) +# PC/VS9.0/amd64 +if (os.name == "nt" + and os.path.basename(os.path.dirname(os.path.dirname(_PROJECT_BASE))).lower() == "pc" + and os.path.basename(os.path.dirname(_PROJECT_BASE)).lower() == "vs9.0"): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir, pardir)) # PC/AMD64 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) @@ -273,17 +278,21 @@ def _parse_makefile(filename, vars=None): return vars -def _get_makefile_filename(): +def get_makefile_filename(): + """Return the path of the Makefile.""" if _PYTHON_BUILD: return os.path.join(_PROJECT_BASE, "Makefile") return os.path.join(get_path('platstdlib'), "config", "Makefile") +# Issue #22199: retain undocumented private name for compatibility +_get_makefile_filename = get_makefile_filename + def _generate_posix_vars(): """Generate the Python module containing build-time variables.""" import pprint vars = {} # load the installed Makefile: - makefile = _get_makefile_filename() + makefile = get_makefile_filename() try: _parse_makefile(makefile, vars) except IOError, e: diff --git a/PythonLib/min/tabnanny.py b/PythonLib/min/tabnanny.py index 76665ac9..e48b72a2 100644 --- a/PythonLib/min/tabnanny.py +++ b/PythonLib/min/tabnanny.py @@ -59,7 +59,7 @@ def main(): class NannyNag(Exception): """ - Raised by tokeneater() if detecting an ambiguous indent. + Raised by process_tokens() if detecting an ambiguous indent. Captured and handled in check(). """ def __init__(self, lineno, msg, line): diff --git a/PythonLib/min/tarfile.py b/PythonLib/min/tarfile.py index 44ecd24e..adf91d53 100644 --- a/PythonLib/min/tarfile.py +++ b/PythonLib/min/tarfile.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # -*- coding: iso-8859-1 -*- #------------------------------------------------------------------- # tarfile.py @@ -42,6 +41,7 @@ #--------- # Imports #--------- +from __builtin__ import open as bltn_open import sys import os import shutil @@ -186,7 +186,7 @@ def nti(s): # itn() below. if s[0] != chr(0200): try: - n = int(nts(s) or "0", 8) + n = int(nts(s).strip() or "0", 8) except ValueError: raise InvalidHeaderError("invalid header") else: @@ -418,28 +418,34 @@ def __init__(self, name, mode, comptype, fileobj, bufsize): self.pos = 0L self.closed = False - if comptype == "gz": - try: - import zlib - except ImportError: - raise CompressionError("zlib module is not available") - self.zlib = zlib - self.crc = zlib.crc32("") & 0xffffffffL - if mode == "r": - self._init_read_gz() - else: - self._init_write_gz() + try: + if comptype == "gz": + try: + import zlib + except ImportError: + raise CompressionError("zlib module is not available") + self.zlib = zlib + self.crc = zlib.crc32("") & 0xffffffffL + if mode == "r": + self._init_read_gz() + else: + self._init_write_gz() - if comptype == "bz2": - try: - import bz2 - except ImportError: - raise CompressionError("bz2 module is not available") - if mode == "r": - self.dbuf = "" - self.cmp = bz2.BZ2Decompressor() - else: - self.cmp = bz2.BZ2Compressor() + elif comptype == "bz2": + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + if mode == "r": + self.dbuf = "" + self.cmp = bz2.BZ2Decompressor() + else: + self.cmp = bz2.BZ2Compressor() + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise def __del__(self): if hasattr(self, "closed") and not self.closed: @@ -486,26 +492,26 @@ def close(self): if self.closed: return - if self.mode == "w" and self.comptype != "tar": - self.buf += self.cmp.flush() - - if self.mode == "w" and self.buf: - self.fileobj.write(self.buf) - self.buf = "" - if self.comptype == "gz": - # The native zlib crc is an unsigned 32-bit integer, but - # the Python wrapper implicitly casts that to a signed C - # long. So, on a 32-bit box self.crc may "look negative", - # while the same crc on a 64-bit box may "look positive". - # To avoid irksome warnings from the `struct` module, force - # it to look positive on all boxes. - self.fileobj.write(struct.pack(" 1 or mode not in "raw": + modes = {"r": "rb", "a": "r+b", "w": "wb"} + if mode not in modes: raise ValueError("mode must be 'r', 'a' or 'w'") self.mode = mode - self._mode = {"r": "rb", "a": "r+b", "w": "wb"}[mode] + self._mode = modes[mode] if not fileobj: if self.mode == "a" and not os.path.exists(name): @@ -1652,7 +1665,9 @@ def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): if mode in ("r", "r:*"): # Find out which *open() is appropriate for opening the file. - for comptype in cls.OPEN_METH: + def not_compressed(comptype): + return cls.OPEN_METH[comptype] == 'taropen' + for comptype in sorted(cls.OPEN_METH, key=not_compressed): func = getattr(cls, cls.OPEN_METH[comptype]) if fileobj is not None: saved_pos = fileobj.tell() @@ -1682,16 +1697,19 @@ def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): filemode = filemode or "r" comptype = comptype or "tar" - if filemode not in "rw": + if filemode not in ("r", "w"): raise ValueError("mode must be 'r' or 'w'") - t = cls(name, filemode, - _Stream(name, filemode, comptype, fileobj, bufsize), - **kwargs) + stream = _Stream(name, filemode, comptype, fileobj, bufsize) + try: + t = cls(name, filemode, stream, **kwargs) + except: + stream.close() + raise t._extfileobj = False return t - elif mode in "aw": + elif mode in ("a", "w"): return cls.taropen(name, mode, fileobj, **kwargs) raise ValueError("undiscernible mode") @@ -1700,7 +1718,7 @@ def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): def taropen(cls, name, mode="r", fileobj=None, **kwargs): """Open uncompressed tar archive name for reading or writing. """ - if len(mode) > 1 or mode not in "raw": + if mode not in ("r", "a", "w"): raise ValueError("mode must be 'r', 'a' or 'w'") return cls(name, mode, fileobj, **kwargs) @@ -1709,7 +1727,7 @@ def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): """Open gzip compressed tar archive name for reading or writing. Appending is not allowed. """ - if len(mode) > 1 or mode not in "rw": + if mode not in ("r", "w"): raise ValueError("mode must be 'r' or 'w'") try: @@ -1718,15 +1736,23 @@ def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): except (ImportError, AttributeError): raise CompressionError("gzip module is not available") - if fileobj is None: - fileobj = bltn_open(name, mode + "b") + try: + fileobj = gzip.GzipFile(name, mode, compresslevel, fileobj) + except OSError: + if fileobj is not None and mode == 'r': + raise ReadError("not a gzip file") + raise try: - t = cls.taropen(name, mode, - gzip.GzipFile(name, mode, compresslevel, fileobj), - **kwargs) + t = cls.taropen(name, mode, fileobj, **kwargs) except IOError: - raise ReadError("not a gzip file") + fileobj.close() + if mode == 'r': + raise ReadError("not a gzip file") + raise + except: + fileobj.close() + raise t._extfileobj = False return t @@ -1735,7 +1761,7 @@ def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): """Open bzip2 compressed tar archive name for reading or writing. Appending is not allowed. """ - if len(mode) > 1 or mode not in "rw": + if mode not in ("r", "w"): raise ValueError("mode must be 'r' or 'w'.") try: @@ -1751,7 +1777,13 @@ def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): try: t = cls.taropen(name, mode, fileobj, **kwargs) except (IOError, EOFError): - raise ReadError("not a bzip2 file") + fileobj.close() + if mode == 'r': + raise ReadError("not a bzip2 file") + raise + except: + fileobj.close() + raise t._extfileobj = False return t @@ -1772,18 +1804,19 @@ def close(self): if self.closed: return - if self.mode in "aw": - self.fileobj.write(NUL * (BLOCKSIZE * 2)) - self.offset += (BLOCKSIZE * 2) - # fill up the end with zero-blocks - # (like option -b20 for tar does) - blocks, remainder = divmod(self.offset, RECORDSIZE) - if remainder > 0: - self.fileobj.write(NUL * (RECORDSIZE - remainder)) - - if not self._extfileobj: - self.fileobj.close() self.closed = True + try: + if self.mode in "aw": + self.fileobj.write(NUL * (BLOCKSIZE * 2)) + self.offset += (BLOCKSIZE * 2) + # fill up the end with zero-blocks + # (like option -b20 for tar does) + blocks, remainder = divmod(self.offset, RECORDSIZE) + if remainder > 0: + self.fileobj.write(NUL * (RECORDSIZE - remainder)) + finally: + if not self._extfileobj: + self.fileobj.close() def getmember(self, name): """Return a TarInfo object for member `name'. If `name' can not be @@ -1813,11 +1846,12 @@ def getnames(self): return [tarinfo.name for tarinfo in self.getmembers()] def gettarinfo(self, name=None, arcname=None, fileobj=None): - """Create a TarInfo object for either the file `name' or the file - object `fileobj' (using os.fstat on its file descriptor). You can - modify some of the TarInfo's attributes before you add it using - addfile(). If given, `arcname' specifies an alternative name for the - file in the archive. + """Create a TarInfo object from the result of os.stat or equivalent + on an existing file. The file is either named by `name', or + specified as a file object `fileobj' with a file descriptor. If + given, `arcname' specifies an alternative name for the file in the + archive, otherwise, the name is taken from the 'name' attribute of + 'fileobj', or the 'name' argument. """ self._check("aw") @@ -1838,7 +1872,7 @@ def gettarinfo(self, name=None, arcname=None, fileobj=None): # Now, fill the TarInfo object with # information specific for the file. tarinfo = self.tarinfo() - tarinfo.tarfile = self + tarinfo.tarfile = self # Not needed # Use os.stat or os.lstat, depending on platform # and if symlinks shall be resolved. @@ -2003,7 +2037,7 @@ def add(self, name, arcname=None, recursive=True, exclude=None, filter=None): def addfile(self, tarinfo, fileobj=None): """Add the TarInfo object `tarinfo' to the archive. If `fileobj' is given, tarinfo.size bytes are read from it and added to the archive. - You can create TarInfo objects using gettarinfo(). + You can create TarInfo objects directly, or by using gettarinfo(). On Windows platforms, `fileobj' should always be opened with mode 'rb' to avoid irritation about the file size. """ @@ -2311,8 +2345,13 @@ def next(self): self.firstmember = None return m + # Advance the file pointer. + if self.offset != self.fileobj.tell(): + self.fileobj.seek(self.offset - 1) + if not self.fileobj.read(1): + raise ReadError("unexpected end of data") + # Read the next block. - self.fileobj.seek(self.offset) tarinfo = None while True: try: @@ -2588,5 +2627,4 @@ def is_tarfile(name): except TarError: return False -bltn_open = open open = TarFile.open diff --git a/PythonLib/min/telnetlib.py b/PythonLib/min/telnetlib.py index 727e8f7c..2eaa8e37 100644 --- a/PythonLib/min/telnetlib.py +++ b/PythonLib/min/telnetlib.py @@ -254,12 +254,13 @@ def set_debuglevel(self, debuglevel): def close(self): """Close the connection.""" - if self.sock: - self.sock.close() + sock = self.sock self.sock = 0 self.eof = 1 self.iacseq = '' self.sb = 0 + if sock: + sock.close() def get_socket(self): """Return the socket object used internally.""" @@ -312,7 +313,9 @@ def _read_until_with_poll(self, match, timeout): poller.register(self, poll_in_or_priority_flags) while i < 0 and not self.eof: try: - ready = poller.poll(call_timeout) + # Poll takes its timeout in milliseconds. + ready = poller.poll(None if timeout is None + else 1000 * call_timeout) except select.error as e: if e.errno == errno.EINTR: if timeout is not None: @@ -682,7 +685,8 @@ def _expect_with_poll(self, expect_list, timeout=None): poller.register(self, poll_in_or_priority_flags) while not m and not self.eof: try: - ready = poller.poll(call_timeout) + ready = poller.poll(None if timeout is None + else 1000 * call_timeout) except select.error as e: if e.errno == errno.EINTR: if timeout is not None: diff --git a/PythonLib/min/tempfile.py b/PythonLib/min/tempfile.py index 7154d2c6..7e3b25a0 100644 --- a/PythonLib/min/tempfile.py +++ b/PythonLib/min/tempfile.py @@ -1,10 +1,10 @@ """Temporary files. This module provides generic, low- and high-level interfaces for -creating temporary files and directories. The interfaces listed -as "safe" just below can be used without fear of race conditions. -Those listed as "unsafe" cannot, and are provided for backward -compatibility only. +creating temporary files and directories. All of the interfaces +provided by this module can be used without fear of race conditions +except for 'mktemp'. 'mktemp' is subject to race conditions and +should not be used; it is provided for backward compatibility only. This module also provides some data items to the user: @@ -205,9 +205,14 @@ def _get_default_tempdir(): _os.unlink(filename) return dir except (OSError, IOError) as e: - if e.args[0] != _errno.EEXIST: - break # no point trying more names in this directory - pass + if e.args[0] == _errno.EEXIST: + continue + if (_os.name == 'nt' and e.args[0] == _errno.EACCES and + _os.path.isdir(dir) and _os.access(dir, _os.W_OK)): + # On windows, when a directory with the chosen name already + # exists, EACCES error code is returned instead of EEXIST. + continue + break # no point trying more names in this directory raise IOError, (_errno.ENOENT, ("No usable temporary directory found in %s" % dirlist)) @@ -242,7 +247,8 @@ def _mkstemp_inner(dir, pre, suf, flags): except OSError, e: if e.errno == _errno.EEXIST: continue # try again - if _os.name == 'nt' and e.errno == _errno.EACCES: + if (_os.name == 'nt' and e.errno == _errno.EACCES and + _os.path.isdir(dir) and _os.access(dir, _os.W_OK)): # On windows, when a directory with the chosen name already # exists, EACCES error code is returned instead of EEXIST. continue @@ -335,6 +341,11 @@ def mkdtemp(suffix="", prefix=template, dir=None): except OSError, e: if e.errno == _errno.EEXIST: continue # try again + if (_os.name == 'nt' and e.errno == _errno.EACCES and + _os.path.isdir(dir) and _os.access(dir, _os.W_OK)): + # On windows, when a directory with the chosen name already + # exists, EACCES error code is returned instead of EEXIST. + continue raise raise IOError, (_errno.EEXIST, "No usable temporary directory name found") @@ -413,9 +424,11 @@ def __enter__(self): def close(self): if not self.close_called: self.close_called = True - self.file.close() - if self.delete: - self.unlink(self.name) + try: + self.file.close() + finally: + if self.delete: + self.unlink(self.name) def __del__(self): self.close() @@ -442,8 +455,8 @@ def NamedTemporaryFile(mode='w+b', bufsize=-1, suffix="", The file is created as mkstemp() would do it. Returns an object with a file-like interface; the name of the file - is accessible as file.name. The file will be automatically deleted - when it is closed unless the 'delete' argument is set to False. + is accessible as its 'name' attribute. The file will be automatically + deleted when it is closed unless the 'delete' argument is set to False. """ if dir is None: @@ -460,8 +473,13 @@ def NamedTemporaryFile(mode='w+b', bufsize=-1, suffix="", flags |= _os.O_TEMPORARY (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags) - file = _os.fdopen(fd, mode, bufsize) - return _TemporaryFileWrapper(file, name, delete) + try: + file = _os.fdopen(fd, mode, bufsize) + return _TemporaryFileWrapper(file, name, delete) + except BaseException: + _os.unlink(name) + _os.close(fd) + raise if _os.name != 'posix' or _os.sys.platform == 'cygwin': # On non-POSIX and Cygwin systems, assume that we cannot unlink a file diff --git a/PythonLib/min/textwrap.py b/PythonLib/min/textwrap.py index 62ea0b48..5c2e4fa5 100644 --- a/PythonLib/min/textwrap.py +++ b/PythonLib/min/textwrap.py @@ -147,7 +147,7 @@ def _munge_whitespace(self, text): """_munge_whitespace(text : string) -> string Munge whitespace in text: expand tabs and convert all other - whitespace characters to spaces. Eg. " foo\tbar\n\nbaz" + whitespace characters to spaces. Eg. " foo\\tbar\\n\\nbaz" becomes " foo bar baz". """ if self.expand_tabs: @@ -193,7 +193,7 @@ def _fix_sentence_endings(self, chunks): """_fix_sentence_endings(chunks : [string]) Correct for sentence endings buried in 'chunks'. Eg. when the - original text contains "... foo.\nBar ...", munge_whitespace() + original text contains "... foo.\\nBar ...", munge_whitespace() and split() will convert that to [..., "foo.", " ", "Bar", ...] which has one too few spaces; this method simply changes the one space to two. @@ -379,7 +379,7 @@ def dedent(text): in indented form. Note that tabs and spaces are both treated as whitespace, but they - are not equal: the lines " hello" and "\thello" are + are not equal: the lines " hello" and "\\thello" are considered to have no common leading whitespace. (This behaviour is new in Python 2.5; older versions of this module incorrectly expanded tabs before searching for common leading whitespace.) @@ -403,11 +403,15 @@ def dedent(text): elif margin.startswith(indent): margin = indent - # Current line and previous winner have no common whitespace: - # there is no margin. + # Find the largest common whitespace between current line and previous + # winner. else: - margin = "" - break + for i, (x, y) in enumerate(zip(margin, indent)): + if x != y: + margin = margin[:i] + break + else: + margin = margin[:len(indent)] # sanity check (testing/debugging only) if 0 and margin: diff --git a/PythonLib/min/threading.py b/PythonLib/min/threading.py index e81471bb..527f20ac 100644 --- a/PythonLib/min/threading.py +++ b/PythonLib/min/threading.py @@ -11,6 +11,7 @@ import warnings from collections import deque as _deque +from itertools import count as _count from time import time as _time, sleep as _sleep from traceback import format_exc as _format_exc @@ -564,7 +565,7 @@ def __init__(self, verbose=None): def _reset_internal_locks(self): # private! called by Thread._reset_internal_locks by _after_fork() - self.__cond.__init__() + self.__cond.__init__(Lock()) def isSet(self): 'Return true if and only if the internal flag is true.' @@ -579,12 +580,9 @@ def set(self): that call wait() once the flag is true will not block at all. """ - self.__cond.acquire() - try: + with self.__cond: self.__flag = True self.__cond.notify_all() - finally: - self.__cond.release() def clear(self): """Reset the internal flag to false. @@ -593,11 +591,8 @@ def clear(self): set the internal flag to true again. """ - self.__cond.acquire() - try: + with self.__cond: self.__flag = False - finally: - self.__cond.release() def wait(self, timeout=None): """Block until the internal flag is true. @@ -614,20 +609,16 @@ def wait(self, timeout=None): True except if a timeout is given and the operation times out. """ - self.__cond.acquire() - try: + with self.__cond: if not self.__flag: self.__cond.wait(timeout) return self.__flag - finally: - self.__cond.release() # Helper to generate new thread names -_counter = 0 +_counter = _count().next +_counter() # Consume 0 so first non-main thread has id 1. def _newname(template="Thread-%d"): - global _counter - _counter = _counter + 1 - return template % _counter + return template % _counter() # Active thread administration _active_limbo_lock = _allocate_lock() @@ -818,10 +809,10 @@ def __bootstrap_inner(self): # shutdown) use self.__stderr. Otherwise still use sys (as in # _sys) in case sys.stderr was redefined since the creation of # self. - if _sys: - _sys.stderr.write("Exception in thread %s:\n%s\n" % - (self.name, _format_exc())) - else: + if _sys and _sys.stderr is not None: + print>>_sys.stderr, ("Exception in thread %s:\n%s" % + (self.name, _format_exc())) + elif self.__stderr is not None: # Do the best job possible w/o a huge amt. of code to # approximate a traceback (code ideas from # Lib/traceback.py) diff --git a/PythonLib/min/timeit.py b/PythonLib/min/timeit.py index da9e819b..bf0301e6 100644 --- a/PythonLib/min/timeit.py +++ b/PythonLib/min/timeit.py @@ -78,7 +78,7 @@ # in Timer.__init__() depend on setup being indented 4 spaces and stmt # being indented 8 spaces. template = """ -def inner(_it, _timer): +def inner(_it, _timer%(init)s): %(setup)s _t0 = _timer() for _i in _it: @@ -123,12 +123,19 @@ def __init__(self, stmt="pass", setup="pass", timer=default_timer): self.timer = timer ns = {} if isinstance(stmt, basestring): + # Check that the code can be compiled outside a function + if isinstance(setup, basestring): + compile(setup, dummy_src_name, "exec") + compile(setup + '\n' + stmt, dummy_src_name, "exec") + else: + compile(stmt, dummy_src_name, "exec") stmt = reindent(stmt, 8) if isinstance(setup, basestring): setup = reindent(setup, 4) - src = template % {'stmt': stmt, 'setup': setup} + src = template % {'stmt': stmt, 'setup': setup, 'init': ''} elif hasattr(setup, '__call__'): - src = template % {'stmt': stmt, 'setup': '_setup()'} + src = template % {'stmt': stmt, 'setup': '_setup()', + 'init': ', _setup=_setup'} ns['_setup'] = setup else: raise ValueError("setup is neither a string nor callable") @@ -234,10 +241,10 @@ def repeat(stmt="pass", setup="pass", timer=default_timer, """Convenience function to create Timer object and call repeat method.""" return Timer(stmt, setup, timer).repeat(repeat, number) -def main(args=None): +def main(args=None, _wrap_timer=None): """Main program, used when run as a script. - The optional argument specifies the command line to be parsed, + The optional 'args' argument specifies the command line to be parsed, defaulting to sys.argv[1:]. The return value is an exit code to be passed to sys.exit(); it @@ -246,6 +253,10 @@ def main(args=None): When an exception happens during timing, a traceback is printed to stderr and the return value is 1. Exceptions at other times (including the template compilation) are not caught. + + '_wrap_timer' is an internal interface used for unit testing. If it + is not None, it must be a callable that accepts a timer function + and returns another timer function (used for unit testing). """ if args is None: args = sys.argv[1:] @@ -291,6 +302,8 @@ def main(args=None): # directory) import os sys.path.insert(0, os.curdir) + if _wrap_timer is not None: + timer = _wrap_timer(timer) t = Timer(stmt, setup, timer) if number == 0: # determine number so that 0.2 <= total time < 2.0 diff --git a/PythonLib/min/token.py b/PythonLib/min/token.py index 34abf620..45825b4a 100644 --- a/PythonLib/min/token.py +++ b/PythonLib/min/token.py @@ -1,5 +1,3 @@ -#! /usr/bin/env python - """Token constants (from "token.h").""" # This file is automatically generated; please don't muck it up! diff --git a/PythonLib/min/tokenize.py b/PythonLib/min/tokenize.py index ca7b0749..d426cd2d 100644 --- a/PythonLib/min/tokenize.py +++ b/PythonLib/min/tokenize.py @@ -26,6 +26,7 @@ __credits__ = ('GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, ' 'Skip Montanaro, Raymond Hettinger') +from itertools import chain import string, re from token import * @@ -184,17 +185,43 @@ def __init__(self): def add_whitespace(self, start): row, col = start - assert row <= self.prev_row + if row < self.prev_row or row == self.prev_row and col < self.prev_col: + raise ValueError("start ({},{}) precedes previous end ({},{})" + .format(row, col, self.prev_row, self.prev_col)) + row_offset = row - self.prev_row + if row_offset: + self.tokens.append("\\\n" * row_offset) + self.prev_col = 0 col_offset = col - self.prev_col if col_offset: self.tokens.append(" " * col_offset) def untokenize(self, iterable): - for t in iterable: + it = iter(iterable) + indents = [] + startline = False + for t in it: if len(t) == 2: - self.compat(t, iterable) + self.compat(t, it) break tok_type, token, start, end, line = t + if tok_type == ENDMARKER: + break + if tok_type == INDENT: + indents.append(token) + continue + elif tok_type == DEDENT: + indents.pop() + self.prev_row, self.prev_col = end + continue + elif tok_type in (NEWLINE, NL): + startline = True + elif startline and indents: + indent = indents[-1] + if start[1] >= len(indent): + self.tokens.append(indent) + self.prev_col = len(indent) + startline = False self.add_whitespace(start) self.tokens.append(token) self.prev_row, self.prev_col = end @@ -204,16 +231,12 @@ def untokenize(self, iterable): return "".join(self.tokens) def compat(self, token, iterable): - startline = False indents = [] toks_append = self.tokens.append - toknum, tokval = token - if toknum in (NAME, NUMBER): - tokval += ' ' - if toknum in (NEWLINE, NL): - startline = True + startline = token[0] in (NEWLINE, NL) prevstring = False - for tok in iterable: + + for tok in chain([token], iterable): toknum, tokval = tok[:2] if toknum in (NAME, NUMBER): @@ -263,7 +286,7 @@ def untokenize(iterable): def generate_tokens(readline): """ - The generate_tokens() generator requires one argment, readline, which + The generate_tokens() generator requires one argument, readline, which must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as a string. Alternately, readline diff --git a/PythonLib/min/traceback.py b/PythonLib/min/traceback.py index 5ad2838f..0a3dd11d 100644 --- a/PythonLib/min/traceback.py +++ b/PythonLib/min/traceback.py @@ -189,11 +189,12 @@ def format_exception_only(etype, value): if badline is not None: lines.append(' %s\n' % badline.strip()) if offset is not None: - caretspace = badline.rstrip('\n')[:offset].lstrip() + caretspace = badline.rstrip('\n') + offset = min(len(caretspace), offset) - 1 + caretspace = caretspace[:offset].lstrip() # non-space whitespace (likes tabs) must be kept for alignment caretspace = ((c.isspace() and c or ' ') for c in caretspace) - # only three spaces to account for offset1 == pos 0 - lines.append(' %s^\n' % ''.join(caretspace)) + lines.append(' %s^\n' % ''.join(caretspace)) value = msg lines.append(_format_final_exc_line(stype, value)) diff --git a/PythonLib/min/types.py b/PythonLib/min/types.py index ff90e049..d414f549 100644 --- a/PythonLib/min/types.py +++ b/PythonLib/min/types.py @@ -82,3 +82,5 @@ def _m(self): pass MemberDescriptorType = type(FunctionType.func_globals) del sys, _f, _g, _C, _x # Not for export + +__all__ = list(n for n in globals() if n[:1] != '_') diff --git a/PythonLib/min/urllib.py b/PythonLib/min/urllib.py index 244cb053..d85504a5 100644 --- a/PythonLib/min/urllib.py +++ b/PythonLib/min/urllib.py @@ -69,15 +69,15 @@ def pathname2url(pathname): # Shortcut for basic usage _urlopener = None -def urlopen(url, data=None, proxies=None): +def urlopen(url, data=None, proxies=None, context=None): """Create a file-like object for the specified URL to read from.""" from warnings import warnpy3k warnpy3k("urllib.urlopen() has been removed in Python 3.0 in " "favor of urllib2.urlopen()", stacklevel=2) global _urlopener - if proxies is not None: - opener = FancyURLopener(proxies=proxies) + if proxies is not None or context is not None: + opener = FancyURLopener(proxies=proxies, context=context) elif not _urlopener: opener = FancyURLopener() _urlopener = opener @@ -87,11 +87,15 @@ def urlopen(url, data=None, proxies=None): return opener.open(url) else: return opener.open(url, data) -def urlretrieve(url, filename=None, reporthook=None, data=None): +def urlretrieve(url, filename=None, reporthook=None, data=None, context=None): global _urlopener - if not _urlopener: - _urlopener = FancyURLopener() - return _urlopener.retrieve(url, filename, reporthook, data) + if context is not None: + opener = FancyURLopener(context=context) + elif not _urlopener: + _urlopener = opener = FancyURLopener() + else: + opener = _urlopener + return opener.retrieve(url, filename, reporthook, data) def urlcleanup(): if _urlopener: _urlopener.cleanup() @@ -126,14 +130,15 @@ class URLopener: version = "Python-urllib/%s" % __version__ # Constructor - def __init__(self, proxies=None, **x509): + def __init__(self, proxies=None, context=None, **x509): if proxies is None: proxies = getproxies() assert hasattr(proxies, 'has_key'), "proxies must be a mapping" self.proxies = proxies self.key_file = x509.get('key_file') self.cert_file = x509.get('cert_file') - self.addheaders = [('User-Agent', self.version)] + self.context = context + self.addheaders = [('User-Agent', self.version), ('Accept', '*/*')] self.__tempfiles = [] self.__unlink = os.unlink # See cleanup() self.tempcache = None @@ -422,7 +427,8 @@ def open_https(self, url, data=None): auth = None h = httplib.HTTPS(host, 0, key_file=self.key_file, - cert_file=self.cert_file) + cert_file=self.cert_file, + context=self.context) if data is not None: h.putrequest('POST', selector) h.putheader('Content-Type', @@ -623,18 +629,20 @@ def http_error_default(self, url, fp, errcode, errmsg, headers): def http_error_302(self, url, fp, errcode, errmsg, headers, data=None): """Error 302 -- relocated (temporarily).""" self.tries += 1 - if self.maxtries and self.tries >= self.maxtries: - if hasattr(self, "http_error_500"): - meth = self.http_error_500 - else: - meth = self.http_error_default + try: + if self.maxtries and self.tries >= self.maxtries: + if hasattr(self, "http_error_500"): + meth = self.http_error_500 + else: + meth = self.http_error_default + return meth(url, fp, 500, + "Internal Server Error: Redirect Recursion", + headers) + result = self.redirect_internal(url, fp, errcode, errmsg, + headers, data) + return result + finally: self.tries = 0 - return meth(url, fp, 500, - "Internal Server Error: Redirect Recursion", headers) - result = self.redirect_internal(url, fp, errcode, errmsg, headers, - data) - self.tries = 0 - return result def redirect_internal(self, url, fp, errcode, errmsg, headers, data): if 'location' in headers: @@ -865,7 +873,11 @@ def __init__(self, user, passwd, host, port, dirs, self.timeout = timeout self.refcount = 0 self.keepalive = persistent - self.init() + try: + self.init() + except: + self.close() + raise def init(self): import ftplib @@ -920,13 +932,7 @@ def retrfile(self, file, type): return (ftpobj, retrlen) def endtransfer(self): - if not self.busy: - return self.busy = 0 - try: - self.ftp.voidresp() - except ftperrors(): - pass def close(self): self.keepalive = False @@ -984,11 +990,16 @@ def __init__(self, fp, closehook, *hookargs): self.hookargs = hookargs def close(self): - if self.closehook: - self.closehook(*self.hookargs) - self.closehook = None - self.hookargs = None - addbase.close(self) + try: + closehook = self.closehook + hookargs = self.hookargs + if closehook: + self.closehook = None + self.hookargs = None + closehook(*hookargs) + finally: + addbase.close(self) + class addinfo(addbase): """class to add an info() method to an open file.""" @@ -1082,8 +1093,7 @@ def splithost(url): """splithost('//host[:port]/path') --> 'host[:port]', '/path'.""" global _hostprog if _hostprog is None: - import re - _hostprog = re.compile('^//([^/?]*)(.*)$') + _hostprog = re.compile('//([^/#?]*)(.*)', re.DOTALL) match = _hostprog.match(url) if match: @@ -1125,10 +1135,13 @@ def splitport(host): global _portprog if _portprog is None: import re - _portprog = re.compile('^(.*):([0-9]+)$') + _portprog = re.compile('^(.*):([0-9]*)$') match = _portprog.match(host) - if match: return match.group(1, 2) + if match: + host, port = match.groups() + if port: + return host, port return host, None _nportprog = None @@ -1145,12 +1158,12 @@ def splitnport(host, defport=-1): match = _nportprog.match(host) if match: host, port = match.group(1, 2) - try: - if not port: raise ValueError, "no digits" - nport = int(port) - except ValueError: - nport = None - return host, nport + if port: + try: + nport = int(port) + except ValueError: + nport = None + return host, nport return host, defport _queryprog = None @@ -1359,25 +1372,51 @@ def getproxies_environment(): """Return a dictionary of scheme -> proxy server URL mappings. Scan the environment for variables named _proxy; - this seems to be the standard convention. If you need a - different way, you can pass a proxies dictionary to the - [Fancy]URLopener constructor. + this seems to be the standard convention. In order to prefer lowercase + variables, we process the environment in two passes, first matches any + and second matches only lower case proxies. + If you need a different way, you can pass a proxies dictionary to the + [Fancy]URLopener constructor. """ + # Get all variables proxies = {} for name, value in os.environ.items(): name = name.lower() if value and name[-6:] == '_proxy': proxies[name[:-6]] = value + + # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY + # (non-all-lowercase) as it may be set from the web server by a "Proxy:" + # header from the client + # If "proxy" is lowercase, it will still be used thanks to the next block + if 'REQUEST_METHOD' in os.environ: + proxies.pop('http', None) + + # Get lowercase variables + for name, value in os.environ.items(): + if name[-6:] == '_proxy': + name = name.lower() + if value: + proxies[name[:-6]] = value + else: + proxies.pop(name[:-6], None) + return proxies -def proxy_bypass_environment(host): +def proxy_bypass_environment(host, proxies=None): """Test if proxies should not be used for a particular host. - Checks the environment for a variable named no_proxy, which should - be a list of DNS suffixes separated by commas, or '*' for all hosts. + Checks the proxies dict for the value of no_proxy, which should be a + list of comma separated DNS suffixes, or '*' for all hosts. """ - no_proxy = os.environ.get('no_proxy', '') or os.environ.get('NO_PROXY', '') + if proxies is None: + proxies = getproxies_environment() + # don't bypass, if no_proxy isn't specified + try: + no_proxy = proxies['no'] + except KeyError: + return 0 # '*' is special case for always bypass if no_proxy == '*': return 1 @@ -1386,8 +1425,13 @@ def proxy_bypass_environment(host): # check if the host ends with any of the DNS suffixes no_proxy_list = [proxy.strip() for proxy in no_proxy.split(',')] for name in no_proxy_list: - if name and (hostonly.endswith(name) or host.endswith(name)): - return 1 + if name: + name = name.lstrip('.') # ignore leading dots + name = re.escape(name) + pattern = r'(.+\.)?%s$' % name + if (re.match(pattern, hostonly, re.I) + or re.match(pattern, host, re.I)): + return 1 # otherwise, don't bypass return 0 @@ -1463,8 +1507,14 @@ def getproxies_macosx_sysconf(): return _get_proxies() def proxy_bypass(host): - if getproxies_environment(): - return proxy_bypass_environment(host) + """Return True, if a host should be bypassed. + + Checks proxy settings gathered from the environment, if specified, or + from the MacOSX framework SystemConfiguration. + """ + proxies = getproxies_environment() + if proxies: + return proxy_bypass_environment(host, proxies) else: return proxy_bypass_macosx_sysconf(host) @@ -1580,14 +1630,14 @@ def proxy_bypass_registry(host): return 0 def proxy_bypass(host): - """Return a dictionary of scheme -> proxy server URL mappings. + """Return True, if the host should be bypassed. - Returns settings gathered from the environment, if specified, + Checks proxy settings gathered from the environment, if specified, or the registry. - """ - if getproxies_environment(): - return proxy_bypass_environment(host) + proxies = getproxies_environment() + if proxies: + return proxy_bypass_environment(host, proxies) else: return proxy_bypass_registry(host) diff --git a/PythonLib/min/urllib2.py b/PythonLib/min/urllib2.py index aadeb737..8b634ada 100644 --- a/PythonLib/min/urllib2.py +++ b/PythonLib/min/urllib2.py @@ -109,6 +109,14 @@ except ImportError: from StringIO import StringIO +# check for SSL +try: + import ssl +except ImportError: + _have_ssl = False +else: + _have_ssl = True + from urllib import (unwrap, unquote, splittype, splithost, quote, addinfourl, splitport, splittag, toBytes, splitattr, ftpwrapper, splituser, splitpasswd, splitvalue) @@ -120,11 +128,30 @@ __version__ = sys.version[:3] _opener = None -def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): +def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, + cafile=None, capath=None, cadefault=False, context=None): global _opener - if _opener is None: - _opener = build_opener() - return _opener.open(url, data, timeout) + if cafile or capath or cadefault: + if context is not None: + raise ValueError( + "You can't pass both context and any of cafile, capath, and " + "cadefault" + ) + if not _have_ssl: + raise ValueError('SSL support not available') + context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, + cafile=cafile, + capath=capath) + https_handler = HTTPSHandler(context=context) + opener = build_opener(https_handler) + elif context: + https_handler = HTTPSHandler(context=context) + opener = build_opener(https_handler) + elif _opener is None: + _opener = opener = build_opener() + else: + opener = _opener + return opener.open(url, data, timeout) def install_opener(opener): global _opener @@ -221,11 +248,9 @@ def __getattr__(self, attr): # methods getting called in a non-standard order. this may be # too complicated and/or unnecessary. # XXX should the __r_XXX attributes be public? - if attr[:12] == '_Request__r_': - name = attr[12:] - if hasattr(Request, 'get_' + name): - getattr(self, 'get_' + name)() - return getattr(self, attr) + if attr in ('_Request__r_type', '_Request__r_host'): + getattr(self, 'get_' + attr[12:])() + return self.__dict__[attr] raise AttributeError, attr def get_method(self): @@ -584,7 +609,7 @@ def http_error_302(self, req, fp, code, msg, headers): # fix a possible malformed URL urlparts = urlparse.urlparse(newurl) - if not urlparts.path: + if not urlparts.path and urlparts.netloc: urlparts = list(urlparts) urlparts[2] = "/" newurl = urlparse.urlunparse(urlparts) @@ -843,10 +868,7 @@ def __init__(self, password_mgr=None): password_mgr = HTTPPasswordMgr() self.passwd = password_mgr self.add_password = self.passwd.add_password - self.retried = 0 - def reset_retry_count(self): - self.retried = 0 def http_error_auth_reqed(self, authreq, host, req, headers): # host may be an authority (without userinfo) or a URL with an @@ -854,13 +876,6 @@ def http_error_auth_reqed(self, authreq, host, req, headers): # XXX could be multiple headers authreq = headers.get(authreq, None) - if self.retried > 5: - # retry sending the username:password 5 times before failing. - raise HTTPError(req.get_full_url(), 401, "basic auth failed", - headers, None) - else: - self.retried += 1 - if authreq: mo = AbstractBasicAuthHandler.rx.search(authreq) if mo: @@ -869,17 +884,14 @@ def http_error_auth_reqed(self, authreq, host, req, headers): warnings.warn("Basic Auth Realm was unquoted", UserWarning, 2) if scheme.lower() == 'basic': - response = self.retry_http_basic_auth(host, req, realm) - if response and response.code != 401: - self.retried = 0 - return response + return self.retry_http_basic_auth(host, req, realm) def retry_http_basic_auth(self, host, req, realm): user, pw = self.passwd.find_user_password(realm, host) if pw is not None: raw = "%s:%s" % (user, pw) auth = 'Basic %s' % base64.b64encode(raw).strip() - if req.headers.get(self.auth_header, None) == auth: + if req.get_header(self.auth_header, None) == auth: return None req.add_unredirected_header(self.auth_header, auth) return self.parent.open(req, timeout=req.timeout) @@ -895,7 +907,6 @@ def http_error_401(self, req, fp, code, msg, headers): url = req.get_full_url() response = self.http_error_auth_reqed('www-authenticate', url, req, headers) - self.reset_retry_count() return response @@ -911,7 +922,6 @@ def http_error_407(self, req, fp, code, msg, headers): authority = req.get_host() response = self.http_error_auth_reqed('proxy-authenticate', authority, req, headers) - self.reset_retry_count() return response @@ -1061,6 +1071,9 @@ def get_algorithm_impls(self, algorithm): elif algorithm == 'SHA': H = lambda x: hashlib.sha1(x).hexdigest() # XXX MD5-sess + else: + raise ValueError("Unsupported digest authentication " + "algorithm %r" % algorithm.lower()) KD = lambda s, d: H("%s:%s" % (s, d)) return H, KD @@ -1136,7 +1149,7 @@ def do_request_(self, request): return request - def do_open(self, http_class, req): + def do_open(self, http_class, req, **http_conn_args): """Return an addinfourl object for the request, using http_class. http_class must implement the HTTPConnection API from httplib. @@ -1150,7 +1163,8 @@ def do_open(self, http_class, req): if not host: raise URLError('no host given') - h = http_class(host, timeout=req.timeout) # will parse host:port + # will parse host:port + h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) @@ -1218,8 +1232,13 @@ def http_open(self, req): if hasattr(httplib, 'HTTPS'): class HTTPSHandler(AbstractHTTPHandler): + def __init__(self, debuglevel=0, context=None): + AbstractHTTPHandler.__init__(self, debuglevel) + self._context = context + def https_open(self, req): - return self.do_open(httplib.HTTPSConnection, req) + return self.do_open(httplib.HTTPSConnection, req, + context=self._context) https_request = AbstractHTTPHandler.do_request_ diff --git a/PythonLib/min/urlparse.py b/PythonLib/min/urlparse.py index 4ce982e8..4cd3d674 100644 --- a/PythonLib/min/urlparse.py +++ b/PythonLib/min/urlparse.py @@ -109,10 +109,11 @@ def port(self): netloc = self.netloc.split('@')[-1].split(']')[-1] if ':' in netloc: port = netloc.split(':')[1] - port = int(port, 10) - # verify legal port - if (0 <= port <= 65535): - return port + if port: + port = int(port, 10) + # verify legal port + if (0 <= port <= 65535): + return port return None from collections import namedtuple diff --git a/PythonLib/min/uuid.py b/PythonLib/min/uuid.py index cb4e5f05..7432032d 100644 --- a/PythonLib/min/uuid.py +++ b/PythonLib/min/uuid.py @@ -44,6 +44,8 @@ UUID('00010203-0405-0607-0809-0a0b0c0d0e0f') """ +import os + __author__ = 'Ka-Ping Yee ' RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE = [ @@ -291,51 +293,98 @@ def get_version(self): version = property(get_version) -def _find_mac(command, args, hw_identifiers, get_index): +def _popen(command, args): import os - for dir in ['', '/sbin/', '/usr/sbin']: + path = os.environ.get("PATH", os.defpath).split(os.pathsep) + path.extend(('/sbin', '/usr/sbin')) + for dir in path: executable = os.path.join(dir, command) - if not os.path.exists(executable): - continue + if (os.path.exists(executable) and + os.access(executable, os.F_OK | os.X_OK) and + not os.path.isdir(executable)): + break + else: + return None + # LC_ALL to ensure English output, 2>/dev/null to prevent output on + # stderr (Note: we don't have an example where the words we search for + # are actually localized, but in theory some system could do so.) + cmd = 'LC_ALL=C %s %s 2>/dev/null' % (executable, args) + return os.popen(cmd) - try: - # LC_ALL to get English output, 2>/dev/null to - # prevent output on stderr - cmd = 'LC_ALL=C %s %s 2>/dev/null' % (executable, args) - with os.popen(cmd) as pipe: - for line in pipe: - words = line.lower().split() - for i in range(len(words)): - if words[i] in hw_identifiers: - return int( - words[get_index(i)].replace(':', ''), 16) - except IOError: - continue - return None +def _find_mac(command, args, hw_identifiers, get_index): + try: + pipe = _popen(command, args) + if not pipe: + return + with pipe: + for line in pipe: + words = line.lower().rstrip().split() + for i in range(len(words)): + if words[i] in hw_identifiers: + try: + word = words[get_index(i)] + mac = int(word.replace(':', ''), 16) + if mac: + return mac + except (ValueError, IndexError): + # Virtual interfaces, such as those provided by + # VPNs, do not have a colon-delimited MAC address + # as expected, but a 16-byte HWAddr separated by + # dashes. These should be ignored in favor of a + # real MAC address + pass + except IOError: + pass def _ifconfig_getnode(): """Get the hardware address on Unix by running ifconfig.""" - # This works on Linux ('' or '-a'), Tru64 ('-av'), but not all Unixes. for args in ('', '-a', '-av'): mac = _find_mac('ifconfig', args, ['hwaddr', 'ether'], lambda i: i+1) if mac: return mac - import socket - ip_addr = socket.gethostbyname(socket.gethostname()) +def _arp_getnode(): + """Get the hardware address on Unix by running arp.""" + import os, socket + try: + ip_addr = socket.gethostbyname(socket.gethostname()) + except EnvironmentError: + return None # Try getting the MAC addr from arp based on our IP address (Solaris). - mac = _find_mac('arp', '-an', [ip_addr], lambda i: -1) - if mac: - return mac + return _find_mac('arp', '-an', [ip_addr], lambda i: -1) +def _lanscan_getnode(): + """Get the hardware address on Unix by running lanscan.""" # This might work on HP-UX. - mac = _find_mac('lanscan', '-ai', ['lan0'], lambda i: 0) - if mac: - return mac + return _find_mac('lanscan', '-ai', ['lan0'], lambda i: 0) - return None +def _netstat_getnode(): + """Get the hardware address on Unix by running netstat.""" + # This might work on AIX, Tru64 UNIX and presumably on IRIX. + try: + pipe = _popen('netstat', '-ia') + if not pipe: + return + with pipe: + words = pipe.readline().rstrip().split() + try: + i = words.index('Address') + except ValueError: + return + for line in pipe: + try: + words = line.rstrip().split() + word = words[i] + if len(word) == 17 and word.count(':') == 5: + mac = int(word.replace(':', ''), 16) + if mac: + return mac + except (ValueError, IndexError): + pass + except OSError: + pass def _ipconfig_getnode(): """Get the hardware address on Windows by running ipconfig.exe.""" @@ -353,13 +402,11 @@ def _ipconfig_getnode(): pipe = os.popen(os.path.join(dir, 'ipconfig') + ' /all') except IOError: continue - else: + with pipe: for line in pipe: value = line.split(':')[-1].strip().lower() if re.match('([0-9a-f][0-9a-f]-){5}[0-9a-f][0-9a-f]', value): return int(value.replace('-', ''), 16) - finally: - pipe.close() def _netbios_getnode(): """Get the hardware address on Windows using NetBIOS calls. @@ -393,23 +440,25 @@ def _netbios_getnode(): # Thanks to Thomas Heller for ctypes and for his help with its use here. # If ctypes is available, use it to find system routines for UUID generation. -_uuid_generate_random = _uuid_generate_time = _UuidCreate = None +_uuid_generate_time = _UuidCreate = None try: import ctypes, ctypes.util + import sys # The uuid_generate_* routines are provided by libuuid on at least # Linux and FreeBSD, and provided by libc on Mac OS X. - for libname in ['uuid', 'c']: + _libnames = ['uuid'] + if not sys.platform.startswith('win'): + _libnames.append('c') + for libname in _libnames: try: lib = ctypes.CDLL(ctypes.util.find_library(libname)) except: continue - if hasattr(lib, 'uuid_generate_random'): - _uuid_generate_random = lib.uuid_generate_random if hasattr(lib, 'uuid_generate_time'): _uuid_generate_time = lib.uuid_generate_time - if _uuid_generate_random is not None: - break # found everything we were looking for + break + del _libnames # The uuid_generate_* functions are broken on MacOS X 10.5, as noted # in issue #8621 the function generates the same sequence of values @@ -418,11 +467,10 @@ def _netbios_getnode(): # # Assume that the uuid_generate functions are broken from 10.5 onward, # the test can be adjusted when a later version is fixed. - import sys if sys.platform == 'darwin': import os if int(os.uname()[2].split('.')[0]) >= 9: - _uuid_generate_random = _uuid_generate_time = None + _uuid_generate_time = None # On Windows prior to 2000, UuidCreate gives a UUID containing the # hardware address. On Windows 2000 and later, UuidCreate makes a @@ -477,7 +525,8 @@ def getnode(): if sys.platform == 'win32': getters = [_windll_getnode, _netbios_getnode, _ipconfig_getnode] else: - getters = [_unixdll_getnode, _ifconfig_getnode] + getters = [_unixdll_getnode, _ifconfig_getnode, _arp_getnode, + _lanscan_getnode, _netstat_getnode] for getter in getters + [_random_getnode]: try: @@ -532,21 +581,7 @@ def uuid3(namespace, name): def uuid4(): """Generate a random UUID.""" - - # When the system provides a version-4 UUID generator, use it. - if _uuid_generate_random: - _buffer = ctypes.create_string_buffer(16) - _uuid_generate_random(_buffer) - return UUID(bytes=_buffer.raw) - - # Otherwise, get randomness from urandom or the 'random' module. - try: - import os - return UUID(bytes=os.urandom(16), version=4) - except: - import random - bytes = [chr(random.randrange(256)) for i in range(16)] - return UUID(bytes=bytes, version=4) + return UUID(bytes=os.urandom(16), version=4) def uuid5(namespace, name): """Generate a UUID from the SHA-1 hash of a namespace UUID and a name.""" diff --git a/PythonLib/min/warnings.py b/PythonLib/min/warnings.py index 08b70afb..84f111d6 100644 --- a/PythonLib/min/warnings.py +++ b/PythonLib/min/warnings.py @@ -7,7 +7,8 @@ import sys import types -__all__ = ["warn", "showwarning", "formatwarning", "filterwarnings", +__all__ = ["warn", "warn_explicit", "showwarning", + "formatwarning", "filterwarnings", "simplefilter", "resetwarnings", "catch_warnings"] @@ -25,9 +26,12 @@ def _show_warning(message, category, filename, lineno, file=None, line=None): """Hook to write a warning to a file; replace if you like.""" if file is None: file = sys.stderr + if file is None: + # sys.stderr is None - warnings get lost + return try: file.write(formatwarning(message, category, filename, lineno, line)) - except IOError: + except (IOError, UnicodeError): pass # the file (probably stderr) is invalid - this warning gets lost. # Keep a working version around in case the deprecation of the old API is # triggered. @@ -35,11 +39,29 @@ def _show_warning(message, category, filename, lineno, file=None, line=None): def formatwarning(message, category, filename, lineno, line=None): """Function to format a warning the standard way.""" - s = "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message) + try: + unicodetype = unicode + except NameError: + unicodetype = () + try: + message = str(message) + except UnicodeEncodeError: + pass + s = "%s: %s: %s\n" % (lineno, category.__name__, message) line = linecache.getline(filename, lineno) if line is None else line if line: line = line.strip() + if isinstance(s, unicodetype) and isinstance(line, str): + line = unicode(line, 'latin1') s += " %s\n" % line + if isinstance(s, unicodetype) and isinstance(filename, str): + enc = sys.getfilesystemencoding() + if enc: + try: + filename = unicode(filename, enc) + except UnicodeDecodeError: + pass + s = "%s:%s" % (filename, s) return s def filterwarnings(action, message="", category=Warning, module="", lineno=0, @@ -62,10 +84,10 @@ def filterwarnings(action, message="", category=Warning, module="", lineno=0, "category must be a class" assert issubclass(category, Warning), "category must be a Warning subclass" assert isinstance(module, basestring), "module must be a string" - assert isinstance(lineno, int) and lineno >= 0, \ + assert isinstance(lineno, (int, long)) and lineno >= 0, \ "lineno must be an int >= 0" item = (action, re.compile(message, re.I), category, - re.compile(module), lineno) + re.compile(module), int(lineno)) if append: filters.append(item) else: @@ -83,9 +105,9 @@ def simplefilter(action, category=Warning, lineno=0, append=0): """ assert action in ("error", "ignore", "always", "default", "module", "once"), "invalid action: %r" % (action,) - assert isinstance(lineno, int) and lineno >= 0, \ + assert isinstance(lineno, (int, long)) and lineno >= 0, \ "lineno must be an int >= 0" - item = (action, None, category, None, lineno) + item = (action, None, category, None, int(lineno)) if append: filters.append(item) else: @@ -287,9 +309,12 @@ class WarningMessage(object): def __init__(self, message, category, filename, lineno, file=None, line=None): - local_values = locals() - for attr in self._WARNING_DETAILS: - setattr(self, attr, local_values[attr]) + self.message = message + self.category = category + self.filename = filename + self.lineno = lineno + self.file = file + self.line = line self._category_name = category.__name__ if category else None def __str__(self): diff --git a/PythonLib/min/wave.py b/PythonLib/min/wave.py index c320238f..28acaa6c 100644 --- a/PythonLib/min/wave.py +++ b/PythonLib/min/wave.py @@ -180,10 +180,11 @@ def rewind(self): self._soundpos = 0 def close(self): - if self._i_opened_the_file: - self._i_opened_the_file.close() - self._i_opened_the_file = None self._file = None + file = self._i_opened_the_file + if file: + self._i_opened_the_file = None + file.close() def tell(self): return self._soundpos @@ -242,7 +243,7 @@ def readframes(self, nframes): assert data.itemsize == self._sampwidth nitems = nframes * self._nchannels if nitems * self._sampwidth > chunk.chunksize - chunk.size_read: - nitems = (chunk.chunksize - chunk.size_read) / self._sampwidth + nitems = (chunk.chunksize - chunk.size_read) // self._sampwidth data.fromfile(chunk.file.file, nitems) # "tell" data chunk how much was read chunk.size_read = chunk.size_read + nitems * self._sampwidth @@ -424,7 +425,9 @@ def writeframesraw(self, data): data = self._convert(data) if self._sampwidth in (2, 4) and sys.byteorder == 'big': import array - data = array.array(_array_fmts[self._sampwidth], data) + a = array.array(_array_fmts[self._sampwidth]) + a.fromstring(data) + data = a assert data.itemsize == self._sampwidth data.byteswap() data.tofile(self._file) @@ -442,17 +445,18 @@ def writeframes(self, data): self._patchheader() def close(self): - if self._file: - try: + try: + if self._file: self._ensure_header_written(0) if self._datalength != self._datawritten: self._patchheader() self._file.flush() - finally: - self._file = None - if self._i_opened_the_file: - self._i_opened_the_file.close() - self._i_opened_the_file = None + finally: + self._file = None + file = self._i_opened_the_file + if file: + self._i_opened_the_file = None + file.close() # # Internal methods. diff --git a/PythonLib/min/weakref.py b/PythonLib/min/weakref.py index 88c60e71..3e1fb815 100644 --- a/PythonLib/min/weakref.py +++ b/PythonLib/min/weakref.py @@ -18,9 +18,10 @@ proxy, CallableProxyType, ProxyType, - ReferenceType) + ReferenceType, + _remove_dead_weakref) -from _weakrefset import WeakSet +from _weakrefset import WeakSet, _IterationGuard from exceptions import ReferenceError @@ -44,22 +45,55 @@ class WeakValueDictionary(UserDict.UserDict): # objects are unwrapped on the way out, and we always wrap on the # way in). - def __init__(self, *args, **kw): - def remove(wr, selfref=ref(self)): + def __init__(*args, **kw): + if not args: + raise TypeError("descriptor '__init__' of 'WeakValueDictionary' " + "object needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + def remove(wr, selfref=ref(self), _atomic_removal=_remove_dead_weakref): self = selfref() if self is not None: - del self.data[wr.key] + if self._iterating: + self._pending_removals.append(wr.key) + else: + # Atomic removal is necessary since this function + # can be called asynchronously by the GC + _atomic_removal(self.data, wr.key) self._remove = remove + # A list of keys to be removed + self._pending_removals = [] + self._iterating = set() UserDict.UserDict.__init__(self, *args, **kw) + def _commit_removals(self): + l = self._pending_removals + d = self.data + # We shouldn't encounter any KeyError, because this method should + # always be called *before* mutating the dict. + while l: + key = l.pop() + _remove_dead_weakref(d, key) + def __getitem__(self, key): + if self._pending_removals: + self._commit_removals() o = self.data[key]() if o is None: raise KeyError, key else: return o + def __delitem__(self, key): + if self._pending_removals: + self._commit_removals() + del self.data[key] + def __contains__(self, key): + if self._pending_removals: + self._commit_removals() try: o = self.data[key]() except KeyError: @@ -67,6 +101,8 @@ def __contains__(self, key): return o is not None def has_key(self, key): + if self._pending_removals: + self._commit_removals() try: o = self.data[key]() except KeyError: @@ -77,9 +113,18 @@ def __repr__(self): return "" % id(self) def __setitem__(self, key, value): + if self._pending_removals: + self._commit_removals() self.data[key] = KeyedRef(value, self._remove, key) + def clear(self): + if self._pending_removals: + self._commit_removals() + self.data.clear() + def copy(self): + if self._pending_removals: + self._commit_removals() new = WeakValueDictionary() for key, wr in self.data.items(): o = wr() @@ -91,6 +136,8 @@ def copy(self): def __deepcopy__(self, memo): from copy import deepcopy + if self._pending_removals: + self._commit_removals() new = self.__class__() for key, wr in self.data.items(): o = wr() @@ -99,6 +146,8 @@ def __deepcopy__(self, memo): return new def get(self, key, default=None): + if self._pending_removals: + self._commit_removals() try: wr = self.data[key] except KeyError: @@ -112,6 +161,8 @@ def get(self, key, default=None): return o def items(self): + if self._pending_removals: + self._commit_removals() L = [] for key, wr in self.data.items(): o = wr() @@ -120,16 +171,22 @@ def items(self): return L def iteritems(self): - for wr in self.data.itervalues(): - value = wr() - if value is not None: - yield wr.key, value + if self._pending_removals: + self._commit_removals() + with _IterationGuard(self): + for wr in self.data.itervalues(): + value = wr() + if value is not None: + yield wr.key, value def iterkeys(self): - return self.data.iterkeys() + if self._pending_removals: + self._commit_removals() + with _IterationGuard(self): + for k in self.data.iterkeys(): + yield k - def __iter__(self): - return self.data.iterkeys() + __iter__ = iterkeys def itervaluerefs(self): """Return an iterator that yields the weak references to the values. @@ -141,15 +198,24 @@ def itervaluerefs(self): keep the values around longer than needed. """ - return self.data.itervalues() + if self._pending_removals: + self._commit_removals() + with _IterationGuard(self): + for wr in self.data.itervalues(): + yield wr def itervalues(self): - for wr in self.data.itervalues(): - obj = wr() - if obj is not None: - yield obj + if self._pending_removals: + self._commit_removals() + with _IterationGuard(self): + for wr in self.data.itervalues(): + obj = wr() + if obj is not None: + yield obj def popitem(self): + if self._pending_removals: + self._commit_removals() while 1: key, wr = self.data.popitem() o = wr() @@ -157,27 +223,44 @@ def popitem(self): return key, o def pop(self, key, *args): + if self._pending_removals: + self._commit_removals() try: o = self.data.pop(key)() except KeyError: + o = None + if o is None: if args: return args[0] - raise - if o is None: - raise KeyError, key + else: + raise KeyError, key else: return o def setdefault(self, key, default=None): + if self._pending_removals: + self._commit_removals() try: - wr = self.data[key] + o = self.data[key]() except KeyError: + o = None + if o is None: self.data[key] = KeyedRef(default, self._remove, key) return default else: - return wr() + return o - def update(self, dict=None, **kwargs): + def update(*args, **kwargs): + if not args: + raise TypeError("descriptor 'update' of 'WeakValueDictionary' " + "object needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + dict = args[0] if args else None + if self._pending_removals: + self._commit_removals() d = self.data if dict is not None: if not hasattr(dict, "items"): @@ -197,9 +280,13 @@ def valuerefs(self): keep the values around longer than needed. """ + if self._pending_removals: + self._commit_removals() return self.data.values() def values(self): + if self._pending_removals: + self._commit_removals() L = [] for wr in self.data.values(): o = wr() @@ -245,9 +332,29 @@ def __init__(self, dict=None): def remove(k, selfref=ref(self)): self = selfref() if self is not None: - del self.data[k] + if self._iterating: + self._pending_removals.append(k) + else: + del self.data[k] self._remove = remove - if dict is not None: self.update(dict) + # A list of dead weakrefs (keys to be removed) + self._pending_removals = [] + self._iterating = set() + if dict is not None: + self.update(dict) + + def _commit_removals(self): + # NOTE: We don't need to call this method before mutating the dict, + # because a dead weakref never compares equal to a live weakref, + # even if they happened to refer to equal objects. + # However, it means keys may already have been removed. + l = self._pending_removals + d = self.data + while l: + try: + del d[l.pop()] + except KeyError: + pass def __delitem__(self, key): del self.data[ref(key)] @@ -306,10 +413,11 @@ def items(self): return L def iteritems(self): - for wr, value in self.data.iteritems(): - key = wr() - if key is not None: - yield key, value + with _IterationGuard(self): + for wr, value in self.data.iteritems(): + key = wr() + if key is not None: + yield key, value def iterkeyrefs(self): """Return an iterator that yields the weak references to the keys. @@ -321,19 +429,23 @@ def iterkeyrefs(self): keep the keys around longer than needed. """ - return self.data.iterkeys() + with _IterationGuard(self): + for wr in self.data.iterkeys(): + yield wr def iterkeys(self): - for wr in self.data.iterkeys(): - obj = wr() - if obj is not None: - yield obj + with _IterationGuard(self): + for wr in self.data.iterkeys(): + obj = wr() + if obj is not None: + yield obj - def __iter__(self): - return self.iterkeys() + __iter__ = iterkeys def itervalues(self): - return self.data.itervalues() + with _IterationGuard(self): + for value in self.data.itervalues(): + yield value def keyrefs(self): """Return a list of weak references to the keys. diff --git a/PythonLib/min/webbrowser.py b/PythonLib/min/webbrowser.py index d3272a0a..23891796 100644 --- a/PythonLib/min/webbrowser.py +++ b/PythonLib/min/webbrowser.py @@ -642,6 +642,7 @@ def open(self, url, new=0, autoraise=True): # (but we prefer using the OS X specific stuff) register("safari", None, MacOSXOSAScript('safari'), -1) register("firefox", None, MacOSXOSAScript('firefox'), -1) + register("chrome", None, MacOSXOSAScript('chrome'), -1) register("MacOSX", None, MacOSXOSAScript('default'), -1) diff --git a/PythonLib/min/xdrlib.py b/PythonLib/min/xdrlib.py index ef172dd3..7afba497 100644 --- a/PythonLib/min/xdrlib.py +++ b/PythonLib/min/xdrlib.py @@ -9,6 +9,7 @@ from cStringIO import StringIO as _StringIO except ImportError: from StringIO import StringIO as _StringIO +from functools import wraps __all__ = ["Error", "Packer", "Unpacker", "ConversionError"] @@ -34,6 +35,16 @@ def __str__(self): class ConversionError(Error): pass +def raise_conversion_error(function): + """ Wrap any raised struct.errors in a ConversionError. """ + + @wraps(function) + def result(self, value): + try: + return function(self, value) + except struct.error as e: + raise ConversionError(e.args[0]) + return result class Packer: @@ -50,9 +61,11 @@ def get_buffer(self): # backwards compatibility get_buf = get_buffer + @raise_conversion_error def pack_uint(self, x): self.__buf.write(struct.pack('>L', x)) + @raise_conversion_error def pack_int(self, x): self.__buf.write(struct.pack('>l', x)) @@ -63,20 +76,24 @@ def pack_bool(self, x): else: self.__buf.write('\0\0\0\0') def pack_uhyper(self, x): - self.pack_uint(x>>32 & 0xffffffffL) - self.pack_uint(x & 0xffffffffL) + try: + self.pack_uint(x>>32 & 0xffffffffL) + except (TypeError, struct.error) as e: + raise ConversionError(e.args[0]) + try: + self.pack_uint(x & 0xffffffffL) + except (TypeError, struct.error) as e: + raise ConversionError(e.args[0]) pack_hyper = pack_uhyper + @raise_conversion_error def pack_float(self, x): - try: self.__buf.write(struct.pack('>f', x)) - except struct.error, msg: - raise ConversionError, msg + self.__buf.write(struct.pack('>f', x)) + @raise_conversion_error def pack_double(self, x): - try: self.__buf.write(struct.pack('>d', x)) - except struct.error, msg: - raise ConversionError, msg + self.__buf.write(struct.pack('>d', x)) def pack_fstring(self, n, s): if n < 0: diff --git a/PythonLib/min/xmlrpclib.py b/PythonLib/min/xmlrpclib.py index b93ea23b..b0e74852 100644 --- a/PythonLib/min/xmlrpclib.py +++ b/PythonLib/min/xmlrpclib.py @@ -49,6 +49,7 @@ # 2003-07-12 gp Correct marshalling of Faults # 2003-10-31 mvl Add multicall support # 2004-08-20 mvl Bump minimum supported Python version to 2.1 +# 2014-12-02 ch/doko Add workaround for gzip bomb vulnerability # # Copyright (c) 1999-2002 by Secret Labs AB. # Copyright (c) 1999-2002 by Fredrik Lundh. @@ -357,7 +358,7 @@ def boolean(value, _truefalse=(False, True)): # tuple. # # @param value The time, given as an ISO 8601 string, a time -# tuple, or a integer time value. +# tuple, or an integer time value. def _strftime(value): if datetime: @@ -392,7 +393,7 @@ def make_comparable(self, other): elif datetime and isinstance(other, datetime.datetime): s = self.value o = other.strftime("%Y%m%dT%H:%M:%S") - elif isinstance(other, (str, unicode)): + elif isinstance(other, basestring): s = self.value o = other elif hasattr(other, "timetuple"): @@ -557,8 +558,13 @@ def feed(self, data): self._parser.Parse(data, 0) def close(self): - self._parser.Parse("", 1) # end of data - del self._target, self._parser # get rid of circular references + try: + parser = self._parser + except AttributeError: + pass + else: + del self._target, self._parser # get rid of circular references + parser.Parse("", 1) # end of data class SlowParser: """Default XML parser (based on xmllib.XMLParser).""" @@ -697,9 +703,8 @@ def dump_string(self, value, write, escape=escape): if unicode: def dump_unicode(self, value, write, escape=escape): - value = value.encode(self.encoding) write("") - write(escape(value)) + write(escape(value).encode(self.encoding, 'xmlcharrefreplace')) write("\n") dispatch[UnicodeType] = dump_unicode @@ -726,12 +731,13 @@ def dump_struct(self, value, write, escape=escape): write("\n") for k, v in value.items(): write("\n") - if type(k) is not StringType: - if unicode and type(k) is UnicodeType: - k = k.encode(self.encoding) - else: - raise TypeError, "dictionary key must be string" - write("%s\n" % escape(k)) + if type(k) is StringType: + k = escape(k) + elif unicode and type(k) is UnicodeType: + k = escape(k).encode(self.encoding, 'xmlcharrefreplace') + else: + raise TypeError, "dictionary key must be string" + write("%s\n" % k) dump(v, write) write("\n") write("\n") @@ -778,6 +784,7 @@ def __init__(self, use_datetime=0): self._stack = [] self._marks = [] self._data = [] + self._value = False self._methodname = None self._encoding = "utf-8" self.append = self._stack.append @@ -808,6 +815,8 @@ def start(self, tag, attrs): if tag == "array" or tag == "struct": self._marks.append(len(self._stack)) self._data = [] + if self._value and tag not in self.dispatch: + raise ResponseError("unknown tag %r" % tag) self._value = (tag == "value") def data(self, text): @@ -961,7 +970,7 @@ def __getitem__(self, i): "unexpected type in multicall result" class MultiCall: - """server -> a object used to boxcar method calls + """server -> an object used to boxcar method calls server should be a ServerProxy object. @@ -1093,7 +1102,7 @@ def dumps(params, methodname=None, methodresponse=None, encoding=None, if methodname: # a method call if not isinstance(methodname, StringType): - methodname = methodname.encode(encoding) + methodname = methodname.encode(encoding, 'xmlcharrefreplace') data = ( xmlheader, "\n" @@ -1165,10 +1174,13 @@ def gzip_encode(data): # in the HTTP header, as described in RFC 1952 # # @param data The encoded data +# @keyparam max_decode Maximum bytes to decode (20MB default), use negative +# values for unlimited decoding # @return the unencoded data # @raises ValueError if data is not correctly coded. +# @raises ValueError if max gzipped payload length exceeded -def gzip_decode(data): +def gzip_decode(data, max_decode=20971520): """gzip encoded data -> unencoded data Decode data using the gzip content encoding as described in RFC 1952 @@ -1178,11 +1190,16 @@ def gzip_decode(data): f = StringIO.StringIO(data) gzf = gzip.GzipFile(mode="rb", fileobj=f) try: - decoded = gzf.read() + if max_decode < 0: # no limit + decoded = gzf.read() + else: + decoded = gzf.read(max_decode + 1) except IOError: raise ValueError("invalid data") f.close() gzf.close() + if max_decode >= 0 and len(decoded) > max_decode: + raise ValueError("max gzipped payload length exceeded") return decoded ## @@ -1205,8 +1222,10 @@ def __init__(self, response): gzip.GzipFile.__init__(self, mode="rb", fileobj=self.stringio) def close(self): - gzip.GzipFile.close(self) - self.stringio.close() + try: + gzip.GzipFile.close(self) + finally: + self.stringio.close() # -------------------------------------------------------------------- @@ -1315,7 +1334,7 @@ def single_request(self, host, handler, request_body, verbose=0): ## # Create parser. # - # @return A 2-tuple containing a parser and a unmarshaller. + # @return A 2-tuple containing a parser and an unmarshaller. def getparser(self): # get parser and unmarshaller @@ -1375,9 +1394,10 @@ def make_connection(self, host): # Used in the event of socket errors. # def close(self): - if self._connection[1]: - self._connection[1].close() + host, connection = self._connection + if connection: self._connection = (None, None) + connection.close() ## # Send request header. @@ -1478,6 +1498,10 @@ def parse_response(self, response): class SafeTransport(Transport): """Handles an HTTPS transaction to an XML-RPC server.""" + def __init__(self, use_datetime=0, context=None): + Transport.__init__(self, use_datetime=use_datetime) + self.context = context + # FIXME: mostly untested def make_connection(self, host): @@ -1493,7 +1517,7 @@ def make_connection(self, host): ) else: chost, self._extra_headers, x509 = self.get_host_info(host) - self._connection = host, HTTPS(chost, None, **(x509 or {})) + self._connection = host, HTTPS(chost, None, context=self.context, **(x509 or {})) return self._connection[1] ## @@ -1536,10 +1560,10 @@ class ServerProxy: """ def __init__(self, uri, transport=None, encoding=None, verbose=0, - allow_none=0, use_datetime=0): + allow_none=0, use_datetime=0, context=None): # establish a "logical" server connection - if isinstance(uri, unicode): + if unicode and isinstance(uri, unicode): uri = uri.encode('ISO-8859-1') # get the url @@ -1553,7 +1577,7 @@ def __init__(self, uri, transport=None, encoding=None, verbose=0, if transport is None: if type == "https": - transport = SafeTransport(use_datetime=use_datetime) + transport = SafeTransport(use_datetime=use_datetime, context=context) else: transport = Transport(use_datetime=use_datetime) self.__transport = transport @@ -1595,7 +1619,7 @@ def __getattr__(self, name): # magic method dispatcher return _Method(self.__request, name) - # note: to call a remote object with an non-standard name, use + # note: to call a remote object with a non-standard name, use # result getattr(server, "strange-python-name")(args) def __call__(self, attr): @@ -1617,21 +1641,14 @@ def __call__(self, attr): if __name__ == "__main__": - # simple test program (from the XML-RPC specification) - - # server = ServerProxy("http://localhost:8000") # local server - server = ServerProxy("http://time.xmlrpc.com/RPC2") + server = ServerProxy("http://localhost:8000") print server - try: - print server.currentTime.getCurrentTime() - except Error, v: - print "ERROR", v - multi = MultiCall(server) - multi.currentTime.getCurrentTime() - multi.currentTime.getCurrentTime() + multi.pow(2, 9) + multi.add(5, 1) + multi.add(24, 11) try: for response in multi(): print response diff --git a/PythonLib/min/zipfile.py b/PythonLib/min/zipfile.py index 66393175..3ab66cea 100644 --- a/PythonLib/min/zipfile.py +++ b/PythonLib/min/zipfile.py @@ -30,7 +30,7 @@ class LargeZipFile(Exception): error = BadZipfile # The exception raised by this module ZIP64_LIMIT = (1 << 31) - 1 -ZIP_FILECOUNT_LIMIT = 1 << 16 +ZIP_FILECOUNT_LIMIT = (1 << 16) - 1 ZIP_MAX_COMMENT = (1 << 16) - 1 # constants for Zip file compression methods @@ -384,7 +384,7 @@ def _decodeExtra(self): # Try to decode the extra field. extra = self.extra unpack = struct.unpack - while extra: + while len(extra) >= 4: tp, ln = unpack('= 24: @@ -606,7 +606,11 @@ def peek(self, n=1): """Returns buffered bytes without advancing the position.""" if n > len(self._readbuffer) - self._offset: chunk = self.read(n) - self._offset -= len(chunk) + if len(chunk) > self._offset: + self._readbuffer = chunk + self._readbuffer[self._offset:] + self._offset = 0 + else: + self._offset -= len(chunk) # Return up to 512 bytes to reduce allocation overhead for tight loops. return self._readbuffer[self._offset: self._offset + 512] @@ -918,10 +922,10 @@ def comment(self): @comment.setter def comment(self, comment): # check for valid comment length - if len(comment) >= ZIP_MAX_COMMENT: - if self.debug: - print('Archive comment is too long; truncating to %d bytes' - % ZIP_MAX_COMMENT) + if len(comment) > ZIP_MAX_COMMENT: + import warnings + warnings.warn('Archive comment is too long; truncating to %d bytes' + % ZIP_MAX_COMMENT, stacklevel=2) comment = comment[:ZIP_MAX_COMMENT] self._comment = comment self._didModify = True @@ -1084,8 +1088,8 @@ def _extract_member(self, member, targetpath, pwd): def _writecheck(self, zinfo): """Check for errors before writing a file to the archive.""" if zinfo.filename in self.NameToInfo: - if self.debug: # Warning for duplicate names - print "Duplicate name:", zinfo.filename + import warnings + warnings.warn('Duplicate name: %r' % zinfo.filename, stacklevel=3) if self.mode not in ("w", "a"): raise RuntimeError, 'write() requires mode "w" or "a"' if not self.fp: @@ -1097,12 +1101,17 @@ def _writecheck(self, zinfo): if zinfo.compress_type not in (ZIP_STORED, ZIP_DEFLATED): raise RuntimeError, \ "That compression method is not supported" - if zinfo.file_size > ZIP64_LIMIT: - if not self._allowZip64: - raise LargeZipFile("Filesize would require ZIP64 extensions") - if zinfo.header_offset > ZIP64_LIMIT: - if not self._allowZip64: - raise LargeZipFile("Zipfile size would require ZIP64 extensions") + if not self._allowZip64: + requires_zip64 = None + if len(self.filelist) >= ZIP_FILECOUNT_LIMIT: + requires_zip64 = "Files count" + elif zinfo.file_size > ZIP64_LIMIT: + requires_zip64 = "Filesize" + elif zinfo.header_offset > ZIP64_LIMIT: + requires_zip64 = "Zipfile size" + if requires_zip64: + raise LargeZipFile(requires_zip64 + + " would require ZIP64 extensions") def write(self, filename, arcname=None, compress_type=None): """Put the bytes from filename into the archive under the name @@ -1125,7 +1134,9 @@ def write(self, filename, arcname=None, compress_type=None): arcname += '/' zinfo = ZipInfo(arcname, date_time) zinfo.external_attr = (st[0] & 0xFFFF) << 16L # Unix attributes - if compress_type is None: + if isdir: + zinfo.compress_type = ZIP_STORED + elif compress_type is None: zinfo.compress_type = self.compression else: zinfo.compress_type = compress_type @@ -1141,6 +1152,7 @@ def write(self, filename, arcname=None, compress_type=None): zinfo.file_size = 0 zinfo.compress_size = 0 zinfo.CRC = 0 + zinfo.external_attr |= 0x10 # MS-DOS directory flag self.filelist.append(zinfo) self.NameToInfo[zinfo.filename] = zinfo self.fp.write(zinfo.FileHeader(False)) @@ -1202,7 +1214,11 @@ def writestr(self, zinfo_or_arcname, bytes, compress_type=None): date_time=time.localtime(time.time())[:6]) zinfo.compress_type = self.compression - zinfo.external_attr = 0600 << 16 + if zinfo.filename[-1] == '/': + zinfo.external_attr = 0o40775 << 16 # drwxrwxr-x + zinfo.external_attr |= 0x10 # MS-DOS directory flag + else: + zinfo.external_attr = 0o600 << 16 # ?rw------- else: zinfo = zinfo_or_arcname @@ -1252,10 +1268,8 @@ def close(self): try: if self.mode in ("w", "a") and self._didModify: # write ending records - count = 0 pos1 = self.fp.tell() for zinfo in self.filelist: # write central directory - count = count + 1 dt = zinfo.date_time dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2] dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2) @@ -1316,13 +1330,21 @@ def close(self): pos2 = self.fp.tell() # Write end-of-zip-archive record - centDirCount = count + centDirCount = len(self.filelist) centDirSize = pos2 - pos1 centDirOffset = pos1 - if (centDirCount >= ZIP_FILECOUNT_LIMIT or - centDirOffset > ZIP64_LIMIT or - centDirSize > ZIP64_LIMIT): + requires_zip64 = None + if centDirCount > ZIP_FILECOUNT_LIMIT: + requires_zip64 = "Files count" + elif centDirOffset > ZIP64_LIMIT: + requires_zip64 = "Central directory offset" + elif centDirSize > ZIP64_LIMIT: + requires_zip64 = "Central directory size" + if requires_zip64: # Need to write the ZIP64 end-of-archive records + if not self._allowZip64: + raise LargeZipFile(requires_zip64 + + " would require ZIP64 extensions") zip64endrec = struct.pack( structEndArchive64, stringEndArchive64, 44, 45, 45, 0, 0, centDirCount, centDirCount, @@ -1488,18 +1510,7 @@ def main(args = None): sys.exit(1) with ZipFile(args[1], 'r') as zf: - out = args[2] - for path in zf.namelist(): - if path.startswith('./'): - tgt = os.path.join(out, path[2:]) - else: - tgt = os.path.join(out, path) - - tgtdir = os.path.dirname(tgt) - if not os.path.exists(tgtdir): - os.makedirs(tgtdir) - with open(tgt, 'wb') as fp: - fp.write(zf.read(path)) + zf.extractall(args[2]) elif args[0] == '-c': if len(args) < 3: @@ -1510,14 +1521,21 @@ def addToZip(zf, path, zippath): if os.path.isfile(path): zf.write(path, zippath, ZIP_DEFLATED) elif os.path.isdir(path): + if zippath: + zf.write(path, zippath) for nm in os.listdir(path): addToZip(zf, os.path.join(path, nm), os.path.join(zippath, nm)) # else: ignore with ZipFile(args[1], 'w', allowZip64=True) as zf: - for src in args[2:]: - addToZip(zf, src, os.path.basename(src)) + for path in args[2:]: + zippath = os.path.basename(path) + if not zippath: + zippath = os.path.basename(os.path.dirname(path)) + if zippath in ('', os.curdir, os.pardir): + zippath = '' + addToZip(zf, path, zippath) if __name__ == "__main__": main() diff --git a/PythonLib/tcl/lib-tk/FixTk.py b/PythonLib/tcl/lib-tk/FixTk.py index 49960c74..8af27b58 100644 --- a/PythonLib/tcl/lib-tk/FixTk.py +++ b/PythonLib/tcl/lib-tk/FixTk.py @@ -48,8 +48,11 @@ def convert_path(s): prefix = os.path.join(sys.prefix,"tcl") if not os.path.exists(prefix): - # devdir/../tcltk/lib - prefix = os.path.join(sys.prefix, os.path.pardir, "tcltk", "lib") + # devdir/externals/tcltk/lib + tcltk = 'tcltk' + if sys.maxsize > 2**31 - 1: + tcltk = 'tcltk64' + prefix = os.path.join(sys.prefix, "externals", tcltk, "lib") prefix = os.path.abspath(prefix) # if this does not exist, no further search is needed if os.path.exists(prefix): diff --git a/PythonLib/tcl/lib-tk/Tix.py b/PythonLib/tcl/lib-tk/Tix.py index 29d75724..d0f8fe75 100644 --- a/PythonLib/tcl/lib-tk/Tix.py +++ b/PythonLib/tcl/lib-tk/Tix.py @@ -1,7 +1,3 @@ -# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- -# -# $Id$ -# # Tix.py -- Tix widget wrappers. # # For Tix, see http://tix.sourceforge.net @@ -26,8 +22,10 @@ # appreciate the advantages. # +import os +import Tkinter from Tkinter import * -from Tkinter import _flatten, _cnfmerge, _default_root +from Tkinter import _flatten, _cnfmerge # WARNING - TkVersion is a limited precision floating point number if TkVersion < 3.999: @@ -72,7 +70,6 @@ # BEWARE - this is implemented by copying some code from the Widget class # in Tkinter (to override Widget initialization) and is therefore # liable to break. -import Tkinter, os # Could probably add this to Tkinter.Misc class tixCommand: @@ -122,13 +119,9 @@ def tix_configure(self, cnf=None, **kw): elif cnf: cnf = _cnfmerge(cnf) if cnf is None: - cnf = {} - for x in self.tk.split(self.tk.call('tix', 'configure')): - cnf[x[0][1:]] = (x[0][1:],) + x[1:] - return cnf + return self._getconfigure('tix', 'configure') if isinstance(cnf, StringType): - x = self.tk.split(self.tk.call('tix', 'configure', '-'+cnf)) - return (x[0][1:],) + x[1:] + return self._getconfigure1('tix', 'configure', '-'+cnf) return self.tk.call(('tix', 'configure') + self._options(cnf)) def tix_filedialog(self, dlgclass=None): @@ -225,7 +218,7 @@ def __init__(self, screenName=None, baseName=None, className='Tix'): self.tk.eval('package require Tix') def destroy(self): - # For safety, remove an delete_window binding before destroy + # For safety, remove the delete_window binding before destroy self.protocol("WM_DELETE_WINDOW", "") Tkinter.Tk.destroy(self) @@ -380,7 +373,7 @@ def _subwidget_names(self): """Return the name of all subwidgets.""" try: x = self.tk.call(self._w, 'subwidgets', '-all') - return self.tk.split(x) + return self.tk.splitlist(x) except TclError: return None @@ -473,13 +466,6 @@ def destroy(self): self.tk.call('destroy', self._w) -# Useful func. to split Tcl lists and return as a dict. From Tkinter.py -def _lst2dict(lst): - dict = {} - for x in lst: - dict[x[0][1:]] = (x[0][1:],) + x[1:] - return dict - # Useful class to create a display style - later shared by many items. # Contributed by Steffen Kremser class DisplayStyle: @@ -487,10 +473,14 @@ class DisplayStyle: (multiple) Display Items""" def __init__(self, itemtype, cnf={}, **kw): - master = _default_root # global from Tkinter - if not master and 'refwindow' in cnf: master=cnf['refwindow'] - elif not master and 'refwindow' in kw: master= kw['refwindow'] - elif not master: raise RuntimeError, "Too early to create display style: no root window" + if 'refwindow' in kw: + master = kw['refwindow'] + elif 'refwindow' in cnf: + master = cnf['refwindow'] + else: + master = Tkinter._default_root + if not master: + raise RuntimeError("Too early to create display style: no root window") self.tk = master.tk self.stylename = self.tk.call('tixDisplayStyle', itemtype, *self._options(cnf,kw) ) @@ -515,10 +505,8 @@ def __setitem__(self,key,value): self.tk.call(self.stylename, 'configure', '-%s'%key, value) def config(self, cnf={}, **kw): - return _lst2dict( - self.tk.split( - self.tk.call( - self.stylename, 'configure', *self._options(cnf,kw)))) + return self._getconfigure( + self.stylename, 'configure', *self._options(cnf,kw)) def __getitem__(self,key): return self.tk.call(self.stylename, 'cget', '-%s'%key) @@ -715,7 +703,7 @@ def __init__(self, master, cnf={}, **kw): class ExFileSelectBox(TixWidget): """ExFileSelectBox - MS Windows style file select box. - It provides an convenient method for the user to select files. + It provides a convenient method for the user to select files. Subwidget Class --------- ----- @@ -773,7 +761,7 @@ def popdown(self): # Should inherit from a Dialog class class ExFileSelectDialog(TixWidget): """ExFileSelectDialog - MS Windows style file select dialog. - It provides an convenient method for the user to select files. + It provides a convenient method for the user to select files. Subwidgets Class ---------- ----- @@ -928,9 +916,7 @@ def header_create(self, col, cnf={}, **kw): def header_configure(self, col, cnf={}, **kw): if cnf is None: - return _lst2dict( - self.tk.split( - self.tk.call(self._w, 'header', 'configure', col))) + return self._getconfigure(self._w, 'header', 'configure', col) self.tk.call(self._w, 'header', 'configure', col, *self._options(cnf, kw)) @@ -938,7 +924,11 @@ def header_cget(self, col, opt): return self.tk.call(self._w, 'header', 'cget', col, opt) def header_exists(self, col): - return self.tk.call(self._w, 'header', 'exists', col) + # A workaround to Tix library bug (issue #25464). + # The documented command is "exists", but only erroneous "exist" is + # accepted. + return self.tk.getboolean(self.tk.call(self._w, 'header', 'exist', col)) + header_exist = header_exists def header_delete(self, col): self.tk.call(self._w, 'header', 'delete', col) @@ -955,9 +945,8 @@ def indicator_create(self, entry, cnf={}, **kw): def indicator_configure(self, entry, cnf={}, **kw): if cnf is None: - return _lst2dict( - self.tk.split( - self.tk.call(self._w, 'indicator', 'configure', entry))) + return self._getconfigure( + self._w, 'indicator', 'configure', entry) self.tk.call( self._w, 'indicator', 'configure', entry, *self._options(cnf, kw)) @@ -1017,9 +1006,7 @@ def item_cget(self, entry, col, opt): def item_configure(self, entry, col, cnf={}, **kw): if cnf is None: - return _lst2dict( - self.tk.split( - self.tk.call(self._w, 'item', 'configure', entry, col))) + return self._getconfigure(self._w, 'item', 'configure', entry, col) self.tk.call(self._w, 'item', 'configure', entry, col, *self._options(cnf, kw)) @@ -1038,9 +1025,7 @@ def entrycget(self, entry, opt): def entryconfigure(self, entry, cnf={}, **kw): if cnf is None: - return _lst2dict( - self.tk.split( - self.tk.call(self._w, 'entryconfigure', entry))) + return self._getconfigure(self._w, 'entryconfigure', entry) self.tk.call(self._w, 'entryconfigure', entry, *self._options(cnf, kw)) @@ -1072,8 +1057,8 @@ def __init__ (self,master=None,cnf={}, **kw): class LabelEntry(TixWidget): """LabelEntry - Entry field with label. Packages an entry widget - and a label into one mega widget. It can beused be used to simplify - the creation of ``entry-form'' type of interface. + and a label into one mega widget. It can be used to simplify the creation + of ``entry-form'' type of interface. Subwidgets Class ---------- ----- @@ -1255,9 +1240,7 @@ def panecget(self, entry, opt): def paneconfigure(self, entry, cnf={}, **kw): if cnf is None: - return _lst2dict( - self.tk.split( - self.tk.call(self._w, 'paneconfigure', entry))) + return self._getconfigure(self._w, 'paneconfigure', entry) self.tk.call(self._w, 'paneconfigure', entry, *self._options(cnf, kw)) def panes(self): diff --git a/PythonLib/tcl/lib-tk/Tkdnd.py b/PythonLib/tcl/lib-tk/Tkdnd.py index 2e37d9ec..1b09f91c 100644 --- a/PythonLib/tcl/lib-tk/Tkdnd.py +++ b/PythonLib/tcl/lib-tk/Tkdnd.py @@ -3,7 +3,7 @@ This is very preliminary. I currently only support dnd *within* one application, between different windows (or within the same window). -I an trying to make this as generic as possible -- not dependent on +I am trying to make this as generic as possible -- not dependent on the use of a particular widget or icon type, etc. I also hope that this will work with Pmw. diff --git a/PythonLib/tcl/lib-tk/Tkinter.py b/PythonLib/tcl/lib-tk/Tkinter.py index 718be6eb..6198c4c9 100644 --- a/PythonLib/tcl/lib-tk/Tkinter.py +++ b/PythonLib/tcl/lib-tk/Tkinter.py @@ -76,9 +76,9 @@ def _stringify(value): else: value = '{%s}' % _join(value) else: - if isinstance(value, basestring): - value = unicode(value) - else: + if isinstance(value, str): + value = unicode(value, 'utf-8') + elif not isinstance(value, unicode): value = str(value) if not value: value = '{}' @@ -123,6 +123,29 @@ def _cnfmerge(cnfs): try: _cnfmerge = _tkinter._cnfmerge except AttributeError: pass +def _splitdict(tk, v, cut_minus=True, conv=None): + """Return a properly formatted dict built from Tcl list pairs. + + If cut_minus is True, the supposed '-' prefix will be removed from + keys. If conv is specified, it is used to convert values. + + Tcl list is expected to contain an even number of elements. + """ + t = tk.splitlist(v) + if len(t) % 2: + raise RuntimeError('Tcl list representing a dict is expected ' + 'to contain an even number of elements') + it = iter(t) + dict = {} + for key, value in zip(it, it): + key = str(key) + if cut_minus and key[0] == '-': + key = key[1:] + if conv: + value = conv(value) + dict[key] = value + return dict + class Event: """Container for the properties of an event. @@ -201,6 +224,7 @@ class Variable: Subclasses StringVar, IntVar, DoubleVar, BooleanVar are specializations that constrain the type of the value returned from get().""" _default = "" + _tclCommands = None def __init__(self, master=None, value=None, name=None): """Construct a variable @@ -214,7 +238,7 @@ def __init__(self, master=None, value=None, name=None): global _varnum if not master: master = _default_root - self._master = master + self._root = master._root() self._tk = master.tk if name: self._name = name @@ -223,11 +247,19 @@ def __init__(self, master=None, value=None, name=None): _varnum += 1 if value is not None: self.set(value) - elif not self._tk.call("info", "exists", self._name): + elif not self._tk.getboolean(self._tk.call("info", "exists", self._name)): self.set(self._default) def __del__(self): """Unset the variable in Tcl.""" - self._tk.globalunsetvar(self._name) + if self._tk is None: + return + if self._tk.getboolean(self._tk.call("info", "exists", self._name)): + self._tk.globalunsetvar(self._name) + if self._tclCommands is not None: + for name in self._tclCommands: + #print '- Tkinter: deleted command', name + self._tk.deletecommand(name) + self._tclCommands = None def __str__(self): """Return the name of the variable in Tcl.""" return self._name @@ -246,7 +278,20 @@ def trace_variable(self, mode, callback): Return the name of the callback. """ - cbname = self._master._register(callback) + f = CallWrapper(callback, None, self._root).__call__ + cbname = repr(id(f)) + try: + callback = callback.im_func + except AttributeError: + pass + try: + cbname = cbname + callback.__name__ + except AttributeError: + pass + self._tk.createcommand(cbname, f) + if self._tclCommands is None: + self._tclCommands = [] + self._tclCommands.append(cbname) self._tk.call("trace", "variable", self._name, mode, cbname) return cbname trace = trace_variable @@ -257,10 +302,19 @@ def trace_vdelete(self, mode, cbname): CBNAME is the name of the callback returned from trace_variable or trace. """ self._tk.call("trace", "vdelete", self._name, mode, cbname) - self._master.deletecommand(cbname) + cbname = self._tk.splitlist(cbname)[0] + for m, ca in self.trace_vinfo(): + if self._tk.splitlist(ca)[0] == cbname: + break + else: + self._tk.deletecommand(cbname) + try: + self._tclCommands.remove(cbname) + except ValueError: + pass def trace_vinfo(self): """Return all trace callback information.""" - return map(self._tk.split, self._tk.splitlist( + return map(self._tk.splitlist, self._tk.splitlist( self._tk.call("trace", "vinfo", self._name))) def __eq__(self, other): """Comparison for equality (==). @@ -352,6 +406,10 @@ def __init__(self, master=None, value=None, name=None): """ Variable.__init__(self, master, value, name) + def set(self, value): + """Set the variable to VALUE.""" + return self._tk.globalsetvar(self._name, self._tk.getboolean(value)) + def get(self): """Return the value of the variable as a bool.""" return self._tk.getboolean(self._tk.globalgetvar(self._name)) @@ -423,7 +481,10 @@ def tk_setPalette(self, *args, **kw): + _flatten(args) + _flatten(kw.items())) def tk_menuBar(self, *args): """Do not use. Needed in Tk 3.6 and earlier.""" - pass # obsolete since Tk 4.0 + # obsolete since Tk 4.0 + import warnings + warnings.warn('tk_menuBar() does nothing and will be removed in 3.6', + DeprecationWarning, stacklevel=2) def wait_variable(self, name='PY_VAR'): """Wait until the variable is modified. @@ -534,6 +595,7 @@ def callit(): self.deletecommand(name) except TclError: pass + callit.__name__ = func.__name__ name = self._register(callit) return self.tk.call('after', ms, name) def after_idle(self, func, *args): @@ -782,8 +844,7 @@ def winfo_height(self): self.tk.call('winfo', 'height', self._w)) def winfo_id(self): """Return identifier ID for this widget.""" - return self.tk.getint( - self.tk.call('winfo', 'id', self._w)) + return int(self.tk.call('winfo', 'id', self._w), 0) def winfo_interps(self, displayof=0): """Return the name of all Tcl interpreters for this display.""" args = ('winfo', 'interps') + self._displayof(displayof) @@ -793,7 +854,7 @@ def winfo_ismapped(self): return getint( self.tk.call('winfo', 'ismapped', self._w)) def winfo_manager(self): - """Return the window mananger name for this widget.""" + """Return the window manager name for this widget.""" return self.tk.call('winfo', 'manager', self._w) def winfo_name(self): """Return the name of this widget.""" @@ -1060,7 +1121,7 @@ def bind_class(self, className, sequence=None, func=None, add=None): return self._bind(('bind', className), sequence, func, add, 0) def unbind_class(self, className, sequence): - """Unbind for a all widgets with bindtag CLASSNAME for event SEQUENCE + """Unbind for all widgets with bindtag CLASSNAME for event SEQUENCE all functions.""" self.tk.call('bind', className , sequence, '') def mainloop(self, n=0): @@ -1112,9 +1173,9 @@ def _options(self, cnf, kw = None): elif isinstance(v, (tuple, list)): nv = [] for item in v: - if not isinstance(item, (basestring, int)): + if not isinstance(item, (basestring, int, long)): break - elif isinstance(item, int): + elif isinstance(item, (int, long)): nv.append('%d' % item) else: # format it to proper Tcl code if it contains space @@ -1187,7 +1248,7 @@ def getint_event(s): nsign, b, f, h, k, s, t, w, x, y, A, E, K, N, W, T, X, Y, D = args # Missing: (a, c, d, m, o, v, B, R) e = Event() - # serial field: valid vor all events + # serial field: valid for all events # number of button: ButtonPress and ButtonRelease events only # height field: Configure, ConfigureRequest, Create, # ResizeRequest, and Expose events only @@ -1195,11 +1256,11 @@ def getint_event(s): # time field: "valid for events that contain a time field" # width field: Configure, ConfigureRequest, Create, ResizeRequest, # and Expose events only - # x field: "valid for events that contain a x field" + # x field: "valid for events that contain an x field" # y field: "valid for events that contain a y field" # keysym as decimal: KeyPress and KeyRelease events only # x_root, y_root fields: ButtonPress, ButtonRelease, KeyPress, - # KeyRelease,and Motion events + # KeyRelease, and Motion events e.serial = getint(nsign) e.num = getint_event(b) try: e.focus = getboolean(f) @@ -1234,6 +1295,19 @@ def _report_exception(self): exc, val, tb = sys.exc_type, sys.exc_value, sys.exc_traceback root = self._root() root.report_callback_exception(exc, val, tb) + + def _getconfigure(self, *args): + """Call Tcl configure command and return the result as a dict.""" + cnf = {} + for x in self.tk.splitlist(self.tk.call(*args)): + x = self.tk.splitlist(x) + cnf[x[0][1:]] = (x[0][1:],) + x[1:] + return cnf + + def _getconfigure1(self, *args): + x = self.tk.splitlist(self.tk.call(*args)) + return (x[0][1:],) + x[1:] + def _configure(self, cmd, cnf, kw): """Internal function.""" if kw: @@ -1241,15 +1315,9 @@ def _configure(self, cmd, cnf, kw): elif cnf: cnf = _cnfmerge(cnf) if cnf is None: - cnf = {} - for x in self.tk.split( - self.tk.call(_flatten((self._w, cmd)))): - cnf[x[0][1:]] = (x[0][1:],) + x[1:] - return cnf + return self._getconfigure(_flatten((self._w, cmd))) if type(cnf) is StringType: - x = self.tk.split( - self.tk.call(_flatten((self._w, cmd, '-'+cnf)))) - return (x[0][1:],) + x[1:] + return self._getconfigure1(_flatten((self._w, cmd, '-'+cnf))) self.tk.call(_flatten((self._w, cmd)) + self._options(cnf)) # These used to be defined in Widget: def configure(self, cnf=None, **kw): @@ -1271,8 +1339,9 @@ def __contains__(self, key): raise TypeError("Tkinter objects don't support 'in' tests.") def keys(self): """Return a list of all resource names of this widget.""" - return map(lambda x: x[0][1:], - self.tk.split(self.tk.call(self._w, 'configure'))) + splitlist = self.tk.splitlist + return [splitlist(x)[0][1:] for x in + splitlist(self.tk.call(self._w, 'configure'))] def __str__(self): """Return the window path name of this widget.""" return self._w @@ -1327,6 +1396,21 @@ def grid_bbox(self, column=None, row=None, col2=None, row2=None): return self._getints(self.tk.call(*args)) or None bbox = grid_bbox + + def _gridconvvalue(self, value): + if isinstance(value, (str, _tkinter.Tcl_Obj)): + try: + svalue = str(value) + if not svalue: + return None + elif '.' in svalue: + return getdouble(svalue) + else: + return getint(svalue) + except ValueError: + pass + return value + def _grid_configure(self, command, index, cnf, kw): """Internal function.""" if type(cnf) is StringType and not kw: @@ -1338,29 +1422,16 @@ def _grid_configure(self, command, index, cnf, kw): else: options = self._options(cnf, kw) if not options: - res = self.tk.call('grid', - command, self._w, index) - words = self.tk.splitlist(res) - dict = {} - for i in range(0, len(words), 2): - key = words[i][1:] - value = words[i+1] - if not value: - value = None - elif '.' in str(value): - value = getdouble(value) - else: - value = getint(value) - dict[key] = value - return dict + return _splitdict( + self.tk, + self.tk.call('grid', command, self._w, index), + conv=self._gridconvvalue) res = self.tk.call( ('grid', command, self._w, index) + options) if len(options) == 1: - if not res: return None - # In Tk 7.5, -width can be a float - if '.' in res: return getdouble(res) - return getint(res) + return self._gridconvvalue(res) + def grid_columnconfigure(self, index, cnf={}, **kw): """Configure column INDEX of a grid. @@ -1447,11 +1518,11 @@ def event_info(self, virtual=None): def image_names(self): """Return a list of all existing image names.""" - return self.tk.call('image', 'names') + return self.tk.splitlist(self.tk.call('image', 'names')) def image_types(self): - """Return a list of all available image types (e.g. phote bitmap).""" - return self.tk.call('image', 'types') + """Return a list of all available image types (e.g. photo bitmap).""" + return self.tk.splitlist(self.tk.call('image', 'types')) class CallWrapper: @@ -1565,7 +1636,10 @@ def wm_colormapwindows(self, *wlist): if len(wlist) > 1: wlist = (wlist,) # Tk needs a list of windows here args = ('wm', 'colormapwindows', self._w) + wlist - return map(self._nametowidget, self.tk.call(args)) + if wlist: + self.tk.call(args) + else: + return map(self._nametowidget, self.tk.splitlist(self.tk.call(args))) colormapwindows = wm_colormapwindows def wm_command(self, value=None): """Store VALUE in WM_COMMAND property. It is the command @@ -1814,9 +1888,12 @@ def readprofile(self, baseName, className): if os.path.isfile(base_py): execfile(base_py, dir) def report_callback_exception(self, exc, val, tb): - """Internal function. It reports exception on sys.stderr.""" + """Report callback exception on sys.stderr. + + Applications may want to override this internal function, and + should when sys.stderr is None.""" import traceback, sys - sys.stderr.write("Exception in Tkinter callback\n") + print >>sys.stderr, "Exception in Tkinter callback" sys.last_type = exc sys.last_value = val sys.last_traceback = tb @@ -1874,16 +1951,10 @@ def pack_forget(self): def pack_info(self): """Return information about the packing options for this widget.""" - words = self.tk.splitlist( - self.tk.call('pack', 'info', self._w)) - dict = {} - for i in range(0, len(words), 2): - key = words[i][1:] - value = words[i+1] - if str(value)[:1] == '.': - value = self._nametowidget(value) - dict[key] = value - return dict + d = _splitdict(self.tk, self.tk.call('pack', 'info', self._w)) + if 'in' in d: + d['in'] = self.nametowidget(d['in']) + return d info = pack_info propagate = pack_propagate = Misc.pack_propagate slaves = pack_slaves = Misc.pack_slaves @@ -1925,16 +1996,10 @@ def place_forget(self): def place_info(self): """Return information about the placing options for this widget.""" - words = self.tk.splitlist( - self.tk.call('place', 'info', self._w)) - dict = {} - for i in range(0, len(words), 2): - key = words[i][1:] - value = words[i+1] - if str(value)[:1] == '.': - value = self._nametowidget(value) - dict[key] = value - return dict + d = _splitdict(self.tk, self.tk.call('place', 'info', self._w)) + if 'in' in d: + d['in'] = self.nametowidget(d['in']) + return d info = place_info slaves = place_slaves = Misc.place_slaves @@ -1974,16 +2039,10 @@ def grid_remove(self): def grid_info(self): """Return information about the options for positioning this widget in a grid.""" - words = self.tk.splitlist( - self.tk.call('grid', 'info', self._w)) - dict = {} - for i in range(0, len(words), 2): - key = words[i][1:] - value = words[i+1] - if str(value)[:1] == '.': - value = self._nametowidget(value) - dict[key] = value - return dict + d = _splitdict(self.tk, self.tk.call('grid', 'info', self._w)) + if 'in' in d: + d['in'] = self.nametowidget(d['in']) + return d info = grid_info location = grid_location = Misc.grid_location propagate = grid_propagate = Misc.grid_propagate @@ -2304,7 +2363,7 @@ def find_closest(self, x, y, halo=None, start=None): """Return item which is closest to pixel at X, Y. If several match take the top-most. All items closer than HALO are considered overlapping (all are - closests). If START is specified the next below this tag is taken.""" + closest). If START is specified the next below this tag is taken.""" return self.find('closest', x, y, halo, start) def find_enclosed(self, x1, y1, x2, y2): """Return all items in rectangle defined @@ -2364,7 +2423,7 @@ def postscript(self, cnf={}, **kw): """Print the contents of the canvas to a postscript file. Valid options: colormap, colormode, file, fontmap, height, pageanchor, pageheight, pagewidth, pagex, pagey, - rotate, witdh, x, y.""" + rotate, width, x, y.""" return self.tk.call((self._w, 'postscript') + self._options(cnf, kw)) def tag_raise(self, *args): @@ -2432,7 +2491,7 @@ def toggle(self): self.tk.call(self._w, 'toggle') class Entry(Widget, XView): - """Entry widget which allows to display simple text.""" + """Entry widget which allows displaying simple text.""" def __init__(self, master=None, cnf={}, **kw): """Construct an entry widget with the parent MASTER. @@ -2550,22 +2609,19 @@ def __init__(self, master=None, cnf={}, **kw): def activate(self, index): """Activate item identified by INDEX.""" self.tk.call(self._w, 'activate', index) - def bbox(self, *args): + def bbox(self, index): """Return a tuple of X1,Y1,X2,Y2 coordinates for a rectangle - which encloses the item identified by index in ARGS.""" - return self._getints( - self.tk.call((self._w, 'bbox') + args)) or None + which encloses the item identified by the given index.""" + return self._getints(self.tk.call(self._w, 'bbox', index)) or None def curselection(self): - """Return list of indices of currently selected item.""" - # XXX Ought to apply self._getints()... - return self.tk.splitlist(self.tk.call( - self._w, 'curselection')) + """Return the indices of currently selected item.""" + return self._getints(self.tk.call(self._w, 'curselection')) or () def delete(self, first, last=None): - """Delete items from FIRST to LAST (not included).""" + """Delete items from FIRST to LAST (included).""" self.tk.call(self._w, 'delete', first, last) def get(self, first, last=None): - """Get list of items from FIRST to LAST (not included).""" - if last: + """Get list of items from FIRST to LAST (included).""" + if last is not None: return self.tk.splitlist(self.tk.call( self._w, 'get', first, last)) else: @@ -2598,7 +2654,7 @@ def selection_anchor(self, index): self.tk.call(self._w, 'selection', 'anchor', index) select_anchor = selection_anchor def selection_clear(self, first, last=None): - """Clear the selection from FIRST to LAST (not included).""" + """Clear the selection from FIRST to LAST (included).""" self.tk.call(self._w, 'selection', 'clear', first, last) select_clear = selection_clear @@ -2608,7 +2664,7 @@ def selection_includes(self, index): self._w, 'selection', 'includes', index)) select_includes = selection_includes def selection_set(self, first, last=None): - """Set the selection from FIRST to LAST (not included) without + """Set the selection from FIRST to LAST (included) without changing the currently selected elements.""" self.tk.call(self._w, 'selection', 'set', first, last) select_set = selection_set @@ -2631,7 +2687,7 @@ def itemconfigure(self, index, cnf=None, **kw): itemconfig = itemconfigure class Menu(Widget): - """Menu widget which allows to display menu bars, pull-down menus and pop-up menus.""" + """Menu widget which allows displaying menu bars, pull-down menus and pop-up menus.""" def __init__(self, master=None, cnf={}, **kw): """Construct menu widget with the parent MASTER. @@ -2641,7 +2697,11 @@ def __init__(self, master=None, cnf={}, **kw): selectcolor, takefocus, tearoff, tearoffcommand, title, type.""" Widget.__init__(self, master, 'menu', cnf, kw) def tk_bindForTraversal(self): - pass # obsolete since Tk 4.0 + # obsolete since Tk 4.0 + import warnings + warnings.warn('tk_bindForTraversal() does nothing and ' + 'will be removed in 3.6', + DeprecationWarning, stacklevel=2) def tk_mbPost(self): self.tk.call('tk_mbPost', self._w) def tk_mbUnpost(self): @@ -2722,7 +2782,7 @@ def delete(self, index1, index2=None): self.deletecommand(c) self.tk.call(self._w, 'delete', index1, index2) def entrycget(self, index, option): - """Return the resource value of an menu item for OPTION at INDEX.""" + """Return the resource value of a menu item for OPTION at INDEX.""" return self.tk.call(self._w, 'entrycget', index, '-' + option) def entryconfigure(self, index, cnf=None, **kw): """Configure a menu item at INDEX.""" @@ -2909,7 +2969,7 @@ def debug(self, boolean=None): """Turn on the internal consistency checks of the B-Tree inside the text widget according to BOOLEAN.""" if boolean is None: - return self.tk.call(self._w, 'debug') + return self.tk.getboolean(self.tk.call(self._w, 'debug')) self.tk.call(self._w, 'debug', boolean) def delete(self, index1, index2=None): """Delete the characters between INDEX1 and INDEX2 (not included).""" @@ -3246,7 +3306,7 @@ def __init__(self, imgtype, name=None, cnf={}, master=None, **kw): master = _default_root if not master: raise RuntimeError, 'Too early to create image' - self.tk = master.tk + self.tk = getattr(master, 'tk', master) if not name: Image._last_id += 1 name = "pyimage%r" % (Image._last_id,) # tk itself would use image @@ -3259,6 +3319,8 @@ def __init__(self, imgtype, name=None, cnf={}, master=None, **kw): for k, v in cnf.items(): if hasattr(v, '__call__'): v = self._register(v) + elif k in ('data', 'maskdata'): + v = self.tk._createbytearray(v) options = options + ('-'+k, v) self.tk.call(('image', 'create', imgtype, name,) + options) self.name = name @@ -3282,6 +3344,8 @@ def configure(self, **kw): if k[-1] == '_': k = k[:-1] if hasattr(v, '__call__'): v = self._register(v) + elif k in ('data', 'maskdata'): + v = self.tk._createbytearray(v) res = res + ('-'+k, v) self.tk.call((self.name, 'config') + res) config = configure @@ -3290,7 +3354,7 @@ def height(self): return getint( self.tk.call('image', 'height', self.name)) def type(self): - """Return the type of the imgage, e.g. "photo" or "bitmap".""" + """Return the type of the image, e.g. "photo" or "bitmap".""" return self.tk.call('image', 'type', self.name) def width(self): """Return the width of the image.""" @@ -3317,20 +3381,24 @@ def __getitem__(self, key): # XXX copy -from, -to, ...? def copy(self): """Return a new PhotoImage with the same image as this widget.""" - destImage = PhotoImage() + destImage = PhotoImage(master=self.tk) self.tk.call(destImage, 'copy', self.name) return destImage - def zoom(self,x,y=''): + def zoom(self, x, y=''): """Return a new PhotoImage with the same image as this widget - but zoom it with X and Y.""" - destImage = PhotoImage() + but zoom it with a factor of x in the X direction and y in the Y + direction. If y is not given, the default value is the same as x. + """ + destImage = PhotoImage(master=self.tk) if y=='': y=x self.tk.call(destImage, 'copy', self.name, '-zoom',x,y) return destImage - def subsample(self,x,y=''): + def subsample(self, x, y=''): """Return a new PhotoImage based on the same image as this widget - but use only every Xth or Yth pixel.""" - destImage = PhotoImage() + but use only every Xth or Yth pixel. If y is not given, the + default value is the same as x. + """ + destImage = PhotoImage(master=self.tk) if y=='': y=x self.tk.call(destImage, 'copy', self.name, '-subsample',x,y) return destImage @@ -3365,8 +3433,11 @@ def __init__(self, name=None, cnf={}, master=None, **kw): Valid resource names: background, data, file, foreground, maskdata, maskfile.""" Image.__init__(self, 'bitmap', name, cnf, master, **kw) -def image_names(): return _default_root.tk.call('image', 'names') -def image_types(): return _default_root.tk.call('image', 'types') +def image_names(): + return _default_root.tk.splitlist(_default_root.tk.call('image', 'names')) + +def image_types(): + return _default_root.tk.splitlist(_default_root.tk.call('image', 'types')) class Spinbox(Widget, XView): @@ -3725,23 +3796,17 @@ def paneconfigure(self, tagOrId, cnf=None, **kw): """ if cnf is None and not kw: - cnf = {} - for x in self.tk.split( - self.tk.call(self._w, - 'paneconfigure', tagOrId)): - cnf[x[0][1:]] = (x[0][1:],) + x[1:] - return cnf + return self._getconfigure(self._w, 'paneconfigure', tagOrId) if type(cnf) == StringType and not kw: - x = self.tk.split(self.tk.call( - self._w, 'paneconfigure', tagOrId, '-'+cnf)) - return (x[0][1:],) + x[1:] + return self._getconfigure1( + self._w, 'paneconfigure', tagOrId, '-'+cnf) self.tk.call((self._w, 'paneconfigure', tagOrId) + self._options(cnf, kw)) paneconfig = paneconfigure def panes(self): """Returns an ordered list of the child panes.""" - return self.tk.call(self._w, 'panes') + return self.tk.splitlist(self.tk.call(self._w, 'panes')) ###################################################################### # Extensions: diff --git a/PythonLib/tcl/lib-tk/tkColorChooser.py b/PythonLib/tcl/lib-tk/tkColorChooser.py index cf6283b3..b65b47d4 100644 --- a/PythonLib/tcl/lib-tk/tkColorChooser.py +++ b/PythonLib/tcl/lib-tk/tkColorChooser.py @@ -1,4 +1,4 @@ -# tk common colour chooser dialogue +# tk common color chooser dialogue # # this module provides an interface to the native color dialogue # available in Tk 4.2 and newer. @@ -11,7 +11,7 @@ # # options (all have default values): # -# - initialcolor: colour to mark as selected when dialog is displayed +# - initialcolor: color to mark as selected when dialog is displayed # (given as an RGB triplet or a Tk color string) # # - parent: which window to place the dialog on top of diff --git a/PythonLib/tcl/lib-tk/tkFont.py b/PythonLib/tcl/lib-tk/tkFont.py index 229f2513..b245623e 100644 --- a/PythonLib/tcl/lib-tk/tkFont.py +++ b/PythonLib/tcl/lib-tk/tkFont.py @@ -47,8 +47,10 @@ class Font: def _set(self, kw): options = [] for k, v in kw.items(): + if not isinstance(v, basestring): + v = str(v) options.append("-"+k) - options.append(str(v)) + options.append(v) return tuple(options) def _get(self, args): @@ -66,9 +68,10 @@ def _mkdict(self, args): def __init__(self, root=None, font=None, name=None, exists=False, **options): if not root: root = Tkinter._default_root + tk = getattr(root, 'tk', root) if font: # get actual settings corresponding to the given font - font = root.tk.splitlist(root.tk.call("font", "actual", font)) + font = tk.splitlist(tk.call("font", "actual", font)) else: font = self._set(options) if not name: @@ -78,25 +81,24 @@ def __init__(self, root=None, font=None, name=None, exists=False, **options): if exists: self.delete_font = False # confirm font exists - if self.name not in root.tk.call("font", "names"): + if self.name not in tk.splitlist(tk.call("font", "names")): raise Tkinter._tkinter.TclError, "named font %s does not already exist" % (self.name,) # if font config info supplied, apply it if font: - root.tk.call("font", "configure", self.name, *font) + tk.call("font", "configure", self.name, *font) else: # create new font (raises TclError if the font exists) - root.tk.call("font", "create", self.name, *font) + tk.call("font", "create", self.name, *font) self.delete_font = True - # backlinks! - self._root = root - self._split = root.tk.splitlist - self._call = root.tk.call + self._tk = tk + self._split = tk.splitlist + self._call = tk.call def __str__(self): return self.name def __eq__(self, other): - return self.name == other.name and isinstance(other, Font) + return isinstance(other, Font) and self.name == other.name def __getitem__(self, key): return self.cget(key) @@ -115,7 +117,7 @@ def __del__(self): def copy(self): "Return a distinct copy of the current font" - return Font(self._root, **self.actual()) + return Font(self._tk, **self.actual()) def actual(self, option=None): "Return actual font attributes" diff --git a/PythonLib/tcl/lib-tk/ttk.py b/PythonLib/tcl/lib-tk/ttk.py index 89f73740..77c93b12 100644 --- a/PythonLib/tcl/lib-tk/ttk.py +++ b/PythonLib/tcl/lib-tk/ttk.py @@ -26,7 +26,7 @@ "tclobjs_to_py", "setup_master"] import Tkinter -from Tkinter import _flatten, _join, _stringify +from Tkinter import _flatten, _join, _stringify, _splitdict # Verify if Tk is new enough to not need the Tile package _REQUIRE_TILE = True if Tkinter.TkVersion < 8.5 else False @@ -153,7 +153,7 @@ def _format_elemcreate(etype, script=False, *args, **kw): def _format_layoutlist(layout, indent=0, indent_size=2): """Formats a layout list so we can pass the result to ttk::style - layout and ttk::style settings. Note that the layout doesn't has to + layout and ttk::style settings. Note that the layout doesn't have to be a list necessarily. E.g.: @@ -242,21 +242,6 @@ def _script_from_settings(settings): return '\n'.join(script) -def _dict_from_tcltuple(ttuple, cut_minus=True): - """Break tuple in pairs, format it properly, then build the return - dict. If cut_minus is True, the supposed '-' prefixing options will - be removed. - - ttuple is expected to contain an even number of elements.""" - opt_start = 1 if cut_minus else 0 - - retdict = {} - it = iter(ttuple) - for opt, val in zip(it, it): - retdict[str(opt)[opt_start:]] = val - - return tclobjs_to_py(retdict) - def _list_from_statespec(stuple): """Construct a list from the given statespec tuple according to the accepted statespec accepted by _format_mapdict.""" @@ -274,9 +259,10 @@ def _list_from_statespec(stuple): it = iter(nval) return [_flatten(spec) for spec in zip(it, it)] -def _list_from_layouttuple(ltuple): +def _list_from_layouttuple(tk, ltuple): """Construct a list from the tuple returned by ttk::layout, this is somewhat the reverse of _format_layoutlist.""" + ltuple = tk.splitlist(ltuple) res = [] indx = 0 @@ -295,27 +281,27 @@ def _list_from_layouttuple(ltuple): indx += 2 if opt == 'children': - val = _list_from_layouttuple(val) + val = _list_from_layouttuple(tk, val) opts[opt] = val return res -def _val_or_dict(options, func, *args): - """Format options then call func with args and options and return +def _val_or_dict(tk, options, *args): + """Format options then call Tk command with args and options and return the appropriate result. - If no option is specified, a dict is returned. If a option is + If no option is specified, a dict is returned. If an option is specified with the None value, the value for that option is returned. Otherwise, the function just sets the passed options and the caller shouldn't be expecting a return value anyway.""" options = _format_optdict(options) - res = func(*(args + options)) + res = tk.call(*(args + options)) if len(options) % 2: # option specified without a value, return its value return res - return _dict_from_tcltuple(res) + return _splitdict(tk, res, conv=_tclobj_to_py) def _convert_stringval(value): """Converts a value to, hopefully, a more appropriate Python object.""" @@ -327,20 +313,32 @@ def _convert_stringval(value): return value +def _to_number(x): + if isinstance(x, str): + if '.' in x: + x = float(x) + else: + x = int(x) + return x + +def _tclobj_to_py(val): + """Return value converted from Tcl object to Python object.""" + if val and hasattr(val, '__len__') and not isinstance(val, basestring): + if getattr(val[0], 'typename', None) == 'StateSpec': + val = _list_from_statespec(val) + else: + val = map(_convert_stringval, val) + + elif hasattr(val, 'typename'): # some other (single) Tcl object + val = _convert_stringval(val) + + return val + def tclobjs_to_py(adict): """Returns adict with its values converted from Tcl objects to Python objects.""" - for opt, val in adict.iteritems(): - if val and hasattr(val, '__len__') and not isinstance(val, basestring): - if getattr(val[0], 'typename', None) == 'StateSpec': - val = _list_from_statespec(val) - else: - val = map(_convert_stringval, val) - - elif hasattr(val, 'typename'): # some other (single) Tcl object - val = _convert_stringval(val) - - adict[opt] = val + for opt, val in adict.items(): + adict[opt] = _tclobj_to_py(val) return adict @@ -385,7 +383,7 @@ def configure(self, style, query_opt=None, **kw): a sequence identifying the value for that option.""" if query_opt is not None: kw[query_opt] = None - return _val_or_dict(kw, self.tk.call, self._name, "configure", style) + return _val_or_dict(self.tk, kw, self._name, "configure", style) def map(self, style, query_opt=None, **kw): @@ -397,11 +395,13 @@ def map(self, style, query_opt=None, **kw): or something else of your preference. A statespec is compound of one or more states and then a value.""" if query_opt is not None: - return _list_from_statespec( - self.tk.call(self._name, "map", style, '-%s' % query_opt)) + return _list_from_statespec(self.tk.splitlist( + self.tk.call(self._name, "map", style, '-%s' % query_opt))) - return _dict_from_tcltuple( - self.tk.call(self._name, "map", style, *(_format_mapdict(kw)))) + return _splitdict( + self.tk, + self.tk.call(self._name, "map", style, *_format_mapdict(kw)), + conv=_tclobj_to_py) def lookup(self, style, option, state=None, default=None): @@ -455,7 +455,7 @@ def layout(self, style, layoutspec=None): lspec = "null" # could be any other word, but this may make sense # when calling layout(style) later - return _list_from_layouttuple( + return _list_from_layouttuple(self.tk, self.tk.call(self._name, "layout", style, lspec)) @@ -468,12 +468,12 @@ def element_create(self, elementname, etype, *args, **kw): def element_names(self): """Returns the list of elements defined in the current theme.""" - return self.tk.call(self._name, "element", "names") + return self.tk.splitlist(self.tk.call(self._name, "element", "names")) def element_options(self, elementname): """Return the list of elementname's options.""" - return self.tk.call(self._name, "element", "options", elementname) + return self.tk.splitlist(self.tk.call(self._name, "element", "options", elementname)) def theme_create(self, themename, parent=None, settings=None): @@ -507,7 +507,7 @@ def theme_settings(self, themename, settings): def theme_names(self): """Returns a list of all known themes.""" - return self.tk.call(self._name, "theme", "names") + return self.tk.splitlist(self.tk.call(self._name, "theme", "names")) def theme_use(self, themename=None): @@ -570,11 +570,12 @@ def instate(self, statespec, callback=None, *args, **kw): matches statespec and False otherwise. If callback is specified, then it will be invoked with *args, **kw if the widget state matches statespec. statespec is expected to be a sequence.""" - ret = self.tk.call(self._w, "instate", ' '.join(statespec)) + ret = self.tk.getboolean( + self.tk.call(self._w, "instate", ' '.join(statespec))) if ret and callback: return callback(*args, **kw) - return bool(ret) + return ret def state(self, statespec=None): @@ -669,7 +670,7 @@ def __init__(self, master=None, widget=None, **kw): def bbox(self, index): """Return a tuple of (x, y, width, height) which describes the bounding box of the character given by index.""" - return self.tk.call(self._w, "bbox", index) + return self._getints(self.tk.call(self._w, "bbox", index)) def identify(self, x, y): @@ -682,7 +683,7 @@ def validate(self): """Force revalidation, independent of the conditions specified by the validate option. Returns False if validation fails, True if it succeeds. Sets or clears the invalid state accordingly.""" - return bool(self.tk.call(self._w, "validate")) + return self.tk.getboolean(self.tk.call(self._w, "validate")) class Combobox(Entry): @@ -709,6 +710,8 @@ def current(self, newindex=None): element at position newindex in the list of values. Otherwise, returns the index of the current value in the list of values or -1 if the current value does not appear in the list.""" + if newindex is None: + return self.tk.getint(self.tk.call(self._w, "current")) return self.tk.call(self._w, "current", newindex) @@ -863,7 +866,7 @@ def identify(self, x, y): def index(self, tab_id): """Returns the numeric index of the tab specified by tab_id, or the total number of tabs if tab_id is the string "end".""" - return self.tk.call(self._w, "index", tab_id) + return self.tk.getint(self.tk.call(self._w, "index", tab_id)) def insert(self, pos, child, **kw): @@ -893,12 +896,12 @@ def tab(self, tab_id, option=None, **kw): options to the corresponding values.""" if option is not None: kw[option] = None - return _val_or_dict(kw, self.tk.call, self._w, "tab", tab_id) + return _val_or_dict(self.tk, kw, self._w, "tab", tab_id) def tabs(self): """Returns a list of windows managed by the notebook.""" - return self.tk.call(self._w, "tabs") or () + return self.tk.splitlist(self.tk.call(self._w, "tabs") or ()) def enable_traversal(self): @@ -970,7 +973,7 @@ def pane(self, pane, option=None, **kw): Otherwise, sets the options to the corresponding values.""" if option is not None: kw[option] = None - return _val_or_dict(kw, self.tk.call, self._w, "pane", pane) + return _val_or_dict(self.tk, kw, self._w, "pane", pane) def sashpos(self, index, newpos=None): @@ -981,7 +984,7 @@ def sashpos(self, index, newpos=None): constrained to be between 0 and the total size of the widget. Returns the new position of sash number index.""" - return self.tk.call(self._w, "sashpos", index, newpos) + return self.tk.getint(self.tk.call(self._w, "sashpos", index, newpos)) PanedWindow = Panedwindow # Tkinter name compatibility @@ -1011,7 +1014,7 @@ def start(self, interval=None): """Begin autoincrement mode: schedules a recurring timer event that calls method step every interval milliseconds. - interval defaults to 50 milliseconds (20 steps/second) if ommited.""" + interval defaults to 50 milliseconds (20 steps/second) if omitted.""" self.tk.call(self._w, "start", interval) @@ -1181,14 +1184,15 @@ def bbox(self, item, column=None): If column is specified, returns the bounding box of that cell. If the item is not visible (i.e., if it is a descendant of a closed item or is scrolled offscreen), returns an empty string.""" - return self.tk.call(self._w, "bbox", item, column) + return self._getints(self.tk.call(self._w, "bbox", item, column)) or '' def get_children(self, item=None): """Returns a tuple of children belonging to item. If item is not specified, returns root children.""" - return self.tk.call(self._w, "children", item or '') or () + return self.tk.splitlist( + self.tk.call(self._w, "children", item or '') or ()) def set_children(self, item, *newchildren): @@ -1208,7 +1212,7 @@ def column(self, column, option=None, **kw): Otherwise, sets the options to the corresponding values.""" if option is not None: kw[option] = None - return _val_or_dict(kw, self.tk.call, self._w, "column", column) + return _val_or_dict(self.tk, kw, self._w, "column", column) def delete(self, *items): @@ -1229,7 +1233,7 @@ def detach(self, *items): def exists(self, item): """Returns True if the specified item is present in the tree, False otherwise.""" - return bool(self.tk.call(self._w, "exists", item)) + return self.tk.getboolean(self.tk.call(self._w, "exists", item)) def focus(self, item=None): @@ -1267,7 +1271,7 @@ def heading(self, column, option=None, **kw): if option is not None: kw[option] = None - return _val_or_dict(kw, self.tk.call, self._w, 'heading', column) + return _val_or_dict(self.tk, kw, self._w, 'heading', column) def identify(self, component, x, y): @@ -1311,7 +1315,7 @@ def identify_element(self, x, y): def index(self, item): """Returns the integer index of item within its parent's list of children.""" - return self.tk.call(self._w, "index", item) + return self.tk.getint(self.tk.call(self._w, "index", item)) def insert(self, parent, index, iid=None, **kw): @@ -1346,7 +1350,7 @@ def item(self, item, option=None, **kw): values as given by kw.""" if option is not None: kw[option] = None - return _val_or_dict(kw, self.tk.call, self._w, "item", item) + return _val_or_dict(self.tk, kw, self._w, "item", item) def move(self, item, parent, index): @@ -1390,7 +1394,9 @@ def see(self, item): def selection(self, selop=None, items=None): """If selop is not specified, returns selected items.""" - return self.tk.call(self._w, "selection", selop, items) + if isinstance(items, basestring): + items = (items,) + return self.tk.splitlist(self.tk.call(self._w, "selection", selop, items)) def selection_set(self, items): @@ -1414,13 +1420,16 @@ def selection_toggle(self, items): def set(self, item, column=None, value=None): - """With one argument, returns a dictionary of column/value pairs - for the specified item. With two arguments, returns the current - value of the specified column. With three arguments, sets the + """Query or set the value of given item. + + With one argument, return a dictionary of column/value pairs + for the specified item. With two arguments, return the current + value of the specified column. With three arguments, set the value of given column in given item to the specified value.""" res = self.tk.call(self._w, "set", item, column, value) if column is None and value is None: - return _dict_from_tcltuple(res, False) + return _splitdict(self.tk, res, + cut_minus=False, conv=_tclobj_to_py) else: return res @@ -1441,7 +1450,7 @@ def tag_configure(self, tagname, option=None, **kw): values for the given tagname.""" if option is not None: kw[option] = None - return _val_or_dict(kw, self.tk.call, self._w, "tag", "configure", + return _val_or_dict(self.tk, kw, self._w, "tag", "configure", tagname) @@ -1451,7 +1460,12 @@ def tag_has(self, tagname, item=None): all items which have the specified tag. * Availability: Tk 8.6""" - return self.tk.call(self._w, "tag", "has", tagname, item) + if item is None: + return self.tk.splitlist( + self.tk.call(self._w, "tag", "has", tagname)) + else: + return self.tk.getboolean( + self.tk.call(self._w, "tag", "has", tagname, item)) # Extensions @@ -1464,7 +1478,7 @@ class LabeledScale(Frame, object): can be accessed through instance.label""" def __init__(self, master=None, variable=None, from_=0, to=10, **kw): - """Construct an horizontal LabeledScale with parent master, a + """Construct a horizontal LabeledScale with parent master, a variable to be associated with the Ttk Scale widget and its range. If variable is not specified, a Tkinter.IntVar is created. @@ -1507,7 +1521,9 @@ def destroy(self): pass else: del self._variable - Frame.destroy(self) + Frame.destroy(self) + self.label = None + self.scale = None def _adjust(self, *args): @@ -1523,7 +1539,8 @@ def adjust_label(): self.label.place_configure(x=x, y=y) - from_, to = self.scale['from'], self.scale['to'] + from_ = _to_number(self.scale['from']) + to = _to_number(self.scale['to']) if to < from_: from_, to = to, from_ newval = self._variable.get() @@ -1605,5 +1622,8 @@ def set_menu(self, default=None, *values): def destroy(self): """Destroy this widget and its associated variable.""" - del self._variable + try: + del self._variable + except AttributeError: + pass Menubutton.destroy(self) diff --git a/PythonLib/tcl/lib-tk/turtle.py b/PythonLib/tcl/lib-tk/turtle.py index f8188e1b..52e669b4 100644 --- a/PythonLib/tcl/lib-tk/turtle.py +++ b/PythonLib/tcl/lib-tk/turtle.py @@ -142,7 +142,7 @@ 'log10', 'modf', 'pi', 'pow', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] __all__ = (_tg_classes + _tg_screen_functions + _tg_turtle_functions + - _tg_utilities + _math_functions) + _tg_utilities + ['Terminator'] + _math_functions) _alias_list = ['addshape', 'backward', 'bk', 'fd', 'ht', 'lt', 'pd', 'pos', 'pu', 'rt', 'seth', 'setpos', 'setposition', 'st', @@ -192,7 +192,7 @@ def config_dict(filename): continue try: key, value = line.split("=") - except: + except ValueError: print "Bad line in config-file %s:\n%s" % (filename,line) continue key = key.strip() @@ -205,7 +205,7 @@ def config_dict(filename): value = float(value) else: value = int(value) - except: + except ValueError: pass # value need not be converted cfgdict[key] = value return cfgdict @@ -234,7 +234,7 @@ def readconfig(cfgdict): try: head, tail = split(__file__) cfg_file2 = join(head, default_cfg) - except: + except BaseException: cfg_file2 = "" if isfile(cfg_file2): #print "2. Loading config-file %s:" % cfg_file2 @@ -249,7 +249,7 @@ def readconfig(cfgdict): try: readconfig(_CFG) -except: +except BaseException: print "No configfile read, reason unknown" @@ -276,7 +276,7 @@ def __mul__(self, other): return self[0]*other[0]+self[1]*other[1] return Vec2D(self[0]*other, self[1]*other) def __rmul__(self, other): - if isinstance(other, int) or isinstance(other, float): + if isinstance(other, (int, long, float)): return Vec2D(self[0]*other, self[1]*other) def __sub__(self, other): return Vec2D(self[0]-other[0], self[1]-other[1]) @@ -677,7 +677,7 @@ def eventfun(event): x, y = (self.cv.canvasx(event.x)/self.xscale, -self.cv.canvasy(event.y)/self.yscale) fun(x, y) - except: + except BaseException: pass self.cv.tag_bind(item, "" % num, eventfun, add) @@ -728,10 +728,11 @@ def _createimage(self, image): """ return self.cv.create_image(0, 0, image=image) - def _drawimage(self, item, (x, y), image): + def _drawimage(self, item, pos, image): """Configure image item as to draw image object at position (x,y) on canvas) """ + x, y = pos self.cv.coords(item, (x * self.xscale, -y * self.yscale)) self.cv.itemconfig(item, image=image) @@ -835,7 +836,7 @@ def __init__(self, type_, data=None): if isinstance(data, list): data = tuple(data) elif type_ == "image": - if isinstance(data, str): + if isinstance(data, basestring): if data.lower().endswith(".gif") and isfile(data): data = TurtleScreen._image(data) # else data assumed to be Photoimage @@ -981,7 +982,7 @@ def mode(self, mode=None): """Set turtle-mode ('standard', 'logo' or 'world') and perform reset. Optional argument: - mode -- on of the strings 'standard', 'logo' or 'world' + mode -- one of the strings 'standard', 'logo' or 'world' Mode 'standard' is compatible with turtle.py. Mode 'logo' is compatible with most Logo-Turtle-Graphics. @@ -1098,14 +1099,14 @@ def _colorstr(self, color): """ if len(color) == 1: color = color[0] - if isinstance(color, str): + if isinstance(color, basestring): if self._iscolorstring(color) or color == "": return color else: raise TurtleGraphicsError("bad color string: %s" % str(color)) try: r, g, b = color - except: + except (TypeError, ValueError): raise TurtleGraphicsError("bad color arguments: %s" % str(color)) if self._colormode == 1.0: r, g, b = [round(255.0*x) for x in (r, g, b)] @@ -1235,7 +1236,7 @@ def delay(self, delay=None): def _incrementudc(self): """Increment update counter.""" if not TurtleScreen._RUNNING: - TurtleScreen._RUNNNING = True + TurtleScreen._RUNNING = True raise Terminator if self._tracing > 0: self._updatecounter += 1 @@ -2351,7 +2352,7 @@ def pen(self, pen=None, **pendict): self._resizemode = p["resizemode"] if "stretchfactor" in p: sf = p["stretchfactor"] - if isinstance(sf, (int, float)): + if isinstance(sf, (int, long, float)): sf = (sf, sf) self._stretchfactor = sf if "outline" in p: @@ -2499,7 +2500,7 @@ def setundobuffer(self, size): Example (for a Turtle instance named turtle): >>> turtle.setundobuffer(42) """ - if size is None: + if size is None or size <= 0: self.undobuffer = None else: self.undobuffer = Tbuffer(size) @@ -2602,11 +2603,11 @@ def _colorstr(self, args): def _cc(self, args): """Convert colortriples to hexstrings. """ - if isinstance(args, str): + if isinstance(args, basestring): return args try: r, g, b = args - except: + except (TypeError, ValueError): raise TurtleGraphicsError("bad color arguments: %s" % str(args)) if self.screen._colormode == 1.0: r, g, b = [round(255.0*x) for x in (r, g, b)] @@ -3228,7 +3229,7 @@ def dot(self, size=None, *color): """ #print "dot-1:", size, color if not color: - if isinstance(size, (str, tuple)): + if isinstance(size, (basestring, tuple)): color = self._colorstr(size) size = self._pensize + max(self._pensize, 4) else: @@ -3644,7 +3645,7 @@ def _destroy(self): Turtle._screen = None _Screen._root = None _Screen._canvas = None - TurtleScreen._RUNNING = True + TurtleScreen._RUNNING = False root.destroy() def bye(self): @@ -3685,7 +3686,6 @@ def exitGracefully(x, y): except AttributeError: exit(0) - class Turtle(RawTurtle): """RawTurtle auto-creating (scrolled) canvas. @@ -3708,18 +3708,6 @@ def __init__(self, Pen = Turtle -def _getpen(): - """Create the 'anonymous' turtle if not already present.""" - if Turtle._pen is None: - Turtle._pen = Turtle() - return Turtle._pen - -def _getscreen(): - """Create a TurtleScreen if not already present.""" - if Turtle._screen is None: - Turtle._screen = Screen() - return Turtle._screen - def write_docstringdict(filename="turtle_docstringdict"): """Create and write docstring-dictionary to file. @@ -3768,7 +3756,7 @@ def read_docstrings(lang): #print key try: eval(key).im_func.__doc__ = docsdict[key] - except: + except BaseException: print "Bad docstring-entry: %s" % key _LANGUAGE = _CFG["language"] @@ -3778,7 +3766,7 @@ def read_docstrings(lang): read_docstrings(_LANGUAGE) except ImportError: print "Cannot find docsdict for", _LANGUAGE -except: +except BaseException: print ("Unknown Error when trying to import %s-docstring-dictionary" % _LANGUAGE) @@ -3847,30 +3835,41 @@ def _screen_docrevise(docstr): ## as functions. So we can enhance, change, add, delete methods to these ## classes and do not need to change anything here. +__func_body = """\ +def {name}{paramslist}: + if {obj} is None: + if not TurtleScreen._RUNNING: + TurtleScreen._RUNNING = True + raise Terminator + {obj} = {init} + try: + return {obj}.{name}{argslist} + except TK.TclError: + if not TurtleScreen._RUNNING: + TurtleScreen._RUNNING = True + raise Terminator + raise +""" -for methodname in _tg_screen_functions: - pl1, pl2 = getmethparlist(eval('_Screen.' + methodname)) - if pl1 == "": - print ">>>>>>", pl1, pl2 - continue - defstr = ("def %(key)s%(pl1)s: return _getscreen().%(key)s%(pl2)s" % - {'key':methodname, 'pl1':pl1, 'pl2':pl2}) - exec defstr - eval(methodname).__doc__ = _screen_docrevise(eval('_Screen.'+methodname).__doc__) +def _make_global_funcs(functions, cls, obj, init, docrevise): + for methodname in functions: + method = getattr(cls, methodname) + pl1, pl2 = getmethparlist(method) + if pl1 == "": + print ">>>>>>", pl1, pl2 + continue + defstr = __func_body.format(obj=obj, init=init, name=methodname, + paramslist=pl1, argslist=pl2) + exec defstr in globals() + globals()[methodname].__doc__ = docrevise(method.__doc__) -for methodname in _tg_turtle_functions: - pl1, pl2 = getmethparlist(eval('Turtle.' + methodname)) - if pl1 == "": - print ">>>>>>", pl1, pl2 - continue - defstr = ("def %(key)s%(pl1)s: return _getpen().%(key)s%(pl2)s" % - {'key':methodname, 'pl1':pl1, 'pl2':pl2}) - exec defstr - eval(methodname).__doc__ = _turtle_docrevise(eval('Turtle.'+methodname).__doc__) +_make_global_funcs(_tg_screen_functions, _Screen, + 'Turtle._screen', 'Screen()', _screen_docrevise) +_make_global_funcs(_tg_turtle_functions, Turtle, + 'Turtle._pen', 'Turtle()', _turtle_docrevise) done = mainloop = TK.mainloop -del pl1, pl2, defstr if __name__ == "__main__": def switchpen(): @@ -3913,7 +3912,7 @@ def demo1(): down() # some text write("startstart", 1) - write("start", 1) + write(u"start", 1) color("red") # staircase for i in range(5): @@ -3988,7 +3987,7 @@ def demo2(): tri = getturtle() tri.resizemode("auto") turtle = Turtle() - turtle.resizemode("auto") + turtle.resizemode(u"auto") turtle.shape("turtle") turtle.reset() turtle.left(90) @@ -3998,7 +3997,7 @@ def demo2(): turtle.lt(30) turtle.down() turtle.speed(6) - turtle.color("blue","orange") + turtle.color("blue",u"orange") turtle.pensize(2) tri.speed(6) setheading(towards(turtle)) @@ -4013,9 +4012,9 @@ def demo2(): tri.stamp() switchpen() count += 1 - tri.write("CAUGHT! ", font=("Arial", 16, "bold"), align="right") + tri.write("CAUGHT! ", font=("Arial", 16, "bold"), align=u"right") tri.pencolor("black") - tri.pencolor("red") + tri.pencolor(u"red") def baba(xdummy, ydummy): clearscreen()

qx_7< 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 literal 194048 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 z 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 diff --git a/PythonLib/full/calendar.py b/PythonLib/full/calendar.py index d3bd2362..8fcceb7f 100644 --- a/PythonLib/full/calendar.py +++ b/PythonLib/full/calendar.py @@ -142,7 +142,7 @@ def setfirstweekday(self, firstweekday): def iterweekdays(self): """ - Return a iterator for one week of weekday numbers starting with the + Return an iterator for one week of weekday numbers starting with the configured first one. """ for i in range(self.firstweekday, self.firstweekday + 7): @@ -174,22 +174,23 @@ def itermonthdays2(self, year, month): Like itermonthdates(), but will yield (day number, weekday number) tuples. For days outside the specified month the day number is 0. """ - for date in self.itermonthdates(year, month): - if date.month != month: - yield (0, date.weekday()) - else: - yield (date.day, date.weekday()) + for i, d in enumerate(self.itermonthdays(year, month), self.firstweekday): + yield d, i % 7 def itermonthdays(self, year, month): """ Like itermonthdates(), but will yield day numbers. For days outside the specified month the day number is 0. """ - for date in self.itermonthdates(year, month): - if date.month != month: - yield 0 - else: - yield date.day + day1, ndays = monthrange(year, month) + days_before = (day1 - self.firstweekday) % 7 + for _ in range(days_before): + yield 0 + for d in range(1, ndays + 1): + yield d + days_after = (self.firstweekday - day1 - ndays) % 7 + for _ in range(days_after): + yield 0 def monthdatescalendar(self, year, month): """ diff --git a/PythonLib/full/cgi.py b/PythonLib/full/cgi.py index 64ba6d16..7c51b44d 100644 --- a/PythonLib/full/cgi.py +++ b/PythonLib/full/cgi.py @@ -175,7 +175,7 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0): # parse query string function called from urlparse, -# this is done in order to maintain backward compatiblity. +# this is done in order to maintain backward compatibility. def parse_qs(qs, keep_blank_values=0, strict_parsing=0): """Parse a query given as a string argument.""" diff --git a/PythonLib/full/chunk.py b/PythonLib/full/chunk.py index a8fbc105..2d15abe8 100644 --- a/PythonLib/full/chunk.py +++ b/PythonLib/full/chunk.py @@ -21,7 +21,7 @@ usage of the Chunk class defined here is to instantiate an instance at the start of each chunk and read from the instance until it reaches the end, after which a new instance can be instantiated. At the end -of the file, creating a new instance will fail with a EOFError +of the file, creating a new instance will fail with an EOFError exception. Usage: @@ -85,8 +85,10 @@ def getsize(self): def close(self): if not self.closed: - self.skip() - self.closed = True + try: + self.skip() + finally: + self.closed = True def isatty(self): if self.closed: diff --git a/PythonLib/full/codecs.py b/PythonLib/full/codecs.py index f4cd60a1..590238ec 100644 --- a/PythonLib/full/codecs.py +++ b/PythonLib/full/codecs.py @@ -20,8 +20,14 @@ "BOM_LE", "BOM32_BE", "BOM32_LE", "BOM64_BE", "BOM64_LE", "BOM_UTF8", "BOM_UTF16", "BOM_UTF16_LE", "BOM_UTF16_BE", "BOM_UTF32", "BOM_UTF32_LE", "BOM_UTF32_BE", + "CodecInfo", "Codec", "IncrementalEncoder", "IncrementalDecoder", + "StreamReader", "StreamWriter", + "StreamReaderWriter", "StreamRecoder", + "getencoder", "getdecoder", "getincrementalencoder", + "getincrementaldecoder", "getreader", "getwriter", + "encode", "decode", "iterencode", "iterdecode", "strict_errors", "ignore_errors", "replace_errors", - "xmlcharrefreplace_errors", + "xmlcharrefreplace_errors", "backslashreplace_errors", "register_error", "lookup_error"] ### Constants @@ -73,9 +79,19 @@ ### Codec base classes (defining the API) class CodecInfo(tuple): + """Codec details when looking up the codec registry""" + + # Private API to allow Python to blacklist the known non-Unicode + # codecs in the standard library. A more general mechanism to + # reliably distinguish test encodings from other codecs will hopefully + # be defined for Python 3.5 + # + # See http://bugs.python.org/issue19619 + _is_text_encoding = True # Assume codecs are text encodings by default def __new__(cls, encode, decode, streamreader=None, streamwriter=None, - incrementalencoder=None, incrementaldecoder=None, name=None): + incrementalencoder=None, incrementaldecoder=None, name=None, + _is_text_encoding=None): self = tuple.__new__(cls, (encode, decode, streamreader, streamwriter)) self.name = name self.encode = encode @@ -84,6 +100,8 @@ def __new__(cls, encode, decode, streamreader=None, streamwriter=None, self.incrementaldecoder = incrementaldecoder self.streamwriter = streamwriter self.streamreader = streamreader + if _is_text_encoding is not None: + self._is_text_encoding = _is_text_encoding return self def __repr__(self): @@ -120,8 +138,8 @@ def encode(self, input, errors='strict'): 'strict' handling. The method may not store state in the Codec instance. Use - StreamCodec for codecs which have to keep state in order to - make encoding/decoding efficient. + StreamWriter for codecs which have to keep state in order to + make encoding efficient. The encoder must be able to handle zero length input and return an empty object of the output object type in this @@ -143,8 +161,8 @@ def decode(self, input, errors='strict'): 'strict' handling. The method may not store state in the Codec instance. Use - StreamCodec for codecs which have to keep state in order to - make encoding/decoding efficient. + StreamReader for codecs which have to keep state in order to + make decoding efficient. The decoder must be able to handle zero length input and return an empty object of the output object type in this @@ -234,7 +252,7 @@ class IncrementalDecoder(object): """ def __init__(self, errors='strict'): """ - Creates a IncrementalDecoder instance. + Creates an IncrementalDecoder instance. The IncrementalDecoder may use different error handling schemes by providing the errors keyword argument. See the module docstring @@ -456,16 +474,13 @@ def read(self, size=-1, chars=-1, firstline=False): # read until we get the required number of characters (if available) while True: - # can the request can be satisfied from the character buffer? - if chars < 0: - if size < 0: - if self.charbuffer: - break - elif len(self.charbuffer) >= size: - break - else: + # can the request be satisfied from the character buffer? + if chars >= 0: if len(self.charbuffer) >= chars: break + elif size >= 0: + if len(self.charbuffer) >= size: + break # we need more data if size < 0: newdata = self.stream.read() @@ -997,7 +1012,7 @@ def iterencode(iterator, encoding, errors='strict', **kwargs): """ Encoding iterator. - Encodes the input strings from the iterator using a IncrementalEncoder. + Encodes the input strings from the iterator using an IncrementalEncoder. errors and kwargs are passed through to the IncrementalEncoder constructor. @@ -1015,7 +1030,7 @@ def iterdecode(iterator, encoding, errors='strict', **kwargs): """ Decoding iterator. - Decodes the input strings from the iterator using a IncrementalDecoder. + Decodes the input strings from the iterator using an IncrementalDecoder. errors and kwargs are passed through to the IncrementalDecoder constructor. @@ -1054,7 +1069,7 @@ def make_encoding_map(decoding_map): during translation. One example where this happens is cp875.py which decodes - multiple character to \u001a. + multiple character to \\u001a. """ m = {} diff --git a/PythonLib/full/collections.py b/PythonLib/full/collections.py index 0beb142b..f2ad9726 100644 --- a/PythonLib/full/collections.py +++ b/PythonLib/full/collections.py @@ -1,3 +1,15 @@ +'''This module implements specialized container datatypes providing +alternatives to Python's general purpose built-in containers, dict, +list, set, and tuple. + +* namedtuple factory function for creating tuple subclasses with named fields +* deque list-like container with fast appends and pops on either end +* Counter dict subclass for counting hashable objects +* OrderedDict dict subclass that remembers the order entries were added +* defaultdict dict subclass that calls a factory function to supply missing values + +''' + __all__ = ['Counter', 'deque', 'defaultdict', 'namedtuple', 'OrderedDict'] # For bootstrapping reasons, the collection ABCs are defined in _abcoll.py. # They should however be considered an integral part of collections.py. @@ -35,12 +47,17 @@ class OrderedDict(dict): # The sentinel element never gets deleted (this simplifies the algorithm). # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - def __init__(self, *args, **kwds): + def __init__(*args, **kwds): '''Initialize an ordered dictionary. The signature is the same as regular dictionaries, but keyword arguments are not recommended because their insertion order is arbitrary. ''' + if not args: + raise TypeError("descriptor '__init__' of 'OrderedDict' object " + "needs an argument") + self = args[0] + args = args[1:] if len(args) > 1: raise TypeError('expected at most 1 arguments, got %d' % len(args)) try: @@ -297,7 +314,7 @@ def namedtuple(typename, field_names, verbose=False, rename=False): >>> x, y = p # unpack like a regular tuple >>> x, y (11, 22) - >>> p.x + p.y # fields also accessable by name + >>> p.x + p.y # fields also accessible by name 33 >>> d = p._asdict() # convert to a dictionary >>> d['x'] @@ -314,6 +331,7 @@ def namedtuple(typename, field_names, verbose=False, rename=False): if isinstance(field_names, basestring): field_names = field_names.replace(',', ' ').split() field_names = map(str, field_names) + typename = str(typename) if rename: seen = set() for index, name in enumerate(field_names): @@ -326,6 +344,8 @@ def namedtuple(typename, field_names, verbose=False, rename=False): field_names[index] = '_%d' % index seen.add(name) for name in [typename] + field_names: + if type(name) != str: + raise TypeError('Type names and field names must be strings') if not all(c.isalnum() or c=='_' for c in name): raise ValueError('Type names and field names can only contain ' 'alphanumeric characters and underscores: %r' % name) @@ -435,7 +455,7 @@ class Counter(dict): # http://code.activestate.com/recipes/259174/ # Knuth, TAOCP Vol. II section 4.6.3 - def __init__(self, iterable=None, **kwds): + def __init__(*args, **kwds): '''Create a new, empty Counter object. And if given, count elements from an input iterable. Or, initialize the count from another mapping of elements to their counts. @@ -446,8 +466,15 @@ def __init__(self, iterable=None, **kwds): >>> c = Counter(a=4, b=2) # a new counter from keyword args ''' + if not args: + raise TypeError("descriptor '__init__' of 'Counter' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) super(Counter, self).__init__() - self.update(iterable, **kwds) + self.update(*args, **kwds) def __missing__(self, key): 'The count of elements not in the Counter is zero.' @@ -498,7 +525,7 @@ def fromkeys(cls, iterable, v=None): raise NotImplementedError( 'Counter.fromkeys() is undefined. Use Counter(iterable) instead.') - def update(self, iterable=None, **kwds): + def update(*args, **kwds): '''Like dict.update() but add counts instead of replacing them. Source can be an iterable, a dictionary, or another Counter instance. @@ -518,6 +545,14 @@ def update(self, iterable=None, **kwds): # contexts. Instead, we implement straight-addition. Both the inputs # and outputs are allowed to contain zero and negative counts. + if not args: + raise TypeError("descriptor 'update' of 'Counter' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + iterable = args[0] if args else None if iterable is not None: if isinstance(iterable, Mapping): if self: @@ -533,7 +568,7 @@ def update(self, iterable=None, **kwds): if kwds: self.update(kwds) - def subtract(self, iterable=None, **kwds): + def subtract(*args, **kwds): '''Like dict.update() but subtracts counts instead of replacing them. Counts can be reduced below zero. Both the inputs and outputs are allowed to contain zero and negative counts. @@ -549,6 +584,14 @@ def subtract(self, iterable=None, **kwds): -1 ''' + if not args: + raise TypeError("descriptor 'subtract' of 'Counter' object " + "needs an argument") + self = args[0] + args = args[1:] + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + iterable = args[0] if args else None if iterable is not None: self_get = self.get if isinstance(iterable, Mapping): diff --git a/PythonLib/full/compiler/pyassem.py b/PythonLib/full/compiler/pyassem.py index f52f7d07..b82073e4 100644 --- a/PythonLib/full/compiler/pyassem.py +++ b/PythonLib/full/compiler/pyassem.py @@ -581,7 +581,7 @@ def getArgCount(args): def twobyte(val): """Convert an int argument into high and low bytes""" - assert isinstance(val, int) + assert isinstance(val, (int, long)) return divmod(val, 256) class LineAddrTable: diff --git a/PythonLib/full/compiler/transformer.py b/PythonLib/full/compiler/transformer.py index d4f4613f..ba5c03ce 100644 --- a/PythonLib/full/compiler/transformer.py +++ b/PythonLib/full/compiler/transformer.py @@ -1526,7 +1526,7 @@ def get_docstring(self, node, n=None): def debug_tree(tree): l = [] for elt in tree: - if isinstance(elt, int): + if isinstance(elt, (int, long)): l.append(_names.get(elt, elt)) elif isinstance(elt, str): l.append(elt) diff --git a/PythonLib/full/cookielib.py b/PythonLib/full/cookielib.py index f9c8d2f8..2dd7c487 100644 --- a/PythonLib/full/cookielib.py +++ b/PythonLib/full/cookielib.py @@ -113,7 +113,7 @@ def time2netscape(t=None): """ if t is None: t = time.time() year, mon, mday, hour, min, sec, wday = time.gmtime(t)[:7] - return "%s %02d-%s-%04d %02d:%02d:%02d GMT" % ( + return "%s, %02d-%s-%04d %02d:%02d:%02d GMT" % ( DAYS[wday], mday, MONTHS[mon-1], year, hour, min, sec) @@ -464,26 +464,42 @@ def parse_ns_headers(ns_headers): for ns_header in ns_headers: pairs = [] version_set = False - for ii, param in enumerate(re.split(r";\s*", ns_header)): - param = param.rstrip() - if param == "": continue - if "=" not in param: - k, v = param, None - else: - k, v = re.split(r"\s*=\s*", param, 1) - k = k.lstrip() + + # XXX: The following does not strictly adhere to RFCs in that empty + # names and values are legal (the former will only appear once and will + # be overwritten if multiple occurrences are present). This is + # mostly to deal with backwards compatibility. + for ii, param in enumerate(ns_header.split(';')): + param = param.strip() + + key, sep, val = param.partition('=') + key = key.strip() + + if not key: + if ii == 0: + break + else: + continue + + # allow for a distinction between present and empty and missing + # altogether + val = val.strip() if sep else None + if ii != 0: - lc = k.lower() + lc = key.lower() if lc in known_attrs: - k = lc - if k == "version": + key = lc + + if key == "version": # This is an RFC 2109 cookie. - v = _strip_quotes(v) + if val is not None: + val = _strip_quotes(val) version_set = True - if k == "expires": + elif key == "expires": # convert expires date to seconds since epoch - v = http2time(_strip_quotes(v)) # None if invalid - pairs.append((k, v)) + if val is not None: + val = http2time(_strip_quotes(val)) # None if invalid + pairs.append((key, val)) if pairs: if not version_set: @@ -1418,7 +1434,7 @@ def _normalized_cookie_tuples(self, attrs_set): break # convert RFC 2965 Max-Age to seconds since epoch # XXX Strictly you're supposed to follow RFC 2616 - # age-calculation rules. Remember that zero Max-Age is a + # age-calculation rules. Remember that zero Max-Age # is a request to discard (old and new) cookie, though. k = "expires" v = self._now + v @@ -1719,12 +1735,12 @@ def __len__(self): def __repr__(self): r = [] for cookie in self: r.append(repr(cookie)) - return "<%s[%s]>" % (self.__class__, ", ".join(r)) + return "<%s[%s]>" % (self.__class__.__name__, ", ".join(r)) def __str__(self): r = [] for cookie in self: r.append(str(cookie)) - return "<%s[%s]>" % (self.__class__, ", ".join(r)) + return "<%s[%s]>" % (self.__class__.__name__, ", ".join(r)) # derives from IOError for backwards-compatibility with Python 2.4.0 diff --git a/PythonLib/full/copy.py b/PythonLib/full/copy.py index c227a2e5..daf81a3f 100644 --- a/PythonLib/full/copy.py +++ b/PythonLib/full/copy.py @@ -315,7 +315,7 @@ def _reconstruct(x, info, deep, memo=None): if n > 2: state = info[2] else: - state = {} + state = None if n > 3: listiter = info[3] else: @@ -329,7 +329,7 @@ def _reconstruct(x, info, deep, memo=None): y = callable(*args) memo[id(x)] = y - if state: + if state is not None: if deep: state = deepcopy(state, memo) if hasattr(y, '__setstate__'): diff --git a/PythonLib/full/copy_reg.py b/PythonLib/full/copy_reg.py index db171509..89430775 100644 --- a/PythonLib/full/copy_reg.py +++ b/PythonLib/full/copy_reg.py @@ -127,7 +127,11 @@ class found there. (This assumes classes don't modify their continue # mangled names elif name.startswith('__') and not name.endswith('__'): - names.append('_%s%s' % (c.__name__, name)) + stripped = c.__name__.lstrip('_') + if stripped: + names.append('_%s%s' % (stripped, name)) + else: + names.append(name) else: names.append(name) diff --git a/PythonLib/full/csv.py b/PythonLib/full/csv.py index 98480ba1..c155ada7 100644 --- a/PythonLib/full/csv.py +++ b/PythonLib/full/csv.py @@ -93,6 +93,10 @@ def fieldnames(self): self.line_num = self.reader.line_num return self._fieldnames + # Issue 20004: Because DictReader is a classic class, this setter is + # ignored. At this point in 2.7's lifecycle, it is too late to change the + # base class for fear of breaking working code. If you want to change + # fieldnames without overwriting the getter, set _fieldnames directly. @fieldnames.setter def fieldnames(self, value): self._fieldnames = value @@ -140,8 +144,8 @@ def _dict_to_list(self, rowdict): if self.extrasaction == "raise": wrong_fields = [k for k in rowdict if k not in self.fieldnames] if wrong_fields: - raise ValueError("dict contains fields not in fieldnames: " + - ", ".join(wrong_fields)) + raise ValueError("dict contains fields not in fieldnames: " + + ", ".join([repr(x) for x in wrong_fields])) return [rowdict.get(key, self.restval) for key in self.fieldnames] def writerow(self, rowdict): diff --git a/PythonLib/full/ctypes/__init__.py b/PythonLib/full/ctypes/__init__.py index 4e97c152..88c85ff3 100644 --- a/PythonLib/full/ctypes/__init__.py +++ b/PythonLib/full/ctypes/__init__.py @@ -1,6 +1,3 @@ -###################################################################### -# This file should be kept compatible with Python 2.3, see PEP 291. # -###################################################################### """create and manipulate C data types in Python""" import os as _os, sys as _sys @@ -345,6 +342,10 @@ class CDLL(object): """ _func_flags_ = _FUNCFLAG_CDECL _func_restype_ = c_int + # default values for repr + _name = '' + _handle = 0 + _FuncPtr = None def __init__(self, name, mode=DEFAULT_MODE, handle=None, use_errno=False, @@ -386,8 +387,8 @@ def __getitem__(self, name_or_ordinal): return func class PyDLL(CDLL): - """This class represents the Python library itself. It allows to - access Python API functions. The GIL is not released, and + """This class represents the Python library itself. It allows + accessing Python API functions. The GIL is not released, and Python exceptions are handled correctly. """ _func_flags_ = _FUNCFLAG_CDECL | _FUNCFLAG_PYTHONAPI diff --git a/PythonLib/full/ctypes/_endian.py b/PythonLib/full/ctypes/_endian.py index f80e675a..c0ba646f 100644 --- a/PythonLib/full/ctypes/_endian.py +++ b/PythonLib/full/ctypes/_endian.py @@ -1,6 +1,3 @@ -###################################################################### -# This file should be kept compatible with Python 2.3, see PEP 291. # -###################################################################### import sys from ctypes import * diff --git a/PythonLib/full/ctypes/macholib/README.ctypes b/PythonLib/full/ctypes/macholib/README.ctypes index 4e10cbe4..2866e9f3 100644 --- a/PythonLib/full/ctypes/macholib/README.ctypes +++ b/PythonLib/full/ctypes/macholib/README.ctypes @@ -1,4 +1,4 @@ -Files in this directory from from Bob Ippolito's py2app. +Files in this directory come from Bob Ippolito's py2app. License: Any components of the py2app suite may be distributed under the MIT or PSF open source licenses. diff --git a/PythonLib/full/ctypes/macholib/__init__.py b/PythonLib/full/ctypes/macholib/__init__.py index 36149d28..5621defc 100644 --- a/PythonLib/full/ctypes/macholib/__init__.py +++ b/PythonLib/full/ctypes/macholib/__init__.py @@ -1,6 +1,3 @@ -###################################################################### -# This file should be kept compatible with Python 2.3, see PEP 291. # -###################################################################### """ Enough Mach-O to make your head spin. diff --git a/PythonLib/full/ctypes/macholib/dyld.py b/PythonLib/full/ctypes/macholib/dyld.py index 9714ec65..1fdf8d64 100644 --- a/PythonLib/full/ctypes/macholib/dyld.py +++ b/PythonLib/full/ctypes/macholib/dyld.py @@ -1,6 +1,3 @@ -###################################################################### -# This file should be kept compatible with Python 2.3, see PEP 291. # -###################################################################### """ dyld emulation """ diff --git a/PythonLib/full/ctypes/macholib/dylib.py b/PythonLib/full/ctypes/macholib/dylib.py index ea3dd38b..aa107507 100644 --- a/PythonLib/full/ctypes/macholib/dylib.py +++ b/PythonLib/full/ctypes/macholib/dylib.py @@ -1,6 +1,3 @@ -###################################################################### -# This file should be kept compatible with Python 2.3, see PEP 291. # -###################################################################### """ Generic dylib path manipulation """ diff --git a/PythonLib/full/ctypes/macholib/framework.py b/PythonLib/full/ctypes/macholib/framework.py index dd7fb2f2..ad6ed554 100644 --- a/PythonLib/full/ctypes/macholib/framework.py +++ b/PythonLib/full/ctypes/macholib/framework.py @@ -1,6 +1,3 @@ -###################################################################### -# This file should be kept compatible with Python 2.3, see PEP 291. # -###################################################################### """ Generic framework path manipulation """ diff --git a/PythonLib/full/ctypes/util.py b/PythonLib/full/ctypes/util.py index fe0ed0a0..ab10ec52 100644 --- a/PythonLib/full/ctypes/util.py +++ b/PythonLib/full/ctypes/util.py @@ -1,7 +1,6 @@ -###################################################################### -# This file should be kept compatible with Python 2.3, see PEP 291. # -###################################################################### -import sys, os +import os +import subprocess +import sys # find_library(name) returns the pathname of a library, or None. if os.name == "nt": @@ -89,25 +88,28 @@ def find_library(name): import re, tempfile, errno def _findLib_gcc(name): + # Run GCC's linker with the -t (aka --trace) option and examine the + # library name it prints out. The GCC command will fail because we + # haven't supplied a proper program with main(), but that does not + # matter. expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name) - fdout, ccout = tempfile.mkstemp() - os.close(fdout) - cmd = 'if type gcc >/dev/null 2>&1; then CC=gcc; elif type cc >/dev/null 2>&1; then CC=cc;else exit 10; fi;' \ - 'LANG=C LC_ALL=C $CC -Wl,-t -o ' + ccout + ' 2>&1 -l' + name + cmd = 'if type gcc >/dev/null 2>&1; then CC=gcc; elif type cc >/dev/null 2>&1; then CC=cc;else exit; fi;' \ + 'LANG=C LC_ALL=C $CC -Wl,-t -o "$2" 2>&1 -l"$1"' + + temp = tempfile.NamedTemporaryFile() try: - f = os.popen(cmd) - try: - trace = f.read() - finally: - rv = f.close() + proc = subprocess.Popen((cmd, '_findLib_gcc', name, temp.name), + shell=True, + stdout=subprocess.PIPE) + [trace, _] = proc.communicate() finally: try: - os.unlink(ccout) + temp.close() except OSError, e: + # ENOENT is raised if the file was already removed, which is + # the normal behaviour of GCC if linking fails if e.errno != errno.ENOENT: raise - if rv == 10: - raise OSError, 'gcc or cc command not found' res = re.search(expr, trace) if not res: return None @@ -119,13 +121,17 @@ def _findLib_gcc(name): def _get_soname(f): if not f: return None - cmd = "/usr/ccs/bin/dump -Lpv 2>/dev/null " + f - f = os.popen(cmd) + + null = open(os.devnull, "wb") try: - data = f.read() - finally: - f.close() - res = re.search(r'\[.*\]\sSONAME\s+([^\s]+)', data) + with null: + proc = subprocess.Popen(("/usr/ccs/bin/dump", "-Lpv", f), + stdout=subprocess.PIPE, + stderr=null) + except OSError: # E.g. command not found + return None + [data, _] = proc.communicate() + res = re.search(br'\[.*\]\sSONAME\s+([^\s]+)', data) if not res: return None return res.group(1) @@ -134,19 +140,12 @@ def _get_soname(f): # assuming GNU binutils / ELF if not f: return None - cmd = 'if ! type objdump >/dev/null 2>&1; then exit 10; fi;' \ - "objdump -p -j .dynamic 2>/dev/null " + f - f = os.popen(cmd) - dump = f.read() - rv = f.close() - if rv == 10: - raise OSError, 'objdump command not found' - f = os.popen(cmd) - try: - data = f.read() - finally: - f.close() - res = re.search(r'\sSONAME\s+([^\s]+)', data) + cmd = 'if ! type objdump >/dev/null 2>&1; then exit; fi;' \ + 'objdump -p -j .dynamic 2>/dev/null "$1"' + proc = subprocess.Popen((cmd, '_get_soname', f), shell=True, + stdout=subprocess.PIPE) + [dump, _] = proc.communicate() + res = re.search(br'\sSONAME\s+([^\s]+)', dump) if not res: return None return res.group(1) @@ -157,27 +156,34 @@ def _get_soname(f): def _num_version(libname): # "libxyz.so.MAJOR.MINOR" => [ MAJOR, MINOR ] - parts = libname.split(".") + parts = libname.split(b".") nums = [] try: while parts: nums.insert(0, int(parts.pop())) except ValueError: pass - return nums or [ sys.maxint ] + return nums or [sys.maxint] def find_library(name): ename = re.escape(name) expr = r':-l%s\.\S+ => \S*/(lib%s\.\S+)' % (ename, ename) - f = os.popen('/sbin/ldconfig -r 2>/dev/null') + + null = open(os.devnull, 'wb') try: - data = f.read() - finally: - f.close() + with null: + proc = subprocess.Popen(('/sbin/ldconfig', '-r'), + stdout=subprocess.PIPE, + stderr=null) + except OSError: # E.g. command not found + data = b'' + else: + [data, _] = proc.communicate() + res = re.findall(expr, data) if not res: return _get_soname(_findLib_gcc(name)) - res.sort(cmp= lambda x,y: cmp(_num_version(x), _num_version(y))) + res.sort(key=_num_version) return res[-1] elif sys.platform == "sunos5": @@ -186,15 +192,32 @@ def _findLib_crle(name, is64): if not os.path.exists('/usr/bin/crle'): return None + env = dict(os.environ) + env['LC_ALL'] = 'C' + if is64: - cmd = 'env LC_ALL=C /usr/bin/crle -64 2>/dev/null' + args = ('/usr/bin/crle', '-64') else: - cmd = 'env LC_ALL=C /usr/bin/crle 2>/dev/null' + args = ('/usr/bin/crle',) - for line in os.popen(cmd).readlines(): - line = line.strip() - if line.startswith('Default Library Path (ELF):'): - paths = line.split()[4] + paths = None + null = open(os.devnull, 'wb') + try: + with null: + proc = subprocess.Popen(args, + stdout=subprocess.PIPE, + stderr=null, + env=env) + except OSError: # E.g. bad executable + return None + try: + for line in proc.stdout: + line = line.strip() + if line.startswith(b'Default Library Path (ELF):'): + paths = line.split()[4] + finally: + proc.stdout.close() + proc.wait() if not paths: return None @@ -228,11 +251,20 @@ def _findSoname_ldconfig(name): # XXX assuming GLIBC's ldconfig (with option -p) expr = r'\s+(lib%s\.[^\s]+)\s+\(%s' % (re.escape(name), abi_type) - f = os.popen('/sbin/ldconfig -p 2>/dev/null') + + env = dict(os.environ) + env['LC_ALL'] = 'C' + env['LANG'] = 'C' + null = open(os.devnull, 'wb') try: - data = f.read() - finally: - f.close() + with null: + p = subprocess.Popen(['/sbin/ldconfig', '-p'], + stderr=null, + stdout=subprocess.PIPE, + env=env) + except OSError: # E.g. command not found + return None + [data, _] = p.communicate() res = re.search(expr, data) if not res: return None diff --git a/PythonLib/full/ctypes/wintypes.py b/PythonLib/full/ctypes/wintypes.py index dafbb78b..e7f569c9 100644 --- a/PythonLib/full/ctypes/wintypes.py +++ b/PythonLib/full/ctypes/wintypes.py @@ -1,7 +1,3 @@ -###################################################################### -# This file should be kept compatible with Python 2.3, see PEP 291. # -###################################################################### - # The most useful windows datatypes from ctypes import * diff --git a/PythonLib/full/curses/ascii.py b/PythonLib/full/curses/ascii.py index 800fd8b4..5b243be6 100644 --- a/PythonLib/full/curses/ascii.py +++ b/PythonLib/full/curses/ascii.py @@ -53,19 +53,19 @@ def _ctoi(c): def isalnum(c): return isalpha(c) or isdigit(c) def isalpha(c): return isupper(c) or islower(c) -def isascii(c): return _ctoi(c) <= 127 # ? -def isblank(c): return _ctoi(c) in (8,32) -def iscntrl(c): return _ctoi(c) <= 31 -def isdigit(c): return _ctoi(c) >= 48 and _ctoi(c) <= 57 -def isgraph(c): return _ctoi(c) >= 33 and _ctoi(c) <= 126 -def islower(c): return _ctoi(c) >= 97 and _ctoi(c) <= 122 -def isprint(c): return _ctoi(c) >= 32 and _ctoi(c) <= 126 -def ispunct(c): return _ctoi(c) != 32 and not isalnum(c) +def isascii(c): return 0 <= _ctoi(c) <= 127 # ? +def isblank(c): return _ctoi(c) in (9, 32) +def iscntrl(c): return 0 <= _ctoi(c) <= 31 or _ctoi(c) == 127 +def isdigit(c): return 48 <= _ctoi(c) <= 57 +def isgraph(c): return 33 <= _ctoi(c) <= 126 +def islower(c): return 97 <= _ctoi(c) <= 122 +def isprint(c): return 32 <= _ctoi(c) <= 126 +def ispunct(c): return isgraph(c) and not isalnum(c) def isspace(c): return _ctoi(c) in (9, 10, 11, 12, 13, 32) -def isupper(c): return _ctoi(c) >= 65 and _ctoi(c) <= 90 +def isupper(c): return 65 <= _ctoi(c) <= 90 def isxdigit(c): return isdigit(c) or \ - (_ctoi(c) >= 65 and _ctoi(c) <= 70) or (_ctoi(c) >= 97 and _ctoi(c) <= 102) -def isctrl(c): return _ctoi(c) < 32 + (65 <= _ctoi(c) <= 70) or (97 <= _ctoi(c) <= 102) +def isctrl(c): return 0 <= _ctoi(c) < 32 def ismeta(c): return _ctoi(c) > 127 def ascii(c): diff --git a/PythonLib/full/curses/textpad.py b/PythonLib/full/curses/textpad.py index c45361c7..b50c03a2 100644 --- a/PythonLib/full/curses/textpad.py +++ b/PythonLib/full/curses/textpad.py @@ -43,16 +43,20 @@ class Textbox: def __init__(self, win, insert_mode=False): self.win = win self.insert_mode = insert_mode - (self.maxy, self.maxx) = win.getmaxyx() - self.maxy = self.maxy - 1 - self.maxx = self.maxx - 1 + self._update_max_yx() self.stripspaces = 1 self.lastcmd = None win.keypad(1) + def _update_max_yx(self): + maxy, maxx = self.win.getmaxyx() + self.maxy = maxy - 1 + self.maxx = maxx - 1 + def _end_of_line(self, y): """Go to the location of the first blank on the given line, returning the index of the last non-blank character.""" + self._update_max_yx() last = self.maxx while True: if curses.ascii.ascii(self.win.inch(y, last)) != curses.ascii.SP: @@ -64,8 +68,10 @@ def _end_of_line(self, y): return last def _insert_printable_char(self, ch): + self._update_max_yx() (y, x) = self.win.getyx() - if y < self.maxy or x < self.maxx: + backyx = None + while y < self.maxy or x < self.maxx: if self.insert_mode: oldch = self.win.inch() # The try-catch ignores the error we trigger from some curses @@ -75,14 +81,20 @@ def _insert_printable_char(self, ch): self.win.addch(ch) except curses.error: pass - if self.insert_mode: - (backy, backx) = self.win.getyx() - if curses.ascii.isprint(oldch): - self._insert_printable_char(oldch) - self.win.move(backy, backx) + if not self.insert_mode or not curses.ascii.isprint(oldch): + break + ch = oldch + (y, x) = self.win.getyx() + # Remember where to put the cursor back since we are in insert_mode + if backyx is None: + backyx = y, x + + if backyx is not None: + self.win.move(*backyx) def do_command(self, ch): "Process a single editing command." + self._update_max_yx() (y, x) = self.win.getyx() self.lastcmd = ch if curses.ascii.isprint(ch): @@ -148,6 +160,7 @@ def do_command(self, ch): def gather(self): "Collect and return the contents of the window." result = "" + self._update_max_yx() for y in range(self.maxy+1): self.win.move(y, 0) stop = self._end_of_line(y) diff --git a/PythonLib/full/decimal.py b/PythonLib/full/decimal.py index 04bf5c26..e5329dde 100644 --- a/PythonLib/full/decimal.py +++ b/PythonLib/full/decimal.py @@ -136,7 +136,6 @@ __version__ = '1.70' # Highest version of the spec this complies with -import copy as _copy import math as _math import numbers as _numbers @@ -225,7 +224,7 @@ def handle(self, context, *args): class ConversionSyntax(InvalidOperation): """Trying to convert badly formed string. - This occurs and signals invalid-operation if an string is being + This occurs and signals invalid-operation if a string is being converted to a number and it does not conform to the numeric string syntax. The result is [0,qNaN]. """ @@ -1049,12 +1048,11 @@ def __str__(self, eng=False, context=None): return sign + intpart + fracpart + exp def to_eng_string(self, context=None): - """Convert to engineering-type string. + """Convert to a string, using engineering notation if an exponent is needed. - Engineering notation has an exponent which is a multiple of 3, so there - are up to 3 digits left of the decimal place. - - Same rules for when in exponential and when as a value as in __str__. + Engineering notation has an exponent which is a multiple of 3. This + can leave up to 3 digits to the left of the decimal place and may + require the addition of either one or two trailing zeros. """ return self.__str__(eng=True, context=context) @@ -1083,7 +1081,7 @@ def __neg__(self, context=None): def __pos__(self, context=None): """Returns a copy, unless it is a sNaN. - Rounds the number (if more then precision digits) + Rounds the number (if more than precision digits) """ if self._is_special: ans = self._check_nans(context=context) @@ -3665,6 +3663,8 @@ def __format__(self, specifier, context=None, _localeconv=None): if self._is_special: sign = _format_sign(self._sign, spec) body = str(self.copy_abs()) + if spec['type'] == '%': + body += '%' return _format_align(sign, body, spec) # a type of None defaults to 'g' or 'G', depending on context @@ -5338,9 +5338,29 @@ def subtract(self, a, b): return r def to_eng_string(self, a): - """Converts a number to a string, using scientific notation. + """Convert to a string, using engineering notation if an exponent is needed. + + Engineering notation has an exponent which is a multiple of 3. This + can leave up to 3 digits to the left of the decimal place and may + require the addition of either one or two trailing zeros. The operation is not affected by the context. + + >>> ExtendedContext.to_eng_string(Decimal('123E+1')) + '1.23E+3' + >>> ExtendedContext.to_eng_string(Decimal('123E+3')) + '123E+3' + >>> ExtendedContext.to_eng_string(Decimal('123E-10')) + '12.3E-9' + >>> ExtendedContext.to_eng_string(Decimal('-123E-12')) + '-123E-12' + >>> ExtendedContext.to_eng_string(Decimal('7E-7')) + '700E-9' + >>> ExtendedContext.to_eng_string(Decimal('7E+1')) + '70' + >>> ExtendedContext.to_eng_string(Decimal('0E+1')) + '0.00E+3' + """ a = _convert_other(a, raiseit=True) return a.to_eng_string(context=self) @@ -6033,7 +6053,10 @@ def _parse_format_specifier(format_spec, _localeconv=None): format_dict['decimal_point'] = '.' # record whether return type should be str or unicode - format_dict['unicode'] = isinstance(format_spec, unicode) + try: + format_dict['unicode'] = isinstance(format_spec, unicode) + except NameError: + format_dict['unicode'] = False return format_dict diff --git a/PythonLib/full/difflib.py b/PythonLib/full/difflib.py index f94b3aca..1c6fbdbe 100644 --- a/PythonLib/full/difflib.py +++ b/PythonLib/full/difflib.py @@ -1,5 +1,3 @@ -#! /usr/bin/env python - """ Module difflib -- helpers for computing deltas between objects. @@ -525,8 +523,8 @@ def get_matching_blocks(self): non_adjacent.append((i1, j1, k1)) non_adjacent.append( (la, lb, 0) ) - self.matching_blocks = non_adjacent - return map(Match._make, self.matching_blocks) + self.matching_blocks = map(Match._make, non_adjacent) + return self.matching_blocks def get_opcodes(self): """Return list of 5-tuples describing how to turn a into b. @@ -1489,7 +1487,7 @@ def _line_iterator(): yield _make_line(lines,'-',0), None, True continue elif s.startswith(('--?+', '--+', '- ')): - # in delete block and see a intraline change or unchanged line + # in delete block and see an intraline change or unchanged line # coming: yield the delete line and then blanks from_line,to_line = _make_line(lines,'-',0), None num_blanks_to_yield,num_blanks_pending = num_blanks_pending-1,0 diff --git a/PythonLib/full/doctest.py b/PythonLib/full/doctest.py index efa07d7e..fedf6701 100644 --- a/PythonLib/full/doctest.py +++ b/PythonLib/full/doctest.py @@ -216,10 +216,10 @@ def _load_testfile(filename, package, module_relative): # get_data() opens files as 'rb', so one must do the equivalent # conversion as universal newlines would do. return file_contents.replace(os.linesep, '\n'), filename - with open(filename) as f: + with open(filename, 'U') as f: return f.read(), filename -# Use sys.stdout encoding for ouput. +# Use sys.stdout encoding for output. _encoding = getattr(sys.__stdout__, 'encoding', None) or 'utf-8' def _indent(s, indent=4): @@ -326,6 +326,32 @@ def _comment_line(line): else: return '#' +def _strip_exception_details(msg): + # Support for IGNORE_EXCEPTION_DETAIL. + # Get rid of everything except the exception name; in particular, drop + # the possibly dotted module path (if any) and the exception message (if + # any). We assume that a colon is never part of a dotted name, or of an + # exception name. + # E.g., given + # "foo.bar.MyError: la di da" + # return "MyError" + # Or for "abc.def" or "abc.def:\n" return "def". + + start, end = 0, len(msg) + # The exception name must appear on the first line. + i = msg.find("\n") + if i >= 0: + end = i + # retain up to the first colon (if any) + i = msg.find(':', 0, end) + if i >= 0: + end = i + # retain just the exception name + i = msg.rfind('.', 0, end) + if i >= 0: + start = i+1 + return msg[start: end] + class _OutputRedirectingPdb(pdb.Pdb): """ A specialized version of the python debugger that redirects stdout @@ -1323,10 +1349,9 @@ def __run(self, test, compileflags, out): # Another chance if they didn't care about the detail. elif self.optionflags & IGNORE_EXCEPTION_DETAIL: - m1 = re.match(r'(?:[^:]*\.)?([^:]*:)', example.exc_msg) - m2 = re.match(r'(?:[^:]*\.)?([^:]*:)', exc_msg) - if m1 and m2 and check(m1.group(1), m2.group(1), - self.optionflags): + if check(_strip_exception_details(example.exc_msg), + _strip_exception_details(exc_msg), + self.optionflags): outcome = SUCCESS # Report the outcome. diff --git a/PythonLib/full/dumbdbm.py b/PythonLib/full/dumbdbm.py index fb54a930..ac73b89c 100644 --- a/PythonLib/full/dumbdbm.py +++ b/PythonLib/full/dumbdbm.py @@ -21,6 +21,7 @@ """ +import ast as _ast import os as _os import __builtin__ import UserDict @@ -44,8 +45,9 @@ class _Database(UserDict.DictMixin): _os = _os # for _commit() _open = _open # for _commit() - def __init__(self, filebasename, mode): + def __init__(self, filebasename, mode, flag='c'): self._mode = mode + self._readonly = (flag == 'r') # The directory file is a text file. Each line looks like # "%r, (%d, %d)\n" % (key, pos, siz) @@ -68,9 +70,10 @@ def __init__(self, filebasename, mode): try: f = _open(self._datfile, 'r') except IOError: - f = _open(self._datfile, 'w') - self._chmod(self._datfile) - f.close() + with _open(self._datfile, 'w') as f: + self._chmod(self._datfile) + else: + f.close() self._update() # Read directory file into the in-memory index dict. @@ -79,13 +82,14 @@ def _update(self): try: f = _open(self._dirfile) except IOError: - pass + self._modified = not self._readonly else: - for line in f: - line = line.rstrip() - key, pos_and_siz_pair = eval(line) - self._index[key] = pos_and_siz_pair - f.close() + self._modified = False + with f: + for line in f: + line = line.rstrip() + key, pos_and_siz_pair = _ast.literal_eval(line) + self._index[key] = pos_and_siz_pair # Write the index dict to the directory file. The original directory # file (if any) is renamed with a .bak extension first. If a .bak @@ -94,7 +98,7 @@ def _commit(self): # CAUTION: It's vital that _commit() succeed, and _commit() can # be called from __del__(). Therefore we must never reference a # global in this routine. - if self._index is None: + if self._index is None or not self._modified: return # nothing to do try: @@ -107,20 +111,18 @@ def _commit(self): except self._os.error: pass - f = self._open(self._dirfile, 'w') - self._chmod(self._dirfile) - for key, pos_and_siz_pair in self._index.iteritems(): - f.write("%r, %r\n" % (key, pos_and_siz_pair)) - f.close() + with self._open(self._dirfile, 'w') as f: + self._chmod(self._dirfile) + for key, pos_and_siz_pair in self._index.iteritems(): + f.write("%r, %r\n" % (key, pos_and_siz_pair)) sync = _commit def __getitem__(self, key): pos, siz = self._index[key] # may raise KeyError - f = _open(self._datfile, 'rb') - f.seek(pos) - dat = f.read(siz) - f.close() + with _open(self._datfile, 'rb') as f: + f.seek(pos) + dat = f.read(siz) return dat # Append val to the data file, starting at a _BLOCKSIZE-aligned @@ -128,14 +130,13 @@ def __getitem__(self, key): # to get to an aligned offset. Return pair # (starting offset of val, len(val)) def _addval(self, val): - f = _open(self._datfile, 'rb+') - f.seek(0, 2) - pos = int(f.tell()) - npos = ((pos + _BLOCKSIZE - 1) // _BLOCKSIZE) * _BLOCKSIZE - f.write('\0'*(npos-pos)) - pos = npos - f.write(val) - f.close() + with _open(self._datfile, 'rb+') as f: + f.seek(0, 2) + pos = int(f.tell()) + npos = ((pos + _BLOCKSIZE - 1) // _BLOCKSIZE) * _BLOCKSIZE + f.write('\0'*(npos-pos)) + pos = npos + f.write(val) return (pos, len(val)) # Write val to the data file, starting at offset pos. The caller @@ -143,10 +144,9 @@ def _addval(self, val): # pos to hold val, without overwriting some other value. Return # pair (pos, len(val)). def _setval(self, pos, val): - f = _open(self._datfile, 'rb+') - f.seek(pos) - f.write(val) - f.close() + with _open(self._datfile, 'rb+') as f: + f.seek(pos) + f.write(val) return (pos, len(val)) # key is a new key whose associated value starts in the data file @@ -154,14 +154,14 @@ def _setval(self, pos, val): # the in-memory index dict, and append one to the directory file. def _addkey(self, key, pos_and_siz_pair): self._index[key] = pos_and_siz_pair - f = _open(self._dirfile, 'a') - self._chmod(self._dirfile) - f.write("%r, %r\n" % (key, pos_and_siz_pair)) - f.close() + with _open(self._dirfile, 'a') as f: + self._chmod(self._dirfile) + f.write("%r, %r\n" % (key, pos_and_siz_pair)) def __setitem__(self, key, val): if not type(key) == type('') == type(val): raise TypeError, "keys and values must be strings" + self._modified = True if key not in self._index: self._addkey(key, self._addval(val)) else: @@ -187,6 +187,7 @@ def __setitem__(self, key, val): # (so that _commit() never gets called). def __delitem__(self, key): + self._modified = True # The blocks used by the associated value are lost. del self._index[key] # XXX It's unclear why we do a _commit() here (the code always @@ -212,8 +213,10 @@ def __len__(self): return len(self._index) def close(self): - self._commit() - self._index = self._datfile = self._dirfile = self._bakfile = None + try: + self._commit() + finally: + self._index = self._datfile = self._dirfile = self._bakfile = None __del__ = close @@ -247,4 +250,4 @@ def open(file, flag=None, mode=0666): # Turn off any bits that are set in the umask mode = mode & (~um) - return _Database(file, mode) + return _Database(file, mode, flag) diff --git a/PythonLib/full/email/base64mime.py b/PythonLib/full/email/base64mime.py index 4aa80002..61eba2be 100644 --- a/PythonLib/full/email/base64mime.py +++ b/PythonLib/full/email/base64mime.py @@ -166,7 +166,7 @@ def decode(s, convert_eols=None): decoding a text attachment. This function does not parse a full MIME header value encoded with - base64 (like =?iso-8895-1?b?bmloISBuaWgh?=) -- please use the high + base64 (like =?iso-8859-1?b?bmloISBuaWgh?=) -- please use the high level email.header class for that functionality. """ if not s: diff --git a/PythonLib/full/email/feedparser.py b/PythonLib/full/email/feedparser.py index 15db26d2..8031ca66 100644 --- a/PythonLib/full/email/feedparser.py +++ b/PythonLib/full/email/feedparser.py @@ -49,8 +49,8 @@ class BufferedSubFile(object): simple abstraction -- it parses until EOF closes the current message. """ def __init__(self): - # The last partial line pushed into this object. - self._partial = '' + # Chunks of the last partial line pushed into this object. + self._partial = [] # The list of full, pushed lines, in reverse order self._lines = [] # The stack of false-EOF checking predicates. @@ -66,8 +66,8 @@ def pop_eof_matcher(self): def close(self): # Don't forget any trailing partial line. - self._lines.append(self._partial) - self._partial = '' + self.pushlines(''.join(self._partial).splitlines(True)) + self._partial = [] self._closed = True def readline(self): @@ -95,8 +95,29 @@ def unreadline(self, line): def push(self, data): """Push some new data into this object.""" - # Handle any previous leftovers - data, self._partial = self._partial + data, '' + # Crack into lines, but preserve the linesep characters on the end of each + parts = data.splitlines(True) + + if not parts or not parts[0].endswith(('\n', '\r')): + # No new complete lines, so just accumulate partials + self._partial += parts + return + + if self._partial: + # If there are previous leftovers, complete them now + self._partial.append(parts[0]) + parts[0:1] = ''.join(self._partial).splitlines(True) + del self._partial[:] + + # If the last element of the list does not end in a newline, then treat + # it as a partial line. We only check for '\n' here because a line + # ending with '\r' might be a line that was split in the middle of a + # '\r\n' sequence (see bugs 1555570 and 1721862). + if not parts[-1].endswith('\n'): + self._partial = [parts.pop()] + self.pushlines(parts) + + def pushlines(self, lines): # Crack into lines, but preserve the newlines on the end of each parts = NLCRE_crack.split(data) # The *ahem* interesting behaviour of re.split when supplied grouping diff --git a/PythonLib/full/email/generator.py b/PythonLib/full/email/generator.py index 5626ab91..e50f912c 100644 --- a/PythonLib/full/email/generator.py +++ b/PythonLib/full/email/generator.py @@ -231,9 +231,8 @@ def _handle_multipart(self, msg): # body-part self._fp.write(body_part) # close-delimiter transport-padding - self._fp.write('\n--' + boundary + '--') + self._fp.write('\n--' + boundary + '--' + NL) if msg.epilogue is not None: - print >> self._fp if self._mangle_from_: epilogue = fcre.sub('>From ', msg.epilogue) else: diff --git a/PythonLib/full/email/message.py b/PythonLib/full/email/message.py index 7c933709..d7358cd6 100644 --- a/PythonLib/full/email/message.py +++ b/PythonLib/full/email/message.py @@ -579,7 +579,7 @@ def set_param(self, param, value, header='Content-Type', requote=True, message, it will be set to "text/plain" and the new parameter and value will be appended as per RFC 2045. - An alternate header can specified in the header argument, and all + An alternate header can be specified in the header argument, and all parameters will be quoted as necessary unless requote is False. If charset is specified, the parameter will be encoded according to RFC diff --git a/PythonLib/full/email/mime/nonmultipart.py b/PythonLib/full/email/mime/nonmultipart.py index fc3b9eb4..e1f51968 100644 --- a/PythonLib/full/email/mime/nonmultipart.py +++ b/PythonLib/full/email/mime/nonmultipart.py @@ -12,7 +12,7 @@ class MIMENonMultipart(MIMEBase): - """Base class for MIME multipart/* type messages.""" + """Base class for MIME non-multipart type messages.""" def attach(self, payload): # The public API prohibits attaching multiple subparts to MIMEBase diff --git a/PythonLib/full/email/parser.py b/PythonLib/full/email/parser.py index 2fcaf254..6dad32a3 100644 --- a/PythonLib/full/email/parser.py +++ b/PythonLib/full/email/parser.py @@ -23,7 +23,7 @@ def __init__(self, *args, **kws): textual representation of the message. The string must be formatted as a block of RFC 2822 headers and header - continuation lines, optionally preceeded by a `Unix-from' header. The + continuation lines, optionally preceded by a `Unix-from' header. The header block is terminated either by the end of the string or by a blank line. diff --git a/PythonLib/full/email/quoprimime.py b/PythonLib/full/email/quoprimime.py index 0c18a9e0..cd818eb7 100644 --- a/PythonLib/full/email/quoprimime.py +++ b/PythonLib/full/email/quoprimime.py @@ -329,7 +329,7 @@ def header_decode(s): """Decode a string encoded with RFC 2045 MIME header `Q' encoding. This function does not parse a full MIME header value encoded with - quoted-printable (like =?iso-8895-1?q?Hello_World?=) -- please use + quoted-printable (like =?iso-8859-1?q?Hello_World?=) -- please use the high level email.header class for that functionality. """ s = s.replace('_', ' ') diff --git a/PythonLib/full/email/utils.py b/PythonLib/full/email/utils.py index c976021e..ac13f49d 100644 --- a/PythonLib/full/email/utils.py +++ b/PythonLib/full/email/utils.py @@ -177,21 +177,20 @@ def formatdate(timeval=None, localtime=False, usegmt=False): def make_msgid(idstring=None): """Returns a string suitable for RFC 2822 compliant Message-ID, e.g: - <20020201195627.33539.96671@nightshade.la.mastaler.com> + <142480216486.20800.16526388040877946887@nightshade.la.mastaler.com> Optional idstring if given is a string used to strengthen the uniqueness of the message id. """ - timeval = time.time() - utcdate = time.strftime('%Y%m%d%H%M%S', time.gmtime(timeval)) + timeval = int(time.time()*100) pid = os.getpid() - randint = random.randrange(100000) + randint = random.getrandbits(64) if idstring is None: idstring = '' else: idstring = '.' + idstring idhost = socket.getfqdn() - msgid = '<%s.%s.%s%s@%s>' % (utcdate, pid, randint, idstring, idhost) + msgid = '<%d.%d.%d%s@%s>' % (timeval, pid, randint, idstring, idhost) return msgid diff --git a/PythonLib/full/encodings/base64_codec.py b/PythonLib/full/encodings/base64_codec.py index f84e7808..34ac5554 100644 --- a/PythonLib/full/encodings/base64_codec.py +++ b/PythonLib/full/encodings/base64_codec.py @@ -76,4 +76,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) diff --git a/PythonLib/full/encodings/bz2_codec.py b/PythonLib/full/encodings/bz2_codec.py index 054b36b4..136503ac 100644 --- a/PythonLib/full/encodings/bz2_codec.py +++ b/PythonLib/full/encodings/bz2_codec.py @@ -99,4 +99,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) diff --git a/PythonLib/full/encodings/hex_codec.py b/PythonLib/full/encodings/hex_codec.py index 91b38d95..154488cd 100644 --- a/PythonLib/full/encodings/hex_codec.py +++ b/PythonLib/full/encodings/hex_codec.py @@ -76,4 +76,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) diff --git a/PythonLib/full/encodings/quopri_codec.py b/PythonLib/full/encodings/quopri_codec.py index d8683fd5..e4965da8 100644 --- a/PythonLib/full/encodings/quopri_codec.py +++ b/PythonLib/full/encodings/quopri_codec.py @@ -21,7 +21,7 @@ def quopri_encode(input, errors='strict'): # using str() because of cStringIO's Unicode undesired Unicode behavior. f = StringIO(str(input)) g = StringIO() - quopri.encode(f, g, 1) + quopri.encode(f, g, quotetabs=True) output = g.getvalue() return (output, len(input)) @@ -72,4 +72,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) diff --git a/PythonLib/full/encodings/rot_13.py b/PythonLib/full/encodings/rot_13.py index 52b6431c..4eaf4338 100644 --- a/PythonLib/full/encodings/rot_13.py +++ b/PythonLib/full/encodings/rot_13.py @@ -44,6 +44,7 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, + _is_text_encoding=False, ) ### Decoding Map diff --git a/PythonLib/full/encodings/utf_32.py b/PythonLib/full/encodings/utf_32.py index 6c8016fe..067e1e20 100644 --- a/PythonLib/full/encodings/utf_32.py +++ b/PythonLib/full/encodings/utf_32.py @@ -68,7 +68,7 @@ def reset(self): self.decoder = None def getstate(self): - # additonal state info from the base class must be None here, + # additional state info from the base class must be None here, # as it isn't passed along to the caller state = codecs.BufferedIncrementalDecoder.getstate(self)[0] # additional state info we pass to the caller: diff --git a/PythonLib/full/encodings/uu_codec.py b/PythonLib/full/encodings/uu_codec.py index fb037581..5cb0d2b1 100644 --- a/PythonLib/full/encodings/uu_codec.py +++ b/PythonLib/full/encodings/uu_codec.py @@ -84,7 +84,7 @@ def uu_decode(input,errors='strict'): data = a2b_uu(s) except binascii.Error, v: # Workaround for broken uuencoders by /Fredrik Lundh - nbytes = (((ord(s[0])-32) & 63) * 4 + 5) / 3 + nbytes = (((ord(s[0])-32) & 63) * 4 + 5) // 3 data = a2b_uu(s[:nbytes]) #sys.stderr.write("Warning: %s\n" % str(v)) write(data) @@ -126,4 +126,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamreader=StreamReader, streamwriter=StreamWriter, + _is_text_encoding=False, ) diff --git a/PythonLib/full/encodings/zlib_codec.py b/PythonLib/full/encodings/zlib_codec.py index 3419f9f4..0c2599d4 100644 --- a/PythonLib/full/encodings/zlib_codec.py +++ b/PythonLib/full/encodings/zlib_codec.py @@ -99,4 +99,5 @@ def getregentry(): incrementaldecoder=IncrementalDecoder, streamreader=StreamReader, streamwriter=StreamWriter, + _is_text_encoding=False, ) diff --git a/PythonLib/full/fileinput.py b/PythonLib/full/fileinput.py index 04e97bdb..b2e2f050 100644 --- a/PythonLib/full/fileinput.py +++ b/PythonLib/full/fileinput.py @@ -64,13 +64,6 @@ disabled when standard input is read. XXX The current implementation does not work for MS-DOS 8+3 filesystems. -Performance: this module is unfortunately one of the slower ways of -processing large numbers of input lines. Nevertheless, a significant -speed-up has been obtained by using readlines(bufsize) instead of -readline(). A new keyword argument, bufsize=N, is present on the -input() function and the FileInput() class to override the default -buffer size. - XXX Possible additions: - optional getopt argument processing @@ -86,6 +79,7 @@ _state = None +# No longer used DEFAULT_BUFSIZE = 8*1024 def input(files=None, inplace=0, backup="", bufsize=0, @@ -207,17 +201,14 @@ def __init__(self, files=None, inplace=0, backup="", bufsize=0, self._files = files self._inplace = inplace self._backup = backup - self._bufsize = bufsize or DEFAULT_BUFSIZE self._savestdout = None self._output = None self._filename = None - self._lineno = 0 + self._startlineno = 0 self._filelineno = 0 self._file = None self._isstdin = False self._backupfilename = None - self._buffer = [] - self._bufindex = 0 # restrict mode argument to reading modes if mode not in ('r', 'rU', 'U', 'rb'): raise ValueError("FileInput opening mode must be one of " @@ -233,29 +224,27 @@ def __del__(self): self.close() def close(self): - self.nextfile() - self._files = () + try: + self.nextfile() + finally: + self._files = () def __iter__(self): return self def next(self): - try: - line = self._buffer[self._bufindex] - except IndexError: - pass - else: - self._bufindex += 1 - self._lineno += 1 - self._filelineno += 1 - return line - line = self.readline() - if not line: - raise StopIteration - return line + while 1: + line = self._readline() + if line: + self._filelineno += 1 + return line + if not self._file: + raise StopIteration + self.nextfile() + # repeat with next file def __getitem__(self, i): - if i != self._lineno: + if i != self.lineno(): raise RuntimeError, "accessing lines out of order" try: return self.next() @@ -270,90 +259,93 @@ def nextfile(self): output = self._output self._output = 0 - if output: - output.close() - - file = self._file - self._file = 0 - if file and not self._isstdin: - file.close() - - backupfilename = self._backupfilename - self._backupfilename = 0 - if backupfilename and not self._backup: - try: os.unlink(backupfilename) - except OSError: pass + try: + if output: + output.close() + finally: + file = self._file + self._file = None + try: + del self._readline # restore FileInput._readline + except AttributeError: + pass + try: + if file and not self._isstdin: + file.close() + finally: + backupfilename = self._backupfilename + self._backupfilename = 0 + if backupfilename and not self._backup: + try: os.unlink(backupfilename) + except OSError: pass - self._isstdin = False - self._buffer = [] - self._bufindex = 0 + self._isstdin = False def readline(self): - try: - line = self._buffer[self._bufindex] - except IndexError: - pass + while 1: + line = self._readline() + if line: + self._filelineno += 1 + return line + if not self._file: + return line + self.nextfile() + # repeat with next file + + def _readline(self): + if not self._files: + return "" + self._filename = self._files[0] + self._files = self._files[1:] + self._startlineno = self.lineno() + self._filelineno = 0 + self._file = None + self._isstdin = False + self._backupfilename = 0 + if self._filename == '-': + self._filename = '' + self._file = sys.stdin + self._isstdin = True else: - self._bufindex += 1 - self._lineno += 1 - self._filelineno += 1 - return line - if not self._file: - if not self._files: - return "" - self._filename = self._files[0] - self._files = self._files[1:] - self._filelineno = 0 - self._file = None - self._isstdin = False - self._backupfilename = 0 - if self._filename == '-': - self._filename = '' - self._file = sys.stdin - self._isstdin = True - else: - if self._inplace: - self._backupfilename = ( - self._filename + (self._backup or os.extsep+"bak")) - try: os.unlink(self._backupfilename) - except os.error: pass - # The next few lines may raise IOError - os.rename(self._filename, self._backupfilename) - self._file = open(self._backupfilename, self._mode) + if self._inplace: + self._backupfilename = ( + self._filename + (self._backup or os.extsep+"bak")) + try: os.unlink(self._backupfilename) + except os.error: pass + # The next few lines may raise IOError + os.rename(self._filename, self._backupfilename) + self._file = open(self._backupfilename, self._mode) + try: + perm = os.fstat(self._file.fileno()).st_mode + except OSError: + self._output = open(self._filename, "w") + else: + fd = os.open(self._filename, + os.O_CREAT | os.O_WRONLY | os.O_TRUNC, + perm) + self._output = os.fdopen(fd, "w") try: - perm = os.fstat(self._file.fileno()).st_mode + if hasattr(os, 'chmod'): + os.chmod(self._filename, perm) except OSError: - self._output = open(self._filename, "w") - else: - fd = os.open(self._filename, - os.O_CREAT | os.O_WRONLY | os.O_TRUNC, - perm) - self._output = os.fdopen(fd, "w") - try: - if hasattr(os, 'chmod'): - os.chmod(self._filename, perm) - except OSError: - pass - self._savestdout = sys.stdout - sys.stdout = self._output + pass + self._savestdout = sys.stdout + sys.stdout = self._output + else: + # This may raise IOError + if self._openhook: + self._file = self._openhook(self._filename, self._mode) else: - # This may raise IOError - if self._openhook: - self._file = self._openhook(self._filename, self._mode) - else: - self._file = open(self._filename, self._mode) - self._buffer = self._file.readlines(self._bufsize) - self._bufindex = 0 - if not self._buffer: - self.nextfile() - # Recursive call - return self.readline() + self._file = open(self._filename, self._mode) + + self._readline = self._file.readline # hide FileInput._readline + return self._readline() def filename(self): return self._filename def lineno(self): - return self._lineno + return self._startlineno + self._filelineno def filelineno(self): return self._filelineno @@ -387,9 +379,10 @@ def hook_compressed(filename, mode): def hook_encoded(encoding): - import codecs + import io def openhook(filename, mode): - return codecs.open(filename, mode, encoding) + mode = mode.replace('U', '').replace('b', '') or 'r' + return io.open(filename, mode, encoding=encoding, newline='') return openhook diff --git a/PythonLib/full/fnmatch.py b/PythonLib/full/fnmatch.py index ffe99b57..99002e6e 100644 --- a/PythonLib/full/fnmatch.py +++ b/PythonLib/full/fnmatch.py @@ -47,12 +47,14 @@ def filter(names, pat): import os,posixpath result=[] pat=os.path.normcase(pat) - if not pat in _cache: + try: + re_pat = _cache[pat] + except KeyError: res = translate(pat) if len(_cache) >= _MAXCACHE: _cache.clear() - _cache[pat] = re.compile(res) - match=_cache[pat].match + _cache[pat] = re_pat = re.compile(res) + match = re_pat.match if os.path is posixpath: # normcase on posix is NOP. Optimize it away from the loop. for name in names: @@ -71,12 +73,14 @@ def fnmatchcase(name, pat): its arguments. """ - if not pat in _cache: + try: + re_pat = _cache[pat] + except KeyError: res = translate(pat) if len(_cache) >= _MAXCACHE: _cache.clear() - _cache[pat] = re.compile(res) - return _cache[pat].match(name) is not None + _cache[pat] = re_pat = re.compile(res) + return re_pat.match(name) is not None def translate(pat): """Translate a shell PATTERN to a regular expression. diff --git a/PythonLib/full/ftplib.py b/PythonLib/full/ftplib.py index c98290ce..66445547 100644 --- a/PythonLib/full/ftplib.py +++ b/PythonLib/full/ftplib.py @@ -171,6 +171,8 @@ def sanitize(self, s): # Internal: send one line to the server, appending CRLF def putline(self, line): + if '\r' in line or '\n' in line: + raise ValueError('an illegal newline character should not be contained') line = line + CRLF if self.debugging > 1: print '*put*', self.sanitize(line) self.sock.sendall(line) @@ -264,7 +266,7 @@ def sendport(self, host, port): return self.voidcmd(cmd) def sendeprt(self, host, port): - '''Send a EPRT command with the current host and the given port number.''' + '''Send an EPRT command with the current host and the given port number.''' af = 0 if self.af == socket.AF_INET: af = 1 @@ -412,12 +414,14 @@ def retrbinary(self, cmd, callback, blocksize=8192, rest=None): """ self.voidcmd('TYPE I') conn = self.transfercmd(cmd, rest) - while 1: - data = conn.recv(blocksize) - if not data: - break - callback(data) - conn.close() + try: + while 1: + data = conn.recv(blocksize) + if not data: + break + callback(data) + finally: + conn.close() return self.voidresp() def retrlines(self, cmd, callback = None): @@ -435,21 +439,25 @@ def retrlines(self, cmd, callback = None): if callback is None: callback = print_line resp = self.sendcmd('TYPE A') conn = self.transfercmd(cmd) - fp = conn.makefile('rb') - while 1: - line = fp.readline(self.maxline + 1) - if len(line) > self.maxline: - raise Error("got more than %d bytes" % self.maxline) - if self.debugging > 2: print '*retr*', repr(line) - if not line: - break - if line[-2:] == CRLF: - line = line[:-2] - elif line[-1:] == '\n': - line = line[:-1] - callback(line) - fp.close() - conn.close() + fp = None + try: + fp = conn.makefile('rb') + while 1: + line = fp.readline(self.maxline + 1) + if len(line) > self.maxline: + raise Error("got more than %d bytes" % self.maxline) + if self.debugging > 2: print '*retr*', repr(line) + if not line: + break + if line[-2:] == CRLF: + line = line[:-2] + elif line[-1:] == '\n': + line = line[:-1] + callback(line) + finally: + if fp: + fp.close() + conn.close() return self.voidresp() def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None): @@ -469,12 +477,14 @@ def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None): """ self.voidcmd('TYPE I') conn = self.transfercmd(cmd, rest) - while 1: - buf = fp.read(blocksize) - if not buf: break - conn.sendall(buf) - if callback: callback(buf) - conn.close() + try: + while 1: + buf = fp.read(blocksize) + if not buf: break + conn.sendall(buf) + if callback: callback(buf) + finally: + conn.close() return self.voidresp() def storlines(self, cmd, fp, callback=None): @@ -491,17 +501,19 @@ def storlines(self, cmd, fp, callback=None): """ self.voidcmd('TYPE A') conn = self.transfercmd(cmd) - while 1: - buf = fp.readline(self.maxline + 1) - if len(buf) > self.maxline: - raise Error("got more than %d bytes" % self.maxline) - if not buf: break - if buf[-2:] != CRLF: - if buf[-1] in CRLF: buf = buf[:-1] - buf = buf + CRLF - conn.sendall(buf) - if callback: callback(buf) - conn.close() + try: + while 1: + buf = fp.readline(self.maxline + 1) + if len(buf) > self.maxline: + raise Error("got more than %d bytes" % self.maxline) + if not buf: break + if buf[-2:] != CRLF: + if buf[-1] in CRLF: buf = buf[:-1] + buf = buf + CRLF + conn.sendall(buf) + if callback: callback(buf) + finally: + conn.close() return self.voidresp() def acct(self, password): @@ -594,11 +606,16 @@ def quit(self): def close(self): '''Close the connection without assuming anything about it.''' - if self.file is not None: - self.file.close() - if self.sock is not None: - self.sock.close() - self.file = self.sock = None + try: + file = self.file + self.file = None + if file is not None: + file.close() + finally: + sock = self.sock + self.sock = None + if sock is not None: + sock.close() try: import ssl @@ -638,12 +655,24 @@ class FTP_TLS(FTP): '221 Goodbye.' >>> ''' - ssl_version = ssl.PROTOCOL_TLSv1 + ssl_version = ssl.PROTOCOL_SSLv23 def __init__(self, host='', user='', passwd='', acct='', keyfile=None, - certfile=None, timeout=_GLOBAL_DEFAULT_TIMEOUT): + certfile=None, context=None, + timeout=_GLOBAL_DEFAULT_TIMEOUT, source_address=None): + if context is not None and keyfile is not None: + raise ValueError("context and keyfile arguments are mutually " + "exclusive") + if context is not None and certfile is not None: + raise ValueError("context and certfile arguments are mutually " + "exclusive") self.keyfile = keyfile self.certfile = certfile + if context is None: + context = ssl._create_stdlib_context(self.ssl_version, + certfile=certfile, + keyfile=keyfile) + self.context = context self._prot_p = False FTP.__init__(self, host, user, passwd, acct, timeout) @@ -656,12 +685,12 @@ def auth(self): '''Set up secure control connection by using TLS/SSL.''' if isinstance(self.sock, ssl.SSLSocket): raise ValueError("Already using TLS") - if self.ssl_version == ssl.PROTOCOL_TLSv1: + if self.ssl_version >= ssl.PROTOCOL_SSLv23: resp = self.voidcmd('AUTH TLS') else: resp = self.voidcmd('AUTH SSL') - self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, - ssl_version=self.ssl_version) + self.sock = self.context.wrap_socket(self.sock, + server_hostname=self.host) self.file = self.sock.makefile(mode='rb') return resp @@ -692,8 +721,8 @@ def prot_c(self): def ntransfercmd(self, cmd, rest=None): conn, size = FTP.ntransfercmd(self, cmd, rest) if self._prot_p: - conn = ssl.wrap_socket(conn, self.keyfile, self.certfile, - ssl_version=self.ssl_version) + conn = self.context.wrap_socket(conn, + server_hostname=self.host) return conn, size def retrbinary(self, cmd, callback, blocksize=8192, rest=None): @@ -825,7 +854,7 @@ def parse227(resp): def parse229(resp, peer): - '''Parse the '229' response for a EPSV request. + '''Parse the '229' response for an EPSV request. Raises error_proto if it does not contain '(|||port|)' Return ('host.addr.as.numbers', port#) tuple.''' diff --git a/PythonLib/full/genericpath.py b/PythonLib/full/genericpath.py index 7ddb94c0..2648e545 100644 --- a/PythonLib/full/genericpath.py +++ b/PythonLib/full/genericpath.py @@ -10,6 +10,14 @@ 'getsize', 'isdir', 'isfile'] +try: + _unicode = unicode +except NameError: + # If Python is built without Unicode support, the unicode type + # will not exist. Fake one. + class _unicode(object): + pass + # Does a path exist? # This is false for dangling symbolic links on systems that support them. def exists(path): diff --git a/PythonLib/full/getopt.py b/PythonLib/full/getopt.py index 251d89c5..084aadb5 100644 --- a/PythonLib/full/getopt.py +++ b/PythonLib/full/getopt.py @@ -28,7 +28,7 @@ # - RETURN_IN_ORDER option # - GNU extension with '-' as first character of option string # - optional arguments, specified by double colons -# - a option string with a W followed by semicolon should +# - an option string with a W followed by semicolon should # treat "-W foo" as "--foo" __all__ = ["GetoptError","error","getopt","gnu_getopt"] diff --git a/PythonLib/full/gettext.py b/PythonLib/full/gettext.py index 3f475803..765cc8c7 100644 --- a/PythonLib/full/gettext.py +++ b/PythonLib/full/gettext.py @@ -52,79 +52,154 @@ __all__ = ['NullTranslations', 'GNUTranslations', 'Catalog', 'find', 'translation', 'install', 'textdomain', 'bindtextdomain', - 'dgettext', 'dngettext', 'gettext', 'ngettext', + 'bind_textdomain_codeset', + 'dgettext', 'dngettext', 'gettext', 'lgettext', 'ldgettext', + 'ldngettext', 'lngettext', 'ngettext', ] _default_localedir = os.path.join(sys.prefix, 'share', 'locale') - -def test(condition, true, false): - """ - Implements the C expression: - - condition ? true : false - - Required to correctly interpret plural forms. - """ - if condition: - return true +# Expression parsing for plural form selection. +# +# The gettext library supports a small subset of C syntax. The only +# incompatible difference is that integer literals starting with zero are +# decimal. +# +# https://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms +# http://git.savannah.gnu.org/cgit/gettext.git/tree/gettext-runtime/intl/plural.y + +_token_pattern = re.compile(r""" + (?P[ \t]+) | # spaces and horizontal tabs + (?P[0-9]+\b) | # decimal integer + (?Pn\b) | # only n is allowed + (?P[()]) | + (?P[-*/%+?:]|[>, + # <=, >=, ==, !=, &&, ||, + # ? : + # unary and bitwise ops + # not allowed + (?P\w+|.) # invalid token + """, re.VERBOSE|re.DOTALL) + +def _tokenize(plural): + for mo in re.finditer(_token_pattern, plural): + kind = mo.lastgroup + if kind == 'WHITESPACES': + continue + value = mo.group(kind) + if kind == 'INVALID': + raise ValueError('invalid token in plural form: %s' % value) + yield value + yield '' + +def _error(value): + if value: + return ValueError('unexpected token in plural form: %s' % value) else: - return false - + return ValueError('unexpected end of plural form') + +_binary_ops = ( + ('||',), + ('&&',), + ('==', '!='), + ('<', '>', '<=', '>='), + ('+', '-'), + ('*', '/', '%'), +) +_binary_ops = {op: i for i, ops in enumerate(_binary_ops, 1) for op in ops} +_c2py_ops = {'||': 'or', '&&': 'and', '/': '//'} + +def _parse(tokens, priority=-1): + result = '' + nexttok = next(tokens) + while nexttok == '!': + result += 'not ' + nexttok = next(tokens) + + if nexttok == '(': + sub, nexttok = _parse(tokens) + result = '%s(%s)' % (result, sub) + if nexttok != ')': + raise ValueError('unbalanced parenthesis in plural form') + elif nexttok == 'n': + result = '%s%s' % (result, nexttok) + else: + try: + value = int(nexttok, 10) + except ValueError: + raise _error(nexttok) + result = '%s%d' % (result, value) + nexttok = next(tokens) + + j = 100 + while nexttok in _binary_ops: + i = _binary_ops[nexttok] + if i < priority: + break + # Break chained comparisons + if i in (3, 4) and j in (3, 4): # '==', '!=', '<', '>', '<=', '>=' + result = '(%s)' % result + # Replace some C operators by their Python equivalents + op = _c2py_ops.get(nexttok, nexttok) + right, nexttok = _parse(tokens, i + 1) + result = '%s %s %s' % (result, op, right) + j = i + if j == priority == 4: # '<', '>', '<=', '>=' + result = '(%s)' % result + + if nexttok == '?' and priority <= 0: + if_true, nexttok = _parse(tokens, 0) + if nexttok != ':': + raise _error(nexttok) + if_false, nexttok = _parse(tokens) + result = '%s if %s else %s' % (if_true, result, if_false) + if priority == 0: + result = '(%s)' % result + + return result, nexttok + +def _as_int(n): + try: + i = round(n) + except TypeError: + raise TypeError('Plural value must be an integer, got %s' % + (n.__class__.__name__,)) + return n def c2py(plural): """Gets a C expression as used in PO files for plural forms and returns a - Python lambda function that implements an equivalent expression. + Python function that implements an equivalent expression. """ - # Security check, allow only the "n" identifier - try: - from cStringIO import StringIO - except ImportError: - from StringIO import StringIO - import token, tokenize - tokens = tokenize.generate_tokens(StringIO(plural).readline) - try: - danger = [x for x in tokens if x[0] == token.NAME and x[1] != 'n'] - except tokenize.TokenError: - raise ValueError, \ - 'plural forms expression error, maybe unbalanced parenthesis' - else: - if danger: - raise ValueError, 'plural forms expression could be dangerous' - - # Replace some C operators by their Python equivalents - plural = plural.replace('&&', ' and ') - plural = plural.replace('||', ' or ') - - expr = re.compile(r'\!([^=])') - plural = expr.sub(' not \\1', plural) - - # Regular expression and replacement function used to transform - # "a?b:c" to "test(a,b,c)". - expr = re.compile(r'(.*?)\?(.*?):(.*)') - def repl(x): - return "test(%s, %s, %s)" % (x.group(1), x.group(2), - expr.sub(repl, x.group(3))) - - # Code to transform the plural expression, taking care of parentheses - stack = [''] - for c in plural: - if c == '(': - stack.append('') - elif c == ')': - if len(stack) == 1: - # Actually, we never reach this code, because unbalanced - # parentheses get caught in the security check at the - # beginning. - raise ValueError, 'unbalanced parenthesis in plural form' - s = expr.sub(repl, stack.pop()) - stack[-1] += '(%s)' % s - else: - stack[-1] += c - plural = expr.sub(repl, stack.pop()) - - return eval('lambda n: int(%s)' % plural) + if len(plural) > 1000: + raise ValueError('plural form expression is too long') + try: + result, nexttok = _parse(_tokenize(plural)) + if nexttok: + raise _error(nexttok) + + depth = 0 + for c in result: + if c == '(': + depth += 1 + if depth > 20: + # Python compiler limit is about 90. + # The most complex example has 2. + raise ValueError('plural form expression is too complex') + elif c == ')': + depth -= 1 + + ns = {'_as_int': _as_int} + exec('''if 1: + def func(n): + if not isinstance(n, int): + n = _as_int(n) + return int(%s) + ''' % result, ns) + return ns['func'] + except RuntimeError: + # Recursion error can be raised in _parse() or exec(). + raise ValueError('plural form expression is too complex') def _expand_lang(locale): @@ -294,11 +369,12 @@ def _parse(self, fp): # See if we're looking at GNU .mo conventions for metadata if mlen == 0: # Catalog description - lastk = k = None + lastk = None for item in tmsg.splitlines(): item = item.strip() if not item: continue + k = v = None if ':' in item: k, v = item.split(':', 1) k = k.strip().lower() diff --git a/PythonLib/full/glob.py b/PythonLib/full/glob.py index f34534b5..b3d9ec1b 100644 --- a/PythonLib/full/glob.py +++ b/PythonLib/full/glob.py @@ -35,11 +35,16 @@ def iglob(pathname): patterns. """ + dirname, basename = os.path.split(pathname) if not has_magic(pathname): - if os.path.lexists(pathname): - yield pathname + if basename: + if os.path.lexists(pathname): + yield pathname + else: + # Patterns ending with a slash should match only directories + if os.path.isdir(dirname): + yield pathname return - dirname, basename = os.path.split(pathname) if not dirname: for name in glob1(os.curdir, basename): yield name diff --git a/PythonLib/full/gzip.py b/PythonLib/full/gzip.py index a613bae8..07c6db49 100644 --- a/PythonLib/full/gzip.py +++ b/PythonLib/full/gzip.py @@ -55,7 +55,7 @@ def __init__(self, filename=None, mode=None, a file object. When fileobj is not None, the filename argument is only used to be - included in the gzip file header, which may includes the original + included in the gzip file header, which may include the original filename of the uncompressed file. It defaults to the filename of fileobj, if discernible; otherwise, it defaults to the empty string, and in this case the original filename is not included in the header. @@ -164,9 +164,16 @@ def _init_write(self, filename): def _write_gzip_header(self): self.fileobj.write('\037\213') # magic header self.fileobj.write('\010') # compression method - fname = os.path.basename(self.name) - if fname.endswith(".gz"): - fname = fname[:-3] + try: + # RFC 1952 requires the FNAME field to be Latin-1. Do not + # include filenames that cannot be represented that way. + fname = os.path.basename(self.name) + if not isinstance(fname, str): + fname = fname.encode('latin-1') + if fname.endswith('.gz'): + fname = fname[:-3] + except UnicodeEncodeError: + fname = '' flags = 0 if fname: flags = FNAME @@ -231,9 +238,9 @@ def write(self,data): data = data.tobytes() if len(data) > 0: - self.size = self.size + len(data) + self.fileobj.write(self.compress.compress(data)) + self.size += len(data) self.crc = zlib.crc32(data, self.crc) & 0xffffffffL - self.fileobj.write( self.compress.compress(data) ) self.offset += len(data) return len(data) @@ -362,19 +369,21 @@ def closed(self): return self.fileobj is None def close(self): - if self.fileobj is None: + fileobj = self.fileobj + if fileobj is None: return - if self.mode == WRITE: - self.fileobj.write(self.compress.flush()) - write32u(self.fileobj, self.crc) - # self.size may exceed 2GB, or even 4GB - write32u(self.fileobj, self.size & 0xffffffffL) - self.fileobj = None - elif self.mode == READ: - self.fileobj = None - if self.myfileobj: - self.myfileobj.close() - self.myfileobj = None + self.fileobj = None + try: + if self.mode == WRITE: + fileobj.write(self.compress.flush()) + write32u(fileobj, self.crc) + # self.size may exceed 2GB, or even 4GB + write32u(fileobj, self.size & 0xffffffffL) + finally: + myfileobj = self.myfileobj + if myfileobj: + self.myfileobj = None + myfileobj.close() def flush(self,zlib_mode=zlib.Z_SYNC_FLUSH): self._check_closed() diff --git a/PythonLib/full/hashlib.py b/PythonLib/full/hashlib.py index d20e1f95..bbd06b99 100644 --- a/PythonLib/full/hashlib.py +++ b/PythonLib/full/hashlib.py @@ -15,8 +15,9 @@ md5(), sha1(), sha224(), sha256(), sha384(), and sha512() -More algorithms may be available on your platform but the above are -guaranteed to exist. +More algorithms may be available on your platform but the above are guaranteed +to exist. See the algorithms_guaranteed and algorithms_available attributes +to find out what algorithm names can be passed to new(). NOTE: If you want the adler32 or crc32 hash functions they are available in the zlib module. @@ -58,9 +59,14 @@ # always available algorithm is added. __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512') +algorithms_guaranteed = set(__always_supported) +algorithms_available = set(__always_supported) + algorithms = __always_supported -__all__ = __always_supported + ('new', 'algorithms') +__all__ = __always_supported + ('new', 'algorithms_guaranteed', + 'algorithms_available', 'algorithms', + 'pbkdf2_hmac') def __get_builtin_constructor(name): @@ -128,6 +134,8 @@ def __hash_new(name, string=''): import _hashlib new = __hash_new __get_hash = __get_openssl_constructor + algorithms_available = algorithms_available.union( + _hashlib.openssl_md_meth_names) except ImportError: new = __py_new __get_hash = __get_builtin_constructor @@ -141,6 +149,73 @@ def __hash_new(name, string=''): import logging logging.exception('code for hash %s was not found.', __func_name) + +try: + # OpenSSL's PKCS5_PBKDF2_HMAC requires OpenSSL 1.0+ with HMAC and SHA + from _hashlib import pbkdf2_hmac +except ImportError: + import binascii + import struct + + _trans_5C = b"".join(chr(x ^ 0x5C) for x in range(256)) + _trans_36 = b"".join(chr(x ^ 0x36) for x in range(256)) + + def pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None): + """Password based key derivation function 2 (PKCS #5 v2.0) + + This Python implementations based on the hmac module about as fast + as OpenSSL's PKCS5_PBKDF2_HMAC for short passwords and much faster + for long passwords. + """ + if not isinstance(hash_name, str): + raise TypeError(hash_name) + + if not isinstance(password, (bytes, bytearray)): + password = bytes(buffer(password)) + if not isinstance(salt, (bytes, bytearray)): + salt = bytes(buffer(salt)) + + # Fast inline HMAC implementation + inner = new(hash_name) + outer = new(hash_name) + blocksize = getattr(inner, 'block_size', 64) + if len(password) > blocksize: + password = new(hash_name, password).digest() + password = password + b'\x00' * (blocksize - len(password)) + inner.update(password.translate(_trans_36)) + outer.update(password.translate(_trans_5C)) + + def prf(msg, inner=inner, outer=outer): + # PBKDF2_HMAC uses the password as key. We can re-use the same + # digest objects and just update copies to skip initialization. + icpy = inner.copy() + ocpy = outer.copy() + icpy.update(msg) + ocpy.update(icpy.digest()) + return ocpy.digest() + + if iterations < 1: + raise ValueError(iterations) + if dklen is None: + dklen = outer.digest_size + if dklen < 1: + raise ValueError(dklen) + + hex_format_string = "%%0%ix" % (new(hash_name).digest_size * 2) + + dkey = b'' + loop = 1 + while len(dkey) < dklen: + prev = prf(salt + struct.pack(b'>I', loop)) + rkey = int(binascii.hexlify(prev), 16) + for i in xrange(iterations - 1): + prev = prf(prev) + rkey ^= int(binascii.hexlify(prev), 16) + loop += 1 + dkey += binascii.unhexlify(hex_format_string % rkey) + + return dkey[:dklen] + # Cleanup locals() del __always_supported, __func_name, __get_hash del __py_new, __hash_new, __get_openssl_constructor diff --git a/PythonLib/full/heapq.py b/PythonLib/full/heapq.py index 4b2c0c44..f8269e15 100644 --- a/PythonLib/full/heapq.py +++ b/PythonLib/full/heapq.py @@ -56,7 +56,7 @@ In the tree above, each cell `k' is topping `2*k+1' and `2*k+2'. In -an usual binary tournament we see in sports, each cell is the winner +a usual binary tournament we see in sports, each cell is the winner over the two cells it tops, and we can trace the winner down the tree to see all opponents s/he had. However, in many computer applications of such tournaments, we do not need to trace the history of a winner. diff --git a/PythonLib/full/hmac.py b/PythonLib/full/hmac.py index 53881063..9cd1a9fd 100644 --- a/PythonLib/full/hmac.py +++ b/PythonLib/full/hmac.py @@ -5,6 +5,9 @@ import warnings as _warnings +from operator import _compare_digest as compare_digest + + trans_5C = "".join ([chr (x ^ 0x5C) for x in xrange(256)]) trans_36 = "".join ([chr (x ^ 0x36) for x in xrange(256)]) diff --git a/PythonLib/full/hotshot/__init__.py b/PythonLib/full/hotshot/__init__.py index 1556ab3f..3692f930 100644 --- a/PythonLib/full/hotshot/__init__.py +++ b/PythonLib/full/hotshot/__init__.py @@ -72,7 +72,7 @@ def runcall(self, func, *args, **kw): Additional positional and keyword arguments may be passed along; the result of the call is returned, and exceptions are - allowed to propogate cleanly, while ensuring that profiling is + allowed to propagate cleanly, while ensuring that profiling is disabled on the way out. """ return self._prof.runcall(func, args, kw) diff --git a/PythonLib/full/htmlentitydefs.py b/PythonLib/full/htmlentitydefs.py index 3dd14a79..1f40d09d 100644 --- a/PythonLib/full/htmlentitydefs.py +++ b/PythonLib/full/htmlentitydefs.py @@ -1,6 +1,6 @@ """HTML character entity references.""" -# maps the HTML entity name to the Unicode codepoint +# maps the HTML entity name to the Unicode code point name2codepoint = { 'AElig': 0x00c6, # latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1 'Aacute': 0x00c1, # latin capital letter A with acute, U+00C1 ISOlat1 @@ -256,7 +256,7 @@ 'zwnj': 0x200c, # zero width non-joiner, U+200C NEW RFC 2070 } -# maps the Unicode codepoint to the HTML entity name +# maps the Unicode code point to the HTML entity name codepoint2name = {} # maps the HTML entity name to the character diff --git a/PythonLib/full/httplib.py b/PythonLib/full/httplib.py index 5c919d2b..f3bb22c2 100644 --- a/PythonLib/full/httplib.py +++ b/PythonLib/full/httplib.py @@ -68,6 +68,7 @@ from array import array import os +import re import socket from sys import py3kwarning from urlparse import urlsplit @@ -215,6 +216,42 @@ # maximal line length when calling readline(). _MAXLINE = 65536 +# maximum amount of headers accepted +_MAXHEADERS = 100 + +# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2) +# +# VCHAR = %x21-7E +# obs-text = %x80-FF +# header-field = field-name ":" OWS field-value OWS +# field-name = token +# field-value = *( field-content / obs-fold ) +# field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] +# field-vchar = VCHAR / obs-text +# +# obs-fold = CRLF 1*( SP / HTAB ) +# ; obsolete line folding +# ; see Section 3.2.4 + +# token = 1*tchar +# +# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" +# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" +# / DIGIT / ALPHA +# ; any VCHAR, except delimiters +# +# VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1 + +# the patterns for both name and value are more lenient than RFC +# definitions to allow for backwards compatibility +_is_legal_header_name = re.compile(r'\A[^:\s][^:\r\n]*\Z').match +_is_illegal_header_value = re.compile(r'\n(?![ \t])|\r(?![ \t\n])').search + +# We always set the Content-Length header for these methods because some +# servers will otherwise respond with a 411 +_METHODS_EXPECTING_BODY = {'PATCH', 'POST', 'PUT'} + + class HTTPMessage(mimetools.Message): def addheader(self, key, value): @@ -236,9 +273,8 @@ def readheaders(self): Read header lines up to the entirely blank line that terminates them. The (normally blank) line that ends the headers is skipped, but not - included in the returned list. If a non-header line ends the headers, - (which is an error), an attempt is made to backspace over it; it is - never included in the returned list. + included in the returned list. If an invalid line is found in the + header section, it is skipped, and further lines are processed. The variable self.status is set to the empty string if all went well, otherwise it is an error message. The variable self.headers is a @@ -265,17 +301,17 @@ def readheaders(self): self.status = '' headerseen = "" firstline = 1 - startofline = unread = tell = None - if hasattr(self.fp, 'unread'): - unread = self.fp.unread - elif self.seekable: + tell = None + if not hasattr(self.fp, 'unread') and self.seekable: tell = self.fp.tell while True: + if len(hlist) > _MAXHEADERS: + raise HTTPException("got more than %d headers" % _MAXHEADERS) if tell: try: - startofline = tell() + tell() except IOError: - startofline = tell = None + tell = None self.seekable = 0 line = self.fp.readline(_MAXLINE + 1) if len(line) > _MAXLINE: @@ -306,21 +342,14 @@ def readheaders(self): # It's a legal header line, save it. hlist.append(line) self.addheader(headerseen, line[len(headerseen)+1:].strip()) - continue + elif headerseen is not None: + # An empty header name. These aren't allowed in HTTP, but it's + # probably a benign mistake. Don't add the header, just keep + # going. + pass else: - # It's not a header line; throw it back and stop here. - if not self.dict: - self.status = 'No headers' - else: - self.status = 'Non-header line where header expected' - # Try to undo the read. - if unread: - unread(line) - elif tell: - self.fp.seek(startofline) - else: - self.status = self.status + '; bad seek' - break + # It's not a header line; skip it and try the next line. + self.status = 'Non-header line where header expected' class HTTPResponse: @@ -516,9 +545,10 @@ def _check_close(self): return True def close(self): - if self.fp: - self.fp.close() + fp = self.fp + if fp: self.fp = None + fp.close() def isclosed(self): # NOTE: it is possible that we will not ever call self.close(). This @@ -565,7 +595,7 @@ def read(self, amt=None): # connection, and the user is reading more bytes than will be provided # (for example, reading in 1k chunks) s = self.fp.read(amt) - if not s: + if not s and amt: # Ideally, we would raise IncompleteRead if the content-length # wasn't satisfied, but it might break compatibility. self.close() @@ -700,25 +730,40 @@ def __init__(self, host, port=None, strict=None, self._tunnel_host = None self._tunnel_port = None self._tunnel_headers = {} - - self._set_hostport(host, port) if strict is not None: self.strict = strict + (self.host, self.port) = self._get_hostport(host, port) + + # This is stored as an instance variable to allow unittests + # to replace with a suitable mock + self._create_connection = socket.create_connection + def set_tunnel(self, host, port=None, headers=None): - """ Sets up the host and the port for the HTTP CONNECT Tunnelling. + """ Set up host and port for HTTP CONNECT tunnelling. + + In a connection that uses HTTP Connect tunneling, the host passed to the + constructor is used as proxy server that relays all communication to the + endpoint passed to set_tunnel. This is done by sending a HTTP CONNECT + request to the proxy server when the connection is established. + + This method must be called before the HTTP connection has been + established. The headers argument should be a mapping of extra HTTP headers to send with the CONNECT request. """ - self._tunnel_host = host - self._tunnel_port = port + # Verify if this is required. + if self.sock: + raise RuntimeError("Can't setup tunnel for established connection.") + + self._tunnel_host, self._tunnel_port = self._get_hostport(host, port) if headers: self._tunnel_headers = headers else: self._tunnel_headers.clear() - def _set_hostport(self, host, port): + def _get_hostport(self, host, port): if port is None: i = host.rfind(':') j = host.rfind(']') # ipv6 addresses have [...] @@ -735,15 +780,14 @@ def _set_hostport(self, host, port): port = self.default_port if host and host[0] == '[' and host[-1] == ']': host = host[1:-1] - self.host = host - self.port = port + return (host, port) def set_debuglevel(self, level): self.debuglevel = level def _tunnel(self): - self._set_hostport(self._tunnel_host, self._tunnel_port) - self.send("CONNECT %s:%d HTTP/1.0\r\n" % (self.host, self.port)) + self.send("CONNECT %s:%d HTTP/1.0\r\n" % (self._tunnel_host, + self._tunnel_port)) for header, value in self._tunnel_headers.iteritems(): self.send("%s: %s\r\n" % (header, value)) self.send("\r\n") @@ -751,6 +795,11 @@ def _tunnel(self): method = self._method) (version, code, message) = response._read_status() + if version == "HTTP/0.9": + # HTTP/0.9 doesn't support the CONNECT verb, so if httplib has + # concluded HTTP/0.9 is being used something has gone wrong. + self.close() + raise socket.error("Invalid response from tunnel request") if code != 200: self.close() raise socket.error("Tunnel connection failed: %d %s" % (code, @@ -768,21 +817,25 @@ def _tunnel(self): def connect(self): """Connect to the host and port specified in __init__.""" - self.sock = socket.create_connection((self.host,self.port), - self.timeout, self.source_address) + self.sock = self._create_connection((self.host,self.port), + self.timeout, self.source_address) if self._tunnel_host: self._tunnel() def close(self): """Close the connection to the HTTP server.""" - if self.sock: - self.sock.close() # close it manually... there may be other refs - self.sock = None - if self.__response: - self.__response.close() - self.__response = None self.__state = _CS_IDLE + try: + sock = self.sock + if sock: + self.sock = None + sock.close() # close it manually... there may be other refs + finally: + response = self.__response + if response: + self.__response = None + response.close() def send(self, data): """Send `data' to the server.""" @@ -907,17 +960,24 @@ def putrequest(self, method, url, skip_host=0, skip_accept_encoding=0): netloc_enc = netloc.encode("idna") self.putheader('Host', netloc_enc) else: + if self._tunnel_host: + host = self._tunnel_host + port = self._tunnel_port + else: + host = self.host + port = self.port + try: - host_enc = self.host.encode("ascii") + host_enc = host.encode("ascii") except UnicodeEncodeError: - host_enc = self.host.encode("idna") + host_enc = host.encode("idna") # Wrap the IPv6 Host Header with [] (RFC 2732) if host_enc.find(':') >= 0: host_enc = "[" + host_enc + "]" - if self.port == self.default_port: + if port == self.default_port: self.putheader('Host', host_enc) else: - self.putheader('Host', "%s:%s" % (host_enc, self.port)) + self.putheader('Host', "%s:%s" % (host_enc, port)) # note: we are assuming that clients will not attempt to set these # headers since *this* library must deal with the @@ -950,7 +1010,16 @@ def putheader(self, header, *values): if self.__state != _CS_REQ_STARTED: raise CannotSendHeader() - hdr = '%s: %s' % (header, '\r\n\t'.join([str(v) for v in values])) + header = '%s' % header + if not _is_legal_header_name(header): + raise ValueError('Invalid header name %r' % (header,)) + + values = [str(v) for v in values] + for one_value in values: + if _is_illegal_header_value(one_value): + raise ValueError('Invalid header value %r' % (one_value,)) + + hdr = '%s: %s' % (header, '\r\n\t'.join(values)) self._output(hdr) def endheaders(self, message_body=None): @@ -972,19 +1041,25 @@ def request(self, method, url, body=None, headers={}): """Send a complete request to the server.""" self._send_request(method, url, body, headers) - def _set_content_length(self, body): - # Set the content-length based on the body. + def _set_content_length(self, body, method): + # Set the content-length based on the body. If the body is "empty", we + # set Content-Length: 0 for methods that expect a body (RFC 7230, + # Section 3.3.2). If the body is set for other methods, we set the + # header provided we can figure out what the length is. thelen = None - try: - thelen = str(len(body)) - except TypeError, te: - # If this is a file-like object, try to - # fstat its file descriptor + if body is None and method.upper() in _METHODS_EXPECTING_BODY: + thelen = '0' + elif body is not None: try: - thelen = str(os.fstat(body.fileno()).st_size) - except (AttributeError, OSError): - # Don't send a length if this failed - if self.debuglevel > 0: print "Cannot stat!!" + thelen = str(len(body)) + except (TypeError, AttributeError): + # If this is a file-like object, try to + # fstat its file descriptor + try: + thelen = str(os.fstat(body.fileno()).st_size) + except (AttributeError, OSError): + # Don't send a length if this failed + if self.debuglevel > 0: print "Cannot stat!!" if thelen is not None: self.putheader('Content-Length', thelen) @@ -1000,8 +1075,8 @@ def _send_request(self, method, url, body, headers): self.putrequest(method, url, **skips) - if body is not None and 'content-length' not in header_names: - self._set_content_length(body) + if 'content-length' not in header_names: + self._set_content_length(body, method) for hdr, value in headers.iteritems(): self.putheader(hdr, value) self.endheaders(body) @@ -1042,18 +1117,22 @@ def getresponse(self, buffering=False): kwds["buffering"] = True; response = self.response_class(*args, **kwds) - response.begin() - assert response.will_close != _UNKNOWN - self.__state = _CS_IDLE + try: + response.begin() + assert response.will_close != _UNKNOWN + self.__state = _CS_IDLE - if response.will_close: - # this effectively passes the connection to the response - self.close() - else: - # remember this, so we can tell when it is complete - self.__response = response + if response.will_close: + # this effectively passes the connection to the response + self.close() + else: + # remember this, so we can tell when it is complete + self.__response = response - return response + return response + except: + response.close() + raise class HTTP: @@ -1097,7 +1176,7 @@ def connect(self, host=None, port=None): "Accept arguments to set the host/port, since the superclass doesn't." if host is not None: - self._conn._set_hostport(host, port) + (self._conn.host, self._conn.port) = self._conn._get_hostport(host, port) self._conn.connect() def getfile(self): @@ -1159,21 +1238,29 @@ class HTTPSConnection(HTTPConnection): def __init__(self, host, port=None, key_file=None, cert_file=None, strict=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None): + source_address=None, context=None): HTTPConnection.__init__(self, host, port, strict, timeout, source_address) self.key_file = key_file self.cert_file = cert_file + if context is None: + context = ssl._create_default_https_context() + if key_file or cert_file: + context.load_cert_chain(cert_file, key_file) + self._context = context def connect(self): "Connect to a host on a given (SSL) port." - sock = socket.create_connection((self.host, self.port), - self.timeout, self.source_address) + HTTPConnection.connect(self) + if self._tunnel_host: - self.sock = sock - self._tunnel() - self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) + server_hostname = self._tunnel_host + else: + server_hostname = self.host + + self.sock = self._context.wrap_socket(self.sock, + server_hostname=server_hostname) __all__.append("HTTPSConnection") @@ -1188,14 +1275,15 @@ class HTTPS(HTTP): _connection_class = HTTPSConnection def __init__(self, host='', port=None, key_file=None, cert_file=None, - strict=None): + strict=None, context=None): # provide a default host, pass the X509 cert info # urf. compensate for bad input. if port == 0: port = None self._setup(self._connection_class(host, port, key_file, - cert_file, strict)) + cert_file, strict, + context=context)) # we never actually use these for anything, but we keep them # here for compatibility with post-1.5.2 CVS. diff --git a/PythonLib/full/imaplib.py b/PythonLib/full/imaplib.py index c576927a..220d6e1b 100644 --- a/PythonLib/full/imaplib.py +++ b/PythonLib/full/imaplib.py @@ -35,6 +35,16 @@ IMAP4_SSL_PORT = 993 AllowedVersions = ('IMAP4REV1', 'IMAP4') # Most recent first +# Maximal line length when calling readline(). This is to prevent +# reading arbitrary length lines. RFC 3501 and 2060 (IMAP 4rev1) +# don't specify a line length. RFC 2683 suggests limiting client +# command lines to 1000 octets and that servers should be prepared +# to accept command lines up to 8000 octets, so we used to use 10K here. +# In the modern world (eg: gmail) the response to, for example, a +# search command can be quite large, so we now use 1M. +_MAXLINE = 1000000 + + # Commands Commands = { @@ -237,7 +247,10 @@ def read(self, size): def readline(self): """Read line from remote.""" - return self.file.readline() + line = self.file.readline(_MAXLINE + 1) + if len(line) > _MAXLINE: + raise self.error("got more than %d bytes" % _MAXLINE) + return line def send(self, data): @@ -251,8 +264,10 @@ def shutdown(self): try: self.sock.shutdown(socket.SHUT_RDWR) except socket.error as e: - # The server might already have closed the connection - if e.errno != errno.ENOTCONN: + # The server might already have closed the connection. + # On Windows, this may result in WSAEINVAL (error 10022): + # An invalid operation was attempted. + if e.errno not in (errno.ENOTCONN, 10022): raise finally: self.sock.close() @@ -990,6 +1005,11 @@ def _get_tagged_response(self, tag): del self.tagged_commands[tag] return result + # If we've seen a BYE at this point, the socket will be + # closed, so report the BYE now. + + self._check_bye() + # Some have reported "unexpected response" exceptions. # Note that ignoring them here causes loops. # Instead, send me details of the unexpected response and @@ -1391,7 +1411,7 @@ def Time2Internaldate(date_time): be in the correct format. """ - if isinstance(date_time, (int, float)): + if isinstance(date_time, (int, long, float)): tt = time.localtime(date_time) elif isinstance(date_time, (tuple, time.struct_time)): tt = date_time diff --git a/PythonLib/full/imghdr.py b/PythonLib/full/imghdr.py index 1683024c..fc864c3a 100644 --- a/PythonLib/full/imghdr.py +++ b/PythonLib/full/imghdr.py @@ -7,18 +7,16 @@ #-------------------------# def what(file, h=None): - if h is None: - if isinstance(file, basestring): - f = open(file, 'rb') - h = f.read(32) - else: - location = file.tell() - h = file.read(32) - file.seek(location) - f = None - else: - f = None + f = None try: + if h is None: + if isinstance(file, basestring): + f = open(file, 'rb') + h = f.read(32) + else: + location = file.tell() + h = file.read(32) + file.seek(location) for tf in tests: res = tf(h, f) if res: diff --git a/PythonLib/full/inspect.py b/PythonLib/full/inspect.py index 93369439..0a6cfd79 100644 --- a/PythonLib/full/inspect.py +++ b/PythonLib/full/inspect.py @@ -155,9 +155,8 @@ def isfunction(object): def isgeneratorfunction(object): """Return true if the object is a user-defined generator function. - Generator function objects provides same attributes as functions. - - See help(isfunction) for attributes listing.""" + Generator function objects provide the same attributes as functions. + See help(isfunction) for a list of attributes.""" return bool((isfunction(object) or ismethod(object)) and object.func_code.co_flags & CO_GENERATOR) @@ -770,8 +769,11 @@ def getargs(co): if opname in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'): remain.append(value) count.append(value) - elif opname == 'STORE_FAST': - stack.append(names[value]) + elif opname in ('STORE_FAST', 'STORE_DEREF'): + if opname == 'STORE_FAST': + stack.append(names[value]) + else: + stack.append(co.co_cellvars[value]) # Special case for sublists of length 1: def foo((bar)) # doesn't generate the UNPACK_TUPLE bytecode, so if @@ -969,8 +971,13 @@ def is_assigned(arg): assign(varkw, named) elif named: unexpected = next(iter(named)) - if isinstance(unexpected, unicode): - unexpected = unexpected.encode(sys.getdefaultencoding(), 'replace') + try: + unicode + except NameError: + pass + else: + if isinstance(unexpected, unicode): + unexpected = unexpected.encode(sys.getdefaultencoding(), 'replace') raise TypeError("%s() got an unexpected keyword argument '%s'" % (f_name, unexpected)) unassigned = num_args - len([arg for arg in args if is_assigned(arg)]) diff --git a/PythonLib/full/io.py b/PythonLib/full/io.py index 22832766..53ee102b 100644 --- a/PythonLib/full/io.py +++ b/PythonLib/full/io.py @@ -19,7 +19,7 @@ Another IOBase subclass, TextIOBase, deals with the encoding and decoding of streams into text. TextIOWrapper, which extends it, is a buffered text interface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO -is a in-memory stream for text. +is an in-memory stream for text. Argument names are not part of the specification, and only the arguments of open() are intended to be used as keyword arguments. @@ -68,15 +68,16 @@ # version however. class IOBase(_io._IOBase): __metaclass__ = abc.ABCMeta + __doc__ = _io._IOBase.__doc__ class RawIOBase(_io._RawIOBase, IOBase): - pass + __doc__ = _io._RawIOBase.__doc__ class BufferedIOBase(_io._BufferedIOBase, IOBase): - pass + __doc__ = _io._BufferedIOBase.__doc__ class TextIOBase(_io._TextIOBase, IOBase): - pass + __doc__ = _io._TextIOBase.__doc__ RawIOBase.register(FileIO) diff --git a/PythonLib/full/json/__init__.py b/PythonLib/full/json/__init__.py index 0be85da0..ce623611 100644 --- a/PythonLib/full/json/__init__.py +++ b/PythonLib/full/json/__init__.py @@ -78,7 +78,7 @@ >>> def encode_complex(obj): ... if isinstance(obj, complex): ... return [obj.real, obj.imag] - ... raise TypeError(repr(o) + " is not JSON serializable") + ... raise TypeError(repr(obj) + " is not JSON serializable") ... >>> json.dumps(2 + 1j, default=encode_complex) '[2.0, 1.0]' @@ -132,7 +132,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, If ``ensure_ascii`` is true (the default), all non-ASCII characters in the output are escaped with ``\uXXXX`` sequences, and the result is a ``str`` instance consisting of ASCII characters only. If ``ensure_ascii`` is - ``False``, some chunks written to ``fp`` may be ``unicode`` instances. + false, some chunks written to ``fp`` may be ``unicode`` instances. This usually happens because the input contains unicode strings or the ``encoding`` parameter is used. Unless ``fp.write()`` explicitly understands ``unicode`` (as in ``codecs.getwriter``) this is likely to @@ -163,7 +163,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, ``default(obj)`` is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError. - If *sort_keys* is ``True`` (default: ``False``), then the output of + If *sort_keys* is true (default: ``False``), then the output of dictionaries will be sorted by key. To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the @@ -195,10 +195,11 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, encoding='utf-8', default=None, sort_keys=False, **kw): """Serialize ``obj`` to a JSON formatted ``str``. - If ``skipkeys`` is false then ``dict`` keys that are not basic types + If ``skipkeys`` is true then ``dict`` keys that are not basic types (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``) will be skipped instead of raising a ``TypeError``. + If ``ensure_ascii`` is false, all non-ASCII characters are not escaped, and the return value may be a ``unicode`` instance. See ``dump`` for details. @@ -227,7 +228,7 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, ``default(obj)`` is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError. - If *sort_keys* is ``True`` (default: ``False``), then the output of + If *sort_keys* is true (default: ``False``), then the output of dictionaries will be sorted by key. To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the @@ -324,7 +325,7 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, for JSON integers (e.g. float). ``parse_constant``, if specified, will be called with one of the - following strings: -Infinity, Infinity, NaN, null, true, false. + following strings: -Infinity, Infinity, NaN. This can be used to raise an exception if invalid JSON numbers are encountered. diff --git a/PythonLib/full/json/decoder.py b/PythonLib/full/json/decoder.py index dfcc6284..5141f879 100644 --- a/PythonLib/full/json/decoder.py +++ b/PythonLib/full/json/decoder.py @@ -15,10 +15,8 @@ FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL def _floatconstants(): - _BYTES = '7FF80000000000007FF0000000000000'.decode('hex') - if sys.byteorder != 'big': - _BYTES = _BYTES[:8][::-1] + _BYTES[8:][::-1] - nan, inf = struct.unpack('dd', _BYTES) + nan, = struct.unpack('>d', b'\x7f\xf8\x00\x00\x00\x00\x00\x00') + inf, = struct.unpack('>d', b'\x7f\xf0\x00\x00\x00\x00\x00\x00') return nan, inf, -inf NaN, PosInf, NegInf = _floatconstants() @@ -62,6 +60,16 @@ def errmsg(msg, doc, pos, end=None): DEFAULT_ENCODING = "utf-8" +def _decode_uXXXX(s, pos): + esc = s[pos + 1:pos + 5] + if len(esc) == 4 and esc[1] not in 'xX': + try: + return int(esc, 16) + except ValueError: + pass + msg = "Invalid \\uXXXX escape" + raise ValueError(errmsg(msg, s, pos)) + def py_scanstring(s, end, encoding=None, strict=True, _b=BACKSLASH, _m=STRINGCHUNK.match): """Scan the string s for a JSON string. End is the index of the @@ -116,25 +124,16 @@ def py_scanstring(s, end, encoding=None, strict=True, end += 1 else: # Unicode escape sequence - esc = s[end + 1:end + 5] - next_end = end + 5 - if len(esc) != 4: - msg = "Invalid \\uXXXX escape" - raise ValueError(errmsg(msg, s, end)) - uni = int(esc, 16) + uni = _decode_uXXXX(s, end) + end += 5 # Check for surrogate pair on UCS-4 systems - if 0xd800 <= uni <= 0xdbff and sys.maxunicode > 65535: - msg = "Invalid \\uXXXX\\uXXXX surrogate pair" - if not s[end + 5:end + 7] == '\\u': - raise ValueError(errmsg(msg, s, end)) - esc2 = s[end + 7:end + 11] - if len(esc2) != 4: - raise ValueError(errmsg(msg, s, end)) - uni2 = int(esc2, 16) - uni = 0x10000 + (((uni - 0xd800) << 10) | (uni2 - 0xdc00)) - next_end += 6 + if sys.maxunicode > 65535 and \ + 0xd800 <= uni <= 0xdbff and s[end:end + 2] == '\\u': + uni2 = _decode_uXXXX(s, end + 1) + if 0xdc00 <= uni2 <= 0xdfff: + uni = 0x10000 + (((uni - 0xd800) << 10) | (uni2 - 0xdc00)) + end += 6 char = unichr(uni) - end = next_end # Append the unescaped character _append(char) return u''.join(chunks), end diff --git a/PythonLib/full/json/encoder.py b/PythonLib/full/json/encoder.py index f5eeed75..97ffe8e8 100644 --- a/PythonLib/full/json/encoder.py +++ b/PythonLib/full/json/encoder.py @@ -28,7 +28,7 @@ #ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,)) INFINITY = float('inf') -FLOAT_REPR = repr +FLOAT_REPR = float.__repr__ def encode_basestring(s): """Return a JSON representation of a Python string diff --git a/PythonLib/full/json/tests/__init__.py b/PythonLib/full/json/tests/__init__.py deleted file mode 100644 index 90cb2b7a..00000000 --- a/PythonLib/full/json/tests/__init__.py +++ /dev/null @@ -1,73 +0,0 @@ -import os -import sys -import json -import doctest -import unittest - -from test import test_support - -# import json with and without accelerations -cjson = test_support.import_fresh_module('json', fresh=['_json']) -pyjson = test_support.import_fresh_module('json', blocked=['_json']) - -# create two base classes that will be used by the other tests -class PyTest(unittest.TestCase): - json = pyjson - loads = staticmethod(pyjson.loads) - dumps = staticmethod(pyjson.dumps) - -@unittest.skipUnless(cjson, 'requires _json') -class CTest(unittest.TestCase): - if cjson is not None: - json = cjson - loads = staticmethod(cjson.loads) - dumps = staticmethod(cjson.dumps) - -# test PyTest and CTest checking if the functions come from the right module -class TestPyTest(PyTest): - def test_pyjson(self): - self.assertEqual(self.json.scanner.make_scanner.__module__, - 'json.scanner') - self.assertEqual(self.json.decoder.scanstring.__module__, - 'json.decoder') - self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__, - 'json.encoder') - -class TestCTest(CTest): - def test_cjson(self): - self.assertEqual(self.json.scanner.make_scanner.__module__, '_json') - self.assertEqual(self.json.decoder.scanstring.__module__, '_json') - self.assertEqual(self.json.encoder.c_make_encoder.__module__, '_json') - self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__, - '_json') - - -here = os.path.dirname(__file__) - -def test_suite(): - suite = additional_tests() - loader = unittest.TestLoader() - for fn in os.listdir(here): - if fn.startswith("test") and fn.endswith(".py"): - modname = "json.tests." + fn[:-3] - __import__(modname) - module = sys.modules[modname] - suite.addTests(loader.loadTestsFromModule(module)) - return suite - -def additional_tests(): - suite = unittest.TestSuite() - for mod in (json, json.encoder, json.decoder): - suite.addTest(doctest.DocTestSuite(mod)) - suite.addTest(TestPyTest('test_pyjson')) - suite.addTest(TestCTest('test_cjson')) - return suite - -def main(): - suite = test_suite() - runner = unittest.TextTestRunner() - runner.run(suite) - -if __name__ == '__main__': - sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) - main() diff --git a/PythonLib/full/json/tests/test_check_circular.py b/PythonLib/full/json/tests/test_check_circular.py deleted file mode 100644 index 3ad3d241..00000000 --- a/PythonLib/full/json/tests/test_check_circular.py +++ /dev/null @@ -1,34 +0,0 @@ -from json.tests import PyTest, CTest - - -def default_iterable(obj): - return list(obj) - -class TestCheckCircular(object): - def test_circular_dict(self): - dct = {} - dct['a'] = dct - self.assertRaises(ValueError, self.dumps, dct) - - def test_circular_list(self): - lst = [] - lst.append(lst) - self.assertRaises(ValueError, self.dumps, lst) - - def test_circular_composite(self): - dct2 = {} - dct2['a'] = [] - dct2['a'].append(dct2) - self.assertRaises(ValueError, self.dumps, dct2) - - def test_circular_default(self): - self.dumps([set()], default=default_iterable) - self.assertRaises(TypeError, self.dumps, [set()]) - - def test_circular_off_default(self): - self.dumps([set()], default=default_iterable, check_circular=False) - self.assertRaises(TypeError, self.dumps, [set()], check_circular=False) - - -class TestPyCheckCircular(TestCheckCircular, PyTest): pass -class TestCCheckCircular(TestCheckCircular, CTest): pass diff --git a/PythonLib/full/json/tests/test_decode.py b/PythonLib/full/json/tests/test_decode.py deleted file mode 100644 index ffd1aa4b..00000000 --- a/PythonLib/full/json/tests/test_decode.py +++ /dev/null @@ -1,64 +0,0 @@ -import decimal -from StringIO import StringIO -from collections import OrderedDict -from json.tests import PyTest, CTest - - -class TestDecode(object): - def test_decimal(self): - rval = self.loads('1.1', parse_float=decimal.Decimal) - self.assertTrue(isinstance(rval, decimal.Decimal)) - self.assertEqual(rval, decimal.Decimal('1.1')) - - def test_float(self): - rval = self.loads('1', parse_int=float) - self.assertTrue(isinstance(rval, float)) - self.assertEqual(rval, 1.0) - - def test_decoder_optimizations(self): - # Several optimizations were made that skip over calls to - # the whitespace regex, so this test is designed to try and - # exercise the uncommon cases. The array cases are already covered. - rval = self.loads('{ "key" : "value" , "k":"v" }') - self.assertEqual(rval, {"key":"value", "k":"v"}) - - def test_empty_objects(self): - self.assertEqual(self.loads('{}'), {}) - self.assertEqual(self.loads('[]'), []) - self.assertEqual(self.loads('""'), u"") - self.assertIsInstance(self.loads('""'), unicode) - - def test_object_pairs_hook(self): - s = '{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}' - p = [("xkd", 1), ("kcw", 2), ("art", 3), ("hxm", 4), - ("qrt", 5), ("pad", 6), ("hoy", 7)] - self.assertEqual(self.loads(s), eval(s)) - self.assertEqual(self.loads(s, object_pairs_hook=lambda x: x), p) - self.assertEqual(self.json.load(StringIO(s), - object_pairs_hook=lambda x: x), p) - od = self.loads(s, object_pairs_hook=OrderedDict) - self.assertEqual(od, OrderedDict(p)) - self.assertEqual(type(od), OrderedDict) - # the object_pairs_hook takes priority over the object_hook - self.assertEqual(self.loads(s, object_pairs_hook=OrderedDict, - object_hook=lambda x: None), - OrderedDict(p)) - # check that empty objects literals work (see #17368) - self.assertEqual(self.loads('{}', object_pairs_hook=OrderedDict), - OrderedDict()) - self.assertEqual(self.loads('{"empty": {}}', - object_pairs_hook=OrderedDict), - OrderedDict([('empty', OrderedDict())])) - - def test_extra_data(self): - s = '[1, 2, 3]5' - msg = 'Extra data' - self.assertRaisesRegexp(ValueError, msg, self.loads, s) - - def test_invalid_escape(self): - s = '["abc\\y"]' - msg = 'escape' - self.assertRaisesRegexp(ValueError, msg, self.loads, s) - -class TestPyDecode(TestDecode, PyTest): pass -class TestCDecode(TestDecode, CTest): pass diff --git a/PythonLib/full/json/tests/test_default.py b/PythonLib/full/json/tests/test_default.py deleted file mode 100644 index c2a07f60..00000000 --- a/PythonLib/full/json/tests/test_default.py +++ /dev/null @@ -1,12 +0,0 @@ -from json.tests import PyTest, CTest - - -class TestDefault(object): - def test_default(self): - self.assertEqual( - self.dumps(type, default=repr), - self.dumps(repr(type))) - - -class TestPyDefault(TestDefault, PyTest): pass -class TestCDefault(TestDefault, CTest): pass diff --git a/PythonLib/full/json/tests/test_dump.py b/PythonLib/full/json/tests/test_dump.py deleted file mode 100644 index cd92569d..00000000 --- a/PythonLib/full/json/tests/test_dump.py +++ /dev/null @@ -1,32 +0,0 @@ -from cStringIO import StringIO -from json.tests import PyTest, CTest - - -class TestDump(object): - def test_dump(self): - sio = StringIO() - self.json.dump({}, sio) - self.assertEqual(sio.getvalue(), '{}') - - def test_dumps(self): - self.assertEqual(self.dumps({}), '{}') - - def test_encode_truefalse(self): - self.assertEqual(self.dumps( - {True: False, False: True}, sort_keys=True), - '{"false": true, "true": false}') - self.assertEqual(self.dumps( - {2: 3.0, 4.0: 5L, False: 1, 6L: True}, sort_keys=True), - '{"false": 1, "2": 3.0, "4.0": 5, "6": true}') - - # Issue 16228: Crash on encoding resized list - def test_encode_mutated(self): - a = [object()] * 10 - def crasher(obj): - del a[-1] - self.assertEqual(self.dumps(a, default=crasher), - '[null, null, null, null, null]') - - -class TestPyDump(TestDump, PyTest): pass -class TestCDump(TestDump, CTest): pass diff --git a/PythonLib/full/json/tests/test_encode_basestring_ascii.py b/PythonLib/full/json/tests/test_encode_basestring_ascii.py deleted file mode 100644 index 9f9d5a5d..00000000 --- a/PythonLib/full/json/tests/test_encode_basestring_ascii.py +++ /dev/null @@ -1,41 +0,0 @@ -from collections import OrderedDict -from json.tests import PyTest, CTest - - -CASES = [ - (u'/\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\x08\x0c\n\r\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?', '"/\\\\\\"\\ucafe\\ubabe\\uab98\\ufcde\\ubcda\\uef4a\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"'), - (u'\u0123\u4567\u89ab\ucdef\uabcd\uef4a', '"\\u0123\\u4567\\u89ab\\ucdef\\uabcd\\uef4a"'), - (u'controls', '"controls"'), - (u'\x08\x0c\n\r\t', '"\\b\\f\\n\\r\\t"'), - (u'{"object with 1 member":["array with 1 element"]}', '"{\\"object with 1 member\\":[\\"array with 1 element\\"]}"'), - (u' s p a c e d ', '" s p a c e d "'), - (u'\U0001d120', '"\\ud834\\udd20"'), - (u'\u03b1\u03a9', '"\\u03b1\\u03a9"'), - ('\xce\xb1\xce\xa9', '"\\u03b1\\u03a9"'), - (u'\u03b1\u03a9', '"\\u03b1\\u03a9"'), - ('\xce\xb1\xce\xa9', '"\\u03b1\\u03a9"'), - (u'\u03b1\u03a9', '"\\u03b1\\u03a9"'), - (u'\u03b1\u03a9', '"\\u03b1\\u03a9"'), - (u"`1~!@#$%^&*()_+-={':[,]}|;.?", '"`1~!@#$%^&*()_+-={\':[,]}|;.?"'), - (u'\x08\x0c\n\r\t', '"\\b\\f\\n\\r\\t"'), - (u'\u0123\u4567\u89ab\ucdef\uabcd\uef4a', '"\\u0123\\u4567\\u89ab\\ucdef\\uabcd\\uef4a"'), -] - -class TestEncodeBasestringAscii(object): - def test_encode_basestring_ascii(self): - fname = self.json.encoder.encode_basestring_ascii.__name__ - for input_string, expect in CASES: - result = self.json.encoder.encode_basestring_ascii(input_string) - self.assertEqual(result, expect, - '{0!r} != {1!r} for {2}({3!r})'.format( - result, expect, fname, input_string)) - - def test_ordered_dict(self): - # See issue 6105 - items = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)] - s = self.dumps(OrderedDict(items)) - self.assertEqual(s, '{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}') - - -class TestPyEncodeBasestringAscii(TestEncodeBasestringAscii, PyTest): pass -class TestCEncodeBasestringAscii(TestEncodeBasestringAscii, CTest): pass diff --git a/PythonLib/full/json/tests/test_fail.py b/PythonLib/full/json/tests/test_fail.py deleted file mode 100644 index e31b3792..00000000 --- a/PythonLib/full/json/tests/test_fail.py +++ /dev/null @@ -1,105 +0,0 @@ -from json.tests import PyTest, CTest - -# 2007-10-05 -JSONDOCS = [ - # http://json.org/JSON_checker/test/fail1.json - '"A JSON payload should be an object or array, not a string."', - # http://json.org/JSON_checker/test/fail2.json - '["Unclosed array"', - # http://json.org/JSON_checker/test/fail3.json - '{unquoted_key: "keys must be quoted"}', - # http://json.org/JSON_checker/test/fail4.json - '["extra comma",]', - # http://json.org/JSON_checker/test/fail5.json - '["double extra comma",,]', - # http://json.org/JSON_checker/test/fail6.json - '[ , "<-- missing value"]', - # http://json.org/JSON_checker/test/fail7.json - '["Comma after the close"],', - # http://json.org/JSON_checker/test/fail8.json - '["Extra close"]]', - # http://json.org/JSON_checker/test/fail9.json - '{"Extra comma": true,}', - # http://json.org/JSON_checker/test/fail10.json - '{"Extra value after close": true} "misplaced quoted value"', - # http://json.org/JSON_checker/test/fail11.json - '{"Illegal expression": 1 + 2}', - # http://json.org/JSON_checker/test/fail12.json - '{"Illegal invocation": alert()}', - # http://json.org/JSON_checker/test/fail13.json - '{"Numbers cannot have leading zeroes": 013}', - # http://json.org/JSON_checker/test/fail14.json - '{"Numbers cannot be hex": 0x14}', - # http://json.org/JSON_checker/test/fail15.json - '["Illegal backslash escape: \\x15"]', - # http://json.org/JSON_checker/test/fail16.json - '[\\naked]', - # http://json.org/JSON_checker/test/fail17.json - '["Illegal backslash escape: \\017"]', - # http://json.org/JSON_checker/test/fail18.json - '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]', - # http://json.org/JSON_checker/test/fail19.json - '{"Missing colon" null}', - # http://json.org/JSON_checker/test/fail20.json - '{"Double colon":: null}', - # http://json.org/JSON_checker/test/fail21.json - '{"Comma instead of colon", null}', - # http://json.org/JSON_checker/test/fail22.json - '["Colon instead of comma": false]', - # http://json.org/JSON_checker/test/fail23.json - '["Bad value", truth]', - # http://json.org/JSON_checker/test/fail24.json - "['single quote']", - # http://json.org/JSON_checker/test/fail25.json - '["\ttab\tcharacter\tin\tstring\t"]', - # http://json.org/JSON_checker/test/fail26.json - '["tab\\ character\\ in\\ string\\ "]', - # http://json.org/JSON_checker/test/fail27.json - '["line\nbreak"]', - # http://json.org/JSON_checker/test/fail28.json - '["line\\\nbreak"]', - # http://json.org/JSON_checker/test/fail29.json - '[0e]', - # http://json.org/JSON_checker/test/fail30.json - '[0e+]', - # http://json.org/JSON_checker/test/fail31.json - '[0e+-1]', - # http://json.org/JSON_checker/test/fail32.json - '{"Comma instead if closing brace": true,', - # http://json.org/JSON_checker/test/fail33.json - '["mismatch"}', - # http://code.google.com/p/simplejson/issues/detail?id=3 - u'["A\u001FZ control characters in string"]', -] - -SKIPS = { - 1: "why not have a string payload?", - 18: "spec doesn't specify any nesting limitations", -} - -class TestFail(object): - def test_failures(self): - for idx, doc in enumerate(JSONDOCS): - idx = idx + 1 - if idx in SKIPS: - self.loads(doc) - continue - try: - self.loads(doc) - except ValueError: - pass - else: - self.fail("Expected failure for fail{0}.json: {1!r}".format(idx, doc)) - - def test_non_string_keys_dict(self): - data = {'a' : 1, (1, 2) : 2} - - #This is for c encoder - self.assertRaises(TypeError, self.dumps, data) - - #This is for python encoder - self.assertRaises(TypeError, self.dumps, data, indent=True) - - -class TestPyFail(TestFail, PyTest): pass -class TestCFail(TestFail, CTest): pass diff --git a/PythonLib/full/json/tests/test_float.py b/PythonLib/full/json/tests/test_float.py deleted file mode 100644 index 049f9ae1..00000000 --- a/PythonLib/full/json/tests/test_float.py +++ /dev/null @@ -1,37 +0,0 @@ -import math -from json.tests import PyTest, CTest - - -class TestFloat(object): - def test_floats(self): - for num in [1617161771.7650001, math.pi, math.pi**100, - math.pi**-100, 3.1]: - self.assertEqual(float(self.dumps(num)), num) - self.assertEqual(self.loads(self.dumps(num)), num) - self.assertEqual(self.loads(unicode(self.dumps(num))), num) - - def test_ints(self): - for num in [1, 1L, 1<<32, 1<<64]: - self.assertEqual(self.dumps(num), str(num)) - self.assertEqual(int(self.dumps(num)), num) - self.assertEqual(self.loads(self.dumps(num)), num) - self.assertEqual(self.loads(unicode(self.dumps(num))), num) - - def test_out_of_range(self): - self.assertEqual(self.loads('[23456789012E666]'), [float('inf')]) - self.assertEqual(self.loads('[-23456789012E666]'), [float('-inf')]) - - def test_allow_nan(self): - for val in (float('inf'), float('-inf'), float('nan')): - out = self.dumps([val]) - if val == val: # inf - self.assertEqual(self.loads(out), [val]) - else: # nan - res = self.loads(out) - self.assertEqual(len(res), 1) - self.assertNotEqual(res[0], res[0]) - self.assertRaises(ValueError, self.dumps, [val], allow_nan=False) - - -class TestPyFloat(TestFloat, PyTest): pass -class TestCFloat(TestFloat, CTest): pass diff --git a/PythonLib/full/json/tests/test_indent.py b/PythonLib/full/json/tests/test_indent.py deleted file mode 100644 index 9b187612..00000000 --- a/PythonLib/full/json/tests/test_indent.py +++ /dev/null @@ -1,60 +0,0 @@ -import textwrap -from StringIO import StringIO -from json.tests import PyTest, CTest - - -class TestIndent(object): - def test_indent(self): - h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth', - {'nifty': 87}, {'field': 'yes', 'morefield': False} ] - - expect = textwrap.dedent("""\ - [ - [ - "blorpie" - ], - [ - "whoops" - ], - [], - "d-shtaeou", - "d-nthiouh", - "i-vhbjkhnth", - { - "nifty": 87 - }, - { - "field": "yes", - "morefield": false - } - ]""") - - - d1 = self.dumps(h) - d2 = self.dumps(h, indent=2, sort_keys=True, separators=(',', ': ')) - - h1 = self.loads(d1) - h2 = self.loads(d2) - - self.assertEqual(h1, h) - self.assertEqual(h2, h) - self.assertEqual(d2, expect) - - def test_indent0(self): - h = {3: 1} - def check(indent, expected): - d1 = self.dumps(h, indent=indent) - self.assertEqual(d1, expected) - - sio = StringIO() - self.json.dump(h, sio, indent=indent) - self.assertEqual(sio.getvalue(), expected) - - # indent=0 should emit newlines - check(0, '{\n"3": 1\n}') - # indent=None is more compact - check(None, '{"3": 1}') - - -class TestPyIndent(TestIndent, PyTest): pass -class TestCIndent(TestIndent, CTest): pass diff --git a/PythonLib/full/json/tests/test_pass1.py b/PythonLib/full/json/tests/test_pass1.py deleted file mode 100644 index df8259b7..00000000 --- a/PythonLib/full/json/tests/test_pass1.py +++ /dev/null @@ -1,75 +0,0 @@ -from json.tests import PyTest, CTest - - -# from http://json.org/JSON_checker/test/pass1.json -JSON = r''' -[ - "JSON Test Pattern pass1", - {"object with 1 member":["array with 1 element"]}, - {}, - [], - -42, - true, - false, - null, - { - "integer": 1234567890, - "real": -9876.543210, - "e": 0.123456789e-12, - "E": 1.234567890E+34, - "": 23456789012E66, - "zero": 0, - "one": 1, - "space": " ", - "quote": "\"", - "backslash": "\\", - "controls": "\b\f\n\r\t", - "slash": "/ & \/", - "alpha": "abcdefghijklmnopqrstuvwyz", - "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ", - "digit": "0123456789", - "0123456789": "digit", - "special": "`1~!@#$%^&*()_+-={':[,]}|;.?", - "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A", - "true": true, - "false": false, - "null": null, - "array":[ ], - "object":{ }, - "address": "50 St. James Street", - "url": "http://www.JSON.org/", - "comment": "// /* */": " ", - " s p a c e d " :[1,2 , 3 - -, - -4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7], - "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}", - "quotes": "" \u0022 %22 0x22 034 "", - "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?" -: "A key can be any string" - }, - 0.5 ,98.6 -, -99.44 -, - -1066, -1e1, -0.1e1, -1e-1, -1e00,2e+00,2e-00 -,"rosebud"] -''' - -class TestPass1(object): - def test_parse(self): - # test in/out equivalence and parsing - res = self.loads(JSON) - out = self.dumps(res) - self.assertEqual(res, self.loads(out)) - - -class TestPyPass1(TestPass1, PyTest): pass -class TestCPass1(TestPass1, CTest): pass diff --git a/PythonLib/full/json/tests/test_pass2.py b/PythonLib/full/json/tests/test_pass2.py deleted file mode 100644 index a2bb6d72..00000000 --- a/PythonLib/full/json/tests/test_pass2.py +++ /dev/null @@ -1,18 +0,0 @@ -from json.tests import PyTest, CTest - - -# from http://json.org/JSON_checker/test/pass2.json -JSON = r''' -[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]] -''' - -class TestPass2(object): - def test_parse(self): - # test in/out equivalence and parsing - res = self.loads(JSON) - out = self.dumps(res) - self.assertEqual(res, self.loads(out)) - - -class TestPyPass2(TestPass2, PyTest): pass -class TestCPass2(TestPass2, CTest): pass diff --git a/PythonLib/full/json/tests/test_pass3.py b/PythonLib/full/json/tests/test_pass3.py deleted file mode 100644 index 221f9a0c..00000000 --- a/PythonLib/full/json/tests/test_pass3.py +++ /dev/null @@ -1,24 +0,0 @@ -from json.tests import PyTest, CTest - - -# from http://json.org/JSON_checker/test/pass3.json -JSON = r''' -{ - "JSON Test Pattern pass3": { - "The outermost value": "must be an object or array.", - "In this test": "It is an object." - } -} -''' - - -class TestPass3(object): - def test_parse(self): - # test in/out equivalence and parsing - res = self.loads(JSON) - out = self.dumps(res) - self.assertEqual(res, self.loads(out)) - - -class TestPyPass3(TestPass3, PyTest): pass -class TestCPass3(TestPass3, CTest): pass diff --git a/PythonLib/full/json/tests/test_recursion.py b/PythonLib/full/json/tests/test_recursion.py deleted file mode 100644 index b5221e5d..00000000 --- a/PythonLib/full/json/tests/test_recursion.py +++ /dev/null @@ -1,108 +0,0 @@ -from json.tests import PyTest, CTest - - -class JSONTestObject: - pass - - -class TestRecursion(object): - def test_listrecursion(self): - x = [] - x.append(x) - try: - self.dumps(x) - except ValueError: - pass - else: - self.fail("didn't raise ValueError on list recursion") - x = [] - y = [x] - x.append(y) - try: - self.dumps(x) - except ValueError: - pass - else: - self.fail("didn't raise ValueError on alternating list recursion") - y = [] - x = [y, y] - # ensure that the marker is cleared - self.dumps(x) - - def test_dictrecursion(self): - x = {} - x["test"] = x - try: - self.dumps(x) - except ValueError: - pass - else: - self.fail("didn't raise ValueError on dict recursion") - x = {} - y = {"a": x, "b": x} - # ensure that the marker is cleared - self.dumps(x) - - def test_defaultrecursion(self): - class RecursiveJSONEncoder(self.json.JSONEncoder): - recurse = False - def default(self, o): - if o is JSONTestObject: - if self.recurse: - return [JSONTestObject] - else: - return 'JSONTestObject' - return pyjson.JSONEncoder.default(o) - - enc = RecursiveJSONEncoder() - self.assertEqual(enc.encode(JSONTestObject), '"JSONTestObject"') - enc.recurse = True - try: - enc.encode(JSONTestObject) - except ValueError: - pass - else: - self.fail("didn't raise ValueError on default recursion") - - - def test_highly_nested_objects_decoding(self): - # test that loading highly-nested objects doesn't segfault when C - # accelerations are used. See #12017 - # str - with self.assertRaises(RuntimeError): - self.loads('{"a":' * 100000 + '1' + '}' * 100000) - with self.assertRaises(RuntimeError): - self.loads('{"a":' * 100000 + '[1]' + '}' * 100000) - with self.assertRaises(RuntimeError): - self.loads('[' * 100000 + '1' + ']' * 100000) - # unicode - with self.assertRaises(RuntimeError): - self.loads(u'{"a":' * 100000 + u'1' + u'}' * 100000) - with self.assertRaises(RuntimeError): - self.loads(u'{"a":' * 100000 + u'[1]' + u'}' * 100000) - with self.assertRaises(RuntimeError): - self.loads(u'[' * 100000 + u'1' + u']' * 100000) - - def test_highly_nested_objects_encoding(self): - # See #12051 - l, d = [], {} - for x in xrange(100000): - l, d = [l], {'k':d} - with self.assertRaises(RuntimeError): - self.dumps(l) - with self.assertRaises(RuntimeError): - self.dumps(d) - - def test_endless_recursion(self): - # See #12051 - class EndlessJSONEncoder(self.json.JSONEncoder): - def default(self, o): - """If check_circular is False, this will keep adding another list.""" - return [o] - - with self.assertRaises(RuntimeError): - EndlessJSONEncoder(check_circular=False).encode(5j) - - -class TestPyRecursion(TestRecursion, PyTest): pass -class TestCRecursion(TestRecursion, CTest): pass diff --git a/PythonLib/full/json/tests/test_scanstring.py b/PythonLib/full/json/tests/test_scanstring.py deleted file mode 100644 index 4fef8cba..00000000 --- a/PythonLib/full/json/tests/test_scanstring.py +++ /dev/null @@ -1,109 +0,0 @@ -import sys -from json.tests import PyTest, CTest - - -class TestScanstring(object): - def test_scanstring(self): - scanstring = self.json.decoder.scanstring - self.assertEqual( - scanstring('"z\\ud834\\udd20x"', 1, None, True), - (u'z\U0001d120x', 16)) - - if sys.maxunicode == 65535: - self.assertEqual( - scanstring(u'"z\U0001d120x"', 1, None, True), - (u'z\U0001d120x', 6)) - else: - self.assertEqual( - scanstring(u'"z\U0001d120x"', 1, None, True), - (u'z\U0001d120x', 5)) - - self.assertEqual( - scanstring('"\\u007b"', 1, None, True), - (u'{', 8)) - - self.assertEqual( - scanstring('"A JSON payload should be an object or array, not a string."', 1, None, True), - (u'A JSON payload should be an object or array, not a string.', 60)) - - self.assertEqual( - scanstring('["Unclosed array"', 2, None, True), - (u'Unclosed array', 17)) - - self.assertEqual( - scanstring('["extra comma",]', 2, None, True), - (u'extra comma', 14)) - - self.assertEqual( - scanstring('["double extra comma",,]', 2, None, True), - (u'double extra comma', 21)) - - self.assertEqual( - scanstring('["Comma after the close"],', 2, None, True), - (u'Comma after the close', 24)) - - self.assertEqual( - scanstring('["Extra close"]]', 2, None, True), - (u'Extra close', 14)) - - self.assertEqual( - scanstring('{"Extra comma": true,}', 2, None, True), - (u'Extra comma', 14)) - - self.assertEqual( - scanstring('{"Extra value after close": true} "misplaced quoted value"', 2, None, True), - (u'Extra value after close', 26)) - - self.assertEqual( - scanstring('{"Illegal expression": 1 + 2}', 2, None, True), - (u'Illegal expression', 21)) - - self.assertEqual( - scanstring('{"Illegal invocation": alert()}', 2, None, True), - (u'Illegal invocation', 21)) - - self.assertEqual( - scanstring('{"Numbers cannot have leading zeroes": 013}', 2, None, True), - (u'Numbers cannot have leading zeroes', 37)) - - self.assertEqual( - scanstring('{"Numbers cannot be hex": 0x14}', 2, None, True), - (u'Numbers cannot be hex', 24)) - - self.assertEqual( - scanstring('[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]', 21, None, True), - (u'Too deep', 30)) - - self.assertEqual( - scanstring('{"Missing colon" null}', 2, None, True), - (u'Missing colon', 16)) - - self.assertEqual( - scanstring('{"Double colon":: null}', 2, None, True), - (u'Double colon', 15)) - - self.assertEqual( - scanstring('{"Comma instead of colon", null}', 2, None, True), - (u'Comma instead of colon', 25)) - - self.assertEqual( - scanstring('["Colon instead of comma": false]', 2, None, True), - (u'Colon instead of comma', 25)) - - self.assertEqual( - scanstring('["Bad value", truth]', 2, None, True), - (u'Bad value', 12)) - - def test_issue3623(self): - self.assertRaises(ValueError, self.json.decoder.scanstring, b"xxx", 1, - "xxx") - self.assertRaises(UnicodeDecodeError, - self.json.encoder.encode_basestring_ascii, b"xx\xff") - - def test_overflow(self): - with self.assertRaises(OverflowError): - self.json.decoder.scanstring(b"xxx", sys.maxsize+1) - - -class TestPyScanstring(TestScanstring, PyTest): pass -class TestCScanstring(TestScanstring, CTest): pass diff --git a/PythonLib/full/json/tests/test_separators.py b/PythonLib/full/json/tests/test_separators.py deleted file mode 100644 index a4246e1f..00000000 --- a/PythonLib/full/json/tests/test_separators.py +++ /dev/null @@ -1,44 +0,0 @@ -import textwrap -from json.tests import PyTest, CTest - - -class TestSeparators(object): - def test_separators(self): - h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth', - {'nifty': 87}, {'field': 'yes', 'morefield': False} ] - - expect = textwrap.dedent("""\ - [ - [ - "blorpie" - ] , - [ - "whoops" - ] , - [] , - "d-shtaeou" , - "d-nthiouh" , - "i-vhbjkhnth" , - { - "nifty" : 87 - } , - { - "field" : "yes" , - "morefield" : false - } - ]""") - - - d1 = self.dumps(h) - d2 = self.dumps(h, indent=2, sort_keys=True, separators=(' ,', ' : ')) - - h1 = self.loads(d1) - h2 = self.loads(d2) - - self.assertEqual(h1, h) - self.assertEqual(h2, h) - self.assertEqual(d2, expect) - - -class TestPySeparators(TestSeparators, PyTest): pass -class TestCSeparators(TestSeparators, CTest): pass diff --git a/PythonLib/full/json/tests/test_speedups.py b/PythonLib/full/json/tests/test_speedups.py deleted file mode 100644 index 7186a409..00000000 --- a/PythonLib/full/json/tests/test_speedups.py +++ /dev/null @@ -1,23 +0,0 @@ -from json.tests import CTest - - -class TestSpeedups(CTest): - def test_scanstring(self): - self.assertEqual(self.json.decoder.scanstring.__module__, "_json") - self.assertIs(self.json.decoder.scanstring, self.json.decoder.c_scanstring) - - def test_encode_basestring_ascii(self): - self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__, - "_json") - self.assertIs(self.json.encoder.encode_basestring_ascii, - self.json.encoder.c_encode_basestring_ascii) - -class TestDecode(CTest): - def test_make_scanner(self): - self.assertRaises(AttributeError, self.json.scanner.c_make_scanner, 1) - - def test_make_encoder(self): - self.assertRaises(TypeError, self.json.encoder.c_make_encoder, - None, - "\xCD\x7D\x3D\x4E\x12\x4C\xF9\x79\xD7\x52\xBA\x82\xF2\x27\x4A\x7D\xA0\xCA\x75", - None) diff --git a/PythonLib/full/json/tests/test_tool.py b/PythonLib/full/json/tests/test_tool.py deleted file mode 100644 index 27dfb84f..00000000 --- a/PythonLib/full/json/tests/test_tool.py +++ /dev/null @@ -1,69 +0,0 @@ -import os -import sys -import textwrap -import unittest -import subprocess -from test import test_support -from test.script_helper import assert_python_ok - -class TestTool(unittest.TestCase): - data = """ - - [["blorpie"],[ "whoops" ] , [ - ],\t"d-shtaeou",\r"d-nthiouh", - "i-vhbjkhnth", {"nifty":87}, {"morefield" :\tfalse,"field" - :"yes"} ] - """ - - expect = textwrap.dedent("""\ - [ - [ - "blorpie" - ], - [ - "whoops" - ], - [], - "d-shtaeou", - "d-nthiouh", - "i-vhbjkhnth", - { - "nifty": 87 - }, - { - "field": "yes", - "morefield": false - } - ] - """) - - def test_stdin_stdout(self): - proc = subprocess.Popen( - (sys.executable, '-m', 'json.tool'), - stdin=subprocess.PIPE, stdout=subprocess.PIPE) - out, err = proc.communicate(self.data.encode()) - self.assertEqual(out.splitlines(), self.expect.encode().splitlines()) - self.assertEqual(err, None) - - def _create_infile(self): - infile = test_support.TESTFN - with open(infile, "w") as fp: - self.addCleanup(os.remove, infile) - fp.write(self.data) - return infile - - def test_infile_stdout(self): - infile = self._create_infile() - rc, out, err = assert_python_ok('-m', 'json.tool', infile) - self.assertEqual(out.splitlines(), self.expect.encode().splitlines()) - self.assertEqual(err, b'') - - def test_infile_outfile(self): - infile = self._create_infile() - outfile = test_support.TESTFN + '.out' - rc, out, err = assert_python_ok('-m', 'json.tool', infile, outfile) - self.addCleanup(os.remove, outfile) - with open(outfile, "r") as fp: - self.assertEqual(fp.read(), self.expect) - self.assertEqual(out, b'') - self.assertEqual(err, b'') diff --git a/PythonLib/full/json/tests/test_unicode.py b/PythonLib/full/json/tests/test_unicode.py deleted file mode 100644 index e90f1586..00000000 --- a/PythonLib/full/json/tests/test_unicode.py +++ /dev/null @@ -1,89 +0,0 @@ -from collections import OrderedDict -from json.tests import PyTest, CTest - - -class TestUnicode(object): - def test_encoding1(self): - encoder = self.json.JSONEncoder(encoding='utf-8') - u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}' - s = u.encode('utf-8') - ju = encoder.encode(u) - js = encoder.encode(s) - self.assertEqual(ju, js) - - def test_encoding2(self): - u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}' - s = u.encode('utf-8') - ju = self.dumps(u, encoding='utf-8') - js = self.dumps(s, encoding='utf-8') - self.assertEqual(ju, js) - - def test_encoding3(self): - u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}' - j = self.dumps(u) - self.assertEqual(j, '"\\u03b1\\u03a9"') - - def test_encoding4(self): - u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}' - j = self.dumps([u]) - self.assertEqual(j, '["\\u03b1\\u03a9"]') - - def test_encoding5(self): - u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}' - j = self.dumps(u, ensure_ascii=False) - self.assertEqual(j, u'"{0}"'.format(u)) - - def test_encoding6(self): - u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}' - j = self.dumps([u], ensure_ascii=False) - self.assertEqual(j, u'["{0}"]'.format(u)) - - def test_big_unicode_encode(self): - u = u'\U0001d120' - self.assertEqual(self.dumps(u), '"\\ud834\\udd20"') - self.assertEqual(self.dumps(u, ensure_ascii=False), u'"\U0001d120"') - - def test_big_unicode_decode(self): - u = u'z\U0001d120x' - self.assertEqual(self.loads('"' + u + '"'), u) - self.assertEqual(self.loads('"z\\ud834\\udd20x"'), u) - - def test_unicode_decode(self): - for i in range(0, 0xd7ff): - u = unichr(i) - s = '"\\u{0:04x}"'.format(i) - self.assertEqual(self.loads(s), u) - - def test_object_pairs_hook_with_unicode(self): - s = u'{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}' - p = [(u"xkd", 1), (u"kcw", 2), (u"art", 3), (u"hxm", 4), - (u"qrt", 5), (u"pad", 6), (u"hoy", 7)] - self.assertEqual(self.loads(s), eval(s)) - self.assertEqual(self.loads(s, object_pairs_hook = lambda x: x), p) - od = self.loads(s, object_pairs_hook = OrderedDict) - self.assertEqual(od, OrderedDict(p)) - self.assertEqual(type(od), OrderedDict) - # the object_pairs_hook takes priority over the object_hook - self.assertEqual(self.loads(s, - object_pairs_hook = OrderedDict, - object_hook = lambda x: None), - OrderedDict(p)) - - def test_default_encoding(self): - self.assertEqual(self.loads(u'{"a": "\xe9"}'.encode('utf-8')), - {'a': u'\xe9'}) - - def test_unicode_preservation(self): - self.assertEqual(type(self.loads(u'""')), unicode) - self.assertEqual(type(self.loads(u'"a"')), unicode) - self.assertEqual(type(self.loads(u'["a"]')[0]), unicode) - # Issue 10038. - self.assertEqual(type(self.loads('"foo"')), unicode) - - def test_bad_encoding(self): - self.assertRaises(UnicodeEncodeError, self.loads, '"a"', u"rat\xe9") - self.assertRaises(TypeError, self.loads, '"a"', 1) - - -class TestPyUnicode(TestUnicode, PyTest): pass -class TestCUnicode(TestUnicode, CTest): pass diff --git a/PythonLib/full/linecache.py b/PythonLib/full/linecache.py index 811f27fe..4b97be3f 100644 --- a/PythonLib/full/linecache.py +++ b/PythonLib/full/linecache.py @@ -36,8 +36,12 @@ def getlines(filename, module_globals=None): if filename in cache: return cache[filename][2] - else: + + try: return updatecache(filename, module_globals) + except MemoryError: + clearcache() + return [] def checkcache(filename=None): diff --git a/PythonLib/full/locale.py b/PythonLib/full/locale.py index 7ddfdb78..62aad5ae 100644 --- a/PythonLib/full/locale.py +++ b/PythonLib/full/locale.py @@ -1,14 +1,12 @@ -""" Locale support. +"""Locale support module. - The module provides low-level access to the C lib's locale APIs - and adds high level number formatting APIs as well as a locale - aliasing engine to complement these. - - The aliasing engine includes support for many commonly used locale - names and maps them to values suitable for passing to the C lib's - setlocale() function. It also includes default encodings for all - supported locale names. +The module provides low-level access to the C lib's locale APIs and adds high +level number formatting APIs as well as a locale aliasing engine to complement +these. +The aliasing engine includes support for many commonly used locale names and +maps them to values suitable for passing to the C lib's setlocale() function. It +also includes default encodings for all supported locale names. """ import sys @@ -18,6 +16,10 @@ import operator import functools +# keep a copy of the builtin str type, because 'str' name is overridden +# in globals by a function below +_str = str + try: _unicode = unicode except NameError: @@ -299,7 +301,7 @@ def currency(val, symbol=True, grouping=False, international=False): return s.replace('<', '').replace('>', '') def str(val): - """Convert float to integer, taking the locale into account.""" + """Convert float to string, taking the locale into account.""" return format("%.12g", val) def atof(string, func=float): @@ -344,6 +346,22 @@ def _test(): for x in range(256) ) +def _replace_encoding(code, encoding): + if '.' in code: + langname = code[:code.index('.')] + else: + langname = code + # Convert the encoding to a C lib compatible encoding string + norm_encoding = encodings.normalize_encoding(encoding) + #print('norm encoding: %r' % norm_encoding) + norm_encoding = encodings.aliases.aliases.get(norm_encoding, + norm_encoding) + #print('aliased encoding: %r' % norm_encoding) + encoding = locale_encoding_alias.get(norm_encoding, + norm_encoding) + #print('found encoding %r' % encoding) + return langname + '.' + encoding + def normalize(localename): """ Returns a normalized locale code for the given locale @@ -360,57 +378,73 @@ def normalize(localename): does. """ - # Normalize the locale name and extract the encoding + # Normalize the locale name and extract the encoding and modifier if isinstance(localename, _unicode): localename = localename.encode('ascii') - fullname = localename.translate(_ascii_lower_map) - if ':' in fullname: + code = localename.translate(_ascii_lower_map) + if ':' in code: # ':' is sometimes used as encoding delimiter. - fullname = fullname.replace(':', '.') - if '.' in fullname: - langname, encoding = fullname.split('.')[:2] - fullname = langname + '.' + encoding + code = code.replace(':', '.') + if '@' in code: + code, modifier = code.split('@', 1) else: - langname = fullname + modifier = '' + if '.' in code: + langname, encoding = code.split('.')[:2] + else: + langname = code encoding = '' - # First lookup: fullname (possibly with encoding) - norm_encoding = encoding.replace('-', '') - norm_encoding = norm_encoding.replace('_', '') - lookup_name = langname + '.' + encoding + # First lookup: fullname (possibly with encoding and modifier) + lang_enc = langname + if encoding: + norm_encoding = encoding.replace('-', '') + norm_encoding = norm_encoding.replace('_', '') + lang_enc += '.' + norm_encoding + lookup_name = lang_enc + if modifier: + lookup_name += '@' + modifier code = locale_alias.get(lookup_name, None) if code is not None: return code - #print 'first lookup failed' - - # Second try: langname (without encoding) - code = locale_alias.get(langname, None) - if code is not None: - #print 'langname lookup succeeded' - if '.' in code: - langname, defenc = code.split('.') - else: - langname = code - defenc = '' - if encoding: - # Convert the encoding to a C lib compatible encoding string - norm_encoding = encodings.normalize_encoding(encoding) - #print 'norm encoding: %r' % norm_encoding - norm_encoding = encodings.aliases.aliases.get(norm_encoding, - norm_encoding) - #print 'aliased encoding: %r' % norm_encoding - encoding = locale_encoding_alias.get(norm_encoding, - norm_encoding) - else: - encoding = defenc - #print 'found encoding %r' % encoding - if encoding: - return langname + '.' + encoding - else: - return langname - - else: - return localename + #print('first lookup failed') + + if modifier: + # Second try: fullname without modifier (possibly with encoding) + code = locale_alias.get(lang_enc, None) + if code is not None: + #print('lookup without modifier succeeded') + if '@' not in code: + return code + '@' + modifier + if code.split('@', 1)[1].translate(_ascii_lower_map) == modifier: + return code + #print('second lookup failed') + + if encoding: + # Third try: langname (without encoding, possibly with modifier) + lookup_name = langname + if modifier: + lookup_name += '@' + modifier + code = locale_alias.get(lookup_name, None) + if code is not None: + #print('lookup without encoding succeeded') + if '@' not in code: + return _replace_encoding(code, encoding) + code, modifier = code.split('@', 1) + return _replace_encoding(code, encoding) + '@' + modifier + + if modifier: + # Fourth try: langname (without encoding and modifier) + code = locale_alias.get(langname, None) + if code is not None: + #print('lookup without modifier and encoding succeeded') + if '@' not in code: + return _replace_encoding(code, encoding) + '@' + modifier + code, defmod = code.split('@', 1) + if defmod.translate(_ascii_lower_map) == modifier: + return _replace_encoding(code, encoding) + '@' + defmod + + return localename def _parse_localename(localename): @@ -429,7 +463,7 @@ def _parse_localename(localename): code = normalize(localename) if '@' in code: # Deal with locale modifiers - code, modifier = code.split('@') + code, modifier = code.split('@', 1) if modifier == 'euro' and '.' not in code: # Assume Latin-9 for @euro locales. This is bogus, # since some systems may use other encodings for these @@ -541,7 +575,7 @@ def setlocale(category, locale=None): category may be given as one of the LC_* values. """ - if locale and type(locale) is not type(""): + if locale and not isinstance(locale, (_str, _unicode)): # convert to string locale = normalize(_build_localename(locale)) return _setlocale(category, locale) @@ -584,9 +618,18 @@ def getpreferredencoding(do_setlocale = True): pass result = nl_langinfo(CODESET) setlocale(LC_CTYPE, oldloc) - return result else: - return nl_langinfo(CODESET) + result = nl_langinfo(CODESET) + + if not result and sys.platform == 'darwin': + # nl_langinfo can return an empty string + # when the setting has an invalid value. + # Default to UTF-8 in that case because + # UTF-8 is the default charset on OSX and + # returning nothing will crash the + # interpreter. + result = 'UTF-8' + return result ### Database @@ -734,11 +777,36 @@ def getpreferredencoding(do_setlocale = True): # updated 'sr_yu.utf8@cyrillic' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8' # updated 'sr_yu@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' # +# SS 2013-12-20: +# Updated alias mapping to most recent locale.alias file +# from X.org distribution using makelocalealias.py. +# +# These are the differences compared to the old mapping (Python 2.7.6 +# and older): +# +# updated 'a3' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' +# updated 'a3_az' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' +# updated 'a3_az.koi8c' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' +# updated 'cs_cs.iso88592' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2' +# updated 'hebrew' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'hebrew.iso88598' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'sd' -> 'sd_IN@devanagari.UTF-8' to 'sd_IN.UTF-8' +# updated 'sr@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' +# updated 'sr_cs' -> 'sr_RS.UTF-8' to 'sr_CS.UTF-8' +# updated 'sr_cs.utf8@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' +# updated 'sr_cs@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' +# +# SS 2014-10-01: +# Updated alias mapping with glibc 2.19 supported locales. locale_alias = { - 'a3': 'a3_AZ.KOI8-C', - 'a3_az': 'a3_AZ.KOI8-C', - 'a3_az.koi8c': 'a3_AZ.KOI8-C', + 'a3': 'az_AZ.KOI8-C', + 'a3_az': 'az_AZ.KOI8-C', + 'a3_az.koi8c': 'az_AZ.KOI8-C', + 'a3_az.koic': 'az_AZ.KOI8-C', + 'aa_dj': 'aa_DJ.ISO8859-1', + 'aa_er': 'aa_ER.UTF-8', + 'aa_et': 'aa_ET.UTF-8', 'af': 'af_ZA.ISO8859-1', 'af_za': 'af_ZA.ISO8859-1', 'af_za.iso88591': 'af_ZA.ISO8859-1', @@ -746,6 +814,7 @@ def getpreferredencoding(do_setlocale = True): 'am_et': 'am_ET.UTF-8', 'american': 'en_US.ISO8859-1', 'american.iso88591': 'en_US.ISO8859-1', + 'an_es': 'an_ES.ISO8859-15', 'ar': 'ar_AA.ISO8859-6', 'ar_aa': 'ar_AA.ISO8859-6', 'ar_aa.iso88596': 'ar_AA.ISO8859-6', @@ -757,6 +826,7 @@ def getpreferredencoding(do_setlocale = True): 'ar_dz.iso88596': 'ar_DZ.ISO8859-6', 'ar_eg': 'ar_EG.ISO8859-6', 'ar_eg.iso88596': 'ar_EG.ISO8859-6', + 'ar_in': 'ar_IN.UTF-8', 'ar_iq': 'ar_IQ.ISO8859-6', 'ar_iq.iso88596': 'ar_IQ.ISO8859-6', 'ar_jo': 'ar_JO.ISO8859-6', @@ -786,23 +856,34 @@ def getpreferredencoding(do_setlocale = True): 'arabic': 'ar_AA.ISO8859-6', 'arabic.iso88596': 'ar_AA.ISO8859-6', 'as': 'as_IN.UTF-8', + 'as_in': 'as_IN.UTF-8', + 'ast_es': 'ast_ES.ISO8859-15', + 'ayc_pe': 'ayc_PE.UTF-8', 'az': 'az_AZ.ISO8859-9E', 'az_az': 'az_AZ.ISO8859-9E', 'az_az.iso88599e': 'az_AZ.ISO8859-9E', 'be': 'be_BY.CP1251', 'be@latin': 'be_BY.UTF-8@latin', + 'be_bg.utf8': 'bg_BG.UTF-8', 'be_by': 'be_BY.CP1251', 'be_by.cp1251': 'be_BY.CP1251', 'be_by.microsoftcp1251': 'be_BY.CP1251', 'be_by.utf8@latin': 'be_BY.UTF-8@latin', 'be_by@latin': 'be_BY.UTF-8@latin', + 'bem_zm': 'bem_ZM.UTF-8', + 'ber_dz': 'ber_DZ.UTF-8', + 'ber_ma': 'ber_MA.UTF-8', 'bg': 'bg_BG.CP1251', 'bg_bg': 'bg_BG.CP1251', 'bg_bg.cp1251': 'bg_BG.CP1251', 'bg_bg.iso88595': 'bg_BG.ISO8859-5', 'bg_bg.koi8r': 'bg_BG.KOI8-R', 'bg_bg.microsoftcp1251': 'bg_BG.CP1251', + 'bho_in': 'bho_IN.UTF-8', + 'bn_bd': 'bn_BD.UTF-8', 'bn_in': 'bn_IN.UTF-8', + 'bo_cn': 'bo_CN.UTF-8', + 'bo_in': 'bo_IN.UTF-8', 'bokmal': 'nb_NO.ISO8859-1', 'bokm\xe5l': 'nb_NO.ISO8859-1', 'br': 'br_FR.ISO8859-1', @@ -813,15 +894,19 @@ def getpreferredencoding(do_setlocale = True): 'br_fr.iso885915@euro': 'br_FR.ISO8859-15', 'br_fr.utf8@euro': 'br_FR.UTF-8', 'br_fr@euro': 'br_FR.ISO8859-15', + 'brx_in': 'brx_IN.UTF-8', 'bs': 'bs_BA.ISO8859-2', 'bs_ba': 'bs_BA.ISO8859-2', 'bs_ba.iso88592': 'bs_BA.ISO8859-2', 'bulgarian': 'bg_BG.CP1251', + 'byn_er': 'byn_ER.UTF-8', 'c': 'C', 'c-french': 'fr_CA.ISO8859-1', 'c-french.iso88591': 'fr_CA.ISO8859-1', + 'c.ascii': 'C', 'c.en': 'C', 'c.iso88591': 'en_US.ISO8859-1', + 'c.utf8': 'en_US.UTF-8', 'c_c': 'C', 'c_c.c': 'C', 'ca': 'ca_ES.ISO8859-1', @@ -836,6 +921,7 @@ def getpreferredencoding(do_setlocale = True): 'ca_es.iso885915': 'ca_ES.ISO8859-15', 'ca_es.iso885915@euro': 'ca_ES.ISO8859-15', 'ca_es.utf8@euro': 'ca_ES.UTF-8', + 'ca_es@valencia': 'ca_ES.ISO8859-15@valencia', 'ca_es@euro': 'ca_ES.ISO8859-15', 'ca_fr': 'ca_FR.ISO8859-1', 'ca_fr.iso88591': 'ca_FR.ISO8859-1', @@ -854,12 +940,15 @@ def getpreferredencoding(do_setlocale = True): 'cextend.en': 'en_US.ISO8859-1', 'chinese-s': 'zh_CN.eucCN', 'chinese-t': 'zh_TW.eucTW', + 'crh_ua': 'crh_UA.UTF-8', 'croatian': 'hr_HR.ISO8859-2', 'cs': 'cs_CZ.ISO8859-2', 'cs_cs': 'cs_CZ.ISO8859-2', - 'cs_cs.iso88592': 'cs_CS.ISO8859-2', + 'cs_cs.iso88592': 'cs_CZ.ISO8859-2', 'cs_cz': 'cs_CZ.ISO8859-2', 'cs_cz.iso88592': 'cs_CZ.ISO8859-2', + 'csb_pl': 'csb_PL.UTF-8', + 'cv_ru': 'cv_RU.UTF-8', 'cy': 'cy_GB.ISO8859-1', 'cy_gb': 'cy_GB.ISO8859-1', 'cy_gb.iso88591': 'cy_GB.ISO8859-1', @@ -907,6 +996,7 @@ def getpreferredencoding(do_setlocale = True): 'de_de.iso885915@euro': 'de_DE.ISO8859-15', 'de_de.utf8@euro': 'de_DE.UTF-8', 'de_de@euro': 'de_DE.ISO8859-15', + 'de_li.utf8': 'de_LI.UTF-8', 'de_lu': 'de_LU.ISO8859-1', 'de_lu.iso88591': 'de_LU.ISO8859-1', 'de_lu.iso885915': 'de_LU.ISO8859-15', @@ -914,18 +1004,23 @@ def getpreferredencoding(do_setlocale = True): 'de_lu.utf8@euro': 'de_LU.UTF-8', 'de_lu@euro': 'de_LU.ISO8859-15', 'deutsch': 'de_DE.ISO8859-1', + 'doi_in': 'doi_IN.UTF-8', 'dutch': 'nl_NL.ISO8859-1', 'dutch.iso88591': 'nl_BE.ISO8859-1', + 'dv_mv': 'dv_MV.UTF-8', + 'dz_bt': 'dz_BT.UTF-8', 'ee': 'ee_EE.ISO8859-4', 'ee_ee': 'ee_EE.ISO8859-4', 'ee_ee.iso88594': 'ee_EE.ISO8859-4', 'eesti': 'et_EE.ISO8859-1', 'el': 'el_GR.ISO8859-7', + 'el_cy': 'el_CY.ISO8859-7', 'el_gr': 'el_GR.ISO8859-7', 'el_gr.iso88597': 'el_GR.ISO8859-7', 'el_gr@euro': 'el_GR.ISO8859-15', 'en': 'en_US.ISO8859-1', 'en.iso88591': 'en_US.ISO8859-1', + 'en_ag': 'en_AG.UTF-8', 'en_au': 'en_AU.ISO8859-1', 'en_au.iso88591': 'en_AU.ISO8859-1', 'en_be': 'en_BE.ISO8859-1', @@ -934,6 +1029,8 @@ def getpreferredencoding(do_setlocale = True): 'en_bw.iso88591': 'en_BW.ISO8859-1', 'en_ca': 'en_CA.ISO8859-1', 'en_ca.iso88591': 'en_CA.ISO8859-1', + 'en_dk': 'en_DK.ISO8859-1', + 'en_dl.utf8': 'en_DL.UTF-8', 'en_gb': 'en_GB.ISO8859-1', 'en_gb.88591': 'en_GB.ISO8859-1', 'en_gb.iso88591': 'en_GB.ISO8859-1', @@ -948,6 +1045,7 @@ def getpreferredencoding(do_setlocale = True): 'en_ie.utf8@euro': 'en_IE.UTF-8', 'en_ie@euro': 'en_IE.ISO8859-15', 'en_in': 'en_IN.ISO8859-1', + 'en_ng': 'en_NG.UTF-8', 'en_nz': 'en_NZ.ISO8859-1', 'en_nz.iso88591': 'en_NZ.ISO8859-1', 'en_ph': 'en_PH.ISO8859-1', @@ -968,8 +1066,10 @@ def getpreferredencoding(do_setlocale = True): 'en_za.iso88591': 'en_ZA.ISO8859-1', 'en_za.iso885915': 'en_ZA.ISO8859-15', 'en_za@euro': 'en_ZA.ISO8859-15', + 'en_zm': 'en_ZM.UTF-8', 'en_zw': 'en_ZW.ISO8859-1', 'en_zw.iso88591': 'en_ZW.ISO8859-1', + 'en_zw.utf8': 'en_ZS.UTF-8', 'eng_gb': 'en_GB.ISO8859-1', 'eng_gb.8859': 'en_GB.ISO8859-1', 'english': 'en_EN.ISO8859-1', @@ -982,8 +1082,10 @@ def getpreferredencoding(do_setlocale = True): 'english_us.8859': 'en_US.ISO8859-1', 'english_us.ascii': 'en_US.ISO8859-1', 'eo': 'eo_XX.ISO8859-3', + 'eo.utf8': 'eo.UTF-8', 'eo_eo': 'eo_EO.ISO8859-3', 'eo_eo.iso88593': 'eo_EO.ISO8859-3', + 'eo_us.utf8': 'eo_US.UTF-8', 'eo_xx': 'eo_XX.ISO8859-3', 'eo_xx.iso88593': 'eo_XX.ISO8859-3', 'es': 'es_ES.ISO8859-1', @@ -997,6 +1099,7 @@ def getpreferredencoding(do_setlocale = True): 'es_co.iso88591': 'es_CO.ISO8859-1', 'es_cr': 'es_CR.ISO8859-1', 'es_cr.iso88591': 'es_CR.ISO8859-1', + 'es_cu': 'es_CU.UTF-8', 'es_do': 'es_DO.ISO8859-1', 'es_do.iso88591': 'es_DO.ISO8859-1', 'es_ec': 'es_EC.ISO8859-1', @@ -1059,9 +1162,11 @@ def getpreferredencoding(do_setlocale = True): 'eu_es.iso885915@euro': 'eu_ES.ISO8859-15', 'eu_es.utf8@euro': 'eu_ES.UTF-8', 'eu_es@euro': 'eu_ES.ISO8859-15', + 'eu_fr': 'eu_FR.ISO8859-1', 'fa': 'fa_IR.UTF-8', 'fa_ir': 'fa_IR.UTF-8', 'fa_ir.isiri3342': 'fa_IR.ISIRI-3342', + 'ff_sn': 'ff_SN.UTF-8', 'fi': 'fi_FI.ISO8859-15', 'fi.iso885915': 'fi_FI.ISO8859-15', 'fi_fi': 'fi_FI.ISO8859-15', @@ -1071,6 +1176,7 @@ def getpreferredencoding(do_setlocale = True): 'fi_fi.iso885915@euro': 'fi_FI.ISO8859-15', 'fi_fi.utf8@euro': 'fi_FI.UTF-8', 'fi_fi@euro': 'fi_FI.ISO8859-15', + 'fil_ph': 'fil_PH.UTF-8', 'finnish': 'fi_FI.ISO8859-1', 'finnish.iso88591': 'fi_FI.ISO8859-1', 'fo': 'fo_FO.ISO8859-1', @@ -1118,6 +1224,9 @@ def getpreferredencoding(do_setlocale = True): 'french.iso88591': 'fr_CH.ISO8859-1', 'french_france': 'fr_FR.ISO8859-1', 'french_france.8859': 'fr_FR.ISO8859-1', + 'fur_it': 'fur_IT.UTF-8', + 'fy_de': 'fy_DE.UTF-8', + 'fy_nl': 'fy_NL.UTF-8', 'ga': 'ga_IE.ISO8859-1', 'ga_ie': 'ga_IE.ISO8859-1', 'ga_ie.iso88591': 'ga_IE.ISO8859-1', @@ -1140,6 +1249,8 @@ def getpreferredencoding(do_setlocale = True): 'german.iso88591': 'de_CH.ISO8859-1', 'german_germany': 'de_DE.ISO8859-1', 'german_germany.8859': 'de_DE.ISO8859-1', + 'gez_er': 'gez_ER.UTF-8', + 'gez_et': 'gez_ET.UTF-8', 'gl': 'gl_ES.ISO8859-1', 'gl_es': 'gl_ES.ISO8859-1', 'gl_es.iso88591': 'gl_ES.ISO8859-1', @@ -1156,29 +1267,39 @@ def getpreferredencoding(do_setlocale = True): 'gv_gb.iso885914': 'gv_GB.ISO8859-14', 'gv_gb.iso885915': 'gv_GB.ISO8859-15', 'gv_gb@euro': 'gv_GB.ISO8859-15', + 'ha_ng': 'ha_NG.UTF-8', 'he': 'he_IL.ISO8859-8', 'he_il': 'he_IL.ISO8859-8', 'he_il.cp1255': 'he_IL.CP1255', 'he_il.iso88598': 'he_IL.ISO8859-8', 'he_il.microsoftcp1255': 'he_IL.CP1255', - 'hebrew': 'iw_IL.ISO8859-8', - 'hebrew.iso88598': 'iw_IL.ISO8859-8', + 'hebrew': 'he_IL.ISO8859-8', + 'hebrew.iso88598': 'he_IL.ISO8859-8', 'hi': 'hi_IN.ISCII-DEV', 'hi_in': 'hi_IN.ISCII-DEV', 'hi_in.isciidev': 'hi_IN.ISCII-DEV', 'hne': 'hne_IN.UTF-8', + 'hne_in': 'hne_IN.UTF-8', 'hr': 'hr_HR.ISO8859-2', 'hr_hr': 'hr_HR.ISO8859-2', 'hr_hr.iso88592': 'hr_HR.ISO8859-2', 'hrvatski': 'hr_HR.ISO8859-2', + 'hsb_de': 'hsb_DE.ISO8859-2', + 'ht_ht': 'ht_HT.UTF-8', 'hu': 'hu_HU.ISO8859-2', 'hu_hu': 'hu_HU.ISO8859-2', 'hu_hu.iso88592': 'hu_HU.ISO8859-2', 'hungarian': 'hu_HU.ISO8859-2', + 'hy_am': 'hy_AM.UTF-8', + 'hy_am.armscii8': 'hy_AM.ARMSCII_8', + 'ia': 'ia.UTF-8', + 'ia_fr': 'ia_FR.UTF-8', 'icelandic': 'is_IS.ISO8859-1', 'icelandic.iso88591': 'is_IS.ISO8859-1', 'id': 'id_ID.ISO8859-1', 'id_id': 'id_ID.ISO8859-1', + 'ig_ng': 'ig_NG.UTF-8', + 'ik_ca': 'ik_CA.UTF-8', 'in': 'id_ID.ISO8859-1', 'in_id': 'id_ID.ISO8859-1', 'is': 'is_IS.ISO8859-1', @@ -1213,6 +1334,7 @@ def getpreferredencoding(do_setlocale = True): 'iw': 'he_IL.ISO8859-8', 'iw_il': 'he_IL.ISO8859-8', 'iw_il.iso88598': 'he_IL.ISO8859-8', + 'iw_il.utf8': 'iw_IL.UTF-8', 'ja': 'ja_JP.eucJP', 'ja.jis': 'ja_JP.JIS7', 'ja.sjis': 'ja_JP.SJIS', @@ -1239,6 +1361,7 @@ def getpreferredencoding(do_setlocale = True): 'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY', 'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS', 'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY', + 'kk_kz': 'kk_KZ.RK1048', 'kl': 'kl_GL.ISO8859-1', 'kl_gl': 'kl_GL.ISO8859-1', 'kl_gl.iso88591': 'kl_GL.ISO8859-1', @@ -1251,10 +1374,14 @@ def getpreferredencoding(do_setlocale = True): 'ko_kr': 'ko_KR.eucKR', 'ko_kr.euc': 'ko_KR.eucKR', 'ko_kr.euckr': 'ko_KR.eucKR', + 'kok_in': 'kok_IN.UTF-8', 'korean': 'ko_KR.eucKR', 'korean.euc': 'ko_KR.eucKR', 'ks': 'ks_IN.UTF-8', - 'ks_in@devanagari': 'ks_IN@devanagari.UTF-8', + 'ks_in': 'ks_IN.UTF-8', + 'ks_in@devanagari': 'ks_IN.UTF-8@devanagari', + 'ks_in@devanagari.utf8': 'ks_IN.UTF-8@devanagari', + 'ku_tr': 'ku_TR.ISO8859-9', 'kw': 'kw_GB.ISO8859-1', 'kw_gb': 'kw_GB.ISO8859-1', 'kw_gb.iso88591': 'kw_GB.ISO8859-1', @@ -1263,6 +1390,11 @@ def getpreferredencoding(do_setlocale = True): 'kw_gb@euro': 'kw_GB.ISO8859-15', 'ky': 'ky_KG.UTF-8', 'ky_kg': 'ky_KG.UTF-8', + 'lb_lu': 'lb_LU.UTF-8', + 'lg_ug': 'lg_UG.ISO8859-10', + 'li_be': 'li_BE.UTF-8', + 'li_nl': 'li_NL.UTF-8', + 'lij_it': 'lij_IT.UTF-8', 'lithuanian': 'lt_LT.ISO8859-13', 'lo': 'lo_LA.MULELAO-1', 'lo_la': 'lo_LA.MULELAO-1', @@ -1277,7 +1409,11 @@ def getpreferredencoding(do_setlocale = True): 'lv_lv': 'lv_LV.ISO8859-13', 'lv_lv.iso885913': 'lv_LV.ISO8859-13', 'lv_lv.iso88594': 'lv_LV.ISO8859-4', + 'mag_in': 'mag_IN.UTF-8', 'mai': 'mai_IN.UTF-8', + 'mai_in': 'mai_IN.UTF-8', + 'mg_mg': 'mg_MG.ISO8859-15', + 'mhr_ru': 'mhr_RU.UTF-8', 'mi': 'mi_NZ.ISO8859-1', 'mi_nz': 'mi_NZ.ISO8859-1', 'mi_nz.iso88591': 'mi_NZ.ISO8859-1', @@ -1287,6 +1423,9 @@ def getpreferredencoding(do_setlocale = True): 'mk_mk.iso88595': 'mk_MK.ISO8859-5', 'mk_mk.microsoftcp1251': 'mk_MK.CP1251', 'ml': 'ml_IN.UTF-8', + 'ml_in': 'ml_IN.UTF-8', + 'mn_mn': 'mn_MN.UTF-8', + 'mni_in': 'mni_IN.UTF-8', 'mr': 'mr_IN.UTF-8', 'mr_in': 'mr_IN.UTF-8', 'ms': 'ms_MY.ISO8859-1', @@ -1295,14 +1434,23 @@ def getpreferredencoding(do_setlocale = True): 'mt': 'mt_MT.ISO8859-3', 'mt_mt': 'mt_MT.ISO8859-3', 'mt_mt.iso88593': 'mt_MT.ISO8859-3', + 'my_mm': 'my_MM.UTF-8', + 'nan_tw@latin': 'nan_TW.UTF-8@latin', 'nb': 'nb_NO.ISO8859-1', 'nb_no': 'nb_NO.ISO8859-1', 'nb_no.88591': 'nb_NO.ISO8859-1', 'nb_no.iso88591': 'nb_NO.ISO8859-1', 'nb_no.iso885915': 'nb_NO.ISO8859-15', 'nb_no@euro': 'nb_NO.ISO8859-15', + 'nds_de': 'nds_DE.UTF-8', + 'nds_nl': 'nds_NL.UTF-8', + 'ne_np': 'ne_NP.UTF-8', + 'nhn_mx': 'nhn_MX.UTF-8', + 'niu_nu': 'niu_NU.UTF-8', + 'niu_nz': 'niu_NZ.UTF-8', 'nl': 'nl_NL.ISO8859-1', 'nl.iso885915': 'nl_NL.ISO8859-15', + 'nl_aw': 'nl_AW.UTF-8', 'nl_be': 'nl_BE.ISO8859-1', 'nl_be.88591': 'nl_BE.ISO8859-1', 'nl_be.iso88591': 'nl_BE.ISO8859-1', @@ -1352,9 +1500,15 @@ def getpreferredencoding(do_setlocale = True): 'oc_fr.iso88591': 'oc_FR.ISO8859-1', 'oc_fr.iso885915': 'oc_FR.ISO8859-15', 'oc_fr@euro': 'oc_FR.ISO8859-15', + 'om_et': 'om_ET.UTF-8', + 'om_ke': 'om_KE.ISO8859-1', 'or': 'or_IN.UTF-8', + 'or_in': 'or_IN.UTF-8', + 'os_ru': 'os_RU.UTF-8', 'pa': 'pa_IN.UTF-8', 'pa_in': 'pa_IN.UTF-8', + 'pa_pk': 'pa_PK.UTF-8', + 'pap_an': 'pap_AN.UTF-8', 'pd': 'pd_US.ISO8859-1', 'pd_de': 'pd_DE.ISO8859-1', 'pd_de.iso88591': 'pd_DE.ISO8859-1', @@ -1380,6 +1534,7 @@ def getpreferredencoding(do_setlocale = True): 'pp': 'pp_AN.ISO8859-1', 'pp_an': 'pp_AN.ISO8859-1', 'pp_an.iso88591': 'pp_AN.ISO8859-1', + 'ps_af': 'ps_AF.UTF-8', 'pt': 'pt_PT.ISO8859-1', 'pt.iso885915': 'pt_PT.ISO8859-15', 'pt_br': 'pt_BR.ISO8859-1', @@ -1414,7 +1569,15 @@ def getpreferredencoding(do_setlocale = True): 'rw': 'rw_RW.ISO8859-1', 'rw_rw': 'rw_RW.ISO8859-1', 'rw_rw.iso88591': 'rw_RW.ISO8859-1', - 'sd': 'sd_IN@devanagari.UTF-8', + 'sa_in': 'sa_IN.UTF-8', + 'sat_in': 'sat_IN.UTF-8', + 'sc_it': 'sc_IT.UTF-8', + 'sd': 'sd_IN.UTF-8', + 'sd@devanagari': 'sd_IN.UTF-8@devanagari', + 'sd_in': 'sd_IN.UTF-8', + 'sd_in@devanagari': 'sd_IN.UTF-8@devanagari', + 'sd_in@devanagari.utf8': 'sd_IN.UTF-8@devanagari', + 'sd_pk': 'sd_PK.UTF-8', 'se_no': 'se_NO.UTF-8', 'serbocroatian': 'sr_RS.UTF-8@latin', 'sh': 'sr_RS.UTF-8@latin', @@ -1423,8 +1586,10 @@ def getpreferredencoding(do_setlocale = True): 'sh_hr.iso88592': 'hr_HR.ISO8859-2', 'sh_sp': 'sr_CS.ISO8859-2', 'sh_yu': 'sr_RS.UTF-8@latin', + 'shs_ca': 'shs_CA.UTF-8', 'si': 'si_LK.UTF-8', 'si_lk': 'si_LK.UTF-8', + 'sid_et': 'sid_ET.UTF-8', 'sinhala': 'si_LK.UTF-8', 'sk': 'sk_SK.ISO8859-2', 'sk_sk': 'sk_SK.ISO8859-2', @@ -1436,6 +1601,10 @@ def getpreferredencoding(do_setlocale = True): 'slovak': 'sk_SK.ISO8859-2', 'slovene': 'sl_SI.ISO8859-2', 'slovenian': 'sl_SI.ISO8859-2', + 'so_dj': 'so_DJ.ISO8859-1', + 'so_et': 'so_ET.UTF-8', + 'so_ke': 'so_KE.ISO8859-1', + 'so_so': 'so_SO.ISO8859-1', 'sp': 'sr_CS.ISO8859-5', 'sp_yu': 'sr_CS.ISO8859-5', 'spanish': 'es_ES.ISO8859-1', @@ -1445,19 +1614,19 @@ def getpreferredencoding(do_setlocale = True): 'sq': 'sq_AL.ISO8859-2', 'sq_al': 'sq_AL.ISO8859-2', 'sq_al.iso88592': 'sq_AL.ISO8859-2', + 'sq_mk': 'sq_MK.UTF-8', 'sr': 'sr_RS.UTF-8', 'sr@cyrillic': 'sr_RS.UTF-8', 'sr@latin': 'sr_RS.UTF-8@latin', - 'sr@latn': 'sr_RS.UTF-8@latin', - 'sr_cs': 'sr_RS.UTF-8', + 'sr@latn': 'sr_CS.UTF-8@latin', + 'sr_cs': 'sr_CS.UTF-8', 'sr_cs.iso88592': 'sr_CS.ISO8859-2', 'sr_cs.iso88592@latn': 'sr_CS.ISO8859-2', 'sr_cs.iso88595': 'sr_CS.ISO8859-5', - 'sr_cs.utf8@latn': 'sr_RS.UTF-8@latin', - 'sr_cs@latn': 'sr_RS.UTF-8@latin', + 'sr_cs.utf8@latn': 'sr_CS.UTF-8@latin', + 'sr_cs@latn': 'sr_CS.UTF-8@latin', 'sr_me': 'sr_ME.UTF-8', 'sr_rs': 'sr_RS.UTF-8', - 'sr_rs.utf8@latn': 'sr_RS.UTF-8@latin', 'sr_rs@latin': 'sr_RS.UTF-8@latin', 'sr_rs@latn': 'sr_RS.UTF-8@latin', 'sr_sp': 'sr_CS.ISO8859-2', @@ -1467,6 +1636,7 @@ def getpreferredencoding(do_setlocale = True): 'sr_yu.iso88595': 'sr_CS.ISO8859-5', 'sr_yu.iso88595@cyrillic': 'sr_CS.ISO8859-5', 'sr_yu.microsoftcp1251@cyrillic': 'sr_CS.CP1251', + 'sr_yu.utf8': 'sr_RS.UTF-8', 'sr_yu.utf8@cyrillic': 'sr_RS.UTF-8', 'sr_yu@cyrillic': 'sr_RS.UTF-8', 'ss': 'ss_ZA.ISO8859-1', @@ -1488,13 +1658,18 @@ def getpreferredencoding(do_setlocale = True): 'sv_se.iso88591': 'sv_SE.ISO8859-1', 'sv_se.iso885915': 'sv_SE.ISO8859-15', 'sv_se@euro': 'sv_SE.ISO8859-15', + 'sw_ke': 'sw_KE.UTF-8', + 'sw_tz': 'sw_TZ.UTF-8', 'swedish': 'sv_SE.ISO8859-1', 'swedish.iso88591': 'sv_SE.ISO8859-1', + 'szl_pl': 'szl_PL.UTF-8', 'ta': 'ta_IN.TSCII-0', 'ta_in': 'ta_IN.TSCII-0', 'ta_in.tscii': 'ta_IN.TSCII-0', 'ta_in.tscii0': 'ta_IN.TSCII-0', + 'ta_lk': 'ta_LK.UTF-8', 'te': 'te_IN.UTF-8', + 'te_in': 'te_IN.UTF-8', 'tg': 'tg_TJ.KOI8-C', 'tg_tj': 'tg_TJ.KOI8-C', 'tg_tj.koi8c': 'tg_TJ.KOI8-C', @@ -1504,6 +1679,10 @@ def getpreferredencoding(do_setlocale = True): 'th_th.tactis': 'th_TH.TIS620', 'th_th.tis620': 'th_TH.TIS620', 'thai': 'th_TH.ISO8859-11', + 'ti_er': 'ti_ER.UTF-8', + 'ti_et': 'ti_ET.UTF-8', + 'tig_er': 'tig_ER.UTF-8', + 'tk_tm': 'tk_TM.UTF-8', 'tl': 'tl_PH.ISO8859-1', 'tl_ph': 'tl_PH.ISO8859-1', 'tl_ph.iso88591': 'tl_PH.ISO8859-1', @@ -1511,6 +1690,7 @@ def getpreferredencoding(do_setlocale = True): 'tn_za': 'tn_ZA.ISO8859-15', 'tn_za.iso885915': 'tn_ZA.ISO8859-15', 'tr': 'tr_TR.ISO8859-9', + 'tr_cy': 'tr_CY.ISO8859-9', 'tr_tr': 'tr_TR.ISO8859-9', 'tr_tr.iso88599': 'tr_TR.ISO8859-9', 'ts': 'ts_ZA.ISO8859-1', @@ -1520,8 +1700,10 @@ def getpreferredencoding(do_setlocale = True): 'tt_ru': 'tt_RU.TATAR-CYR', 'tt_ru.koi8c': 'tt_RU.KOI8-C', 'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR', + 'tt_ru@iqtelif': 'tt_RU.UTF-8@iqtelif', 'turkish': 'tr_TR.ISO8859-9', 'turkish.iso88599': 'tr_TR.ISO8859-9', + 'ug_cn': 'ug_CN.UTF-8', 'uk': 'uk_UA.KOI8-U', 'uk_ua': 'uk_UA.KOI8-U', 'uk_ua.cp1251': 'uk_UA.CP1251', @@ -1531,7 +1713,9 @@ def getpreferredencoding(do_setlocale = True): 'univ': 'en_US.utf', 'universal': 'en_US.utf', 'universal.utf8@ucs4': 'en_US.UTF-8', + 'unm_us': 'unm_US.UTF-8', 'ur': 'ur_PK.CP1256', + 'ur_in': 'ur_IN.UTF-8', 'ur_pk': 'ur_PK.CP1256', 'ur_pk.cp1256': 'ur_PK.CP1256', 'ur_pk.microsoftcp1256': 'ur_PK.CP1256', @@ -1554,6 +1738,9 @@ def getpreferredencoding(do_setlocale = True): 'wa_be.iso885915': 'wa_BE.ISO8859-15', 'wa_be.iso885915@euro': 'wa_BE.ISO8859-15', 'wa_be@euro': 'wa_BE.ISO8859-15', + 'wae_ch': 'wae_CH.UTF-8', + 'wal_et': 'wal_ET.UTF-8', + 'wo_sn': 'wo_SN.UTF-8', 'xh': 'xh_ZA.ISO8859-1', 'xh_za': 'xh_ZA.ISO8859-1', 'xh_za.iso88591': 'xh_ZA.ISO8859-1', @@ -1561,6 +1748,8 @@ def getpreferredencoding(do_setlocale = True): 'yi_us': 'yi_US.CP1255', 'yi_us.cp1255': 'yi_US.CP1255', 'yi_us.microsoftcp1255': 'yi_US.CP1255', + 'yo_ng': 'yo_NG.UTF-8', + 'yue_hk': 'yue_HK.UTF-8', 'zh': 'zh_CN.eucCN', 'zh_cn': 'zh_CN.gb2312', 'zh_cn.big5': 'zh_TW.big5', @@ -1572,6 +1761,8 @@ def getpreferredencoding(do_setlocale = True): 'zh_hk.big5': 'zh_HK.big5', 'zh_hk.big5hk': 'zh_HK.big5hkscs', 'zh_hk.big5hkscs': 'zh_HK.big5hkscs', + 'zh_sg': 'zh_SG.GB2312', + 'zh_sg.gbk': 'zh_SG.GBK', 'zh_tw': 'zh_TW.big5', 'zh_tw.big5': 'zh_TW.big5', 'zh_tw.euc': 'zh_TW.eucTW', @@ -1653,7 +1844,7 @@ def getpreferredencoding(do_setlocale = True): 0x1809: "en_IE", # English - Ireland 0x1c09: "en_ZA", # English - South Africa 0x2009: "en_JA", # English - Jamaica - 0x2409: "en_CB", # English - Carribbean + 0x2409: "en_CB", # English - Caribbean 0x2809: "en_BZ", # English - Belize 0x2c09: "en_TT", # English - Trinidad 0x3009: "en_ZW", # English - Zimbabwe diff --git a/PythonLib/full/logging/__init__.py b/PythonLib/full/logging/__init__.py index cda781a4..22205825 100644 --- a/PythonLib/full/logging/__init__.py +++ b/PythonLib/full/logging/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2001-2012 by Vinay Sajip. All Rights Reserved. +# Copyright 2001-2014 by Vinay Sajip. All Rights Reserved. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, @@ -18,12 +18,12 @@ Logging package for Python. Based on PEP 282 and comments thereto in comp.lang.python. -Copyright (C) 2001-2012 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2014 Vinay Sajip. All Rights Reserved. To use, simply 'import logging' and log away! """ -import sys, os, time, cStringIO, traceback, warnings, weakref +import sys, os, time, cStringIO, traceback, warnings, weakref, collections __all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR', 'FATAL', 'FileHandler', 'Filter', 'Formatter', 'Handler', 'INFO', @@ -46,6 +46,7 @@ __author__ = "Vinay Sajip " __status__ = "production" +# Note: the attributes below are no longer maintained. __version__ = "0.5.1.2" __date__ = "07 February 2010" @@ -58,18 +59,6 @@ except NameError: _unicode = False -# -# _srcfile is used when walking the stack to check when we've got the first -# caller stack frame. -# -if hasattr(sys, 'frozen'): #support for py2exe - _srcfile = "logging%s__init__%s" % (os.sep, __file__[-4:]) -elif __file__[-4:].lower() in ['.pyc', '.pyo']: - _srcfile = __file__[:-4] + '.py' -else: - _srcfile = __file__ -_srcfile = os.path.normcase(_srcfile) - # next bit filched from 1.5.2's inspect.py def currentframe(): """Return the frame object for the caller's stack frame.""" @@ -81,6 +70,12 @@ def currentframe(): if hasattr(sys, '_getframe'): currentframe = lambda: sys._getframe(3) # done filching +# +# _srcfile is used when walking the stack to check when we've got the first +# caller stack frame. +# +_srcfile = os.path.normcase(currentframe.__code__.co_filename) + # _srcfile is only used in conjunction with sys._getframe(). # To provide compatibility with older versions of Python, set _srcfile # to None if _getframe() is not available; this value will prevent @@ -260,7 +255,13 @@ def __init__(self, name, level, pathname, lineno, # 'Value is %d' instead of 'Value is 0'. # For the use case of passing a dictionary, this should not be a # problem. - if args and len(args) == 1 and isinstance(args[0], dict) and args[0]: + # Issue #21172: a request was made to relax the isinstance check + # to hasattr(args[0], '__getitem__'). However, the docs on string + # formatting still seem to suggest a mapping object is required. + # Thus, while not removing the isinstance check, it does now look + # for collections.Mapping rather than, as before, dict. + if (args and len(args) == 1 and isinstance(args[0], collections.Mapping) + and args[0]): args = args[0] self.args = args self.levelname = getLevelName(level) @@ -464,7 +465,15 @@ def format(self, record): record.message = record.getMessage() if self.usesTime(): record.asctime = self.formatTime(record, self.datefmt) - s = self._fmt % record.__dict__ + try: + s = self._fmt % record.__dict__ + except UnicodeDecodeError as e: + # Issue 25664. The logger name may be Unicode. Try again ... + try: + record.name = record.name.decode('utf-8') + s = self._fmt % record.__dict__ + except UnicodeDecodeError: + raise e if record.exc_info: # Cache the traceback text to avoid converting it multiple times # (it's constant anyway) @@ -622,16 +631,17 @@ def _removeHandlerRef(wr): Remove a handler reference from the internal cleanup list. """ # This function can be called during module teardown, when globals are - # set to None. If _acquireLock is None, assume this is the case and do - # nothing. - if (_acquireLock is not None and _handlerList is not None and - _releaseLock is not None): - _acquireLock() + # set to None. It can also be called from another thread. So we need to + # pre-emptively grab the necessary globals and check if they're None, + # to prevent race conditions and failures during interpreter shutdown. + acquire, release, handlers = _acquireLock, _releaseLock, _handlerList + if acquire and release and handlers: + acquire() try: - if wr in _handlerList: - _handlerList.remove(wr) + if wr in handlers: + handlers.remove(wr) finally: - _releaseLock() + release() def _addHandlerRef(handler): """ @@ -908,12 +918,19 @@ def close(self): """ self.acquire() try: - if self.stream: - self.flush() - if hasattr(self.stream, "close"): - self.stream.close() + try: + if self.stream: + try: + self.flush() + finally: + stream = self.stream + self.stream = None + if hasattr(stream, "close"): + stream.close() + finally: + # Issue #19523: call unconditionally to + # prevent a handler leak when delay is set StreamHandler.close(self) - self.stream = None finally: self.release() @@ -1205,7 +1222,7 @@ def log(self, level, msg, *args, **kwargs): logger.log(level, "We have a %s", "mysterious problem", exc_info=1) """ - if not isinstance(level, int): + if not isinstance(level, (int, long)): if raiseExceptions: raise TypeError("level must be an integer") else: diff --git a/PythonLib/full/logging/config.py b/PythonLib/full/logging/config.py index e2b0163e..8b379567 100644 --- a/PythonLib/full/logging/config.py +++ b/PythonLib/full/logging/config.py @@ -1,4 +1,4 @@ -# Copyright 2001-2013 by Vinay Sajip. All Rights Reserved. +# Copyright 2001-2014 by Vinay Sajip. All Rights Reserved. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, @@ -19,13 +19,23 @@ is based on PEP 282 and comments thereto in comp.lang.python, and influenced by Apache's log4j system. -Copyright (C) 2001-2013 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2014 Vinay Sajip. All Rights Reserved. To use, simply 'import logging' and log away! """ -import sys, logging, logging.handlers, socket, struct, os, traceback, re -import types, cStringIO +import cStringIO +import errno +import io +import logging +import logging.handlers +import os +import re +import socket +import struct +import sys +import traceback +import types try: import thread @@ -38,10 +48,7 @@ DEFAULT_LOGGING_CONFIG_PORT = 9030 -if sys.platform == "win32": - RESET_ERROR = 10054 #WSAECONNRESET -else: - RESET_ERROR = 104 #ECONNRESET +RESET_ERROR = errno.ECONNRESET # # The following code implements a socket listener for on-the-fly @@ -275,6 +282,30 @@ def valid_ident(s): return True +class ConvertingMixin(object): + """For ConvertingXXX's, this mixin class provides common functions""" + + def convert_with_key(self, key, value, replace=True): + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + if replace: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def convert(self, value): + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + return result + + # The ConvertingXXX classes are wrappers around standard Python containers, # and they serve to convert any suitable values in the container. The # conversion converts base dicts, lists and tuples to their wrapped @@ -284,77 +315,37 @@ def valid_ident(s): # Each wrapper should have a configurator attribute holding the actual # configurator to use for conversion. -class ConvertingDict(dict): +class ConvertingDict(dict, ConvertingMixin): """A converting dictionary wrapper.""" def __getitem__(self, key): value = dict.__getitem__(self, key) - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result + return self.convert_with_key(key, value) def get(self, key, default=None): value = dict.get(self, key, default) - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result + return self.convert_with_key(key, value) def pop(self, key, default=None): value = dict.pop(self, key, default) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result + return self.convert_with_key(key, value, replace=False) -class ConvertingList(list): +class ConvertingList(list, ConvertingMixin): """A converting list wrapper.""" def __getitem__(self, key): value = list.__getitem__(self, key) - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result + return self.convert_with_key(key, value) def pop(self, idx=-1): value = list.pop(self, idx) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - return result + return self.convert(value) -class ConvertingTuple(tuple): +class ConvertingTuple(tuple, ConvertingMixin): """A converting tuple wrapper.""" def __getitem__(self, key): value = tuple.__getitem__(self, key) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result + # Can't replace a tuple entry. + return self.convert_with_key(key, value, replace=False) class BaseConfigurator(object): """ @@ -526,21 +517,21 @@ def configure(self): level = handler_config.get('level', None) if level: handler.setLevel(logging._checkLevel(level)) - except StandardError, e: + except StandardError as e: raise ValueError('Unable to configure handler ' '%r: %s' % (name, e)) loggers = config.get('loggers', EMPTY_DICT) for name in loggers: try: self.configure_logger(name, loggers[name], True) - except StandardError, e: + except StandardError as e: raise ValueError('Unable to configure logger ' '%r: %s' % (name, e)) root = config.get('root', None) if root: try: self.configure_root(root, True) - except StandardError, e: + except StandardError as e: raise ValueError('Unable to configure root ' 'logger: %s' % e) else: @@ -555,7 +546,7 @@ def configure(self): try: formatters[name] = self.configure_formatter( formatters[name]) - except StandardError, e: + except StandardError as e: raise ValueError('Unable to configure ' 'formatter %r: %s' % (name, e)) # Next, do filters - they don't refer to anything else, either @@ -563,7 +554,7 @@ def configure(self): for name in filters: try: filters[name] = self.configure_filter(filters[name]) - except StandardError, e: + except StandardError as e: raise ValueError('Unable to configure ' 'filter %r: %s' % (name, e)) @@ -577,7 +568,7 @@ def configure(self): handler = self.configure_handler(handlers[name]) handler.name = name handlers[name] = handler - except StandardError, e: + except StandardError as e: if 'target not configured yet' in str(e): deferred.append(name) else: @@ -590,7 +581,7 @@ def configure(self): handler = self.configure_handler(handlers[name]) handler.name = name handlers[name] = handler - except StandardError, e: + except StandardError as e: raise ValueError('Unable to configure handler ' '%r: %s' % (name, e)) @@ -631,7 +622,7 @@ def configure(self): existing.remove(name) try: self.configure_logger(name, loggers[name]) - except StandardError, e: + except StandardError as e: raise ValueError('Unable to configure logger ' '%r: %s' % (name, e)) @@ -654,7 +645,7 @@ def configure(self): if root: try: self.configure_root(root) - except StandardError, e: + except StandardError as e: raise ValueError('Unable to configure root ' 'logger: %s' % e) finally: @@ -666,7 +657,7 @@ def configure_formatter(self, config): factory = config['()'] # for use in exception handler try: result = self.configure_custom(config) - except TypeError, te: + except TypeError as te: if "'format'" not in str(te): raise #Name of parameter changed from fmt to format. @@ -696,7 +687,7 @@ def add_filters(self, filterer, filters): for f in filters: try: filterer.addFilter(self.config['filters'][f]) - except StandardError, e: + except StandardError as e: raise ValueError('Unable to add filter %r: %s' % (f, e)) def configure_handler(self, config): @@ -705,7 +696,7 @@ def configure_handler(self, config): if formatter: try: formatter = self.config['formatters'][formatter] - except StandardError, e: + except StandardError as e: raise ValueError('Unable to set formatter ' '%r: %s' % (formatter, e)) level = config.pop('level', None) @@ -727,7 +718,7 @@ def configure_handler(self, config): config['class'] = cname # restore for deferred configuration raise StandardError('target not configured yet') config['target'] = th - except StandardError, e: + except StandardError as e: raise ValueError('Unable to set target handler ' '%r: %s' % (config['target'], e)) elif issubclass(klass, logging.handlers.SMTPHandler) and\ @@ -740,7 +731,7 @@ def configure_handler(self, config): kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) try: result = factory(**kwargs) - except TypeError, te: + except TypeError as te: if "'stream'" not in str(te): raise #The argument name changed from strm to stream @@ -762,7 +753,7 @@ def add_handlers(self, logger, handlers): for h in handlers: try: logger.addHandler(self.config['handlers'][h]) - except StandardError, e: + except StandardError as e: raise ValueError('Unable to add handler %r: %s' % (h, e)) def common_logger_config(self, logger, config, incremental=False): @@ -857,13 +848,9 @@ def handle(self): traceback.print_exc() if self.server.ready: self.server.ready.set() - except socket.error, e: - if not isinstance(e.args, tuple): + except socket.error as e: + if e.errno != RESET_ERROR: raise - else: - errcode = e.args[0] - if errcode != RESET_ERROR: - raise class ConfigSocketReceiver(ThreadingTCPServer): """ diff --git a/PythonLib/full/logging/handlers.py b/PythonLib/full/logging/handlers.py index c45a3132..e0b935c8 100644 --- a/PythonLib/full/logging/handlers.py +++ b/PythonLib/full/logging/handlers.py @@ -423,6 +423,7 @@ def emit(self, record): # we have an open file handle, clean it up self.stream.flush() self.stream.close() + self.stream = None # See Issue #21742: _open () might fail. # open a new file handle and get new stat info from that fd self.stream = self._open() self._statstream() @@ -587,9 +588,10 @@ def close(self): """ self.acquire() try: - if self.sock: - self.sock.close() + sock = self.sock + if sock: self.sock = None + sock.close() finally: self.release() logging.Handler.close(self) @@ -758,14 +760,29 @@ def __init__(self, address=('localhost', SYSLOG_UDP_PORT), self.unixsocket = 1 self._connect_unixsocket(address) else: - self.unixsocket = 0 + self.unixsocket = False if socktype is None: socktype = socket.SOCK_DGRAM - self.socket = socket.socket(socket.AF_INET, socktype) - if socktype == socket.SOCK_STREAM: - self.socket.connect(address) + host, port = address + ress = socket.getaddrinfo(host, port, 0, socktype) + if not ress: + raise socket.error("getaddrinfo returns an empty list") + for res in ress: + af, socktype, proto, _, sa = res + err = sock = None + try: + sock = socket.socket(af, socktype, proto) + if socktype == socket.SOCK_STREAM: + sock.connect(sa) + break + except socket.error as exc: + err = exc + if sock is not None: + sock.close() + if err is not None: + raise err + self.socket = sock self.socktype = socktype - self.formatter = None def _connect_unixsocket(self, address): use_socktype = self.socktype @@ -810,7 +827,7 @@ def encodePriority(self, facility, priority): priority = self.priority_names[priority] return (facility << 3) | priority - def close (self): + def close(self): """ Closes the socket. """ @@ -839,18 +856,18 @@ def emit(self, record): The record is formatted, and then sent to the syslog server. If exception information is present, it is NOT sent to the server. """ - msg = self.format(record) + '\000' - """ - We need to convert record level to lowercase, maybe this will - change in the future. - """ - prio = '<%d>' % self.encodePriority(self.facility, - self.mapPriority(record.levelname)) - # Message is a string. Convert to bytes as required by RFC 5424 - if type(msg) is unicode: - msg = msg.encode('utf-8') - msg = prio + msg try: + msg = self.format(record) + '\000' + """ + We need to convert record level to lowercase, maybe this will + change in the future. + """ + prio = '<%d>' % self.encodePriority(self.facility, + self.mapPriority(record.levelname)) + # Message is a string. Convert to bytes as required by RFC 5424 + if type(msg) is unicode: + msg = msg.encode('utf-8') + msg = prio + msg if self.unixsocket: try: self.socket.send(msg) @@ -888,11 +905,11 @@ def __init__(self, mailhost, fromaddr, toaddrs, subject, certificate file. (This tuple is passed to the `starttls` method). """ logging.Handler.__init__(self) - if isinstance(mailhost, tuple): + if isinstance(mailhost, (list, tuple)): self.mailhost, self.mailport = mailhost else: self.mailhost, self.mailport = mailhost, None - if isinstance(credentials, tuple): + if isinstance(credentials, (list, tuple)): self.username, self.password = credentials else: self.username = None @@ -1067,7 +1084,7 @@ def mapLogRecord(self, record): """ Default implementation of mapping the log record into a dict that is sent as the CGI data. Overwrite in your class. - Contributed by Franz Glasner. + Contributed by Franz Glasner. """ return record.__dict__ @@ -1159,8 +1176,10 @@ def close(self): This version just flushes and chains to the parent class' close(). """ - self.flush() - logging.Handler.close(self) + try: + self.flush() + finally: + logging.Handler.close(self) class MemoryHandler(BufferingHandler): """ @@ -1212,10 +1231,12 @@ def close(self): """ Flush, set the target to None and lose the buffer. """ - self.flush() - self.acquire() try: - self.target = None - BufferingHandler.close(self) + self.flush() finally: - self.release() + self.acquire() + try: + self.target = None + BufferingHandler.close(self) + finally: + self.release() diff --git a/PythonLib/full/macpath.py b/PythonLib/full/macpath.py index cd4cb858..9ebd83cf 100644 --- a/PythonLib/full/macpath.py +++ b/PythonLib/full/macpath.py @@ -5,6 +5,7 @@ from stat import * import genericpath from genericpath import * +from genericpath import _unicode __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "basename","dirname","commonprefix","getsize","getmtime", @@ -42,7 +43,7 @@ def isabs(s): def join(s, *p): path = s for t in p: - if (not s) or isabs(t): + if (not path) or isabs(t): path = t continue if t[:1] == ':': @@ -186,7 +187,7 @@ def walk(top, func, arg): def abspath(path): """Return an absolute path.""" if not isabs(path): - if isinstance(path, unicode): + if isinstance(path, _unicode): cwd = os.getcwdu() else: cwd = os.getcwd() diff --git a/PythonLib/full/mailbox.py b/PythonLib/full/mailbox.py index 4cdd7d45..b1e5faaf 100644 --- a/PythonLib/full/mailbox.py +++ b/PythonLib/full/mailbox.py @@ -1,5 +1,3 @@ -#! /usr/bin/env python - """Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.""" # Notes for authors of new mailbox subclasses: @@ -721,10 +719,14 @@ def _post_message_hook(self, f): def close(self): """Flush and close the mailbox.""" - self.flush() - if self._locked: - self.unlock() - self._file.close() # Sync has been done by self.flush() above. + try: + self.flush() + finally: + try: + if self._locked: + self.unlock() + finally: + self._file.close() # Sync has been done by self.flush() above. def _lookup(self, key=None): """Return (start, stop) or raise KeyError.""" @@ -1772,7 +1774,7 @@ class BabylMessage(Message): """Message with Babyl-specific properties.""" def __init__(self, message=None): - """Initialize an BabylMessage instance.""" + """Initialize a BabylMessage instance.""" self._labels = [] self._visible = Message() Message.__init__(self, message) diff --git a/PythonLib/full/mailcap.py b/PythonLib/full/mailcap.py index b2ddacd0..04077ba0 100644 --- a/PythonLib/full/mailcap.py +++ b/PythonLib/full/mailcap.py @@ -22,8 +22,8 @@ def getcaps(): fp = open(mailcap, 'r') except IOError: continue - morecaps = readmailcapfile(fp) - fp.close() + with fp: + morecaps = readmailcapfile(fp) for key, value in morecaps.iteritems(): if not key in caps: caps[key] = value diff --git a/PythonLib/full/mhlib.py b/PythonLib/full/mhlib.py index 856e8780..46311fc2 100644 --- a/PythonLib/full/mhlib.py +++ b/PythonLib/full/mhlib.py @@ -159,7 +159,7 @@ def listsubfolders(self, name): # Get the link count so we can avoid listing folders # that have no subfolders. nlinks = os.stat(fullname).st_nlink - if nlinks <= 2: + if nlinks == 2: return [] subfolders = [] subnames = os.listdir(fullname) @@ -171,7 +171,7 @@ def listsubfolders(self, name): # Stop looking for subfolders when # we've seen them all nlinks = nlinks - 1 - if nlinks <= 2: + if nlinks == 2: break subfolders.sort() return subfolders @@ -186,7 +186,7 @@ def listallsubfolders(self, name): # Get the link count so we can avoid listing folders # that have no subfolders. nlinks = os.stat(fullname).st_nlink - if nlinks <= 2: + if nlinks == 2: return [] subfolders = [] subnames = os.listdir(fullname) @@ -203,7 +203,7 @@ def listallsubfolders(self, name): # Stop looking for subfolders when # we've seen them all nlinks = nlinks - 1 - if nlinks <= 2: + if nlinks == 2: break subfolders.sort() return subfolders diff --git a/PythonLib/full/mimetypes.py b/PythonLib/full/mimetypes.py index 3dde4cd9..157d4555 100644 --- a/PythonLib/full/mimetypes.py +++ b/PythonLib/full/mimetypes.py @@ -245,12 +245,9 @@ def enum_types(mimedb): ctype = _winreg.EnumKey(mimedb, i) except EnvironmentError: break - try: - ctype = ctype.encode(default_encoding) # omit in 3.x! - except UnicodeEncodeError: - pass else: - yield ctype + if '\0' not in ctype: + yield ctype i += 1 default_encoding = sys.getdefaultencoding() @@ -268,7 +265,6 @@ def enum_types(mimedb): continue try: mimetype = mimetype.encode(default_encoding) - subkeyname = subkeyname.encode(default_encoding) except UnicodeEncodeError: continue self.add_type(mimetype, subkeyname, strict) @@ -373,9 +369,10 @@ def read_mime_types(file): f = open(file) except IOError: return None - db = MimeTypes() - db.readfp(f, True) - return db.types_map[True] + with f: + db = MimeTypes() + db.readfp(f, True) + return db.types_map[True] def _default_mime_types(): @@ -385,6 +382,7 @@ def _default_mime_types(): global common_types suffix_map = { + '.svgz': '.svg.gz', '.tgz': '.tar.gz', '.taz': '.tar.gz', '.tz': '.tar.gz', @@ -423,6 +421,7 @@ def _default_mime_types(): '.cpio' : 'application/x-cpio', '.csh' : 'application/x-csh', '.css' : 'text/css', + '.csv' : 'text/csv', '.dll' : 'application/octet-stream', '.doc' : 'application/msword', '.dot' : 'application/msword', @@ -502,6 +501,7 @@ def _default_mime_types(): '.src' : 'application/x-wais-source', '.sv4cpio': 'application/x-sv4cpio', '.sv4crc' : 'application/x-sv4crc', + '.svg' : 'image/svg+xml', '.swf' : 'application/x-shockwave-flash', '.t' : 'application/x-troff', '.tar' : 'application/x-tar', @@ -517,6 +517,7 @@ def _default_mime_types(): '.ustar' : 'application/x-ustar', '.vcf' : 'text/x-vcard', '.wav' : 'audio/x-wav', + '.webm' : 'video/webm', '.wiz' : 'application/msword', '.wsdl' : 'application/xml', '.xbm' : 'image/x-xbitmap', diff --git a/PythonLib/full/modulefinder.py b/PythonLib/full/modulefinder.py index f6f84f3f..e2fee418 100644 --- a/PythonLib/full/modulefinder.py +++ b/PythonLib/full/modulefinder.py @@ -1,5 +1,4 @@ """Find modules used by a script, using introspection.""" -# This module should be kept compatible with Python 2.2, see PEP 291. from __future__ import generators import dis @@ -13,15 +12,35 @@ if hasattr(sys.__stdout__, "newlines"): READ_MODE = "U" # universal line endings else: - # remain compatible with Python < 2.3 + # Python < 2.3 compatibility, no longer strictly required READ_MODE = "r" -LOAD_CONST = chr(dis.opname.index('LOAD_CONST')) -IMPORT_NAME = chr(dis.opname.index('IMPORT_NAME')) -STORE_NAME = chr(dis.opname.index('STORE_NAME')) -STORE_GLOBAL = chr(dis.opname.index('STORE_GLOBAL')) -STORE_OPS = [STORE_NAME, STORE_GLOBAL] -HAVE_ARGUMENT = chr(dis.HAVE_ARGUMENT) +LOAD_CONST = dis.opmap['LOAD_CONST'] +IMPORT_NAME = dis.opmap['IMPORT_NAME'] +STORE_NAME = dis.opmap['STORE_NAME'] +STORE_GLOBAL = dis.opmap['STORE_GLOBAL'] +STORE_OPS = STORE_NAME, STORE_GLOBAL +HAVE_ARGUMENT = dis.HAVE_ARGUMENT +EXTENDED_ARG = dis.EXTENDED_ARG + +def _unpack_opargs(code): + # enumerate() is not an option, since we sometimes process + # multiple elements on a single pass through the loop + extended_arg = 0 + n = len(code) + i = 0 + while i < n: + op = ord(code[i]) + offset = i + i = i+1 + arg = None + if op >= HAVE_ARGUMENT: + arg = ord(code[i]) + ord(code[i+1])*256 + extended_arg + extended_arg = 0 + i = i+2 + if op == EXTENDED_ARG: + extended_arg = arg*65536 + yield (offset, op, arg) # Modulefinder does a good job at simulating Python's, but it can not # handle __path__ modifications packages make at runtime. Therefore there @@ -109,16 +128,16 @@ def msgout(self, *args): def run_script(self, pathname): self.msg(2, "run_script", pathname) - fp = open(pathname, READ_MODE) - stuff = ("", "r", imp.PY_SOURCE) - self.load_module('__main__', fp, pathname, stuff) + with open(pathname, READ_MODE) as fp: + stuff = ("", "r", imp.PY_SOURCE) + self.load_module('__main__', fp, pathname, stuff) def load_file(self, pathname): dir, name = os.path.split(pathname) name, ext = os.path.splitext(name) - fp = open(pathname, READ_MODE) - stuff = (ext, "r", imp.PY_SOURCE) - self.load_module(name, fp, pathname, stuff) + with open(pathname, READ_MODE) as fp: + stuff = (ext, "r", imp.PY_SOURCE) + self.load_module(name, fp, pathname, stuff) def import_hook(self, name, caller=None, fromlist=None, level=-1): self.msg(3, "import_hook", name, caller, fromlist, level) @@ -344,53 +363,40 @@ def scan_opcodes(self, co, code = co.co_code names = co.co_names consts = co.co_consts - while code: - c = code[0] + opargs = [(op, arg) for _, op, arg in _unpack_opargs(code) + if op != EXTENDED_ARG] + for i, (op, oparg) in enumerate(opargs): if c in STORE_OPS: - oparg, = unpack('= 1 + and opargs[i-1][0] == LOAD_CONST): + fromlist = consts[opargs[i-1][1]] + yield "import", (fromlist, names[oparg]) continue - if c >= HAVE_ARGUMENT: - code = code[3:] - else: - code = code[1:] - def scan_opcodes_25(self, co, - unpack = struct.unpack): + def scan_opcodes_25(self, co): # Scan the code, and yield 'interesting' opcode combinations - # Python 2.5 version (has absolute and relative imports) code = co.co_code names = co.co_names consts = co.co_consts - LOAD_LOAD_AND_IMPORT = LOAD_CONST + LOAD_CONST + IMPORT_NAME - while code: - c = code[0] - if c in STORE_OPS: - oparg, = unpack('= 2 + and opargs[i-1][0] == opargs[i-2][0] == LOAD_CONST): + level = consts[opargs[i-2][1]] + fromlist = consts[opargs[i-1][1]] if level == -1: # normal import - yield "import", (consts[oparg_2], names[oparg_3]) + yield "import", (fromlist, names[oparg]) elif level == 0: # absolute import - yield "absolute_import", (consts[oparg_2], names[oparg_3]) + yield "absolute_import", (fromlist, names[oparg]) else: # relative import - yield "relative_import", (level, consts[oparg_2], names[oparg_3]) - code = code[9:] + yield "relative_import", (level, fromlist, names[oparg]) continue - if c >= HAVE_ARGUMENT: - code = code[3:] - else: - code = code[1:] def scan_code(self, co, m): code = co.co_code @@ -461,6 +467,8 @@ def load_package(self, fqname, pathname): fp, buf, stuff = self.find_module("__init__", m.__path__) self.load_module(fqname, fp, buf, stuff) self.msgout(2, "load_package ->", m) + if fp: + fp.close() return m def add_module(self, fqname): diff --git a/PythonLib/full/msilib/__init__.py b/PythonLib/full/msilib/__init__.py index 907a739d..0352b60c 100644 --- a/PythonLib/full/msilib/__init__.py +++ b/PythonLib/full/msilib/__init__.py @@ -2,7 +2,11 @@ # Copyright (C) 2005 Martin v. Löwis # Licensed to PSF under a Contributor Agreement. from _msi import * -import os, string, re, sys +import glob +import os +import re +import string +import sys AMD64 = "AMD64" in sys.version Itanium = "Itanium" in sys.version diff --git a/PythonLib/full/msilib/schema.py b/PythonLib/full/msilib/schema.py index 003f0407..e1321947 100644 --- a/PythonLib/full/msilib/schema.py +++ b/PythonLib/full/msilib/schema.py @@ -731,9 +731,9 @@ (u'CustomAction',u'Type',u'N',1,16383,None, None, None, None, u'The numeric custom action type, consisting of source location, code type, entry, option flags.',), (u'CustomAction',u'Action',u'N',None, None, None, None, u'Identifier',None, u'Primary key, name of action, normally appears in sequence table unless private use.',), (u'CustomAction',u'Source',u'Y',None, None, None, None, u'CustomSource',None, u'The table reference of the source of the code.',), -(u'CustomAction',u'Target',u'Y',None, None, None, None, u'Formatted',None, u'Excecution parameter, depends on the type of custom action',), +(u'CustomAction',u'Target',u'Y',None, None, None, None, u'Formatted',None, u'Execution parameter, depends on the type of custom action',), (u'DrLocator',u'Signature_',u'N',None, None, None, None, u'Identifier',None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature table.',), -(u'DrLocator',u'Path',u'Y',None, None, None, None, u'AnyPath',None, u'The path on the user system. This is a either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.',), +(u'DrLocator',u'Path',u'Y',None, None, None, None, u'AnyPath',None, u'The path on the user system. This is either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.',), (u'DrLocator',u'Depth',u'Y',0,32767,None, None, None, None, u'The depth below the path to which the Signature_ is recursively searched. If absent, the depth is assumed to be 0.',), (u'DrLocator',u'Parent',u'Y',None, None, None, None, u'Identifier',None, u'The parent file signature. It is also a foreign key in the Signature table. If null and the Path column does not expand to a full path, then all the fixed drives of the user system are searched using the Path.',), (u'DuplicateFile',u'File_',u'N',None, None, u'File',1,u'Identifier',None, u'Foreign key referencing the source file to be duplicated.',), diff --git a/PythonLib/full/multiprocessing/connection.py b/PythonLib/full/multiprocessing/connection.py index 1a29c36f..645a26f0 100644 --- a/PythonLib/full/multiprocessing/connection.py +++ b/PythonLib/full/multiprocessing/connection.py @@ -90,7 +90,7 @@ def arbitrary_address(family): return tempfile.mktemp(prefix='listener-', dir=get_temp_dir()) elif family == 'AF_PIPE': return tempfile.mktemp(prefix=r'\\.\pipe\pyc-%d-%d-' % - (os.getpid(), _mmap_counter.next())) + (os.getpid(), _mmap_counter.next()), dir="") else: raise ValueError('unrecognized family') @@ -285,9 +285,13 @@ def accept(self): return conn def close(self): - self._socket.close() - if self._unlink is not None: - self._unlink() + try: + self._socket.close() + finally: + unlink = self._unlink + if unlink is not None: + self._unlink = None + unlink() def SocketClient(address): @@ -454,10 +458,10 @@ def recv(self): return self._loads(s) def _xml_dumps(obj): - return xmlrpclib.dumps((obj,), None, None, None, 1).encode('utf8') + return xmlrpclib.dumps((obj,), None, None, None, 1) def _xml_loads(s): - (obj,), method = xmlrpclib.loads(s.decode('utf8')) + (obj,), method = xmlrpclib.loads(s) return obj class XmlListener(Listener): diff --git a/PythonLib/full/multiprocessing/dummy/__init__.py b/PythonLib/full/multiprocessing/dummy/__init__.py index e3b126e9..b7abde80 100644 --- a/PythonLib/full/multiprocessing/dummy/__init__.py +++ b/PythonLib/full/multiprocessing/dummy/__init__.py @@ -138,7 +138,7 @@ def _set(self, value): self._value = value value = property(_get, _set) def __repr__(self): - return '<%r(%r, %r)>'%(type(self).__name__,self._typecode,self._value) + return '<%s(%r, %r)>'%(type(self).__name__,self._typecode,self._value) def Manager(): return sys.modules[__name__] diff --git a/PythonLib/full/multiprocessing/forking.py b/PythonLib/full/multiprocessing/forking.py index 6bddfb74..9412eb1e 100644 --- a/PythonLib/full/multiprocessing/forking.py +++ b/PythonLib/full/multiprocessing/forking.py @@ -405,7 +405,8 @@ def get_preparation_data(name): if _logger is not None: d['log_level'] = _logger.getEffectiveLevel() - if not WINEXE and not WINSERVICE: + if not WINEXE and not WINSERVICE and \ + not d['sys_argv'][0].lower().endswith('pythonservice.exe'): main_path = getattr(sys.modules['__main__'], '__file__', None) if not main_path and sys.argv[0] not in ('', '-c'): main_path = sys.argv[0] @@ -470,12 +471,26 @@ def prepare(data): process.ORIGINAL_DIR = data['orig_dir'] if 'main_path' in data: + # XXX (ncoghlan): The following code makes several bogus + # assumptions regarding the relationship between __file__ + # and a module's real name. See PEP 302 and issue #10845 + # The problem is resolved properly in Python 3.4+, as + # described in issue #19946 + main_path = data['main_path'] main_name = os.path.splitext(os.path.basename(main_path))[0] if main_name == '__init__': main_name = os.path.basename(os.path.dirname(main_path)) - if main_name != 'ipython': + if main_name == '__main__': + # For directory and zipfile execution, we assume an implicit + # "if __name__ == '__main__':" around the module, and don't + # rerun the main module code in spawned processes + main_module = sys.modules['__main__'] + main_module.__file__ = main_path + elif main_name != 'ipython': + # Main modules not actually called __main__.py may + # contain additional code that should still be executed import imp if main_path is None: diff --git a/PythonLib/full/multiprocessing/managers.py b/PythonLib/full/multiprocessing/managers.py index 08d35d86..f2cee0c3 100644 --- a/PythonLib/full/multiprocessing/managers.py +++ b/PythonLib/full/multiprocessing/managers.py @@ -287,7 +287,7 @@ def serve_client(self, conn): try: send(msg) except Exception, e: - send(('#UNSERIALIZABLE', repr(msg))) + send(('#UNSERIALIZABLE', format_exc())) except Exception, e: util.info('exception in thread serving %r', threading.current_thread().name) @@ -884,7 +884,7 @@ def RebuildProxy(func, token, serializer, kwds): def MakeProxyType(name, exposed, _cache={}): ''' - Return an proxy type whose methods are given by `exposed` + Return a proxy type whose methods are given by `exposed` ''' exposed = tuple(exposed) try: diff --git a/PythonLib/full/multiprocessing/pool.py b/PythonLib/full/multiprocessing/pool.py index 04531b91..a47cd0f5 100644 --- a/PythonLib/full/multiprocessing/pool.py +++ b/PythonLib/full/multiprocessing/pool.py @@ -86,7 +86,7 @@ def __repr__(self): def worker(inqueue, outqueue, initializer=None, initargs=(), maxtasks=None): - assert maxtasks is None or (type(maxtasks) == int and maxtasks > 0) + assert maxtasks is None or (type(maxtasks) in (int, long) and maxtasks > 0) put = outqueue.put get = inqueue.get if hasattr(inqueue, '_writer'): @@ -120,6 +120,8 @@ def worker(inqueue, outqueue, initializer=None, initargs=(), maxtasks=None): debug("Possible encoding error while sending result: %s" % ( wrapped)) put((job, i, (False, wrapped))) + + task = job = result = func = args = kwds = None completed += 1 debug('worker exiting after %d tasks' % completed) @@ -334,29 +336,39 @@ def _handle_tasks(taskqueue, put, outqueue, pool, cache): thread = threading.current_thread() for taskseq, set_length in iter(taskqueue.get, None): + task = None i = -1 - for i, task in enumerate(taskseq): - if thread._state: - debug('task handler found thread._state != RUN') - break - try: - put(task) - except Exception as e: - job, ind = task[:2] + try: + for i, task in enumerate(taskseq): + if thread._state: + debug('task handler found thread._state != RUN') + break try: - cache[job]._set(ind, (False, e)) - except KeyError: - pass - else: + put(task) + except Exception as e: + job, ind = task[:2] + try: + cache[job]._set(ind, (False, e)) + except KeyError: + pass + else: + if set_length: + debug('doing set_length()') + set_length(i+1) + continue + break + except Exception as ex: + job, ind = task[:2] if task else (0, 0) + if job in cache: + cache[job]._set(ind + 1, (False, ex)) if set_length: debug('doing set_length()') set_length(i+1) - continue - break + finally: + task = taskseq = job = None else: debug('task handler got sentinel') - try: # tell result handler to finish when cache is empty debug('task handler sending sentinel to result handler') @@ -396,6 +408,7 @@ def _handle_results(outqueue, get, cache): cache[job]._set(i, obj) except KeyError: pass + task = job = obj = None while cache and thread._state != TERMINATE: try: @@ -412,6 +425,7 @@ def _handle_results(outqueue, get, cache): cache[job]._set(i, obj) except KeyError: pass + task = job = obj = None if hasattr(outqueue, '_reader'): debug('ensuring that outqueue is not full') diff --git a/PythonLib/full/multiprocessing/process.py b/PythonLib/full/multiprocessing/process.py index 482ea0a3..11c8fca3 100644 --- a/PythonLib/full/multiprocessing/process.py +++ b/PythonLib/full/multiprocessing/process.py @@ -128,6 +128,9 @@ def start(self): else: from .forking import Popen self._popen = Popen(self) + # Avoid a refcycle if the target function holds an indirect + # reference to the process object (see bpo-30775) + del self._target, self._args, self._kwargs _current_process._children.add(self) def terminate(self): @@ -153,10 +156,16 @@ def is_alive(self): if self is _current_process: return True assert self._parent_pid == os.getpid(), 'can only test a child process' + if self._popen is None: return False - self._popen.poll() - return self._popen.returncode is None + + returncode = self._popen.poll() + if returncode is None: + return True + else: + _current_process._children.discard(self) + return False @property def name(self): @@ -227,7 +236,7 @@ def __repr__(self): else: status = 'started' - if type(status) is int: + if type(status) in (int, long): if status == 0: status = 'stopped' else: @@ -262,12 +271,12 @@ def _bootstrap(self): except SystemExit, e: if not e.args: exitcode = 1 - elif isinstance(e.args[0], int): - exitcode = e.args[0] + elif isinstance(e.args[0], (int, long)): + exitcode = int(e.args[0]) else: sys.stderr.write(str(e.args[0]) + '\n') sys.stderr.flush() - exitcode = 0 if isinstance(e.args[0], str) else 1 + exitcode = 1 except: exitcode = 1 import traceback diff --git a/PythonLib/full/multiprocessing/queues.py b/PythonLib/full/multiprocessing/queues.py index 433c7e29..079cd354 100644 --- a/PythonLib/full/multiprocessing/queues.py +++ b/PythonLib/full/multiprocessing/queues.py @@ -44,10 +44,10 @@ from Queue import Empty, Full import _multiprocessing -from multiprocessing import Pipe -from multiprocessing.synchronize import Lock, BoundedSemaphore, Semaphore, Condition -from multiprocessing.util import debug, info, Finalize, register_after_fork -from multiprocessing.forking import assert_spawning +from . import Pipe +from .synchronize import Lock, BoundedSemaphore, Semaphore, Condition +from .util import debug, info, Finalize, register_after_fork, is_exiting +from .forking import assert_spawning # # Queue type using a pipe, buffer and thread @@ -128,7 +128,7 @@ def get(self, block=True, timeout=None): try: if block: timeout = deadline - time.time() - if timeout < 0 or not self._poll(timeout): + if not self._poll(timeout): raise Empty elif not self._poll(): raise Empty @@ -156,9 +156,13 @@ def put_nowait(self, obj): def close(self): self._closed = True - self._reader.close() - if self._close: - self._close() + try: + self._reader.close() + finally: + close = self._close + if close: + self._close = None + close() def join_thread(self): debug('Queue.join_thread()') @@ -229,8 +233,6 @@ def _finalize_close(buffer, notempty): @staticmethod def _feed(buffer, notempty, send, writelock, close): debug('starting thread to feed data to pipe') - from .util import is_exiting - nacquire = notempty.acquire nrelease = notempty.release nwait = notempty.wait @@ -242,8 +244,8 @@ def _feed(buffer, notempty, send, writelock, close): else: wacquire = None - try: - while 1: + while 1: + try: nacquire() try: if not buffer: @@ -268,19 +270,17 @@ def _feed(buffer, notempty, send, writelock, close): wrelease() except IndexError: pass - except Exception, e: - # Since this runs in a daemon thread the resources it uses - # may be become unusable while the process is cleaning up. - # We ignore errors which happen after the process has - # started to cleanup. - try: + except Exception as e: + # Since this runs in a daemon thread the resources it uses + # may be become unusable while the process is cleaning up. + # We ignore errors which happen after the process has + # started to cleanup. if is_exiting(): info('error in queue thread: %s', e) + return else: import traceback traceback.print_exc() - except Exception: - pass _sentinel = object() diff --git a/PythonLib/full/multiprocessing/sharedctypes.py b/PythonLib/full/multiprocessing/sharedctypes.py index 1eb044dd..58415fc4 100644 --- a/PythonLib/full/multiprocessing/sharedctypes.py +++ b/PythonLib/full/multiprocessing/sharedctypes.py @@ -46,13 +46,18 @@ # typecode_to_type = { - 'c': ctypes.c_char, 'u': ctypes.c_wchar, + 'c': ctypes.c_char, 'b': ctypes.c_byte, 'B': ctypes.c_ubyte, 'h': ctypes.c_short, 'H': ctypes.c_ushort, 'i': ctypes.c_int, 'I': ctypes.c_uint, 'l': ctypes.c_long, 'L': ctypes.c_ulong, 'f': ctypes.c_float, 'd': ctypes.c_double } +try: + typecode_to_type['u'] = ctypes.c_wchar +except AttributeError: + pass + # # diff --git a/PythonLib/full/multiprocessing/util.py b/PythonLib/full/multiprocessing/util.py index d1b3d2e3..2920f244 100644 --- a/PythonLib/full/multiprocessing/util.py +++ b/PythonLib/full/multiprocessing/util.py @@ -32,6 +32,7 @@ # SUCH DAMAGE. # +import os import itertools import weakref import atexit @@ -173,7 +174,7 @@ class Finalize(object): Class which supports object finalization using weakrefs ''' def __init__(self, obj, callback, args=(), kwargs=None, exitpriority=None): - assert exitpriority is None or type(exitpriority) is int + assert exitpriority is None or type(exitpriority) in (int, long) if obj is not None: self._weakref = weakref.ref(obj, self) @@ -184,6 +185,7 @@ def __init__(self, obj, callback, args=(), kwargs=None, exitpriority=None): self._args = args self._kwargs = kwargs or {} self._key = (exitpriority, _finalizer_counter.next()) + self._pid = os.getpid() _finalizer_registry[self._key] = self @@ -196,9 +198,13 @@ def __call__(self, wr=None): except KeyError: sub_debug('finalizer no longer registered') else: - sub_debug('finalizer calling %s with args %s and kwargs %s', - self._callback, self._args, self._kwargs) - res = self._callback(*self._args, **self._kwargs) + if self._pid != os.getpid(): + sub_debug('finalizer ignored because different process') + res = None + else: + sub_debug('finalizer calling %s with args %s and kwargs %s', + self._callback, self._args, self._kwargs) + res = self._callback(*self._args, **self._kwargs) self._weakref = self._callback = self._args = \ self._kwargs = self._key = None return res @@ -259,6 +265,9 @@ def _run_finalizers(minpriority=None): else: f = lambda p : p[0][0] is not None and p[0][0] >= minpriority + # Careful: _finalizer_registry may be mutated while this function + # is running (either by a GC run or by another thread). + items = [x for x in _finalizer_registry.items() if f(x)] items.sort(reverse=True) diff --git a/PythonLib/full/mutex.py b/PythonLib/full/mutex.py index f8acba4a..3d8f4285 100644 --- a/PythonLib/full/mutex.py +++ b/PythonLib/full/mutex.py @@ -9,7 +9,7 @@ implying it now has the lock. Of course, no multi-threading is implied -- hence the funny interface -for lock, where a function is called once the lock is aquired. +for lock, where a function is called once the lock is acquired. """ from warnings import warnpy3k warnpy3k("the mutex module has been removed in Python 3.0", stacklevel=2) diff --git a/PythonLib/full/ntpath.py b/PythonLib/full/ntpath.py index 4f8f423c..0b85b0b9 100644 --- a/PythonLib/full/ntpath.py +++ b/PythonLib/full/ntpath.py @@ -12,6 +12,7 @@ import warnings from genericpath import * +from genericpath import _unicode __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "basename","dirname","commonprefix","getsize","getmtime", @@ -59,73 +60,79 @@ def isabs(s): # Join two (or more) paths. - -def join(a, *p): - """Join two or more pathname components, inserting "\\" as needed. - If any component is an absolute path, all previous path components - will be discarded.""" - path = a - for b in p: - b_wins = 0 # set to 1 iff b makes path irrelevant - if path == "": - b_wins = 1 - - elif isabs(b): - # This probably wipes out path so far. However, it's more - # complicated if path begins with a drive letter: - # 1. join('c:', '/a') == 'c:/a' - # 2. join('c:/', '/a') == 'c:/a' - # But - # 3. join('c:/a', '/b') == '/b' - # 4. join('c:', 'd:/') = 'd:/' - # 5. join('c:/', 'd:/') = 'd:/' - if path[1:2] != ":" or b[1:2] == ":": - # Path doesn't start with a drive letter, or cases 4 and 5. - b_wins = 1 - - # Else path has a drive letter, and b doesn't but is absolute. - elif len(path) > 3 or (len(path) == 3 and - path[-1] not in "/\\"): - # case 3 - b_wins = 1 - - if b_wins: - path = b - else: - # Join, and ensure there's a separator. - assert len(path) > 0 - if path[-1] in "/\\": - if b and b[0] in "/\\": - path += b[1:] - else: - path += b - elif path[-1] == ":": - path += b - elif b: - if b[0] in "/\\": - path += b - else: - path += "\\" + b - else: - # path is not empty and does not end with a backslash, - # but b is empty; since, e.g., split('a/') produces - # ('a', ''), it's best if join() adds a backslash in - # this case. - path += '\\' - - return path +def join(path, *paths): + """Join two or more pathname components, inserting "\\" as needed.""" + result_drive, result_path = splitdrive(path) + for p in paths: + p_drive, p_path = splitdrive(p) + if p_path and p_path[0] in '\\/': + # Second path is absolute + if p_drive or not result_drive: + result_drive = p_drive + result_path = p_path + continue + elif p_drive and p_drive != result_drive: + if p_drive.lower() != result_drive.lower(): + # Different drives => ignore the first path entirely + result_drive = p_drive + result_path = p_path + continue + # Same drive in different case + result_drive = p_drive + # Second path is relative to the first + if result_path and result_path[-1] not in '\\/': + result_path = result_path + '\\' + result_path = result_path + p_path + ## add separator between UNC and non-absolute path + if (result_path and result_path[0] not in '\\/' and + result_drive and result_drive[-1:] != ':'): + return result_drive + sep + result_path + return result_drive + result_path # Split a path in a drive specification (a drive letter followed by a # colon) and the path specification. # It is always true that drivespec + pathspec == p def splitdrive(p): - """Split a pathname into drive and path specifiers. Returns a 2-tuple -"(drive,path)"; either part may be empty""" - if p[1:2] == ':': - return p[0:2], p[2:] - return '', p + """Split a pathname into drive/UNC sharepoint and relative path specifiers. + Returns a 2-tuple (drive_or_unc, path); either part may be empty. + + If you assign + result = splitdrive(p) + It is always true that: + result[0] + result[1] == p + If the path contained a drive letter, drive_or_unc will contain everything + up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") + + If the path contained a UNC path, the drive_or_unc will contain the host name + and share up to but not including the fourth directory separator character. + e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") + + Paths cannot contain both a drive letter and a UNC path. + + """ + if len(p) > 1: + normp = p.replace(altsep, sep) + if (normp[0:2] == sep*2) and (normp[2:3] != sep): + # is a UNC path: + # vvvvvvvvvvvvvvvvvvvv drive letter or UNC path + # \\machine\mountpoint\directory\etc\... + # directory ^^^^^^^^^^^^^^^ + index = normp.find(sep, 2) + if index == -1: + return '', p + index2 = normp.find(sep, index + 1) + # a UNC path can't have two slashes in a row + # (after the initial two) + if index2 == index + 1: + return '', p + if index2 == -1: + index2 = len(p) + return p[:index2], p[index2:] + if normp[1] == ':': + return p[:2], p[2:] + return '', p # Parse UNC paths def splitunc(p): @@ -134,7 +141,7 @@ def splitunc(p): Return a 2-tuple (unc, rest); either part may be empty. If unc is not empty, it has the form '//host/mount' (or similar using backslashes). unc+rest is always the input path. - Paths containing drive letters never have an UNC part. + Paths containing drive letters never have a UNC part. """ if p[1:2] == ':': return '', p # Drive letter present @@ -144,15 +151,18 @@ def splitunc(p): # vvvvvvvvvvvvvvvvvvvv equivalent to drive letter # \\machine\mountpoint\directories... # directory ^^^^^^^^^^^^^^^ - normp = normcase(p) - index = normp.find('\\', 2) - if index == -1: - ##raise RuntimeError, 'illegal UNC path: "' + p + '"' - return ("", p) - index = normp.find('\\', index + 1) - if index == -1: - index = len(p) - return p[:index], p[index:] + normp = p.replace('\\', '/') + index = normp.find('/', 2) + if index <= 2: + return '', p + index2 = normp.find('/', index + 1) + # a UNC path can't have two slashes in a row + # (after the initial two) + if index2 == index + 1: + return '', p + if index2 == -1: + index2 = len(p) + return p[:index2], p[index2:] return '', p @@ -217,7 +227,7 @@ def islink(path): lexists = exists # Is a path a mount point? Either a root (with or without drive letter) -# or an UNC path with at most a / or \ after the mount point. +# or a UNC path with at most a / or \ after the mount point. def ismount(path): """Test whether a path is a mount point (defined as root of drive)""" @@ -322,6 +332,13 @@ def expandvars(path): return path import string varchars = string.ascii_letters + string.digits + '_-' + if isinstance(path, _unicode): + encoding = sys.getfilesystemencoding() + def getenv(var): + return os.environ[var.encode(encoding)].decode(encoding) + else: + def getenv(var): + return os.environ[var] res = '' index = 0 pathlen = len(path) @@ -334,7 +351,7 @@ def expandvars(path): index = path.index('\'') res = res + '\'' + path[:index + 1] except ValueError: - res = res + path + res = res + c + path index = pathlen - 1 elif c == '%': # variable or '%' if path[index + 1:index + 2] == '%': @@ -350,9 +367,9 @@ def expandvars(path): index = pathlen - 1 else: var = path[:index] - if var in os.environ: - res = res + os.environ[var] - else: + try: + res = res + getenv(var) + except KeyError: res = res + '%' + var + '%' elif c == '$': # variable or '$$' if path[index + 1:index + 2] == '$': @@ -364,9 +381,9 @@ def expandvars(path): try: index = path.index('}') var = path[:index] - if var in os.environ: - res = res + os.environ[var] - else: + try: + res = res + getenv(var) + except KeyError: res = res + '${' + var + '}' except ValueError: res = res + '${' + path @@ -379,9 +396,9 @@ def expandvars(path): var = var + c index = index + 1 c = path[index:index + 1] - if var in os.environ: - res = res + os.environ[var] - else: + try: + res = res + getenv(var) + except KeyError: res = res + '$' + var if c != '': index = index - 1 @@ -398,7 +415,7 @@ def expandvars(path): def normpath(path): """Normalize path, eliminating double slashes, etc.""" # Preserve unicode (if path is unicode) - backslash, dot = (u'\\', u'.') if isinstance(path, unicode) else ('\\', '.') + backslash, dot = (u'\\', u'.') if isinstance(path, _unicode) else ('\\', '.') if path.startswith(('\\\\.\\', '\\\\?\\')): # in the case of paths with these prefixes: # \\.\ -> device names @@ -455,7 +472,7 @@ def normpath(path): def abspath(path): """Return the absolute version of a path.""" if not isabs(path): - if isinstance(path, unicode): + if isinstance(path, _unicode): cwd = os.getcwdu() else: cwd = os.getcwd() @@ -471,7 +488,7 @@ def abspath(path): path = _getfullpathname(path) except WindowsError: pass # Bad path - return unchanged. - elif isinstance(path, unicode): + elif isinstance(path, _unicode): path = os.getcwdu() else: path = os.getcwd() diff --git a/PythonLib/full/nturl2path.py b/PythonLib/full/nturl2path.py index 10ea2728..9e6eb0d5 100644 --- a/PythonLib/full/nturl2path.py +++ b/PythonLib/full/nturl2path.py @@ -4,9 +4,11 @@ def url2pathname(url): """OS-specific conversion from a relative URL of the 'file' scheme to a file system path; not recommended for general use.""" # e.g. - # ///C|/foo/bar/spam.foo - # becomes - # C:\foo\bar\spam.foo + # ///C|/foo/bar/spam.foo + # and + # ///C:/foo/bar/spam.foo + # become + # C:\foo\bar\spam.foo import string, urllib # Windows itself uses ":" even in URLs. url = url.replace(':', '|') @@ -39,9 +41,9 @@ def pathname2url(p): """OS-specific conversion from a file system path to a relative URL of the 'file' scheme; not recommended for general use.""" # e.g. - # C:\foo\bar\spam.foo + # C:\foo\bar\spam.foo # becomes - # ///C|/foo/bar/spam.foo + # ///C:/foo/bar/spam.foo import urllib if not ':' in p: # No drive specifier, just convert slashes and quote the name diff --git a/PythonLib/full/optparse.py b/PythonLib/full/optparse.py index 6c3f4565..bec492d8 100644 --- a/PythonLib/full/optparse.py +++ b/PythonLib/full/optparse.py @@ -204,7 +204,6 @@ def __init__(self, short_first): self.parser = None self.indent_increment = indent_increment - self.help_position = self.max_help_position = max_help_position if width is None: try: width = int(os.environ['COLUMNS']) @@ -212,6 +211,8 @@ def __init__(self, width = 80 width -= 2 self.width = width + self.help_position = self.max_help_position = \ + min(max_help_position, max(width - 20, indent_increment * 2)) self.current_indent = 0 self.level = 0 self.help_width = None # computed later @@ -256,7 +257,7 @@ def _format_text(self, text): Format a paragraph of free-form text for inclusion in the help output at the current indentation level. """ - text_width = self.width - self.current_indent + text_width = max(self.width - self.current_indent, 11) indent = " "*self.current_indent return textwrap.fill(text, text_width, @@ -337,7 +338,7 @@ def store_option_strings(self, parser): self.dedent() self.dedent() self.help_position = min(max_len + 2, self.max_help_position) - self.help_width = self.width - self.help_position + self.help_width = max(self.width - self.help_position, 11) def format_option_strings(self, option): """Return a comma-separated list of option strings & metavariables.""" @@ -913,7 +914,7 @@ class OptionContainer: _short_opt : { string : Option } dictionary mapping short option strings, eg. "-f" or "-X", to the Option instances that implement them. If an Option - has multiple short option strings, it will appears in this + has multiple short option strings, it will appear in this dictionary multiple times. [1] _long_opt : { string : Option } dictionary mapping long option strings, eg. "--file" or @@ -1374,7 +1375,7 @@ def parse_args(self, args=None, values=None): sys.argv[1:]). Any errors result in a call to 'error()', which by default prints the usage message to stderr and calls sys.exit() with an error message. On success returns a pair - (values, args) where 'values' is an Values instance (with all + (values, args) where 'values' is a Values instance (with all your option values) and 'args' is the list of arguments left over after parsing options. """ diff --git a/PythonLib/full/os.py b/PythonLib/full/os.py index 6d598f3e..cfea71be 100644 --- a/PythonLib/full/os.py +++ b/PythonLib/full/os.py @@ -1,4 +1,4 @@ -r"""OS routines for Mac, NT, or Posix depending on what system we're on. +r"""OS routines for NT or Posix depending on what system we're on. This exports: - all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc. @@ -185,7 +185,7 @@ def renames(old, new): empty. Works like rename, except creation of any intermediate directories needed to make the new pathname good is attempted first. After the rename, directories corresponding to rightmost - path segments of the old name will be pruned way until either the + path segments of the old name will be pruned until either the whole path is consumed or a nonempty directory is found. Note: this function can fail with the new directory structure made @@ -229,11 +229,12 @@ def walk(top, topdown=True, onerror=None, followlinks=False): When topdown is true, the caller can modify the dirnames list in-place (e.g., via del or slice assignment), and walk will only recurse into the - subdirectories whose names remain in dirnames; this can be used to prune - the search, or to impose a specific order of visiting. Modifying - dirnames when topdown is false is ineffective, since the directories in - dirnames have already been generated by the time dirnames itself is - generated. + subdirectories whose names remain in dirnames; this can be used to prune the + search, or to impose a specific order of visiting. Modifying dirnames when + topdown is false is ineffective, since the directories in dirnames have + already been generated by the time dirnames itself is generated. No matter + the value of topdown, the list of subdirectories is retrieved before the + tuples for the directory and its subdirectories are generated. By default errors from the os.listdir() call are ignored. If optional arg 'onerror' is specified, it should be a function; it @@ -261,6 +262,7 @@ def walk(top, topdown=True, onerror=None, followlinks=False): print "bytes in", len(files), "non-directory files" if 'CVS' in dirs: dirs.remove('CVS') # don't visit CVS directories + """ islink, join, isdir = path.islink, path.join, path.isdir diff --git a/PythonLib/full/os2emxpath.py b/PythonLib/full/os2emxpath.py index 1bed51d4..6691b7d8 100644 --- a/PythonLib/full/os2emxpath.py +++ b/PythonLib/full/os2emxpath.py @@ -8,6 +8,7 @@ import os import stat from genericpath import * +from genericpath import _unicode from ntpath import (expanduser, expandvars, isabs, islink, splitdrive, splitext, split, walk) @@ -61,7 +62,7 @@ def splitunc(p): Return a 2-tuple (unc, rest); either part may be empty. If unc is not empty, it has the form '//host/mount' (or similar using backslashes). unc+rest is always the input path. - Paths containing drive letters never have an UNC part. + Paths containing drive letters never have a UNC part. """ if p[1:2] == ':': return '', p # Drive letter present @@ -104,7 +105,7 @@ def dirname(p): # Is a path a directory? # Is a path a mount point? Either a root (with or without drive letter) -# or an UNC path with at most a / or \ after the mount point. +# or a UNC path with at most a / or \ after the mount point. def ismount(path): """Test whether a path is a mount point (defined as root of drive)""" @@ -146,7 +147,7 @@ def normpath(path): def abspath(path): """Return the absolute version of a path""" if not isabs(path): - if isinstance(path, unicode): + if isinstance(path, _unicode): cwd = os.getcwdu() else: cwd = os.getcwd() diff --git a/PythonLib/full/pdb.doc b/PythonLib/full/pdb.doc index 375be2f8..c8c1c93c 100644 --- a/PythonLib/full/pdb.doc +++ b/PythonLib/full/pdb.doc @@ -48,7 +48,7 @@ If a file ".pdbrc" exists in your home directory or in the current directory, it is read in and executed as if it had been typed at the debugger prompt. This is particularly useful for aliases. If both files exist, the one in the home directory is read first and aliases -defined there can be overriden by the local file. +defined there can be overridden by the local file. Aside from aliases, the debugger is not directly programmable; but it is implemented as a class from which you can derive your own debugger diff --git a/PythonLib/full/pdb.py b/PythonLib/full/pdb.py index 113b4e08..4d35103b 100644 --- a/PythonLib/full/pdb.py +++ b/PythonLib/full/pdb.py @@ -1322,6 +1322,9 @@ def main(): # In most cases SystemExit does not warrant a post-mortem session. print "The program exited via sys.exit(). Exit status: ", print sys.exc_info()[1] + except SyntaxError: + traceback.print_exc() + sys.exit(1) except: traceback.print_exc() print "Uncaught exception. Entering post mortem debugging" diff --git a/PythonLib/full/pickle.py b/PythonLib/full/pickle.py index 508e858d..1b3196ff 100644 --- a/PythonLib/full/pickle.py +++ b/PythonLib/full/pickle.py @@ -269,7 +269,7 @@ def get(self, i, pack=struct.pack): def save(self, obj): # Check for persistent id (defined by a subclass) pid = self.persistent_id(obj) - if pid: + if pid is not None: self.save_pers(pid) return @@ -402,7 +402,13 @@ def save_reduce(self, func, args, state=None, write(REDUCE) if obj is not None: - self.memoize(obj) + # If the object is already in the memo, this means it is + # recursive. In this case, throw away everything we put on the + # stack, and fetch the object back from the memo. + if id(obj) in self.memo: + write(POP + self.get(self.memo[id(obj)][0])) + else: + self.memoize(obj) # More new special cases (that work with older protocols as # well): when __reduce__ returns a tuple with 4 or 5 items, diff --git a/PythonLib/full/pickletools.py b/PythonLib/full/pickletools.py index 8de53dd2..c9366c8c 100644 --- a/PythonLib/full/pickletools.py +++ b/PythonLib/full/pickletools.py @@ -185,7 +185,7 @@ def __init__(self, name, n, reader, doc): assert isinstance(name, str) self.name = name - assert isinstance(n, int) and (n >= 0 or + assert isinstance(n, (int, long)) and (n >= 0 or n in (UP_TO_NEWLINE, TAKEN_FROM_ARGUMENT1, TAKEN_FROM_ARGUMENT4)) @@ -873,7 +873,7 @@ def __init__(self, name, code, arg, assert isinstance(x, StackObject) self.stack_after = stack_after - assert isinstance(proto, int) and 0 <= proto <= 2 + assert isinstance(proto, (int, long)) and 0 <= proto <= 2 self.proto = proto assert isinstance(doc, str) diff --git a/PythonLib/full/plat-generic/regen b/PythonLib/full/plat-generic/regen deleted file mode 100644 index c96167dc..00000000 --- a/PythonLib/full/plat-generic/regen +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/sh -set -v -eval $PYTHON_FOR_BUILD ../../Tools/scripts/h2py.py -i "'(u_long)'" /usr/include/netinet/in.h diff --git a/PythonLib/full/platform.py b/PythonLib/full/platform.py index df2af83a..55f2fa89 100644 --- a/PythonLib/full/platform.py +++ b/PythonLib/full/platform.py @@ -28,12 +28,14 @@ # Betancourt, Randall Hopper, Karl Putland, John Farrell, Greg # Andruk, Just van Rossum, Thomas Heller, Mark R. Levinson, Mark # Hammond, Bill Tutt, Hans Nowak, Uwe Zessin (OpenVMS support), -# Colin Kong, Trent Mick, Guido van Rossum, Anthony Baxter +# Colin Kong, Trent Mick, Guido van Rossum, Anthony Baxter, Steve +# Dower # # History: # # # +# 1.0.8 - changed Windows support to read version from kernel32.dll # 1.0.7 - added DEV_NULL # 1.0.6 - added linux_distribution() # 1.0.5 - fixed Java support to allow running the module on Jython @@ -61,7 +63,7 @@ # though # 0.5.2 - fixed uname() to return '' instead of 'unknown' in all # return values (the system uname command tends to return -# 'unknown' instead of just leaving the field emtpy) +# 'unknown' instead of just leaving the field empty) # 0.5.1 - included code for slackware dist; added exception handlers # to cover up situations where platforms don't have os.popen # (e.g. Mac) or fail on socket.gethostname(); fixed libc @@ -531,189 +533,142 @@ def _syscmd_ver(system='', release='', version='', version = _norm_version(version) return system,release,version -def _win32_getvalue(key,name,default=''): +_WIN32_CLIENT_RELEASES = { + (5, 0): "2000", + (5, 1): "XP", + # Strictly, 5.2 client is XP 64-bit, but platform.py historically + # has always called it 2003 Server + (5, 2): "2003Server", + (5, None): "post2003", + + (6, 0): "Vista", + (6, 1): "7", + (6, 2): "8", + (6, 3): "8.1", + (6, None): "post8.1", + + (10, 0): "10", + (10, None): "post10", +} - """ Read a value for name from the registry key. +# Server release name lookup will default to client names if necessary +_WIN32_SERVER_RELEASES = { + (5, 2): "2003Server", - In case this fails, default is returned. + (6, 0): "2008Server", + (6, 1): "2008ServerR2", + (6, 2): "2012Server", + (6, 3): "2012ServerR2", + (6, None): "post2012ServerR2", +} - """ +def _get_real_winver(maj, min, build): + if maj < 6 or (maj == 6 and min < 2): + return maj, min, build + + from ctypes import (c_buffer, POINTER, byref, create_unicode_buffer, + Structure, WinDLL, _Pointer) + from ctypes.wintypes import DWORD, HANDLE + + class VS_FIXEDFILEINFO(Structure): + _fields_ = [ + ("dwSignature", DWORD), + ("dwStrucVersion", DWORD), + ("dwFileVersionMS", DWORD), + ("dwFileVersionLS", DWORD), + ("dwProductVersionMS", DWORD), + ("dwProductVersionLS", DWORD), + ("dwFileFlagsMask", DWORD), + ("dwFileFlags", DWORD), + ("dwFileOS", DWORD), + ("dwFileType", DWORD), + ("dwFileSubtype", DWORD), + ("dwFileDateMS", DWORD), + ("dwFileDateLS", DWORD), + ] + class PVS_FIXEDFILEINFO(_Pointer): + _type_ = VS_FIXEDFILEINFO + + kernel32 = WinDLL('kernel32') + version = WinDLL('version') + + # We will immediately double the length up to MAX_PATH, but the + # path may be longer, so we retry until the returned string is + # shorter than our buffer. + name_len = actual_len = 130 + while actual_len == name_len: + name_len *= 2 + name = create_unicode_buffer(name_len) + actual_len = kernel32.GetModuleFileNameW(HANDLE(kernel32._handle), + name, len(name)) + if not actual_len: + return maj, min, build + + size = version.GetFileVersionInfoSizeW(name, None) + if not size: + return maj, min, build + + ver_block = c_buffer(size) + if (not version.GetFileVersionInfoW(name, None, size, ver_block) or + not ver_block): + return maj, min, build + + pvi = PVS_FIXEDFILEINFO() + if not version.VerQueryValueW(ver_block, "", byref(pvi), byref(DWORD())): + return maj, min, build + + maj = pvi.contents.dwProductVersionMS >> 16 + min = pvi.contents.dwProductVersionMS & 0xFFFF + build = pvi.contents.dwProductVersionLS >> 16 + + return maj, min, build + +def win32_ver(release='', version='', csd='', ptype=''): try: - # Use win32api if available - from win32api import RegQueryValueEx + from sys import getwindowsversion except ImportError: - # On Python 2.0 and later, emulate using _winreg - import _winreg - RegQueryValueEx = _winreg.QueryValueEx + return release, version, csd, ptype try: - return RegQueryValueEx(key,name) - except: - return default - -def win32_ver(release='',version='',csd='',ptype=''): - - """ Get additional version information from the Windows Registry - and return a tuple (version,csd,ptype) referring to version - number, CSD level (service pack), and OS type (multi/single - processor). - - As a hint: ptype returns 'Uniprocessor Free' on single - processor NT machines and 'Multiprocessor Free' on multi - processor machines. The 'Free' refers to the OS version being - free of debugging code. It could also state 'Checked' which - means the OS version uses debugging code, i.e. code that - checks arguments, ranges, etc. (Thomas Heller). + from winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE + except ImportError: + from _winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE - Note: this function works best with Mark Hammond's win32 - package installed, but also on Python 2.3 and later. It - obviously only runs on Win32 compatible platforms. + winver = getwindowsversion() + maj, min, build = _get_real_winver(*winver[:3]) + version = '{0}.{1}.{2}'.format(maj, min, build) - """ - # XXX Is there any way to find out the processor type on WinXX ? - # XXX Is win32 available on Windows CE ? - # - # Adapted from code posted by Karl Putland to comp.lang.python. - # - # The mappings between reg. values and release names can be found - # here: http://msdn.microsoft.com/library/en-us/sysinfo/base/osversioninfo_str.asp + release = (_WIN32_CLIENT_RELEASES.get((maj, min)) or + _WIN32_CLIENT_RELEASES.get((maj, None)) or + release) - # Import the needed APIs - try: - import win32api - from win32api import RegQueryValueEx, RegOpenKeyEx, \ - RegCloseKey, GetVersionEx - from win32con import HKEY_LOCAL_MACHINE, VER_PLATFORM_WIN32_NT, \ - VER_PLATFORM_WIN32_WINDOWS, VER_NT_WORKSTATION - except ImportError: - # Emulate the win32api module using Python APIs + # getwindowsversion() reflect the compatibility mode Python is + # running under, and so the service pack value is only going to be + # valid if the versions match. + if winver[:2] == (maj, min): try: - sys.getwindowsversion + csd = 'SP{}'.format(winver.service_pack_major) except AttributeError: - # No emulation possible, so return the defaults... - return release,version,csd,ptype - else: - # Emulation using _winreg (added in Python 2.0) and - # sys.getwindowsversion() (added in Python 2.3) - import _winreg - GetVersionEx = sys.getwindowsversion - RegQueryValueEx = _winreg.QueryValueEx - RegOpenKeyEx = _winreg.OpenKeyEx - RegCloseKey = _winreg.CloseKey - HKEY_LOCAL_MACHINE = _winreg.HKEY_LOCAL_MACHINE - VER_PLATFORM_WIN32_WINDOWS = 1 - VER_PLATFORM_WIN32_NT = 2 - VER_NT_WORKSTATION = 1 - VER_NT_SERVER = 3 - REG_SZ = 1 - - # Find out the registry key and some general version infos - winver = GetVersionEx() - maj,min,buildno,plat,csd = winver - version = '%i.%i.%i' % (maj,min,buildno & 0xFFFF) - if hasattr(winver, "service_pack"): - if winver.service_pack != "": - csd = 'SP%s' % winver.service_pack_major - else: - if csd[:13] == 'Service Pack ': - csd = 'SP' + csd[13:] - - if plat == VER_PLATFORM_WIN32_WINDOWS: - regkey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion' - # Try to guess the release name - if maj == 4: - if min == 0: - release = '95' - elif min == 10: - release = '98' - elif min == 90: - release = 'Me' - else: - release = 'postMe' - elif maj == 5: - release = '2000' - - elif plat == VER_PLATFORM_WIN32_NT: - regkey = 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion' - if maj <= 4: - release = 'NT' - elif maj == 5: - if min == 0: - release = '2000' - elif min == 1: - release = 'XP' - elif min == 2: - release = '2003Server' - else: - release = 'post2003' - elif maj == 6: - if hasattr(winver, "product_type"): - product_type = winver.product_type - else: - product_type = VER_NT_WORKSTATION - # Without an OSVERSIONINFOEX capable sys.getwindowsversion(), - # or help from the registry, we cannot properly identify - # non-workstation versions. - try: - key = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey) - name, type = RegQueryValueEx(key, "ProductName") - # Discard any type that isn't REG_SZ - if type == REG_SZ and name.find("Server") != -1: - product_type = VER_NT_SERVER - except WindowsError: - # Use default of VER_NT_WORKSTATION - pass - - if min == 0: - if product_type == VER_NT_WORKSTATION: - release = 'Vista' - else: - release = '2008Server' - elif min == 1: - if product_type == VER_NT_WORKSTATION: - release = '7' - else: - release = '2008ServerR2' - elif min == 2: - if product_type == VER_NT_WORKSTATION: - release = '8' - else: - release = '2012Server' - else: - release = 'post2012Server' + if csd[:13] == 'Service Pack ': + csd = 'SP' + csd[13:] - else: - if not release: - # E.g. Win3.1 with win32s - release = '%i.%i' % (maj,min) - return release,version,csd,ptype + # VER_NT_SERVER = 3 + if getattr(winver, 'product_type', None) == 3: + release = (_WIN32_SERVER_RELEASES.get((maj, min)) or + _WIN32_SERVER_RELEASES.get((maj, None)) or + release) - # Open the registry key + key = None try: - keyCurVer = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey) - # Get a value to make sure the key exists... - RegQueryValueEx(keyCurVer, 'SystemRoot') + key = OpenKeyEx(HKEY_LOCAL_MACHINE, + r'SOFTWARE\Microsoft\Windows NT\CurrentVersion') + ptype = QueryValueEx(key, 'CurrentType')[0] except: - return release,version,csd,ptype - - # Parse values - #subversion = _win32_getvalue(keyCurVer, - # 'SubVersionNumber', - # ('',1))[0] - #if subversion: - # release = release + subversion # 95a, 95b, etc. - build = _win32_getvalue(keyCurVer, - 'CurrentBuildNumber', - ('',1))[0] - ptype = _win32_getvalue(keyCurVer, - 'CurrentType', - (ptype,1))[0] - - # Normalize version - version = _norm_version(version,build) - - # Close key - RegCloseKey(keyCurVer) - return release,version,csd,ptype + pass + finally: + if key: + CloseKey(key) + + return release, version, csd, ptype def _mac_ver_lookup(selectors,default=None): @@ -1361,9 +1316,11 @@ def processor(): ### Various APIs for extracting information from sys.version _sys_version_parser = re.compile( - r'([\w.+]+)\s*' - '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*' - '\[([^\]]+)\]?') + r'([\w.+]+)\s*' # "version" + r'\(#?([^,]+)' # "(#buildno" + r'(?:,\s*([\w ]*)' # ", builddate" + r'(?:,\s*([\w :]*))?)?\)\s*' # ", buildtime)" + r'\[([^\]]+)\]?') # "[compiler]" _ironpython_sys_version_parser = re.compile( r'IronPython\s*' @@ -1442,6 +1399,8 @@ def _sys_version(sys_version=None): 'failed to parse Jython sys.version: %s' % repr(sys_version)) version, buildno, builddate, buildtime, _ = match.groups() + if builddate is None: + builddate = '' compiler = sys.platform elif "PyPy" in sys_version: @@ -1464,7 +1423,10 @@ def _sys_version(sys_version=None): version, buildno, builddate, buildtime, compiler = \ match.groups() name = 'CPython' - builddate = builddate + ' ' + buildtime + if builddate is None: + builddate = '' + elif buildtime: + builddate = builddate + ' ' + buildtime if hasattr(sys, 'subversion'): # sys.subversion was added in Python 2.5 diff --git a/PythonLib/full/poplib.py b/PythonLib/full/poplib.py index dc7cbdf0..b91e5f72 100644 --- a/PythonLib/full/poplib.py +++ b/PythonLib/full/poplib.py @@ -32,6 +32,12 @@ class error_proto(Exception): pass LF = '\n' CRLF = CR+LF +# maximal line length when calling readline(). This is to prevent +# reading arbitrary length lines. RFC 1939 limits POP3 line length to +# 512 characters, including CRLF. We have selected 2048 just to be on +# the safe side. +_MAXLINE = 2048 + class POP3: @@ -103,7 +109,9 @@ def _putcmd(self, line): # Raise error_proto('-ERR EOF') if the connection is closed. def _getline(self): - line = self.file.readline() + line = self.file.readline(_MAXLINE + 1) + if len(line) > _MAXLINE: + raise error_proto('line too long') if self._debugging > 1: print '*get*', repr(line) if not line: raise error_proto('-ERR EOF') octets = len(line) @@ -365,6 +373,8 @@ def _getline(self): match = renewline.match(self.buffer) while not match: self._fillBuffer() + if len(self.buffer) > _MAXLINE: + raise error_proto('line too long') match = renewline.match(self.buffer) line = match.group(0) self.buffer = renewline.sub('' ,self.buffer, 1) diff --git a/PythonLib/full/posixpath.py b/PythonLib/full/posixpath.py index d65dc757..f5c2260f 100644 --- a/PythonLib/full/posixpath.py +++ b/PythonLib/full/posixpath.py @@ -16,14 +16,7 @@ import genericpath import warnings from genericpath import * - -try: - _unicode = unicode -except NameError: - # If Python is built without Unicode support, the unicode type - # will not exist. Fake one. - class _unicode(object): - pass +from genericpath import _unicode __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "basename","dirname","commonprefix","getsize","getmtime", @@ -193,7 +186,7 @@ def ismount(path): return False try: s1 = os.lstat(path) - s2 = os.lstat(join(path, '..')) + s2 = os.lstat(realpath(join(path, '..'))) except os.error: return False # It doesn't exist -- so not a mount point :-) dev1 = s1.st_dev @@ -285,28 +278,43 @@ def expanduser(path): # Non-existent variables are left unchanged. _varprog = None +_uvarprog = None def expandvars(path): """Expand shell variables of form $var and ${var}. Unknown variables are left unchanged.""" - global _varprog + global _varprog, _uvarprog if '$' not in path: return path - if not _varprog: - import re - _varprog = re.compile(r'\$(\w+|\{[^}]*\})') + if isinstance(path, _unicode): + if not _uvarprog: + import re + _uvarprog = re.compile(ur'\$(\w+|\{[^}]*\})', re.UNICODE) + varprog = _uvarprog + encoding = sys.getfilesystemencoding() + else: + if not _varprog: + import re + _varprog = re.compile(r'\$(\w+|\{[^}]*\})') + varprog = _varprog + encoding = None i = 0 while True: - m = _varprog.search(path, i) + m = varprog.search(path, i) if not m: break i, j = m.span(0) name = m.group(1) if name.startswith('{') and name.endswith('}'): name = name[1:-1] + if encoding: + name = name.encode(encoding) if name in os.environ: tail = path[j:] - path = path[:i] + os.environ[name] + value = os.environ[name] + if encoding: + value = value.decode(encoding) + path = path[:i] + value i = len(path) path += tail else: @@ -367,7 +375,7 @@ def realpath(filename): path, ok = _joinrealpath('', filename, {}) return abspath(path) -# Join two paths, normalizing ang eliminating any symbolic links +# Join two paths, normalizing and eliminating any symbolic links # encountered in the second path. def _joinrealpath(path, rest, seen): if isabs(rest): diff --git a/PythonLib/full/pstats.py b/PythonLib/full/pstats.py index 4338994e..3908f47c 100644 --- a/PythonLib/full/pstats.py +++ b/PythonLib/full/pstats.py @@ -60,7 +60,7 @@ class Stats: """ def __init__(self, *args, **kwds): - # I can't figure out how to explictly specify a stream keyword arg + # I can't figure out how to explicitly specify a stream keyword arg # with *args: # def __init__(self, *args, stream=sys.stdout): ... # so I use **kwds and sqauwk if something unexpected is passed in. diff --git a/PythonLib/full/py_compile.py b/PythonLib/full/py_compile.py index c0bc1e4e..8334ed96 100644 --- a/PythonLib/full/py_compile.py +++ b/PythonLib/full/py_compile.py @@ -163,7 +163,7 @@ def main(args=None): except PyCompileError as error: # return value to indicate at least one failure rv = 1 - sys.stderr.write(error.msg) + sys.stderr.write("%s\n" % error.msg) return rv if __name__ == "__main__": diff --git a/PythonLib/full/pydoc.py b/PythonLib/full/pydoc.py index 72eb656c..b4b190f3 100644 --- a/PythonLib/full/pydoc.py +++ b/PythonLib/full/pydoc.py @@ -17,7 +17,8 @@ class or function within a module or module in a package. If the of all available modules. Run "pydoc -p " to start an HTTP server on a given port on the -local machine to generate documentation web pages. +local machine to generate documentation web pages. Port number 0 can be +used to get an arbitrary unused port. For platforms without a command line, "pydoc -g" starts the HTTP server and also pops up a little window for controlling it. @@ -27,7 +28,7 @@ class or function within a module or module in a package. If the Module docs for core modules are assumed to be in - http://docs.python.org/library/ + https://docs.python.org/library/ This can be overridden by setting the PYTHONDOCS environment variable to a different URL or to a local directory containing the Library @@ -81,6 +82,7 @@ def pathdirs(): def getdoc(object): """Get the doc string or comments for an object.""" result = inspect.getdoc(object) or inspect.getcomments(object) + result = _encode(result) return result and re.sub('^ *\n', '', rstrip(result)) or '' def splitdoc(doc): @@ -182,6 +184,36 @@ def fixup(data): return name, kind, cls, value return map(fixup, inspect.classify_class_attrs(object)) +# ----------------------------------------------------- Unicode support helpers + +try: + _unicode = unicode +except NameError: + # If Python is built without Unicode support, the unicode type + # will not exist. Fake one that nothing will match, and make + # the _encode function that do nothing. + class _unicode(object): + pass + _encoding = 'ascii' + def _encode(text, encoding='ascii'): + return text +else: + import locale + _encoding = locale.getpreferredencoding() + + def _encode(text, encoding=None): + if isinstance(text, unicode): + return text.encode(encoding or _encoding, 'xmlcharrefreplace') + else: + return text + +def _binstr(obj): + # Ensure that we have an encoded (binary) string representation of obj, + # even if it is a unicode string. + if isinstance(obj, _unicode): + return obj.encode(_encoding, 'xmlcharrefreplace') + return str(obj) + # ----------------------------------------------------- module manipulation def ispackage(path): @@ -223,7 +255,7 @@ def synopsis(filename, cache={}): if info and 'b' in info[2]: # binary modules have to be imported try: module = imp.load_module('__temp__', file, filename, info[1:]) except: return None - result = (module.__doc__ or '').splitlines()[0] + result = module.__doc__.splitlines()[0] if module.__doc__ else None del sys.modules['__temp__'] else: # text modules can be directly examined result = source_synopsis(file) @@ -342,7 +374,9 @@ def fail(self, object, name=None, *args): docmodule = docclass = docroutine = docother = docproperty = docdata = fail - def getdocloc(self, object): + def getdocloc(self, object, + basedir=os.path.join(sys.exec_prefix, "lib", + "python"+sys.version[0:3])): """Return the location of module docs or None""" try: @@ -351,9 +385,8 @@ def getdocloc(self, object): file = '(built-in)' docloc = os.environ.get("PYTHONDOCS", - "http://docs.python.org/library") - basedir = os.path.join(sys.exec_prefix, "lib", - "python"+sys.version[0:3]) + "https://docs.python.org/library") + basedir = os.path.normcase(basedir) if (isinstance(object, type(os)) and (object.__name__ in ('errno', 'exceptions', 'gc', 'imp', 'marshal', 'posix', 'signal', 'sys', @@ -361,10 +394,10 @@ def getdocloc(self, object): (file.startswith(basedir) and not file.startswith(os.path.join(basedir, 'site-packages')))) and object.__name__ not in ('xml.etree', 'test.pydoc_mod')): - if docloc.startswith("http://"): - docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__) + if docloc.startswith(("http://", "https://")): + docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__.lower()) else: - docloc = os.path.join(docloc, object.__name__ + ".html") + docloc = os.path.join(docloc, object.__name__.lower() + ".html") else: docloc = None return docloc @@ -424,12 +457,13 @@ class HTMLDoc(Doc): def page(self, title, contents): """Format an HTML page.""" - return ''' + return _encode(''' Python: %s + %s -''' % (title, contents) +''' % (title, contents), 'ascii') def heading(self, title, fgcol, bgcol, extras=''): """Format a page heading.""" @@ -549,10 +583,15 @@ def markup(self, text, escape=None, funcs={}, classes={}, methods={}): elif pep: url = 'http://www.python.org/dev/peps/pep-%04d/' % int(pep) results.append('%s' % (url, escape(all))) + elif selfdot: + # Create a link for methods like 'self.method(...)' + # and use for attributes like 'self.attr' + if text[end:end+1] == '(': + results.append('self.' + self.namelink(name, methods)) + else: + results.append('self.%s' % name) elif text[end:end+1] == '(': results.append(self.namelink(name, methods, funcs, classes)) - elif selfdot: - results.append('self.%s' % name) else: results.append(self.namelink(name, classes)) here = end @@ -606,12 +645,12 @@ def docmodule(self, object, name=None, mod=None, *ignored): filelink = '(built-in)' info = [] if hasattr(object, '__version__'): - version = str(object.__version__) + version = _binstr(object.__version__) if version[:11] == '$' + 'Revision: ' and version[-1:] == '$': version = strip(version[11:-1]) info.append('version %s' % self.escape(version)) if hasattr(object, '__date__'): - info.append(self.escape(str(object.__date__))) + info.append(self.escape(_binstr(object.__date__))) if info: head = head + ' (%s)' % join(info, ', ') docloc = self.getdocloc(object) @@ -694,11 +733,11 @@ def docmodule(self, object, name=None, mod=None, *ignored): result = result + self.bigsection( 'Data', '#ffffff', '#55aa55', join(contents, '
\n')) if hasattr(object, '__author__'): - contents = self.markup(str(object.__author__), self.preformat) + contents = self.markup(_binstr(object.__author__), self.preformat) result = result + self.bigsection( 'Author', '#ffffff', '#7799ee', contents) if hasattr(object, '__credits__'): - contents = self.markup(str(object.__credits__), self.preformat) + contents = self.markup(_binstr(object.__credits__), self.preformat) result = result + self.bigsection( 'Credits', '#ffffff', '#7799ee', contents) @@ -1082,13 +1121,8 @@ def docmodule(self, object, name=None, mod=None): modpkgs.append(modname) modpkgs.sort() - try: - result = result + self.section( - 'PACKAGE CONTENTS', join(modpkgs, '\n')) - except: - result = result + self.section( - 'PACKAGE CONTENTS', 'Skipped due to Unicode Path') - + result = result + self.section( + 'PACKAGE CONTENTS', join(modpkgs, '\n')) # Detect submodules as sometimes created by C extensions submodules = [] @@ -1121,16 +1155,16 @@ def docmodule(self, object, name=None, mod=None): result = result + self.section('DATA', join(contents, '\n')) if hasattr(object, '__version__'): - version = str(object.__version__) + version = _binstr(object.__version__) if version[:11] == '$' + 'Revision: ' and version[-1:] == '$': version = strip(version[11:-1]) result = result + self.section('VERSION', version) if hasattr(object, '__date__'): - result = result + self.section('DATE', str(object.__date__)) + result = result + self.section('DATE', _binstr(object.__date__)) if hasattr(object, '__author__'): - result = result + self.section('AUTHOR', str(object.__author__)) + result = result + self.section('AUTHOR', _binstr(object.__author__)) if hasattr(object, '__credits__'): - result = result + self.section('CREDITS', str(object.__credits__)) + result = result + self.section('CREDITS', _binstr(object.__credits__)) return result def docclass(self, object, name=None, mod=None, *ignored): @@ -1345,6 +1379,8 @@ def getpager(): """Decide what method to use for paging through text.""" if type(sys.stdout) is not types.FileType: return plainpager + if not hasattr(sys.stdin, "isatty"): + return plainpager if not sys.stdin.isatty() or not sys.stdout.isatty(): return plainpager if 'PAGER' in os.environ: @@ -1380,7 +1416,7 @@ def pipepager(text, cmd): """Page through text by feeding it to another program.""" pipe = os.popen(cmd, 'w') try: - pipe.write(text) + pipe.write(_encode(text)) pipe.close() except IOError: pass # Ignore broken pipes caused by quitting the pager program. @@ -1390,7 +1426,7 @@ def tempfilepager(text, cmd): import tempfile filename = tempfile.mktemp() file = open(filename, 'w') - file.write(text) + file.write(_encode(text)) file.close() try: os.system(cmd + ' "' + filename + '"') @@ -1399,7 +1435,7 @@ def tempfilepager(text, cmd): def ttypager(text): """Page through text on a text terminal.""" - lines = split(plain(text), '\n') + lines = plain(_encode(plain(text), getattr(sys.stdout, 'encoding', _encoding))).split('\n') try: import tty fd = sys.stdin.fileno() @@ -1411,7 +1447,13 @@ def ttypager(text): getchar = lambda: sys.stdin.readline()[:-1][:1] try: - r = inc = os.environ.get('LINES', 25) - 1 + try: + h = int(os.environ.get('LINES', 0)) + except ValueError: + h = 0 + if h <= 1: + h = 25 + r = inc = h - 1 sys.stdout.write(join(lines[:inc], '\n') + '\n') while lines[r:]: sys.stdout.write('-- more --') @@ -1437,7 +1479,7 @@ def ttypager(text): def plainpager(text): """Simply print unformatted text. This is the ultimate fallback.""" - sys.stdout.write(plain(text)) + sys.stdout.write(_encode(plain(text), getattr(sys.stdout, 'encoding', _encoding))) def describe(thing): """Produce a short description of the given thing.""" @@ -1499,7 +1541,7 @@ def resolve(thing, forceload=0): """Given an object or a path to an object, get the object and its name.""" if isinstance(thing, str): object = locate(thing, forceload) - if not object: + if object is None: raise ImportError, 'no Python documentation found for %r' % thing return object, thing else: @@ -1565,7 +1607,7 @@ class Helper: # in pydoc_data/topics.py. # # CAUTION: if you change one of these dictionaries, be sure to adapt the - # list of needed labels in Doc/tools/sphinxext/pyspecific.py and + # list of needed labels in Doc/tools/pyspecific.py and # regenerate the pydoc_data/topics.py file by running # make pydoc-topics # in Doc/ and copying the output file into the Lib/ directory. @@ -1979,7 +2021,7 @@ def run(self, callback, key=None, completer=None, onerror=None): path = None else: module = loader.load_module(modname) - desc = (module.__doc__ or '').splitlines()[0] + desc = module.__doc__.splitlines()[0] if module.__doc__ else '' path = getattr(module,'__file__',None) if find(lower(modname + ' - ' + desc), key) >= 0: callback(path, modname, desc) @@ -2064,7 +2106,6 @@ class DocServer(BaseHTTPServer.HTTPServer): def __init__(self, port, callback): host = 'localhost' self.address = (host, port) - self.url = 'http://%s:%d/' % (host, port) self.callback = callback self.base.__init__(self, self.address, self.handler) @@ -2077,6 +2118,7 @@ def serve_until_quit(self): def server_activate(self): self.base.server_activate(self) + self.url = 'http://%s:%d/' % (self.address[0], self.server_port) if self.callback: self.callback(self) DocServer.base = BaseHTTPServer.HTTPServer @@ -2203,8 +2245,11 @@ def search(self, event=None): if self.scanner: self.scanner.quit = 1 self.scanner = ModuleScanner() + def onerror(modname): + pass threading.Thread(target=self.scanner.run, - args=(self.update, key, self.done)).start() + args=(self.update, key, self.done), + kwargs=dict(onerror=onerror)).start() def update(self, path, modname, desc): if modname[-9:] == '.__init__': @@ -2350,7 +2395,8 @@ def stopped(): Search for a keyword in the synopsis lines of all available modules. %s -p - Start an HTTP server on the given port on the local machine. + Start an HTTP server on the given port on the local machine. Port + number 0 can be used to get an arbitrary unused port. %s -g Pop up a graphical interface for finding and serving documentation. diff --git a/PythonLib/full/pydoc_data/__init__.py b/PythonLib/full/pydoc_data/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/PythonLib/full/pydoc_data/topics.py b/PythonLib/full/pydoc_data/topics.py deleted file mode 100644 index 94088b11..00000000 --- a/PythonLib/full/pydoc_data/topics.py +++ /dev/null @@ -1,77 +0,0 @@ -# Autogenerated by Sphinx on Sat Oct 26 13:44:16 2013 -topics = {'assert': '\nThe ``assert`` statement\n************************\n\nAssert statements are a convenient way to insert debugging assertions\ninto a program:\n\n assert_stmt ::= "assert" expression ["," expression]\n\nThe simple form, ``assert expression``, is equivalent to\n\n if __debug__:\n if not expression: raise AssertionError\n\nThe extended form, ``assert expression1, expression2``, is equivalent\nto\n\n if __debug__:\n if not expression1: raise AssertionError(expression2)\n\nThese equivalences assume that ``__debug__`` and ``AssertionError``\nrefer to the built-in variables with those names. In the current\nimplementation, the built-in variable ``__debug__`` is ``True`` under\nnormal circumstances, ``False`` when optimization is requested\n(command line option -O). The current code generator emits no code\nfor an assert statement when optimization is requested at compile\ntime. Note that it is unnecessary to include the source code for the\nexpression that failed in the error message; it will be displayed as\npart of the stack trace.\n\nAssignments to ``__debug__`` are illegal. The value for the built-in\nvariable is determined when the interpreter starts.\n', - 'assignment': '\nAssignment statements\n*********************\n\nAssignment statements are used to (re)bind names to values and to\nmodify attributes or items of mutable objects:\n\n assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)\n target_list ::= target ("," target)* [","]\n target ::= identifier\n | "(" target_list ")"\n | "[" target_list "]"\n | attributeref\n | subscription\n | slicing\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn assignment statement evaluates the expression list (remember that\nthis can be a single expression or a comma-separated list, the latter\nyielding a tuple) and assigns the single resulting object to each of\nthe target lists, from left to right.\n\nAssignment is defined recursively depending on the form of the target\n(list). When a target is part of a mutable object (an attribute\nreference, subscription or slicing), the mutable object must\nultimately perform the assignment and decide about its validity, and\nmay raise an exception if the assignment is unacceptable. The rules\nobserved by various types and the exceptions raised are given with the\ndefinition of the object types (see section *The standard type\nhierarchy*).\n\nAssignment of an object to a target list is recursively defined as\nfollows.\n\n* If the target list is a single target: The object is assigned to\n that target.\n\n* If the target list is a comma-separated list of targets: The object\n must be an iterable with the same number of items as there are\n targets in the target list, and the items are assigned, from left to\n right, to the corresponding targets.\n\nAssignment of an object to a single target is recursively defined as\nfollows.\n\n* If the target is an identifier (name):\n\n * If the name does not occur in a ``global`` statement in the\n current code block: the name is bound to the object in the current\n local namespace.\n\n * Otherwise: the name is bound to the object in the current global\n namespace.\n\n The name is rebound if it was already bound. This may cause the\n reference count for the object previously bound to the name to reach\n zero, causing the object to be deallocated and its destructor (if it\n has one) to be called.\n\n* If the target is a target list enclosed in parentheses or in square\n brackets: The object must be an iterable with the same number of\n items as there are targets in the target list, and its items are\n assigned, from left to right, to the corresponding targets.\n\n* If the target is an attribute reference: The primary expression in\n the reference is evaluated. It should yield an object with\n assignable attributes; if this is not the case, ``TypeError`` is\n raised. That object is then asked to assign the assigned object to\n the given attribute; if it cannot perform the assignment, it raises\n an exception (usually but not necessarily ``AttributeError``).\n\n Note: If the object is a class instance and the attribute reference\n occurs on both sides of the assignment operator, the RHS expression,\n ``a.x`` can access either an instance attribute or (if no instance\n attribute exists) a class attribute. The LHS target ``a.x`` is\n always set as an instance attribute, creating it if necessary.\n Thus, the two occurrences of ``a.x`` do not necessarily refer to the\n same attribute: if the RHS expression refers to a class attribute,\n the LHS creates a new instance attribute as the target of the\n assignment:\n\n class Cls:\n x = 3 # class variable\n inst = Cls()\n inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3\n\n This description does not necessarily apply to descriptor\n attributes, such as properties created with ``property()``.\n\n* If the target is a subscription: The primary expression in the\n reference is evaluated. It should yield either a mutable sequence\n object (such as a list) or a mapping object (such as a dictionary).\n Next, the subscript expression is evaluated.\n\n If the primary is a mutable sequence object (such as a list), the\n subscript must yield a plain integer. If it is negative, the\n sequence\'s length is added to it. The resulting value must be a\n nonnegative integer less than the sequence\'s length, and the\n sequence is asked to assign the assigned object to its item with\n that index. If the index is out of range, ``IndexError`` is raised\n (assignment to a subscripted sequence cannot add new items to a\n list).\n\n If the primary is a mapping object (such as a dictionary), the\n subscript must have a type compatible with the mapping\'s key type,\n and the mapping is then asked to create a key/datum pair which maps\n the subscript to the assigned object. This can either replace an\n existing key/value pair with the same key value, or insert a new\n key/value pair (if no key with the same value existed).\n\n* If the target is a slicing: The primary expression in the reference\n is evaluated. It should yield a mutable sequence object (such as a\n list). The assigned object should be a sequence object of the same\n type. Next, the lower and upper bound expressions are evaluated,\n insofar they are present; defaults are zero and the sequence\'s\n length. The bounds should evaluate to (small) integers. If either\n bound is negative, the sequence\'s length is added to it. The\n resulting bounds are clipped to lie between zero and the sequence\'s\n length, inclusive. Finally, the sequence object is asked to replace\n the slice with the items of the assigned sequence. The length of\n the slice may be different from the length of the assigned sequence,\n thus changing the length of the target sequence, if the object\n allows it.\n\n**CPython implementation detail:** In the current implementation, the\nsyntax for targets is taken to be the same as for expressions, and\ninvalid syntax is rejected during the code generation phase, causing\nless detailed error messages.\n\nWARNING: Although the definition of assignment implies that overlaps\nbetween the left-hand side and the right-hand side are \'safe\' (for\nexample ``a, b = b, a`` swaps two variables), overlaps *within* the\ncollection of assigned-to variables are not safe! For instance, the\nfollowing program prints ``[0, 2]``:\n\n x = [0, 1]\n i = 0\n i, x[i] = 1, 2\n print x\n\n\nAugmented assignment statements\n===============================\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n', - 'atom-identifiers': '\nIdentifiers (Names)\n*******************\n\nAn identifier occurring as an atom is a name. See section\n*Identifiers and keywords* for lexical definition and section *Naming\nand binding* for documentation of naming and binding.\n\nWhen the name is bound to an object, evaluation of the atom yields\nthat object. When a name is not bound, an attempt to evaluate it\nraises a ``NameError`` exception.\n\n**Private name mangling:** When an identifier that textually occurs in\na class definition begins with two or more underscore characters and\ndoes not end in two or more underscores, it is considered a *private\nname* of that class. Private names are transformed to a longer form\nbefore code is generated for them. The transformation inserts the\nclass name, with leading underscores removed and a single underscore\ninserted, in front of the name. For example, the identifier\n``__spam`` occurring in a class named ``Ham`` will be transformed to\n``_Ham__spam``. This transformation is independent of the syntactical\ncontext in which the identifier is used. If the transformed name is\nextremely long (longer than 255 characters), implementation defined\ntruncation may happen. If the class name consists only of underscores,\nno transformation is done.\n', - 'atom-literals': "\nLiterals\n********\n\nPython supports string literals and various numeric literals:\n\n literal ::= stringliteral | integer | longinteger\n | floatnumber | imagnumber\n\nEvaluation of a literal yields an object of the given type (string,\ninteger, long integer, floating point number, complex number) with the\ngiven value. The value may be approximated in the case of floating\npoint and imaginary (complex) literals. See section *Literals* for\ndetails.\n\nAll literals correspond to immutable data types, and hence the\nobject's identity is less important than its value. Multiple\nevaluations of literals with the same value (either the same\noccurrence in the program text or a different occurrence) may obtain\nthe same object or a different object with the same value.\n", - 'attribute-access': '\nCustomizing attribute access\n****************************\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of ``x.name``)\nfor class instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for ``self``). ``name`` is the attribute name.\n This method should return the (computed) attribute value or raise\n an ``AttributeError`` exception.\n\n Note that if the attribute is found through the normal mechanism,\n ``__getattr__()`` is not called. (This is an intentional asymmetry\n between ``__getattr__()`` and ``__setattr__()``.) This is done both\n for efficiency reasons and because otherwise ``__getattr__()``\n would have no way to access other attributes of the instance. Note\n that at least for instance variables, you can fake total control by\n not inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n ``__getattribute__()`` method below for a way to actually get total\n control in new-style classes.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If ``__setattr__()`` wants to assign to an instance attribute, it\n should not simply execute ``self.name = value`` --- this would\n cause a recursive call to itself. Instead, it should insert the\n value in the dictionary of instance attributes, e.g.,\n ``self.__dict__[name] = value``. For new-style classes, rather\n than accessing the instance dictionary, it should call the base\n class method with the same name, for example,\n ``object.__setattr__(self, name, value)``.\n\nobject.__delattr__(self, name)\n\n Like ``__setattr__()`` but for attribute deletion instead of\n assignment. This should only be implemented if ``del obj.name`` is\n meaningful for the object.\n\n\nMore attribute access for new-style classes\n===========================================\n\nThe following methods only apply to new-style classes.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines\n ``__getattr__()``, the latter will not be called unless\n ``__getattribute__()`` either calls it explicitly or raises an\n ``AttributeError``. This method should return the (computed)\n attribute value or raise an ``AttributeError`` exception. In order\n to avoid infinite recursion in this method, its implementation\n should always call the base class method with the same name to\n access any attributes it needs, for example,\n ``object.__getattribute__(self, name)``.\n\n Note: This method may still be bypassed when looking up special methods\n as the result of implicit invocation via language syntax or\n built-in functions. See *Special method lookup for new-style\n classes*.\n\n\nImplementing Descriptors\n========================\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents). In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' ``__dict__``.\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or ``None`` when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an\n ``AttributeError`` exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\n\nInvoking Descriptors\n====================\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: ``__get__()``, ``__set__()``, and\n``__delete__()``. If any of those methods are defined for an object,\nit is said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, ``a.x`` has a\nlookup chain starting with ``a.__dict__[\'x\']``, then\n``type(a).__dict__[\'x\']``, and continuing through the base classes of\n``type(a)`` excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called. Note that descriptors are only invoked for new\nstyle objects or classes (ones that subclass ``object()`` or\n``type()``).\n\nThe starting point for descriptor invocation is a binding, ``a.x``.\nHow the arguments are assembled depends on ``a``:\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: ``x.__get__(a)``.\n\nInstance Binding\n If binding to a new-style object instance, ``a.x`` is transformed\n into the call: ``type(a).__dict__[\'x\'].__get__(a, type(a))``.\n\nClass Binding\n If binding to a new-style class, ``A.x`` is transformed into the\n call: ``A.__dict__[\'x\'].__get__(None, A)``.\n\nSuper Binding\n If ``a`` is an instance of ``super``, then the binding ``super(B,\n obj).m()`` searches ``obj.__class__.__mro__`` for the base class\n ``A`` immediately preceding ``B`` and then invokes the descriptor\n with the call: ``A.__dict__[\'m\'].__get__(obj, obj.__class__)``.\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. A descriptor can define\nany combination of ``__get__()``, ``__set__()`` and ``__delete__()``.\nIf it does not define ``__get__()``, then accessing the attribute will\nreturn the descriptor object itself unless there is a value in the\nobject\'s instance dictionary. If the descriptor defines ``__set__()``\nand/or ``__delete__()``, it is a data descriptor; if it defines\nneither, it is a non-data descriptor. Normally, data descriptors\ndefine both ``__get__()`` and ``__set__()``, while non-data\ndescriptors have just the ``__get__()`` method. Data descriptors with\n``__set__()`` and ``__get__()`` defined always override a redefinition\nin an instance dictionary. In contrast, non-data descriptors can be\noverridden by instances.\n\nPython methods (including ``staticmethod()`` and ``classmethod()``)\nare implemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe ``property()`` function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n=========\n\nBy default, instances of both old and new-style classes have a\ndictionary for attribute storage. This wastes space for objects\nhaving very few instance variables. The space consumption can become\nacute when creating large numbers of instances.\n\nThe default can be overridden by defining *__slots__* in a new-style\nclass definition. The *__slots__* declaration takes a sequence of\ninstance variables and reserves just enough space in each instance to\nhold a value for each variable. Space is saved because *__dict__* is\nnot created for each instance.\n\n__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. If defined in a\n new-style class, *__slots__* reserves space for the declared\n variables and prevents the automatic creation of *__dict__* and\n *__weakref__* for each instance.\n\n New in version 2.2.\n\nNotes on using *__slots__*\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises ``AttributeError``. If\n dynamic assignment of new variables is desired, then add\n ``\'__dict__\'`` to the sequence of strings in the *__slots__*\n declaration.\n\n Changed in version 2.3: Previously, adding ``\'__dict__\'`` to the\n *__slots__* declaration would not enable the assignment of new\n attributes not specifically listed in the sequence of instance\n variable names.\n\n* Without a *__weakref__* variable for each instance, classes defining\n *__slots__* do not support weak references to its instances. If weak\n reference support is needed, then add ``\'__weakref__\'`` to the\n sequence of strings in the *__slots__* declaration.\n\n Changed in version 2.3: Previously, adding ``\'__weakref__\'`` to the\n *__slots__* declaration would not enable support for weak\n references.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__* (which must only contain names\n of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the instance\n variable defined by the base class slot is inaccessible (except by\n retrieving its descriptor directly from the base class). This\n renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as ``long``, ``str`` and\n ``tuple``.\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\n also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n\n Changed in version 2.6: Previously, *__class__* assignment raised an\n error if either new or old class had *__slots__*.\n', - 'attribute-references': '\nAttribute references\n********************\n\nAn attribute reference is a primary followed by a period and a name:\n\n attributeref ::= primary "." identifier\n\nThe primary must evaluate to an object of a type that supports\nattribute references, e.g., a module, list, or an instance. This\nobject is then asked to produce the attribute whose name is the\nidentifier. If this attribute is not available, the exception\n``AttributeError`` is raised. Otherwise, the type and value of the\nobject produced is determined by the object. Multiple evaluations of\nthe same attribute reference may yield different objects.\n', - 'augassign': '\nAugmented assignment statements\n*******************************\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n', - 'binary': '\nBinary arithmetic operations\n****************************\n\nThe binary arithmetic operations have the conventional priority\nlevels. Note that some of these operations also apply to certain non-\nnumeric types. Apart from the power operator, there are only two\nlevels, one for multiplicative operators and one for additive\noperators:\n\n m_expr ::= u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" u_expr\n | m_expr "%" u_expr\n a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr\n\nThe ``*`` (multiplication) operator yields the product of its\narguments. The arguments must either both be numbers, or one argument\nmust be an integer (plain or long) and the other must be a sequence.\nIn the former case, the numbers are converted to a common type and\nthen multiplied together. In the latter case, sequence repetition is\nperformed; a negative repetition factor yields an empty sequence.\n\nThe ``/`` (division) and ``//`` (floor division) operators yield the\nquotient of their arguments. The numeric arguments are first\nconverted to a common type. Plain or long integer division yields an\ninteger of the same type; the result is that of mathematical division\nwith the \'floor\' function applied to the result. Division by zero\nraises the ``ZeroDivisionError`` exception.\n\nThe ``%`` (modulo) operator yields the remainder from the division of\nthe first argument by the second. The numeric arguments are first\nconverted to a common type. A zero right argument raises the\n``ZeroDivisionError`` exception. The arguments may be floating point\nnumbers, e.g., ``3.14%0.7`` equals ``0.34`` (since ``3.14`` equals\n``4*0.7 + 0.34``.) The modulo operator always yields a result with\nthe same sign as its second operand (or zero); the absolute value of\nthe result is strictly smaller than the absolute value of the second\noperand [2].\n\nThe integer division and modulo operators are connected by the\nfollowing identity: ``x == (x/y)*y + (x%y)``. Integer division and\nmodulo are also connected with the built-in function ``divmod()``:\n``divmod(x, y) == (x/y, x%y)``. These identities don\'t hold for\nfloating point numbers; there similar identities hold approximately\nwhere ``x/y`` is replaced by ``floor(x/y)`` or ``floor(x/y) - 1`` [3].\n\nIn addition to performing the modulo operation on numbers, the ``%``\noperator is also overloaded by string and unicode objects to perform\nstring formatting (also known as interpolation). The syntax for string\nformatting is described in the Python Library Reference, section\n*String Formatting Operations*.\n\nDeprecated since version 2.3: The floor division operator, the modulo\noperator, and the ``divmod()`` function are no longer defined for\ncomplex numbers. Instead, convert to a floating point number using\nthe ``abs()`` function if appropriate.\n\nThe ``+`` (addition) operator yields the sum of its arguments. The\narguments must either both be numbers or both sequences of the same\ntype. In the former case, the numbers are converted to a common type\nand then added together. In the latter case, the sequences are\nconcatenated.\n\nThe ``-`` (subtraction) operator yields the difference of its\narguments. The numeric arguments are first converted to a common\ntype.\n', - 'bitwise': '\nBinary bitwise operations\n*************************\n\nEach of the three bitwise operations has a different priority level:\n\n and_expr ::= shift_expr | and_expr "&" shift_expr\n xor_expr ::= and_expr | xor_expr "^" and_expr\n or_expr ::= xor_expr | or_expr "|" xor_expr\n\nThe ``&`` operator yields the bitwise AND of its arguments, which must\nbe plain or long integers. The arguments are converted to a common\ntype.\n\nThe ``^`` operator yields the bitwise XOR (exclusive OR) of its\narguments, which must be plain or long integers. The arguments are\nconverted to a common type.\n\nThe ``|`` operator yields the bitwise (inclusive) OR of its arguments,\nwhich must be plain or long integers. The arguments are converted to\na common type.\n', - 'bltin-code-objects': '\nCode Objects\n************\n\nCode objects are used by the implementation to represent "pseudo-\ncompiled" executable Python code such as a function body. They differ\nfrom function objects because they don\'t contain a reference to their\nglobal execution environment. Code objects are returned by the built-\nin ``compile()`` function and can be extracted from function objects\nthrough their ``func_code`` attribute. See also the ``code`` module.\n\nA code object can be executed or evaluated by passing it (instead of a\nsource string) to the ``exec`` statement or the built-in ``eval()``\nfunction.\n\nSee *The standard type hierarchy* for more information.\n', - 'bltin-ellipsis-object': '\nThe Ellipsis Object\n*******************\n\nThis object is used by extended slice notation (see *Slicings*). It\nsupports no special operations. There is exactly one ellipsis object,\nnamed ``Ellipsis`` (a built-in name).\n\nIt is written as ``Ellipsis``. When in a subscript, it can also be\nwritten as ``...``, for example ``seq[...]``.\n', - 'bltin-null-object': "\nThe Null Object\n***************\n\nThis object is returned by functions that don't explicitly return a\nvalue. It supports no special operations. There is exactly one null\nobject, named ``None`` (a built-in name).\n\nIt is written as ``None``.\n", - 'bltin-type-objects': "\nType Objects\n************\n\nType objects represent the various object types. An object's type is\naccessed by the built-in function ``type()``. There are no special\noperations on types. The standard module ``types`` defines names for\nall standard built-in types.\n\nTypes are written like this: ````.\n", - 'booleans': '\nBoolean operations\n******************\n\n or_test ::= and_test | or_test "or" and_test\n and_test ::= not_test | and_test "and" not_test\n not_test ::= comparison | "not" not_test\n\nIn the context of Boolean operations, and also when expressions are\nused by control flow statements, the following values are interpreted\nas false: ``False``, ``None``, numeric zero of all types, and empty\nstrings and containers (including strings, tuples, lists,\ndictionaries, sets and frozensets). All other values are interpreted\nas true. (See the ``__nonzero__()`` special method for a way to\nchange this.)\n\nThe operator ``not`` yields ``True`` if its argument is false,\n``False`` otherwise.\n\nThe expression ``x and y`` first evaluates *x*; if *x* is false, its\nvalue is returned; otherwise, *y* is evaluated and the resulting value\nis returned.\n\nThe expression ``x or y`` first evaluates *x*; if *x* is true, its\nvalue is returned; otherwise, *y* is evaluated and the resulting value\nis returned.\n\n(Note that neither ``and`` nor ``or`` restrict the value and type they\nreturn to ``False`` and ``True``, but rather return the last evaluated\nargument. This is sometimes useful, e.g., if ``s`` is a string that\nshould be replaced by a default value if it is empty, the expression\n``s or \'foo\'`` yields the desired value. Because ``not`` has to\ninvent a value anyway, it does not bother to return a value of the\nsame type as its argument, so e.g., ``not \'foo\'`` yields ``False``,\nnot ``\'\'``.)\n', - 'break': '\nThe ``break`` statement\n***********************\n\n break_stmt ::= "break"\n\n``break`` may only occur syntactically nested in a ``for`` or\n``while`` loop, but not nested in a function or class definition\nwithin that loop.\n\nIt terminates the nearest enclosing loop, skipping the optional\n``else`` clause if the loop has one.\n\nIf a ``for`` loop is terminated by ``break``, the loop control target\nkeeps its current value.\n\nWhen ``break`` passes control out of a ``try`` statement with a\n``finally`` clause, that ``finally`` clause is executed before really\nleaving the loop.\n', - 'callable-types': '\nEmulating callable objects\n**************************\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, ``x(arg1, arg2, ...)`` is a shorthand for\n ``x.__call__(arg1, arg2, ...)``.\n', - 'calls': '\nCalls\n*****\n\nA call calls a callable object (e.g., a *function*) with a possibly\nempty series of *arguments*:\n\n call ::= primary "(" [argument_list [","]\n | expression genexpr_for] ")"\n argument_list ::= positional_arguments ["," keyword_arguments]\n ["," "*" expression] ["," keyword_arguments]\n ["," "**" expression]\n | keyword_arguments ["," "*" expression]\n ["," "**" expression]\n | "*" expression ["," "*" expression] ["," "**" expression]\n | "**" expression\n positional_arguments ::= expression ("," expression)*\n keyword_arguments ::= keyword_item ("," keyword_item)*\n keyword_item ::= identifier "=" expression\n\nA trailing comma may be present after the positional and keyword\narguments but does not affect the semantics.\n\nThe primary must evaluate to a callable object (user-defined\nfunctions, built-in functions, methods of built-in objects, class\nobjects, methods of class instances, and certain class instances\nthemselves are callable; extensions may define additional callable\nobject types). All argument expressions are evaluated before the call\nis attempted. Please refer to section *Function definitions* for the\nsyntax of formal *parameter* lists.\n\nIf keyword arguments are present, they are first converted to\npositional arguments, as follows. First, a list of unfilled slots is\ncreated for the formal parameters. If there are N positional\narguments, they are placed in the first N slots. Next, for each\nkeyword argument, the identifier is used to determine the\ncorresponding slot (if the identifier is the same as the first formal\nparameter name, the first slot is used, and so on). If the slot is\nalready filled, a ``TypeError`` exception is raised. Otherwise, the\nvalue of the argument is placed in the slot, filling it (even if the\nexpression is ``None``, it fills the slot). When all arguments have\nbeen processed, the slots that are still unfilled are filled with the\ncorresponding default value from the function definition. (Default\nvalues are calculated, once, when the function is defined; thus, a\nmutable object such as a list or dictionary used as default value will\nbe shared by all calls that don\'t specify an argument value for the\ncorresponding slot; this should usually be avoided.) If there are any\nunfilled slots for which no default value is specified, a\n``TypeError`` exception is raised. Otherwise, the list of filled\nslots is used as the argument list for the call.\n\n**CPython implementation detail:** An implementation may provide\nbuilt-in functions whose positional parameters do not have names, even\nif they are \'named\' for the purpose of documentation, and which\ntherefore cannot be supplied by keyword. In CPython, this is the case\nfor functions implemented in C that use ``PyArg_ParseTuple()`` to\nparse their arguments.\n\nIf there are more positional arguments than there are formal parameter\nslots, a ``TypeError`` exception is raised, unless a formal parameter\nusing the syntax ``*identifier`` is present; in this case, that formal\nparameter receives a tuple containing the excess positional arguments\n(or an empty tuple if there were no excess positional arguments).\n\nIf any keyword argument does not correspond to a formal parameter\nname, a ``TypeError`` exception is raised, unless a formal parameter\nusing the syntax ``**identifier`` is present; in this case, that\nformal parameter receives a dictionary containing the excess keyword\narguments (using the keywords as keys and the argument values as\ncorresponding values), or a (new) empty dictionary if there were no\nexcess keyword arguments.\n\nIf the syntax ``*expression`` appears in the function call,\n``expression`` must evaluate to an iterable. Elements from this\niterable are treated as if they were additional positional arguments;\nif there are positional arguments *x1*, ..., *xN*, and ``expression``\nevaluates to a sequence *y1*, ..., *yM*, this is equivalent to a call\nwith M+N positional arguments *x1*, ..., *xN*, *y1*, ..., *yM*.\n\nA consequence of this is that although the ``*expression`` syntax may\nappear *after* some keyword arguments, it is processed *before* the\nkeyword arguments (and the ``**expression`` argument, if any -- see\nbelow). So:\n\n >>> def f(a, b):\n ... print a, b\n ...\n >>> f(b=1, *(2,))\n 2 1\n >>> f(a=1, *(2,))\n Traceback (most recent call last):\n File "", line 1, in ?\n TypeError: f() got multiple values for keyword argument \'a\'\n >>> f(1, *(2,))\n 1 2\n\nIt is unusual for both keyword arguments and the ``*expression``\nsyntax to be used in the same call, so in practice this confusion does\nnot arise.\n\nIf the syntax ``**expression`` appears in the function call,\n``expression`` must evaluate to a mapping, the contents of which are\ntreated as additional keyword arguments. In the case of a keyword\nappearing in both ``expression`` and as an explicit keyword argument,\na ``TypeError`` exception is raised.\n\nFormal parameters using the syntax ``*identifier`` or ``**identifier``\ncannot be used as positional argument slots or as keyword argument\nnames. Formal parameters using the syntax ``(sublist)`` cannot be\nused as keyword argument names; the outermost sublist corresponds to a\nsingle unnamed argument slot, and the argument value is assigned to\nthe sublist using the usual tuple assignment rules after all other\nparameter processing is done.\n\nA call always returns some value, possibly ``None``, unless it raises\nan exception. How this value is computed depends on the type of the\ncallable object.\n\nIf it is---\n\na user-defined function:\n The code block for the function is executed, passing it the\n argument list. The first thing the code block will do is bind the\n formal parameters to the arguments; this is described in section\n *Function definitions*. When the code block executes a ``return``\n statement, this specifies the return value of the function call.\n\na built-in function or method:\n The result is up to the interpreter; see *Built-in Functions* for\n the descriptions of built-in functions and methods.\n\na class object:\n A new instance of that class is returned.\n\na class instance method:\n The corresponding user-defined function is called, with an argument\n list that is one longer than the argument list of the call: the\n instance becomes the first argument.\n\na class instance:\n The class must define a ``__call__()`` method; the effect is then\n the same as if that method was called.\n', - 'class': '\nClass definitions\n*****************\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= "class" classname [inheritance] ":" suite\n inheritance ::= "(" [expression_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. It first evaluates the\ninheritance list, if present. Each item in the inheritance list\nshould evaluate to a class object or class type which allows\nsubclassing. The class\'s suite is then executed in a new execution\nframe (see section *Naming and binding*), using a newly created local\nnamespace and the original global namespace. (Usually, the suite\ncontains only function definitions.) When the class\'s suite finishes\nexecution, its execution frame is discarded but its local namespace is\nsaved. [4] A class object is then created using the inheritance list\nfor the base classes and the saved local namespace for the attribute\ndictionary. The class name is bound to this class object in the\noriginal local namespace.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass variables; they are shared by all instances. To create instance\nvariables, they can be set in a method with ``self.name = value``.\nBoth class and instance variables are accessible through the notation\n"``self.name``", and an instance variable hides a class variable with\nthe same name when accessed in this way. Class variables can be used\nas defaults for instance variables, but using mutable values there can\nlead to unexpected results. For *new-style class*es, descriptors can\nbe used to create instance variables with different implementation\ndetails.\n\nClass definitions, like function definitions, may be wrapped by one or\nmore *decorator* expressions. The evaluation rules for the decorator\nexpressions are the same as for functions. The result must be a class\nobject, which is then bound to the class name.\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless there\n is a ``finally`` clause which happens to raise another exception.\n That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of an\n exception or the execution of a ``return``, ``continue``, or\n ``break`` statement.\n\n[3] A string literal appearing as the first statement in the function\n body is transformed into the function\'s ``__doc__`` attribute and\n therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n body is transformed into the namespace\'s ``__doc__`` item and\n therefore the class\'s *docstring*.\n', - 'comparisons': '\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation. Also unlike C, expressions like ``a < b < c`` have the\ninterpretation that is conventional in mathematics:\n\n comparison ::= or_expr ( comp_operator or_expr )*\n comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!="\n | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: ``True`` or ``False``.\n\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\ny`` is found to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\nexcept that each expression is evaluated at most once.\n\nNote that ``a op1 b op2 c`` doesn\'t imply any kind of comparison\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\n(though perhaps not pretty).\n\nThe forms ``<>`` and ``!=`` are equivalent; for consistency with C,\n``!=`` is preferred; where ``!=`` is mentioned below ``<>`` is also\naccepted. The ``<>`` spelling is considered obsolescent.\n\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\nthe values of two objects. The objects need not have the same type.\nIf both are numbers, they are converted to a common type. Otherwise,\nobjects of different types *always* compare unequal, and are ordered\nconsistently but arbitrarily. You can control comparison behavior of\nobjects of non-built-in types by defining a ``__cmp__`` method or rich\ncomparison methods like ``__gt__``, described in section *Special\nmethod names*.\n\n(This unusual definition of comparison was used to simplify the\ndefinition of operations like sorting and the ``in`` and ``not in``\noperators. In the future, the comparison rules for objects of\ndifferent types are likely to change.)\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* Strings are compared lexicographically using the numeric equivalents\n (the result of the built-in function ``ord()``) of their characters.\n Unicode and 8-bit strings are fully interoperable in this behavior.\n [4]\n\n* Tuples and lists are compared lexicographically using comparison of\n corresponding elements. This means that to compare equal, each\n element must compare equal and the two sequences must be of the same\n type and have the same length.\n\n If not equal, the sequences are ordered the same as their first\n differing elements. For example, ``cmp([1,2,x], [1,2,y])`` returns\n the same as ``cmp(x,y)``. If the corresponding element does not\n exist, the shorter sequence is ordered first (for example, ``[1,2] <\n [1,2,3]``).\n\n* Mappings (dictionaries) compare equal if and only if their sorted\n (key, value) lists compare equal. [5] Outcomes other than equality\n are resolved consistently, but are not otherwise defined. [6]\n\n* Most other objects of built-in types compare unequal unless they are\n the same object; the choice whether one object is considered smaller\n or larger than another one is made arbitrarily but consistently\n within one execution of a program.\n\nThe operators ``in`` and ``not in`` test for collection membership.\n``x in s`` evaluates to true if *x* is a member of the collection *s*,\nand false otherwise. ``x not in s`` returns the negation of ``x in\ns``. The collection membership test has traditionally been bound to\nsequences; an object is a member of a collection if the collection is\na sequence and contains an element equal to that object. However, it\nmake sense for many other object types to support membership tests\nwithout being a sequence. In particular, dictionaries (for keys) and\nsets support membership testing.\n\nFor the list and tuple types, ``x in y`` is true if and only if there\nexists an index *i* such that ``x == y[i]`` is true.\n\nFor the Unicode and string types, ``x in y`` is true if and only if\n*x* is a substring of *y*. An equivalent test is ``y.find(x) != -1``.\nNote, *x* and *y* need not be the same type; consequently, ``u\'ab\' in\n\'abc\'`` will return ``True``. Empty strings are always considered to\nbe a substring of any other string, so ``"" in "abc"`` will return\n``True``.\n\nChanged in version 2.3: Previously, *x* was required to be a string of\nlength ``1``.\n\nFor user-defined classes which define the ``__contains__()`` method,\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\n\nFor user-defined classes which do not define ``__contains__()`` but do\ndefine ``__iter__()``, ``x in y`` is true if some value ``z`` with ``x\n== z`` is produced while iterating over ``y``. If an exception is\nraised during the iteration, it is as if ``in`` raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n``__getitem__()``, ``x in y`` is true if and only if there is a non-\nnegative integer index *i* such that ``x == y[i]``, and all lower\ninteger indices do not raise ``IndexError`` exception. (If any other\nexception is raised, it is as if ``in`` raised that exception).\n\nThe operator ``not in`` is defined to have the inverse true value of\n``in``.\n\nThe operators ``is`` and ``is not`` test for object identity: ``x is\ny`` is true if and only if *x* and *y* are the same object. ``x is\nnot y`` yields the inverse truth value. [7]\n', - 'compound': '\nCompound statements\n*******************\n\nCompound statements contain (groups of) other statements; they affect\nor control the execution of those other statements in some way. In\ngeneral, compound statements span multiple lines, although in simple\nincarnations a whole compound statement may be contained in one line.\n\nThe ``if``, ``while`` and ``for`` statements implement traditional\ncontrol flow constructs. ``try`` specifies exception handlers and/or\ncleanup code for a group of statements. Function and class\ndefinitions are also syntactically compound statements.\n\nCompound statements consist of one or more \'clauses.\' A clause\nconsists of a header and a \'suite.\' The clause headers of a\nparticular compound statement are all at the same indentation level.\nEach clause header begins with a uniquely identifying keyword and ends\nwith a colon. A suite is a group of statements controlled by a\nclause. A suite can be one or more semicolon-separated simple\nstatements on the same line as the header, following the header\'s\ncolon, or it can be one or more indented statements on subsequent\nlines. Only the latter form of suite can contain nested compound\nstatements; the following is illegal, mostly because it wouldn\'t be\nclear to which ``if`` clause a following ``else`` clause would belong:\n\n if test1: if test2: print x\n\nAlso note that the semicolon binds tighter than the colon in this\ncontext, so that in the following example, either all or none of the\n``print`` statements are executed:\n\n if x < y < z: print x; print y; print z\n\nSummarizing:\n\n compound_stmt ::= if_stmt\n | while_stmt\n | for_stmt\n | try_stmt\n | with_stmt\n | funcdef\n | classdef\n | decorated\n suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\n statement ::= stmt_list NEWLINE | compound_stmt\n stmt_list ::= simple_stmt (";" simple_stmt)* [";"]\n\nNote that statements always end in a ``NEWLINE`` possibly followed by\na ``DEDENT``. Also note that optional continuation clauses always\nbegin with a keyword that cannot start a statement, thus there are no\nambiguities (the \'dangling ``else``\' problem is solved in Python by\nrequiring nested ``if`` statements to be indented).\n\nThe formatting of the grammar rules in the following sections places\neach clause on a separate line for clarity.\n\n\nThe ``if`` statement\n====================\n\nThe ``if`` statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the ``if`` statement is executed or evaluated).\nIf all expressions are false, the suite of the ``else`` clause, if\npresent, is executed.\n\n\nThe ``while`` statement\n=======================\n\nThe ``while`` statement is used for repeated execution as long as an\nexpression is true:\n\n while_stmt ::= "while" expression ":" suite\n ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the ``else`` clause, if present, is\nexecuted and the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite. A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ngoes back to testing the expression.\n\n\nThe ``for`` statement\n=====================\n\nThe ``for`` statement is used to iterate over the elements of a\nsequence (such as a string, tuple or list) or other iterable object:\n\n for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject. An iterator is created for the result of the\n``expression_list``. The suite is then executed once for each item\nprovided by the iterator, in the order of ascending indices. Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments, and then the suite is executed. When the items are\nexhausted (which is immediately when the sequence is empty), the suite\nin the ``else`` clause, if present, is executed, and the loop\nterminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite. A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ncontinues with the next item, or with the ``else`` clause if there was\nno next item.\n\nThe suite may assign to the variable(s) in the target list; this does\nnot affect the next item assigned to it.\n\nThe target list is not deleted when the loop is finished, but if the\nsequence is empty, it will not have been assigned to at all by the\nloop. Hint: the built-in function ``range()`` returns a sequence of\nintegers suitable to emulate the effect of Pascal\'s ``for i := a to b\ndo``; e.g., ``range(3)`` returns the list ``[0, 1, 2]``.\n\nNote: There is a subtlety when the sequence is being modified by the loop\n (this can only occur for mutable sequences, i.e. lists). An internal\n counter is used to keep track of which item is used next, and this\n is incremented on each iteration. When this counter has reached the\n length of the sequence the loop terminates. This means that if the\n suite deletes the current (or a previous) item from the sequence,\n the next item will be skipped (since it gets the index of the\n current item which has already been treated). Likewise, if the\n suite inserts an item in the sequence before the current item, the\n current item will be treated again the next time through the loop.\n This can lead to nasty bugs that can be avoided by making a\n temporary copy using a slice of the whole sequence, e.g.,\n\n for x in a[:]:\n if x < 0: a.remove(x)\n\n\nThe ``try`` statement\n=====================\n\nThe ``try`` statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n try_stmt ::= try1_stmt | try2_stmt\n try1_stmt ::= "try" ":" suite\n ("except" [expression [("as" | ",") target]] ":" suite)+\n ["else" ":" suite]\n ["finally" ":" suite]\n try2_stmt ::= "try" ":" suite\n "finally" ":" suite\n\nChanged in version 2.5: In previous versions of Python,\n``try``...``except``...``finally`` did not work. ``try``...``except``\nhad to be nested in ``try``...``finally``.\n\nThe ``except`` clause(s) specify one or more exception handlers. When\nno exception occurs in the ``try`` clause, no exception handler is\nexecuted. When an exception occurs in the ``try`` suite, a search for\nan exception handler is started. This search inspects the except\nclauses in turn until one is found that matches the exception. An\nexpression-less except clause, if present, must be last; it matches\nany exception. For an except clause with an expression, that\nexpression is evaluated, and the clause matches the exception if the\nresulting object is "compatible" with the exception. An object is\ncompatible with an exception if it is the class or a base class of the\nexception object, or a tuple containing an item compatible with the\nexception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire ``try`` statement\nraised the exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified in that except clause, if present, and the except\nclause\'s suite is executed. All except clauses must have an\nexecutable block. When the end of this block is reached, execution\ncontinues normally after the entire try statement. (This means that\nif two nested handlers exist for the same exception, and the exception\noccurs in the try clause of the inner handler, the outer handler will\nnot handle the exception.)\n\nBefore an except clause\'s suite is executed, details about the\nexception are assigned to three variables in the ``sys`` module:\n``sys.exc_type`` receives the object identifying the exception;\n``sys.exc_value`` receives the exception\'s parameter;\n``sys.exc_traceback`` receives a traceback object (see section *The\nstandard type hierarchy*) identifying the point in the program where\nthe exception occurred. These details are also available through the\n``sys.exc_info()`` function, which returns a tuple ``(exc_type,\nexc_value, exc_traceback)``. Use of the corresponding variables is\ndeprecated in favor of this function, since their use is unsafe in a\nthreaded program. As of Python 1.5, the variables are restored to\ntheir previous values (before the call) when returning from a function\nthat handled an exception.\n\nThe optional ``else`` clause is executed if and when control flows off\nthe end of the ``try`` clause. [2] Exceptions in the ``else`` clause\nare not handled by the preceding ``except`` clauses.\n\nIf ``finally`` is present, it specifies a \'cleanup\' handler. The\n``try`` clause is executed, including any ``except`` and ``else``\nclauses. If an exception occurs in any of the clauses and is not\nhandled, the exception is temporarily saved. The ``finally`` clause is\nexecuted. If there is a saved exception, it is re-raised at the end\nof the ``finally`` clause. If the ``finally`` clause raises another\nexception or executes a ``return`` or ``break`` statement, the saved\nexception is discarded:\n\n def f():\n try:\n 1/0\n finally:\n return 42\n\n >>> f()\n 42\n\nThe exception information is not available to the program during\nexecution of the ``finally`` clause.\n\nWhen a ``return``, ``break`` or ``continue`` statement is executed in\nthe ``try`` suite of a ``try``...``finally`` statement, the\n``finally`` clause is also executed \'on the way out.\' A ``continue``\nstatement is illegal in the ``finally`` clause. (The reason is a\nproblem with the current implementation --- this restriction may be\nlifted in the future).\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the ``raise`` statement to\ngenerate exceptions may be found in section *The raise statement*.\n\n\nThe ``with`` statement\n======================\n\nNew in version 2.5.\n\nThe ``with`` statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common\n``try``...``except``...``finally`` usage patterns to be encapsulated\nfor convenient reuse.\n\n with_stmt ::= "with" with_item ("," with_item)* ":" suite\n with_item ::= expression ["as" target]\n\nThe execution of the ``with`` statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the ``with_item``)\n is evaluated to obtain a context manager.\n\n2. The context manager\'s ``__exit__()`` is loaded for later use.\n\n3. The context manager\'s ``__enter__()`` method is invoked.\n\n4. If a target was included in the ``with`` statement, the return\n value from ``__enter__()`` is assigned to it.\n\n Note: The ``with`` statement guarantees that if the ``__enter__()``\n method returns without an error, then ``__exit__()`` will always\n be called. Thus, if an error occurs during the assignment to the\n target list, it will be treated the same as an error occurring\n within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s ``__exit__()`` method is invoked. If an\n exception caused the suite to be exited, its type, value, and\n traceback are passed as arguments to ``__exit__()``. Otherwise,\n three ``None`` arguments are supplied.\n\n If the suite was exited due to an exception, and the return value\n from the ``__exit__()`` method was false, the exception is\n reraised. If the return value was true, the exception is\n suppressed, and execution continues with the statement following\n the ``with`` statement.\n\n If the suite was exited for any reason other than an exception, the\n return value from ``__exit__()`` is ignored, and execution proceeds\n at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple ``with`` statements were nested:\n\n with A() as a, B() as b:\n suite\n\nis equivalent to\n\n with A() as a:\n with B() as b:\n suite\n\nNote: In Python 2.5, the ``with`` statement is only allowed when the\n ``with_statement`` feature has been enabled. It is always enabled\n in Python 2.6.\n\nChanged in version 2.7: Support for multiple context expressions.\n\nSee also:\n\n **PEP 0343** - The "with" statement\n The specification, background, and examples for the Python\n ``with`` statement.\n\n\nFunction definitions\n====================\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n decorated ::= decorators (classdef | funcdef)\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n ( "*" identifier ["," "**" identifier]\n | "**" identifier\n | defparameter [","] )\n defparameter ::= parameter ["=" expression]\n sublist ::= parameter ("," parameter)* [","]\n parameter ::= identifier | "(" sublist ")"\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code:\n\n @f1(arg)\n @f2\n def func(): pass\n\nis equivalent to:\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nWhen one or more top-level *parameters* have the form *parameter*\n``=`` *expression*, the function is said to have "default parameter\nvalues." For a parameter with a default value, the corresponding\n*argument* may be omitted from a call, in which case the parameter\'s\ndefault value is substituted. If a parameter has a default value, all\nfollowing parameters must also have a default value --- this is a\nsyntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated when the function definition\nis executed.** This means that the expression is evaluated once, when\nthe function is defined, and that the same "pre-computed" value is\nused for each call. This is especially important to understand when a\ndefault parameter is a mutable object, such as a list or a dictionary:\nif the function modifies the object (e.g. by appending an item to a\nlist), the default value is in effect modified. This is generally not\nwhat was intended. A way around this is to use ``None`` as the\ndefault, and explicitly test for it in the body of the function, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n"``*identifier``" is present, it is initialized to a tuple receiving\nany excess positional parameters, defaulting to the empty tuple. If\nthe form "``**identifier``" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda\nexpressions, described in section *Lambdas*. Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a "``def``" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression. The "``def``" form is actually more powerful since it\nallows the execution of multiple statements.\n\n**Programmer\'s note:** Functions are first-class objects. A "``def``"\nform executed inside a function definition defines a local function\nthat can be returned or passed around. Free variables used in the\nnested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n\n\nClass definitions\n=================\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= "class" classname [inheritance] ":" suite\n inheritance ::= "(" [expression_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. It first evaluates the\ninheritance list, if present. Each item in the inheritance list\nshould evaluate to a class object or class type which allows\nsubclassing. The class\'s suite is then executed in a new execution\nframe (see section *Naming and binding*), using a newly created local\nnamespace and the original global namespace. (Usually, the suite\ncontains only function definitions.) When the class\'s suite finishes\nexecution, its execution frame is discarded but its local namespace is\nsaved. [4] A class object is then created using the inheritance list\nfor the base classes and the saved local namespace for the attribute\ndictionary. The class name is bound to this class object in the\noriginal local namespace.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass variables; they are shared by all instances. To create instance\nvariables, they can be set in a method with ``self.name = value``.\nBoth class and instance variables are accessible through the notation\n"``self.name``", and an instance variable hides a class variable with\nthe same name when accessed in this way. Class variables can be used\nas defaults for instance variables, but using mutable values there can\nlead to unexpected results. For *new-style class*es, descriptors can\nbe used to create instance variables with different implementation\ndetails.\n\nClass definitions, like function definitions, may be wrapped by one or\nmore *decorator* expressions. The evaluation rules for the decorator\nexpressions are the same as for functions. The result must be a class\nobject, which is then bound to the class name.\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless there\n is a ``finally`` clause which happens to raise another exception.\n That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of an\n exception or the execution of a ``return``, ``continue``, or\n ``break`` statement.\n\n[3] A string literal appearing as the first statement in the function\n body is transformed into the function\'s ``__doc__`` attribute and\n therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n body is transformed into the namespace\'s ``__doc__`` item and\n therefore the class\'s *docstring*.\n', - 'context-managers': '\nWith Statement Context Managers\n*******************************\n\nNew in version 2.5.\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a ``with`` statement. The context\nmanager handles the entry into, and the exit from, the desired runtime\ncontext for the execution of the block of code. Context managers are\nnormally invoked using the ``with`` statement (described in section\n*The with statement*), but can also be used by directly invoking their\nmethods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The ``with``\n statement will bind this method\'s return value to the target(s)\n specified in the ``as`` clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be ``None``.\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that ``__exit__()`` methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also:\n\n **PEP 0343** - The "with" statement\n The specification, background, and examples for the Python\n ``with`` statement.\n', - 'continue': '\nThe ``continue`` statement\n**************************\n\n continue_stmt ::= "continue"\n\n``continue`` may only occur syntactically nested in a ``for`` or\n``while`` loop, but not nested in a function or class definition or\n``finally`` clause within that loop. It continues with the next cycle\nof the nearest enclosing loop.\n\nWhen ``continue`` passes control out of a ``try`` statement with a\n``finally`` clause, that ``finally`` clause is executed before really\nstarting the next loop cycle.\n', - 'conversions': '\nArithmetic conversions\n**********************\n\nWhen a description of an arithmetic operator below uses the phrase\n"the numeric arguments are converted to a common type," the arguments\nare coerced using the coercion rules listed at *Coercion rules*. If\nboth arguments are standard numeric types, the following coercions are\napplied:\n\n* If either argument is a complex number, the other is converted to\n complex;\n\n* otherwise, if either argument is a floating point number, the other\n is converted to floating point;\n\n* otherwise, if either argument is a long integer, the other is\n converted to long integer;\n\n* otherwise, both must be plain integers and no conversion is\n necessary.\n\nSome additional rules apply for certain operators (e.g., a string left\nargument to the \'%\' operator). Extensions can define their own\ncoercions.\n', - 'customization': '\nBasic customization\n*******************\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. ``__new__()`` is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of ``__new__()`` should be the new object instance (usually\n an instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s ``__new__()`` method using\n ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If ``__new__()`` returns an instance of *cls*, then the new\n instance\'s ``__init__()`` method will be invoked like\n ``__init__(self[, ...])``, where *self* is the new instance and the\n remaining arguments are the same as were passed to ``__new__()``.\n\n If ``__new__()`` does not return an instance of *cls*, then the new\n instance\'s ``__init__()`` method will not be invoked.\n\n ``__new__()`` is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called when the instance is created. The arguments are those\n passed to the class constructor expression. If a base class has an\n ``__init__()`` method, the derived class\'s ``__init__()`` method,\n if any, must explicitly call it to ensure proper initialization of\n the base class part of the instance; for example:\n ``BaseClass.__init__(self, [args...])``. As a special constraint\n on constructors, no value may be returned; doing so will cause a\n ``TypeError`` to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a ``__del__()`` method,\n the derived class\'s ``__del__()`` method, if any, must explicitly\n call it to ensure proper deletion of the base class part of the\n instance. Note that it is possible (though not recommended!) for\n the ``__del__()`` method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n ``__del__()`` methods are called for objects that still exist when\n the interpreter exits.\n\n Note: ``del x`` doesn\'t directly call ``x.__del__()`` --- the former\n decrements the reference count for ``x`` by one, and the latter\n is only called when ``x``\'s reference count reaches zero. Some\n common situations that may prevent the reference count of an\n object from going to zero include: circular references between\n objects (e.g., a doubly-linked list or a tree data structure with\n parent and child pointers); a reference to the object on the\n stack frame of a function that caught an exception (the traceback\n stored in ``sys.exc_traceback`` keeps the stack frame alive); or\n a reference to the object on the stack frame that raised an\n unhandled exception in interactive mode (the traceback stored in\n ``sys.last_traceback`` keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the latter two situations can be resolved by storing ``None`` in\n ``sys.exc_traceback`` or ``sys.last_traceback``. Circular\n references which are garbage are detected when the option cycle\n detector is enabled (it\'s on by default), but can only be cleaned\n up if there are no Python-level ``__del__()`` methods involved.\n Refer to the documentation for the ``gc`` module for more\n information about how ``__del__()`` methods are handled by the\n cycle detector, particularly the description of the ``garbage``\n value.\n\n Warning: Due to the precarious circumstances under which ``__del__()``\n methods are invoked, exceptions that occur during their execution\n are ignored, and a warning is printed to ``sys.stderr`` instead.\n Also, when ``__del__()`` is invoked in response to a module being\n deleted (e.g., when execution of the program is done), other\n globals referenced by the ``__del__()`` method may already have\n been deleted or in the process of being torn down (e.g. the\n import machinery shutting down). For this reason, ``__del__()``\n methods should do the absolute minimum needed to maintain\n external invariants. Starting with version 1.5, Python\n guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the ``__del__()`` method is called.\n\n See also the *-R* command-line option.\n\nobject.__repr__(self)\n\n Called by the ``repr()`` built-in function and by string\n conversions (reverse quotes) to compute the "official" string\n representation of an object. If at all possible, this should look\n like a valid Python expression that could be used to recreate an\n object with the same value (given an appropriate environment). If\n this is not possible, a string of the form ``<...some useful\n description...>`` should be returned. The return value must be a\n string object. If a class defines ``__repr__()`` but not\n ``__str__()``, then ``__repr__()`` is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by the ``str()`` built-in function and by the ``print``\n statement to compute the "informal" string representation of an\n object. This differs from ``__repr__()`` in that it does not have\n to be a valid Python expression: a more convenient or concise\n representation may be used instead. The return value must be a\n string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n New in version 2.1.\n\n These are the so-called "rich comparison" methods, and are called\n for comparison operators in preference to ``__cmp__()`` below. The\n correspondence between operator symbols and method names is as\n follows: ``xy`` call ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and\n ``x>=y`` calls ``x.__ge__(y)``.\n\n A rich comparison method may return the singleton\n ``NotImplemented`` if it does not implement the operation for a\n given pair of arguments. By convention, ``False`` and ``True`` are\n returned for a successful comparison. However, these methods can\n return any value, so if the comparison operator is used in a\n Boolean context (e.g., in the condition of an ``if`` statement),\n Python will call ``bool()`` on the value to determine if the result\n is true or false.\n\n There are no implied relationships among the comparison operators.\n The truth of ``x==y`` does not imply that ``x!=y`` is false.\n Accordingly, when defining ``__eq__()``, one should also define\n ``__ne__()`` so that the operators will behave as expected. See\n the paragraph on ``__hash__()`` for some important notes on\n creating *hashable* objects which support custom comparison\n operations and are usable as dictionary keys.\n\n There are no swapped-argument versions of these methods (to be used\n when the left argument does not support the operation but the right\n argument does); rather, ``__lt__()`` and ``__gt__()`` are each\n other\'s reflection, ``__le__()`` and ``__ge__()`` are each other\'s\n reflection, and ``__eq__()`` and ``__ne__()`` are their own\n reflection.\n\n Arguments to rich comparison methods are never coerced.\n\n To automatically generate ordering operations from a single root\n operation, see ``functools.total_ordering()``.\n\nobject.__cmp__(self, other)\n\n Called by comparison operations if rich comparison (see above) is\n not defined. Should return a negative integer if ``self < other``,\n zero if ``self == other``, a positive integer if ``self > other``.\n If no ``__cmp__()``, ``__eq__()`` or ``__ne__()`` operation is\n defined, class instances are compared by object identity\n ("address"). See also the description of ``__hash__()`` for some\n important notes on creating *hashable* objects which support custom\n comparison operations and are usable as dictionary keys. (Note: the\n restriction that exceptions are not propagated by ``__cmp__()`` has\n been removed since Python 1.5.)\n\nobject.__rcmp__(self, other)\n\n Changed in version 2.1: No longer supported.\n\nobject.__hash__(self)\n\n Called by built-in function ``hash()`` and for operations on\n members of hashed collections including ``set``, ``frozenset``, and\n ``dict``. ``__hash__()`` should return an integer. The only\n required property is that objects which compare equal have the same\n hash value; it is advised to somehow mix together (e.g. using\n exclusive or) the hash values for the components of the object that\n also play a part in comparison of objects.\n\n If a class does not define a ``__cmp__()`` or ``__eq__()`` method\n it should not define a ``__hash__()`` operation either; if it\n defines ``__cmp__()`` or ``__eq__()`` but not ``__hash__()``, its\n instances will not be usable in hashed collections. If a class\n defines mutable objects and implements a ``__cmp__()`` or\n ``__eq__()`` method, it should not implement ``__hash__()``, since\n hashable collection implementations require that a object\'s hash\n value is immutable (if the object\'s hash value changes, it will be\n in the wrong hash bucket).\n\n User-defined classes have ``__cmp__()`` and ``__hash__()`` methods\n by default; with them, all objects compare unequal (except with\n themselves) and ``x.__hash__()`` returns ``id(x)``.\n\n Classes which inherit a ``__hash__()`` method from a parent class\n but change the meaning of ``__cmp__()`` or ``__eq__()`` such that\n the hash value returned is no longer appropriate (e.g. by switching\n to a value-based concept of equality instead of the default\n identity based equality) can explicitly flag themselves as being\n unhashable by setting ``__hash__ = None`` in the class definition.\n Doing so means that not only will instances of the class raise an\n appropriate ``TypeError`` when a program attempts to retrieve their\n hash value, but they will also be correctly identified as\n unhashable when checking ``isinstance(obj, collections.Hashable)``\n (unlike classes which define their own ``__hash__()`` to explicitly\n raise ``TypeError``).\n\n Changed in version 2.5: ``__hash__()`` may now also return a long\n integer object; the 32-bit integer is then derived from the hash of\n that object.\n\n Changed in version 2.6: ``__hash__`` may now be set to ``None`` to\n explicitly flag instances of a class as unhashable.\n\nobject.__nonzero__(self)\n\n Called to implement truth value testing and the built-in operation\n ``bool()``; should return ``False`` or ``True``, or their integer\n equivalents ``0`` or ``1``. When this method is not defined,\n ``__len__()`` is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither ``__len__()`` nor ``__nonzero__()``, all its instances are\n considered true.\n\nobject.__unicode__(self)\n\n Called to implement ``unicode()`` built-in; should return a Unicode\n object. When this method is not defined, string conversion is\n attempted, and the result of string conversion is converted to\n Unicode using the system default encoding.\n', - 'debugger': '\n``pdb`` --- The Python Debugger\n*******************************\n\nThe module ``pdb`` defines an interactive source code debugger for\nPython programs. It supports setting (conditional) breakpoints and\nsingle stepping at the source line level, inspection of stack frames,\nsource code listing, and evaluation of arbitrary Python code in the\ncontext of any stack frame. It also supports post-mortem debugging\nand can be called under program control.\n\nThe debugger is extensible --- it is actually defined as the class\n``Pdb``. This is currently undocumented but easily understood by\nreading the source. The extension interface uses the modules ``bdb``\nand ``cmd``.\n\nThe debugger\'s prompt is ``(Pdb)``. Typical usage to run a program\nunder control of the debugger is:\n\n >>> import pdb\n >>> import mymodule\n >>> pdb.run(\'mymodule.test()\')\n > (0)?()\n (Pdb) continue\n > (1)?()\n (Pdb) continue\n NameError: \'spam\'\n > (1)?()\n (Pdb)\n\n``pdb.py`` can also be invoked as a script to debug other scripts.\nFor example:\n\n python -m pdb myscript.py\n\nWhen invoked as a script, pdb will automatically enter post-mortem\ndebugging if the program being debugged exits abnormally. After post-\nmortem debugging (or after normal exit of the program), pdb will\nrestart the program. Automatic restarting preserves pdb\'s state (such\nas breakpoints) and in most cases is more useful than quitting the\ndebugger upon program\'s exit.\n\nNew in version 2.4: Restarting post-mortem behavior added.\n\nThe typical usage to break into the debugger from a running program is\nto insert\n\n import pdb; pdb.set_trace()\n\nat the location you want to break into the debugger. You can then\nstep through the code following this statement, and continue running\nwithout the debugger using the ``c`` command.\n\nThe typical usage to inspect a crashed program is:\n\n >>> import pdb\n >>> import mymodule\n >>> mymodule.test()\n Traceback (most recent call last):\n File "", line 1, in ?\n File "./mymodule.py", line 4, in test\n test2()\n File "./mymodule.py", line 3, in test2\n print spam\n NameError: spam\n >>> pdb.pm()\n > ./mymodule.py(3)test2()\n -> print spam\n (Pdb)\n\nThe module defines the following functions; each enters the debugger\nin a slightly different way:\n\npdb.run(statement[, globals[, locals]])\n\n Execute the *statement* (given as a string) under debugger control.\n The debugger prompt appears before any code is executed; you can\n set breakpoints and type ``continue``, or you can step through the\n statement using ``step`` or ``next`` (all these commands are\n explained below). The optional *globals* and *locals* arguments\n specify the environment in which the code is executed; by default\n the dictionary of the module ``__main__`` is used. (See the\n explanation of the ``exec`` statement or the ``eval()`` built-in\n function.)\n\npdb.runeval(expression[, globals[, locals]])\n\n Evaluate the *expression* (given as a string) under debugger\n control. When ``runeval()`` returns, it returns the value of the\n expression. Otherwise this function is similar to ``run()``.\n\npdb.runcall(function[, argument, ...])\n\n Call the *function* (a function or method object, not a string)\n with the given arguments. When ``runcall()`` returns, it returns\n whatever the function call returned. The debugger prompt appears\n as soon as the function is entered.\n\npdb.set_trace()\n\n Enter the debugger at the calling stack frame. This is useful to\n hard-code a breakpoint at a given point in a program, even if the\n code is not otherwise being debugged (e.g. when an assertion\n fails).\n\npdb.post_mortem([traceback])\n\n Enter post-mortem debugging of the given *traceback* object. If no\n *traceback* is given, it uses the one of the exception that is\n currently being handled (an exception must be being handled if the\n default is to be used).\n\npdb.pm()\n\n Enter post-mortem debugging of the traceback found in\n ``sys.last_traceback``.\n\nThe ``run*`` functions and ``set_trace()`` are aliases for\ninstantiating the ``Pdb`` class and calling the method of the same\nname. If you want to access further features, you have to do this\nyourself:\n\nclass class pdb.Pdb(completekey=\'tab\', stdin=None, stdout=None, skip=None)\n\n ``Pdb`` is the debugger class.\n\n The *completekey*, *stdin* and *stdout* arguments are passed to the\n underlying ``cmd.Cmd`` class; see the description there.\n\n The *skip* argument, if given, must be an iterable of glob-style\n module name patterns. The debugger will not step into frames that\n originate in a module that matches one of these patterns. [1]\n\n Example call to enable tracing with *skip*:\n\n import pdb; pdb.Pdb(skip=[\'django.*\']).set_trace()\n\n New in version 2.7: The *skip* argument.\n\n run(statement[, globals[, locals]])\n runeval(expression[, globals[, locals]])\n runcall(function[, argument, ...])\n set_trace()\n\n See the documentation for the functions explained above.\n', - 'del': '\nThe ``del`` statement\n*********************\n\n del_stmt ::= "del" target_list\n\nDeletion is recursively defined very similar to the way assignment is\ndefined. Rather than spelling it out in full details, here are some\nhints.\n\nDeletion of a target list recursively deletes each target, from left\nto right.\n\nDeletion of a name removes the binding of that name from the local or\nglobal namespace, depending on whether the name occurs in a ``global``\nstatement in the same code block. If the name is unbound, a\n``NameError`` exception will be raised.\n\nIt is illegal to delete a name from the local namespace if it occurs\nas a free variable in a nested block.\n\nDeletion of attribute references, subscriptions and slicings is passed\nto the primary object involved; deletion of a slicing is in general\nequivalent to assignment of an empty slice of the right type (but even\nthis is determined by the sliced object).\n', - 'dict': '\nDictionary displays\n*******************\n\nA dictionary display is a possibly empty series of key/datum pairs\nenclosed in curly braces:\n\n dict_display ::= "{" [key_datum_list | dict_comprehension] "}"\n key_datum_list ::= key_datum ("," key_datum)* [","]\n key_datum ::= expression ":" expression\n dict_comprehension ::= expression ":" expression comp_for\n\nA dictionary display yields a new dictionary object.\n\nIf a comma-separated sequence of key/datum pairs is given, they are\nevaluated from left to right to define the entries of the dictionary:\neach key object is used as a key into the dictionary to store the\ncorresponding datum. This means that you can specify the same key\nmultiple times in the key/datum list, and the final dictionary\'s value\nfor that key will be the last one given.\n\nA dict comprehension, in contrast to list and set comprehensions,\nneeds two expressions separated with a colon followed by the usual\n"for" and "if" clauses. When the comprehension is run, the resulting\nkey and value elements are inserted in the new dictionary in the order\nthey are produced.\n\nRestrictions on the types of the key values are listed earlier in\nsection *The standard type hierarchy*. (To summarize, the key type\nshould be *hashable*, which excludes all mutable objects.) Clashes\nbetween duplicate keys are not detected; the last datum (textually\nrightmost in the display) stored for a given key value prevails.\n', - 'dynamic-features': '\nInteraction with dynamic features\n*********************************\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nIf ``exec`` is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n``SyntaxError`` unless the exec explicitly specifies the local\nnamespace for the ``exec``. (In other words, ``exec obj`` would be\nillegal, but ``exec obj in ns`` would be legal.)\n\nThe ``eval()``, ``execfile()``, and ``input()`` functions and the\n``exec`` statement do not have access to the full environment for\nresolving names. Names may be resolved in the local and global\nnamespaces of the caller. Free variables are not resolved in the\nnearest enclosing namespace, but in the global namespace. [1] The\n``exec`` statement and the ``eval()`` and ``execfile()`` functions\nhave optional arguments to override the global and local namespace.\nIf only one namespace is specified, it is used for both.\n', - 'else': '\nThe ``if`` statement\n********************\n\nThe ``if`` statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the ``if`` statement is executed or evaluated).\nIf all expressions are false, the suite of the ``else`` clause, if\npresent, is executed.\n', - 'exceptions': '\nExceptions\n**********\n\nExceptions are a means of breaking out of the normal flow of control\nof a code block in order to handle errors or other exceptional\nconditions. An exception is *raised* at the point where the error is\ndetected; it may be *handled* by the surrounding code block or by any\ncode block that directly or indirectly invoked the code block where\nthe error occurred.\n\nThe Python interpreter raises an exception when it detects a run-time\nerror (such as division by zero). A Python program can also\nexplicitly raise an exception with the ``raise`` statement. Exception\nhandlers are specified with the ``try`` ... ``except`` statement. The\n``finally`` clause of such a statement can be used to specify cleanup\ncode which does not handle the exception, but is executed whether an\nexception occurred or not in the preceding code.\n\nPython uses the "termination" model of error handling: an exception\nhandler can find out what happened and continue execution at an outer\nlevel, but it cannot repair the cause of the error and retry the\nfailing operation (except by re-entering the offending piece of code\nfrom the top).\n\nWhen an exception is not handled at all, the interpreter terminates\nexecution of the program, or returns to its interactive main loop. In\neither case, it prints a stack backtrace, except when the exception is\n``SystemExit``.\n\nExceptions are identified by class instances. The ``except`` clause\nis selected depending on the class of the instance: it must reference\nthe class of the instance or a base class thereof. The instance can\nbe received by the handler and can carry additional information about\nthe exceptional condition.\n\nExceptions can also be identified by strings, in which case the\n``except`` clause is selected by object identity. An arbitrary value\ncan be raised along with the identifying string which can be passed to\nthe handler.\n\nNote: Messages to exceptions are not part of the Python API. Their\n contents may change from one version of Python to the next without\n warning and should not be relied on by code which will run under\n multiple versions of the interpreter.\n\nSee also the description of the ``try`` statement in section *The try\nstatement* and ``raise`` statement in section *The raise statement*.\n\n-[ Footnotes ]-\n\n[1] This limitation occurs because the code that is executed by these\n operations is not available at the time the module is compiled.\n', - 'execmodel': '\nExecution model\n***************\n\n\nNaming and binding\n==================\n\n*Names* refer to objects. Names are introduced by name binding\noperations. Each occurrence of a name in the program text refers to\nthe *binding* of that name established in the innermost function block\ncontaining the use.\n\nA *block* is a piece of Python program text that is executed as a\nunit. The following are blocks: a module, a function body, and a class\ndefinition. Each command typed interactively is a block. A script\nfile (a file given as standard input to the interpreter or specified\non the interpreter command line the first argument) is a code block.\nA script command (a command specified on the interpreter command line\nwith the \'**-c**\' option) is a code block. The file read by the\nbuilt-in function ``execfile()`` is a code block. The string argument\npassed to the built-in function ``eval()`` and to the ``exec``\nstatement is a code block. The expression read and evaluated by the\nbuilt-in function ``input()`` is a code block.\n\nA code block is executed in an *execution frame*. A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block\'s execution has\ncompleted.\n\nA *scope* defines the visibility of a name within a block. If a local\nvariable is defined in a block, its scope includes that block. If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name. The scope of names defined in a\nclass block is limited to the class block; it does not extend to the\ncode blocks of methods -- this includes generator expressions since\nthey are implemented using a function scope. This means that the\nfollowing will fail:\n\n class A:\n a = 42\n b = list(a + i for i in range(10))\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope. The set of all such scopes visible to a code block\nis called the block\'s *environment*.\n\nIf a name is bound in a block, it is a local variable of that block.\nIf a name is bound at the module level, it is a global variable. (The\nvariables of the module code block are local and global.) If a\nvariable is used in a code block but not defined there, it is a *free\nvariable*.\n\nWhen a name is not found at all, a ``NameError`` exception is raised.\nIf the name refers to a local variable that has not been bound, a\n``UnboundLocalError`` exception is raised. ``UnboundLocalError`` is a\nsubclass of ``NameError``.\n\nThe following constructs bind names: formal parameters to functions,\n``import`` statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, ``for`` loop header, in the\nsecond position of an ``except`` clause header or after ``as`` in a\n``with`` statement. The ``import`` statement of the form ``from ...\nimport *`` binds all names defined in the imported module, except\nthose beginning with an underscore. This form may only be used at the\nmodule level.\n\nA target occurring in a ``del`` statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name). It\nis illegal to unbind a name that is referenced by an enclosing scope;\nthe compiler will report a ``SyntaxError``.\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block. This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle. Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block. The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the global statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtins namespace, the namespace\nof the module ``__builtin__``. The global namespace is searched\nfirst. If the name is not found there, the builtins namespace is\nsearched. The global statement must precede all uses of the name.\n\nThe builtins namespace associated with the execution of a code block\nis actually found by looking up the name ``__builtins__`` in its\nglobal namespace; this should be a dictionary or a module (in the\nlatter case the module\'s dictionary is used). By default, when in the\n``__main__`` module, ``__builtins__`` is the built-in module\n``__builtin__`` (note: no \'s\'); when in any other module,\n``__builtins__`` is an alias for the dictionary of the ``__builtin__``\nmodule itself. ``__builtins__`` can be set to a user-created\ndictionary to create a weak form of restricted execution.\n\n**CPython implementation detail:** Users should not touch\n``__builtins__``; it is strictly an implementation detail. Users\nwanting to override values in the builtins namespace should ``import``\nthe ``__builtin__`` (no \'s\') module and modify its attributes\nappropriately.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported. The main module for a script is always called\n``__main__``.\n\nThe ``global`` statement has the same scope as a name binding\noperation in the same block. If the nearest enclosing scope for a\nfree variable contains a global statement, the free variable is\ntreated as a global.\n\nA class definition is an executable statement that may use and define\nnames. These references follow the normal rules for name resolution.\nThe namespace of the class definition becomes the attribute dictionary\nof the class. Names defined at the class scope are not visible in\nmethods.\n\n\nInteraction with dynamic features\n---------------------------------\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nIf ``exec`` is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n``SyntaxError`` unless the exec explicitly specifies the local\nnamespace for the ``exec``. (In other words, ``exec obj`` would be\nillegal, but ``exec obj in ns`` would be legal.)\n\nThe ``eval()``, ``execfile()``, and ``input()`` functions and the\n``exec`` statement do not have access to the full environment for\nresolving names. Names may be resolved in the local and global\nnamespaces of the caller. Free variables are not resolved in the\nnearest enclosing namespace, but in the global namespace. [1] The\n``exec`` statement and the ``eval()`` and ``execfile()`` functions\nhave optional arguments to override the global and local namespace.\nIf only one namespace is specified, it is used for both.\n\n\nExceptions\n==========\n\nExceptions are a means of breaking out of the normal flow of control\nof a code block in order to handle errors or other exceptional\nconditions. An exception is *raised* at the point where the error is\ndetected; it may be *handled* by the surrounding code block or by any\ncode block that directly or indirectly invoked the code block where\nthe error occurred.\n\nThe Python interpreter raises an exception when it detects a run-time\nerror (such as division by zero). A Python program can also\nexplicitly raise an exception with the ``raise`` statement. Exception\nhandlers are specified with the ``try`` ... ``except`` statement. The\n``finally`` clause of such a statement can be used to specify cleanup\ncode which does not handle the exception, but is executed whether an\nexception occurred or not in the preceding code.\n\nPython uses the "termination" model of error handling: an exception\nhandler can find out what happened and continue execution at an outer\nlevel, but it cannot repair the cause of the error and retry the\nfailing operation (except by re-entering the offending piece of code\nfrom the top).\n\nWhen an exception is not handled at all, the interpreter terminates\nexecution of the program, or returns to its interactive main loop. In\neither case, it prints a stack backtrace, except when the exception is\n``SystemExit``.\n\nExceptions are identified by class instances. The ``except`` clause\nis selected depending on the class of the instance: it must reference\nthe class of the instance or a base class thereof. The instance can\nbe received by the handler and can carry additional information about\nthe exceptional condition.\n\nExceptions can also be identified by strings, in which case the\n``except`` clause is selected by object identity. An arbitrary value\ncan be raised along with the identifying string which can be passed to\nthe handler.\n\nNote: Messages to exceptions are not part of the Python API. Their\n contents may change from one version of Python to the next without\n warning and should not be relied on by code which will run under\n multiple versions of the interpreter.\n\nSee also the description of the ``try`` statement in section *The try\nstatement* and ``raise`` statement in section *The raise statement*.\n\n-[ Footnotes ]-\n\n[1] This limitation occurs because the code that is executed by these\n operations is not available at the time the module is compiled.\n', - 'exprlists': '\nExpression lists\n****************\n\n expression_list ::= expression ( "," expression )* [","]\n\nAn expression list containing at least one comma yields a tuple. The\nlength of the tuple is the number of expressions in the list. The\nexpressions are evaluated from left to right.\n\nThe trailing comma is required only to create a single tuple (a.k.a. a\n*singleton*); it is optional in all other cases. A single expression\nwithout a trailing comma doesn\'t create a tuple, but rather yields the\nvalue of that expression. (To create an empty tuple, use an empty pair\nof parentheses: ``()``.)\n', - 'floating': '\nFloating point literals\n***********************\n\nFloating point literals are described by the following lexical\ndefinitions:\n\n floatnumber ::= pointfloat | exponentfloat\n pointfloat ::= [intpart] fraction | intpart "."\n exponentfloat ::= (intpart | pointfloat) exponent\n intpart ::= digit+\n fraction ::= "." digit+\n exponent ::= ("e" | "E") ["+" | "-"] digit+\n\nNote that the integer and exponent parts of floating point numbers can\nlook like octal integers, but are interpreted using radix 10. For\nexample, ``077e010`` is legal, and denotes the same number as\n``77e10``. The allowed range of floating point literals is\nimplementation-dependent. Some examples of floating point literals:\n\n 3.14 10. .001 1e100 3.14e-10 0e0\n\nNote that numeric literals do not include a sign; a phrase like ``-1``\nis actually an expression composed of the unary operator ``-`` and the\nliteral ``1``.\n', - 'for': '\nThe ``for`` statement\n*********************\n\nThe ``for`` statement is used to iterate over the elements of a\nsequence (such as a string, tuple or list) or other iterable object:\n\n for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject. An iterator is created for the result of the\n``expression_list``. The suite is then executed once for each item\nprovided by the iterator, in the order of ascending indices. Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments, and then the suite is executed. When the items are\nexhausted (which is immediately when the sequence is empty), the suite\nin the ``else`` clause, if present, is executed, and the loop\nterminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite. A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ncontinues with the next item, or with the ``else`` clause if there was\nno next item.\n\nThe suite may assign to the variable(s) in the target list; this does\nnot affect the next item assigned to it.\n\nThe target list is not deleted when the loop is finished, but if the\nsequence is empty, it will not have been assigned to at all by the\nloop. Hint: the built-in function ``range()`` returns a sequence of\nintegers suitable to emulate the effect of Pascal\'s ``for i := a to b\ndo``; e.g., ``range(3)`` returns the list ``[0, 1, 2]``.\n\nNote: There is a subtlety when the sequence is being modified by the loop\n (this can only occur for mutable sequences, i.e. lists). An internal\n counter is used to keep track of which item is used next, and this\n is incremented on each iteration. When this counter has reached the\n length of the sequence the loop terminates. This means that if the\n suite deletes the current (or a previous) item from the sequence,\n the next item will be skipped (since it gets the index of the\n current item which has already been treated). Likewise, if the\n suite inserts an item in the sequence before the current item, the\n current item will be treated again the next time through the loop.\n This can lead to nasty bugs that can be avoided by making a\n temporary copy using a slice of the whole sequence, e.g.,\n\n for x in a[:]:\n if x < 0: a.remove(x)\n', - 'formatstrings': '\nFormat String Syntax\n********************\n\nThe ``str.format()`` method and the ``Formatter`` class share the same\nsyntax for format strings (although in the case of ``Formatter``,\nsubclasses can define their own format string syntax).\n\nFormat strings contain "replacement fields" surrounded by curly braces\n``{}``. Anything that is not contained in braces is considered literal\ntext, which is copied unchanged to the output. If you need to include\na brace character in the literal text, it can be escaped by doubling:\n``{{`` and ``}}``.\n\nThe grammar for a replacement field is as follows:\n\n replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"\n field_name ::= arg_name ("." attribute_name | "[" element_index "]")*\n arg_name ::= [identifier | integer]\n attribute_name ::= identifier\n element_index ::= integer | index_string\n index_string ::= +\n conversion ::= "r" | "s"\n format_spec ::= \n\nIn less formal terms, the replacement field can start with a\n*field_name* that specifies the object whose value is to be formatted\nand inserted into the output instead of the replacement field. The\n*field_name* is optionally followed by a *conversion* field, which is\npreceded by an exclamation point ``\'!\'``, and a *format_spec*, which\nis preceded by a colon ``\':\'``. These specify a non-default format\nfor the replacement value.\n\nSee also the *Format Specification Mini-Language* section.\n\nThe *field_name* itself begins with an *arg_name* that is either a\nnumber or a keyword. If it\'s a number, it refers to a positional\nargument, and if it\'s a keyword, it refers to a named keyword\nargument. If the numerical arg_names in a format string are 0, 1, 2,\n... in sequence, they can all be omitted (not just some) and the\nnumbers 0, 1, 2, ... will be automatically inserted in that order.\nBecause *arg_name* is not quote-delimited, it is not possible to\nspecify arbitrary dictionary keys (e.g., the strings ``\'10\'`` or\n``\':-]\'``) within a format string. The *arg_name* can be followed by\nany number of index or attribute expressions. An expression of the\nform ``\'.name\'`` selects the named attribute using ``getattr()``,\nwhile an expression of the form ``\'[index]\'`` does an index lookup\nusing ``__getitem__()``.\n\nChanged in version 2.7: The positional argument specifiers can be\nomitted, so ``\'{} {}\'`` is equivalent to ``\'{0} {1}\'``.\n\nSome simple format string examples:\n\n "First, thou shalt count to {0}" # References first positional argument\n "Bring me a {}" # Implicitly references the first positional argument\n "From {} to {}" # Same as "From {0} to {1}"\n "My quest is {name}" # References keyword argument \'name\'\n "Weight in tons {0.weight}" # \'weight\' attribute of first positional arg\n "Units destroyed: {players[0]}" # First element of keyword argument \'players\'.\n\nThe *conversion* field causes a type coercion before formatting.\nNormally, the job of formatting a value is done by the\n``__format__()`` method of the value itself. However, in some cases\nit is desirable to force a type to be formatted as a string,\noverriding its own definition of formatting. By converting the value\nto a string before calling ``__format__()``, the normal formatting\nlogic is bypassed.\n\nTwo conversion flags are currently supported: ``\'!s\'`` which calls\n``str()`` on the value, and ``\'!r\'`` which calls ``repr()``.\n\nSome examples:\n\n "Harold\'s a clever {0!s}" # Calls str() on the argument first\n "Bring out the holy {name!r}" # Calls repr() on the argument first\n\nThe *format_spec* field contains a specification of how the value\nshould be presented, including such details as field width, alignment,\npadding, decimal precision and so on. Each value type can define its\nown "formatting mini-language" or interpretation of the *format_spec*.\n\nMost built-in types support a common formatting mini-language, which\nis described in the next section.\n\nA *format_spec* field can also include nested replacement fields\nwithin it. These nested replacement fields can contain only a field\nname; conversion flags and format specifications are not allowed. The\nreplacement fields within the format_spec are substituted before the\n*format_spec* string is interpreted. This allows the formatting of a\nvalue to be dynamically specified.\n\nSee the *Format examples* section for some examples.\n\n\nFormat Specification Mini-Language\n==================================\n\n"Format specifications" are used within replacement fields contained\nwithin a format string to define how individual values are presented\n(see *Format String Syntax*). They can also be passed directly to the\nbuilt-in ``format()`` function. Each formattable type may define how\nthe format specification is to be interpreted.\n\nMost built-in types implement the following options for format\nspecifications, although some of the formatting options are only\nsupported by the numeric types.\n\nA general convention is that an empty format string (``""``) produces\nthe same result as if you had called ``str()`` on the value. A non-\nempty format string typically modifies the result.\n\nThe general form of a *standard format specifier* is:\n\n format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]\n fill ::= \n align ::= "<" | ">" | "=" | "^"\n sign ::= "+" | "-" | " "\n width ::= integer\n precision ::= integer\n type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n\nIf a valid *align* value is specified, it can be preceeded by a *fill*\ncharacter that can be any character and defaults to a space if\nomitted. Note that it is not possible to use ``{`` and ``}`` as *fill*\nchar while using the ``str.format()`` method; this limitation however\ndoesn\'t affect the ``format()`` function.\n\nThe meaning of the various alignment options is as follows:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | ``\'<\'`` | Forces the field to be left-aligned within the available |\n | | space (this is the default for most objects). |\n +-----------+------------------------------------------------------------+\n | ``\'>\'`` | Forces the field to be right-aligned within the available |\n | | space (this is the default for numbers). |\n +-----------+------------------------------------------------------------+\n | ``\'=\'`` | Forces the padding to be placed after the sign (if any) |\n | | but before the digits. This is used for printing fields |\n | | in the form \'+000000120\'. This alignment option is only |\n | | valid for numeric types. |\n +-----------+------------------------------------------------------------+\n | ``\'^\'`` | Forces the field to be centered within the available |\n | | space. |\n +-----------+------------------------------------------------------------+\n\nNote that unless a minimum field width is defined, the field width\nwill always be the same size as the data to fill it, so that the\nalignment option has no meaning in this case.\n\nThe *sign* option is only valid for number types, and can be one of\nthe following:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | ``\'+\'`` | indicates that a sign should be used for both positive as |\n | | well as negative numbers. |\n +-----------+------------------------------------------------------------+\n | ``\'-\'`` | indicates that a sign should be used only for negative |\n | | numbers (this is the default behavior). |\n +-----------+------------------------------------------------------------+\n | space | indicates that a leading space should be used on positive |\n | | numbers, and a minus sign on negative numbers. |\n +-----------+------------------------------------------------------------+\n\nThe ``\'#\'`` option is only valid for integers, and only for binary,\noctal, or hexadecimal output. If present, it specifies that the\noutput will be prefixed by ``\'0b\'``, ``\'0o\'``, or ``\'0x\'``,\nrespectively.\n\nThe ``\',\'`` option signals the use of a comma for a thousands\nseparator. For a locale aware separator, use the ``\'n\'`` integer\npresentation type instead.\n\nChanged in version 2.7: Added the ``\',\'`` option (see also **PEP\n378**).\n\n*width* is a decimal integer defining the minimum field width. If not\nspecified, then the field width will be determined by the content.\n\nPreceding the *width* field by a zero (``\'0\'``) character enables\nsign-aware zero-padding for numeric types. This is equivalent to a\n*fill* character of ``\'0\'`` with an *alignment* type of ``\'=\'``.\n\nThe *precision* is a decimal number indicating how many digits should\nbe displayed after the decimal point for a floating point value\nformatted with ``\'f\'`` and ``\'F\'``, or before and after the decimal\npoint for a floating point value formatted with ``\'g\'`` or ``\'G\'``.\nFor non-number types the field indicates the maximum field size - in\nother words, how many characters will be used from the field content.\nThe *precision* is not allowed for integer values.\n\nFinally, the *type* determines how the data should be presented.\n\nThe available string presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | ``\'s\'`` | String format. This is the default type for strings and |\n | | may be omitted. |\n +-----------+------------------------------------------------------------+\n | None | The same as ``\'s\'``. |\n +-----------+------------------------------------------------------------+\n\nThe available integer presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | ``\'b\'`` | Binary format. Outputs the number in base 2. |\n +-----------+------------------------------------------------------------+\n | ``\'c\'`` | Character. Converts the integer to the corresponding |\n | | unicode character before printing. |\n +-----------+------------------------------------------------------------+\n | ``\'d\'`` | Decimal Integer. Outputs the number in base 10. |\n +-----------+------------------------------------------------------------+\n | ``\'o\'`` | Octal format. Outputs the number in base 8. |\n +-----------+------------------------------------------------------------+\n | ``\'x\'`` | Hex format. Outputs the number in base 16, using lower- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | ``\'X\'`` | Hex format. Outputs the number in base 16, using upper- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | ``\'n\'`` | Number. This is the same as ``\'d\'``, except that it uses |\n | | the current locale setting to insert the appropriate |\n | | number separator characters. |\n +-----------+------------------------------------------------------------+\n | None | The same as ``\'d\'``. |\n +-----------+------------------------------------------------------------+\n\nIn addition to the above presentation types, integers can be formatted\nwith the floating point presentation types listed below (except\n``\'n\'`` and None). When doing so, ``float()`` is used to convert the\ninteger to a floating point number before formatting.\n\nThe available presentation types for floating point and decimal values\nare:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | ``\'e\'`` | Exponent notation. Prints the number in scientific |\n | | notation using the letter \'e\' to indicate the exponent. |\n | | The default precision is ``6``. |\n +-----------+------------------------------------------------------------+\n | ``\'E\'`` | Exponent notation. Same as ``\'e\'`` except it uses an upper |\n | | case \'E\' as the separator character. |\n +-----------+------------------------------------------------------------+\n | ``\'f\'`` | Fixed point. Displays the number as a fixed-point number. |\n | | The default precision is ``6``. |\n +-----------+------------------------------------------------------------+\n | ``\'F\'`` | Fixed point. Same as ``\'f\'``. |\n +-----------+------------------------------------------------------------+\n | ``\'g\'`` | General format. For a given precision ``p >= 1``, this |\n | | rounds the number to ``p`` significant digits and then |\n | | formats the result in either fixed-point format or in |\n | | scientific notation, depending on its magnitude. The |\n | | precise rules are as follows: suppose that the result |\n | | formatted with presentation type ``\'e\'`` and precision |\n | | ``p-1`` would have exponent ``exp``. Then if ``-4 <= exp |\n | | < p``, the number is formatted with presentation type |\n | | ``\'f\'`` and precision ``p-1-exp``. Otherwise, the number |\n | | is formatted with presentation type ``\'e\'`` and precision |\n | | ``p-1``. In both cases insignificant trailing zeros are |\n | | removed from the significand, and the decimal point is |\n | | also removed if there are no remaining digits following |\n | | it. Positive and negative infinity, positive and negative |\n | | zero, and nans, are formatted as ``inf``, ``-inf``, ``0``, |\n | | ``-0`` and ``nan`` respectively, regardless of the |\n | | precision. A precision of ``0`` is treated as equivalent |\n | | to a precision of ``1``. The default precision is ``6``. |\n +-----------+------------------------------------------------------------+\n | ``\'G\'`` | General format. Same as ``\'g\'`` except switches to ``\'E\'`` |\n | | if the number gets too large. The representations of |\n | | infinity and NaN are uppercased, too. |\n +-----------+------------------------------------------------------------+\n | ``\'n\'`` | Number. This is the same as ``\'g\'``, except that it uses |\n | | the current locale setting to insert the appropriate |\n | | number separator characters. |\n +-----------+------------------------------------------------------------+\n | ``\'%\'`` | Percentage. Multiplies the number by 100 and displays in |\n | | fixed (``\'f\'``) format, followed by a percent sign. |\n +-----------+------------------------------------------------------------+\n | None | The same as ``\'g\'``. |\n +-----------+------------------------------------------------------------+\n\n\nFormat examples\n===============\n\nThis section contains examples of the new format syntax and comparison\nwith the old ``%``-formatting.\n\nIn most of the cases the syntax is similar to the old\n``%``-formatting, with the addition of the ``{}`` and with ``:`` used\ninstead of ``%``. For example, ``\'%03.2f\'`` can be translated to\n``\'{:03.2f}\'``.\n\nThe new format syntax also supports new and different options, shown\nin the follow examples.\n\nAccessing arguments by position:\n\n >>> \'{0}, {1}, {2}\'.format(\'a\', \'b\', \'c\')\n \'a, b, c\'\n >>> \'{}, {}, {}\'.format(\'a\', \'b\', \'c\') # 2.7+ only\n \'a, b, c\'\n >>> \'{2}, {1}, {0}\'.format(\'a\', \'b\', \'c\')\n \'c, b, a\'\n >>> \'{2}, {1}, {0}\'.format(*\'abc\') # unpacking argument sequence\n \'c, b, a\'\n >>> \'{0}{1}{0}\'.format(\'abra\', \'cad\') # arguments\' indices can be repeated\n \'abracadabra\'\n\nAccessing arguments by name:\n\n >>> \'Coordinates: {latitude}, {longitude}\'.format(latitude=\'37.24N\', longitude=\'-115.81W\')\n \'Coordinates: 37.24N, -115.81W\'\n >>> coord = {\'latitude\': \'37.24N\', \'longitude\': \'-115.81W\'}\n >>> \'Coordinates: {latitude}, {longitude}\'.format(**coord)\n \'Coordinates: 37.24N, -115.81W\'\n\nAccessing arguments\' attributes:\n\n >>> c = 3-5j\n >>> (\'The complex number {0} is formed from the real part {0.real} \'\n ... \'and the imaginary part {0.imag}.\').format(c)\n \'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.\'\n >>> class Point(object):\n ... def __init__(self, x, y):\n ... self.x, self.y = x, y\n ... def __str__(self):\n ... return \'Point({self.x}, {self.y})\'.format(self=self)\n ...\n >>> str(Point(4, 2))\n \'Point(4, 2)\'\n\nAccessing arguments\' items:\n\n >>> coord = (3, 5)\n >>> \'X: {0[0]}; Y: {0[1]}\'.format(coord)\n \'X: 3; Y: 5\'\n\nReplacing ``%s`` and ``%r``:\n\n >>> "repr() shows quotes: {!r}; str() doesn\'t: {!s}".format(\'test1\', \'test2\')\n "repr() shows quotes: \'test1\'; str() doesn\'t: test2"\n\nAligning the text and specifying a width:\n\n >>> \'{:<30}\'.format(\'left aligned\')\n \'left aligned \'\n >>> \'{:>30}\'.format(\'right aligned\')\n \' right aligned\'\n >>> \'{:^30}\'.format(\'centered\')\n \' centered \'\n >>> \'{:*^30}\'.format(\'centered\') # use \'*\' as a fill char\n \'***********centered***********\'\n\nReplacing ``%+f``, ``%-f``, and ``% f`` and specifying a sign:\n\n >>> \'{:+f}; {:+f}\'.format(3.14, -3.14) # show it always\n \'+3.140000; -3.140000\'\n >>> \'{: f}; {: f}\'.format(3.14, -3.14) # show a space for positive numbers\n \' 3.140000; -3.140000\'\n >>> \'{:-f}; {:-f}\'.format(3.14, -3.14) # show only the minus -- same as \'{:f}; {:f}\'\n \'3.140000; -3.140000\'\n\nReplacing ``%x`` and ``%o`` and converting the value to different\nbases:\n\n >>> # format also supports binary numbers\n >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)\n \'int: 42; hex: 2a; oct: 52; bin: 101010\'\n >>> # with 0x, 0o, or 0b as prefix:\n >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)\n \'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010\'\n\nUsing the comma as a thousands separator:\n\n >>> \'{:,}\'.format(1234567890)\n \'1,234,567,890\'\n\nExpressing a percentage:\n\n >>> points = 19.5\n >>> total = 22\n >>> \'Correct answers: {:.2%}\'.format(points/total)\n \'Correct answers: 88.64%\'\n\nUsing type-specific formatting:\n\n >>> import datetime\n >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)\n >>> \'{:%Y-%m-%d %H:%M:%S}\'.format(d)\n \'2010-07-04 12:15:58\'\n\nNesting arguments and more complex examples:\n\n >>> for align, text in zip(\'<^>\', [\'left\', \'center\', \'right\']):\n ... \'{0:{fill}{align}16}\'.format(text, fill=align, align=align)\n ...\n \'left<<<<<<<<<<<<\'\n \'^^^^^center^^^^^\'\n \'>>>>>>>>>>>right\'\n >>>\n >>> octets = [192, 168, 0, 1]\n >>> \'{:02X}{:02X}{:02X}{:02X}\'.format(*octets)\n \'C0A80001\'\n >>> int(_, 16)\n 3232235521\n >>>\n >>> width = 5\n >>> for num in range(5,12):\n ... for base in \'dXob\':\n ... print \'{0:{width}{base}}\'.format(num, base=base, width=width),\n ... print\n ...\n 5 5 5 101\n 6 6 6 110\n 7 7 7 111\n 8 8 10 1000\n 9 9 11 1001\n 10 A 12 1010\n 11 B 13 1011\n', - 'function': '\nFunction definitions\n********************\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n decorated ::= decorators (classdef | funcdef)\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n ( "*" identifier ["," "**" identifier]\n | "**" identifier\n | defparameter [","] )\n defparameter ::= parameter ["=" expression]\n sublist ::= parameter ("," parameter)* [","]\n parameter ::= identifier | "(" sublist ")"\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code:\n\n @f1(arg)\n @f2\n def func(): pass\n\nis equivalent to:\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nWhen one or more top-level *parameters* have the form *parameter*\n``=`` *expression*, the function is said to have "default parameter\nvalues." For a parameter with a default value, the corresponding\n*argument* may be omitted from a call, in which case the parameter\'s\ndefault value is substituted. If a parameter has a default value, all\nfollowing parameters must also have a default value --- this is a\nsyntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated when the function definition\nis executed.** This means that the expression is evaluated once, when\nthe function is defined, and that the same "pre-computed" value is\nused for each call. This is especially important to understand when a\ndefault parameter is a mutable object, such as a list or a dictionary:\nif the function modifies the object (e.g. by appending an item to a\nlist), the default value is in effect modified. This is generally not\nwhat was intended. A way around this is to use ``None`` as the\ndefault, and explicitly test for it in the body of the function, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n"``*identifier``" is present, it is initialized to a tuple receiving\nany excess positional parameters, defaulting to the empty tuple. If\nthe form "``**identifier``" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda\nexpressions, described in section *Lambdas*. Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a "``def``" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression. The "``def``" form is actually more powerful since it\nallows the execution of multiple statements.\n\n**Programmer\'s note:** Functions are first-class objects. A "``def``"\nform executed inside a function definition defines a local function\nthat can be returned or passed around. Free variables used in the\nnested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n', - 'global': '\nThe ``global`` statement\n************************\n\n global_stmt ::= "global" identifier ("," identifier)*\n\nThe ``global`` statement is a declaration which holds for the entire\ncurrent code block. It means that the listed identifiers are to be\ninterpreted as globals. It would be impossible to assign to a global\nvariable without ``global``, although free variables may refer to\nglobals without being declared global.\n\nNames listed in a ``global`` statement must not be used in the same\ncode block textually preceding that ``global`` statement.\n\nNames listed in a ``global`` statement must not be defined as formal\nparameters or in a ``for`` loop control target, ``class`` definition,\nfunction definition, or ``import`` statement.\n\n**CPython implementation detail:** The current implementation does not\nenforce the latter two restrictions, but programs should not abuse\nthis freedom, as future implementations may enforce them or silently\nchange the meaning of the program.\n\n**Programmer\'s note:** the ``global`` is a directive to the parser.\nIt applies only to code parsed at the same time as the ``global``\nstatement. In particular, a ``global`` statement contained in an\n``exec`` statement does not affect the code block *containing* the\n``exec`` statement, and code contained in an ``exec`` statement is\nunaffected by ``global`` statements in the code containing the\n``exec`` statement. The same applies to the ``eval()``,\n``execfile()`` and ``compile()`` functions.\n', - 'id-classes': '\nReserved classes of identifiers\n*******************************\n\nCertain classes of identifiers (besides keywords) have special\nmeanings. These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n``_*``\n Not imported by ``from module import *``. The special identifier\n ``_`` is used in the interactive interpreter to store the result of\n the last evaluation; it is stored in the ``__builtin__`` module.\n When not in interactive mode, ``_`` has no special meaning and is\n not defined. See section *The import statement*.\n\n Note: The name ``_`` is often used in conjunction with\n internationalization; refer to the documentation for the\n ``gettext`` module for more information on this convention.\n\n``__*__``\n System-defined names. These names are defined by the interpreter\n and its implementation (including the standard library). Current\n system names are discussed in the *Special method names* section\n and elsewhere. More will likely be defined in future versions of\n Python. *Any* use of ``__*__`` names, in any context, that does\n not follow explicitly documented use, is subject to breakage\n without warning.\n\n``__*``\n Class-private names. Names in this category, when used within the\n context of a class definition, are re-written to use a mangled form\n to help avoid name clashes between "private" attributes of base and\n derived classes. See section *Identifiers (Names)*.\n', - 'identifiers': '\nIdentifiers and keywords\n************************\n\nIdentifiers (also referred to as *names*) are described by the\nfollowing lexical definitions:\n\n identifier ::= (letter|"_") (letter | digit | "_")*\n letter ::= lowercase | uppercase\n lowercase ::= "a"..."z"\n uppercase ::= "A"..."Z"\n digit ::= "0"..."9"\n\nIdentifiers are unlimited in length. Case is significant.\n\n\nKeywords\n========\n\nThe following identifiers are used as reserved words, or *keywords* of\nthe language, and cannot be used as ordinary identifiers. They must\nbe spelled exactly as written here:\n\n and del from not while\n as elif global or with\n assert else if pass yield\n break except import print\n class exec in raise\n continue finally is return\n def for lambda try\n\nChanged in version 2.4: ``None`` became a constant and is now\nrecognized by the compiler as a name for the built-in object ``None``.\nAlthough it is not a keyword, you cannot assign a different object to\nit.\n\nChanged in version 2.5: Using ``as`` and ``with`` as identifiers\ntriggers a warning. To use them as keywords, enable the\n``with_statement`` future feature .\n\nChanged in version 2.6: ``as`` and ``with`` are full keywords.\n\n\nReserved classes of identifiers\n===============================\n\nCertain classes of identifiers (besides keywords) have special\nmeanings. These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n``_*``\n Not imported by ``from module import *``. The special identifier\n ``_`` is used in the interactive interpreter to store the result of\n the last evaluation; it is stored in the ``__builtin__`` module.\n When not in interactive mode, ``_`` has no special meaning and is\n not defined. See section *The import statement*.\n\n Note: The name ``_`` is often used in conjunction with\n internationalization; refer to the documentation for the\n ``gettext`` module for more information on this convention.\n\n``__*__``\n System-defined names. These names are defined by the interpreter\n and its implementation (including the standard library). Current\n system names are discussed in the *Special method names* section\n and elsewhere. More will likely be defined in future versions of\n Python. *Any* use of ``__*__`` names, in any context, that does\n not follow explicitly documented use, is subject to breakage\n without warning.\n\n``__*``\n Class-private names. Names in this category, when used within the\n context of a class definition, are re-written to use a mangled form\n to help avoid name clashes between "private" attributes of base and\n derived classes. See section *Identifiers (Names)*.\n', - 'if': '\nThe ``if`` statement\n********************\n\nThe ``if`` statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the ``if`` statement is executed or evaluated).\nIf all expressions are false, the suite of the ``else`` clause, if\npresent, is executed.\n', - 'imaginary': '\nImaginary literals\n******************\n\nImaginary literals are described by the following lexical definitions:\n\n imagnumber ::= (floatnumber | intpart) ("j" | "J")\n\nAn imaginary literal yields a complex number with a real part of 0.0.\nComplex numbers are represented as a pair of floating point numbers\nand have the same restrictions on their range. To create a complex\nnumber with a nonzero real part, add a floating point number to it,\ne.g., ``(3+4j)``. Some examples of imaginary literals:\n\n 3.14j 10.j 10j .001j 1e100j 3.14e-10j\n', - 'import': '\nThe ``import`` statement\n************************\n\n import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )*\n | "from" relative_module "import" identifier ["as" name]\n ( "," identifier ["as" name] )*\n | "from" relative_module "import" "(" identifier ["as" name]\n ( "," identifier ["as" name] )* [","] ")"\n | "from" module "import" "*"\n module ::= (identifier ".")* identifier\n relative_module ::= "."* module | "."+\n name ::= identifier\n\nImport statements are executed in two steps: (1) find a module, and\ninitialize it if necessary; (2) define a name or names in the local\nnamespace (of the scope where the ``import`` statement occurs). The\nstatement comes in two forms differing on whether it uses the ``from``\nkeyword. The first form (without ``from``) repeats these steps for\neach identifier in the list. The form with ``from`` performs step (1)\nonce, and then performs step (2) repeatedly.\n\nTo understand how step (1) occurs, one must first understand how\nPython handles hierarchical naming of modules. To help organize\nmodules and provide a hierarchy in naming, Python has a concept of\npackages. A package can contain other packages and modules while\nmodules cannot contain other modules or packages. From a file system\nperspective, packages are directories and modules are files. The\noriginal specification for packages is still available to read,\nalthough minor details have changed since the writing of that\ndocument.\n\nOnce the name of the module is known (unless otherwise specified, the\nterm "module" will refer to both packages and modules), searching for\nthe module or package can begin. The first place checked is\n``sys.modules``, the cache of all modules that have been imported\npreviously. If the module is found there then it is used in step (2)\nof import.\n\nIf the module is not found in the cache, then ``sys.meta_path`` is\nsearched (the specification for ``sys.meta_path`` can be found in\n**PEP 302**). The object is a list of *finder* objects which are\nqueried in order as to whether they know how to load the module by\ncalling their ``find_module()`` method with the name of the module. If\nthe module happens to be contained within a package (as denoted by the\nexistence of a dot in the name), then a second argument to\n``find_module()`` is given as the value of the ``__path__`` attribute\nfrom the parent package (everything up to the last dot in the name of\nthe module being imported). If a finder can find the module it returns\na *loader* (discussed later) or returns ``None``.\n\nIf none of the finders on ``sys.meta_path`` are able to find the\nmodule then some implicitly defined finders are queried.\nImplementations of Python vary in what implicit meta path finders are\ndefined. The one they all do define, though, is one that handles\n``sys.path_hooks``, ``sys.path_importer_cache``, and ``sys.path``.\n\nThe implicit finder searches for the requested module in the "paths"\nspecified in one of two places ("paths" do not have to be file system\npaths). If the module being imported is supposed to be contained\nwithin a package then the second argument passed to ``find_module()``,\n``__path__`` on the parent package, is used as the source of paths. If\nthe module is not contained in a package then ``sys.path`` is used as\nthe source of paths.\n\nOnce the source of paths is chosen it is iterated over to find a\nfinder that can handle that path. The dict at\n``sys.path_importer_cache`` caches finders for paths and is checked\nfor a finder. If the path does not have a finder cached then\n``sys.path_hooks`` is searched by calling each object in the list with\na single argument of the path, returning a finder or raises\n``ImportError``. If a finder is returned then it is cached in\n``sys.path_importer_cache`` and then used for that path entry. If no\nfinder can be found but the path exists then a value of ``None`` is\nstored in ``sys.path_importer_cache`` to signify that an implicit,\nfile-based finder that handles modules stored as individual files\nshould be used for that path. If the path does not exist then a finder\nwhich always returns ``None`` is placed in the cache for the path.\n\nIf no finder can find the module then ``ImportError`` is raised.\nOtherwise some finder returned a loader whose ``load_module()`` method\nis called with the name of the module to load (see **PEP 302** for the\noriginal definition of loaders). A loader has several responsibilities\nto perform on a module it loads. First, if the module already exists\nin ``sys.modules`` (a possibility if the loader is called outside of\nthe import machinery) then it is to use that module for initialization\nand not a new module. But if the module does not exist in\n``sys.modules`` then it is to be added to that dict before\ninitialization begins. If an error occurs during loading of the module\nand it was added to ``sys.modules`` it is to be removed from the dict.\nIf an error occurs but the module was already in ``sys.modules`` it is\nleft in the dict.\n\nThe loader must set several attributes on the module. ``__name__`` is\nto be set to the name of the module. ``__file__`` is to be the "path"\nto the file unless the module is built-in (and thus listed in\n``sys.builtin_module_names``) in which case the attribute is not set.\nIf what is being imported is a package then ``__path__`` is to be set\nto a list of paths to be searched when looking for modules and\npackages contained within the package being imported. ``__package__``\nis optional but should be set to the name of package that contains the\nmodule or package (the empty string is used for module not contained\nin a package). ``__loader__`` is also optional but should be set to\nthe loader object that is loading the module.\n\nIf an error occurs during loading then the loader raises\n``ImportError`` if some other exception is not already being\npropagated. Otherwise the loader returns the module that was loaded\nand initialized.\n\nWhen step (1) finishes without raising an exception, step (2) can\nbegin.\n\nThe first form of ``import`` statement binds the module name in the\nlocal namespace to the module object, and then goes on to import the\nnext identifier, if any. If the module name is followed by ``as``,\nthe name following ``as`` is used as the local name for the module.\n\nThe ``from`` form does not bind the module name: it goes through the\nlist of identifiers, looks each one of them up in the module found in\nstep (1), and binds the name in the local namespace to the object thus\nfound. As with the first form of ``import``, an alternate local name\ncan be supplied by specifying "``as`` localname". If a name is not\nfound, ``ImportError`` is raised. If the list of identifiers is\nreplaced by a star (``\'*\'``), all public names defined in the module\nare bound in the local namespace of the ``import`` statement..\n\nThe *public names* defined by a module are determined by checking the\nmodule\'s namespace for a variable named ``__all__``; if defined, it\nmust be a sequence of strings which are names defined or imported by\nthat module. The names given in ``__all__`` are all considered public\nand are required to exist. If ``__all__`` is not defined, the set of\npublic names includes all names found in the module\'s namespace which\ndo not begin with an underscore character (``\'_\'``). ``__all__``\nshould contain the entire public API. It is intended to avoid\naccidentally exporting items that are not part of the API (such as\nlibrary modules which were imported and used within the module).\n\nThe ``from`` form with ``*`` may only occur in a module scope. If the\nwild card form of import --- ``import *`` --- is used in a function\nand the function contains or is a nested block with free variables,\nthe compiler will raise a ``SyntaxError``.\n\nWhen specifying what module to import you do not have to specify the\nabsolute name of the module. When a module or package is contained\nwithin another package it is possible to make a relative import within\nthe same top package without having to mention the package name. By\nusing leading dots in the specified module or package after ``from``\nyou can specify how high to traverse up the current package hierarchy\nwithout specifying exact names. One leading dot means the current\npackage where the module making the import exists. Two dots means up\none package level. Three dots is up two levels, etc. So if you execute\n``from . import mod`` from a module in the ``pkg`` package then you\nwill end up importing ``pkg.mod``. If you execute ``from ..subpkg2\nimport mod`` from within ``pkg.subpkg1`` you will import\n``pkg.subpkg2.mod``. The specification for relative imports is\ncontained within **PEP 328**.\n\n``importlib.import_module()`` is provided to support applications that\ndetermine which modules need to be loaded dynamically.\n\n\nFuture statements\n=================\n\nA *future statement* is a directive to the compiler that a particular\nmodule should be compiled using syntax or semantics that will be\navailable in a specified future release of Python. The future\nstatement is intended to ease migration to future versions of Python\nthat introduce incompatible changes to the language. It allows use of\nthe new features on a per-module basis before the release in which the\nfeature becomes standard.\n\n future_statement ::= "from" "__future__" "import" feature ["as" name]\n ("," feature ["as" name])*\n | "from" "__future__" "import" "(" feature ["as" name]\n ("," feature ["as" name])* [","] ")"\n feature ::= identifier\n name ::= identifier\n\nA future statement must appear near the top of the module. The only\nlines that can appear before a future statement are:\n\n* the module docstring (if any),\n\n* comments,\n\n* blank lines, and\n\n* other future statements.\n\nThe features recognized by Python 2.6 are ``unicode_literals``,\n``print_function``, ``absolute_import``, ``division``, ``generators``,\n``nested_scopes`` and ``with_statement``. ``generators``,\n``with_statement``, ``nested_scopes`` are redundant in Python version\n2.6 and above because they are always enabled.\n\nA future statement is recognized and treated specially at compile\ntime: Changes to the semantics of core constructs are often\nimplemented by generating different code. It may even be the case\nthat a new feature introduces new incompatible syntax (such as a new\nreserved word), in which case the compiler may need to parse the\nmodule differently. Such decisions cannot be pushed off until\nruntime.\n\nFor any given release, the compiler knows which feature names have\nbeen defined, and raises a compile-time error if a future statement\ncontains a feature not known to it.\n\nThe direct runtime semantics are the same as for any import statement:\nthere is a standard module ``__future__``, described later, and it\nwill be imported in the usual way at the time the future statement is\nexecuted.\n\nThe interesting runtime semantics depend on the specific feature\nenabled by the future statement.\n\nNote that there is nothing special about the statement:\n\n import __future__ [as name]\n\nThat is not a future statement; it\'s an ordinary import statement with\nno special semantics or syntax restrictions.\n\nCode compiled by an ``exec`` statement or calls to the built-in\nfunctions ``compile()`` and ``execfile()`` that occur in a module\n``M`` containing a future statement will, by default, use the new\nsyntax or semantics associated with the future statement. This can,\nstarting with Python 2.2 be controlled by optional arguments to\n``compile()`` --- see the documentation of that function for details.\n\nA future statement typed at an interactive interpreter prompt will\ntake effect for the rest of the interpreter session. If an\ninterpreter is started with the *-i* option, is passed a script name\nto execute, and the script includes a future statement, it will be in\neffect in the interactive session started after the script is\nexecuted.\n\nSee also:\n\n **PEP 236** - Back to the __future__\n The original proposal for the __future__ mechanism.\n', - 'in': '\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation. Also unlike C, expressions like ``a < b < c`` have the\ninterpretation that is conventional in mathematics:\n\n comparison ::= or_expr ( comp_operator or_expr )*\n comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!="\n | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: ``True`` or ``False``.\n\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\ny`` is found to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\nexcept that each expression is evaluated at most once.\n\nNote that ``a op1 b op2 c`` doesn\'t imply any kind of comparison\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\n(though perhaps not pretty).\n\nThe forms ``<>`` and ``!=`` are equivalent; for consistency with C,\n``!=`` is preferred; where ``!=`` is mentioned below ``<>`` is also\naccepted. The ``<>`` spelling is considered obsolescent.\n\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\nthe values of two objects. The objects need not have the same type.\nIf both are numbers, they are converted to a common type. Otherwise,\nobjects of different types *always* compare unequal, and are ordered\nconsistently but arbitrarily. You can control comparison behavior of\nobjects of non-built-in types by defining a ``__cmp__`` method or rich\ncomparison methods like ``__gt__``, described in section *Special\nmethod names*.\n\n(This unusual definition of comparison was used to simplify the\ndefinition of operations like sorting and the ``in`` and ``not in``\noperators. In the future, the comparison rules for objects of\ndifferent types are likely to change.)\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* Strings are compared lexicographically using the numeric equivalents\n (the result of the built-in function ``ord()``) of their characters.\n Unicode and 8-bit strings are fully interoperable in this behavior.\n [4]\n\n* Tuples and lists are compared lexicographically using comparison of\n corresponding elements. This means that to compare equal, each\n element must compare equal and the two sequences must be of the same\n type and have the same length.\n\n If not equal, the sequences are ordered the same as their first\n differing elements. For example, ``cmp([1,2,x], [1,2,y])`` returns\n the same as ``cmp(x,y)``. If the corresponding element does not\n exist, the shorter sequence is ordered first (for example, ``[1,2] <\n [1,2,3]``).\n\n* Mappings (dictionaries) compare equal if and only if their sorted\n (key, value) lists compare equal. [5] Outcomes other than equality\n are resolved consistently, but are not otherwise defined. [6]\n\n* Most other objects of built-in types compare unequal unless they are\n the same object; the choice whether one object is considered smaller\n or larger than another one is made arbitrarily but consistently\n within one execution of a program.\n\nThe operators ``in`` and ``not in`` test for collection membership.\n``x in s`` evaluates to true if *x* is a member of the collection *s*,\nand false otherwise. ``x not in s`` returns the negation of ``x in\ns``. The collection membership test has traditionally been bound to\nsequences; an object is a member of a collection if the collection is\na sequence and contains an element equal to that object. However, it\nmake sense for many other object types to support membership tests\nwithout being a sequence. In particular, dictionaries (for keys) and\nsets support membership testing.\n\nFor the list and tuple types, ``x in y`` is true if and only if there\nexists an index *i* such that ``x == y[i]`` is true.\n\nFor the Unicode and string types, ``x in y`` is true if and only if\n*x* is a substring of *y*. An equivalent test is ``y.find(x) != -1``.\nNote, *x* and *y* need not be the same type; consequently, ``u\'ab\' in\n\'abc\'`` will return ``True``. Empty strings are always considered to\nbe a substring of any other string, so ``"" in "abc"`` will return\n``True``.\n\nChanged in version 2.3: Previously, *x* was required to be a string of\nlength ``1``.\n\nFor user-defined classes which define the ``__contains__()`` method,\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\n\nFor user-defined classes which do not define ``__contains__()`` but do\ndefine ``__iter__()``, ``x in y`` is true if some value ``z`` with ``x\n== z`` is produced while iterating over ``y``. If an exception is\nraised during the iteration, it is as if ``in`` raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n``__getitem__()``, ``x in y`` is true if and only if there is a non-\nnegative integer index *i* such that ``x == y[i]``, and all lower\ninteger indices do not raise ``IndexError`` exception. (If any other\nexception is raised, it is as if ``in`` raised that exception).\n\nThe operator ``not in`` is defined to have the inverse true value of\n``in``.\n\nThe operators ``is`` and ``is not`` test for object identity: ``x is\ny`` is true if and only if *x* and *y* are the same object. ``x is\nnot y`` yields the inverse truth value. [7]\n', - 'integers': '\nInteger and long integer literals\n*********************************\n\nInteger and long integer literals are described by the following\nlexical definitions:\n\n longinteger ::= integer ("l" | "L")\n integer ::= decimalinteger | octinteger | hexinteger | bininteger\n decimalinteger ::= nonzerodigit digit* | "0"\n octinteger ::= "0" ("o" | "O") octdigit+ | "0" octdigit+\n hexinteger ::= "0" ("x" | "X") hexdigit+\n bininteger ::= "0" ("b" | "B") bindigit+\n nonzerodigit ::= "1"..."9"\n octdigit ::= "0"..."7"\n bindigit ::= "0" | "1"\n hexdigit ::= digit | "a"..."f" | "A"..."F"\n\nAlthough both lower case ``\'l\'`` and upper case ``\'L\'`` are allowed as\nsuffix for long integers, it is strongly recommended to always use\n``\'L\'``, since the letter ``\'l\'`` looks too much like the digit\n``\'1\'``.\n\nPlain integer literals that are above the largest representable plain\ninteger (e.g., 2147483647 when using 32-bit arithmetic) are accepted\nas if they were long integers instead. [1] There is no limit for long\ninteger literals apart from what can be stored in available memory.\n\nSome examples of plain integer literals (first row) and long integer\nliterals (second and third rows):\n\n 7 2147483647 0177\n 3L 79228162514264337593543950336L 0377L 0x100000000L\n 79228162514264337593543950336 0xdeadbeef\n', - 'lambda': '\nLambdas\n*******\n\n lambda_expr ::= "lambda" [parameter_list]: expression\n old_lambda_expr ::= "lambda" [parameter_list]: old_expression\n\nLambda expressions (sometimes called lambda forms) have the same\nsyntactic position as expressions. They are a shorthand to create\nanonymous functions; the expression ``lambda arguments: expression``\nyields a function object. The unnamed object behaves like a function\nobject defined with\n\n def name(arguments):\n return expression\n\nSee section *Function definitions* for the syntax of parameter lists.\nNote that functions created with lambda expressions cannot contain\nstatements.\n', - 'lists': '\nList displays\n*************\n\nA list display is a possibly empty series of expressions enclosed in\nsquare brackets:\n\n list_display ::= "[" [expression_list | list_comprehension] "]"\n list_comprehension ::= expression list_for\n list_for ::= "for" target_list "in" old_expression_list [list_iter]\n old_expression_list ::= old_expression [("," old_expression)+ [","]]\n old_expression ::= or_test | old_lambda_expr\n list_iter ::= list_for | list_if\n list_if ::= "if" old_expression [list_iter]\n\nA list display yields a new list object. Its contents are specified\nby providing either a list of expressions or a list comprehension.\nWhen a comma-separated list of expressions is supplied, its elements\nare evaluated from left to right and placed into the list object in\nthat order. When a list comprehension is supplied, it consists of a\nsingle expression followed by at least one ``for`` clause and zero or\nmore ``for`` or ``if`` clauses. In this case, the elements of the new\nlist are those that would be produced by considering each of the\n``for`` or ``if`` clauses a block, nesting from left to right, and\nevaluating the expression to produce a list element each time the\ninnermost block is reached [1].\n', - 'naming': "\nNaming and binding\n******************\n\n*Names* refer to objects. Names are introduced by name binding\noperations. Each occurrence of a name in the program text refers to\nthe *binding* of that name established in the innermost function block\ncontaining the use.\n\nA *block* is a piece of Python program text that is executed as a\nunit. The following are blocks: a module, a function body, and a class\ndefinition. Each command typed interactively is a block. A script\nfile (a file given as standard input to the interpreter or specified\non the interpreter command line the first argument) is a code block.\nA script command (a command specified on the interpreter command line\nwith the '**-c**' option) is a code block. The file read by the\nbuilt-in function ``execfile()`` is a code block. The string argument\npassed to the built-in function ``eval()`` and to the ``exec``\nstatement is a code block. The expression read and evaluated by the\nbuilt-in function ``input()`` is a code block.\n\nA code block is executed in an *execution frame*. A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block's execution has\ncompleted.\n\nA *scope* defines the visibility of a name within a block. If a local\nvariable is defined in a block, its scope includes that block. If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name. The scope of names defined in a\nclass block is limited to the class block; it does not extend to the\ncode blocks of methods -- this includes generator expressions since\nthey are implemented using a function scope. This means that the\nfollowing will fail:\n\n class A:\n a = 42\n b = list(a + i for i in range(10))\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope. The set of all such scopes visible to a code block\nis called the block's *environment*.\n\nIf a name is bound in a block, it is a local variable of that block.\nIf a name is bound at the module level, it is a global variable. (The\nvariables of the module code block are local and global.) If a\nvariable is used in a code block but not defined there, it is a *free\nvariable*.\n\nWhen a name is not found at all, a ``NameError`` exception is raised.\nIf the name refers to a local variable that has not been bound, a\n``UnboundLocalError`` exception is raised. ``UnboundLocalError`` is a\nsubclass of ``NameError``.\n\nThe following constructs bind names: formal parameters to functions,\n``import`` statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, ``for`` loop header, in the\nsecond position of an ``except`` clause header or after ``as`` in a\n``with`` statement. The ``import`` statement of the form ``from ...\nimport *`` binds all names defined in the imported module, except\nthose beginning with an underscore. This form may only be used at the\nmodule level.\n\nA target occurring in a ``del`` statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name). It\nis illegal to unbind a name that is referenced by an enclosing scope;\nthe compiler will report a ``SyntaxError``.\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block. This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle. Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block. The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the global statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtins namespace, the namespace\nof the module ``__builtin__``. The global namespace is searched\nfirst. If the name is not found there, the builtins namespace is\nsearched. The global statement must precede all uses of the name.\n\nThe builtins namespace associated with the execution of a code block\nis actually found by looking up the name ``__builtins__`` in its\nglobal namespace; this should be a dictionary or a module (in the\nlatter case the module's dictionary is used). By default, when in the\n``__main__`` module, ``__builtins__`` is the built-in module\n``__builtin__`` (note: no 's'); when in any other module,\n``__builtins__`` is an alias for the dictionary of the ``__builtin__``\nmodule itself. ``__builtins__`` can be set to a user-created\ndictionary to create a weak form of restricted execution.\n\n**CPython implementation detail:** Users should not touch\n``__builtins__``; it is strictly an implementation detail. Users\nwanting to override values in the builtins namespace should ``import``\nthe ``__builtin__`` (no 's') module and modify its attributes\nappropriately.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported. The main module for a script is always called\n``__main__``.\n\nThe ``global`` statement has the same scope as a name binding\noperation in the same block. If the nearest enclosing scope for a\nfree variable contains a global statement, the free variable is\ntreated as a global.\n\nA class definition is an executable statement that may use and define\nnames. These references follow the normal rules for name resolution.\nThe namespace of the class definition becomes the attribute dictionary\nof the class. Names defined at the class scope are not visible in\nmethods.\n\n\nInteraction with dynamic features\n=================================\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nIf ``exec`` is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n``SyntaxError`` unless the exec explicitly specifies the local\nnamespace for the ``exec``. (In other words, ``exec obj`` would be\nillegal, but ``exec obj in ns`` would be legal.)\n\nThe ``eval()``, ``execfile()``, and ``input()`` functions and the\n``exec`` statement do not have access to the full environment for\nresolving names. Names may be resolved in the local and global\nnamespaces of the caller. Free variables are not resolved in the\nnearest enclosing namespace, but in the global namespace. [1] The\n``exec`` statement and the ``eval()`` and ``execfile()`` functions\nhave optional arguments to override the global and local namespace.\nIf only one namespace is specified, it is used for both.\n", - 'numbers': "\nNumeric literals\n****************\n\nThere are four types of numeric literals: plain integers, long\nintegers, floating point numbers, and imaginary numbers. There are no\ncomplex literals (complex numbers can be formed by adding a real\nnumber and an imaginary number).\n\nNote that numeric literals do not include a sign; a phrase like ``-1``\nis actually an expression composed of the unary operator '``-``' and\nthe literal ``1``.\n", - 'numeric-types': '\nEmulating numeric types\n***********************\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``//``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``). For\n instance, to evaluate the expression ``x + y``, where *x* is an\n instance of a class that has an ``__add__()`` method,\n ``x.__add__(y)`` is called. The ``__divmod__()`` method should be\n the equivalent to using ``__floordiv__()`` and ``__mod__()``; it\n should not be related to ``__truediv__()`` (described below). Note\n that ``__pow__()`` should be defined to accept an optional third\n argument if the ternary version of the built-in ``pow()`` function\n is to be supported.\n\n If one of those methods does not support the operation with the\n supplied arguments, it should return ``NotImplemented``.\n\nobject.__div__(self, other)\nobject.__truediv__(self, other)\n\n The division operator (``/``) is implemented by these methods. The\n ``__truediv__()`` method is used when ``__future__.division`` is in\n effect, otherwise ``__div__()`` is used. If only one of these two\n methods is defined, the object will not support division in the\n alternate context; ``TypeError`` will be raised instead.\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rdiv__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``/``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``) with\n reflected (swapped) operands. These functions are only called if\n the left operand does not support the corresponding operation and\n the operands are of different types. [2] For instance, to evaluate\n the expression ``x - y``, where *y* is an instance of a class that\n has an ``__rsub__()`` method, ``y.__rsub__(x)`` is called if\n ``x.__sub__(y)`` returns *NotImplemented*.\n\n Note that ternary ``pow()`` will not try calling ``__rpow__()``\n (the coercion rules would become too complicated).\n\n Note: If the right operand\'s type is a subclass of the left operand\'s\n type and that subclass provides the reflected method for the\n operation, this method will be called before the left operand\'s\n non-reflected method. This behavior allows subclasses to\n override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__idiv__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n These methods are called to implement the augmented arithmetic\n assignments (``+=``, ``-=``, ``*=``, ``/=``, ``//=``, ``%=``,\n ``**=``, ``<<=``, ``>>=``, ``&=``, ``^=``, ``|=``). These methods\n should attempt to do the operation in-place (modifying *self*) and\n return the result (which could be, but does not have to be,\n *self*). If a specific method is not defined, the augmented\n assignment falls back to the normal methods. For instance, to\n execute the statement ``x += y``, where *x* is an instance of a\n class that has an ``__iadd__()`` method, ``x.__iadd__(y)`` is\n called. If *x* is an instance of a class that does not define a\n ``__iadd__()`` method, ``x.__add__(y)`` and ``y.__radd__(x)`` are\n considered, as with the evaluation of ``x + y``.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n Called to implement the unary arithmetic operations (``-``, ``+``,\n ``abs()`` and ``~``).\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__long__(self)\nobject.__float__(self)\n\n Called to implement the built-in functions ``complex()``,\n ``int()``, ``long()``, and ``float()``. Should return a value of\n the appropriate type.\n\nobject.__oct__(self)\nobject.__hex__(self)\n\n Called to implement the built-in functions ``oct()`` and ``hex()``.\n Should return a string value.\n\nobject.__index__(self)\n\n Called to implement ``operator.index()``. Also called whenever\n Python needs an integer object (such as in slicing). Must return\n an integer (int or long).\n\n New in version 2.5.\n\nobject.__coerce__(self, other)\n\n Called to implement "mixed-mode" numeric arithmetic. Should either\n return a 2-tuple containing *self* and *other* converted to a\n common numeric type, or ``None`` if conversion is impossible. When\n the common type would be the type of ``other``, it is sufficient to\n return ``None``, since the interpreter will also ask the other\n object to attempt a coercion (but sometimes, if the implementation\n of the other type cannot be changed, it is useful to do the\n conversion to the other type here). A return value of\n ``NotImplemented`` is equivalent to returning ``None``.\n', - 'objects': '\nObjects, values and types\n*************************\n\n*Objects* are Python\'s abstraction for data. All data in a Python\nprogram is represented by objects or by relations between objects. (In\na sense, and in conformance to Von Neumann\'s model of a "stored\nprogram computer," code is also represented by objects.)\n\nEvery object has an identity, a type and a value. An object\'s\n*identity* never changes once it has been created; you may think of it\nas the object\'s address in memory. The \'``is``\' operator compares the\nidentity of two objects; the ``id()`` function returns an integer\nrepresenting its identity (currently implemented as its address). An\nobject\'s *type* is also unchangeable. [1] An object\'s type determines\nthe operations that the object supports (e.g., "does it have a\nlength?") and also defines the possible values for objects of that\ntype. The ``type()`` function returns an object\'s type (which is an\nobject itself). The *value* of some objects can change. Objects\nwhose value can change are said to be *mutable*; objects whose value\nis unchangeable once they are created are called *immutable*. (The\nvalue of an immutable container object that contains a reference to a\nmutable object can change when the latter\'s value is changed; however\nthe container is still considered immutable, because the collection of\nobjects it contains cannot be changed. So, immutability is not\nstrictly the same as having an unchangeable value, it is more subtle.)\nAn object\'s mutability is determined by its type; for instance,\nnumbers, strings and tuples are immutable, while dictionaries and\nlists are mutable.\n\nObjects are never explicitly destroyed; however, when they become\nunreachable they may be garbage-collected. An implementation is\nallowed to postpone garbage collection or omit it altogether --- it is\na matter of implementation quality how garbage collection is\nimplemented, as long as no objects are collected that are still\nreachable.\n\n**CPython implementation detail:** CPython currently uses a reference-\ncounting scheme with (optional) delayed detection of cyclically linked\ngarbage, which collects most objects as soon as they become\nunreachable, but is not guaranteed to collect garbage containing\ncircular references. See the documentation of the ``gc`` module for\ninformation on controlling the collection of cyclic garbage. Other\nimplementations act differently and CPython may change. Do not depend\non immediate finalization of objects when they become unreachable (ex:\nalways close files).\n\nNote that the use of the implementation\'s tracing or debugging\nfacilities may keep objects alive that would normally be collectable.\nAlso note that catching an exception with a \'``try``...``except``\'\nstatement may keep objects alive.\n\nSome objects contain references to "external" resources such as open\nfiles or windows. It is understood that these resources are freed\nwhen the object is garbage-collected, but since garbage collection is\nnot guaranteed to happen, such objects also provide an explicit way to\nrelease the external resource, usually a ``close()`` method. Programs\nare strongly recommended to explicitly close such objects. The\n\'``try``...``finally``\' statement provides a convenient way to do\nthis.\n\nSome objects contain references to other objects; these are called\n*containers*. Examples of containers are tuples, lists and\ndictionaries. The references are part of a container\'s value. In\nmost cases, when we talk about the value of a container, we imply the\nvalues, not the identities of the contained objects; however, when we\ntalk about the mutability of a container, only the identities of the\nimmediately contained objects are implied. So, if an immutable\ncontainer (like a tuple) contains a reference to a mutable object, its\nvalue changes if that mutable object is changed.\n\nTypes affect almost all aspects of object behavior. Even the\nimportance of object identity is affected in some sense: for immutable\ntypes, operations that compute new values may actually return a\nreference to any existing object with the same type and value, while\nfor mutable objects this is not allowed. E.g., after ``a = 1; b =\n1``, ``a`` and ``b`` may or may not refer to the same object with the\nvalue one, depending on the implementation, but after ``c = []; d =\n[]``, ``c`` and ``d`` are guaranteed to refer to two different,\nunique, newly created empty lists. (Note that ``c = d = []`` assigns\nthe same object to both ``c`` and ``d``.)\n', - 'operator-summary': '\nOperator precedence\n*******************\n\nThe following table summarizes the operator precedences in Python,\nfrom lowest precedence (least binding) to highest precedence (most\nbinding). Operators in the same box have the same precedence. Unless\nthe syntax is explicitly given, operators are binary. Operators in\nthe same box group left to right (except for comparisons, including\ntests, which all have the same precedence and chain from left to right\n--- see section *Comparisons* --- and exponentiation, which groups\nfrom right to left).\n\n+-------------------------------------------------+---------------------------------------+\n| Operator | Description |\n+=================================================+=======================================+\n| ``lambda`` | Lambda expression |\n+-------------------------------------------------+---------------------------------------+\n| ``if`` -- ``else`` | Conditional expression |\n+-------------------------------------------------+---------------------------------------+\n| ``or`` | Boolean OR |\n+-------------------------------------------------+---------------------------------------+\n| ``and`` | Boolean AND |\n+-------------------------------------------------+---------------------------------------+\n| ``not`` ``x`` | Boolean NOT |\n+-------------------------------------------------+---------------------------------------+\n| ``in``, ``not in``, ``is``, ``is not``, ``<``, | Comparisons, including membership |\n| ``<=``, ``>``, ``>=``, ``<>``, ``!=``, ``==`` | tests and identity tests |\n+-------------------------------------------------+---------------------------------------+\n| ``|`` | Bitwise OR |\n+-------------------------------------------------+---------------------------------------+\n| ``^`` | Bitwise XOR |\n+-------------------------------------------------+---------------------------------------+\n| ``&`` | Bitwise AND |\n+-------------------------------------------------+---------------------------------------+\n| ``<<``, ``>>`` | Shifts |\n+-------------------------------------------------+---------------------------------------+\n| ``+``, ``-`` | Addition and subtraction |\n+-------------------------------------------------+---------------------------------------+\n| ``*``, ``/``, ``//``, ``%`` | Multiplication, division, remainder |\n| | [8] |\n+-------------------------------------------------+---------------------------------------+\n| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT |\n+-------------------------------------------------+---------------------------------------+\n| ``**`` | Exponentiation [9] |\n+-------------------------------------------------+---------------------------------------+\n| ``x[index]``, ``x[index:index]``, | Subscription, slicing, call, |\n| ``x(arguments...)``, ``x.attribute`` | attribute reference |\n+-------------------------------------------------+---------------------------------------+\n| ``(expressions...)``, ``[expressions...]``, | Binding or tuple display, list |\n| ``{key: value...}``, ```expressions...``` | display, dictionary display, string |\n| | conversion |\n+-------------------------------------------------+---------------------------------------+\n\n-[ Footnotes ]-\n\n[1] In Python 2.3 and later releases, a list comprehension "leaks" the\n control variables of each ``for`` it contains into the containing\n scope. However, this behavior is deprecated, and relying on it\n will not work in Python 3.\n\n[2] While ``abs(x%y) < abs(y)`` is true mathematically, for floats it\n may not be true numerically due to roundoff. For example, and\n assuming a platform on which a Python float is an IEEE 754 double-\n precision number, in order that ``-1e-100 % 1e100`` have the same\n sign as ``1e100``, the computed result is ``-1e-100 + 1e100``,\n which is numerically exactly equal to ``1e100``. The function\n ``math.fmod()`` returns a result whose sign matches the sign of\n the first argument instead, and so returns ``-1e-100`` in this\n case. Which approach is more appropriate depends on the\n application.\n\n[3] If x is very close to an exact integer multiple of y, it\'s\n possible for ``floor(x/y)`` to be one larger than ``(x-x%y)/y``\n due to rounding. In such cases, Python returns the latter result,\n in order to preserve that ``divmod(x,y)[0] * y + x % y`` be very\n close to ``x``.\n\n[4] While comparisons between unicode strings make sense at the byte\n level, they may be counter-intuitive to users. For example, the\n strings ``u"\\u00C7"`` and ``u"\\u0043\\u0327"`` compare differently,\n even though they both represent the same unicode character (LATIN\n CAPITAL LETTER C WITH CEDILLA). To compare strings in a human\n recognizable way, compare using ``unicodedata.normalize()``.\n\n[5] The implementation computes this efficiently, without constructing\n lists or sorting.\n\n[6] Earlier versions of Python used lexicographic comparison of the\n sorted (key, value) lists, but this was very expensive for the\n common case of comparing for equality. An even earlier version of\n Python compared dictionaries by identity only, but this caused\n surprises because people expected to be able to test a dictionary\n for emptiness by comparing it to ``{}``.\n\n[7] Due to automatic garbage-collection, free lists, and the dynamic\n nature of descriptors, you may notice seemingly unusual behaviour\n in certain uses of the ``is`` operator, like those involving\n comparisons between instance methods, or constants. Check their\n documentation for more info.\n\n[8] The ``%`` operator is also used for string formatting; the same\n precedence applies.\n\n[9] The power operator ``**`` binds less tightly than an arithmetic or\n bitwise unary operator on its right, that is, ``2**-1`` is\n ``0.5``.\n', - 'pass': '\nThe ``pass`` statement\n**********************\n\n pass_stmt ::= "pass"\n\n``pass`` is a null operation --- when it is executed, nothing happens.\nIt is useful as a placeholder when a statement is required\nsyntactically, but no code needs to be executed, for example:\n\n def f(arg): pass # a function that does nothing (yet)\n\n class C: pass # a class with no methods (yet)\n', - 'power': '\nThe power operator\n******************\n\nThe power operator binds more tightly than unary operators on its\nleft; it binds less tightly than unary operators on its right. The\nsyntax is:\n\n power ::= primary ["**" u_expr]\n\nThus, in an unparenthesized sequence of power and unary operators, the\noperators are evaluated from right to left (this does not constrain\nthe evaluation order for the operands): ``-1**2`` results in ``-1``.\n\nThe power operator has the same semantics as the built-in ``pow()``\nfunction, when called with two arguments: it yields its left argument\nraised to the power of its right argument. The numeric arguments are\nfirst converted to a common type. The result type is that of the\narguments after coercion.\n\nWith mixed operand types, the coercion rules for binary arithmetic\noperators apply. For int and long int operands, the result has the\nsame type as the operands (after coercion) unless the second argument\nis negative; in that case, all arguments are converted to float and a\nfloat result is delivered. For example, ``10**2`` returns ``100``, but\n``10**-2`` returns ``0.01``. (This last feature was added in Python\n2.2. In Python 2.1 and before, if both arguments were of integer types\nand the second argument was negative, an exception was raised).\n\nRaising ``0.0`` to a negative power results in a\n``ZeroDivisionError``. Raising a negative number to a fractional power\nresults in a ``ValueError``.\n', - 'raise': '\nThe ``raise`` statement\n***********************\n\n raise_stmt ::= "raise" [expression ["," expression ["," expression]]]\n\nIf no expressions are present, ``raise`` re-raises the last exception\nthat was active in the current scope. If no exception is active in\nthe current scope, a ``TypeError`` exception is raised indicating that\nthis is an error (if running under IDLE, a ``Queue.Empty`` exception\nis raised instead).\n\nOtherwise, ``raise`` evaluates the expressions to get three objects,\nusing ``None`` as the value of omitted expressions. The first two\nobjects are used to determine the *type* and *value* of the exception.\n\nIf the first object is an instance, the type of the exception is the\nclass of the instance, the instance itself is the value, and the\nsecond object must be ``None``.\n\nIf the first object is a class, it becomes the type of the exception.\nThe second object is used to determine the exception value: If it is\nan instance of the class, the instance becomes the exception value. If\nthe second object is a tuple, it is used as the argument list for the\nclass constructor; if it is ``None``, an empty argument list is used,\nand any other object is treated as a single argument to the\nconstructor. The instance so created by calling the constructor is\nused as the exception value.\n\nIf a third object is present and not ``None``, it must be a traceback\nobject (see section *The standard type hierarchy*), and it is\nsubstituted instead of the current location as the place where the\nexception occurred. If the third object is present and not a\ntraceback object or ``None``, a ``TypeError`` exception is raised.\nThe three-expression form of ``raise`` is useful to re-raise an\nexception transparently in an except clause, but ``raise`` with no\nexpressions should be preferred if the exception to be re-raised was\nthe most recently active exception in the current scope.\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information about handling exceptions is in section\n*The try statement*.\n', - 'return': '\nThe ``return`` statement\n************************\n\n return_stmt ::= "return" [expression_list]\n\n``return`` may only occur syntactically nested in a function\ndefinition, not within a nested class definition.\n\nIf an expression list is present, it is evaluated, else ``None`` is\nsubstituted.\n\n``return`` leaves the current function call with the expression list\n(or ``None``) as return value.\n\nWhen ``return`` passes control out of a ``try`` statement with a\n``finally`` clause, that ``finally`` clause is executed before really\nleaving the function.\n\nIn a generator function, the ``return`` statement is not allowed to\ninclude an ``expression_list``. In that context, a bare ``return``\nindicates that the generator is done and will cause ``StopIteration``\nto be raised.\n', - 'sequence-types': "\nEmulating container types\n*************************\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which ``0 <= k < N``\nwhere *N* is the length of the sequence, or slice objects, which\ndefine a range of items. (For backwards compatibility, the method\n``__getslice__()`` (see below) can also be defined to handle simple,\nbut not extended slices.) It is also recommended that mappings provide\nthe methods ``keys()``, ``values()``, ``items()``, ``has_key()``,\n``get()``, ``clear()``, ``setdefault()``, ``iterkeys()``,\n``itervalues()``, ``iteritems()``, ``pop()``, ``popitem()``,\n``copy()``, and ``update()`` behaving similar to those for Python's\nstandard dictionary objects. The ``UserDict`` module provides a\n``DictMixin`` class to help create those methods from a base set of\n``__getitem__()``, ``__setitem__()``, ``__delitem__()``, and\n``keys()``. Mutable sequences should provide methods ``append()``,\n``count()``, ``index()``, ``extend()``, ``insert()``, ``pop()``,\n``remove()``, ``reverse()`` and ``sort()``, like Python standard list\nobjects. Finally, sequence types should implement addition (meaning\nconcatenation) and multiplication (meaning repetition) by defining the\nmethods ``__add__()``, ``__radd__()``, ``__iadd__()``, ``__mul__()``,\n``__rmul__()`` and ``__imul__()`` described below; they should not\ndefine ``__coerce__()`` or other numerical operators. It is\nrecommended that both mappings and sequences implement the\n``__contains__()`` method to allow efficient use of the ``in``\noperator; for mappings, ``in`` should be equivalent of ``has_key()``;\nfor sequences, it should search through the values. It is further\nrecommended that both mappings and sequences implement the\n``__iter__()`` method to allow efficient iteration through the\ncontainer; for mappings, ``__iter__()`` should be the same as\n``iterkeys()``; for sequences, it should iterate through the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function ``len()``. Should return\n the length of the object, an integer ``>=`` 0. Also, an object\n that doesn't define a ``__nonzero__()`` method and whose\n ``__len__()`` method returns zero is considered to be false in a\n Boolean context.\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of ``self[key]``. For sequence\n types, the accepted keys should be integers and slice objects.\n Note that the special interpretation of negative indexes (if the\n class wishes to emulate a sequence type) is up to the\n ``__getitem__()`` method. If *key* is of an inappropriate type,\n ``TypeError`` may be raised; if of a value outside the set of\n indexes for the sequence (after any special interpretation of\n negative values), ``IndexError`` should be raised. For mapping\n types, if *key* is missing (not in the container), ``KeyError``\n should be raised.\n\n Note: ``for`` loops expect that an ``IndexError`` will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the ``__getitem__()`` method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the ``__getitem__()``\n method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container, and should also be made\n available as the method ``iterkeys()``.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the ``reversed()`` built-in to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the ``__reversed__()`` method is not provided, the\n ``reversed()`` built-in will fall back to using the sequence\n protocol (``__len__()`` and ``__getitem__()``). Objects that\n support the sequence protocol should only provide\n ``__reversed__()`` if they can provide an implementation that is\n more efficient than the one provided by ``reversed()``.\n\n New in version 2.6.\n\nThe membership test operators (``in`` and ``not in``) are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n For objects that don't define ``__contains__()``, the membership\n test first tries iteration via ``__iter__()``, then the old\n sequence iteration protocol via ``__getitem__()``, see *this\n section in the language reference*.\n", - 'shifting': '\nShifting operations\n*******************\n\nThe shifting operations have lower priority than the arithmetic\noperations:\n\n shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr\n\nThese operators accept plain or long integers as arguments. The\narguments are converted to a common type. They shift the first\nargument to the left or right by the number of bits given by the\nsecond argument.\n\nA right shift by *n* bits is defined as division by ``pow(2, n)``. A\nleft shift by *n* bits is defined as multiplication with ``pow(2,\nn)``. Negative shift counts raise a ``ValueError`` exception.\n\nNote: In the current implementation, the right-hand operand is required to\n be at most ``sys.maxsize``. If the right-hand operand is larger\n than ``sys.maxsize`` an ``OverflowError`` exception is raised.\n', - 'slicings': '\nSlicings\n********\n\nA slicing selects a range of items in a sequence object (e.g., a\nstring, tuple or list). Slicings may be used as expressions or as\ntargets in assignment or ``del`` statements. The syntax for a\nslicing:\n\n slicing ::= simple_slicing | extended_slicing\n simple_slicing ::= primary "[" short_slice "]"\n extended_slicing ::= primary "[" slice_list "]"\n slice_list ::= slice_item ("," slice_item)* [","]\n slice_item ::= expression | proper_slice | ellipsis\n proper_slice ::= short_slice | long_slice\n short_slice ::= [lower_bound] ":" [upper_bound]\n long_slice ::= short_slice ":" [stride]\n lower_bound ::= expression\n upper_bound ::= expression\n stride ::= expression\n ellipsis ::= "..."\n\nThere is ambiguity in the formal syntax here: anything that looks like\nan expression list also looks like a slice list, so any subscription\ncan be interpreted as a slicing. Rather than further complicating the\nsyntax, this is disambiguated by defining that in this case the\ninterpretation as a subscription takes priority over the\ninterpretation as a slicing (this is the case if the slice list\ncontains no proper slice nor ellipses). Similarly, when the slice\nlist has exactly one short slice and no trailing comma, the\ninterpretation as a simple slicing takes priority over that as an\nextended slicing.\n\nThe semantics for a simple slicing are as follows. The primary must\nevaluate to a sequence object. The lower and upper bound expressions,\nif present, must evaluate to plain integers; defaults are zero and the\n``sys.maxint``, respectively. If either bound is negative, the\nsequence\'s length is added to it. The slicing now selects all items\nwith index *k* such that ``i <= k < j`` where *i* and *j* are the\nspecified lower and upper bounds. This may be an empty sequence. It\nis not an error if *i* or *j* lie outside the range of valid indexes\n(such items don\'t exist so they aren\'t selected).\n\nThe semantics for an extended slicing are as follows. The primary\nmust evaluate to a mapping object, and it is indexed with a key that\nis constructed from the slice list, as follows. If the slice list\ncontains at least one comma, the key is a tuple containing the\nconversion of the slice items; otherwise, the conversion of the lone\nslice item is the key. The conversion of a slice item that is an\nexpression is that expression. The conversion of an ellipsis slice\nitem is the built-in ``Ellipsis`` object. The conversion of a proper\nslice is a slice object (see section *The standard type hierarchy*)\nwhose ``start``, ``stop`` and ``step`` attributes are the values of\nthe expressions given as lower bound, upper bound and stride,\nrespectively, substituting ``None`` for missing expressions.\n', - 'specialattrs': '\nSpecial Attributes\n******************\n\nThe implementation adds a few special read-only attributes to several\nobject types, where they are relevant. Some of these are not reported\nby the ``dir()`` built-in function.\n\nobject.__dict__\n\n A dictionary or other mapping object used to store an object\'s\n (writable) attributes.\n\nobject.__methods__\n\n Deprecated since version 2.2: Use the built-in function ``dir()``\n to get a list of an object\'s attributes. This attribute is no\n longer available.\n\nobject.__members__\n\n Deprecated since version 2.2: Use the built-in function ``dir()``\n to get a list of an object\'s attributes. This attribute is no\n longer available.\n\ninstance.__class__\n\n The class to which a class instance belongs.\n\nclass.__bases__\n\n The tuple of base classes of a class object.\n\nclass.__name__\n\n The name of the class or type.\n\nThe following attributes are only supported by *new-style class*es.\n\nclass.__mro__\n\n This attribute is a tuple of classes that are considered when\n looking for base classes during method resolution.\n\nclass.mro()\n\n This method can be overridden by a metaclass to customize the\n method resolution order for its instances. It is called at class\n instantiation, and its result is stored in ``__mro__``.\n\nclass.__subclasses__()\n\n Each new-style class keeps a list of weak references to its\n immediate subclasses. This method returns a list of all those\n references still alive. Example:\n\n >>> int.__subclasses__()\n []\n\n-[ Footnotes ]-\n\n[1] Additional information on these special methods may be found in\n the Python Reference Manual (*Basic customization*).\n\n[2] As a consequence, the list ``[1, 2]`` is considered equal to\n ``[1.0, 2.0]``, and similarly for tuples.\n\n[3] They must have since the parser can\'t tell the type of the\n operands.\n\n[4] Cased characters are those with general category property being\n one of "Lu" (Letter, uppercase), "Ll" (Letter, lowercase), or "Lt"\n (Letter, titlecase).\n\n[5] To format only a tuple you should therefore provide a singleton\n tuple whose only element is the tuple to be formatted.\n\n[6] The advantage of leaving the newline on is that returning an empty\n string is then an unambiguous EOF indication. It is also possible\n (in cases where it might matter, for example, if you want to make\n an exact copy of a file while scanning its lines) to tell whether\n the last line of a file ended in a newline or not (yes this\n happens!).\n', - 'specialnames': '\nSpecial method names\n********************\n\nA class can implement certain operations that are invoked by special\nsyntax (such as arithmetic operations or subscripting and slicing) by\ndefining methods with special names. This is Python\'s approach to\n*operator overloading*, allowing classes to define their own behavior\nwith respect to language operators. For instance, if a class defines\na method named ``__getitem__()``, and ``x`` is an instance of this\nclass, then ``x[i]`` is roughly equivalent to ``x.__getitem__(i)`` for\nold-style classes and ``type(x).__getitem__(x, i)`` for new-style\nclasses. Except where mentioned, attempts to execute an operation\nraise an exception when no appropriate method is defined (typically\n``AttributeError`` or ``TypeError``).\n\nWhen implementing a class that emulates any built-in type, it is\nimportant that the emulation only be implemented to the degree that it\nmakes sense for the object being modelled. For example, some\nsequences may work well with retrieval of individual elements, but\nextracting a slice may not make sense. (One example of this is the\n``NodeList`` interface in the W3C\'s Document Object Model.)\n\n\nBasic customization\n===================\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. ``__new__()`` is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of ``__new__()`` should be the new object instance (usually\n an instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s ``__new__()`` method using\n ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If ``__new__()`` returns an instance of *cls*, then the new\n instance\'s ``__init__()`` method will be invoked like\n ``__init__(self[, ...])``, where *self* is the new instance and the\n remaining arguments are the same as were passed to ``__new__()``.\n\n If ``__new__()`` does not return an instance of *cls*, then the new\n instance\'s ``__init__()`` method will not be invoked.\n\n ``__new__()`` is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called when the instance is created. The arguments are those\n passed to the class constructor expression. If a base class has an\n ``__init__()`` method, the derived class\'s ``__init__()`` method,\n if any, must explicitly call it to ensure proper initialization of\n the base class part of the instance; for example:\n ``BaseClass.__init__(self, [args...])``. As a special constraint\n on constructors, no value may be returned; doing so will cause a\n ``TypeError`` to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a ``__del__()`` method,\n the derived class\'s ``__del__()`` method, if any, must explicitly\n call it to ensure proper deletion of the base class part of the\n instance. Note that it is possible (though not recommended!) for\n the ``__del__()`` method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n ``__del__()`` methods are called for objects that still exist when\n the interpreter exits.\n\n Note: ``del x`` doesn\'t directly call ``x.__del__()`` --- the former\n decrements the reference count for ``x`` by one, and the latter\n is only called when ``x``\'s reference count reaches zero. Some\n common situations that may prevent the reference count of an\n object from going to zero include: circular references between\n objects (e.g., a doubly-linked list or a tree data structure with\n parent and child pointers); a reference to the object on the\n stack frame of a function that caught an exception (the traceback\n stored in ``sys.exc_traceback`` keeps the stack frame alive); or\n a reference to the object on the stack frame that raised an\n unhandled exception in interactive mode (the traceback stored in\n ``sys.last_traceback`` keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the latter two situations can be resolved by storing ``None`` in\n ``sys.exc_traceback`` or ``sys.last_traceback``. Circular\n references which are garbage are detected when the option cycle\n detector is enabled (it\'s on by default), but can only be cleaned\n up if there are no Python-level ``__del__()`` methods involved.\n Refer to the documentation for the ``gc`` module for more\n information about how ``__del__()`` methods are handled by the\n cycle detector, particularly the description of the ``garbage``\n value.\n\n Warning: Due to the precarious circumstances under which ``__del__()``\n methods are invoked, exceptions that occur during their execution\n are ignored, and a warning is printed to ``sys.stderr`` instead.\n Also, when ``__del__()`` is invoked in response to a module being\n deleted (e.g., when execution of the program is done), other\n globals referenced by the ``__del__()`` method may already have\n been deleted or in the process of being torn down (e.g. the\n import machinery shutting down). For this reason, ``__del__()``\n methods should do the absolute minimum needed to maintain\n external invariants. Starting with version 1.5, Python\n guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the ``__del__()`` method is called.\n\n See also the *-R* command-line option.\n\nobject.__repr__(self)\n\n Called by the ``repr()`` built-in function and by string\n conversions (reverse quotes) to compute the "official" string\n representation of an object. If at all possible, this should look\n like a valid Python expression that could be used to recreate an\n object with the same value (given an appropriate environment). If\n this is not possible, a string of the form ``<...some useful\n description...>`` should be returned. The return value must be a\n string object. If a class defines ``__repr__()`` but not\n ``__str__()``, then ``__repr__()`` is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by the ``str()`` built-in function and by the ``print``\n statement to compute the "informal" string representation of an\n object. This differs from ``__repr__()`` in that it does not have\n to be a valid Python expression: a more convenient or concise\n representation may be used instead. The return value must be a\n string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n New in version 2.1.\n\n These are the so-called "rich comparison" methods, and are called\n for comparison operators in preference to ``__cmp__()`` below. The\n correspondence between operator symbols and method names is as\n follows: ``xy`` call ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and\n ``x>=y`` calls ``x.__ge__(y)``.\n\n A rich comparison method may return the singleton\n ``NotImplemented`` if it does not implement the operation for a\n given pair of arguments. By convention, ``False`` and ``True`` are\n returned for a successful comparison. However, these methods can\n return any value, so if the comparison operator is used in a\n Boolean context (e.g., in the condition of an ``if`` statement),\n Python will call ``bool()`` on the value to determine if the result\n is true or false.\n\n There are no implied relationships among the comparison operators.\n The truth of ``x==y`` does not imply that ``x!=y`` is false.\n Accordingly, when defining ``__eq__()``, one should also define\n ``__ne__()`` so that the operators will behave as expected. See\n the paragraph on ``__hash__()`` for some important notes on\n creating *hashable* objects which support custom comparison\n operations and are usable as dictionary keys.\n\n There are no swapped-argument versions of these methods (to be used\n when the left argument does not support the operation but the right\n argument does); rather, ``__lt__()`` and ``__gt__()`` are each\n other\'s reflection, ``__le__()`` and ``__ge__()`` are each other\'s\n reflection, and ``__eq__()`` and ``__ne__()`` are their own\n reflection.\n\n Arguments to rich comparison methods are never coerced.\n\n To automatically generate ordering operations from a single root\n operation, see ``functools.total_ordering()``.\n\nobject.__cmp__(self, other)\n\n Called by comparison operations if rich comparison (see above) is\n not defined. Should return a negative integer if ``self < other``,\n zero if ``self == other``, a positive integer if ``self > other``.\n If no ``__cmp__()``, ``__eq__()`` or ``__ne__()`` operation is\n defined, class instances are compared by object identity\n ("address"). See also the description of ``__hash__()`` for some\n important notes on creating *hashable* objects which support custom\n comparison operations and are usable as dictionary keys. (Note: the\n restriction that exceptions are not propagated by ``__cmp__()`` has\n been removed since Python 1.5.)\n\nobject.__rcmp__(self, other)\n\n Changed in version 2.1: No longer supported.\n\nobject.__hash__(self)\n\n Called by built-in function ``hash()`` and for operations on\n members of hashed collections including ``set``, ``frozenset``, and\n ``dict``. ``__hash__()`` should return an integer. The only\n required property is that objects which compare equal have the same\n hash value; it is advised to somehow mix together (e.g. using\n exclusive or) the hash values for the components of the object that\n also play a part in comparison of objects.\n\n If a class does not define a ``__cmp__()`` or ``__eq__()`` method\n it should not define a ``__hash__()`` operation either; if it\n defines ``__cmp__()`` or ``__eq__()`` but not ``__hash__()``, its\n instances will not be usable in hashed collections. If a class\n defines mutable objects and implements a ``__cmp__()`` or\n ``__eq__()`` method, it should not implement ``__hash__()``, since\n hashable collection implementations require that a object\'s hash\n value is immutable (if the object\'s hash value changes, it will be\n in the wrong hash bucket).\n\n User-defined classes have ``__cmp__()`` and ``__hash__()`` methods\n by default; with them, all objects compare unequal (except with\n themselves) and ``x.__hash__()`` returns ``id(x)``.\n\n Classes which inherit a ``__hash__()`` method from a parent class\n but change the meaning of ``__cmp__()`` or ``__eq__()`` such that\n the hash value returned is no longer appropriate (e.g. by switching\n to a value-based concept of equality instead of the default\n identity based equality) can explicitly flag themselves as being\n unhashable by setting ``__hash__ = None`` in the class definition.\n Doing so means that not only will instances of the class raise an\n appropriate ``TypeError`` when a program attempts to retrieve their\n hash value, but they will also be correctly identified as\n unhashable when checking ``isinstance(obj, collections.Hashable)``\n (unlike classes which define their own ``__hash__()`` to explicitly\n raise ``TypeError``).\n\n Changed in version 2.5: ``__hash__()`` may now also return a long\n integer object; the 32-bit integer is then derived from the hash of\n that object.\n\n Changed in version 2.6: ``__hash__`` may now be set to ``None`` to\n explicitly flag instances of a class as unhashable.\n\nobject.__nonzero__(self)\n\n Called to implement truth value testing and the built-in operation\n ``bool()``; should return ``False`` or ``True``, or their integer\n equivalents ``0`` or ``1``. When this method is not defined,\n ``__len__()`` is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither ``__len__()`` nor ``__nonzero__()``, all its instances are\n considered true.\n\nobject.__unicode__(self)\n\n Called to implement ``unicode()`` built-in; should return a Unicode\n object. When this method is not defined, string conversion is\n attempted, and the result of string conversion is converted to\n Unicode using the system default encoding.\n\n\nCustomizing attribute access\n============================\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of ``x.name``)\nfor class instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for ``self``). ``name`` is the attribute name.\n This method should return the (computed) attribute value or raise\n an ``AttributeError`` exception.\n\n Note that if the attribute is found through the normal mechanism,\n ``__getattr__()`` is not called. (This is an intentional asymmetry\n between ``__getattr__()`` and ``__setattr__()``.) This is done both\n for efficiency reasons and because otherwise ``__getattr__()``\n would have no way to access other attributes of the instance. Note\n that at least for instance variables, you can fake total control by\n not inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n ``__getattribute__()`` method below for a way to actually get total\n control in new-style classes.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If ``__setattr__()`` wants to assign to an instance attribute, it\n should not simply execute ``self.name = value`` --- this would\n cause a recursive call to itself. Instead, it should insert the\n value in the dictionary of instance attributes, e.g.,\n ``self.__dict__[name] = value``. For new-style classes, rather\n than accessing the instance dictionary, it should call the base\n class method with the same name, for example,\n ``object.__setattr__(self, name, value)``.\n\nobject.__delattr__(self, name)\n\n Like ``__setattr__()`` but for attribute deletion instead of\n assignment. This should only be implemented if ``del obj.name`` is\n meaningful for the object.\n\n\nMore attribute access for new-style classes\n-------------------------------------------\n\nThe following methods only apply to new-style classes.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines\n ``__getattr__()``, the latter will not be called unless\n ``__getattribute__()`` either calls it explicitly or raises an\n ``AttributeError``. This method should return the (computed)\n attribute value or raise an ``AttributeError`` exception. In order\n to avoid infinite recursion in this method, its implementation\n should always call the base class method with the same name to\n access any attributes it needs, for example,\n ``object.__getattribute__(self, name)``.\n\n Note: This method may still be bypassed when looking up special methods\n as the result of implicit invocation via language syntax or\n built-in functions. See *Special method lookup for new-style\n classes*.\n\n\nImplementing Descriptors\n------------------------\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents). In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' ``__dict__``.\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or ``None`` when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an\n ``AttributeError`` exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\n\nInvoking Descriptors\n--------------------\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: ``__get__()``, ``__set__()``, and\n``__delete__()``. If any of those methods are defined for an object,\nit is said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, ``a.x`` has a\nlookup chain starting with ``a.__dict__[\'x\']``, then\n``type(a).__dict__[\'x\']``, and continuing through the base classes of\n``type(a)`` excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called. Note that descriptors are only invoked for new\nstyle objects or classes (ones that subclass ``object()`` or\n``type()``).\n\nThe starting point for descriptor invocation is a binding, ``a.x``.\nHow the arguments are assembled depends on ``a``:\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: ``x.__get__(a)``.\n\nInstance Binding\n If binding to a new-style object instance, ``a.x`` is transformed\n into the call: ``type(a).__dict__[\'x\'].__get__(a, type(a))``.\n\nClass Binding\n If binding to a new-style class, ``A.x`` is transformed into the\n call: ``A.__dict__[\'x\'].__get__(None, A)``.\n\nSuper Binding\n If ``a`` is an instance of ``super``, then the binding ``super(B,\n obj).m()`` searches ``obj.__class__.__mro__`` for the base class\n ``A`` immediately preceding ``B`` and then invokes the descriptor\n with the call: ``A.__dict__[\'m\'].__get__(obj, obj.__class__)``.\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. A descriptor can define\nany combination of ``__get__()``, ``__set__()`` and ``__delete__()``.\nIf it does not define ``__get__()``, then accessing the attribute will\nreturn the descriptor object itself unless there is a value in the\nobject\'s instance dictionary. If the descriptor defines ``__set__()``\nand/or ``__delete__()``, it is a data descriptor; if it defines\nneither, it is a non-data descriptor. Normally, data descriptors\ndefine both ``__get__()`` and ``__set__()``, while non-data\ndescriptors have just the ``__get__()`` method. Data descriptors with\n``__set__()`` and ``__get__()`` defined always override a redefinition\nin an instance dictionary. In contrast, non-data descriptors can be\noverridden by instances.\n\nPython methods (including ``staticmethod()`` and ``classmethod()``)\nare implemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe ``property()`` function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n---------\n\nBy default, instances of both old and new-style classes have a\ndictionary for attribute storage. This wastes space for objects\nhaving very few instance variables. The space consumption can become\nacute when creating large numbers of instances.\n\nThe default can be overridden by defining *__slots__* in a new-style\nclass definition. The *__slots__* declaration takes a sequence of\ninstance variables and reserves just enough space in each instance to\nhold a value for each variable. Space is saved because *__dict__* is\nnot created for each instance.\n\n__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. If defined in a\n new-style class, *__slots__* reserves space for the declared\n variables and prevents the automatic creation of *__dict__* and\n *__weakref__* for each instance.\n\n New in version 2.2.\n\nNotes on using *__slots__*\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises ``AttributeError``. If\n dynamic assignment of new variables is desired, then add\n ``\'__dict__\'`` to the sequence of strings in the *__slots__*\n declaration.\n\n Changed in version 2.3: Previously, adding ``\'__dict__\'`` to the\n *__slots__* declaration would not enable the assignment of new\n attributes not specifically listed in the sequence of instance\n variable names.\n\n* Without a *__weakref__* variable for each instance, classes defining\n *__slots__* do not support weak references to its instances. If weak\n reference support is needed, then add ``\'__weakref__\'`` to the\n sequence of strings in the *__slots__* declaration.\n\n Changed in version 2.3: Previously, adding ``\'__weakref__\'`` to the\n *__slots__* declaration would not enable support for weak\n references.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__* (which must only contain names\n of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the instance\n variable defined by the base class slot is inaccessible (except by\n retrieving its descriptor directly from the base class). This\n renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as ``long``, ``str`` and\n ``tuple``.\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\n also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n\n Changed in version 2.6: Previously, *__class__* assignment raised an\n error if either new or old class had *__slots__*.\n\n\nCustomizing class creation\n==========================\n\nBy default, new-style classes are constructed using ``type()``. A\nclass definition is read into a separate namespace and the value of\nclass name is bound to the result of ``type(name, bases, dict)``.\n\nWhen the class definition is read, if *__metaclass__* is defined then\nthe callable assigned to it will be called instead of ``type()``. This\nallows classes or functions to be written which monitor or alter the\nclass creation process:\n\n* Modifying the class dictionary prior to the class being created.\n\n* Returning an instance of another class -- essentially performing the\n role of a factory function.\n\nThese steps will have to be performed in the metaclass\'s ``__new__()``\nmethod -- ``type.__new__()`` can then be called from this method to\ncreate a class with different properties. This example adds a new\nelement to the class dictionary before creating the class:\n\n class metacls(type):\n def __new__(mcs, name, bases, dict):\n dict[\'foo\'] = \'metacls was here\'\n return type.__new__(mcs, name, bases, dict)\n\nYou can of course also override other class methods (or add new\nmethods); for example defining a custom ``__call__()`` method in the\nmetaclass allows custom behavior when the class is called, e.g. not\nalways creating a new instance.\n\n__metaclass__\n\n This variable can be any callable accepting arguments for ``name``,\n ``bases``, and ``dict``. Upon class creation, the callable is used\n instead of the built-in ``type()``.\n\n New in version 2.2.\n\nThe appropriate metaclass is determined by the following precedence\nrules:\n\n* If ``dict[\'__metaclass__\']`` exists, it is used.\n\n* Otherwise, if there is at least one base class, its metaclass is\n used (this looks for a *__class__* attribute first and if not found,\n uses its type).\n\n* Otherwise, if a global variable named __metaclass__ exists, it is\n used.\n\n* Otherwise, the old-style, classic metaclass (types.ClassType) is\n used.\n\nThe potential uses for metaclasses are boundless. Some ideas that have\nbeen explored including logging, interface checking, automatic\ndelegation, automatic property creation, proxies, frameworks, and\nautomatic resource locking/synchronization.\n\n\nCustomizing instance and subclass checks\n========================================\n\nNew in version 2.6.\n\nThe following methods are used to override the default behavior of the\n``isinstance()`` and ``issubclass()`` built-in functions.\n\nIn particular, the metaclass ``abc.ABCMeta`` implements these methods\nin order to allow the addition of Abstract Base Classes (ABCs) as\n"virtual base classes" to any class or type (including built-in\ntypes), including other ABCs.\n\nclass.__instancecheck__(self, instance)\n\n Return true if *instance* should be considered a (direct or\n indirect) instance of *class*. If defined, called to implement\n ``isinstance(instance, class)``.\n\nclass.__subclasscheck__(self, subclass)\n\n Return true if *subclass* should be considered a (direct or\n indirect) subclass of *class*. If defined, called to implement\n ``issubclass(subclass, class)``.\n\nNote that these methods are looked up on the type (metaclass) of a\nclass. They cannot be defined as class methods in the actual class.\nThis is consistent with the lookup of special methods that are called\non instances, only in this case the instance is itself a class.\n\nSee also:\n\n **PEP 3119** - Introducing Abstract Base Classes\n Includes the specification for customizing ``isinstance()`` and\n ``issubclass()`` behavior through ``__instancecheck__()`` and\n ``__subclasscheck__()``, with motivation for this functionality\n in the context of adding Abstract Base Classes (see the ``abc``\n module) to the language.\n\n\nEmulating callable objects\n==========================\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, ``x(arg1, arg2, ...)`` is a shorthand for\n ``x.__call__(arg1, arg2, ...)``.\n\n\nEmulating container types\n=========================\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which ``0 <= k < N``\nwhere *N* is the length of the sequence, or slice objects, which\ndefine a range of items. (For backwards compatibility, the method\n``__getslice__()`` (see below) can also be defined to handle simple,\nbut not extended slices.) It is also recommended that mappings provide\nthe methods ``keys()``, ``values()``, ``items()``, ``has_key()``,\n``get()``, ``clear()``, ``setdefault()``, ``iterkeys()``,\n``itervalues()``, ``iteritems()``, ``pop()``, ``popitem()``,\n``copy()``, and ``update()`` behaving similar to those for Python\'s\nstandard dictionary objects. The ``UserDict`` module provides a\n``DictMixin`` class to help create those methods from a base set of\n``__getitem__()``, ``__setitem__()``, ``__delitem__()``, and\n``keys()``. Mutable sequences should provide methods ``append()``,\n``count()``, ``index()``, ``extend()``, ``insert()``, ``pop()``,\n``remove()``, ``reverse()`` and ``sort()``, like Python standard list\nobjects. Finally, sequence types should implement addition (meaning\nconcatenation) and multiplication (meaning repetition) by defining the\nmethods ``__add__()``, ``__radd__()``, ``__iadd__()``, ``__mul__()``,\n``__rmul__()`` and ``__imul__()`` described below; they should not\ndefine ``__coerce__()`` or other numerical operators. It is\nrecommended that both mappings and sequences implement the\n``__contains__()`` method to allow efficient use of the ``in``\noperator; for mappings, ``in`` should be equivalent of ``has_key()``;\nfor sequences, it should search through the values. It is further\nrecommended that both mappings and sequences implement the\n``__iter__()`` method to allow efficient iteration through the\ncontainer; for mappings, ``__iter__()`` should be the same as\n``iterkeys()``; for sequences, it should iterate through the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function ``len()``. Should return\n the length of the object, an integer ``>=`` 0. Also, an object\n that doesn\'t define a ``__nonzero__()`` method and whose\n ``__len__()`` method returns zero is considered to be false in a\n Boolean context.\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of ``self[key]``. For sequence\n types, the accepted keys should be integers and slice objects.\n Note that the special interpretation of negative indexes (if the\n class wishes to emulate a sequence type) is up to the\n ``__getitem__()`` method. If *key* is of an inappropriate type,\n ``TypeError`` may be raised; if of a value outside the set of\n indexes for the sequence (after any special interpretation of\n negative values), ``IndexError`` should be raised. For mapping\n types, if *key* is missing (not in the container), ``KeyError``\n should be raised.\n\n Note: ``for`` loops expect that an ``IndexError`` will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the ``__getitem__()`` method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the ``__getitem__()``\n method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container, and should also be made\n available as the method ``iterkeys()``.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the ``reversed()`` built-in to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the ``__reversed__()`` method is not provided, the\n ``reversed()`` built-in will fall back to using the sequence\n protocol (``__len__()`` and ``__getitem__()``). Objects that\n support the sequence protocol should only provide\n ``__reversed__()`` if they can provide an implementation that is\n more efficient than the one provided by ``reversed()``.\n\n New in version 2.6.\n\nThe membership test operators (``in`` and ``not in``) are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n For objects that don\'t define ``__contains__()``, the membership\n test first tries iteration via ``__iter__()``, then the old\n sequence iteration protocol via ``__getitem__()``, see *this\n section in the language reference*.\n\n\nAdditional methods for emulation of sequence types\n==================================================\n\nThe following optional methods can be defined to further emulate\nsequence objects. Immutable sequences methods should at most only\ndefine ``__getslice__()``; mutable sequences might define all three\nmethods.\n\nobject.__getslice__(self, i, j)\n\n Deprecated since version 2.0: Support slice objects as parameters\n to the ``__getitem__()`` method. (However, built-in types in\n CPython currently still implement ``__getslice__()``. Therefore,\n you have to override it in derived classes when implementing\n slicing.)\n\n Called to implement evaluation of ``self[i:j]``. The returned\n object should be of the same type as *self*. Note that missing *i*\n or *j* in the slice expression are replaced by zero or\n ``sys.maxint``, respectively. If negative indexes are used in the\n slice, the length of the sequence is added to that index. If the\n instance does not implement the ``__len__()`` method, an\n ``AttributeError`` is raised. No guarantee is made that indexes\n adjusted this way are not still negative. Indexes which are\n greater than the length of the sequence are not modified. If no\n ``__getslice__()`` is found, a slice object is created instead, and\n passed to ``__getitem__()`` instead.\n\nobject.__setslice__(self, i, j, sequence)\n\n Called to implement assignment to ``self[i:j]``. Same notes for *i*\n and *j* as for ``__getslice__()``.\n\n This method is deprecated. If no ``__setslice__()`` is found, or\n for extended slicing of the form ``self[i:j:k]``, a slice object is\n created, and passed to ``__setitem__()``, instead of\n ``__setslice__()`` being called.\n\nobject.__delslice__(self, i, j)\n\n Called to implement deletion of ``self[i:j]``. Same notes for *i*\n and *j* as for ``__getslice__()``. This method is deprecated. If no\n ``__delslice__()`` is found, or for extended slicing of the form\n ``self[i:j:k]``, a slice object is created, and passed to\n ``__delitem__()``, instead of ``__delslice__()`` being called.\n\nNotice that these methods are only invoked when a single slice with a\nsingle colon is used, and the slice method is available. For slice\noperations involving extended slice notation, or in absence of the\nslice methods, ``__getitem__()``, ``__setitem__()`` or\n``__delitem__()`` is called with a slice object as argument.\n\nThe following example demonstrate how to make your program or module\ncompatible with earlier versions of Python (assuming that methods\n``__getitem__()``, ``__setitem__()`` and ``__delitem__()`` support\nslice objects as arguments):\n\n class MyClass:\n ...\n def __getitem__(self, index):\n ...\n def __setitem__(self, index, value):\n ...\n def __delitem__(self, index):\n ...\n\n if sys.version_info < (2, 0):\n # They won\'t be defined if version is at least 2.0 final\n\n def __getslice__(self, i, j):\n return self[max(0, i):max(0, j):]\n def __setslice__(self, i, j, seq):\n self[max(0, i):max(0, j):] = seq\n def __delslice__(self, i, j):\n del self[max(0, i):max(0, j):]\n ...\n\nNote the calls to ``max()``; these are necessary because of the\nhandling of negative indices before the ``__*slice__()`` methods are\ncalled. When negative indexes are used, the ``__*item__()`` methods\nreceive them as provided, but the ``__*slice__()`` methods get a\n"cooked" form of the index values. For each negative index value, the\nlength of the sequence is added to the index before calling the method\n(which may still result in a negative index); this is the customary\nhandling of negative indexes by the built-in sequence types, and the\n``__*item__()`` methods are expected to do this as well. However,\nsince they should already be doing that, negative indexes cannot be\npassed in; they must be constrained to the bounds of the sequence\nbefore being passed to the ``__*item__()`` methods. Calling ``max(0,\ni)`` conveniently returns the proper value.\n\n\nEmulating numeric types\n=======================\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``//``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``). For\n instance, to evaluate the expression ``x + y``, where *x* is an\n instance of a class that has an ``__add__()`` method,\n ``x.__add__(y)`` is called. The ``__divmod__()`` method should be\n the equivalent to using ``__floordiv__()`` and ``__mod__()``; it\n should not be related to ``__truediv__()`` (described below). Note\n that ``__pow__()`` should be defined to accept an optional third\n argument if the ternary version of the built-in ``pow()`` function\n is to be supported.\n\n If one of those methods does not support the operation with the\n supplied arguments, it should return ``NotImplemented``.\n\nobject.__div__(self, other)\nobject.__truediv__(self, other)\n\n The division operator (``/``) is implemented by these methods. The\n ``__truediv__()`` method is used when ``__future__.division`` is in\n effect, otherwise ``__div__()`` is used. If only one of these two\n methods is defined, the object will not support division in the\n alternate context; ``TypeError`` will be raised instead.\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rdiv__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``/``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``) with\n reflected (swapped) operands. These functions are only called if\n the left operand does not support the corresponding operation and\n the operands are of different types. [2] For instance, to evaluate\n the expression ``x - y``, where *y* is an instance of a class that\n has an ``__rsub__()`` method, ``y.__rsub__(x)`` is called if\n ``x.__sub__(y)`` returns *NotImplemented*.\n\n Note that ternary ``pow()`` will not try calling ``__rpow__()``\n (the coercion rules would become too complicated).\n\n Note: If the right operand\'s type is a subclass of the left operand\'s\n type and that subclass provides the reflected method for the\n operation, this method will be called before the left operand\'s\n non-reflected method. This behavior allows subclasses to\n override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__idiv__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n These methods are called to implement the augmented arithmetic\n assignments (``+=``, ``-=``, ``*=``, ``/=``, ``//=``, ``%=``,\n ``**=``, ``<<=``, ``>>=``, ``&=``, ``^=``, ``|=``). These methods\n should attempt to do the operation in-place (modifying *self*) and\n return the result (which could be, but does not have to be,\n *self*). If a specific method is not defined, the augmented\n assignment falls back to the normal methods. For instance, to\n execute the statement ``x += y``, where *x* is an instance of a\n class that has an ``__iadd__()`` method, ``x.__iadd__(y)`` is\n called. If *x* is an instance of a class that does not define a\n ``__iadd__()`` method, ``x.__add__(y)`` and ``y.__radd__(x)`` are\n considered, as with the evaluation of ``x + y``.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n Called to implement the unary arithmetic operations (``-``, ``+``,\n ``abs()`` and ``~``).\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__long__(self)\nobject.__float__(self)\n\n Called to implement the built-in functions ``complex()``,\n ``int()``, ``long()``, and ``float()``. Should return a value of\n the appropriate type.\n\nobject.__oct__(self)\nobject.__hex__(self)\n\n Called to implement the built-in functions ``oct()`` and ``hex()``.\n Should return a string value.\n\nobject.__index__(self)\n\n Called to implement ``operator.index()``. Also called whenever\n Python needs an integer object (such as in slicing). Must return\n an integer (int or long).\n\n New in version 2.5.\n\nobject.__coerce__(self, other)\n\n Called to implement "mixed-mode" numeric arithmetic. Should either\n return a 2-tuple containing *self* and *other* converted to a\n common numeric type, or ``None`` if conversion is impossible. When\n the common type would be the type of ``other``, it is sufficient to\n return ``None``, since the interpreter will also ask the other\n object to attempt a coercion (but sometimes, if the implementation\n of the other type cannot be changed, it is useful to do the\n conversion to the other type here). A return value of\n ``NotImplemented`` is equivalent to returning ``None``.\n\n\nCoercion rules\n==============\n\nThis section used to document the rules for coercion. As the language\nhas evolved, the coercion rules have become hard to document\nprecisely; documenting what one version of one particular\nimplementation does is undesirable. Instead, here are some informal\nguidelines regarding coercion. In Python 3, coercion will not be\nsupported.\n\n* If the left operand of a % operator is a string or Unicode object,\n no coercion takes place and the string formatting operation is\n invoked instead.\n\n* It is no longer recommended to define a coercion operation. Mixed-\n mode operations on types that don\'t define coercion pass the\n original arguments to the operation.\n\n* New-style classes (those derived from ``object``) never invoke the\n ``__coerce__()`` method in response to a binary operator; the only\n time ``__coerce__()`` is invoked is when the built-in function\n ``coerce()`` is called.\n\n* For most intents and purposes, an operator that returns\n ``NotImplemented`` is treated the same as one that is not\n implemented at all.\n\n* Below, ``__op__()`` and ``__rop__()`` are used to signify the\n generic method names corresponding to an operator; ``__iop__()`` is\n used for the corresponding in-place operator. For example, for the\n operator \'``+``\', ``__add__()`` and ``__radd__()`` are used for the\n left and right variant of the binary operator, and ``__iadd__()``\n for the in-place variant.\n\n* For objects *x* and *y*, first ``x.__op__(y)`` is tried. If this is\n not implemented or returns ``NotImplemented``, ``y.__rop__(x)`` is\n tried. If this is also not implemented or returns\n ``NotImplemented``, a ``TypeError`` exception is raised. But see\n the following exception:\n\n* Exception to the previous item: if the left operand is an instance\n of a built-in type or a new-style class, and the right operand is an\n instance of a proper subclass of that type or class and overrides\n the base\'s ``__rop__()`` method, the right operand\'s ``__rop__()``\n method is tried *before* the left operand\'s ``__op__()`` method.\n\n This is done so that a subclass can completely override binary\n operators. Otherwise, the left operand\'s ``__op__()`` method would\n always accept the right operand: when an instance of a given class\n is expected, an instance of a subclass of that class is always\n acceptable.\n\n* When either operand type defines a coercion, this coercion is called\n before that type\'s ``__op__()`` or ``__rop__()`` method is called,\n but no sooner. If the coercion returns an object of a different\n type for the operand whose coercion is invoked, part of the process\n is redone using the new object.\n\n* When an in-place operator (like \'``+=``\') is used, if the left\n operand implements ``__iop__()``, it is invoked without any\n coercion. When the operation falls back to ``__op__()`` and/or\n ``__rop__()``, the normal coercion rules apply.\n\n* In ``x + y``, if *x* is a sequence that implements sequence\n concatenation, sequence concatenation is invoked.\n\n* In ``x * y``, if one operand is a sequence that implements sequence\n repetition, and the other is an integer (``int`` or ``long``),\n sequence repetition is invoked.\n\n* Rich comparisons (implemented by methods ``__eq__()`` and so on)\n never use coercion. Three-way comparison (implemented by\n ``__cmp__()``) does use coercion under the same conditions as other\n binary operations use it.\n\n* In the current implementation, the built-in numeric types ``int``,\n ``long``, ``float``, and ``complex`` do not use coercion. All these\n types implement a ``__coerce__()`` method, for use by the built-in\n ``coerce()`` function.\n\n Changed in version 2.7.\n\n\nWith Statement Context Managers\n===============================\n\nNew in version 2.5.\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a ``with`` statement. The context\nmanager handles the entry into, and the exit from, the desired runtime\ncontext for the execution of the block of code. Context managers are\nnormally invoked using the ``with`` statement (described in section\n*The with statement*), but can also be used by directly invoking their\nmethods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The ``with``\n statement will bind this method\'s return value to the target(s)\n specified in the ``as`` clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be ``None``.\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that ``__exit__()`` methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also:\n\n **PEP 0343** - The "with" statement\n The specification, background, and examples for the Python\n ``with`` statement.\n\n\nSpecial method lookup for old-style classes\n===========================================\n\nFor old-style classes, special methods are always looked up in exactly\nthe same way as any other method or attribute. This is the case\nregardless of whether the method is being looked up explicitly as in\n``x.__getitem__(i)`` or implicitly as in ``x[i]``.\n\nThis behaviour means that special methods may exhibit different\nbehaviour for different instances of a single old-style class if the\nappropriate special attributes are set differently:\n\n >>> class C:\n ... pass\n ...\n >>> c1 = C()\n >>> c2 = C()\n >>> c1.__len__ = lambda: 5\n >>> c2.__len__ = lambda: 9\n >>> len(c1)\n 5\n >>> len(c2)\n 9\n\n\nSpecial method lookup for new-style classes\n===========================================\n\nFor new-style classes, implicit invocations of special methods are\nonly guaranteed to work correctly if defined on an object\'s type, not\nin the object\'s instance dictionary. That behaviour is the reason why\nthe following code raises an exception (unlike the equivalent example\nwith old-style classes):\n\n >>> class C(object):\n ... pass\n ...\n >>> c = C()\n >>> c.__len__ = lambda: 5\n >>> len(c)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: object of type \'C\' has no len()\n\nThe rationale behind this behaviour lies with a number of special\nmethods such as ``__hash__()`` and ``__repr__()`` that are implemented\nby all objects, including type objects. If the implicit lookup of\nthese methods used the conventional lookup process, they would fail\nwhen invoked on the type object itself:\n\n >>> 1 .__hash__() == hash(1)\n True\n >>> int.__hash__() == hash(int)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: descriptor \'__hash__\' of \'int\' object needs an argument\n\nIncorrectly attempting to invoke an unbound method of a class in this\nway is sometimes referred to as \'metaclass confusion\', and is avoided\nby bypassing the instance when looking up special methods:\n\n >>> type(1).__hash__(1) == hash(1)\n True\n >>> type(int).__hash__(int) == hash(int)\n True\n\nIn addition to bypassing any instance attributes in the interest of\ncorrectness, implicit special method lookup generally also bypasses\nthe ``__getattribute__()`` method even of the object\'s metaclass:\n\n >>> class Meta(type):\n ... def __getattribute__(*args):\n ... print "Metaclass getattribute invoked"\n ... return type.__getattribute__(*args)\n ...\n >>> class C(object):\n ... __metaclass__ = Meta\n ... def __len__(self):\n ... return 10\n ... def __getattribute__(*args):\n ... print "Class getattribute invoked"\n ... return object.__getattribute__(*args)\n ...\n >>> c = C()\n >>> c.__len__() # Explicit lookup via instance\n Class getattribute invoked\n 10\n >>> type(c).__len__(c) # Explicit lookup via type\n Metaclass getattribute invoked\n 10\n >>> len(c) # Implicit lookup\n 10\n\nBypassing the ``__getattribute__()`` machinery in this fashion\nprovides significant scope for speed optimisations within the\ninterpreter, at the cost of some flexibility in the handling of\nspecial methods (the special method *must* be set on the class object\nitself in order to be consistently invoked by the interpreter).\n\n-[ Footnotes ]-\n\n[1] It *is* possible in some cases to change an object\'s type, under\n certain controlled conditions. It generally isn\'t a good idea\n though, since it can lead to some very strange behaviour if it is\n handled incorrectly.\n\n[2] For operands of the same type, it is assumed that if the non-\n reflected method (such as ``__add__()``) fails the operation is\n not supported, which is why the reflected method is not called.\n', - 'string-methods': '\nString Methods\n**************\n\nBelow are listed the string methods which both 8-bit strings and\nUnicode objects support. Some of them are also available on\n``bytearray`` objects.\n\nIn addition, Python\'s strings support the sequence type methods\ndescribed in the *Sequence Types --- str, unicode, list, tuple,\nbytearray, buffer, xrange* section. To output formatted strings use\ntemplate strings or the ``%`` operator described in the *String\nFormatting Operations* section. Also, see the ``re`` module for string\nfunctions based on regular expressions.\n\nstr.capitalize()\n\n Return a copy of the string with its first character capitalized\n and the rest lowercased.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.center(width[, fillchar])\n\n Return centered in a string of length *width*. Padding is done\n using the specified *fillchar* (default is a space).\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.count(sub[, start[, end]])\n\n Return the number of non-overlapping occurrences of substring *sub*\n in the range [*start*, *end*]. Optional arguments *start* and\n *end* are interpreted as in slice notation.\n\nstr.decode([encoding[, errors]])\n\n Decodes the string using the codec registered for *encoding*.\n *encoding* defaults to the default string encoding. *errors* may\n be given to set a different error handling scheme. The default is\n ``\'strict\'``, meaning that encoding errors raise ``UnicodeError``.\n Other possible values are ``\'ignore\'``, ``\'replace\'`` and any other\n name registered via ``codecs.register_error()``, see section *Codec\n Base Classes*.\n\n New in version 2.2.\n\n Changed in version 2.3: Support for other error handling schemes\n added.\n\n Changed in version 2.7: Support for keyword arguments added.\n\nstr.encode([encoding[, errors]])\n\n Return an encoded version of the string. Default encoding is the\n current default string encoding. *errors* may be given to set a\n different error handling scheme. The default for *errors* is\n ``\'strict\'``, meaning that encoding errors raise a\n ``UnicodeError``. Other possible values are ``\'ignore\'``,\n ``\'replace\'``, ``\'xmlcharrefreplace\'``, ``\'backslashreplace\'`` and\n any other name registered via ``codecs.register_error()``, see\n section *Codec Base Classes*. For a list of possible encodings, see\n section *Standard Encodings*.\n\n New in version 2.0.\n\n Changed in version 2.3: Support for ``\'xmlcharrefreplace\'`` and\n ``\'backslashreplace\'`` and other error handling schemes added.\n\n Changed in version 2.7: Support for keyword arguments added.\n\nstr.endswith(suffix[, start[, end]])\n\n Return ``True`` if the string ends with the specified *suffix*,\n otherwise return ``False``. *suffix* can also be a tuple of\n suffixes to look for. With optional *start*, test beginning at\n that position. With optional *end*, stop comparing at that\n position.\n\n Changed in version 2.5: Accept tuples as *suffix*.\n\nstr.expandtabs([tabsize])\n\n Return a copy of the string where all tab characters are replaced\n by one or more spaces, depending on the current column and the\n given tab size. Tab positions occur every *tabsize* characters\n (default is 8, giving tab positions at columns 0, 8, 16 and so on).\n To expand the string, the current column is set to zero and the\n string is examined character by character. If the character is a\n tab (``\\t``), one or more space characters are inserted in the\n result until the current column is equal to the next tab position.\n (The tab character itself is not copied.) If the character is a\n newline (``\\n``) or return (``\\r``), it is copied and the current\n column is reset to zero. Any other character is copied unchanged\n and the current column is incremented by one regardless of how the\n character is represented when printed.\n\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs()\n \'01 012 0123 01234\'\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs(4)\n \'01 012 0123 01234\'\n\nstr.find(sub[, start[, end]])\n\n Return the lowest index in the string where substring *sub* is\n found, such that *sub* is contained in the slice ``s[start:end]``.\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return ``-1`` if *sub* is not found.\n\n Note: The ``find()`` method should be used only if you need to know the\n position of *sub*. To check if *sub* is a substring or not, use\n the ``in`` operator:\n\n >>> \'Py\' in \'Python\'\n True\n\nstr.format(*args, **kwargs)\n\n Perform a string formatting operation. The string on which this\n method is called can contain literal text or replacement fields\n delimited by braces ``{}``. Each replacement field contains either\n the numeric index of a positional argument, or the name of a\n keyword argument. Returns a copy of the string where each\n replacement field is replaced with the string value of the\n corresponding argument.\n\n >>> "The sum of 1 + 2 is {0}".format(1+2)\n \'The sum of 1 + 2 is 3\'\n\n See *Format String Syntax* for a description of the various\n formatting options that can be specified in format strings.\n\n This method of string formatting is the new standard in Python 3,\n and should be preferred to the ``%`` formatting described in\n *String Formatting Operations* in new code.\n\n New in version 2.6.\n\nstr.index(sub[, start[, end]])\n\n Like ``find()``, but raise ``ValueError`` when the substring is not\n found.\n\nstr.isalnum()\n\n Return true if all characters in the string are alphanumeric and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isalpha()\n\n Return true if all characters in the string are alphabetic and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isdigit()\n\n Return true if all characters in the string are digits and there is\n at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.islower()\n\n Return true if all cased characters [4] in the string are lowercase\n and there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isspace()\n\n Return true if there are only whitespace characters in the string\n and there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.istitle()\n\n Return true if the string is a titlecased string and there is at\n least one character, for example uppercase characters may only\n follow uncased characters and lowercase characters only cased ones.\n Return false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isupper()\n\n Return true if all cased characters [4] in the string are uppercase\n and there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.join(iterable)\n\n Return a string which is the concatenation of the strings in the\n *iterable* *iterable*. The separator between elements is the\n string providing this method.\n\nstr.ljust(width[, fillchar])\n\n Return the string left justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than or\n equal to ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.lower()\n\n Return a copy of the string with all the cased characters [4]\n converted to lowercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.lstrip([chars])\n\n Return a copy of the string with leading characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a prefix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.lstrip()\n \'spacious \'\n >>> \'www.example.com\'.lstrip(\'cmowz.\')\n \'example.com\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.partition(sep)\n\n Split the string at the first occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing the string itself, followed by\n two empty strings.\n\n New in version 2.5.\n\nstr.replace(old, new[, count])\n\n Return a copy of the string with all occurrences of substring *old*\n replaced by *new*. If the optional argument *count* is given, only\n the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n Return the highest index in the string where substring *sub* is\n found, such that *sub* is contained within ``s[start:end]``.\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return ``-1`` on failure.\n\nstr.rindex(sub[, start[, end]])\n\n Like ``rfind()`` but raises ``ValueError`` when the substring *sub*\n is not found.\n\nstr.rjust(width[, fillchar])\n\n Return the string right justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than or\n equal to ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.rpartition(sep)\n\n Split the string at the last occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing two empty strings, followed by\n the string itself.\n\n New in version 2.5.\n\nstr.rsplit([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n are done, the *rightmost* ones. If *sep* is not specified or\n ``None``, any whitespace string is a separator. Except for\n splitting from the right, ``rsplit()`` behaves like ``split()``\n which is described in detail below.\n\n New in version 2.4.\n\nstr.rstrip([chars])\n\n Return a copy of the string with trailing characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a suffix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.rstrip()\n \' spacious\'\n >>> \'mississippi\'.rstrip(\'ipz\')\n \'mississ\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.split([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit*\n splits are done (thus, the list will have at most ``maxsplit+1``\n elements). If *maxsplit* is not specified or ``-1``, then there is\n no limit on the number of splits (all possible splits are made).\n\n If *sep* is given, consecutive delimiters are not grouped together\n and are deemed to delimit empty strings (for example,\n ``\'1,,2\'.split(\',\')`` returns ``[\'1\', \'\', \'2\']``). The *sep*\n argument may consist of multiple characters (for example,\n ``\'1<>2<>3\'.split(\'<>\')`` returns ``[\'1\', \'2\', \'3\']``). Splitting\n an empty string with a specified separator returns ``[\'\']``.\n\n If *sep* is not specified or is ``None``, a different splitting\n algorithm is applied: runs of consecutive whitespace are regarded\n as a single separator, and the result will contain no empty strings\n at the start or end if the string has leading or trailing\n whitespace. Consequently, splitting an empty string or a string\n consisting of just whitespace with a ``None`` separator returns\n ``[]``.\n\n For example, ``\' 1 2 3 \'.split()`` returns ``[\'1\', \'2\', \'3\']``,\n and ``\' 1 2 3 \'.split(None, 1)`` returns ``[\'1\', \'2 3 \']``.\n\nstr.splitlines([keepends])\n\n Return a list of the lines in the string, breaking at line\n boundaries. This method uses the *universal newlines* approach to\n splitting lines. Line breaks are not included in the resulting list\n unless *keepends* is given and true.\n\n For example, ``\'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines()`` returns\n ``[\'ab c\', \'\', \'de fg\', \'kl\']``, while the same call with\n ``splitlines(True)`` returns ``[\'ab c\\n\', \'\\n\', \'de fg\\r\',\n \'kl\\r\\n\']``.\n\n Unlike ``split()`` when a delimiter string *sep* is given, this\n method returns an empty list for the empty string, and a terminal\n line break does not result in an extra line.\n\nstr.startswith(prefix[, start[, end]])\n\n Return ``True`` if string starts with the *prefix*, otherwise\n return ``False``. *prefix* can also be a tuple of prefixes to look\n for. With optional *start*, test string beginning at that\n position. With optional *end*, stop comparing string at that\n position.\n\n Changed in version 2.5: Accept tuples as *prefix*.\n\nstr.strip([chars])\n\n Return a copy of the string with the leading and trailing\n characters removed. The *chars* argument is a string specifying the\n set of characters to be removed. If omitted or ``None``, the\n *chars* argument defaults to removing whitespace. The *chars*\n argument is not a prefix or suffix; rather, all combinations of its\n values are stripped:\n\n >>> \' spacious \'.strip()\n \'spacious\'\n >>> \'www.example.com\'.strip(\'cmowz.\')\n \'example\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.swapcase()\n\n Return a copy of the string with uppercase characters converted to\n lowercase and vice versa.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.title()\n\n Return a titlecased version of the string where words start with an\n uppercase character and the remaining characters are lowercase.\n\n The algorithm uses a simple language-independent definition of a\n word as groups of consecutive letters. The definition works in\n many contexts but it means that apostrophes in contractions and\n possessives form word boundaries, which may not be the desired\n result:\n\n >>> "they\'re bill\'s friends from the UK".title()\n "They\'Re Bill\'S Friends From The Uk"\n\n A workaround for apostrophes can be constructed using regular\n expressions:\n\n >>> import re\n >>> def titlecase(s):\n ... return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n ... lambda mo: mo.group(0)[0].upper() +\n ... mo.group(0)[1:].lower(),\n ... s)\n ...\n >>> titlecase("they\'re bill\'s friends.")\n "They\'re Bill\'s Friends."\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.translate(table[, deletechars])\n\n Return a copy of the string where all characters occurring in the\n optional argument *deletechars* are removed, and the remaining\n characters have been mapped through the given translation table,\n which must be a string of length 256.\n\n You can use the ``maketrans()`` helper function in the ``string``\n module to create a translation table. For string objects, set the\n *table* argument to ``None`` for translations that only delete\n characters:\n\n >>> \'read this short text\'.translate(None, \'aeiou\')\n \'rd ths shrt txt\'\n\n New in version 2.6: Support for a ``None`` *table* argument.\n\n For Unicode objects, the ``translate()`` method does not accept the\n optional *deletechars* argument. Instead, it returns a copy of the\n *s* where all characters have been mapped through the given\n translation table which must be a mapping of Unicode ordinals to\n Unicode ordinals, Unicode strings or ``None``. Unmapped characters\n are left untouched. Characters mapped to ``None`` are deleted.\n Note, a more flexible approach is to create a custom character\n mapping codec using the ``codecs`` module (see ``encodings.cp1251``\n for an example).\n\nstr.upper()\n\n Return a copy of the string with all the cased characters [4]\n converted to uppercase. Note that ``str.upper().isupper()`` might\n be ``False`` if ``s`` contains uncased characters or if the Unicode\n category of the resulting character(s) is not "Lu" (Letter,\n uppercase), but e.g. "Lt" (Letter, titlecase).\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.zfill(width)\n\n Return the numeric string left filled with zeros in a string of\n length *width*. A sign prefix is handled correctly. The original\n string is returned if *width* is less than or equal to ``len(s)``.\n\n New in version 2.2.2.\n\nThe following methods are present only on unicode objects:\n\nunicode.isnumeric()\n\n Return ``True`` if there are only numeric characters in S,\n ``False`` otherwise. Numeric characters include digit characters,\n and all characters that have the Unicode numeric value property,\n e.g. U+2155, VULGAR FRACTION ONE FIFTH.\n\nunicode.isdecimal()\n\n Return ``True`` if there are only decimal characters in S,\n ``False`` otherwise. Decimal characters include digit characters,\n and all characters that can be used to form decimal-radix numbers,\n e.g. U+0660, ARABIC-INDIC DIGIT ZERO.\n', - 'strings': '\nString literals\n***************\n\nString literals are described by the following lexical definitions:\n\n stringliteral ::= [stringprefix](shortstring | longstring)\n stringprefix ::= "r" | "u" | "ur" | "R" | "U" | "UR" | "Ur" | "uR"\n | "b" | "B" | "br" | "Br" | "bR" | "BR"\n shortstring ::= "\'" shortstringitem* "\'" | \'"\' shortstringitem* \'"\'\n longstring ::= "\'\'\'" longstringitem* "\'\'\'"\n | \'"""\' longstringitem* \'"""\'\n shortstringitem ::= shortstringchar | escapeseq\n longstringitem ::= longstringchar | escapeseq\n shortstringchar ::= \n longstringchar ::= \n escapeseq ::= "\\" \n\nOne syntactic restriction not indicated by these productions is that\nwhitespace is not allowed between the ``stringprefix`` and the rest of\nthe string literal. The source character set is defined by the\nencoding declaration; it is ASCII if no encoding declaration is given\nin the source file; see section *Encoding declarations*.\n\nIn plain English: String literals can be enclosed in matching single\nquotes (``\'``) or double quotes (``"``). They can also be enclosed in\nmatching groups of three single or double quotes (these are generally\nreferred to as *triple-quoted strings*). The backslash (``\\``)\ncharacter is used to escape characters that otherwise have a special\nmeaning, such as newline, backslash itself, or the quote character.\nString literals may optionally be prefixed with a letter ``\'r\'`` or\n``\'R\'``; such strings are called *raw strings* and use different rules\nfor interpreting backslash escape sequences. A prefix of ``\'u\'`` or\n``\'U\'`` makes the string a Unicode string. Unicode strings use the\nUnicode character set as defined by the Unicode Consortium and ISO\n10646. Some additional escape sequences, described below, are\navailable in Unicode strings. A prefix of ``\'b\'`` or ``\'B\'`` is\nignored in Python 2; it indicates that the literal should become a\nbytes literal in Python 3 (e.g. when code is automatically converted\nwith 2to3). A ``\'u\'`` or ``\'b\'`` prefix may be followed by an ``\'r\'``\nprefix.\n\nIn triple-quoted strings, unescaped newlines and quotes are allowed\n(and are retained), except that three unescaped quotes in a row\nterminate the string. (A "quote" is the character used to open the\nstring, i.e. either ``\'`` or ``"``.)\n\nUnless an ``\'r\'`` or ``\'R\'`` prefix is present, escape sequences in\nstrings are interpreted according to rules similar to those used by\nStandard C. The recognized escape sequences are:\n\n+-------------------+-----------------------------------+---------+\n| Escape Sequence | Meaning | Notes |\n+===================+===================================+=========+\n| ``\\newline`` | Ignored | |\n+-------------------+-----------------------------------+---------+\n| ``\\\\`` | Backslash (``\\``) | |\n+-------------------+-----------------------------------+---------+\n| ``\\\'`` | Single quote (``\'``) | |\n+-------------------+-----------------------------------+---------+\n| ``\\"`` | Double quote (``"``) | |\n+-------------------+-----------------------------------+---------+\n| ``\\a`` | ASCII Bell (BEL) | |\n+-------------------+-----------------------------------+---------+\n| ``\\b`` | ASCII Backspace (BS) | |\n+-------------------+-----------------------------------+---------+\n| ``\\f`` | ASCII Formfeed (FF) | |\n+-------------------+-----------------------------------+---------+\n| ``\\n`` | ASCII Linefeed (LF) | |\n+-------------------+-----------------------------------+---------+\n| ``\\N{name}`` | Character named *name* in the | |\n| | Unicode database (Unicode only) | |\n+-------------------+-----------------------------------+---------+\n| ``\\r`` | ASCII Carriage Return (CR) | |\n+-------------------+-----------------------------------+---------+\n| ``\\t`` | ASCII Horizontal Tab (TAB) | |\n+-------------------+-----------------------------------+---------+\n| ``\\uxxxx`` | Character with 16-bit hex value | (1) |\n| | *xxxx* (Unicode only) | |\n+-------------------+-----------------------------------+---------+\n| ``\\Uxxxxxxxx`` | Character with 32-bit hex value | (2) |\n| | *xxxxxxxx* (Unicode only) | |\n+-------------------+-----------------------------------+---------+\n| ``\\v`` | ASCII Vertical Tab (VT) | |\n+-------------------+-----------------------------------+---------+\n| ``\\ooo`` | Character with octal value *ooo* | (3,5) |\n+-------------------+-----------------------------------+---------+\n| ``\\xhh`` | Character with hex value *hh* | (4,5) |\n+-------------------+-----------------------------------+---------+\n\nNotes:\n\n1. Individual code units which form parts of a surrogate pair can be\n encoded using this escape sequence.\n\n2. Any Unicode character can be encoded this way, but characters\n outside the Basic Multilingual Plane (BMP) will be encoded using a\n surrogate pair if Python is compiled to use 16-bit code units (the\n default).\n\n3. As in Standard C, up to three octal digits are accepted.\n\n4. Unlike in Standard C, exactly two hex digits are required.\n\n5. In a string literal, hexadecimal and octal escapes denote the byte\n with the given value; it is not necessary that the byte encodes a\n character in the source character set. In a Unicode literal, these\n escapes denote a Unicode character with the given value.\n\nUnlike Standard C, all unrecognized escape sequences are left in the\nstring unchanged, i.e., *the backslash is left in the string*. (This\nbehavior is useful when debugging: if an escape sequence is mistyped,\nthe resulting output is more easily recognized as broken.) It is also\nimportant to note that the escape sequences marked as "(Unicode only)"\nin the table above fall into the category of unrecognized escapes for\nnon-Unicode string literals.\n\nWhen an ``\'r\'`` or ``\'R\'`` prefix is present, a character following a\nbackslash is included in the string without change, and *all\nbackslashes are left in the string*. For example, the string literal\n``r"\\n"`` consists of two characters: a backslash and a lowercase\n``\'n\'``. String quotes can be escaped with a backslash, but the\nbackslash remains in the string; for example, ``r"\\""`` is a valid\nstring literal consisting of two characters: a backslash and a double\nquote; ``r"\\"`` is not a valid string literal (even a raw string\ncannot end in an odd number of backslashes). Specifically, *a raw\nstring cannot end in a single backslash* (since the backslash would\nescape the following quote character). Note also that a single\nbackslash followed by a newline is interpreted as those two characters\nas part of the string, *not* as a line continuation.\n\nWhen an ``\'r\'`` or ``\'R\'`` prefix is used in conjunction with a\n``\'u\'`` or ``\'U\'`` prefix, then the ``\\uXXXX`` and ``\\UXXXXXXXX``\nescape sequences are processed while *all other backslashes are left\nin the string*. For example, the string literal ``ur"\\u0062\\n"``\nconsists of three Unicode characters: \'LATIN SMALL LETTER B\', \'REVERSE\nSOLIDUS\', and \'LATIN SMALL LETTER N\'. Backslashes can be escaped with\na preceding backslash; however, both remain in the string. As a\nresult, ``\\uXXXX`` escape sequences are only recognized when there are\nan odd number of backslashes.\n', - 'subscriptions': '\nSubscriptions\n*************\n\nA subscription selects an item of a sequence (string, tuple or list)\nor mapping (dictionary) object:\n\n subscription ::= primary "[" expression_list "]"\n\nThe primary must evaluate to an object of a sequence or mapping type.\n\nIf the primary is a mapping, the expression list must evaluate to an\nobject whose value is one of the keys of the mapping, and the\nsubscription selects the value in the mapping that corresponds to that\nkey. (The expression list is a tuple except if it has exactly one\nitem.)\n\nIf the primary is a sequence, the expression (list) must evaluate to a\nplain integer. If this value is negative, the length of the sequence\nis added to it (so that, e.g., ``x[-1]`` selects the last item of\n``x``.) The resulting value must be a nonnegative integer less than\nthe number of items in the sequence, and the subscription selects the\nitem whose index is that value (counting from zero).\n\nA string\'s items are characters. A character is not a separate data\ntype but a string of exactly one character.\n', - 'truth': "\nTruth Value Testing\n*******************\n\nAny object can be tested for truth value, for use in an ``if`` or\n``while`` condition or as operand of the Boolean operations below. The\nfollowing values are considered false:\n\n* ``None``\n\n* ``False``\n\n* zero of any numeric type, for example, ``0``, ``0L``, ``0.0``,\n ``0j``.\n\n* any empty sequence, for example, ``''``, ``()``, ``[]``.\n\n* any empty mapping, for example, ``{}``.\n\n* instances of user-defined classes, if the class defines a\n ``__nonzero__()`` or ``__len__()`` method, when that method returns\n the integer zero or ``bool`` value ``False``. [1]\n\nAll other values are considered true --- so objects of many types are\nalways true.\n\nOperations and built-in functions that have a Boolean result always\nreturn ``0`` or ``False`` for false and ``1`` or ``True`` for true,\nunless otherwise stated. (Important exception: the Boolean operations\n``or`` and ``and`` always return one of their operands.)\n", - 'try': '\nThe ``try`` statement\n*********************\n\nThe ``try`` statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n try_stmt ::= try1_stmt | try2_stmt\n try1_stmt ::= "try" ":" suite\n ("except" [expression [("as" | ",") target]] ":" suite)+\n ["else" ":" suite]\n ["finally" ":" suite]\n try2_stmt ::= "try" ":" suite\n "finally" ":" suite\n\nChanged in version 2.5: In previous versions of Python,\n``try``...``except``...``finally`` did not work. ``try``...``except``\nhad to be nested in ``try``...``finally``.\n\nThe ``except`` clause(s) specify one or more exception handlers. When\nno exception occurs in the ``try`` clause, no exception handler is\nexecuted. When an exception occurs in the ``try`` suite, a search for\nan exception handler is started. This search inspects the except\nclauses in turn until one is found that matches the exception. An\nexpression-less except clause, if present, must be last; it matches\nany exception. For an except clause with an expression, that\nexpression is evaluated, and the clause matches the exception if the\nresulting object is "compatible" with the exception. An object is\ncompatible with an exception if it is the class or a base class of the\nexception object, or a tuple containing an item compatible with the\nexception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire ``try`` statement\nraised the exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified in that except clause, if present, and the except\nclause\'s suite is executed. All except clauses must have an\nexecutable block. When the end of this block is reached, execution\ncontinues normally after the entire try statement. (This means that\nif two nested handlers exist for the same exception, and the exception\noccurs in the try clause of the inner handler, the outer handler will\nnot handle the exception.)\n\nBefore an except clause\'s suite is executed, details about the\nexception are assigned to three variables in the ``sys`` module:\n``sys.exc_type`` receives the object identifying the exception;\n``sys.exc_value`` receives the exception\'s parameter;\n``sys.exc_traceback`` receives a traceback object (see section *The\nstandard type hierarchy*) identifying the point in the program where\nthe exception occurred. These details are also available through the\n``sys.exc_info()`` function, which returns a tuple ``(exc_type,\nexc_value, exc_traceback)``. Use of the corresponding variables is\ndeprecated in favor of this function, since their use is unsafe in a\nthreaded program. As of Python 1.5, the variables are restored to\ntheir previous values (before the call) when returning from a function\nthat handled an exception.\n\nThe optional ``else`` clause is executed if and when control flows off\nthe end of the ``try`` clause. [2] Exceptions in the ``else`` clause\nare not handled by the preceding ``except`` clauses.\n\nIf ``finally`` is present, it specifies a \'cleanup\' handler. The\n``try`` clause is executed, including any ``except`` and ``else``\nclauses. If an exception occurs in any of the clauses and is not\nhandled, the exception is temporarily saved. The ``finally`` clause is\nexecuted. If there is a saved exception, it is re-raised at the end\nof the ``finally`` clause. If the ``finally`` clause raises another\nexception or executes a ``return`` or ``break`` statement, the saved\nexception is discarded:\n\n def f():\n try:\n 1/0\n finally:\n return 42\n\n >>> f()\n 42\n\nThe exception information is not available to the program during\nexecution of the ``finally`` clause.\n\nWhen a ``return``, ``break`` or ``continue`` statement is executed in\nthe ``try`` suite of a ``try``...``finally`` statement, the\n``finally`` clause is also executed \'on the way out.\' A ``continue``\nstatement is illegal in the ``finally`` clause. (The reason is a\nproblem with the current implementation --- this restriction may be\nlifted in the future).\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the ``raise`` statement to\ngenerate exceptions may be found in section *The raise statement*.\n', - 'types': '\nThe standard type hierarchy\n***************************\n\nBelow is a list of the types that are built into Python. Extension\nmodules (written in C, Java, or other languages, depending on the\nimplementation) can define additional types. Future versions of\nPython may add types to the type hierarchy (e.g., rational numbers,\nefficiently stored arrays of integers, etc.).\n\nSome of the type descriptions below contain a paragraph listing\n\'special attributes.\' These are attributes that provide access to the\nimplementation and are not intended for general use. Their definition\nmay change in the future.\n\nNone\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name ``None``.\n It is used to signify the absence of a value in many situations,\n e.g., it is returned from functions that don\'t explicitly return\n anything. Its truth value is false.\n\nNotImplemented\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name\n ``NotImplemented``. Numeric methods and rich comparison methods may\n return this value if they do not implement the operation for the\n operands provided. (The interpreter will then try the reflected\n operation, or some other fallback, depending on the operator.) Its\n truth value is true.\n\nEllipsis\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name\n ``Ellipsis``. It is used to indicate the presence of the ``...``\n syntax in a slice. Its truth value is true.\n\n``numbers.Number``\n These are created by numeric literals and returned as results by\n arithmetic operators and arithmetic built-in functions. Numeric\n objects are immutable; once created their value never changes.\n Python numbers are of course strongly related to mathematical\n numbers, but subject to the limitations of numerical representation\n in computers.\n\n Python distinguishes between integers, floating point numbers, and\n complex numbers:\n\n ``numbers.Integral``\n These represent elements from the mathematical set of integers\n (positive and negative).\n\n There are three types of integers:\n\n Plain integers\n These represent numbers in the range -2147483648 through\n 2147483647. (The range may be larger on machines with a\n larger natural word size, but not smaller.) When the result\n of an operation would fall outside this range, the result is\n normally returned as a long integer (in some cases, the\n exception ``OverflowError`` is raised instead). For the\n purpose of shift and mask operations, integers are assumed to\n have a binary, 2\'s complement notation using 32 or more bits,\n and hiding no bits from the user (i.e., all 4294967296\n different bit patterns correspond to different values).\n\n Long integers\n These represent numbers in an unlimited range, subject to\n available (virtual) memory only. For the purpose of shift\n and mask operations, a binary representation is assumed, and\n negative numbers are represented in a variant of 2\'s\n complement which gives the illusion of an infinite string of\n sign bits extending to the left.\n\n Booleans\n These represent the truth values False and True. The two\n objects representing the values False and True are the only\n Boolean objects. The Boolean type is a subtype of plain\n integers, and Boolean values behave like the values 0 and 1,\n respectively, in almost all contexts, the exception being\n that when converted to a string, the strings ``"False"`` or\n ``"True"`` are returned, respectively.\n\n The rules for integer representation are intended to give the\n most meaningful interpretation of shift and mask operations\n involving negative integers and the least surprises when\n switching between the plain and long integer domains. Any\n operation, if it yields a result in the plain integer domain,\n will yield the same result in the long integer domain or when\n using mixed operands. The switch between domains is transparent\n to the programmer.\n\n ``numbers.Real`` (``float``)\n These represent machine-level double precision floating point\n numbers. You are at the mercy of the underlying machine\n architecture (and C or Java implementation) for the accepted\n range and handling of overflow. Python does not support single-\n precision floating point numbers; the savings in processor and\n memory usage that are usually the reason for using these is\n dwarfed by the overhead of using objects in Python, so there is\n no reason to complicate the language with two kinds of floating\n point numbers.\n\n ``numbers.Complex``\n These represent complex numbers as a pair of machine-level\n double precision floating point numbers. The same caveats apply\n as for floating point numbers. The real and imaginary parts of a\n complex number ``z`` can be retrieved through the read-only\n attributes ``z.real`` and ``z.imag``.\n\nSequences\n These represent finite ordered sets indexed by non-negative\n numbers. The built-in function ``len()`` returns the number of\n items of a sequence. When the length of a sequence is *n*, the\n index set contains the numbers 0, 1, ..., *n*-1. Item *i* of\n sequence *a* is selected by ``a[i]``.\n\n Sequences also support slicing: ``a[i:j]`` selects all items with\n index *k* such that *i* ``<=`` *k* ``<`` *j*. When used as an\n expression, a slice is a sequence of the same type. This implies\n that the index set is renumbered so that it starts at 0.\n\n Some sequences also support "extended slicing" with a third "step"\n parameter: ``a[i:j:k]`` selects all items of *a* with index *x*\n where ``x = i + n*k``, *n* ``>=`` ``0`` and *i* ``<=`` *x* ``<``\n *j*.\n\n Sequences are distinguished according to their mutability:\n\n Immutable sequences\n An object of an immutable sequence type cannot change once it is\n created. (If the object contains references to other objects,\n these other objects may be mutable and may be changed; however,\n the collection of objects directly referenced by an immutable\n object cannot change.)\n\n The following types are immutable sequences:\n\n Strings\n The items of a string are characters. There is no separate\n character type; a character is represented by a string of one\n item. Characters represent (at least) 8-bit bytes. The\n built-in functions ``chr()`` and ``ord()`` convert between\n characters and nonnegative integers representing the byte\n values. Bytes with the values 0-127 usually represent the\n corresponding ASCII values, but the interpretation of values\n is up to the program. The string data type is also used to\n represent arrays of bytes, e.g., to hold data read from a\n file.\n\n (On systems whose native character set is not ASCII, strings\n may use EBCDIC in their internal representation, provided the\n functions ``chr()`` and ``ord()`` implement a mapping between\n ASCII and EBCDIC, and string comparison preserves the ASCII\n order. Or perhaps someone can propose a better rule?)\n\n Unicode\n The items of a Unicode object are Unicode code units. A\n Unicode code unit is represented by a Unicode object of one\n item and can hold either a 16-bit or 32-bit value\n representing a Unicode ordinal (the maximum value for the\n ordinal is given in ``sys.maxunicode``, and depends on how\n Python is configured at compile time). Surrogate pairs may\n be present in the Unicode object, and will be reported as two\n separate items. The built-in functions ``unichr()`` and\n ``ord()`` convert between code units and nonnegative integers\n representing the Unicode ordinals as defined in the Unicode\n Standard 3.0. Conversion from and to other encodings are\n possible through the Unicode method ``encode()`` and the\n built-in function ``unicode()``.\n\n Tuples\n The items of a tuple are arbitrary Python objects. Tuples of\n two or more items are formed by comma-separated lists of\n expressions. A tuple of one item (a \'singleton\') can be\n formed by affixing a comma to an expression (an expression by\n itself does not create a tuple, since parentheses must be\n usable for grouping of expressions). An empty tuple can be\n formed by an empty pair of parentheses.\n\n Mutable sequences\n Mutable sequences can be changed after they are created. The\n subscription and slicing notations can be used as the target of\n assignment and ``del`` (delete) statements.\n\n There are currently two intrinsic mutable sequence types:\n\n Lists\n The items of a list are arbitrary Python objects. Lists are\n formed by placing a comma-separated list of expressions in\n square brackets. (Note that there are no special cases needed\n to form lists of length 0 or 1.)\n\n Byte Arrays\n A bytearray object is a mutable array. They are created by\n the built-in ``bytearray()`` constructor. Aside from being\n mutable (and hence unhashable), byte arrays otherwise provide\n the same interface and functionality as immutable bytes\n objects.\n\n The extension module ``array`` provides an additional example of\n a mutable sequence type.\n\nSet types\n These represent unordered, finite sets of unique, immutable\n objects. As such, they cannot be indexed by any subscript. However,\n they can be iterated over, and the built-in function ``len()``\n returns the number of items in a set. Common uses for sets are fast\n membership testing, removing duplicates from a sequence, and\n computing mathematical operations such as intersection, union,\n difference, and symmetric difference.\n\n For set elements, the same immutability rules apply as for\n dictionary keys. Note that numeric types obey the normal rules for\n numeric comparison: if two numbers compare equal (e.g., ``1`` and\n ``1.0``), only one of them can be contained in a set.\n\n There are currently two intrinsic set types:\n\n Sets\n These represent a mutable set. They are created by the built-in\n ``set()`` constructor and can be modified afterwards by several\n methods, such as ``add()``.\n\n Frozen sets\n These represent an immutable set. They are created by the\n built-in ``frozenset()`` constructor. As a frozenset is\n immutable and *hashable*, it can be used again as an element of\n another set, or as a dictionary key.\n\nMappings\n These represent finite sets of objects indexed by arbitrary index\n sets. The subscript notation ``a[k]`` selects the item indexed by\n ``k`` from the mapping ``a``; this can be used in expressions and\n as the target of assignments or ``del`` statements. The built-in\n function ``len()`` returns the number of items in a mapping.\n\n There is currently a single intrinsic mapping type:\n\n Dictionaries\n These represent finite sets of objects indexed by nearly\n arbitrary values. The only types of values not acceptable as\n keys are values containing lists or dictionaries or other\n mutable types that are compared by value rather than by object\n identity, the reason being that the efficient implementation of\n dictionaries requires a key\'s hash value to remain constant.\n Numeric types used for keys obey the normal rules for numeric\n comparison: if two numbers compare equal (e.g., ``1`` and\n ``1.0``) then they can be used interchangeably to index the same\n dictionary entry.\n\n Dictionaries are mutable; they can be created by the ``{...}``\n notation (see section *Dictionary displays*).\n\n The extension modules ``dbm``, ``gdbm``, and ``bsddb`` provide\n additional examples of mapping types.\n\nCallable types\n These are the types to which the function call operation (see\n section *Calls*) can be applied:\n\n User-defined functions\n A user-defined function object is created by a function\n definition (see section *Function definitions*). It should be\n called with an argument list containing the same number of items\n as the function\'s formal parameter list.\n\n Special attributes:\n\n +-------------------------+---------------------------------+-------------+\n | Attribute | Meaning | |\n +=========================+=================================+=============+\n | ``func_doc`` | The function\'s documentation | Writable |\n | | string, or ``None`` if | |\n | | unavailable | |\n +-------------------------+---------------------------------+-------------+\n | ``__doc__`` | Another way of spelling | Writable |\n | | ``func_doc`` | |\n +-------------------------+---------------------------------+-------------+\n | ``func_name`` | The function\'s name | Writable |\n +-------------------------+---------------------------------+-------------+\n | ``__name__`` | Another way of spelling | Writable |\n | | ``func_name`` | |\n +-------------------------+---------------------------------+-------------+\n | ``__module__`` | The name of the module the | Writable |\n | | function was defined in, or | |\n | | ``None`` if unavailable. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_defaults`` | A tuple containing default | Writable |\n | | argument values for those | |\n | | arguments that have defaults, | |\n | | or ``None`` if no arguments | |\n | | have a default value | |\n +-------------------------+---------------------------------+-------------+\n | ``func_code`` | The code object representing | Writable |\n | | the compiled function body. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_globals`` | A reference to the dictionary | Read-only |\n | | that holds the function\'s | |\n | | global variables --- the global | |\n | | namespace of the module in | |\n | | which the function was defined. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_dict`` | The namespace supporting | Writable |\n | | arbitrary function attributes. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_closure`` | ``None`` or a tuple of cells | Read-only |\n | | that contain bindings for the | |\n | | function\'s free variables. | |\n +-------------------------+---------------------------------+-------------+\n\n Most of the attributes labelled "Writable" check the type of the\n assigned value.\n\n Changed in version 2.4: ``func_name`` is now writable.\n\n Function objects also support getting and setting arbitrary\n attributes, which can be used, for example, to attach metadata\n to functions. Regular attribute dot-notation is used to get and\n set such attributes. *Note that the current implementation only\n supports function attributes on user-defined functions. Function\n attributes on built-in functions may be supported in the\n future.*\n\n Additional information about a function\'s definition can be\n retrieved from its code object; see the description of internal\n types below.\n\n User-defined methods\n A user-defined method object combines a class, a class instance\n (or ``None``) and any callable object (normally a user-defined\n function).\n\n Special read-only attributes: ``im_self`` is the class instance\n object, ``im_func`` is the function object; ``im_class`` is the\n class of ``im_self`` for bound methods or the class that asked\n for the method for unbound methods; ``__doc__`` is the method\'s\n documentation (same as ``im_func.__doc__``); ``__name__`` is the\n method name (same as ``im_func.__name__``); ``__module__`` is\n the name of the module the method was defined in, or ``None`` if\n unavailable.\n\n Changed in version 2.2: ``im_self`` used to refer to the class\n that defined the method.\n\n Changed in version 2.6: For Python 3 forward-compatibility,\n ``im_func`` is also available as ``__func__``, and ``im_self``\n as ``__self__``.\n\n Methods also support accessing (but not setting) the arbitrary\n function attributes on the underlying function object.\n\n User-defined method objects may be created when getting an\n attribute of a class (perhaps via an instance of that class), if\n that attribute is a user-defined function object, an unbound\n user-defined method object, or a class method object. When the\n attribute is a user-defined method object, a new method object\n is only created if the class from which it is being retrieved is\n the same as, or a derived class of, the class stored in the\n original method object; otherwise, the original method object is\n used as it is.\n\n When a user-defined method object is created by retrieving a\n user-defined function object from a class, its ``im_self``\n attribute is ``None`` and the method object is said to be\n unbound. When one is created by retrieving a user-defined\n function object from a class via one of its instances, its\n ``im_self`` attribute is the instance, and the method object is\n said to be bound. In either case, the new method\'s ``im_class``\n attribute is the class from which the retrieval takes place, and\n its ``im_func`` attribute is the original function object.\n\n When a user-defined method object is created by retrieving\n another method object from a class or instance, the behaviour is\n the same as for a function object, except that the ``im_func``\n attribute of the new instance is not the original method object\n but its ``im_func`` attribute.\n\n When a user-defined method object is created by retrieving a\n class method object from a class or instance, its ``im_self``\n attribute is the class itself, and its ``im_func`` attribute is\n the function object underlying the class method.\n\n When an unbound user-defined method object is called, the\n underlying function (``im_func``) is called, with the\n restriction that the first argument must be an instance of the\n proper class (``im_class``) or of a derived class thereof.\n\n When a bound user-defined method object is called, the\n underlying function (``im_func``) is called, inserting the class\n instance (``im_self``) in front of the argument list. For\n instance, when ``C`` is a class which contains a definition for\n a function ``f()``, and ``x`` is an instance of ``C``, calling\n ``x.f(1)`` is equivalent to calling ``C.f(x, 1)``.\n\n When a user-defined method object is derived from a class method\n object, the "class instance" stored in ``im_self`` will actually\n be the class itself, so that calling either ``x.f(1)`` or\n ``C.f(1)`` is equivalent to calling ``f(C,1)`` where ``f`` is\n the underlying function.\n\n Note that the transformation from function object to (unbound or\n bound) method object happens each time the attribute is\n retrieved from the class or instance. In some cases, a fruitful\n optimization is to assign the attribute to a local variable and\n call that local variable. Also notice that this transformation\n only happens for user-defined functions; other callable objects\n (and all non-callable objects) are retrieved without\n transformation. It is also important to note that user-defined\n functions which are attributes of a class instance are not\n converted to bound methods; this *only* happens when the\n function is an attribute of the class.\n\n Generator functions\n A function or method which uses the ``yield`` statement (see\n section *The yield statement*) is called a *generator function*.\n Such a function, when called, always returns an iterator object\n which can be used to execute the body of the function: calling\n the iterator\'s ``next()`` method will cause the function to\n execute until it provides a value using the ``yield`` statement.\n When the function executes a ``return`` statement or falls off\n the end, a ``StopIteration`` exception is raised and the\n iterator will have reached the end of the set of values to be\n returned.\n\n Built-in functions\n A built-in function object is a wrapper around a C function.\n Examples of built-in functions are ``len()`` and ``math.sin()``\n (``math`` is a standard built-in module). The number and type of\n the arguments are determined by the C function. Special read-\n only attributes: ``__doc__`` is the function\'s documentation\n string, or ``None`` if unavailable; ``__name__`` is the\n function\'s name; ``__self__`` is set to ``None`` (but see the\n next item); ``__module__`` is the name of the module the\n function was defined in or ``None`` if unavailable.\n\n Built-in methods\n This is really a different disguise of a built-in function, this\n time containing an object passed to the C function as an\n implicit extra argument. An example of a built-in method is\n ``alist.append()``, assuming *alist* is a list object. In this\n case, the special read-only attribute ``__self__`` is set to the\n object denoted by *alist*.\n\n Class Types\n Class types, or "new-style classes," are callable. These\n objects normally act as factories for new instances of\n themselves, but variations are possible for class types that\n override ``__new__()``. The arguments of the call are passed to\n ``__new__()`` and, in the typical case, to ``__init__()`` to\n initialize the new instance.\n\n Classic Classes\n Class objects are described below. When a class object is\n called, a new class instance (also described below) is created\n and returned. This implies a call to the class\'s ``__init__()``\n method if it has one. Any arguments are passed on to the\n ``__init__()`` method. If there is no ``__init__()`` method,\n the class must be called without arguments.\n\n Class instances\n Class instances are described below. Class instances are\n callable only when the class has a ``__call__()`` method;\n ``x(arguments)`` is a shorthand for ``x.__call__(arguments)``.\n\nModules\n Modules are imported by the ``import`` statement (see section *The\n import statement*). A module object has a namespace implemented by\n a dictionary object (this is the dictionary referenced by the\n func_globals attribute of functions defined in the module).\n Attribute references are translated to lookups in this dictionary,\n e.g., ``m.x`` is equivalent to ``m.__dict__["x"]``. A module object\n does not contain the code object used to initialize the module\n (since it isn\'t needed once the initialization is done).\n\n Attribute assignment updates the module\'s namespace dictionary,\n e.g., ``m.x = 1`` is equivalent to ``m.__dict__["x"] = 1``.\n\n Special read-only attribute: ``__dict__`` is the module\'s namespace\n as a dictionary object.\n\n **CPython implementation detail:** Because of the way CPython\n clears module dictionaries, the module dictionary will be cleared\n when the module falls out of scope even if the dictionary still has\n live references. To avoid this, copy the dictionary or keep the\n module around while using its dictionary directly.\n\n Predefined (writable) attributes: ``__name__`` is the module\'s\n name; ``__doc__`` is the module\'s documentation string, or ``None``\n if unavailable; ``__file__`` is the pathname of the file from which\n the module was loaded, if it was loaded from a file. The\n ``__file__`` attribute is not present for C modules that are\n statically linked into the interpreter; for extension modules\n loaded dynamically from a shared library, it is the pathname of the\n shared library file.\n\nClasses\n Both class types (new-style classes) and class objects (old-\n style/classic classes) are typically created by class definitions\n (see section *Class definitions*). A class has a namespace\n implemented by a dictionary object. Class attribute references are\n translated to lookups in this dictionary, e.g., ``C.x`` is\n translated to ``C.__dict__["x"]`` (although for new-style classes\n in particular there are a number of hooks which allow for other\n means of locating attributes). When the attribute name is not found\n there, the attribute search continues in the base classes. For\n old-style classes, the search is depth-first, left-to-right in the\n order of occurrence in the base class list. New-style classes use\n the more complex C3 method resolution order which behaves correctly\n even in the presence of \'diamond\' inheritance structures where\n there are multiple inheritance paths leading back to a common\n ancestor. Additional details on the C3 MRO used by new-style\n classes can be found in the documentation accompanying the 2.3\n release at http://www.python.org/download/releases/2.3/mro/.\n\n When a class attribute reference (for class ``C``, say) would yield\n a user-defined function object or an unbound user-defined method\n object whose associated class is either ``C`` or one of its base\n classes, it is transformed into an unbound user-defined method\n object whose ``im_class`` attribute is ``C``. When it would yield a\n class method object, it is transformed into a bound user-defined\n method object whose ``im_self`` attribute is ``C``. When it would\n yield a static method object, it is transformed into the object\n wrapped by the static method object. See section *Implementing\n Descriptors* for another way in which attributes retrieved from a\n class may differ from those actually contained in its ``__dict__``\n (note that only new-style classes support descriptors).\n\n Class attribute assignments update the class\'s dictionary, never\n the dictionary of a base class.\n\n A class object can be called (see above) to yield a class instance\n (see below).\n\n Special attributes: ``__name__`` is the class name; ``__module__``\n is the module name in which the class was defined; ``__dict__`` is\n the dictionary containing the class\'s namespace; ``__bases__`` is a\n tuple (possibly empty or a singleton) containing the base classes,\n in the order of their occurrence in the base class list;\n ``__doc__`` is the class\'s documentation string, or None if\n undefined.\n\nClass instances\n A class instance is created by calling a class object (see above).\n A class instance has a namespace implemented as a dictionary which\n is the first place in which attribute references are searched.\n When an attribute is not found there, and the instance\'s class has\n an attribute by that name, the search continues with the class\n attributes. If a class attribute is found that is a user-defined\n function object or an unbound user-defined method object whose\n associated class is the class (call it ``C``) of the instance for\n which the attribute reference was initiated or one of its bases, it\n is transformed into a bound user-defined method object whose\n ``im_class`` attribute is ``C`` and whose ``im_self`` attribute is\n the instance. Static method and class method objects are also\n transformed, as if they had been retrieved from class ``C``; see\n above under "Classes". See section *Implementing Descriptors* for\n another way in which attributes of a class retrieved via its\n instances may differ from the objects actually stored in the\n class\'s ``__dict__``. If no class attribute is found, and the\n object\'s class has a ``__getattr__()`` method, that is called to\n satisfy the lookup.\n\n Attribute assignments and deletions update the instance\'s\n dictionary, never a class\'s dictionary. If the class has a\n ``__setattr__()`` or ``__delattr__()`` method, this is called\n instead of updating the instance dictionary directly.\n\n Class instances can pretend to be numbers, sequences, or mappings\n if they have methods with certain special names. See section\n *Special method names*.\n\n Special attributes: ``__dict__`` is the attribute dictionary;\n ``__class__`` is the instance\'s class.\n\nFiles\n A file object represents an open file. File objects are created by\n the ``open()`` built-in function, and also by ``os.popen()``,\n ``os.fdopen()``, and the ``makefile()`` method of socket objects\n (and perhaps by other functions or methods provided by extension\n modules). The objects ``sys.stdin``, ``sys.stdout`` and\n ``sys.stderr`` are initialized to file objects corresponding to the\n interpreter\'s standard input, output and error streams. See *File\n Objects* for complete documentation of file objects.\n\nInternal types\n A few types used internally by the interpreter are exposed to the\n user. Their definitions may change with future versions of the\n interpreter, but they are mentioned here for completeness.\n\n Code objects\n Code objects represent *byte-compiled* executable Python code,\n or *bytecode*. The difference between a code object and a\n function object is that the function object contains an explicit\n reference to the function\'s globals (the module in which it was\n defined), while a code object contains no context; also the\n default argument values are stored in the function object, not\n in the code object (because they represent values calculated at\n run-time). Unlike function objects, code objects are immutable\n and contain no references (directly or indirectly) to mutable\n objects.\n\n Special read-only attributes: ``co_name`` gives the function\n name; ``co_argcount`` is the number of positional arguments\n (including arguments with default values); ``co_nlocals`` is the\n number of local variables used by the function (including\n arguments); ``co_varnames`` is a tuple containing the names of\n the local variables (starting with the argument names);\n ``co_cellvars`` is a tuple containing the names of local\n variables that are referenced by nested functions;\n ``co_freevars`` is a tuple containing the names of free\n variables; ``co_code`` is a string representing the sequence of\n bytecode instructions; ``co_consts`` is a tuple containing the\n literals used by the bytecode; ``co_names`` is a tuple\n containing the names used by the bytecode; ``co_filename`` is\n the filename from which the code was compiled;\n ``co_firstlineno`` is the first line number of the function;\n ``co_lnotab`` is a string encoding the mapping from bytecode\n offsets to line numbers (for details see the source code of the\n interpreter); ``co_stacksize`` is the required stack size\n (including local variables); ``co_flags`` is an integer encoding\n a number of flags for the interpreter.\n\n The following flag bits are defined for ``co_flags``: bit\n ``0x04`` is set if the function uses the ``*arguments`` syntax\n to accept an arbitrary number of positional arguments; bit\n ``0x08`` is set if the function uses the ``**keywords`` syntax\n to accept arbitrary keyword arguments; bit ``0x20`` is set if\n the function is a generator.\n\n Future feature declarations (``from __future__ import\n division``) also use bits in ``co_flags`` to indicate whether a\n code object was compiled with a particular feature enabled: bit\n ``0x2000`` is set if the function was compiled with future\n division enabled; bits ``0x10`` and ``0x1000`` were used in\n earlier versions of Python.\n\n Other bits in ``co_flags`` are reserved for internal use.\n\n If a code object represents a function, the first item in\n ``co_consts`` is the documentation string of the function, or\n ``None`` if undefined.\n\n Frame objects\n Frame objects represent execution frames. They may occur in\n traceback objects (see below).\n\n Special read-only attributes: ``f_back`` is to the previous\n stack frame (towards the caller), or ``None`` if this is the\n bottom stack frame; ``f_code`` is the code object being executed\n in this frame; ``f_locals`` is the dictionary used to look up\n local variables; ``f_globals`` is used for global variables;\n ``f_builtins`` is used for built-in (intrinsic) names;\n ``f_restricted`` is a flag indicating whether the function is\n executing in restricted execution mode; ``f_lasti`` gives the\n precise instruction (this is an index into the bytecode string\n of the code object).\n\n Special writable attributes: ``f_trace``, if not ``None``, is a\n function called at the start of each source code line (this is\n used by the debugger); ``f_exc_type``, ``f_exc_value``,\n ``f_exc_traceback`` represent the last exception raised in the\n parent frame provided another exception was ever raised in the\n current frame (in all other cases they are None); ``f_lineno``\n is the current line number of the frame --- writing to this from\n within a trace function jumps to the given line (only for the\n bottom-most frame). A debugger can implement a Jump command\n (aka Set Next Statement) by writing to f_lineno.\n\n Traceback objects\n Traceback objects represent a stack trace of an exception. A\n traceback object is created when an exception occurs. When the\n search for an exception handler unwinds the execution stack, at\n each unwound level a traceback object is inserted in front of\n the current traceback. When an exception handler is entered,\n the stack trace is made available to the program. (See section\n *The try statement*.) It is accessible as ``sys.exc_traceback``,\n and also as the third item of the tuple returned by\n ``sys.exc_info()``. The latter is the preferred interface,\n since it works correctly when the program is using multiple\n threads. When the program contains no suitable handler, the\n stack trace is written (nicely formatted) to the standard error\n stream; if the interpreter is interactive, it is also made\n available to the user as ``sys.last_traceback``.\n\n Special read-only attributes: ``tb_next`` is the next level in\n the stack trace (towards the frame where the exception\n occurred), or ``None`` if there is no next level; ``tb_frame``\n points to the execution frame of the current level;\n ``tb_lineno`` gives the line number where the exception\n occurred; ``tb_lasti`` indicates the precise instruction. The\n line number and last instruction in the traceback may differ\n from the line number of its frame object if the exception\n occurred in a ``try`` statement with no matching except clause\n or with a finally clause.\n\n Slice objects\n Slice objects are used to represent slices when *extended slice\n syntax* is used. This is a slice using two colons, or multiple\n slices or ellipses separated by commas, e.g., ``a[i:j:step]``,\n ``a[i:j, k:l]``, or ``a[..., i:j]``. They are also created by\n the built-in ``slice()`` function.\n\n Special read-only attributes: ``start`` is the lower bound;\n ``stop`` is the upper bound; ``step`` is the step value; each is\n ``None`` if omitted. These attributes can have any type.\n\n Slice objects support one method:\n\n slice.indices(self, length)\n\n This method takes a single integer argument *length* and\n computes information about the extended slice that the slice\n object would describe if applied to a sequence of *length*\n items. It returns a tuple of three integers; respectively\n these are the *start* and *stop* indices and the *step* or\n stride length of the slice. Missing or out-of-bounds indices\n are handled in a manner consistent with regular slices.\n\n New in version 2.3.\n\n Static method objects\n Static method objects provide a way of defeating the\n transformation of function objects to method objects described\n above. A static method object is a wrapper around any other\n object, usually a user-defined method object. When a static\n method object is retrieved from a class or a class instance, the\n object actually returned is the wrapped object, which is not\n subject to any further transformation. Static method objects are\n not themselves callable, although the objects they wrap usually\n are. Static method objects are created by the built-in\n ``staticmethod()`` constructor.\n\n Class method objects\n A class method object, like a static method object, is a wrapper\n around another object that alters the way in which that object\n is retrieved from classes and class instances. The behaviour of\n class method objects upon such retrieval is described above,\n under "User-defined methods". Class method objects are created\n by the built-in ``classmethod()`` constructor.\n', - 'typesfunctions': '\nFunctions\n*********\n\nFunction objects are created by function definitions. The only\noperation on a function object is to call it: ``func(argument-list)``.\n\nThere are really two flavors of function objects: built-in functions\nand user-defined functions. Both support the same operation (to call\nthe function), but the implementation is different, hence the\ndifferent object types.\n\nSee *Function definitions* for more information.\n', - 'typesmapping': '\nMapping Types --- ``dict``\n**************************\n\nA *mapping* object maps *hashable* values to arbitrary objects.\nMappings are mutable objects. There is currently only one standard\nmapping type, the *dictionary*. (For other containers see the built\nin ``list``, ``set``, and ``tuple`` classes, and the ``collections``\nmodule.)\n\nA dictionary\'s keys are *almost* arbitrary values. Values that are\nnot *hashable*, that is, values containing lists, dictionaries or\nother mutable types (that are compared by value rather than by object\nidentity) may not be used as keys. Numeric types used for keys obey\nthe normal rules for numeric comparison: if two numbers compare equal\n(such as ``1`` and ``1.0``) then they can be used interchangeably to\nindex the same dictionary entry. (Note however, that since computers\nstore floating-point numbers as approximations it is usually unwise to\nuse them as dictionary keys.)\n\nDictionaries can be created by placing a comma-separated list of\n``key: value`` pairs within braces, for example: ``{\'jack\': 4098,\n\'sjoerd\': 4127}`` or ``{4098: \'jack\', 4127: \'sjoerd\'}``, or by the\n``dict`` constructor.\n\nclass class dict(**kwarg)\nclass class dict(mapping, **kwarg)\nclass class dict(iterable, **kwarg)\n\n Return a new dictionary initialized from an optional positional\n argument and a possibly empty set of keyword arguments.\n\n If no positional argument is given, an empty dictionary is created.\n If a positional argument is given and it is a mapping object, a\n dictionary is created with the same key-value pairs as the mapping\n object. Otherwise, the positional argument must be an *iterator*\n object. Each item in the iterable must itself be an iterator with\n exactly two objects. The first object of each item becomes a key\n in the new dictionary, and the second object the corresponding\n value. If a key occurs more than once, the last value for that key\n becomes the corresponding value in the new dictionary.\n\n If keyword arguments are given, the keyword arguments and their\n values are added to the dictionary created from the positional\n argument. If a key being added is already present, the value from\n the keyword argument replaces the value from the positional\n argument.\n\n To illustrate, the following examples all return a dictionary equal\n to ``{"one": 1, "two": 2, "three": 3}``:\n\n >>> a = dict(one=1, two=2, three=3)\n >>> b = {\'one\': 1, \'two\': 2, \'three\': 3}\n >>> c = dict(zip([\'one\', \'two\', \'three\'], [1, 2, 3]))\n >>> d = dict([(\'two\', 2), (\'one\', 1), (\'three\', 3)])\n >>> e = dict({\'three\': 3, \'one\': 1, \'two\': 2})\n >>> a == b == c == d == e\n True\n\n Providing keyword arguments as in the first example only works for\n keys that are valid Python identifiers. Otherwise, any valid keys\n can be used.\n\n New in version 2.2.\n\n Changed in version 2.3: Support for building a dictionary from\n keyword arguments added.\n\n These are the operations that dictionaries support (and therefore,\n custom mapping types should support too):\n\n len(d)\n\n Return the number of items in the dictionary *d*.\n\n d[key]\n\n Return the item of *d* with key *key*. Raises a ``KeyError`` if\n *key* is not in the map.\n\n New in version 2.5: If a subclass of dict defines a method\n ``__missing__()``, if the key *key* is not present, the\n ``d[key]`` operation calls that method with the key *key* as\n argument. The ``d[key]`` operation then returns or raises\n whatever is returned or raised by the ``__missing__(key)`` call\n if the key is not present. No other operations or methods invoke\n ``__missing__()``. If ``__missing__()`` is not defined,\n ``KeyError`` is raised. ``__missing__()`` must be a method; it\n cannot be an instance variable. For an example, see\n ``collections.defaultdict``.\n\n d[key] = value\n\n Set ``d[key]`` to *value*.\n\n del d[key]\n\n Remove ``d[key]`` from *d*. Raises a ``KeyError`` if *key* is\n not in the map.\n\n key in d\n\n Return ``True`` if *d* has a key *key*, else ``False``.\n\n New in version 2.2.\n\n key not in d\n\n Equivalent to ``not key in d``.\n\n New in version 2.2.\n\n iter(d)\n\n Return an iterator over the keys of the dictionary. This is a\n shortcut for ``iterkeys()``.\n\n clear()\n\n Remove all items from the dictionary.\n\n copy()\n\n Return a shallow copy of the dictionary.\n\n fromkeys(seq[, value])\n\n Create a new dictionary with keys from *seq* and values set to\n *value*.\n\n ``fromkeys()`` is a class method that returns a new dictionary.\n *value* defaults to ``None``.\n\n New in version 2.3.\n\n get(key[, default])\n\n Return the value for *key* if *key* is in the dictionary, else\n *default*. If *default* is not given, it defaults to ``None``,\n so that this method never raises a ``KeyError``.\n\n has_key(key)\n\n Test for the presence of *key* in the dictionary. ``has_key()``\n is deprecated in favor of ``key in d``.\n\n items()\n\n Return a copy of the dictionary\'s list of ``(key, value)``\n pairs.\n\n **CPython implementation detail:** Keys and values are listed in\n an arbitrary order which is non-random, varies across Python\n implementations, and depends on the dictionary\'s history of\n insertions and deletions.\n\n If ``items()``, ``keys()``, ``values()``, ``iteritems()``,\n ``iterkeys()``, and ``itervalues()`` are called with no\n intervening modifications to the dictionary, the lists will\n directly correspond. This allows the creation of ``(value,\n key)`` pairs using ``zip()``: ``pairs = zip(d.values(),\n d.keys())``. The same relationship holds for the ``iterkeys()``\n and ``itervalues()`` methods: ``pairs = zip(d.itervalues(),\n d.iterkeys())`` provides the same value for ``pairs``. Another\n way to create the same list is ``pairs = [(v, k) for (k, v) in\n d.iteritems()]``.\n\n iteritems()\n\n Return an iterator over the dictionary\'s ``(key, value)`` pairs.\n See the note for ``dict.items()``.\n\n Using ``iteritems()`` while adding or deleting entries in the\n dictionary may raise a ``RuntimeError`` or fail to iterate over\n all entries.\n\n New in version 2.2.\n\n iterkeys()\n\n Return an iterator over the dictionary\'s keys. See the note for\n ``dict.items()``.\n\n Using ``iterkeys()`` while adding or deleting entries in the\n dictionary may raise a ``RuntimeError`` or fail to iterate over\n all entries.\n\n New in version 2.2.\n\n itervalues()\n\n Return an iterator over the dictionary\'s values. See the note\n for ``dict.items()``.\n\n Using ``itervalues()`` while adding or deleting entries in the\n dictionary may raise a ``RuntimeError`` or fail to iterate over\n all entries.\n\n New in version 2.2.\n\n keys()\n\n Return a copy of the dictionary\'s list of keys. See the note\n for ``dict.items()``.\n\n pop(key[, default])\n\n If *key* is in the dictionary, remove it and return its value,\n else return *default*. If *default* is not given and *key* is\n not in the dictionary, a ``KeyError`` is raised.\n\n New in version 2.3.\n\n popitem()\n\n Remove and return an arbitrary ``(key, value)`` pair from the\n dictionary.\n\n ``popitem()`` is useful to destructively iterate over a\n dictionary, as often used in set algorithms. If the dictionary\n is empty, calling ``popitem()`` raises a ``KeyError``.\n\n setdefault(key[, default])\n\n If *key* is in the dictionary, return its value. If not, insert\n *key* with a value of *default* and return *default*. *default*\n defaults to ``None``.\n\n update([other])\n\n Update the dictionary with the key/value pairs from *other*,\n overwriting existing keys. Return ``None``.\n\n ``update()`` accepts either another dictionary object or an\n iterable of key/value pairs (as tuples or other iterables of\n length two). If keyword arguments are specified, the dictionary\n is then updated with those key/value pairs: ``d.update(red=1,\n blue=2)``.\n\n Changed in version 2.4: Allowed the argument to be an iterable\n of key/value pairs and allowed keyword arguments.\n\n values()\n\n Return a copy of the dictionary\'s list of values. See the note\n for ``dict.items()``.\n\n viewitems()\n\n Return a new view of the dictionary\'s items (``(key, value)``\n pairs). See below for documentation of view objects.\n\n New in version 2.7.\n\n viewkeys()\n\n Return a new view of the dictionary\'s keys. See below for\n documentation of view objects.\n\n New in version 2.7.\n\n viewvalues()\n\n Return a new view of the dictionary\'s values. See below for\n documentation of view objects.\n\n New in version 2.7.\n\n\nDictionary view objects\n=======================\n\nThe objects returned by ``dict.viewkeys()``, ``dict.viewvalues()`` and\n``dict.viewitems()`` are *view objects*. They provide a dynamic view\non the dictionary\'s entries, which means that when the dictionary\nchanges, the view reflects these changes.\n\nDictionary views can be iterated over to yield their respective data,\nand support membership tests:\n\nlen(dictview)\n\n Return the number of entries in the dictionary.\n\niter(dictview)\n\n Return an iterator over the keys, values or items (represented as\n tuples of ``(key, value)``) in the dictionary.\n\n Keys and values are iterated over in an arbitrary order which is\n non-random, varies across Python implementations, and depends on\n the dictionary\'s history of insertions and deletions. If keys,\n values and items views are iterated over with no intervening\n modifications to the dictionary, the order of items will directly\n correspond. This allows the creation of ``(value, key)`` pairs\n using ``zip()``: ``pairs = zip(d.values(), d.keys())``. Another\n way to create the same list is ``pairs = [(v, k) for (k, v) in\n d.items()]``.\n\n Iterating views while adding or deleting entries in the dictionary\n may raise a ``RuntimeError`` or fail to iterate over all entries.\n\nx in dictview\n\n Return ``True`` if *x* is in the underlying dictionary\'s keys,\n values or items (in the latter case, *x* should be a ``(key,\n value)`` tuple).\n\nKeys views are set-like since their entries are unique and hashable.\nIf all values are hashable, so that (key, value) pairs are unique and\nhashable, then the items view is also set-like. (Values views are not\ntreated as set-like since the entries are generally not unique.) Then\nthese set operations are available ("other" refers either to another\nview or a set):\n\ndictview & other\n\n Return the intersection of the dictview and the other object as a\n new set.\n\ndictview | other\n\n Return the union of the dictview and the other object as a new set.\n\ndictview - other\n\n Return the difference between the dictview and the other object\n (all elements in *dictview* that aren\'t in *other*) as a new set.\n\ndictview ^ other\n\n Return the symmetric difference (all elements either in *dictview*\n or *other*, but not in both) of the dictview and the other object\n as a new set.\n\nAn example of dictionary view usage:\n\n >>> dishes = {\'eggs\': 2, \'sausage\': 1, \'bacon\': 1, \'spam\': 500}\n >>> keys = dishes.viewkeys()\n >>> values = dishes.viewvalues()\n\n >>> # iteration\n >>> n = 0\n >>> for val in values:\n ... n += val\n >>> print(n)\n 504\n\n >>> # keys and values are iterated over in the same order\n >>> list(keys)\n [\'eggs\', \'bacon\', \'sausage\', \'spam\']\n >>> list(values)\n [2, 1, 1, 500]\n\n >>> # view objects are dynamic and reflect dict changes\n >>> del dishes[\'eggs\']\n >>> del dishes[\'sausage\']\n >>> list(keys)\n [\'spam\', \'bacon\']\n\n >>> # set operations\n >>> keys & {\'eggs\', \'bacon\', \'salad\'}\n {\'bacon\'}\n', - 'typesmethods': '\nMethods\n*******\n\nMethods are functions that are called using the attribute notation.\nThere are two flavors: built-in methods (such as ``append()`` on\nlists) and class instance methods. Built-in methods are described\nwith the types that support them.\n\nThe implementation adds two special read-only attributes to class\ninstance methods: ``m.im_self`` is the object on which the method\noperates, and ``m.im_func`` is the function implementing the method.\nCalling ``m(arg-1, arg-2, ..., arg-n)`` is completely equivalent to\ncalling ``m.im_func(m.im_self, arg-1, arg-2, ..., arg-n)``.\n\nClass instance methods are either *bound* or *unbound*, referring to\nwhether the method was accessed through an instance or a class,\nrespectively. When a method is unbound, its ``im_self`` attribute\nwill be ``None`` and if called, an explicit ``self`` object must be\npassed as the first argument. In this case, ``self`` must be an\ninstance of the unbound method\'s class (or a subclass of that class),\notherwise a ``TypeError`` is raised.\n\nLike function objects, methods objects support getting arbitrary\nattributes. However, since method attributes are actually stored on\nthe underlying function object (``meth.im_func``), setting method\nattributes on either bound or unbound methods is disallowed.\nAttempting to set an attribute on a method results in an\n``AttributeError`` being raised. In order to set a method attribute,\nyou need to explicitly set it on the underlying function object:\n\n >>> class C:\n ... def method(self):\n ... pass\n ...\n >>> c = C()\n >>> c.method.whoami = \'my name is method\' # can\'t set on the method\n Traceback (most recent call last):\n File "", line 1, in \n AttributeError: \'instancemethod\' object has no attribute \'whoami\'\n >>> c.method.im_func.whoami = \'my name is method\'\n >>> c.method.whoami\n \'my name is method\'\n\nSee *The standard type hierarchy* for more information.\n', - 'typesmodules': "\nModules\n*******\n\nThe only special operation on a module is attribute access:\n``m.name``, where *m* is a module and *name* accesses a name defined\nin *m*'s symbol table. Module attributes can be assigned to. (Note\nthat the ``import`` statement is not, strictly speaking, an operation\non a module object; ``import foo`` does not require a module object\nnamed *foo* to exist, rather it requires an (external) *definition*\nfor a module named *foo* somewhere.)\n\nA special attribute of every module is ``__dict__``. This is the\ndictionary containing the module's symbol table. Modifying this\ndictionary will actually change the module's symbol table, but direct\nassignment to the ``__dict__`` attribute is not possible (you can\nwrite ``m.__dict__['a'] = 1``, which defines ``m.a`` to be ``1``, but\nyou can't write ``m.__dict__ = {}``). Modifying ``__dict__`` directly\nis not recommended.\n\nModules built into the interpreter are written like this: ````. If loaded from a file, they are written as\n````.\n", - 'typesseq': '\nSequence Types --- ``str``, ``unicode``, ``list``, ``tuple``, ``bytearray``, ``buffer``, ``xrange``\n***************************************************************************************************\n\nThere are seven sequence types: strings, Unicode strings, lists,\ntuples, bytearrays, buffers, and xrange objects.\n\nFor other containers see the built in ``dict`` and ``set`` classes,\nand the ``collections`` module.\n\nString literals are written in single or double quotes: ``\'xyzzy\'``,\n``"frobozz"``. See *String literals* for more about string literals.\nUnicode strings are much like strings, but are specified in the syntax\nusing a preceding ``\'u\'`` character: ``u\'abc\'``, ``u"def"``. In\naddition to the functionality described here, there are also string-\nspecific methods described in the *String Methods* section. Lists are\nconstructed with square brackets, separating items with commas: ``[a,\nb, c]``. Tuples are constructed by the comma operator (not within\nsquare brackets), with or without enclosing parentheses, but an empty\ntuple must have the enclosing parentheses, such as ``a, b, c`` or\n``()``. A single item tuple must have a trailing comma, such as\n``(d,)``.\n\nBytearray objects are created with the built-in function\n``bytearray()``.\n\nBuffer objects are not directly supported by Python syntax, but can be\ncreated by calling the built-in function ``buffer()``. They don\'t\nsupport concatenation or repetition.\n\nObjects of type xrange are similar to buffers in that there is no\nspecific syntax to create them, but they are created using the\n``xrange()`` function. They don\'t support slicing, concatenation or\nrepetition, and using ``in``, ``not in``, ``min()`` or ``max()`` on\nthem is inefficient.\n\nMost sequence types support the following operations. The ``in`` and\n``not in`` operations have the same priorities as the comparison\noperations. The ``+`` and ``*`` operations have the same priority as\nthe corresponding numeric operations. [3] Additional methods are\nprovided for *Mutable Sequence Types*.\n\nThis table lists the sequence operations sorted in ascending priority\n(operations in the same box have the same priority). In the table,\n*s* and *t* are sequences of the same type; *n*, *i* and *j* are\nintegers:\n\n+--------------------+----------------------------------+------------+\n| Operation | Result | Notes |\n+====================+==================================+============+\n| ``x in s`` | ``True`` if an item of *s* is | (1) |\n| | equal to *x*, else ``False`` | |\n+--------------------+----------------------------------+------------+\n| ``x not in s`` | ``False`` if an item of *s* is | (1) |\n| | equal to *x*, else ``True`` | |\n+--------------------+----------------------------------+------------+\n| ``s + t`` | the concatenation of *s* and *t* | (6) |\n+--------------------+----------------------------------+------------+\n| ``s * n, n * s`` | *n* shallow copies of *s* | (2) |\n| | concatenated | |\n+--------------------+----------------------------------+------------+\n| ``s[i]`` | *i*th item of *s*, origin 0 | (3) |\n+--------------------+----------------------------------+------------+\n| ``s[i:j]`` | slice of *s* from *i* to *j* | (3)(4) |\n+--------------------+----------------------------------+------------+\n| ``s[i:j:k]`` | slice of *s* from *i* to *j* | (3)(5) |\n| | with step *k* | |\n+--------------------+----------------------------------+------------+\n| ``len(s)`` | length of *s* | |\n+--------------------+----------------------------------+------------+\n| ``min(s)`` | smallest item of *s* | |\n+--------------------+----------------------------------+------------+\n| ``max(s)`` | largest item of *s* | |\n+--------------------+----------------------------------+------------+\n| ``s.index(i)`` | index of the first occurrence of | |\n| | *i* in *s* | |\n+--------------------+----------------------------------+------------+\n| ``s.count(i)`` | total number of occurrences of | |\n| | *i* in *s* | |\n+--------------------+----------------------------------+------------+\n\nSequence types also support comparisons. In particular, tuples and\nlists are compared lexicographically by comparing corresponding\nelements. This means that to compare equal, every element must compare\nequal and the two sequences must be of the same type and have the same\nlength. (For full details see *Comparisons* in the language\nreference.)\n\nNotes:\n\n1. When *s* is a string or Unicode string object the ``in`` and ``not\n in`` operations act like a substring test. In Python versions\n before 2.3, *x* had to be a string of length 1. In Python 2.3 and\n beyond, *x* may be a string of any length.\n\n2. Values of *n* less than ``0`` are treated as ``0`` (which yields an\n empty sequence of the same type as *s*). Note also that the copies\n are shallow; nested structures are not copied. This often haunts\n new Python programmers; consider:\n\n >>> lists = [[]] * 3\n >>> lists\n [[], [], []]\n >>> lists[0].append(3)\n >>> lists\n [[3], [3], [3]]\n\n What has happened is that ``[[]]`` is a one-element list containing\n an empty list, so all three elements of ``[[]] * 3`` are (pointers\n to) this single empty list. Modifying any of the elements of\n ``lists`` modifies this single list. You can create a list of\n different lists this way:\n\n >>> lists = [[] for i in range(3)]\n >>> lists[0].append(3)\n >>> lists[1].append(5)\n >>> lists[2].append(7)\n >>> lists\n [[3], [5], [7]]\n\n3. If *i* or *j* is negative, the index is relative to the end of the\n string: ``len(s) + i`` or ``len(s) + j`` is substituted. But note\n that ``-0`` is still ``0``.\n\n4. The slice of *s* from *i* to *j* is defined as the sequence of\n items with index *k* such that ``i <= k < j``. If *i* or *j* is\n greater than ``len(s)``, use ``len(s)``. If *i* is omitted or\n ``None``, use ``0``. If *j* is omitted or ``None``, use\n ``len(s)``. If *i* is greater than or equal to *j*, the slice is\n empty.\n\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\n sequence of items with index ``x = i + n*k`` such that ``0 <= n <\n (j-i)/k``. In other words, the indices are ``i``, ``i+k``,\n ``i+2*k``, ``i+3*k`` and so on, stopping when *j* is reached (but\n never including *j*). If *i* or *j* is greater than ``len(s)``,\n use ``len(s)``. If *i* or *j* are omitted or ``None``, they become\n "end" values (which end depends on the sign of *k*). Note, *k*\n cannot be zero. If *k* is ``None``, it is treated like ``1``.\n\n6. **CPython implementation detail:** If *s* and *t* are both strings,\n some Python implementations such as CPython can usually perform an\n in-place optimization for assignments of the form ``s = s + t`` or\n ``s += t``. When applicable, this optimization makes quadratic\n run-time much less likely. This optimization is both version and\n implementation dependent. For performance sensitive code, it is\n preferable to use the ``str.join()`` method which assures\n consistent linear concatenation performance across versions and\n implementations.\n\n Changed in version 2.4: Formerly, string concatenation never\n occurred in-place.\n\n\nString Methods\n==============\n\nBelow are listed the string methods which both 8-bit strings and\nUnicode objects support. Some of them are also available on\n``bytearray`` objects.\n\nIn addition, Python\'s strings support the sequence type methods\ndescribed in the *Sequence Types --- str, unicode, list, tuple,\nbytearray, buffer, xrange* section. To output formatted strings use\ntemplate strings or the ``%`` operator described in the *String\nFormatting Operations* section. Also, see the ``re`` module for string\nfunctions based on regular expressions.\n\nstr.capitalize()\n\n Return a copy of the string with its first character capitalized\n and the rest lowercased.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.center(width[, fillchar])\n\n Return centered in a string of length *width*. Padding is done\n using the specified *fillchar* (default is a space).\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.count(sub[, start[, end]])\n\n Return the number of non-overlapping occurrences of substring *sub*\n in the range [*start*, *end*]. Optional arguments *start* and\n *end* are interpreted as in slice notation.\n\nstr.decode([encoding[, errors]])\n\n Decodes the string using the codec registered for *encoding*.\n *encoding* defaults to the default string encoding. *errors* may\n be given to set a different error handling scheme. The default is\n ``\'strict\'``, meaning that encoding errors raise ``UnicodeError``.\n Other possible values are ``\'ignore\'``, ``\'replace\'`` and any other\n name registered via ``codecs.register_error()``, see section *Codec\n Base Classes*.\n\n New in version 2.2.\n\n Changed in version 2.3: Support for other error handling schemes\n added.\n\n Changed in version 2.7: Support for keyword arguments added.\n\nstr.encode([encoding[, errors]])\n\n Return an encoded version of the string. Default encoding is the\n current default string encoding. *errors* may be given to set a\n different error handling scheme. The default for *errors* is\n ``\'strict\'``, meaning that encoding errors raise a\n ``UnicodeError``. Other possible values are ``\'ignore\'``,\n ``\'replace\'``, ``\'xmlcharrefreplace\'``, ``\'backslashreplace\'`` and\n any other name registered via ``codecs.register_error()``, see\n section *Codec Base Classes*. For a list of possible encodings, see\n section *Standard Encodings*.\n\n New in version 2.0.\n\n Changed in version 2.3: Support for ``\'xmlcharrefreplace\'`` and\n ``\'backslashreplace\'`` and other error handling schemes added.\n\n Changed in version 2.7: Support for keyword arguments added.\n\nstr.endswith(suffix[, start[, end]])\n\n Return ``True`` if the string ends with the specified *suffix*,\n otherwise return ``False``. *suffix* can also be a tuple of\n suffixes to look for. With optional *start*, test beginning at\n that position. With optional *end*, stop comparing at that\n position.\n\n Changed in version 2.5: Accept tuples as *suffix*.\n\nstr.expandtabs([tabsize])\n\n Return a copy of the string where all tab characters are replaced\n by one or more spaces, depending on the current column and the\n given tab size. Tab positions occur every *tabsize* characters\n (default is 8, giving tab positions at columns 0, 8, 16 and so on).\n To expand the string, the current column is set to zero and the\n string is examined character by character. If the character is a\n tab (``\\t``), one or more space characters are inserted in the\n result until the current column is equal to the next tab position.\n (The tab character itself is not copied.) If the character is a\n newline (``\\n``) or return (``\\r``), it is copied and the current\n column is reset to zero. Any other character is copied unchanged\n and the current column is incremented by one regardless of how the\n character is represented when printed.\n\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs()\n \'01 012 0123 01234\'\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs(4)\n \'01 012 0123 01234\'\n\nstr.find(sub[, start[, end]])\n\n Return the lowest index in the string where substring *sub* is\n found, such that *sub* is contained in the slice ``s[start:end]``.\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return ``-1`` if *sub* is not found.\n\n Note: The ``find()`` method should be used only if you need to know the\n position of *sub*. To check if *sub* is a substring or not, use\n the ``in`` operator:\n\n >>> \'Py\' in \'Python\'\n True\n\nstr.format(*args, **kwargs)\n\n Perform a string formatting operation. The string on which this\n method is called can contain literal text or replacement fields\n delimited by braces ``{}``. Each replacement field contains either\n the numeric index of a positional argument, or the name of a\n keyword argument. Returns a copy of the string where each\n replacement field is replaced with the string value of the\n corresponding argument.\n\n >>> "The sum of 1 + 2 is {0}".format(1+2)\n \'The sum of 1 + 2 is 3\'\n\n See *Format String Syntax* for a description of the various\n formatting options that can be specified in format strings.\n\n This method of string formatting is the new standard in Python 3,\n and should be preferred to the ``%`` formatting described in\n *String Formatting Operations* in new code.\n\n New in version 2.6.\n\nstr.index(sub[, start[, end]])\n\n Like ``find()``, but raise ``ValueError`` when the substring is not\n found.\n\nstr.isalnum()\n\n Return true if all characters in the string are alphanumeric and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isalpha()\n\n Return true if all characters in the string are alphabetic and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isdigit()\n\n Return true if all characters in the string are digits and there is\n at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.islower()\n\n Return true if all cased characters [4] in the string are lowercase\n and there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isspace()\n\n Return true if there are only whitespace characters in the string\n and there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.istitle()\n\n Return true if the string is a titlecased string and there is at\n least one character, for example uppercase characters may only\n follow uncased characters and lowercase characters only cased ones.\n Return false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isupper()\n\n Return true if all cased characters [4] in the string are uppercase\n and there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.join(iterable)\n\n Return a string which is the concatenation of the strings in the\n *iterable* *iterable*. The separator between elements is the\n string providing this method.\n\nstr.ljust(width[, fillchar])\n\n Return the string left justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than or\n equal to ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.lower()\n\n Return a copy of the string with all the cased characters [4]\n converted to lowercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.lstrip([chars])\n\n Return a copy of the string with leading characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a prefix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.lstrip()\n \'spacious \'\n >>> \'www.example.com\'.lstrip(\'cmowz.\')\n \'example.com\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.partition(sep)\n\n Split the string at the first occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing the string itself, followed by\n two empty strings.\n\n New in version 2.5.\n\nstr.replace(old, new[, count])\n\n Return a copy of the string with all occurrences of substring *old*\n replaced by *new*. If the optional argument *count* is given, only\n the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n Return the highest index in the string where substring *sub* is\n found, such that *sub* is contained within ``s[start:end]``.\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return ``-1`` on failure.\n\nstr.rindex(sub[, start[, end]])\n\n Like ``rfind()`` but raises ``ValueError`` when the substring *sub*\n is not found.\n\nstr.rjust(width[, fillchar])\n\n Return the string right justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than or\n equal to ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.rpartition(sep)\n\n Split the string at the last occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing two empty strings, followed by\n the string itself.\n\n New in version 2.5.\n\nstr.rsplit([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n are done, the *rightmost* ones. If *sep* is not specified or\n ``None``, any whitespace string is a separator. Except for\n splitting from the right, ``rsplit()`` behaves like ``split()``\n which is described in detail below.\n\n New in version 2.4.\n\nstr.rstrip([chars])\n\n Return a copy of the string with trailing characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a suffix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.rstrip()\n \' spacious\'\n >>> \'mississippi\'.rstrip(\'ipz\')\n \'mississ\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.split([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit*\n splits are done (thus, the list will have at most ``maxsplit+1``\n elements). If *maxsplit* is not specified or ``-1``, then there is\n no limit on the number of splits (all possible splits are made).\n\n If *sep* is given, consecutive delimiters are not grouped together\n and are deemed to delimit empty strings (for example,\n ``\'1,,2\'.split(\',\')`` returns ``[\'1\', \'\', \'2\']``). The *sep*\n argument may consist of multiple characters (for example,\n ``\'1<>2<>3\'.split(\'<>\')`` returns ``[\'1\', \'2\', \'3\']``). Splitting\n an empty string with a specified separator returns ``[\'\']``.\n\n If *sep* is not specified or is ``None``, a different splitting\n algorithm is applied: runs of consecutive whitespace are regarded\n as a single separator, and the result will contain no empty strings\n at the start or end if the string has leading or trailing\n whitespace. Consequently, splitting an empty string or a string\n consisting of just whitespace with a ``None`` separator returns\n ``[]``.\n\n For example, ``\' 1 2 3 \'.split()`` returns ``[\'1\', \'2\', \'3\']``,\n and ``\' 1 2 3 \'.split(None, 1)`` returns ``[\'1\', \'2 3 \']``.\n\nstr.splitlines([keepends])\n\n Return a list of the lines in the string, breaking at line\n boundaries. This method uses the *universal newlines* approach to\n splitting lines. Line breaks are not included in the resulting list\n unless *keepends* is given and true.\n\n For example, ``\'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines()`` returns\n ``[\'ab c\', \'\', \'de fg\', \'kl\']``, while the same call with\n ``splitlines(True)`` returns ``[\'ab c\\n\', \'\\n\', \'de fg\\r\',\n \'kl\\r\\n\']``.\n\n Unlike ``split()`` when a delimiter string *sep* is given, this\n method returns an empty list for the empty string, and a terminal\n line break does not result in an extra line.\n\nstr.startswith(prefix[, start[, end]])\n\n Return ``True`` if string starts with the *prefix*, otherwise\n return ``False``. *prefix* can also be a tuple of prefixes to look\n for. With optional *start*, test string beginning at that\n position. With optional *end*, stop comparing string at that\n position.\n\n Changed in version 2.5: Accept tuples as *prefix*.\n\nstr.strip([chars])\n\n Return a copy of the string with the leading and trailing\n characters removed. The *chars* argument is a string specifying the\n set of characters to be removed. If omitted or ``None``, the\n *chars* argument defaults to removing whitespace. The *chars*\n argument is not a prefix or suffix; rather, all combinations of its\n values are stripped:\n\n >>> \' spacious \'.strip()\n \'spacious\'\n >>> \'www.example.com\'.strip(\'cmowz.\')\n \'example\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.swapcase()\n\n Return a copy of the string with uppercase characters converted to\n lowercase and vice versa.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.title()\n\n Return a titlecased version of the string where words start with an\n uppercase character and the remaining characters are lowercase.\n\n The algorithm uses a simple language-independent definition of a\n word as groups of consecutive letters. The definition works in\n many contexts but it means that apostrophes in contractions and\n possessives form word boundaries, which may not be the desired\n result:\n\n >>> "they\'re bill\'s friends from the UK".title()\n "They\'Re Bill\'S Friends From The Uk"\n\n A workaround for apostrophes can be constructed using regular\n expressions:\n\n >>> import re\n >>> def titlecase(s):\n ... return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n ... lambda mo: mo.group(0)[0].upper() +\n ... mo.group(0)[1:].lower(),\n ... s)\n ...\n >>> titlecase("they\'re bill\'s friends.")\n "They\'re Bill\'s Friends."\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.translate(table[, deletechars])\n\n Return a copy of the string where all characters occurring in the\n optional argument *deletechars* are removed, and the remaining\n characters have been mapped through the given translation table,\n which must be a string of length 256.\n\n You can use the ``maketrans()`` helper function in the ``string``\n module to create a translation table. For string objects, set the\n *table* argument to ``None`` for translations that only delete\n characters:\n\n >>> \'read this short text\'.translate(None, \'aeiou\')\n \'rd ths shrt txt\'\n\n New in version 2.6: Support for a ``None`` *table* argument.\n\n For Unicode objects, the ``translate()`` method does not accept the\n optional *deletechars* argument. Instead, it returns a copy of the\n *s* where all characters have been mapped through the given\n translation table which must be a mapping of Unicode ordinals to\n Unicode ordinals, Unicode strings or ``None``. Unmapped characters\n are left untouched. Characters mapped to ``None`` are deleted.\n Note, a more flexible approach is to create a custom character\n mapping codec using the ``codecs`` module (see ``encodings.cp1251``\n for an example).\n\nstr.upper()\n\n Return a copy of the string with all the cased characters [4]\n converted to uppercase. Note that ``str.upper().isupper()`` might\n be ``False`` if ``s`` contains uncased characters or if the Unicode\n category of the resulting character(s) is not "Lu" (Letter,\n uppercase), but e.g. "Lt" (Letter, titlecase).\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.zfill(width)\n\n Return the numeric string left filled with zeros in a string of\n length *width*. A sign prefix is handled correctly. The original\n string is returned if *width* is less than or equal to ``len(s)``.\n\n New in version 2.2.2.\n\nThe following methods are present only on unicode objects:\n\nunicode.isnumeric()\n\n Return ``True`` if there are only numeric characters in S,\n ``False`` otherwise. Numeric characters include digit characters,\n and all characters that have the Unicode numeric value property,\n e.g. U+2155, VULGAR FRACTION ONE FIFTH.\n\nunicode.isdecimal()\n\n Return ``True`` if there are only decimal characters in S,\n ``False`` otherwise. Decimal characters include digit characters,\n and all characters that can be used to form decimal-radix numbers,\n e.g. U+0660, ARABIC-INDIC DIGIT ZERO.\n\n\nString Formatting Operations\n============================\n\nString and Unicode objects have one unique built-in operation: the\n``%`` operator (modulo). This is also known as the string\n*formatting* or *interpolation* operator. Given ``format % values``\n(where *format* is a string or Unicode object), ``%`` conversion\nspecifications in *format* are replaced with zero or more elements of\n*values*. The effect is similar to the using ``sprintf()`` in the C\nlanguage. If *format* is a Unicode object, or if any of the objects\nbeing converted using the ``%s`` conversion are Unicode objects, the\nresult will also be a Unicode object.\n\nIf *format* requires a single argument, *values* may be a single non-\ntuple object. [5] Otherwise, *values* must be a tuple with exactly\nthe number of items specified by the format string, or a single\nmapping object (for example, a dictionary).\n\nA conversion specifier contains two or more characters and has the\nfollowing components, which must occur in this order:\n\n1. The ``\'%\'`` character, which marks the start of the specifier.\n\n2. Mapping key (optional), consisting of a parenthesised sequence of\n characters (for example, ``(somename)``).\n\n3. Conversion flags (optional), which affect the result of some\n conversion types.\n\n4. Minimum field width (optional). If specified as an ``\'*\'``\n (asterisk), the actual width is read from the next element of the\n tuple in *values*, and the object to convert comes after the\n minimum field width and optional precision.\n\n5. Precision (optional), given as a ``\'.\'`` (dot) followed by the\n precision. If specified as ``\'*\'`` (an asterisk), the actual width\n is read from the next element of the tuple in *values*, and the\n value to convert comes after the precision.\n\n6. Length modifier (optional).\n\n7. Conversion type.\n\nWhen the right argument is a dictionary (or other mapping type), then\nthe formats in the string *must* include a parenthesised mapping key\ninto that dictionary inserted immediately after the ``\'%\'`` character.\nThe mapping key selects the value to be formatted from the mapping.\nFor example:\n\n>>> print \'%(language)s has %(number)03d quote types.\' % \\\n... {"language": "Python", "number": 2}\nPython has 002 quote types.\n\nIn this case no ``*`` specifiers may occur in a format (since they\nrequire a sequential parameter list).\n\nThe conversion flag characters are:\n\n+-----------+-----------------------------------------------------------------------+\n| Flag | Meaning |\n+===========+=======================================================================+\n| ``\'#\'`` | The value conversion will use the "alternate form" (where defined |\n| | below). |\n+-----------+-----------------------------------------------------------------------+\n| ``\'0\'`` | The conversion will be zero padded for numeric values. |\n+-----------+-----------------------------------------------------------------------+\n| ``\'-\'`` | The converted value is left adjusted (overrides the ``\'0\'`` |\n| | conversion if both are given). |\n+-----------+-----------------------------------------------------------------------+\n| ``\' \'`` | (a space) A blank should be left before a positive number (or empty |\n| | string) produced by a signed conversion. |\n+-----------+-----------------------------------------------------------------------+\n| ``\'+\'`` | A sign character (``\'+\'`` or ``\'-\'``) will precede the conversion |\n| | (overrides a "space" flag). |\n+-----------+-----------------------------------------------------------------------+\n\nA length modifier (``h``, ``l``, or ``L``) may be present, but is\nignored as it is not necessary for Python -- so e.g. ``%ld`` is\nidentical to ``%d``.\n\nThe conversion types are:\n\n+--------------+-------------------------------------------------------+---------+\n| Conversion | Meaning | Notes |\n+==============+=======================================================+=========+\n| ``\'d\'`` | Signed integer decimal. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'i\'`` | Signed integer decimal. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'o\'`` | Signed octal value. | (1) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'u\'`` | Obsolete type -- it is identical to ``\'d\'``. | (7) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'x\'`` | Signed hexadecimal (lowercase). | (2) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'X\'`` | Signed hexadecimal (uppercase). | (2) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'e\'`` | Floating point exponential format (lowercase). | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'E\'`` | Floating point exponential format (uppercase). | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'f\'`` | Floating point decimal format. | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'F\'`` | Floating point decimal format. | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'g\'`` | Floating point format. Uses lowercase exponential | (4) |\n| | format if exponent is less than -4 or not less than | |\n| | precision, decimal format otherwise. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'G\'`` | Floating point format. Uses uppercase exponential | (4) |\n| | format if exponent is less than -4 or not less than | |\n| | precision, decimal format otherwise. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'c\'`` | Single character (accepts integer or single character | |\n| | string). | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'r\'`` | String (converts any Python object using *repr()*). | (5) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'s\'`` | String (converts any Python object using ``str()``). | (6) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'%\'`` | No argument is converted, results in a ``\'%\'`` | |\n| | character in the result. | |\n+--------------+-------------------------------------------------------+---------+\n\nNotes:\n\n1. The alternate form causes a leading zero (``\'0\'``) to be inserted\n between left-hand padding and the formatting of the number if the\n leading character of the result is not already a zero.\n\n2. The alternate form causes a leading ``\'0x\'`` or ``\'0X\'`` (depending\n on whether the ``\'x\'`` or ``\'X\'`` format was used) to be inserted\n between left-hand padding and the formatting of the number if the\n leading character of the result is not already a zero.\n\n3. The alternate form causes the result to always contain a decimal\n point, even if no digits follow it.\n\n The precision determines the number of digits after the decimal\n point and defaults to 6.\n\n4. The alternate form causes the result to always contain a decimal\n point, and trailing zeroes are not removed as they would otherwise\n be.\n\n The precision determines the number of significant digits before\n and after the decimal point and defaults to 6.\n\n5. The ``%r`` conversion was added in Python 2.0.\n\n The precision determines the maximal number of characters used.\n\n6. If the object or format provided is a ``unicode`` string, the\n resulting string will also be ``unicode``.\n\n The precision determines the maximal number of characters used.\n\n7. See **PEP 237**.\n\nSince Python strings have an explicit length, ``%s`` conversions do\nnot assume that ``\'\\0\'`` is the end of the string.\n\nChanged in version 2.7: ``%f`` conversions for numbers whose absolute\nvalue is over 1e50 are no longer replaced by ``%g`` conversions.\n\nAdditional string operations are defined in standard modules\n``string`` and ``re``.\n\n\nXRange Type\n===========\n\nThe ``xrange`` type is an immutable sequence which is commonly used\nfor looping. The advantage of the ``xrange`` type is that an\n``xrange`` object will always take the same amount of memory, no\nmatter the size of the range it represents. There are no consistent\nperformance advantages.\n\nXRange objects have very little behavior: they only support indexing,\niteration, and the ``len()`` function.\n\n\nMutable Sequence Types\n======================\n\nList and ``bytearray`` objects support additional operations that\nallow in-place modification of the object. Other mutable sequence\ntypes (when added to the language) should also support these\noperations. Strings and tuples are immutable sequence types: such\nobjects cannot be modified once created. The following operations are\ndefined on mutable sequence types (where *x* is an arbitrary object):\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| ``s[i] = x`` | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j] = t`` | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j]`` | same as ``s[i:j] = []`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j:k] = t`` | the elements of ``s[i:j:k]`` are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j:k]`` | removes the elements of | |\n| | ``s[i:j:k]`` from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.append(x)`` | same as ``s[len(s):len(s)] = | (2) |\n| | [x]`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.extend(x)`` | same as ``s[len(s):len(s)] = x`` | (3) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.count(x)`` | return number of *i*\'s for which | |\n| | ``s[i] == x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.index(x[, i[, j]])`` | return smallest *k* such that | (4) |\n| | ``s[k] == x`` and ``i <= k < j`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.insert(i, x)`` | same as ``s[i:i] = [x]`` | (5) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.pop([i])`` | same as ``x = s[i]; del s[i]; | (6) |\n| | return x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.remove(x)`` | same as ``del s[s.index(x)]`` | (4) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.reverse()`` | reverses the items of *s* in | (7) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.sort([cmp[, key[, | sort the items of *s* in place | (7)(8)(9)(10) |\n| reverse]]])`` | | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The C implementation of Python has historically accepted multiple\n parameters and implicitly joined them into a tuple; this no longer\n works in Python 2.0. Use of this misfeature has been deprecated\n since Python 1.4.\n\n3. *x* can be any iterable object.\n\n4. Raises ``ValueError`` when *x* is not found in *s*. When a negative\n index is passed as the second or third parameter to the ``index()``\n method, the list length is added, as for slice indices. If it is\n still negative, it is truncated to zero, as for slice indices.\n\n Changed in version 2.3: Previously, ``index()`` didn\'t have\n arguments for specifying start and stop positions.\n\n5. When a negative index is passed as the first parameter to the\n ``insert()`` method, the list length is added, as for slice\n indices. If it is still negative, it is truncated to zero, as for\n slice indices.\n\n Changed in version 2.3: Previously, all negative indices were\n truncated to zero.\n\n6. The ``pop()`` method is only supported by the list and array types.\n The optional argument *i* defaults to ``-1``, so that by default\n the last item is removed and returned.\n\n7. The ``sort()`` and ``reverse()`` methods modify the list in place\n for economy of space when sorting or reversing a large list. To\n remind you that they operate by side effect, they don\'t return the\n sorted or reversed list.\n\n8. The ``sort()`` method takes optional arguments for controlling the\n comparisons.\n\n *cmp* specifies a custom comparison function of two arguments (list\n items) which should return a negative, zero or positive number\n depending on whether the first argument is considered smaller than,\n equal to, or larger than the second argument: ``cmp=lambda x,y:\n cmp(x.lower(), y.lower())``. The default value is ``None``.\n\n *key* specifies a function of one argument that is used to extract\n a comparison key from each list element: ``key=str.lower``. The\n default value is ``None``.\n\n *reverse* is a boolean value. If set to ``True``, then the list\n elements are sorted as if each comparison were reversed.\n\n In general, the *key* and *reverse* conversion processes are much\n faster than specifying an equivalent *cmp* function. This is\n because *cmp* is called multiple times for each list element while\n *key* and *reverse* touch each element only once. Use\n ``functools.cmp_to_key()`` to convert an old-style *cmp* function\n to a *key* function.\n\n Changed in version 2.3: Support for ``None`` as an equivalent to\n omitting *cmp* was added.\n\n Changed in version 2.4: Support for *key* and *reverse* was added.\n\n9. Starting with Python 2.3, the ``sort()`` method is guaranteed to be\n stable. A sort is stable if it guarantees not to change the\n relative order of elements that compare equal --- this is helpful\n for sorting in multiple passes (for example, sort by department,\n then by salary grade).\n\n10. **CPython implementation detail:** While a list is being sorted,\n the effect of attempting to mutate, or even inspect, the list is\n undefined. The C implementation of Python 2.3 and newer makes the\n list appear empty for the duration, and raises ``ValueError`` if\n it can detect that the list has been mutated during a sort.\n', - 'typesseq-mutable': "\nMutable Sequence Types\n**********************\n\nList and ``bytearray`` objects support additional operations that\nallow in-place modification of the object. Other mutable sequence\ntypes (when added to the language) should also support these\noperations. Strings and tuples are immutable sequence types: such\nobjects cannot be modified once created. The following operations are\ndefined on mutable sequence types (where *x* is an arbitrary object):\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| ``s[i] = x`` | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j] = t`` | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j]`` | same as ``s[i:j] = []`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j:k] = t`` | the elements of ``s[i:j:k]`` are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j:k]`` | removes the elements of | |\n| | ``s[i:j:k]`` from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.append(x)`` | same as ``s[len(s):len(s)] = | (2) |\n| | [x]`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.extend(x)`` | same as ``s[len(s):len(s)] = x`` | (3) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.count(x)`` | return number of *i*'s for which | |\n| | ``s[i] == x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.index(x[, i[, j]])`` | return smallest *k* such that | (4) |\n| | ``s[k] == x`` and ``i <= k < j`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.insert(i, x)`` | same as ``s[i:i] = [x]`` | (5) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.pop([i])`` | same as ``x = s[i]; del s[i]; | (6) |\n| | return x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.remove(x)`` | same as ``del s[s.index(x)]`` | (4) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.reverse()`` | reverses the items of *s* in | (7) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.sort([cmp[, key[, | sort the items of *s* in place | (7)(8)(9)(10) |\n| reverse]]])`` | | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The C implementation of Python has historically accepted multiple\n parameters and implicitly joined them into a tuple; this no longer\n works in Python 2.0. Use of this misfeature has been deprecated\n since Python 1.4.\n\n3. *x* can be any iterable object.\n\n4. Raises ``ValueError`` when *x* is not found in *s*. When a negative\n index is passed as the second or third parameter to the ``index()``\n method, the list length is added, as for slice indices. If it is\n still negative, it is truncated to zero, as for slice indices.\n\n Changed in version 2.3: Previously, ``index()`` didn't have\n arguments for specifying start and stop positions.\n\n5. When a negative index is passed as the first parameter to the\n ``insert()`` method, the list length is added, as for slice\n indices. If it is still negative, it is truncated to zero, as for\n slice indices.\n\n Changed in version 2.3: Previously, all negative indices were\n truncated to zero.\n\n6. The ``pop()`` method is only supported by the list and array types.\n The optional argument *i* defaults to ``-1``, so that by default\n the last item is removed and returned.\n\n7. The ``sort()`` and ``reverse()`` methods modify the list in place\n for economy of space when sorting or reversing a large list. To\n remind you that they operate by side effect, they don't return the\n sorted or reversed list.\n\n8. The ``sort()`` method takes optional arguments for controlling the\n comparisons.\n\n *cmp* specifies a custom comparison function of two arguments (list\n items) which should return a negative, zero or positive number\n depending on whether the first argument is considered smaller than,\n equal to, or larger than the second argument: ``cmp=lambda x,y:\n cmp(x.lower(), y.lower())``. The default value is ``None``.\n\n *key* specifies a function of one argument that is used to extract\n a comparison key from each list element: ``key=str.lower``. The\n default value is ``None``.\n\n *reverse* is a boolean value. If set to ``True``, then the list\n elements are sorted as if each comparison were reversed.\n\n In general, the *key* and *reverse* conversion processes are much\n faster than specifying an equivalent *cmp* function. This is\n because *cmp* is called multiple times for each list element while\n *key* and *reverse* touch each element only once. Use\n ``functools.cmp_to_key()`` to convert an old-style *cmp* function\n to a *key* function.\n\n Changed in version 2.3: Support for ``None`` as an equivalent to\n omitting *cmp* was added.\n\n Changed in version 2.4: Support for *key* and *reverse* was added.\n\n9. Starting with Python 2.3, the ``sort()`` method is guaranteed to be\n stable. A sort is stable if it guarantees not to change the\n relative order of elements that compare equal --- this is helpful\n for sorting in multiple passes (for example, sort by department,\n then by salary grade).\n\n10. **CPython implementation detail:** While a list is being sorted,\n the effect of attempting to mutate, or even inspect, the list is\n undefined. The C implementation of Python 2.3 and newer makes the\n list appear empty for the duration, and raises ``ValueError`` if\n it can detect that the list has been mutated during a sort.\n", - 'unary': '\nUnary arithmetic and bitwise operations\n***************************************\n\nAll unary arithmetic and bitwise operations have the same priority:\n\n u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr\n\nThe unary ``-`` (minus) operator yields the negation of its numeric\nargument.\n\nThe unary ``+`` (plus) operator yields its numeric argument unchanged.\n\nThe unary ``~`` (invert) operator yields the bitwise inversion of its\nplain or long integer argument. The bitwise inversion of ``x`` is\ndefined as ``-(x+1)``. It only applies to integral numbers.\n\nIn all three cases, if the argument does not have the proper type, a\n``TypeError`` exception is raised.\n', - 'while': '\nThe ``while`` statement\n***********************\n\nThe ``while`` statement is used for repeated execution as long as an\nexpression is true:\n\n while_stmt ::= "while" expression ":" suite\n ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the ``else`` clause, if present, is\nexecuted and the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite. A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ngoes back to testing the expression.\n', - 'with': '\nThe ``with`` statement\n**********************\n\nNew in version 2.5.\n\nThe ``with`` statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common\n``try``...``except``...``finally`` usage patterns to be encapsulated\nfor convenient reuse.\n\n with_stmt ::= "with" with_item ("," with_item)* ":" suite\n with_item ::= expression ["as" target]\n\nThe execution of the ``with`` statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the ``with_item``)\n is evaluated to obtain a context manager.\n\n2. The context manager\'s ``__exit__()`` is loaded for later use.\n\n3. The context manager\'s ``__enter__()`` method is invoked.\n\n4. If a target was included in the ``with`` statement, the return\n value from ``__enter__()`` is assigned to it.\n\n Note: The ``with`` statement guarantees that if the ``__enter__()``\n method returns without an error, then ``__exit__()`` will always\n be called. Thus, if an error occurs during the assignment to the\n target list, it will be treated the same as an error occurring\n within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s ``__exit__()`` method is invoked. If an\n exception caused the suite to be exited, its type, value, and\n traceback are passed as arguments to ``__exit__()``. Otherwise,\n three ``None`` arguments are supplied.\n\n If the suite was exited due to an exception, and the return value\n from the ``__exit__()`` method was false, the exception is\n reraised. If the return value was true, the exception is\n suppressed, and execution continues with the statement following\n the ``with`` statement.\n\n If the suite was exited for any reason other than an exception, the\n return value from ``__exit__()`` is ignored, and execution proceeds\n at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple ``with`` statements were nested:\n\n with A() as a, B() as b:\n suite\n\nis equivalent to\n\n with A() as a:\n with B() as b:\n suite\n\nNote: In Python 2.5, the ``with`` statement is only allowed when the\n ``with_statement`` feature has been enabled. It is always enabled\n in Python 2.6.\n\nChanged in version 2.7: Support for multiple context expressions.\n\nSee also:\n\n **PEP 0343** - The "with" statement\n The specification, background, and examples for the Python\n ``with`` statement.\n', - 'yield': '\nThe ``yield`` statement\n***********************\n\n yield_stmt ::= yield_expression\n\nThe ``yield`` statement is only used when defining a generator\nfunction, and is only used in the body of the generator function.\nUsing a ``yield`` statement in a function definition is sufficient to\ncause that definition to create a generator function instead of a\nnormal function.\n\nWhen a generator function is called, it returns an iterator known as a\ngenerator iterator, or more commonly, a generator. The body of the\ngenerator function is executed by calling the generator\'s ``next()``\nmethod repeatedly until it raises an exception.\n\nWhen a ``yield`` statement is executed, the state of the generator is\nfrozen and the value of ``expression_list`` is returned to\n``next()``\'s caller. By "frozen" we mean that all local state is\nretained, including the current bindings of local variables, the\ninstruction pointer, and the internal evaluation stack: enough\ninformation is saved so that the next time ``next()`` is invoked, the\nfunction can proceed exactly as if the ``yield`` statement were just\nanother external call.\n\nAs of Python version 2.5, the ``yield`` statement is now allowed in\nthe ``try`` clause of a ``try`` ... ``finally`` construct. If the\ngenerator is not resumed before it is finalized (by reaching a zero\nreference count or by being garbage collected), the generator-\niterator\'s ``close()`` method will be called, allowing any pending\n``finally`` clauses to execute.\n\nFor full details of ``yield`` semantics, refer to the *Yield\nexpressions* section.\n\nNote: In Python 2.2, the ``yield`` statement was only allowed when the\n ``generators`` feature has been enabled. This ``__future__`` import\n statement was used to enable the feature:\n\n from __future__ import generators\n\nSee also:\n\n **PEP 0255** - Simple Generators\n The proposal for adding generators and the ``yield`` statement\n to Python.\n\n **PEP 0342** - Coroutines via Enhanced Generators\n The proposal that, among other generator enhancements, proposed\n allowing ``yield`` to appear inside a ``try`` ... ``finally``\n block.\n'} diff --git a/PythonLib/full/pyexpat.pyd b/PythonLib/full/pyexpat.pyd index 0e9e3e657997fffb769e1bfbec8a5bcb57653eae..40913199c52667f943ff2be56b1d9adb2751afae 100644 GIT binary patch literal 144384 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

COA}t61 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 diff --git a/PythonLib/full/_hashlib.pyd b/PythonLib/full/_hashlib.pyd index f4866a7c30b7f8a51aa462a840294433eb6c6cbd..2336e16a12b6f5c12a850edd082ff3823ab4b9c8 100644 GIT binary patch literal 1016832 zcmeFae|(hHl|TMWGD(JH!VEIOL4t%jXfV{G37RlK6U-z53Ctv9fuWe!`i4Af@GP```r6HGtYz{ zYy0`^{_%Z%1M~d2Kh8b(+;h)8_nvd_Q+eAKC0S7vGk(#iqIBR+f5qZ@>B}&p$4+^E ztn#}tuT1SQEqZ0@(!ibf=d8Z(-oL-^Yxm@Q{cGR&#=XIuzq>u>zR)*v?)*kh>5}T4 zd+uFz`*oR_=`IcQgU4O1^IlwdSpVJhhd&)I!23;q*njwXaewvj9C1H-IA5f@dvnR2sVzoMPKZ%*rs&+qoS<-ZibS5u`~!@_t@CPwgR3@f#1dct_$A2E{MqQJ*3r(>ME-m z%aWrgE3dn6)z^YwQt;G>D}u2Af96o8S_Sf>i%uy7!aU+l+sBu>QB)ruet-vWdo(z= z{aA1^tFctq2AWV%RWz&cyHt=PRuFKg4Q!N1$T)jEuF~R*q1I5J-ziW#aNvMHpeQzb zG;1b+u|Yy(D0mrv99>E+vjU~`XqE#}`JMIM(KNNi(o-fnE8AD!job$gfIii=Y?vKw zkG9P4vuJA+f9rSAWqlGm4V+l9l~p+W)!yi#ymR5b*5tR_qwD+X8C$ch26ksjkLL~$Q%*^NXMh_#gKbrNPXd-hxFz^%d<#zTlz|U+{fPhmVU_sq; zs!l)IEz*H+ zg{)UYjBf1Crh_M6xs9tpn67#__h3}R{-DP_Grkdm4WtVl_UAD@V3Sbg}9jQ zW3Tbo&WRFoVkNviqLm;M*XoJWfXCE85xPjnkI_j3>#oSOH>O4^lKFw_6a`EWew8?V zwS}dH*IA0!*Rf(}q-JLoT9?^aNe&1{>>wK39A08cVwbb|r69N0$J6(XQFuy@q9B7G z-5>{qCC;_89{ww$d*ui!oBv8Z@4Zvv-ZA(O8TRL#z~=d9@WeN+P!vgh!G9N^$Kw+( zMvtHdQ_y2K2uyquqsOaf6X;Q{C%!m6c7FK+^ss&Vbx`fEpvll)(B$JQk*A0MD{c|T zjaBFlk~YJjO?%YVb`$smjF>GM5qMt{PK(;wa}dnR&8)&%E96i^tnD`jB>nOaw-2qk zf%QgKxs*+%SvxzqdCr&?v$=L4$vktTiGp0V5@XQ(689VT9YIU5o(5`(c^ahAEphI) zcuU0k1FN)#PZmTx2fTqTkYQP>`KVl+I&Q@KpzJFZF~cpK%QJ^_;B#r35t@x9|Fl_6O&&Iy;8Jn_AC` zR(ENwTxn&)eh9$TX9R=G=CnZI(HKJ!wTOTq)IubqX;&!^{rN+UGb5f(zgG>7sG*(w z-|q!MJRsXnA4-qZj8p|Sm~8gI0noq;I-U@1?1GSTGtWq*X1FTQM^Vu%7wC#sL&N4$ zZpl6@tC+~06gVyuNg87C5RAkshpTHlAf6OH8EQAH+{)}jVo4j(%mS>!4}oEN{P_$|Y41%4~>TZLZ$zq|2Ujb9MIb@(;mSBT#n z{EG1_#jgUtMd}K`YI9K`xVhvlSKemG+e~>Ykhem4nfVW}%Oa1g|; z;y>Fp21B%_z{aTf(BDZay3g9$YBAS|{6tJqS(7W%_v*YHk}OtH1C7maUci(D?R z54ou(Rnf;p#YE4twXHysc!tGzYcxktzBjU2B=;pI|1uH)P%i<>-;bveAjA)4#t^Vl zg5L=Q_(I@?vaPj|HrD~~;Wv4eeOf&7p z;g3wA&k&PS?DjaolR37{RT$?*B@pa1Ekajna#{0w5b2~g2qQlm?4JP@Pq4{$2wuS^ z|0o}3@bAz=sm3N={;i!CVw0sSC7TEs4LS_J4x^GD7HKeieBK3N*o`nI=`b$SVT_@N zIJ5}euJUpAVp~<2jsITc?CT`7B9JqFT7yM*~XHup-fcrmGWT*&!UGo?Nb4R zZFV`R8|<|}!OuS+$B%!nmla5muP4_DrKL7fIpTxLPoq`Dv(alD-%eEp3X(9sof6|) ze$+6+g;E;C1fcSiUzYK}JV+MLAOuP_%Mx>qB%vEX)@!;!e-#K_{Q?+neNo-smb8HN z@eKPwWl`OhmPy+d(MV_sxDbTVQO_|2IWP`}&zPFyPz#a90QD@m-~Dn+c3>sKS*8Fq z4x^6_;~4eG$`N-aDQlstFue$$Gd0iAht3U&CH@krfj}S9iivOdTr~7rG>hXM{h|F) zL=WtBf7&vUWr>oK0zXMWXW(AHQN^b5vQAS-YK9|AFsM{+^jEQ(z0jmQTfBH3#M@4u z4rQd84eEntHkJ>jv7Y>BScxW1RAaM>b$=1V>2fxU#!{LmMc<$XjJ|=!uZN0l7*?fz z3BAN0UT0Q9qzn2%LZR(pl7#7fC=(h@PYH3Sf*CLdS1Y@mCQ^1WP}9UKt*2Z>hf|{s zz^RNT2YxX*peb|0pU|H$FOOy&6e^Kf^$Y{Tyy}Q&*c*5zN3p*^1@(AHAS%4_t7sw* zW+awy^N6xM=)@cyucPPa`JH-|1pES0&JJRB-s3qSz}!gsYK@ij^FSwB1=x>>;vvf9 z96{6Mz1!ws>A=S_3vp|Ne)So|Tg`zgqQ6v3?1^g0h0EJ_d%V2fOP5zF%PW@U{qoe` zRG!~Z-jPd}w@8*(AYJ7QanF{}HQE7nwKK>i+Hya78>VZ~~WfQ4Cwt^FZ{ zvsu)ki&BWILn{Nh1nQ0L^oA}jr1WzX#$PRjj)30C|A1NYcIpa-$loB6WlRG%F%?uG3!>LpK@`SEZqjP>X&MS5=9dMD$Uh+x()tnwMf8G*f2p83vLJem z6+~hDdwM~es378cS&)caBMPFxi`B@b7etIp1(nKz=rvXlh4E|kf~HbI#O|^n5t%6p zqQHw4^a64T(h8tFPxQ4sODEJ#HD1d%L@0xwojl`KeG_tggh z$jjD~Pe3TgmLP_qSJ1@GsbjJV7|_sAH1^ta4-$?ulD`T z6QmYaIgIs2hhHi%h!NPS`2*uv2Il_9)ClEfA5)&gwzdwG$;yi7Zou94?ZJGgj-jp_-r!`2WYq!vqSf+~K2DMlp{FJ`#CoQREhHULza%xS#)5o+pkB_t+8U)a!C4)2%j@w*7ESRsDn9-g5+cb!cE?iC z{y8!!J-?b-A)`VT^b|t!JGX3Fn(W>1$&DKyO9`SBS)Ha2^=f3J8h?ZdO;p3yb_B{f z>dcm4qSH?4y<*9Z#6nvK;$rYtTm)VL;BAV-Ya@7T2%i5ucmbLSRA*O(yUo>njpSx3 z$4hxChp`I%ifEwa{A){PlL?jpKcHdfp^;}phLmKhB{^z|OD)M&OJ=AgGu4s;wWLrj znWL5zt0kpsNrhTsR!b~uiB&DJt0fM##HpIFh}Ee0z5K^w0o!WSIY?DV&hPB@g*(kv z&~6-}E#pdw7{8YpnbA_s{up*E{#w=Z3$^l@U^$vQ()@I!@^{<@mIiyw3U?P&`}uby zgCoGjYMy3`9ng}0=M{PnC>*r0=4V*tFZdt9R?srW8<@7CT4!1#T^4AedRGy5^sb6* zwIWBYaH$o!YQ+q-Vy0SApjH&B6?4>zVzr`Ft*98aGNx8IRZDEW(dWV7{`8+&^&-`~h-EaWveQx;t=6@XmTX=N_KCC<@Fn7I=HMy)b^Poq(EE?#dVIj7K>}CxX!>8OuYtD=)V8`l0|3mc_R@* zgKz$v<^sfzH-%rM5G8mWtF-$fTd5|sRne`4vrLiYXD>&#ifn(Dh8pl~dE`Z+9q&e~ zMqVTmaT*UIFH(N~OL}alEZRKz$zRC!i5Ug%_ex&Zz%<3dd@~N_4tf*_3ot%j12CAH zL5^v*nHd_GF%_;c6?4W^STzPf+nPp+1f4YmM}_Aehv82NruU?X2jY~S7_~r<-0<8J zdYpJb9F(m#+yZ3xX>>{pp~G(s!;BA^*r0$S>E>uO8B_R4#6Uj_qRShMeK0n_)Q8za z0)F7%3v?umKR#Mr#gYxl@>uT>>+L?6meHNVe{cCOHV8`$sxq0`z-*VZI&1qeTiY_4 z8;^I7v$ZY86YOR(_y+)nv?=^)FCK=1U*WQEt2Dv-8ot^C)1 z%pA+HeyJ#@Au~{UbxNo*{1D>H+072jW7Tp8`)29xw~^unVcXjb{|XGy>U?yOP)^_k zBB~oxJ4$emEcqv1nOHLW9F|=g)wUy^k%{3xwqO-*cQLQM{V>q~CJOD?ir7HTm6`TP z#VJtIk_cpI&oC0Mp@fgc6Mlw-e;Sui&sr$|X)uFh-6=eLE;KFBj64G=fkw*uJv}Rt zXo&wrW*x|E?_56yscr2yW8l@O5X=xmuhx)htO8anav_ib3FD1#)F4T`Hkcpf4yy1u z*2iDKbfTf2buX7}%u5&_rKsvHC?!Q*YaN)e+k@R$b*C_XlHOc`H5Lp%RTPEAI;^<@GQy{`W^_J#BHI05UGmR-O|;dkP~_JOBhBc)J~9sO7#4+MQxC(fd9zW{gLzzdM#uX6LyGzOOD z2SQ(E#l)1>p>j)7C{?-*ko*Z=&5EfBr@(apz1oR*bLcYY@qhSdj7Q*$y%xTZ+HtL& z8kzqJ?I9&_3a`3_8beJ}%h5jI6UZ7nctf;6T;@Y5A$2r7w-2&Z31L{G2ciQ@_4Buv zV-DYe9;Wc|*9zVSG6%zRkBG#Vwa(jxC4nYnq5wV9ohxFQ-kvTp8AcebpxVTecnAf- z2&!2T|3zj4Pnp3^K<<*|oe@Ziru&ATG1$Wvn?bR8MPq}rYgrd}$V3}ZlLfIv|AeJM zFTb-^FmWw^CZ1-ROw-UUD&Jq0tK0bn`TB2+y>DBGn#26+-WOb7UF&_p`*(`HC*?r4 z%}!KPSLg6eA#etzGDZ@%6nW2uBB8xRDbkBbHkq=5ZF$vwfYS@WFKj>={QhpRq&kaY z)maq0oGYtQ5kae@P=-2-h{ktQAq5!At85%wV6F;|V_qxPS*tMd z6T%&XtC!rK8kH(3?GwlQ@JUOxuo&BK#OkQ1re{R09Og46i|DRdqLWbnJ!y$0Z%o1h zKBe6&(pt~!Q2#ISdxr26l$K>~k&SvW{3v;&NyE=|5&Xh)$q7yg-Lh>n?&u9u1J|I4 zz%M4kL&(%PCVEgr&=9GmMDL(1Bde{He0<pjM0xYiD-VJ!)}l-yo2NCOF0JoGA$;?DJ6^sk_t&T2 zVO@E94)NqYUEItL-gS69z2DWDncro^m)Z+Ha(@F9i2_sdOc#V#Y0WbsNn-uS2LguL zfY_kkw!1|`gyt26EJ3$WMg)NZC($JQNtMQzLd70fi3`8y9_s6k?UaYlgj%QN4kkf^ z)>?FYV6~wT*+emt>4}_ywT487X0K+G1wzMy4*p||Xd**T3WcH1E6YWjG#TpYbz!Ni6-;N$0M26RkubdteFab*6{07bS8`M^NWz7tf?ii55o z>i?u6Z6bk1dH;af-UX_kSl-VKFtqZpO16)G7%xtg^-Dv##Ii_0v0^iLI?jP8pZHmX z5{LHx;48Z5)a4n;&l*cze=Efxy&!??pW_324W()Px!S;=C4qf zh4Fy@9?Jl-g)1C#)Pdn`ga&*X5m=_^iu;2T0-qX?Oabe8FbB8$F`lr&o?^k{XfEid zr|$g%jQ*Jcn8xT?BrMr{C)t*%`s8F~9F%~skEa>2MF$|2_k!4_U^LWw(ik0EFpIy6 zfBmlWdO?~Ywbp<_cEi;-;u(?NzN63)^AEljCfEy6&(^jD#5PdxazhDmd@3z|z8C0( z=Tak@*kEWXq?TZ`W0<}^1 zV8JDXxrnXpFQ`gjfgz#ff^HO25U5NH*8w2T86X#(c*9;8_;(4o*N{+R+Knlz&_Z@E z!`k1jITN7H%~RC+kK6Ch<5mV?l4SR=Wc70!bccYjZ07r47_8p3+u+*~k)vWu?42^zmyX=!_(1uRBn`Y=3q^;t?o*Wi?a z)W{DA4W@N)Bt95V+#jB67m4W_%pDk`dxJ%p=z*$~)p zaaL`5yh0X$nYsGd!?YfvzuWO%5qmG%{4nukux_aB;a)tLf?s1hMUdb&cULgYcRpLf z3uUj_-2&_gq_x7@{h53YW)VazSDg+SSUKq4epnNX;}HdP@!-3ka-EemxJgy)fgTG zH0lzbVf9M2zF7Uy27>x@@3=i}0vJKTD2+D)LVxwk4GunpFF9xPuUpPT*+M?ng!3g(PQ>*Z$Q8`; zb6DH67Ssp&LwZlL3(`_G4P>av?6GGn5Uh^VD*8WCJ2(adWnIdmesD~)_^^GU(ZuIL z97CmwM<3vKK_Oyd_mx}h#1hLdi9L#yZmiG&a`z?DS3i&7~03Ui^b zoOogBvM}{>(0u}eMNyZFfd&Si$2M*RBVa+=(UY13oX`*x!6fQTF$Een<=8xV=t`C#;tPHp9EIyf0qKl zN62TMPYBh}eyqd6l5jH?c-^2{YELrJ6D|uFWm9{oyP@|v@I5U0 z|1Kh{yGI&EArA>|$R1f|YW+Y8j3wdM2FqFLt_sxyuZ7@Pbr(Em1keNRvIp+6 zAm+Rt*tSb>f{9f++V_Y4o;)A^fpC0sm*9wF!IGi2UDWQT;7z)?N%MUXX(Ip-7CjOG zJ)-AHx!xwhchb&AXOBtnTxT#xCy-1S;RhS}q&ws+_Kqw+zA2=fsC*su?>B{C~ zTO-XnKsSrpPG;PJG1%;oxJW6PyKTr^hjx-^R z-y&0B16KR9L}6i%tqK$)S){x;5+QRlzgi}WY^66AAz*0j)QAAVM7@AzGB#8&VW+L~ zd8=V%2rMGrrL7o$rge%Qh{}l9w8>K3wm))>HJlzf&=wn9B_ zob8Ri4y@61mdMhZ&bs%kNsE-;batOIyR0~T&fN4iOts|Tv7EQxpm{dD*?&8bB7N)= zVTUh-79AjqoS#pGVTuM}VF~4vPU`xRSb70{bx|ysf}b7G<6|>dV*>P7-iIW*j_0h4 z{zsgf1V3RjE=kGM&WBI`#H%?UWCO1lY=mJh&p z+Y`{4T2F2f;vqOT5?Kv`OST`lX4_+kL_?aR2M1E4Su3|-ukL;|5=0WXIM7uj=WQRx z$nJ`4B?xk=X&ifr&iza@bByFfFWR3&D^8@v%^^61Q2sI4Ypud&BzoY$RDlWt6H$TX zNLZU-Tw+V{E5-X#ms3(6*=c7_Hk+RpBM&DyjwK-3XZ&oL@+w0$37E{AatGN2_K|zzbW*oHXq2rgi7NmFiy4rYJp)R%g_JtG4&C1N8u!!9TJwP z4qbOlE&qj#09hPbc#QPofxpaS4VN36Z}8jEfKXVUCEP@Rgs{}rQH&}pVmj#E`k;W` z_}`BT5X}ZPRFxX3ri#K+rHy@9Bi}4^)$?Lt4t?x`F|kU4pJ>-r#6w$o328`L&f zEvy@|a7#=WCJ(!tM_R6mlsljTM=DHWHKN0ZLf9L8!Yo3B)>da?2Im#Nh{(! z*a~NczgvkLwXPg)deYAy0PPW|HJ5?Dvcci4J4(m@_t@U_^P8Ce0Bf}giX-V?YzsAP zc+nP%DN?#cI#o$2NqsOtSuoKgmUN3*rLFB<5J%33@{bLqYtwPef8}g)sPu7y^ti>= z{yY+@PHkSd;$dw%S@fiwF5VKGE|zH1#lLPMCg!f{laG^fqLuNa=rj@!#8`l|e8Kis zwe9f=yqiQNio_K&5LqPw!BE9^+TSi=7Ky5dQiZL&JG|;)%ejVnVOi9?7-H;pfS>&c zxV*R?m%c}F`5snt_^&qM@?0w}jxa7$w&3#l23)2+ zg3BQ69o$W?`{;EWCAk|l8{5{#(W-8EPfm3ezqLTRM)Zidj#bcUo&#x>=jqe{ek?n| zet-(2GESBR`)YXDzSiyy@3B|;IIY~m$_o^CQvSzc`G1g@-_K^Yp8IF;-1^*LNu=!T z+-*p?w%WF17kysh5TrBe?bB&5jV$o^9a|V7_;zzg(yv=5_3BUi({-Gb>KM{lMT}Jjlz$~o9 z7=r%5V705U;s?75D{)dUx5rj6n39kk@Dj||0-iC16)#Q5pq3=QqZ=f|6F$Ze_$4I9 z7cWbEAB~TNCD@a3g2AQJkD`a~f*Z5nfYylKDa1-lbcl!1_+y%5!odl#GRIUT;vZgV z`L9?cAP~KaEmwJTpUQB>iUj;mADmjU!jM6vUlC7_cUsQprReKq)tB#9vib2&CYRe9{i7?e4L){{~n^%9HtbZ-?!IH$gy20~loXcJhmHzZSf5 z6zYcr2tAqoc@(X*Wr+$D6^RN2ub-YJ@Sm>X4=BZ>@E-+5l#^JC(J6XDnHcg(d6s3f ztQ;6Lu$b`4d`$gR@rKoyF;EtvD?|rUm{YAADXJN`I;n z)0IwV^CcTxu!M$efrji14Ov&5b#ENax;k`ff{CO0p0O22lDpk0#H5&X*fwtA|^)5D3iD=#%v$FitgEJ03ZN$#$etJ?QBS>3&Gk)3a5){XFu z-Ov0M24`3}v&Wjfczw9Z1(ohvS}90= zIeaD^M?zTFUq*g_(xY&xD`(*6riP_rh9U%3F=4RV#8ZT&#t{caR^7tPX^MZ{h9?0vzhMYFVJ5pnkic9T>Qof{@hbRLH>WOV;V zrD(&$d3ngfy`3lulO!DN%Pi7WQ*ANB*0$Kn4=+F*Y4$K=+!Jf|JT!Y6n*Ay?JC6SW zgH?gSz9kr}*2)%;PE?MCSI8-=Vd{LoDUtwVmK2*hi{Ta|q^%2C)W+clS17@L&aS3G z8ip^qia_I=h&_o_G3gBhw>)a{%0YjGj?)?DmW9BawmaONfHrY!9Bpu`wN>^D4ehe? z(Z1M>e-zqc{ZX@j=mW8KXXD&mkM$m8#j1^{2M|qR#V%036BElwK|5Gb+3iMGc!4;Y|NKi> zzo5F>+FFS_>nxGVQ@()mHH-(IVM@$7Esnv%$uknjL2x5Uv@8b}zVnB0*i}(zxaD$) zOja|(%)j-42G%kV!5tcI>X$1h$O!h>Po5i66rR7N6K~*Ay&C8{Stj`}L&BQfmQXrq z;V*Bym?}f0s_UPNWIAbd`iO2Kd`^Tj$pv|?9uVU=86fC1t%cEe zU5<32R%a1@J;gbKTGv*HDQWvq^K|Jf&2v34*U)ewJ*5{sE_NjdeO73M%ey7Vt;=aR zZ@q=u^Sxo8e^+nNYUhg&MWeg;eRwLxQ@}YX(;mpirNguV?WAC%feg!yg`I@Z-jz#v zFQdGL_v6VzPtFjY&K*RK0)jFpmg9Nk2vktm(pcC}3CcQxa)5HIq}aP-u^TCe2y2Rk z1!G}tv9Of{Wg}tmFre&udJUeM2;OFb_e3mRA<~8S7R%tLV!=~Iuw_?(FfSzt9rQGt zo-71wCOs{qr>p6yk4nnMlfhge`geG46XYHAn?c*IGLvoBSn&Tba>=Ia+xy>|yaCan z8*#kFF0l$?-cIQu{;mqVg(j9dg<~>wJzJ#0#TUFKbPC-byDx4ss?FQu_4DcEX-7wN z;5^7L1>OOKfR?$uB(mgoK1Sw;vw<||&Z5$)*_E~Y+gR*@+-8HzAy8(00r8H3NAAg^ zZGi$>c;9sWQSg7qbd+z9h*Dlu=N~JY{3O+SYJmE@j^NF!BDefK4;!Cpa|Lyed?iLwCvtck8A2=5)WU@B93PcfQ%Bo2=mZv-(IO2S{(vE9^eB#V>rfmGn>cA|jd^N0_?1L(}=(DJV1(QKM_-kTug!j@5}eJ}^#)*eHk!O`Xjm`l)rp zD43S~`bjT~V7H{_6jM;jWK2x2Y`F{@Ot3y(G%S` zyqBfoT(5dFow!Hx8^FWO!%9yY;f^6p6hyhcg2@t=1Tz|wL>3?Im*Bs-9(*j5VEblg zD1}m{fO=qDI?1c%q^jHiyKM|C*@((8icz6BjKEaJQ#~%fM%l%JjKrOEa zoo+7WQfzIsejdozp%H009WcF(C<`h8mAjb5eWv+#e|xlP8Xl(75w``;0sD#3v2cD{ zZ+90q({SBmrWJn$tb-=y8p*wJ+9tTX)`9_&h z?7)KMa~NAIut89(LcniGJBHIqZ3e8b5Li2a^h_W>BF3 z;d+0ZWR5`?fP&kIfek_1o*MN|1U1BOAC-RlsPx-Mr57!4$S?fA4e#21tnD-@H}1*O zlWgCTSU%(zZGVJLg^3%+Y1OWJN39=*=RScvN)UcJ&~-hQ?er?tU!)hdR~3B}I?O2eU*VQ#V1=|TnHO~QNhxZtqD)dFt z(d(xIUqgMilRew;uGJ@$8l6VA?dXX(>f#CXgldGd0h-IhbEz$r;H_ABza4rMs4@j^ zGpxo=n_zJ+YBY-ykc7epp8juPji_TOM#bmIart=~7x*`@;-~lZ%e1^`sw%(G%oiH!?)zUki6lG<@MC53KkgN({> zo0`)wVaK$(8&h#XkNnQ<@40OD?Hrem6Sx>?NeRUGi4%RECQ{kj2dVV~K>+PZp&)cY z3<`yiwc4H;TU#H3Fy3yM*HUYHtQ#H+-as4DN9N?ip*dSfW!h^!!AsuP1@ax96Ig>o zMsjhQ93VXSCjmMFU>N6`o<4N?O$ghox~_V2;Ia+#W{1Yh6bF$4;qZ?`{>Iti{*B#QRYBE=5G5E1DhsKz8Xg!Uqeviwlg^KJkO4?if+pF;)a z(ov|kM>bHd)u!L|y_>XL+~`zCds?u*=hl4dUAjPIw$N+%x-i8$Yd@I7dZZq=iEqsHJyEm*K!>;n3= zo+KM@oP_?yQ_-v->Lupf%P^S=ND5Y>YY9hy$kq`|*@Qb0T-#>~JVBG@ln(MRYE&YT zVZ`GM43Vx15HX zLbJ>|hD&1wk`JnAC)^|Lgri?=CseTS0I7k86362<4Ua~9;0W~(i7P?wpvEUk*YjCg zq8PorzN)}`NY1+fws8WE>=w0mG$!MKIy}Y_Y7aPIm=bgrYyG;Gow;FudvuMHR>AWI zw`_8xZgSr6diqPnn9qkku3v83(WPyb77)-rB$Kd)>!hR zW&9}HL-%+sMgLokrQF}4??gOXFx62jx1d*F%MLasRq++Dqtn!+vk4PuN&{e1AqOW* zIVd_eHvjOYXe4w}dBir>5<~=w0etd50s7Eej)kMqP$oPa%3(Bv`drKk@nU5q(EhRI z-($sD8(4SgCa)0wTdXre&J_m8wk(br5Jy7LaSdzvXRm3BzqTAu+o6!m`v@X~Bw8Gj zoxRC=`Qw;GpZ*#C`?TlMTDi;!ud668I-^iGerq$47zxf>VfpjX}xPe4`8@ zqh}D>^udrqP9KN@pN6g@itu@$LEsreup|Z=^UNQyW7Hl)gYmYVdy@#xU88ZE4p0V`{wvtAj|0<0cP+a5(&8ET5R7or*x5 zLX$(|GAi+lFmvF5CpP?791HVutO9q-DX1f02pUZsuoBI!3@IdWFwadTrL?ZQ5n%lM zhvOlPusIyI&eu$|RGLZ%8yK8;($B6}XVzmaJ_WX8HOavJSU>k#R4k==t*Xz8Ge}gQ zop~Lq&w=weRG*W1vsGU<^X90&9OiYYJ{R-ms=i$2ouT?>Fz-y&HMLg6Qq@<=ycMdif_WFIzD3OIRefIOU8?$)GVe0gw~TpLsJ<1$(-c|=hF!UUz;{C8kltWxgWwmo2n$>@y=Hi3;yfB~kP{-M3nIn0o6bYw zD^3Ze8+D}PYGA>tpo2d!Yt<6boLb7A8{#RwR?LrI?m)k@gmO?i@SVu)m?-(;E7zE`$Q2vS%`MgnwIJ{+mWl?=gewVdsZw&X z7TU9%!e_h+s)XDBtMJ_px0@Kdj7cPtw~K4Ksa+S^|XS>xv@ z4IIM!3S+gE#%nCoAEp_JJ$&w5C|ewyH2TD(`y@OeZpA4EqZ9aK0y-#>ij+DB>H`wm z+I~iL02ys}qLG+2ovk1&kZVVBA<{ntdA?H((BhapM>n zHwIFKJrt9aP$il%SIpXZ#k)cmxq@_l({5U?4DXL(lKKoV0i$AbcOXI?gD4ss^w05a zJ$lCw%K$z&@L}2{l0QPp6Hbgu=J(0uqI&WD;-meG=;%SOD<+N);K;@J3rKqtYk7<7~%-cpUUN>OFCWigO87uK@&|mgvoiXQ6Wwy}8Es8LD@t@x4Ix z78>8@s9s%JM*Zk~MQ?>M9!D2?jqgiU?=s{23e~&P_`XW@2IBADKnFSzzx@#PYgE<0 zOT4!qCKo^{AAPJW7hP#4rWM#E4=q7>gh8lW$!bPmVyf~7W;VfdNMzjn3ITGGsw0>u zQ9G9UtG+_v4D2M1dB!o;-gu>PMVn<>pnYO$03J+^mMlZ*;{$sPY30f#1jIa6PPom` zaT9h}$OL>=K;l+wz-{n=z>Pos2D$}(Eo#qbYoVrJU#h;Q#QHudVP3Sp+97rSEa;1c zG8%76a-lx}YbQ1d(w=#_ID>#RTF(XL8e3%N2tdDVygE{G4X@d&^`+7DWW@$%BK|0m zomOw*aLWosG(>0|TU-cw;@~qnzW}ABM$48(%Z$!t$R93S5v|>g?x}>9gj?n)!39_W znW(pzz46Y#GlbNYniYYS&C%rbaALZ<^>p$O3^dhrEOqSTD~?ecp!m?_#&sQyqD{40 z*6@3~b&1i9Q{hDwAlyP%21qPRfLBM#ZjLNo%S+=)b>zkeXoyWLm#QyoGoFQ;Y^0P*}{)jF|$8XBOC{G-j1gi}sHZ1)$5B~EwoXZGmm*WcQ$Lv;qWCSoNbXe0oo zC2D1Y(8a*+BJ^d$S|(~Xd*gYu#g@pSfv*Vqjz~4~!t}Li2o7OI?zE2J_yBFl)5)gw zEUKXRHjiGx#>nEk_-kE;3X-06E3GGDguyD(d+^CZ!|LObPA?H}#Ry0?kdq>f?&>I# z#PSbcIR6C>Cex45Tm){ez$~N`L@C}*s{3|@Je4vD6|BACx^ja8$1^InCuI=V4fLK# zMfIeN;QAEaMem5OKOQd15LKkkwfPSK7 zLe!Ck!%}bx5S^sqcrhH#Pfr!=Nul&;CS`O9pr3YZDD8`dA|elRlU+V#dmn_mnz<8K zG=ZAcNe|e0FE*Y-JyElIMS=sk%9aC)&iuozb9L(3w(ePYm8>% zfn#5C3wY=9)!H;MYvz2FP$(nadD~10AaTbey@UkW+&#=tsq$!5lCevIBio zg#QZ^XMrBdPSa*%?vSPFlwSOJX_~>2DOGU{JU|M&&UAvp-iy<9VIqQ`er+{>-6U3S zytVvi)nkCP=swWIbdWFyQP;;rv&t`zjZd z3jGWIUg8k^1VB2!k-O*>26s_0KhoVrM>&6?OQHTy=JXZiD6B@$!p;pZJ^e%(&q#6) zR+ib|p>xdo`(^)WwMWeIW?jG>vKE!YnEQkNy60PK2C31N_UvoyipO((CW$pLK^$H66!i z2O)a9-o28<%vb9(y2Xkwvsdv~t`h1m8$Lg_7)O!*>f+JsEEfP7lUrM^C)Dx#8GgO^ z=^~%nvl55ZnSlv~p|7&BaH&qRwZBH>Ut@-YYxoRkuuIS&frM+L6*>S|v8CcrEfu*(`skR-n^Lj$pV*}orS+*T;^xE;D z2?06bGf8V)2!PG~!6XFOP~4jF2!P>zp)|ZV2+O|*(x&%tLK$h|1~z@O2n-_m@*j~aczDYYeUz6E70P-bmX?7zY9 zG=9@S3ZkDlM7XZM3sU<)c?zMyP| zk8E)c5tA2SlcI?8zL0}p?!r6Eq{O}#W>Ua-3Ybg*7$yu^nktWrJ z)8^a0e=BlW7N8n5D;qJDfogF2~eRKh6bNHQEPB_cf7&j9~M8xsFr7*5k!M{ zK%zGCUi*Tkud$^5IoDyTt$EJ{3?T_i^QfM-FmFg9Cglzo+HoGhLvZdYs<#HG6*bs{ zIlF0#(hCH67qKOugyYpz&qzsOJkd?Or#>0Z~QkgjT8)>A7#N8PXfz4R3Z)9;z9JFQI;6Q zWYU3I2Q?+tQXY;bxAed$0Bh%TkxzP_W6fvO(Q=3+)l5JYpYWw|Qq+MyRZsiNOHq1v zaH?9Ut~PrGNAV6cEL33xr(?%?C@sO4|BaHTD~-}n1~DMpmR#3B8lhyHa15WbycF}UZC_k1dS|L z?^*HwNaw3x3jgI2e@8Jh|NDjT2g-CJdrlSYLO~s}y)pdp635@0JqrIj&%-~N-}Re| z;1B;m)A=>{BJ`(E8-V@-f6^yL)BlU&zXd`hf&Ojh;cwzUf9B%&mz>`O*w4*O7;k}H z#386FM&1xU))Gp>$P^!YCrW<(9~^(lgf?orE%aq^UU*%($Cy+fKMW!m9>nKnGU{&{#sDJ|(Zd;5%K ze*6CQ!_NWL^?AMSLrp2+S4lJ#B<+3!>?MRN9qhvI8-yI9j}82St#CQRXV>pbOJ%RG zw`^=MMV2HD+{9i6U88_kOz<}KZrHzJ;}VL()U&hYGEIM~*yylyeGY=I|19}c2Dpt; z`2V4s^81zw#M!G@lt#GPgfc(66>U7IiCxmDFe(1;w>l9xVTA>K%vzoG1}1u+ER8!? zfp5T0st2D6Kh8ey@f@M{L_y?ole`a)Fk@W{P7ALmx8fXnqBF{BYx!YJ88s)rUP5S}PBzp@TaA?%m`p4&T#@gX8yxEN#bZ8|#r2TIXcj zj@QHgvA(L7SM(8OL33N%e8jQJ0|Oa23p9LUea0XFA&=Tk#q5`(W-A%^Oty#rg~FoP z2zPdWL# zDa@9C7@)T9(Y{)vUXL%9QUpFW(wGLK-}9be5~>QFe~zm3e-3oJ-cRfA$35KKsRX|c zvLOrXsNVagiSGk|8ka|IUJQ?h|AJYaGS8No2b|%LyaVGqUIBZYexLoZ3tOJM@9OMJ z#vwL+;DW4h^Kny)ZA16Wjn3j|<#F%{cp~aK0*DXP^4C593Q!o}a(R%fw?K}(4E5&S z$3lJJi6MOBzVbMxB`q2IQm-ppKxgiNANJsMkGG2ez;oQ)$7&9?WF!yvc;N6vJ{QTK z=5?!{<0=4D9*LArG_g-q&k_DM4r3X(%^z3^^{L|uDy{MapMEv&o)c(cBWr>4P&VyX z4IOVEYWWg-6>0cADA4_Oi`5kB)624$>iY6NRYS*3bw|R@z4#d56Xg6$#_u2RC-lhW zOmgY7f0kS-BEN-57@uR2|ENVGDW-+5U`HW;L<`b8AMXBIK8AY7AkJroLxi6V^XHZc z_QdoO(qHt?T==h%auV_Mp=-i{4K=_ijt9x_6MGPSJ)S`@B33z0#RvEM9l%wxc_<6Y z2|2Mv@!?;H&q>;VtEnP?hWi7~CDQ|;7cui6NG_j0x@+qz=ix(*nuw2JQX@X^jz1rt zC1}3?dwgK>gwzr~*;Z}^9k75I8^J(7c(g)FP(j*ZXqZiaiV(sJ;V(!l2$tk-eM#t? z?bprrH2Yg6tgZws=pt^yZYiVuKa;dsmd4)Y>!?EvPUA6c7Yl>g&X$wi~Bz8;<4=zF|hkA z5Ip(A8{F50l5ZaPV1ru;KFDTOAZA}OVBKuGS$r^> zMj@MR$1SFtef0fkyoNrew2RqUlFzmsm*eZwGCZZcFfH`a1{{0;<$X9OXh*rJJO*Nd zHXhn`EHRZEAbk}FZewbY1c&h#2}>n7x0<~v>&Tag#wHAMnV?9tohTC7N-3)ZrTFqs zbn1NjV@O2wMkW$bpIpvAdq?)*SdSF_ZDySK;4IRv8l$zfY9+^(BeiA_CxofZC;6d8 z;AjYYtNV0Ie)VqJPb0Jgz6?jKvEk(yE3ONSM`+@F>niU2sZdG9hBqh^Ez>|iXwdrlvB5Rj(Z1n9t37X_Ig%}&LStw@ z!U9X)Lbx$O)gBhAws2GKMQ!3%4Tuc61gXhWE9AR<8jMvqX%3#rP^24^e7p54fB2m52q(Jcxu@n^Wi!QmH>I4_c6yfh$Brpn12&|+e9xVwWfD;ej z`hpIWy`LHe<9FHHlGpSk!S^HpUU?h3r>H5PkH_T=vUy^|74f&| zqJQiDY|2llf{C%mB=|snw5SlLs@Dv+)JZ$3IM8s!A3Kj9P0!V{&-rhlxAde?;b;Yg%@xcO4chn< zB7$BiBGJd^0{#S}`+N9g&?t|sm=1<4(1RX}c%FdyO|ATiTJsdI{+NWSB~tffqUr85I7MKS_+7sgFy%Z` zNcZm?)8;bGk6}niQJd`pmxr6}Wc%zfYN#paBk91}J5c51q+h^LJKrxs{(zdgo zz;W>@s5*9km6z0$C&GKPF@(3jNR|2nE*<6ikCxiin> z87{FQ7WjP}K*v*fjw}xH#`B>ND1;5IN{GWhI=01uMJitBUpf!Y zIt`AdA&aiCod2B`Du-m2lxHFVO@f*j1N;qr4NEjN);xTgPfGZB_tC}&ebmXKI%qpd zB909a$JSwNkEaobWHpI2Nbk|I`c*mjKrGdDZ((~3z(GGByiS&;)g8j z+zwgxfKQ4$3PqP}x`gk+MLs$EQH+xGaUM*t905bn=+$SGL1N92Lasieg{O)=>rx-l z`J{nw{GrAt@M4WgJh9`#Q7ykA0>@|aXD*|GgQ|fukv^5RT0TmEq5de}%q#=Ra7snD znE>N39Ss7&`1bQ#G%2Oy>nIGfB`tWL9!%{QK1sW)#fOKq;?&BMwA?)u{7R(eB<$OiwOMU(s4XtFC0A{kp|;FaTME>cLbYX%+ET2xl&UQiYRe+E#jCa~ zRa=&+Ei2SAbQ@p{FdHrf)rEIkXWmaVL+IcW56UZR^~P)S^21`!T|e6y0K7 zQ(H^+k@2ix6M90iu8+3R^hXTYkPG^dEpiH;C(j;|8Cr;ioyHjS5+rU3pt^6d-uJ5p zrhQfDf;1!Z;T4G>WO@JnLY81S(Vyvj{y`j5+jYW{fB5toY|N@v>sJ(&Wv@-)%Rvtu zjz}Nas^w&UWORfObZ+;{w)Uq$g)eBJBZ5g5vPzziCr}CgwT{;O$kByXHOE&QQ%Tm# z?{p7`(oOX%Xe9?Tdm1OOgV+Y$o<7}LYf+0#^~I)ommY6Yi=t(v+8ebW`QK1|eEP{> zA5a|&Q7zCuBU-jd%=`#+tyz_xUe#DA{DP~w(Zw#VEn6z2qWB7-)Y&B`#`sZ6M^7z#K%4~S_G9!lcL3cy z;>Xoyh*1#7!LThpT0=@9K6`+D%{5jqpg0QZ7$DGTP(AhWeFSn|FtV;Zb#FFfF@M0;}DYK+0fU`^KMR~EL|Ddf7T%xWsjt!DL($jv7D z+Inj8%e9d?PejZcd%zJOi;ej)4I8F!s_YNW!1_=Lu`CWlc|ABDpJ2vH86q#oDFi;V zYQgI0SHnGK`nY=N4OZrGmpSiS!Rqa7Lh>=eixKM&32KKIt-?)5p=Y6!n(^Hg8yvl( zi>(d7K{8nxwus)J!CsEc`Bq+Ue&?q@XN&F8vKiPvMBA_?XuGXqW=@@a2T*EqnUjr; zl(vpQ>(OdaMk8n;Y7I>G3rv#tcicrtH1)*>L!hv{`_MO>NER(CIP?ws0@|>YI$*94 zlwp1cFpQSXj99lY6OG8~#O2-MxH|f*1wDjLtINy@@n}_#hu5PYt+_QlCc= z=m2ICI)2CfX{?I^?Qm@*zy0YE@b8JLEYwq4!OmBij9m`4k$aN4~I3qDWZt~?jAR5Qt8pw)(?z3b63({k<#5*tNS?LDwjJL&32bqA^%2~{i(I*;{)yBH@s!kW z)1J)zDcX~z|12qbh_(0AVjR^FKxUI)l9)pumojJB$uScvKBBcut5=p6o z{j?!z!`W-Gb~<*`6nv2jm6?N2;<#oKG>jig|Mx|T>q40n0yCk~-=-A?^P$rJpeXEh z<1%M(DgYF~K8n>1)GuP*5LsGskbuJCU(oM~6`3lFMB-SH0_N2OlL+&>@R@10N7_-2 zZHMakHzH0%!EMtNLBn!XLm-+;n9w5bhOgconzX6GRNg_DCdMB`JTelA5+k0K5$EUl zk&GZRB<5&G1l7!UEc|)3?U4+?wC(ur-2%a_b8riDQ*aVpQo=k5J6}>k+5tODWqvch zxHphy+f5tSD{6*?U82&yioufGvOjhO;3!_ACg$^Le<-4x=js`3hGd zT}tW96gwS}jq?xs?+3fRm5SEO1&#&iV{@Q_zm@GmJ%B0g0R*Xhx%Ut_E2>PD(>utcV?+n(7vK9K4AI*Pl;(-l+pt$$_VV=@|IoF^5$k9O zfMh^VE3%OA^i=_`rJPQ9hf{F>Yv3QG%@w2w@3$C8{QX9I|34s_N*l&;sciAc9V9pI zP{$3FhllZLaaJ~hyfZK!-Gq~N@D>`R1S*`fh(nZt96GZG^`(O06H)*o@orEReZ9X1 zpvxhbu&jsPLcNSw6u+3z>R$i@)z!aJ?0fLL;@9x6!|xINj^WqzjAH)_!q4FMXZ()g zmyGaC{FIawQ;PgcN=Z&hq4T-Ej`YKb8;AQs{O-k1xx_*5bPjwH#V51q8VH#m{YJ5$ zMV_DH{(am7xX(tog8L-gU&4JW?vGPg#-;yE8K%(*lHvi$W>bnO!%P9GX_kzPF&SwY z>1mMnu*c9@544uEyA;zStl}7KoO8iO>(``o(2Y*eXg}P9wRi}YA+i|-lTN=4Bhhqs zU3Rkz9|j{vffUXmCL;;_UW6&z0u~VE{v7F%ZxoFe13u zQH~t*Hl^K+!RvK8c~Qczagda+1bnS)@K3t?VR=ga>vA*yj(@m%Y^Hb+LIK-G246dh+VBid(6Q!yyf6+Xpbd0nT4F;a~3*? z``{u_e1JX)5kiWCUc3$M$)VK8X{>~OTG_P}fuWRL0o?KrqvlS0-ip8bdb+a7di};l zb5F3B*unCQLu%at2)pPNO)uesww#Fk%#(w?3#Z*Z`%34YP+$aRea%ViPt0?Wwm`ss zq1m!oWp>`4{KG{xdtscPBos`wH7mW&qsSn(7#0#Gw{ti07gs~sybfF97ZjogX6Nz$OjHUT! z)UjCg9NeUUhmH~*TdpPj+j9gk8)piL-_}#x+DOL2QV-0I1GA&}0>`z&AIi3C>0FSD zGA#jr0*%|^ndTu=dvyJ=aPtAB`5NgzRdWQc1z=Dwl71zgbUc!V;p?zY|8|%dK9}>- zeX`cNMh5cKmO^&(B6_z>RWwBPt3Q4X@$-b%4QhV5|NbQ~Wt zd#lf|!mQ`#;|~EaoJ_2Lyxn?yvIWTroGD}~NjT9)^oI)LdNldVkb_DGIs@D_n;mN9 zPPL{NO@3Om`VRl;#9My^ zg&s_fdJf8u5{e8j5lN1DI^P~R`qJC`QJjT}11UQHczfsDM`L909CY_KC70#(cKrPv zcieIMqpr`B*q$yvC3z2)R+A6seX{BCCUm)tODA(S2;qXxb=J{z7?)7W3$XtGAL7mh zKC0?Y{4>cU8OXp4GGM?6QKDj@iUuno1QQ-f5P?Yo2|gfh*RIplbx~#ng#>WI%H?*H z{%f~x+ikVFyY9BTYhV5YxR8*Rhf+nc7K^oL-S%W-6<-jAW&YpaId>ij&#?RdEIN}r z_ug~P@0{~HzwZz{{nUi2Kh<8D?&gZiP~kmdL^JY%iB*k!OTF>fE!CRGEHRMmRB zl%KboDrAjNft<3;s@u+rVtwpmef);kd#=+3V7!wBgzC2o)xSPf#!i>{we(uUh+p?^ zd$z#1m$w^~mef0o21`cb0F3d zbgju{C-O#aGOyc9o@>5Juf89pUw7+;+RFKtip%$#Hy6-2i*#f9wco%y$a+SOraiGwiI=yy*SqiDPWVPCT9X28r8d4Yo&e{I06s zPBJ3b)(zmR{ek*NA~~>4T5d6i+$ZWjJRR=SjG{e^`N`Wmn1S@kxfX{p61ma}`&2<# z%C~33@2cWG04&xIkxj%=$z!iBb1xq!dgj3!7Zr%+Y(vmpVdbS1e)do-|1xiwF43P_ z;nK)wrUEoVotf#(q`&LlErNGTk)U3D@vu<{PXdhi`j3yIei5+3dv)LJ&#d+DaBtUo z#kY%syVf6;EB-0J<_3K6_#y7p#=r3{f9m4;%}_ipuW?gK*Xg8?0j*+_wNb6biP&85 zj4q!+{FruLOxi~Emi$t+c9?0j|6OXZ|4tg_@IRG&A$Y-@tA%5skxPoiX_)DGNKKbG?U7>-0pEVR?P1a=^td%r9u`^XsnD=7Idocq{SN`)_jT3C>lUd&zNLr*1q{M=Mn4@3&CFdItd}mE<7rH zF|(2!#GJ%y<_UsQ(?k|(vU$BG7tQp4mI=UfoxsLA76RpmhcC@2pDV^(9C?xg<|p5! zl?)tzqTlbc*#{xt?d(*ZFLxYcrtO!%yl3ldm#d-kKZnLA|B5@V2}I+}?o6A(3;sfe zPgROS4Sh?&0d{}opNykj2L6jh2QGNE@&sd<0RiB&f67v)0)Y2R5DylX<|qcrY)~1K z`OaA;Q(3c>HSe7#q%i3w-cjHABlJ>Kp%smGD{+q_!}PO6bwQ)rgbfOq0ZDRK6~tN# zTx*6qa%0}hc2^guewtAT_-1wfCw4qI9VV3JOrBYS){67nRG zI&ID(X9Y*DOOlX@NfPqkO2XAwM+1K8`6@Z0=SODjVPK6{WvgM>6RXusqeJE;&H~a0 z0zmYq^hvV%|0{EtgK>glNaj@mh$MiDVpsqTlb=TI$BhHn23M&)`YL+le`kP!HG`aK z`NyF(EMSgS{`K#J4yCib#)hoKXjaL$2|v00E$(cU%xv3)r&ZP4m;^*d z#N))N&#SKJAa9e9XI$FOWitG2w@Je~=M@okxi;C{x{LJfcc>})xv)!CM1`z~3lEtU zArEkX^h=vR*$xaxyPpA`BRN8(vxJU{_$g=+=g4O*@LG*NG@Oya@f88}@sq3}qN-Ze z0joOr#389E=VNIo+o~?${|Zx!`$>5exd4v_hmEnSi>$`to?NS`$Z9H%N8eFTQJ?(bQvr}!?j>;p0M#_47cT%jytJ7z!-^Xyuxns9Xa|Kf`_^_29v2y8? z%is2|{4kiY4#!2^)A+o7xS6Pz>8>W_BTPUqc)Sz%YeK_VsfpPjP$bZo3 z>wfv0h@xDAY9es2Z)jh~E%h?%R(Jyx+v+-fFz~niW2*Ntx|ZsF%RaRq9Hn=|tx4z* zL;8t&>36#O|4R!WxQ)D1@{<>GSTskhpIdFk1^i;Uh~)QE+mCQOfJ;_U8HAvcW2CbZ zu*qmFLaQYFJq!w};tEU|Je-=t!3Q`e%J~!2-}n*JzLSAMqG%_QzA-!E5l@l5z-MDz zT3tYycw6yA3WUc~biz)`)n$}RmC8QsEM{ys7X)i5R4j!ml7%jI3W+O>mbYb;v@f)) zNo7Qt@lqy~EYpoqBl?6w`x?%?aWb2!hjsutohC;UCJSzoORX6%NgD8KNpd*aCDr8IRSC((luzDqY5ziIL$6`@g76O+ui zB&Dn?I2ugY5x?2JahSxA`E*MQ_%vbPgcr(QjxY2SwT#-VZ|tsZs8e606)M+vdd6** z(Vnmy=d+E7QmMH}1h{jO@>}FbyEP0GI>V0wMf@gTu{zB8mTm@Zpz!F9Kio<8)(D$* zo3{Qz4^%+FWyx+Zyl-{`t>YYcdINvkFOhWEU)9qFwZTL0i$BT~aj^cJb*BD|tsKDm zis<$F^l1}oy$$$EuQQD1GG?aU*^}~QMlY7~Axeq#2-nveMda-nbCnHLi7e@o??cbyx%L9^8%Hy3J z1YNMF$!1Kvv?K_p-CUi`qUqMiA9f+wQUQ7W)9)Z?EeO_=Ol4aBd)T|>cI{GR6o>6hF_BUKHJ!-{f~vV)e@Jb zPN$hG5Lro`J&cH|$VmEPr?J=7=e7PtD1E9T;B&1#MCM<_S_pjGHZgF?9brs(YHF@8 zk_eUNRs9&0!ny=W+uWojQDuYi?{f0hT_O4#ov#kJg&GggqeZI$^bqt`ER2HMTIsif z>$`Q8OPgee3YTZJY49r z&QP5r-y_aRU;aYme@G+QY_MUeIYk4Q%#Vs^!qO(~Zd`6)#P1g1efs`-a@o^c2b1b!&+}qQ3hj zMs!3NY!r(i-(?BE%hh?v*ZE#S=N}64cOo~zRt)bUbBd=8QnO3Jy-YVRb-1?4_gUfn_%Ee{i**6{9x%Lzdx3ZQ`NA93%}X7wZSs9qcxUMX z1sY!Y9x%L%KLFl`|NK11_ZN5R;i3-LHmT{X@II;wjQ>Om$oGKZEfRR&{Nj1SJ3==v zb-1?4_gUe6=PS~|URH{0n|u!#-b3#L?^Wju@0WD*Qip4se4iEG$-2N}hoyjg4;bD9 z?*eb@pPlFU{;XMsOX_fKlkc;_+olT?y{9LH?*YU6Ob_tBc>8(6o1>eTI$Yc2`>gQ3 z`elvqx`T_Qg9D{!?cKmT=6vB@q??yIT-)UPtne1=0s-AY`5rL5VS)GVrt=)%zYoiB zNgb|j@_kl#Bf7u_T|mAE3~$9dz`JefdBXe2odU1a;o2tOXNC9Yy1?!~NCEjCFuVnC z0`JiCg?F}YUg~gdlkc;_8`K3Je_IO3_kiIIyaBvRmz?MLeuIdrv2v-ywN1Xy3hy1d z!1&)v0r?&gQ(R2Mk(x)hM_0mEA)@SeE!JmI}g zH!pRtznu%b9$jFAE+F3nhIiAez&rnZ;av}-6f2iHT-)UPtmC^-7ufeJDInhihPU@+ z;Qj6`=Q+N=f>DAUpbpppzRwEpQ@X&){Zc@_2Mq7+`+)boo6i&8%XITnhijXBpB3JZ z;Z$PfF5N--9x%LzUIO0f=L>ICH!pRteE2>qyt8zH0^LFR9x%KGF97eu*c+YKdFU4~ zO0jaO1NzJNS>b(D7kKQKQb4{34DaII!24$7dBQtFH!pR-uk(FYc;A6j0pa&Z0r?&< zywB_e-mA_R-Y@Cqr4INrzRwEpWL@C#T~a{42Mllc=fKo-oJy>`W`{1o_kiI&upM~EoG-kK zbn{XN=L^2i3U9G4FiCe%z6T6%`@aM4-K0r8FZ%HJFiNpZUD;AI`^r2~?kwK)-fXBJ_{=k2q1 z5pf?2TD22*G!h2P?$B0vErV&g=V~qgOT}&+YVRhZm-kfh8+kb^dq?(x`*kSC39(~q zHlvtuwGOqru$}dG_IeQ?uIb&9K&Cojf7$b?kdLDn`4<@CWP+Me68v9%`H|$H7dEQf zFk)cPjgylO_woI2I<}1{)UV&^o>WPDYjQS>s_dDByZL_I;%5Yfe1)Kp`_?|ccEhkr z8yn%)fbLJthC*-WF&rI<2l;%n%Z!9XV?2Oa;xo0XaCR0siVoDpqaDgca6C-yoAJNe zrIzROV;;#H3MI0YV=X_@fh9djdVZ!L-YrSQUP#2I;H+^xI=ytIht!GS0y*w59b;NP z&hEti(VG1ZA%^17-PWRat$9qI!NmB7+*$ z7c`z?XLB4GDSGb9&F@qkB+QoWMTg?^b~D>b)u44_OtE9*?eFVn%AR*8EzbCq6W<(3QikTyJ)`WSONgvAYJTm)LqCXyr=3_D5;s5Rqdq)p;bGy~P4T5lZ zQuy2ENQtNy?FX?akE@-8LBwo#EGSym)tZI1>pTLU`rD@ST8IpyIND@CKG@Ygf#2z| zbnqP%mnt_i60wz{^8YukP>(c9et_6ZiJl3uPn`gxM0zKVreNF*!MJv+TQi}vY#$iM zd)e`6SeCMyBVUP;zwR&WK>g0F+!>T^uwP%3w_$MnUU$!gk`7%(pSYs(MB{%x_%kVq zKOdk$vFm;I%z#*p&-fmAITzD69BF;oFXG(3%NmSBHnx1?o$zS-*r|EqR5E zlf)2N{$C~{Nu4?{= zK0=j3IMj*F_q2;0dDs;&MCCUs8&(*=9HVPun*>abC9d+f)#-~# z{;y61j##49|HwEEkja)^{3 zhrZbP6dr=9`wzbj;F)6Ka`WY#@XrJ~( zc&=w~+=DA_^*)9fT#!-lKk~>4)IqOAXW7wbVkfd%n2+)Pn3zA&-nh8$+3Y>?UoH7i z9!%AGORCnMLGj7Y#yvzKV|RF!{0?-6WheIa_I?$L@@IFfGq?Tg#dH48(eCV*#cSlV z&iBV=e^%DgZnf-gokB=aaI)+JqI16dEldbj6m9<(N^cd!vZC#3?_>0Li3BQ@p*SQJ zM?3I6fG%Ar`oQp7ZY@yj*YRM<8w{F6U21EW_ZA)4;2BwkrOQDXf|j3Bq$=(iSvK3} ze`Ew*n2#ghF#Mc0dWQPeZtz?dg-(? zS+31@@TEFo7Fj`3+oD5c%E}Bodv+Y8$vm2TE+R`w?4IUHd%xOb+6zBK3&|##Nmq{@ z{&vQ#uXEiUg`9=EGVXpw?ly6^`L6Z{()Z&v|EYq)+0N?)UfHfBIBK)gRA2f^bcc{? z{731TSMtwj`gBK{zYyZoXhk2l77_RBX$d;}eHw~AAawXKu7rgMnP6SRsKq`&J+Wg8 ztR+vi&WJB}Z~r6jXk<~}{~I2&okW9h7kU85u&!Qx#0-GF=sWEFnBlze54^VIDLeYO ztdWCjeBoJ4#8z>~>Y3cAp8GD=Ci9*Kk;*=0K#!_2K|q`~QPU>nX)?SCNv zG;AudRs?qC0iRX*S_i=aclB*AJ= z6P@Xj((*&1xy-fn-^TD#>N8apn9wzucluja6BbDtIV0X$7rTpVb<$S|tU0tA}t#K}tvfBUzJ~|G-y#u_RaU8fMkg5Gl5=XMf63CEsAc zSKtcG^%Yz@17${ySG^b(tq^~O9Oc!I12n*J>K#xJWN9CQraSC)(rP)ujl_T^y{Vd5 zGkX0L5O@pDk*Ok*n4CWrDb~_qvI&tNY6#7!Paf5ip2quRpR_*T8=I12f|0uVbywRX zXsd%(kE=1>>ah<*Zn5(KWT8DY)=55|!7E6h1A|lzTn>*GL6AnhUYh&6OwsgO47(=-|5FiyN0U7W^W>{v6i@ z)IONc6h2veuH>VA>$MYow(gPyg`5&Q;f|EVPUJ?%h14-f1NE~p3Cedh=hmz7zy&P& z4AIm@MCvP`GnD&XL%s6#c}70LBaw2p`cm=`xuYc#)8PsX<050ZBDhP$k1Y;)l>X4B z8=jX&jnCIl`NxxxN1sXX&WC=YGuoIEX zBs)^0hd4JO2r+SPz9bX+=+~qV(yc+N08cRK8^+Cq`|=aqVZJB(mF!oMG~3jUm7NuCtNY_$fWIcU~nbMj~Z#fSl(6UQw1Mrtuiwi<2T z0k%4+!wKWsfXfSH*+qPZH90y`NIj9o;*&uUvc51quC3C0_1i~4pO)kFl%9Vf!&mI= z>qSQ|l?71JQCjV59ck=O7};GOsozymR_$ATm{_jYw_c}V^Tek8i0FzxB6y0cd471x zrlH{WUIBoxR-PYYT*^qsraj||46Q1=e)S8fNY}CV+$-nUI)vyZu?U^^W2*Tv7OdhY zi7#QjWW*)Sj!v0p-jk_3Ir=CS-M>whLUB{TlUQE1V%|46!~9_{)NqbL#J*2aX9k@h zVi|Y(Pa-zsqoAl6Z!n3ez;_?{+k`>t+b~5gDZSXC;`(oW_^DKz0n=t<<}Ihubj;c= zO~x|{8B~KRmmOh>YjA|9UbpMLNE~m%46N^A=C?|eAX?JZOU5gv&L9UNqLVK zjE@l(Vh@>NJlRbl6>N+{Su&MnoogmgFz)*W@0h`B$8yl6E_m2kfst4224D6o_}LIc z5;}39W%~MqtEZNAQLHikfM<0<-1iW^+`q1ncmvZ0TcwiDOu3^U0fzwOdn}P_=d$VG zz3Ot&uz}O}pxjQ~H5408V}4v_`FdKQUNu+JZq4m}}SXS$&m#ArT$MgVVNWLqq)DMA?fi zBkKj;M#^sV#Dg0v%U-lbuYUj5gnwx&I+Ug#uvt*a(NHedWI<_etDoU69TvGoLzTPw zV@M#0Vq3{Cb}>&vc5bsrvhxPTj(ia&V$6U(7h(=bpa>ro@fz`Vcn?0%Tc<93LWWxW zM1MM=%G24KmA1H(kj^U&&DIN|*&R}t4hVhMzlDFc$8erxPh!z5?HkQ&@80@Q$w8H8 z9?COdxX#W(Ty-_0)(~HoXtYbEcbeM^)^9p#EN?Y~nH&;Ar@&(Ctwy%V)+2hni+0l2f&X(d@&&+nf%7{26O&Pz@xL`Lsyv{eEprkRlx%(BnQmS;Ph zgitl`F~7{+l4l}pCr8S_sGq;W^I`hA<@s8_=SSFZ1$8db_ywBv!=N(;n_S9_{UYf2ZbqN%xO9)j9aa{4eRQgy}WErTqr`9)mC&k!lMi zGR>sQYkc`vDbnX(ySFdCv@h=aI|ILOlli%6d=KIZ9r+Yc;1 z<9zu{YrAs)r|9Fi51wH>T3HMI@M*)D;k)ah|6zPO_M0=n_a?yigKx@d;nVAH?_Zw{ zzO$^qi~R1>=+h;yQVOOy~pmJ`KUaVi7JMsBIS zB>)<^8`&oqIW2@Yi8CML6x)1xyyjN*;dJ3hQ3&-JQoCYe26wP`uT?owk9+c_v^SIX zM3%V{b*&jDeXt6kUm(FsM{83fgJp9YDG@d5#dk>{D#yo-p(4D-Rb0(2fm1LWKG8q~}BO>seUZQuB_~1+7L(=~#j`$$?^Q4ofiGiMcoRS?l zp^ik(g``g8b-{kY%Hg0n%fTsd1W0HtxHaFiv#Q8#EepnW7Ff%Qnyi}Qcx58V*$Mo} zqZ(9+J~W6}A)9CReZ=)6>e9*}?yy5`9LG7@5gnTY8*1 z!!Kxf7@u-CLd-Q2BEtx&>R+#gtRgn02pd$nL>~5k^+vv(6gu3`IU(+py*~d#*K$8m zygr=g4#d`Y(Pmu24dl<(0-r{BUe@>5v%jGv3Xl;nd7sL)vh{u1vZ@_9o^F%F7TLf3 z5B*9%3HB*)BAVylR$V0Z_PRx}3do{L+fZGUdXHEEjpI|lswE_)lQF^ciN)1oRZmX6 z(Kwknb5{kL_DdUc=W(U9ph#PmRi-5l5Ytb(9mFTL29iASHx!E``vnS zbg|;}yT$t56;$+?|~=OVK5xBXQX_lJpo zXG#ILTf_Sz|&*)aHmrzhYp&b^t9(bv?MpwJ(TPBT`ea%INqDlQo- z|N2juTRmR>w!K_39{#p>xsY+lVjQ|Z;>YIO2h_br(dhJ_vga5*1ICZ#%7F2YTxu}x zPJ@`kWzbKp-$RZ9ImxoC1NQZHlMlU{{}JrTT&ipc zUXwa=32m;GK{%F(jwm^}?t}!B^M9vnZtVBBuj_hTp0pfyMMs(kC|2YoD4`gS%aPe$ zRN^;JONv^qghLK#;ji%zjsNgc2AJlX`=7AS=18a9JcroD7H zFg`0FDGNm~6PYSjBHs|CVUdddYqGjCKr_ASafX&%tC*v0yR@XPo{~-prlI>Tb_SYr z8btz)Z1gcSasAdYD54Ih#dugO)-*J;Gj!eTW9fGn|hioB2Ahzl>_7BTS})tm^y zs2x>HzK|R#Onk@vT;xAU@z z6&mR5&9<@(vC_B`niaxtw?VU_AlT||*;?J{7uJ5772RjwI9W)zq!x)iKrYL+pUD-m zzNs+kbHd_lWliZ|ld6lR>l=5?)`DuasV)yT`SwO;O8m8o4zmpAgyAnRsee50nKj2GqY8W57O2tm72r0^aaV$xm#%rbM5 z`rMvZz-5rQF6y&GV1>+IE1{ibZ?z1E)<@oTy84)IsWP*^Ti(+3IV9bI2S^LW%M}m!pWX1(Ft;Qo*u)=+D()uxQRMTn-biG8tanCaT=|oXccifVarrZ% z{0aFpwEX+>Cr_VCdsbREnn4sY9JK3_Ode;s{WR46H+&h~7#y#8TU~xldh^kYsAhgw zzwa!`C0(DF4LnjUS|4KNIuKoD;JCuTQ562E)ZCm|^H8;y$hI1JmvmV-CI^ynEq|Q% zA|uNW$sZ)_k$l5%uNP&AHN)`A@QGgwxC3wT*}zb|!r%Ym<3eAarK8Sgd9wRpTN2-V zn_nH+{(gG?@DWy|VK&ywm0>m>;4(HfayI_(rK@%4|J(fGL#7_XAFBU8110)D)2AQF zmFd$za7my1>*p~84i8hzrRHH~agpNV=JI3naSg^f^OJY7GBklupSzLjbwaoP{1a`z zEc>wGpPuGYx4oMS2L9b zl|kTwp@A@32$v%w$+&ZhT?dP&%ra)~ z)2ylrt7?{2MJlA5tg4Vzwa}_sY*mrYt-z`(w5o~_VIZ>*DTN4If^1gSO6OFXfgPG& zh&@!J8V*tm|A+iUPPK4Bvn7-1vY?ox#H)i?FV_@WHARSDteWvw%|xqal2tR=s+nTd zOtWe#teRO?O^rovUu^Vid{#}sstH;(1@Wc9kmXgAgHH7%M643wSD}5Mry)dksz%km zR8WSS(L5qdb1YQc%UT$)E-rbqki8R;A&=boGlv5S`1B`rYoeS=6;oR+-k z9nabCDuS_^FDyJ+gI-(v)LC3Ze`xKLHuRSB!GNdG-<`Ow& zsrIR;rRfIjNoiVa)qF>PcTwW#@6_i~FDy+;t1@^D`ab~vdujM~y3t(Z5X0opQ&2+5 znVEciD*ju{I+H@A!s>TtpLhF)eK3?)pom) z61zYh{7bW?M2fI1#t-0yWwH@~uF)a&>cri8S19S|!RN*jv&p+L?m?8vzG$krR&807 zssQucdi6kKMg{SP%nGVyTb#IY{*Vm|hDaX2MiR^wTGdcQSxbc>LaM8aex|`Ds3{-> zG(D69;jZc+tII_$yrs8V3rx1aleHyD`e5YEPPzdB8~Nn5rZ0F4ncp7*H&hFm=eZs& z&eym^6D|jbm>-D;EZAS;&mk$!yGfJ=9t}(C zd;~?vI3JzjJo7E=zBwPI>47*WhJtbs7jZPIc995tpUVdOURj6P$N?l~8R!4|Jfsk- zDAFWzzmUus(xdN;XN}OKuc+_BaO%@SPp)1Bn3wrdQUVbXI1&KXwLU?SQL)i}0N+UU z=%2En#Owt%5sQKGc+!*iH%j0R$tSt=~}{K?cM%W0U|l9^VFy$5Yk1N zFXSEi2)Xut7Mlo=KBj;RpDLXkid<#Ths+*wS|#f zqc1aRFSX4S1aQT|j2>^?4v*;CDzK;@6VXDO#;15u@|>ZaYfu{~g%PPI5#d`+HI*_Jf2 z`X70f?)%%?_?8o^|Dh~Sp8jXo9=JqKt?PI5Cv`@gUH&*dicB|0#p}&cagsT*UTKc3 zmxkK}6|}!uau&+e*DuwmVDbQ43p^iucoAQ2UH;VB( zVn`x{Z)ox%$&GwT-b0*LDeLn7*vcYzbf_IFj7=r$dTix*SL9aFGDSz!sxQ`??g)L0 z=8$2QHrC()6B)K{K_Q0b$Q6@3#kxBS6X>zhHw;n4JovXEUCFL$Eg?(4z!gX*Y7Wls zvECC=FS@89T0w|1YA8@g2Bluvz>{QCS{)Qf|HN>+@8r!E?fB2x1k&%YA|_-{(`tEV|s;*>3)m?<}#!FLDQJ z`CP)Y5T7PK%lO3jJj!P?A6Wtpy_VJKYux;lW=hVH$MLW4W**5%qptXK5gkU$?3dJS zh!we<#ARnxUtSjehm$b2R6RP@p@hkO03%fd{CikwlKcjtr(E50hiI#Q%H_J!$EXE? z#Etl2M#rBJDsXFw-0P^I%RNX2e#~% zV!JnvnmQUi-oeNP8*g?`y#*|fb!NqOWVIcPzEiRXJ>H(!>j`@1DLK+pw)s`c82k5g zo{JwaJQCqkBoF?!b^MZ~x&F2lauvEm2KO#5*G-Xe^sj$iXly08>2G_6%cpbwZNK6# zyNcFj)h1r)euLke4-Kr-BIScj>(!x(Q2T)kmxZ6D$@XvZC`GcaR$srk9|9P_cS{9Y zUAaxJjOgYkT&|mH051~2jRfT=x~8K$#Gt_6R={l$qKFczwtK9A{_a3PkKWB(^;4c= z?IH@WDMkTyO%ejhaq2)2&4A!Mce8a>zWr%}(X(1k{Odc8UdsZ6@3TyD;u<3*c9T}W_B zFLwAQGD`1ivX%y=T)o;sJ!}`;lHU$ELLb<7y|Mc_cvniEqUaTpV(8Maq&w^j*fh2M zB4=Z_>t19+Z|H#D>`Z9mZ&@Oa%>ZB#;9vuj7*5 zwA7kWbZa^#BI5(n$QXz-=-*Qg9&VNRW#y=4s59;5MMkcJc7;~YT`XiTFBXl=naemQ zCPzXf-J*fh2#$lyGVDyoD7#WbXcyQOllYU5juP-74Kh3Sl7jeLH<9*zWu43Y;VeqGucTNv z@&5>a{JhEsv3ZyE=?~}1(@J?-!&4E;R29`rzQH9py@6;DT77aI_J5P1fq59p5?IZBveztN{roB3QlSf73MDoCADnSWW_ zl1vF}HEC2-srCY-I!s6hJrJkwXOAZbHLuBNTSRb=f^k6+;xD_-+ni(iFs}g5omWIc z6vWAL^|d5ru-)_3ecxe>8;ktU2CpsK7r8V%O(sU4whb=DYpzsTBQ++O0|}f+o^lax zghYvzUYwgR4OdE;4E&4NoKP>0$S6bCL6>E~B;mK~Z`FpjJ+~88+rPd_<{u}*8-t|7 zwOxXZCLJ~IL)sW4q%M6@W{|V9|6$RQi4$tE6qymU*AOq=%b?4UBKBKU5CSN3_LW0X zORiWL$PN)`vaZqNo7%yIK4@h=yH9~=?6u9H$YcC%ayUjz6Z^~^MK}cGE{KKx13Y~} zG^ItTjKBouYDrhwVsE54eE&&fkguNCl5aM2CWaSdpXEd^hnJwX5Xt+zFeSBWq+S%# z=p%niquPW-Ud@f}Zcwj(=1gv6tDrwnpmeVbZ9!5j3t%eBIK60FciZy|St&@9^!SB9 zS+YT>Pc3;t(vx=hzo$br>_FtK9!ys2ZzI+k$c{1^D@ef>hSAqZ9RWcW?YI^7>Rv)h z%ewsQZbbYT9#%HezrLEAl5>JI;P@5ydX_6@d*a5CQ-}H2gD6-Hy6?Mq zV}pBYE%QBE-^jYpx3MZ~Y9*F@gSe5-_1tHFW@gynmIrZtZH#^DiQZ$+)C%od;-y`~ z45X|mda=prOk}I4KXnF7pf;m!H;}K88phYz4QxTdfx?Qy>dApj(%D)C*QO(%LLjNK~l#MQf)Gb47Dz5SZr^=9qaF@-!ZZc29U- z2vzp;8olVNI`%c0{lcEH7{1Cux>nDw(-Df^2v>WmPB?vl+%LqQE;=@RNN`)r6_PX| zq2AMSdu*Vw$;^pPu-$4ROeFGj-v5KVFME))9|=9!mU>^W!lXXK7wa7&5&aparr?^p zBex({8NA{~L@Hk`(IS=A{E<}MGs(B2z6`2>TK6_t%N@-K%PPEzL!i@=wm;k~q)5#( z4JNs1Xuw=33~EV7d_u|i29X8CKFwe8Iwl8?>6Rpx1U*_&Bd_n&@-1N~lj{=C^xPxW zfda|%?TL;&S{-n)7$c)&tAZ}le$NbwMVYlckVfe6pbYRf0a>?RLvyt>AOo1#sz7dJ zWO#VS+hXO`jdC|pp2x`{dVxJtiwBlE@&S4PJwPPk|0)DJ(PYgmH0mPrKwA~Gj0|6r zQRCO7MmfDTS=s4#qap?_LEB6Criu8VXFctX6hoY&gUdRRwY2&$wSaR{Q?G_VS<5}C zlHn^e>i&|{t+V5<3V7&ANyallp6)wnw>;nJ2_i(93nS?efc4bW8`BN>J(qnhH*yin zp1N+#s7qLpZaLJId!?@N_Do}O)UUpJ5sJ`)IdMvj`h~ehfX;6QT&iB2QMCs1-(dv| zibahWgg0^_L(LLo8<{zNsWsOqRH>zD>8_c@K;+srbG-b~*qyFD+`slFslC2f zU_)X@F+Ta!?@@tJpxJMbERUGA)`tZe?v%G%`N-Woo?hm#ak?{6X!DGF}@3S)JdT)_XOK5w*QqUvJ#`L@gwo_bgP#)6bIVzDEQ=txN; zIvlIw2KJNni>P$V@h_34xYOvr&ZQ)4$%`zadjTY3%VKG=^PE~V<+8dl5_E03eW2yC zyMM>jYzYsvoTpoCYqu;LP`RA=GEdLFTUHLVP)<+zmgg48a60lG@6^G_h4vs9s&P-f zQRG5qCiWl~O3s8#gqW|ymx)y)czU16c3`zct`qrkY)WplICej2DK9^bT9bm;_V9NE5$^-u)Xp$kJ=OoM zEo)`ycAYC;eDNeJ>A#{iBPl|WkZ>eLw{RJo3d_&FkQCA=;5xFSfb&Soc)eRr1W9`z z?AN=+wtLH_0YTJw5=6hH5(CkGxiYdVvF_0jt&w|1aMi%&ksThtBvnYui~vJyySF^9 z!Eo}moa6YA8j|t0KZv&k2z;k<=ZWY9ksb?4*k6*9BNP<g~?jO=+3m$6b1 zs)Hk#7C!sizRBfL&VM3ze46J;xg#>=?jQ1OONWMQAoS9|ejR`q0K3O&0LO)YA?xUI z?x)t#VRf5V&x2z}<3N6gz@{O;MXn6w3%Jyf=gK`1n-jqP6+^2_ONFIEkRqLyuA9lAA=W%{vm zW}OiWWLKr;oiui59G!F_c|V--ex%5G8{w5XuJ@`99N z&)@@?Iq-}(=UZJL4!;isL+UrWE)Oe9YBA5n{wk>rZxb6@tguij>5JS9O(<$x%{WKr zGdPv8?Go}Y5osVQ(SeKoflw&as19xy{1WE<1`>7F5HaSPd#R_{Ri`TE7+>s%q?r6m zDLW-HDcdvBxbGy3N8fhFQQM{AZj2Ms>fxc1J=*W%6DG_^9k)8K%@IDyhrmb8;Tg^U zF$vzA4tU1owNaHOn~40p`(`LtdN7^wkkGHj+D^2jTZ}bWy~DqqBR@P1hEM0;3sguV zQ8KFTGw9{tu#2A8N&@`jM*of6OU9QlFhwe3O^)ZbmK&(c^Y zYi;}-j~Urovj5G1*f24IL$_)q+G0%7&b5VG<9LkKs;vbq6^I#{_-L+Ugn}`MUOFTY zTs^E_cWogl)y)J2?2j;0duldYgi$rwA29*I`nB{e!%ND_WD-Xhar98TVlva1XL8*o zqtNtuF5>Eb&&9VO63w?O3xH*aRa?+i{ur%A-b1D#6J2ZPmE}e*Zf-H|-|sNc&AIWK zEcKB~)BciGMFoGZG=@7|jSW8t*zI@n6*lGU-RilFV%1V?m?<_`(+Lra z&#?VvLvcjYPe<4lHM}&m!H^MTXwj^jyTT&5ZWl?RQ*pfJMfJsungt+7tXDBhE*F8f zP91$CBBsVpVDC3J(tq1smK8A(fwa)yZva9nE2c%>F3r?u&|BhX=QkQc z%N}x}#KWsBq&cs1GqaL21heaJZEd0z=#g~{3^VVXLMJEjB}GkO2CXQimb)}8x@4`0 zNR8)}>H^GS;V#6wjQEnq{?G)OL~mCp(Y^#LiC-gsU{B4sLLbFnkra?@?n{oBeH58n zx-=NM92_CITEMPY$e%$5M^LRI6Xds7{i+OY-%?o?WmTT&pwgv2|N1tm*LnUk^StaB zT9@7lt;~ z%PckVM6#E9=Vp`CEN-0AoVE9!4w9ev`AeG{xygIKk|8p;rMQhh^ zV-P!U#WG0E&c5}66_9mrN-fF8HDD)Ves*C@ARlhE-o36>#*l>+B zsl}~H8uf`<(5K0DQkEuVSX2Mf{Vk-w)6dv=2hn-@kFQO*&%(&%<>DVo$Cn5cYx{P5 z&#}youaZjAP?+@sI>Wro_NsreooxUc%t`1Ig*^pba@0?!upjI+I^z`ZTqNU^CGSyR ztu0YC8fw+;r>pGFbY+Cgl?eSW0P+)?$O{>767(zxV~y%8lflgi6Zgz7sl_x&6eqcrES4Nj z;rH}>VodpGRTN?0cB%i1x)w4Nstp$tD+ZDLAC~LQu$@68{$Z-H%#Ut1yLOo6u0@NzJ+HcB&19XHli8_a*gkM!lw5Qy;45iGZGu?yOIB)U|cCt}CeP z3T4zaemePR0m5+3$CMe70Q^+!?PM{+l^SjxzJ3=Y;8);O3^RCk%rw)dt7f z;UfIZ9D)Ho&X@Y$ZAsel2g^j+OIDMbGAaLVfktzQODbDf7s#xQQ^WM!1P0=8i2k*7 z42E{;+AB@%CaU$VLdqT{#~4o|Mhejp_?`=jbYH-8Cw^;`lS|MZW`7|*TOx-m z&Ffv+LP%s)Yc0J^&HW;{Ci`4jS2V}ny09l`yWFiIyH^yE|3YQDK;JN?I>;$-pA^ef zyM5|zII&E_8FxQv@cO8=6z!qJ=NwhGBoGXkt(3J{Yq#{B?p@{+AS^X zx)qEQAI-3XafW<~qyjsy6sqbA@YU#tS9qGU>ec7Q9oY(TH>J`8dS0otK zD#O*Ke&{>HaBcrs50_(ItRoBP^-G|l7H=qNzvY~?O+R^_-g92g7?aFBhr`<-OAG$1 z>+PF;u^#uza`e{Of?vaI&$pP&OOpA$=lSd@B$=;OJ2Y?O(K+RbF5soq{V(gb5ZX{; zc=)x9=FAjmr%QBzf59*lIpJ)$^S%5t491TMhXU^CeXU6X9G%WIibrW_Ouy+DdMER* zFpU=LioNN<`i~6gGY4xZN5V_%Yqvf#ABuP}G|L{tqE+KK+Uvp?;_=Unz`GfBm=QQd z`}niO-YwKAi|oVJ>f%7@^eE0_j_6DMGkm7K;j65UvJD&f#-weN{EgkT$?J~K+T_)( z5^j5V81L2;&I7Vg*)NnGB|{2eK;^M%3f9IK78hExiVN$k*4xxoP!&TQcSXI4s)gO1 z@@7E-kI>tSwZ+>razoG5Fja&WS;pC3s zOVc*Mg(WI6=n5d{T52!2jr2H!j^xO;<&HkDX$jJgVfKP4j4P*DajB(}XExIpmwUlt zHzhhEPn53m;$d}EeFt}5evdFP4btw>aQ9g0s*ReK`ySl`g)a@%j`o|7H8ecxT$ zO!CoA@;n`h5@;H??WmSe^wgE+_y9EGXaZ#tOem)jPsk$~g4oKthyrb` zyo+aMAE{n!mCMsz)ps#<1S!<1SlaLA+Udh)vHw$D?>k*cpY>#nfPZZG?|7koX1YYY z<_qfU$@jbL5i)}I^QbZ}*i^PVGRU5D7by2h50(lP{s$@i<;=nX)sQY+b5{dHm1{2x zTla+Rny~qCmvzrwOUw2}2iY}uS$arK_qh=YTO*`H9BF?CDFB^yN1Yi>;^tXmC7KC3 zL##wOM@j$F^*x{JLciFH0!+X9_GP^5Y>rNSV9&+j*He!T0xegw-%BD;y1_S6Z}n*q zhrqia?AeJbVPS`df1mN1X{*`IVY^FZ1%18xzBB)i@Rf$TuPcr+oO zRqL}ulJEkbLkpL!Pyu36e6XzALOWDs)nc($Y}FRqq48Gjcsn%Fs-0+uCR??W?a&mf zb_($ptlDXIsKTnPutT$~+F5p}#;UEcLm>-`wTgvS<-+7>q}Rjn@VpEV&FnlObU*|a z9g#ay{M*p>J1!m)I4AN)xj~RXDBqr*aYw2adLpCMyR>5O*7Ex!JwxGl5mqGZ4|)Xs z(_=11(0zvs4Ar>5Sz5<@5e&;XhK74NNhL;1kwAQCBT)fHbGCa&aPF1bRIh-5 zuGB*#_vu^h#XRJkefM7{#Uo3@x?tiHmJs{w4y6kUIBt5QeMm$VBe|6 zGWhloxoOw>;#IeY8i>k^L9Q=NbqUKsxQ)!98<{~mP7cozvT8C`o7U&m+Xsl#b}%}o zd07(9nKR>a?^5KiH*msjVJU|TbL18yBwHn0!-(dHd4EiELW`u3#P-~fTr?R^Gp5MC ze!g`*Wed_}%@pjxfd{W*_JD*UWE`M5-8-Gfa)1kx7(Bj5zurBl7DG*Oo8&88YPN@{`5u^fU6vh{6 zjF`Y1cyxcFg@E7kx2FJ~!Mh9%aGknAi}Zz^AA$M8by7^yZ9GPw>9Ib)I)kGtn{=AW zE)R!lIct4jhBdP`$?S1svNpX5Fka&CVCNEjIxX?k{pla7MF+(deWlh!IV?BjpAa~W z5(XJixY6EC#FO;@?N8N`?;x$cSQ>14qK0qY%U52!t*wjYr*-j7d^@TWjb9oc^fCvBZ+H+K zo?RdUutnm9BXQF>$c&KZ68^7Nf^egQO&=%rhH7IwZm&}#w5rF~wb!n=odF%ram~-M zEuX)6auD)tbQGYp2MI0;i_5-Yu{AY=j89jS-f`Bqn8kV>E8L8>1mI-(6DO6wK^^{m zpYoN4QSMuTRXI76eI_3ElzzXb_4{4X@Atxfze9a~pCm7>a1tx&(dK+uF*(g#aL=xo z((m`Qe!naF{q939DIesXM zx68RqHzHEeN^x|~mc#B~+qVvTG-={0`AZwaJG*Ja(rt7WbRNpd?(FL9rXlB6z}(_( zX^yvP&UxfDkDTA;2M6=8orfuNWDI6dIu~q6eUorxNSrb8&x+>R*Q*POYC!To(x%1! z;8ypWr|XXlG~=K2lJ*)JbjrbeU44$)g1sTipQV`FUzI`fPN(E4NKw45A+EKE*{hw* zj%Ex=Kk2qAJys>=RX(dS6E$V}_6|h99sr@jPYLtmGyV*L8K-@tR5M$7q8!7i97`;tz{Zy`3HVPj_UbeC6{Mh1c_1_yE;k0!+$UAT{^VT#35BnI ze|UYP+C(q4>N)yrwU7tMF#8g7@Q3zMnF4y*3UBKKu~xiAnl#pm(Hs$FEa(LUYsts9I2dA8S89#27wd#}i@ny(UUI!yJf9+Y5m$QbmR>N0AiEYRjXtyA zjQuey_Ir2!G3)+7>)EwRhn+ zb~uU?hnFBwmPUxB1ZQUMo%*qd6=C^73@ATfRLYJ;hpI1OT#SLLX!Rm?SzaPk!spB6fla}y$1*vd$fWiYPWzHi!PAtpqJ&$v zcZxecURU$&okW7pCKB{;`$h8Ot$Pa?*502pC${H!rR{mpWGUaTsy9?8I8p9{fhBN} zD8mqkNPy1H2{Syz!oPsMlL!y+7UV2^aKdNk4}*UDnz9e0Luv%>j+XaDG0{aTjNpOJV>#>If*~^Fcc`+o$s^cOMmlX! zCy6yBU|b4oQiP+LG>k1n?F&;mMR%_L5ahA*G;_88?Rep1O-lz2*DFMmn)Q2HG^gUU z-r1W|TIFf|lL5dU8TUM>XYo*_Q^C05Pwkr?I$ricWKaqdaSw%Ors<8KZ7|QC1k%1e z2Zv&M@P1mb#C&r!6^xCqKvLUsiT&DyefI8n@asmO8=LBiPOpspC&gBO#G9<#QQ3#% zz8^dK&sZrzg3MZ2^N~Gk%W?art;bO+j7|cAGatyzQ8{I79A6-i71*D}J@$lSN!VV> zge|>IYWgq6{vX;)J)Fembasy|**|C8%O$@NC9k#Ab4|z-Z%o8K8?+)XQT&ak?s5mV zqGNHD9b>m3Yvo9L+PC7tZ;=t2=-|O`k=DE9*OdOuDif=|Dc1zQ7oYaMnPp3axmf+O zJ%+bd729>i&RbkhxrR9G`hJmJSCqV8B=?KV{X)C0FnPaF?iZT-1$JFQ@_vEbFEIBd zfOhhJQ0@oK{Q!>2$@>Ahk5z)eO8U6TfJFn!G{Cy=Iq8=)>0}U#_S94EJ z7fYLbk#Xded5O(Zt>s1Dirmd2Zu0pb?IgF4^Iln#hoyHRwgqwDx3YJZ?Y!v7(KlyW zZZ@ZP;#JAujcje7XZI{S5WSr2%qfPg{gaazw!8$4>g2~XUCkJ6eO@8$7;9SxiHk|Y|2`m4qwYpVOR7UxHXTq{iW{Z!3l25 z?L2W>$DsQ{YRpn<@o%CjbKVw{sQPfd@7v*Gv; zd2_ENZqu-}E8VVWK0c-n3)h!B6#2pb-}i;Si;baX676UK=LLV8xWN0L_1Z7nugBgl zioG><-S0cNRRNJi#u6=$?My`O+2}2KrESmsWBt$WiM_R^^XWzK+c&LpV9Yls$*jXF_#YAss_UwXEck88L$$-@U z?aZ>jR*##q>t0yPeJMrst!tO&cWJU`wtwN*G`p5xa)f*}L^ja^-i^c7ezrDxVabtQ z_<~UudGDmkCKjTV&rW7d@;|#{?b~Z(ht^cKy%Is}G!h8NRU_+?Dv>>|cMdb*R~&J3q^-;PBhassNQPCP8z}#{FyG zUb7+SE!!E%UHkl6t~!r#f?V^5?3bEIW|9>h!dUEdudO6b!mSY1MMPv-v&IJu8-{Vu z%RSookdyadJJETZU%!P=x`#VC27XruR47`{B*1y(bdGaqN-0B zkUeX9(JEv`b7CFYJ;4eZCCmo~5AvA)@OZOK$%N<2I#=hg*(~YGCWecKKje#jb_wp? zE7^F)*fpf6XMuj2wfY*{yB1#Ob8Cr7!{g2@1PSsqa_NyBq)&sZ8YLIOT@~KxbelsU zS2vg|4W5C#``a`u4LSe1?Y_V3?J+{&F06|;1nc5efl!=yBn|31&IJT5v8sG+9rydh zSz?;5`c@L^1p*O$r`)+SVT^lhthLZ(-+<{+qD4P5An|tZB@oos0&2i+#^HxEbAZ>f z?%-v%OSadyG4X|f>OS4vg|&C2yxF53Wt}8-tg=VJ|6)ed zNZAG@AskFua=iKIgQ(jY)G*KkO3+uwDfDWQ&q+~*8+D@PBJmZLT>|IJW$umMincxC z&xPAH!Xx?j!TtEmw-sKSyM_GyvNnl7d^jo2=| zIE+AB4aDy9?etv8&Zq||liUct5_`(asLebF;iTjF8B=&8=hYG0&nRCJ4p zMtgy-$7lNqmX-TOEz;@N!rB41pwIhSzcv(+L0)t<7;oR_ttY<9y`v02oLiO^y?`@b zY=;iz^r>h0yAX|;{%3Rj&yJqZ6}^U#F!xRNKU?MYKYNRt8%0o?`^Ir2iyK+o@W(#Q zzV8BVWc#1JF?&L1XYbh9Znp%7gGORt#l|+nGojjK&}RH%?-oDddS+;#cSOVfK2vl*asrK`DN_q z#p+oP_$^|R)W81vBCC&ez37Mf>yIQ0efl5p*4E2OuIxl)lA$b6o=nE;H~*Prykyat zH8&qAtfyymzc-&rz8QIqa}Xl5Qsjz@j<-&-v*XiTooa0UXW|8V+$ybzb$N)Y#c7=( zT78J+E8CyAexnkp$n?+xKGvJ2M;v)%mpu}lqnEWXoL4leAE*?=>2K?xyu);s5CY_k zOs7834C4^B`p3uJ_M84kJAie<0i>H{FGa2_YclM;zh1rGO$#Kj1q>~cO9@xz_&7k= zvwnQs_RqKXb-q3JWrfvpB-`@*X#J7a$@FvrMy|deA(rbIoU~Vl)0pKw4no=oUhc{N z&HT9aW(*l&U#g|?N#u(X(<0GwSy(7>`wG6oAwdvi_@mYJyHe}g%um$E zR0^G{^x3-{ITC^p5hcZEjdquzO!2l_W!7R|M)1YEAc;* znIsc3FoOgcHDWZQMWHS_RKcJQhJ;uMdkn%%--hIHRZ}fD>wlhpD!8Teo#v z+uD|H=~i3n2Bk^}O%N!exQI#xmDQUjtr01NA0^-SxzF=VCLuuUYd?Q{^%drM?sI>f zbMC$8o_p@O=R6XhV(I9xqQFx;!s(Jp3D?-f+=pFVIZ1n`GNy>na6Mz}+0|vdvTOhB z?DNrf#M9ZQz7Ii+>O<`G5+0FF)9{>EsgC6ckC(%M#Deo3MjH$*{smJ3HIlkd7*~t7 z0Z9SQB zsY$WY*p~ev=8{RLEi(PtE%tC!?@hc*t+MYETSl(n9C#m+mwEJ2==fKin{+4bY(16{ zul5w~i;OSCMH_2%k%wMt>mu;SaaHl5j6+fCo8!=Ht$^a_VuRG`H3}21XCaJnvupeg zi4GaBaz!tb?@#jGfKrXN8|&_=jgbfPL8((`|)J zXnHX*N&JYUy;R0OFGwaeneSM#M}>Ff)z6WGuNj9DbMjPQo9B zp7~i~U1;@(t37?m*ae8uBy9v0j0 zUA0^uZ)#4z$x1;igX&h|*%SFzEEqC5=#~qT8ZftTMguy0eO-yf@^7Z#8AL)GcSiG#;*owL? zF?X0FF-ctDq`mYY|7fDbs}HFB4CoT=j|PYwBBK?^;eOUgt^l{4M_CFkagiR>Y`RXzB{>c)|VXQDU*vwy}n2k8Ldu3 ze3uifPa?Ok%52&gSv2*t(VP-`P%wTZO+8 z<|8|vyCM|pfIxmv3{OA&PK^xO?P%})cGGxQaYB5K;mc}9KM4Kkp*6@c`U$53=^F^G>wyO&nCJ1OS z{XMD`jmILwC0d#{bCl}w$$5rsK}64O;NIy3h0=74o5;wpk`;Wnd2xj+vtQBY(<9A= z|D|Md4f^2myU?F5DS9bShNf2NxxRr!$+@97xkR6rcubb$O4XDsdI6!X>3L2^9(Y+- z@xbpm?J$*;NxxFbDHXeZ9A;#kxz*>_hr--XkyWhg_w$z)Qaxq=SfEt1?% zJe%Jl&!aiP&>@a-M8hG%BThP8lIvhEX$Rj>w_ybWM=b1!UQ%DK_m1IS8mo6FO6RE= zFAS1K@AJGw{N=P4B#XM43wpwG5jNizQbY-P$sIUMDr!8a+11a}5TJ`uvooGxI0*I_ zR(VjH5U#gFpik?Vrj=6&^$fNmPEl>Gk7$5iT9j;QAO09{3!>M(2ZiLNt{Qw8l}ZC_ zn4+SHi9hHvwi;r|ej^n2>}4%hYw9F^Bh|6dK0Q~|-whr<8foVf>Y7x>}Via=xZs35QZp0UXCK>+sEcSnDj>kcA{I>*9NL;5{o84u+jC4P0EZ; zajkJ}|HXmi*VKyxmR}8De_8Y50A`r;mo;jhF9wJ(RQcbbwSj(CiE#gwft_>vQO!-v zm|PC~1=lQK2dd$wkBUrP(v{L3r?bTD7b#PCKK&uASs{3duhZ>Ec3wO!H)T*te}!@j zirp50vP)CHo~nOBz)2~+9sB8l`Y0l64*1To%zzTS572PYzHC*R7VRfTqnW!6oB@Mfv>0scu=dRRS?QmH+T>}f6Z6=emph~_c{ z?2VCIC4O*Z!9WC@Nd)fD2zX5YM@wj{tIz_}JrK}I)G#Fps2D-@1Ny-rK-b?xg8K8i zlYJU_8UF&S*f-v)DZ3!Hgi9keCSgaJBeM$kA~snUSx^mU3DIQjngl+jtaWmSS`1ep zoj`OAbc1qX=`#zSHhon*m2T_h!mV1E3XUEZy1ye08lwASOLEg9_ng|-8A+h*z8-G_ zmF$)t<)CuV9MspjNfP!&#EpR2$t(L|rIRm~+6Hv;N9s4f>8~xNlSQ&Q${|}{1J}+A zdmGcWb?Sv(S=RdTLKAFxj`}x_D8+z%IQ*qsPd}D8+;GE!222Oxj}=uF^-+#;5f7A{ zIYHch9fJN|UcqNej#5Mwk}TSw@%x+Rf4+c~c~eq}Ecs;s;{I}xaB*3vt7A+2X^}Z* zPvat7yFRB0w--c#wXDzB&!j){UYa-EP&gujZa@Yni@M%AV-r2$m? zi)#3FKh>mt!4GJ(qZbWJS!@Y$d1lystS7UMGSLspXRN^=s5I}ocmQLRbQ_U)D^h^~ z1|86101U&_(P#T%Na;CqhDxCDVcZdVT{;Lt5A2QY+vWRkzB87F{4SO%A2Wxpj5P+* z60-xwJCPjYJP9_Gm>G!vHC_~e;LiBGanzHk#2+%Ph(5~lT%`S3Mbj6yp`>pNkSWV} zN6jFcQ8G^MX}Jqq*#OoA;^hIOBw)UbijhN3=*RUMIPc*H9jJVrV;WdpM@eod%3ZD#e1Uf(fd;9mxg+ZBaJrA4eOnb|o60$i-E)cKZt_usOIdpnfcNJI5W%M0NWoLULIJ^mvwtR%oRf zPKfgeu{1C;%hkcd5W%$5_BK5#iJVHz#8}fEM|X-$TSRmnUwo#IfH!gc=9h3kte(_7 z<+isxgn}@yC?Yq+xS#t&xu}$wJ(*~mzC_jJN|sYtmn^2^^$sF~eL`2Z(S{l+AYE`@ zz&Ot8v+^sVJrEOCQz|{Kc4Nzk=xAWwpt-fD18FWs6zlx8^8kk#XO0B zj#6CzJzf(pdz?_$>Q^{0*IUeZbPdDe^7;kgW|3kG5+%1MW-n1U{+FJ)nwD}zroP>o ztfEnk-M#9(@oFziIid0Nis$m^@DPp=ghZ%?T&Ci7oY|5ekWkO`#eC*pg* zWT#QQ2I8ybpkr<@G_ak@0=9UKx?M0WlPE4vB&xfKqqA18J1X%njx<254^?vgVCQsq zTB5kSp17XB=P|Z}e6Ibd)*|2xy+oUhof$I(3hgQx7m1Uk7?u zbi2@*o4vR>-V{jV4J7G9kKU=`pe4{TJ&-HZ#9}QtWPJ2z*Xnj;KQP}|t?LMGS56yC z&YW=bLiev;FO#(a|9m7&=dYB%S^SmrHE`K) zrGe?{-v2n+$HM|uZ$3;=|11x)0^`Cvfww|c7U?tVLFffOG&@nO%{`(K0Y`J0=P8#{ z!9V$%=LQIfY3yvC9vGEq3iMJN7ra{k+F>Svv*RGind5a z!Iu+{2SnqdR(vxFfP6`;(*USrz$G!tY7?si+eycq^v<5_H0=+E=BJeTai){+{rYdE zSNkjkHEPP+kJ1yevL#Xai{zaZ$g7}jsq-{wiKk#%6=-l6Y{U7c?m11UpGpP`&Pp0v z+1Gf!F+Je13XR`l99fm?nCKJBxaeQ`k{>E8_A^}ay{jdjx<-OzzXMl9j->(5_zpg@ zN$@t^NTWt?=LF!^z2#q`SJdiE7c7{w(Lu7`2r~*UByAfz{|yy zG5MPg`7IlJ)C%;n^lv9aN3TKqd6=?<;1qB0U@k%89SWzL%-c$1r^>z;-fSLZ;)3Nh za&pEEvun{M2oecJwX7ow9&tuD_22)knZTrf|KW>JN{*5XC6u z$yax>TFR{8nAXpLA(PupwW&OKPBsZ!gu2e#1Bl19ACvwsj(U!zMR5|84aCsYse^GtM-4QdyLdHHJzihc=1}@X>zf$rGeD0 zui!3rvMb^V%Pehal%y{T3fy4g&YNGoa|tz-J%foS19q*53ssn@C92n{CT*q;r-@w8 zx{rW>Z3F3uoOHhW_CM>sM`EGx#3#>yzI$2#D*B1;J8G|xa_Toz-4sm}uL)15AIp)L z)KiyB>vYl6m@XoC{9(R|?lV=c?`^ms(Oddnv%z~4CjlFNDF4xD-m3z))4 zn8m}Cdzg|%JYdYg4N@3Jh&n>X$a3|>UDkx;gej~3OPv=kWAy{XNN?lLr=*vvxkkONCm2@gsBgtPboYr(SfRZLL*r%AnW$E6QlW3g3M`l zX7Z+HzS_$C1s7KZR^nV6LaT}@s?#U4?!@hTIHl5({}1~k96&4Iq% z0`*Aw$&3sOi{(k8D7|Y~_&J_hmh+FUw?2RUS9n%`{DB@PS`TL)dp`65fItV)Q+Pr6 z3G<{}=RiAEul}=JRurwnftgx|rNt?wQ0CD2^=d^jV+zx4k+ap5cg7z>&a`nTHC-X) zVziaiQ}JDPXaHln#=#stEiyq=v5|`i3rZjQ={yU_j*@(k!XZZG-a*<1elV{wN56-^wdPfc5G;0v> zKN3ktZ#K9B%8RV14_pDc_Gaz61Xa?CqoRNIK5`9<2Ocyg{7eFKCeru;RqPBw?r~i+ zA`qHZt*jyKHl2pOT1whugVSo%?J`{JSYQeWIqpL!Dvy_NWaa4_y#)X@!7t^ZSIH!-hCcUf$O)!ZRwGMmnJdv z#~+pX?a6Aw{!cb%&F;^06T@+Tw~qh!(qx^*`Y!Tn|99b@7*_62kBmFq=E5&$vHPW| zWH+|xM#dl2r6OOlOZ0TjlYEy-zEEmDqtDDar9bDD!i41TK{8KI&8+RO%>3EO{Fnwi z+sWMEo&(9ExvOS4W;AV#_TFKPE~W4t@iAQ^lW9MkrIWIZx?IuysvEf}WeRtzyDG4khpdYoK(#9C}2QMy=dp-gP^L`%WmulQR;AMu@cG~XN2TQmoYL7Ju+Kif!PB-&2 zbi($~VMyu%4DIBtefmH6H1Rk2`)B?({*-u|{QZ%?kNJy|_DgfA(LNJ9~(_(4PK zVEO?6LDaAPC+D-W%?h|N6e1LcBP`CeuY*(R zYnCrF%U8&$(w!H|-q9nRsAXO8+3}M+L*Tcu{_OaHo|Fc?U$4;UrL27dD)`CH2<&t= z8@tcpFKkHclJo!{DWUQCPF_DgO(jF(lZTvv;3+&5j}cK9(z**FSC0Sqzb`Ds7A0XDpSj%5 zNom6#e`mu-iY4(Gb9#Ja{7GIA8fhYQ`thgp*%*Cm^=U8~H~>@oOT#4ieaM-mJ^liv zp9()Imc;Mc@R|BcvVz{#%TCi@$@!%-+W7qjCGC(S@D%)H{4yFfM1oy*KX&*ZTRU?A zel4444S4^1`%{V~@ttw!nedgY;CoZ!Y4Ek?o6crq`}jlK9`;y9}R)v6Caa`&-U_9g^v_V;`7FBXTnFag3oIYof#jU&Bmv? z`KEcj!wm= z=gXf8A1Ri^=US~wM$8y;y^^fpb2T?{&$M3YY&Jf>#gp$@@X-(mKIaX<$8*=G!bgfF z@wxNXGmSUN3O=`@U>*{mBtO>~ZH(Suc^ZsP;pa(tNy8)9Fe`e;NY8=3ho7v4MY2|8)3Bu_QkKeao5pOR|E` zuZgfbWPe%s=xjDVpKCfzZ}sD&ArO52{hU;MZuxZhNU|TcC7^lpy3bsfhGP%Q20Rp^R?Z(EQ35J1K%etZQJDa>K#ghH^8LgH+-TacQpmz!3 zr_a=XI-8B%PuRQ+iCzDA)DTGjNdR(-TQI+NemZ=lSQ4LF!W5ofo{+5IQyDokK02F? z&;KCnp9LQcf#5U6n~G2Or^82zCGmNLqm|R+BU!=cVUA_b)IU0#jZene@zD?nKL0Wz z6(2X(MN;-xErCJrp+WBp2EDHy^uA%>`;hZf$_z0-@1B45`N?)oN<*JpIkg&+KAIn# zZN3PY$^JO<#WVGXWTm}>_YBpZWiMY-PdxVxNzJ)-qm}BSWaSH@sS{n!02d`+{he0e zrMM^|@;P1rj&j_$;)66)Yb)NBfAPFGLVPN6i66g?)6@Fe%GG;jS#0pqk8oCE^`X$a z+rznJdvRYHz-3uGcf(s{EOM=QUuxqDBt}kHkM;7B)>VyD3GZ|1#+%%o!+;NE`$h~@ z-|o7Odna6f9Tw|d)_7%eU0+w=`sL(bc3w1J8!!}ZX&m#|@~P=~KMdjL=C57Zv}uOC zcSO0^?iNpLTmzi1RR_i}AkAD=+=q)Hxe~|ySU$BoP|E4=w3G)RHH4s6+vSi){OCe5 zN4iyhhI{$aiG68_=@U6_ys9rcTI*9|CmoGB)KYr$Z2VzGdRF-l?>gDmeBSJvOYu=K z;xT!*-tZp?##VJUSB74&X$k~VnxP5u!oRR zWj^i%I$IO>I9`%dyBG2=7(q&p`o$JbV|H>=3+%584~N24c$&ItT4K&Y^{-#!o9Mx1 zAmpNxX1@AuP>Nc|_)5Zn8ly--}Wwj{kR^6&;a#4KfaN2T?#Ugibhbf)PmrtgT z@hlZd56xM=bh6NAa-VS|G3&a%=sD;|A-cDpJXq>Rhqb3W+FjSB&FCr`NUTX>?>c~9 zT^CC$U?;A|>{d7?Q6<}?hopPtUhqO+;-2j{PxM6DqIItaZb=( zj`M~@Sr1kNhj=|v&IKD)^Bb9Gx%f89YPo}ox~`nk&_jTTd*%5OBYLRhrRyN3?nKqu zPA_qXTdtTzKWkpOs^n`}y10J$dhuYVo^CqXSEK$5aNt4n#jBULb`_6fc8{TD&0Ah* z6Rv1ZZB@A%z7@jhyJ^mSn0V0t!;O#Coib*aGQ~ZNiTHW*aa&X37TZTt=Vp&p`PKCB z^`FX8_LhYxCKZ4*5H7S-(7GxP-lkWXAQc8IrS=ketIMwu&Un zZ$+4`qeY1f9Vj(7HD!p~R^ntlrHpyuDy}{6z?$`7(u4CE z6L9N={a&8Metr*pdIa3&ndkIsKvb4=<(4NaQ!MbF?N=qU2u^v+q|6&F1vE=89z+t!NIu9A|6qkh49f9CupdUv8c3 z5tiYul1S=_V(~#jG}=SV`rb;q?6CUMudFHWZT`AISk@Cen!hyb#ee6eYgz2**!!~$ zS7Ldd$0weSRu=oBSug%vzI_RINVu1-_Q0TwZR!Pl$5=;C`W%`i;s$y#gL9~^QLOsM z*Xd3(mxwQNZd`l_jhr(V4J2=F!mYRqT7xr+jlb6hEY6eduAp3l<)SKegU;Kg zN2+1iRD0-hJ^>XJh-VS`70*T@GsJJuEVmbqYdh_>_)CQ_Ry_2{Dm0=BmoYi9ZGBx= zS^j#DE_+^BG5+pawL83C_f5Fz>utf>blLdU!kzfLBeye=H_XIhlHseZ!1EBSxSrit zdEzFQx|6=qp5FjhoWC8}%%skQ_i7!p4CX>t^zZIlHgI7JMfF z3x-XysEV=Kd8X-vN!j&sYeF4s)O5ADspg*{CLLvj$T^0e#YK?oqFyam|+A0~tgw1Zyx~B+45tjQ<4YMwIeWV@oIB!WdyO*8 zqpCMnRw?adM5Ko()ZJo~<;5LcQ;o8X+I0Z~gN}W0N^ofw5kuiA^GaUoq)l@Oj@rmT zz=22fvtm-oB9%UkZ{VIBZT?7hmD>C3L8A>HKX=35xJQg5Acm4Ga9|+!phInX{2}bM zyRJ>^8pV}^AU0S!l)&Rw=4zjy`w$NDJ@Fv!dQ7UP6J7!LKK!J>uuJuCur`+^CM=Zkv}6W2NN0As2oZ+t7`F-!CFE?j4(FC8O( z70=Or6+Plt(R76_vmOZ@a7($zfBSz41NAnEnHb9_f?_;NBfVY71`U`zb7Z_As;wuw zJ6tr?(^9O_pVrty^PpRjXDrOUX?$z!SZ;iFexlJ$2>IE*+RCa5Gs^vg`gV>C*7-up zQA}p%8(MHtk7|{kG&2PkJlygr?!hA7lU1Sqr&W_$&}1^#KX6u)gPSD{Cm1 za^-VpQ)p98dn7w;#X^Z zzEJF%&7psTcsr&L~VA_9zIR~k_$!HrROev$pRq9LRJINfRl*f zMo|6YcPINgu=vwfhI-BDJJIg&?d)*)F5@r3->>)^&7Y(RKR29fG9zDt6EGeo8yzgx z*IXsjud&eJh67GT4-?P$T4H-(7VdghCaO_|$r8+bwDA&eYK)bWXZeT6+s zJJiEGuskd>T|AiLc$M!`!L*!mG*_;^YL#PYv&J;=u+-OLhI4^&lTbO|2+8j3JXvXU z*SY25vff}g5)Zh#MlZiE1I~o&*DZaxX1Gbhb3`&?xLdkcyomJ1 zxl}DI%qv$n{?1$g8W+sB zyzk2Zcp*f6!YBJM&|yA!Ta^&z^GMEJ${;~ganD1yEI z2B|M#>}&1HT>18W=OUU{Vd}qUtUIms{Y(c=Og4MQAJ-C6^@&;nYFEbE^J-L!F6K#v zA&Ilx>s8;Of_{FaMQ)>LL2crpymr^*ey0h>7~WRLX_9DqGN~ zq7GBccz&|rx3kjBHYq+c+j*<0_3eRLyC>!S;?aSzpY6q)4MIGiS(&6y>}&JwOuHP>*zqJ*ne z&9nOm+|`^($e`vDM+u+h>$xSkXXE3D66>S8L>JZHtb!xZI@+H-gUSx5dA_fCp`*mu zrQ1E%Xrqv?IkUCPzliiyx3l%PNI=Yz7xX}2Gf+@`C)<+vFaGcm3(?8F&p&~+*nM-a z_7Nni=iS%Z^s;QvJ?SKSeV8gDJ$L2~AD%HaB+LtLnhjw+{jadc8kfYMWneUVErjgIjgUL&%$D^Yq-{RvZB21CE5CF<#1 zOBM{cCt^UKud+p0$AAeVHU2dmcwD-;{*IPte>KJy_4J@xrrhnplg*dS$g6f^4%ILy zn^@UT0KEwr)CPJJQ2%xFu@Iil7MssQ+`D+LtDSAXPCf#C1~x)L6SR4Wc^ zX9Xm{1e2*8dsghhU?|Jt?|+= zu7zqfsbn>%U@L|oq$;#l-B;ML48_7Cy%bfSs3|P=M9X2=Ra{X#C>nuWs~cG{kk~>meZSl?TBYSDzE}T zG=@vaOU)JBn83d*Zi96|`!k2WWW#0cZj$`CAwZYftY*z)tO5AZu{)Oid|^){5PlwV znT|W{0d~I1TdX_ORzL|EqyGfm;o0Lv(4T{6gW7Uqn%ng7L3-mZ2)@V)7oeBPs+T&F zo!|W%>3ljqKPt+oIKm%UHJW<l2}#2oL7D!KqoZ8?Mm8qeWiL(XQ<5nJD)6^}7T#-Sv3Av4#u0jXJ^xZ4jCU=V8U5P>G<7*{;)4udu_T;!57%3!` zp(#~#E|FZM7W<|+qO**fWnX7bsxgHlqlJY3!R@h3s$Q8?NK>muUNxiC<^v$H2mVVugbUB336?a{#ufBCT*)Sg%`H*?hI{#6fiIW`UGiC+<~3#cCu zj02h))%kdV|7NB;&C)fCkjqp&yVjEdZH;DIU=Vq*IPY+1YAAA<+^f2IBGWpLTVD*@ zToxT2_Eq1^tQ6k~xFSeKgOx0LO%jtz?kK8!?TIcwDQij_!IwMI_Iy91m9vDp|9D{= zd)ci2S$Yk==&rc@ySH|Pd}IE2_r#7+?iU?j_(n&_KjjM}j&y|b_H_T#=#EhSRXH2` zIzoXvFALt;5gIpg^t^CKXu>0(U-$Kn(8QlTdi1uA(4^s4dfx5`O@4aLu@^f+Q!gz2 z?TmP7C|)`}URoM2ofU812{AjC%MN5Be_XUkU5jn_+%IqV1o-a!AiEy;3V*h>3HVn2 z*PSl_-}v6gPXgcKPrf=8_&&bo!bQM$-CyVY1o&Qk_=8^p-?GXP6~K4VT{nyezSZH3 z?*ZSJe>d$o@crV=*hRqiz{QQDfbYCN?4N%+_(DU&XUYqRa3aG#BIqO*mAAY6rWAMg zeOIhsPTF{+I4+@-t6%!m7cDd9 zgpAth-nFl~n`h#wDrC&zWs9%5sKJ;q9dXL24SCmY@;6uEj(xgZbyt3JF%X~4SF@<5 zx#%G&RXhFJacZi5f6)8foRa354|t!eozYyigmy}si|#k(lp3|O%y#ZGW|SIpc#(FZ z#*A6Iol>)%2-)m*N@?W7XQh#QrAX~88hJy%FQ$>%%`@+zkvW2MbJgAIKgMav7k-}I zFYr7f{U7U{=xxG4n}<;J{lpv}B=W$B(~N0{jEbHToN0IYn-}&WUh;%Eh>OG4F1Mr@ zd-xafzvW$f+}}L5^&@|Y_2z3HOMcSZBxCcrMnx}@BQCB^nAMH7Dl>oGUunWqXZ$9Mv z5=q}A`+(*VEbJO`w*A@%1JXaglFQx=KozPx*VvG;97|(5*DYe4IP_rk+O{0(~XYjLtUJ^3CCLAwbGo1wvJ+k|S<-CsHlbAcP zyzuzFdA0bi_{A^HJ^720bG|wHMB1$4+oOD=_dUi!t~p?~=&^_{AJnR#aY%VZObGw5HafL;(; zL&m=xd7f4O^2vV+*eUuK>KID@vW=WL_y=Wd6lVvLH#0Z#a8D? z4$tYzOZD@8RKH7n?7)xPv<{}k*rux=tcbD3biLNcJoocYtBRU2cjce1e#Td<`)-c+#OYtgi{1DquD?4`{Fn%X zPpx4(mZ6pKa1`@cNAY7CyW+<+cEwLhSTs&=GzKb*_2!{O!^}3r zyzr_%xbGBZrSpv?AHx4PeW&^2v)o95+KQi+^w{{tXt6%Gp!>`4_#PT?TkFTX;|$kP5=L!3aKRYpO%C}iLXP>f6>kvCBEeR&$Z@1 zJ}Bog|K$|z%cq_f`I-Mew&wr5)6IWB^B*CNi^+)+zv>f4mMX6Jt?55cPye0dWW3wQ zML0t~fvCEbLiX%O)YYd&WpY|HuOim&uTiUXsi9}T=66~}=~fTR4BBk_eYRO*zx*LBc5c%R< z1Y;QN8P1FJ#sz^wE5; zt=5w-`Q*>p8j?igP4b;Sk7S9L?KE}-%T9#w?-lAR^Ax-i+~M5jea`PJ>ur7CowLjP z+&r3j-v~6tCWI>?eQDC-LY; z<4EhKtl-B52SdRl-se~q<~bz$akF@IzqEAR89kxjsmY&n9L0OQLAAE$7{`J~3r+@) zIvX~IoDaEl*^W`1hES1i^mwvS`-$T5hAk94SNVNthNPOvoh59;yATROxQrlw*7x zJW_Blc*GfP34y;xu6-1do6bVf?G!v%U=b|%u`}8oazfc98abN`(9}Xx6J#$0X*ki^ z?u43_G8>?epquZQAg8;oti9U-W)%~`frV|OZ1QpXB`sajie zj5mV2p~!A$^@fm>Q7r9j8YSa-FhK{F-Aut(@o=r-3BKX1J`fUW-mS5-N0u)++Wf7X zoH?I_j5mXf(CF)suHdcUo6fq;A?H2@N$ZF19HEV)^+R9I5$cpDf6fui@nKbJjFUM>3yvE*aKVtnSbQe&_?Ulx z;NdS)39TEiB)7I_8#{8g z7Hl(4nney!QDVas{jFm--(KO{I|ci4AoxyWU*hqR`qL(7!CS%^XwP`HV0R94a7(?Yqs%m4yM;{7S#0?9L)K|8Qq-NaD(00$2p8a zs(T~npfkE3qxHnPbM?1&C*jtNH*$6x`wHGM4ic?TxYlUYR(%4yN!hHewQHSp4MHBtIY^rYAJgJn z(prnv+LO99@(MLS$%*zrOJ{ULV)Y2S!H;te7JNdBy4X4kJ+b6_C-`P-$ME1jXC0k3 z>W5u#ewC53k6sJD<*e&YJQ53Jiq<^p7rGcA~Yz zE2Cw9;_-8JP5@^jOX0nVC&vz|Z%<;KSzmh&6I&*dOkT!XV%-foYr7ZjTedT?dZezt z`ULz{n3wRp?TIHZvgPvxY)4q6vte^$-L-aoLfFLP!*qRs3w%c@ z%&gxqs6LWf605zs9253<@TlZkCy1B19V3mAjxTtudS%>IpKw&TS(jSdy^ecadck_Y zrB|yH-j#Kzi3S}sS!<%KZw+o-p#3Kcw-xy09|(JLb2vW_!v?n%_N1oXP8h-xU*ewF zpG`A-w#a$)GtDZ7>8K}*)wU|jLO}e>6thH&sD(*~{KO|}S3!Ky%d;r+S{}bCGTI|f9aX-UrAO@(-u!1>i!k&p$Ehuc9eQ|90C@>;2ma^^Yl7GU!_Mc zVE2kUoNLv?SAd6UfOQHM{Q^o$ zm26PMuLBUIg{3fv#tSu~rmD1MR^gEF4Di1rd9Vi=?0+Yp_Rn_TwLUE@rD^sYv)Mrh zf-RmK2DIO@VcLNAzqh}oSduW06r7eYz$00K=V5N-VCgsrp7jE4=QUq&SV{_^-|$(u zwdan;#Ck`|6FjOh3$?i&`;c=CoXXkXXQ;7XKiRkbnf2V%(rHGv_*s+j!69!JzK}T4 zMLm>fluqTcN4buygDX4_{e6xcgHIGQi@LTSm(obrCP0;;nJCM}M(y<}9Pn5B0XUwn zenz+*%OGyB!rP|T1ngnC)`Y*_1p&YK>}71_vODinZ_RaxUr+2yc(_unw9iPBABlPur>O7!ReXD=)DK>;3wx%vZ77EbK6?nrls9@dHhWtjh#i z%rAU+7`Pp8ug6PXq0W>d-kwznB zzkBOx_Pghk@zW{n&HZjJiu?Zk?g@r@ipgZ+!2i9n5%KZw1Z4~Yt4J6_$*mVzCEqxA!}YVY}TWV^tNJ7+fn|J@GjC)E0Z zKNPQCOXk-1d^rcLJ+#|=$~nk>fY8rJf{1Cm3XtepH)S}h*M^)2jq2{i1}zk`yJ&44 z%NeWeBtP)AzU$A~AuUj~+kDE|!FAD4@L;^`K!{xhb+LuWaF*?lS1WFRIzOhU!xFLe zM(ACD@#jd5)bg&owQX$9tK3osaCgqDIE)SAB{ImSqIyrr*sVcgKeQEDEb*k?6$mJT z(Yt;@N-GAmhJXsn9Vi84x6d}DV{C{ph300OS~+nM?DmA5$H<4Pc&|v(wAnfc9uqQw zYxT9cOkT*_}rHY;LXt%(_zQKaWR#Ry5*qREB*jD6u-~voY8r;Q2pn^Ao z)!iXuho;e%kW<=8JgN5)0@ombpbybkg;WAi4*+clfm!eswrgcQ7EUM%q@V5N$II5CEUqSkyDMTZLRE2ujZ3f8GmYkP+Cpz|Fja$aBJV?U-P8h;1?4iAdj4mWsQjY;R(NRTjmL zH2iTex*eo~(Vav&qIJpwbUb>1+NB`1_Bb1K*+a>)sM$2on}bnq=Yb-7d@`Cqv$gMz zNB2MqDNoHOq+!^h)o?F`MNJT07mRLK(J0oi@GjY2f|db#knuBL2s%-K1m^yx*Iih_oPr4eFD@KEG^QStr2(1!V(I- z4igGSHvnl0X*X!nTIdN~&4LzPquX_df<9nESd%so2HNh`v<<>4Xi}(ZmQ0~4-3e*{ z3sueTG^zT!rm966A*oq1m8A40Bn4LKN+&kpLelMLCFy2O(!H9bdj^p-NzZt6b1F$? z3PPM(G4LgHx1{)Z;00fK~PNph=m-RT`5kB;> zQMNf)Cih;0WqT}SfQ10}f-}|jFbqt}2+l&&lh$-9qjeNR8ZqF&dkK*s%6fvY#LL#O zhSOn2!y1r6|5FFqc7jvuSQ|cI1%3MA5UryID}xD~2p*Ac5HfI^e2X;H8$9VeZWBT9 zR{$@h;fqOyy^LK5p{W4zHVPFE4Q%L{V3{7|WgDPhuxuwK(IJWA*j(6^lo1W59^upv zUEVax7%hxZ3T(*%zO}I5I9SPL;O>GQIp}b~cC(XdBee^SfGb$GF|na=?}iH=HHpU{ zGv0wN@v_%xA_tvgH=4?KoOOChsOz=5U|kS>s96r8XmSX9DWgT!S|#Or%yP0Sn5C_v zP!WBpZW4H<=pNzZD0Isk}^OUH4wEWSsF&b@RF`%fMfWXu&A2pVSN zXbz&$zJjttpokDEI_2JY^%{n>mM2jz3pE*60yMosyX%BSmTiz;*YOC<9ZXpw+ zX7AAS703sWxW8Qu@_re$Lgv>~$ehGh37O4yp>co5YLE}uG~Rx88YibGaO&a2Dk(JH z42?llQ@KHqcDLTT zRb-cESoLJ&B6G>oz6HeedWWbai+Z%hDFV+8Iy-AZgT+>j=$c@ZMRsHGVj*0Y$9!e zNLrF)PHzz@UPxxrOZT5iFw(()NI9}!h>SAvEo3a|T#$#8)7|t4Vx;hMEuQxakeo}| zg*3@nMQKb+kRm&75eg)QMoode5H49JNj2Tjse)s_)F{1YkFI{Q(KUla#(sG*$|SQ& zq>yd19$R}g*^m|)sfaF?bf|}!knKs6Y$t_mA{xOEz&^vj425~gK@+kLWB!n^0CVU(xKfR6XUk!*tJaO7kkAO;#0x5 zLhdX2^d*bvJGd}8C*k@dDQV?oyntUarh4bF+mc_=zjur4HOJSR$Vt@U7nk#Eyn5s< zV;_!0jIT*@?ENe}Dbe*HRoHrOo`yQ{{bu>(bVRd5u{KoW?!^biMc!-CVREZa+*jeh z;AL-1=R^%(kMO8&=WKuR~Tt#44@^>xkEE!i1h89mUcl3T*Ag%xvw? zVkp1$1qq$A>o} zk!WAnlaT`=sAXYqQrSGxy#-P)vK<*&gU~$xsWE=D9Ps5HKs#{6KFErApO+M4$F5`U zx&BaBM*DPsXn82sn}6R#ZfM;*#158QE-t~@ znSW|!p1CaXEg9c03hlMOG$Xy)!L6F+X}A>N-;?^^zsWV(O)d#4x-Z$luW!&az@F|B zJ*oAzT;r3fPky4t{6Wl&-FlXo9{KG1$THtnbj$Vn{`(x5|BD~Oj2EB47+P1ASUDF` z377cWgZhRFBsJbhBqUY6#RZzgf5;=I*4$?0*6RtJIZ3p?NA4c#eg)au@zKYbFh{@~ z2;u?tF57=c&a@Bgb7hxxfXuP+-w~yIz~; zP=AGaK#5Iy>KWy|(}p~wELRV5ZF;~NrJPOTBu1Z2wyQ3jg>fe47pzK6l;op0Ma+e& zV>poRfJ2CXBz?KtJgi*LVdX8OIIP4AN{#x=g&hBtNnFh86FRvv?qGMK=HSIEw%O!% zmhVB6KKJQHO?t|aH;pq1+?8DGuBeeK{XQFSGk?jc`D?5K9_<1kHNUnONS=q*a?F{h zfhy-{bR1`!5-=~H?w8P}0d>LU13mZRBf)4L`n(ip4wd@6R4}ih-boUeW9tR^8SQ`XGwuKV4Ag~B z4zm9rXaM{QS!1W#|Bs`TZ2>&MU(7u0|FHmW*2RWC5!Lt6KK$Nb`+x2$4Yv0kBrPD)P1E3$oJ{YeNBHc++$*SH2uZgNE<1}zK>zv@_%mZYx|4&G{(M+A=BRX zvZ(I(zr)_wD4i~*7s69qV)`Ncgru9@a%;t$4g)-nVcpYXluU;a)et>W`;_otYj7=& zFV!t&uru3x(@Tn2W6C)3#5F9Pw zh$H&XYAj#Kjl-$vyl^`oTEvr9c!}6_Wh6>(Q`cXqt+5OV>f9H}i9M8?7R^w1f*92e zk3Hnay{vIk)sP_UM3o5ySOQt|Sn57pl;?b zQTOuLQapx5Zizh+6jKBrNRXP&mt6i5H zMVS5L?zzgXI%oFvmC8~JZSj=zmg&b_+?}0A6@Zf-EjG@@`yPxQ$2NIJjf=;8@x4Q@ z@fhGSVAP27F$sG=&ZzOl-a8rF@5tF1+nOoNi_{4?N!_7MPKu_p9Mx9RbS3Zp3S*|H zqEb6m%acZ*7LftVllaWs_`R~0_@xIre@?PFzQj45tmL?=!F8o&uFom6$_J6_eV@VE zEPHh zy6hb7sU!RW?}^g%&L8l5cm};Ri5oKIv5x#&;~le){({eOjLhhv!_)H8xiL&{-|Uaw z>=V}@4+_k6hr|M{4BM(&Rep!8W(=mtbeyuJMQ;#E3I97Ygg_O>9DhwEnW0UsnB_p6 zsMj2CVnmTB{SvDWH+7GdGbW3ByDre4lEd1c-4<&|s$Y&b$74x=Rz{V^O9JXGh6w%= z7n+i8-)y{w`Hk7R#?%$~DJ(p8Z`SxX)Cc&Ui#O(Xl#HXLH1)FqMHbp5lsPB!z1SC9 z;&MbMAYlmF#KrU(>Eb@7Iu9Yj4-&Z*;sw-GuFB>M%GwLZP@hN4wm#d_*{t6kD`o#7 z!@w3>27Sj1dp;8^LtXe4hk1|D_C)*R3D|z6*rfeX-l62MmYvU!@D2XDeS7CjT1nQv zeY;UI)d)fQNTxQybQvWfUOcMlPTc5~gvbn`rgB%QKZ^#`ZW8)bR0ZFzshx76<*r%( zn(mt0aMygH<*r%(R)s~{54Q+EnXacqZfeS4BhiKHVfQl>L?PC)WpFM8Mg&{zIgGQN)#%OslZt^4=C)L)}XZ7tgW=}Py zVZ-MEvLds8=-Md&KthJvPt?<74Z)Nea?Rob<&$@%0!T2+0p85FZx{CPS;+ju$M76g zRhw8ik&gC;a%X- zjnq5zkjqdbK__;-&_LFdFX2AarbupL_M{4vB8?v5DEK>850}748-4ouKK(2{hB8#W ze)j9nuUo8AZoHxd_Mk@p817q<12Fg0f?39l`QU#m%&n!zMtNsLyPmak+4wDmuQu#G>6|T0~cGa zRc*nI(hb`24*j@PRpP=$G|NwQ##Gww%LB5AcwLOP0!HkQdiI?p(w?$?R1#AuHCUZ!{&g#)x{ z|G_CkL*pd$K)*M_$kG7-#K~lFFaByJ9>9r8RaPa;hd=;Ju3*h7EOv|kvO{UnyjX80 z(t6bC#0S53{1(TExamSzC~f+}Hc6)I$A5I~ieq$S$ot5Cey%qk|A(JMgB-oFGQZ&B zEqFNIus_kDI*RwWkt5@E95!*Pi_2T{0DJMNDgA2i0)`x2ZvaDL1IPVph-V@Mz-L#u`LK9!z)E3eN~hY)YfZ#Pw` z50fvS1M3$Bl&fDJ-(wsnesON*D*x5HhHVYSK5|4qZhBcPojF>@j2`d97WYbWTvLB~ zpm#;LtShEUXLGzMu$(t!2W``AL`8EOKp}|?0*PuF`IC)f2*^`OpTyt9`$kK}t93EL z-EUlIs&NW?qL+oSOipVNi733}{NYwK`)dpI`oi>?0Fr%OSt2JQ0%CBj#YnwDreZ&T z(s(|90Z}AO7b$^BIJp83Ytuv!MB4SR|DP_dSAIiN%uZiTWpLvQvh=ADUY46;AL3%D zTx_fJEBodKCNp3}kZdALmkUvRIudrMd7jhs#88?p9vXbjTrb2kgTL905IV88lGce# z&ZF>8N|#U?5q$z>eN&+jA{8IoNtVH z1x&5Da>e+PE|ti(2Eo2>bJyFHUO(f;p2@p<_)P6dR<=Z@iuMZ#epzQ0_NGT zR0KB`se%!pilzZnkfmO!=tp#=i0PeZ#L`-NzLVoy?+5bdpW#V;G>3iwG#+K7wCtcNK~ z<%jaFs}p&ylxC3UrW^RYPG%V(&voXIBgu{R{6gOn z?3;4ECEn>@Q@rbljGc15CEn@Z+WN-u36bq)X^B2J`8rszE9{7%#ZP|jm*|c}1KPo- zDbeY=*msUozrV7nXd|e z6WmOR&aSygeVLk#l2T@cdTap_-Iu?Fz+^Q8F$sOrs0F%4PrT6=Z_JH1`s0m(c;mQu zqeye{#z}f3FO9KtEf$>BG)V~@NT^IB)7P1SWj^ssC!ZNdBVc9j8elD@yT?&Kl}oeFuUsf`aZL> z2=kF5-=$_4Ae_v$gp0&^He>^=hoBZ5T}F`%!3=fP{8afaMg=xmauYMB zR#a)KJcPq{~K2uzvQ}iz>@}5xgV!dg$DS2jj?}HSY4C3&2`KtTW^I(nZl0PKSZuJh`$n<5L@C; zi(JON0Ffy50ElLqti|5BER(N%OlzyZxkdPSICLS*A~R9irw&}8CwL2MVqa?gh}ZP! zeMS~d+^w6ak1g}1NAl|zwa5m|s$xA#>ooNPvl6+b)COQjVmG8kb5-XB$b1qaCcC~~ z^OdfxB9F0JR8`cfMo>zg+W(V{GBtN-FaFi)!MQ^3?gb5iloH}Mxi zOYf=Afd4}SEB>20aQ>O_|Ek7699u#Yw}QWmfhT@QQ%R60J+8iQ)-r$qIZB;x5+L%S ziFf`fcwckT0KCHqse3>VolrNWK-eEIC_XJOwYwNk1K*KPMSuyp*!FVj6(6a8J-C@J zC##Ikfj-zee8qAS**7&>N2JU+6a;0DV!Eqh5{Y}%o28y9sr9fW8eLAceJ$?;FYQO;cZqt3{6|Tf8b=NR=vjsDcL`Ho8)*Dg)1}Wx+z8DqMtL0 z^2-x5b1T%1w~PFb0Epg2;w-g%MPQtFHIvwxD9u$DnK1Sh1-e|Jcu|135esgkR;*MG zsY;%-kHN?sK$%GppjabuwmjEFj9aUdOUK&EbB#wAUm| z1F0ZG{c4P+NtkV>rKz^R-KoB1ej}(LABijDZ7Kv}jh45`$z!SU2_ULp2-?NH*3Lq1 z=#H!RtIrkM+m#<-Z&IJ50?CALP^FB~u3Pbf%pK2R%58u1Hr)gJk^)Zki7-vs40)Rt zkVql+r)gcEC9c+<{!bjb>iiDX)}JVw3I>PV;+9A+qER&(a?1&DRZ;KY^iRf_wFhvJ zHTYU$v6BHXl4NO4+c;o+%o+28o(fgpU-2%+Jb-|FTIZjH)6Vo8MSf$ZR*qJQax{DV z8+2L+id(4jP<}^|sUZCt0h0TPlp-E(uTpRQ6=)eZ(e(LkwQBF@coUX=VR+W19$&3` zXtK~j#!R-lk&nbhOE)^$maAv&tYgA+uaKWaUn!aKpP{laj!24Wjy&xZF= zsXYm=!_GP;+&w`6c`BJTOWmdc5qRI?NmF1e)RP%6Aj?b&}D!dhT)-mBgP_p)DO{a84mRcuSHGQw>&(?IcWP3R!TS8|$Eq%Wa zEeFyUej-*RH=#%!$Na@I!B<;_+DD(ySJdb|V;;dpR-8=3=A)%0>hU#XwD|eKyS1Ep z$kB%wGPrBY6RtlnQqwqhMaRO3&!?R5E7|YwC8dAAzlS$Dqb`#ze;()bbB(%u?o#Js z%)-Wes>~*x7@%gqq_F*;Mba&7;`FA7--%QrH=X6`^K_ZvvEJOs#dt4^ppD6oj4>S+ zuMS9KY|_3v+uWpKZzUJ;rwR@$j>__NZ^nB0iM8I?+L_t_0JBehVm?eze=;BZ>Rt08U+pm;CaG7fHA0Z6(V#{X zHDRJAkefnaCV>P+z@FN6Ol{>d16W81PEaPBQNPxsbdZT{r zrI@hbb?R6HyNc|9(R#x1m%`W7sW;;3{aA-->f%MmIxC?odr>dY1`l$G`V z6|bt?GTghpLPKCkh(W-$>Pj%Wylxfk;tC!-A;1z|mWi6=tf;R|US*}b1fj z74%(E=b>5he?^-O{HFI3v)!AX7K0IWCxQH>w=>MjWyUhOR3#29380;AAwG4;j4KZz zE(lzjAd=DCkiF4VzX58&t3)-I>z$>#OQ?JH zpt^mdMkciaAXP4l(?{a0v-~BD%dN+Cc|!Y)$ZG%8##We6_k^+O`Ra4zKSPfVP_&;g zE`NU!9@pS8oL%v_dY zhaWRCwpg2$n$cMFCSS-Kt(KJ+C#q#Xd;JOzaUOCw1ZAP+ND-|;mkt_qV}sh8A4P-z zYX&_vv>dgzHDDtzag`bHh5yS2Ec{kzd8U7Oa5d+YM3e!^rBwp}BtZyPuQnoxCapC>Yhyd_yiW2RAbhf$s5?q6PL%yHy*8@sr4 z^PdgwcZTLTP~)C`9W2aP$;KGMsy?a1NmpbM?n|zL7JnzSGN-3n6B)s^*-2I&c+v2l zqI$nkrtVJN%@wfzhg!#^55pz8 z0ZxY=&?z+C;%drl2>v};U1PQanR9x?O;`;7oNWmMn{7|sk-CG(O9y`NKQXXhn63O9 z14DK{Xkf7wtN$Mv*vNl#V25VZBoA8Tf2}G&i}$WzJz(F|;@w^r)8fU%586IL_*XPK z3H)n^RIGI2i4cJI{RHA=DoXwrJKsx%=gWj;%n^DN|JI<-zHr@` z^5+(nR6G1>CDpD#*=Av#p4^TEj^}x5b`>&E3T*D;FKnGtqNI( zV=Qru!Hva-JM6T`>cR2heCqf$Cu43Omqz>$j}7{^q}{uJCXd8E0N$f5cLTpXTospm z6yrOBQeX{KHVmqJpe56IA%A=L4~|wI_l+`rGJYKXL$3UG4>V6OcIA@;x~;U0-$I~% zT&*P&z(i^5s8$-uYMnJIlH8zfJuf1W2F_g_7Zykiyy@Hk|dO3L0rV!R@xIDF;BfiN1CK`wtZLLS731h zD>t=79&2!JHLD57Rwi8DTeroCd@S#zMp5b(`M)Z4048$2^X}_q9-4_PyHHH=#24(K*t%=0UKCi7@7D99-0fc*72P%n1fuv+7kuOBOXp17u2%4qn_W+yqNC zT1zK16ZA4~O@?Wh7si%~}TV((H^pfc%=%*`|Ko~j)!oQ!COG|n&U*S#o zXSp&ihFMI5a>ZbG&)N+=g5$*7PJE_L*Z{B_-qq*iX6*%lAi_gD4Bvl%(u zNMN*-)VM+l|C++ECLd3-AT{vT|H$~cu0GFLG|xm@j3nDaWg_`q>gby^WZT?bmCF_qItS?g?Kg(QX z=Xw!Tnj;2Lg_gODXDwcJs$7~^bM;yv@^1{+*(O{3xkEOSgbyBe@9(I^UJsiX#Y*dM z5CoPm7(L=s8WAVaoSwOWMV~twf9~Ls6dvmRZ&1jPRpjXlCqCs+&qXmU>+3>)ZvnA+ zvIIJUx5Hj7%|uFmJM5Jmh*fWO8bfoJ~znXreYK5@e69wQc8 zHwU(Eoypc+c~Z7+a`@)lq*G+=P=9<_0RiXFEe0pe47b?SvMi8hOO|TVpHtO;@Oh|e z2pRvc2?nh4eCn0=J{7CHZF2Nt^!zW2K7*du{yGCal?N#-wZR^*-odbK_2~Q-5wi?tMp0r``Z7+aXAu+ioq8jsd_ZNM3#|)xXvZTO=AeF-ky_ z`&SkT=NX`Pj(Q6_FzxnLZ8SPaPt4o8{9scWc5ic7xTv#i_2pJjIU zf^yM;F>v_Jvm(`f>BK@o(GBG^jV{=OG_`IT?SG_hVB(8NaA!K28|7#Mr^bvAY+VX9 z65VQNI@ls@e~^Rk8Zmv;;_23Coo$CHC8|KXu{ay_<5a;3bgs=4p5+w=j5u>WrFb){YUBSO;Pp|&q^XXv;Ce)Am`Xxefv1GU~WvZFutP!BA z_m2!M&JI;)0SaU`#HR32QsKs!0( zOdhwV2Q{Q(>E6&}Qb$N}|7#9I1#_YY@ap(+QBbdj%0 z%ZgCaEsAQuJ!+b19cexAve{~-S^IjP>HUDEDcp_GC)}5W<~inmmgK{o;U&rFpIl{a zy8}n^yOGovw8ac-oNW@{xp24pb^p0WSJ;!>ZZE@j`$+y)Prb5J4nPy*4@iuMb-|Kx zmOZKdH0?>ZVoy5GvM1G_bxjL=u8CNCn1P!!V?Ql>(mlGKId8Eijg~eYR&bePwM)g& z1UoR`MZNH_48$hJU}9NvtVe{^SPs}QM=-9aHzul2alBnG(z<_mCil4znpMN!2q>NQT6v0-7Q@z0h$LQpg`JGr+-OmU(!v2bNl*;5LVxlMW zHG4Rfb8QDY@{RdlYOg?5K5j&bF`u5#w!tJWOTN!M}_@8SYFYzIUN zBk)ar1J9=W7LRgu%mugtX&pE6p@cv`aYd~1ewRlVR{Oy2x|HVYO?!j`E>;xTO#!LO z3->k>Ye>8yc8}q>4!Dmx+YAA+zyR)Q^FoWsRc>Fm$~GJX5g1XpqhyZF`Rz{RnvH7d zCAw*RD-dsH`+h*J!O&N%p8il@2I|mg+K#zHgsZ>{o&QJ)?oX|9ue58Nx7KF#^f?;T z#!O1qlI01OBQQn%iHbgeS^+ zWHDtH$aET2)y4cYQ6Ve!D_R-6Qdg?`G`s9jJ6%|)fDEI6F8j%SO&|S*5%=N1NZ(`B z4p)DzSMZWLoAqhE`Xa8(!0;-jCTP4bl~_itR~H1%Y_Cc#UFElx&JQ?)-6=Toz_#V1 zrRy6Wt{p%j7P(Y*(2fE3tk%+kq(BwnbxN9#`RygEZ2@UTxPJ9LBE#eA(ys~_n~2MG zdf0H)m-_O8&Bri=SU202M8`(AWt7IHtZbC^i8+kvs;jZ$Ih$^kG5@k(14V*UOl&nZ zyt7-T@6f`o26WTvd#txC9_KTV%EFk2GZ;;FtK&yxnJrw!E`A=56F*v9_ObN^R|t*T z7C_*)NsgD%-R_z;I&fy&ZvU8ePx3Txa$r<&OG>aag?r>(%tzAB+7jHO)zjaUIyawQ zokddTR$WKK>nV43u2fuddYyg1u59w3UY$QlomIMy(6^^NzV%X15YuTaAe30rrZuNm z$0c>zPJevDqHWr6dVT#&>TEonI)4AAdrzx;g-?!7hmW3Ow|2U^^L=jZYP+b6CO|HD zeD~3)*Y_ZQ>wG`sFCJ>&{6vmXw$Mr@U7#_%{E%o-)(^Qqu)|b;#HN6AmB)8uw#^uS z(iY32ElSuQd+4Md-Z6YsxEFK0=40-c0%;H~eUpu?CcS0RQQe+8wdETY9W{V|@(s`|l!Pb0nJ?hlR9o^H{h#_=}juD>&j(vi-#@5$$IXPYQ(F)j`ECS!Non;ckG zIyK;z^njXn-7rdx=7b2rb{7T1wa3I|?G5bxK*EK4!!5~u)uqz{*}4J+le*KB)SJ>V zG`jyw^8S1poMQCIi*EgbhrIKM<0IOQ=hVGsYhcwX2DpAPY!l9pDS-h{lN#f8okwp298al7mr+yIlVasFvwj z!uELsC(7CrQ2L3U;^w7NZ=78tVM>ht)~l2J6Yq6CmhOqXq{$2ah$@~1-q+5s@-0n& zGrAMmfyVHff{6RL|6)tN>3q!Tjn*GChx9N1a6X+b36mC2>0Y#;%YE2y>#j~t8uT#X zdW+I?=00$f3BWe9CEV~~e_8V8AF=UI%5ABBLZ}F_%S9&o5D)8{&IwnShv(d;Zt0ER zpPbYHhWU2m1p>2Ngngg$v6N0lD#O-&lN_!MM%E`iBjkz264 zJd(6P9CV}PhQ=3_c9Y})p3n6?A&~f0fl2cY57(rtzbie0`1U36Pe%WX$2ZF*V$NdU zg)$2wdNPqozV{O*vQ#}Zq!}p9*5V}N1$1DwB&Pfgo!;9%v8wgxG;{>~Xiu-&P&qRGn;fL_&fR0lK zVAI>_x8=WptpJOw1q#0BWc`*Tu3xhH&%f*SLntKiKw`_N&)ez2z3)S5erddU0>)fx zwtjN@s@;~{w#7fZ^kTo|>}0y7$3Rr>3vHN8%#dNgQ+x8X6o?@*LA94BPn#~pP-jYT zYf9S|A%+%qX<{e_Jtn_GJW96G5Ef%;uB2!}r^Uf&gkTH*5P#JzE!VA&;0<#%(vk+7 zk^KZ-+k1^v^8H+?x!K^ryub*QZs-FhqfSLOP_5=t(LJ!H2ML-mvBOj_gbZSUnp)#C z+L)f%s1}3R0R~Wd#D9fGa`_PV!O};;Z;$%VG_Z^iM_}K+k4Cua(4SU(e)>CpbrFxrDBvU$M zqtXi$5DwBGKNx7KR2=!kZn3VV?42uDU(S@R}!R(`E z{UMgEkUlU}F8!UJ{DeBCE;sx5ztTsRvDOy6COzO{=Ew#!)eZVuM0MF!rAA4I{cAc{ z2TT-w8~aDNBuZSi`t~gl(kRkd3kz_E&R2g`ySwZo_PwAy|3nwN>~^s5K7i*zyYP)OaG zvHLDwckYL>4pKL4)~#|EQunC(I(1nVSA0!Ocp%w&nbCmujn@XPsuW$MKzXr2h$j`wR(q{k48IK za-holO#W%GY$D;j*W-@3+BV*Aa%>B_#P!1eQP7>_|3~neq`)|zYe9-jrGH05Xb8VG zal66npuxDZDaE6{cE7x^id7ky-(;hwbS=|$>`u%WnE zYWxUpGcpc$iAv9ZuDg3hR{Ln!Mc1J&mp`rb6HseSxx0Jid+u(eruYyJ4`swwOzO{b z;PsIu?jBlT{DQI7YAetE%8D~i-WHW~b4Nm8=Uwhs{23a*FYLm;tdJyp?HTQ(z|!wc z>-3-9zNfXXy!GfAD^qMa?XOwiQ(HT8rga8(R96MxOAhRcirZoXi=TJXD@Dd9el3|s zw>7#c?!zm_pJa4B%(MqC0L6PhXg)eHo!rqLJZ@W-X{5N517ncC1Uq$H)Z@102RP1i zpiZ2RmE_~t4|0OXQ&wEU0}9-p!UJdUcZI$D>RmhmZzhz3Sx0cTshuzJY{&Z9gu>LGR#x^U?5)OskfjxeDl_f=^TLhEeYwOivn|7+$pqX zs>GdG%yim*$S={Ah~qDdZYa(_gc2Q}`$_oy4CHp7kKOa28 z@>pvFtr%OIKx*(gd+?o4`XFpBb*L||Bqfx7&o#!G6Wh7h^1%#%%j`m%y%=og8?YnGR> ztRI@7B!e(T&bASJTff_Rw_HB%Mw@fJ1m_8UGCpt(1E_1jsUnUBjA(Ywcd+1(gT4 zYzbSN6H|W5(7D#IzDXE;%UBYJa)&xlLQi7Aj5U<1&duSXkMWQR+a~*^^YIe5VBME8 zBWoiO?tV?vx}aoo`Im#kZ{SRb0hf5>@tHl|{LI|{g%nrcT=CJphQpXFMevSGTH%Dm zX2Sy+>uNLQ65-IMMC*~f7}9LXP1KY&Gnd@VHpk8C2SK)cneVnOYAsi*JcxY z5GqAHiHJi;m`ZWAM8P8yEMj!nR|3F7KZ(I6m>8l4Lb<{0{}=S1qiOhDpW~p=@K`&l z*A{7dPiV-P2wI!$Ior;mNxl-1b2w{^`7=`P7TJTw+??$_KLEr6wzDtI_BOQS44i2&) zwp4;m2XBWqdMH?ueY7mj23nq^mBQ>r267@%Vc=~Y>wTnDk`zdutuJNKsx>rvlo)_vR2J(N%{|%! z>FRp!>81?iM@S;CFiW8@mh*fdGagLcjHRAw4o;Lpe^yJ!nsyUS({SH#=t0;UxH89w zYY(Vwlt(5>y0Zhft)#xpaNvNt(_}m;^jL=+Q_i7u?nQQZ0NaGeLEc)al~wrXMQXIw zew;qYN*E7W98TKtPh(x&vN_)I$k@~R&C)T4qf+_iR+9m`r&94CNnMB*2DXlaSzuHu z_F{|w{6?mNG5saO&6Bewa6Th7>(yaTpzd6tUkJ5iuF1kN=9=&e?Uc-7ruD?y=jexC z-@GC7xx`vXLDHyd16)sLv*}hN^>UT;$-)g1zTru|=4POsGk_t2vuy_@^1D+9nx=JU zB-K~PcBh^>Wrb_^DKL_?J4*=}r3UC(p9LzR2N6>0m_M(Ok;>>Z{M zE(Ec`Eylt(??rN^O1U!*coPk zBMnG-)*Ciu-X6UvEbbn40ajjY2(>BuXO>t+Tro?XhNfw#`eHL{WM*TrmHD|j0W&kZ zYf+cVOnhLAnM;`PO_=(AV)h-B@P%Onry^eUb(kbzwg%`d5>xvvIuu&u*t(;lG+22# zB;mSG^w$fKwXZv(zfMARdzJn+Zo|Y4RjC^qk~hpwIT`h5%6|^z#P^@W+JGHO9clb_ z_#XOtip$$HjT~i2?Kz?m5^|_d8U?LF&;^{#t4_OF2n;7fNx!H2AZauJ`!9#3%}^`DjSzSVlqtA}{?Aote| zjp54ufZq?!7?z|HHRL}>W{ayOam4p|MD7plU%)%=?Rd?+n7^woJU4BB{s+WgOLuwH zS17^`FJ543VN5tVGdkSb{RTP3Fx-LkJrE*zbCo?bTfl)K{n@Oc-XCQ_1m}rWaAEBf zJc8;UR1H=Zv2oyBqdHUg=24OAtk9fHU6GgW&cN$DiT-4tTc!q&IMzM`mToOgNeVpG zP!}#LQ7>si(I$-juY%PsTeLzrvjnKo@WrcpcxCRiWsd+e)o&ar+yN=qk|y|}i?i!5 zhy8@D>}k1%2mOyl9&BRi|u@$MYn%ZuXI>!NL(O<%_ z5E=(*$#5v(={6&C1N6vlW0|cz-FO~`d1C1_|CrLL{!vIoha=)FN3eOI&tBfjEuCU~ z(0X+~z9*Ff0<2Yi85R>~++gQSzI6_$3Awiai-er@C4+6$KfaPoQj&gkC${SX(}(k`?-+rV|J*5YCy$Y8*C|9em`$i*?HIWyuG}7REN`9xPJKhkXGLg$IW-Q9#$8ED@2~Q_D-b~*% zQ8ngjYn9BV=+Dmxju(BcZD%quRhZONYg#$zR$SqlfcmdpF~!04U7?oj!LjOc78Br} z8TM3VYFf7{OMZc9#n8+8uThDKre5}O>di5bsA9bl7}==!E;ybO(uMRrS_60yUQ2F| z=O_>hE0+auk84_L&Tw)qeu=t^KMoL)2EoJnFFtdMp^| z0Rn02@8>cND>U5de*hX?IVv@mX90UtZiCADN=DRw@AG7E(zIzz#B~^D@R*;-H?#p% zKFfvBM()xa`C4U@i}6YWFGXuy6U}j{SH@Wj=WP3@Eb(j`)IevJ44M%*+k{n@Xh;5Q zf-SZrB4||0z=i|a*)kPWPK#_RnHhxS1&;jE2z=}=^$73f$^G&q;Lzdi&kL^AVUm_G z^^o>N z9g!A}s*O1^Xl@Vx1;!O1k{4JDp`kslP$MB)GQo_7D>Q-FU7_mi1*YYPMl1`v%n(g8 z=){BqAoMoncwR%ODJKHvWPMc+sH@HykOE?H^Et#tg>-Ki@RB1ys^NhwoRr*x*K4tuVQp! z>pH;I!o`aIr1_Y)u5dT_{SEcNg%(ueB8O7x1&MR91S!A)Mh*K3V}*R2a9!WREDIw7 znj@kTw?mp*DzMai48*EqEb-(vT}FsH;&n4Sqw;_icHj3At#u57g(WI!XA~Ap+hEyJ zegC-hk%NYz5)3t&2^fsgh~1d8P2@zDP0^!#Rjbd}%W|%-kY6ZX5}>VG{qQ+d`a(z` znio8+MvfPbP%n$Kjmspd-dJo?-_4P!k_u1ISgCZ-XcNOF)k5QXjn_{0T`lc@HL?9F zbv5nNc&|hW5g|B16T%+y&h-Z-`^5OB;~RH!)7g&1`nBo)v z8qN7whh~##w$#hdnjQT}Dt;teQg2hO=gHKu{Fo(m?nvzF67^HFM&A+>G5!ZMCZe2$ z{c?S;$?(miO5bw=3z#l1JVuCNz(L)e7ahoO-wl-LT_%?SU@;#UI7Xmt{Nw4=1Ush> zKd7XR)%4pthjLNt67JkD1Dj+lUZ5f2+8oA=HM8CU-^EgA5FmVA9o`WIgak`x^MIT1 zAm^*6vY(!G2mG`7 zQnppf&NIWa*&FL5LyVd}g%!?GeUq(H{zXGeJQ{7lKSQL&wGQ<(7@Qrghtx&@pnhxq ztPq^rrIyk?2mn3otD4;wd=16a&tuNvL5y5B%bX7@HI|Q$)Qd93%KqpH`~~GYzDd~_ zHm+AK+x5ctb@^8D)_S3LXVZUEQY|vy$HmXYbBtQ*$M#1nqswgd!ozbnp9!HR020BZ zdXm~Xia`iQn1DQR^JsY`IBHUZ`VcpL%0UcUdWCOq4VBxBt&0|1FCthwY_Mn_zP)u3 zkI_HylrG7~5G6hI02-tBK6d$%b7rDy`nyFojzyR=@;&SN3yf1QQi85_NTZ#h8DvK3 zgpwKjoA&L4+6O-%NbX0VS!$p|oXQ;2%`mnJvY}IO245@|(`T!TvRMwXh#G?|dH>n^ z{ARIN=khf+wng0f3uJIz*5INK^!x{hzzmfS{!O6OLE{hAh&+%{r-o{ZdBb@!MoQKO znbZ#d8NTDOji20<%5;@DLBu}PfdlLs0^$w(0Z18$);}W_WuE&;W_^U@}u7_S9r%_W> zSZgO5|W3?Qkl$6N>~?lP`jLqAs1CwrG>@VbV^J6%_k zE#Ze^d$R7P?8rY8LfUHlR$(b~$eWFq39cvjm5>maT*k!X-=pR`1vx47lOugcM!HQ=%K@EY~bcl<@RtzvI}%a&UkXbR+7GTr}_dqHL?9ZNF4t<9BLN6>wY6JBDB;qW**9Vl?kG=8-6!8x$CFuK%lvYSf+Y zK%)fS^`)bq??@G#GCvPa#+`4EfNPy#@1eGnV2>EF-a<_n2lPbiFNgFOHe1dt>%!8Ijs|JO5@M(Qj<67H_nXn6UTRLPcW>4~0Fc!RB|9 z079K(qVt^FQ9&9yY{h?w*gKB~jmjR;OJ zGbz(%pDYqWU(^nSGiv}M^*4IgwsnB!zFzU(=0;;qmHPl@=9bEaLW`^r`!$a&*HalA<4oiMiEXp92*Swuv^z#mqoS-~QEJV>Q2X66= zk`uv!PwMRzrlxlLx{~j3)F=%J6p(O}3KX*9PC+3!mC<0J$Tv1t=?}V+@-|Ya9D5xQ zv02FJ%Z?SgM+z-GruGY$S$TjaoW3csw@Y;s2u1qCw(C+mLzUZ9<9^u=O$+(Ut)18z z-HC@jcPDNX_>AtvcolwA!0Iou6TS=RviG=%-YZYG9Xmg7J9eHPdUKODYW_>8 zcAL7BVQ^~px{n4%lC;De%5sK6q7vL{MgSe5%3ZxbXP8EJ%}{3;3(OkSS^?Ae7$x|_HllD#cusT)s!XIf{v>`sRW=cPfIrM8nUYbtU2=;yAN0zV z_Y6B@-Z^Fn<=O+rt4230MV;}Asu^xln6f%o#8&5a@l~mOO33kV^EH1DuHR2{Tbd%5 z^~l;IK6kA2OnwRpK&}xidz&_`T1@g;1dpEr{fn6eP&n zq< z!Yw6^XYPA)l*>PiWX#TGA7F24*q*tUCz|HKlh&|(EI*AGPQ%~CKfEe<+_`LnJWVR8%yiy$ z8&p{dNnh^zvi{<7-nEb~T$d+Lt+Ve*y?8W1+_QLUojkz3LPtHyl{uCBYme)Q%*tah1#?agL}3&BQs+@(u0w)PFZ|&f>awCYt(3KGlhHT+$t@ zp%dpEr2`V@NYb9-XyTmre!-l{_yfz>sazZ8=8nh4#7zBDkt?xjD(W^cKPfH?5?_J! z$DtEc-><38hKcTaR_-bS8+U$8rdWh0L$mFy6Z7(DwwOH1q)6!8ZBe$0CqrjZl(vnpK2$(EBDs>%vgWrwPANT?aA$_rIV zs+*pwB1*RQR2AEFjnYs{nOL3*F$Cr(7uqGqK853!^$^ZWV?OXlRGcmerbxR{#x>_R zvmPKr2rsTsH6YQ$)w*#4c0DfR(IkJtCsfd`$7$*yhCaa_yE^s?m)Jskcy+e=K)x<7 zrD$Rtn$O}WESDN?hXnTHq>TKc1q?9GfLMw;4LuruqVv(rQHD{2KFpui7#XB|nEyvcJwe4C zl3N#xo^VTr+Ls|WzUV80##z|oJdXjOTuH6#tBd?)!Oa3pNkod(P@Y8c&NnY>&!{KVL09%_#`YE-)I4LJcJFEe=%`2iKM+ z`F+L;IV))@L_`sUkH*rn%_60LQt*RnJH*3gd#D5uJft z-et+VhO$s&8TP!*4kI0{kQIq8IwOJGk<4h4^rY7YWJ7Y)sD3z6-ce zG<1f`XOPcu_HF9=-^T%z{Flg`Nl9|E@Pk?%`F9b;k7IM0Ao>^mwwUWP8;uCn=e&x~!5%)h48-QDw6wm5NR81bOV?G81oR z7#bq6*^aM;)ba+mh=%RszeGouay?~As)#xOead@*Ag_9P==&V&eW<)(P=iL<;NRef zlMB+UA(Ow8kZh5)(MCe$B9)B)XOs>8O?x8zMkI}4f+a?i^|f`FaEJTMqGe%ce$qBEi^Vzrm8 z+xx#Kv{$B{eDvRG&m7;=C$#r<_0@l?J#&0JPH3-5oppNcd3`UP(8yQSE5EfSnQ*er z6|&YRSFg`sPpEo}dLUX=*4tWRd;AztKX@Qpgxz+bI4G`z7@+8K^^NN9TpDT_#JMOH-&H=op?y_1=})ER z>(67#qd)sq4WA+{bGD^10i#yQa9l=Rwosr0-g-}Dw-zt?Z$hXeLSK#p0CP-4Pda55 zq9-)>sF0phYdE;9#TBMFPJPY%dA>B-qZXUL&Jb)r&u(0AGroaFZ~0RLKbya5jb^lq=rR6e{=Q1Jo2D=2W_?4&vw5{HY|=RT zrde93!DVEG(nD98fCk0mE1}0k-XdJ{74iCv>?THax#%i3A$9gnD4`XxG&BGIAf z7Cg98!3yuzNY}Vp6ZWS@X@(}^tE26Kg<2H1u|uS)V;BpEb~z%}B}Y{Hbp3zoGk&&Z zksuo9H5i3-Ufn4256CM6W5BB+A@!VMGdd{&%<9Gof8#KMuFZ?hU=UHmxs$f<`k!mR z0UCCquPX+GuJDW*;hDFqZNG{FL>D25SLG#f-Si0HOb2XZ)b*9>!FajThkZ%Kw8Ek&$u|Mb*HgIkk)_x^ezLIt;{F#uuOrn2o;y46?$my7A&@TT_Gw z!$jZ5EJ3(@dTetFROI24I+gRn-QO#Y#HB(K{f}#okKH_J*t``t%|6u^w-+9`D&G_7cZ?m70?<78&nk zN(>(FnJPbCCN{`~9hCceI6(jzTaNEysXsjtU`tgWB0G)gFtr^;AB89Mafa%NmjT&x zNorpS5!YB5#j;{Z!0N9|_g8*Ge}!swye-{d)d~H%RAao%DfH)+30BbIWMBOW9Zplj zqm6;d>2b1e{s}!!Q2&h(Pp<-nPMlt5{1TA+Fy7ynPUvr?`hG%Fy1%9q`kSi)358Cn zzZyNil_&IfnYu8cDc#?i6Z&(iw1h&Z(O>9<{sQWWpU0O<_jmUR{ne>&ClvZu{RuiC zjyG|*zDG-(fWE25Sd^;Sc-HO0x^AA`oe~fiGY^h~8fQVX`+hj2*G)@+Yjt+C-zY!| zJc1E!)F%e1D{#)tNqao5ayj-5#xJow!XWwEi_UFJ2~o${b8egZ3S+ZRV_gYkuiZ=Z&@J<`A+gmJlgBG!O)p7x#4%NX_TghB}u zh@Ycqm)8E=%8VxY{x)Prm#A8^9SBl_r+xMYy?4S89BNFgYT^!A`?G}U<@i22VR~1n zy+4UT1kj!1JA6XZW7XsFG6|E@ASdl>=Emzs%|FqXiZCfWJ$?yQsc*z97jD7XV1>iT zzRNu#Frf@p(?MYsD(&9J2F--H;Dvp5ni#x`Q`F_rMko+n${741>4GI*CA=;kxOGfb zpB}GTyi7FQ*}|DQOzxNOgQ{zKpE*H8incs7Pvj;e(3qL=5VY^(Xrpdb1Cu)=41XuV zqzH!YRjFp%nk5SdaFPielPKw0mY*FrGc=NetF&E@SFKxP+4YpIp_3@9Xxa5dM`hUo zrS;aY!~P`H$^n9M$S@_6CrDc~zkpBk#RR`Zwy2cE4@v$7G3mBb)xCpd{#{Wq zB6Q`o>YBG<9Q7jxbV+!Q9od9IF;lKI!K|##7*tW5D2~BKVkqg)fFs*Wzi?xwC*sbX zKP}32CR&XBSbno3!#k3m808xJR*%0yO@J=ZbcPNOC^AgHLoNI3r;(m2Q#M&CssfXP z8M1*E(b;e^j_cf$a$HR-efveHl4X&cvEL`5Hzmkxw0MlzJgez;vxN&arFpZu|3}sl zTGXYdYv%bHJZZ*HddXW^3~Nqm*&`w%lc>5(_ew-M6rs*VzPni54y<64qP^5ytuChv zSPQOfb;G_-BkJ;ZO!_rw=4Lktz+2-A&9-AC{rysS&N4be-5qYgg}TWhw49F6i~LPJ z3%M2-b8vpW+8YPgB(RlYP?1Ee#d|G{*P~2Rf8EPeWBK4Op(|sg?#r7Qu5x*#FJuXh zrmO~)a>ePBwTYO^JP`;_`x_fNZu)78YqR`$vW!3KJFjYqEX#F`BIuoI3uHsY*5#8z zJ}K1L@T7cKuTxe#BtwdiZB#@kju^*Tcpc)Y3%M**Ydm2u^VRz2tOjx2E7GQb{)<%L zPv}R)SLmEzH_{O`Zi{T5APacrl4_A|GMJHS;ZtG*YMLTLCBH#50Lf(EloWhBBXw(2 zglzV{cPku{PA40saTXfLOtit-IHvJvs;Hqk3!*#Dj-cMoQQ1HP!kN@9w~r%Cjrx=Z z#YtN9rP{tIII#8!sXuivqDV3PR^HPh^dQorzdt znQv@A7f+M3Y{f0`K!KPV%5k#89%DM`pdBKi$Vxba)K~L?8D^g%q@)Obymi4Xc+pL+ zlA+5bp75W-QC$Q+XA&NWkFf;OaS{z@1fQttYy{L9jO4^uzvPq@nLYxDTSq3#RAeST z8G5*p;ff$7p^kaJQ4dY_oh@>{^28IEr+)u{KIEFwA#zl{<|${|Lio4T+d~a@+$%W1 z#!OD3%c#!`HDm^7yHaG$ag=h&_fU&n`%5`OSL?@mRj@rCv_7Ho!S=xzfDC#c+@3PX zBsY{i==Dy?lW|J=$++BMPy?az!S=mF?R}A+DElT8sx?dl(TNQJ45G)=^q7=ZrX_tLYUs&*bIt;HvwSPD|D)dE%-uA!n##g;-i?8qQ)Nw2&;xb*P07L ztkEhBnn6a0YlOx*Ms+SbGp(dLk0=t=IiB#GOs~3$X_%zO$x{)O-LH>agj{{LvQTv{ zvIeYSWd&$!vTrBLW1iBy3%Jj1;hJhS(yY=ekur=KVlr7~)aMv8vW=NpBzr|jyc+x? z*MWnmHrguaC23|Oe|*tqj;ZeN>YjU_Fzn)dg2^J@5GxFE|VI;Ai zsk{H0ovRb?Jvc+=kqzlJot9< zh-ZU4((zcvvl=bz40O&6o7gDVWqHZ#gRkl{03prl)Cv&t&|J~scBJxs(+2)1mpSS_ zdw5Bv3T}pCkX5&`9Zr?B7$jUE;i2sgqcMlr+U~8(9r?Rh)#|^qT9pSw)v-*5;-8zr zn@`_jI;%62M5%gA{qv99K9vLJmYPVN85wm&T$a22c8?~0U0n(txooT)K!JC$=ekkA zeSq*aTzI@qQt#}i&wk9eT;lI|NcOABgpn$Nkt$$hHZW2OAblQ;WPitmktz)%Rk><` z(6n5ms?Pk9t*$k{WT`T~h(nBGcvK`4LuGzHvK-u zJRZxY9HTxPRXHIn_#fYe|2!y*sK+T`r{p*g2*$)34XPv~iZyOCX6h`#-Ui;|*m_B8 z^vyiX43bH8G(I>jIWSzjLY-~vr70p53J!Yp=@fpc<4mHOg%pL+IT&f>7&GGo0YOcS z4P^aFp~KjH--lGxK7Je+#wL-_G{%ga*dnk@KjEcb1pfwkGc#K~$~^{#NXHa0b=jZ!<6mja%!w@x z5hEt1TMOW9^T>GX_3{vvNH32I(>#rCNp8;DC)n1ck_H<>(ex5mAYJ>;UN>Zg_Ay;+ zh0LI%y@x?a+QtRz-WjW6i!e-;e~S}Lv=_SQJxC#)ISUN-J(>_8cv>*o@*HDzHkPX| zsJDrMvVKc*dT4oeXmt)y02v~f&kG8YJlB^!AfwfQ-6k~wk!W5qE{P&kgVtQWEN@w% z1P~b?e_JDOXm8SFwRoip+k& zw~q(kN*?iI@Y!_e;HeZS?Mq=Ua~ZmzYrvavoB6r*xbf$VwLc9^j1sfPMzu2RW%;NP zuVGTXik&anAf@^J$s=}2^M11O&dQxdA=1Db%d^bo$wlrU3B)t>^z`|-MYxFy27n2p zQJ?2Q;7ftO*<_BoK+WJWWaFJoCUP;`otrz~9LJ5QwfJ=tBrbEgIk;b=_^rY1>5%$! z!8JEC1`dXFQ$LkkX(sW4RGo$T<<_h?KbWWCTjbkm?#y=+g? z>%xJ+WjbML(5b@3FJZ~l?+JgZ*>{Tg-7FLDD152!C(?^%-=n=$s1@|WO3|Kr03cQ? zh~5$Hk`)bItr-JXs3kMhlBMG+mPMN2EZilrHKNwJ_%hkATa%}V0n#28EQa9+rGV}Tlq0fa1_al+ik zVF|Gsu8PKL7+heGv%DFuVeFt5q7fUM_w=(e*o0ajX*y2AiP2}8x|CtZdD~!qd|@)f zGYh=+vM$DImn@AqaQy_)hp}4Xc%-TC=YLr$Zw3*x%&H;_4hpe z{RaJgs{TG(zAqOBBu%{y{xz1*)!$#y-)HIX*S+wmnWmIMV`F(z6H#8p`L#hxHleEY zS_gY%r6>D@xQMRw=f@{VEIDY&qwxt63w&ODf|&eZ(uJ(?=gJQ>C}u^OA@GvN8{Aq@ zr#`-1Lsl2~rhsXTb=wgO>_9AFM=XGcw5{C|3xGdhD8n^b!2`KOVhaq@*hP+ReRzIe zLulav<1GBI8^fz|!%K3)p6pPwGOkI*Uk7uOD^eFhh3_}Uq~3rTz|`QDsiE3^#<0}u z@#g6#x=gqtH91_gehomSrhw3(kvRwF`bt^T!HA<={nRiKM>JeZc>biQ6XHOhqc6kq z?-O4!_ZbDDV(!EVi1CPd!g&kLA$+z2hq)eN^vDUHB*8Mq>qOag_3G_in2}f6 z!j2%Ou&^t&11wBJitnGCb3!KViIg}c5Hc3&6yNV8s~gQ$5aynWQF9y!;Uvp~Jp?dH zhd**|94FKfdH_5*Zz?^qcu}ZkmdXAO6*#efTCfEBZub=KP;z5HmBb*zAZg(OSX?xLM)3l;Ph-6>Vg(iRMQeU%r z+QNnh2aXeUw=%Qu7tKFwx~)T4xLC=NYKB$vJCuY^O&6jurv|&8@T{>Z?#||kO)X}2 zifH3`%4JpgB2`+~WJI0<9o#{y9d{-+?Nn-mIbAp9^1EFe{zh;I z9Quf74GVvkPnZUh7t{-nJy-qGs{R}+scAJU7GzE%R>=EC$bKRib#DAM@9}*SS}TWu zyDu28go#I=om`MrCLxSJhW;r7U|pLqbxq3O-k}$7ASa`6Z}FtS7{UmOJ&k)$bH%HJ>Lhpg{AcbSU- z=_md!rQ&y!hqsm*?w1!bgSKAkHQABV=J|d$(Lu84xw#ekCUv$w&nt^g#D#<+Qxo4l z%G>;p{8q@dZ}PN;aS^5A`T`NsT(jgw0-5e1xR`wF!~&v6uhS4^(TUInCV%oX_wGm!YUc=Y_U zGv)zfop;z!1Wm$*03QHIR`kHjc|TCZhM7@Wb#$AO<}6%fE3+V{&OPaQJ>Q&1Ttc