-
-
Notifications
You must be signed in to change notification settings - Fork 160
Expand file tree
/
Copy pathmouse_hook.py
More file actions
75 lines (61 loc) · 1.82 KB
/
Copy pathmouse_hook.py
File metadata and controls
75 lines (61 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
"""
Platform dispatcher shim for mouse hook implementations.
"""
import sys
import types
from core.mouse_hook_types import MouseEvent
if sys.platform == "win32":
from core import mouse_hook_windows as _platform
elif sys.platform == "darwin":
from core import mouse_hook_macos as _platform
elif sys.platform == "linux":
from core import mouse_hook_linux as _platform
else:
from core import mouse_hook_stub as _platform
MouseHook = _platform.MouseHook
_RESERVED = {
"MouseHook",
"MouseEvent",
"_platform",
"_MouseHookModule",
"_RESERVED",
"__all__",
"__class__",
"__doc__",
"__file__",
"__loader__",
"__name__",
"__package__",
"__spec__",
"__cached__",
"__builtins__",
}
def _should_forward(name):
return name not in _RESERVED
class _MouseHookModule(types.ModuleType):
def __getattr__(self, name):
if name == "MouseEvent":
return MouseEvent
try:
return getattr(_platform, name)
except AttributeError as exc:
raise AttributeError(
f"module {__name__!r} has no attribute {name!r}"
) from exc
def __setattr__(self, name, value):
if _should_forward(name):
setattr(_platform, name, value)
return
super().__setattr__(name, value)
def __delattr__(self, name):
if _should_forward(name) and hasattr(_platform, name):
delattr(_platform, name)
return
super().__delattr__(name)
def __dir__(self):
return sorted(set(super().__dir__()) | set(dir(_platform)) | {"MouseEvent"})
module = sys.modules[__name__]
module.__class__ = _MouseHookModule
module.MouseHook = MouseHook
module.MouseEvent = MouseEvent
module.__all__ = ["MouseHook", "MouseEvent"] + list(getattr(_platform, "__all__", []))