try: # Python 3 from collections.abc import MutableSequence except ImportError: # Python 2.7 from collections import MutableSequence class KeyRequestGroup(MutableSequence): """A container for manipulating lists of hosts""" def __init__(self, data=None): """Initialize the class""" super(KeyRequestGroup, self).__init__() if (data is not None): self._list = list(data) else: self._list = list() def __repr__(self): return "<{0} {1}>".format(self.__class__.__name__, self._list) def __len__(self): """List length""" return len(self._list) def __getitem__(self, ii): """Get a list item""" if isinstance(ii, slice): return self.__class__(self._list[ii]) else: return self._list[ii] def __delitem__(self, ii): """Delete an item""" del self._list[ii] def __setitem__(self, ii, val): # optional: self._acl_check(val) self._list[ii] = val def __str__(self): return str(self._list) def createExistsQuery(self, val): query="type(service_method)" val['services'] = list(map(lambda x: x.replace("~","") , val['services'])) val['methods'] = list(map(lambda x: x.replace("~","") , val['methods'])) #case Service Names exists if len(val["services"]) > 0: if val["services"][0].startswith("SERVICE-"): query+=",fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityId(\""+'","'.join(val["services"])+"\"))" else: query+=",fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityName.in(\""+'","'.join(val["services"])+"\"))" if len(val["methods"]) > 0: if val["methods"][0].startswith("SERVICE_METHOD-"): query+=",entityId(\""+'","'.join(val["methods"])+"\")" else: query+=",entityName.in(\""+'","'.join(val["methods"])+"\")" # query="builtin:service.keyRequest.count.total:filter(in(\"dt.entity.service_method\",entitySelector(\"type(service_method)" # val['services'] = list(map(lambda x: x.replace("~","") , val['services'])) # val['methods'] = list(map(lambda x: x.replace("~","") , val['methods'])) # if len(val["services"]) > 0: # if val["services"][0].startswith("SERVICE-"): # query+=",fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityId(\""+'","'.join(val["services"])+"\"))" # else: # query+=",fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityName.in(\""+'","'.join(val["services"])+"\"))" # if len(val["methods"]) > 0: # if val["methods"][0].startswith("SERVICE_METHOD-"): # query+=",entityId(\""+'","'.join(val["methods"])+"\")" # else: # query+=",entityName.in(\""+'","'.join(val["methods"])+"\")" # query+="\")))" val["existsQuery"]= query def insert(self, ii, val): self.createExistsQuery(val) self._list.insert(ii, val) def append(self, val): for g in val: if len(self._list) == 0: #self._list.insert(ii, val) self.insert(len(self._list), g) return for group in self._list: if len(set(group["services"]) - set(g["services"])) > 0 or len(set(group["methods"]) - set(g["methods"])) > 0: self.insert(len(self._list), g) class KR: # def getNotExistingKeyRequests(self): # return [k for k in self.keyRequests if k['exists']==False] # def hasNotExistingKeyRequests(self): # for k in self.keyRequests: # if k['exists']==False: # return True # return False # def getNoData1WKeyRequests(self): # return [k for k in self.keyRequests if k['hasData_1W']==False and k['exists']==True] # def hasNoData1WKeyRequests(self): # for k in self.keyRequests: # if k['hasData_1W']==False and k['exists'] == True: # return True # return False def getKeyRequestByHasData(self,label): return [k for k in self.keyRequests if k['hasData'][label]==False] def hasNoData(self,label): for k in self.keyRequests: if k['hasData'][label]==False: return True return False def checkKeyRequestsHasData(self): pass def mergeServices(self, listServices): listOfServiceIds=[o["entityId"] for o in self.services] for s in listServices: if s["entityId"] not in listOfServiceIds: self.services.append(s) # def addKeyRequest(self, data): # if type(data) == list: # for m in data: # self.keyRequests.append({"displayName":m["["displayName"]"], "entityId":None, "groupId":gid, "hasData":{}, "count":{},"services":[], "found":False, "foundCount":0, "exception":""}) def __init__(self, metadata, matchedGroups: KeyRequestGroup = None): self.metadata=metadata if matchedGroups == None: self.matchedGroups = KeyRequestGroup() else: self.matchedGroups = keyRequests_groups self.keyRequests=[] self.services=[]