U
    /e                     @  s   U d Z ddlmZ ddlZeeZddlZddlm	Z	 ddl
mZmZ ddlmZmZ ddlmZ ed	 Zed
 Zdddd	Zded< dZG dd deZG dd dZd dddddZd!ddddddddZdS )"zD Utility functions for helping with operations involving browsers.

    )annotationsN)abspath)Dictcast)LiteralProtocol   )settings)sameZwindowtab)r      r   r   zDict[BrowserTarget, TargetCode]	NEW_PARAM)DummyWebBrowserget_browser_controllerviewc                   @  s&   e Zd ZdZd
dddddddZd	S )BrowserLikez* Interface for browser-like objects.

    .str
TargetCodeboolurlnew	autoraisereturnc                 C  s   d S )N selfr   r   r   r   r   6/tmp/pip-unpacked-wheel-f5fndrjf/bokeh/util/browser.pyopen9   s    zBrowserLike.openN)..__name__
__module____qualname____doc__r   r   r   r   r   r   5   s   r   c                   @  s&   e Zd ZdZdddddddd	Zd
S )r   z( A "no-op" web-browser controller.

    r   Tr   r   r   r   c                 C  s   dS )z0 Receive standard arguments and take no action. Tr   r   r   r   r   r   @   s    zDummyWebBrowser.openN)r   Tr   r   r   r   r   r   <   s   r   z
str | None)browserr   c                 C  s<   t | } | dkrttt}n| dkr.t }n
t| }|S )a   Return a browser controller.

    Args:
        browser (str or None) : browser name, or ``None`` (default: ``None``)
            If passed the string ``'none'``, a dummy web browser controller
            is returned.

            Otherwise, use the value to select an appropriate controller using
            the :doc:`webbrowser <python:library/webbrowser>` standard library
            module. If the value is ``None``, a system default is used.

    Returns:
        controller : a web browser controller

    Nnone)r	   r$   r   r   
webbrowserr   get)r$   
controllerr   r   r   r   D   s    

r   r
   Tr   BrowserTargetr   None)locationr$   r   r   r   c                 C  s   zt | }W n$ tk
r0   td|dY nX | drB| }ndt|  }zt|}|j|||d W n tk
r~   Y nX dS )a   Open a browser to view the specified location.

    Args:
        location (str) : Location to open
            If location does not begin with "http:" it is assumed
            to be a file path on the local filesystem.
        browser (str or None) : what browser to use (default: None)
            If ``None``, use the system default browser.
        new (str) : How to open the location. Valid values are:

            ``'same'`` - open in the current tab

            ``'tab'`` - open a new tab in the current window

            ``'window'`` - open in a new window
        autoraise (bool) : Whether to automatically raise the location
            in a new browser window (default: True)

    Returns:
        None

    z$invalid 'new' value passed to view: z., valid values are: 'same', 'window', or 'tab'httpzfile://)r   r   N)r   KeyErrorRuntimeError
startswithr   r   r   	Exception)r+   r$   r   r   Znew_idr   r(   r   r   r   r   _   s    
r   )N)Nr
   T)r#   
__future__r   logging	getLoggerr    logr&   os.pathr   typingr   r   Ztyping_extensionsr   r   r	   r)   r   r   __annotations____all__r   r   r   r   r   r   r   r   <module>   s    

