
    5ih                     "    d dl Z  G d de      Zy)    Nc                   F    e Zd ZdZ	 	 	 	 	 	 	 	 d	dZd Zd Zd Zd Zd Z	y)
VizPayloadBuildera  

    'filters' and/or 'raw_filters' can be built with the help of vizserver_filters_from_json_parser.JSONFiltersValidator

    assemble_assay_raw_filters is a helper method to build a complete raw_filters structure for a single assay,
    if raw_filters does not already have this information.

    Example usage:

    payload = VizPayloadBuilder(
        "project-xyz",
        {
            "feature_id": "expr_annotation$feature_id",
            "sample_id": "expression$sample_id",
            "expression": "expression$value",
        },
        error_handler=print,
    )

    payload.assemble_assay_raw_filters(
        assay_name="xyz",
        assay_id="a-b1-2c-f-xyz-test",
        filters={
            "logic": "or",
            "compound": [
                {
                    "test": "1",
                },
                {"exmaple": 3},
            ],
        },
    )

    # Hint: Use vizserver_filters_from_json_parser.JSONFiltersValidator to build "filters"

    final_payload = payload.build()


    Nc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        | j                  t        d      y )Nzerror_handler must be defined)project_contextoutput_fields_mappingraw_filtersfiltersorder_bylimitbase_sql	is_cohortreturn_queryerror_handler	Exception)selfr   r   r   r	   r
   r   r   r   r   r   s              /home/marpiech/ifpan-abm-pgxpred/analysis/marpiech-gwas-test/venv/lib/python3.12/site-packages/dxpy/bindings/apollo/vizserver_payload_builder.py__init__zVizPayloadBuilder.__init__-   sl      /%:"& 
 "(*%;<< &    c                 x   | j                         }| j                  rD| j                  r8| j                          |j	                  | j                  | j                  d       | j                  r| j                  s| j                  d       | j                  r-| j                          |j	                  d| j                  i       | j                  r|j	                  | j                         | j                  r|j	                  | j                         | j                  r|j	                  d| j                  i       |S )N)r   r   zCbase_sql is only allowed for cohorts. is_cohort must be set to Truer   r
   )get_vizserver_payload_structurer   r   validate_base_sqlupdater   r   validate_returned_records_limitr   r	   r
   )r   payloads     r   buildzVizPayloadBuilder.buildH   s    668>>dmm""$NNDNNST==U ::002NNGTZZ01NN4++,<<NN4<<(==NNJ67r   c                 R    dd||dii}|d   d   j                  |       || _        y)a  
        Helper method to build a complete raw_filters structure for a single assay
        if raw_filters does not already have this information.

        filters may be a dict with the following structure:
        {
            "logic": "or",
            "compound": [
                {
                    ...
                }
            ]
        }

        or any other structure that is accepted by vizserver within assay_filters, e.g.
        {
            "filters": {
                ...
            }
        }
        r   assay_filters)nameidN)r   r   )r   
assay_nameassay_idr	   r   s        r   assemble_assay_raw_filtersz,VizPayloadBuilder.assemble_assay_raw_filtersc   sC    . &""
 	M"?3::7C&r   c                 J    | j                   | j                  | j                  dS )N)r   fieldsr   )r   r   r   r   s    r   r   z1VizPayloadBuilder.get_vizserver_payload_structure   s'    #3300 --
 	
r   c                 <   d}t         j                  j                  dk(  r2t        | j                  t
        t        f      r| j                  dk(  r:d}n7t        | j                  t
              rdj                  | j                        rd}|r| j                  d       y y )NF    Tz+base_sql is either not a string or is empty)	sysversion_infomajor
isinstancer   strunicode__eq__r   )r   THROW_ERRORs     r   r   z#VizPayloadBuilder.validate_base_sql   sw    !!Q&dmmc7^<QS@S"dmmS1RYYt}}5M"LM r   c                 z    t        | j                  t              r| j                  dk  r| j                  d       y y )Nr   z limit must be a positive integer)r,   r   intr   r%   s    r   r   z1VizPayloadBuilder.validate_returned_records_limit   s.    $**c*djjAoAB />r   )NNNNNFFN)
__name__
__module____qualname____doc__r   r   r"   r   r   r    r   r   r   r      sC    &X =66!'F

NCr   r   )r)   objectr   r7   r   r   <module>r9      s    
WC WCr   