Skip to content

Commit de4f5a9

Browse files
author
papavhub
committed
Feat: Property CRUD
1 parent 4024bdb commit de4f5a9

1 file changed

Lines changed: 251 additions & 0 deletions

File tree

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
from osc_lib.command import command
2+
from openstackclient.i18n import _
3+
import json
4+
5+
6+
class CreatePropertyMd(command.Lister):
7+
_description = _("md-property-create")
8+
9+
def get_parser(self, prog_name):
10+
parser = super(CreatePropertyMd, self).get_parser(prog_name)
11+
parser.add_argument(
12+
'namespace',
13+
metavar='<namespace>',
14+
help=_('namespace'),
15+
)
16+
parser.add_argument(
17+
'--name',
18+
metavar='<NAME>',
19+
help=_('NAME'),
20+
)
21+
parser.add_argument(
22+
'--title',
23+
metavar='<TITLE>',
24+
help=_('TITLE'),
25+
)
26+
parser.add_argument(
27+
'--schema',
28+
metavar='<SCHEMA>',
29+
help=_('SCHEMA'),
30+
)
31+
return parser
32+
33+
def take_action(self, parsed_args):
34+
image_client = self.app.client_manager.image
35+
36+
try:
37+
schema = json.loads(parsed_args.schema)
38+
except ValueError:
39+
print('Schema is not a valid JSON object.')
40+
else:
41+
fields = {'name': parsed_args.name, 'title': parsed_args.title}
42+
fields.update(schema)
43+
kwargs = {"name": parsed_args.name, "title": parsed_args.title, "type": fields["type"], "enum": fields["enum"], "description": fields["description"]}
44+
45+
metadata_object = image_client.create_metadef_property(parsed_args.namespace, **kwargs)
46+
47+
# 출력
48+
column_headers = (
49+
'Property',
50+
'Value',
51+
)
52+
53+
columns = (
54+
("description", metadata_object.description),
55+
("enum", metadata_object.enum),
56+
("name", metadata_object.name),
57+
("title", metadata_object.title),
58+
("type", metadata_object.type),
59+
)
60+
61+
table = (
62+
column_headers,
63+
(
64+
columns
65+
),
66+
)
67+
return table
68+
69+
70+
class DeletePropertyMd(command.Lister):
71+
_description = _("md-property-delete")
72+
73+
def get_parser(self, prog_name):
74+
parser = super(DeletePropertyMd, self).get_parser(prog_name)
75+
parser.add_argument(
76+
'namespace',
77+
metavar='<namespace>',
78+
help=_('namespace'),
79+
)
80+
parser.add_argument(
81+
'property_name',
82+
metavar='<property_name>',
83+
help=_('property_name'),
84+
)
85+
return parser
86+
87+
def take_action(self, parsed_args):
88+
image_client = self.app.client_manager.image
89+
image_client.delete_metadef_property(parsed_args.property_name, parsed_args.namespace)
90+
raise SystemExit
91+
92+
93+
class ShowPropertyMd(command.Lister):
94+
_description = _("md-property-show")
95+
96+
def get_parser(self, prog_name):
97+
parser = super(ShowPropertyMd, self).get_parser(prog_name)
98+
parser.add_argument(
99+
'namespace',
100+
metavar='<namespace>',
101+
help=_('namespace'),
102+
)
103+
parser.add_argument(
104+
'property_name',
105+
metavar='<property_name>',
106+
help=_('property_name'),
107+
)
108+
return parser
109+
110+
def take_action(self, parsed_args):
111+
image_client = self.app.client_manager.image
112+
metadata_object = image_client.get_metadef_property(parsed_args.property_name, parsed_args.namespace)
113+
114+
# 출력
115+
116+
column_headers = (
117+
'Property',
118+
'Value',
119+
)
120+
121+
columns = (
122+
("description", metadata_object.description),
123+
("enum", metadata_object.enum),
124+
("name", metadata_object.name),
125+
("title", metadata_object.title),
126+
("type", metadata_object.type),
127+
)
128+
129+
table = (
130+
column_headers,
131+
(
132+
columns
133+
),
134+
)
135+
return table
136+
137+
138+
class UpdatePropertyMd(command.Lister):
139+
_description = _("md-property-create")
140+
141+
def get_parser(self, prog_name):
142+
parser = super(UpdatePropertyMd, self).get_parser(prog_name)
143+
parser.add_argument(
144+
'namespace',
145+
metavar='<namespace>',
146+
help=_('namespace'),
147+
)
148+
parser.add_argument(
149+
'property_name',
150+
metavar='<property_name>',
151+
help=_('property_name'),
152+
)
153+
parser.add_argument(
154+
'--name',
155+
metavar='<NAME>',
156+
help=_('NAME'),
157+
)
158+
parser.add_argument(
159+
'--title',
160+
metavar='<TITLE>',
161+
help=_('TITLE'),
162+
)
163+
parser.add_argument(
164+
'--schema',
165+
metavar='<SCHEMA>',
166+
help=_('SCHEMA'),
167+
)
168+
return parser
169+
170+
def take_action(self, parsed_args):
171+
image_client = self.app.client_manager.image
172+
173+
try:
174+
schema = json.loads(parsed_args.schema)
175+
except ValueError:
176+
print('Schema is not a valid JSON object.')
177+
else:
178+
fields = {'name': parsed_args.name, 'title': parsed_args.title}
179+
fields.update(schema)
180+
181+
kwargs = {"name": parsed_args.name, "title": parsed_args.title, "type": fields["type"], "enum": fields["enum"], "description": fields["description"]}
182+
metadata_object = image_client.update_metadef_property(parsed_args.property_name, parsed_args.namespace, **kwargs)
183+
184+
# 출력
185+
column_headers = (
186+
'Property',
187+
'Value',
188+
)
189+
190+
columns = (
191+
("description", metadata_object.description),
192+
("enum", metadata_object.enum),
193+
("name", metadata_object.name),
194+
("title", metadata_object.title),
195+
("type", metadata_object.type),
196+
)
197+
198+
table = (
199+
column_headers,
200+
(
201+
columns
202+
),
203+
)
204+
return table
205+
206+
207+
class ListPropertyMd(command.Lister):
208+
_description = _("md-property-create")
209+
210+
def get_parser(self, prog_name):
211+
parser = super(ListPropertyMd, self).get_parser(prog_name)
212+
parser.add_argument(
213+
'namespace',
214+
metavar='<namespace>',
215+
help=_('namespace'),
216+
)
217+
return parser
218+
219+
def take_action(self, parsed_args):
220+
image_client = self.app.client_manager.image
221+
metadata_object = image_client.metadef_properties(parsed_args.namespace)
222+
223+
column_headers = (
224+
'name',
225+
'title',
226+
'type',
227+
)
228+
229+
columns = (
230+
231+
)
232+
233+
for metadef in metadata_object.properties:
234+
column = (
235+
(
236+
metadata_object.properties[metadef]["name"],
237+
metadata_object.properties[metadef]["title"],
238+
metadata_object.properties[metadef]["type"],
239+
),
240+
)
241+
columns += column
242+
243+
244+
table = (
245+
column_headers,
246+
(
247+
columns
248+
),
249+
)
250+
251+
return table

0 commit comments

Comments
 (0)