Server IP : 15.235.198.142 / Your IP : 216.73.216.22 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ballsack 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/landscape/message_schemas/ |
Upload File : |
from landscape.lib.schema import Any from landscape.lib.schema import Bytes from landscape.lib.schema import Constant from landscape.lib.schema import Float from landscape.lib.schema import KeyDict class Message(KeyDict): """ Like L{KeyDict}, but with three predefined keys: C{type}, C{api}, and C{timestamp}. Of these, C{api} and C{timestamp} are optional. @param type: The type of the message. The C{type} key will need to match this as a constant. @param schema: A dict of additional schema in a format L{KeyDict} will accept. @param optional: An optional list of keys that should be optional. @param api: The server API version needed to send this message, if C{None} any version is fine. """ def __init__(self, type, schema, optional=None, api=None): self.type = type self.api = api schema["timestamp"] = Float() schema["api"] = Any(Bytes(), Constant(None)) schema["type"] = Constant(type) if optional is not None: optional.extend(["timestamp", "api"]) else: optional = ["timestamp", "api"] super().__init__(schema, optional=optional) def coerce(self, value): for k in list(value.keys()): if k not in self.schema: # We don't know about this field, just discard it. This # is useful when a client that introduced some new field # in a message talks to an older server, that don't understand # the new field yet. value.pop(k) return super().coerce(value)