1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import os
18 import os.path
19
20 import libxyz.const
21
22 from libxyz.exceptions import XYZRuntimeError
23
25 """
26 Common interface for access data-files in user directory
27 """
28
32
33
34
35 - def openfile(self, filename, mode, subdir=None):
36 """
37 Open data file and return open file-object
38 For instance:
39 > openfile("keycodes", "rb", "data")
40 Will open file ~/.xyzcmd/data/keycodes for binary reading etc.
41
42 @param filename: File name
43 @param mode: Open mode
44 @param subdir: Optional subdirectory
45 @return open file-object or XYZRuntimeError raised on error
46 """
47
48 try:
49 return open(self.makepath(filename, subdir), mode)
50 except IOError, e:
51 raise XYZRuntimeError(e)
52
53
54
55 - def delfile(self, filename, subdir=None):
56 """
57 Delete file in user-directory
58 """
59
60 _path = self.makepath(filename, subdir)
61
62 if os.path.isfile(_path):
63 try:
64 os.unlink(_path)
65 except OSError, e:
66 raise XYZRuntimeError(e)
67
68
69
70 - def makepath(self, filename, subdir=None):
71 """
72 Make absolute path to file
73 """
74
75 _path = [self.user_dir]
76
77 if subdir is not None:
78 _path.append(subdir)
79
80 _prelpath = os.path.join(*_path)
81
82
83 if not os.access(_prelpath, os.F_OK):
84 try:
85 os.mkdir(_prelpath)
86 except OSError, e:
87 raise XYZRuntimeError(e)
88
89 _path.append(filename)
90
91 return os.path.join(*_path)
92