def _parse_data(self, raw_data, var_filter, time_extents):
retval = defaultdict(list)<EOL>p = parser()<EOL>begin_time, end_time = time_extents<EOL>for line in raw_data.splitlines():<EOL><INDENT>if len(line) == <NUM_LIT:0>:<EOL><INDENT>continue<EOL><DEDENT>fields = line.split("<STR_LIT:|>")[<NUM_LIT:0>:-<NUM_LIT:1>]<EOL>if var_filter is None or fields[<NUM_LIT:2>] in var_filter:<EOL><INDENT>dt = p.parse(fields[<NUM_LIT:3>]).replace(tzinfo=pytz.utc)<EOL>if (begin_time is None or dt >= begin_time) and (<EOL>end_time is None or dt <= end_time<EOL>):<EOL><INDENT>try:<EOL><INDENT>value = (<EOL>float(fields[<NUM_LIT:4>]) if fields[<NUM_LIT:4>] != "<STR_LIT>" else npNan<EOL>)<EOL><DEDENT>except ValueError:<EOL><INDENT>value = npNan<EOL><DEDENT>retval[fields[<NUM_LIT:0>]].append((fields[<NUM_LIT:2>], dt, value))<EOL><DEDENT><DEDENT><DEDENT>return dict(retval)<EOL>
Transforms raw HADS observations into a dict:
    station code -> [(variable, time, value), ...]

Takes into account the var filter (if set).