
    jBi                         S r SSKrSSKrSSKrSSKJr  SSKJrJr  SSK	J
r
  \R                  " \5      r " S S5      rg)zF
Configuration manager for loading and managing application settings.
    N)Path)DictOptional)load_dotenvc                   x    \ rS rSrSrSS\\   4S jjrSS jrSS jr	SS	 jr
SS
 jrSS\4S jjrS\4S jrSrg)ConfigManager   zFManages application configuration from YAML and environment variables.Nconfig_pathc                 p    [        5         Uc  Sn[        U5      U l        0 U l        U R	                  5         g)zr
Initialize configuration manager.

Args:
    config_path: Path to config YAML file (default: config/config.yaml)
Nzconfig/config.yaml)r   r   r
   config_load_config)selfr
   s     .C:\wamp64\www\sonar_scan\src\config_manager.py__init__ConfigManager.__init__   s8     	 .K, 	    returnc                    U R                   R                  5       (       ag   [        U R                   S5       n[        R                  " U5      =(       d    0 U l        SSS5        [        R                  SU R                    35        O[        R                  S5        0 U l        U R                  5         U R                  5         g! , (       d  f       Nn= f! [         a*  n[        R                  SU S35        0 U l         SnANaSnAff = f)z4Load configuration from YAML file or create default.rNzLoaded configuration from zFailed to load config file: z, using defaultsz?Config file not found, using environment variables and defaults)r
   existsopenyaml	safe_loadr   loggerinfo	Exceptionwarning_load_from_env_prompt_missing_values)r   fes      r   r   ConfigManager._load_config%   s    ""$$!$**C0A"&.."3"9rDK 189I9I8JKL
 KKYZDK 	 	##% 10  !!=aS@PQR !s.   C %C*C 
CC 
D	 DD	c                 $   U R                   R                  S0 5      R                  S5      (       d4  [        R                  " SS5      U R                   R	                  S0 5      S'   U R                   R                  S0 5      R                  S5      (       d4  [        R                  " SS5      U R                   R	                  S0 5      S'   U R                   R                  S0 5      R                  S5      (       d4  [        R                  " SS5      U R                   R	                  S0 5      S'   U R                   R                  S0 5      R                  S	5      (       d4  [        R                  " S
S5      U R                   R	                  S0 5      S	'   U R                   R                  S0 5      R                  S5      (       d4  [        R                  " SS5      U R                   R	                  S0 5      S'   U R                   R                  S0 5      R                  S5      (       d4  [        R                  " SS5      U R                   R	                  S0 5      S'   U R                   R	                  S0 5      nUR	                  S[        R                  " SS5      5        UR	                  S[        R                  " SS5      5        UR	                  S[        R                  " SS5      5        UR	                  S[        R                  " SS5      5        g)z.Load configuration from environment variables.	bitbucket	workspaceBITBUCKET_WORKSPACE app_passwordBITBUCKET_APP_PASSWORD	api_tokenBITBUCKET_API_TOKENusernameBITBUCKET_USERNAME	sonarqubeurlSONARQUBE_URLzhttps://scan.appmonitor.co.za/tokenSONARQUBE_TOKENscanning	repos_dir	REPOS_DIRz./reposreports_dirREPORTS_DIRz	./reportshistory_fileHISTORY_FILEz./scan_history.jsonsonar_scanner_pathSONAR_SCANNER_PATHzsonar-scannerN)r   getosgetenv
setdefault)r   r3   s     r   r   ConfigManager._load_from_env9   s=    {{{B/33K@@CE99MbdfCgDKK"";3K@{{{B/33NCCFHiiPhjlFmDKK"";3NC{{{B/33K@@CE99MbdfCgDKK"";3K@{{{B/33J??BD))L`bdBeDKK"";3J? {{{B/33E::=?YYXx=yDKK"";3E:{{{B/33G<<?AyyIZ\^?_DKK"";3G< ;;))*b9K;	)JKM299]K+PQNBIInF[,\]0"))<PRa2bcr   c                    U R                   R                  S0 5      R                  S5      (       d>  [        S5      R                  5       nU(       a  XR                   R	                  S0 5      S'   U R                   R                  S0 5      R                  S5      (       d>  [        S5      R                  5       nU(       a  X R                   R	                  S0 5      S'   U R                   R	                  S0 5      nUR                  S5      (       d  UR                  S5      (       dv  [        S5      R                  5       R                  5       nUS	:w  a%  [        S
5      R                  5       nU(       a  XSS'   O$[        S5      R                  5       nU(       a  XcS'   U R                   R                  S0 5      R                  S5      (       d@  [        S5      R                  5       nU(       a  XpR                   R	                  S0 5      S'   ggg)z6Prompt user for missing required configuration values.r$   r%   z Enter Bitbucket workspace name: r,   z Enter Bitbucket username/email: r*   r(   z1Do you want to use API token? (y/n, default: y): nzEnter Bitbucket API token: zEnter Bitbucket app password: r.   r1   zEnter SonarQube token: N)r   r<   inputstripr?   lower)r   r%   r,   bitbucket_config	use_tokenr*   r(   r1   s           r   r   $ConfigManager._prompt_missing_valuesR   s    {{{B/33K@@@AGGIIGP&&{B7D {{{B/33J???@FFHHFN&&{B7
C  ;;11+rB##K009I9M9Mn9]9]QRXXZ``bIC!"?@FFH	4=[1$%EFLLN7C^4 {{{B/33G<<34::<ECH&&{B7@  =r   c                 p    U R                   R                  R                  SSS9  U R                  R	                  S0 5      R	                  SS5      SSS.U R                  R	                  S0 5      R	                  SS5      SS	.U R                  R	                  S
0 5      S.n[        U R                   S5       n[        R                  " XSS9  SSS5        [        R                  SU R                    35        g! , (       d  f       N1= f! [         a"  n[        R                  SU 35         SnAgSnAff = f)z(Save current configuration to YAML file.T)parentsexist_okr$   r%   r'   )r%   r,   r(   r.   r/   )r/   r1   r3   )r$   r.   r3   wF)default_flow_styleNzConfiguration saved to zFailed to save configuration: )r
   parentmkdirr   r<   r   r   dumpr   r   r   r   )r   safe_configr    r!   s       r   save_configConfigManager.save_configs   s   	A##))$)F
 "&b!A!E!EkSU!V "$&  ;;??;;??rJ !KKOOJ;K d&&,		+UC - KK1$2B2B1CDE -,  	ANN;A3?@@	As0   B5D	 7C8*D	 8
DD	 	
D5D00D5keyc                     UR                  S5      nU R                  nU H4  n[        U[        5      (       a  UR	                  U5      nUc  Us  $ M2  Us  $    Ub  U$ U$ )z
Get configuration value using dot notation.

Args:
    key: Configuration key (e.g., "bitbucket.workspace")
    default: Default value if key not found
    
Returns:
    Configuration value
.)splitr   
isinstancedictr<   )r   rT   defaultkeysvalueks         r   r<   ConfigManager.get   sf     yy~A%&&		!="N !   )u6w6r   c                 6    U R                   R                  5       $ )zGet all configuration.)r   copy)r   s    r   get_allConfigManager.get_all   s    {{!!r   )r   r
   )N)r   N)__name__
__module____qualname____firstlineno____doc__r   strr   r   r   r   rR   r<   r   ra   __static_attributes__ r   r   r   r      sE    PHSM (&(d2IBA67s 70" "r   r   )rg   r=   r   loggingpathlibr   typingr   r   dotenvr   	getLoggerrc   r   r   rj   r   r   <module>rp      s:    
    ! 			8	$Z" Z"r   