Пример #1
0
def _generate_cache_key(view, queryset):
    view_name = view.__class__.__name__
    try:
        key_str = queryset.query.__str__()
    except EmptyResultSet:
        # 无查询的空对象
        key_str = 'EmptyResultSet'

    query_data_fields = getattr(view, 'query_data_fields', [])
    query_data_fields.sort()
    key_str = '%s:%s' % (key_str, md5(json.dumps(query_data_fields)))

    cache_key_prefix = view.get_cache_key_prefix()
    if cache_key_prefix is not None:
        key_str = '%s:%s' % (cache_key_prefix, key_str)

    return md5('%s:%s' % (view_name, key_str))
Пример #2
0
def default_key_func(method, *args, **kwargs):
    arg_dict = inspect.getcallargs(method, *args, **kwargs)
    arg_dict.update({
        '__qualname__': method.__qualname__,
        '__module__': method.__module__,
    })

    arg_dict.pop('self', None)
    arg_dict.pop('cls', None)

    return md5(json.dumps(arg_dict, sort_keys=True).encode('utf-8'))
Пример #3
0
def sync_openid(openid):
    if not openid:
        return None

    if not WeUser.objects.filter(openid=openid).exists():
        with transaction.atomic():
            user = User.objects.create(username=openid)
            WeUser.objects.create(
                user=user,
                openid=openid,
                openid_key=md5(openid),
            )
Пример #4
0
def get_func_key(func):
    """
    获取函数识别键,顶层函数模块名区分,内部函数id区分
    :param func: 函数
    :return: 函数识别键
    """
    func_name = func.__qualname__
    complete_func_name = f'{func.__module__}.{func_name}'
    if '<locals>' in func_name.split('.'):
        complete_func_name = f'{complete_func_name}-{id(func)}'

    return md5(complete_func_name)
Пример #5
0
def _exe_key(func, args, kwargs):
    """方法识别key

    :param func: 待执行方法
    :param args: 方法args参数
    :param kwargs: 方法kwargs参数
    :return: 方法识别key
    """
    exe_key = md5('{func}(*{args}, **{kwargs})'.format(
        func=pickle.dumps(func),
        args=pickle.dumps(args),
        kwargs=pickle.dumps(kwargs),
    ))

    return exe_key
Пример #6
0
def _get_serializer_key(serializer, fields=None):
    """
    获取序列化键

    :param serializer: 序列化对象
    :param fields: 关联字段
    :return: 序列化键
    """
    validated_data = serializer.validated_data
    fields = fields if fields is not None else validated_data.keys()
    values = [str(validated_data.get(field) or '') for field in fields]
    value_str = '|'.join(values)
    serializer_class = serializer.__class__
    return md5(
        f'{serializer_class.__module__}.{serializer_class.__qualname__}:{value_str}'
    )
Пример #7
0
 def get_version(cls, name):
     return md5('%s:cache' % name)