Completed
Push — master ( 05ee36...13100f )
by Oleksandr
01:13
created

elapsed_time()   A

Complexity

Conditions 2

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 3.1854
Metric Value
cc 2
dl 0
loc 4
ccs 1
cts 3
cp 0.3333
crap 3.1854
rs 10
1
# -*- coding: utf-8 -*-
2
3 1
import datetime
4 1
import time
5
6 1
from .defaults import ELAPSED_TIME_FORMAT
7 1
from .generators import generate_oid
8 1
from .prefix import make_prefix, join_prefix
9
10
11 1
class DirectPrefixInjector(object):
12
13 1
    __slots__ = ['prefix', 'enter_time', ]
14
15 1
    def __init__(self, prefix):
16 1
        self.prefix = prefix
17
18
        # `enter_time` will be set by context manager
19 1
        self.enter_time = None
20
21 1
    def mark(self, message):
22
        # Use `format` as it will automatically convert parameters to strings
23 1
        return "{0}{1}".format(self.prefix, message)
24
25 1
    @property
26
    def elapsed_time(self):
27
        if self.enter_time:
28
            return time.time() - self.enter_time
29
30 1
    def format_elapsed_time(self, fmt=None):
31
        dt = datetime.datetime.utcfromtimestamp(self.elapsed_time)
32
        return dt.strftime(fmt or ELAPSED_TIME_FORMAT)
33
34
35 1
class StaticPrefixInjector(DirectPrefixInjector):
36
37 1
    def __init__(self, prefix, delimiter=None):
38 1
        prefix = make_prefix(prefix, delimiter)
39 1
        super(StaticPrefixInjector, self).__init__(prefix)
40
41
42 1
class AutoprefixInjector(StaticPrefixInjector):
43
44 1
    def __init__(self, oid_generator=None, delimiter=None):
45 1
        autopart = generate_oid(oid_generator)
46 1
        super(AutoprefixInjector, self).__init__(autopart, delimiter)
47
48
49 1
class HybrydPrefixInjector(DirectPrefixInjector):
50
51 1
    def __init__(self, prefix, oid_generator=None, delimiter=None):
52 1
        autopart = generate_oid(oid_generator)
53 1
        prefix = join_prefix([autopart, prefix, ], delimiter)
54 1
        super(HybrydPrefixInjector, self).__init__(prefix)
55
56
57 1
def merge_injectors(*args):
58 1
    prefix = ''.join([x.prefix for x in args])
59
    return DirectPrefixInjector(prefix)
60