-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathsegments.py
More file actions
86 lines (66 loc) · 2.07 KB
/
segments.py
File metadata and controls
86 lines (66 loc) · 2.07 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""Segment module."""
class Segment(object):
"""Segment object class."""
def __init__(self, name, keys, change_number):
"""
Class constructor.
:param name: Segment name.
:type name: str
:param keys: List of keys belonging to the segment.
:type keys: List
"""
self._name = name
self._keys = set(keys)
self._change_number = change_number
@property
def name(self):
"""Return segment name."""
return self._name
def contains(self, key):
"""
Return whether the supplied key belongs to the segment.
:param key: User key.
:type key: str
:return: True if the user is in the segment. False otherwise.
:rtype: bool
"""
return key in self._keys
def update(self, to_add, to_remove):
"""
Add supplied keys to the segment.
:param to_add: List of keys to add.
:type to_add: list
:param to_remove: List of keys to remove.
:type to_remove: list
"""
self._keys = self._keys.union(set(to_add)).difference(to_remove)
@property
def keys(self):
"""
Return the segment keys.
:return: A set of the segment keys
:rtype: set
"""
return self._keys
@property
def change_number(self):
"""Return segment change number."""
return self._change_number
@change_number.setter
def change_number(self, new_value):
"""
Set new change number.
:param new_value: New change number.
:type new_value: int
"""
self._change_number = new_value
def from_raw(raw_segment):
"""
Parse a new segment from a raw segment_changes response.
:param raw_segment: Segment parsed from segment changes response.
:type raw_segment: dict
:return: New segment model object
:rtype: splitio.models.segment.Segment
"""
keys = set(raw_segment['added']).difference(raw_segment['removed'])
return Segment(raw_segment['name'], keys, raw_segment['till'])