def load_year_data(basin, elem, year, include_sites): sys.stderr.write("Loading %s data...\n" % year) sdate = parse_date('%s-01-01' % year).date() edate = parse_date('%s-12-31' % year).date() sitedata = StationDataIO( basin=basin, start_date=sdate, end_date=edate, parameter=elem, ) sitedata = {site.uid: site for site in sitedata} dates = {} date = sdate while date <= edate: dates[date] = {} date += one_day for site in include_sites: if site.uid not in sitedata: continue data = sitedata[site.uid].data for row in data: dates[row.date][site.uid] = getattr(row, elem) date = sdate while date <= edate: data = list( map(str, [dates[date].get(site.uid, "") for site in include_sites])) sys.stdout.write(",".join([str(date)] + data)) sys.stdout.write("\n") date += one_day
def map_value(self, field, value): """ Clean up some values returned from the web service. (overrides wq.io.mappers.BaseMapper) """ if field == 'sids': # Site identifiers are returned as "[id] [auth_id]"; # Map to auth name for easier usability ids = {} for idinfo in value: id, auth = idinfo.split(' ') auth = AUTHORITY_BY_ID[auth] ids[auth['name']] = id return ids if field == 'valid_daterange': # Date ranges for each element are returned in an array # (sorted by the order the elements were were requested); # Convert to dictionary with element id as key elems, complex = self.getlist('parameter') ranges = {} for elem, val in zip(elems, value): if val: start, end = val ranges[elem] = (parse_date(start), parse_date(end)) else: ranges[elem] = None, None return ranges return value
def load_year_data(basin, elem, year, include_sites): sys.stderr.write("Loading %s data...\n" % year) sdate = parse_date('%s-01-01' % year).date() edate = parse_date('%s-12-31' % year).date() sitedata = StationDataIO( basin=basin, start_date=sdate, end_date=edate, parameter=elem, ) sitedata = {site.uid: site for site in sitedata} dates = {} date = sdate while date <= edate: dates[date] = {} date += one_day for site in include_sites: if site.uid not in sitedata: continue data = sitedata[site.uid].data for row in data: dates[row.date][site.uid] = getattr(row, elem) date = sdate while date <= edate: data = map(str, [ dates[date].get(site.uid, "") for site in include_sites ]) sys.stdout.write(",".join([str(date)] + data)) sys.stdout.write("\n") date += one_day