
    ZTh,3                        d dl mZ d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZmZmZmZmZ d dlmZmZmZmZmZmZmZ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(m)Z)  G d d      Z*y)    )annotations)datetime)Path)DictListOptionalUnioncast)
ClientKeysIdsNamedResourcesNamesResourceIdentifierResourceIdentifiers)AssetsTimeRange$EvaluateRulesFromCurrentRuleVersionsEvaluateRulesFromReportTemplateEvaluateRulesPreviewRequestEvaluateRulesPreviewResponseEvaluateRulesRequestEvaluateRulesResponseRunTimeRange)RuleEvaluationServiceStub)to_timestamp_pb)SiftChannel)ReportService)ReportTemplateConfig)
RuleConfig)RuleIdentifierRuleServicec                  d   e Zd ZU dZded<   ded<   ded<   ddZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd
Z	 d	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 ddZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ		 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ
	 	 d	 	 	 	 	 	 	 	 	 ddZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 d dZ	 	 d	 	 	 	 	 	 	 d!dZy	)"RuleEvaluationServicezm
    A service for evaluating rules. Provides methods to evaluate rules and perform dry-run evaluations.
    r   _channelr   _rule_evaluation_stubr    _rule_servicec                R    || _         t        |      | _        t        |      | _        y )N)r#   r   r$   r    r%   )selfchannels     d/home/www/backend.miabetepe.com/venv/lib/python3.12/site-packages/sift_py/rule_evaluation/service.py__init__zRuleEvaluationService.__init__+   s#    %>w%G"(1    Nc                    | j                  |      }| j                  |||      }t        dd|i||}t        t        | j
                  j                  |            }	t        | j                  |	j                        S )a  Evaluate a set of rules against a run.

        Args:
            run_id: The Run ID to run against.
            rules: Either a ReportTemplateConfig, a list of RuleConfigs, or a list of
                RuleIdentifiers (typically from `RuleService.create_external_rules`).
            report_name: Optional report name.
            start_time: Optional start time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).
            end_time: Optional end time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).

        Returns:
            A ReportService object that can be use to get the status of the executed report.
        report_name )
_get_rules_kwargs_get_run_kwargsr   r
   r   r$   EvaluateRulesr   r#   	report_id)
r'   run_idrulesr-   
start_timeend_timerules_kwargs
run_kwargsreqress
             r)   evaluate_against_runz*RuleEvaluationService.evaluate_against_run0   s    * --e4))&*hG
" 
#

 

 ($*D*D*R*RSV*WXT]]CMM::r+   c                :   t        t        t        |            t        |      t        |            }| j	                  |      }t        d||d|}t        t        | j                  j                  |            }	t        | j                  |	j                        S )a  Evaluate a set of rules against assets.

        Args:
            asset_names: The list of assets to run against.
            start_time: The start time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).
            end_time: The end time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).
            rules: Either a ReportTemplateConfig, a list of RuleConfigs, or a list of
                RuleIdentifiers (typically from `RuleService.create_external_rules`).
            report_name: Optional report name.

        Returns:
            A Report object that can be use to get the status of the executed report.
        )names)assetsr5   r6   )r-   r>   r.   )r   r   r   r   r/   r   r
   r   r$   r1   r   r#   r2   )
r'   asset_namesr5   r6   r4   r-   asset_time_ranger7   r9   r:   s
             r)   evaluate_against_assetsz-RuleEvaluationService.evaluate_against_assetsQ   s    * +!K(@A&z2$X.

 --e4" 
##
 

 ($*D*D*R*RSV*WXT]]CMM::r+   c                    | j                  |      }| j                  |||      }t        di ||}| j                  j	                  |      S )aS  Preview the evaluation of a set of rules against a run.

        Args:
            run_id: The Run ID to run against.
            rules: Either a ReportTemplateConfig, a list of RuleConfigs, or a list of
                RuleIdentifiers (typically from `RuleService.create_external_rules`).
            start_time: Optional start time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).
            end_time: Optional end time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).

        Returns:
            The EvaluateRulesPreviewResponse object.
        r.   )r/   r0   r   r$   EvaluateRulesPreview)r'   r3   r4   r5   r6   eval_kwargsr8   r9   s           r)   preview_against_runz)RuleEvaluationService.preview_against_runv   s[    & ,,U3))&*hG
) 



 ))>>sCCr+   c                b    | j                   j                  |      }| j                  |||||      S )a7  Evaluate a set of external rules against a run.

        Args:
            run_id: The Run ID to run against.
            rules: A list of RuleConfigs. These must be external rules.
            report_name: Optional report name.
            start_time: Optional start time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).
            end_time: Optional end time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).

        Returns:
            A Report object that can be use to get the status of the executed report.
        )r%   create_external_rulesr;   )r'   r3   r4   r-   r5   r6   rule_idss          r)   evaluate_external_rulesz-RuleEvaluationService.evaluate_external_rules   s4    ( %%;;EB((;
T\]]r+   c                d    | j                   j                  ||      }| j                  |||||      S )a8  Evaluate a set of external rules from a YAML config against a run.

        Args:
            run_id: The Run ID to run against.
            paths: The YAML paths to load rules from.
            report_name: Optional report name.
            start_time: Optional start time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).
            end_time: Optional end time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).

        Returns:
            A Report object that can be use to get the status of the executed report.
        )r%   create_external_rules_from_yamlr;   )r'   r3   pathsnamed_expressionsr-   r5   r6   rH   s           r)   !evaluate_external_rules_from_yamlz7RuleEvaluationService.evaluate_external_rules_from_yaml   s7    * %%EEeM^_((;
T\]]r+   c                `    | j                   j                  |      }| j                  ||||      S )a  Preview the evaluation a set of external rules against a run.

        Args:
            run_id: The Run ID to run against.
            rules: A list of RuleConfigs. These must be external rules.
            start_time: Optional start time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).
            end_time: Optional end time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).

        Returns:
            The EvaluateRulesPreviewResponse object.
        )r%   rG   rE   )r'   r3   r4   r5   r6   rH   s         r)   preview_external_rulesz,RuleEvaluationService.preview_external_rules   s1    $ %%;;EB''*hOOr+   c                b    | j                   j                  ||      }| j                  ||||      S )aG  Preview the evaluation a set of external rules from a YAML config against a run.

        Args:
            run_id: The Run ID to run against.
            paths: The YAML paths to load rules from.
            named_expressions: The named expressions to substitute in the rules.
            start_time: Optional start time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).
            end_time: Optional end time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).

        Returns:
            The EvaluateRulesPreviewResponse object.
        )r%   rK   rE   )r'   r3   rL   rM   r5   r6   rH   s          r)    preview_external_rules_from_yamlz6RuleEvaluationService.preview_external_rules_from_yaml   s4    ( %%EEeM^_''*hOOr+   c                   t        |t              r9|j                  st        d      dt	        t        |j                              iS t        |      dk(  rt        d      t        |d   t              rQt        t        t           |      }dt        t        t        |D cg c]  }|j                   c}            	      iS t        |d   t              r}t        t        t           |      }|D ]'  }|j                  rt        d
|j                    d       dt        t        t#        |D cg c]  }|j                   c}            	      iS t        d      c c}w c c}w )aW  Returns the keyword arguments for a EvalutateRules request based on the input type.
        Currently does not support evaluating rules from a specific version.

        Args:
            rules: Either the ReportTemplateConfig, list of RuleIdentifiers, or list of RuleConfigs.

        Returns:
            dict: The keyword argument.
        zInvalid report templatereport_templateid)rT   r   zRule set is emptyr4   )ids)r4   zRule of name 'z' requires a rule_client_key)client_keyszInvalid rules argument)
isinstancer   template_id
ValueErrorr   r   lenr   r
   r   r   r   r   rule_idr   rule_client_keynamer   )r'   r4   rH   rrule_configsconfigs         r)   r/   z'RuleEvaluationService._get_rules_kwargs   s\    e12$$ !:;;!#B$6%:K:K$L$  5zQ !455%(N3^ 4e< A1cRZ>[Qqyy>[6\]  E!Hj1#D$4e<* eF!11(>&++Fb)cdde
 A1(2HT,U1Q->->,U)  122+ ?\ -Vs   !E"1E'c                    t        |      }|s|r0dt        ||rt        |      nd|rt        |            iS d      iS d|iS )a  Returns the Run specific keyword arguments for a EvalutateRules request based on the input type.

        Args:
            run_id: The Run ID to run against.
            start_time: Optional start time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).
            end_time: Optional end time to evaluate (datetime, ISO 8601 formatted string, or POSIX timestamp).

        Returns:
            dict: The keyword arguments.
        rU   run_time_rangeN)runr5   r6   re   )r   r   r   )r'   r3   r5   r6   re   s        r)   r0   z%RuleEvaluationService._get_run_kwargs"  sb      !F+ ,>Hz:d:B_X6#  IM#  3<r+   )r(   r   ) NN)r3   strr4   CUnion[ReportTemplateConfig, List[RuleConfig], List[RuleIdentifier]]r-   rg   r5   *Optional[Union[datetime, str, int, float]]r6   ri   returnr   )rf   )r?   z	List[str]r5    Union[datetime, str, int, float]r6   rk   r4   rh   r-   rg   rj   r   )NN)
r3   rg   r4   rh   r5   ri   r6   ri   rj   r   )r3   rg   r4   List[RuleConfig]r-   rg   r5   ri   r6   ri   rj   r   )Nrf   NN)r3   rg   rL   
List[Path]rM   Optional[Dict[str, str]]r-   rg   r5   ri   r6   ri   rj   r   )
r3   rg   r4   rl   r5   ri   r6   ri   rj   r   )NNN)r3   rg   rL   rm   rM   rn   r5   ri   r6   ri   rj   r   )r4   rh   rj   dict)r3   rg   r5   ri   r6   ri   rj   ro   )__name__
__module____qualname____doc____annotations__r*   r;   rA   rE   rI   rN   rP   rR   r/   r0   r.   r+   r)   r"   r"   "   s    442 AE?C;; S; 	;
 ?; =; 
;N #;#; 5#; 3	#;
 S#; #; 
#;R BF?CDD SD ?	D
 =D 
&DB AE?C^^  ^ 	^
 ?^ =^ 
^6 7;AE?C^^ ^ 4	^
 ^ ?^ =^ 
^8 BF?CPP  P ?	P
 =P 
&P2 7;AE?CPP P 4	P
 ?P =P 
&P.23X23	23n BF?C	   ?  =	 
 
 r+   r"   N)+
__future__r   r   pathlibr   typingr   r   r   r	   r
   +sift.common.type.v1.resource_identifier_pb2r   r   r   r   r   r   +sift.rule_evaluation.v1.rule_evaluation_pb2r   r   r   r   r   r   r   r   0sift.rule_evaluation.v1.rule_evaluation_pb2_grpcr   sift_py._internal.timer   sift_py.grpc.transportr   sift_py.report.servicer   sift_py.report_templates.configr   sift_py.rule.configr   sift_py.rule.servicer   r    r"   r.   r+   r)   <module>r      sQ    "   4 4 	 	 	 W 2 . 0 @ * <[  [ r+   