Ejemplo n.º 1
0
    def send_data_to_cache(cls):
        r = get_redis_connect()
        pipe = r.pipeline()
        for obj in cls.objects.filter(is_active=True):
            pipe.set(obj.key, obj.dump_rule)

        pipe.execute()
    def _get_policy_statements_from_redis(self) -> List[dict]:
        key = f"{PREFIX}{self.name}"

        r = get_redis_connect()
        statements_raw = r.get(key)

        if statements_raw is None:
            statements = self._get_policy_statements_from_db()
            r.set(key, json.dumps(statements))
        else:
            statements = json.loads(statements_raw)

        return statements + self.ADDITIONAL_STATEMENTS
Ejemplo n.º 3
0
def clear_cache(chunk_size: int = 100) -> bool:
    if not PERMISSION_RULES_SETTINGS["use_redis"]:
        return False

    r = get_redis_connect()
    prefix = PERMISSION_RULES_SETTINGS["prefix"]

    cursor = 0
    ns_keys = prefix + "*"
    while cursor != 0:
        cursor, keys = r.scan(cursor=cursor, match=ns_keys, count=chunk_size)
        if keys:
            r.delete(*keys)

    return True
Ejemplo n.º 4
0
def remove_rule_from_cache_signal(sender, instance, using, **kwargs):
    if USE_REDIS:
        r = get_redis_connect()
        r.delete(*[instance.key])
Ejemplo n.º 5
0
def cache_rule_signal(sender, instance, created, **kwargs):
    if USE_REDIS and instance.is_active:
        r = get_redis_connect()
        r.delete(*[instance.key])
        r.set(instance.key, instance.dump_rule)