Esempio n. 1
0
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
Esempio n. 2
0
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