From: Robie B. <rb-...@ju...> - 2008-10-20 09:59:27
|
Hi, I'm having the same problem. If you use file_class for a real FUSE filesystem, then you have to check permissions on an open, which is in file_class.__init__. I can't GetContext() inside the file_class without having a reference to the Fuse subclass, so having such a reference is absolutely essential. I think that the Fuse reference should be passed to the constructor of the file_class. It doesn't make sense not to. I think that having to define the file_class inside a function in order to get access to self is ugly. I realise that there's a concern for backward compatibility with the current API, but IMHO the current API is broken. Nikolaus Rath wrote: > Since my last post I also came up with the following workaround to > pass the instance. In case you decide against both the above > modifications, maybe it would be nice to put this into the > documentation (it took me a while to come up with it): > > class my_fs(Fuse): > > def __init__(self): > Fuse.__init__(self) > > # Mess around to pass fuse instance to file class constructor > class file_class (my_file_class): > def __init__(self2, *a, **kw): > file_class.__init__(self2, *a, **kw, fuse=self) > self.file_class = file_class > Thanks - this was an excellent starting point. I had a little bit of trouble with it though, because my intepreter doesn't like an argument after **kw. I reworked it a bit too. Using the same sort of idea, I did: class MyFilesystem(Fuse): ... class File: ... def main(self): class file_class(MyFilesystem.File): def __init__(self2, *args, **kwargs): kwargs['fuse'] = self MyFilesystem.File.__init__(self2, *args, **kwargs) self.file_class = file_class return Fuse.main(self, *args, **kwargs) This seems like quite a clean workaround to me. Robie |