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