@@ -15,15 +15,21 @@ import stat
15
15
import errno
16
16
import time
17
17
import locale
18
+ import logging
18
19
import fuse
20
+ import nibabel as nib
19
21
import nibabel .dft as dft
20
22
23
+ from optparse import OptionParser , Option
24
+
21
25
uid = os .getuid ()
22
26
gid = os .getgid ()
23
27
encoding = locale .getdefaultlocale ()[1 ]
24
28
25
29
fuse .fuse_python_api = (0 , 2 )
26
30
31
+ logger = logging .getLogger ('nibabel.dft' )
32
+
27
33
class FileHandle :
28
34
29
35
def __init__ (self , fno ):
@@ -78,33 +84,31 @@ class DICOMFS(fuse.Fuse):
78
84
def match_path (self , path ):
79
85
wd = self .get_paths ()
80
86
if path == '/' :
81
- print 'return root'
87
+ logger . debug ( 'return root' )
82
88
return wd
83
89
for part in path .lstrip ('/' ).split ('/' ):
84
- print path , part
90
+ logger . debug ( "path:%s part:%s" % ( path , part ))
85
91
if part not in wd :
86
92
return None
87
93
wd = wd [part ]
88
- print 'return'
94
+ logger . debug ( 'return' )
89
95
return wd
90
96
91
97
def readdir (self , path , fh ):
92
- print 'readdir'
93
- print path
98
+ logger .info ('readdir %s' % (path ,))
94
99
matched_path = self .match_path (path )
95
100
if matched_path is None :
96
101
return - errno .ENOENT
97
- print 'match' , matched_path
102
+ logger . debug ( 'matched %s' % ( matched_path ,))
98
103
fnames = [ k .encode ('ascii' , 'replace' ) for k in matched_path .keys () ]
99
104
fnames .append ('.' )
100
105
fnames .append ('..' )
101
106
return [ fuse .Direntry (f ) for f in fnames ]
102
-
107
+
103
108
def getattr (self , path ):
104
- print 'getattr'
105
- print 'path:' , path
109
+ logger .debug ('getattr %s' % path )
106
110
matched_path = self .match_path (path )
107
- print matched_path
111
+ logger . debug ( 'matched: %s' % ( matched_path ,))
108
112
now = time .time ()
109
113
st = fuse .Stat ()
110
114
if isinstance (matched_path , dict ):
@@ -137,10 +141,9 @@ class DICOMFS(fuse.Fuse):
137
141
st .st_nlink = 1
138
142
return st
139
143
return - errno .ENOENT
140
-
144
+
141
145
def open (self , path , flags ):
142
- print 'open'
143
- print path
146
+ logger .debug ('open %s' % (path ,))
144
147
matched_path = self .match_path (path )
145
148
if matched_path is None :
146
149
return - errno .ENOENT
@@ -157,34 +160,56 @@ class DICOMFS(fuse.Fuse):
157
160
158
161
# not done
159
162
def read (self , path , size , offset , fh ):
160
- print 'read'
161
- print path
162
- print size
163
- print offset
164
- print fh
163
+ logger . debug ( 'read' )
164
+ logger . debug ( path )
165
+ logger . debug ( size )
166
+ logger . debug ( offset )
167
+ logger . debug ( fh )
165
168
return self .fhs [fh .fno ][offset :offset + size ]
166
169
167
170
def release (self , path , flags , fh ):
168
- print 'release'
169
- print path
170
- print fh
171
+ logger . debug ( 'release' )
172
+ logger . debug ( path )
173
+ logger . debug ( fh )
171
174
del self .fhs [fh .fno ]
172
175
return
173
-
174
- progname = os .path .basename (sys .argv [0 ])
175
- if len (sys .argv ) != 3 :
176
- sys .stderr .write ('usage: %s <directory containing DICOMs> <mount point>\n ' % progname )
177
- sys .exit (1 )
178
-
179
- fs = DICOMFS (dash_s_do = 'setsingle' )
180
- fs .parse (['-f' , '-s' , sys .argv [2 ]])
181
- fs .dicom_path = sys .argv [1 ].decode (encoding )
182
- try :
183
- fs .main ()
184
- except fuse .FuseError :
185
- # fuse prints the error message
186
- sys .exit (1 )
187
-
188
- sys .exit (0 )
176
+
177
+ def get_opt_parser ():
178
+ # use module docstring for help output
179
+ p = OptionParser (
180
+ usage = "%s [OPTIONS] <DIRECTORY CONTAINING DICOMSs> <mount point>"
181
+ % os .path .basename (sys .argv [0 ]),
182
+ version = "%prog " + nib .__version__ )
183
+
184
+ p .add_options ([
185
+ Option ("-v" , "--verbose" , action = "count" ,
186
+ dest = "verbose" , default = 0 ,
187
+ help = "make noise. Could be specified multiple times" ),
188
+ ])
189
+
190
+ return p
191
+
192
+ if __name__ == '__main__' :
193
+ parser = get_opt_parser ()
194
+ (opts , files ) = parser .parse_args ()
195
+
196
+ if opts .verbose :
197
+ logger .addHandler (logging .StreamHandler (sys .stdout ))
198
+ logger .setLevel (opts .verbose > 1 and logging .DEBUG or logging .INFO )
199
+
200
+ if len (files ) != 2 :
201
+ sys .stderr .write ("Please provide two arguments:\n %s\n " % parser .usage )
202
+ sys .exit (1 )
203
+
204
+ fs = DICOMFS (dash_s_do = 'setsingle' )
205
+ fs .parse (['-f' , '-s' , files [1 ]])
206
+ fs .dicom_path = files [0 ].decode (encoding )
207
+ try :
208
+ fs .main ()
209
+ except fuse .FuseError :
210
+ # fuse prints the error message
211
+ sys .exit (1 )
212
+
213
+ sys .exit (0 )
189
214
190
215
# eof
0 commit comments