def test_get_max_month_datetime(input, expected, settings, tz_name): settings.TIME_ZONE = tz_name input_dt = timezone.make_aware(input, timezone=pytz.timezone(tz_name)) expected_dt = timezone.make_aware(expected, timezone=pytz.timezone(tz_name)) assert get_max_month_datetime(input_dt) == expected_dt
def get_summary(scores, start, end): rate = review_rate = None translation_month = review_month = None translated_row = reviewed_row = None translations = [] reviews = [] start = make_naive(start) end = make_naive(end) for score in scores: score_time = make_naive(score.creation_time) if (score.rate != rate or translation_month != score_time.month): rate = score.rate translation_month = score_time.month translated_row = { 'type': PaidTaskTypes.TRANSLATION, 'action': PaidTaskTypes.TRANSLATION, 'amount': 0, 'rate': score.rate, 'start': score_time, 'end': score_time, } translations.append(translated_row) if (score.review_rate != review_rate or review_month != score_time.month): review_rate = score.review_rate review_month = score_time.month reviewed_row = { 'type': PaidTaskTypes.REVIEW, 'action': PaidTaskTypes.REVIEW, 'amount': 0, 'rate': score.review_rate, 'start': score_time, 'end': score_time, } reviews.append(reviewed_row) translated_words, reviewed_words = score.get_paid_words() if translated_words > 0: translated_row['end'] = score_time translated_row['amount'] += translated_words elif reviewed_words > 0: reviewed_row['end'] = score_time reviewed_row['amount'] += reviewed_words for group in [translations, reviews]: for i, item in enumerate(group): if i == 0: item['start'] = start else: item['start'] = get_min_month_datetime(item['start']) if item['end'].month == end.month and item['end'].year == end.year: item['end'] = end else: item['end'] = get_max_month_datetime(item['end']) result = filter(lambda x: x['amount'] > 0, translations + reviews) result = sorted(result, key=lambda x: x['start']) for item in result: item['type'] = item['action'] item['action'] = PaidTask.get_task_type_title(item['action']) for item in result: item['start'] = item['start'].strftime('%Y-%m-%d') item['end'] = item['end'].strftime('%Y-%m-%d') return result
def get_summary(scores, start, end): rate = review_rate = None translation_month = review_month = None translated_row = reviewed_row = None translations = [] reviews = [] start = make_naive(start) end = make_naive(end) for score in scores: score_time = make_naive(score.creation_time) if (score.rate != rate or translation_month != score_time.month): rate = score.rate translation_month = score_time.month translated_row = { 'type': PaidTaskTypes.TRANSLATION, 'action': PaidTaskTypes.TRANSLATION, 'amount': 0, 'rate': score.rate, 'start': score_time, 'end': score_time, } translations.append(translated_row) if (score.review_rate != review_rate or review_month != score_time.month): review_rate = score.review_rate review_month = score_time.month reviewed_row = { 'type': PaidTaskTypes.REVIEW, 'action': PaidTaskTypes.REVIEW, 'amount': 0, 'rate': score.review_rate, 'start': score_time, 'end': score_time, } reviews.append(reviewed_row) translated_words, reviewed_words = score.get_paid_wordcounts() if translated_words is not None: translated_row['end'] = score_time translated_row['amount'] += translated_words elif reviewed_words is not None: reviewed_row['end'] = score_time reviewed_row['amount'] += reviewed_words for group in [translations, reviews]: for i, item in enumerate(group): if i == 0: item['start'] = start else: item['start'] = get_min_month_datetime(item['start']) if item['end'].month == end.month and item['end'].year == end.year: item['end'] = end else: item['end'] = get_max_month_datetime(item['end']) result = filter(lambda x: x['amount'] > 0, translations + reviews) result = sorted(result, key=lambda x: x['start']) for item in result: item['type'] = item['action'] item['action'] = PaidTask.get_task_type_title(item['action']) for item in result: item['start'] = item['start'].strftime('%Y-%m-%d') item['end'] = item['end'].strftime('%Y-%m-%d') return result