mirror of
https://github.com/davidhalter/jedi.git
synced 2026-05-25 01:38:36 +08:00
Fix for Python 2 and 3 on Windows, see #1037.
This commit is contained in:
+29
-6
@@ -2,6 +2,8 @@
|
|||||||
To ensure compatibility from Python ``2.7`` - ``3.x``, a module has been
|
To ensure compatibility from Python ``2.7`` - ``3.x``, a module has been
|
||||||
created. Clearly there is huge need to use conforming syntax.
|
created. Clearly there is huge need to use conforming syntax.
|
||||||
"""
|
"""
|
||||||
|
import binascii
|
||||||
|
import errno
|
||||||
import sys
|
import sys
|
||||||
import imp
|
import imp
|
||||||
import os
|
import os
|
||||||
@@ -434,14 +436,35 @@ if sys.version_info[:2] == (3, 3):
|
|||||||
|
|
||||||
|
|
||||||
_PICKLE_PROTOCOL = 2
|
_PICKLE_PROTOCOL = 2
|
||||||
|
is_windows = sys.platform == 'win32'
|
||||||
|
|
||||||
def pickle_load(file):
|
def pickle_load(file):
|
||||||
if is_py3:
|
if is_windows:
|
||||||
return pickle.load(file, encoding='bytes')
|
try:
|
||||||
|
data = file.readline()
|
||||||
|
data = binascii.unhexlify(data.strip())
|
||||||
|
if is_py3:
|
||||||
|
return pickle.loads(data, encoding='bytes')
|
||||||
|
else:
|
||||||
|
return pickle.loads(data)
|
||||||
|
except OSError:
|
||||||
|
raise EOFError()
|
||||||
else:
|
else:
|
||||||
return pickle.load(file)
|
if is_py3:
|
||||||
|
return pickle.load(file, encoding='bytes')
|
||||||
|
else:
|
||||||
|
return pickle.load(file)
|
||||||
|
|
||||||
def pickle_dump(data, file):
|
def pickle_dump(data, file):
|
||||||
pickle.dump(data, file, protocol=_PICKLE_PROTOCOL)
|
if is_windows:
|
||||||
|
try:
|
||||||
|
data = pickle.dumps(data, protocol=_PICKLE_PROTOCOL)
|
||||||
|
data = binascii.hexlify(data)
|
||||||
|
file.write(data)
|
||||||
|
file.write(b'\n')
|
||||||
|
file.flush()
|
||||||
|
except OSError:
|
||||||
|
raise IOError(errno.EPIPE)
|
||||||
|
else:
|
||||||
|
pickle.dump(data, file, protocol=_PICKLE_PROTOCOL)
|
||||||
|
file.flush()
|
||||||
|
|||||||
@@ -187,7 +187,6 @@ class _CompiledSubprocess(object):
|
|||||||
data = evaluator_id, function, args, kwargs
|
data = evaluator_id, function, args, kwargs
|
||||||
try:
|
try:
|
||||||
pickle_dump(data, self._process.stdin)
|
pickle_dump(data, self._process.stdin)
|
||||||
self._process.stdin.flush()
|
|
||||||
except (socket.error, IOError) as e:
|
except (socket.error, IOError) as e:
|
||||||
# Once Python2 will be removed we can just use `BrokenPipeError`.
|
# Once Python2 will be removed we can just use `BrokenPipeError`.
|
||||||
if e.errno != errno.EPIPE:
|
if e.errno != errno.EPIPE:
|
||||||
@@ -283,7 +282,6 @@ class Listener(object):
|
|||||||
result = True, traceback.format_exc(), e
|
result = True, traceback.format_exc(), e
|
||||||
|
|
||||||
pickle_dump(result, file=stdout)
|
pickle_dump(result, file=stdout)
|
||||||
stdout.flush()
|
|
||||||
|
|
||||||
|
|
||||||
class AccessHandle(object):
|
class AccessHandle(object):
|
||||||
|
|||||||
Reference in New Issue
Block a user