Событие календаря Microsoft Graph API найдено, но не может быть удаленоPython

Программы на Python
Ответить
Anonymous
 Событие календаря Microsoft Graph API найдено, но не может быть удалено

Сообщение Anonymous »

Я создал синхронизатор календаря, который работает нормально.
Иногда у него возникают проблемы, и он просто не может удалить событие.
Примечание. Все события были созданы с использованием API и одних и тех же учетных данных.
Странно то, что я запрашиваю событие, прежде чем удалить его.
Вот простой код, воспроизводящий проблему:

Код: Выделить всё

async def delete_all_future_events(calendar_id, dry_run=True):
# Scopes required for accessing and modifying calendar events
scopes = ['https://graph.microsoft.com/.default']

tenant_id = ''
client_id = ''
client_secret = ''
user_id = ''

# Initialize ClientSecretCredential
credential = ClientSecretCredential(
tenant_id=tenant_id,
client_id=client_id,
client_secret=client_secret
)

# Create GraphServiceClient
graph_client = GraphServiceClient(credential, scopes)

# Define date range for fetching events
start_date = datetime.now(pytz.utc)
end_date = start_date + timedelta(days=365)

# Format dates correctly for the Graph API in ISO 8601 format
start_date_str = start_date.strftime("%Y-%m-%dT%H:%M:%S%z")
end_date_str = end_date.strftime("%Y-%m-%dT%H:%M:%S%z")

# Adjust timezone offset formatting
start_date_str = start_date_str[:-2] + ":" + start_date_str[-2:]
end_date_str = end_date_str[:-2] + ":" + end_date_str[-2:]

# Set up request configuration with date range
query_params = CalendarViewRequestBuilder.CalendarViewRequestBuilderGetQueryParameters(
start_date_time=start_date_str,
end_date_time=end_date_str,
select=['id', 'subject', 'start', 'end'],
top=100,
orderby=['start/dateTime ASC']
)

headers = HeadersCollection()
headers.add("Prefer", 'outlook.timezone="Europe/Berlin"')

request_configuration = RequestConfiguration(
query_parameters=query_params,
headers=headers
)

try:
# Fetch all events within the next year
events_page = await graph_client.users.by_user_id(user_id).calendars.by_calendar_id(calendar_id).calendar_view.get(request_configuration=request_configuration)
total_deleted = 0

while True:
if hasattr(events_page, 'value') and events_page.value:
for event in events_page.value:
event_type = event.subject.split("-")[0]
if event_type != "Feiertag":
event_id = event.id
event_subject = event.subject
print(f"Attempting to delete event: {event_subject} (ID: {event_id})")

# Call delete function with dry_run option
delete_result = await delete_calendar_event(calendar_id, event_id, dry_run=dry_run)
if delete_result:
total_deleted += 1
print(f"Deleted event: {event_subject} (ID: {event_id})")
else:
print(f"Failed to delete event: {event_subject} (ID: {event_id})")

if not events_page.odata_next_link:
print("No more pages to fetch.")
break

# Fetch the next page of events if available
events_page = await graph_client.users.by_user_id(user_id).calendars.by_calendar_id(calendar_id).events.with_url(events_page.odata_next_link).get()

except Exception as e:
print(f"Error deleting events: {e}")

print(f"Total events deleted: {total_deleted if not dry_run else 0}")

asyncio.run(delete_all_future_events(calendar_id, dry_run=False))
Ошибка следующая

Код: Выделить всё

Error deleting event:
APIError
Code: 404
message: None
error: MainError(additional_data={}, code='ErrorItemNotFound', details=None, inner_error=None, message='The specified object was not found in the store.', target=None)
РЕДАКТИРОВАТЬ: я также больше не могу удалять их через пользовательский интерфейс Outlook

Подробнее здесь: https://stackoverflow.com/questions/791 ... be-deleted
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»