ó
_‡Yc           @   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 d l m Z d Z d	 e f d
 „  ƒ  YZ e ƒ  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z e d „ Z d S(   sk   
Start the program.  Load config files, parse rules, print header,
and compile file structure conventions.
iÿÿÿÿNi   (   t
   exceptions(   t	   get_rules(   t   header(   t   parse_ruless   ../enforcer/enforcer.init   ErrorManagerc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sÌ   Report errors and keep track of error existance.

    - Helps in allowing multiple errors to be reported (without traceback).

    - Avoids globals. (Sorta; there is a global error manager instance.)
    c         C   s    t  t |  ƒ j ƒ  t |  _ d  S(   N(   t   superR   t   __init__t   Falset   errored(   t   self(    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyR   2   s    c         C   s/   t  j | ƒ t | t  j ƒ r+ t |  _ n  d S(   s'   Report an exception (without traceback)N(   t   ext   expresst
   isinstancet   Errort   TrueR   (   R	   t	   exception(    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyR   6   s    c         C   s&   |  j  r" t |  _  t j d ƒ n  d S(   s   Exit early if an error occurredi   N(   R   R   t   syst   exit(   R	   (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   exit_if_errored<   s    		(   t   __name__t
   __module__t   __doc__R   R   R   (    (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyR   *   s   		c         C   s1   | |  k r- t  j d j | | ƒ | ƒ ‚ n  d  S(   Ns(   No "{0}" declaration in the config "{1}"(   R
   t   MissingConfigDeclarationErrort   format(   t   cfgt   cfilet   keyt   hint(    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt    check_missing_config_declarationL   s    c         C   sN   y$ t  |  | | | ƒ | j | ƒ Wn# t j k
 rI } t j | ƒ n Xd  S(   N(   R   t   removeR
   R   t   emR   (   R   t   unused_keysR   R   R   t   err(    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   require_configS   s
    c         C   sm   y t  |  ƒ } Wn, t k
 r> t j d j |  | ƒ ƒ ‚ n X| d k  ri t j d j | | ƒ ƒ ‚ n  | S(   Ns7   max_depth ("{0}") is not an integer in the config "{1}"i   s4   max_depth ("{0}") is less than 1 in the config "{1}"(   t   intt
   ValueErrorR
   t   BadMaxDepthErrorR   (   t   strvaluet   config_patht   val(    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   check_bad_max_depth[   s    c         C   s;   y t  |  | ƒ SWn# t j k
 r6 } t j | ƒ n Xd  S(   N(   R(   R
   R$   R   R   (   R%   R&   R    (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   convert_max_depthi   s    c         C   s/   | |  k r+ |  j  | ƒ t j | ƒ ‚ n  d  S(   N(   R   R
   t   UnusedDeclarationWarning(   R   R   (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   warn_extra_declarationp   s    c         C   s;   y t  |  | ƒ Wn# t j k
 r6 } t j | ƒ n Xd  S(   N(   R+   R
   R*   R   R   (   R   R   t   warn(    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   report_extra_declarationv   s    c         C   s   t  j |  ƒ ‚ d  S(   N(   R
   t   UnknownDeclarationError(   R   (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   raise_unknown_declaration}   s    c         C   s8   y t  |  ƒ Wn# t j k
 r3 } t j | ƒ n Xd  S(   N(   R/   R
   R.   R   R   (   R   R    (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   report_unknown_declaration   s    c         C   sX   | t  j k r, t |  d ƒ t |  d ƒ n t |  d ƒ x |  D] } t | ƒ q@ Wd  S(   Nt   google_credentialst   spreadsheet_namet
   rules_path(   R   t   FILE_SOURCER-   R0   (   R   t   rules_sourceR   (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   report_extra_declarationsˆ   s    c         C   s    | |  k r |  j  | ƒ n  d  S(   N(   R   (   R   R   (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   optional_key“   s    c         C   s=   | | k r, t  | | j d ƒ ƒ |  | <n t  ƒ  |  | <d  S(   Ns   
(   t   sett   split(   t   config_dictt   enforcer_sectR   (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   optional_config_set˜   s    c         C   sÜ  i  } t  | j ƒ  ƒ } t | | |  d ƒ t | | |  d ƒ t | | |  d ƒ t j ƒ  | d } | t j k r» t | | |  d d j t j ƒ ƒ t | | |  d d j t j ƒ ƒ na | t j k rï t | | |  d d	 j t j ƒ ƒ n- t	 j
 d
 j t j t j ƒ d j | ƒ ƒ ‚ t | d ƒ t | d ƒ t | | ƒ t j ƒ  | | d <| t j k r…| d | d <| d | d <n | d | d <| d | d <t | d |  ƒ | d <t | | d ƒ t | | d ƒ | S(   NR5   t   begin_markert	   max_depthR1   s9   google_credentials is required when rules_source is "{0}"R2   s7   spreadsheet_name is required when rules_source is "{0}"R3   s1   rules_path is required when rules_source is "{0}"s   Not one of ({0}, {1})s   Found the value ({0})t   ignored_namest   stock_parens(   t   listt   keysR!   R   R   R   t   GOOGLE_SOURCER   R4   R
   t   BadRulesSourceErrorR7   R6   R)   R<   (   R   R;   R:   R   R5   (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   parse_config    sH    



c         C   s¼   t  j j |  ƒ s- t j d j |  ƒ ƒ ‚ n  t j d t ƒ } y | j	 |  ƒ Wn1 t j
 k
 rƒ } t j d j |  ƒ | ƒ ‚ n Xd | k r« t j d j |  ƒ ƒ ‚ n  t |  | d ƒ S(   s6   Return only the "enforcer" section of the config file.s#   The config file "{0}" was not foundt   empty_lines_in_valuess.   The ({0}) configuration file is not acceptablet   enforcers3   The config file "{0}" is missing a required section(   t   ost   patht   existsR
   t   NoConfigFileErrorR   t   configparsert   ConfigParserR   t   readR   t   ConfigParserErrort   NoEnforcerSectionErrorRE   (   R   t   configR    (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   read_configÒ   s    c         C   s¤   t  j  ƒ  } y^ t |  ƒ } t j ƒ  t j | ƒ \ } } t j ƒ  t j | | ƒ t j	 t | | ƒ } Wn# t
 j k
 r } t j | ƒ n Xt j ƒ  | | f S(   N(   t   timeRR   R   R   R   t   get_rule_fileR   t   print_headerR   t   compileR
   R   R   (   R   t
   start_timeRQ   t   metainfot	   rule_filet   analyzerR    (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   make_analyzerç   s    


(   R   RL   t   os.pathRH   R   RS   t    R    R
   R   R   R   t   CONFIG_PATHt   objectR   R   R   t   NoneR!   R(   R)   R+   R-   R/   R0   R6   R7   R<   RE   RR   R[   (    (    (    sy   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/startup.pyt   <module>   s2   												2