Skip to content

Commit 2d9d8e6

Browse files
use lines of unicode_escaped strings for history - its multi-python safe and more readable
1 parent 2fdd3ad commit 2d9d8e6

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

pyrepl/python_reader.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
# one impressive collections of imports:
2323
from __future__ import print_function
24+
from __future__ import unicode_literals
2425
from pyrepl.completing_reader import CompletingReader
2526
from pyrepl.historical_reader import HistoricalReader
2627
from pyrepl import completing_reader, reader
@@ -75,7 +76,7 @@ def do(self):
7576
text = r.get_unicode()
7677
try:
7778
# ooh, look at the hack:
78-
code = r.compiler("#coding:utf-8\n"+text)
79+
code = r.compiler(text)
7980
except (OverflowError, SyntaxError, ValueError):
8081
self.finish = 1
8182
else:
@@ -89,16 +90,14 @@ def do(self):
8990
import_line_prog = re.compile(
9091
"^(?:import|from)\s+(?P<mod>[A-Za-z_.0-9]*)\s*$")
9192

92-
def mk_saver(reader):
93-
def saver(reader=reader):
94-
try:
95-
file = open(os.path.expanduser("~/.pythoni.hist"), "w")
96-
except IOError:
97-
pass
98-
else:
99-
pickle.dump(reader.history, file)
100-
file.close()
101-
return saver
93+
def saver(reader=reader):
94+
try:
95+
with open(os.path.expanduser("~/.pythoni.hist"), "wb") as fp:
96+
fp.write(b'\n'.join(item.encode('unicode_escape')
97+
for item in reader.history))
98+
except IOError as e:
99+
print(e)
100+
pass
102101

103102
class PythonicReader(CompletingReader, HistoricalReader):
104103
def collect_keymap(self):
@@ -119,17 +118,18 @@ def __init__(self, console, locals,
119118
else:
120119
self.compiler = compiler
121120
try:
122-
file = open(os.path.expanduser("~/.pythoni.hist"))
121+
file = open(os.path.expanduser("~/.pythoni.hist"), 'rb')
123122
except IOError:
124-
pass
123+
self.history = []
125124
else:
126125
try:
127-
self.history = pickle.load(file)
126+
lines = file.readlines()
127+
self.history = [ x.rstrip(b'\n').decode('unicode_escape') for x in lines]
128128
except:
129129
self.history = []
130130
self.historyi = len(self.history)
131131
file.close()
132-
atexit.register(mk_saver(self))
132+
atexit.register(lambda: saver(self))
133133
for c in [maybe_accept]:
134134
self.commands[c.__name__] = c
135135
self.commands[c.__name__.replace('_', '-')] = c

0 commit comments

Comments
 (0)