From 29cabe6a6ff4dfdeb2e0b784d6033b5cc64663fc Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Tue, 2 Nov 2021 13:00:48 -0500 Subject: [PATCH 01/19] Adding some checks to make sure launch and complete dates are not prior to the current time. Modified builder to ensure that the launch and complete datetimes can only be greater than the current datetime. Errors will result in an error message and repeated attempts to get correct values. --- src/assessment/builder.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/assessment/builder.py b/src/assessment/builder.py index b3b9c649..9c45142f 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -16,6 +16,7 @@ # Standard Python Libraries import copy import csv +import datetime import json import logging import sys @@ -155,7 +156,13 @@ def build_campaigns(assessment, campaign_number, template_smtp): campaign = Campaign(name=assessment.id) # Get Launch Time - campaign.launch_date = get_time_input("start", assessment.timezone) + while True: + campaign.launch_date = get_time_input("start", assessment.timezone) + + if campaign.launch_date > datetime.now(): + break + else: + logging.error("Launch date is not after the current datetime") while True: campaign.complete_date = get_time_input("end", assessment.timezone) @@ -165,6 +172,11 @@ def build_campaigns(assessment, campaign_number, template_smtp): else: logging.error("Complete Date is not after Launch Date.") + if campaign.complete_date > datetime.now(): + break + else: + logging.error("Complete date is not after the current datetime.") + campaign.smtp, campaign.template = import_email( assessment, campaign_number, template_smtp ) From 50fa865a6e8a05b57d575f2e0dd62e5886e9e33a Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Tue, 2 Nov 2021 13:04:07 -0500 Subject: [PATCH 02/19] Bump project version from 0.1.0 to 0.1.1 --- src/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_version.py b/src/_version.py index 928ae861..72cbd147 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.0" +__version__ = "0.1.1" From 719a2e7b04a53df6dee7679c91ce61eb6c8c8728 Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Tue, 2 Nov 2021 13:04:18 -0500 Subject: [PATCH 03/19] Bump project version from 0.1.1 to 0.1.1-rc.1 --- src/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_version.py b/src/_version.py index 72cbd147..1a0af754 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1" +__version__ = "0.1.1-rc.1" From 8898e517a27942d23dd04b58bc36e2b644aa81aa Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Tue, 2 Nov 2021 14:20:01 -0500 Subject: [PATCH 04/19] Bug-fix importing datetime for datetime.now() --- src/assessment/builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assessment/builder.py b/src/assessment/builder.py index 9c45142f..b14eaa76 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -16,7 +16,7 @@ # Standard Python Libraries import copy import csv -import datetime +from datetime import datetime import json import logging import sys From cc526b61ad3297ddd594974ced510bac07c16464 Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Tue, 2 Nov 2021 14:20:25 -0500 Subject: [PATCH 05/19] Bump project version from 0.1.1-rc.1 to 0.1.1-rc.2 --- src/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_version.py b/src/_version.py index 1a0af754..7a6c32c0 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1-rc.1" +__version__ = "0.1.1-rc.2" From 7594a9c25d2e1a8f331d4bd0f35b774b00706f58 Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Wed, 3 Nov 2021 11:03:17 -0500 Subject: [PATCH 06/19] Bump project version from 0.1.1-rc.2 to 0.1.1-rc.3 --- src/_version.py | 2 +- src/assessment/builder.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/_version.py b/src/_version.py index 7a6c32c0..f358e8f8 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1-rc.2" +__version__ = "0.1.1-rc.3" diff --git a/src/assessment/builder.py b/src/assessment/builder.py index b14eaa76..08104476 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -159,7 +159,10 @@ def build_campaigns(assessment, campaign_number, template_smtp): while True: campaign.launch_date = get_time_input("start", assessment.timezone) - if campaign.launch_date > datetime.now(): + if ( + campaign.launch_date + > pytz.timezone(assessment.timezone).localize(datetime.now()).isoformat() + ): break else: logging.error("Launch date is not after the current datetime") @@ -172,7 +175,10 @@ def build_campaigns(assessment, campaign_number, template_smtp): else: logging.error("Complete Date is not after Launch Date.") - if campaign.complete_date > datetime.now(): + if ( + campaign.complete_date + > pytz.timezone(assessment.timezone).localize(datetime.now()).isoformat() + ): break else: logging.error("Complete date is not after the current datetime.") From b79321219a881a0d26f6b38d636a47f4f336cbdd Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Wed, 3 Nov 2021 12:32:34 -0500 Subject: [PATCH 07/19] Bump project version from 0.1.1-rc.3 to 0.1.1-rc.4 --- src/_version.py | 2 +- src/assessment/builder.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/_version.py b/src/_version.py index f358e8f8..e328f4fa 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1-rc.3" +__version__ = "0.1.1-rc.4" diff --git a/src/assessment/builder.py b/src/assessment/builder.py index 08104476..83b7f238 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -158,7 +158,7 @@ def build_campaigns(assessment, campaign_number, template_smtp): # Get Launch Time while True: campaign.launch_date = get_time_input("start", assessment.timezone) - + logging.info("Campaign launch date: %s", campaign.launch_date) if ( campaign.launch_date > pytz.timezone(assessment.timezone).localize(datetime.now()).isoformat() @@ -169,7 +169,7 @@ def build_campaigns(assessment, campaign_number, template_smtp): while True: campaign.complete_date = get_time_input("end", assessment.timezone) - + logging.info("Campaign complete date: %s", campaign.complete_date) if campaign.complete_date > campaign.launch_date: break else: From 660ebb1db63117ea0ab34ca773df0f8a7d1d6c25 Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Wed, 3 Nov 2021 13:02:58 -0500 Subject: [PATCH 08/19] Bump project version from 0.1.1-rc.4 to 0.1.1-rc.5 --- src/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_version.py b/src/_version.py index e328f4fa..6863c9c2 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1-rc.4" +__version__ = "0.1.1-rc.5" From f4edf88b34d3b43945b0bb16a918efe7b875693f Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Wed, 3 Nov 2021 15:00:16 -0500 Subject: [PATCH 09/19] Cleanup code to parse datetime into ISO string --- src/assessment/builder.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/assessment/builder.py b/src/assessment/builder.py index 83b7f238..4bb67b8e 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -154,31 +154,26 @@ def build_campaigns(assessment, campaign_number, template_smtp): # Set up component holders logging.info("Building Campaign %s", assessment.id) campaign = Campaign(name=assessment.id) + campaign_tz = pytz.timezone(assessment.timezone) # Get Launch Time while True: campaign.launch_date = get_time_input("start", assessment.timezone) - logging.info("Campaign launch date: %s", campaign.launch_date) - if ( - campaign.launch_date - > pytz.timezone(assessment.timezone).localize(datetime.now()).isoformat() - ): + + if campaign.launch_date > datetime.now(campaign_tz).isoformat(): break else: logging.error("Launch date is not after the current datetime") while True: campaign.complete_date = get_time_input("end", assessment.timezone) - logging.info("Campaign complete date: %s", campaign.complete_date) + if campaign.complete_date > campaign.launch_date: break else: logging.error("Complete Date is not after Launch Date.") - if ( - campaign.complete_date - > pytz.timezone(assessment.timezone).localize(datetime.now()).isoformat() - ): + if campaign.complete_date > datetime.now(campaign_tz).isoformat(): break else: logging.error("Complete date is not after the current datetime.") From a6fb1bdd1e7b2b7a2ee0a7ab61f6605e8a5921ff Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Wed, 3 Nov 2021 15:00:44 -0500 Subject: [PATCH 10/19] Bump project version from 0.1.1-rc.5 to 0.1.1-rc.6 --- src/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_version.py b/src/_version.py index 6863c9c2..e708d176 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1-rc.5" +__version__ = "0.1.1-rc.6" From b06d53f4d65761e21a347859b86bfa30cf9b2d5c Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Thu, 4 Nov 2021 13:08:38 -0500 Subject: [PATCH 11/19] Validation of datetime is working, but debugging why time must be entered as UTC despite having timezones specified --- src/assessment/builder.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/assessment/builder.py b/src/assessment/builder.py index 4bb67b8e..1d68efff 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -155,11 +155,11 @@ def build_campaigns(assessment, campaign_number, template_smtp): logging.info("Building Campaign %s", assessment.id) campaign = Campaign(name=assessment.id) campaign_tz = pytz.timezone(assessment.timezone) - + logging.info("Assessment timezone: %s", assessment.timezone) # Get Launch Time while True: campaign.launch_date = get_time_input("start", assessment.timezone) - + logging.info("Campaign launch date: %s", campaign.launch_date) if campaign.launch_date > datetime.now(campaign_tz).isoformat(): break else: @@ -167,7 +167,9 @@ def build_campaigns(assessment, campaign_number, template_smtp): while True: campaign.complete_date = get_time_input("end", assessment.timezone) - + datetime_now = datetime.now(campaign_tz).isoformat() + logging.info("Campaign complete date: %s", campaign.complete_date) + logging.info("Datetime_now: %s", datetime_now) if campaign.complete_date > campaign.launch_date: break else: From 6fb37991523138fc5d9e61b4050916f0e6285f02 Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Thu, 4 Nov 2021 13:09:16 -0500 Subject: [PATCH 12/19] Bump project version from 0.1.1-rc.6 to 0.1.1-rc.7 --- src/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_version.py b/src/_version.py index e708d176..4d18fac5 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1-rc.6" +__version__ = "0.1.1-rc.7" From 57659d483505cdc99d79da59303f8603d116b269 Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Thu, 4 Nov 2021 13:51:58 -0500 Subject: [PATCH 13/19] Finalizing work prior to review. Campaign scheduling checks to make sure supplied datetime values are not prior to the current time. This also takes into account your local timezone when scheduling, and allows for users to input local time rather than UTC. --- src/assessment/builder.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/assessment/builder.py b/src/assessment/builder.py index 1d68efff..4bb67b8e 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -155,11 +155,11 @@ def build_campaigns(assessment, campaign_number, template_smtp): logging.info("Building Campaign %s", assessment.id) campaign = Campaign(name=assessment.id) campaign_tz = pytz.timezone(assessment.timezone) - logging.info("Assessment timezone: %s", assessment.timezone) + # Get Launch Time while True: campaign.launch_date = get_time_input("start", assessment.timezone) - logging.info("Campaign launch date: %s", campaign.launch_date) + if campaign.launch_date > datetime.now(campaign_tz).isoformat(): break else: @@ -167,9 +167,7 @@ def build_campaigns(assessment, campaign_number, template_smtp): while True: campaign.complete_date = get_time_input("end", assessment.timezone) - datetime_now = datetime.now(campaign_tz).isoformat() - logging.info("Campaign complete date: %s", campaign.complete_date) - logging.info("Datetime_now: %s", datetime_now) + if campaign.complete_date > campaign.launch_date: break else: From a84c95273bd10cd1fce845cccfa2ccd1fed608c4 Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Thu, 4 Nov 2021 13:53:34 -0500 Subject: [PATCH 14/19] Bump project version from 0.1.1-rc.7 to 0.1.1 --- src/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_version.py b/src/_version.py index 4d18fac5..72cbd147 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1-rc.7" +__version__ = "0.1.1" From 3dad3cf156d5fcb9a6823ec9ebe8119af2c3cff8 Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Tue, 9 Nov 2021 14:12:51 -0600 Subject: [PATCH 15/19] Modification to complete_date validation. Potential logic error existed, code was revised and the logic should be a bit cleaner --- src/assessment/builder.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/assessment/builder.py b/src/assessment/builder.py index 4bb67b8e..4f075521 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -168,16 +168,16 @@ def build_campaigns(assessment, campaign_number, template_smtp): while True: campaign.complete_date = get_time_input("end", assessment.timezone) - if campaign.complete_date > campaign.launch_date: - break - else: - logging.error("Complete Date is not after Launch Date.") + if campaign.complete_date < campaign.launch_date: + logging.error("Complete Date is not after launch Date.") - if campaign.complete_date > datetime.now(campaign_tz).isoformat(): - break - else: + elif campaign.complete_date < datetime.now(campaign_tz).isoformat(): logging.error("Complete date is not after the current datetime.") + else: + # else we have valid complete dates + break + campaign.smtp, campaign.template = import_email( assessment, campaign_number, template_smtp ) From 32fc436bdc85a4500f2ab028f4c889a2586cd82a Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Tue, 9 Nov 2021 14:22:28 -0600 Subject: [PATCH 16/19] Pre-release to test changes for complete_date validation logic --- src/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_version.py b/src/_version.py index 72cbd147..d9b41acb 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1" +__version__ = "0.1.1-rc.8" From 5a0cc25762521a630a682bdebea6964e12f4dbe9 Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Tue, 9 Nov 2021 14:54:22 -0600 Subject: [PATCH 17/19] Minor revision to validation logic --- src/_version.py | 2 +- src/assessment/builder.py | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/_version.py b/src/_version.py index d9b41acb..7c57927d 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1-rc.8" +__version__ = "0.1.1-rc.9" diff --git a/src/assessment/builder.py b/src/assessment/builder.py index 4f075521..92176eb5 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -168,15 +168,15 @@ def build_campaigns(assessment, campaign_number, template_smtp): while True: campaign.complete_date = get_time_input("end", assessment.timezone) - if campaign.complete_date < campaign.launch_date: - logging.error("Complete Date is not after launch Date.") - - elif campaign.complete_date < datetime.now(campaign_tz).isoformat(): - logging.error("Complete date is not after the current datetime.") + if campaign.complete_date > campaign.launch_date: + pass # Do nothing yet and continue checks + else: + logging.error("Complete Date is not after Launch Date.") + if campaign.complete_date > datetime.now(campaign_tz).isoformat(): + break # Valid input, break out of loop else: - # else we have valid complete dates - break + logging.error("Complete date is not after the current datetime.") campaign.smtp, campaign.template = import_email( assessment, campaign_number, template_smtp From 3c513c59f627e6a8d3722393ecd3dc1ad2158b1b Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Tue, 9 Nov 2021 15:04:53 -0600 Subject: [PATCH 18/19] Bump project version from 0.1.1 to 0.1.1 --- src/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_version.py b/src/_version.py index 7c57927d..72cbd147 100644 --- a/src/_version.py +++ b/src/_version.py @@ -1,2 +1,2 @@ """This file defines the version of this project.""" -__version__ = "0.1.1-rc.9" +__version__ = "0.1.1" From c75836575c8b2cfdd2e53a07f166ebed715a5cec Mon Sep 17 00:00:00 2001 From: JCantu248 Date: Wed, 10 Nov 2021 08:26:28 -0600 Subject: [PATCH 19/19] Update src/assessment/builder.py Applying capitalization fix to Launch Date Co-authored-by: dav3r --- src/assessment/builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assessment/builder.py b/src/assessment/builder.py index 92176eb5..6c775993 100644 --- a/src/assessment/builder.py +++ b/src/assessment/builder.py @@ -171,7 +171,7 @@ def build_campaigns(assessment, campaign_number, template_smtp): if campaign.complete_date > campaign.launch_date: pass # Do nothing yet and continue checks else: - logging.error("Complete Date is not after Launch Date.") + logging.error("Complete date is not after launch date.") if campaign.complete_date > datetime.now(campaign_tz).isoformat(): break # Valid input, break out of loop