forked from openedx/edx-search
/
utils.py
66 lines (48 loc) · 1.71 KB
/
utils.py
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
""" Utility classes to support others """
import importlib
import collections
def _load_class(class_path, default):
""" Loads the class from the class_path string """
if class_path is None:
return default
component = class_path.rsplit('.', 1)
result_processor = getattr(
importlib.import_module(component[0]),
component[1],
default
) if len(component) > 1 else default
return result_processor
def _is_iterable(item):
""" Checks if an item is iterable (list, tuple, generator), but not string """
return isinstance(item, collections.Iterable) and not isinstance(item, basestring)
class ValueRange(object):
""" Object to represent a range of values """
def __init__(self, lower=None, upper=None):
self._lower = lower
self._upper = upper
@property
def upper(self):
""" return class member _upper as a proerty value """
return self._upper
@property
def lower(self):
""" return class member _lower as a proerty value """
return self._lower
@property
def upper_string(self):
""" return string representation of _upper as a proerty value """
return str(self._upper)
@property
def lower_string(self):
""" return string representation of _upper as a proerty value """
return str(self._lower)
class DateRange(ValueRange):
""" Implemetation of ValueRange for Date """
@property
def upper_string(self):
""" use isoformat for _upper date's string format """
return self._upper.isoformat()
@property
def lower_string(self):
""" use isoformat for _lower date's string format """
return self._lower.isoformat()