コード例 #1
0
ファイル: sync_adapter.py プロジェクト: Doist/powerapp
def get_event_duration(event, default=datetime.timedelta(hours=1)):
    """
    Return the duration of the event (as a timedelta object)
    """
    if event is None:
        return default

    try:
        start = parse_date(event['start']['dateTime'])
        end = parse_date(event['start']['endTime'])
    except (KeyError, ValueError):
        return default

    if end < start:
        return default

    return end - start
コード例 #2
0
ファイル: sync_adapter.py プロジェクト: Doist/powerapp
    def task_from_data(self, data, extra):
        """
        We sync back only due_date and date_string.
        """
        if isinstance(data, Task):
            # if it's a task object, we don't have to convert anything
            # we use it to delete the task
            return data

        try:
            gcal_due_date = parse_date(data['start']['dateTime'])
        except (KeyError, ValueError):
            # an event without a due date (whole day event maybe). Skip
            return

        # if the task is new, we should fill in the content
        if not extra:
            plaintext = data.get('summary') or 'Google Calendar event'
            backlink = data['htmlLink']
            content = '%s (%s)' % (backlink, plaintext)
        else:
            content = undefined

        # sync due date and date string, but
        # don't overwrite "Todoist rich date strings"
        due_date_utc = gcal_due_date.astimezone(pytz.utc)
        user_timezone = self.bridge.integration.user.get_timezone()
        local_due_date = gcal_due_date.astimezone(user_timezone)
        date_string = local_due_date.strftime('%d %b %Y at %H:%M')

        original_due_date = extra.get('original_due_date')
        if due_date_utc.replace(tzinfo=None) == original_due_date:
            due_date_utc = undefined
            date_string = undefined

        return task(content=content,
                    due_date=due_date_utc,
                    date_string=date_string)