# Copyright (C) 2025 James Brotosky, Brandon Wickline # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . """ Policy model representing policy data and relationships. """ # policy.py from dataclasses import asdict, dataclass, field import json from typing import Optional @dataclass(order=True) class Policy: name: str groupid: int = field(compare=False) hidden: bool = field(compare=False) parent: Optional[str] = field(default=None, compare=False) def __repr__(self) -> str: attrs = ", ".join( f"{key}={repr(value)}" for key, value in self.__dict__.items() ) return f"" def to_dict(self) -> dict: return asdict(self) def to_json(self) -> str: return json.dumps(self.to_dict(), default=str) class Allowlist: """ Represents Allowlist """ def __init__(self, applicationid, name, version): self.applicationid = applicationid self.name = name self.version = version def __repr__(self): # Show all current attributes, including dynamically added ones attrs = ", ".join( f"{key}={repr(value)}" for key, value in self.__dict__.items() ) return f"" def to_dict(self): # Return all attributes as a dictionary return self.__dict__ def to_json(self): # Convert to JSON string, handling non-serializable types gracefully return json.dumps(self.to_dict(), default=str)