ó
äÛi^c           @   s‰   d  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 d d l	 m
 Z
 d „  Z d e f d „  ƒ  YZ d S(	   s6   Manager to read and modify config data in JSON files.
iÿÿÿÿN(   t   PY3(   t   LoggingConfigurable(   t   Unicodec         C   sš   x“ | j  ƒ  D]… \ } } t | t ƒ ri | |  k rA i  |  | <n  t |  | | ƒ |  | s’ |  | =q’ q | d k rˆ |  j | d ƒ q | |  | <q Wd S(   s^   Recursively update one dictionary using another.

    None values will delete their keys.
    N(   t   itemst
   isinstancet   dictt   recursive_updatet   Nonet   pop(   t   targett   newt   kt   v(    (    s7   lib/python2.7/site-packages/traitlets/config/manager.pyR      s    
t   BaseJSONConfigManagerc           B   sG   e  Z d  Z e d ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s]   General JSON config manager
    
    Deals with persisting/storing config in a json file
    t   .c         C   sI   y t  j |  j d ƒ Wn+ t k
 rD } | j t j k rE ‚  qE n Xd  S(   Nií  (   t   ost   makedirst
   config_dirt   OSErrort   errnot   EEXIST(   t   selft   e(    (    s7   lib/python2.7/site-packages/traitlets/config/manager.pyt   ensure_config_dir_exists,   s
    c         C   s   t  j j |  j | d ƒ S(   Ns   .json(   R   t   patht   joinR   (   R   t   section_name(    (    s7   lib/python2.7/site-packages/traitlets/config/manager.pyt	   file_name3   s    c         C   sW   |  j  | ƒ } t j j | ƒ rO t j | d d ƒ } t j | ƒ SWd QXn i  Sd S(   s¡   Retrieve the config data for the specified section.

        Returns the data as a dictionary, or an empty dictionary if the file
        doesn't exist.
        t   encodings   utf-8N(   R   R   R   t   isfilet   iot   opent   jsont   load(   R   R   t   filenamet   f(    (    s7   lib/python2.7/site-packages/traitlets/config/manager.pyt   get6   s
    c      	   C   sp   |  j  | ƒ } |  j ƒ  t r: t j | d d d ƒ} n t | d ƒ } |  t j | | d d ƒWd QXd S(   s%   Store the given config data.
        t   wR   s   utf-8t   wbt   indenti   N(   R   R   R    R   R   R    t   dump(   R   R   t   dataR"   R#   (    (    s7   lib/python2.7/site-packages/traitlets/config/manager.pyt   setC   s    
c         C   s0   |  j  | ƒ } t | | ƒ |  j | | ƒ | S(   s‡   Modify the config section by recursively updating it with new_data.

        Returns the modified config data as a dictionary.
        (   R$   R   R*   (   R   R   t   new_dataR)   (    (    s7   lib/python2.7/site-packages/traitlets/config/manager.pyt   updateP   s    (
   t   __name__t
   __module__t   __doc__R   R   R   R   R$   R*   R,   (    (    (    s7   lib/python2.7/site-packages/traitlets/config/manager.pyR   $   s   				(   R/   R   R   R    R   t   sixR    t   traitlets.configR   t   traitlets.traitletsR   R   R   (    (    (    s7   lib/python2.7/site-packages/traitlets/config/manager.pyt   <module>   s   	