
                             d 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
 ddl	mZ dd	lmZ g d
Zd Zd Zd Zd Zd Zd Zd Zy)z7Utilities for the parsing input for cloud build v2 API.    )absolute_import)division)unicode_literals)encoding)cloudbuild_exceptions)client_util)
input_util)yaml)zoptions.provenance.enabledzoptions.provenance.storagezoptions.provenance.regionc                     t        |        t        |        t        j                         }t	        j
                  | |j                        }t        j                  |       |S )z3Convert cloudbuild.yaml file into Workflow message.)	_WorkflowTransform_WorkflowValidater   GetMessagesModuler   DictToMessageWorkflowr	   UnrecognizedFields)workflowmessagesschema_messages      ?lib/googlecloudsdk/api_lib/cloudbuild/v2/workflow_input_util.pyCloudBuildYamlDataToWorkflowr   "   sL    XH**,())(H4E4EF./	    c                 X    d| vsd| d   vs
d| d   d   vrt        j                  d      y)zCheck that the given workflow has all required fields.

  Args:
    workflow: The user-supplied Cloud Build Workflow YAML.

  Raises:
    InvalidYamlError: If the workflow is invalid.
  optionssecurityserviceAccountzxA service account is required. Specify your user-managed service account using the options.security.serviceAccount fieldN)r   InvalidYamlError)r   s    r   r   r   -   sJ     x	8I.	.	)!4Z!@	@

0
0	C  
Ar   c                    d| v r| j                  d      | d<   | j                  dg       D ]  }t        j                  |        | j                  dg       D ]  }t        j                  |       |j                  dd      st        j                  d      |j                  dd      dk7  s'|j                  d	dd
i      j                  d      d
k7  s{t        j                  dj                  |j                  d                   d| v r*t        j                  | j                  d      d      | d<   n2d| v rt        j                  | d          nt        j                  d      | j                  dg       D ]  }t        |        d| v r#d| d   v r| d   j                  d      }|| d   d<   t        D ]  }t        j                  | |        y)zTransform workflow message.triggersworkflowTriggersparamsname z#Workflow parameter name is requiredtypestringdefaultSTRINGzSOnly string are supported for workflow parameters, error at parameter with name: {}pipelineSpecT)
round_trippipelineSpecYamlpipelineRefz(PipelineSpec or PipelineRef is required.
workspacesr   statusstatusUpdateOptionsN)popgetr	   WorkflowTriggerTransformParamSpecTransformr   r   formatr
   dumpRefTransform_WorkspaceBindingTransform_WORKFLOW_OPTIONS_ENUMSSetDictDottedKeyUpperCase)r   workflow_trigger
param_specworkspace_bindingpopped_statusoptions         r   r   r   A   s    8#+<<
#;H ",,'92>''(89 ? LL2.j!!*->>&"%!22
/  	vx(H4>>)fh%78<<VDP!22$$*F:>>&+A$B  / x#'99^$$H   H]34

0
024 4 $<<b901 : (x8I+>>Y'++H5M1>HY-.'f((6: (r   c                     | j                  dg       D ]  }t        |        | j                  dg       D ]  }t        j                  |        d| v r)| j	                  d      }|D ]  }t        |        || d<   yy)z Transform pipeline spec message.tasksr    finallyfinallyTasksN)r/   _PipelineTaskTransformr	   r1   r.   )pipeline_specpipeline_taskr9   finally_taskstasks        r   _PipelineSpecTransformrF   n   s     %(("5m=) 6 "%%h3j!!*- 4 -!%%i0MT" $1M.!	  r   c                    d| v rK| j                  d      }|j                  dg       D ]  }t        j                  |        i | d<   || d   d<   n0d| v r,t        j                  | d          | j                  d      | d<   d| v r6| j                  dg       D ]  }t        |        | j                  d      | d<   t        j                  | j                  dg              y)z Transform pipeline task message.taskSpecr    taskRefwhenwhenExpressionsN)r.   r/   r	   r1   r4   _WhenExpressionTransformParamDictTransform)rC   popped_task_specr9   when_expressions       r   rA   rA   ~   s     = $((4&**8R8
##J/ 9 "M*,<M*j)M!M)45,00;M)}(,,VR8/ 9'4'8'8'@M#$ 1 1(B ?@r   c                 x    d| v r6t        j                  | j                  d            j                         | d<   y y )NoperatorexpressionOperator)r	   CamelToSnaker.   upper)rO   s    r   rL   rL      s=    ?",6,C,CJ'-)). () #r   c                     d| v r| j                  d      }i | d<   || d   d<   yd| v r5| j                  d      }i | d<   d|v r|j                  d      }|| d   d<   yyy)z$Transform workspace binding message.
secretNamesecretvolumevolumeClaimstorageN)r.   )r:   popped_secretpopped_volumerZ   s       r   r5   r5      s     &&%)),7M"$h0=h-$$%))(3M')m$M!!!),g4;&y1 "
 r   N)__doc__
__future__r   r   r   apitools.base.pyr   !googlecloudsdk.api_lib.cloudbuildr   $googlecloudsdk.api_lib.cloudbuild.v2r   r	   googlecloudsdk.corer
   r6   r   r   r   rF   rA   rL   r5    r   r   <module>rd      sO    > &  ' % C < ; $ (*;Z2 A*1r   