
i^c           @   sG  d  Z  d d l Z d d l Z d d l 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 d l m Z d d l m Z d d l m Z m Z m Z d	 e f d
     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e j f d     YZ d e f d     YZ d   Z d e f d     YZ d e  f d     YZ! d e! f d     YZ" d e" f d     YZ# d e" f d     YZ$ d  e! f d!     YZ% e j& d"  Z' e j& d#  Z( d$ e% f d%     YZ) d& e% f d'     YZ* d( e* f d)     YZ+ d*   Z, d S(+   s   A simple configuration system.iN(   t   literal_eval(   t   filefind(   t	   py3compat(   t   DEFAULT_ENCODING(   t	   text_type(   t	   HasTraitst   Listt   Anyt   ConfigErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR      s   t   ConfigLoaderErrorc           B   s   e  Z RS(    (   R	   R
   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR      s   t   ConfigFileNotFoundc           B   s   e  Z RS(    (   R	   R
   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR   !   s   t   ArgumentErrorc           B   s   e  Z RS(    (   R	   R
   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR   $   s   t   ArgumentParserc           B   s,   e  Z d  Z d d  Z e j j j e _ RS(   s?   Simple argparse subclass that prints help to stdout by default.c         C   s.   | d  k r t j } n  t t |   j |  S(   N(   t   Nonet   syst   stdoutt   superR   t
   print_help(   t   selft   file(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR   4   s    N(   R	   R
   t   __doc__R   R   t   argparseR   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR   1   s   t   LazyConfigValuec           B   s   e  Z d  Z d	 Z e   Z e   Z d   Z d   Z	 d   Z
 e   Z d   Z e   Z d   Z d   Z d   Z d   Z RS(
   s   Proxy object for exposing methods on configurable containers
    
    Exposes:
    
    - append, extend, insert on lists
    - update on dicts
    - update, add on sets
    c         C   s   |  j  j |  d  S(   N(   t   _extendt   append(   R   t   obj(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR   O   s    c         C   s   |  j  j |  d  S(   N(   R   t   extend(   R   t   other(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR   R   s    c         C   s   | |  j  d *d S(   s#   like list.extend, but for the fronti    N(   t   _prepend(   R   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   prependU   s    c         C   s8   t  | t  s t d   n  |  j j | | f  d  S(   Ns   An integer is required(   t
   isinstancet   intt	   TypeErrort   _insertsR   (   R   t   indexR   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   insertZ   s    c         C   sM   |  j  d  k r9 t | t  r* i  |  _  q9 t   |  _  n  |  j  j |  d  S(   N(   t   _updateR   R    t   dictt   sett   update(   R   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR)   b   s
    c         C   s   |  j  | h  d  S(   N(   R)   (   R   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   addk   s    c         C   s   |  j  d k	 r |  j  St j |  } t | t  r~ x' |  j D] \ } } | j | |  q> W|  j | d *| j	 |  j
  n\ t | t  r |  j r | j |  j  q n. t | t  r |  j r | j |  j  q n  | |  _  | S(   sv   construct the value from the initial one
        
        after applying any insert / extend / update changes
        i    N(   t   _valueR   t   copyt   deepcopyR    t   listR#   R%   R   R   R   R'   R&   R)   R(   (   R   t   initialt   valuet   idxR   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt	   get_valuen   s     			c         C   sn   i  } |  j  r |  j  | d <n  |  j r8 |  j | d <n  |  j rQ |  j | d <n |  j rj |  j | d <n  | S(   s   return JSONable dict form of my data
        
        Currently update as dict or set, extend, prepend as lists, and inserts as list of tuples.
        R)   R   R   t   inserts(   R&   R   R   R#   (   R   t   d(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   to_dict   s    				N(   R	   R
   R   R   R+   R   R   R   R   R   R   R#   R%   R   R&   R)   R*   R2   R5   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR   ?   s   												c         C   s<   |  r4 |  d j    |  d k r4 |  j d  r4 t St Sd S(   s>   Is a Config key a section name (does it start with a capital)?i    t   _N(   t   uppert
   startswitht   Truet   False(   t   key(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   _is_section_key   s    0t   Configc           B   s   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z e Z	 d   Z
 d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z RS(   s1   An attribute based dict that can do smart merges.c         O   s!   t  j |  | |  |  j   d  S(   N(   R'   t   __init__t   _ensure_subconfig(   R   t   argst   kwds(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR>      s    c         C   sc   x\ |  D]T } |  | } t  |  r t | t  r t | t  r t |  | t |   q q Wd S(   s   ensure that sub-dicts that should be Config objects are
        
        casts dicts that are under section keys to Config objects,
        which is necessary for constructing Config objects from dict literals.
        N(   R<   R    R'   R=   t   setattr(   R   R;   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR?      s    
c         C   s   |  j  |  d S(   s$   deprecated alias, use Config.merge()N(   t   merge(   R   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   _merge   s    c         C   s   i  } xs | j    D]e \ } } | |  k r8 | | | <q t | t  rn t |  | t  rn |  | j |  q | | | <q W|  j |  d S(   s)   merge another config object into this oneN(   t   itemsR    R=   RC   R)   (   R   R   t	   to_updatet   kt   v(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRC      s    "c         C   s   i  } x |  D] } | | k r% q n  |  | } | | } xa | D]Y } | | k r@ | | | | k r@ | j  | i   d | | | | f | | | <q@ q@ Wq W| S(   s   Check for collisions between two config objects.
        
        Returns a dict of the form {"Class": {"trait": "collision message"}}`,
        indicating which values have been ignored.
        
        An empty dict indicates no collisions.
        s   %r ignored, using %r(   t
   setdefault(   R   R   t
   collisionst   sectiont   minet   theirsR;   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRJ      s    

 +c         C   sX   d | k rB | j  d d  \ } } | |  k r4 t S| |  | k St t |   j |  S(   Nt   .i   (   t   splitR:   R   R=   t   __contains__(   R   R;   t   firstt	   remainder(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRP      s    c         C   s   t  |  o | |  k S(   N(   R<   (   R   R;   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   _has_section   s    c         C   s   t  |   t j |    S(   N(   t   typeR'   R,   (   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR,      s    c         C   s
   |  j    S(   N(   R,   (   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   __copy__   s    c         C   s   t  |     } x~ |  j   D]p \ } } t | t t f  rR t j | |  } n0 t  |  t t t	 t
 h k r t j |  } n  | | | <q W| S(   N(   RT   RE   R    R=   R   R,   R-   R'   R.   R(   t   tuple(   R   t   memot
   new_configR;   R0   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   __deepcopy__   s    c         C   s   y t  j |  |  SWnr t k
 r t |  rP t   } t  j |  | |  | S| j d  s t   } t  j |  | |  | St  n Xd  S(   NR6   (   R'   t   __getitem__t   KeyErrorR<   R=   t   __setitem__R8   R   (   R   R;   t   cRH   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRZ      s    		c         C   sN   t  |  r7 t | t  s7 t d | | f   q7 n  t j |  | |  d  S(   NsO   values whose keys begin with an uppercase char must be Config instances: %r, %r(   R<   R    R=   t
   ValueErrorR'   R\   (   R   R;   R0   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR\     s
    c         C   sV   | j  d  r t j |  |  Sy |  j |  SWn t k
 rQ } t |   n Xd  S(   Nt   __(   R8   R'   t   __getattr__RZ   R[   t   AttributeError(   R   R;   t   e(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR`     s    c         C   s\   | j  d  r" t j |  | |  Sy |  j | |  Wn t k
 rW } t |   n Xd  S(   NR_   (   R8   R'   t   __setattr__R\   R[   Ra   (   R   R;   R0   Rb   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRc     s    c         C   sY   | j  d  r t j |  |  Sy t j |  |  Wn t k
 rT } t |   n Xd  S(   NR_   (   R8   R'   t   __delattr__t   __delitem__R[   Ra   (   R   R;   Rb   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRd   #  s    (   R	   R
   R   R>   R?   RD   RC   RJ   RP   t   has_keyRS   R,   RU   RY   RZ   R\   R`   Rc   Rd   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR=      s"   														t   ConfigLoaderc           B   s5   e  Z d  Z d   Z d d  Z d   Z d   Z RS(   s1  A object for loading configurations from just about anywhere.

    The resulting configuration is packaged as a :class:`Config`.

    Notes
    -----
    A :class:`ConfigLoader` does one thing: load a config from a source
    (file, command line arguments) and returns the data as a :class:`Config` object.
    There are lots of things that :class:`ConfigLoader` does not do.  It does
    not implement complex logic for finding config files.  It does not handle
    default values or merge multiple configs.  These things need to be
    handled elsewhere.
    c         C   s   d d l  m } |   S(   Ni(   t
   get_logger(   t   traitlets.logRh   (   R   Rh   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   _log_default@  s    c         C   sE   |  j    | d k r8 |  j   |  _ |  j j d  n	 | |  _ d S(   se  A base class for config loaders.

        log : instance of :class:`logging.Logger` to use.
              By default loger of :meth:`traitlets.config.application.Application.instance()`
              will be used

        Examples
        --------

        >>> cl = ConfigLoader()
        >>> config = cl.load_config()
        >>> config
        {}
        s   Using default loggerN(   t   clearR   Rj   t   logt   debug(   R   Rl   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR>   D  s
    
c         C   s   t    |  _ d  S(   N(   R=   t   config(   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRk   Z  s    c         C   s   |  j    |  j S(   s  Load a config from somewhere, return a :class:`Config` instance.

        Usually, this will cause self.config to be set and then returned.
        However, in most cases, :meth:`ConfigLoader.clear` should be called
        to erase any previous state.
        (   Rk   Rn   (   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   load_config]  s    
N(   R	   R
   R   Rj   R   R>   Rk   Ro   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRg   1  s
   		t   FileConfigLoaderc           B   s#   e  Z d  Z d d  Z d   Z RS(   s   A base class for file based configurations.

    As we add more file based config loaders, the common logic should go
    here.
    c         K   s5   t  t |   j |   | |  _ | |  _ d |  _ d S(   s.  Build a config loader for a filename and path.

        Parameters
        ----------
        filename : str
            The file name of the config file.
        path : str, list, tuple
            The path to search for the config file on, or a sequence of
            paths to try in order.
        t    N(   R   Rp   R>   t   filenamet   patht   full_filename(   R   Rr   Rs   t   kw(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR>   o  s    		c         C   s   t  |  j |  j  |  _ d S(   s,   Try to find the file by searching the paths.N(   R   Rr   Rs   Rt   (   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt
   _find_file  s    N(   R	   R
   R   R   R>   Rv   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRp   h  s   t   JSONFileConfigLoaderc           B   s;   e  Z d  Z d   Z d   Z d   Z d   Z d   Z RS(   s  A JSON file loader for config

    Can also act as a context manager that rewrite the configuration file to disk on exit.

    Example::

        with JSONFileConfigLoader('myapp.json','/home/jupyter/configurations/') as c:
            c.MyNewConfigurable.new_value = 'Updated'

    c         C   se   |  j    y |  j   Wn% t k
 r? } t t |    n X|  j   } |  j |  |  _ |  j S(   s=   Load the config from a file and return it as a Config object.(   Rk   Rv   t   IOErrorR   t   strt   _read_file_as_dictt   _convert_to_configRn   (   R   Rb   t   dct(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRo     s    
c         C   s)   t  |  j   } t j |  SWd  QXd  S(   N(   t   openRt   t   jsont   load(   R   t   f(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRz     s    c         C   sV   d | k r | j  d  } n d } | d k r: t |  St d j d |    d  S(   Nt   versioni   s.   Unknown version of JSON config file: {version}(   t   popR=   R^   t   format(   R   t
   dictionaryR   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR{     s    
c         C   s   |  j    |  j S(   N(   Ro   Rn   (   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt	   __enter__  s    
c         C   sP   d |  j  _ t j |  j  d d } t |  j d   } | j |  Wd QXd S(   s   
        Exit the context manager but do not handle any errors.

        In case of any error, we do not want to write the potentially broken
        configuration to disk.
        i   t   indenti   t   wN(   Rn   R   R~   t   dumpsR}   Rt   t   write(   R   t   exc_typet	   exc_valuet	   tracebackt   json_configR   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   __exit__  s    (   R	   R
   R   Ro   Rz   R{   R   R   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRw     s   
				t   PyFileConfigLoaderc           B   s,   e  Z d  Z d   Z d d  Z d   Z RS(   s   A config loader for pure python files.

    This is responsible for locating a Python config file by filename and
    path, then executing it to construct a Config object.
    c         C   sQ   |  j    y |  j   Wn% t k
 r? } t t |    n X|  j   |  j S(   s=   Load the config from a file and return it as a Config object.(   Rk   Rv   Rx   R   Ry   Rz   Rn   (   R   Rb   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRo     s    

c         C   sb   | d k r |  j } n  |  j | |  } y | j   } Wn t k
 rM n X|  j j |  d S(   s5   Injected into config file namespace as load_subconfigN(   R   Rs   t	   __class__Ro   R   Rn   RC   (   R   t   fnameRs   t   loadert
   sub_config(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   load_subconfig  s    c      	      sq     f d   } t  d   j d   j d | d   j  } t j   pH d }   j j |  } t j | |  d S(   s>   Load the config file into self.config, with recursive loading.c              s     j  S(   sK   Unnecessary now, but a deprecation warning is more trouble than it's worth.(   Rn   (    (   R   (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt
   get_config  s    R]   R   R   t   __file__t   asciiN(	   R'   Rn   R   Rt   R   t   getfilesystemencodingt   encodeR   t   execfile(   R   R   t	   namespacet   fs_encodingt   conf_filename(    (   R   s6   lib/python2.7/site-packages/traitlets/config/loader.pyRz     s    		N(   R	   R
   R   Ro   R   R   Rz   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR     s   	
t   CommandLineConfigLoaderc           B   s    e  Z d  Z d   Z d   Z RS(   s   A config loader for command line arguments.

    As we add more command line based loaders, the common logic should go
    here.
    c         B   sU   e  j j |  } y e |  } Wn  e e e f k
 rD | } n Xd | d Ud S(   s0  execute self.config.<lhs> = <rhs>
        
        * expands ~ with expanduser
        * tries to assign with literal_eval, otherwise assigns with just the string,
          allowing `--C.a=foobar` and `--C.a="foobar"` to be equivalent.  *Not*
          equivalent are `--C.a=4` and `--C.a='4'`.
        u   self.config.%s = valueN(   t   osRs   t
   expanduserR    t	   NameErrort   SyntaxErrorR^   (   R   t   lhst   rhsR0   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   _exec_config_str  s    
c         C   s]   t  | t t f  rI xA | j   D]  \ } } |  j | j |  q" Wn t d |   d S(   s=   update self.config from a flag, which can be a dict or Configs   Invalid flag: %rN(   R    R'   R=   RE   Rn   R)   R"   (   R   t   cfgt   secR]   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt
   _load_flag  s    (   R	   R
   R   R   R   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR     s   	s#   \-\-[A-Za-z][\w\-]*(\.[\w\-]+)*\=.*s   \-\-?\w+[\-\w]*$t   KeyValueConfigLoaderc           B   sG   e  Z d  Z d d d d  Z d   Z d d  Z d d d d  Z RS(   s   A config loader that loads key value pairs from the command line.

    This allows command line options to be gives in the following form::

        ipython --profile="foo" --InteractiveShell.autocall=False
    c         K   s]   t  t |   j |   | d k r2 t j d } n  | |  _ | pD i  |  _ | pS i  |  _ d S(   s  Create a key value pair config loader.

        Parameters
        ----------
        argv : list
            A list that has the form of sys.argv[1:] which has unicode
            elements of the form u"key=value". If this is None (default),
            then sys.argv[1:] will be used.
        aliases : dict
            A dict of aliases for configurable traits.
            Keys are the short aliases, Values are the resolved trait.
            Of the form: `{'alias' : 'Configurable.trait'}`
        flags : dict
            A dict of flags, keyed by str name. Vaues can be Config objects,
            dicts, or "key=value" strings.  If Config or dict, when the flag
            is triggered, The flag is loaded as `self.config.update(m)`.

        Returns
        -------
        config : Config
            The resulting Config object.

        Examples
        --------

            >>> from traitlets.config.loader import KeyValueConfigLoader
            >>> cl = KeyValueConfigLoader()
            >>> d = cl.load_config(["--A.name='brian'","--B.number=0"])
            >>> sorted(d.items())
            [('A', {'name': 'brian'}), ('B', {'number': 0})]
        i   N(   R   R   R>   R   R   t   argvt   aliasest   flags(   R   R   R   R   Ru   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR>   +  s     	c         C   s    t  t |   j   g  |  _ d  S(   N(   R   R   Rk   t
   extra_args(   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRk   S  s    c         C   s^   g  } | d k r t } n  x< | D]4 } t | t  sI | j |  } n  | j |  q" W| S(   sG   decode argv if bytes, using stdin.encoding, falling back on default encN(   R   R   R    R   t   decodeR   (   R   R   t   enct   uargvt   arg(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   _decode_argvX  s    	c         C   s  |  j    | d
 k r" |  j } n  | d
 k r: |  j } n  | d
 k rR |  j } n  |  j |  } xt |  D]\ } } | j d  } | d k r |  j j	 | | d  Pn  t
 j |  rN| j d d  \ } }	 | | k r | | } n  d | k r|  j j d |  n  y |  j | |	  Wq t k
 rJt d |   q Xqn t j |  r| | k r| | \ }
 } |  j |
  q t d |   qn | j d  rd | } t
 j |  rt d	 | | f   q t d |   qn |  j j |  qn W|  j S(   s  Parse the configuration and generate the Config object.

        After loading, any arguments that are not key-value or
        flags will be stored in self.extra_args - a list of
        unparsed command-line arguments.  This is used for
        arguments such as input files or subcommands.

        Parameters
        ----------
        argv : list, optional
            A list that has the form of sys.argv[1:] which has unicode
            elements of the form u"key=value". If this is None (default),
            then self.argv will be used.
        aliases : dict
            A dict of aliases for configurable traits.
            Keys are the short aliases, Values are the resolved trait.
            Of the form: `{'alias' : 'Configurable.trait'}`
        flags : dict
            A dict of flags, keyed by str name. Values can be Config objects
            or dicts.  When the flag is triggered, The config is loaded as
            `self.config.update(cfg)`.
        t   -s   --i   t   =RN   s:   Unrecognized alias: '%s', it will probably have no effect.s   Invalid argument: '%s's   Unrecognized flag: '%s's*   Invalid argument: '%s', did you mean '%s'?N(   Rk   R   R   R   R   R   t	   enumeratet   lstripR   R   t
   kv_patternt   matchRO   Rl   t   warningR   t	   ExceptionR   t   flag_patternR   R8   R   Rn   (   R   R   R   R   R   R1   t   rawt   itemR   R   R   t   helpt   kv(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRo   e  sF    

N(   R	   R
   R   R   R>   Rk   R   Ro   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR   #  s
   (	t   ArgParseConfigLoaderc           B   sn   e  Z d  Z d d d d d  Z d d d d  Z d   Z d d d  Z d d d  Z d   Z	 d   Z
 RS(	   sE   A loader that uses the argparse module to load from the command line.c         O   s   t  t |   j d |  |  j   | d k r? t j d } n  | |  _ | pQ i  |  _ | p` i  |  _ | |  _	 | j
 d d  |  _ t d t j  } | j |  | |  _ d S(   sz  Create a config loader for use with argparse.

        Parameters
        ----------

        argv : optional, list
          If given, used to read command-line arguments from, otherwise
          sys.argv[1:] is used.

        parser_args : tuple
          A tuple of positional arguments that will be passed to the
          constructor of :class:`argparse.ArgumentParser`.

        parser_kw : dict
          A tuple of keyword arguments that will be passed to the
          constructor of :class:`argparse.ArgumentParser`.

        Returns
        -------
        config : Config
            The resulting Config object.
        Rl   i   R   t   argument_defaultN(   R   R   R>   Rk   R   R   R   R   R   t   parser_argsR   R   R'   R   t   SUPPRESSR)   t	   parser_kw(   R   R   R   R   Rl   R   R   t   kwargs(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR>     s    
		c         C   s   |  j    | d k r" |  j } n  | d k r: |  j } n  | d k rR |  j } n  |  j | |  |  j |  |  j   |  j S(   sC  Parse command line arguments and return as a Config object.

        Parameters
        ----------

        args : optional, list
          If given, a list with the structure of sys.argv[1:] to parse
          arguments from. If not given, the instance's self.argv attribute
          (given at construction time) is used.N(	   Rk   R   R   R   R   t   _create_parsert   _parse_argsR{   Rn   (   R   R   R   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyRo     s    


c         C   s   t  |  d  r |  j Sg  Sd  S(   NR   (   t   hasattrR   (   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   get_extra_args  s    c         C   s,   t  |  j |  j   |  _ |  j | |  d  S(   N(   R   R   R   t   parsert   _add_arguments(   R   R   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR     s    c         C   s   t  d   d  S(   Ns(   subclasses must implement _add_arguments(   t   NotImplementedError(   R   R   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR     s    c         C   sM   t  } g  | D] } t j | |  ^ q } |  j j |  \ |  _ |  _ d S(   s   self.parser->self.parsed_dataN(   R   R   t   cast_unicodeR   t   parse_known_argst   parsed_dataR   (   R   R@   R   t   at   uargs(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR     s    %c         B   s>   x7 e  |  j  j   D]  \ } } d | e   e   Uq Wd S(   s   self.parsed_data->self.configs   self.config.%s = vN(   t   varsR   RE   t   localst   globals(   R   RG   RH   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR{     s    "N(   R	   R
   R   R   R>   Ro   R   R   R   R   R{   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR     s   %		t   KVArgParseConfigLoaderc           B   s&   e  Z d  Z d d d  Z d   Z RS(   s  A config loader that loads aliases and flags with argparse,
    but will use KVLoader for the rest.  This allows better parsing
    of common args, such as `ipython -c 'print 5'`, but still gets
    arbitrary config with `ipython --InteractiveShell.use_readline=False`c      
   C   s  i  |  _  | d  k r! |  j } n  | d  k r9 |  j } n  |  j j } x | j   D] \ } } | | k rs d } n d  } t |  d k r | d | d | d t d | d | qR | d | d t d | d | qR Wx | j   D] \ } \ } } | |  j k r!| |  j  |  j | <q n  t |  d k r]| d | d | d d	 d d
 d | q | d | d d	 d d
 d | q Wd  S(   Nt   ?i   R   s   --RT   t   destt   nargst   actiont   append_constt   _flagst   const(	   t   alias_flagsR   R   R   R   t   add_argumentRE   t   lenR   (   R   R   R   t   paaR;   R0   R   R   (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR     s(    		*$*c         C   s   d |  j  k r' |  j  j } |  j  ` n g  } xV t |  j   j   D]? \ } } | d k rr | j |  j |  qC |  j | |  qC Wx | D] } |  j |  q W|  j	 r t
 d |  j  } | j |  j	  |  j j | j  | j	 |  _	 n  d S(   sJ   self.parsed_data->self.config, parse unrecognized extra args via KVLoader.R   Rl   N(   R   R   R   RE   R   R   R   R   R   R   R   Rl   Ro   Rn   RC   (   R   t   subcsRG   RH   t   subct
   sub_parser(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR{   )  s    "	N(   R	   R
   R   R   R   R{   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyR     s   c         C   sj   t    } xZ |  D]R } t | d | } y | j   } Wn t k
 rK q   q X| j |  q W| S(   s  Load multiple Python config files, merging each of them in turn.

    Parameters
    ==========
    config_files : list of str
        List of config files names to load and merge into the config.
    path : unicode
        The full path to the location of the config files.
    Rs   (   R=   R   Ro   R   RC   (   t   config_filesRs   Rn   t   cfR   t   next_config(    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   load_pyconfig_filesD  s    
	(-   R   R   R,   t   loggingR   t   reR   R~   t   astR    t   ipython_genutils.pathR   t   ipython_genutilsR   t   ipython_genutils.encodingR   t   sixR   t   traitlets.traitletsR   R   R   R   R   R   R   R   R   R   R<   R'   R=   t   objectRg   Rp   Rw   R   R   t   compileR   R   R   R   R   R   (    (    (    s6   lib/python2.7/site-packages/traitlets/config/loader.pyt   <module>   s@   W	781-W=