[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