You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by bp...@apache.org on 2016/01/27 15:34:32 UTC

[7/9] celix git commit: CELIX-236: Add celix-utils

CELIX-236: Add celix-utils


Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/27292997
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/27292997
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/27292997

Branch: refs/heads/develop
Commit: 2729299714c4bd9fb66ddef7370128837f50abfb
Parents: e529748
Author: Bjoern Petri <bp...@apache.org>
Authored: Tue Jan 19 12:03:45 2016 +0100
Committer: Bjoern Petri <bp...@apache.org>
Committed: Tue Jan 19 12:03:45 2016 +0100

----------------------------------------------------------------------
 celix-bootstrap/celix/bootstrap/celix_utils.py | 138 ++++++++++++++++++++
 1 file changed, 138 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/27292997/celix-bootstrap/celix/bootstrap/celix_utils.py
----------------------------------------------------------------------
diff --git a/celix-bootstrap/celix/bootstrap/celix_utils.py b/celix-bootstrap/celix/bootstrap/celix_utils.py
new file mode 100644
index 0000000..bcc5667
--- /dev/null
+++ b/celix-bootstrap/celix/bootstrap/celix_utils.py
@@ -0,0 +1,138 @@
+import cmd
+import glob
+import os.path
+import re
+import readline
+import sys
+
+class PathCompleter(object):
+
+    def __init__(self, suffix=None):
+        self.suffix=suffix
+
+    def _listdir(self, root=''):
+        res = []
+        for name in glob.glob(root + '*'): 
+            path = os.path.join(root, name)
+            if os.path.isdir(path):
+                name += os.sep
+            	res.append(name)
+	    else:
+		if self.suffix is None:
+            		res.append(name)
+		elif name.endswith(self.suffix):
+            		res.append(name)
+
+        return res
+
+    def complete(self, text, state):
+        buffer = readline.get_line_buffer()
+        return self._listdir(buffer.strip())[state]
+
+
+class FileContentCompleter(object):
+    def __init__(self, filename, keywords=[]):
+        self._indexFile(filename, keywords)
+
+    def _indexFile(self, filename, keywords=[], delimiter_chars=":;#,.!?{}*)(=\\\"/"):
+        try:
+	    txt_fil = open(filename, "r")
+	    self.found_words = []
+
+            for line in txt_fil:
+		# ignore commented lines
+		if not (line.strip()).startswith(("/*", "*", "//")):
+                    words = line.split()
+                    words2 = [ word.strip(delimiter_chars) for word in words ]
+
+                    for word in words2:
+                        if not word in self.found_words and not word in keywords and not word.isdigit() and not any(i in word for i in delimiter_chars):
+                            self.found_words.append(word)
+
+            txt_fil.close()
+        except IOError as ioe:
+             sys.stderr.write("Caught IOError: " + repr(ioe) + "\n")
+        except Exception as e:
+             sys.stderr.write("Caught Exception: " + repr(e) + "\n")
+
+    def checkWord(self, word):
+        if word in self.found_words:
+		return True
+	else:
+		return False
+
+    def complete(self, text, state):
+        buffr = readline.get_line_buffer()
+	wordlist = [w for w in self.found_words if w.startswith(buffr)]
+
+        return wordlist[state]
+
+def checkInput(msg, regex='', default=''):
+	while True:
+		msgDefault = msg + ' [' + default + ']: ' if default is not '' else msg + ': '
+ 		inpt = raw_input(msgDefault).strip() or default
+		
+		if regex is not '':
+			res = re.match(regex, inpt);
+			if res is not None and inpt == res.group():
+				return inpt
+			else:
+				print('Invalid Input.')
+		else:
+			return inpt
+
+def yn(msg, default = 'y'):
+	while True:
+		addComponent = raw_input("%s [%s]:" % (msg, default)) or default
+      		if addComponent.lower() in ('y', 'yes', 'n', 'no'):
+			return addComponent.lower() in ('y', 'yes')
+		else:
+			print("Invalid Input.")
+
+
+def checkCelixInstallation():
+	while True:
+		comp = PathCompleter()
+		# we want to treat '/' as part of a word, so override the delimiters
+		readline.set_completer_delims(' \t\n;')
+		readline.parse_and_bind("tab: complete")
+		readline.set_completer(comp.complete)
+
+ 		installDir = checkInput('Please enter celix installation location', '(?:/[^/]+)*$', '/usr/local')
+
+		if os.path.exists(installDir + '/bin/celix'):
+			return installDir
+		else:
+			print('celix launcher could not be found at ' + installDir + '/bin/celix')
+
+
+
+def checkInclude(msg, regex):
+	comp = PathCompleter(".h")
+	# we want to treat '/' as part of a word, so override the delimiters
+	readline.set_completer_delims(' \t\n;')
+	readline.parse_and_bind("tab: complete")
+	readline.set_completer(comp.complete)
+
+	headerFile = checkInput(msg, regex)
+
+	return headerFile
+
+def checkIncludeContent(msg, filename):
+	keywords = ["auto","break","case","char","const","continue","define", "default","do","double","else","endif", "enum","extern","float","for","goto","if","ifndef", "include", "inline","int","long","register","restrict","return","short","signed","sizeof","static","struct","switch","typedef","union","unsigned","void","volatile","while", "celix_status_t"];
+
+	comp = None	
+
+	if os.path.exists(filename):
+		comp = FileContentCompleter(filename, keywords)
+		readline.set_completer_delims(' \t\n;')
+		readline.parse_and_bind("tab: complete")
+		readline.set_completer(comp.complete)
+
+	inpt = checkInput(msg, '[^\s]+');
+
+	if comp is not None:
+		while(comp.checkWord(inpt) == False and yn('\''+ inpt + '\'  was not found in the given include file. Do you really want to use it?', 'n') == False):
+			inpt = checkInput(msg, '[^\s]+');
+
+	return inpt