keyrequestparser/KRParser/keyrequests.py

166 lines
5.5 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 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=[]