Code Duplication    Length = 20-22 lines in 3 locations

myems-api/core/utilities.py 3 locations

@@ 823-844 (lines=22) @@
820
        stdev = None
821
        variance = None
822
        current_datetime_utc = start_datetime_utc.replace(minute=0, second=0, microsecond=0, tzinfo=None)
823
        while current_datetime_utc <= end_datetime_utc:
824
            sub_total = Decimal(0.0)
825
            for row in rows_hourly:
826
                if current_datetime_utc <= row[0] < current_datetime_utc + \
827
                        timedelta(minutes=config.minutes_to_count):
828
                    sub_total += row[1]
829
830
            result_rows_hourly.append((current_datetime_utc, sub_total))
831
            sample_data.append(sub_total)
832
833
            counter += 1
834
            if minimum is None:
835
                minimum = sub_total
836
            elif minimum > sub_total:
837
                minimum = sub_total
838
839
            if maximum is None:
840
                maximum = sub_total
841
            elif maximum < sub_total:
842
                maximum = sub_total
843
844
            current_datetime_utc += timedelta(minutes=config.minutes_to_count)
845
846
        if len(sample_data) > 1:
847
            mean = statistics.mean(sample_data)
@@ 915-934 (lines=20) @@
912
        weekday = start_datetime_local.weekday()
913
        current_datetime_utc = \
914
            start_datetime_local.replace(hour=0) - timedelta(days=weekday, hours=int(config.utc_offset[1:3]))
915
        while current_datetime_utc <= end_datetime_utc:
916
            sub_total = Decimal(0.0)
917
            for row in rows_hourly:
918
                if current_datetime_utc <= row[0] < current_datetime_utc + timedelta(days=7):
919
                    sub_total += row[1]
920
921
            result_rows_weekly.append((current_datetime_utc, sub_total))
922
            sample_data.append(sub_total)
923
924
            counter += 1
925
            if minimum is None:
926
                minimum = sub_total
927
            elif minimum > sub_total:
928
                minimum = sub_total
929
930
            if maximum is None:
931
                maximum = sub_total
932
            elif maximum < sub_total:
933
                maximum = sub_total
934
            current_datetime_utc += timedelta(days=7)
935
936
        if len(sample_data) > 1:
937
            mean = statistics.mean(sample_data)
@@ 869-888 (lines=20) @@
866
        # calculate the start datetime in utc of the first day in local
867
        start_datetime_local = start_datetime_utc + timedelta(hours=int(config.utc_offset[1:3]))
868
        current_datetime_utc = start_datetime_local.replace(hour=0) - timedelta(hours=int(config.utc_offset[1:3]))
869
        while current_datetime_utc <= end_datetime_utc:
870
            sub_total = Decimal(0.0)
871
            for row in rows_hourly:
872
                if current_datetime_utc <= row[0] < current_datetime_utc + timedelta(days=1):
873
                    sub_total += row[1]
874
875
            result_rows_daily.append((current_datetime_utc, sub_total))
876
            sample_data.append(sub_total)
877
878
            counter += 1
879
            if minimum is None:
880
                minimum = sub_total
881
            elif minimum > sub_total:
882
                minimum = sub_total
883
884
            if maximum is None:
885
                maximum = sub_total
886
            elif maximum < sub_total:
887
                maximum = sub_total
888
            current_datetime_utc += timedelta(days=1)
889
890
        if len(sample_data) > 1:
891
            mean = statistics.mean(sample_data)