
    2.ax                     @    d dl Z d dlmZ ddlmZmZmZ  G d d      Zy)    N)datetime   )authtypesutilsc                   d    e Zd Z ej                  d      d        Zd	dZd Z	 	 d
dZd Z	ddZ
y)DaemonApiMixinz1.25c                 f    | j                  d      }| j                  | j                  |      d      S )a(  
        Get data usage information.

        Returns:
            (dict): A dictionary representing different resource categories
            and their respective data usage.

        Raises:
            :py:class:`docker.errors.APIError`
                If the server returns an error.
        z
/system/dfT_url_result_get)selfurls     3/usr/lib/python3/dist-packages/docker/api/daemon.pydfzDaemonApiMixin.df   s+     ii%||DIIcND11    Nc                 n   t        |t              rt        j                  |      }t        |t              rt        j                  |      }|rt        j                  |      }|||d}| j                  d      }| j                  ||dd      }| j                  ||      }t        j                  ||      S )ar  
        Get real-time events from the server. Similar to the ``docker events``
        command.

        Args:
            since (UTC datetime or int): Get events from this point
            until (UTC datetime or int): Get events until this point
            filters (dict): Filter the events by event time, container or image
            decode (bool): If set to true, stream will be decoded into dicts on
                the fly. False by default.

        Returns:
            A :py:class:`docker.types.daemon.CancellableStream` generator

        Raises:
            :py:class:`docker.errors.APIError`
                If the server returns an error.

        Example:

            >>> for event in client.events(decode=True)
            ...   print(event)
            {u'from': u'image/with:tag',
             u'id': u'container-id',
             u'status': u'start',
             u'time': 1423339459}
            ...

            or

            >>> events = client.events()
            >>> for event in events:
            ...   print(event)
            >>> # and cancel from another thread
            >>> events.close()
        )sinceuntilfiltersz/eventsTN)paramsstreamtimeout)decode)

isinstancer   r   datetime_to_timestampconvert_filtersr   r   _stream_helperr   CancellableStream)	r   r   r   r   r   r   r   responser   s	            r   eventszDaemonApiMixin.events   s    L eX&//6EeX&//6E++G4G 

 ii	"99Sd9K$$Xf$=&&vx88r   c                 b    | j                  | j                  | j                  d            d      S )a  
        Display system-wide information. Identical to the ``docker info``
        command.

        Returns:
            (dict): The info as a dict

        Raises:
            :py:class:`docker.errors.APIError`
                If the server returns an error.
        z/infoTr   r   r   r   s    r   infozDaemonApiMixin.infoS   s'     ||DIIdii&894@@r   c                 ~   |rFt         j                  j                  |      r't        j                  || j
                        | _        nG| j                  r| j                  j                  r%t        j                  | j
                        | _        | j                  j                  |      }|r|j                  dd      |k(  r|s|S ||||d}| j                  | j                  d      |      }	|	j                  dk(  r.| j                  j                  |xs t        j                  |       | j                  |	d	      S )
a^  
        Authenticate with a registry. Similar to the ``docker login`` command.

        Args:
            username (str): The registry username
            password (str): The plaintext password
            email (str): The email for the registry account
            registry (str): URL to the registry.  E.g.
                ``https://index.docker.io/v1/``
            reauth (bool): Whether or not to refresh existing authentication on
                the Docker server.
            dockercfg_path (str): Use a custom path for the Docker config file
                (default ``$HOME/.docker/config.json`` if present,
                otherwise ``$HOME/.dockercfg``)

        Returns:
            (dict): The response from the login request

        Raises:
            :py:class:`docker.errors.APIError`
                If the server returns an error.
        )credstore_envusernameN)r)   passwordemailserveraddressz/auth)data   Tjson)ospathexistsr   load_configr(   _auth_configsis_emptyresolve_authconfigget
_post_jsonr   status_codeadd_auth
INDEX_NAMEr   )
r   r)   r*   r+   registryreauthdockercfg_pathauthcfgreq_datar!   s
             r   loginzDaemonApiMixin.logina   s   : bggnn^<!%!1!1d.@.@"D ##t'9'9'B'B!%!1!1"00"D $$77A w{{:t4@N ! %	
 ??499W#5H?E3&''(CDOOXN||H4|00r   c                 f    | j                  | j                  | j                  d                  dk(  S )a!  
        Checks the server is responsive. An exception will be raised if it
        isn't responding.

        Returns:
            (bool) The response from the server.

        Raises:
            :py:class:`docker.errors.APIError`
                If the server returns an error.
        z/_pingOKr$   r%   s    r   pingzDaemonApiMixin.ping   s*     ||DIIdii&9:;tCCr   c                 l    | j                  d|      }| j                  | j                  |      d      S )a&  
        Returns version information from the server. Similar to the ``docker
        version`` command.

        Returns:
            (dict): The server version information

        Raises:
            :py:class:`docker.errors.APIError`
                If the server returns an error.
        z/version)versioned_apiTr/   r   )r   api_versionr   s      r   versionzDaemonApiMixin.version   s1     ii
+i>||DIIcN|66r   )NNNN)NNNFN)T)__name__
__module____qualname__r   minimum_versionr   r"   r&   rB   rE   rI    r   r   r	   r	      sH    U6"2 #299vA CG+/71rD7r   r	   )r1   r    r   r   r   r	   rN   r   r   <module>rP      s    	  ! !n7 n7r   