Skip to content

Commit f09310f

Browse files
committed
#174 removed multiple inheritance in named tuples
1 parent 29b5fc2 commit f09310f

File tree

4 files changed

+36
-40
lines changed

4 files changed

+36
-40
lines changed

cloudiscovery/provider/aws/common_aws.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from shared.common import (
1010
ResourceCache,
1111
message_handler,
12-
ResourceTag,
1312
Filterable,
1413
exit_critical,
1514
BaseCommand,
@@ -172,7 +171,7 @@ def init_region_cache(self, region):
172171
).paths()
173172

174173

175-
def resource_tags(resource_data: dict) -> List[ResourceTag]:
174+
def resource_tags(resource_data: dict) -> List[Filterable]:
176175
if isinstance(resource_data, str):
177176
return []
178177

@@ -196,7 +195,7 @@ def resource_tags(resource_data: dict) -> List[ResourceTag]:
196195
return tags
197196

198197

199-
def resource_tags_from_tuples(tuples: List[Dict[str, str]]) -> List[ResourceTag]:
198+
def resource_tags_from_tuples(tuples: List[Dict[str, str]]) -> List[Filterable]:
200199
"""
201200
List of key-value tuples that store tags, syntax:
202201
[
@@ -218,13 +217,13 @@ def resource_tags_from_tuples(tuples: List[Dict[str, str]]) -> List[ResourceTag]
218217
result = []
219218
for tuple_elem in tuples:
220219
if "Key" in tuple_elem and "Value" in tuple_elem:
221-
result.append(ResourceTag(key=tuple_elem["Key"], value=tuple_elem["Value"]))
220+
result.append(Filterable(key=tuple_elem["Key"], value=tuple_elem["Value"]))
222221
elif "key" in tuple_elem and "value" in tuple_elem:
223-
result.append(ResourceTag(key=tuple_elem["key"], value=tuple_elem["value"]))
222+
result.append(Filterable(key=tuple_elem["key"], value=tuple_elem["value"]))
224223
return result
225224

226225

227-
def resource_tags_from_dict(tags: Dict[str, str]) -> List[ResourceTag]:
226+
def resource_tags_from_dict(tags: Dict[str, str]) -> List[Filterable]:
228227
"""
229228
List of key-value dict that store tags, syntax:
230229
{
@@ -233,7 +232,7 @@ def resource_tags_from_dict(tags: Dict[str, str]) -> List[ResourceTag]:
233232
"""
234233
result = []
235234
for key, value in tags.items():
236-
result.append(ResourceTag(key=key, value=value))
235+
result.append(Filterable(key=key, value=value))
237236
return result
238237

239238

cloudiscovery/shared/command.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
Resource,
1010
ResourceEdge,
1111
Filterable,
12-
ResourceTag,
13-
ResourceType,
1412
BaseOptions,
1513
message_handler,
1614
ResourceProvider,
@@ -161,14 +159,14 @@ def filter_resources(
161159
for resource in resources:
162160
matches_filter = False
163161
for resource_filter in filters:
164-
if isinstance(resource_filter, ResourceTag):
162+
if resource_filter.is_tag():
165163
for resource_tag in resource.tags:
166164
if (
167165
resource_tag.key == resource_filter.key
168166
and resource_tag.value == resource_filter.value
169167
):
170168
matches_filter = True
171-
elif isinstance(resource_filter, ResourceType):
169+
elif resource_filter.is_type():
172170
if resource.digest.type == resource_filter.type:
173171
matches_filter = True
174172
if matches_filter:

cloudiscovery/shared/common.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,17 @@ class ResourceEdge(NamedTuple):
4747
label: str = None
4848

4949

50-
class Filterable:
51-
pass
50+
# Either key/value is passed or type
51+
class Filterable(NamedTuple):
52+
key: str = None
53+
value: str = None
54+
type: str = None
55+
56+
def is_type(self):
57+
return self.type is not None
58+
59+
def is_tag(self):
60+
return self.key is not None and self.value is not None
5261

5362

5463
class LimitsValues(NamedTuple):
@@ -67,21 +76,12 @@ class SecurityValues(NamedTuple):
6776
value: str
6877

6978

70-
class ResourceTag(NamedTuple, Filterable):
71-
key: str
72-
value: str
73-
74-
75-
class ResourceType(NamedTuple, Filterable):
76-
type: str
77-
78-
7979
class Resource(NamedTuple):
8080
digest: ResourceDigest
8181
name: str = ""
8282
details: str = ""
8383
group: str = ""
84-
tags: List[ResourceTag] = []
84+
tags: List[Filterable] = []
8585
limits: LimitsValues = None
8686
security: SecurityValues = None
8787
attributes: Dict[str, object] = {}
@@ -190,9 +190,9 @@ def datetime_to_string(o):
190190
def _add_filter(filters: List[Filterable], is_tag: bool, full_name: str, value: str):
191191
if is_tag:
192192
name = full_name[len(FILTER_TAG_NAME_PREFIX) :]
193-
filters.append(ResourceTag(key=name, value=value))
193+
filters.append(Filterable(key=name, value=value))
194194
else:
195-
filters.append(ResourceType(type=value))
195+
filters.append(Filterable(type=value))
196196

197197

198198
def parse_filters(arg_filters) -> List[Filterable]:

cloudiscovery/tests/shared/test_shared_command.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44

55
from shared.command import filter_resources, filter_relations
66
from shared.common import (
7-
ResourceTag,
87
Resource,
98
ResourceDigest,
109
ResourceEdge,
11-
ResourceType,
10+
Filterable,
1211
)
1312

1413

@@ -19,7 +18,7 @@ def test_no_filters_resource(self):
1918
Resource(
2019
digest=ResourceDigest(id="1", type="type"),
2120
name="name",
22-
tags=[ResourceTag(key="key", value="value")],
21+
tags=[Filterable(key="key", value="value")],
2322
)
2423
],
2524
[],
@@ -36,15 +35,15 @@ def test_one_tag_filter_resource(self):
3635
Resource(
3736
digest=ResourceDigest(id="1", type="type"),
3837
name="name",
39-
tags=[ResourceTag(key="key", value="value")],
38+
tags=[Filterable(key="key", value="value")],
4039
),
4140
Resource(
4241
digest=ResourceDigest(id="2", type="type"),
4342
name="name",
44-
tags=[ResourceTag(key="key", value="wrong")],
43+
tags=[Filterable(key="key", value="wrong")],
4544
),
4645
],
47-
[ResourceTag(key="key", value="value")],
46+
[Filterable(key="key", value="value")],
4847
)
4948

5049
assert_that(resources).is_length(1)
@@ -58,22 +57,22 @@ def test_two_tags_filter_resource(self):
5857
Resource(
5958
digest=ResourceDigest(id="1", type="type"),
6059
name="name",
61-
tags=[ResourceTag(key="key", value="value1")],
60+
tags=[Filterable(key="key", value="value1")],
6261
),
6362
Resource(
6463
digest=ResourceDigest(id="2", type="type"),
6564
name="name",
66-
tags=[ResourceTag(key="key", value="value2")],
65+
tags=[Filterable(key="key", value="value2")],
6766
),
6867
Resource(
6968
digest=ResourceDigest(id="3", type="type"),
7069
name="name",
71-
tags=[ResourceTag(key="key", value="wrong")],
70+
tags=[Filterable(key="key", value="wrong")],
7271
),
7372
],
7473
[
75-
ResourceTag(key="key", value="value1"),
76-
ResourceTag(key="key", value="value2"),
74+
Filterable(key="key", value="value1"),
75+
Filterable(key="key", value="value2"),
7776
],
7877
)
7978

@@ -87,15 +86,15 @@ def test_one_type_filter_resource(self):
8786
Resource(
8887
digest=ResourceDigest(id="1", type="type1"),
8988
name="name",
90-
tags=[ResourceTag(key="key", value="value")],
89+
tags=[Filterable(key="key", value="value")],
9190
),
9291
Resource(
9392
digest=ResourceDigest(id="2", type="type2"),
9493
name="name",
95-
tags=[ResourceTag(key="key", value="wrong")],
94+
tags=[Filterable(key="key", value="wrong")],
9695
),
9796
],
98-
[ResourceType(type="type1")],
97+
[Filterable(type="type1")],
9998
)
10099

101100
assert_that(resources).is_length(1)
@@ -111,7 +110,7 @@ def test_no_filters_relation(self):
111110
Resource(
112111
digest=digest,
113112
name="name",
114-
tags=[ResourceTag(key="key", value="value")],
113+
tags=[Filterable(key="key", value="value")],
115114
)
116115
],
117116
[edge],

0 commit comments

Comments
 (0)