def test_import_module_by_filename(self): ccc = import_module('./lib/test_mod/ccc/mod.py') eq_("this is ccc", ccc.name) ddd = import_module('./lib/test_mod/ddd/mod.py') # Note: When importing a module by filename, if module file name # is duplicated, import_module reload (override) a module instance. eq_("this is ddd", ddd.name)
def test_import_module_by_filename(self): ccc = import_module('./lib/test_mod/ccc/mod.py') eq_("this is ccc", ccc.name) ddd = import_module('./lib/test_mod/ddd/mod.py') # Note: When importing a module by filename, if module file name # is duplicated, import_module returns a module instance which is # imported before. eq_("this is ccc", ddd.name)
def _create_ofp_msg_ev_from_module(modname): mod = utils.import_module(modname) # print mod for _k, cls in inspect.getmembers(mod, inspect.isclass): if not hasattr(cls, 'cls_msg_type'): continue _create_ofp_msg_ev_class(cls)
def load_app(self, name): mod = utils.import_module(name) clses = inspect.getmembers(mod, lambda cls: (inspect.isclass(cls) and issubclass(cls, RyuApp))) if clses: return clses[0][1] return None
def _create_ofp_msg_ev_from_module(modname): mod = utils.import_module(modname) # print mod for _k, cls in mod.__dict__.items(): if not inspect.isclass(cls): continue if 'cls_msg_type' not in cls.__dict__: continue _create_ofp_msg_ev_class(cls)
def load_app(self, name): mod = utils.import_module(name) for k, v in mod.__dict__.items(): try: if issubclass(v, RyuApp): return getattr(mod, k) except TypeError: pass return None
def __init__(self, *args, **kwargs): super(Tester, self).__init__() self.ev_q = dispatcher.EventQueue(QUEUE_NAME_RUN_TEST_EV, RUN_TEST_EV_DISPATCHER) run_test_mod = utils.import_module(FLAGS.run_test_mod) LOG.debug('import run_test_mod.[%s]', run_test_mod.__name__) self.run_test = run_test_mod.RunTest(*args, **kwargs) handler.register_instance(self.run_test)
def load_app(self, name): mod = utils.import_module(name) # print('6:mod:',mod) #('6:mod:', <module 'ryu.controller.ofp_handler' # from '/usr/local/lib/python2.7/dist-packages/ryu/controller/ofp_handler.pyc'>) clses = inspect.getmembers( mod, lambda cls: (inspect.isclass(cls) and issubclass(cls, RyuApp) and mod.__name__ == cls.__module__)) if clses: # print('7:clses:',clses) #('7:clses:', [('OFPHandler', <class 'ryu.controller.ofp_handler.OFPHandler'>)]) # print('8:clses[0][1]',clses[0][1]) #('8:clses[0][1]', <class 'ryu.controller.ofp_handler.OFPHandler'>) return clses[0][1] return None
def load_app(self, name): # 加载整个name文件的环境,包括变量,类等。 mod = utils.import_module(name) # 从mod中返回符合要求的member,返回以(name,value)组成的列表 clses = inspect.getmembers( mod, lambda cls: (inspect.isclass(cls) and issubclass(cls, RyuApp) and mod.__name__ == cls.__module__)) # attention:the first app,like # 'class SimpleSwitch13(app_manager.RyuApp)' # getmembers返回的是(name,value)组成的列表,因此下面返回的是类对象 if clses: return clses[0][1] return None
def main(): try: base_conf(project='ryu', version='ryu %s' % version) except cfg.RequiredOptError as e: base_conf.print_help() raise SystemExit(1) subcmd_name = base_conf.subcommand try: subcmd_mod_name = subcommands[subcmd_name] except KeyError: base_conf.print_help() raise SystemExit('Unknown subcommand %s' % subcmd_name) subcmd_mod = utils.import_module(subcmd_mod_name) subcmd = SubCommand(name=subcmd_name, entry=subcmd_mod.main) subcmd.run(base_conf.subcommand_args)
def load_app(self, name): # 导入模块 mod = utils.import_module(name) # nspect模块用于收集python对象的信息 # getmembers(object[, predicate]) # 返回一个包含对象的所有成员的(name, value)列表。 # 返回的内容比对象的__dict__包含的内容多,源码是通过dir()实现的。 # predicate是一个可选的函数参数,被此函数判断为True的成员才被返回。 # 如果为类,RyuApp子类,则获取其对象信息 clses = inspect.getmembers( mod, lambda cls: (inspect.isclass(cls) and issubclass(cls, RyuApp) and mod.__name__ == cls.__module__)) if clses: return clses[0][1] return None
def test_import_same_module3(self): fuga1 = import_module('./lib/test_mod/fuga/mod.py') eq_("this is fuga", fuga1.name) fuga3 = self._my_import('ryu.tests.unit.lib.test_mod.fuga.mod') eq_("this is fuga", fuga3.name) eq_(fuga1, fuga3)
def test_import_same_module1(self): fuga1 = import_module('./lib/test_mod/fuga/mod.py') eq_("this is fuga", fuga1.name) eq_(ryu.tests.unit.lib.test_mod.fuga.mod, fuga1)
def test_import_module_by_filename(self): fuga = import_module('./lib/test_mod/fuga/mod.py') eq_("this is fuga", fuga.name) hoge = import_module('./lib/test_mod/hoge/mod.py') eq_("this is hoge", hoge.name)
def test_import_module_with_same_basename(self): fuga = import_module('ryu.tests.unit.lib.test_mod.fuga.mod') eq_("this is fuga", fuga.name) hoge = import_module('ryu.tests.unit.lib.test_mod.hoge.mod') eq_("this is hoge", hoge.name)
# limitations under the License. import inspect import struct import base64 import six from . import packet_base from . import ethernet from ryu import utils from ryu.lib.stringify import StringifyMixin # Packet class dictionary mod = inspect.getmembers(utils.import_module("ryu.lib.packet"), lambda cls: (inspect.ismodule(cls))) cls_list = [] for _, m in mod: cl = inspect.getmembers( m, lambda cls: (inspect.isclass(cls) and issubclass(cls, packet_base.PacketBase))) cls_list.extend(list(cl)) PKT_CLS_DICT = dict(cls_list) class Packet(StringifyMixin): """A packet decoder/encoder class. An instance is used to either decode or encode a single packet.
def test_import_module_with_same_basename(self): aaa = import_module('ryu.tests.unit.lib.test_mod.aaa.mod') eq_("this is aaa", aaa.name) bbb = import_module('ryu.tests.unit.lib.test_mod.bbb.mod') eq_("this is bbb", bbb.name)
_OFPROTO_DIR = os.path.dirname(__file__) _OFPROTO_PARSER_FILE_NAMES = glob.glob(os.path.join( _OFPROTO_DIR, 'ofproto_v[0-9]*_[0-9]*_parser.py')) _OFPROTO_PARSER_FILE_NAMES = [os.path.basename(name) for name in _OFPROTO_PARSER_FILE_NAMES] _OFPROTO_MODULES = {} for parser_file_name in _OFPROTO_PARSER_FILE_NAMES: # drop lasting '.py' parser_mod_name = __name__ + '.' + parser_file_name[:-3] consts_mod_name = parser_mod_name[:-7] # drop lasting '_parser' try: parser_mod = utils.import_module(parser_mod_name) consts_mod = utils.import_module(consts_mod_name) except: continue assert consts_mod.OFP_VERSION not in _OFPROTO_MODULES _OFPROTO_MODULES[consts_mod.OFP_VERSION] = (consts_mod, parser_mod) def get_ofp_modules(): """get modules pair for the constants and parser of OF-wire of a given OF version. """ return _OFPROTO_MODULES
# limitations under the License. """ Events for Zebra protocol service. """ import inspect import logging from ryu import utils from ryu.controller import event from ryu.lib.packet import zebra LOG = logging.getLogger(__name__) MOD = utils.import_module(__name__) ZEBRA_EVENTS = [] class EventZebraBase(event.EventBase): """ The base class for Zebra protocol service event class. The subclasses have at least ``zclient`` and the same attributes with :py:class: `ryu.lib.packet.zebra.ZebraMessage`. ``zclient`` is an instance of Zebra client class. See :py:class: `ryu.services.protocols.zebra.client.zclient.ZClient` or :py:class: `ryu.services.protocols.zebra.server.zserver.ZClient`. The subclasses are named as::
base_conf.register_cli_opt(RemainderOpt('subcommand_args', default=[], positional=True, help='subcommand specific arguments')) class SubCommand(object): def __init__(self, name, entry): self.name = name self.entry = entry def run(self, args): prog = '%s %s' % (os.path.basename(sys.argv[0]), self.name,) self.entry(args=args, prog=prog) def main(): try: base_conf(project='ryu', version='ryu %s' % version) except cfg.RequiredOptError, e: base_conf.print_help() raise SystemExit(1) subcmd_name = base_conf.subcommand try: subcmd_mod_name = subcommands[subcmd_name] except KeyError: base_conf.print_help() raise SystemExit('Unknown subcommand %s' % subcmd_name) subcmd_mod = utils.import_module(subcmd_mod_name) subcmd = SubCommand(name=subcmd_name, entry=subcmd_mod.main) subcmd.run(base_conf.subcommand_args)
class SubCommand(object): def __init__(self, name, entry): self.name = name self.entry = entry def run(self, args): prog = '%s %s' % ( os.path.basename(sys.argv[0]), self.name, ) self.entry(args=args, prog=prog) def main(): try: base_conf(project='ryu', version='ryu %s' % version) except cfg.RequiredOptError, e: base_conf.print_help() raise SystemExit(1) subcmd_name = base_conf.subcommand try: subcmd_mod_name = subcommands[subcmd_name] except KeyError: base_conf.print_help() raise SystemExit('Unknown subcommand %s' % subcmd_name) subcmd_mod = utils.import_module(subcmd_mod_name) subcmd = SubCommand(name=subcmd_name, entry=subcmd_mod.main) subcmd.run(base_conf.subcommand_args)
def test_import_same_module3(self): ggg1 = import_module('./lib/test_mod/ggg.py') eq_("this is ggg", ggg1.name) ggg2 = self._my_import('ryu.tests.unit.lib.test_mod.ggg') eq_("this is ggg", ggg2.name)
# implied. # See the License for the specific language governing permissions and # limitations under the License. """ Events for Zebra protocol service. """ import inspect import logging from ryu import utils from ryu.controller import event from ryu.lib.packet import zebra LOG = logging.getLogger(__name__) MOD = utils.import_module(__name__) ZEBRA_EVENTS = [] class EventZebraBase(event.EventBase): """ The base class for Zebra protocol service event class. The subclasses have at least ``zclient`` and the same attributes with :py:class: `ryu.lib.packet.zebra.ZebraMessage`. ``zclient`` is an instance of Zebra client class. See :py:class: `ryu.services.protocols.zebra.client.zclient.ZClient` or :py:class: `ryu.services.protocols.zebra.server.zserver.ZClient`. The subclasses are named as::
import inspect from ryu import utils def _listify(may_list): if may_list is None: may_list = [] if not isinstance(may_list, list): may_list = [may_list] return may_list name = 'test' mod = utils.import_module(name) print mod.__name__ clses = inspect.getmembers(mod, lambda cls:inspect.isclass(cls)) print clses for cls in _listify(clses[0][1]): print cls.__module__ print cls.__name__
from ryu import utils _OFPROTO_DIR = os.path.dirname(__file__) _OFPROTO_PARSER_FILE_NAMES = glob.glob( os.path.join(_OFPROTO_DIR, 'ofproto_v[0-9]*_[0-9]*_parser.py')) _OFPROTO_PARSER_FILE_NAMES = [ os.path.basename(name) for name in _OFPROTO_PARSER_FILE_NAMES ] _OFPROTO_MODULES = {} for parser_file_name in _OFPROTO_PARSER_FILE_NAMES: # drop lasting '.py' parser_mod_name = __name__ + '.' + parser_file_name[:-3] consts_mod_name = parser_mod_name[:-7] # drop lasting '_parser' try: parser_mod = utils.import_module(parser_mod_name) consts_mod = utils.import_module(consts_mod_name) except: continue assert consts_mod.OFP_VERSION not in _OFPROTO_MODULES _OFPROTO_MODULES[consts_mod.OFP_VERSION] = (consts_mod, parser_mod) def get_ofp_modules(): """get modules pair for the constants and parser of OF-wire of a given OF version. """ return _OFPROTO_MODULES
def test_import_same_module2(self): fff1 = import_module('./lib/test_mod/fff.py') eq_("this is fff", fff1.name) fff2 = import_module('ryu.tests.unit.lib.test_mod.fff') eq_("this is fff", fff2.name)
import inspect import struct import base64 import six from . import packet_base from . import ethernet from ryu import utils from ryu.lib.stringify import StringifyMixin # Packet class dictionary mod = inspect.getmembers(utils.import_module("ryu.lib.packet"), lambda cls: (inspect.ismodule(cls))) cls_list = [] for _, m in mod: cl = inspect.getmembers(m, lambda cls: ( inspect.isclass(cls) and issubclass(cls, packet_base.PacketBase))) cls_list.extend(list(cl)) PKT_CLS_DICT = dict(cls_list) class Packet(StringifyMixin): """A packet decoder/encoder class. An instance is used to either decode or encode a single packet.
def test_import_same_module1(self): from ryu.tests.unit.lib.test_mod import eee as eee1 eq_("this is eee", eee1.name) eee2 = import_module('./lib/test_mod/eee.py') eq_("this is eee", eee2.name)