summaryrefslogtreecommitdiffstats
path: root/tools/lib/xpath.py
diff options
context:
space:
mode:
authorMichael DÜrre <michael.duerre@highstreet-technologies.com>2022-01-18 10:06:31 +0100
committerDan Timoney <dtimoney@att.com>2022-03-22 13:08:35 +0000
commit7bb133e401f31623104ecd3534e2aab3ffe72009 (patch)
tree35b0115f52ec7d067cbae31c459a429de3bfb073 /tools/lib/xpath.py
parentcce01d4d7b326ec8283479f3ddf397a306b32a29 (diff)
migrate parents to phosphorus-sr1
generate sr1 parents and add script for this Issue-ID: CCSDK-3565 Signed-off-by: Michael DÜrre <michael.duerre@highstreet-technologies.com> Change-Id: I53c5bed11d3d336df5ca99f521a210067663571d Signed-off-by: Michael DÜrre <michael.duerre@highstreet-technologies.com>
Diffstat (limited to 'tools/lib/xpath.py')
-rw-r--r--tools/lib/xpath.py84
1 files changed, 84 insertions, 0 deletions
diff --git a/tools/lib/xpath.py b/tools/lib/xpath.py
new file mode 100644
index 00000000..07f8e389
--- /dev/null
+++ b/tools/lib/xpath.py
@@ -0,0 +1,84 @@
+
+import re
+
+
+class XPathComponent:
+ regex = r"([^\/^\[]+)(\[([^\]]+)\])?"
+ def __init__(self, expr):
+ matches = re.finditer(XPathComponent.regex, expr, re.DOTALL | re.IGNORECASE)
+ match = next(matches)
+ self.name = match.group(1)
+ tmp = match.group(3) if len(match.groups())>2 else None
+ self.filter = tmp.split(',') if tmp is not None else []
+
+ def equals(self, comp, ignoreFilter=False) -> bool:
+ if ignoreFilter:
+ return self.name == comp.name
+ if self.name == comp.name:
+ return set(self.filter) == set(comp.filter)
+ return False
+
+ def setFilter(self, f, v):
+ self.filter.append('{}={}'.format(f,v))
+
+ def hasFilter(self, propertyName):
+ search=propertyName+'='
+ for filter in self.filter:
+ if filter.startswith(search):
+ return True
+ return False
+
+ def __str__(self) -> str:
+ return "XPathComponent[name={}, filter={}]".format(self.name, self.filter)
+
+class XPath:
+
+ def __init__(self, expr=None):
+ self.raw = expr
+ tmp = expr.split('/') if expr is not None else []
+ self.components=[]
+ if len(tmp)>0 and len(tmp[0])==0:
+ tmp.pop(0)
+ for x in tmp:
+ self.components.append(XPathComponent(x))
+
+ def add(self, c: str) -> XPathComponent:
+ xc=XPathComponent(c)
+ self.components.append(xc)
+ return xc
+
+ def remove(self, c: str) -> bool:
+ if self.components[len(self.components)-1].equals(XPathComponent(c), True):
+ self.components.pop()
+ return True
+ return False
+
+ def parentParamIsNeeded(self, xp, paramName) -> bool:
+ for i in range(len(xp.components)):
+ if i>=len(self.components):
+ return False
+ if not self.components[i].equals(xp.components[i], True):
+ return False
+ return self.components[len(xp.components)-1].hasFilter(paramName)
+
+ def equals(self, path, ignoreFilter=False) -> bool:
+ if len(self.components) != len(path.components):
+ return False
+
+ for i in range(len(self.components)):
+ if not self.components[i].equals(path.components[i], ignoreFilter):
+ return False
+ return True
+
+ def lastname(self) -> str:
+ tmp = self.last()
+ return tmp.name if tmp is not None else ""
+
+ def last(self, off=0) -> XPathComponent:
+ return self.components[len(self.components)-1-off] if len(self.components)>off else None
+
+ def subpath(self, off=0):
+ tmp =XPath()
+ for i in range(len(self.components)-off):
+ tmp.components.append(self.components[i])
+ return tmp \ No newline at end of file