def _volumes_default ( self ): result = [] # Check for and add the 'application' image library: app_library = join( dirname( abspath( sys.argv[0] ) ), 'library' ) if isdir( app_library ): result.extend( self._add_path( app_library ) ) # Get all volumes in the standard Traits UI image library directory: result.extend( self._add_path( join( get_resource_path( 1 ), 'library' ) ) ) # Check to see if there is an environment variable specifying a list # of paths containing image libraries: paths = environ.get( 'TRAITS_IMAGES' ) if paths is not None: # Determine the correct OS path separator to use: separator = ';' if system() != 'Windows': separator = ':' # Add all image volumes found in each path in the environment # variable: for path in paths.split( separator ): result.extend( self._add_path( path ) ) # Return the list of default volumes found: return result
def add_path ( self, volume_name, path = None ): """ Adds the directory specified by **path** as a *virtual* volume called **volume_name**. All image files contained within path define the contents of the volume. If **path** is None, the *images* contained in the 'images' subdirectory of the same directory as the caller are is used as the path for the *virtual* volume.. """ # Make sure we don't already have a volume with that name: if volume_name in self.catalog: raise TraitError( ("The volume name '%s' is already in the image " "library.") % volume_name ) # If no path specified, derive one from the caller's source code # location: if path is None: path = join( get_resource_path( 2 ), 'images' ) # Make sure that the specified path is a directory: if not isdir( path ): raise TraitError( "The image volume path '%s' does not exist." % path ) # Create the ImageVolume to describe the path's contents: image_volume_path = join( path, 'image_volume.py' ) if exists( image_volume_path ): volume = get_python_value( read_file( image_volume_path ), 'volume' ) else: volume = ImageVolume() # Set up the rest of the volume information: volume.set( name = volume_name, path = path, is_zip_file = False ) # Try to bring the volume information up to date if necessary: if volume.time_stamp < time_stamp_for( stat( path )[ ST_MTIME ] ): # Note that the save could fail if the volume is read-only, but # that's OK, because we're only trying to do the save in case # a developer had added or deleted some image files, which would # require write access to the volume: volume.save() # Add the new volume to the library: self.catalog[ volume_name ] = volume self.volumes.append( volume )
def add_volume ( self, file_name = None ): """ If **file_name** is a file, it adds an image volume specified by **file_name** to the image library. If **file_name** is a directory, it adds all image libraries contained in the directory to the image library. If **file_name** is omitted, all image libraries located in the *images* directory contained in the same directory as the caller are added. """ # If no file name was specified, derive a path from the caller's # source code location: if file_name is None: file_name = join( get_resource_path( 2 ), 'images' ) if isfile( file_name ): # Load an image volume from the specified file: volume = self._add_volume( file_name ) if volume is None: raise TraitError( "'%s' is not a valid image volume." % file_name ) if volume.name in self.catalog: self._duplicate_volume( volume.name ) self.catalog[ volume.name ] = volume self.volumes.append( volume ) elif isdir( file_name ): # Load all image volumes from the specified path: catalog = self.catalog volumes = self._add_path( file_name ) for volume in volumes: if volume.name in catalog: self._duplicate_volume( volume.name ) catalog[ volume.name ] = volume self.volumes.extend( volumes ) else: # Handle an unrecognized argument: raise TraitError( "The add method argument must be None or a file " "or directory path, but '%s' was specified." % file_name )