123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- From ef2bd5d0c0ca66aae16bf1344dfb18d52a6f5c74 Mon Sep 17 00:00:00 2001
- From: Asaf Kahlon <asafka7@gmail.com>
- Date: Wed, 26 Sep 2018 17:47:02 +0300
- Subject: [PATCH 1/1] Fix syntax for python3.7
- Based on upstream patch (dcaf946217b4ea1684e98a9ebc4f9925d76f3108)
- to solve python3.7 syntax error with "async" keyword.
- Signed-off-by: Asaf Kahlon <asafka7@gmail.com>
- ---
- src/twisted/conch/manhole.py | 15 ++++++++-------
- src/twisted/mail/imap4.py | 19 +++++++++++--------
- src/twisted/python/compat.py | 24 ++++++++++++++++++++++++
- 3 files changed, 43 insertions(+), 15 deletions(-)
- diff --git a/src/twisted/conch/manhole.py b/src/twisted/conch/manhole.py
- index 3326f90aa..17ca05c58 100644
- --- a/src/twisted/conch/manhole.py
- +++ b/src/twisted/conch/manhole.py
- @@ -19,7 +19,7 @@ from io import BytesIO
- from twisted.conch import recvline
-
- from twisted.internet import defer
- -from twisted.python.compat import _tokenize
- +from twisted.python.compat import _tokenize, get_async_param
- from twisted.python.htmlizer import TokenPrinter
-
- class FileWrapper:
- @@ -151,9 +151,9 @@ class ManholeInterpreter(code.InteractiveInterpreter):
- return failure
-
-
- - def write(self, data, async=False):
- - self.handler.addOutput(data, async)
- -
- + def write(self, data, async_=None, **kwargs):
- + async_ = get_async_param(async_, **kwargs)
- + self.handler.addOutput(data, async_)
-
-
- CTRL_C = b'\x03'
- @@ -237,14 +237,15 @@ class Manhole(recvline.HistoricRecvLine):
- return not w.endswith(b'\n') and not w.endswith(b'\x1bE')
-
-
- - def addOutput(self, data, async=False):
- - if async:
- + def addOutput(self, data, async_=None, **kwargs):
- + async_ = get_async_param(async_, **kwargs)
- + if async_:
- self.terminal.eraseLine()
- self.terminal.cursorBackward(len(self.lineBuffer) + len(self.ps[self.pn]))
-
- self.terminal.write(data)
-
- - if async:
- + if async_:
- if self._needsNewline():
- self.terminal.nextLine()
-
- diff --git a/src/twisted/mail/imap4.py b/src/twisted/mail/imap4.py
- index 0ca1f1c5e..295053a6c 100644
- --- a/src/twisted/mail/imap4.py
- +++ b/src/twisted/mail/imap4.py
- @@ -42,7 +42,7 @@ from twisted.python.compat import (
- _bytesChr, unichr as chr, _b64decodebytes as decodebytes,
- _b64encodebytes as encodebytes,
- intToBytes, iterbytes, long, nativeString, networkString, unicode,
- - _matchingString, _PY3
- + _matchingString, _PY3, get_async_param,
- )
- from twisted.internet import interfaces
-
- @@ -1090,8 +1090,9 @@ class IMAP4Server(basic.LineReceiver, policies.TimeoutMixin):
- self._respond(b'NO', tag, message)
-
-
- - def sendUntaggedResponse(self, message, async=False):
- - if not async or (self.blocked is None):
- + def sendUntaggedResponse(self, message, async_=None, **kwargs):
- + async_ = get_async_param(async_, **kwargs)
- + if not async_ or (self.blocked is None):
- self._respond(message, None, None)
- else:
- self._queuedAsync.append(message)
- @@ -2497,9 +2498,9 @@ class IMAP4Server(basic.LineReceiver, policies.TimeoutMixin):
- #
- def modeChanged(self, writeable):
- if writeable:
- - self.sendUntaggedResponse(message=b'[READ-WRITE]', async=True)
- + self.sendUntaggedResponse(message=b'[READ-WRITE]', async_=True)
- else:
- - self.sendUntaggedResponse(message=b'[READ-ONLY]', async=True)
- + self.sendUntaggedResponse(message=b'[READ-ONLY]', async_=True)
-
-
- def flagsChanged(self, newFlags):
- @@ -2508,14 +2509,16 @@ class IMAP4Server(basic.LineReceiver, policies.TimeoutMixin):
- msg = intToBytes(mId) + (
- b' FETCH (FLAGS (' +b' '.join(encodedFlags) + b'))'
- )
- - self.sendUntaggedResponse(msg, async=True)
- + self.sendUntaggedResponse(msg, async_=True)
-
-
- def newMessages(self, exists, recent):
- if exists is not None:
- - self.sendUntaggedResponse(intToBytes(exists) + b' EXISTS', async=True)
- + self.sendUntaggedResponse(
- + intToBytes(exists) + b' EXISTS', async_=True)
- if recent is not None:
- - self.sendUntaggedResponse(intToBytes(recent) + b' RECENT', async=True)
- + self.sendUntaggedResponse(
- + intToBytes(recent) + b' RECENT', async_=True)
-
-
- TIMEOUT_ERROR = error.TimeoutError()
- diff --git a/src/twisted/python/compat.py b/src/twisted/python/compat.py
- index 855e427aa..ba13bb4dd 100644
- --- a/src/twisted/python/compat.py
- +++ b/src/twisted/python/compat.py
- @@ -833,6 +833,29 @@ except ImportError:
- from collections import Sequence
-
-
- +def get_async_param(async_=None, **kwargs):
- + """
- + Provide a backwards-compatible way to get async param value that does not
- + cause a syntax error under Python 3.7.
- +
- + @param async_: async_ param value (should default to None)
- + @type async_: L{bool}
- +
- + @param kwargs: keyword arguments of the caller (only async is allowed)
- + @type async_: L{dict}
- +
- + @raise TypeError: Both async_ and async specified.
- +
- + @return: Final async_ param value
- + @rtype: L{bool}
- + """
- + if async_ is None and 'async' in kwargs:
- + async_ = kwargs.pop('async')
- + if kwargs:
- + raise TypeError
- + return bool(async_)
- +
- +
- __all__ = [
- "reraise",
- "execfile",
- @@ -874,4 +897,5 @@ __all__ = [
- "raw_input",
- "_tokenize",
- "Sequence",
- + "get_async_param",
- ]
- --
- 2.17.1
|