def test_to_str(): assert Number.to_str(1) == "1" assert Number.to_str(1000) == "1,000" assert Number.to_str(10000) == "10,000" assert Number.to_str(1000000) == "1,000,000" assert Number.to_str(1000.0) == "1,000" assert Number.to_str(1500.56) == "1,500.56" assert Duration.to_str(timedelta(days=1)) == "1 day, 0:00:00" assert Duration.to_str(timedelta(days=1, minutes=1, seconds=40)) == \ "1 day, 0:01:40" assert Duration.to_str(timedelta(minutes=5, seconds=5)) == "0:05:05"
def _assign_time_interactive(self, task, total): self._title("\n\nAssign Time") self._print("The stop watch recorded {}. Assign that time to the " "metrics in this task:\n\n".format(total)) remainder = total duration_metrics = filter(lambda m: m.metric_type is Duration, self.current_project.metrics) for metric in sorted(duration_metrics, key=lambda m: m.name): parsed_val = None while parsed_val is None: value = input(" {} ({} remaining): ".format(metric.name, remainder)) if value.lower() == "rest": parsed_val = remainder else: try: parsed_val = Duration.parse(value) except ParsingError as e: self._error(str(e)) except: self._error("Invalid duration") if parsed_val > remainder: self._error( "{} is greater than remaining time from " "stopwatch ({})".format(parsed_val, remainder) ) parsed_val = None task.record(metric, parsed_val) remainder -= parsed_val if remainder.total_seconds() <= 0: break self._print()
def test_duration(metrics_session, duration_metric, mock_task): entry1 = Duration(duration_metric, mock_task, timedelta(hours=1)) entry2 = Duration(duration_metric, mock_task, timedelta(hours=2)) metrics_session.add(entry1) metrics_session.add(entry2) metrics_session.commit() # Test aggregation total_duration = Duration.total(duration_metric, mock_task, metrics_session) assert isinstance(total_duration, timedelta) assert total_duration == timedelta(hours=3) # Test individual metrics persisted_1 = metrics_session.query(Duration)\ .filter_by(metric_id=duration_metric.id, task_id=mock_task.id, id=entry1.id)\ .one() persisted_2 = metrics_session.query(Duration) \ .filter_by(metric_id=duration_metric.id, task_id=mock_task.id, id=entry2.id) \ .one() assert persisted_1.value == timedelta(hours=1) assert persisted_2.value == timedelta(hours=2)
def test_duration_multiple(): value = Duration.parse("2 hrs, 5 mins") assert value == timedelta(hours=2, minutes=5)
def test_duration_days(): value = Duration.parse("2 days") assert value == timedelta(days=2)
def test_duration_seconds(): value = Duration.parse("4.5 seconds") assert value == timedelta(seconds=4, milliseconds=500) value = Duration.parse("525s") assert value == timedelta(seconds=525)
def test_duration_minutes(): value = Duration.parse("4 minutes") assert value == timedelta(minutes=4) value = Duration.parse("4.5 mins") assert value == timedelta(minutes=4, seconds=30)
def test_duration_hours(): value = Duration.parse("4 hours") assert value == timedelta(hours=4) value = Duration.parse("4.5 hours") assert value == timedelta(hours=4, minutes=30)
def test_duration_timefmt(): value = Duration.parse("10:05:01") assert value == timedelta(hours=10, minutes=5, seconds=1) value = Duration.parse("10:05") assert value == timedelta(hours=10, minutes=5)