o
    ÌÄ.j  ã                   @   s„   d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZ ddlmZ h d£Zded	B fd
d„Zded	B fdd„Zg d¢Zd	S )aÎ  
JMAP calendar support for python-caldav.

Provides synchronous and asynchronous JMAP clients with the same public API as
the CalDAV client, so user code works regardless of server protocol.

Basic usage::

    from caldav.jmap import get_jmap_client

    client = get_jmap_client(
        url="https://jmap.example.com/.well-known/jmap",
        username="alice",
        password="secret",
    )
    calendars = client.get_calendars()

Async usage::

    from caldav.jmap import get_async_jmap_client

    async with get_async_jmap_client(
        url="https://jmap.example.com/.well-known/jmap",
        username="alice",
        password="secret",
    ) as client:
        calendars = await client.get_calendars()
é    )ÚAsyncJMAPClient)Ú
JMAPClient)ÚJMAPAuthErrorÚJMAPCapabilityErrorÚ	JMAPErrorÚJMAPMethodError)ÚJMAPCalendar)ÚJMAPCalendarObject>   ÚurlÚauthÚtimeoutÚpasswordÚusernameÚ	auth_typeÚreturnNc                  K   óB   ddl m} |di | ¤Ž}|du rdS tdi dd„ | ¡ D ƒ¤ŽS )u|  Create a :class:`JMAPClient` from configuration.

    Configuration is read from the same sources as :func:`caldav.get_davclient`:

    1. Explicit keyword arguments (``url``, ``username``, ``password``, â€¦)
    2. Environment variables (``CALDAV_URL``, ``CALDAV_USERNAME``, â€¦)
    3. Config file (``~/.config/caldav/calendar.conf`` or equivalent)

    Returns ``None`` if no configuration is found, matching the behaviour
    of :func:`caldav.get_davclient`.

    Example::

        client = get_jmap_client(url="https://jmap.example.com/.well-known/jmap",
                                  username="alice", password="secret")
    r   ©Úget_connection_paramsNc                 S   ó   i | ]\}}|t v r||“qS © ©Ú
_JMAP_KEYS©Ú.0ÚkÚvr   r   úI/home/thesage/.local/lib/python3.10/site-packages/caldav/jmap/__init__.pyÚ
<dictcomp>B   ó    z#get_jmap_client.<locals>.<dictcomp>r   )Úcaldav.configr   r   Úitems©Úkwargsr   Úconn_paramsr   r   r   Úget_jmap_client,   s
   r$   c                  K   r   )aÉ  Create an :class:`AsyncJMAPClient` from configuration.

    Accepts the same arguments and reads configuration from the same sources
    as :func:`get_jmap_client`. Returns ``None`` if no configuration is found.

    Example::

        async with get_async_jmap_client(
            url="https://jmap.example.com/.well-known/jmap",
            username="alice", password="secret"
        ) as client:
            calendars = await client.get_calendars()
    r   r   Nc                 S   r   r   r   r   r   r   r   r   X   r   z)get_async_jmap_client.<locals>.<dictcomp>r   )r   r   r   r    r!   r   r   r   Úget_async_jmap_clientE   s
   r%   )
r   r   r$   r%   r   r   r   r   r   r	   )Ú__doc__Úcaldav.jmap.async_clientr   Úcaldav.jmap.clientr   Úcaldav.jmap.errorr   r   r   r   Úcaldav.jmap.objects.calendarr   Ú#caldav.jmap.objects.calendar_objectr	   r   r$   r%   Ú__all__r   r   r   r   Ú<module>   s    