135 lines
5.4 KiB
Python
135 lines
5.4 KiB
Python
from enum import Enum, IntFlag
|
|
|
|
|
|
class BusType(Enum):
|
|
"""An enum that indicates a type of bus. On most systems, there are
|
|
normally two different kinds of buses running.
|
|
"""
|
|
|
|
SESSION = 1 #: A bus for the current graphical user session.
|
|
SYSTEM = 2 #: A persistent bus for the whole machine.
|
|
|
|
|
|
class MessageType(Enum):
|
|
"""An enum that indicates a type of message."""
|
|
|
|
METHOD_CALL = 1 #: An outgoing method call.
|
|
METHOD_RETURN = 2 #: A return to a previously sent method call
|
|
ERROR = 3 #: A return to a method call that has failed
|
|
SIGNAL = 4 #: A broadcast signal to subscribed connections
|
|
|
|
|
|
MESSAGE_TYPE_MAP = {field.value: field for field in MessageType}
|
|
|
|
|
|
class MessageFlag(IntFlag):
|
|
"""Flags that affect the behavior of sent and received messages"""
|
|
|
|
NONE = 0
|
|
NO_REPLY_EXPECTED = 1 #: The method call does not expect a method return.
|
|
NO_AUTOSTART = 2
|
|
ALLOW_INTERACTIVE_AUTHORIZATION = 4
|
|
|
|
|
|
# This is written out because of https://github.com/python/cpython/issues/98976
|
|
MESSAGE_FLAG_MAP = {
|
|
0: MessageFlag.NONE,
|
|
1: MessageFlag.NO_REPLY_EXPECTED,
|
|
2: MessageFlag.NO_AUTOSTART,
|
|
4: MessageFlag.ALLOW_INTERACTIVE_AUTHORIZATION,
|
|
}
|
|
|
|
|
|
class NameFlag(IntFlag):
|
|
"""A flag that affects the behavior of a name request."""
|
|
|
|
NONE = 0
|
|
ALLOW_REPLACEMENT = 1 #: If another client requests this name, let them have it.
|
|
REPLACE_EXISTING = 2 #: If another client owns this name, try to take it.
|
|
DO_NOT_QUEUE = 4 #: Name requests normally queue and wait for the owner to release the name. Do not enter this queue.
|
|
|
|
|
|
class RequestNameReply(Enum):
|
|
"""An enum that describes the result of a name request."""
|
|
|
|
PRIMARY_OWNER = 1 #: The bus owns the name.
|
|
IN_QUEUE = 2 #: The bus is in a queue and may receive the name after it is relased by the primary owner.
|
|
EXISTS = 3 #: The name has an owner and NameFlag.DO_NOT_QUEUE was given.
|
|
ALREADY_OWNER = 4 #: The bus already owns the name.
|
|
|
|
|
|
class ReleaseNameReply(Enum):
|
|
"""An enum that describes the result of a name release request"""
|
|
|
|
RELEASED = 1
|
|
NON_EXISTENT = 2
|
|
NOT_OWNER = 3
|
|
|
|
|
|
class PropertyAccess(Enum):
|
|
"""An enum that describes whether a DBus property can be gotten or set with
|
|
the ``org.freedesktop.DBus.Properties`` interface.
|
|
"""
|
|
|
|
READ = "read" #: The property is readonly.
|
|
WRITE = "write" #: The property is writeonly.
|
|
READWRITE = "readwrite" #: The property can be read or written to.
|
|
|
|
def readable(self) -> bool:
|
|
"""Get whether the property can be read."""
|
|
return self == PropertyAccess.READ or self == PropertyAccess.READWRITE
|
|
|
|
def writable(self) -> bool:
|
|
"""Get whether the property can be written to."""
|
|
return self == PropertyAccess.WRITE or self == PropertyAccess.READWRITE
|
|
|
|
|
|
class ArgDirection(Enum):
|
|
"""For an introspected argument, indicates whether it is an input parameter or a return value."""
|
|
|
|
IN = "in"
|
|
OUT = "out"
|
|
|
|
|
|
class ErrorType(str, Enum):
|
|
"""An enum for the type of an error for a message reply.
|
|
|
|
:seealso: http://man7.org/linux/man-pages/man3/sd-bus-errors.3.html
|
|
"""
|
|
|
|
SERVICE_ERROR = "com.dubstepdish.dbus.next.ServiceError" #: A custom error to indicate an exported service threw an exception.
|
|
INTERNAL_ERROR = "com.dubstepdish.dbus.next.InternalError" #: A custom error to indicate something went wrong with the library.
|
|
CLIENT_ERROR = "com.dubstepdish.dbus.next.ClientError" #: A custom error to indicate something went wrong with the client.
|
|
|
|
FAILED = "org.freedesktop.DBus.Error.Failed"
|
|
NO_MEMORY = "org.freedesktop.DBus.Error.NoMemory"
|
|
SERVICE_UNKNOWN = "org.freedesktop.DBus.Error.ServiceUnknown"
|
|
NAME_HAS_NO_OWNER = "org.freedesktop.DBus.Error.NameHasNoOwner"
|
|
NO_REPLY = "org.freedesktop.DBus.Error.NoReply"
|
|
IO_ERROR = "org.freedesktop.DBus.Error.IOError"
|
|
BAD_ADDRESS = "org.freedesktop.DBus.Error.BadAddress"
|
|
NOT_SUPPORTED = "org.freedesktop.DBus.Error.NotSupported"
|
|
LIMITS_EXCEEDED = "org.freedesktop.DBus.Error.LimitsExceeded"
|
|
ACCESS_DENIED = "org.freedesktop.DBus.Error.AccessDenied"
|
|
AUTH_FAILED = "org.freedesktop.DBus.Error.AuthFailed"
|
|
NO_SERVER = "org.freedesktop.DBus.Error.NoServer"
|
|
TIMEOUT = "org.freedesktop.DBus.Error.Timeout"
|
|
NO_NETWORK = "org.freedesktop.DBus.Error.NoNetwork"
|
|
ADDRESS_IN_USE = "org.freedesktop.DBus.Error.AddressInUse"
|
|
DISCONNECTED = "org.freedesktop.DBus.Error.Disconnected"
|
|
INVALID_ARGS = "org.freedesktop.DBus.Error.InvalidArgs"
|
|
FILE_NOT_FOUND = "org.freedesktop.DBus.Error.FileNotFound"
|
|
FILE_EXISTS = "org.freedesktop.DBus.Error.FileExists"
|
|
UNKNOWN_METHOD = "org.freedesktop.DBus.Error.UnknownMethod"
|
|
UNKNOWN_OBJECT = "org.freedesktop.DBus.Error.UnknownObject"
|
|
UNKNOWN_INTERFACE = "org.freedesktop.DBus.Error.UnknownInterface"
|
|
UNKNOWN_PROPERTY = "org.freedesktop.DBus.Error.UnknownProperty"
|
|
PROPERTY_READ_ONLY = "org.freedesktop.DBus.Error.PropertyReadOnly"
|
|
UNIX_PROCESS_ID_UNKNOWN = "org.freedesktop.DBus.Error.UnixProcessIdUnknown"
|
|
INVALID_SIGNATURE = "org.freedesktop.DBus.Error.InvalidSignature"
|
|
INCONSISTENT_MESSAGE = "org.freedesktop.DBus.Error.InconsistentMessage"
|
|
MATCH_RULE_NOT_FOUND = "org.freedesktop.DBus.Error.MatchRuleNotFound"
|
|
MATCH_RULE_INVALID = "org.freedesktop.DBus.Error.MatchRuleInvalid"
|
|
INTERACTIVE_AUTHORIZATION_REQUIRED = (
|
|
"org.freedesktop.DBus.Error.InteractiveAuthorizationRequired"
|
|
)
|