当前位置: 首页>>代码示例>>Python>>正文


Python Cache.get_class_by_namespace方法代码示例

本文整理汇总了Python中cache.Cache.get_class_by_namespace方法的典型用法代码示例。如果您正苦于以下问题:Python Cache.get_class_by_namespace方法的具体用法?Python Cache.get_class_by_namespace怎么用?Python Cache.get_class_by_namespace使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在cache.Cache的用法示例。


在下文中一共展示了Cache.get_class_by_namespace方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: import_dict

# 需要导入模块: from cache import Cache [as 别名]
# 或者: from cache.Cache import get_class_by_namespace [as 别名]
def import_dict(data, cache=None, **kwargs):
    """
    Rebuild any instance of a python object instance that have been serialized using export_dict.

    Args:
        _data: A dict instance containing only basic data types.
        **kwargs:

    Returns:

    """

    if cache is None:
        from cache import Cache
        cache = Cache()

    #assert (data is not None)
    if isinstance(data, dict) and '_class' in data:
        # Handle Serializable object
        cls_path = data['_class']
        cls_name = cls_path.split('.')[-1]
        cls_module = data.get('_class_module', None)
        #cls_namespace = data.get('_class_namespace')

        # HACK: Previously we were storing the complete class namespace.
        # However this was not very flexible when we played with the class hierarchy.
        # If we find a '_class_module' attribute, it mean we are doing thing the new way.
        # Otherwise we'll let it slip for now.

        if cls_module:
            cls_def = cache.get_class_by_name(cls_name, module_name=cls_module)
        else:
            cls_def = cache.get_class_by_namespace(cls_name)

        if cls_def is None:
            logging.error("Can't create class instance for {0}, did you import to module?".format(cls_path))
            return None

        instance = create_class_instance(cls_def)

        for key, val in data.items():
            if key != '_class':
                instance.__dict__[key] = import_dict(val, cache=cache)
        return instance

    # Handle array
    elif is_data_list(data):
        return [import_dict(v, cache=cache) for v in data]

    # Handle other types of data
    else:
        return data
开发者ID:SqueezeStudioAnimation,项目名称:libSerialization,代码行数:54,代码来源:core.py

示例2: import_network

# 需要导入模块: from cache import Cache [as 别名]
# 或者: from cache.Cache import get_class_by_namespace [as 别名]
def import_network(network, fn_skip=None, cache=None, **kwargs):
    """
    Recursively create class instances from provided network.
    :param network: The network to read from.
    :param fn_skip: A function taken a pymel.nodetypes.Network as argument that return True if we need to ignore a specific network.
    :param cache: Used internally.
    :return: An object instance corresponding to the provided network.
    """
    if cache is None:
        from cache import Cache
        cache = Cache()

    # Duck-type the network, if the '_class' attribute exist, it is a class instance representation.
    # Otherwise it is a simple pymel.PyNode datatypes.
    if not network.hasAttr('_class'):
        return network

    network_id = hash(network)

    # Check if the object related to the network already exist in the cache and return it if found
    cached_obj = cache.get_import_value_by_id(network_id)
    if cached_obj is not None:
        return cached_obj

    # Check if the object is blacklisted. If it is, we'll still add it to the cache in case we encounter it again.
    if fn_skip and fn_skip(network):
        cache.set_import_value_by_id(network_id, None)
        return None

    cls_name = network.getAttr('_class')

    # HACK: Previously we were storing the complete class namespace.
    # However this was not very flexible when we played with the class hierarchy.
    # If we find a '_class_module' attribute, it mean we are doing thing the new way.
    # Otherwise we'll let it slip for now.
    cls_module = network.getAttr('_class_module') if network.hasAttr('_class_module') else None
    if cls_module:
        cls_def = cache.get_class_by_name(cls_name, module_name=cls_module)
    else:
        cls_def = cache.get_class_by_namespace(cls_name)

    if cls_def is None:
        log.warning("Can't find class definiton for {0}. Returning None".format(cls_name))
        return None

    # HACK: Get latest definition
    cls_def = getattr(sys.modules[cls_def.__module__], cls_def.__name__)
    obj = cls_def()

    # Monkey patch the network if supported
    if isinstance(obj, object) and not isinstance(obj, dict):
        obj._network = network

    # Fill the import cache to make sure that self reference doesn't try to infinitly loop in it's import
    cache.set_import_value_by_id(network_id, obj)

    # Resolve wich attribute we'll want to import
    attrs_by_longname = {}
    for attr_name in pymel.listAttr(network, userDefined=True):
        if '_' != attr_name[0]:  # Attribute longName starting with '_' are considered private
            attrs_by_longname[attr_name] = network.attr(attr_name)

    # Filter compound children as we are only interested the compound value itself.
    # ex: import translate and skip translateX, translateY, translateZ
    for attr in attrs_by_longname.values():
        if attr.isCompound():
            for child in attr.getChildren():
                child_longname = child.longName()
                try:
                    attrs_by_longname.pop(child_longname)
                except KeyError:
                    pass

    for attr_name, attr in attrs_by_longname.iteritems():
        # logging.debug('Importing attribute {0} from {1}'.format(key, _network.name()))
        val = _get_network_attr(attr, fn_skip=fn_skip, cache=cache)
        # if hasattr(obj, key):
        if isinstance(obj, dict):
            obj[attr_name.longName()] = val
        else:
            setattr(obj, attr_name, val)
        # else:
        #    #logging.debug("Can't set attribute {0} to {1}, attribute does not exists".format(key, obj))

        # Update network _uid to the current python variable context
        #    if _network.hasAttr('_uid'):
        #        _network._uid.set(id(obj))

    # Hack: Find implemented class via duck-typing
    # Implement a __callbackNetworkPostBuild__ method in your class instances as a callback.
    try:
        obj.__callbackNetworkPostBuild__()
    except (AttributeError, TypeError):
        pass

    return obj
开发者ID:SqueezeStudioAnimation,项目名称:libSerialization,代码行数:98,代码来源:plugin_maya.py


注:本文中的cache.Cache.get_class_by_namespace方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。