Ignore:
Timestamp:
04/19/12 17:45:44 (2 years ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
rebase_source:
2dc43bebcf835cc4b4d2244117d6a8847d3a2044
Message:

Added resolveSignal function.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/orngSignalManager.py

    r10651 r10821  
    55 
    66import sys, os, time 
     7import copy 
    78import logging 
    89import logging.handlers 
     10 
     11import __builtin__ 
    912 
    1013import orange 
     
    2831        self.handler = handler 
    2932 
    30         if type(parameters) == str:  
     33        if type(parameters) == str: 
    3134            parameters = eval(parameters)   # parameters are stored as strings 
    3235        # if we have the old definition of parameters then transform them 
    33         if parameters in [0,1]: 
     36        if parameters in [0, 1]: 
    3437            self.single = parameters 
    3538            self.default = not oldParam 
    3639            return 
    3740 
    38         if not (parameters & Single or parameters & Multiple): parameters += Single 
    39         if not (parameters & Default or parameters & NonDefault): parameters += NonDefault 
     41        if not (parameters & Single or parameters & Multiple): 
     42            parameters += Single 
     43        if not (parameters & Default or parameters & NonDefault): 
     44            parameters += NonDefault 
    4045        self.single = parameters & Single 
    4146        self.default = parameters & Default 
     
    7075    return ret 
    7176 
     77 
     78def rgetattr(obj, name): 
     79    while "." in name: 
     80        first, name = name.split(".", 1) 
     81        obj = getattr(obj, first) 
     82    return getattr(obj, name) 
     83 
     84 
     85def resolveSignal(signal, globals={}): 
     86    """If `signal.type` is a string (used by orngRegistry) return 
     87    the signal copy with the resolved `type`, else return the signal 
     88    unchanged. 
     89    """ 
     90    if isinstance(signal.type, basestring): 
     91        type_name = signal.type 
     92        if "." in type_name: 
     93            module, name = type_name.split(".", 1) 
     94            if module in globals: 
     95                #  module and type are imported in the globals 
     96                module = globals[module] 
     97                sig_type = rgetattr(module, name) 
     98            else: 
     99                module, name = type_name.rsplit(".", 1) 
     100                module = __import__(module, fromlist=[name], globals=globals) 
     101                sig_type = getattr(module, name) 
     102        else: 
     103            if type_name in globals: 
     104                sig_type = globals[type_name] 
     105            elif hasattr(__builtin__, type_name): 
     106                sig_type = getattr(__builtin__, type_name) 
     107            else: 
     108                raise NameError(type_name) 
     109 
     110        signal = copy.copy(signal) 
     111        signal.type = sig_type 
     112    return signal 
    72113 
    73114class SignalLink(object): 
Note: See TracChangeset for help on using the changeset viewer.