def do_append_keywords_prefix(prefix, body, scope, using_ns_arr, using_cls_arr): from pysst.keyword import Keyword from pysst.sstglobals import GlobalData #check for string parameters matches = re.compile("(?<!:)%s_param\s*[(][\s]*[\"](.*?)[\"]" % prefix, re.DOTALL).findall(body) for match in matches: keyword = Keyword(match, "string") GlobalData.keywords[scope] = keyword matches = re.compile("(?<!:)%s_optional_param\s*[(][\s\n]*[\"](.*?)[\"]" % prefix, re.DOTALL).findall(body) for match in matches: keyword = Keyword(match, "string") GlobalData.keywords[scope] = keyword for flag, keytype in AppendData.keyword_types: #check for mandatory keywords regexp = "%s_%s_param\s*[(][\n\s]*[\"](.*?)[\"]" % (prefix, flag) matches = re.compile(regexp, re.DOTALL).findall(body) for name in matches: keyword = Keyword(name, keytype) GlobalData.keywords[scope] = keyword if keytype == "factory": keyword.factory_type = True regexp = "%s_optional_%s_param\s*[(][\n\s]*[\"](.*?)[\"]\s*[,]\s*(.*?)[\)][.; \n]" % (prefix, flag) matches = re.compile(regexp, re.DOTALL).findall(body) for name, default_val in matches: default_val = default_val.strip().strip('"') keyword = Keyword(name, keytype, default_val) GlobalData.keywords[scope] = keyword
def do_append_factories(body, scope, using_ns_arr, using_cls_arr, resolve_factory_name): from pysst.scope import get_full_scope_name, GetScopeError from pysst.keyword import Keyword from pysst.sstglobals import GlobalData # now check for factories scope_arr = scope.split("::") matches = AppendData.factory_regexp.findall(body) for factory_type, read_type, params in matches: factory_type = factory_type.strip().strip("_") full_factory_name = factory_type if resolve_factory_name: try: full_factory_name = get_full_scope_name(factory_type, scope_arr, using_cls_arr, using_ns_arr) except GetScopeError as e: sys.exit("Failed to resolve scope of factory %s" % factory_type) if read_type.endswith("_param"): param_name = param_obj = "" optional_val = None extra = False if read_type == "_optional_param": param_name, optional_val, param_obj = params.split(",")[:3] optional_val = optional_val.replace('"', "").strip() elif read_type == "_extra_param": param_name, param_obj = params.split(",")[:2] extra = True elif read_type == "_param": param_name, param_obj = params.split(",")[:2] param_name = param_name.replace('"', "").strip() keyword = Keyword(param_name, full_factory_name, optional_val, extra) reg_cls = GlobalData.keywords.get_registered_class(full_factory_name) keyword.allowed = reg_cls.allowed keyword.factory_type = True GlobalData.keywords[scope] = keyword else: pass