|
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
|
|
|
|