本文整理汇总了Python中pyon.core.bootstrap.IonObject.key方法的典型用法代码示例。如果您正苦于以下问题:Python IonObject.key方法的具体用法?Python IonObject.key怎么用?Python IonObject.key使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pyon.core.bootstrap.IonObject
的用法示例。
在下文中一共展示了IonObject.key方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: get_associated_resource_info
# 需要导入模块: from pyon.core.bootstrap import IonObject [as 别名]
# 或者: from pyon.core.bootstrap.IonObject import key [as 别名]
def get_associated_resource_info(self, origin_resource_type="", resource_id="", assoc_resource_type=None):
if not origin_resource_type:
raise Inconsistent("The parameter origin_resource_type is not set")
if not isinstance(resource_id, types.StringType):
raise Inconsistent("The parameter resource_id is not a single resource id string")
if not self.service_provider or not self._rr:
raise Inconsistent("This class is not initialized properly")
if assoc_resource_type is not None and assoc_resource_type not in getextends(OT.AssociatedResources):
raise BadRequest(
"The requested resource %s is not extended from %s" % (assoc_resource_type, OT.AssociatedResources)
)
resource_data = IonObject(assoc_resource_type)
log.debug("get_associated_resource_info: %s", assoc_resource_type)
for field in resource_data._schema:
deco_value = resource_data.get_decorator_value(field, "ResourceType")
if deco_value is not None:
# Set the type of the associated resource to be used as the key in dict of associations
setattr(resource_data, "resource_type", deco_value)
res_list, _ = self._rr.find_resources(restype=deco_value, id_only=False)
exclude_lcs_filter_value = resource_data.get_decorator_value(field, "ExcludeLifecycleStates")
if exclude_lcs_filter_value is not None and exclude_lcs_filter_value.find(",") > -1:
exclude_filter = exclude_lcs_filter_value.split(",")
res_list = [res for res in res_list if res.lcstate not in exclude_filter]
# Look for ResourceSPOFilter filter and filter above results to exclude other resources already assigned
# This filter MUST be a comma separated value of Subject, Predicate, Object
res_filter_value = resource_data.get_decorator_value(field, "ResourceSPOFilter")
if res_filter_value is not None and res_filter_value.find(",") > -1:
assoc_filter = res_filter_value.split(",")
res_associations = self._rr.find_associations(predicate=assoc_filter[1], id_only=False)
assoc_list = [a for a in res_associations if a.st == assoc_filter[0] and a.ot == assoc_filter[2]]
def resource_available(res):
# give me a list of associations relevent to the passed in resource
rel_assocs = [
a for a in assoc_list if res._id == (a.o if a.st == origin_resource_type else a.s)
]
# of those resources, give me the ids of resources whos types match what i am currently building for
assocs = [(a.s if a.st == origin_resource_type else a.o) for a in rel_assocs]
# return true if there are no associations for the resource in question, or it has an association to
# the current resource we are building for
return len(assocs) == 0 or resource_id in assocs
# Iterate over the list and remove any object which are assigned to other resources and not the target resource
final_list = []
final_list.extend([res for res in res_list if resource_available(res)])
setattr(resource_data, field, final_list)
else:
setattr(resource_data, field, res_list)
continue
deco_value = resource_data.get_decorator_value(field, "Association")
if deco_value is not None:
# If the association is related to an existing resource and this is a create then skip
if not resource_id and (
resource_data.is_decorator(field, "ResourceSubject")
or resource_data.is_decorator(field, "ResourceObject")
):
continue
resource_sub = resource_id if resource_data.is_decorator(field, "ResourceSubject") else None
resource_obj = resource_id if resource_data.is_decorator(field, "ResourceObject") else None
assoc_list = self._rr.find_associations(
subject=resource_sub, predicate=deco_value, object=resource_obj, id_only=False
)
subject_type = resource_data.get_decorator_value(field, "SubjectType")
if subject_type is not None:
assoc_list = [assoc for assoc in assoc_list if (assoc.st == subject_type)]
object_type = resource_data.get_decorator_value(field, "ObjectType")
if object_type is not None:
assoc_list = [assoc for assoc in assoc_list if (assoc.ot == object_type)]
setattr(resource_data, field, assoc_list)
continue
# set key if we have one
key = resource_data.get_class_decorator_value("Key")
if key is None:
resource_data.key = resource_data.resource_type
else:
resource_data.key = key
#.........这里部分代码省略.........