-
Notifications
You must be signed in to change notification settings - Fork 61
/
string_set.py
68 lines (59 loc) 路 2.57 KB
/
string_set.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
67
68
#
# Copyright (c) 2022, Neptune Labs Sp. z o.o.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import typing
from typing import Iterable, Union
from neptune.new.attributes.sets.set import Set
from neptune.new.internal.operation import AddStrings, ClearStringSet, RemoveStrings
from neptune.new.internal.utils import (
is_collection,
verify_collection_type,
verify_type,
)
from neptune.new.types.sets.string_set import StringSet as StringSetVal
class StringSet(Set):
def assign(self, value: StringSetVal, wait: bool = False):
verify_type("value", value, StringSetVal)
with self._container.lock():
if not value.values:
self._enqueue_operation(ClearStringSet(self._path), wait=wait)
else:
self._enqueue_operation(ClearStringSet(self._path), wait=False)
self._enqueue_operation(AddStrings(self._path, value.values), wait=wait)
def add(self, values: Union[str, Iterable[str]], wait: bool = False):
values = self._to_proper_value_type(values)
with self._container.lock():
self._enqueue_operation(AddStrings(self._path, set(values)), wait)
def remove(self, values: Union[str, Iterable[str]], wait: bool = False):
values = self._to_proper_value_type(values)
with self._container.lock():
self._enqueue_operation(RemoveStrings(self._path, set(values)), wait)
def clear(self, wait: bool = False):
with self._container.lock():
self._enqueue_operation(ClearStringSet(self._path), wait)
def fetch(self) -> typing.Set[str]:
# pylint: disable=protected-access
val = self._backend.get_string_set_attribute(
self._container_id, self._container_type, self._path
)
return val.values
@staticmethod
def _to_proper_value_type(values: Union[str, Iterable[str]]) -> Iterable[str]:
if is_collection(values):
verify_collection_type("values", values, str)
return list(values)
else:
verify_type("values", values, str)
return [values]