summaryrefslogtreecommitdiffstats
path: root/contrib/python/Twisted/py2/twisted/python/win32.py
diff options
context:
space:
mode:
authorshmel1k <[email protected]>2023-11-26 18:16:14 +0300
committershmel1k <[email protected]>2023-11-26 18:43:30 +0300
commitb8cf9e88f4c5c64d9406af533d8948deb050d695 (patch)
tree218eb61fb3c3b96ec08b4d8cdfef383104a87d63 /contrib/python/Twisted/py2/twisted/python/win32.py
parent523f645a83a0ec97a0332dbc3863bb354c92a328 (diff)
add kikimr_configure
Diffstat (limited to 'contrib/python/Twisted/py2/twisted/python/win32.py')
-rw-r--r--contrib/python/Twisted/py2/twisted/python/win32.py136
1 files changed, 136 insertions, 0 deletions
diff --git a/contrib/python/Twisted/py2/twisted/python/win32.py b/contrib/python/Twisted/py2/twisted/python/win32.py
new file mode 100644
index 00000000000..ae62da5853e
--- /dev/null
+++ b/contrib/python/Twisted/py2/twisted/python/win32.py
@@ -0,0 +1,136 @@
+# -*- test-case-name: twisted.python.test.test_win32 -*-
+# Copyright (c) Twisted Matrix Laboratories.
+# See LICENSE for details.
+
+"""
+Win32 utilities.
+
+See also twisted.python.shortcut.
+
+@var O_BINARY: the 'binary' mode flag on Windows, or 0 on other platforms, so it
+ may safely be OR'ed into a mask for os.open.
+"""
+
+from __future__ import division, absolute_import
+
+import re
+import os
+
+
+# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/system_error_codes.asp
+ERROR_FILE_NOT_FOUND = 2
+ERROR_PATH_NOT_FOUND = 3
+ERROR_INVALID_NAME = 123
+ERROR_DIRECTORY = 267
+
+O_BINARY = getattr(os, "O_BINARY", 0)
+
+class FakeWindowsError(OSError):
+ """
+ Stand-in for sometimes-builtin exception on platforms for which it
+ is missing.
+ """
+
+try:
+ WindowsError = WindowsError
+except NameError:
+ WindowsError = FakeWindowsError
+
+
+_cmdLineQuoteRe = re.compile(r'(\\*)"')
+_cmdLineQuoteRe2 = re.compile(r'(\\+)\Z')
+def cmdLineQuote(s):
+ """
+ Internal method for quoting a single command-line argument.
+
+ @param s: an unquoted string that you want to quote so that something that
+ does cmd.exe-style unquoting will interpret it as a single argument,
+ even if it contains spaces.
+ @type s: C{str}
+
+ @return: a quoted string.
+ @rtype: C{str}
+ """
+ quote = ((" " in s) or ("\t" in s) or ('"' in s) or s == '') and '"' or ''
+ return quote + _cmdLineQuoteRe2.sub(r"\1\1", _cmdLineQuoteRe.sub(r'\1\1\\"', s)) + quote
+
+def quoteArguments(arguments):
+ """
+ Quote an iterable of command-line arguments for passing to CreateProcess or
+ a similar API. This allows the list passed to C{reactor.spawnProcess} to
+ match the child process's C{sys.argv} properly.
+
+ @param arglist: an iterable of C{str}, each unquoted.
+
+ @return: a single string, with the given sequence quoted as necessary.
+ """
+ return ' '.join([cmdLineQuote(a) for a in arguments])
+
+
+class _ErrorFormatter(object):
+ """
+ Formatter for Windows error messages.
+
+ @ivar winError: A callable which takes one integer error number argument
+ and returns an L{exceptions.WindowsError} instance for that error (like
+ L{ctypes.WinError}).
+
+ @ivar formatMessage: A callable which takes one integer error number
+ argument and returns a C{str} giving the message for that error (like
+ L{win32api.FormatMessage}).
+
+ @ivar errorTab: A mapping from integer error numbers to C{str} messages
+ which correspond to those erorrs (like I{socket.errorTab}).
+ """
+ def __init__(self, WinError, FormatMessage, errorTab):
+ self.winError = WinError
+ self.formatMessage = FormatMessage
+ self.errorTab = errorTab
+
+ def fromEnvironment(cls):
+ """
+ Get as many of the platform-specific error translation objects as
+ possible and return an instance of C{cls} created with them.
+ """
+ try:
+ from ctypes import WinError
+ except ImportError:
+ WinError = None
+ try:
+ from win32api import FormatMessage
+ except ImportError:
+ FormatMessage = None
+ try:
+ from socket import errorTab
+ except ImportError:
+ errorTab = None
+ return cls(WinError, FormatMessage, errorTab)
+ fromEnvironment = classmethod(fromEnvironment)
+
+
+ def formatError(self, errorcode):
+ """
+ Returns the string associated with a Windows error message, such as the
+ ones found in socket.error.
+
+ Attempts direct lookup against the win32 API via ctypes and then
+ pywin32 if available), then in the error table in the socket module,
+ then finally defaulting to C{os.strerror}.
+
+ @param errorcode: the Windows error code
+ @type errorcode: C{int}
+
+ @return: The error message string
+ @rtype: C{str}
+ """
+ if self.winError is not None:
+ return self.winError(errorcode).strerror
+ if self.formatMessage is not None:
+ return self.formatMessage(errorcode)
+ if self.errorTab is not None:
+ result = self.errorTab.get(errorcode)
+ if result is not None:
+ return result
+ return os.strerror(errorcode)
+
+formatError = _ErrorFormatter.fromEnvironment().formatError