From 71ac39936977e6408d815a5ecb100fd51f8dadb8 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Thu, 10 Sep 2020 13:57:44 +0530 Subject: [PATCH] fix: Commonified function and updated scheduler events Co-authored-by: marination --- erpnext/hooks.py | 3 +- erpnext/utilities/doctype/video/video.py | 42 ++++++++++-------------- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 3beae3b6c8..f8b6be70ca 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -284,7 +284,7 @@ auto_cancel_exempted_doctypes= [ scheduler_events = { "cron": { "0/30 * * * *": [ - "erpnext.utilities.doctype.video.video.update_youtube_data_half_hourly", + "erpnext.utilities.doctype.video.video.update_youtube_data", ] }, "all": [ @@ -302,7 +302,6 @@ scheduler_events = { "erpnext.projects.doctype.project.project.collect_project_status", "erpnext.hr.doctype.shift_type.shift_type.process_auto_attendance_for_all_shifts", "erpnext.support.doctype.issue.issue.set_service_level_agreement_variance", - "erpnext.utilities.doctype.video.video.update_youtube_data" ], "daily": [ "erpnext.stock.reorder_item.reorder_item", diff --git a/erpnext/utilities/doctype/video/video.py b/erpnext/utilities/doctype/video/video.py index 6971beb5d7..7918b828aa 100644 --- a/erpnext/utilities/doctype/video/video.py +++ b/erpnext/utilities/doctype/video/video.py @@ -50,45 +50,37 @@ class Video(Document): title = "Failed to Update YouTube Statistics for Video: {0}".format(self.name) frappe.log_error(title + "\n\n" + frappe.get_traceback(), title=title) + def is_tracking_enabled(): return frappe.db.get_single_value("Video Settings", "enable_youtube_tracking") -def get_frequency(value): - if not value: - return None - # Return frequency in hours +def get_frequency(value): + # Return numeric value from frequency field, return 1 as fallback default value: 1 hour if value != "Daily": return frappe.utils.cint(value[:2].strip()) - else: - # 24 hours for Daily + elif value: return 24 - - -def update_youtube_data_half_hourly(): - # Called every 30 mins via hooks - frequency = get_frequency(frappe.db.get_single_value("Video Settings", "frequency")) - if not is_tracking_enabled() or not frequency: - return - - if frequency == 30: - batch_update_youtube_data() + return 1 def update_youtube_data(): - # Called every hour via hooks - frequency = get_frequency(frappe.db.get_single_value("Video Settings", "frequency")) + # Called every 30 minutes via hooks + enable_youtube_tracking, frequency = frappe.db.get_value("Video Settings", "Video Settings", ["enable_youtube_tracking", "frequency"]) - # if frequency is 30 mins dont proceed, as its handled in another method - if not is_tracking_enabled() or not frequency or frequency == 30: + if not enable_youtube_tracking: return + frequency = get_frequency(frequency) time = datetime.now() timezone = pytz.timezone(frappe.utils.get_time_zone()) site_time = time.astimezone(timezone) - if site_time.hour % frequency == 0: + if frequency == 30: batch_update_youtube_data() + elif site_time.hour % frequency == 0: + batch_update_youtube_data() + def get_formatted_ids(video_list): # format ids to comma separated string for bulk request @@ -98,6 +90,7 @@ def get_formatted_ids(video_list): return ','.join(ids) + @frappe.whitelist() def get_id_from_url(url): """ @@ -128,7 +121,8 @@ def batch_update_youtube_data(): 'like_count' : video_stats.get('likeCount'), 'view_count' : video_stats.get('viewCount'), 'dislike_count' : video_stats.get('dislikeCount'), - 'comment_count' : video_stats.get('commentCount') + 'comment_count' : video_stats.get('commentCount'), + 'video_id': video_id } frappe.db.sql(""" @@ -138,7 +132,7 @@ def batch_update_youtube_data(): view_count = %(view_count)s, dislike_count = %(dislike_count)s, comment_count = %(comment_count)s - WHERE youtube_video_id = '{0}'""".format(video_id), stats) + WHERE youtube_video_id = %(video_id)s""", stats) video_list = frappe.get_all("Video", fields=["youtube_video_id"]) if len(video_list) > 50: @@ -150,4 +144,4 @@ def batch_update_youtube_data(): start += 50 end += 50 else: - prepare_and_set_data(video_list) \ No newline at end of file + prepare_and_set_data(video_list)