TurTaskWeb/backend/tasks/utils.py

55 lines
1.7 KiB
Python

from dateutil import rrule
from datetime import datetime
from googleapiclient.discovery import build
from authentications.access_token_cache import get_credential_from_cache_token
def get_service(request):
"""
Get a service that communicates to a Google API.
:param request: Http request object
:return: A Resource object with methods for interacting with the calendar service
"""
credentials = get_credential_from_cache_token(request.user.id)
return build('calendar', 'v3', credentials=credentials)
def _determine_frequency(time_difference):
if time_difference.days >= 365:
return rrule.YEARLY
elif time_difference.days >= 30:
return rrule.MONTHLY
elif time_difference.days >= 7:
return rrule.WEEKLY
elif time_difference.days >= 1:
return rrule.DAILY
elif time_difference.seconds >= 3600:
return rrule.HOURLY
elif time_difference.seconds >= 60:
return rrule.MINUTELY
else:
return rrule.SECONDLY
def generate_recurrence_rule(datetime1: str, datetime2: str, original_start_time: str) -> str:
"""
Generate recurrence rule from
difference between two datetime string.
:param task1: A task object
:param task2: A task object
:return: A recurrence rule string according to ICAL format
"""
start_time1 = datetime.fromisoformat(datetime1)
start_time2 = datetime.fromisoformat(datetime2)
time_difference = start_time2 - start_time1
recurrence_rule = rrule.rrule(
freq=_determine_frequency(time_difference),
dtstart=datetime.fromisoformat(original_start_time),
interval=time_difference.days if time_difference.days > 0 else 1,
)
return str(recurrence_rule)