summaryrefslogtreecommitdiffstats
path: root/package/python-twisted/0001-Fix-syntax-for-python3.7.patch
blob: a55695c76480296a548053138357729b718c7236 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
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

OpenPOWER on IntegriCloud