Skip to content

Commit

Permalink
✨ Now named timer function can be used
Browse files Browse the repository at this point in the history
  • Loading branch information
peinan committed Jul 31, 2019
1 parent 9c2a57c commit 9ad79bd
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 27 deletions.
15 changes: 13 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,22 +1,33 @@
[tool.poetry]
name = "swpy"
version = "0.1.1"
version = "0.1.2"
description = "A simple, yet useful stopwatch library."
authors = ["Peinan ZHANG <[email protected]>"]

license = "MIT"

authors = [
"Peinan ZHANG <[email protected]>"
]

readme = "README.md"

homepage = "https://github.com/peinan/swpy"
repository = "https://github.com/peinan/swpy"

keywords = ["stopwatch", "timer"]


[tool.poetry.dependencies]
python = "^3.6"


[tool.poetry.dev-dependencies]
pytest = "^4.0"
tox = "^3.9"
pytest-cov = "^2.7"
codecov = "^2.0"


[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
33 changes: 19 additions & 14 deletions swpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,11 @@
[timer-1557406243.3309178] finish time: 1.00 sec.
"""

import time
import logging

import time

__author__ = 'Peinan ZHANG'
__version__ = (0, 1, 1)
__version__ = (0, 1, 2)
__license__ = 'MIT'


Expand All @@ -55,15 +54,17 @@ def __init__(self, name=None, logger=None, level=logging.DEBUG, digits=2, callba
[timer-1557406243.3309178] started.
[timer-1557406243.3309178] finish time: 1.00 sec.
"""
self.name = name if name else f'timer-{time.time()}'
self.timername = name if name else f'timer-{time.time()}'
self.print = print if not logger else lambda msg: logger.log(level, msg)
self.level = level
self.digits = digits
self.callback = callback

self.started_at = time.time()
self.times = [self.started_at]
self.print(f'[{self.name}] started.')
self.stopped_at = None
self.elapsed = None
self.print(f'[{self.timername}] started.')

def __enter__(self):
return self
Expand All @@ -74,42 +75,46 @@ def __exit__(self, exc_type, exc_value, traceback):

self.elapsed = self.stopped_at - self.started_at

msg = f'[{self.name}] finish time: {self.elapsed:.{self.digits}f} sec.'
msg = f'[{self.timername}] finish time: {self.elapsed:.{self.digits}f} sec.'
self.print(msg)

if self.callback: self.callback(msg)

def start(self, callback=None):
def start(self, title='', callback=None):
self.started_at = time.time()
self.times[0] = self.started_at

msg = f'[{self.name}] started.'
title_block = f'[{title}] ' if title else ''
msg = f'[{self.timername}] {title_block}started.'
self.print(msg)

if callback: callback(msg)

def stop(self, callback=None):
def stop(self, title='', callback=None):
self.stopped_at = time.time()
self.times.append(self.stopped_at)

self.elapsed = self.stopped_at - self.started_at

msg = f'[{self.name}] finish time: {self.elapsed:.{self.digits}f} sec.'
title_block = f'[{title}] ' if title else ''
msg = f'[{self.timername}] {title_block}finish time: {self.elapsed:.{self.digits}f} sec.'
self.print(msg)

if callback: callback(msg)
elif self.callback: self.callback(msg)

def split(self, callback=None):
def split(self, title='', callback=None):
self.times.append(time.time())
msg = f'[{self.name}] split time: {self.times[-1] - self.times[0]:.{self.digits}f} sec.'
title_block = f'[{title}] ' if title else ''
msg = f'[{self.timername}] {title_block}split time: {self.times[-1] - self.times[0]:.{self.digits}f} sec.'
self.print(msg)

if callback: callback(msg)

def lap(self, callback=None):
def lap(self, title='', callback=None):
self.times.append(time.time())
msg = f'[{self.name}] lap time: {self.times[-1] - self.times[-2]:.{self.digits}f} sec.'
title_block = f'[{title}] ' if title else ''
msg = f'[{self.timername}] {title_block}lap time: {self.times[-1] - self.times[-2]:.{self.digits}f} sec.'
self.print(msg)

if callback: callback(msg)
Expand Down
34 changes: 23 additions & 11 deletions test_swpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
# Author: Peinan ZHANG
# Created at: 2019-05-09

from swpy import Timer

import time

import unittest
from unittest.mock import Mock

from swpy import Timer


class TimerTestCase(unittest.TestCase):

Expand All @@ -31,56 +30,69 @@ def test_callback(self):
f.assert_called_once_with(true_msg)

def test_start(self):
true_msg = '[test] finish time: 0.50 sec.'
true_msg = '[test] [exp1] finish time: 0.50 sec.'
f = Mock()

t = Timer(name='test', callback=f)
time.sleep(0.1)
t.start()
time.sleep(0.5)
t.stop()
t.stop('exp1')

self.assertAlmostEqual(t.elapsed, 0.5, 1)
f.assert_called_once_with(true_msg)

def test_stop(self):
true_msg = '[test] finish time: 0.50 sec.'
true_msg = '[test] [exp1] finish time: 0.50 sec.'
f = Mock()

t = Timer(name='test')
time.sleep(0.5)
t.stop(callback=f)
t.stop(title='exp1', callback=f)

self.assertAlmostEqual(t.elapsed, 0.5, 1)
f.assert_called_once_with(true_msg)

def test_split(self):
true_msg = '[test] split time: 0.50 sec.'
true_msg = '[test] [exp1] split time: 0.50 sec.'
f = Mock()

t = Timer(name='test')
time.sleep(0.2)
t.split()
time.sleep(0.3)
t.split(callback=f)
t.split('exp1', callback=f)
time.sleep(0.1)
t.stop()

self.assertAlmostEqual(t.elapsed, 0.6, 1)
f.assert_called_once_with(true_msg)

def test_lap(self):
true_msg = '[test] lap time: 0.20 sec.'
true_msg = '[test] [exp1] lap time: 0.20 sec.'
f = Mock()

t = Timer(name='test')
time.sleep(0.3)
t.lap()
time.sleep(0.2)
t.lap(callback=f)
t.lap('exp1', callback=f)
time.sleep(0.1)
t.stop()

self.assertAlmostEqual(t.elapsed, 0.6, 1)
f.assert_called_once_with(true_msg)

def test_wo_title(self):
true_msg = '[test] finish time: 0.50 sec.'
f = Mock()

t = Timer(name='test', callback=f)
time.sleep(0.1)
t.start()
time.sleep(0.5)
t.stop()

f.assert_called_once_with(true_msg)


0 comments on commit 9ad79bd

Please sign in to comment.