Source code for watchme.logger.spinner

'''

Copyright (C) 2019 Vanessa Sochat.

This Source Code Form is subject to the terms of the
Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
with this file, You can obtain one at http://mozilla.org/MPL/2.0/.

The watcher is actually a connection to crontab. This is what helps to schedule
the watched to check for changes at some frequency, and update the files.


'''

import sys
import time
import threading
from random import choice

[docs]class Spinner: spinning = False delay = 0.1
[docs] @staticmethod def spinning_cursor(): while 1: for cursor in '|/-\\': yield cursor
[docs] @staticmethod def balloons_cursor(): while 1: for cursor in '. o O @ *': yield cursor
[docs] @staticmethod def changing_arrows(): while 1: for cursor in '<^>v': yield cursor
[docs] def select_generator(self, generator): if generator is None: generator = choice(['cursor', 'arrow', 'balloons']) return generator
def __init__(self, delay=None, generator=None): generator = self.select_generator(generator) if generator == 'cursor': self.spinner_generator = self.spinning_cursor() elif generator == 'arrow': self.spinner_generator = self.changing_arrows() elif generator == 'balloons': self.spinner_generator = self.balloons_cursor() if delay is None: delay = 0.2 else: self.spinner_generator = self.spinning_cursor() if delay and float(delay): self.delay = delay
[docs] def run(self): while self.spinning: sys.stdout.write(next(self.spinner_generator)) sys.stdout.flush() time.sleep(self.delay) sys.stdout.write('\b') sys.stdout.flush()
[docs] def start(self): self.spinning = True threading.Thread(target=self.run).start()
[docs] def stop(self): self.spinning = False time.sleep(self.delay)