def validate_schema(s): val = schema_q(s) avail_schema = ['R', 'CF', 'CQ', 'CV', 'TS', 'VAL'] d_var = {} if(val): # Tokenize the schema line for kv in globl.str_map(lambda x: x.strip(), s.split(' ')): # Tokenize the key value pairs var = globl.str_map(lambda x: x.strip(), kv.split(':')) if(len(var) == 2): if(var[0] in avail_schema): # Determine any function calls (validate later) if('(' in var[1]): for term in globl.str_map(lambda x: x.strip(), var[1].split('+')): term, func_names = globl.strip_func_names(term) if(schema_guard[var[0]](term)): continue else: print "ERROR: Invalid value for", var[0], "being", var[1] return False d_var[var[0]] = var[1] elif(schema_guard[var[0]](var[1])): d_var[var[0]] = var[1] else: print "ERROR: Invalid value for", var[0], "being", var[1] return False else: print "ERROR: Invalid key (", var[0], ") in schema" return False else: print "ERROR: Could not properly split", var return False return d_var else: return False
def enumerate_terms(d): locality_lookup ={"R":pb.Term.R, "CF":pb.Term.CF, "CQ":pb.Term.CQ, "CV":pb.Term.CV, "TS":pb.Term.TS, "VAL":pb.Term.VAL} def det_term_size(term): for const, label in d[globl.PARSE]: if(label == term and type(const) is int): return int(const) return False unique_schema = 0 for dict in d[globl.SCHEMA]: for key in dict: type_list = globl.str_map(lambda x: x.strip(), dict[key].split('+')) offset = 0 for item in type_list: term = d["PROTOBUF"].term.add() term.name = item term.locality = locality_lookup[key] #term.dataformat = ?? term.location = type_list.index(item) term_size = det_term_size(item) term.schema = unique_schema if(term_size): term.length = term_size if(type(offset) is int): term.offset = offset offset += term_size else: offset = "unknown" unique_schema += 1 return d
def validate_var(s): val = var_q(s) var = globl.str_map(lambda x: x.strip(), s.split('=')) if(val and (len(var) == 2)): if(var_guard[val](var[1])): return var else: print "ERROR: Invalid value for variable", var[0] return False else: print "ERROR: Could not properly split", var return False
def remove_static_text(d): d['STATIC_TEXT'] = {} for dict in d[globl.SCHEMA]: for key in dict: dict[key] = map(globl.strip_func_names, globl.str_map(lambda x: x.strip(), dict[key].split('+'))) for i in range(0, len(dict[key])): # If we have a static text if((dict[key][i][0] != "") and ((dict[key][i][0][0] == '"') and (dict[key][i][0][-1] == '"'))): new_item = "_"+dict[key][i][0][1:-1] # Instead of consolidating here we leverage the dictionary # object to 'unique-ify' all text objects d['STATIC_TEXT'][new_item] = t.TEXT.safe_substitute(var=new_item, val=dict[key][i][0]) dict[key][i][0] = new_item text_str = "" for key in d['STATIC_TEXT']: text_str += d['STATIC_TEXT'][key] d['STATIC_TEXT'] = text_str return d