Add extendedProperties to a meeting. Warning: extendedProperties must contain only shared and private dicts and
           their contents will overwrite anything in the event's extendedProperties i.e. we do *not* deep-merge the dicts.

def tag_event(self, calendar_id, event_id, extendedProperties):
        '''Add extendedProperties to a meeting. Warning: extendedProperties must contain only shared and private dicts and
           their contents will overwrite anything in the event's extendedProperties i.e. we do *not* deep-merge the dicts.
        '''
        event_body = self.service.events().get(calendarId = self.configured_calendar_ids[calendar_id], eventId=event_id).execute()
        event_body['extendedProperties'] = event_body.get('extendedProperties', {})
        event_body['extendedProperties']['shared'] = event_body['extendedProperties'].get('shared', {})
        event_body['extendedProperties']['private'] = event_body['extendedProperties'].get('private', {})
        assert(sorted(set(extendedProperties.keys()).union(set(['shared', 'private']))) == ['private', 'shared'])
        for k, v in extendedProperties['shared'].iteritems():
            event_body['extendedProperties']['shared'][k] = v
        for k, v in extendedProperties['private'].iteritems():
            event_body['extendedProperties']['private'][k] = v
        raise Exception('not tested yet')
        updated_event = self.service.events().update(calendarId = self.configured_calendar_ids[calendar_id], eventId = event_id, body = event_body).execute()