Как определить, что два повторяющихся события принадлежат к одной и той же разделенной серии (API Календаря Google)? [заPython

Программы на Python
Anonymous
Как определить, что два повторяющихся события принадлежат к одной и той же разделенной серии (API Календаря Google)? [за

Сообщение Anonymous »

Я создаю клиент синхронизации для Календаря Google, который должен сохранять логическую идентичность повторяющейся серии при разбиении, чтобы операции на уровне пользователя, такие как «редактировать все» или «удалить все», могли охватывать исходную серию независимо от того, сколько раз она была разделена с помощью параметра «Это и последующие события» в пользовательском интерфейсе.
Основная проблема заключается в следующем: после разделения не существует документированного способа связать получившиеся мастер-файлы (M1). → M2) как единая логическая серия.
Официальная документация описывает создание повторений и переопределения экземпляров, но не описывает, как представляются или связываются разделения, запускаемые пользовательским интерфейсом. Это заставляет клиентов синхронизации полагаться на эмпирическое поведение.
Я провел контролируемые тесты и проанализировал данные производственной синхронизации (около 1200 основных событий). Поведение единообразно, но недокументировано.

Наблюдаемое поведение
Когда пользователь выбирает "Это и последующие события" на главном M1:
  • M1 исправляется с добавлением UNTIL RRULE.
  • Новый главный M2 появляется со своим собственным RRULE (без UNTIL или новым COUNT).
  • Поведение M2.id разделяется на два шаблона:
    • ~50%: _R
    • ~50 %: совершенно новый, несвязанный идентификатор

      Мы не определили, что определяет, какой формат используется.
  • При каскадном разбиении префикс _R (когда присутствует) всегда использует исходный корневой идентификатор, а не непосредственный родительский элемент. Вложенности не происходит.
  • Переопределения после обрезки:
    • Сохраните исходный идентификатор
    • Имейте recurringEventId и iCalUID, переписанные автоматически, чтобы они указывали на M2
    • обновляются на месте, а не удаляются/создаются заново
  • Переопределения до завершения не изменяются, но могут снова появиться в следующей синхронизации без фактических изменений.
  • :
    • Одинаково для главного устройства и его переопределений (соответствует RFC 5545)
    • Разница между M1 и M2 после разделения
  • M1 и M2 отображаются вместе в одном и том же event.list?syncToken=... diff.
  • Удаление M1 с помощью «Удалить все» также отменяет M2 и все переопределения, несмотря на отсутствие общедоступной связи.
  • Если M1 усекается до нуля, он отменяется, и M2 переносит серию вперед.
Вопросы
  • Что определяет формат M2.id?

    Когда он использует _R, а не совершенно новый идентификатор?
  • Является ли шаблон _R документированный контракт?

    Можем ли мы полагаться на:
    • Наличие шаблона
    • Использование корневого идентификатора (никогда не вложенного)

      Или это чисто деталь реализации?
  • Поддерживаются ли какие-либо способ связать М1 и М2?

    При этом:
    • Код: Выделить всё

      recurringEventId
      имеет значение null на M2
    • отличается
    • Задокументированных полей обратных ссылок не существует
    • Шаблон идентификатора работает только примерно в 50 % случаев
  • Стабильно ли поведение переопределения переназначения?

    В частности: сохранение id при переписывании recurringEventId и iCalUID на месте.
  • Как API внутренне идентифицирует «логическую серию»?

    Каскад «Удалить все» подразумевает внутреннюю связь. Есть ли у клиентов какой-либо способ надежно получить доступ к нему или сделать вывод?
Почему это важно
Без надежного и документированного способа связать M1 ↔ M2 клиенты синхронизации не могут правильно реализовать такие операции, как «редактировать все» между разбиениями.
Пользователи воспринимают единую логическую серию, но API предоставляет несколько несвязанных главных узлов и только частичные эвристики (например, префикс идентификатора), которые являются противоречивыми.
Если ответ заключается в том, что публичных связей не существует и шаблоны идентификаторов не являются договорными, это также полезно — это означает, что клиенты должны вернуться к эвристике или согласованию, управляемому пользователем.

Любые указатели на документацию, подтвержденное поведение, или рекомендуемые шаблоны будем очень признательны.
Спасибо!

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