diff options
| author | Michał Górny <mgorny@gentoo.org> | 2017-05-02 15:26:50 +0200 |
|---|---|---|
| committer | Michał Górny <mgorny@gentoo.org> | 2017-05-02 16:01:01 +0200 |
| commit | 5b7c19ec6a851b706bc26fe8352934de3291cc87 (patch) | |
| tree | 6728901720bdd994f3e77414d7668cb7a6b7ad01 /dev-python | |
| parent | faeb8cb8c2461964c726c0fc9a51d7195e00380e (diff) | |
| download | gentoo-5b7c19ec6a851b706bc26fe8352934de3291cc87.tar.gz gentoo-5b7c19ec6a851b706bc26fe8352934de3291cc87.tar.bz2 gentoo-5b7c19ec6a851b706bc26fe8352934de3291cc87.zip | |
dev-python/paste: Clean old versions up
Diffstat (limited to 'dev-python')
| -rw-r--r-- | dev-python/paste/Manifest | 2 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-1.7.5.1-email-mime.patch | 19 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-1.7.5.1-fix-tests-for-pypy.patch | 24 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-1.7.5.1-hmac.patch | 11 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-1.7.5.1-python27-lambda.patch | 12 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-1.7.5.1-rfc822.patch | 14 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-1.7.5.1-types.patch | 57 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-1.7.5.1-unbundle-stdlib.patch | 1211 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-1.7.5.1-unbundle-tempita.patch | 1860 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-1.7.5.1-userdict.patch | 64 | ||||
| -rw-r--r-- | dev-python/paste/files/paste-2.0.2-unbundle-tempita.patch | 36 | ||||
| -rw-r--r-- | dev-python/paste/paste-1.7.5.1-r1.ebuild | 68 | ||||
| -rw-r--r-- | dev-python/paste/paste-1.7.5.1-r2.ebuild | 81 | ||||
| -rw-r--r-- | dev-python/paste/paste-2.0.2.ebuild | 72 |
14 files changed, 0 insertions, 3531 deletions
diff --git a/dev-python/paste/Manifest b/dev-python/paste/Manifest index 5c3ad8466e3c..1f740ff2cc66 100644 --- a/dev-python/paste/Manifest +++ b/dev-python/paste/Manifest @@ -1,3 +1 @@ -DIST Paste-1.7.5.1.tar.gz 523304 SHA256 11645842ba8ec986ae8cfbe4c6cacff5c35f0f4527abf4f5581ae8b4ad49c0b6 SHA512 058a86dec41f132c22b14f3bc882d9c02c04bb0cc9ea5fc5371911698c3d7a89859742a4b806ad388c7fe37289b816db16c50bce21f56c8371293c4d91b5ccb6 WHIRLPOOL 5928a6f20c136a77576b653df34337f1eb110845b8d53d7637eeb6c792fe7f10fe622adefec382378aef16c1abee91c37e90e5fe17dbaa07046681a393f6c5c8 -DIST Paste-2.0.2.tar.gz 627842 SHA256 adac3ac893a2dac6b8ffd49901377dd6819e05be3436b374d698641071daba99 SHA512 32eddeab1bab9d0b1a30848d89613b40ed02a77912f7ef5a86880e1c1a860c5637cd45114bd58cc5ac84410a569ede67e6ebd7afd2007c588433d54d6940f529 WHIRLPOOL 08c997079e632b92e592211d942298235228ec22b997d549f608552f139a941cdd47a5c2da859867c279cab0ad7f388823f1af163ed7ea8aeaaa7558407e3750 DIST Paste-2.0.3.tar.gz 643935 SHA256 2346a347824c32641bf020c17967b49ae74d3310ec1bc9b958d4b84e2d985218 SHA512 174b06d77bc6e1d4079e8de7df40412ffda098364efd4e3f915f858be1188c8a6fb546fe4ab981ccc067ec77b7171083b2469e7db6fc3b777d5a24151c928362 WHIRLPOOL 0aa15c2c6ffdbf965f3763d296e28c75337d9e582ad8623d70a9a4df572457247d583682b7ecddc5206b1a997f22e4f46f68b013a1ca646b0d6d08559ac1447e diff --git a/dev-python/paste/files/paste-1.7.5.1-email-mime.patch b/dev-python/paste/files/paste-1.7.5.1-email-mime.patch deleted file mode 100644 index 4c06997b0809..000000000000 --- a/dev-python/paste/files/paste-1.7.5.1-email-mime.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/paste/exceptions/reporter.py -+++ b/paste/exceptions/reporter.py -@@ -1,8 +1,14 @@ - # (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org) - # Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php - --from email.MIMEText import MIMEText --from email.MIMEMultipart import MIMEMultipart -+try: -+ from email.MIMEText import MIMEText -+except: -+ from email.mime.text import MIMEText -+try: -+ from email.MIMEMultipart import MIMEMultipart -+except: -+ from email.mime.multipart import MIMEMultipart - import smtplib - import time - try: diff --git a/dev-python/paste/files/paste-1.7.5.1-fix-tests-for-pypy.patch b/dev-python/paste/files/paste-1.7.5.1-fix-tests-for-pypy.patch deleted file mode 100644 index b5e9430c3bb9..000000000000 --- a/dev-python/paste/files/paste-1.7.5.1-fix-tests-for-pypy.patch +++ /dev/null @@ -1,24 +0,0 @@ -Ignore the exception detail for two exceptions that are slightly -different on pypy. - -diff -r 7f90a96378ed tests/test_template.txt ---- a/tests/test_template.txt Mon Mar 05 21:14:08 2012 +0100 -+++ b/tests/test_template.txt Wed May 16 23:29:46 2012 +0200 -@@ -6,7 +6,7 @@ - 'Hi Ian' - >>> Template('Hi {{repr(name)}}').substitute(name='Ian') - "Hi 'Ian'" -- >>> Template('Hi {{name+1}}').substitute(name='Ian') -+ >>> Template('Hi {{name+1}}').substitute(name='Ian') #doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - TypeError: cannot concatenate 'str' and 'int' objects at line 1 column 6 -@@ -125,7 +125,7 @@ - >>> sub('{{default x=1}}{{x}}') - '1' - >>> # The normal case: -- >>> sub('{{x}}') -+ >>> sub('{{x}}') #doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - NameError: name 'x' is not defined at line 1 column 3 diff --git a/dev-python/paste/files/paste-1.7.5.1-hmac.patch b/dev-python/paste/files/paste-1.7.5.1-hmac.patch deleted file mode 100644 index c86d0f977cfe..000000000000 --- a/dev-python/paste/files/paste-1.7.5.1-hmac.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/paste/auth/cookie.py -+++ b/paste/auth/cookie.py -@@ -52,7 +52,7 @@ - - def make_time(value): - return time.strftime("%Y%m%d%H%M", time.gmtime(value)) --_signature_size = len(hmac.new('x', 'x', sha1).digest()) -+_signature_size = len(hmac.new(b'x', b'x', sha1).digest()) - _header_size = _signature_size + len(make_time(time.time())) - - # @@: Should this be using urllib.quote? diff --git a/dev-python/paste/files/paste-1.7.5.1-python27-lambda.patch b/dev-python/paste/files/paste-1.7.5.1-python27-lambda.patch deleted file mode 100644 index 91dcad137153..000000000000 --- a/dev-python/paste/files/paste-1.7.5.1-python27-lambda.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -r 30425672adf7 paste/auth/cookie.py ---- a/paste/auth/cookie.py Wed Jun 23 17:15:45 2010 -0500 -+++ b/paste/auth/cookie.py Mon Aug 02 20:06:43 2010 -0700 -@@ -62,7 +62,7 @@ - _decode = [(v, k) for (k, v) in _encode] - _decode.reverse() - def encode(s, sublist = _encode): -- return reduce((lambda a, (b, c): a.replace(b, c)), sublist, str(s)) -+ return reduce((lambda a, b: a.replace(b[0], b[1])), sublist, str(s)) - decode = lambda s: encode(s, _decode) - - class CookieTooLarge(RuntimeError): diff --git a/dev-python/paste/files/paste-1.7.5.1-rfc822.patch b/dev-python/paste/files/paste-1.7.5.1-rfc822.patch deleted file mode 100644 index e0950fcaabef..000000000000 --- a/dev-python/paste/files/paste-1.7.5.1-rfc822.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/paste/httpheaders.py -+++ b/paste/httpheaders.py -@@ -137,7 +137,10 @@ - import mimetypes - import urllib2 - import re --from rfc822 import formatdate, parsedate_tz, mktime_tz -+try: -+ from rfc822 import formatdate, parsedate_tz, mktime_tz -+except ImportError: -+ from email.utils import formatdate, parsedate_tz, mktime_tz - from time import time as now - from httpexceptions import HTTPBadRequest - diff --git a/dev-python/paste/files/paste-1.7.5.1-types.patch b/dev-python/paste/files/paste-1.7.5.1-types.patch deleted file mode 100644 index 87ea53c39648..000000000000 --- a/dev-python/paste/files/paste-1.7.5.1-types.patch +++ /dev/null @@ -1,57 +0,0 @@ ---- a/paste/lint.py -+++ b/paste/lint.py -@@ -111,7 +111,6 @@ - - import re - import sys --from types import DictType, StringType, TupleType, ListType - import warnings - - header_re = re.compile(r'^[a-zA-Z][a-zA-Z0-9\-_]*$') -@@ -282,7 +281,7 @@ - "Iterator garbage collected without being closed") - - def check_environ(environ): -- assert type(environ) is DictType, ( -+ assert isinstance(environ,dict), ( - "Environment is not of the right type: %r (environment: %r)" - % (type(environ), environ)) - -@@ -309,11 +308,11 @@ - if '.' in key: - # Extension, we don't care about its type - continue -- assert type(environ[key]) is StringType, ( -+ assert isinstance(environ[key], str), ( - "Environmental variable %s is not a string: %r (value: %r)" - % (key, type(environ[key]), environ[key])) - -- assert type(environ['wsgi.version']) is TupleType, ( -+ assert isinstance(environ['wsgi.version'], tuple), ( - "wsgi.version should be a tuple (%r)" % environ['wsgi.version']) - assert environ['wsgi.url_scheme'] in ('http', 'https'), ( - "wsgi.url_scheme unknown: %r" % environ['wsgi.url_scheme']) -@@ -359,7 +358,7 @@ - % (wsgi_errors, attr)) - - def check_status(status): -- assert type(status) is StringType, ( -+ assert isinstance(status, str), ( - "Status must be a string (not %r)" % status) - # Implicitly check that we can turn it into an integer: - status_code = status.split(None, 1)[0] -@@ -374,12 +373,12 @@ - % status, WSGIWarning) - - def check_headers(headers): -- assert type(headers) is ListType, ( -+ assert isinstance(headers,list), ( - "Headers (%r) must be of type list: %r" - % (headers, type(headers))) - header_names = {} - for item in headers: -- assert type(item) is TupleType, ( -+ assert isinstance(item, tuple), ( - "Individual headers (%r) must be of type tuple: %r" - % (item, type(item))) - assert len(item) == 2 diff --git a/dev-python/paste/files/paste-1.7.5.1-unbundle-stdlib.patch b/dev-python/paste/files/paste-1.7.5.1-unbundle-stdlib.patch deleted file mode 100644 index b389df2482c7..000000000000 --- a/dev-python/paste/files/paste-1.7.5.1-unbundle-stdlib.patch +++ /dev/null @@ -1,1211 +0,0 @@ ---- a/paste/debug/fsdiff.py -+++ b/paste/debug/fsdiff.py -@@ -12,7 +12,10 @@ - import os - from fnmatch import fnmatch - from datetime import datetime --from paste.util.UserDict24 import IterableUserDict -+try: -+ from UserDict import IterableUserDict -+except ImportError: -+ from paste.util.UserDict24 import IterableUserDict - import operator - import re - ---- a/paste/debug/doctest_webapp.py -+++ b/paste/debug/doctest_webapp.py -@@ -8,10 +8,7 @@ - These are functions for use when doctest-testing a document. - """ - --try: -- import subprocess --except ImportError: -- from paste.util import subprocess24 as subprocess -+import subprocess - import doctest - import os - import sys ---- a/paste/debug/wdg_validate.py -+++ b/paste/debug/wdg_validate.py -@@ -6,10 +6,7 @@ - """ - - from cStringIO import StringIO --try: -- import subprocess --except ImportError: -- from paste.util import subprocess24 as subprocess -+import subprocess - from paste.response import header_value - import re - import cgi ---- a/paste/fixture.py -+++ b/paste/fixture.py -@@ -26,10 +26,7 @@ - except ImportError: - from StringIO import StringIO - import re --try: -- import subprocess --except ImportError: -- from paste.util import subprocess24 as subprocess -+import subprocess - - from paste import wsgilib - from paste import lint ---- a/paste/util/subprocess24.py -+++ /dev/null -@@ -1,1152 +0,0 @@ --# subprocess - Subprocesses with accessible I/O streams --# --# For more information about this module, see PEP 324. --# --# This module should remain compatible with Python 2.2, see PEP 291. --# --# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se> --# --# 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 -- --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 two shortcut functions: -- --call(*args, **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"]) -- -- --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 childs 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. -- -- --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 stdin 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) --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) -- -- --Replacing popen2.* -------------------- --Note: If the cmd argument to popen2 functions is a string, the command --is executed through /bin/sh. If it is a list, the command is directly --executed. -- --(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) -- -- --(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 popen3.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. -- -- --""" -- --import sys --mswindows = (sys.platform == "win32") -- --import os --import types --import traceback -- --if mswindows: -- import threading -- import msvcrt -- ## @@: Changed in Paste -- ## Since this module is only used on pre-python-2.4 systems, they probably -- ## don't have _subprocess installed, but hopefully have the win32 stuff -- ## installed. -- if 1: # <-- change this to use pywin32 instead of the _subprocess driver -- import pywintypes -- from win32api import GetStdHandle, STD_INPUT_HANDLE, \ -- STD_OUTPUT_HANDLE, STD_ERROR_HANDLE -- from win32api import GetCurrentProcess, DuplicateHandle, \ -- GetModuleFileName, GetVersion -- from win32con import DUPLICATE_SAME_ACCESS, SW_HIDE -- from win32pipe import CreatePipe -- from win32process import CreateProcess, STARTUPINFO, \ -- GetExitCodeProcess, STARTF_USESTDHANDLES, \ -- STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE -- from win32event import WaitForSingleObject, INFINITE, WAIT_OBJECT_0 -- else: -- from _subprocess import * -- class STARTUPINFO: -- dwFlags = 0 -- hStdInput = None -- hStdOutput = None -- hStdError = None -- class pywintypes: -- error = IOError --else: -- import select -- import errno -- import fcntl -- import pickle -- --__all__ = ["Popen", "PIPE", "STDOUT", "call"] -- --try: -- MAXFD = os.sysconf("SC_OPEN_MAX") --except: -- MAXFD = 256 -- --# True/False does not exist on 2.2.0 --try: -- False --except NameError: -- False = 0 -- True = 1 -- --_active = [] -- --def _cleanup(): -- for inst in _active[:]: -- inst.poll() -- --PIPE = -1 --STDOUT = -2 -- -- --def call(*args, **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"]) -- """ -- return Popen(*args, **kwargs).wait() -- -- --def list2cmdline(seq): -- """ -- Translate a sequence of arguments into a command line -- string, using the same rules as the MS C runtime: -- -- 1) Arguments are delimited by white space, which is either a -- space or a tab. -- -- 2) A string surrounded by double quotation marks is -- interpreted as a single argument, regardless of white space -- contained within. A quoted string can be embedded in an -- argument. -- -- 3) A double quotation mark preceded by a backslash is -- interpreted as a literal double quotation mark. -- -- 4) Backslashes are interpreted literally, unless they -- immediately precede a double quotation mark. -- -- 5) If backslashes immediately precede a double quotation mark, -- every pair of backslashes is interpreted as a literal -- backslash. If the number of backslashes is odd, the last -- backslash escapes the next double quotation mark as -- described in rule 3. -- """ -- -- # See -- # http://msdn.microsoft.com/library/en-us/vccelng/htm/progs_12.asp -- result = [] -- needquote = False -- for arg in seq: -- bs_buf = [] -- -- # Add a space to separate this argument from the others -- if result: -- result.append(' ') -- -- needquote = (" " in arg) or ("\t" in arg) -- if needquote: -- result.append('"') -- -- for c in arg: -- if c == '\\': -- # Don't know if we need to double yet. -- bs_buf.append(c) -- elif c == '"': -- # Double backspaces. -- result.append('\\' * len(bs_buf)*2) -- bs_buf = [] -- result.append('\\"') -- else: -- # Normal char -- if bs_buf: -- result.extend(bs_buf) -- bs_buf = [] -- result.append(c) -- -- # Add remaining backspaces, if any. -- if bs_buf: -- result.extend(bs_buf) -- -- if needquote: -- result.extend(bs_buf) -- result.append('"') -- -- return ''.join(result) -- -- --class Popen(object): -- def __init__(self, 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): -- """Create new Popen instance.""" -- _cleanup() -- -- if not isinstance(bufsize, (int, long)): -- raise TypeError("bufsize must be an integer") -- -- if mswindows: -- if preexec_fn is not None: -- raise ValueError("preexec_fn is not supported on Windows " -- "platforms") -- if close_fds: -- raise ValueError("close_fds is not supported on Windows " -- "platforms") -- else: -- # POSIX -- if startupinfo is not None: -- raise ValueError("startupinfo is only supported on Windows " -- "platforms") -- if creationflags != 0: -- raise ValueError("creationflags is only supported on Windows " -- "platforms") -- -- self.stdin = None -- self.stdout = None -- self.stderr = None -- self.pid = None -- self.returncode = None -- self.universal_newlines = universal_newlines -- -- # Input and output objects. The general principle is like -- # this: -- # -- # Parent Child -- # ------ ----- -- # p2cwrite ---stdin---> p2cread -- # c2pread <--stdout--- c2pwrite -- # errread <--stderr--- errwrite -- # -- # On POSIX, the child objects are file descriptors. On -- # Windows, these are Windows file handles. The parent objects -- # are file descriptors on both platforms. The parent objects -- # are None when not using PIPEs. The child objects are None -- # when not redirecting. -- -- (p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite) = self._get_handles(stdin, stdout, stderr) -- -- self._execute_child(args, executable, preexec_fn, close_fds, -- cwd, env, universal_newlines, -- startupinfo, creationflags, shell, -- p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite) -- -- if p2cwrite: -- self.stdin = os.fdopen(p2cwrite, 'wb', bufsize) -- if c2pread: -- if universal_newlines: -- self.stdout = os.fdopen(c2pread, 'rU', bufsize) -- else: -- self.stdout = os.fdopen(c2pread, 'rb', bufsize) -- if errread: -- if universal_newlines: -- self.stderr = os.fdopen(errread, 'rU', bufsize) -- else: -- self.stderr = os.fdopen(errread, 'rb', bufsize) -- -- _active.append(self) -- -- -- def _translate_newlines(self, data): -- data = data.replace("\r\n", "\n") -- data = data.replace("\r", "\n") -- return data -- -- -- if mswindows: -- # -- # Windows methods -- # -- def _get_handles(self, stdin, stdout, stderr): -- """Construct and return tupel with IO objects: -- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -- """ -- if stdin == None and stdout == None and stderr == None: -- return (None, None, None, None, None, None) -- -- p2cread, p2cwrite = None, None -- c2pread, c2pwrite = None, None -- errread, errwrite = None, None -- -- if stdin == None: -- p2cread = GetStdHandle(STD_INPUT_HANDLE) -- elif stdin == PIPE: -- p2cread, p2cwrite = CreatePipe(None, 0) -- # Detach and turn into fd -- p2cwrite = p2cwrite.Detach() -- p2cwrite = msvcrt.open_osfhandle(p2cwrite, 0) -- elif type(stdin) == types.IntType: -- p2cread = msvcrt.get_osfhandle(stdin) -- else: -- # Assuming file-like object -- p2cread = msvcrt.get_osfhandle(stdin.fileno()) -- p2cread = self._make_inheritable(p2cread) -- -- if stdout == None: -- c2pwrite = GetStdHandle(STD_OUTPUT_HANDLE) -- elif stdout == PIPE: -- c2pread, c2pwrite = CreatePipe(None, 0) -- # Detach and turn into fd -- c2pread = c2pread.Detach() -- c2pread = msvcrt.open_osfhandle(c2pread, 0) -- elif type(stdout) == types.IntType: -- c2pwrite = msvcrt.get_osfhandle(stdout) -- else: -- # Assuming file-like object -- c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) -- c2pwrite = self._make_inheritable(c2pwrite) -- -- if stderr == None: -- errwrite = GetStdHandle(STD_ERROR_HANDLE) -- elif stderr == PIPE: -- errread, errwrite = CreatePipe(None, 0) -- # Detach and turn into fd -- errread = errread.Detach() -- errread = msvcrt.open_osfhandle(errread, 0) -- elif stderr == STDOUT: -- errwrite = c2pwrite -- elif type(stderr) == types.IntType: -- errwrite = msvcrt.get_osfhandle(stderr) -- else: -- # Assuming file-like object -- errwrite = msvcrt.get_osfhandle(stderr.fileno()) -- errwrite = self._make_inheritable(errwrite) -- -- return (p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite) -- -- -- def _make_inheritable(self, handle): -- """Return a duplicate of handle, which is inheritable""" -- return DuplicateHandle(GetCurrentProcess(), handle, -- GetCurrentProcess(), 0, 1, -- DUPLICATE_SAME_ACCESS) -- -- -- def _find_w9xpopen(self): -- """Find and return absolut path to w9xpopen.exe""" -- w9xpopen = os.path.join(os.path.dirname(GetModuleFileName(0)), -- "w9xpopen.exe") -- if not os.path.exists(w9xpopen): -- # Eeek - file-not-found - possibly an embedding -- |
