# -*- coding: utf-8 -*-
# This software and supporting documentation are distributed by
# Institut Federatif de Recherche 49
# CEA/NeuroSpin, Batiment 145,
# 91191 Gif-sur-Yvette cedex
# France
#
# This software is governed by the CeCILL license version 2 under
# French law and abiding by the rules of distribution of free software.
# You can use, modify and/or redistribute the software under the
# terms of the CeCILL license version 2 as circulated by CEA, CNRS
# and INRIA at the following URL "http://www.cecill.info".
#
# As a counterpart to the access to the source code and rights to copy,
# modify and redistribute granted by the license, users are provided only
# with a limited warranty and the software's author, the holder of the
# economic rights, and the successive licensors have only limited
# liability.
#
# In this respect, the user's attention is drawn to the risks associated
# with loading, using, modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean that it is complicated to manipulate, and that also
# therefore means that it is reserved for developers and experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards their
# requirements in conditions enabling the security of their systems and/or
# data to be ensured and, more generally, to use and operate it in the
# same conditions as regards security.
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL license version 2 and that you accept its terms.
# -*- coding: utf-8 -*-
from brainvisa.processes import *
from brainvisa.data.neuroHierarchy import databases
import os
name = 'Rename denoised_* to nobias_*'
userLevel = 0
def validation():
if not os.path.isdir( '/i2bm' ):
raise ValidationError( 'This process is only valid in CEA-I2BM platforms (SHFJ, NeuroSpin and MirCEN)' )
signature = Signature(
'undo_python_script', WriteDiskItem( 'Any type', 'Python script' ),
)
def initialization( self ):
self.setOptional( 'undo_python_script' )
GOOD_PREFIX = 'nobias_'
BAD_PREFIX = 'denoised_'
def find_denoised( directory ):
for f in os.listdir( directory ):
subdirs = []
df = os.path.join( directory, f )
if os.path.isdir( df ):
subdirs.append( df )
elif f.startswith( BAD_PREFIX ):
yield df
for df in subdirs:
for r in find_denoised( df ):
yield r
def execution( self, context ):
#brainvisa_options = readMinf( os.path.join( os.environ[ 'HOME' ], '.brainvisa', 'options.minf' ) )[0]
#for d in (i[ 'directory' ] for i in brainvisa_options.get( 'databases', {} ).get( 'fso', [] )):
if self.undo_python_script is not None:
undo_python_script = self.undo_python_script.fullPath()
if os.path.exists( undo_python_script ):
r = context.ask( 'File ' + undo_python_script + ' exists. Do you want to overwirte it ?', 'Yes, erase it', 'No, keep it', 'Stop, this process' )
if r == 0:
# Backup Python script
open( undo_python_script + '~', 'w' ).write( open( undo_python_script ).read() )
elif r == 1:
undo_python_script = None
else:
context.write( 'Operation cancelled' )
return
if undo_python_script:
undo_python_script = open( undo_python_script, 'w' )
print >> undo_python_script, 'import os\n\nrename = []'
else:
undo_python_script = None
it = databases.iterDatabases()
it.next() # Skip shared database
for database in it:
rename = []
databaseDirectory = database.directory
if os.path.exists( databaseDirectory ):
for f in find_denoised( databaseDirectory ):
rename.append( os.path.split( f ) )
if rename:
context.write( '' + database.name + ':
' )
if undo_python_script is not None:
print >> undo_python_script, '\n#', database.name
for d,b in rename:
context.write( os.path.join( d, b ) )
src = os.path.join( d, b )
dest = os.path.join( d, GOOD_PREFIX + b[ len( BAD_PREFIX ): ] )
os.rename( src, dest )
if undo_python_script is not None:
print >> undo_python_script, 'rename.append( (', repr( dest ) + ',\n ', repr( src ), ') )'
else:
context.write( '' + database.name + '' )
if undo_python_script is not None:
print >> undo_python_script, '\n\nfor src, dest in rename: os.rename( src, dest )'