Ignore:
Timestamp:
04/19/12 17:50:22 (2 years ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
rebase_source:
0662c7c639b384cab1d557fb332b3f79d9abd26e
Message:

Slight changes to input/output signal evaluation. Now stores full qualified names for signal types.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/orngRegistry.py

    r10581 r10822  
    33 
    44import os, sys, re, glob, stat 
    5 from orngSignalManager import OutputSignal, InputSignal 
     5from orngSignalManager import OutputSignal, InputSignal, resolveSignal 
    66from PyQt4.QtCore import * 
    77from PyQt4.QtGui import * 
     
    166166                sys.path.remove(dirname) 
    167167            widgClass = wmod.__dict__[widgname] 
    168             inputClasses = set(eval(x[1], wmod.__dict__).__name__ for x in eval(meta.inputList)) 
    169             outputClasses = set(y.__name__ for x in eval(meta.outputList) for y in eval(x[1], wmod.__dict__).mro()) 
    170              
     168 
     169            # Evaluate the input/output list (all tuple items are strings) 
     170            inputs = eval(meta.inputList) 
     171            outputs = eval(meta.outputList) 
     172 
     173            inputs = [InputSignal(*input) for input in inputs] 
     174            outputs = [OutputSignal(*output) for output in outputs] 
     175 
     176            # Resolve signal type names into concrete type instances 
     177            inputs = [resolveSignal(input, globals=wmod.__dict__) 
     178                      for input in inputs] 
     179            outputs = [resolveSignal(output, globals=wmod.__dict__) 
     180                      for output in outputs] 
     181 
     182            inputClasses = set([s.type.__name__ for s in inputs]) 
     183            outputClasses = set([klass.__name__ for s in outputs 
     184                                 for klass in s.type.mro()]) 
     185 
     186            # Convert all signal types back into qualified names. 
     187            # This is to prevent any possible import problems when cached 
     188            # descriptions are unpickled (the relevant code using this lists 
     189            # should be able to handle missing types better). 
     190            for s in inputs + outputs: 
     191                s.type = "%s.%s" % (s.type.__module__, s.type.__name__) 
     192 
    171193            widgetInfo = WidgetDescription( 
    172                              name = meta.name, 
     194                             name =meta.name, 
    173195                             time = datetime, 
    174196                             fileName = widgname, 
     
    178200                             inputList = meta.inputList, outputList = meta.outputList, 
    179201                             inputClasses = inputClasses, outputClasses = outputClasses, 
    180                              tags=meta.tags 
     202                             tags=meta.tags, 
     203                             inputs=inputs, 
     204                             outputs=outputs, 
    181205                             ) 
    182      
     206 
    183207            for attr in ["contact", "icon", "priority", "description", "category"]: 
    184208                setattr(widgetInfo, attr, getattr(meta, attr)) 
    185      
     209 
    186210            # build the tooltip 
    187             widgetInfo.inputs = [InputSignal(*signal) for signal in eval(widgetInfo.inputList)] 
    188211            if len(widgetInfo.inputs) == 0: 
    189212                formatedInList = "<b>Inputs:</b><br> &nbsp;&nbsp; None<br>" 
     
    192215                for signal in widgetInfo.inputs: 
    193216                    formatedInList += " &nbsp;&nbsp; - " + signal.name + " (" + signal.type + ")<br>" 
    194      
    195             widgetInfo.outputs = [OutputSignal(*signal) for signal in eval(widgetInfo.outputList)] 
     217 
    196218            if len(widgetInfo.outputs) == 0: 
    197219                formatedOutList = "<b>Outputs:</b><br> &nbsp; &nbsp; None<br>" 
Note: See TracChangeset for help on using the changeset viewer.