ó
mÜJ]c           @` s¤  d  d l  m Z m Z m Z m Z d  d l Z e d  d l m Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z d  d l m Z d  d l m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d	 l m Z d  d
 l m Z d  d l m Z m Z d  d l m Z d  d l  m! Z! m" Z" d  d l# m$ Z$ d  d l% m& Z& d d l' m( Z( m) Z) m* Z* m+ Z+ m, Z, d  d l  j- j- Z- e j. d e j/ ƒ e j0 d „  ƒ Z1 d e f d „  ƒ  YZ2 d e f d „  ƒ  YZ3 d „  Z4 d „  Z5 d „  Z6 e	 j7 d ƒ Z8 d „  Z9 e	 j7 d ƒ Z: d „  Z; d „  Z< e= d  „ Z> d! „  Z? d" „  Z@ d# „  ZA e jB jC e
 jD d$ k d% d& ƒd' „  ƒ ZE d( „  ZF d) „  ZG d* „  ZH e jB jI d+ d, e= f d- e= f d. e= f d/ eJ f g ƒ e jB jK d0 „  ƒ ƒ ZL d1 „  ZM d2 „  ZN d3 „  ZO d4 „  ZP d5 „  ZQ d6 „  ZR d7 „  ZS d8 „  ZT d9 „  ZU d: „  ZV d; „  ZW d< „  ZX d= „  ZY d> „  ZZ e jB jC e
 jD d$ k d% d? ƒd@ „  ƒ Z[ dA „  Z\ dB „  Z] dC „  Z^ d S(D   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsN(   t	   timedelta(   t   gen(   t   PeriodicCallbackt   IOLoop(   t	   HTTPError(   t
   HTTPServer(   t   Application(   t   Handler(   t   Model(   t   Listt   String(   t   pull_session(   t
   BaseServert   Server(   t   BokehTornado(   t   check_session_id_signaturei   (   t   ManagedServerLoopt   urlt   ws_urlt   http_gett   websocket_opent   levelc         c` s   t  j Vt  j |  ƒ ‚ d  S(   N(   R   t   momentt   Return(   t   value(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   async_value5   s    t   HookListModelc           B` s   e  Z e e ƒ Z RS(    (   t   __name__t
   __module__R   R   t   hooks(    (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyR   :   s   t   HookTestHandlerc           B` s†   e  Z d  „  Z d „  Z d „  Z d „  Z e j d „  ƒ Z e j d „  ƒ Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z RS(   c         C` sM   t  t |  ƒ j ƒ  d |  _ d |  _ d |  _ g  |  _ d  |  _ d  |  _	 d  S(   Ni    (
   t   superR"   t   __init__t
   load_countt   unload_countt   session_creation_async_valueR!   t   Nonet   server_periodic_removert   session_periodic_remover(   t   self(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyR$   >   s    					c         C` sI   |  j  d k s t ‚ d | _ | j d j j d ƒ |  j j d ƒ d  S(   Ni   u   Modifiedi    u   modify(   R'   t   AssertionErrort   titlet   rootsR!   t   append(   R+   t   doc(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   modify_documentG   s    	c         ` s‘   t  ˆ j ƒ d k s t ‚ |  j d 7_ |  j j d ƒ ˆ j |  j ƒ ˆ j |  j	 d ƒ ˆ j
 |  j d ƒ ‰  ‡  ‡ f d †  } | |  _ d  S(   Ni    i   u   server_loadedi   i   c           ` s   ˆ j  ˆ  ƒ d  S(   N(   t   remove_periodic_callback(    (   t   periodic_cb_idt   server_context(    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   removerX   s    (   t   lent   sessionsR,   R%   R!   R/   t   add_next_tick_callbackt   on_next_tick_servert   add_timeout_callbackt   on_timeout_servert   add_periodic_callbackt   on_periodic_serverR)   (   R+   R4   R5   (    (   R3   R4   s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   on_server_loadedO   s    c         C` s#   |  j  d 7_  |  j j d ƒ d  S(   Ni   u   server_unloaded(   R&   R!   R/   (   R+   R4   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   on_server_unloaded]   s    c         #` s–   t  j ‡ f d †  ƒ } | j | ƒ V| j ‰ ˆ j ˆ j ƒ ˆ j ˆ j d ƒ ˆ j ˆ j	 d ƒ ‰  ‡  ‡ f d †  } | ˆ _
 ˆ j j d ƒ d  S(   Nc         3` sš   d d l  m } t ƒ  } |  j | k s. t ‚ t |  j ƒ d k sI t ‚ | j j d ƒ |  j	 | ƒ t
 d ƒ Vˆ  _ t
 d ƒ Vˆ  _ t
 d ƒ Vˆ  _ d  S(   Ni    (   t   DEFAULT_TITLEu   session_createdi   i   i   (   t   bokeh.documentR@   R   R-   R,   R6   R.   R!   R/   t   add_rootR   R'   (   R0   R@   t	   hook_list(   R+   (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   setup_documentd   s    	i   i   c           ` s   ˆ j  ˆ  ƒ d  S(   N(   R2   (    (   R3   R4   (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyR5   z   s    u   session_created(   R   t	   coroutinet   with_locked_documentR4   R8   t   on_next_tick_sessionR:   t   on_timeout_sessionR<   t   on_periodic_sessionR*   R!   R/   (   R+   t   session_contextRD   R5   (    (   R3   R+   R4   s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   on_session_createdb   s    		c         #` s:   t  j ‡  f d †  ƒ } | j | ƒ Vˆ  j j d ƒ d  S(   Nc         3` sK   |  j  d j j d ƒ t d ƒ Vˆ  _ t d ƒ Vˆ  _ t d ƒ Vˆ  _ d  S(   Ni    u   session_destroyedi   i   i   (   R.   R!   R/   R   R'   (   R0   (   R+   (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   shutdown_document…   s    u   session_destroyed(   R   RE   RF   R!   R/   (   R+   RJ   RL   (    (   R+   s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   on_session_destroyed‚   s    c         C` s   |  j  j d ƒ d  S(   Nu   next_tick_server(   R!   R/   (   R+   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyR9      s    c         C` s   |  j  j d ƒ d  S(   Nu   timeout_server(   R!   R/   (   R+   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyR;   ’   s    c         C` s   |  j  j d ƒ |  j ƒ  d  S(   Nu   periodic_server(   R!   R/   R)   (   R+   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyR=   •   s    c         C` s   |  j  j d ƒ d  S(   Nu   next_tick_session(   R!   R/   (   R+   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyRG   ™   s    c         C` s   |  j  j d ƒ d  S(   Nu   timeout_session(   R!   R/   (   R+   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyRH   œ   s    c         C` s   |  j  j d ƒ |  j ƒ  d  S(   Nu   periodic_session(   R!   R/   R*   (   R+   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyRI   Ÿ   s    (   R   R    R$   R1   R>   R?   R   RE   RK   RM   R9   R;   R=   RG   RH   RI   (    (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyR"   =   s   					 					c          C` sg   t  ƒ  }  t |  ƒ  } | j d k s- t ‚ Wd  QXt |  d d ƒ } | j d k s] t ‚ Wd  QXd  S(   Nu    t   prefixu   foo(   R
   R   RN   R,   (   t   applicationt   server(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test_prefix§   s
    	c          C` sg   t  ƒ  }  t |  ƒ  } | j d  k s- t ‚ Wd  QXt |  d d ƒ } | j d k s] t ‚ Wd  QXd  S(   Nt   indexu   foo(   R
   R   RR   R(   R,   (   RO   RP   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt
   test_index¯   s
    	c       
   C` sÑ  t  ƒ  }  t |  ƒ ï } | j d ƒ } t | ƒ d k s? t ‚ t | j t | ƒ ƒ | j d ƒ } t | ƒ d k s| t ‚ t | j t | ƒ ƒ | j d ƒ } t | ƒ d k s¹ t ‚ | j ƒ  } t | ƒ d k sÝ t ‚ t j	 t
 ƒ  | j d ƒ Wd  QXWd  QXt i |  d 6|  d 6ƒ «} t | j t | ƒ d ƒ | j d ƒ } t | ƒ d k sdt ‚ | j d ƒ } t | ƒ d k s‹t ‚ | j ƒ  } t | ƒ d k s¯t ‚ t | j t | ƒ d ƒ | j d ƒ } t | ƒ d k sðt ‚ | j d ƒ } t | ƒ d k st ‚ | j ƒ  } t | ƒ d k s;t ‚ t | j t | ƒ d ƒ | j d ƒ } t | ƒ d k s|t ‚ | j d ƒ } t | ƒ d k s£t ‚ | j ƒ  } t | ƒ d	 k sÇt ‚ Wd  QXd  S(
   Nu   /i    i   i   u   /foou   /baru   foou   bari   (   R
   R   t   get_sessionsR6   R,   R   t   io_loopR   t   pytestt   raisest
   ValueError(   RO   RP   t   server_sessions(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test_get_sessions·   sH    	u%   ["']sessionid["'] *: *["']([^"]+)["']c         C` s\   d d l  m } t |  | ƒ s@ d d  l } | j |  d ƒ }  n  t j |  ƒ } | j d ƒ S(   Ni    (   t   string_typesu   utf-8i   (   t   sixR[   t
   isinstancet   codecst   decodet   sessionid_in_jsont   searcht   group(   t   htmlR[   R^   t   match(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   extract_sessionid_from_jsoné   s    u&   ["']use_for_title["'] *: *(false|true)c         C` s\   d d l  m } t |  | ƒ s@ d d  l } | j |  d ƒ }  n  t j |  ƒ } | j d ƒ S(   Ni    (   R[   u   utf-8i   (   R\   R[   R]   R^   R_   t   use_for_title_in_jsonRa   Rb   (   Rc   R[   R^   Rd   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   extract_use_for_title_from_jsonõ   s    c         C` s   t  |  ƒ d S(   NuA   autoload.js?bokeh-protocol-version=1.0&bokeh-autoload-element=foo(   R   (   RP   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   autoload_urlþ   s    	c         C` sˆ   d d l  m } t |  | ƒ s@ d d  l } | j |  d ƒ }  n  xA d d g D]3 } | rn | |  k s€ t ‚ qM | |  k sM t ‚ qM Wd  S(   Ni    (   R[   u   utf-8u   static/js/bokeh.min.jsu   static/js/bokeh-widgets.min.js(   R\   R[   R]   R^   R_   R,   (   t   responset	   requestedR[   R^   t   file(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   resource_files_requested  s    c          C` s@   t  ƒ  }  t |  d t ƒ } | j j t k s6 t ‚ Wd  QXd  S(   Nt   use_xheaders(   R
   R   t   Truet   _httpt   xheadersR,   (   RO   RP   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test_use_xheaders  s    	c          C` s¦   t  t ƒ  ƒ }  t |  ƒ } | j ƒ  t ƒ  } | j ƒ  t | |  | ƒ } | j ƒ  | j | k si t ‚ | j	 j | k s t ‚ | j
 ƒ  | j
 ƒ  | j j ƒ  d  S(   N(   R   R
   R	   t   startR   t   make_currentR   RU   R,   t   _tornadot   stopt   close(   t   appt
   httpservert   loopRP   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test_base_server  s    
	



c       	   C` sÐ   d „  }  t  |  d d ƒH } t | j t | ƒ ƒ | j d ƒ d } | j j d k s_ t ‚ Wd  QXt  i |  d 6d d ƒL } t | j t | ƒ d ƒ | j d ƒ d } | j j d k sÆ t ‚ Wd  QXd  S(   Nc         S` s   d |  _  d  S(   Nu   Hello, world!(   R-   (   R0   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt
   modify_doc(  s    t   porti    u   /u   Hello, world!u   /foou   foo(   R   R   RU   R   RT   t   documentR-   R,   (   R{   RP   t   session(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt%   test_server_applications_callable_arg'  s    	u   win32t   reasonu<   Lifecycle hooks order different on Windows (TODO open issue)c    
      ` s3  t  ƒ  }  t ƒ  ‰  |  j ˆ  ƒ t |  d d ƒ'‰ ‡  ‡ f d †  } t | d ƒ } | j ƒ  ˆ j j ƒ  | j ƒ  t d d d t	 ˆ ƒ d ˆ j ƒ } | j
 } t | j ƒ d k s¾ t ‚ ˆ j d	 | j ƒ } | j
 } t | j ƒ d k s÷ t ‚ | j d
 } | j d
 } | j ƒ  | j ƒ  ‡ f d †  }	 ˆ j j d |	 ƒ ˆ j j ƒ  Wd  QXˆ  j d d d d d d d d d d d g k st ‚ ˆ  j d k s¥t ‚ ˆ  j d k sºt ‚ ˆ  j d k sÏt ‚ | j d k sät ‚ | j d k sùt ‚ | j d d g k st ‚ | j d d g k s/t ‚ d  S(   Nt"   check_unused_sessions_millisecondsi   c           ` s)   t  ˆ  j ƒ d k r% ˆ j j ƒ  n  d  S(   Ni   (   R6   R!   RU   Ru   (    (   t   handlerRP   (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt
   check_doneF  s    i   t
   session_idu   test__lifecycle_hooksR   RU   u   /i    c           ` s   ˆ  j  j ƒ  d  S(   N(   RU   Ru   (    (   RP   (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   on_donec  s    gš™™™™™¹?u   server_loadedu   next_tick_serveru   timeout_serveru   periodic_serveru   session_createdu   next_tick_sessionu   modifyu   timeout_sessionu   periodic_sessionu   session_destroyedu   server_unloadedi   u   Modified(   R
   R"   t   addR   R   Rr   RU   Ru   R   R   R}   R6   R.   R,   t   get_sessiont   idRv   t   request_expirationt
   call_laterR!   R%   R&   R'   R-   (
   RO   Rƒ   t   server_load_checkert   client_sessiont
   client_doct   server_sessiont
   server_doct   client_hook_listt   server_hook_listR…   (    (   R‚   RP   s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test__lifecycle_hooks=  sT    		

		

	c          C` sŒ   t  ƒ  }  t |  ƒ q } t | j t | ƒ d ƒ } | j } t | ƒ } | j d | ƒ } | j } | j	 } | j
 d  k	 s‚ t ‚ Wd  QXd  S(   Nu   ?foo=10u   /(   R
   R   R   RU   R   t   bodyRe   R‡   R}   RJ   t   requestR(   R,   (   RO   RP   Ri   Rc   t	   sessionidRŽ   R   RJ   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt    test__request_in_session_context‚  s    					c          C` s–   t  ƒ  }  t |  ƒ { } t | j t | ƒ d ƒ } | j } t | ƒ } | j d | ƒ } | j } | j	 } | j
 j d d g k sŒ t ‚ Wd  QXd  S(   Nu   ?foo=10u   /u   foot   10(   R
   R   R   RU   R   R“   Re   R‡   R}   RJ   R”   t	   argumentsR,   (   RO   RP   Ri   Rc   R•   RŽ   R   RJ   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt.   test__request_in_session_context_has_arguments‘  s    					c          C` s‘   t  ƒ  }  t |  ƒ v } t | j t | ƒ ƒ } | j } t | ƒ } | j d | ƒ } | j } | j	 } t
 | j j ƒ d k s‡ t ‚ Wd  QXd  S(   Nu   /i    (   R
   R   R   RU   R   R“   Re   R‡   R}   RJ   R6   R”   R˜   R,   (   RO   RP   Ri   Rc   R•   RŽ   R   RJ   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt-   test__no_request_arguments_in_session_contextŸ  s    					u   querystring,requestedu    u   &resources=defaultu   &resources=whateveru   &resources=nonec         C` sQ   t  ƒ  } t | ƒ 6 } t | j t | ƒ |  ƒ } t | j d | ƒWd QXd S(   u   
    Checks if the loading of resource files is requested by the autoload.js
    response based on the value of the "resources" parameter.
    Rj   N(   R
   R   R   RU   Rh   Rl   R“   (   t   querystringRj   RO   RP   Ri   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test__resource_files_requested®  s
    		c          C` s¶   t  ƒ  }  t |  ƒ › } | j d ƒ } d t | ƒ k s? t ‚ t | j t | ƒ ƒ } | j } t	 | ƒ } | j d ƒ } d t | ƒ k s“ t ‚ | | d j
 k s¬ t ‚ Wd  QXd  S(   Nu   /i    i   (   R
   R   RT   R6   R,   R   RU   Rh   R“   Re   Rˆ   (   RO   RP   R7   Ri   t   jsR•   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt!   test__autocreate_session_autoloadÀ  s    			c          C` sˆ   t  ƒ  }  t |  ƒ m } | j d ƒ } d t | ƒ k s? t ‚ t | j t | ƒ ƒ } | j } t	 | ƒ } | d k s~ t ‚ Wd  QXd  S(   Nu   /i    u   false(
   R
   R   RT   R6   R,   R   RU   Rh   R“   Rg   (   RO   RP   R7   Ri   R   t   use_for_title(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test__no_set_title_autoloadÏ  s    			c          C` s¶   t  ƒ  }  t |  ƒ › } | j d ƒ } d t | ƒ k s? t ‚ t | j t | ƒ ƒ } | j } t	 | ƒ } | j d ƒ } d t | ƒ k s“ t ‚ | | d j
 k s¬ t ‚ Wd  QXd  S(   Nu   /i    i   (   R
   R   RT   R6   R,   R   RU   R   R“   Re   Rˆ   (   RO   RP   R7   Ri   Rc   R•   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test__autocreate_session_docÛ  s    			c          C` sŠ   t  ƒ  }  t |  ƒ o } | j d ƒ } d t | ƒ k s? t ‚ t | j t | ƒ d ƒ | j d ƒ } d t | ƒ k s€ t ‚ Wd  QXd  S(   Nu   /i    u   ?bokeh-protocol-version=1.0(   R
   R   RT   R6   R,   R   RU   R   (   RO   RP   R7   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt%   test__no_autocreate_session_websocketê  s    		c          C` sÖ   t  ƒ  }  t |  ƒ » } | j d ƒ } d t | ƒ k s? t ‚ d } t | j t | ƒ d | ƒ } | j } t	 | ƒ } | | k sŒ t ‚ | j d ƒ } d t | ƒ k s³ t ‚ | | d j
 k sÌ t ‚ Wd  QXd  S(   Nu   /i    u   foou   &bokeh-session-id=i   (   R
   R   RT   R6   R,   R   RU   Rh   R“   Re   Rˆ   (   RO   RP   R7   t   expectedRi   R   R•   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt#   test__use_provided_session_autoloadö  s    			c          C` sÖ   t  ƒ  }  t |  ƒ » } | j d ƒ } d t | ƒ k s? t ‚ d } t | j t | ƒ d | ƒ } | j } t	 | ƒ } | | k sŒ t ‚ | j d ƒ } d t | ƒ k s³ t ‚ | | d j
 k sÌ t ‚ Wd  QXd  S(   Nu   /i    u   foou   ?bokeh-session-id=i   (   R
   R   RT   R6   R,   R   RU   R   R“   Re   Rˆ   (   RO   RP   R7   R£   Ri   Rc   R•   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test__use_provided_session_doc  s    			c          C` s·   t  ƒ  }  t |  ƒ œ } | j d ƒ } d t | ƒ k s? t ‚ d } t | ƒ d d | } t | j | ƒ | j d ƒ } d t | ƒ k s” t ‚ | | d j k s­ t ‚ Wd  QXd  S(   Nu   /i    u   foou   ?bokeh-protocol-version=1.0u   &bokeh-session-id=i   (	   R
   R   RT   R6   R,   R   R   RU   Rˆ   (   RO   RP   R7   R£   R   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt$   test__use_provided_session_websocket  s    		c       
   C` sà   t  ƒ  }  t |  d t d d ƒ¹ } | j d ƒ } d t | ƒ k sK t ‚ t | j t | ƒ ƒ } | j	 } t
 | ƒ } | j d ƒ } d t | ƒ k sŸ t ‚ | | d j k s¸ t ‚ t | d t d d ƒsÖ t ‚ Wd  QXd  S(   Nt   sign_sessionst
   secret_keyu   foou   /i    i   t   signed(   R
   R   Rn   RT   R6   R,   R   RU   Rh   R“   Re   Rˆ   R   (   RO   RP   R7   Ri   R   R•   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt(   test__autocreate_signed_session_autoload)  s    			c       
   C` sà   t  ƒ  }  t |  d t d d ƒ¹ } | j d ƒ } d t | ƒ k sK t ‚ t | j t | ƒ ƒ } | j	 } t
 | ƒ } | j d ƒ } d t | ƒ k sŸ t ‚ | | d j k s¸ t ‚ t | d t d d ƒsÖ t ‚ Wd  QXd  S(   NR§   R¨   u   foou   /i    i   R©   (   R
   R   Rn   RT   R6   R,   R   RU   R   R“   Re   Rˆ   R   (   RO   RP   R7   Ri   Rc   R•   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt#   test__autocreate_signed_session_doc:  s    			c          C` sÓ   t  ƒ  }  t |  d t d d ƒ¬ } | j d ƒ } d t | ƒ k sK t ‚ d } t j t ƒ % } t	 | j
 t | ƒ d | ƒ Wd  QXd t | j ƒ k s¢ t ‚ | j d ƒ } d t | ƒ k sÉ t ‚ Wd  QXd  S(	   NR§   R¨   u   baru   /i    u   foou   &bokeh-session-id=u   Invalid session ID(   R
   R   Rn   RT   R6   R,   RV   RW   R   R   RU   Rh   t   reprR   (   RO   RP   R7   R£   t   info(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt&   test__reject_unsigned_session_autoloadK  s    		c          C` sÓ   t  ƒ  }  t |  d t d d ƒ¬ } | j d ƒ } d t | ƒ k sK t ‚ d } t j t ƒ % } t	 | j
 t | ƒ d | ƒ Wd  QXd t | j ƒ k s¢ t ‚ | j d ƒ } d t | ƒ k sÉ t ‚ Wd  QXd  S(	   NR§   R¨   u   baru   /i    u   foou   ?bokeh-session-id=u   Invalid session ID(   R
   R   Rn   RT   R6   R,   RV   RW   R   R   RU   R   R¬   R   (   RO   RP   R7   R£   R­   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt!   test__reject_unsigned_session_docZ  s    	$c          C` sª   t  ƒ  }  t |  d t d d ƒƒ } | j d ƒ } d t | ƒ k sK t ‚ d } t | ƒ d d | } t | j | ƒ | j d ƒ } d t | ƒ k s  t ‚ Wd  QXd  S(	   NR§   R¨   u   baru   /i    u   foou   ?bokeh-protocol-version=1.0u   &bokeh-session-id=(	   R
   R   Rn   RT   R6   R,   R   R   RU   (   RO   RP   R7   R£   R   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt'   test__reject_unsigned_session_websocketh  s    		c          C` s¿   t  ƒ  }  t |  d t ƒž } | j d ƒ } d t | ƒ k sE t ‚ t j t ƒ  } t	 | j
 t | ƒ ƒ Wd  QXd t | j ƒ k sŽ t ‚ | j d ƒ } d t | ƒ k sµ t ‚ Wd  QXd  S(   Nt   generate_session_idsu   /i    u   No bokeh-session-id provided(   R
   R   t   FalseRT   R6   R,   RV   RW   R   R   RU   Rh   R¬   R   (   RO   RP   R7   R­   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt"   test__no_generate_session_autoloadx  s    	c          C` s¿   t  ƒ  }  t |  d t ƒž } | j d ƒ } d t | ƒ k sE t ‚ t j t ƒ  } t	 | j
 t | ƒ ƒ Wd  QXd t | j ƒ k sŽ t ‚ | j d ƒ } d t | ƒ k sµ t ‚ Wd  QXd  S(   NR±   u   /i    u   No bokeh-session-id provided(   R
   R   R²   RT   R6   R,   RV   RW   R   R   RU   R   R¬   R   (   RO   RP   R7   R­   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test__no_generate_session_doc…  s    	u+   multiple processes not supported on Windowsc          C` sa   t  j d ƒ L t  j d ƒ ) }  t ƒ  } t j | d d d d ƒWd  QX|  j d ƒ Wd  QXd  S(   Nu)   tornado.httpserver.HTTPServer.add_socketsu   tornado.process.fork_processest	   num_procsi   R|   i    (   t   mockt   patchR
   RP   R   t   assert_called_with(   t
   tornado_fpRO   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test__server_multiple_processes’  s
    	c       	   C` sL   t  ƒ  }  t j ƒ  } | t j t ƒ  t |  d d ƒ Wd  QXWd  QXd  S(   NRµ   i   (   R
   R   t   instanceRV   RW   t   RuntimeErrorR   (   RO   t   ioloop_instance(    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt7   test__existing_ioloop_with_multiple_processes_exceptionž  s    	 c          C` sY   t  ƒ  }  t |  d d ƒ8 } | j } | d k s9 t ‚ t | j t | ƒ ƒ Wd  QXd  S(   NR|   i    (   R
   R   R|   R,   R   RU   R   (   RO   RP   R|   (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   test__actual_port_number¥  s
    		c          ` s•   t  ƒ  }  t ƒ  ‰ ˆ j ƒ  t |  d ˆ ƒ‰ ˆ j ƒ  g  ‰ ‡  ‡ ‡ f d †  } ‡ ‡ f d †  ‰  ˆ j | ƒ ˆ j ƒ  ˆ d  g k s‘ t ‚ d  S(   NRU   c           ` s1   ˆ j  ƒ  ˆ j ƒ  ˆ j t d d ƒ ˆ  ƒ d  S(   Nt   secondsg{®Gáz„?(   t   unlistenRu   t   add_timeoutR   (    (   t   gRy   RP   (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   fµ  s    

c           ` s   ˆ j  d  ƒ ˆ  j ƒ  d  S(   N(   R/   R(   Ru   (    (   Ry   t   result(    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyRÃ   ¼  s    (   R
   R   Rs   R   Rr   t   add_callbackR(   R,   (   RO   RÄ   (    (   RÃ   Ry   RÅ   RP   s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt!   test__ioloop_not_forcibly_stopped¬  s    		


(_   t
   __future__R    R   R   R   RV   t   datetimeR   t   loggingt   ret   sysR¶   t   tornadoR   t   tornado.ioloopR   R   t   tornado.httpclientR   t   tornado.httpserverR	   t   bokeh.applicationR
   t   bokeh.application.handlersR   t   bokeh.modelR   t   bokeh.core.propertiesR   R   t   bokeh.clientR   t   bokeh.server.serverR   R   t   bokeh.server.tornadoR   t   bokeh.util.session_idR   t   utilsR   R   R   R   R   RP   t   basicConfigt   DEBUGRE   R   R   R"   RQ   RS   RZ   t   compileR`   Re   Rf   Rg   Rh   Rn   Rl   Rq   Rz   R   t   markt   skipift   platformR’   R–   R™   Rš   t   parametrizeR²   t   unitRœ   Rž   R    R¡   R¢   R¤   R¥   R¦   Rª   R«   R®   R¯   R°   R³   R´   Rº   R¾   R¿   RÇ   (    (    (    s=   lib/python2.7/site-packages/bokeh/server/tests/test_server.pyt   <module>   s†   " (j			1							D																						