##// END OF EJS Templates
restore My Documents fallback for get_home_dir on Windows
MinRK -
Show More
@@ -201,10 +201,25 b' def get_home_dir(require_writable=False):'
201 return py3compat.cast_unicode(root, fs_encoding)
201 return py3compat.cast_unicode(root, fs_encoding)
202
202
203 homedir = os.path.expanduser('~')
203 homedir = os.path.expanduser('~')
204
205 if not _writable_dir(homedir) and os.name == 'nt':
206 # expanduser failed, use the registry to get the 'My Documents' folder.
207 try:
208 import _winreg as wreg
209 key = wreg.OpenKey(
210 wreg.HKEY_CURRENT_USER,
211 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
212 )
213 homedir = wreg.QueryValueEx(key,'Personal')[0]
214 key.Close()
215 except:
216 pass
217
204 if (not require_writable) or _writable_dir(homedir):
218 if (not require_writable) or _writable_dir(homedir):
205 return py3compat.cast_unicode(homedir, fs_encoding)
219 return py3compat.cast_unicode(homedir, fs_encoding)
206 else:
220 else:
207 raise HomeDirError('%s is not a writable dir, set $HOME env to override' % homedir)
221 raise HomeDirError('%s is not a writable dir, '
222 'set $HOME environment variable to override' % homedir)
208
223
209 def get_xdg_dir():
224 def get_xdg_dir():
210 """Return the XDG_CONFIG_HOME, if it is defined and exists, else None.
225 """Return the XDG_CONFIG_HOME, if it is defined and exists, else None.
@@ -166,8 +166,40 b' def test_get_home_dir_4():'
166 def test_get_home_dir_5():
166 def test_get_home_dir_5():
167 """raise HomeDirError if $HOME is specified, but not a writable dir"""
167 """raise HomeDirError if $HOME is specified, but not a writable dir"""
168 env['HOME'] = abspath(HOME_TEST_DIR+'garbage')
168 env['HOME'] = abspath(HOME_TEST_DIR+'garbage')
169 # set os.name = posix, to prevent My Documents fallback on Windows
170 os.name = 'posix'
169 nt.assert_raises(path.HomeDirError, path.get_home_dir, True)
171 nt.assert_raises(path.HomeDirError, path.get_home_dir, True)
170
172
173
174 # Should we stub wreg fully so we can run the test on all platforms?
175 @skip_if_not_win32
176 @with_environment
177 def test_get_home_dir_8():
178 """Using registry hack for 'My Documents', os=='nt'
179
180 HOMESHARE, HOMEDRIVE, HOMEPATH, USERPROFILE and others are missing.
181 """
182 os.name = 'nt'
183 # Remove from stub environment all keys that may be set
184 for key in ['HOME', 'HOMESHARE', 'HOMEDRIVE', 'HOMEPATH', 'USERPROFILE']:
185 env.pop(key, None)
186
187 #Stub windows registry functions
188 def OpenKey(x, y):
189 class key:
190 def Close(self):
191 pass
192 return key()
193 def QueryValueEx(x, y):
194 return [abspath(HOME_TEST_DIR)]
195
196 wreg.OpenKey = OpenKey
197 wreg.QueryValueEx = QueryValueEx
198
199 home_dir = path.get_home_dir()
200 nt.assert_equal(home_dir, abspath(HOME_TEST_DIR))
201
202
171 @with_environment
203 @with_environment
172 def test_get_ipython_dir_1():
204 def test_get_ipython_dir_1():
173 """test_get_ipython_dir_1, Testcase to see if we can call get_ipython_dir without Exceptions."""
205 """test_get_ipython_dir_1, Testcase to see if we can call get_ipython_dir without Exceptions."""
General Comments 0
You need to be logged in to leave comments. Login now