Exchange Web Services client library v3.2.0 Release Notes

Release Date: 2020-05-11 // almost 4 years ago
    • ๐Ÿšš Remove use of ThreadPool objects. Threads were used to implement async HTTP requests, but were creating massive memory leaks. Async requests should be reimplemented using a real async HTTP request package, so this is just an emergency fix. This also lowers the default Protocol.SESSION_POOLSIZE to 1 because no internal code is running multi-threaded anymore.
    • All-day calendar items (created as CalendarItem(is_all_day=True, ...)) now accept EWSDate instances for the start and end values. Similarly, all-day calendar items fetched from the server now return start and end values as EWSDate instances. In this case, start and end values are inclusive; a one-day event starts and ends on the same EWSDate value.
    • ๐Ÿ‘ Add support for RecurringMasterItemId and OccurrenceItemId elements that allow to request the master recurrence from a CalendarItem occurrence, and to request a specific occurrence from a CalendarItem master recurrence. CalendarItem.master_recurrence() and CalendarItem.occurrence(some_occurrence_index) methods were added to aid this traversal. some_occurrence_index in the last method specifies which item in the list of occurrences to target; CalendarItem.occurrence(3) gets the third occurrence in the recurrence.
    • Change Contact.birthday and Contact.wedding_anniversary from EWSDateTime to EWSDate fields. EWS still expects and sends datetime values but has started to reset the time part to 11:59. Dates are a better match for these two fields anyway.
    • ๐Ÿšš Remove support for len(some_queryset). It had the nasty side-effect of forcing list(some_queryset) to run the query twice, once for pre-allocating the list via the result of len(some_queryset), and then once more to fetch the results. All occurrences of len(some_queryset) can be replaced with some_queryset.count(). Unfortunately, there is no way to keep backwards-compatibility for this feature.
    • Added Account.identity, an attribute to contain extra information for impersonation. Setting Account.identity.upn or Account.identity.sid removes the need for an AD lookup on every request. upn will often be the same as primary_smtp_address, but it is not guaranteed. If you have access to your organization's AD servers, you can look up these values once and add them to your Account object to improve performance of the following requests.
    • ๐Ÿ‘ Added support for CBA authentication