Skip to content

Commit 3746058

Browse files
committed
ENH: Add IMAGE_OWNER and IMAGE_METADATA
1 parent 23bd01e commit 3746058

6 files changed

Lines changed: 52 additions & 8 deletions

File tree

openstackquery/enums/props/image_properties.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import json
12
from enum import auto
3+
24
from openstackquery.enums.props.prop_enum import PropEnum
35
from openstackquery.exceptions.query_property_mapping_error import (
46
QueryPropertyMappingError,
@@ -19,6 +21,8 @@ class ImageProperties(PropEnum):
1921
IMAGE_NAME = auto()
2022
IMAGE_SIZE = auto()
2123
IMAGE_STATUS = auto()
24+
IMAGE_OWNER = auto()
25+
IMAGE_METADATA = auto()
2226

2327
@staticmethod
2428
def _get_aliases():
@@ -35,6 +39,8 @@ def _get_aliases():
3539
ImageProperties.IMAGE_NAME: ["name"],
3640
ImageProperties.IMAGE_SIZE: ["size"],
3741
ImageProperties.IMAGE_STATUS: ["status"],
42+
ImageProperties.IMAGE_OWNER: ["owner", "tenant"],
43+
ImageProperties.IMAGE_METADATA: ["metadata"],
3844
}
3945

4046
@staticmethod
@@ -55,6 +61,8 @@ def get_prop_mapping(prop):
5561
ImageProperties.IMAGE_NAME: lambda a: a["name"],
5662
ImageProperties.IMAGE_SIZE: lambda a: a["size"],
5763
ImageProperties.IMAGE_STATUS: lambda a: a["status"],
64+
ImageProperties.IMAGE_OWNER: lambda a: a["metadata"]["owner_id"],
65+
ImageProperties.IMAGE_METADATA: lambda a: json.dumps(a["metadata"]),
5866
}
5967
try:
6068
return mapping[prop]

openstackquery/mappings/image_mapping.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from openstackquery.aliases import QueryChainMappings
44
from openstackquery.enums.props.image_properties import ImageProperties
5+
from openstackquery.enums.props.project_properties import ProjectProperties
56
from openstackquery.enums.props.server_properties import ServerProperties
67
from openstackquery.enums.query_presets import QueryPresets
78
from openstackquery.handlers.client_side_handler import ClientSideHandler
@@ -23,7 +24,10 @@ def get_chain_mappings() -> QueryChainMappings:
2324
Return a dictionary containing property pairs mapped to query mappings.
2425
This is used to define how to chain results from this query to other possible queries
2526
"""
26-
return {ImageProperties.IMAGE_ID: [ServerProperties.IMAGE_ID]}
27+
return {
28+
ImageProperties.IMAGE_ID: [ServerProperties.IMAGE_ID],
29+
ImageProperties.IMAGE_OWNER: [ProjectProperties.PROJECT_ID],
30+
}
2731

2832
@staticmethod
2933
def get_runner_mapping() -> Type[ImageRunner]:
@@ -54,6 +58,7 @@ def get_server_side_handler() -> ServerSideHandler:
5458
QueryPresets.EQUAL_TO: {
5559
ImageProperties.IMAGE_NAME: lambda value: {"name": value},
5660
ImageProperties.IMAGE_STATUS: lambda value: {"status": value},
61+
ImageProperties.IMAGE_OWNER: lambda value: {"owner": value},
5762
},
5863
QueryPresets.ANY_IN: {
5964
ImageProperties.IMAGE_NAME: lambda values: [
@@ -62,6 +67,9 @@ def get_server_side_handler() -> ServerSideHandler:
6267
ImageProperties.IMAGE_STATUS: lambda values: [
6368
{"status": value} for value in values
6469
],
70+
ImageProperties.IMAGE_OWNER: lambda values: [
71+
{"owner": value} for value in values
72+
],
6573
},
6674
QueryPresets.OLDER_THAN: {
6775
ImageProperties.IMAGE_CREATION_DATE: lambda func=TimeUtils.convert_to_timestamp, **kwargs: {
@@ -127,8 +135,14 @@ def get_client_side_handler() -> ClientSideHandler:
127135
QueryPresets.NOT_EQUAL_TO: ["*"],
128136
QueryPresets.ANY_IN: ["*"],
129137
QueryPresets.NOT_ANY_IN: ["*"],
130-
QueryPresets.MATCHES_REGEX: [ImageProperties.IMAGE_NAME],
131-
QueryPresets.NOT_MATCHES_REGEX: [ImageProperties.IMAGE_NAME],
138+
QueryPresets.MATCHES_REGEX: [
139+
ImageProperties.IMAGE_NAME,
140+
ImageProperties.IMAGE_METADATA,
141+
],
142+
QueryPresets.NOT_MATCHES_REGEX: [
143+
ImageProperties.IMAGE_NAME,
144+
ImageProperties.IMAGE_METADATA,
145+
],
132146
QueryPresets.YOUNGER_THAN: date_prop_list,
133147
QueryPresets.YOUNGER_THAN_OR_EQUAL_TO: date_prop_list,
134148
QueryPresets.OLDER_THAN: date_prop_list,

openstackquery/mappings/project_mapping.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Type
22

33
from openstackquery.aliases import QueryChainMappings
4+
from openstackquery.enums.props.image_properties import ImageProperties
45
from openstackquery.enums.props.project_properties import ProjectProperties
56
from openstackquery.enums.props.server_properties import ServerProperties
67
from openstackquery.enums.query_presets import QueryPresets
@@ -22,7 +23,12 @@ def get_chain_mappings() -> QueryChainMappings:
2223
Should return a dictionary containing property pairs mapped to query mappings.
2324
This is used to define how to chain results from this query to other possible queries
2425
"""
25-
return {ProjectProperties.PROJECT_ID: [ServerProperties.PROJECT_ID]}
26+
return {
27+
ProjectProperties.PROJECT_ID: [
28+
ServerProperties.PROJECT_ID,
29+
ImageProperties.IMAGE_OWNER,
30+
]
31+
}
2632

2733
@staticmethod
2834
def get_runner_mapping() -> Type[ProjectRunner]:

tests/enums/props/test_image_properties.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from unittest.mock import patch
2+
23
import pytest
34

45
from openstackquery.enums.props.image_properties import ImageProperties
56
from openstackquery.exceptions.query_property_mapping_error import (
67
QueryPropertyMappingError,
78
)
8-
99
from tests.mocks.mocked_props import MockProperties
1010

1111

@@ -30,6 +30,10 @@
3030
(ImageProperties.IMAGE_NAME, ["image_name", "name"]),
3131
(ImageProperties.IMAGE_SIZE, ["image_size", "size"]),
3232
(ImageProperties.IMAGE_STATUS, ["image_status", "status"]),
33+
(
34+
ImageProperties.IMAGE_OWNER,
35+
["image_owner", "owner", "tenant"],
36+
),
3337
],
3438
)
3539
def test_property_serialization(expected_prop, test_values, property_variant_generator):

tests/mappings/test_image_mapping.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from unittest.mock import patch
22

33
from openstackquery.enums.props.image_properties import ImageProperties
4+
from openstackquery.enums.props.project_properties import ProjectProperties
45
from openstackquery.enums.props.server_properties import ServerProperties
56
from openstackquery.enums.query_presets import QueryPresets
67
from openstackquery.handlers.server_side_handler import ServerSideHandler
@@ -37,13 +38,14 @@ def test_server_side_handler_mappings_equal_to(server_side_test_mappings):
3738
mappings = {
3839
ImageProperties.IMAGE_NAME: "name",
3940
ImageProperties.IMAGE_STATUS: "status",
41+
ImageProperties.IMAGE_OWNER: "owner",
4042
}
4143

4244
server_side_test_mappings(
4345
ImageMapping,
4446
QueryPresets.EQUAL_TO,
4547
mappings,
46-
test_case=(True, True),
48+
test_case=(True, True, True),
4749
)
4850

4951

@@ -59,11 +61,12 @@ def test_server_side_handler_mappings_any_in(server_side_any_in_mappings):
5961
mappings = {
6062
ImageProperties.IMAGE_NAME: "name",
6163
ImageProperties.IMAGE_STATUS: "status",
64+
ImageProperties.IMAGE_OWNER: "owner",
6265
}
6366
server_side_any_in_mappings(
6467
ImageMapping,
6568
mappings,
66-
{"test1": "test1", "test2": "test2"},
69+
{"test1": "test1", "test2": "test2", "test3": "test3"},
6770
)
6871

6972

@@ -238,9 +241,11 @@ def test_client_side_handler(client_side_test_mappings):
238241
QueryPresets.NOT_ANY_IN: ["*"],
239242
QueryPresets.MATCHES_REGEX: [
240243
ImageProperties.IMAGE_NAME,
244+
ImageProperties.IMAGE_METADATA,
241245
],
242246
QueryPresets.NOT_MATCHES_REGEX: [
243247
ImageProperties.IMAGE_NAME,
248+
ImageProperties.IMAGE_METADATA,
244249
],
245250
QueryPresets.OLDER_THAN: date_prop_list,
246251
QueryPresets.OLDER_THAN_OR_EQUAL_TO: date_prop_list,
@@ -260,6 +265,7 @@ def test_get_chain_mappings():
260265
"""
261266
expected_mappings = {
262267
ImageProperties.IMAGE_ID: [ServerProperties.IMAGE_ID],
268+
ImageProperties.IMAGE_OWNER: [ProjectProperties.PROJECT_ID],
263269
}
264270

265271
assert set(ImageMapping.get_chain_mappings()) == set(expected_mappings)

tests/mappings/test_project_mapping.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from openstackquery.enums.props.image_properties import ImageProperties
12
from openstackquery.enums.props.project_properties import ProjectProperties
23
from openstackquery.enums.props.server_properties import ServerProperties
34
from openstackquery.enums.query_presets import QueryPresets
@@ -128,6 +129,11 @@ def test_get_chain_mappings():
128129
"""
129130
Tests get_chain_mapping outputs correctly
130131
"""
131-
expected_mappings = {ProjectProperties.PROJECT_ID: [ServerProperties.PROJECT_ID]}
132+
expected_mappings = {
133+
ProjectProperties.PROJECT_ID: [
134+
ServerProperties.PROJECT_ID,
135+
ImageProperties.IMAGE_OWNER,
136+
]
137+
}
132138

133139
assert set(ProjectMapping.get_chain_mappings()) == set(expected_mappings)

0 commit comments

Comments
 (0)