def test_iter_by_timepoints_withgaps(self):
     """Test TimeStream().iter_by_timepoints with a complete timestream"""
     ts = TimeStream()
     ts.load(helpers.FILES["timestream_gaps"])
     res = ts.iter_by_timepoints()
     self.assertTrue(isgenerator(res))
     for iii, image in enumerate(res):
         # Check lazy-loading
         self.assertIsNone(image._pixels)
         # We don't check path, as it's got a different timestream name
         self.assertEqual(image.datetime,
                          helpers.TS_GAPS_DATES_PARSED[iii])
 def test_iter_by_timepoints_full(self):
     """Test TimeStream().iter_by_timepoints with a complete timestream"""
     ts = TimeStream()
     ts.load(helpers.FILES["timestream"])
     res = ts.iter_by_timepoints()
     self.assertTrue(isgenerator(res))
     for iii, image in enumerate(res):
         # Check lazy-loading
         self.assertIsNot(image, None)
         self.assertIsNone(image._pixels)
         self.assertEqual(image.path, helpers.TS_FILES_JPG[iii])
         self.assertEqual(image.datetime,
                          helpers.TS_DATES_PARSED[iii])
         self.assertIsNot(image.pixels, None)
         self.assertEqual(image.pixels.dtype, helpers.TS_JPG_DTYPE)
         self.assertEqual(image.pixels.shape, helpers.TS_JPG_SHAPE)
 def test_iter_by_timepoints_withgaps_no_rm_gaps(self):
     """Test TimeStream().iter_by_timepoints with a complete timestream"""
     ts = TimeStream()
     ts.load(helpers.FILES["timestream_gaps"])
     res = ts.iter_by_timepoints(remove_gaps=False)
     self.assertTrue(isgenerator(res))
     for iii, image in enumerate(res):
         if iii in {3, 5}:
             # Missing images
             self.assertEqual(0, len(image.pixels))
             continue
         self.assertIsNot(image, None)
         # Check lazy-loading
         self.assertIsNone(image._pixels)
         # We don't check path, as it's got a different timestream name
         self.assertEqual(image.datetime,
                          helpers.TS_DATES_PARSED[iii])
def main(opts):
    setup_module_logging(logging.ERROR)
    ts_name = opts["-i"]
    out_fh = open(opts['-o'], 'w')
    ts_info = ts_get_manifest(ts_name)
    times = setup_header(ts_info)
    out_csv = csv.writer(out_fh)
    header = ["Date", ]
    header.extend(times)
    out_csv.writerow(header)
    ts = TimeStream()
    ts.load(ts_name)
    res_dict = {}
    print("Collecting image data for {}...".format(ts_name))
    count = 0
    for img in ts.iter_by_timepoints():
        if count % 5 == 0:
            print("Processed {} images!".format(count), end='\r')
            sys.stdout.flush()
        count += 1
        img_dt = img.datetime
        try:
            res_dict[img_dt.date()][img_dt.time().isoformat()] = 1
        except KeyError:
            res_dict[img_dt.date()] = {img_dt.time().isoformat(): 1}
    print("Processed {} images!".format(count))
    print("Done collecting image sums, now making the table")
    for this_date, times in sorted(res_dict.items()):
        row = []
        row.append(this_date.isoformat())
        start_today = datetime.combine(this_date.today(), time.min)
        end_today = datetime.combine(this_date.today(), time.max)
        all_times = iter_date_range(start_today, end_today,
                                    ts_info['interval'] * 60)
        for timepoint in all_times:
            try:
                row.append(times[timepoint.time().isoformat()])
            except KeyError:
                row.append("0")
        out_csv.writerow(row)
    print("All done!")