91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
|
||
|
|
"""
|
||
|
|
Helpers for Alliance Forge API objects
|
||
|
|
"""
|
||
|
|
|
||
|
|
from datetime import datetime
|
||
|
|
import pytz
|
||
|
|
|
||
|
|
def get_event_segments(event : dict, event_campaign : dict) -> dict:
|
||
|
|
"""
|
||
|
|
get_event_segments Calculate the segments for the event.
|
||
|
|
|
||
|
|
:param event: The Event object
|
||
|
|
:param event_campaign: The Campaign object for the event
|
||
|
|
|
||
|
|
:return The segments for the event as dict
|
||
|
|
"""
|
||
|
|
|
||
|
|
# Default segments
|
||
|
|
event_segments = {
|
||
|
|
"sms_segments": 0,
|
||
|
|
"mms_segments": 0,
|
||
|
|
"crystal_segments": 0
|
||
|
|
}
|
||
|
|
|
||
|
|
# Get the values to calculate with
|
||
|
|
content = event["content"]
|
||
|
|
if content is None:
|
||
|
|
content = ""
|
||
|
|
|
||
|
|
message_length = len(content)
|
||
|
|
segment_counter = 1
|
||
|
|
|
||
|
|
# Get the allowed size of the first segment. Static 160 except for MMS
|
||
|
|
first_segment_size = 160
|
||
|
|
|
||
|
|
# Update to MMS segment size
|
||
|
|
if event["media_name"] is not None:
|
||
|
|
# Based on contract negotiations
|
||
|
|
first_segment_size = event_campaign["mms_included_characters"]
|
||
|
|
event_segments["mms_segments"] = 1
|
||
|
|
|
||
|
|
# Check if Crystal
|
||
|
|
if event["media_name"].endswith("mp4"):
|
||
|
|
event_segments["crystal_segments"] = 1
|
||
|
|
|
||
|
|
# Count the segments
|
||
|
|
message_length -= first_segment_size
|
||
|
|
while message_length > 0:
|
||
|
|
segment_counter += 1
|
||
|
|
message_length -= first_segment_size
|
||
|
|
|
||
|
|
event_segments["sms_segments"] = segment_counter
|
||
|
|
|
||
|
|
return event_segments
|
||
|
|
|
||
|
|
|
||
|
|
def get_datetime_convert(af_datetime_str : str, af_time_zone : str) -> datetime:
|
||
|
|
"""
|
||
|
|
get_datetime_convert Get the datetime string to a datetime object converted to timezone.
|
||
|
|
|
||
|
|
:param af_datetime_str: The datetime string. Format "%Y-%m-%dT%H:%M"
|
||
|
|
:param af_time_zone: The alliance forge timezone
|
||
|
|
"""
|
||
|
|
|
||
|
|
# AF time zone mapping
|
||
|
|
time_zone_convert = {"hawaii": "US/Hawaii",
|
||
|
|
"alaska": "US/Alaska",
|
||
|
|
"pacific": "US/Pacific",
|
||
|
|
"mountain": "US/Mountain",
|
||
|
|
"arizona": "US/Arizona",
|
||
|
|
"central": "US/Central",
|
||
|
|
"eastern": "US/Eastern",
|
||
|
|
"aleutian": "US/Aleutian",
|
||
|
|
"east_indiana": "US/East-Indiana",
|
||
|
|
"indiana_starke": "US/Indiana-Starke",
|
||
|
|
"michigan": "US/Michigan",
|
||
|
|
"samoa": "US/Samoa"}
|
||
|
|
|
||
|
|
# Get the datetime to an object and properly set the timezone
|
||
|
|
gmt_datetime = datetime.strptime(af_datetime_str, "%Y-%m-%dT%H:%M")
|
||
|
|
gmt_timezone = pytz.timezone('GMT')
|
||
|
|
gmt_datetime = gmt_timezone.localize(gmt_datetime)
|
||
|
|
|
||
|
|
# Convert to the target timezone
|
||
|
|
target_timezone = pytz.timezone(time_zone_convert.get(af_time_zone, "US/Pacific"))
|
||
|
|
target_datetime = gmt_datetime.astimezone(target_timezone)
|
||
|
|
|
||
|
|
return target_datetime
|