
    gVz                        d Z ddlmZ 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
 ej                  j                  ZddlZddl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mZ ddlmZmZ ddlmZ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*m+Z+ d Z,d Z-d Z. G d d      Z/ G d de      Z0 G d de0      Z1y)z!Test the contents webservice API.    )contextmanager)partialN)	normalize)
send2trash)TrashPermissionError   )GenericFileCheckpoints)Config)url_path_join
url_escape
to_os_path)NotebookTestBaseassert_http_error)write	from_dict)new_notebooknew_markdown_cell)v2)	py3compat)TemporaryDirectory)encodebytesdecodebytesc                 n    t               }| D cg c]  }||vs|j                  |      r| c}S c c}w )zuniq_stable(elems) -> list

    Return from an iterable, a list of all the unique elements in the input,
    maintaining the order in which they first appear.
    )setadd)elemsseenxs      T/usr/lib/python3/dist-packages/notebook/services/contents/tests/test_contents_api.pyuniq_stabler    "   s/     5DB!dhhqkABBBs   	222c                 D    | d   D cg c]  }|d   dk(  s| c}S c c}w )Ncontenttypenotebook )	dir_modelnbs     r   notebooks_onlyr(   +   s&    "9-H2FZ1GBHHH   c                 D    | d   D cg c]  }|d   dk(  s| c}S c c}w )Nr"   r#   	directoryr%   )r&   r   s     r   	dirs_onlyr,   .   s&     +F!qy+/EAFFFr)   c                       e Zd ZdZd ZddZddZddZddZddZ	dd	Z
dd
Zd ZddZddZd ZddZd Zd Zd Zd Zd Zy)APIzWrapper for contents API calls.c                     || _         y N)request)selfr1   s     r   __init__zAPI.__init__4   s	        Nc                 d    | j                  |t        d|      ||      }|j                          |S )Napi/contents)dataparams)r1   r   raise_for_status)r2   verbpathbodyr8   responses         r   _reqzAPI._req7   s9    <<nd3&   
 	!!#r4   c                 &    | j                  d|      S )NGETr>   r2   r;   s     r   listzAPI.list?       yy%%r4   c                 ^    i }|||d<   |||d<   |dk(  rd|d<   | j                  d||      S )Nr#   formatF0r"   r@   )r8   rA   )r2   r;   r#   rF   r"   r8   s         r   readzAPI.readB   sM    !F6N%F8e #F9yyVy44r4   c                 ^    d }|rt        j                  d|i      }| j                  d||      S )NextPOSTjsondumpsr>   )r2   r;   rJ   r<   s       r   create_untitledzAPI.create_untitledL   s/    ::ucl+Dyyt,,r4   c                 R    | j                  d|t        j                  ddi            S )NrK   r#   r+   r>   rM   rN   rB   s     r   mkdir_untitledzAPI.mkdir_untitledR   s#    yytzz6;2G'HIIr4   c                 V    t        j                  d|i      }| j                  d||      S )N	copy_fromrK   rL   r2   rT   r;   r<   s       r   copyzAPI.copyU   s(    zz;y12yyt,,r4   c                 &    | j                  d|      S NPUTrA   rB   s     r   createz
API.createY   rD   r4   c                 (    | j                  d||      S rX   rA   r2   r;   r<   s      r   uploadz
API.upload\       yyd++r4   c                 R    | j                  d|t        j                  ddi            S )NrY   r#   r+   rQ   rB   s     r   mkdirz	API.mkdir_   s#    yydjj&+1F&GHHr4   c                 V    t        j                  d|i      }| j                  d||      S )NrT   rY   rL   rU   s       r   copy_putzAPI.copy_putb   s(    zz;y12yyd++r4   c                 (    | j                  d||      S rX   rA   r\   s      r   savezAPI.savef   r^   r4   c                 &    | j                  d|      S )NDELETErA   rB   s     r   deletez
API.deletei   s    yy4((r4   c                 V    t        j                  d|i      }| j                  d||      S )Nr;   PATCHrL   )r2   r;   new_pathr<   s       r   renamez
API.renamel   s(    zz68,-yy$--r4   c                 :    | j                  dt        |d            S )Nr@   checkpointsr>   r   rB   s     r   get_checkpointszAPI.get_checkpointsp   s    yydM BCCr4   c                 :    | j                  dt        |d            S NrK   rm   rn   rB   s     r   new_checkpointzAPI.new_checkpoints   s    yyt]!CDDr4   c                 <    | j                  dt        |d|            S rq   rn   r2   r;   checkpoint_ids      r   restore_checkpointzAPI.restore_checkpointv   s    yyt]M!RSSr4   c                 <    | j                  dt        |d|            S )Nrf   rm   rn   rt   s      r   delete_checkpointzAPI.delete_checkpointy   s    yy=}m#TUUr4   )NN)/)NNN)ry   .ipynb)__name__
__module____qualname____doc__r3   r>   rC   rH   rO   rR   rV   rZ   r]   r`   rb   rd   rg   rk   ro   rr   rv   rx   r%   r4   r   r.   r.   2   se    )&5-J-&,I,,).DETVr4   r.   c                   n   e Zd ZdZg dZddgZ eedd D  cg c]  \  }}t        j                  |       c}}}}       Z	e	D  ch c]   }t        d|j                  d      d	         " c}}} Zed
        Zed        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&dDd#Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8e9jt                  jw                  d5      d6        Z<e9jt                  jw                  d5      d7        Z=e9jt                  jw                  d5      d8        Z>d9 Z?d: Z@d; ZAd< ZBe9jt                  jw                  d5      d=        ZCd> ZDd? ZEd@ ZFdA ZGeHdB        ZIdC ZJyc c}}}} w c c}}} w )EAPITestz Test the kernels web service API)) inroot)zDirectory with spaces ininspace)   unicodé
innonascii)fooa)r   b)r   zname with spaces)r   r   )foo/barbaz)orderingA)r   r   )r   C)   å bu   ç d.hidden__pycache__   NNFCry   r   c                 *    | j                  d      dz   S )Nutf-8   )encodenames    r   _blob_for_namezAPITest._blob_for_name   s    {{7#g--r4   c                     |  dS )Nz
 text filer%   r   s    r   _txt_for_namezAPITest._txt_for_name   s    z""r4   c                 0    t        || j                        S )N)root)r   notebook_dirr2   api_paths     r   r   zAPITest.to_os_path   s    ():):;;r4   c                     | j                  |      }	 t        j                  |       y# t        $ r t	        d|       Y yw xY w)zCreate a directory at api_pathzDirectory already exists: N)r   osmakedirsOSErrorprintr2   r   os_paths      r   make_dirzAPITest.make_dir   s@    //(+	<KK  	<.wk:;	<s   ) AAc                     | j                  |      }t        |dd      5 }|j                  |       ddd       y# 1 sw Y   yxY w)z$Make a text file at a given api_pathwr   encodingNr   openr   )r2   r   txtr   fs        r   make_txtzAPITest.make_txt   s>    //(+'31 	QGGCL	 	 	s	   ;Ac                     | j                  |      }t        |d      5 }|j                  |       ddd       y# 1 sw Y   yxY w)z&Make a binary file at a given api_pathwbNr   )r2   r   blobr   r   s        r   	make_blobzAPITest.make_blob   s<    //(+'4  	AGGDM	 	 	s	   9Ac                     | j                  |      }t        |dd      5 }t        ||d       ddd       y# 1 sw Y   yxY w)z(Make a notebook file at a given api_pathr   r   r      )versionNr   )r2   r   r'   r   r   s        r   make_nbzAPITest.make_nb   s?    //(+'31 	$Q"a#	$ 	$ 	$s	   8Ac                 T    | j                  |      }t        j                  |d       y)z6Delete a directory at api_path, removing any contents.T)ignore_errorsN)r   shutilrmtreer   s      r   
delete_dirzAPITest.delete_dir   s    //(+gT2r4   c                 p    | j                  |      r%t        j                  | j                  |             yy)z-Delete a file at the given path if it exists.N)isfiler   unlinkr   r   s     r   delete_filezAPITest.delete_file   s(    ;;x IIdooh/0 !r4   c                 ^    t         j                  j                  | j                  |            S r0   )r   r;   r   r   r   s     r   r   zAPITest.isfile   s    ww~~dooh788r4   c                 ^    t         j                  j                  | j                  |            S r0   )r   r;   isdirr   r   s     r   r   zAPITest.isdir   s    ww}}T__X677r4   c                 f    	 t        | j                  |             y# t        $ r
}Y d}~yd}~ww xY w)z2Send a path to trash, if possible. Return success.TNF)r   r   r   )r2   r   es      r   can_send2trashzAPITest.can_send2trash   s.    	tx01# 		s    	00c                    | j                   | j                  z   D ]8  }| j                  |       | j                  t	        | j
                  |             : | j                  D ]  \  }}t               }| d| d}| j                  ||       | j                  t	        | j                  |             | j                  |      }| d| d}| j                  ||       | j                  t	        | j                  |             | j                  |      }| d| d}| j                  ||       | j                  t	        | j                  |              t        | j                        | _        y )Nry   rz   .txt.blob)dirshidden_dirsr   
addCleanupr   r   dirs_nbsr   r   r   r   r   r   r   r.   r1   api)	r2   dr   r'   nbnamer   txtnamer   blobnames	            r   setUpzAPITest.setUp   sD   ))d... 	9AMM!OOGDOOQ78	9 }} 	AGAtBs!D6(FLL$OOGD$4$4f=> $$T*C1TF$'GMM'3'OOGD$4$4g>?&&t,DAdV5)HNN8T*OOGD$4$4h?@!	A$ t||$r4   c                    t        | j                  j                         j                               }| j	                  t        |      d       | j	                  |d   d   d       t        | j                  j                  d      j                               }| j	                  t        |      d       | j	                  |d   d   d       t        | j                  j                  d      j                               }| j	                  t        |      d       | j	                  |d   d   d       | j	                  |d   d	   d
       t        | j                  j                  d      j                               }| j	                  t        |      d       | j	                  |d   d   d       | j	                  |d   d	   d       t        | j                  j                  d      j                               }| j	                  t        |      d       |D ch c]  }t        d|d          }}g d}|D ch c]  }t        d|       }}| j	                  ||       t        | j                  j                  d      j                               }|D ch c]  }|d   	 }}h d}| j	                  ||       y c c}w c c}w c c}w )Nr   r   r   zinroot.ipynbz/Directory with spaces in/zinspace.ipynbu
   /unicodé/zinnonascii.ipynbr;      unicodé/innonascii.ipynbz	/foo/bar/z	baz.ipynbzfoo/bar/baz.ipynbr   r   r   )a.ipynbb.ipynbzname with spaces.ipynbu   unicodé.ipynbr   >   A.ipynbC.ipynbr   )r(   r   rC   rM   assertEquallenr   )r2   nbsnnbnamesexpectedr   s         r   test_list_notebookszAPITest.test_list_notebooks   s=   TXX]]_1134S1%Q8TXX]]+GHMMOPS1%Q9TXX]]<8==?@S1%Q);<Q)DETXX]];7<<>?S1%Q5Q)<=TXX]]516689S1%9<>AIeQvY/>>V8@BYud+BB(+TXX]]:6;;=>&)*1V9**4(+ ?B +s   J75J<Kc                     t        | j                  j                         j                               }|D ch c]  }t	        d|d          }}| j                  || j                         y c c}w )Nr   r   )r,   r   rC   rM   r   r   top_level_dirs)r2   r   r   	dir_namess       r   test_list_dirszAPITest.test_list_dirs  sY    --/0:>?QYuai0?	?D$7$78 @s   A+c                    | j                   D ]~  }| j                  j                  |d      j                         }| j	                  |d   |       | j	                  |d   d       | j                  d|       | j	                  |d   d         y )NFr"   r;   r#   r+   r"   )r   r   rH   rM   r   assertIn)r2   r   models      r   test_get_dir_no_contentzAPITest.test_get_dir_no_content  s     	5AHHMM!UM388:EU6]A.U6]K8MM)U+U9-t4	5r4   c                 z    t        d      5  | j                  j                  d       d d d        y # 1 sw Y   y xY w)N  nonexistant)r   r   rC   r2   s    r   test_list_nonexistant_dirz!APITest.test_list_nonexistant_dir  s/    s# 	)HHMM-(	) 	) 	)   1:c                    | j                   D ]  \  }}t        ||dz         }| j                  j                  |      j	                         }| j                  |d   | d       | j                  |d   |       | j                  |d   d       | j                  d|       | j                  |d   d       | j                  d	|d          | j                  |d   d	   t                y )
Nrz   r   r;   r#   r$   r"   rF   rM   metadata)	r   r   r   rH   rM   r   r   assertIsInstancedictr2   r   r   r;   r'   s        r   test_get_nb_contentszAPITest.test_get_nb_contents  s    }} 		CGAt D8O4Dt$))+BRZD69RZ.RZ4MM)R(R\62MM*bm4!!"Y-
";TB		Cr4   c                 r   | j                   D ]  \  }}t        ||dz         }| j                  j                  |d      j	                         }| j                  |d   | d       | j                  |d   |       | j                  |d   d       | j                  d|       | j                  |d   d         y )	Nrz   Fr   r   r;   r#   r$   r"   )r   r   r   rH   rM   r   r   r   s        r   test_get_nb_no_contentzAPITest.test_get_nb_no_content$  s    }} 	2GAt D8O4DtU388:BRZD69RZ.RZ4MM)R(R	]D1	2r4   c                    di di dgd}d}| j                  |t        j                  t        j                  |                   | j
                  j                  |      j                         }| j                  |d   |       | j                  |d   d       | j                  d	|       | j                  d
|       | j                  d|d
   j                                y )Nr   wrong)	cell_typer   )nbformatr   cellsu   å b/Validate tést.ipynbr;   r#   r$   r"   messagezvalidation failed)
r   r   cast_unicoderM   rN   r   rH   r   r   lower)r2   r'   r;   r   s       r   test_get_nb_invalidzAPITest.test_get_nb_invalid.  s    $ 
 +dI224::b>BCd#((*v-v
3i'i')5+;+A+A+CDr4   c                 z    t        d      5  | j                  j                  d       d d d        y # 1 sw Y   y xY w)Nr   zfoo/q.ipynbr   r   rH   r   s    r   test_get_contents_no_such_filez&APITest.test_get_contents_no_such_file@  s/    s# 	)HHMM-(	) 	) 	)r   c                    t         j                  dk(  r| j                  d       | j                  dd       | j                  dd       t	        d      5  | j
                  j                  d      }d d d        t	        d      5  | j
                  j                  d      }d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)Nwin32(Disabled copying hidden files on Windowsz.hidden/visible.txttest string.hidden.txtr   )sysplatformskipTestr   r   r   rH   r2   resps     r   test_get_404_hiddenzAPITest.test_get_404_hiddenE  s    <<7"MMDE+];m]3s# 	888==!67D	8s# 	088==/D	0 	0	8 	8	0 	0s   B(B4(B14B=c                    | j                   D ]  \  }}t        ||dz         }| j                  j                  |      j	                         }| j                  |d   | d       | j                  |d   |       | j                  d|       | j                  |d   d       | j                  |d   d       | j                  |d   | j                  |              t        d	      5  | j                  j                  d
       d d d        t        d      5  | j                  j                  ddd       d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)Nr   r   r;   r"   rF   textr#   filer   	foo/q.txt  zfoo/bar/baz.blob)r#   rF   )	r   r   r   rH   rM   r   r   r   r   r2   r   r   r;   r   s        r   test_get_text_file_contentsz#APITest.test_get_text_file_contentsO  s9   }} 	IGAt D6M2DHHMM$',,.EU6]tfDM:U6]D1MM)U+U8_f5U6]F3U9-t/A/A$/GH	I s# 	'HHMM+&	' s# 	JHHMM,6&MI	J 	J		' 	'	J 	Js   %D<E<EEc                 \   | j                   D ]  \  }}t        ||dz         }| j                  j                  |      j	                         }| j                  |d   | d       | j                  |d   |       | j                  d|       | j                  |d   d       | j                  |d   d       | j                  t        |d   j                  d	            | j                  |              t        d
      5  | j                  j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   r;   r"   rF   base64r#   r  asciir   r  )r   r   r   rH   rM   r   r   r   r   r   r   r  s        r   test_get_binary_file_contentsz%APITest.test_get_binary_file_contentsb  s   }} 	GAt D7N3DHHMM$',,.EU6]tfEN;U6]D1MM)U+U8_h7U6]F3E),33G<=##D)	 s# 	'HHMM+&	' 	' 	's   =D""D+c                     t        d      5  | j                  j                  dd       d d d        t        d      5  | j                  j                  dd       d d d        y # 1 sw Y   ;xY w# 1 sw Y   y xY w)Nr  r   r  r#   r   r+   r  r   s    r   test_get_bad_typezAPITest.test_get_bad_typet  sq    s# 	3HHMM*6M2	3 s# 	IHHMM5KMH	I 	I	3 	3	I 	Is   A$A0$A-0A9c           
         | j                  |j                  d       t        j                  |j                  d         }| j                  |t        | j                  dt        |                   |j                         }| j                  |d   |j                  dd      d          | j                  |d   |       | j                  |d	   |       |d
k(  r| j                  n| j                  } ||      sJ y )N   Locationr6   r   ry   r   r;   r#   r+   )r   status_coder   str_to_unicodeheadersr   
url_prefixr   rM   rsplitr   r   )r2   r  r;   r#   location_headerrjsonisrights          r   _check_createdzAPITest._check_created{  s    ))3/#224<<
3KL-YcdhYi*jk		vC(;B(?@v-v- $ 3$**t}}r4   c                    | j                   j                  d      }| j                  |d       | j                   j                  d      }| j                  |d       | j                   j                  d      }| j                  |d       y )Nr   r;   u   å b/Untitled.ipynbu   å b/Untitled1.ipynbr   zfoo/bar/Untitled.ipynb)r   rO   r+  r  s     r   test_create_untitledzAPITest.test_create_untitled  s~    xx''V'4D"78 xx''V'4D"89 xx''Y'7D":;r4   c                 <   | j                   j                  dd      }| j                  |dd       | j                   j                  d      }|j	                         }| j                  |d   d       | j                  |d	   d
       | j                  |d   d       y )Nr   r   )r;   rJ   zfoo/bar/untitled.txtr  r  r-  r#   rF   r  r"   r   )r   rO   r+  rH   rM   r   )r2   r  r   s      r   test_create_untitled_txtz APITest.test_create_untitled_txt  s    xx''YF'CD"8vFxx}}"8}9		v/x&1y)2.r4   c                     t               }|dd}d}| j                  j                  |t        j                  |            }| j                  ||       y )Nr$   r"   r#      å b/Upload tést.ipynbr<   )r   r   r]   rM   rN   r+  )r2   r'   nbmodelr;   r  s        r   test_uploadzAPITest.test_upload  sG    ^ *5(xxt$**W*=>D$'r4   c                 $   | j                   j                  d      }| j                  |dd       | j                   j                  d      }| j                  |dd       | j                   j                  d      }| j                  |dd       y )	Nr   r-  u   å b/Untitled Folderr+   r  u   å b/Untitled Folder 1r   zfoo/bar/Untitled Folder)r   rR   r+  r  s     r   test_mkdir_untitledzAPITest.test_mkdir_untitled  s    xx&&F&3D"8{K xx&&F&3D":M xx&&I&6D";+Nr4   c                 f    d}| j                   j                  |      }| j                  ||d       y )Nu   å b/New ∂irr+   r  )r   r`   r+  )r2   r;   r  s      r   
test_mkdirzAPITest.test_mkdir  s.    xx~~d#D$[9r4   c                 z    t        d      5  | j                  j                  d      }d d d        y # 1 sw Y   y xY w)Nr  u   å b/.hidden)r   r   r`   r  s     r   test_mkdir_hidden_400zAPITest.test_mkdir_hidden_400  s1    s# 	288>>.1D	2 	2 	2r   c                 L   d}|ddd}d}| j                   j                  |t        j                  |            }| j                   j	                  |      }|j                         }| j                  |d   d       | j                  |d   d       | j                  |d	   |       y )
N   ünicode téxtr  r  r"   rF   r#   u   å b/Upload tést.txtr4  r#   rF   r"   )r   r]   rM   rN   rH   r   r2   r<   r   r;   r  s        r   test_upload_txtzAPITest.test_upload_txt  s    

 'xxt$**U*;< xx}}T"		v/x&1y)40r4   c                     t         j                  dk(  r| j                  d       t        d      5  d}|ddd}d}| j                  j                  |t        j                  |      	      }d d d        t        d      5  d}|ddd
d}d}| j                  j                  |t        j                  |      	      }d d d        t        d      5  d}|ddd}d}| j                  j                  |t        j                  |      	      }d d d        t        d      5  d}|dddd}d}| j                  j                  |t        j                  |      	      }d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   y xY w)Nr  r  r  r>  r  r  r?  u   .hidden/Upload tést.txtr4  .hidden/test.txt)r"   rF   r#   r;   u   Upload tést.txtr
  )r  r  r  r   r   r]   rM   rN   r@  s        r   test_upload_txt_hiddenzAPITest.test_upload_txt_hidden  s   <<7"MMDEs# 	A#D ""E
 .D88??4djj.??@D	A s# 		A#D ""*	E &D88??4djj.??@D		A s# 	A#D ""E
 !D88??4djj.??@D	A s# 		A#D ""%	E &D88??4djj.??@D		A 		A?	A 	A		A 		A	A 	A		A 		As/   ;E ><E,;E8<F E),E58FFc                    d}t        |      j                  d      }|ddd}d}| j                  j                  |t	        j
                  |            }| j                  j                  |      }|j	                         }| j                  |d   d       | j                  |d	   |       | j                  |d
   d       t        |d   j                  d            }| j                  ||       y )Ns   blobr  r  r  r?  u   å b/Upload tést.blobr4  r#   r;   rF   r"   )
r   decoder   r]   rM   rN   rH   r   r   r   )r2   r<   b64bodyr   r;   r  decodeds          r   test_upload_b64zAPITest.test_upload_b64  s    d#**73 

 (xxt$**U*;< xx}}T"		v/v-x(3eI.55g>?$'r4   c                     t        j                         }t        j                         }|j                  j	                  |       |j
                  j	                  t        j                  d             |dd}d}| j                  j                  |t        j                  |            }| j                  ||       | j                  j                  |      }|j                         }| j                  |d   d   d	       y )
Nzprint("hi"))inputr$   r2  r3  r4  r"   r   r   )r   r   new_worksheet
worksheetsappendr   new_code_cellr   r]   rM   rN   r+  rH   r   )r2   r'   wsr5  r;   r  r7   s          r   test_upload_v2zAPITest.test_upload_v2
  s    __
R 
((}=> *5(xxt$**W*=>D$'xx}}T"yy{i4a8r4   c                     | j                   j                  dd      }| j                  |d       | j                   j                  dd      }| j                  |d       y N   å b/ç d.ipynbr   u   å b/ç d-Copy1.ipynbu   å b/ç d-Copy2.ipynbr   rV   r+  r  s     r   	test_copyzAPITest.test_copy  sN    xx}}.7D"9:xx}}.7D"9:r4   c                     | j                   j                  dd      }| j                  |d       | j                   j                  dd      }| j                  |d       y rS  rU  r  s     r   test_copy_copyzAPITest.test_copy_copy  sN    xx}}.7D"9:xx}}4f=D"9:r4   c                     | j                   j                  dd      }| j                  |d       | j                   j                  dd      }| j                  |d       y )Nfoo/a.ipynbr   u   å b/a.ipynbu   å b/a-Copy1.ipynbrU  r  s     r   test_copy_pathzAPITest.test_copy_path%  sK    xx}}]F3D.1xx}}]F3D"67r4   c                    t         j                  dk(  r| j                  d       | j                  dd       | j                  dd       | j                  dd       t	        d      5  | j
                  j                  dd      }d d d        t	        d      5  | j
                  j                  d	d      }d d d        t	        d      5  | j
                  j                  dd      }d d d        t	        d      5  | j
                  j                  d	d      }d d d        y # 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   RxY w# 1 sw Y   y xY w)
Nr  r  new.txtr	  .hidden/new.txtr
  r  .hidden/old.txtold.txt)r  r  r  r   r   r   rV   r  s     r   test_copy_400_hiddenzAPITest.test_copy_400_hidden,  s   <<7"MMDEi/'7m]3s# 	?88==!2I>D	?s# 	?88==,=>D	?s# 	;88==	:D	;s# 	;88==M:D	; 	;	? 	?	? 	?	; 	;	; 	;s0   &DD(D46E D%(D14D= E	c                 |    t        d      5  | j                  j                  dd      }d d d        y # 1 sw Y   y xY w)Nr  rT  u   å b/cøpy.ipynb)r   r   rb   r  s     r   test_copy_put_400zAPITest.test_copy_put_400;  s;    s# 	L88$$%68JKD	L 	L 	L   2;c                 ,   t         j                  dk(  r| j                  d       t        d      5  | j                  j                  dd      }d d d        t        d      5  | j                  j                  dd      }d d d        t        d      5  | j                  j                  dd      }d d d        t        d      5  | j                  j                  dd      }d d d        y # 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   RxY w# 1 sw Y   y xY w	Nr  r  r  r_  r]  r`  r^  r
  )r  r  r  r   r   rb   r  s     r   test_copy_put_400_hiddenz APITest.test_copy_put_400_hidden?  s    <<7"MMDEs# 	C88$$%6	BD	Cs# 	C88$$Y0ABD	Cs# 	?88$$]I>D	?s# 	?88$$Y>D	? 	?	C 	C	C 	C	? 	?	? 	?/   C& C2C> D
&C/2C;>D
Dc                 |    t        d      5  | j                  j                  dd      }d d d        y # 1 sw Y   y xY w)Nr  r   r   )r   r   rV   r  s     r   test_copy_dir_400zAPITest.test_copy_dir_400K  s3    s# 	088==/D	0 	0 	0rd  zskip send2trash testsc                    | j                   D ]Y  \  }}t        |d|       | j                  j                  t	        ||dz               }| j                  |j                  d       [ | j                  dgz   D ]g  }t        | j                  j                  |      j                               }t        d       t        |       t        |       | j                  |g        i y )Nz, rz      ry   z------)r   r   r   rg   r   r   r#  r   r(   rC   rM   )r2   r   r   r  r   s        r   test_deletezAPITest.test_deleteP  s    }} 	4GAtQED8$%88??=D8O#DEDT--s3	4
 cU" 	&A q!1!6!6!89C(O!H#JS"%	&r4   c                 l   t        | j                  dgz   t        d      D ]S  }| j                  j	                  |      j                         d   }|D ]   }| j                  j                  |d          " U | j                  j	                  d      j                         d   }| j                  |g        y )Nry   T)keyreverser"   r;   )sortedr   r   r   rC   rM   rg   r   )r2   r   listingr   s       r   test_delete_dirszAPITest.test_delete_dirs^  s     499u,#tD 	/DhhmmD)..0;G  /f./	/ ((--$))+I6"%r4   c                    t         j                  dk(  r| j                  d       	 | j                  j	                  d       t        d      5  | j                  j                  d       d d d        y # t
        j                  $ rA}|j                  j                  dk(  r"| j                  d      s| j                  d        d }~ww xY w# 1 sw Y   y xY w)Nr  z+Disabled deleting non-empty dirs on Windowsr   r  zDir can't be sent to trashr   )r  r  r  r   rg   requests	HTTPErrorr=   r#  r   r   rC   r2   r   s     r   test_delete_non_empty_dirz!APITest.test_delete_non_empty_dirh  s    <<7"MMGH	HHOOF# s# 	"HHMM&!	" 	" !! 	zz%%,**62MM">?			" 	"s#   A1 C1C<C  CCc                 6   t         j                  dk(  r| j                  d       t        d      5  	 | j                  j                  d       	 d d d        y # t        j                  $ r"}|j                  j                  dk(  sJ |d }~ww xY w# 1 sw Y   y xY w)Nr  (Disabled deleting hidden dirs on Windowsr  r   )
r  r  r  r   r   rg   ru  rv  r=   r#  rw  s     r   test_delete_hidden_dirzAPITest.test_delete_hidden_dirx  s    <<7"MMDEs# 		*	 	 %% zz--444		 	s(   BAB*BBBBc                 8   t         j                  dk(  r| j                  d       t        d      5  | j                  j                  d       d d d        t        d      5  | j                  j                  d       d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)Nr  rz  r  rC  r
  )r  r  r  r   r   rg   r   s    r   test_delete_hidden_filezAPITest.test_delete_hidden_file  s}    <<7"MMDEs# 	0HHOO./	0
 s# 	+HHOOM*	+ 	+	0 	0
	+ 	+s   BBBBc                 *   | j                   j                  dd      }| j                  |j                  d   j	                  d      d   d       | j                  |j                         d   d       | j                  |j                         d   d       | j                  d      sJ t        | j                   j                  d	      j                               }|D ch c]  }|d   	 }}| j                  d|       | j                  d
|       y c c}w )NrZ  foo/z.ipynbr!  ry   r"  zz.ipynbr   r;   r   r   )r   rk   r   r%  splitrM   r   r(   rC   r   assertNotIn)r2   r  r   r   r   s        r   test_renamezAPITest.test_rename  s    xx}m<j177<R@)LV,i8V,m<{{=)))TXX]]516689&)*1V9**i)G, +s   Dc                 ,   t         j                  dk(  r| j                  d       t        d      5  | j                  j                  dd      }d d d        t        d      5  | j                  j                  dd      }d d d        t        d      5  | j                  j                  dd      }d d d        t        d      5  | j                  j                  dd      }d d d        y # 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   RxY w# 1 sw Y   y xY wrf  )r  r  r  r   r   rk   r  s     r   test_rename_400_hiddenzAPITest.test_rename_400_hidden  s    <<7"MMDE s# 	A88??#4i@D	As# 	A88??9.?@D	As# 	=88??=)<D	=s# 	=88??9m<D	= 	=	A 	A	A 	A	= 	=	= 	=rh  c                 n   | j                   j                  d      }| j                   j                  d      }|j                         }t        j                  |j
                        d   }t        |      }t        d      }|j                  j                  |       |dd}| j                   j                  dt        j                  |             | j                   j                  dd       | j                  | j                   j                  d      j                         g        | j                   j                  d      j                         }| j                  ||g       | j                   j                  d       | j                   j                  d      j                         }| j                  |g        y )NrZ  r"   Created by testr$   r2  r4  r  )r   rH   rr   rM   loadsr  r   r   r   rN  rd   rN   rk   r   ro   rg   )	r2   origrcp1	nbcontentr'   hcellr5  cpss	            r   test_checkpoints_follow_filez$APITest.test_checkpoints_follow_file  sJ    xx}}]+ HH##M2ffh JJtyy))4	y!!"34
 *5m$**W*=> 	}5 	11-@EEGL hh&&}5::<se$ 	&hh&&}5::<b!r4   c                 |    t        d      5  | j                  j                  dd       d d d        y # 1 sw Y   y xY w)Ni  rZ  zfoo/b.ipynb)r   r   rk   r   s    r   test_rename_existingzAPITest.test_rename_existing  s1    s# 	:HHOOM=9	: 	: 	:rd  c                    | j                   j                  d      }t        j                  |j                        d   }t        |      }|j                  j                  t        d             |dd}| j                   j                  dt        j                  |            }| j                   j                  d      j                         d   }t        |      }| j                  |j                  d   j                  d       y )NrZ  r"   u   Created by test ³r$   r2  r4  r   )r   rH   rM   r  r  r   r   rN  r   rd   rN   r   source)r2   r  r  r'   r5  newnbs         r   	test_savezAPITest.test_save  s    xx}}]+JJtyy))4	y!
)*>?@ *5xx}}]G1D}EHHMM-0557	B	)$Q..-	/r4   c                    | j                   j                  d      }| j                   j                  d      }| j                  |j                  d       |j                         }| j                  t        |      ddh       | j                  |j                  d   j                  d      d   |d          t        j                  |j                        d   }t        |      }t        d	      }|j                  j                  |       |d
d}| j                   j                  dt        j                   |            }| j                   j#                  d      j                         }| j                  ||g       | j                   j                  d      j                         d   }t        |      }| j                  |j                  d   j$                  d	       | j                   j'                  d|d         }| j                  |j                  d       | j                   j                  d      j                         d   }t        |      }| j                  |j                  g        | j                   j)                  d|d         }| j                  |j                  d       | j                   j#                  d      j                         }| j                  |g        y )NrZ  r   idlast_modifiedr!  ry   r"  r"   r  r$   r2  r4  r   rl  )r   rH   rr   r   r#  rM   r   r%  r  r  r  r   r   r   rN  rd   rN   ro   r  rv   rx   )	r2   r  r  r  r  r'   r  r5  r  s	            r   test_checkpointszAPITest.test_checkpoints  s9   xx}}]+HH##M2,ffhSD/#:;:.44S9"=s4yI JJtyy))4	y!!"34
4xx}}]G1D}E hh&&}5::<se$HHMM-0557	B	y!!++->? HH''s4yA,HHMM-0557	B	y!2& HH&&}c$i@,hh&&}5::<b!r4   c                    d}| j                   j                  |      }t        j                  |j                        d   }| j                   j                  |      }| j                  |j                  d       |j                         }| j                  t        |      ddh       | j                  |j                  d   j                  d      d   |d          |d	z   }|d
dd}| j                   j                  |t        j                  |            }| j                   j                  |      j                         }| j                  ||g       | j                   j                  |      j                         d   }	| j                  |	|       | j                   j                  ||d         }| j                  |j                  d       | j                   j                  |      j                         d   }
| j                  |
|       | j                   j                  ||d         }| j                  |j                  d       | j                   j                  |      j                         }| j                  |g        y)z;
        Test checkpointing of non-notebook files.
        z	foo/a.txtr"   r   r  r  r!  ry   r"  z
second liner  r  )r"   r#   rF   r4  rl  N)r   rH   rM   r  r  rr   r   r#  r   r%  r  rd   rN   ro   rv   rx   )r2   filenamer  orig_contentr  r  new_contentr   r  r"   restored_contents              r   test_file_checkpointszAPITest.test_file_checkpoints  s
    xx}}X&zz$)),Y7 HH##H-,ffhSD/#:;:.44S9"=s4yI #_4"

 xx}}XDJJu,=}> hh&&x0557se$((--)..0;+. HH''#d)<,88==2779)D)<8 HH&&xT;,hh&&x0557b!r4   c              #      K   | j                   j                  j                  }|j                  }||_        	 d ||_        y# ||_        w xY ww)zK
        Temporarily patch the root dir of our checkpoint manager.
        N)r$   contents_managerrm   root_dir)r2   dirnamecpmold_dirnames       r   patch_cp_rootzAPITest.patch_cp_root.  sC     
 mm,,88ll	'&CL;CLs   4AA A	AAc                 X   t               5 }| j                  |      5  | j                          ddd       ddd       t               5 }| j                  |      5  | j                          ddd       ddd       y# 1 sw Y   OxY w# 1 sw Y   SxY w# 1 sw Y   *xY w# 1 sw Y   yxY w)aR  
        Test that FileCheckpoints functions correctly even when it's
        using a different root dir from FileContentsManager.  This also keeps
        the implementation honest for use with ContentsManagers that don't map
        models to the filesystem

        Override this method to a no-op when testing other managers.
        N)r   r  r  r  )r2   tds     r   test_checkpoints_separate_rootz&APITest.test_checkpoints_separate_root;  s      ! 	(R##B' (%%'(	(  ! 	-R##B' -**,-	- 	-( (	( 	(
- -	- 	-sE   BA<BB B+B <B	BBB	B  B))r$   )Kr{   r|   r}   r~   r   r   r    r   r   r   r   r  r   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r+  r.  r0  r6  r8  r:  r<  rA  rD  rI  rQ  rV  rX  r[  ra  rc  rg  rj  pytestmarkskiprm  rs  rx  r{  r}  r  r  r  r  r  r  r  r   r  r  ).0r   r   r   r   s   00000r   r   r   |   sF   *H m,K x|LLeq	..q1LMDAEFFAiqwws|A7FN. . # #<<$3
1
98%2,>9
5)
C2E$)
0J&'$I	
</(
O:
21"+AZ((9;;8;L
?0
 [[-.& /& [[-.& /& [[-." /"	
+
-= [[-." /"@:/$"L)"V 
' 
'-[ MFs   F(
%F0r   c                   F    e Zd ZdZ e       Zeej                  _        d Z	y)GenericFileCheckpointsAPITestzA
    Run the tests from APITest with GenericFileCheckpoints.
    c                 l    | j                  | j                  j                  j                  t               y r0   )r   r$   r  rm   r	   r   s    r   test_config_did_somethingz7GenericFileCheckpointsAPITest.test_config_did_somethingT  s&    MM**66"	
r4   N)
r{   r|   r}   r~   r
   configr	   FileContentsManagercheckpoints_classr  r%   r4   r   r  r  M  s#     XF3IF0
r4   r  )2r~   
contextlibr   	functoolsr   rM   r   r   r  unicodedatar   r;   joinpjoinr  ru  r   send2trash.exceptionsr   filecheckpointsr	   traitlets.configr
   notebook.utilsr   r   r   notebook.tests.launchnotebookr   r   r   r   r   nbformat.v4r   r   r   ipython_genutilsr   ipython_genutils.tempdirr   r  r   r   r    r(   r,   r.   r   r  r%   r4   r   <module>r     s    ' %   	  
 !
   ! 6 4 # @ @ M %  & 7 +CIGHV HVTN- N-b
G 
r4   