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