LinVAM/keyboard/_keyboard_event.py

54 lines
1.6 KiB
Python

# -*- coding: utf-8 -*-
from time import time as now
import json
from ._canonical_names import canonical_names, normalize_name
try:
basestring
except NameError:
basestring = str
KEY_DOWN = 'down'
KEY_UP = 'up'
class KeyboardEvent(object):
event_type = None
scan_code = None
name = None
time = None
device = None
modifiers = None
is_keypad = None
def __init__(self, event_type, scan_code, name=None, time=None, device=None, modifiers=None, is_keypad=None):
self.event_type = event_type
self.scan_code = scan_code
self.time = now() if time is None else time
self.device = device
self.is_keypad = is_keypad
self.modifiers = modifiers
if name:
self.name = normalize_name(name)
def to_json(self, ensure_ascii=False):
attrs = dict(
(attr, getattr(self, attr)) for attr in ['event_type', 'scan_code', 'name', 'time', 'device', 'is_keypad']
if not attr.startswith('_') and getattr(self, attr) is not None
)
return json.dumps(attrs, ensure_ascii=ensure_ascii)
def __repr__(self):
return 'KeyboardEvent({} {})'.format(self.name or 'Unknown {}'.format(self.scan_code), self.event_type)
def __eq__(self, other):
return (
isinstance(other, KeyboardEvent)
and self.event_type == other.event_type
and (
not self.scan_code or not other.scan_code or self.scan_code == other.scan_code
) and (
not self.name or not other.name or self.name == other.name
)
)