Python inspect 模块,getmembers() 实例源码

我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用inspect.getmembers()

项目:warriorframework    作者:warriorframework    | 项目源码 | 文件源码
def get_action(driver, keyword):
    """get action class corresponding to the keyword in the driver
    """
    drvmod = 'ProductDrivers.' + driver
    drvmodobj = importlib.import_module(drvmod)
    drvfile_methods = inspect.getmembers(drvmodobj, inspect.isroutine)
    main_method = [item[1] for item in drvfile_methods if item[0] == 'main'][0]
    main_src = inspect.getsource(main_method)
    pkglstmatch = re.search(r'package_list.*=.*\[(.*)\]', main_src, re.MULTILINE | re.DOTALL)
    pkglst = pkglstmatch.group(1).split(',')
    for pkg in pkglst:
        pkgobj = importlib.import_module(pkg)
        pkgdir = os.path.dirname(pkgobj.__file__)
        action_modules = [pkg+'.'+name for _, name, _ in pkgutil.iter_modules([pkgdir])]
        action_module_objs = [importlib.import_module(action_module) for action_module in action_modules]
        for action_module_obj in action_module_objs:
            for action_class in inspect.getmembers(action_module_obj, inspect.isclass):
                for func_name in inspect.getmembers(action_class[1], inspect.isroutine):
                    if keyword == func_name[0]:
                        return action_class[1]
    return None
项目:estreamer    作者:spohara79    | 项目源码 | 文件源码
def __init__(self, type_list):
        mod_name = sys.modules[__name__]
        cls_list = [
            cls[0]
            for cls in inspect.getmembers(mod_name)
            if cls[0].isupper() and inspect.isclass(cls[1]) and cls[1].__module__ == __name__
        ]
        try:
            type_list.remove('TERMINATE') # can't hold order, so remove it and add it back when done
        except ValueError as exc:
            pass
        type_list = list(set(type_list).intersection(set(cls_list))) # remove bad and duplicate values
        array_args = [
            {'version': getattr(getattr(mod_name, rtype), 'version'), 
            'code': getattr(getattr(mod_name, rtype), 'code')}
            for rtype in type_list
        ]
        array_args.append({'code': 0, 'version': 0}) # add TERMINATE as last req
        self.streaming_event_request = StreamingEventRequest(service_array=array_args, timestamp=Struct.get_ts(), flags=Struct.get_flags())
        self.message_header = MessageHeader(type=2049, data=self.streaming_event_request)
    self.record = self.message_header.pack()
项目:core-framework    作者:RedhawkSDR    | 项目源码 | 文件源码
def struct_fields(value):
    if isinstance(value, types.ClassType) or hasattr(value, '__bases__'):
        clazz = value
    else:
        clazz = type(value)
    # Try to get the correct field ordering, if it is available, otherwise
    # just look at the class dictionary to find the fields.
    fields = getattr(clazz, '__fields', None)
    if fields is None:
        fields = [p for p in clazz.__dict__.itervalues() if isinstance(p, simple_property)]
        fields += [p for p in clazz.__dict__.itervalues() if isinstance(p, simpleseq_property)]
    members = inspect.getmembers(value)
    for member in members:
        if isinstance(member[1], simple_property) or isinstance(member[1], simpleseq_property):
            foundMatch = False
            for field in fields:
                if member[1].id_ == field.id_:
                    foundMatch = True
                    break
            if not foundMatch:
                fields += [member[1]]
    return fields
项目:qqmbr    作者:ischurov    | 项目源码 | 文件源码
def uses_tags(self):
        members = inspect.getmembers(self, predicate=inspect.ismethod)
        handles = [member for member in members if member[0].startswith("handle_") or member[0] == 'preprocess']
        alltags = set([])
        for handle in handles:
            if handle[0].startswith("handle_"):
                alltags.add(handle[0][len("handle_"):])
            doc = handle[1].__doc__
            if not doc:
                continue
            for line in doc.splitlines():
                m = re.search(r"Uses tags:(.+)", line)
                if m:
                    tags = m.group(1).split(",")
                    tags = [tag.strip() for tag in tags]
                    alltags.update(tags)
        alltags.update(self.enumerateable_envs.keys())
        return alltags
项目:qqmbr    作者:ischurov    | 项目源码 | 文件源码
def uses_tags(self) -> set:
        members = inspect.getmembers(self, predicate=inspect.ismethod)
        handles = [member for member in members
                   if (member[0].startswith("handle_") or
                       member[0] == 'make_numbers')]
        alltags = set([])
        for handle in handles:
            if handle[0].startswith("handle_"):
                alltags.add(handle[0][len("handle_"):])
            doc = handle[1].__doc__
            if not doc:
                continue
            for line in doc.splitlines():
                m = re.search(r"Uses tags:(.+)", line)
                if m:
                    tags = m.group(1).split(",")
                    tags = [tag.strip() for tag in tags]
                    alltags.update(tags)
        alltags.update(self.enumerateable_envs.keys())
        alltags.update(self.metatags)
        return alltags
项目:manage    作者:rochacbruno    | 项目源码 | 文件源码
def add_click_commands(module, cli, command_dict, namespaced):
    """Loads all click commands"""
    module_commands = [
        item for item in getmembers(module)
        if isinstance(item[1], BaseCommand)
    ]
    options = command_dict.get('config', {})
    namespace = command_dict.get('namespace')
    for name, function in module_commands:
        f_options = options.get(name, {})
        command_name = f_options.get('name', getattr(function, 'name', name))
        if namespace:
            command_name = '{}_{}'.format(namespace, command_name)
        elif namespaced:
            module_namespace = module.__name__.split('.')[-1]
            command_name = '{}_{}'.format(module_namespace, command_name)
        function.short_help = f_options.get('help_text', function.short_help)
        cli.add_command(function, name=command_name)
项目:django-functest    作者:django-functest    | 项目源码 | 文件源码
def test_doc_strings(self):
        bad_docstrings = []
        for cls in [FuncSeleniumMixin, FuncWebTestMixin]:
            for name, member in inspect.getmembers(cls):
                if name.startswith('__'):
                    continue
                if hasattr(member, 'im_func'):
                    member = member.im_func  # Python 2 method
                member_doc = getattr(member, '__doc__', None)

                base_member = getattr(FuncBaseMixin, name, None)
                if base_member is not None:
                    if hasattr(base_member, 'im_func'):
                        base_member = base_member.im_func  # Python 2 method
                    base_doc = getattr(base_member, '__doc__', None)
                    if base_doc is not None and member_doc != base_doc:
                        bad_docstrings.append((cls, name))

        if bad_docstrings:
            self.fail("The following methods have incorrect or missing docstrings "
                      "compared to FuncBaseMixin: \n" +
                      "\n".join("{0}.{1}".format(cls.__name__, name)
                                for cls, name in bad_docstrings))
项目:Harmonbot    作者:Harmon758    | 项目源码 | 文件源码
def __init__(self, bot):
        self.bot = bot
        # Add commands as random subcommands
        for name, command in inspect.getmembers(self):
            if isinstance(command, commands.Command) and command.parent is None and name != "random":
                self.bot.add_command(command)
                self.random.add_command(command)
        # Add fact subcommands as subcommands of corresponding commands
        for command, parent in ((self.fact_cat, self.cat), (self.fact_date, self.date), (self.fact_number, self.number)):
            utilities.add_as_subcommand(self, command, parent, "fact")
        # Add random subcommands as subcommands of corresponding commands
        self.random_subcommands = ((self.color, "Resources.color"), (self.giphy, "Resources.giphy"), (self.map, "Resources.map"), (self.streetview, "Resources.streetview"), (self.uesp, "Search.uesp"), (self.wikipedia, "Search.wikipedia"), (self.xkcd, "Resources.xkcd"))
        for command, parent_name in self.random_subcommands:
            utilities.add_as_subcommand(self, command, parent_name, "random")
        # Import jokes
        self.jokes = []
        try:
            with open("data/jokes.csv", newline = "") as jokes_file:
                jokes_reader = csv.reader(jokes_file)
                for row in jokes_reader:
                    self.jokes.append(row[0])
        except FileNotFoundError:
            pass
项目:functest    作者:opnfv    | 项目源码 | 文件源码
def init_db():
    """
    Import all modules here that might define models so that
    they will be registered properly on the metadata, and then
    create a database
    """
    def func(subcls):
        """ To check the subclasses of BASE"""
        try:
            if issubclass(subcls[1], BASE):
                return True
        except TypeError:
            pass
        return False
    # pylint: disable=bad-builtin
    subclses = filter(func, inspect.getmembers(models, inspect.isclass))
    LOGGER.debug('Import models: %s', [subcls[1] for subcls in subclses])
    BASE.metadata.create_all(bind=ENGINE)
项目:iotronic    作者:openstack    | 项目源码 | 文件源码
def non_removable_attrs(cls):
        """Returns a set of names of attributes that may not be removed.

        Attributes whose 'mandatory' property is True are automatically added
        to this set. To add additional attributes to the set, override the
        field _extra_non_removable_attrs in subclasses, with a set of the form
        {'/foo', '/bar'}.
        """
        if cls._non_removable_attrs is None:
            cls._non_removable_attrs = cls._extra_non_removable_attrs.copy()
            if cls._api_base:
                fields = inspect.getmembers(cls._api_base,
                                            lambda a: not inspect.isroutine(a))
                for name, field in fields:
                    if getattr(field, 'mandatory', False):
                        cls._non_removable_attrs.add('/%s' % name)
        return cls._non_removable_attrs
项目:abusehelper    作者:Exploit-install    | 项目源码 | 文件源码
def params(cls):
        params = list()
        for name, value in inspect.getmembers(cls):
            if not isinstance(value, Param):
                continue
            params.append((name, value))

        keys = dict()
        orders = dict()
        for base in inspect.getmro(cls):
            for name, value in inspect.getmembers(base):
                if not isinstance(value, Param):
                    continue

                bites = list(name.split("_"))
                keys[name] = list()

                for i in range(len(bites)):
                    key = tuple(bites[:i + 1])
                    keys[name].append(key)
                    orders[key] = min(orders.get(key, value.order), value.order)

        return sorted(params, key=lambda x: tuple(map(orders.get, keys[x[0]])))
项目:abusehelper    作者:Exploit-install    | 项目源码 | 文件源码
def _signal_numbers_to_names():
    signums = {}

    for name, value in inspect.getmembers(signal):
        if not name.startswith("SIG") or name.startswith("SIG_"):
            continue

        if not isinstance(value, numbers.Integral):
            continue

        signums.setdefault(value, []).append(name)

    for signum, names in signums.items():
        signums[signum] = tuple(sorted(names))

    return signums
项目:trio2o    作者:openstack    | 项目源码 | 文件源码
def test_resources(self):
        """Create all the resources to test model definition"""
        try:
            model_list = []
            for _, model_class in inspect.getmembers(models):
                if inspect.isclass(model_class) and (
                        issubclass(model_class, core.ModelBase)):
                    model_list.append(model_class)
            for model_class in _sort_model_by_foreign_key(model_list):
                create_dict = _construct_resource_dict(model_class)
                with self.context.session.begin():
                    core.create_resource(
                        self.context, model_class, create_dict)
        except Exception as e:
            msg = str(e)
            self.fail('test_resources raised Exception unexpectedly %s' % msg)
项目:veneer-py    作者:flowmatters    | 项目源码 | 文件源码
def add_network_methods(target):
    '''
    Attach extension methods to an object that represents a Veneer network.
    Note: The 'network_' prefix will be removed from method names.

    target: Veneer network object to attach extension methods to.
    '''
    import veneer.extensions as extensions # Import self to inspect available functions

    # Generate dict of {function name: function}, skipping this function
    this_func_name = sys._getframe().f_code.co_name
    funcs = inspect.getmembers(extensions, inspect.isfunction)
    funcs = dict((func_name, func) for func_name, func in funcs
                  if func_name != this_func_name
            )

    # Assign functions to target, removing the 'network_' prefix
    for f_name, f in funcs.items():
        if f_name.startswith('network_'):
            f_name = f_name.replace('network_', '')
        setattr(target, f_name, MethodType(f, target))
项目:CodingDojo    作者:ComputerSocietyUNB    | 项目源码 | 文件源码
def _get_queryset_methods(cls, queryset_class):
        def create_method(name, method):
            def manager_method(self, *args, **kwargs):
                return getattr(self.get_queryset(), name)(*args, **kwargs)
            manager_method.__name__ = method.__name__
            manager_method.__doc__ = method.__doc__
            return manager_method

        new_methods = {}
        # Refs http://bugs.python.org/issue1785.
        predicate = inspect.isfunction if six.PY3 else inspect.ismethod
        for name, method in inspect.getmembers(queryset_class, predicate=predicate):
            # Only copy missing methods.
            if hasattr(cls, name):
                continue
            # Only copy public methods or methods with the attribute `queryset_only=False`.
            queryset_only = getattr(method, 'queryset_only', None)
            if queryset_only or (queryset_only is None and name.startswith('_')):
                continue
            # Copy the method onto the manager.
            new_methods[name] = create_method(name, method)
        return new_methods
项目:hostapd-mana    作者:adde88    | 项目源码 | 文件源码
def iterAttributes(self):
        """
        List all the attributes defined in this module.

        Note: Future work is planned here to make it possible to list python
        attributes on a module without loading the module by inspecting ASTs or
        bytecode, but currently any iteration of PythonModule objects insists
        they must be loaded, and will use inspect.getmodule.

        @raise NotImplementedError: if this module is not loaded.

        @return: a generator yielding PythonAttribute instances describing the
        attributes of this module.
        """
        if not self.isLoaded():
            raise NotImplementedError(
                "You can't load attributes from non-loaded modules yet.")
        for name, val in inspect.getmembers(self.load()):
            yield PythonAttribute(self.name+'.'+name, self, True, val)
项目:vspheretools    作者:devopshq    | 项目源码 | 文件源码
def _get_all(self):
        #If this is a MOR we need to recurse
        if self._type == 'ManagedObjectReference':
            oc = self._server._get_object_properties(self._obj, get_all=True)
            ps = oc.get_element_propSet()
            self._values = dict([(i.Name, i.Val) for i in ps])
        #Just inspect the attributes
        else:
            methods = getmembers(self._obj, predicate=inspect.ismethod)
            self._values = {}
            for name, method in methods:
                try:
                    if name.startswith("get_element_"):
                        self._values[name[12:]] = method()
                except AttributeError:
                    continue
        self._values_set = True
项目:turtle    作者:icse-turtle    | 项目源码 | 文件源码
def load_file(self, filename):
        # Saves the name and the extension of the file. It assumes that the class
        # to be loaded has the same name of the module (.py or .pyc file).
        mod_name, file_ext = os.path.splitext(os.path.split(filename)[-1])

        py_mod = None

        # If the file has .py extension, then it loads that module.
        if file_ext.lower() == '.py':
            py_mod = imp.load_source(mod_name, filename)

        # If the file has .pyc extension, then it loads that module.
        elif file_ext.lower() == '.pyc':
            py_mod = imp.load_compiled(mod_name, filename)

        else:
            raise EvaluateException('Unable to find the file ' + filename + '!')

        # Builds the list of the classes contained in the module.
        classes = [u for (v, u) in getmembers(py_mod, isclass) if v.startswith(mod_name)]

        # Loads the classes contained in the module.
        for c in classes:
            self.load_class(c)
项目:GAMADV-XTD    作者:taers232c    | 项目源码 | 文件源码
def _list_xml_members(cls):
    """Generator listing all members which are XML elements or attributes.

    The following members would be considered XML members:
    foo = 'abc' - indicates an XML attribute with the qname abc
    foo = SomeElement - indicates an XML child element
    foo = [AnElement] - indicates a repeating XML child element, each instance
        will be stored in a list in this member
    foo = ('att1', '{http://example.com/namespace}att2') - indicates an XML
        attribute which has different parsing rules in different versions of
        the protocol. Version 1 of the XML parsing rules will look for an
        attribute with the qname 'att1' but verion 2 of the parsing rules will
        look for a namespaced attribute with the local name of 'att2' and an
        XML namespace of 'http://example.com/namespace'.
    """
    members = []
    for pair in inspect.getmembers(cls):
      if not pair[0].startswith('_') and pair[0] != 'text':
        member_type = pair[1]
        if (isinstance(member_type, tuple) or isinstance(member_type, list)
            or isinstance(member_type, (str, unicode))
            or (inspect.isclass(member_type)
                and issubclass(member_type, XmlElement))):
          members.append(pair)
    return members
项目:auger    作者:laffra    | 项目源码 | 文件源码
def get_defining_item(self, code):
        for modname, mod in sys.modules.iteritems():
            file = getattr(mod, '__file__', '').replace('.pyc', '.py')
            if file == code.co_filename:
                for classname,clazz in inspect.getmembers(mod, predicate=inspect.isclass):
                    for name,member in inspect.getmembers(clazz, predicate=inspect.ismethod):
                        filename = member.im_func.func_code.co_filename
                        lineno = member.im_func.func_code.co_firstlineno
                        if filename == code.co_filename and lineno == code.co_firstlineno:
                            self.imports_.add((modname, clazz.__name__))
                            return clazz, member
                    for name,member in inspect.getmembers(clazz, predicate=inspect.isfunction):
                        filename = member.func_code.co_filename
                        lineno = member.func_code.co_firstlineno
                        if filename == code.co_filename and lineno == code.co_firstlineno:
                            self.imports_.add((modname, clazz.__name__))
                            return clazz, member
                self.imports_.add((modname,))
                return mod, mod
项目:cleverhans    作者:tensorflow    | 项目源码 | 文件源码
def __init__(self, docstring, class_name, class_object):
        super(NumpyClassDocString, self).__init__(docstring)
        self.class_name = class_name
        methods = dict((name, func) for name, func
                       in inspect.getmembers(class_object))

        self.has_parameters = False
        if '__init__' in methods:
            # verify if __init__ is a Python function. If it isn't
            # (e.g. the function is implemented in C), getargspec will fail
            if not inspect.ismethod(methods['__init__']):
                return
            args, varargs, keywords, defaults = inspect.getargspec(
                methods['__init__'])
            if (args and args != ['self']) or varargs or keywords or defaults:
                self.has_parameters = True
项目:cleverhans    作者:tensorflow    | 项目源码 | 文件源码
def handle_class(val, class_name):
    cls_errors = []
    docstring = inspect.getdoc(val)
    if docstring is None:
        cls_errors.append((class_name,
                           '**missing** class-level docstring'))
    else:
        cls_errors = [
            (e,) for e in
            NumpyClassDocString(docstring, class_name, val).get_errors()
        ]
        # Get public methods and parse their docstrings
        methods = dict(((name, func) for name, func in inspect.getmembers(val)
                        if not name.startswith('_') and callable(func) and
                        type(func) is not type))
        for m_name, method in six.iteritems(methods):
            # skip error check if the method was inherited
            # from a parent class (which means it wasn't
            # defined in this source file)
            if inspect.getmodule(method) is not None:
                continue
            cls_errors.extend(handle_method(method, m_name, class_name))
    return cls_errors
项目:radar    作者:amoose136    | 项目源码 | 文件源码
def _getmembers(item):
    import inspect
    try:
        members = inspect.getmembers(item)
    except Exception:
        members = [(x, getattr(item, x)) for x in dir(item)
                   if hasattr(item, x)]
    return members

#-----------------------------------------------------------------------------

# The following SafeEval class and company are adapted from Michael Spencer's
# ASPN Python Cookbook recipe:
#   http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/364469
# Accordingly it is mostly Copyright 2006 by Michael Spencer.
# The recipe, like most of the other ASPN Python Cookbook recipes was made
# available under the Python license.
#   http://www.python.org/license

# It has been modified to:
#   * handle unary -/+
#   * support True/False/None
#   * raise SyntaxError instead of a custom exception.
项目:python-gamelocker    作者:schneefux    | 项目源码 | 文件源码
def modulemap():
    """Returns a dictionary where `type_name`s are mapped
       to corresponding classes from `gamelocker.datatypes`.

    :return: A dictionary with keys of `type_name`
             and values of :class:`DataMessage` subclasses.
    :rtype: :class:`gamelocker.janus.DataMessage`
    """
    typemap = dict()
    classes = inspect.getmembers(sys.modules[__name__], inspect.isclass)
    for name, value in classes:
        if name == "Attribute" or name == "DataMessage":
            continue
        typemap[value.type_name] = value

    return typemap
项目:Dallinger    作者:Dallinger    | 项目源码 | 文件源码
def load():
    """Load the active experiment."""
    if os.getcwd() not in sys.path:
        sys.path.append(os.getcwd())

    try:
        exp = imp.load_source('dallinger_experiment', "dallinger_experiment.py")
        classes = inspect.getmembers(exp, inspect.isclass)
        exps = [c for c in classes
                if (c[1].__bases__[0].__name__ in "Experiment")]
        this_experiment = exps[0][0]
        mod = __import__('dallinger_experiment', fromlist=[this_experiment])
        return getattr(mod, this_experiment)

    except ImportError:
        logger.error('Could not import experiment.')
        raise
项目:cerberus-core    作者:ovh    | 项目源码 | 文件源码
def export_rule_data(variables, actions):
    """
        export_rule_data is used to export all information about the
        variables, actions, and operators to the client. This will return a
        dictionary with three keys:

        - variables: a list of all available variables along with their label, type and options
        - actions: a list of all actions along with their label and params
        - variable_type_operators: a dictionary of all field_types -> list of available operators
    """
    from . import operators
    actions_data = actions.get_all_actions()
    variables_data = variables.get_all_variables()
    variable_type_operators = {}
    for variable_class in inspect.getmembers(operators, lambda x: getattr(x, 'export_in_rule_data', False)):
        variable_type = variable_class[1]  # getmembers returns (name, value)
        variable_type_operators[variable_type.name] = variable_type.get_all_operators()

    return {"variables": variables_data,
            "actions": actions_data,
            "variable_type_operators": variable_type_operators}
项目:aws-cfn-plex    作者:lordmuffin    | 项目源码 | 文件源码
def get_instance_public_methods(instance):
    """Retrieves an objects public methods

    :param instance: The instance of the class to inspect
    :rtype: dict
    :returns: A dictionary that represents an instance's methods where
        the keys are the name of the methods and the
        values are the handler to the method.
    """
    instance_members = inspect.getmembers(instance)
    instance_methods = {}
    for name, member in instance_members:
        if not name.startswith('_'):
            if inspect.ismethod(member):
                instance_methods[name] = member
    return instance_methods
项目:pomu    作者:Hummer12007    | 项目源码 | 文件源码
def source(self, cls):
        """
        A decorator to mark package source modules
        It would register all the methods of the class marked by @handler
        with the dispatcher.
        """
        try:
            from pomu.source.base import BaseSource
        except ImportError: #circular import
            return cls
        if cls == BaseSource:
            return cls
        self.backends[cls.__name__] = cls
        for m, obj in inspect.getmembers(cls):
            if isinstance(obj, self.handler._handler):
                self.register_package_handler(cls, obj.handler, obj.priority)
        return cls
项目:modern-paste    作者:LINKIWI    | 项目源码 | 文件源码
def get_all_uris():
    """
    Templating utility to retrieve all available URIs, mapping modules to URI classes.
    Used ultimately to store all URI paths in the template for easy retrieval by Javascript.

        {{ all_uris() }}
    """
    return dict(all_uris=lambda: {
        uri_module: filter(
            lambda module_name: module_name.endswith('URI') and len(module_name) > 3,
            map(lambda module_pair: module_pair[0], inspect.getmembers(sys.modules['uri.' + uri_module])),
        )
        for uri_module in filter(
            lambda mod: not mod.startswith('__'),
            dir(uri),
        )
    })
项目:Taigabot    作者:FrozenPigs    | 项目源码 | 文件源码
def __new__(cls, name, bases, clsdict):
        """
        Equip all base-class methods with a needs_values decorator, and all non-const methods
        with a set_dirty_and_flush_changes decorator in addition to that."""
        kmm = '_mutating_methods_'
        if kmm in clsdict:
            mutating_methods = clsdict[kmm]
            for base in bases:
                methods = (t for t in inspect.getmembers(base, inspect.isroutine) if not t[0].startswith("_"))
                for name, method in methods:
                    if name in clsdict:
                        continue
                    method_with_values = needs_values(method)
                    if name in mutating_methods:
                        method_with_values = set_dirty_and_flush_changes(method_with_values)
                    # END mutating methods handling

                    clsdict[name] = method_with_values
                # END for each name/method pair
            # END for each base
        # END if mutating methods configuration is set

        new_type = super(MetaParserBuilder, cls).__new__(cls, name, bases, clsdict)
        return new_type
项目:AshsSDK    作者:thehappydinoa    | 项目源码 | 文件源码
def get_instance_public_methods(instance):
    """Retrieves an objects public methods

    :param instance: The instance of the class to inspect
    :rtype: dict
    :returns: A dictionary that represents an instance's methods where
        the keys are the name of the methods and the
        values are the handler to the method.
    """
    instance_members = inspect.getmembers(instance)
    instance_methods = {}
    for name, member in instance_members:
        if not name.startswith('_'):
            if inspect.ismethod(member):
                instance_methods[name] = member
    return instance_methods
项目:pytwitcher    作者:adongy    | 项目源码 | 文件源码
def remove_plugin(self, name: str):
        plugin = self.plugins.pop(name, None)
        if plugin is None:
            return plugin

        for name, member in inspect.getmembers(plugin):
            # Remove IRC events
            if isinstance(member, event.event):
                self.remove_irc_event(member)
            # Remove listeners
            elif name.startswith(('on_', 'handle_')):
                self.remove_listener(member)

        try:
            unloader = getattr(plugin, 'unload')
        except AttributeError:
            pass
        else:
            unloader()

        return plugin
项目:python-ares    作者:pynog    | 项目源码 | 文件源码
def report(aresObj):
  """ Display all the HTML components """
  modulesPath = tmpplPath = os.path.join(aresObj.http['DIRECTORY'], "..", "ares", "Lib", 'html')
  sys.path.append(modulesPath)

  aresObj.title("A suite of HTML components available")
  classNames = []
  for aresMod in os.listdir(modulesPath):
    if aresMod.endswith(".py") and aresMod.startswith("AresHtml") and not aresMod.startswith("AresHtmlGraph") and aresMod != 'AresHtml.py':
      mod = __import__(aresMod.replace(".py", ""))
      for name, cls in inspect.getmembers(mod):
        if inspect.isclass(cls) and hasattr(cls, 'alias'):
          classNames.append({'Class': aresObj.href(name, 'AresDocHtmlItem',
                                                   {'html_module': aresMod, 'html_class': name, 'html_alias': cls.alias}, cssCls=''),
                             'Ares Module': aresMod,
                             #'Documentation': aresObj.external_link('Website', cls.reference),
                             })
  aresObj.table(classNames, [{'colName': 'Class', 'type': 'object'},
                             {'colName': 'Ares Module'},
                             #{'colName': 'Documentation', 'type': 'object'}
                             ], 'Ares Module Documentation')
项目:utils    作者:rapydo    | 项目源码 | 文件源码
def get_celery_tasks_from_module(self, submodule):
        """
            Extract all celery tasks from a module.
            Celery tasks are functions decorated by @celery_app.task(...)
            This decorator transform the function into a class child of
            celery.local.PromiseProxy
        """
        tasks = {}
        functions = inspect.getmembers(submodule)
        for func in functions:

            obj_type = type(func[1])

            if obj_type.__module__ != "celery.local":
                continue

            tasks[func[0]] = func[1]
        return tasks
项目:pandachaika    作者:pandabuilder    | 项目源码 | 文件源码
def get_torrent_client(torrent_settings: Dict[str, Any]) -> TorrentClient:
    client = None
    torrent_module = None
    for module_name in modules_name:
        if module_name == torrent_settings['client']:
            if module_name not in sys.modules:
                full_package_name = '%s.%s' % ('core.downloaders.torrent', module_name)
                torrent_module = __import__(full_package_name, fromlist=[module_name])
            else:
                torrent_module = module_name
    if not torrent_module:
        return torrent_module
    for _, obj in inspect.getmembers(torrent_module):
        if inspect.isclass(obj) and hasattr(obj, 'type') and 'torrent_handler' in getattr(obj, 'type'):
            client = obj(
                torrent_settings['address'],
                torrent_settings['port'],
                torrent_settings['user'],
                torrent_settings['pass'],
                secure=not torrent_settings['no_certificate_check'],
            )
    return client
项目:salty    作者:GaloisInc    | 项目源码 | 文件源码
def update_inputs(av_states, socket_send, *input_variable_names):
    # From each input variable name, extract the function name, ids of AvStates to be passed as arguments,
    # and the corresponding function from psaltlib.Inputs. Call the function with the id-key'd AvStates as
    # arguments. Aggregate results in order in a list.
    input_state = []
    for term in input_variable_names:
        term_elements = re.split('_', term)
        function_name = term_elements[0]
        av_id_args = term_elements[1:]
        args = []
        for av_id in av_id_args:
            args.append(av_states[int(av_id)])
        args.append(socket_send)
        func = [o for o in getmembers(psaltlib.Inputs) if isfunction(o[1]) and
                    o[0] == function_name]
        input_state.append(func[0][1](*args))
    return input_state
项目:estreamer    作者:spohara79    | 项目源码 | 文件源码
def load_from(self, load_type, load_string):
        def isNotClass(element):
            return not isinstance(element, type)
        self.__load_iters([member for member in inspect.getmembers(self.caller, isNotClass)], load_type, load_string)
项目:PyPlanet    作者:PyPlanet    | 项目源码 | 文件源码
def get_app_models(app):
    from .model import Model
    try:
        models_module = importlib.import_module('{}.models'.format(app.name))
        for name, obj in inspect.getmembers(models_module):
            if inspect.isclass(obj) and issubclass(obj, Model):
                if obj.__name__ == 'TimedModel':
                    continue
                yield name, obj
    except Exception as e:
        return list()
项目:zellij    作者:nedbat    | 项目源码 | 文件源码
def get_design(modname):
    """Given a module name, return a Design class."""
    fullmodname = f"zellij.design.{modname}"
    mod = importlib.import_module(fullmodname)
    classes_in_mod = []
    for _, val in inspect.getmembers(mod):
        if inspect.isclass(val):
            if inspect.getmodule(val) is mod:
                classes_in_mod.append(val)
    assert len(classes_in_mod) == 1
    return classes_in_mod[0]
项目:plugs-mail    作者:solocompt    | 项目源码 | 文件源码
def get_members(self, app):
        return inspect.getmembers(app)
项目:pbtk    作者:marin-m    | 项目源码 | 文件源码
def iterate_proto_msg(module, base):
    for name, cls in getmembers(module):
        if isclass(cls) and issubclass(cls, Message):
            yield base + name, cls
            yield from iterate_proto_msg(cls, base + name + '.')

# Routine for saving data returned by an extractor
项目:data_pipeline    作者:Yelp    | 项目源码 | 文件源码
def _all_message_field_names(self):
        return [
            name for name, value in getmembers(
                Message,
                lambda v: isinstance(v, property)
            )
        ]
项目:kinect-2-libras    作者:inessadl    | 项目源码 | 文件源码
def allmethods(cl):
    methods = {}
    for key, value in inspect.getmembers(cl, _is_some_method):
        methods[key] = 1
    for base in cl.__bases__:
        methods.update(allmethods(base)) # all your base are belong to us
    for key in methods.keys():
        methods[key] = getattr(cl, key)
    return methods
项目:eventdriventalk    作者:cachedout    | 项目源码 | 文件源码
def _load_mods(opts, mods, search_dir, prefix):
    '''
    opts: The seralized config file
    reaction_dir: A directory to search for reaction modules
    '''
    loaded = dict()

    for mod_to_load in mods:
        mod = imp.load_source(mod_to_load, os.path.join(search_dir, mod_to_load))

        for func_def in inspect.getmembers(mod, inspect.isfunction):
            func_mod_delimited = '{0}.{1}.{2}'.format(prefix, mod_to_load.rstrip('.py'), func_def[0])
            loaded[func_mod_delimited] = func_def[1]
    return loaded
项目:mod_stat    作者:DadoZe    | 项目源码 | 文件源码
def MYPPRINT(obj, name = None):
    import inspect, pprint
    if isinstance(obj, dict) or isinstance(obj, list):
        pprint.pprint(obj)
    elif hasattr(obj, '__call__'):
        pprint.pprint(inspect.getargspec(obj))
    else:
        pprint.pprint(inspect.getmembers(obj))
    return
项目:bitcoin-arbitrage    作者:ucfyao    | 项目源码 | 文件源码
def list_markets(self):
        logging.debug('list_markets') 
        for filename in glob.glob(os.path.join(public_markets.__path__[0], "*.py")):
            module_name = os.path.basename(filename).replace('.py', '')
            if not module_name.startswith('_'):
                module = __import__("public_markets." + module_name)
                test = eval('module.' + module_name)
                for name, obj in inspect.getmembers(test):
                    if inspect.isclass(obj) and 'Market' in (j.__name__ for j in obj.mro()[1:]):
                        if not obj.__module__.split('.')[-1].startswith('_'):
                            print(obj.__name__)
        sys.exit(0)
项目:systematic-metafeatures    作者:fhpinto    | 项目源码 | 文件源码
def discover_components(package, directory, base_class):
    """Discover implementations of a base class in a package.

    Parameters
    ----------
    package : str
        Package name
    directory : str
        Directory of the package to which is inspected.
    base_class : object
        Base class of objects to discover

    Returns
    -------
    list : all subclasses of `base_class` inside `directory`
    """

    components = list()

    for module_loader, module_name, ispkg in pkgutil.iter_modules(
            [directory]):
        full_module_name = "%s.%s" % (package, module_name)
        if full_module_name not in sys.modules and not ispkg:
            module = importlib.import_module(full_module_name)

            for member_name, obj in inspect.getmembers(module):
                if inspect.isclass(obj) and issubclass(base_class, obj):
                    classifier = obj
                    components.append(classifier)

    return components
项目:code    作者:ActiveState    | 项目源码 | 文件源码
def magic():
    """
    Returns a string which represents Python code that copies instance 
    variables to their local counterparts. I.e:
        var = self.var
        var2 = self.var2
    """
    s = ""
    for var, value in inspect.getmembers(sys._getframe(1).f_locals["self"]):
        if not (var.startswith("__") and var.endswith("__")):
            s += var + " = self." + var + "\n"
    return s
项目:Harmonbot    作者:Harmon758    | 项目源码 | 文件源码
def __init__(self, bot):
        self.bot = bot
        # Add commands as search subcommands
        for name, command in inspect.getmembers(self):
            if isinstance(command, commands.Command) and command.parent is None and name != "search":
                self.bot.add_command(command)
                self.search.add_command(command)
        # Add search subcommands as subcommands of corresponding commands
        self.search_subcommands = ((self.imgur, "Resources.imgur"), (self.youtube, "Audio.audio"))
        for command, parent_name in self.search_subcommands:
            utilities.add_as_subcommand(self, command, parent_name, "search")
项目:Harmonbot    作者:Harmon758    | 项目源码 | 文件源码
def __init__(self, bot):
        self.bot = bot
        self.players = {}
        for name, command in inspect.getmembers(self):
            if isinstance(command, commands.Command) and command.parent is None and name != "audio":
                self.bot.add_command(command)
                self.audio.add_command(command)