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/19 12:04:04 UTC
celix git commit: CELIX-236: Add celix-utils
Repository: celix
Updated Branches:
refs/heads/feature/CELIX-236_celix-boostrap e5297485d -> 272929971
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/feature/CELIX-236_celix-boostrap
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