def __init__(self): self.resource_sup = ResourceSupplier()
class ResourceDataBaker(): def __init__(self): self.resource_sup = ResourceSupplier() def bake_to_put_single(self,path_url): query1 = self.resource_sup.get_for_register_entities() if query1 is None: return None,None else: db_occi_ids_locs = list() for q in query1: db_occi_ids_locs.append({"OCCI_ID" : q['key'],"OCCI_Location":q['value']}) query2 = self.resource_sup.get_my_resources(path_url) if query2 is None: return None,None else: db_nb_resources = query2.count() return db_occi_ids_locs,db_nb_resources def bake_to_put_single_updateCase(self,path_url): query = self.resource_sup.get_for_update_entities(path_url) if query is None: return None else: to_update = query.first()['value'] return to_update def bake_to_get_single_res(self, path_url): query = self.resource_sup.get_my_resources(path_url) if query is None: return None,None else: if query.count() is 0: return 0,0 else: if query.first()['value'][0] == "Resource": res = { "resources": [query.first()['value'][1]]} else: res = { "links": [query.first()['value'][1]]} return res,query.first()['value'][1] def bake_to_post_single(self, path_url): query = self.resource_sup.get_for_register_entities() if query is None: return None,None else: db_occi_ids_locs = list() for q in query: db_occi_ids_locs.append({"OCCI_ID" : q['key'],"OCCI_Location":q['value']}) query2 = self.resource_sup.get_for_update_entities(path_url) if query2 is None: return None,None elif query2.count() is 0: return db_occi_ids_locs,0 else: return db_occi_ids_locs,query2.first()['value'] def bake_to_delete_single_resource(self, path_url): query = self.resource_sup.get_for_update_entities(path_url) if query is None: return None,None elif query.count() is 0: return 0,None else: return query.count(),query.first()['value'] def bake_to_trigger_action_on_single_resource(self, path_url): query = self.resource_sup.get_for_trigger_action(path_url) if query is None: return None,None elif query.count() is 0: return 0,None else: return query.count(), query.first()['value'] def bake_to_get_provider(self,kind_id): query = self.resource_sup.get_providers(kind_id) if query is None: return None else: return query.first()['value'] def bake_to_post_multi_resources_2a(self): query = self.resource_sup.get_for_register_entities() if query is None: return None else: db_occi_ids_locs = list() for q in query: db_occi_ids_locs.append({"OCCI_ID" : q['key'],"OCCI_Location":q['value']}) return db_occi_ids_locs def bake_to_post_multi_resources_2b(self,url_path): query = self.resource_sup.get_my_mixins(url_path) if query is None: return None,None elif query.count() is 0: return 0,None else: return query.count(), query.first()['value'] def bake_to_post_multi_resources_2b2(self,OCCI_locations): db_docs = list() for item in OCCI_locations: query = self.resource_sup.get_for_associate_mixin(item) if query is None: return None elif query.count() is 0: logger.error("===== bake_to_post_multi_resources_2b2 : " + item + "was not found =====") return None else: q = query.first() db_docs.append(q['value']) return db_docs def bake_to_get_all_entities(self, cat_type,cat_id): if cat_type == "Kind": query = self.resource_sup.get_entities_of_kind(cat_id) elif cat_type == "Mixin": query = self.resource_sup.get_entities_of_mixin(cat_id) else: return None to_return_res = list() to_return_link = list() for entity in query: if entity['value'][1] == "Resource": to_return_res.append(entity['value'][0]) else: to_return_link.append((entity['value'][0])) result = to_return_res + to_return_link return result def bake_to_channel_get_all_entities(self, req_path): query = self.resource_sup.get_for_get_entities(req_path) if query is None: return None elif query.count() is 0: return 0 else: return query def bake_to_get_on_path(self): query = self.resource_sup.get_my_occi_locations() return query def bake_to_get_on_path_filtered(self,locations): descriptions = list() for loc in locations: query = self.resource_sup.get_my_resources(loc) if query is None: return None else: descriptions.append({'OCCI_Description' : query.first()['value'],'OCCI_ID':loc}) return descriptions def bake_to_get_filtered_entities(self, entities): descriptions_res = list() descriptions_link = list() for entity in entities: query = self.resource_sup.get_for_get_filtered(entity) if query is None: return None,None else: if query.first()['value'][1] == "Resource": descriptions_res.append({'OCCI_ID' : entity,'OCCI_Description' : query.first()['value'][0]}) else: descriptions_link.append({'OCCI_ID' : entity,'OCCI_Description' : query.first()['value'][0]}) return descriptions_res,descriptions_link def bake_to_get_filtered_entities_2(self, result): occi_descriptions = list() for item in result: res = self.resource_sup.get_my_resources(item) if res is None: return None else: occi_descriptions.append(res['value'][1]) return occi_descriptions def bake_to_channel_trigger_actions(self, req_url): query = self.resource_sup.get_for_get_entities(req_url) if query is None: return None,None elif query.count() is 0: return 0,0 else: occi_id = query.first()['value'][0] occi_type = query.first()['value'][1] #Get resources that has this mixin or kind if occi_type == "Kind": query2 = self.resource_sup.get_entities_of_kind(occi_id) else: query2 = self.resource_sup.get_entities_of_mixin(occi_id) if query2 is None: return None,None else: entity_kind_ids = list() for q in query2: entity = q['value'][0] query3 = self.resource_sup.get_for_trigger_action(entity) entity_kind_ids.append(query3.first()['value'][0]) return entity_kind_ids,query2 def recursive_get_attribute_names(self,kind_attribute_description): for key in kind_attribute_description.keys(): if type(kind_attribute_description[key]) is dict: self.recursive_get_attribute_names(kind_attribute_description) print "i am " def bake_to_get_default_attributes(self, req_path): query = self.resource_sup.get_default_attributes_from_kind(req_path) if query is None: return None else: res = recursive_for_default_attributes(query.first()['value']) default = {} for item in res: default = (cnv_attribute_from_http_to_json(item+"=None",json_result=default)) return default
class ResourceDataBaker(): """ DataBaker prepares resources (extracted by the supplier from DB) for Junglers """ def __init__(self): self.resource_sup = ResourceSupplier() def bake_to_put_single(self,path_url): """ Prepare data for creating custom single resource method @param: path_url: Path of resource """ #Step[1]: get the data from the supplier query1 = self.resource_sup.get_for_register_entities() if query1 is None: return None,None else: db_occi_ids_locs = list() #Step[2]: prepare data for q in query1: db_occi_ids_locs.append({"OCCI_ID" : q['key'],"OCCI_Location":q['value']}) #Step[3]: get more data query2 = self.resource_sup.get_my_resources(path_url) if query2 is None: return None,None else: db_nb_resources = query2.count() #Step[4]: return all data return db_occi_ids_locs,db_nb_resources def bake_to_put_single_updateCase(self,path_url): """ Prepare data for update single resource method @param path_url: URL of the resource """ #Step[1]: Get data from suppliers query = self.resource_sup.get_for_update_entities(path_url) if query is None: return None else: #Step[2]: prepare data to_update = query.first()['value'] #Step[3]: return Data return to_update def bake_to_get_single_res(self, path_url): """ Prepare data for get single resource method @param path_url: URL of the resource """ #Step[1]: get data from supplier query = self.resource_sup.get_my_resources(path_url) if query is None: return None,None else: if query.count() is 0: return 0,0 else: #Step[2]: prepare data if query.first()['value'][0] == "Resource": res = { "resources": [query.first()['value'][1]]} else: res = { "links": [query.first()['value'][1]]} #Step[3]: return data return res,query.first()['value'][1] def bake_to_post_single(self, path_url): """ Prepare data for post single resource @param path_url: URL of the resource """ #Step[1]: get the data query = self.resource_sup.get_for_register_entities() if query is None: return None,None else: db_occi_ids_locs = list() #Step[2]: prepare data for q in query: db_occi_ids_locs.append({"OCCI_ID" : q['key'],"OCCI_Location":q['value']}) #Step[3]: Get more data query2 = self.resource_sup.get_for_update_entities(path_url) if query2 is None: return None,None #Step[4]: return data elif query2.count() is 0: return db_occi_ids_locs,0 else: return db_occi_ids_locs,query2.first()['value'] def bake_to_delete_single_resource(self, path_url): """ Prepare data for delete single resource method @param path_url: URL of the resource """ #Step[1]: get data query = self.resource_sup.get_for_update_entities(path_url) if query is None: return None,None elif query.count() is 0: return 0,None else: #Step[2]: prepare data, then return it return query.count(),query.first()['value'] def bake_to_trigger_action_on_single_resource(self, path_url): """ Prepare data for trigger an action on single resource method @param path_url: URL of the resource """ #Step[1]: Get data from supplier query = self.resource_sup.get_for_trigger_action(path_url) if query is None: return None,None elif query.count() is 0: return 0,None else: #Step[2]: prepare and then return the data return query.count(), query.first()['value'] def bake_to_get_provider(self,kind_id): """ Prepare data for get provider method @param kind_id: kind OCCI ID """ #Step[1]: Get the data query = self.resource_sup.get_providers(kind_id) if query is None: return None else: #Step[2]: return data return query.first()['value'] def bake_to_post_multi_resources_2a(self): """ Prepare for post multi resources method (scenario 2a) """ #Step[1]: get data query = self.resource_sup.get_for_register_entities() if query is None: return None else: #Step[2]: prepare data db_occi_ids_locs = list() for q in query: db_occi_ids_locs.append({"OCCI_ID" : q['key'],"OCCI_Location":q['value']}) #Step[3]: return data return db_occi_ids_locs def bake_to_post_multi_resources_2b(self,url_path): """ Prepare data for post on multi resources 2b scenario @param url_path: resource URL """ #Step[1]: get data query = self.resource_sup.get_my_mixins(url_path) if query is None: return None,None elif query.count() is 0: return 0,None else: #Step[2]: return data return query.count(), query.first()['value'] def bake_to_post_multi_resources_2b2(self,OCCI_locations): """ Prepare data for post on mutli resource 2b2 scenario @param OCCI_locations: OCCI locations of resources """ db_docs = list() for item in OCCI_locations: #Step[1]: get data query = self.resource_sup.get_for_associate_mixin(item) if query is None: return None elif query.count() is 0: logger.error("===== bake_to_post_multi_resources_2b2 : " + item + "was not found =====") return None else: #Step[2]: prepare data q = query.first() db_docs.append(q['value']) #Step[3]: return data return db_docs def bake_to_get_all_entities(self, cat_type,cat_id): """ Prepare data for get all entities method @param cat_type: Category type (kind/mixin) @param cat_id: OCCI category ID """ #Step[1]: get data if cat_type == "Kind": query = self.resource_sup.get_entities_of_kind(cat_id) elif cat_type == "Mixin": query = self.resource_sup.get_entities_of_mixin(cat_id) else: return None to_return_res = list() to_return_link = list() #Step[2]: prepare data for entity in query: if entity['value'][1] == "Resource": to_return_res.append(entity['value'][0]) else: to_return_link.append((entity['value'][0])) result = to_return_res + to_return_link #Step[3]: return data return result def bake_to_channel_get_all_entities(self, req_path): """ Prepare data for channel get all entities method @param req_path: path of the request """ #Step[1]: get data query = self.resource_sup.get_for_get_entities(req_path) if query is None: return None elif query.count() is 0: return 0 else: #Step[2]: return data return query def bake_to_get_on_path(self): """ Prepare data for get on path method """ query = self.resource_sup.get_my_occi_locations() if query is None: return None else: occi_location = list() for q in query: occi_location.append(q['value']) return occi_location def bake_to_get_on_path_filtered(self,locations): """ Prepare data for get on path filtered method @param locations: location to look for """ descriptions = list() #Step[1]: get data for loc in locations: query = self.resource_sup.get_my_resources(loc) if query is None: return None else: descriptions.append({'OCCI_Description' : query.first()['value'][1],'OCCI_ID':loc}) #Step[2]: return data return descriptions def bake_to_get_filtered_entities(self, entities): """ Prepare data for get filtered entities @param entities: OCCI ID of entities """ descriptions_res = list() descriptions_link = list() #Step[1]: Get data for entity in entities: query = self.resource_sup.get_for_get_filtered(entity) if query is None: return None,None else: #Step[2]: prepare data if query.first()['value'][1] == "Resource": descriptions_res.append({'OCCI_ID' : entity,'OCCI_Description' : query.first()['value'][0]}) else: descriptions_link.append({'OCCI_ID' : entity,'OCCI_Description' : query.first()['value'][0]}) #Step[3]: return data return descriptions_res,descriptions_link def bake_to_get_filtered_entities_2(self, result): """ Prepare data for get filtered entities method scenario 2 @param result: resource OCCI location """ occi_descriptions = list() #Step[1]: get data for item in result: res = self.resource_sup.get_my_resources(item) if res is None: return None else: #Step[2]: prepare data occi_descriptions.append(res['value'][1]) #Step[3]: return data return occi_descriptions def bake_to_channel_trigger_actions(self, req_url): """ Prepare data for channgel trigger actions method @param req_url: URL request """ #Step[1]: get data query = self.resource_sup.get_for_get_entities(req_url) if query is None: return None,None elif query.count() is 0: return 0,0 else: #Step[2]: prepare data occi_id = query.first()['value'][0] occi_type = query.first()['value'][1] #Get resources that has this mixin or kind if occi_type == "Kind": query2 = self.resource_sup.get_entities_of_kind(occi_id) else: query2 = self.resource_sup.get_entities_of_mixin(occi_id) if query2 is None: return None,None else: entity_kind_ids = list() for q in query2: entity = q['value'][0] query3 = self.resource_sup.get_for_trigger_action(entity) entity_kind_ids.append(query3.first()['value'][0]) #Step[3]: return data return entity_kind_ids,query2 def bake_to_get_default_attributes(self, req_path): """ Prepare data to get default attributes @param req_path: URL of the request """ #Step[1]: get data query = self.resource_sup.get_default_attributes_from_kind(req_path) if query is None: return None else: #Step[2]: prepare data res = recursive_for_default_attributes(query.first()['value']) default = {} for item in res: default = (cnv_attribute_from_http_to_json(item+"=None",json_result=default)) #Step[3]: return data return default def recursive_get_attribute_names(self,kind_attribute_description): for key in kind_attribute_description.keys(): if type(kind_attribute_description[key]) is dict: self.recursive_get_attribute_names(kind_attribute_description) def bake_to_delete_on_path(self): query = self.resource_sup.get_delete_on_path() if query is None: return None, None else: doc_locations = list() occi_locations = list() for q in query: doc_locations.append({'_id': q['value'][0], '_rev': q['value'][1]}) occi_locations.append(q['key']) return occi_locations, doc_locations