# SPDX-License-Identifier: GPL-3.0-or-later # Haketilo proxy data and configuration. # # This file is part of Hydrilla&Haketilo. # # Copyright (C) 2022 Wojtek Kosior # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # # I, Wojtek Kosior, thereby promise not to sue for violation of this # file's license. Although I request that you do not make use this code # in a proprietary program, I am not going to enforce this in court. """ This module contains logic for keeping track of all settings, rules, mappings and resources. """ # Enable using with Python 3.7. from __future__ import annotations import typing as t import dataclasses as dc from threading import Lock from pathlib import Path from ..pattern_tree import PatternTree from .store import HaketiloStore from . import policies def make_pattern_tree_with_builtin_policies() -> PatternTree[policies.Policy]: """....""" # TODO: implement return PatternTree() tree_field = dc.field(default_factory=make_pattern_tree_with_builtin_policies) @dc.dataclass class HaketiloState(HaketiloStore): """....""" pattern_tree: PatternTree[policies.Policy] = tree_field default_allow: bool = False state_lock: Lock = dc.field(default_factory=Lock) def select_policy(self, url: str, allow_disabled=False) -> policies.Policy: """....""" with self.state_lock: pattern_tree = self.pattern_tree try: for policy_set in pattern_tree.search(url): # if policy.enabled or allow_disabled: # return policy pass return policies.FallbackBlockPolicy() except Exception as e: return policies.ErrorBlockPolicy(e)