File: timing.py

package info (click to toggle)
libreswan 5.2-2.3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 81,644 kB
  • sloc: ansic: 129,988; sh: 32,018; xml: 20,646; python: 10,303; makefile: 3,022; javascript: 1,506; sed: 574; yacc: 511; perl: 264; awk: 52
file content (67 lines) | stat: -rw-r--r-- 2,120 bytes parent folder | download | duplicates (5)
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
# Some when did this program start?
#
# Copyright (C) 2015-2016 Andrew Cagney <cagney@gnu.org>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.  See <https://www.gnu.org/licenses/gpl2.txt>.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.

# Everything uses this as the reference time.  There must be a more
# correct way.

from datetime import datetime


START_TIME = datetime.now()


class Lapsed:
    """A lapsed timer that prints as seconds by default

    As part of 'with' it automatically starts/stops.

    """

    def __init__(self, start=None):
        self.start = start or datetime.now()
        self.stop = None

    def format(self, now=None):
        now = now or self.stop or datetime.now()
        delta = now - self.start
        deciseconds = (delta.microseconds / 100000)
        seconds = delta.seconds % 60
        minutes = (delta.seconds // 60) % 60
        hours = (delta.seconds // 60 // 60) % 24
        days = delta.days
        if days > 0:
            # need days
            return str(delta)
        elif hours > 0:
            return "%d:%02d:%02d.%02d" % (hours, minutes, seconds,
                                          deciseconds)
        elif minutes > 0:
            return "%d:%02d.%02d" % (minutes, seconds, deciseconds)
        else:
            return "%d.%02d" % (seconds, deciseconds)

    def seconds(self, now=None):
        now = now or self.stop or datetime.now()
        delta = now - self.start
        return delta.total_seconds()

    def __enter__(self):
        self.start = datetime.now()
        return self

    def __exit__(self, type, value, traceback):
        self.stop = datetime.now()

    def __str__(self):
        return "%.01f seconds" % self.seconds()