Changeset daa56d0 in sasview for DataLoader
- Timestamp:
- Sep 3, 2008 11:47:12 AM (16 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- d831626
- Parents:
- e390933
- Location:
- DataLoader
- Files:
-
- 3 added
- 3 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
DataLoader/loader.py
r579ba85 rdaa56d0 1 # This program is public domain2 1 """ 3 @organization: Module loader contains class Loader which uses 4 some readers to return values contained in a file readed. 5 @ author : Paul Kienzler 6 @modifiied by gervaise alina 2 File handler to support different file extensions. 3 Uses reflectometry's registry utility. 7 4 """ 8 import imp,os,sys 5 6 """ 7 This software was developed by the University of Tennessee as part of the 8 Distributed Data Analysis of Neutron Scattering Experiments (DANSE) 9 project funded by the US National Science Foundation. 10 11 See the license text in license.txt 12 13 copyright 2008, University of Tennessee 14 """ 15 16 from data_util.registry import ExtensionRegistry 17 import os 18 import sys 9 19 import logging 10 import os.path 11 logging.basicConfig(level=logging.ERROR, 12 format='%(asctime)s %(levelname)s %(message)s', 13 filename='test_log.txt', 14 filemode='w') 20 import imp 21 import time 15 22 16 def _findReaders(dir): 17 # List of plugin objects 18 plugins = [] 19 # Go through files in plug-in directory 20 try: 23 class Registry(ExtensionRegistry): 24 """ 25 Registry class for file format extensions. 26 Readers and writers are supported. 27 """ 28 29 def __init__(self): 30 super(Registry, self).__init__() 21 31 22 list = os.listdir(dir) 23 for item in list: 32 ## Writers 33 self.writers = {} 34 35 ## Creation time, for testing 36 self._created = time.time() 37 38 # Find internal readers 39 try: 40 cwd = os.path.split(__file__)[0] 41 except: 42 cwd = os.getcwd() 43 logging.error("Registry: could not find the installed reader's directory\n %s" % sys.exc_value) 24 44 25 toks = os.path.splitext(os.path.basename(item)) 26 if toks[1]=='.py' and not toks[0]=='__init__': 45 dir = os.path.join(cwd, 'readers') 46 n = self.find_plugins(dir) 47 logging.info("Loader found %i readers" % n) 48 49 def find_plugins(self, dir): 50 """ 51 Find readers in a given directory 52 53 @param dir: directory to search into 54 @return: number of readers found 55 """ 56 readers_found = 0 57 for item in os.listdir(dir): 58 full_path = os.path.join(dir, item) 59 if os.path.isfile(full_path) and item.endswith('.py'): 60 toks = os.path.splitext(os.path.basename(item)) 27 61 name = toks[0] 28 62 path = [os.path.abspath(dir)] … … 33 67 if hasattr(module, "Reader"): 34 68 try: 35 plugins.append(module.Reader()) 69 # Find supported extensions 70 loader = module.Reader() 71 for ext in loader.ext: 72 if ext not in self.loaders: 73 self.loaders[ext] = [] 74 self.loaders[ext].insert(0,loader.read) 75 readers_found += 1 76 77 # Check whether writing is supported 78 if hasattr(loader, 'write'): 79 for ext in loader.ext: 80 if ext not in self.writers: 81 self.writers[ext] = [] 82 self.writers[ext].insert(0,loader.write) 36 83 except: 37 logging.error(" Error accessing Reader in %s\n %s" % (name, sys.exc_value))84 logging.error("Loader: Error accessing Reader in %s\n %s" % (name, sys.exc_value)) 38 85 except : 39 logging.error(" Error importing %s\n %s" % (name, sys.exc_value))86 logging.error("Loader: Error importing %s\n %s" % (name, sys.exc_value)) 40 87 finally: 41 88 if not file==None: 42 89 file.close() 43 except: 44 # Should raise and catch at a higher level and display error on status bar 45 pass 46 return plugins 90 return readers_found 47 91 92 def lookup_writers(self, path): 93 """ 94 Return the loader associated with the file type of path. 95 96 Raises ValueError if file type is not known. 97 """ 98 # Find matching extensions 99 extlist = [ext for ext in self.extensions() if path.endswith(ext)] 100 # Sort matching extensions by decreasing order of length 101 extlist.sort(lambda a,b: len(a)<len(b)) 102 # Combine loaders for matching extensions into one big list 103 writers = [] 104 for L in [self.writers[ext] for ext in extlist]: 105 writers.extend(L) 106 # Remove duplicates if they exist 107 if len(writers) != len(set(writers)): 108 result = [] 109 for L in writers: 110 if L not in result: result.append(L) 111 writers = L 112 # Raise an error if there are no matching extensions 113 if len(writers) == 0: 114 raise ValueError, "Unknown file type for "+path 115 # All done 116 return writers 48 117 118 def save(self, path, data, format=None): 119 """ 120 Call the writer for the file type of path. 121 122 Raises ValueError if no writer is available. 123 Raises KeyError if format is not available. 124 May raise a writer-defined exception if writer fails. 125 """ 126 if format is None: 127 writers = self.lookup_writers(path) 128 else: 129 writers = self.writers[format] 130 for fn in writers: 131 try: 132 return fn(path, data) 133 except: 134 pass # give other loaders a chance to succeed 135 # If we get here it is because all loaders failed 136 raise # reraises last exception 137 138 49 139 class Loader(object): 50 140 """ 51 Loader class extracts data from a given file. 52 This provides routines for opening files based on extension, 53 and readers built-in file extensions. 54 It uses functionalities for class Load 55 @note: For loader to operate properly each readers used should 56 contain a class name "Reader" that contains a field call ext. 57 Can be used as follow: 58 L=Loader() 59 self.assertEqual(l.__contains__('.tiff'),True) 60 #Recieves data 61 data=L.load(path) 141 Utility class to use the Registry as a singleton. 62 142 """ 63 # Store instance of class Load64 __ load = None143 ## Registry instance 144 __registry = Registry() 65 145 146 def load(self, file, format=None): 147 """ 148 Load a file 149 150 @param file: file name (path) 151 @param format: specified format to use (optional) 152 @return: DataInfo object 153 """ 154 return self.__registry.load(file, format) 66 155 67 class Load(object): 156 def save(self, file, data, format): 157 """ 158 Save a DataInfo object to file 159 @param file: file name (path) 160 @param data: DataInfo object 161 @param format: format to write the data in 162 """ 163 return self.__registry.save(file, data, format) 164 165 def _get_registry_creation_time(self): 166 """ 167 Internal method used to test the uniqueness 168 of the registry object 169 """ 170 return self.__registry._created 68 171 69 def __init__(self): 70 #Dictionary containing readers and extension as keys 71 self.readers = {} 72 #Load all readers in plugins 73 74 #TODO: misuse of __setitem__ 75 #TODO: this bad call is done twice: here, and in Loader.__init__ 76 #self.__setitem__() 77 78 79 def __setitem__(self,dir=None, ext=None, reader=None): 80 """ 81 __setitem__ sets in a dictionary(self.readers) a given reader 82 with a file extension that it can read. 83 @param ext: extension given of type string 84 @param reader:instance Reader class 85 @param dir: directory name where plugins readers will be saved 86 @raise : ValueError will be raise if a "plugins" directory is not found 87 and the user didn't add a reader as parameter or if the user didn't 88 add a reader as a parameter and plugins directory doesn't contain 89 plugin reader. 90 if an extension is not specified and a reader does not contain a field 91 ext , a warning is printed in test_log.txt file. 92 @note: when called without parameters __setitem__ will try to load 93 readers inside a "readers" directory 94 if call with a directory name will try find readers 95 from that directory "dir" 96 """ 97 if dir==None: 98 dir = 'readers' 99 100 #TODO Probably name the new path something else... 101 102 #TODO: The whole concept of plug-ins was missed here. 103 # First we want to always load the reader we have (in 'readers') 104 # and THEN we want to add any additional readers found in 105 # a pre-defined plug-in path (that path should be a variable). 106 dir=os.path.join(os.path.dirname(os.path.abspath(__file__)),dir) 107 108 if (reader==None and ext==None) or dir:#1st load 109 plugReader=None 110 if os.path.isdir(dir): 111 plugReader=_findReaders(dir)# import all module in plugins 112 113 #TODO The following just doesn't make sense 114 # ../C:\Python25\lib... ???? 115 if os.path.isdir('../'+dir): 116 plugReader=_findReaders('../'+dir) 117 118 119 if plugReader !=None: 120 list=[] 121 for preader in plugReader:# for each modules takes list of extensions 122 #TODO should use hasattr rather than a try/except block 123 try: 124 list=preader.ext 125 except AttributeError,msg: 126 logging.warning(msg) 127 pass 128 #raise AttributeError," %s instance has no attribute 'ext'"\ 129 #%(preader.__class__) 130 if list !=[]: 131 for item in list: 132 ext=item 133 if ext not in self.readers:#assign extension with its reader 134 self.readers[ext] = [] 135 self.readers[ext].insert(0,preader) 136 #Reader and extension are given 137 elif reader !=None and ext !=None: 138 if ext not in self.readers: 139 self.readers[ext] = [] 140 self.readers[ext].insert(0,reader) 141 elif reader!=None: 142 #only reader is receive try to find a field ext 143 try: 144 list=preader.ext 145 except: 146 raise AttributeError," Reader instance has no attribute 'ext'" 147 for item in list: 148 149 ext=item 150 if ext not in self.readers:#assign extension with its reader 151 self.readers[ext] = [] 152 self.readers[ext].insert(0,reader) 153 154 else: 155 raise ValueError,"missing reader" 156 157 158 def __getitem__(self, ext): 159 """ 160 __getitem__ get a list of readers that can read a file with that extension 161 @param ext: file extension 162 @return self.readers[ext]:list of readers that can read a file 163 with that extension 164 """ 165 return self.readers[ext] 166 167 def __contains__(self, ext): 168 """ 169 @param ext:file extension 170 @return: True or False whether there is a reader file with that extension 171 """ 172 return ext in self.readers 172 def find_plugins(self, dir): 173 """ 174 Find plugins in a given directory 175 @param dir: directory to look into to find new readers/writers 176 """ 177 return self.__registry.find_plugins(dir) 178 179 180 if __name__ == "__main__": 181 logging.basicConfig(level=logging.INFO, 182 format='%(asctime)s %(levelname)s %(message)s', 183 filename='loader.log', 184 filemode='w') 185 l = Loader() 186 data = l.load('test/cansas1d.xml') 187 l.save('test_file.xml', data) 173 188 174 189 175 def formats(self, name=True, ext=False): 176 """ 177 Return a list of the registered formats. If name=True then 178 named formats are returned. If ext=True then extensions 179 are returned. 180 """ 181 names = [a for a in self.readers.keys() if not a.startswith('.')] 182 exts = [a for a in self.readers.keys() if a.startswith('.')] 183 names.sort() 184 exts.sort() 185 ret = [] 186 if name: ret += names 187 if ext: ret += exts 188 return ret 189 190 def lookup(self, path): 191 """ 192 Return the loader associated with the file type of path. 193 """ 194 file = os.path.basename(path) 195 idx = file.find('.') 196 ext = file[idx:] if idx >= 0 else '' 197 198 try: 199 return self.readers[ext] 200 except: 201 logging.warning("Unknown file type '%s'"%ext) 202 raise RuntimeError, "Unknown file type '%s'"%ext 203 204 205 206 def load(self, path, format=None): 207 """ 208 Call reader for the file type of path. 209 @param path: path to file to load 210 @param format: extension of file to load 211 @return Data if sucessful 212 or None is not reader was able to read that file 213 Raises ValueError if no reader is available. 214 May raise a loader-defined exception if loader fails. 215 """ 216 try: 217 os.path.isfile( os.path.abspath(path)) 218 except: 219 raise ValueError," file path unknown" 220 221 if format is None: 222 try: 223 readers = self.lookup(path) 224 except : 225 raise 226 else: 227 readers = self.readers[format] 228 if readers!=None: 229 for fn in readers: 230 try: 231 value=fn.read(path) 232 return value 233 except: 234 logging.error("Load Error: %s"% (sys.exc_value)) 235 else: 236 raise ValueError,"Loader contains no reader" 237 238 239 def __init__(self): 240 """ Create singleton instance """ 241 # Check whether we already have an instance 242 if Loader.__load is None: 243 # Create and remember instance 244 Loader.__load = Loader.Load() 245 Loader.__load.__setitem__() 246 # Store instance reference as the only member in the handle 247 self.__dict__['_Loader__load'] = Loader.__load 248 249 def __getattr__(self, attr): 250 """ Delegate access to implementation """ 251 return getattr(self.__load, attr) 252 253 def __setattr__(self, attr, value): 254 """ Delegate access to implementation """ 255 return setattr(self.__load, attr, value) 190 -
DataLoader/readers/ascii_reader.py
r99d1af6 rdaa56d0 13 13 from DataLoader.data_info import Data1D 14 14 15 # Check whether we have a converter available 15 16 has_converter = True 16 17 try: … … 116 117 # Sanity check 117 118 if has_error == True and not len(y) == len(dy): 118 raise ValueError, "ascii_reader: y and dy have different length"119 raise RuntimeError, "ascii_reader: y and dy have different length" 119 120 120 121 # If the data length is zero, consider this as 121 122 # though we were not able to read the file. 122 123 if len(x)==0: 123 raise ValueError, "ascii_reader: could not load file"124 raise RuntimeError, "ascii_reader: could not load file" 124 125 125 126 output.x = x -
DataLoader/readers/tiff_reader.py
r8bd8ea4 rdaa56d0 1 """ 2 Image reader. Untested. 3 """ 1 4 2 import math,logging 5 """ 6 This software was developed by the University of Tennessee as part of the 7 Distributed Data Analysis of Neutron Scattering Experiments (DANSE) 8 project funded by the US National Science Foundation. 3 9 10 See the license text in license.txt 11 12 copyright 2008, University of Tennessee 13 """ 14 #TODO: load and check data and orientation of the image (needs rendering) 15 16 import math, logging, os 17 import numpy 18 from DataLoader.data_info import Data2D 4 19 5 20 class Reader: … … 8 23 """ 9 24 ## File type 10 type = [] 25 type = ["TIF files (*.tif)|*.tif", 26 "JPG files (*.jpg)|*.jpg", 27 "JPEG files (*.jpeg)|*.jpeg", 28 "PNG files (*.png)|*.png", 29 "TIFF files (*.tiff)|*.tiff", 30 "BMP files (*.bmp)|*.bmp", 31 "GIF files (*.gif)|*.gif", 32 ] 11 33 ## Extension 12 ext = [' tif', 'jpg', '.png', 'jpeg', '.tiff', 'gif', 'bmp']34 ext = ['.tif', '.jpg', '.png', '.jpeg', '.tiff', '.gif', '.bmp'] 13 35 14 36 def read(self, filename=None): 15 import Image16 print "in tiff"17 37 """ 18 38 Open and read the data in a file 19 39 @param file: path of the file 20 40 """ 41 try: 42 import Image 43 except: 44 raise RuntimeError, "tiff_reader: could not load file. Missing Image module." 21 45 22 read_it = False 23 for item in self.ext: 24 if filename.lower().find(item)>=0: 25 read_it = True 46 # Instantiate data object 47 output = Data2D() 48 output.filename = os.path.basename(filename) 49 50 # Read in the image 51 try: 52 im = Image.open(filename) 53 except : 54 raise RuntimeError,"cannot open %s"%(filename) 55 data = im.getdata() 56 57 # Initiazed the output data object 58 output.data = numpy.zeros([im.size[0],im.size[1]]) 59 60 # Initialize 61 x_vals = [] 62 y_vals = [] 63 64 # x and y vectors 65 for i_x in range(im.size[0]): 66 x_vals.append(i_x) 67 68 itot = 0 69 for i_y in range(im.size[1]): 70 y_vals.append(i_y) 71 72 for val in data: 73 try: 74 value = float(val) 75 except: 76 logging.error("tiff_reader: had to skip a non-float point") 77 continue 78 79 # Get bin number 80 if math.fmod(itot, im.size[0])==0: 81 i_x = 0 82 i_y += 1 83 else: 84 i_x += 1 26 85 27 if read_it: 28 import Image 29 import pylab 30 import copy 31 import numpy 86 output.data[im.size[1]-1-i_y][i_x] = value 32 87 33 wavelength, distance, center_x, center_y, pixel = 10.0, 11.0, 65, 65, 1.0 34 35 36 37 # Initialize 38 x_vals = [] 39 y_vals = [] 40 ymin = None 41 ymax = None 42 xmin = None 43 xmax = None 44 Z = None 88 itot += 1 89 90 output.xbins = im.size[0] 91 output.ybins = im.size[1] 92 output.x_bins = x_vals 93 output.y_bins = y_vals 94 output.xmin = 0 95 output.xmax = im.size[0]-1 96 output.ymin = 0 97 output.ymax = im.size[0]-1 45 98 46 try: 47 im = Image.open(filename) 48 except : 49 raise RuntimeError,"cannot open %s"%(filename) 50 # Detector size should be 128x128, the file is 190x190 51 print "-> Image size:", im.size, im.format, im.mode 52 data = im.getdata() 53 x = numpy.zeros(im.size[0]) 54 y = numpy.zeros(im.size[1]) 55 X, Y = pylab.meshgrid(x, y) 56 Z = copy.deepcopy(X) 57 itot = 0 58 i_x = 0 59 i_y = 0 60 61 # Qx and Qy vectors 62 for i_x in range(im.size[0]): 63 theta = (i_x-center_x+1)*pixel / distance / 100.0 64 qx = 4.0*math.pi/wavelength * math.sin(theta/2.0) 65 x_vals.append(qx) 66 if xmin==None or qx<xmin: 67 xmin = qx 68 if xmax==None or qx>xmax: 69 xmax = qx 70 71 ymin = None 72 ymax = None 73 for i_y in range(im.size[1]): 74 theta = (i_y-center_y+1)*pixel / distance / 100.0 75 qy = 4.0*math.pi/wavelength * math.sin(theta/2.0) 76 y_vals.append(qy) 77 if ymin==None or qy<ymin: 78 ymin = qy 79 if ymax==None or qy>ymax: 80 ymax = qy 81 82 for val in data: 83 84 try: 85 value = float(val) 86 except: 87 continue 88 89 # Get bin number 90 if math.fmod(itot, im.size[0])==0: 91 i_x = 0 92 i_y += 1 93 else: 94 i_x += 1 95 96 Z[im.size[1]-1-i_y][i_x] = value 97 98 itot += 1 99 from readInfo import ReaderInfo 100 output = ReaderInfo() 101 output.wavelength = wavelength 102 output.xbins = im.size[0] 103 output.ybins = im.size[1] 104 output.center_x = center_x 105 output.center_y = center_y 106 output.distance = distance 107 output.x_vals = x_vals 108 output.y_vals = y_vals 109 output.xmin = xmin 110 output.xmax = xmax 111 output.ymin = ymin 112 output.ymax = ymax 113 output.image = Z 114 output.pixel_size = pixel 115 output.x = x_vals 116 output.y = y_vals 117 output.type ="2D" 118 logging.info("tiff_reader reading %s"%(filename)) 119 120 return output 99 return output 121 100 122 return None123 101 124 102 -
DataLoader/test/error_conditions.py
rf9474b5 rdaa56d0 9 9 """ 10 10 self.s.load('blah.mat') on an unknown type 11 should raise a runtime exception11 should raise a ValueError exception (thrown by data_util.registry) 12 12 """ 13 self.assertRaises( RuntimeError, self.s.load, 'angles_flat.mat')13 self.assertRaises(ValueError, self.s.load, 'angles_flat.mat') 14 14 15 15 def test_corrupt(self): -
DataLoader/test/sequence_tests.py
rb99ac227 rdaa56d0 29 29 single_igor() 30 30 single_abs() 31 print "Test passed" -
DataLoader/test/testLoad.py
rb99ac227 rdaa56d0 16 16 import DataLoader 17 17 from DataLoader.loader import Loader 18 18 19 # Check whether we should test image loading on this system 20 HAS_IMAGE = False 21 try: 22 import Image 23 HAS_IMAGE = True 24 except: 25 print "IMAGE TESTS WILL NOT BE PERFORMED: MISSING PIL MODULE" 26 19 27 import os.path 20 28 … … 24 32 self.loader = Loader() 25 33 26 27 34 def test_singleton(self): 28 35 """ 29 36 Testing whether Loader is truly a singleton 30 37 """ 31 # Set a new data member32 self.loader._test_data_member = 1.4533 34 38 # Create a 'new' Loader 35 39 b = Loader() 36 37 # Test that the new loader has the new data member 38 self.assertEqual(b._test_data_member, self.loader._test_data_member) 40 self.assertEqual(self.loader._get_registry_creation_time(), 41 b._get_registry_creation_time()) 39 42 40 43 class testLoader(unittest.TestCase): … … 53 56 def testLoad0(self): 54 57 """test reading empty file""" 55 self.assert Equal(self.L.load('empty.txt'),None)58 self.assertRaises(RuntimeError, self.L.load, 'empty.txt') 56 59 57 60 def testLoad1(self): … … 87 90 self.assertEqual(output.dy[i],dy[i]) 88 91 92 def testLoad2_uppercase(self): 93 """Testing loading a txt file of 3 columns""" 94 output= self.L.load('test_3_columns.TXT') 95 x=[0,0.204082,0.408163,0.612245,0.816327,1.02041,1.22449] 96 y=[2.83954,3.44938,5.82026,5.27591,5.2781,5.22531,7.47487] 97 dx=[] 98 dy=[0.6,0.676531,0.753061,0.829592,0.906122,0.982653,1.05918] 99 self.assertEqual(len(output.x),len(x)) 100 self.assertEqual(len(output.y),len(y)) 101 self.assertEqual(len(output.dy),len(dy)) 102 for i in range(len(x)): 103 self.assertEqual(output.x[i],x[i]) 104 self.assertEqual(output.y[i],y[i]) 105 self.assertEqual(output.dy[i],dy[i]) 106 89 107 90 108 def testload3(self): … … 92 110 #tested good file.asc 93 111 output= self.L.load('MAR07232_rest.ASC') 112 self.assertEqual(output.xmin,-0.018558945804750416) 113 self.assertEqual(output.xmax, 0.016234058202440633,) 114 self.assertEqual(output.ymin,-0.01684257151702391) 115 self.assertEqual(output.ymax,0.017950440578015116) 116 117 #tested corrupted file.asc 118 try:self.L.load('AR07232_rest.ASC') 119 except ValueError,msg: 120 #logging.log(10,str(msg)) 121 logging.error(str(msg)) 122 123 def testload3_lowercase(self): 124 """ Testing loading Igor data""" 125 #tested good file.asc 126 output= self.L.load('MAR07232_rest.asc') 94 127 self.assertEqual(output.xmin,-0.018558945804750416) 95 128 self.assertEqual(output.xmax, 0.016234058202440633,) … … 118 151 def testload5(self): 119 152 """ Testing loading image file""" 120 output=self.L.load('angles_flat.png') 121 self.assertEqual(output.xbins ,200) 153 if HAS_IMAGE: 154 output=self.L.load('angles_flat.png') 155 self.assertEqual(output.xbins ,200) 122 156 123 157 def testload6(self): 124 158 """test file with unknown extension""" 125 try:self.L.load('hello.missing') 126 except RuntimeError,msg: 127 self.assertEqual( str(msg),"Unknown file type '.missing'") 128 else: raise ValueError,"No error raised for missing extension" 159 self.assertRaises(ValueError, self.L.load, 'hello.missing') 129 160 130 #self.L.lookup('hello.missing') 131 try: self.L.lookup('hello.missing') 132 except RuntimeError,msg: 133 self.assertEqual( str(msg),"Unknown file type '.missing'") 134 else: raise ValueError,"No error raised for missing extension" 161 # Lookup is not supported as a public method 162 #self.assertRaises(ValueError, self.L.lookup, 'hello.missing') 163 135 164 136 165 def testload7(self): 137 166 """ test file containing an image but as extension .txt""" 138 self.assert Equal(self.L.load('angles_flat.txt'),None)167 self.assertRaises(RuntimeError, self.L.load, 'angles_flat.txt') 139 168 140 169 if __name__ == '__main__': -
DataLoader/test/testplugings.py
r4c00964 rdaa56d0 4 4 5 5 import unittest 6 import math 7 import DataLoader 8 from DataLoader.loader import Loader 9 from DataLoader.readers import TXT3_Reader,TXT2_Reader 10 from DataLoader.readers import IgorReader,danse_reader,tiff_reader 11 import os.path 12 import os 13 import logging 14 logging.basicConfig(level=logging.DEBUG, 15 format='%(asctime)s %(levelname)s %(message)s', 16 filename='test_log.txt', 17 filemode='w') 6 from DataLoader.loader import Loader, Registry 18 7 class testLoader(unittest.TestCase): 19 8 20 try:L=Loader() 21 except AttributeError,msg: 22 logging.warning(msg) 9 def setUp(self): 10 self.L=Loader() 11 self.L.find_plugins('../plugins') 12 23 13 def testplugin(self): 24 """ test loading with readers""" 14 """ 15 test loading with a test reader only 16 found in the plugins directory 17 """ 18 output = self.L.load('test_data.test') 19 self.assertEqual(output.x[0], 1234.) 25 20 26 self.assertEqual(self.L.__contains__('.tiff'),True) 27 self.assertEqual(self.L.__contains__('.png'),True) 28 self.assertEqual(self.L.__contains__('.txt'),True) 29 #tested corrupted file.asc 30 try:self.L.load('MAR07232_rest.ASC') 31 except AttributeError,msg: 32 #logging.log(10,str(msg)) 33 logging.warning(str(msg)) 34 def testplugin1(self): 35 """ test loading with plugging""" 36 self.L.__setitem__(dir='plugins') 37 read3=IgorReader.Reader() 38 self.L.__setitem__('plugins','.ASC',read3) 39 self.assertEqual(self.L.__contains__('.ASC'),True) 40 #Testing loading a txt file of 2 columns, the only reader should be read1 41 output=self.L.load('test_2_columns.txt') 42 x=[2.83954,0.204082,0.408163,0.612245,0.816327,1.02041,1.22449,1.42857,1.63265] 43 y=[0.6,3.44938, 5.82026,5.27591,5.2781,5.22531,7.47487,7.85852,10.2278] 44 dx=[] 45 dy=[] 46 self.assertEqual(len(output.x),len(x)) 47 self.assertEqual(len(output.y),len(y)) 21 class testRegistry(unittest.TestCase): 22 23 def setUp(self): 24 self.L=Registry() 25 self.L.find_plugins('../plugins') 26 27 def testplugin(self): 28 """ 29 test loading with a test reader only 30 found in the plugins directory 31 """ 32 output = self.L.load('test_data.test') 33 self.assertEqual(output.x[0], 1234.) 34 self.assertTrue(self.L.loaders.has_key('.test')) 48 35 49 for i in range(len(x)):50 self.assertEqual(output.x[i],x[i])51 self.assertEqual(output.y[i],y[i])52 53 # How about actually executing the tests...54 36 if __name__ == '__main__': 55 37 unittest.main()
Note: See TracChangeset
for help on using the changeset viewer.