• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

manahl / PyBloqs / e0ef5b11-a828-46c3-b0cf-c452bea7e733

18 Sep 2024 08:17PM UTC coverage: 87.335% (-0.04%) from 87.377%
e0ef5b11-a828-46c3-b0cf-c452bea7e733

Pull #112

circleci

rspencer01
Add pytest
Pull Request #112: Upgrade code from python 2

99 of 117 new or added lines in 20 files covered. (84.62%)

17 existing lines in 2 files now uncovered.

2117 of 2424 relevant lines covered (87.33%)

2.62 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.64
/pybloqs/util.py
1
import base64
3✔
2
import calendar
3✔
3
import itertools
3✔
4
import re
3✔
5
import zlib
3✔
6

7

8
def dt_epoch_msecs(value):
3✔
9
    """
10
    Calculate miliseconds since epoch start for python datetimes.
11
    """
12
    return int(calendar.timegm(value.timetuple())) * 1000
3✔
13

14

15
def np_dt_epoch_msec(value):
3✔
16
    """
17
    Calculate miliseconds since epoch start for numpy datetimes.
18
    """
NEW
19
    return value.astype(int) / 1000
×
20

21

22
def encode_string(string, level=9):
3✔
23
    """
24
    Compresses and base64 encodes the supplied string
25
    :param string: String to encode and compress
26
    :param level: Compression level
27
    :return: Compressed and encoded string
28
    """
29
    return base64.b64encode(zlib.compress(string.encode("utf8"), level)[2:-4])
3✔
30

31

32
def camelcase(value):
3✔
33
    """
34
    Converts 'under_score_string' -> 'underScoreString'
35

36
    :param value: Underscore separated string
37
    :return: CamelCased string
38
    """
39
    rest = value.split("_")
3✔
40
    return rest[0] + "".join(word.title() for word in rest[1:])
3✔
41

42

43
def underscorecase(camelcased):
3✔
44
    """
45
    Converts 'underScoreString' -> 'under_score_string'
46

47
    :param value: CamelCased string
48
    :return: Underscore separated string
49
    """
50
    return re.sub("([A-Z]+)", r"_\1", camelcased).lower()
×
51

52

53
def cfg_to_prop_string(cfg, key_transform=lambda k: k, value_transform=lambda v: v, separator=";"):
3✔
54
    """
55
    Convert the config object to a property string. Useful for constructing CSS and javascript
56
    object init strings.
57

58
    Underscores are replaced with dashes and values are converted to lower case.
59
    """
60
    return separator.join([f"{key_transform(key)}:{value_transform(value)}" for key, value in cfg.items()])
3✔
61

62

63
def cfg_to_css_string(cfg):
3✔
64
    return cfg_to_prop_string(cfg, lambda k: k.replace("_", "-"), lambda v: str(v).lower())
3✔
65

66

67
class Cfg(dict):
3✔
68
    """
69
    Provides plumbing for inheritable block parameters.
70
    """
71

72
    def inherit(self, parent):
3✔
73
        """
74
        Inherit all parent settings that the current config does not define.
75
        """
76
        return self.__class__(Cfg._mergedicts(self, parent, False))
3✔
77

78
    def inherit_many(self, *args, **kwargs):
3✔
79
        """
80
        Inherit many settings at once.
81
        """
82
        inherit_collapsed = self._collapse_args(args, kwargs)
3✔
83
        return self.inherit(inherit_collapsed)
3✔
84

85
    def override(self, parent):
3✔
86
        """
87
        Override all settings specified in the overrides.
88
        """
89
        return self.__class__(Cfg._mergedicts(self, parent, True))
3✔
90

91
    def override_many(self, *args, **kwargs):
3✔
92
        """
93
        Override many settings at once.
94
        """
95
        override_collapsed = self._collapse_args(args, kwargs)
3✔
96
        return self.override(override_collapsed)
3✔
97

98
    @staticmethod
3✔
99
    def _collapse_args(args, kwargs):
3✔
100
        inherit_agg = Cfg(kwargs)
3✔
101
        for arg in args:
3✔
102
            # If we got a type as configuration, instantiate it
103
            if isinstance(arg, type):
3✔
104
                arg = arg()
×
105

106
            inherit_agg = inherit_agg.inherit(arg)
3✔
107
        return inherit_agg
3✔
108

109
    @staticmethod
3✔
110
    def _mergedicts(dict1, dict2, take_second):
3✔
111
        for k in set(itertools.chain(dict1.keys(), dict2.keys())):
3✔
112
            if k in dict1 and k in dict2:
3✔
113
                v1 = dict1[k]
3✔
114
                v2 = dict2[k]
3✔
115
                if isinstance(v1, dict) and isinstance(v2, dict):
3✔
116
                    # The merged sub-dict type should be the operand type based on take_second
117
                    ctor = v2.__class__ if take_second else v1.__class__
3✔
118
                    yield (k, ctor(Cfg._mergedicts(v1, v2, take_second)))
3✔
119
                else:
120
                    yield (k, v2 if take_second else v1)
3✔
121
            elif k in dict1:
3✔
122
                yield (k, dict1[k])
3✔
123
            else:
124
                yield (k, dict2[k])
3✔
125

126
    def __getattr__(self, item):
3✔
127
        return self[item]
3✔
128

129
    def __setattr__(self, name, value):
3✔
130
        self[name] = value
3✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc