162 lines
5.2 KiB
Python
162 lines
5.2 KiB
Python
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 __init__(self,
|
|
metadata,
|
|
matchedGroups: KeyRequestGroup = None):
|
|
self.metadata=metadata
|
|
|
|
if matchedGroups == None:
|
|
self.matchedGroups = KeyRequestGroup()
|
|
else:
|
|
self.matchedGroups = keyRequests_groups
|
|
|
|
self.keyRequests=[]
|
|
self.services=[]
|
|
|
|
|