Source code for extract_msg.msg_classes.meeting_forward

__all__ = [
    'MeetingForwardNotification',
]


import functools
import json

from typing import Optional

from .. import constants
from .meeting_related import MeetingRelated
from ..enums import RecurPatternType, ResponseStatus


[docs]class MeetingForwardNotification(MeetingRelated): """ Class for handling Meeting Forward Notification objects. """
[docs] def getJson(self) -> str: meetingStatusString = { ResponseStatus.NONE: None, ResponseStatus.ORGANIZED: 'Meeting organizer', ResponseStatus.TENTATIVE: 'Tentatively accepted', ResponseStatus.ACCEPTED: 'Accepted', ResponseStatus.DECLINED: 'Declined', ResponseStatus.NOT_RESPONDED: 'Not yet responded', }[self.responseStatus] # Get the recurrence string. recur = '(none)' if self.appointmentRecur: recur = { RecurPatternType.DAY: 'Daily', RecurPatternType.WEEK: 'Weekly', RecurPatternType.MONTH: 'Monthly', RecurPatternType.MONTH_NTH: 'Monthly', RecurPatternType.MONTH_END: 'Monthly', RecurPatternType.HJ_MONTH: 'Monthly', RecurPatternType.HJ_MONTH_NTH: 'Monthly', RecurPatternType.HJ_MONTH_END: 'Monthly', }[self.appointmentRecur.patternType] return json.dumps({ 'recurrence': recur, 'recurrencePattern': self.recurrencePattern, 'body': self.body, 'meetingStatus': meetingStatusString, 'organizer': self.organizer, 'requiredAttendees': self.to, 'optionalAttendees': self.cc, 'resources': self.bcc, 'start': self.startDate.__format__(self.datetimeFormat) if self.endDate else None, 'end': self.endDate.__format__(self.datetimeFormat) if self.endDate else None, })
@functools.cached_property def forwardNotificationRecipients(self) -> Optional[bytes]: """ Bytes containing a list of RecipientRow structures that indicate the recipients of a meeting forward. Incomplete, looks to be the same structure as appointmentUnsendableRecipients, so we need more examples of this. """ return self.getNamedProp('8261', constants.ps.PSETID_APPOINTMENT) @property def headerFormatProperties(self) -> constants.HEADER_FORMAT_TYPE: # Get the recurrence string. recur = '(none)' if self.appointmentRecur: recur = { RecurPatternType.DAY: 'Daily', RecurPatternType.WEEK: 'Weekly', RecurPatternType.MONTH: 'Monthly', RecurPatternType.MONTH_NTH: 'Monthly', RecurPatternType.MONTH_END: 'Monthly', RecurPatternType.HJ_MONTH: 'Monthly', RecurPatternType.HJ_MONTH_NTH: 'Monthly', RecurPatternType.HJ_MONTH_END: 'Monthly', }[self.appointmentRecur.patternType] return { '-main info-': { 'Subject': self.subject, 'Location': self.location, }, '-date-': { 'Start': self.startDate.__format__(self.datetimeFormat) if self.startDate else None, 'End': self.endDate.__format__(self.datetimeFormat) if self.endDate else None, }, '-recurrence-': { 'Recurrance': recur, 'Recurrence Pattern': self.recurrencePattern, }, '-attendees-': { 'Organizer': self.organizer, 'Required Attendees': self.to, 'Optional Attendees': self.cc, 'Resources': self.bcc, }, '-importance-': { 'Importance': self.importanceString, }, } @functools.cached_property def promptSendUpdate(self) -> bool: """ Indicates that the Meeting Forward Notification object was out-of-date when it was received. """ return bool(self.getNamedProp('8045', constants.ps.PSETID_COMMON))