Ignore:
Timestamp:
Apr 5, 2017 3:31:36 AM (7 years ago)
Author:
krzywon
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.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
cfc6f3c7
Parents:
b9b612a
git-author:
Jeff Krzywon <krzywon@…> (04/05/17 03:31:36)
git-committer:
krzywon <krzywon@…> (04/05/17 03:31:36)
Message:

Beginning implementation of exception handling within data loader.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sascalc/data_util/registry.py

    rb699768 r270c882b  
    77""" 
    88 
    9 import os.path 
     9from sas.sascalc.dataloader.loader_exceptions import NoKnownLoaderException 
     10 
    1011 
    1112class ExtensionRegistry(object): 
     
    6162    def __init__(self, **kw): 
    6263        self.loaders = {} 
     64 
    6365    def __setitem__(self, ext, loader): 
    6466        if ext not in self.loaders: 
    6567            self.loaders[ext] = [] 
    6668        self.loaders[ext].insert(0,loader) 
     69 
    6770    def __getitem__(self, ext): 
    6871        return self.loaders[ext] 
     72 
    6973    def __contains__(self, ext): 
    7074        return ext in self.loaders 
     75 
    7176    def formats(self): 
    7277        """ 
     
    7681        names.sort() 
    7782        return names 
     83 
    7884    def extensions(self): 
    7985        """ 
     
    8389        exts.sort() 
    8490        return exts 
     91 
    8592    def lookup(self, path): 
    8693        """ 
     
    105112        # Raise an error if there are no matching extensions 
    106113        if len(loaders) == 0: 
    107             raise ValueError, "Unknown file type for "+path 
     114            raise ValueError("Unknown file type for "+path) 
    108115        # All done 
    109116        return loaders 
     117 
    110118    def load(self, path, format=None): 
    111119        """ 
     
    117125        """ 
    118126        if format is None: 
    119             loaders = self.lookup(path) 
     127            try: 
     128                loaders = self.lookup(path) 
     129            except ValueError as e: 
     130                pass 
    120131        else: 
    121             loaders = self.loaders[format] 
     132            try: 
     133                loaders = self.loaders[format] 
     134            except KeyError as e: 
     135                pass 
    122136        for fn in loaders: 
    123137            try: 
    124138                return fn(path) 
    125             except: 
    126                 pass # give other loaders a chance to succeed 
     139            except Exception as e: 
     140                pass  # give other loaders a chance to succeed 
    127141        # If we get here it is because all loaders failed 
    128         raise # reraises last exception 
     142        raise NoKnownLoaderException(e.message)  # raise generic exception 
    129143 
     144 
     145# TODO: Move this to the unit test folder 
    130146def test(): 
    131147    reg = ExtensionRegistry() 
     
    163179    try: reg.load('hello.missing') 
    164180    except ValueError,msg: 
    165         assert str(msg)=="Unknown file type for hello.missing",'Message: <%s>'%(msg) 
     181        assert str(msg)=="Unknown file type for hello.missing",\ 
     182            'Message: <%s>'%(msg) 
    166183    else: raise AssertError,"No error raised for missing extension" 
    167184    assert reg.formats() == ['new_cx'] 
Note: See TracChangeset for help on using the changeset viewer.