[Greater-commits] r3633 - trunk/GREAT-ER/Lib
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Fri Jul 22 10:18:14 CEST 2011
Author: aheinecke
Date: 2011-07-22 10:18:13 +0200 (Fri, 22 Jul 2011)
New Revision: 3633
Added:
trunk/GREAT-ER/Lib/winpaths.py
Log:
Add winpaths library to determine application data paths correctly
on all windows systems
Added: trunk/GREAT-ER/Lib/winpaths.py
===================================================================
--- trunk/GREAT-ER/Lib/winpaths.py 2011-07-21 16:06:49 UTC (rev 3632)
+++ trunk/GREAT-ER/Lib/winpaths.py 2011-07-22 08:18:13 UTC (rev 3633)
@@ -0,0 +1,167 @@
+#coding: UTF8
+"""
+System File Locations
+Retrieves common system path names on Windows XP/Vista
+Depends only on ctypes, and retrieves path locations in Unicode
+"""
+
+import ctypes
+from ctypes import windll, wintypes
+
+__license__ = "MIT"
+__version__ = "0.1"
+__author__ = "Ryan Ginstrom"
+__description__ = "Retrieves common Windows system paths as Unicode strings"
+
+class PathConstants(object):
+ """
+ Define constants here to avoid dependency on shellcon.
+ Put it in a class to avoid polluting namespace
+ """
+
+ CSIDL_DESKTOP = 0
+ CSIDL_PROGRAMS = 2
+ CSIDL_PERSONAL = 5
+ CSIDL_FAVORITES = 6
+ CSIDL_STARTUP = 7
+ CSIDL_RECENT = 8
+ CSIDL_SENDTO = 9
+ CSIDL_BITBUCKET = 10
+ CSIDL_STARTMENU = 11
+ CSIDL_MYDOCUMENTS = 12
+ CSIDL_MYMUSIC = 13
+ CSIDL_MYVIDEO = 14
+ CSIDL_DESKTOPDIRECTORY = 16
+ CSIDL_DRIVES = 17
+ CSIDL_NETWORK = 18
+ CSIDL_NETHOOD = 19
+ CSIDL_FONTS = 20
+ CSIDL_TEMPLATES = 21
+ CSIDL_COMMON_STARTMENU = 22
+ CSIDL_COMMON_PROGRAMS = 23
+ CSIDL_COMMON_STARTUP = 24
+ CSIDL_COMMON_DESKTOPDIRECTORY = 25
+ CSIDL_APPDATA = 26
+ CSIDL_PRINTHOOD = 27
+ CSIDL_LOCAL_APPDATA = 28
+ CSIDL_ALTSTARTUP = 29
+ CSIDL_COMMON_ALTSTARTUP = 30
+ CSIDL_COMMON_FAVORITES = 31
+ CSIDL_INTERNET_CACHE = 32
+ CSIDL_COOKIES = 33
+ CSIDL_HISTORY = 34
+ CSIDL_COMMON_APPDATA = 35
+ CSIDL_WINDOWS = 36
+ CSIDL_SYSTEM = 37
+ CSIDL_PROGRAM_FILES = 38
+ CSIDL_MYPICTURES = 39
+ CSIDL_PROFILE = 40
+ CSIDL_SYSTEMX86 = 41
+ CSIDL_PROGRAM_FILESX86 = 42
+ CSIDL_PROGRAM_FILES_COMMON = 43
+ CSIDL_PROGRAM_FILES_COMMONX86 = 44
+ CSIDL_COMMON_TEMPLATES = 45
+ CSIDL_COMMON_DOCUMENTS = 46
+ CSIDL_COMMON_ADMINTOOLS = 47
+ CSIDL_ADMINTOOLS = 48
+ CSIDL_CONNECTIONS = 49
+ CSIDL_COMMON_MUSIC = 53
+ CSIDL_COMMON_PICTURES = 54
+ CSIDL_COMMON_VIDEO = 55
+ CSIDL_RESOURCES = 56
+ CSIDL_RESOURCES_LOCALIZED = 57
+ CSIDL_COMMON_OEM_LINKS = 58
+ CSIDL_CDBURN_AREA = 59
+ # 60 unused
+ CSIDL_COMPUTERSNEARME = 61
+
+class WinPathsException(Exception):
+ pass
+
+def _err_unless_zero(result):
+ if result == 0:
+ return result
+ else:
+ raise WinPathsException("Failed to retrieve windows path: %s" % result)
+
+_SHGetFolderPath = windll.shell32.SHGetFolderPathW
+_SHGetFolderPath.argtypes = [wintypes.HWND,
+ ctypes.c_int,
+ wintypes.HANDLE,
+ wintypes.DWORD, wintypes.LPCWSTR]
+_SHGetFolderPath.restype = _err_unless_zero
+
+def _get_path_buf(csidl):
+ path_buf = wintypes.create_unicode_buffer(wintypes.MAX_PATH)
+ result = _SHGetFolderPath(0, csidl, 0, 0, path_buf)
+ return path_buf.value
+
+def get_local_appdata():
+ return _get_path_buf(PathConstants.CSIDL_LOCAL_APPDATA)
+
+def get_appdata():
+ return _get_path_buf(PathConstants.CSIDL_APPDATA)
+
+def get_desktop():
+ return _get_path_buf(PathConstants.CSIDL_DESKTOP)
+
+def get_programs():
+ """current user -> Start menu -> Programs"""
+ return _get_path_buf(PathConstants.CSIDL_PROGRAMS)
+
+def get_admin_tools():
+ """current user -> Start menu -> Programs -> Admin tools"""
+ return _get_path_buf(PathConstants.CSIDL_ADMINTOOLS)
+
+def get_common_admin_tools():
+ """all users -> Start menu -> Programs -> Admin tools"""
+ return _get_path_buf(PathConstants.CSIDL_COMMON_ADMINTOOLS)
+
+def get_common_appdata():
+ return _get_path_buf(PathConstants.CSIDL_COMMON_APPDATA)
+
+def get_common_documents():
+ return _get_path_buf(PathConstants.CSIDL_COMMON_DOCUMENTS)
+
+def get_cookies():
+ return _get_path_buf(PathConstants.CSIDL_COOKIES)
+
+def get_history():
+ return _get_path_buf(PathConstants.CSIDL_HISTORY)
+
+def get_internet_cache():
+ return _get_path_buf(PathConstants.CSIDL_INTERNET_CACHE)
+
+def get_my_pictures():
+ """Get the user's My Pictures folder"""
+ return _get_path_buf(PathConstants.CSIDL_MYPICTURES)
+
+def get_personal():
+ """AKA 'My Documents'"""
+ return _get_path_buf(PathConstants.CSIDL_PERSONAL)
+
+get_my_documents = get_personal
+
+def get_program_files():
+ return _get_path_buf(PathConstants.CSIDL_PROGRAM_FILES)
+
+def get_program_files_common():
+ return _get_path_buf(PathConstants.CSIDL_PROGRAM_FILES_COMMON)
+
+def get_system():
+ """Use with care and discretion"""
+ return _get_path_buf(PathConstants.CSIDL_SYSTEM)
+
+def get_windows():
+ """Use with care and discretion"""
+ return _get_path_buf(PathConstants.CSIDL_WINDOWS)
+
+def get_favorites():
+ return _get_path_buf(PathConstants.CSIDL_FAVORITES)
+
+def get_startup():
+ """current user -> start menu -> programs -> startup"""
+ return _get_path_buf(PathConstants.CSIDL_STARTUP)
+
+def get_recent():
+ return _get_path_buf(PathConstants.CSIDL_RECENT)
Property changes on: trunk/GREAT-ER/Lib/winpaths.py
___________________________________________________________________
Name: svn:executable
+ *
More information about the Greater-commits
mailing list