pypacker_server.py 文件源码

python
阅读 17 收藏 0 点赞 0 评论 0

项目:taf 作者: taf3 项目源码 文件源码
def __register_methods(self):
        """Register all Pypacker TG methods.

        """
        def xmlrpc_wrap(func, *args, **kwargs):
            """Register all Pypacker TG methods.

            """
            try:
                return func(*args, **kwargs)
            except:
                exc_type, exc_value, exc_traceback = sys.exc_info()
                traceback_message = traceback.format_exception(exc_type, exc_value, exc_traceback)
                raise xmlrpc.Fault(500, traceback_message)

        def wrap_method(method):
            """Register all Pypacker TG methods.

            """
            return lambda args, kwargs: xmlrpc_wrap(getattr(self.pypacker, method),
                                                    *pickle.loads(args.data), **pickle.loads(kwargs.data))

        def wrap_attibute(attr):
            """Register all Pypacker TG attributes.

            """
            return lambda: getattr(self.pypacker, attr)

        # Get full list of pypacker attrs
        pypacker_attrs = (fn for fn in dir(self.pypacker) if not fn.startswith("_"))
        # Register attributes and methods
        for attr in pypacker_attrs:
            attr_instance = getattr(self.pypacker, attr)
            if isinstance(attr_instance, (str, int, Sequence, Mapping)):
                setattr(self, "xmlrpc_{0}".format(attr), wrap_attibute(attr))
                self.class_logger.debug("Registered Pypacker TG attribute %s", attr)
            elif callable(attr_instance):
                setattr(self, "xmlrpc_{0}".format(attr), wrap_method(attr))
                self.class_logger.debug("Registered Pypacker TG method %s", attr)

        # Need to wrap stop_sniff separately
        # because we have to perform additional procedures with sniffed data before sending.
        self.xmlrpc_stop_sniff = self.stop_sniff  # pylint: disable=attribute-defined-outside-init
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号