Enabling PySide support
[gonvert] / gonvert / util / linux.py
1 #!/usr/bin/env python
2
3
4 import os
5 import logging
6
7 try:
8         from xdg import BaseDirectory as _BaseDirectory
9         BaseDirectory = _BaseDirectory
10 except ImportError:
11         BaseDirectory = None
12
13
14 _moduleLogger = logging.getLogger(__name__)
15
16
17 _libc = None
18
19
20 def set_process_name(name):
21         try: # change process name for killall
22                 global _libc
23                 if _libc is None:
24                         import ctypes
25                         _libc = ctypes.CDLL('libc.so.6')
26                 _libc.prctl(15, name, 0, 0, 0)
27         except Exception, e:
28                 _moduleLogger.warning('Unable to set processName: %s" % e')
29
30
31 def _get_xdg_path(resourceType):
32         if BaseDirectory is not None:
33                 if resourceType == "data":
34                         base = BaseDirectory.xdg_data_home
35                         if base == "/usr/share/mime":
36                                 # Ugly hack because somehow Maemo 4.1 seems to be set to this
37                                 base = None
38                 elif resourceType == "config":
39                         base = BaseDirectory.xdg_config_home
40                 elif resourceType == "cache":
41                         base = BaseDirectory.xdg_cache_home
42                 else:
43                         raise RuntimeError("Unknown type: "+resourceType)
44         else:
45                 base = None
46
47         return base
48
49
50 def get_resource_path(resourceType, resource, name = None):
51         base = _get_xdg_path(resourceType)
52         if base is not None:
53                 dirPath = os.path.join(base, resource)
54         else:
55                 base = os.path.join(os.path.expanduser("~"), ".%s" % resource)
56                 dirPath = base
57         if name is not None:
58                 dirPath = os.path.join(dirPath, name)
59         return dirPath
60
61
62 def get_new_resource(resourceType, resource, name):
63         dirPath = get_resource_path(resourceType, resource)
64         filePath = os.path.join(dirPath, name)
65         if not os.path.exists(dirPath):
66                 # Looking before I leap to not mask errors
67                 os.makedirs(dirPath)
68
69         return filePath
70
71
72 def get_existing_resource(resourceType, resource, name):
73         base = _get_xdg_path(resourceType)
74
75         if base is not None:
76                 finalPath = os.path.join(base, name)
77                 if os.path.exists(finalPath):
78                         return finalPath
79
80         altBase = os.path.join(os.path.expanduser("~"), ".%s" % resource)
81         finalPath = os.path.join(altBase, name)
82         if os.path.exists(finalPath):
83                 return finalPath
84         else:
85                 raise RuntimeError("Resource not found: %r" % ((resourceType, resource, name), ))