Merge pull request #12249 from gavindsouza/get-datetime-in-timezone
feat: Util to get datetime in specific timezone
This commit is contained in:
commit
32d32aed81
3 changed files with 50 additions and 34 deletions
|
|
@ -2,58 +2,66 @@
|
|||
# License: GNU General Public License v3. See license.txt
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe, unittest
|
||||
from frappe.utils import getdate, add_days
|
||||
import unittest
|
||||
from random import choice
|
||||
|
||||
from frappe.email.doctype.newsletter.newsletter import confirmed_unsubscribe, send_scheduled_email
|
||||
from six.moves.urllib.parse import unquote
|
||||
import frappe
|
||||
from frappe.email.doctype.newsletter.newsletter import (
|
||||
confirmed_unsubscribe,
|
||||
send_scheduled_email,
|
||||
)
|
||||
from frappe.email.doctype.newsletter.newsletter import get_newsletter_list
|
||||
from frappe.email.queue import flush
|
||||
from frappe.utils import add_days, getdate
|
||||
|
||||
test_dependencies = ["Email Group"]
|
||||
emails = [
|
||||
"test_subscriber1@example.com",
|
||||
"test_subscriber2@example.com",
|
||||
"test_subscriber3@example.com",
|
||||
"test1@example.com",
|
||||
]
|
||||
|
||||
emails = ["test_subscriber1@example.com", "test_subscriber2@example.com",
|
||||
"test_subscriber3@example.com", "test1@example.com"]
|
||||
|
||||
class TestNewsletter(unittest.TestCase):
|
||||
def setUp(self):
|
||||
frappe.set_user("Administrator")
|
||||
frappe.db.sql('delete from `tabEmail Group Member`')
|
||||
frappe.db.sql("delete from `tabEmail Group Member`")
|
||||
|
||||
if not frappe.db.exists("Email Group", "_Test Email Group"):
|
||||
frappe.get_doc({"doctype": "Email Group", "title": "_Test Email Group"}).insert()
|
||||
|
||||
group_exist=frappe.db.exists("Email Group", "_Test Email Group")
|
||||
if len(group_exist) == 0:
|
||||
frappe.get_doc({
|
||||
"doctype": "Email Group",
|
||||
"title": "_Test Email Group"
|
||||
}).insert()
|
||||
for email in emails:
|
||||
frappe.get_doc({
|
||||
"doctype": "Email Group Member",
|
||||
"email": email,
|
||||
"email_group": "_Test Email Group"
|
||||
}).insert()
|
||||
frappe.get_doc({
|
||||
"doctype": "Email Group Member",
|
||||
"email": email,
|
||||
"email_group": "_Test Email Group"
|
||||
}).insert()
|
||||
|
||||
def test_send(self):
|
||||
name = self.send_newsletter()
|
||||
self.send_newsletter()
|
||||
|
||||
email_queue_list = [frappe.get_doc('Email Queue', e.name) for e in frappe.get_all("Email Queue")]
|
||||
email_queue_list = [frappe.get_doc("Email Queue", e.name) for e in frappe.get_all("Email Queue")]
|
||||
self.assertEqual(len(email_queue_list), 4)
|
||||
recipients = [e.recipients[0].recipient for e in email_queue_list]
|
||||
for email in emails:
|
||||
self.assertTrue(email in recipients)
|
||||
|
||||
recipients = set([e.recipients[0].recipient for e in email_queue_list])
|
||||
self.assertTrue(set(emails).issubset(recipients))
|
||||
|
||||
def test_unsubscribe(self):
|
||||
# test unsubscribe
|
||||
name = self.send_newsletter()
|
||||
from frappe.email.queue import flush
|
||||
to_unsubscribe = choice(emails)
|
||||
group = frappe.get_all("Newsletter Email Group", filters={"parent": name}, fields=["email_group"])
|
||||
|
||||
flush(from_test=True)
|
||||
to_unsubscribe = unquote(frappe.local.flags.signed_query_string.split("email=")[1].split("&")[0])
|
||||
group = frappe.get_all("Newsletter Email Group", filters={"parent" : name}, fields=["email_group"])
|
||||
confirmed_unsubscribe(to_unsubscribe, group[0].email_group)
|
||||
|
||||
name = self.send_newsletter()
|
||||
|
||||
email_queue_list = [frappe.get_doc('Email Queue', e.name) for e in frappe.get_all("Email Queue")]
|
||||
email_queue_list = [
|
||||
frappe.get_doc("Email Queue", e.name) for e in frappe.get_all("Email Queue")
|
||||
]
|
||||
self.assertEqual(len(email_queue_list), 3)
|
||||
recipients = [e.recipients[0].recipient for e in email_queue_list]
|
||||
|
||||
for email in emails:
|
||||
if email != to_unsubscribe:
|
||||
self.assertTrue(email in recipients)
|
||||
|
|
@ -86,7 +94,6 @@ class TestNewsletter(unittest.TestCase):
|
|||
def test_portal(self):
|
||||
self.send_newsletter(1)
|
||||
frappe.set_user("test1@example.com")
|
||||
from frappe.email.doctype.newsletter.newsletter import get_newsletter_list
|
||||
newsletters = get_newsletter_list("Newsletter", None, None, 0)
|
||||
self.assertEqual(len(newsletters), 1)
|
||||
|
||||
|
|
@ -106,4 +113,4 @@ class TestNewsletter(unittest.TestCase):
|
|||
self.assertEqual(len(email_queue_list), 4)
|
||||
recipients = [e.recipients[0].recipient for e in email_queue_list]
|
||||
for email in emails:
|
||||
self.assertTrue(email in recipients)
|
||||
self.assertTrue(email in recipients)
|
||||
|
|
|
|||
|
|
@ -154,14 +154,22 @@ def get_time_zone():
|
|||
|
||||
return frappe.cache().get_value("time_zone", _get_time_zone)
|
||||
|
||||
def convert_utc_to_user_timezone(utc_timestamp):
|
||||
def convert_utc_to_timezone(utc_timestamp, time_zone):
|
||||
from pytz import timezone, UnknownTimeZoneError
|
||||
utcnow = timezone('UTC').localize(utc_timestamp)
|
||||
try:
|
||||
return utcnow.astimezone(timezone(get_time_zone()))
|
||||
return utcnow.astimezone(timezone(time_zone))
|
||||
except UnknownTimeZoneError:
|
||||
return utcnow
|
||||
|
||||
def get_datetime_in_timezone(time_zone):
|
||||
utc_timestamp = datetime.datetime.utcnow()
|
||||
return convert_utc_to_timezone(utc_timestamp, time_zone)
|
||||
|
||||
def convert_utc_to_user_timezone(utc_timestamp):
|
||||
time_zone = get_time_zone()
|
||||
return convert_utc_to_timezone(utc_timestamp, time_zone)
|
||||
|
||||
def now():
|
||||
"""return current datetime as yyyy-mm-dd hh:mm:ss"""
|
||||
if frappe.flags.current_date:
|
||||
|
|
@ -369,7 +377,7 @@ def format_duration(seconds, hide_days=False):
|
|||
|
||||
example: converts 12885 to '3h 34m 45s' where 12885 = seconds in float
|
||||
"""
|
||||
|
||||
|
||||
seconds = cint(seconds)
|
||||
|
||||
total_duration = {
|
||||
|
|
|
|||
|
|
@ -222,6 +222,7 @@ VALID_UTILS = (
|
|||
"get_last_day_of_week",
|
||||
"get_last_day",
|
||||
"get_time",
|
||||
"get_datetime_in_timezone",
|
||||
"get_datetime_str",
|
||||
"get_date_str",
|
||||
"get_time_str",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue