1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import stat
18
19 from libxyz.vfs import util
20
22 """
23 A stat st_mode field representaion
24 """
25
27 """
28 @param st_mode: Raw st_mode obtained from os.stat()
29 @param vfstype: VFS file type
30 """
31
32 self.raw = st_mode
33 self.vfstype = vfstype
34 self.string = self._make_string_mode()
35
36
37
40
41
42
45
46
47
65
66
67
69 _raw = self.raw
70 _str_mode = []
71
72 if _raw & stat.S_IRUSR:
73 _bit = "r"
74 else:
75 _bit = "-"
76 _str_mode.append(_bit)
77
78 if _raw & stat.S_IWUSR:
79 _bit = "w"
80 else:
81 _bit = "-"
82 _str_mode.append(_bit)
83
84 _o_mode = _raw & (stat.S_IXUSR | stat.S_ISUID)
85
86 if _o_mode == 0:
87 _bit = "-"
88 elif _o_mode == stat.S_IXUSR:
89 _bit = "x"
90 elif _o_mode == stat.S_ISUID:
91 _bit = "S"
92 elif _o_mode == stat.S_IXUSR | stat.S_ISUID:
93 _bit = "s"
94 _str_mode.append(_bit)
95
96 return _str_mode
97
98
99
101 _raw = self.raw
102 _str_mode = []
103
104 if _raw & stat.S_IRGRP:
105 _bit = "r"
106 else:
107 _bit = "-"
108 _str_mode.append(_bit)
109
110 if _raw & stat.S_IWGRP:
111 _bit = "w"
112 else:
113 _bit = "-"
114 _str_mode.append(_bit)
115
116 _o_mode = _raw & (stat.S_IXGRP | stat.S_ISGID)
117
118 if _o_mode == 0:
119 _bit = "-"
120 elif _o_mode == stat.S_IXGRP:
121 _bit = "x"
122 elif _o_mode == stat.S_ISGID:
123 _bit = "S"
124 elif _o_mode == stat.S_IXGRP | stat.S_ISGID:
125 _bit = "s"
126 _str_mode.append(_bit)
127
128 return _str_mode
129
130
131
133 _raw = self.raw
134 _str_mode = []
135
136 if _raw & stat.S_IROTH:
137 _bit = "r"
138 else:
139 _bit = "-"
140 _str_mode.append(_bit)
141
142 if _raw & stat.S_IWOTH:
143 _bit = "w"
144 else:
145 _bit = "-"
146 _str_mode.append(_bit)
147
148 _o_mode = _raw & (stat.S_IXOTH | stat.S_ISVTX)
149
150 if _o_mode == 0:
151 _bit = "-"
152 elif _o_mode == stat.S_IXOTH:
153 _bit = "x"
154 elif _o_mode == stat.S_ISVTX:
155 _bit = "T"
156 elif _o_mode == stat.S_IXOTH | stat.S_ISVTX:
157 _bit = "t"
158 _str_mode.append(_bit)
159
160 return _str_mode
161