Ejemplo n.º 1
0
 def test_format_strings(self):
     track_progress((i for i in range(0, 100)),
                    total=100,
                    format_callback=lambda report, _reasons:
                    "{percent_complete}".format(**report),
                    every_n_records=11,
                    callback=lambda _: self.increment())
Ejemplo n.º 2
0
 def test_every_n_seconds(self):
     NUMBER_OF_ITERATIONS = 2
     SECONDS_BETWEEN_ITERATIONS = 0.02
     for _ in track_progress(range(1, NUMBER_OF_ITERATIONS + 1),
                             every_n_seconds=0.01,
                             callback=lambda _: self.increment()):
         time.sleep(SECONDS_BETWEEN_ITERATIONS)
     self.assertEqual(self.callback_count, 2)
Ejemplo n.º 3
0
    def test_every_n_percent(self):
        # [5,10...100]
        NUMBER_OF_ITERATIONS = 101

        # every_n_percent doesn't make sense when you don't know the size (because it is a generator)
        with self.assertRaises(Exception):
            track_progress((i for i in range(0, NUMBER_OF_ITERATIONS)),
                           every_n_percent=5,
                           callback=lambda _: self.increment())

        # But if you happen to know the size a priori, you can pass it in
        results = list(
            track_progress((i for i in range(0, NUMBER_OF_ITERATIONS)),
                           total=NUMBER_OF_ITERATIONS,
                           every_n_percent=5,
                           callback=lambda _: self.increment()))
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
        self.assertEqual(self.callback_count, 20)
Ejemplo n.º 4
0
    def test_every_n_records(self):
        # [5,10...100]
        NUMBER_OF_ITERATIONS = 101

        results = list(
            track_progress((i for i in range(0, NUMBER_OF_ITERATIONS)),
                           every_n_records=5,
                           callback=lambda _: self.increment()))
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
        self.assertEqual(self.callback_count, 20)
Ejemplo n.º 5
0
    def test_first_and_last_records(self):
        NUMBER_OF_ITERATIONS = 101

        results = list(
            track_progress((i for i in range(0, NUMBER_OF_ITERATIONS)),
                           report_first_record=True,
                           report_last_record=True,
                           callback=lambda _: self.increment()))
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
        self.assertEqual(self.callback_count, 2)
Ejemplo n.º 6
0
    def test_every_n_percent_every_y_records(self):
        NUMBER_OF_ITERATIONS = 100

        results = list(
            track_progress(range(0, NUMBER_OF_ITERATIONS),
                           every_n_percent=10,
                           every_n_records=11,
                           callback=lambda _: self.increment()))
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
        self.assertEqual(self.callback_count, 19)
Ejemplo n.º 7
0
 def test_every_n_seconds(self):
     NUMBER_OF_ITERATIONS = 2
     SECONDS_BETWEEN_ITERATIONS = 2
     print("Starting a test that will take {0} seconds".format(
         NUMBER_OF_ITERATIONS * SECONDS_BETWEEN_ITERATIONS))
     for _ in track_progress(range(1, NUMBER_OF_ITERATIONS + 1),
                             every_n_seconds=1,
                             callback=lambda _: self.increment()):
         time.sleep(SECONDS_BETWEEN_ITERATIONS)
     self.assertEqual(self.callback_count, 2)
Ejemplo n.º 8
0
    def test_custom_unbounded(self):
        # [5,10...100]
        NUMBER_OF_ITERATIONS = 101

        results = list(
            track_progress((i for i in range(0, NUMBER_OF_ITERATIONS)),
                           every_n_records=5,
                           callback=self.custom_callback,
                           format_callback=lambda report, _reasons:
                           "{records_seen}".format(**report)))
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
Ejemplo n.º 9
0
 def test_every_n_seconds_since_report(self):
     NUMBER_OF_ITERATIONS = 10
     results = list(
         track_progress(iterate_with_delays(range(10),
                                            gaps_every_n_records=1,
                                            gap_seconds=0.01),
                        every_n_records=3,
                        every_n_seconds_since_report=0.02,
                        callback=lambda _: self.increment()))
     self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
     self.assertEqual(self.callback_count, 6)
Ejemplo n.º 10
0
    def test_every_n_records_while_including_first(self):
        # [0,5,10...100]
        NUMBER_OF_ITERATIONS = 101

        results = list(
            track_progress(range(0, NUMBER_OF_ITERATIONS),
                           every_n_records=5,
                           report_first_record=True,
                           callback=lambda _: self.increment()))
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
        self.assertEqual(self.callback_count, 21)
Ejemplo n.º 11
0
    def test_every_n_seconds_idle(self):
        IDLE_SECONDS_TRIGGER = 0.02

        for _ in track_progress(iterate_with_delays(
            (i for i in range(1, 4)),
                gaps_every_n_records=2,
                gap_seconds=IDLE_SECONDS_TRIGGER + 0.02),
                                every_n_seconds_idle=IDLE_SECONDS_TRIGGER,
                                callback=lambda _: self.increment()):
            continue
        self.assertEqual(self.callback_count, 1)
Ejemplo n.º 12
0
    def test_as_context_manager(self):
        # [5,10...100]
        NUMBER_OF_ITERATIONS = 101

        with track_progress(range(0, NUMBER_OF_ITERATIONS),
                            every_n_percent=5,
                            callback=lambda _: self.increment()) as tracker:
            self.assertEqual(tracker.records_seen, 0)
            for _ in tracker:
                continue
            self.assertEqual(tracker.records_seen, NUMBER_OF_ITERATIONS)
            self.assertEqual(tracker.reports_raised, 20)
Ejemplo n.º 13
0
    def test_custom_bounded(self):
        # [5,10...100]
        NUMBER_OF_ITERATIONS = 101

        results = list(
            track_progress(range(0, NUMBER_OF_ITERATIONS),
                           every_n_percent=5,
                           callback=self.custom_print_callback,
                           format_callback=self.custom_format_callback))
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
        self.assertEqual(self.callback_results["Odd"], 10)
        self.assertEqual(self.callback_results["Even"], 10)
Ejemplo n.º 14
0
    def test_every_n_seconds_idle(self):
        IDLE_SECONDS_TRIGGER = 2

        print("Starting a test that will take {0} seconds".format(
            IDLE_SECONDS_TRIGGER + 2))
        for _ in track_progress(iterate_with_delays(
            (i for i in range(1, 4)),
                gaps_every_n_records=2,
                gap_seconds=IDLE_SECONDS_TRIGGER + 2),
                                every_n_seconds_idle=IDLE_SECONDS_TRIGGER,
                                callback=lambda _: self.increment()):
            continue
        self.assertEqual(self.callback_count, 1)
Ejemplo n.º 15
0
    def test_every_n_percent(self):
        # [5,10...100]
        NUMBER_OF_ITERATIONS = 101

        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            track_progress((i for i in range(0, NUMBER_OF_ITERATIONS)),
                           every_n_percent=5,
                           callback=lambda _: self.increment())
            assert len(w) == 1
            assert issubclass(w[-1].category, RuntimeWarning)
            assert str(
                w[-1].message
            ) == "Asked to report 'every_n_percent', but total length is not available."

        # But if you happen to know the size a priori, you can pass it in
        results = list(
            track_progress((i for i in range(0, NUMBER_OF_ITERATIONS)),
                           total=NUMBER_OF_ITERATIONS,
                           every_n_percent=5,
                           callback=lambda _: self.increment()))
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
        self.assertEqual(self.callback_count, 20)
Ejemplo n.º 16
0
    def test_empty_iterable(self):
        # []
        NUMBER_OF_ITERATIONS = 0

        results = list(
            track_progress(range(0, NUMBER_OF_ITERATIONS),
                           every_n_percent=0,
                           every_n_records=0,
                           every_n_seconds=0,
                           every_n_seconds_idle=0,
                           report_first_record=True,
                           report_last_record=True,
                           callback=lambda _: self.increment()))
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
        self.assertEqual(self.callback_count, 0)
Ejemplo n.º 17
0
    def test_record_keeping(self):
        NUMBER_OF_ITERATIONS = 100

        pt = track_progress(range(0, NUMBER_OF_ITERATIONS),
                            every_n_percent=10,
                            every_n_records=11,
                            callback=lambda _: self.increment())
        results = list(pt)
        self.assertEqual(len(results), NUMBER_OF_ITERATIONS)
        self.assertEqual(len(results), pt.records_seen)
        self.assertEqual(self.callback_count, 19)
        self.assertEqual(self.callback_count, pt.reports_raised)
        self.assertNotEqual(pt.start_time, None)
        self.assertNotEqual(pt.end_time, None)
        self.assertNotEqual(pt.total_time, None)