1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 """GnomeVFS backend for Virtual File System.
23 """
24
25 import os
26
27 from twisted.internet.defer import succeed
28 from twisted.spread.flavors import Copyable, RemoteCopy
29 from twisted.spread.jelly import setUnjellyableForClass
30 from zope.interface import implements
31
32 from flumotion.common import log
33 from flumotion.common.errors import AccessDeniedError, NotDirectoryError
34 from flumotion.common.interfaces import IDirectory, IFile
35
36
37
38
39 __pychecker__ = 'keepgoing'
40
41
43 """I am object implementing L{IFile} on top of GnomeVFS,
44 see L{IFile} for more information.
45 """
46 implements(IFile)
47
52
53
54
57
58
60 """I am object implementing L{IDirectory} on top of GnomeVFS,
61 see L{IDirectory} for more information.
62 """
63 implements(IDirectory)
64
80
81
82
85
86
87
89 return succeed(self._cachedFiles)
90
92 """
93 Fetches the files contained on the directory for posterior usage of
94 them. This should be called on the worker side to work or the files
95 wouldn't be the expected ones.
96 """
97 import gnomevfs
98 log.debug('vfsgnome', 'getting files for %s' % (self.path, ))
99 retval = []
100 try:
101 fileInfos = gnomevfs.open_directory(self.path)
102 except gnomevfs.AccessDeniedError:
103 raise AccessDeniedError
104 if self.path != '/':
105 retval.append(GnomeVFSDirectory(os.path.dirname(self.path),
106 name='..'))
107 for fileInfo in fileInfos:
108 filename = fileInfo.name
109 if filename.startswith('.'):
110 continue
111 if fileInfo.type == gnomevfs.FILE_TYPE_DIRECTORY:
112 obj = GnomeVFSDirectory(os.path.join(self.path,
113 fileInfo.name))
114 else:
115 obj = GnomeVFSFile(self.path, fileInfo)
116 retval.append(obj)
117 log.log('vfsgnome', 'returning %r' % (retval, ))
118 self._cachedFiles = retval
119
120
127