Add attribute_list_api
Change-Id: I1bd75170a4d308339bf34fa5778d64c5d097d4bd
This commit is contained in:
parent
4b60abbb68
commit
962ceed371
@ -25,6 +25,7 @@ from cyborg.api import expose
|
|||||||
from cyborg.api.controllers import base
|
from cyborg.api.controllers import base
|
||||||
from cyborg.api.controllers import link
|
from cyborg.api.controllers import link
|
||||||
from cyborg.api.controllers.v2 import arqs
|
from cyborg.api.controllers.v2 import arqs
|
||||||
|
from cyborg.api.controllers.v2 import attributes
|
||||||
from cyborg.api.controllers.v2 import deployables
|
from cyborg.api.controllers.v2 import deployables
|
||||||
from cyborg.api.controllers.v2 import device_profiles
|
from cyborg.api.controllers.v2 import device_profiles
|
||||||
from cyborg.api.controllers.v2 import devices
|
from cyborg.api.controllers.v2 import devices
|
||||||
@ -85,6 +86,7 @@ class Controller(rest.RestController):
|
|||||||
accelerator_requests = arqs.ARQsController()
|
accelerator_requests = arqs.ARQsController()
|
||||||
devices = devices.DevicesController()
|
devices = devices.DevicesController()
|
||||||
deployables = deployables.DeployablesController()
|
deployables = deployables.DeployablesController()
|
||||||
|
attributes = attributes.AttributesController()
|
||||||
|
|
||||||
@expose.expose(V2)
|
@expose.expose(V2)
|
||||||
def get(self):
|
def get(self):
|
||||||
|
121
cyborg/api/controllers/v2/attributes.py
Normal file
121
cyborg/api/controllers/v2/attributes.py
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
# Copyright 2022 Inspur.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# 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 pecan
|
||||||
|
import wsme
|
||||||
|
from wsme import types as wtypes
|
||||||
|
|
||||||
|
from oslo_log import log
|
||||||
|
|
||||||
|
from cyborg.api.controllers import base
|
||||||
|
from cyborg.api.controllers import link
|
||||||
|
from cyborg.api.controllers import types
|
||||||
|
from cyborg.api import expose
|
||||||
|
from cyborg.common import authorize_wsgi
|
||||||
|
from cyborg import objects
|
||||||
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Attribute(base.APIBase):
|
||||||
|
"""API representation of a attribute.
|
||||||
|
|
||||||
|
This class enforces type checking and value constraints, and converts
|
||||||
|
between the internal object model and the API representation of
|
||||||
|
a attribute. See module notes above.
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""The UUID of the attribute"""
|
||||||
|
uuid = types.uuid
|
||||||
|
|
||||||
|
"""The deployable_id of the attribute"""
|
||||||
|
deployable_id = wtypes.IntegerType()
|
||||||
|
|
||||||
|
"""The key of the device attribute"""
|
||||||
|
key = wtypes.text
|
||||||
|
|
||||||
|
"""The value of the attribute"""
|
||||||
|
value = wtypes.text
|
||||||
|
|
||||||
|
created_at = wtypes.datetime.datetime
|
||||||
|
updated_at = wtypes.datetime.datetime
|
||||||
|
|
||||||
|
"""A list containing a self link"""
|
||||||
|
links = wsme.wsattr([link.Link], readonly=True)
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
super(Attribute, self).__init__(**kwargs)
|
||||||
|
self.fields = []
|
||||||
|
for field in objects.Attribute.fields:
|
||||||
|
self.fields.append(field)
|
||||||
|
setattr(self, field, kwargs.get(field, wtypes.Unset))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def convert_with_links(cls, obj_attribute):
|
||||||
|
api_attribute = cls(**obj_attribute.as_dict())
|
||||||
|
api_attribute.links = [
|
||||||
|
link.Link.make_link('self', pecan.request.public_url,
|
||||||
|
'attribute', api_attribute.uuid)
|
||||||
|
]
|
||||||
|
return api_attribute
|
||||||
|
|
||||||
|
def get_attribute(self, obj_attribute):
|
||||||
|
api_obj = {}
|
||||||
|
for field in ['uuid', 'deployable_id', 'key', 'value']:
|
||||||
|
api_obj[field] = obj_attribute[field]
|
||||||
|
for field in ['created_at', 'updated_at']:
|
||||||
|
api_obj[field] = str(obj_attribute[field])
|
||||||
|
api_obj['links'] = [
|
||||||
|
link.Link.make_link_dict('attributes', api_obj['uuid'])
|
||||||
|
]
|
||||||
|
return api_obj
|
||||||
|
|
||||||
|
|
||||||
|
class AttributeCollection(Attribute):
|
||||||
|
"""API representation of a collection of attributes."""
|
||||||
|
|
||||||
|
"""A list containing attribute objects"""
|
||||||
|
attributes = [Attribute]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def convert_with_links(cls, obj_attributes):
|
||||||
|
collection = cls()
|
||||||
|
collection.attributes = [
|
||||||
|
Attribute.convert_with_links(obj_attribute)
|
||||||
|
for obj_attribute in obj_attributes]
|
||||||
|
return collection
|
||||||
|
|
||||||
|
def get_attributes(self, obj_attributes):
|
||||||
|
api_obj_attributes = [
|
||||||
|
self.get_attribute(obj_attribute)
|
||||||
|
for obj_attribute in obj_attributes]
|
||||||
|
return api_obj_attributes
|
||||||
|
|
||||||
|
|
||||||
|
class AttributesController(base.CyborgController,
|
||||||
|
AttributeCollection):
|
||||||
|
"""REST controller for Attributes."""
|
||||||
|
|
||||||
|
@authorize_wsgi.authorize_wsgi("cyborg:attribute", "get_all", False)
|
||||||
|
@expose.expose(AttributeCollection, wtypes.text)
|
||||||
|
def get_all(self):
|
||||||
|
"""Retrieve a list of attributes."""
|
||||||
|
|
||||||
|
LOG.info('[attributes] get_all.')
|
||||||
|
context = pecan.request.context
|
||||||
|
api_obj_attributes = objects.Attribute.get_by_filter(context, {})
|
||||||
|
|
||||||
|
ret = AttributeCollection.convert_with_links(api_obj_attributes)
|
||||||
|
LOG.info('[Attributes] get_all returned: %s', ret)
|
||||||
|
return ret
|
@ -62,6 +62,18 @@ deployable_policies = [
|
|||||||
description='FPGA programming.'),
|
description='FPGA programming.'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
attribute_policies = [
|
||||||
|
policy.RuleDefault('cyborg:attribute:get_one',
|
||||||
|
'rule:allow',
|
||||||
|
description='Show attribute detail'),
|
||||||
|
policy.RuleDefault('cyborg:attribute:get_all',
|
||||||
|
'rule:allow',
|
||||||
|
description='Retrieve all attribute records'),
|
||||||
|
policy.RuleDefault('cyborg:attribute:delete',
|
||||||
|
'rule:allow',
|
||||||
|
description='Delete attribute records.'),
|
||||||
|
]
|
||||||
|
|
||||||
fpga_policies = [
|
fpga_policies = [
|
||||||
policy.RuleDefault('cyborg:fpga:get_one',
|
policy.RuleDefault('cyborg:fpga:get_one',
|
||||||
'rule:allow',
|
'rule:allow',
|
||||||
|
@ -29,6 +29,7 @@ def list_policies():
|
|||||||
# by new policies
|
# by new policies
|
||||||
old_policy.device_policies,
|
old_policy.device_policies,
|
||||||
old_policy.deployable_policies,
|
old_policy.deployable_policies,
|
||||||
|
old_policy.attribute_policies,
|
||||||
old_policy.accelerator_request_policies,
|
old_policy.accelerator_request_policies,
|
||||||
old_policy.fpga_policies,
|
old_policy.fpga_policies,
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user