def _validate_helper(args, config_d, workspace_d, entity_d=None):
<EOL>lid_inputs = sorted(config_d["<STR_LIT>"])<EOL>lid_outputs = sorted(config_d["<STR_LIT>"])<EOL>so insert values for invalid i/o<EOL>lid_inputs = [(i, config_d['<STR_LIT>']['<STR_LIT>'][i]) for i in invalid_inputs]<EOL>lid_outputs = [(i, config_d['<STR_LIT>']['<STR_LIT>'][i]) for i in invalid_outputs]<EOL>ing_attrs = []<EOL>ing_wksp_attrs = []<EOL><INDENT>an entity was provided, also check to see if that entity has the necessary inputs<EOL><DEDENT>ntity_d:<EOL>entity_type = config_d['<STR_LIT>']['<STR_LIT>']<EOL>entity_attrs = set(entity_d['<STR_LIT>'])<EOL>workspace_attrs = workspace_d['<STR_LIT>']['<STR_LIT>']<EOL>for inp, val in iteritems(config_d['<STR_LIT>']['<STR_LIT>']):<EOL><INDENT>if val.startswith("<STR_LIT>"):<EOL><INDENT>expected_attr = val.split('<STR_LIT:.>')[<NUM_LIT:1>]<EOL>if expected_attr == "<STR_LIT:name>":<EOL><INDENT>continue<EOL><DEDENT>if expected_attr not in entity_attrs:<EOL><INDENT>missing_attrs.append((inp, val))<EOL><DEDENT><DEDENT>if val.startswith("<STR_LIT>"):<EOL><INDENT>expected_attr = val.split('<STR_LIT:.>')[<NUM_LIT:1>]<EOL>if expected_attr not in workspace_attrs:<EOL><INDENT>missing_wksp_attrs.append((inp, val))<EOL><DEDENT><DEDENT><DEDENT>rn invalid_inputs, invalid_outputs, missing_attrs, missing_wksp_attrs<EOL>
Return FISSFC validation information on config for a certain entity