olan-events 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ Metadata-Version: 2.4
2
+ Name: olan-events
3
+ Version: 0.1.0
4
+ Summary: An events library for simple use.
5
+ License-Expression: MIT
@@ -0,0 +1 @@
1
+ from .events import *
@@ -0,0 +1,79 @@
1
+ import sys
2
+ import tty
3
+ import termios
4
+ from dataclasses import dataclass
5
+
6
+ # Event types
7
+ TypeKey = "key"
8
+ NewLine = "newline"
9
+ EOF = "eof"
10
+ KI = "keyboard_interrupt"
11
+
12
+ _callback = None
13
+
14
+
15
+ @dataclass
16
+ class Event:
17
+ type: str
18
+ input: str | None = None
19
+
20
+
21
+ def set(func):
22
+ global _callback
23
+ _callback = func
24
+ return func
25
+
26
+
27
+ def getev():
28
+ fd = sys.stdin.fileno()
29
+ old = termios.tcgetattr(fd)
30
+
31
+ try:
32
+ tty.setraw(fd)
33
+
34
+ while True:
35
+ ch = sys.stdin.read(1)
36
+
37
+ # Ctrl+C
38
+ if ch == "\x03":
39
+ return Event(KI)
40
+
41
+ # Ctrl+D
42
+ if ch == "\x04":
43
+ return Event(EOF)
44
+
45
+ # Enter
46
+ if ch in ("\r", "\n"):
47
+ return Event(NewLine)
48
+
49
+ # stdin closed
50
+ if ch == "":
51
+ return Event(EOF)
52
+
53
+ # Normal key
54
+ return Event(TypeKey, ch)
55
+
56
+ finally:
57
+ termios.tcsetattr(fd, termios.TCSADRAIN, old)
58
+
59
+
60
+ def run():
61
+ if _callback is None:
62
+ raise RuntimeError("No event handler registered. Use @events.set.")
63
+
64
+ while True:
65
+ event = getev()
66
+ _callback(event)
67
+
68
+ def post(name):
69
+ return name
70
+
71
+ def do(event, input=None):
72
+ """
73
+ Dispatch an event immediately.
74
+ """
75
+ if _callback is None:
76
+ raise RuntimeError("No callback registered. Use @events.set.")
77
+
78
+ _callback(Event(event, input))
79
+
@@ -0,0 +1,5 @@
1
+ Metadata-Version: 2.4
2
+ Name: olan-events
3
+ Version: 0.1.0
4
+ Summary: An events library for simple use.
5
+ License-Expression: MIT
@@ -0,0 +1,7 @@
1
+ pyproject.toml
2
+ events/__init__.py
3
+ events/events.py
4
+ olan_events.egg-info/PKG-INFO
5
+ olan_events.egg-info/SOURCES.txt
6
+ olan_events.egg-info/dependency_links.txt
7
+ olan_events.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ events
@@ -0,0 +1,9 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "olan-events"
7
+ license = "MIT"
8
+ version = "0.1.0"
9
+ description = "An events library for simple use."
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+