@@ -5,7 +5,11 @@ class Error(Exception):
55 pass
66
77
8- class MissingFieldErrorError (Error ):
8+ class MalformedMessageError (Error ):
9+ pass
10+
11+
12+ class MissingFieldError (Error ):
913 pass
1014
1115
@@ -46,16 +50,38 @@ class MouseEvent:
4650
4751
4852def parse_mouse_event (message ):
53+ """Parses a mouse event from a JSON dictionary.
54+
55+ Args:
56+ message: A JSON dictionary with the following fields:
57+ (int) buttons
58+ (float) relativeX
59+ (float) relativeY
60+ (int) verticalWheelDelta
61+ (int) horizontalWheelDelta
62+
63+ Returns:
64+ A MouseEvent object.
65+
66+ Raises:
67+ MalformedMessageError: If the request payload is malformed.
68+ MissingFieldError: If a required field is missing from the JSON payload.
69+ InvalidButtonStateError: If the `buttons` field has an invalid value.
70+ InvalidRelativePositionError: If the `relativeX` or `relativeY` fields
71+ has an invalid value.
72+ InvalidWheelValueError: If the `verticalWheelDelta` or
73+ `horizontalWheelDelta` fields has an invalid value.
74+ """
4975 if not isinstance (message , dict ):
50- raise MissingFieldErrorError (
51- 'Mouse event parameter is invalid, expecting a dictionary data type'
52- )
76+ raise MalformedMessageError (
77+ 'Message is invalid, expecting a JSON dictionary' )
78+
5379 required_fields = ('buttons' , 'relativeX' , 'relativeY' ,
5480 'verticalWheelDelta' , 'horizontalWheelDelta' )
5581 for field in required_fields :
5682 if field not in message :
57- raise MissingFieldErrorError (
58- f'Mouse event request is missing required field: { field } ' )
83+ raise MissingFieldError ( f'Missing required field: { field } ' )
84+
5985 return MouseEvent (
6086 buttons = _parse_button_state (message ['buttons' ]),
6187 relative_x = _parse_relative_position (message ['relativeX' ]),
0 commit comments