Skip to content

Commit f2f7e5a

Browse files
author
Hoyt Koepke
committed
Merge pull request #81 from dato-code/gl_pickle_fix
GLPickle expandvars and expanduser paths are now supported.
2 parents b845652 + 80b1f0b commit f2f7e5a

File tree

2 files changed

+52
-9
lines changed

2 files changed

+52
-9
lines changed

oss_src/unity/python/sframe/_gl_pickle.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,9 @@ def __init__(self, filename, protocol = -1, min_bytes_to_save = 0):
252252
self.hadoop_conf_dir = None
253253
else:
254254
# Make sure the directory exists.
255-
filename = _os.path.abspath(filename)
255+
filename = _os.path.abspath(
256+
_os.path.expanduser(
257+
_os.path.expandvars(filename)))
256258
if not _os.path.exists(filename):
257259
_os.makedirs(filename)
258260
elif _os.path.isdir(filename):
@@ -457,6 +459,9 @@ def __init__(self, filename):
457459
_file_util.download_from_hdfs(filename, self.tmp_file)
458460
filename = self.tmp_file
459461
else:
462+
filename = _os.path.abspath(
463+
_os.path.expanduser(
464+
_os.path.expandvars(filename)))
460465
if not _os.path.exists(filename):
461466
raise IOError('%s is not a valid file name.' % filename)
462467

oss_src/unity/python/sframe/test/test_gl_pickler.py

+46-8
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def test_pickling_simple_types(self):
4040
pickler.dump(obj)
4141
pickler.close()
4242
obj_ret = gl_pickle.GLUnpickler(self.filename).load()
43-
assert obj == obj_ret, "Failed pickling in %s (Got back %s)" % (obj, obj_ret)
43+
self.assertEqual(obj, obj_ret)
4444

4545
def test_pickling_sarray_types(self):
4646

@@ -54,8 +54,7 @@ def test_pickling_sarray_types(self):
5454
pickler.dump(obj)
5555
pickler.close()
5656
obj_ret = gl_pickle.GLUnpickler(self.filename).load()
57-
assert list(obj) == list(obj_ret), \
58-
"Failed pickling in %s (Got back %s)" % (obj, obj_ret)
57+
self.assertEqual(list(obj), list(obj_ret))
5958

6059
def test_pickling_sframe_types(self):
6160

@@ -120,7 +119,7 @@ def test_combination_gl_python_types(self):
120119
assert_sframe_equal(obj[0].get_vertices(), obj_ret[0].get_vertices())
121120
assert_sframe_equal(obj[0].get_edges(), obj_ret[0].get_edges())
122121
assert_sframe_equal(obj[1], obj_ret[1])
123-
assert list(obj[2]) == list(obj_ret[2])
122+
self.assertEqual(list(obj[2]), list(obj_ret[2]))
124123

125124
def test_pickle_compatibility(self):
126125
obj_list = [
@@ -135,8 +134,7 @@ def test_pickle_compatibility(self):
135134
pickler.dump(obj)
136135
file.close()
137136
obj_ret = gl_pickle.GLUnpickler(self.filename).load()
138-
assert obj == obj_ret, \
139-
"Failed pickling in %s (Got back %s)" % (obj, obj_ret)
137+
self.assertTrue(obj, obj_ret)
140138

141139
def test_cloud_pickle_compatibility(self):
142140
obj_list = [
@@ -151,8 +149,7 @@ def test_cloud_pickle_compatibility(self):
151149
pickler.dump(obj)
152150
file.close()
153151
obj_ret = gl_pickle.GLUnpickler(self.filename).load()
154-
assert obj == obj_ret, \
155-
"Failed pickling in %s (Got back %s)" % (obj, obj_ret)
152+
self.assertTrue(obj, obj_ret)
156153

157154
def test_relative_path(self):
158155
# Arrange
@@ -171,6 +168,47 @@ def test_relative_path(self):
171168
# Clean up
172169
shutil.rmtree(relative_path)
173170

171+
def test_user_path(self):
172+
# Arrange
173+
sf1 = SFrame(range(10))
174+
relative_path = '~/tmp/%s' % self.filename
175+
176+
177+
# Act
178+
pickler = gl_pickle.GLPickler(relative_path)
179+
pickler.dump(sf1)
180+
pickler.close()
181+
sf2 = gl_pickle.GLUnpickler(relative_path).load()
182+
183+
# Assert
184+
abs_path = os.path.expanduser(relative_path)
185+
self.assertTrue(os.path.exists(abs_path))
186+
assert_sframe_equal(sf1, sf2)
187+
188+
# Clean up
189+
shutil.rmtree(abs_path)
190+
191+
def test_env_path(self):
192+
# Arrange
193+
sf1 = SFrame(range(10))
194+
os.environ["FOO"] = '~/bar'
195+
relative_path = '${FOO}/tmp/%s' % self.filename
196+
197+
# Act
198+
pickler = gl_pickle.GLPickler(relative_path)
199+
pickler.dump(sf1)
200+
pickler.close()
201+
sf2 = gl_pickle.GLUnpickler(relative_path).load()
202+
203+
# Assert
204+
abs_path = os.path.expanduser(os.path.expandvars(relative_path))
205+
self.assertTrue(os.path.exists(abs_path))
206+
assert_sframe_equal(sf1, sf2)
207+
208+
# Clean up
209+
shutil.rmtree(abs_path)
210+
del(os.environ["FOO"])
211+
174212
@moto.mock_s3
175213
def test_save_to_s3(self):
176214
# Arrange

0 commit comments

Comments
 (0)