1.3.2 - exit silently

This commit is contained in:
Doman 2022-02-03 14:20:16 +01:00
parent c1886b96fb
commit ff18f0581c
6 changed files with 26 additions and 7 deletions

View file

@ -35,7 +35,7 @@ You can use another similar projects set of words as well, for example to create
`curl -s https://raw.githubusercontent.com/Miodec/monkeytype/master/static/languages/english.json | python3 -c "import sys, json; print('\n'.join(json.load(sys.stdin)['words']))" | shuf -n20 | python3 -m fasttyper`
To exit you can either finish test, use `KeyboardInterrupt` (CTRL+C) or tap **tab** then **enter**.
To exit you can either finish test, use `KeyboardInterrupt` (CTRL+C) or tap **tab** then **enter**. After you finish test, there will be summary printed, use enter to exit from it.
## Example scripts

View file

@ -40,6 +40,7 @@ def initialize(configmap, rbuffer):
wrapper(interface)
application.summarize()
application.exit()
def main():

View file

@ -1,9 +1,14 @@
import sys
class Application:
def __init__(self, listener, user_buffer, reference_buffer, config):
self.listener = listener
self.user_buffer = user_buffer
self.reference_buffer = reference_buffer
self.config = config
self.finished = False
self.silent_exit = False
from .state import StateMachine
@ -38,14 +43,26 @@ class Application:
self.user_buffer.handle_action(action, key)
self.state.update(action, key)
self.stats.update(action, self.state.valid(), self.state.running())
except StoppingSignal:
except StoppingSignal as e:
self.state.signal_stop()
self.stats.signal_stop()
if e.silent:
self.silent_exit = True
def summarize(self):
self.stats.summarize(self.config.get("summary_template"))
self.stats.export_to_datafile(self.config.get("summary_datafile"))
if self.finished:
self.stats.summarize(self.config.get("summary_template"))
self.stats.export_to_datafile(self.config.get("summary_datafile"))
input()
def exit(self):
if self.finished or self.silent_exit:
sys.exit(0)
else:
sys.exit(1)
class StoppingSignal(Exception):
pass
def __init__(self, *args, silent=False, **kwargs):
super().__init__(*args, **kwargs)
self.silent = silent

View file

@ -21,7 +21,7 @@ class Listener:
if key == "\t":
self.tabbed = True
elif key == "\n" and self.tabbed:
raise StoppingSignal()
raise StoppingSignal(silent=True)
elif key == 263:
action = Action.del_word
self.tabbed = False

View file

@ -39,6 +39,7 @@ class StateMachine:
self.state = State.invalid
elif user_position == self.application.reference_buffer.get_lenght():
self.state = State.finished
self.application.finished = True
def valid(self):
return self.state in (State.valid, State.finished)

View file

@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
setup(
name="fasttyper",
version="1.3.1",
version="1.3.2",
author="Piotr Domanski",
author_email="pi.domanski@gmail.com",
description="Minimalistic typing exercise",