Changeset 2449 for trunk/GSASII.py


Ignore:
Timestamp:
Aug 24, 2016 9:20:07 PM (7 years ago)
Author:
toby
Message:

Fix CIF exports; make sure exporters are imported only once (on Mac)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r2431 r2449  
    20742074
    20752075        # find all the exporter files
    2076         pathlist = sys.path
    2077         filelist = []
    2078         for path in pathlist:
    2079             for filename in glob.iglob(os.path.join(path,"G2export*.py")):
    2080                 filelist.append(filename)   
    2081         filelist = sorted(list(set(filelist))) # remove duplicates
    2082         self.exporterlist = []
    2083         # go through the routines and import them, saving objects that
    2084         # have export routines (method Exporter)
    2085         for filename in filelist:
    2086             path,rootname = os.path.split(filename)
    2087             pkg = os.path.splitext(rootname)[0]
    2088             try:
    2089                 fp = None
    2090                 fp, fppath,desc = imp.find_module(pkg,[path,])
    2091                 pkg = imp.load_module(pkg,fp,fppath,desc)
    2092                 for clss in inspect.getmembers(pkg): # find classes defined in package
    2093                     if clss[0].startswith('_'): continue
    2094                     if inspect.isclass(clss[1]):
    2095                         # check if we have the required methods
    2096                         for m in 'Exporter','loadParmDict':
    2097                             if not hasattr(clss[1],m): break
    2098                             if not callable(getattr(clss[1],m)): break
    2099                         else:
    2100                             exporter = clss[1](self) # create an export instance
    2101                             self.exporterlist.append(exporter)
    2102             except AttributeError:
    2103                 print 'Import_'+errprefix+': Attribute Error'+str(filename)
    2104                 pass
    2105             except ImportError:
    2106                 print 'Import_'+errprefix+': Error importing file'+str(filename)
    2107                 pass
    2108             if fp: fp.close()
     2076        if not self.exporterlist: # this only needs to be done once
     2077            pathlist = sys.path
     2078            filelist = []
     2079            for path in pathlist:
     2080                for filename in glob.iglob(os.path.join(path,"G2export*.py")):
     2081                    filelist.append(filename)   
     2082            filelist = sorted(list(set(filelist))) # remove duplicates
     2083            # go through the routines and import them, saving objects that
     2084            # have export routines (method Exporter)
     2085            for filename in filelist:
     2086                path,rootname = os.path.split(filename)
     2087                pkg = os.path.splitext(rootname)[0]
     2088                try:
     2089                    fp = None
     2090                    fp, fppath,desc = imp.find_module(pkg,[path,])
     2091                    pkg = imp.load_module(pkg,fp,fppath,desc)
     2092                    for clss in inspect.getmembers(pkg): # find classes defined in package
     2093                        if clss[0].startswith('_'): continue
     2094                        if inspect.isclass(clss[1]):
     2095                            # check if we have the required methods
     2096                            for m in 'Exporter','loadParmDict':
     2097                                if not hasattr(clss[1],m): break
     2098                                if not callable(getattr(clss[1],m)): break
     2099                            else:
     2100                                exporter = clss[1](self) # create an export instance
     2101                                self.exporterlist.append(exporter)
     2102                except AttributeError:
     2103                    print 'Import_'+errprefix+': Attribute Error'+str(filename)
     2104                    pass
     2105                except ImportError:
     2106                    print 'Import_'+errprefix+': Error importing file'+str(filename)
     2107                    pass
     2108                if fp: fp.close()
    21092109        # Add submenu item(s) for each Exporter by its self-declared type (can be more than one)
    21102110        for obj in self.exporterlist:
     
    23142314    def __init__(self, parent):
    23152315        self.ExportLookup = {}
     2316        self.exporterlist = []
    23162317        self._init_ctrls(parent)
    23172318        self.Image = wx.Image(
Note: See TracChangeset for help on using the changeset viewer.