SYMBOL INDEX (1226 symbols across 104 files) FILE: pr_agent/agent/pr_agent.py class PRAgent (line 50) | class PRAgent: method __init__ (line 51) | def __init__(self, ai_handler: partial[BaseAiHandler,] = LiteLLMAIHand... method _handle_request (line 54) | async def _handle_request(self, pr_url, request, notify=None) -> bool: method handle_request (line 121) | async def handle_request(self, pr_url, request, notify=None) -> bool: FILE: pr_agent/algo/ai_handlers/base_ai_handler.py class BaseAiHandler (line 4) | class BaseAiHandler(ABC): method __init__ (line 10) | def __init__(self): method deployment_id (line 15) | def deployment_id(self): method chat_completion (line 19) | async def chat_completion(self, model: str, system: str, user: str, te... FILE: pr_agent/algo/ai_handlers/langchain_ai_handler.py class LangChainOpenAIHandler (line 23) | class LangChainOpenAIHandler(BaseAiHandler): method __init__ (line 24) | def __init__(self): method deployment_id (line 34) | def deployment_id(self): method _create_chat_async (line 40) | async def _create_chat_async(self, deployment_id=None): method chat_completion (line 70) | async def chat_completion(self, model: str, system: str, user: str, te... FILE: pr_agent/algo/ai_handlers/litellm_ai_handler.py class LiteLLMAIHandler (line 20) | class LiteLLMAIHandler(BaseAiHandler): method __init__ (line 27) | def __init__(self): method prepare_logs (line 153) | def prepare_logs(self, response, system, user, resp, finish_reason): method _configure_claude_extended_thinking (line 165) | def _configure_claude_extended_thinking(self, model: str, kwargs: dict... method add_litellm_callbacks (line 202) | def add_litellm_callbacks(self, kwargs) -> dict: method deployment_id (line 257) | def deployment_id(self): method chat_completion (line 267) | async def chat_completion(self, model: str, system: str, user: str, te... method _get_completion (line 432) | async def _get_completion(self, **kwargs): FILE: pr_agent/algo/ai_handlers/litellm_helpers.py function _handle_streaming_response (line 9) | async def _handle_streaming_response(response): class MockResponse (line 45) | class MockResponse: method __init__ (line 48) | def __init__(self, resp, finish_reason): method dict (line 58) | def dict(self): function _get_azure_ad_token (line 62) | def _get_azure_ad_token(): function _process_litellm_extra_body (line 83) | def _process_litellm_extra_body(kwargs: dict) -> dict: FILE: pr_agent/algo/ai_handlers/openai_ai_handler.py class OpenAIHandler (line 14) | class OpenAIHandler(BaseAiHandler): method __init__ (line 15) | def __init__(self): method deployment_id (line 35) | def deployment_id(self): method chat_completion (line 45) | async def chat_completion(self, model: str, system: str, user: str, te... FILE: pr_agent/algo/cli_args.py class CliArgs (line 4) | class CliArgs: method validate_user_args (line 6) | def validate_user_args(args: list) -> (bool, str): FILE: pr_agent/algo/file_filter.py function filter_ignored (line 8) | def filter_ignored(files, platform = 'github'): function translate_globs_to_regexes (line 83) | def translate_globs_to_regexes(globs: list): FILE: pr_agent/algo/git_patch_processing.py function extend_patch (line 11) | def extend_patch(original_file_str, patch_str, patch_extra_lines_before=0, function decode_if_bytes (line 34) | def decode_if_bytes(original_file_str): function should_skip_patch (line 49) | def should_skip_patch(filename): function process_patch_lines (line 56) | def process_patch_lines(patch_str, original_file_str, patch_extra_lines_... function check_if_hunk_lines_matches_to_file (line 187) | def check_if_hunk_lines_matches_to_file(i, original_lines, patch_lines, ... function extract_hunk_headers (line 214) | def extract_hunk_headers(match): function omit_deletion_hunks (line 228) | def omit_deletion_hunks(patch_lines) -> str: function handle_patch_deletions (line 267) | def handle_patch_deletions(patch: str, original_file_content_str: str, function decouple_and_convert_to_hunks_with_lines_numbers (line 300) | def decouple_and_convert_to_hunks_with_lines_numbers(patch: str, file) -... function extract_hunk_lines_from_patch (line 415) | def extract_hunk_lines_from_patch(patch: str, file_name, line_start, lin... FILE: pr_agent/algo/language_handler.py function filter_bad_extensions (line 7) | def filter_bad_extensions(files): function is_valid_file (line 15) | def is_valid_file(filename:str, bad_extensions=None) -> bool: function sort_files_by_main_languages (line 31) | def sort_files_by_main_languages(languages: Dict, files: list): FILE: pr_agent/algo/pr_processing.py function cap_and_log_extra_lines (line 31) | def cap_and_log_extra_lines(value, direction) -> int: function get_pr_diff (line 38) | def get_pr_diff(git_provider: GitProvider, token_handler: TokenHandler, function get_pr_diff_multiple_patchs (line 145) | def get_pr_diff_multiple_patchs(git_provider: GitProvider, token_handler... function pr_generate_extended_diff (line 167) | def pr_generate_extended_diff(pr_languages: list, function pr_generate_compressed_diff (line 210) | def pr_generate_compressed_diff(top_langs: list, token_handler: TokenHan... function generate_full_patch (line 279) | def generate_full_patch(convert_hunks_to_line_numbers, file_dict, max_to... function retry_with_fallback_models (line 320) | async def retry_with_fallback_models(f: Callable, model_type: ModelType ... function _get_all_models (line 341) | def _get_all_models(model_type: ModelType = ModelType.REGULAR) -> List[s... function _get_all_deployments (line 357) | def _get_all_deployments(all_models: List[str]) -> List[str]: function get_pr_multi_diffs (line 372) | def get_pr_multi_diffs(git_provider: GitProvider, function add_ai_metadata_to_diff_files (line 503) | def add_ai_metadata_to_diff_files(git_provider, pr_description_files): function add_ai_summary_top_patch (line 527) | def add_ai_summary_top_patch(file, full_extended_patch): FILE: pr_agent/algo/token_handler.py class ModelTypeValidator (line 12) | class ModelTypeValidator: method is_openai_model (line 14) | def is_openai_model(model_name: str) -> bool: method is_anthropic_model (line 18) | def is_anthropic_model(model_name: str) -> bool: class TokenEncoder (line 22) | class TokenEncoder: method get_token_encoder (line 28) | def get_token_encoder(cls): class TokenHandler (line 42) | class TokenHandler: method __init__ (line 59) | def __init__(self, pr=None, vars: dict = {}, system="", user=""): method _get_system_user_tokens (line 74) | def _get_system_user_tokens(self, pr, encoder, vars: dict, system, user): method _calc_claude_tokens (line 99) | def _calc_claude_tokens(self, patch: str) -> int: method _apply_estimation_factor (line 127) | def _apply_estimation_factor(self, model_name: str, default_estimate: ... method _get_token_count_by_model_type (line 133) | def _get_token_count_by_model_type(self, patch: str, default_estimate:... method count_tokens (line 154) | def count_tokens(self, patch: str, force_accurate: bool = False) -> int: FILE: pr_agent/algo/types.py class EDIT_TYPE (line 6) | class EDIT_TYPE(Enum): class FilePatchInfo (line 15) | class FilePatchInfo: FILE: pr_agent/algo/utils.py function get_model (line 34) | def get_model(model_type: str = "model_weak") -> str: class Range (line 42) | class Range(BaseModel): class ModelType (line 49) | class ModelType(str, Enum): class TodoItem (line 55) | class TodoItem(TypedDict): class PRReviewHeader (line 61) | class PRReviewHeader(str, Enum): class ReasoningEffort (line 66) | class ReasoningEffort(str, Enum): class PRDescriptionHeader (line 75) | class PRDescriptionHeader(str, Enum): function get_setting (line 80) | def get_setting(key: str) -> Any: function emphasize_header (line 88) | def emphasize_header(text: str, only_markdown=False, reference_link=None... function unique_strings (line 116) | def unique_strings(input_list: List[str]) -> List[str]: function convert_to_markdown_v2 (line 128) | def convert_to_markdown_v2(output_data: dict, function extract_relevant_lines_str (line 328) | def extract_relevant_lines_str(end_line, files, relevant_file, start_lin... function ticket_markdown_logic (line 368) | def ticket_markdown_logic(emoji, markdown_text, value, gfm_supported) ->... function process_can_be_split (line 465) | def process_can_be_split(emoji, value): function parse_code_suggestion (line 519) | def parse_code_suggestion(code_suggestion: dict, i: int = 0, gfm_support... function try_fix_json (line 581) | def try_fix_json(review, max_iter=10, code_suggestions=False): function fix_json_escape_char (line 639) | def fix_json_escape_char(json_message=None): function convert_str_to_datetime (line 666) | def convert_str_to_datetime(date_str): function load_large_diff (line 684) | def load_large_diff(filename, new_file_content_str: str, original_file_c... function update_settings_from_args (line 706) | def update_settings_from_args(args: List[str]) -> List[str]: function _fix_key_value (line 742) | def _fix_key_value(key: str, value: str): function load_yaml (line 752) | def load_yaml(response_text: str, keys_fix_yaml: List[str] = [], first_k... function try_fix_yaml (line 771) | def try_fix_yaml(response_text: str, function set_custom_labels (line 941) | def set_custom_labels(variables, git_provider=None): function get_user_labels (line 966) | def get_user_labels(current_labels: List[str] = None): function get_max_tokens (line 991) | def get_max_tokens(model): function clip_tokens (line 1015) | def clip_tokens(text: str, max_tokens: int, add_three_dots=True, num_inp... function replace_code_tags (line 1113) | def replace_code_tags(text): function find_line_number_of_relevant_line_in_file (line 1124) | def find_line_number_of_relevant_line_in_file(diff_files: List[FilePatch... function get_rate_limit_status (line 1198) | def get_rate_limit_status(github_token) -> dict: function validate_rate_limit_github (line 1220) | def validate_rate_limit_github(github_token, installation_id=None, thres... function validate_and_await_rate_limit (line 1238) | def validate_and_await_rate_limit(github_token): function github_action_output (line 1257) | def github_action_output(output_data: dict, key_name: str): function show_relevant_configurations (line 1270) | def show_relevant_configurations(relevant_section: str) -> str: function is_value_no (line 1295) | def is_value_no(value): function set_pr_string (line 1304) | def set_pr_string(repo_name, pr_number): function string_to_uniform_number (line 1308) | def string_to_uniform_number(s: str) -> float: function process_description (line 1323) | def process_description(description_full: str) -> Tuple[str, List]: function get_version (line 1420) | def get_version() -> str: function set_file_languages (line 1442) | def set_file_languages(diff_files) -> List[FilePatchInfo]: function format_todo_item (line 1465) | def format_todo_item(todo_item: TodoItem, git_provider, gfm_supported) -... function format_todo_items (line 1484) | def format_todo_items(value: list[TodoItem] | TodoItem, git_provider, gf... FILE: pr_agent/cli.py function set_parser (line 14) | def set_parser(): function run_command (line 60) | def run_command(pr_url, command): function run (line 69) | def run(inargs=None, args=None): FILE: pr_agent/cli_pip.py function main (line 5) | def main(): FILE: pr_agent/config_loader.py function get_settings (line 47) | def get_settings(use_context=False): function _find_repository_root (line 64) | def _find_repository_root() -> Optional[Path]: function _find_pyproject (line 78) | def _find_pyproject() -> Optional[Path]: function apply_secrets_manager_config (line 94) | def apply_secrets_manager_config(): function apply_secrets_to_config (line 125) | def apply_secrets_to_config(secrets: dict): FILE: pr_agent/custom_merge_loader.py function load (line 8) | def load(obj, env=None, silent=True, key=None, filename=None): function validate_file_security (line 101) | def validate_file_security(file_data, filename): FILE: pr_agent/git_providers/__init__.py function get_git_provider (line 30) | def get_git_provider(): function get_git_provider_with_context (line 40) | def get_git_provider_with_context(pr_url) -> GitProvider: FILE: pr_agent/git_providers/azuredevops_provider.py class AzureDevopsProvider (line 35) | class AzureDevopsProvider(GitProvider): method __init__ (line 37) | def __init__( method publish_code_suggestions (line 57) | def publish_code_suggestions(self, code_suggestions: list) -> bool: method reply_to_comment_from_comment_id (line 97) | def reply_to_comment_from_comment_id(self, comment_id: int, body: str,... method get_pr_description_full (line 101) | def get_pr_description_full(self) -> str: method edit_comment (line 104) | def edit_comment(self, comment: Comment, body: str): method remove_comment (line 117) | def remove_comment(self, comment: Comment): method publish_labels (line 129) | def publish_labels(self, pr_types): method get_pr_labels (line 141) | def get_pr_labels(self, update=False): method is_supported (line 153) | def is_supported(self, capability: str) -> bool: method set_pr (line 156) | def set_pr(self, pr_url: str): method get_repo_settings (line 161) | def get_repo_settings(self): method get_files (line 177) | def get_files(self): method get_diff_files (line 194) | def get_diff_files(self) -> list[FilePatchInfo]: method publish_comment (line 352) | def publish_comment(self, pr_comment: str, is_temporary: bool = False,... method publish_persistent_comment (line 372) | def publish_persistent_comment(self, pr_comment: str, method publish_description (line 379) | def publish_description(self, pr_title: str, pr_body: str): method remove_initial_comment (line 412) | def remove_initial_comment(self): method publish_inline_comment (line 419) | def publish_inline_comment(self, body: str, relevant_file: str, releva... method create_inline_comment (line 422) | def create_inline_comment(self, body: str, relevant_file: str, relevan... method publish_inline_comments (line 437) | def publish_inline_comments(self, comments: list[dict], disable_fallba... method get_title (line 463) | def get_title(self): method get_languages (line 466) | def get_languages(self): method get_pr_branch (line 495) | def get_pr_branch(self): method get_user_id (line 502) | def get_user_id(self): method get_issue_comments (line 505) | def get_issue_comments(self) -> list[Comment]: method add_eyes_reaction (line 517) | def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool ... method remove_reaction (line 520) | def remove_reaction(self, issue_comment_id: int, reaction_id: int) -> ... method set_like (line 523) | def set_like(self, thread_id: int, comment_id: int, create: bool = True): method set_thread_status (line 529) | def set_thread_status(self, thread_id: int, status: str): method reply_to_thread (line 535) | def reply_to_thread(self, thread_id: int, body: str, is_temporary: boo... method get_thread_context (line 546) | def get_thread_context(self, thread_id: int) -> CommentThreadContext: method _parse_pr_url (line 554) | def _parse_pr_url(pr_url: str) -> Tuple[str, str, int]: method _get_azure_devops_client (line 575) | def _get_azure_devops_client() -> Tuple[GitClient, WorkItemTrackingCli... method _get_repo (line 604) | def _get_repo(self): method _get_pr (line 611) | def _get_pr(self): method get_commit_messages (line 617) | def get_commit_messages(self): method get_pr_id (line 620) | def get_pr_id(self): method publish_file_comments (line 629) | def publish_file_comments(self, file_comments: list) -> bool: method get_line_link (line 632) | def get_line_link(self, relevant_file: str, relevant_line_start: int, ... method get_comment_url (line 635) | def get_comment_url(self, comment) -> str: method get_latest_commit_url (line 638) | def get_latest_commit_url(self) -> str: method get_linked_work_items (line 644) | def get_linked_work_items(self) -> list: method get_work_items (line 663) | def get_work_items(self, work_item_ids: list) -> list: FILE: pr_agent/git_providers/bitbucket_provider.py function _gef_filename (line 21) | def _gef_filename(diff): class BitbucketProvider (line 27) | class BitbucketProvider(GitProvider): method __init__ (line 28) | def __init__( method get_repo_settings (line 80) | def get_repo_settings(self): method get_git_repo_url (line 92) | def get_git_repo_url(self, pr_url: str=None) -> str: #bitbucket does n... method get_canonical_url_parts (line 103) | def get_canonical_url_parts(self, repo_git_url:str=None, desired_branc... method publish_code_suggestions (line 123) | def publish_code_suggestions(self, code_suggestions: list) -> bool: method publish_file_comments (line 188) | def publish_file_comments(self, file_comments: list) -> bool: method is_supported (line 191) | def is_supported(self, capability: str) -> bool: method set_pr (line 197) | def set_pr(self, pr_url: str): method get_files (line 201) | def get_files(self): method get_diff_files (line 214) | def get_diff_files(self) -> list[FilePatchInfo]: method get_latest_commit_url (line 346) | def get_latest_commit_url(self): method get_comment_url (line 349) | def get_comment_url(self, comment): method publish_persistent_comment (line 352) | def publish_persistent_comment(self, pr_comment: str, method publish_comment (line 380) | def publish_comment(self, pr_comment: str, is_temporary: bool = False): method edit_comment (line 390) | def edit_comment(self, comment, body: str): method remove_initial_comment (line 397) | def remove_initial_comment(self): method remove_comment (line 404) | def remove_comment(self, comment): method create_inline_comment (line 411) | def create_inline_comment(self, body: str, relevant_file: str, relevan... method publish_inline_comment (line 427) | def publish_inline_comment(self, comment: str, from_line: int, file: s... method get_line_link (line 443) | def get_line_link(self, relevant_file: str, relevant_line_start: int, ... method generate_link_to_relevant_line_number (line 450) | def generate_link_to_relevant_line_number(self, suggestion) -> str: method publish_inline_comments (line 470) | def publish_inline_comments(self, comments: list[dict]): method get_title (line 482) | def get_title(self): method get_languages (line 485) | def get_languages(self): method get_pr_branch (line 489) | def get_pr_branch(self): method get_repo_default_branch (line 494) | def get_repo_default_branch(self): method get_pr_owner_id (line 502) | def get_pr_owner_id(self) -> str | None: method get_pr_description_full (line 505) | def get_pr_description_full(self): method get_user_id (line 508) | def get_user_id(self): method get_issue_comments (line 511) | def get_issue_comments(self): method add_eyes_reaction (line 516) | def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool ... method remove_reaction (line 519) | def remove_reaction(self, issue_comment_id: int, reaction_id: int) -> ... method _parse_pr_url (line 523) | def _parse_pr_url(pr_url: str) -> Tuple[str, int, int]: method _get_repo (line 545) | def _get_repo(self): method _get_pr (line 552) | def _get_pr(self): method get_pr_file_content (line 555) | def get_pr_file_content(self, file_path: str, branch: str) -> str: method create_or_update_pr_file (line 571) | def create_or_update_pr_file(self, file_path: str, branch: str, conten... method _get_pr_file_content (line 589) | def _get_pr_file_content(self, remote_link: str): method get_commit_messages (line 599) | def get_commit_messages(self): method publish_description (line 603) | def publish_description(self, pr_title: str, description: str): method publish_labels (line 619) | def publish_labels(self, pr_types: list): method get_pr_labels (line 623) | def get_pr_labels(self, update=False): method _prepare_clone_url_with_token (line 626) | def _prepare_clone_url_with_token(self, repo_url_to_clone: str) -> str... FILE: pr_agent/git_providers/bitbucket_server_provider.py class BitbucketServerProvider (line 24) | class BitbucketServerProvider(GitProvider): method __init__ (line 25) | def __init__( method get_git_repo_url (line 71) | def get_git_repo_url(self, pr_url: str=None) -> str: #bitbucket server... method get_canonical_url_parts (line 82) | def get_canonical_url_parts(self, repo_git_url:str=None, desired_branc... method get_repo_settings (line 106) | def get_repo_settings(self): method get_pr_id (line 119) | def get_pr_id(self): method publish_code_suggestions (line 122) | def publish_code_suggestions(self, code_suggestions: list) -> bool: method publish_file_comments (line 189) | def publish_file_comments(self, file_comments: list) -> bool: method is_supported (line 192) | def is_supported(self, capability: str) -> bool: method set_pr (line 197) | def set_pr(self, pr_url: str): method get_file (line 201) | def get_file(self, path: str, commit_id: str): method get_files (line 212) | def get_files(self): method get_best_common_ancestor (line 219) | def get_best_common_ancestor(source_commits_list, destination_commits_... method get_diff_files (line 229) | def get_diff_files(self) -> list[FilePatchInfo]: method publish_comment (line 309) | def publish_comment(self, pr_comment: str, is_temporary: bool = False): method remove_initial_comment (line 313) | def remove_initial_comment(self): method remove_comment (line 320) | def remove_comment(self, comment): method create_inline_comment (line 324) | def create_inline_comment(self, body: str, relevant_file: str, relevan... method publish_inline_comment (line 342) | def publish_inline_comment(self, comment: str, from_line: int, file: s... method get_line_link (line 361) | def get_line_link(self, relevant_file: str, relevant_line_start: int, ... method generate_link_to_relevant_line_number (line 368) | def generate_link_to_relevant_line_number(self, suggestion) -> str: method publish_inline_comments (line 399) | def publish_inline_comments(self, comments: list[dict]): method get_title (line 411) | def get_title(self): method get_languages (line 414) | def get_languages(self): method get_pr_branch (line 417) | def get_pr_branch(self): method get_pr_owner_id (line 420) | def get_pr_owner_id(self) -> str | None: method get_pr_description_full (line 423) | def get_pr_description_full(self): method get_user_id (line 429) | def get_user_id(self): method get_issue_comments (line 432) | def get_issue_comments(self): method add_eyes_reaction (line 437) | def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool ... method remove_reaction (line 440) | def remove_reaction(self, issue_comment_id: int, reaction_id: int) -> ... method _parse_bitbucket_server (line 444) | def _parse_bitbucket_server(url: str) -> str: method _parse_pr_url (line 454) | def _parse_pr_url(pr_url: str) -> Tuple[str, str, int]: method _get_repo (line 494) | def _get_repo(self): method _get_pr (line 499) | def _get_pr(self): method _get_pr_file_content (line 508) | def _get_pr_file_content(self, remote_link: str): method get_commit_messages (line 511) | def get_commit_messages(self): method publish_description (line 515) | def publish_description(self, pr_title: str, description: str): method publish_labels (line 529) | def publish_labels(self, pr_types: list): method get_pr_labels (line 533) | def get_pr_labels(self, update=False): method _get_pr_comments_path (line 536) | def _get_pr_comments_path(self): method _get_merge_base (line 539) | def _get_merge_base(self): method _prepare_clone_url_with_token (line 542) | def _prepare_clone_url_with_token(self, repo_url_to_clone: str) -> str... method _clone_inner (line 555) | def _clone_inner(self, repo_url: str, dest_folder: str, operation_time... FILE: pr_agent/git_providers/codecommit_client.py class CodeCommitDifferencesResponse (line 5) | class CodeCommitDifferencesResponse: method __init__ (line 11) | def __init__(self, json: dict): class CodeCommitPullRequestResponse (line 22) | class CodeCommitPullRequestResponse: method __init__ (line 28) | def __init__(self, json: dict): class CodeCommitPullRequestTarget (line 36) | class CodeCommitPullRequestTarget: method __init__ (line 42) | def __init__(self, json: dict): class CodeCommitClient (line 49) | class CodeCommitClient: method __init__ (line 54) | def __init__(self): method is_supported (line 57) | def is_supported(self, capability: str) -> bool: method _connect_boto_client (line 62) | def _connect_boto_client(self): method get_differences (line 68) | def get_differences(self, repo_name: int, destination_commit: str, sou... method get_file (line 109) | def get_file(self, repo_name: str, file_path: str, sha_hash: str, opti... method get_pr (line 147) | def get_pr(self, repo_name: str, pr_number: int): method publish_description (line 181) | def publish_description(self, pr_number: int, pr_title: str, pr_body: ... method publish_comment (line 218) | def publish_comment(self, repo_name: str, pr_number: int, destination_... FILE: pr_agent/git_providers/codecommit_provider.py class PullRequestCCMimic (line 17) | class PullRequestCCMimic: method __init__ (line 22) | def __init__(self, title: str, diff_files: List[FilePatchInfo]): class CodeCommitFile (line 32) | class CodeCommitFile: method __init__ (line 37) | def __init__( class CodeCommitProvider (line 53) | class CodeCommitProvider(GitProvider): method __init__ (line 58) | def __init__(self, pr_url: Optional[str] = None, incremental: Optional... method provider_name (line 70) | def provider_name(self): method is_supported (line 73) | def is_supported(self, capability: str) -> bool: method set_pr (line 84) | def set_pr(self, pr_url: str): method get_files (line 88) | def get_files(self) -> list[CodeCommitFile]: method get_diff_files (line 103) | def get_diff_files(self) -> list[FilePatchInfo]: method publish_description (line 159) | def publish_description(self, pr_title: str, pr_body: str): method publish_comment (line 169) | def publish_comment(self, pr_comment: str, is_temporary: bool = False): method publish_code_suggestions (line 188) | def publish_code_suggestions(self, code_suggestions: list) -> bool: method publish_labels (line 218) | def publish_labels(self, labels): method get_pr_labels (line 221) | def get_pr_labels(self, update=False): method remove_initial_comment (line 224) | def remove_initial_comment(self): method remove_comment (line 227) | def remove_comment(self, comment): method publish_inline_comment (line 230) | def publish_inline_comment(self, body: str, relevant_file: str, releva... method publish_inline_comments (line 234) | def publish_inline_comments(self, comments: list[dict]): method get_title (line 237) | def get_title(self): method get_pr_id (line 240) | def get_pr_id(self): method get_languages (line 252) | def get_languages(self): method get_pr_branch (line 285) | def get_pr_branch(self): method get_pr_description_full (line 288) | def get_pr_description_full(self) -> str: method get_user_id (line 291) | def get_user_id(self): method get_issue_comments (line 294) | def get_issue_comments(self): method get_repo_settings (line 297) | def get_repo_settings(self): method add_eyes_reaction (line 302) | def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool ... method remove_reaction (line 306) | def remove_reaction(self, issue_comment_id: int, reaction_id: int) -> ... method _parse_pr_url (line 311) | def _parse_pr_url(pr_url: str) -> Tuple[str, int]: method _is_valid_codecommit_hostname (line 349) | def _is_valid_codecommit_hostname(hostname: str) -> bool: method _get_pr (line 364) | def _get_pr(self): method get_commit_messages (line 388) | def get_commit_messages(self): method _add_additional_newlines (line 392) | def _add_additional_newlines(body: str) -> str: method _remove_markdown_html (line 408) | def _remove_markdown_html(comment: str) -> str: method _get_edit_type (line 428) | def _get_edit_type(codecommit_change_type: str): method _get_file_extensions (line 452) | def _get_file_extensions(filenames): method _get_language_percentages (line 475) | def _get_language_percentages(extensions): FILE: pr_agent/git_providers/gerrit_provider.py function _call (line 22) | def _call(*command, **kwargs) -> (int, str, str): function clone (line 33) | def clone(url, directory): function fetch (line 39) | def fetch(url, refspec, cwd): function checkout (line 48) | def checkout(cwd): function show (line 54) | def show(*args, cwd=None): function diff (line 59) | def diff(*args, cwd=None): function reset_local_changes (line 68) | def reset_local_changes(cwd): function add_comment (line 73) | def add_comment(url: urllib3.util.Url, refspec, message): function list_comments (line 87) | def list_comments(url: urllib3.util.Url, refspec): function prepare_repo (line 102) | def prepare_repo(url: urllib3.util.Url, project, refspec): function adopt_to_gerrit_message (line 112) | def adopt_to_gerrit_message(message): function add_suggestion (line 138) | def add_suggestion(src_filename, context: str, start, end: int): function upload_patch (line 153) | def upload_patch(patch, path): class GerritProvider (line 175) | class GerritProvider(GitProvider): method __init__ (line 177) | def __init__(self, key: str, incremental=False): method get_pr_title (line 199) | def get_pr_title(self): method get_issue_comments (line 205) | def get_issue_comments(self): method get_pr_labels (line 211) | def get_pr_labels(self, update=False): method add_eyes_reaction (line 215) | def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool ... method remove_reaction (line 219) | def remove_reaction(self, issue_comment_id: int, reaction_id: int): method get_commit_messages (line 223) | def get_commit_messages(self): method get_repo_settings (line 226) | def get_repo_settings(self): method get_diff_files (line 234) | def get_diff_files(self) -> list[FilePatchInfo]: method get_files (line 276) | def get_files(self): method get_languages (line 285) | def get_languages(self): method get_pr_description_full (line 303) | def get_pr_description_full(self): method get_user_id (line 306) | def get_user_id(self): method is_supported (line 309) | def is_supported(self, capability: str) -> bool: method split_suggestion (line 320) | def split_suggestion(self, msg) -> tuple[str, str]: method publish_code_suggestions (line 343) | def publish_code_suggestions(self, code_suggestions: list): method publish_comment (line 364) | def publish_comment(self, pr_comment: str, is_temporary: bool = False): method publish_description (line 369) | def publish_description(self, pr_title: str, pr_body: str): method publish_inline_comments (line 373) | def publish_inline_comments(self, comments: list[dict]): method publish_inline_comment (line 378) | def publish_inline_comment(self, body: str, relevant_file: str, method publish_labels (line 385) | def publish_labels(self, labels): method remove_initial_comment (line 390) | def remove_initial_comment(self): method remove_comment (line 395) | def remove_comment(self, comment): method get_pr_branch (line 398) | def get_pr_branch(self): FILE: pr_agent/git_providers/git_provider.py function get_git_ssl_env (line 15) | def get_git_ssl_env() -> dict[str, str]: class GitProvider (line 74) | class GitProvider(ABC): method is_supported (line 76) | def is_supported(self, capability: str) -> bool: method get_git_repo_url (line 80) | def get_git_repo_url(self, issues_or_pr_url: str) -> str: method get_canonical_url_parts (line 87) | def get_canonical_url_parts(self, repo_git_url:str, desired_branch:str... class ScopedClonedRepo (line 99) | class ScopedClonedRepo(object): method __init__ (line 100) | def __init__(self, dest_folder): method __del__ (line 103) | def __del__(self): method _prepare_clone_url_with_token (line 108) | def _prepare_clone_url_with_token(self, repo_url_to_clone: str) -> str... method _clone_inner (line 114) | def _clone_inner(self, repo_url: str, dest_folder: str, operation_time... method clone (line 139) | def clone(self, repo_url_to_clone: str, dest_folder: str, remove_dest_... method get_files (line 158) | def get_files(self) -> list: method get_diff_files (line 162) | def get_diff_files(self) -> list[FilePatchInfo]: method get_incremental_commits (line 165) | def get_incremental_commits(self, is_incremental): method publish_description (line 169) | def publish_description(self, pr_title: str, pr_body: str): method publish_code_suggestions (line 173) | def publish_code_suggestions(self, code_suggestions: list) -> bool: method get_languages (line 177) | def get_languages(self): method get_pr_branch (line 181) | def get_pr_branch(self): method get_user_id (line 185) | def get_user_id(self): method get_pr_description_full (line 189) | def get_pr_description_full(self) -> str: method edit_comment (line 192) | def edit_comment(self, comment, body: str): method edit_comment_from_comment_id (line 195) | def edit_comment_from_comment_id(self, comment_id: int, body: str): method get_comment_body_from_comment_id (line 198) | def get_comment_body_from_comment_id(self, comment_id: int) -> str: method reply_to_comment_from_comment_id (line 201) | def reply_to_comment_from_comment_id(self, comment_id: int, body: str): method get_pr_description (line 204) | def get_pr_description(self, full: bool = True, split_changes_walkthro... method get_user_description (line 219) | def get_user_description(self) -> str: method _possible_headers (line 265) | def _possible_headers(self): method _is_generated_by_pr_agent (line 269) | def _is_generated_by_pr_agent(self, description_lowercase: str) -> bool: method get_repo_settings (line 274) | def get_repo_settings(self): method get_workspace_name (line 277) | def get_workspace_name(self): method get_pr_id (line 280) | def get_pr_id(self): method get_line_link (line 283) | def get_line_link(self, relevant_file: str, relevant_line_start: int, ... method get_lines_link_original_file (line 286) | def get_lines_link_original_file(self, filepath:str, component_range: ... method publish_comment (line 291) | def publish_comment(self, pr_comment: str, is_temporary: bool = False): method publish_persistent_comment (line 294) | def publish_persistent_comment(self, pr_comment: str, method publish_persistent_comment_full (line 301) | def publish_persistent_comment_full(self, pr_comment: str, method publish_inline_comment (line 330) | def publish_inline_comment(self, body: str, relevant_file: str, releva... method create_inline_comment (line 333) | def create_inline_comment(self, body: str, relevant_file: str, relevan... method publish_inline_comments (line 338) | def publish_inline_comments(self, comments: list[dict]): method remove_initial_comment (line 342) | def remove_initial_comment(self): method remove_comment (line 346) | def remove_comment(self, comment): method get_issue_comments (line 350) | def get_issue_comments(self): method get_comment_url (line 353) | def get_comment_url(self, comment) -> str: method get_review_thread_comments (line 356) | def get_review_thread_comments(self, comment_id: int) -> list[dict]: method publish_labels (line 361) | def publish_labels(self, labels): method get_pr_labels (line 365) | def get_pr_labels(self, update=False): method get_repo_labels (line 368) | def get_repo_labels(self): method add_eyes_reaction (line 372) | def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool ... method remove_reaction (line 376) | def remove_reaction(self, issue_comment_id: int, reaction_id: int) -> ... method get_commit_messages (line 381) | def get_commit_messages(self): method get_pr_url (line 384) | def get_pr_url(self) -> str: method get_latest_commit_url (line 389) | def get_latest_commit_url(self) -> str: method auto_approve (line 392) | def auto_approve(self) -> bool: method calc_pr_statistics (line 395) | def calc_pr_statistics(self, pull_request_data: dict): method get_num_of_files (line 398) | def get_num_of_files(self): method limit_output_characters (line 404) | def limit_output_characters(self, output: str, max_chars: int): function get_main_pr_language (line 408) | def get_main_pr_language(languages, files) -> str: class IncrementalPR (line 477) | class IncrementalPR: method __init__ (line 478) | def __init__(self, is_incremental: bool = False): method first_new_commit_sha (line 485) | def first_new_commit_sha(self): method last_seen_commit_sha (line 489) | def last_seen_commit_sha(self): FILE: pr_agent/git_providers/gitea_provider.py class GiteaProvider (line 20) | class GiteaProvider(GitProvider): method __init__ (line 21) | def __init__(self, url: Optional[str] = None): method __add_file_content (line 104) | def __add_file_content(self): method __add_file_diff (line 124) | def __add_file_diff(self): method _parse_pr_url (line 154) | def _parse_pr_url(self, pr_url: str) -> Tuple[str, str, int]: method _parse_issue_url (line 174) | def _parse_issue_url(self, issue_url: str) -> Tuple[str, str, int]: method __set_repo_and_owner_from_pr (line 194) | def __set_repo_and_owner_from_pr(self): method __set_repo_and_owner_from_issue (line 207) | def __set_repo_and_owner_from_issue(self): method get_pr_url (line 220) | def get_pr_url(self) -> str: method get_issue_url (line 223) | def get_issue_url(self) -> str: method get_latest_commit_url (line 226) | def get_latest_commit_url(self) -> str: method get_comment_url (line 229) | def get_comment_url(self, comment) -> str: method publish_persistent_comment (line 232) | def publish_persistent_comment(self, pr_comment: str, method publish_comment (line 239) | def publish_comment(self, comment: str,is_temporary: bool = False) -> ... method edit_comment (line 277) | def edit_comment(self, comment, body : str): method publish_inline_comment (line 294) | def publish_inline_comment(self,body: str, relevant_file: str, relevan... method publish_inline_comments (line 312) | def publish_inline_comments(self, comments: List[Dict[str, Any]],body ... method publish_code_suggestions (line 328) | def publish_code_suggestions(self, suggestions: List[Dict[str, Any]]): method add_eyes_reaction (line 347) | def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool ... method remove_reaction (line 384) | def remove_reaction(self, comment_id: int) -> None: method get_commit_messages (line 399) | def get_commit_messages(self)-> str: method _get_file_content_from_base (line 428) | def _get_file_content_from_base(self, filename: str) -> str: method _get_file_content_from_latest_commit (line 436) | def _get_file_content_from_latest_commit(self, filename: str) -> str: method get_diff_files (line 444) | def get_diff_files(self) -> List[FilePatchInfo]: method get_line_link (line 520) | def get_line_link(self, relevant_file, relevant_line_start, relevant_l... method get_pr_id (line 531) | def get_pr_id(self): method get_files (line 538) | def get_files(self) -> List[Dict[str, Any]]: method get_num_of_files (line 542) | def get_num_of_files(self) -> int: method get_issue_comments (line 546) | def get_issue_comments(self) -> List[Dict[str, Any]]: method get_languages (line 560) | def get_languages(self) -> Set[str]: method get_pr_branch (line 569) | def get_pr_branch(self) -> str: method get_pr_description_full (line 581) | def get_pr_description_full(self) -> str: method get_pr_labels (line 589) | def get_pr_labels(self,update=False) -> List[str]: method get_repo_settings (line 608) | def get_repo_settings(self) -> str: method get_user_id (line 626) | def get_user_id(self) -> str: method is_supported (line 630) | def is_supported(self, capability) -> bool: method get_git_repo_url (line 634) | def get_git_repo_url(self, issues_or_pr_url: str) -> str: method publish_description (line 637) | def publish_description(self, pr_title: str, pr_body: str) -> None: method publish_labels (line 659) | def publish_labels(self, labels: List[int]) -> None: method remove_comment (line 675) | def remove_comment(self, comment) -> None: method remove_initial_comment (line 699) | def remove_initial_comment(self) -> None: method _prepare_clone_url_with_token (line 712) | def _prepare_clone_url_with_token(self, repo_url_to_clone: str) -> str... class RepoApi (line 741) | class RepoApi(giteapy.RepositoryApi): method __init__ (line 742) | def __init__(self, client: giteapy.ApiClient): method create_inline_comment (line 748) | def create_inline_comment(self, owner: str, repo: str, pr_number: int,... method create_comment (line 763) | def create_comment(self, owner: str, repo: str, index: int, comment: s... method edit_comment (line 774) | def edit_comment(self, owner: str, repo: str, comment_id: int, comment... method remove_comment (line 785) | def remove_comment(self, owner: str, repo: str, comment_id: int): method list_all_comments (line 792) | def list_all_comments(self, owner: str, repo: str, index: int): method get_pull_request_diff (line 799) | def get_pull_request_diff(self, owner: str, repo: str, pr_number: int)... method get_pull_request (line 832) | def get_pull_request(self, owner: str, repo: str, pr_number: int): method edit_pull_request (line 840) | def edit_pull_request(self, owner: str, repo: str, pr_number: int,titl... method get_change_file_pull_request (line 853) | def get_change_file_pull_request(self, owner: str, repo: str, pr_numbe... method get_languages (line 886) | def get_languages(self, owner: str, repo: str): method get_file_content (line 917) | def get_file_content(self, owner: str, repo: str, commit_sha: str, fil... method get_issue_labels (line 953) | def get_issue_labels(self, owner: str, repo: str, issue_number: int): method list_all_commits (line 961) | def list_all_commits(self, owner: str, repo: str): method add_reviewer (line 967) | def add_reviewer(self, owner: str, repo: str, pr_number: int, reviewer... method add_reaction_comment (line 980) | def add_reaction_comment(self, owner: str, repo: str, comment_id: int,... method remove_reaction_comment (line 993) | def remove_reaction_comment(self, owner: str, repo: str, comment_id: i... method add_labels (line 1002) | def add_labels(self, owner: str, repo: str, issue_number: int, labels:... method get_pr_commits (line 1013) | def get_pr_commits(self, owner: str, repo: str, pr_number: int): FILE: pr_agent/git_providers/github_provider.py class GithubProvider (line 32) | class GithubProvider(GitProvider): method __init__ (line 33) | def __init__(self, pr_url: Optional[str] = None): method _get_issue_handle (line 61) | def _get_issue_handle(self, issue_url) -> Optional[Issue]: method get_incremental_commits (line 79) | def get_incremental_commits(self, incremental=IncrementalPR(False)): method is_supported (line 85) | def is_supported(self, capability: str) -> bool: method _get_owner_and_repo_path (line 88) | def _get_owner_and_repo_path(self, given_url: str) -> str: method get_git_repo_url (line 106) | def get_git_repo_url(self, issues_or_pr_url: str) -> str: method get_canonical_url_parts (line 116) | def get_canonical_url_parts(self, repo_git_url:str, desired_branch:str... method get_pr_url (line 145) | def get_pr_url(self) -> str: method set_pr (line 148) | def set_pr(self, pr_url: str): method _get_incremental_commits (line 152) | def _get_incremental_commits(self): method get_commit_range (line 170) | def get_commit_range(self): method get_previous_review (line 182) | def get_previous_review(self, *, full: bool, incremental: bool): method get_files (line 196) | def get_files(self): method get_num_of_files (line 211) | def get_num_of_files(self): method get_diff_files (line 222) | def get_diff_files(self) -> list[FilePatchInfo]: method publish_description (line 355) | def publish_description(self, pr_title: str, pr_body: str): method get_latest_commit_url (line 358) | def get_latest_commit_url(self) -> str: method get_comment_url (line 361) | def get_comment_url(self, comment) -> str: method publish_persistent_comment (line 364) | def publish_persistent_comment(self, pr_comment: str, method publish_comment (line 371) | def publish_comment(self, pr_comment: str, is_temporary: bool = False): method publish_inline_comment (line 394) | def publish_inline_comment(self, body: str, relevant_file: str, releva... method create_inline_comment (line 399) | def create_inline_comment(self, body: str, relevant_file: str, relevan... method publish_inline_comments (line 414) | def publish_inline_comments(self, comments: list[dict], disable_fallba... method get_review_thread_comments (line 432) | def get_review_thread_comments(self, comment_id: int) -> list[dict]: method _publish_inline_comments_fallback_with_verification (line 466) | def _publish_inline_comments_fallback_with_verification(self, comments... method _verify_code_comment (line 492) | def _verify_code_comment(self, comment: dict): method _verify_code_comments (line 513) | def _verify_code_comments(self, comments: list[dict]) -> tuple[list[di... method _try_fix_invalid_inline_comments (line 526) | def _try_fix_invalid_inline_comments(self, invalid_comments: list[dict... method publish_code_suggestions (line 551) | def publish_code_suggestions(self, code_suggestions: list) -> bool: method edit_comment (line 600) | def edit_comment(self, comment, body: str): method edit_comment_from_comment_id (line 613) | def edit_comment_from_comment_id(self, comment_id: int, body: str): method reply_to_comment_from_comment_id (line 624) | def reply_to_comment_from_comment_id(self, comment_id: int, body: str): method get_comment_body_from_comment_id (line 635) | def get_comment_body_from_comment_id(self, comment_id: int): method publish_file_comments (line 646) | def publish_file_comments(self, file_comments: list) -> bool: method remove_initial_comment (line 680) | def remove_initial_comment(self): method remove_comment (line 688) | def remove_comment(self, comment): method get_title (line 694) | def get_title(self): method get_languages (line 697) | def get_languages(self): method get_pr_branch (line 701) | def get_pr_branch(self): method get_pr_owner_id (line 704) | def get_pr_owner_id(self) -> str | None: method get_pr_description_full (line 709) | def get_pr_description_full(self): method get_user_id (line 712) | def get_user_id(self): method get_notifications (line 721) | def get_notifications(self, since: datetime): method get_issue_comments (line 730) | def get_issue_comments(self): method get_repo_settings (line 733) | def get_repo_settings(self): method get_workspace_name (line 743) | def get_workspace_name(self): method add_eyes_reaction (line 746) | def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool ... method remove_reaction (line 759) | def remove_reaction(self, issue_comment_id: int, reaction_id: str) -> ... method _parse_pr_url (line 771) | def _parse_pr_url(self, pr_url: str) -> Tuple[str, int]: method _parse_issue_url (line 799) | def _parse_issue_url(self, issue_url: str) -> Tuple[str, int]: method _get_github_client (line 827) | def _get_github_client(self): method _get_repo (line 854) | def _get_repo(self): method _get_pr (line 864) | def _get_pr(self): method get_pr_file_content (line 867) | def get_pr_file_content(self, file_path: str, branch: str) -> str: method create_or_update_pr_file (line 878) | def create_or_update_pr_file( method _get_pr_file_content (line 894) | def _get_pr_file_content(self, file: FilePatchInfo, sha: str) -> str: method publish_labels (line 897) | def publish_labels(self, pr_types): method get_pr_labels (line 912) | def get_pr_labels(self, update=False): method get_repo_labels (line 926) | def get_repo_labels(self): method get_commit_messages (line 930) | def get_commit_messages(self): method generate_link_to_relevant_line_number (line 948) | def generate_link_to_relevant_line_number(self, suggestion) -> str: method get_line_link (line 972) | def get_line_link(self, relevant_file: str, relevant_line_start: int, ... method get_lines_link_original_file (line 982) | def get_lines_link_original_file(self, filepath: str, component_range:... method get_pr_id (line 1009) | def get_pr_id(self): method fetch_sub_issues (line 1016) | def fetch_sub_issues(self, issue_url): method auto_approve (line 1094) | def auto_approve(self) -> bool: method calc_pr_statistics (line 1104) | def calc_pr_statistics(self, pull_request_data: dict): method validate_comments_inside_hunks (line 1107) | def validate_comments_inside_hunks(self, code_suggestions): method _prepare_clone_url_with_token (line 1193) | def _prepare_clone_url_with_token(self, repo_url_to_clone: str) -> str... FILE: pr_agent/git_providers/gitlab_provider.py class DiffNotFoundError (line 26) | class DiffNotFoundError(Exception): class GitLabProvider (line 30) | class GitLabProvider(GitProvider): method __init__ (line 32) | def __init__(self, merge_request_url: Optional[str] = None, incrementa... method _get_gitmodules_map (line 81) | def _get_gitmodules_map(self) -> dict[str, str]: method _url_to_project_path (line 153) | def _url_to_project_path(self, url: str) -> str | None: method _project_by_path (line 168) | def _project_by_path(self, proj_path: str): method _compare_submodule (line 209) | def _compare_submodule(self, proj_path: str, old_sha: str, new_sha: st... method _expand_submodule_changes (line 234) | def _expand_submodule_changes(self, changes: list[dict]) -> list[dict]: method is_supported (line 289) | def is_supported(self, capability: str) -> bool: method _get_project_path_from_pr_or_issue_url (line 295) | def _get_project_path_from_pr_or_issue_url(self, pr_or_issue_url: str)... method get_git_repo_url (line 307) | def get_git_repo_url(self, issues_or_pr_url: str) -> str: method get_canonical_url_parts (line 318) | def get_canonical_url_parts(self, repo_git_url:str=None, desired_branc... method pr (line 337) | def pr(self): method _set_merge_request (line 341) | def _set_merge_request(self, merge_request_url: str): method get_pr_file_content (line 350) | def get_pr_file_content(self, file_path: str, branch: str) -> str: method create_or_update_pr_file (line 363) | def create_or_update_pr_file(self, file_path: str, branch: str, conten... method get_diff_files (line 395) | def get_diff_files(self) -> list[FilePatchInfo]: method get_files (line 479) | def get_files(self) -> list: method publish_description (line 486) | def publish_description(self, pr_title: str, pr_body: str): method get_latest_commit_url (line 494) | def get_latest_commit_url(self): method get_comment_url (line 503) | def get_comment_url(self, comment): method publish_persistent_comment (line 506) | def publish_persistent_comment(self, pr_comment: str, method publish_comment (line 513) | def publish_comment(self, mr_comment: str, is_temporary: bool = False): method edit_comment (line 523) | def edit_comment(self, comment, body: str): method edit_comment_from_comment_id (line 527) | def edit_comment_from_comment_id(self, comment_id: int, body: str): method reply_to_comment_from_comment_id (line 533) | def reply_to_comment_from_comment_id(self, comment_id: int, body: str): method publish_inline_comment (line 538) | def publish_inline_comment(self, body: str, relevant_file: str, releva... method create_inline_comment (line 545) | def create_inline_comment(self, body: str, relevant_file: str, relevan... method create_inline_comments (line 548) | def create_inline_comments(self, comments: list[dict]): method get_comment_body_from_comment_id (line 551) | def get_comment_body_from_comment_id(self, comment_id: int): method send_inline_comment (line 555) | def send_inline_comment(self, body: str, edit_type: str, found: bool, ... method get_relevant_diff (line 638) | def get_relevant_diff(self, relevant_file: str, relevant_line_in_file:... method publish_code_suggestions (line 657) | def publish_code_suggestions(self, code_suggestions: list) -> bool: method publish_file_comments (line 697) | def publish_file_comments(self, file_comments: list) -> bool: method search_line (line 700) | def search_line(self, relevant_file, relevant_line_in_file): method find_in_file (line 710) | def find_in_file(self, file, relevant_line_in_file): method get_edit_type (line 746) | def get_edit_type(self, relevant_line_in_file): method remove_initial_comment (line 754) | def remove_initial_comment(self): method remove_comment (line 761) | def remove_comment(self, comment): method get_title (line 767) | def get_title(self): method get_languages (line 770) | def get_languages(self): method get_pr_branch (line 774) | def get_pr_branch(self): method get_pr_owner_id (line 777) | def get_pr_owner_id(self) -> str | None: method get_pr_description_full (line 786) | def get_pr_description_full(self): method get_issue_comments (line 789) | def get_issue_comments(self): method get_repo_settings (line 792) | def get_repo_settings(self): method get_workspace_name (line 800) | def get_workspace_name(self): method add_eyes_reaction (line 803) | def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool ... method remove_reaction (line 826) | def remove_reaction(self, issue_comment_id: int, reaction_id: str) -> ... method _parse_merge_request_url (line 851) | def _parse_merge_request_url(self, merge_request_url: str) -> Tuple[st... method _get_merge_request (line 876) | def _get_merge_request(self): method get_user_id (line 880) | def get_user_id(self): method publish_labels (line 883) | def publish_labels(self, pr_types): method publish_inline_comments (line 890) | def publish_inline_comments(self, comments: list[dict]): method get_pr_labels (line 893) | def get_pr_labels(self, update=False): method get_repo_labels (line 896) | def get_repo_labels(self): method get_commit_messages (line 899) | def get_commit_messages(self): method get_pr_id (line 916) | def get_pr_id(self): method get_line_link (line 923) | def get_line_link(self, relevant_file: str, relevant_line_start: int, ... method generate_link_to_relevant_line_number (line 933) | def generate_link_to_relevant_line_number(self, suggestion) -> str: method _prepare_clone_url_with_token (line 957) | def _prepare_clone_url_with_token(self, repo_url_to_clone: str) -> str... FILE: pr_agent/git_providers/local_git_provider.py class PullRequestMimic (line 13) | class PullRequestMimic: method __init__ (line 18) | def __init__(self, title: str, diff_files: List[FilePatchInfo]): class LocalGitProvider (line 23) | class LocalGitProvider(GitProvider): method __init__ (line 32) | def __init__(self, target_branch_name, incremental=False): method _prepare_repo (line 49) | def _prepare_repo(self): method is_supported (line 59) | def is_supported(self, capability: str) -> bool: method get_diff_files (line 65) | def get_diff_files(self) -> list[FilePatchInfo]: method get_files (line 100) | def get_files(self) -> List[str]: method publish_description (line 112) | def publish_description(self, pr_title: str, pr_body: str): method publish_comment (line 117) | def publish_comment(self, pr_comment: str, is_temporary: bool = False): method publish_inline_comment (line 122) | def publish_inline_comment(self, body: str, relevant_file: str, releva... method publish_inline_comments (line 125) | def publish_inline_comments(self, comments: list[dict]): method publish_code_suggestion (line 128) | def publish_code_suggestion(self, body: str, relevant_file: str, method publish_code_suggestions (line 132) | def publish_code_suggestions(self, code_suggestions: list) -> bool: method publish_labels (line 135) | def publish_labels(self, labels): method remove_initial_comment (line 138) | def remove_initial_comment(self): method remove_comment (line 141) | def remove_comment(self, comment): method add_eyes_reaction (line 144) | def add_eyes_reaction(self, comment): method get_commit_messages (line 147) | def get_commit_messages(self): method get_repo_settings (line 150) | def get_repo_settings(self): method remove_reaction (line 153) | def remove_reaction(self, comment): method get_languages (line 156) | def get_languages(self): method get_pr_branch (line 169) | def get_pr_branch(self): method get_user_id (line 172) | def get_user_id(self): method get_pr_description_full (line 175) | def get_pr_description_full(self): method get_pr_title (line 182) | def get_pr_title(self): method get_issue_comments (line 188) | def get_issue_comments(self): method get_pr_labels (line 191) | def get_pr_labels(self, update=False): FILE: pr_agent/git_providers/utils.py function apply_repo_settings (line 14) | def apply_repo_settings(pr_url): function handle_configurations_errors (line 93) | def handle_configurations_errors(config_errors, git_provider): function set_claude_model (line 123) | def set_claude_model(): FILE: pr_agent/identity_providers/__init__.py function get_identity_provider (line 10) | def get_identity_provider(): FILE: pr_agent/identity_providers/default_identity_provider.py class DefaultIdentityProvider (line 5) | class DefaultIdentityProvider(IdentityProvider): method verify_eligibility (line 6) | def verify_eligibility(self, git_provider, git_provider_id, pr_url): method inc_invocation_count (line 9) | def inc_invocation_count(self, git_provider, git_provider_id): FILE: pr_agent/identity_providers/identity_provider.py class Eligibility (line 5) | class Eligibility(Enum): class IdentityProvider (line 11) | class IdentityProvider(ABC): method verify_eligibility (line 13) | def verify_eligibility(self, git_provider, git_provider_id, pr_url): method inc_invocation_count (line 17) | def inc_invocation_count(self, git_provider, git_provider_id): FILE: pr_agent/log/__init__.py class LoggingFormat (line 13) | class LoggingFormat(str, Enum): function json_format (line 18) | def json_format(record: dict) -> str: function analytics_filter (line 22) | def analytics_filter(record: dict) -> bool: function inv_analytics_filter (line 26) | def inv_analytics_filter(record: dict) -> bool: function setup_logger (line 30) | def setup_logger(level: str = "INFO", fmt: LoggingFormat = LoggingFormat... function get_logger (line 65) | def get_logger(*args, **kwargs): FILE: pr_agent/secret_providers/__init__.py function get_secret_provider (line 4) | def get_secret_provider(): FILE: pr_agent/secret_providers/aws_secrets_manager_provider.py class AWSSecretsManagerProvider (line 10) | class AWSSecretsManagerProvider(SecretProvider): method __init__ (line 11) | def __init__(self): method get_secret (line 27) | def get_secret(self, secret_name: str) -> str: method get_all_secrets (line 38) | def get_all_secrets(self) -> dict: method store_secret (line 49) | def store_secret(self, secret_name: str, secret_value: str): FILE: pr_agent/secret_providers/google_cloud_storage_secret_provider.py class GoogleCloudStorageSecretProvider (line 9) | class GoogleCloudStorageSecretProvider(SecretProvider): method __init__ (line 10) | def __init__(self): method get_secret (line 20) | def get_secret(self, secret_name: str) -> str: method store_secret (line 28) | def store_secret(self, secret_name: str, secret_value: str): FILE: pr_agent/secret_providers/secret_provider.py class SecretProvider (line 4) | class SecretProvider(ABC): method get_secret (line 7) | def get_secret(self, secret_name: str) -> str: method store_secret (line 11) | def store_secret(self, secret_name: str, secret_value: str): FILE: pr_agent/servers/azuredevops_server_webhook.py function handle_request_comment (line 38) | async def handle_request_comment(url: str, body: str, thread_id: int, co... function handle_line_comment (line 54) | def handle_line_comment(body: str, thread_id: int, provider: AzureDevops... function authorize (line 80) | def authorize(credentials: HTTPBasicCredentials = Depends(security)): function _perform_commands_azure (line 94) | async def _perform_commands_azure(commands_conf: str, agent: PRAgent, ap... function handle_request_azure (line 118) | async def handle_request_azure(data, log_context): function handle_webhook (line 172) | async def handle_webhook(background_tasks: BackgroundTasks, request: Req... function root (line 184) | async def root(): function start (line 187) | def start(): FILE: pr_agent/servers/bitbucket_app.py function get_bearer_token (line 33) | async def get_bearer_token(shared_secret: str, client_key: str): function handle_manifest (line 62) | async def handle_manifest(request: Request, response: Response): function _get_username (line 74) | def _get_username(data): function _validate_time_from_last_commit_to_pr_update (line 86) | async def _validate_time_from_last_commit_to_pr_update(data: dict) -> bool: function _perform_commands_bitbucket (line 139) | async def _perform_commands_bitbucket(commands_conf: str, agent: PRAgent... function is_bot_user (line 173) | def is_bot_user(data) -> bool: function should_process_pr_logic (line 186) | def should_process_pr_logic(data) -> bool: function handle_github_webhooks (line 235) | async def handle_github_webhooks(background_tasks: BackgroundTasks, requ... function handle_github_webhooks (line 311) | async def handle_github_webhooks(request: Request, response: Response): function handle_installed_webhooks (line 315) | async def handle_installed_webhooks(request: Request, response: Response): function handle_uninstalled_webhooks (line 334) | async def handle_uninstalled_webhooks(request: Request, response: Respon... function start (line 341) | def start(): FILE: pr_agent/servers/bitbucket_server_webhook.py function handle_request (line 29) | def handle_request( function should_process_pr_logic (line 44) | def should_process_pr_logic(data) -> bool: function redirect_to_webhook (line 127) | async def redirect_to_webhook(): function handle_webhook (line 131) | async def handle_webhook(background_tasks: BackgroundTasks, request: Req... function _run_commands_sequentially (line 203) | async def _run_commands_sequentially(commands: List[str], url: str, log_... function _process_command (line 220) | def _process_command(command: str, url) -> str: function _to_list (line 233) | def _to_list(command_string: str) -> list: function _get_commands_list_from_settings (line 246) | def _get_commands_list_from_settings(setting_key:str ) -> list: function root (line 254) | async def root(): function start (line 258) | def start(): FILE: pr_agent/servers/gerrit_server.py class Action (line 20) | class Action(str, Enum): class Item (line 29) | class Item(BaseModel): function handle_gerrit_request (line 36) | async def handle_gerrit_request(action: Action, item: Item): function get_body (line 52) | async def get_body(request): function root (line 62) | async def root(): function start (line 66) | def start(): FILE: pr_agent/servers/gitea_app.py function handle_gitea_webhooks (line 24) | async def handle_gitea_webhooks(background_tasks: BackgroundTasks, reque... function get_body (line 38) | async def get_body(request: Request): function handle_request (line 64) | async def handle_request(body: Dict[str, Any], event: str): function handle_pr_event (line 86) | async def handle_pr_event(body: Dict[str, Any], event: str, action: str,... function handle_comment_event (line 114) | async def handle_comment_event(body: Dict[str, Any], event: str, action:... function _perform_commands_gitea (line 130) | async def _perform_commands_gitea(commands_conf: str, agent: PRAgent, bo... function should_process_pr_logic (line 151) | def should_process_pr_logic(body) -> bool: function start (line 214) | def start(): FILE: pr_agent/servers/github_action_runner.py function is_true (line 17) | def is_true(value: Union[str, bool]) -> bool: function get_setting_or_env (line 25) | def get_setting_or_env(key: str, default: Union[str, bool] = None) -> Un... function run_action (line 33) | async def run_action(): FILE: pr_agent/servers/github_app.py function handle_github_webhooks (line 39) | async def handle_github_webhooks(background_tasks: BackgroundTasks, requ... function handle_marketplace_webhooks (line 58) | async def handle_marketplace_webhooks(request: Request, response: Respon... function get_body (line 63) | async def get_body(request): function handle_comments_on_pr (line 80) | async def handle_comments_on_pr(body: Dict[str, Any], function handle_new_pr_opened (line 124) | async def handle_new_pr_opened(body: Dict[str, Any], function handle_push_trigger_for_new_commits (line 145) | async def handle_push_trigger_for_new_commits(body: Dict[str, Any], function handle_closed_pr (line 209) | def handle_closed_pr(body, event, action, log_context): function get_log_context (line 220) | def get_log_context(body, event, action, build_number): function is_bot_user (line 241) | def is_bot_user(sender, sender_type): function should_process_pr_logic (line 253) | def should_process_pr_logic(body) -> bool: function handle_request (line 312) | async def handle_request(body: Dict[str, Any], event: str): function handle_line_comments (line 361) | def handle_line_comments(body: Dict, comment_body: [str, Any]) -> str: function _check_pull_request_event (line 378) | def _check_pull_request_event(action: str, body: dict, log_context: dict... function _perform_auto_commands_github (line 395) | async def _perform_auto_commands_github(commands_conf: str, agent: PRAge... function root (line 419) | async def root(): function start (line 432) | def start(): FILE: pr_agent/servers/github_lambda_webhook.py function lambda_handler (line 26) | def lambda_handler(event, context): FILE: pr_agent/servers/github_polling.py function mark_notification_as_read (line 20) | async def mark_notification_as_read(headers, notification, session): function now (line 29) | def now() -> str: function async_handle_request (line 40) | async def async_handle_request(pr_url, rest_of_comment, comment_id, git_... function run_handle_request (line 49) | def run_handle_request(pr_url, rest_of_comment, comment_id, git_provider): function process_comment_sync (line 53) | def process_comment_sync(pr_url, rest_of_comment, comment_id): function process_comment (line 62) | async def process_comment(pr_url, rest_of_comment, comment_id): function is_valid_notification (line 76) | async def is_valid_notification(notification, headers, handled_ids, sess... function polling_loop (line 145) | async def polling_loop(): FILE: pr_agent/servers/gitlab_lambda_webhook.py function lambda_handler (line 26) | def lambda_handler(event, context): FILE: pr_agent/servers/gitlab_webhook.py function handle_request (line 30) | async def handle_request(api_url: str, body: str, log_context: dict, sen... function _perform_commands_gitlab (line 39) | async def _perform_commands_gitlab(commands_conf: str, agent: PRAgent, a... function is_bot_user (line 63) | def is_bot_user(data) -> bool: function is_draft (line 75) | def is_draft(data) -> bool: function is_draft_ready (line 87) | def is_draft_ready(data) -> bool: function should_process_pr_logic (line 111) | def should_process_pr_logic(data) -> bool: function gitlab_webhook (line 171) | async def gitlab_webhook(background_tasks: BackgroundTasks, request: Req... function handle_ask_line (line 279) | def handle_ask_line(body, data): function root (line 300) | async def root(): function start (line 312) | def start(): FILE: pr_agent/servers/help.py class HelpMessage (line 1) | class HelpMessage: method get_general_commands_text (line 3) | def get_general_commands_text(): method get_general_bot_help_text (line 18) | def get_general_bot_help_text(): method get_review_usage_guide (line 23) | def get_review_usage_guide(): method get_describe_usage_guide (line 47) | def get_describe_usage_guide(): method get_ask_usage_guide (line 142) | def get_ask_usage_guide(): method get_improve_usage_guide (line 169) | def get_improve_usage_guide(): method get_help_docs_usage_guide (line 196) | def get_help_docs_usage_guide(): FILE: pr_agent/servers/utils.py function verify_signature (line 10) | def verify_signature(payload_body, secret_token, signature_header): class RateLimitExceeded (line 28) | class RateLimitExceeded(Exception): class DefaultDictWithTimeout (line 33) | class DefaultDictWithTimeout(defaultdict): method __init__ (line 36) | def __init__( method __time (line 60) | def __time(): method __refresh (line 63) | def __refresh(self): method __getitem__ (line 74) | def __getitem__(self, __key): method __setitem__ (line 80) | def __setitem__(self, __key, __value): method __delitem__ (line 84) | def __delitem__(self, __key): FILE: pr_agent/tools/pr_add_docs.py class PRAddDocs (line 19) | class PRAddDocs: method __init__ (line 20) | def __init__(self, pr_url: str, cli_mode=False, args: list = None, method run (line 50) | async def run(self): method _prepare_prediction (line 71) | async def _prepare_prediction(self, model: str): method _get_prediction (line 83) | async def _get_prediction(self, model: str): method _prepare_pr_code_docs (line 97) | def _prepare_pr_code_docs(self) -> Dict: method push_inline_docs (line 104) | def push_inline_docs(self, data): method dedent_code (line 136) | def dedent_code(self, relevant_file, relevant_lines_start, new_code_sn... function get_docs_for_language (line 169) | def get_docs_for_language(language, style): FILE: pr_agent/tools/pr_code_suggestions.py class PRCodeSuggestions (line 33) | class PRCodeSuggestions: method __init__ (line 34) | def __init__(self, pr_url: str, cli_mode=False, args: list = None, method run (line 93) | async def run(self): method add_self_review_text (line 197) | async def add_self_review_text(self, pr_body): method publish_no_suggestions (line 210) | async def publish_no_suggestions(self): method dual_publishing (line 223) | async def dual_publishing(self, data): method publish_persistent_comment_with_history (line 243) | def publish_persistent_comment_with_history(git_provider: GitProvider, method extract_link (line 358) | def extract_link(self, s): method _prepare_prediction (line 367) | async def _prepare_prediction(self, model: str) -> dict: method _get_prediction (line 386) | async def _get_prediction(self, model: str, patches_diff: str, patches... method analyze_self_reflection_response (line 422) | async def analyze_self_reflection_response(self, data, response_reflect): method _truncate_if_needed (line 477) | def _truncate_if_needed(suggestion): method _prepare_pr_code_suggestions (line 488) | def _prepare_pr_code_suggestions(self, predictions: str) -> Dict: method push_inline_code_suggestions (line 539) | async def push_inline_code_suggestions(self, data): method dedent_code (line 581) | def dedent_code(self, relevant_file, relevant_lines_start, new_code_sn... method validate_one_liner_suggestion_not_repeating_code (line 621) | def validate_one_liner_suggestion_not_repeating_code(self, suggestion): method remove_line_numbers (line 648) | def remove_line_numbers(self, patches_diff_list: List[str]) -> List[str]: method prepare_prediction_main (line 670) | async def prepare_prediction_main(self, model: str) -> dict: method convert_to_decoupled_with_line_numbers (line 736) | async def convert_to_decoupled_with_line_numbers(self, patches_diff_li... method generate_summarized_suggestions (line 772) | def generate_summarized_suggestions(self, data: Dict) -> str: method get_score_str (line 892) | def get_score_str(self, score: int) -> str: method self_reflect_on_suggestions (line 902) | async def self_reflect_on_suggestions(self, FILE: pr_agent/tools/pr_config.py class PRConfig (line 8) | class PRConfig: method __init__ (line 12) | def __init__(self, pr_url: str, args=None, ai_handler=None): method run (line 22) | async def run(self): method _prepare_pr_configs (line 32) | def _prepare_pr_configs(self) -> str: FILE: pr_agent/tools/pr_description.py class PRDescription (line 33) | class PRDescription: method __init__ (line 34) | def __init__(self, pr_url: str, args: list = None, method run (line 95) | async def run(self): method _prepare_prediction (line 203) | async def _prepare_prediction(self, model: str) -> None: method extend_uncovered_files (line 324) | async def extend_uncovered_files(self, original_prediction: str) -> str: method extend_additional_files (line 396) | async def extend_additional_files(self, remaining_files_list) -> str: method _get_prediction (line 425) | async def _get_prediction(self, model: str, patches_diff: str, prompt=... method _prepare_data (line 445) | def _prepare_data(self): method _prepare_labels (line 472) | def _prepare_labels(self) -> List[str]: method _prepare_pr_answer_with_markers (line 499) | def _prepare_pr_answer_with_markers(self) -> Tuple[str, str, str, List... method _prepare_pr_answer (line 550) | def _prepare_pr_answer(self) -> Tuple[str, str, str, List[dict]]: method _prepare_file_labels (line 626) | def _prepare_file_labels(self): method process_pr_files_prediction (line 660) | def process_pr_files_prediction(self, pr_body, value): method add_file_data (line 740) | def add_file_data(self, delta_nbsp, diff_plus_minus, file_change_descr... function count_chars_without_html (line 774) | def count_chars_without_html(string): function insert_br_after_x_chars (line 781) | def insert_br_after_x_chars(text: str, x=70): function replace_code_tags (line 855) | def replace_code_tags(text): FILE: pr_agent/tools/pr_generate_labels.py class PRGenerateLabels (line 19) | class PRGenerateLabels: method __init__ (line 20) | def __init__(self, pr_url: str, args: list = None, method run (line 65) | async def run(self): method _prepare_prediction (line 104) | async def _prepare_prediction(self, model: str) -> None: method _get_prediction (line 124) | async def _get_prediction(self, model: str) -> str: method _prepare_data (line 153) | def _prepare_data(self): method _prepare_labels (line 159) | def _prepare_labels(self) -> List[str]: FILE: pr_agent/tools/pr_help_docs.py function modify_answer_section (line 23) | def modify_answer_section(ai_response: str) -> str | None: function extract_model_answer_and_relevant_sources (line 48) | def extract_model_answer_and_relevant_sources(ai_response: str) -> str |... function get_maximal_text_input_length_for_token_count_estimation (line 75) | def get_maximal_text_input_length_for_token_count_estimation(): function return_document_headings (line 81) | def return_document_headings(text: str, ext: str) -> str: function map_documentation_files_to_contents (line 120) | def map_documentation_files_to_contents(base_path: str, doc_files: list[... function aggregate_documentation_files_for_prompt_contents (line 147) | def aggregate_documentation_files_for_prompt_contents(file_path_to_conte... function format_markdown_q_and_a_response (line 169) | def format_markdown_q_and_a_response(question_str: str, response_str: st... function format_markdown_header (line 194) | def format_markdown_header(header: str) -> str: function clean_markdown_content (line 221) | def clean_markdown_content(content: str) -> str: class PredictionPreparator (line 259) | class PredictionPreparator: method __init__ (line 260) | def __init__(self, ai_handler, vars, system_prompt, user_prompt): method __call__ (line 272) | async def __call__(self, model: str) -> str: class PRHelpDocs (line 285) | class PRHelpDocs(object): method __init__ (line 286) | def __init__(self, ctx_url, ai_handler:partial[BaseAiHandler,] = LiteL... method run (line 329) | async def run(self): method _find_all_document_files_matching_exts (line 396) | def _find_all_document_files_matching_exts(self, abs_docs_path: str, i... method _gen_filenames_to_contents_map_from_repo (line 421) | def _gen_filenames_to_contents_map_from_repo(self) -> dict[str, str]: method _trim_docs_input (line 457) | def _trim_docs_input(self, docs_input: str, max_allowed_txt_input: int... method _rank_docs_and_return_them_as_prompt (line 494) | async def _rank_docs_and_return_them_as_prompt(self, docs_filepath_to_... method _format_model_answer (line 536) | def _format_model_answer(self, response_str: str, relevant_sections: l... FILE: pr_agent/tools/pr_help_message.py function extract_header (line 19) | def extract_header(snippet): class PRHelpMessage (line 32) | class PRHelpMessage: method __init__ (line 33) | def __init__(self, pr_url: str, args=None, ai_handler: partial[BaseAiH... method _prepare_prediction (line 48) | async def _prepare_prediction(self, model: str): method parse_args (line 61) | def parse_args(self, args): method format_markdown_header (line 68) | def format_markdown_header(self, header: str) -> str: method run (line 96) | async def run(self): method prepare_relevant_snippets (line 272) | async def prepare_relevant_snippets(self, sim_results): function generate_bbdc_table (line 293) | def generate_bbdc_table(column_arr_1, column_arr_2): FILE: pr_agent/tools/pr_line_questions.py class PR_LineQuestions (line 21) | class PR_LineQuestions: method __init__ (line 22) | def __init__(self, pr_url: str, args=None, ai_handler: partial[BaseAiH... method parse_args (line 47) | def parse_args(self, args): method run (line 55) | async def run(self): method _load_conversation_history (line 103) | def _load_conversation_history(self) -> str: method _get_prediction (line 151) | async def _get_prediction(self, model: str): FILE: pr_agent/tools/pr_questions.py class PRQuestions (line 18) | class PRQuestions: method __init__ (line 19) | def __init__(self, pr_url: str, args=None, ai_handler: partial[BaseAiH... method parse_args (line 46) | def parse_args(self, args): method run (line 53) | async def run(self): method identify_image_in_comment (line 81) | def identify_image_in_comment(self): method _prepare_prediction (line 94) | async def _prepare_prediction(self, model: str): method _get_prediction (line 103) | async def _get_prediction(self, model: str): method gitlab_protections (line 119) | def gitlab_protections(self, model_answer: str) -> str: method _prepare_pr_answer (line 128) | def _prepare_pr_answer(self) -> str: FILE: pr_agent/tools/pr_reviewer.py class PRReviewer (line 30) | class PRReviewer: method __init__ (line 35) | def __init__(self, pr_url: str, is_answer: bool = False, is_auto: bool... method parse_incremental (line 111) | def parse_incremental(self, args: List[str]): method run (line 120) | async def run(self) -> None: method _should_publish_review_no_suggestions (line 186) | def _should_publish_review_no_suggestions(self, pr_review: str) -> bool: method _prepare_prediction (line 189) | async def _prepare_prediction(self, model: str) -> None: method _get_prediction (line 203) | async def _get_prediction(self, model: str) -> str: method _prepare_pr_review (line 229) | def _prepare_pr_review(self) -> str: method _get_user_answers (line 281) | def _get_user_answers(self) -> Tuple[str, str]: method _get_previous_review_comment (line 305) | def _get_previous_review_comment(self): method _remove_previous_review_comment (line 318) | def _remove_previous_review_comment(self, comment): method _can_run_incremental_review (line 328) | def _can_run_incremental_review(self) -> bool: method set_review_labels (line 365) | def set_review_labels(self, data): method auto_approve_logic (line 417) | def auto_approve_logic(self): FILE: pr_agent/tools/pr_similar_issue.py class PRSimilarIssue (line 18) | class PRSimilarIssue: method __init__ (line 19) | def __init__(self, issue_url: str, ai_handler, args: list = None): method run (line 260) | async def run(self): method _process_issue (line 390) | def _process_issue(self, issue): method _update_index_with_issues (line 401) | def _update_index_with_issues(self, issues_list, repo_name_for_index, ... method _update_table_with_issues (line 496) | def _update_table_with_issues(self, issues_list, repo_name_for_index, ... method _update_qdrant_with_issues (line 587) | def _update_qdrant_with_issues(self, issues_list, repo_name_for_index,... class IssueLevel (line 682) | class IssueLevel(str, Enum): class Metadata (line 687) | class Metadata(BaseModel): class Config (line 693) | class Config: class Record (line 697) | class Record(BaseModel): class Corpus (line 703) | class Corpus(BaseModel): method append (line 706) | def append(self, r: Record): FILE: pr_agent/tools/pr_update_changelog.py class PRUpdateChangelog (line 22) | class PRUpdateChangelog: method __init__ (line 23) | def __init__(self, pr_url: str, cli_mode=False, args=None, ai_handler:... method run (line 55) | async def run(self): method _prepare_prediction (line 94) | async def _prepare_prediction(self, model: str): method _get_prediction (line 103) | async def _get_prediction(self, model: str): method _prepare_changelog_update (line 125) | def _prepare_changelog_update(self) -> Tuple[str, str]: method _push_changelog_update (line 143) | def _push_changelog_update(self, new_file_content, answer): method _get_default_changelog (line 170) | def _get_default_changelog(self): method _get_changelog_file (line 185) | def _get_changelog_file(self): FILE: pr_agent/tools/ticket_pr_compliance_check.py function find_jira_tickets (line 16) | def find_jira_tickets(text): function extract_ticket_links_from_pr_description (line 38) | def extract_ticket_links_from_pr_description(pr_description, repo_path, ... function extract_ticket_links_from_branch_name (line 68) | def extract_ticket_links_from_branch_name(branch_name, repo_path, base_u... function extract_tickets (line 108) | async def extract_tickets(git_provider): function extract_and_cache_pr_tickets (line 224) | async def extract_and_cache_pr_tickets(git_provider, vars): function check_tickets_relevancy (line 252) | def check_tickets_relevancy(): FILE: tests/e2e_tests/langchain_ai_handler.py function check_settings (line 9) | def check_settings(): function measure_performance (line 25) | async def measure_performance(handler, num_requests=3): function test (line 53) | async def test(): FILE: tests/e2e_tests/test_bitbucket_app.py function test_e2e_run_bitbucket_app (line 27) | def test_e2e_run_bitbucket_app(): FILE: tests/e2e_tests/test_gitea_app.py function test_e2e_run_gitea_app (line 22) | def test_e2e_run_gitea_app(): FILE: tests/e2e_tests/test_github_app.py function test_e2e_run_github_app (line 23) | def test_e2e_run_github_app(): FILE: tests/e2e_tests/test_gitlab_webhook.py function test_e2e_run_github_app (line 24) | def test_e2e_run_github_app(): FILE: tests/health_test/main.py function run_async (line 19) | async def run_async(): function run (line 62) | def run(): FILE: tests/unittest/test_add_docs_trigger.py function test_add_docs_trigger (line 21) | async def test_add_docs_trigger(monkeypatch, action, draft, state, shoul... FILE: tests/unittest/test_aws_secrets_manager_provider.py class TestAWSSecretsManagerProvider (line 10) | class TestAWSSecretsManagerProvider: method _provider (line 12) | def _provider(self): method test_get_secret_success (line 35) | def test_get_secret_success(self): method test_get_all_secrets_success (line 43) | def test_get_all_secrets_success(self): method test_get_secret_failure (line 52) | def test_get_secret_failure(self): method test_get_all_secrets_failure (line 59) | def test_get_all_secrets_failure(self): method test_store_secret_update_existing (line 66) | def test_store_secret_update_existing(self): method test_init_failure_invalid_config (line 76) | def test_init_failure_invalid_config(self): method test_store_secret_failure (line 85) | def test_store_secret_failure(self): FILE: tests/unittest/test_azure_devops_comment.py class TestAzureDevopsProviderPublishComment (line 8) | class TestAzureDevopsProviderPublishComment(unittest.TestCase): method test_publish_comment_default_closed (line 10) | def test_publish_comment_default_closed(self, mock_get_settings): method test_publish_comment_active (line 34) | def test_publish_comment_active(self, mock_get_settings): method test_default_comment_status_from_config_file (line 57) | def test_default_comment_status_from_config_file(self): FILE: tests/unittest/test_azure_devops_parsing.py class TestAzureDevOpsParsing (line 4) | class TestAzureDevOpsParsing: method test_regular_address (line 5) | def test_regular_address(self): method test_visualstudio_address (line 11) | def test_visualstudio_address(self): method test_self_hosted_address (line 17) | def test_self_hosted_address(self): FILE: tests/unittest/test_bitbucket_provider.py class TestBitbucketProvider (line 10) | class TestBitbucketProvider: method test_parse_pr_url (line 11) | def test_parse_pr_url(self): class TestBitbucketServerProvider (line 19) | class TestBitbucketServerProvider: method test_parse_pr_url (line 20) | def test_parse_pr_url(self): method test_parse_pr_url_with_users (line 27) | def test_parse_pr_url_with_users(self): method mock_get_content_of_file (line 34) | def mock_get_content_of_file(self, project_key, repository_slug, filen... method mock_get_from_bitbucket_60 (line 47) | def mock_get_from_bitbucket_60(self, url): method mock_get_from_bitbucket_70 (line 55) | def mock_get_from_bitbucket_70(self, url): method mock_get_from_bitbucket_816 (line 63) | def mock_get_from_bitbucket_816(self, url): method test_get_diff_files_simple_diverge_70 (line 84) | def test_get_diff_files_simple_diverge_70(self): method test_get_diff_files_diverge_with_merge_commit_70 (line 137) | def test_get_diff_files_diverge_with_merge_commit_70(self): method get_multi_merge_diverge_mock_client (line 199) | def get_multi_merge_diverge_mock_client(self, api_version): method test_get_diff_files_multi_merge_diverge_60 (line 242) | def test_get_diff_files_multi_merge_diverge_60(self): method test_get_diff_files_multi_merge_diverge_70 (line 264) | def test_get_diff_files_multi_merge_diverge_70(self): method test_get_diff_files_multi_merge_diverge_816 (line 286) | def test_get_diff_files_multi_merge_diverge_816(self): FILE: tests/unittest/test_clip_tokens.py class TestClipTokens (line 9) | class TestClipTokens: method test_empty_input_text (line 12) | def test_empty_input_text(self): method test_text_under_token_limit (line 17) | def test_text_under_token_limit(self): method test_text_exactly_at_token_limit (line 24) | def test_text_exactly_at_token_limit(self): method test_text_over_token_limit_with_three_dots (line 36) | def test_text_over_token_limit_with_three_dots(self): method test_text_over_token_limit_without_three_dots (line 50) | def test_text_over_token_limit_without_three_dots(self): method test_negative_max_tokens (line 64) | def test_negative_max_tokens(self): method test_zero_max_tokens (line 73) | def test_zero_max_tokens(self): method test_delete_last_line_functionality (line 79) | def test_delete_last_line_functionality(self): method test_pre_computed_num_input_tokens (line 98) | def test_pre_computed_num_input_tokens(self): method test_pre_computed_tokens_under_limit (line 112) | def test_pre_computed_tokens_under_limit(self): method test_special_characters_and_unicode (line 125) | def test_special_characters_and_unicode(self): method test_multiline_text_handling (line 139) | def test_multiline_text_handling(self): method test_very_long_text (line 152) | def test_very_long_text(self): method test_encoder_exception_handling (line 166) | def test_encoder_exception_handling(self): method test_zero_division_scenario (line 178) | def test_zero_division_scenario(self): method test_various_edge_cases (line 192) | def test_various_edge_cases(self): method test_parameter_combinations (line 217) | def test_parameter_combinations(self): method test_num_output_chars_zero_scenario (line 243) | def test_num_output_chars_zero_scenario(self): method test_logging_on_exception (line 257) | def test_logging_on_exception(self): method test_factor_safety_calculation (line 277) | def test_factor_safety_calculation(self): method test_clip_original_functionality (line 300) | def test_clip_original_functionality(self): FILE: tests/unittest/test_codecommit_client.py class TestCodeCommitProvider (line 6) | class TestCodeCommitProvider: method test_get_differences (line 7) | def test_get_differences(self): method test_get_file (line 82) | def test_get_file(self): method test_get_pr (line 106) | def test_get_pr(self): FILE: tests/unittest/test_codecommit_provider.py class TestCodeCommitFile (line 9) | class TestCodeCommitFile: method test_valid_parameters (line 12) | def test_valid_parameters(self): class TestCodeCommitProvider (line 29) | class TestCodeCommitProvider: method test_get_title (line 30) | def test_get_title(self): method test_get_pr_id (line 37) | def test_get_pr_id(self): method test_parse_pr_url (line 45) | def test_parse_pr_url(self): method test_is_valid_codecommit_hostname (line 52) | def test_is_valid_codecommit_hostname(self): method test_invalid_codecommit_url (line 90) | def test_invalid_codecommit_url(self): method test_get_file_extensions (line 95) | def test_get_file_extensions(self): method test_get_language_percentages (line 125) | def test_get_language_percentages(self): method test_get_edit_type (line 162) | def test_get_edit_type(self): method test_add_additional_newlines (line 176) | def test_add_additional_newlines(self): method test_remove_markdown_html (line 186) | def test_remove_markdown_html(self): FILE: tests/unittest/test_config_loader_secrets.py class TestConfigLoaderSecrets (line 6) | class TestConfigLoaderSecrets: method test_apply_secrets_manager_config_success (line 8) | def test_apply_secrets_manager_config_success(self): method test_apply_secrets_manager_config_no_provider (line 27) | def test_apply_secrets_manager_config_no_provider(self): method test_apply_secrets_manager_config_not_aws (line 34) | def test_apply_secrets_manager_config_not_aws(self): method test_apply_secrets_to_config_nested_keys (line 54) | def test_apply_secrets_to_config_nested_keys(self): method test_apply_secrets_to_config_existing_value_preserved (line 72) | def test_apply_secrets_to_config_existing_value_preserved(self): method test_apply_secrets_to_config_single_key (line 86) | def test_apply_secrets_to_config_single_key(self): method test_apply_secrets_to_config_multiple_dots (line 100) | def test_apply_secrets_to_config_multiple_dots(self): method test_apply_secrets_manager_config_exception_handling (line 114) | def test_apply_secrets_manager_config_exception_handling(self): FILE: tests/unittest/test_convert_to_markdown.py class TestConvertToMarkdown (line 48) | class TestConvertToMarkdown: method test_simple_dictionary_input (line 50) | def test_simple_dictionary_input(self): method test_simple_dictionary_input_without_gfm_supported (line 71) | def test_simple_dictionary_input_without_gfm_supported(self): method test_key_issues_to_review (line 93) | def test_key_issues_to_review(self): method test_ticket_compliance (line 126) | def test_ticket_compliance(self): method test_can_be_split (line 166) | def test_can_be_split(self): method test_contribution_time_cost_estimate (line 225) | def test_contribution_time_cost_estimate(self): method test_empty_dictionary_input (line 260) | def test_empty_dictionary_input(self): method test_dictionary_with_empty_dictionaries (line 267) | def test_dictionary_with_empty_dictionaries(self): class TestBR (line 275) | class TestBR: method test_br1 (line 276) | def test_br1(self): method test_br2 (line 286) | def test_br2(self): method test_br3 (line 298) | def test_br3(self): FILE: tests/unittest/test_delete_hunks.py class TestOmitDeletionHunks (line 36) | class TestOmitDeletionHunks: method test_simple_patch_additions (line 38) | def test_simple_patch_additions(self): method test_patch_multiple_hunks (line 44) | def test_patch_multiple_hunks(self): method test_patch_only_deletions (line 52) | def test_patch_only_deletions(self): method test_empty_patch (line 69) | def test_empty_patch(self): method test_patch_one_hunk (line 75) | def test_patch_one_hunk(self): method test_patch_deletions_no_additions (line 81) | def test_patch_deletions_no_additions(self): FILE: tests/unittest/test_extend_patch.py class TestExtendPatch (line 13) | class TestExtendPatch: method test_happy_path (line 15) | def test_happy_path(self): method test_empty_patch (line 25) | def test_empty_patch(self): method test_zero_num_lines (line 34) | def test_zero_num_lines(self): method test_no_hunks (line 42) | def test_no_hunks(self): method test_single_hunk (line 50) | def test_single_hunk(self): method test_multiple_hunks (line 61) | def test_multiple_hunks(self): method test_dynamic_context (line 81) | def test_dynamic_context(self): class TestExtendedPatchMoreLines (line 112) | class TestExtendedPatchMoreLines: class File (line 113) | class File: method __init__ (line 114) | def __init__(self, base_file, patch, head_file, filename, ai_file_su... method token_handler (line 122) | def token_handler(self): method pr_languages (line 129) | def pr_languages(self): method test_extend_patches_with_extra_lines (line 146) | def test_extend_patches_with_extra_lines(self, token_handler, pr_langu... class TestLoadLargeDiff (line 168) | class TestLoadLargeDiff: method test_no_newline (line 169) | def test_no_newline(self): method test_empty_inputs (line 192) | def test_empty_inputs(self): FILE: tests/unittest/test_extract_issue_from_branch.py class TestExtractTicketsLinkFromBranchName (line 6) | class TestExtractTicketsLinkFromBranchName: method test_feature_slash_number_suffix (line 9) | def test_feature_slash_number_suffix(self): method test_fix_slash_number_suffix (line 16) | def test_fix_slash_number_suffix(self): method test_number_at_start_no_slash (line 23) | def test_number_at_start_no_slash(self): method test_empty_branch_returns_empty (line 30) | def test_empty_branch_returns_empty(self): method test_none_branch_returns_empty (line 35) | def test_none_branch_returns_empty(self): method test_no_digits_in_segment_returns_empty (line 40) | def test_no_digits_in_segment_returns_empty(self): method test_base_url_no_trailing_slash (line 47) | def test_base_url_no_trailing_slash(self): method test_disable_via_config_returns_empty (line 54) | def test_disable_via_config_returns_empty(self, monkeypatch): method test_invalid_custom_regex_returns_empty (line 69) | def test_invalid_custom_regex_returns_empty(self, monkeypatch): method test_custom_regex_without_capturing_group_falls_back_to_default (line 84) | def test_custom_regex_without_capturing_group_falls_back_to_default(se... method test_empty_repo_path_returns_empty (line 99) | def test_empty_repo_path_returns_empty(self): method test_multiple_matches_deduplicated (line 104) | def test_multiple_matches_deduplicated(self): FILE: tests/unittest/test_file_filter.py class TestIgnoreFilter (line 5) | class TestIgnoreFilter: method test_no_ignores (line 6) | def test_no_ignores(self): method test_glob_ignores (line 19) | def test_glob_ignores(self, monkeypatch): method test_regex_ignores (line 40) | def test_regex_ignores(self, monkeypatch): method test_invalid_regex (line 61) | def test_invalid_regex(self, monkeypatch): method test_language_framework_ignores (line 82) | def test_language_framework_ignores(self, monkeypatch): method test_skip_invalid_ignore_language_framework (line 107) | def test_skip_invalid_ignore_language_framework(self, monkeypatch): FILE: tests/unittest/test_find_line_number_of_relevant_line_in_file.py class TestFindLineNumberOfRelevantLineInFile (line 7) | class TestFindLineNumberOfRelevantLineInFile: method test_relevant_line_found_in_patch (line 9) | def test_relevant_line_found_in_patch(self): method test_similar_line_found_using_difflib (line 19) | def test_similar_line_found_using_difflib(self): method test_relevant_line_not_found (line 29) | def test_relevant_line_not_found(self): method test_relevant_file_not_found (line 39) | def test_relevant_file_not_found(self): method test_empty_relevant_line (line 49) | def test_empty_relevant_line(self): method test_relevant_line_found_but_deleted (line 59) | def test_relevant_line_found_but_deleted(self): FILE: tests/unittest/test_fix_json_escape_char.py class TestFixJsonEscapeChar (line 4) | class TestFixJsonEscapeChar: method test_valid_json (line 5) | def test_valid_json(self): method test_single_control_char (line 11) | def test_single_control_char(self): method test_multiple_control_chars (line 17) | def test_multiple_control_chars(self): FILE: tests/unittest/test_fix_output.py class TestTryFixJson (line 6) | class TestTryFixJson: method test_incomplete_code_suggestions (line 8) | def test_incomplete_code_suggestions(self): method test_incomplete_code_suggestions_new_line (line 27) | def test_incomplete_code_suggestions_new_line(self): method test_incomplete_code_suggestions_many_close_brackets (line 46) | def test_incomplete_code_suggestions_many_close_brackets(self): method test_incomplete_code_suggestions_relevant_file (line 65) | def test_incomplete_code_suggestions_relevant_file(self): FILE: tests/unittest/test_fresh_vars_functionality.py function create_dynaconf_with_custom_loader (line 26) | def create_dynaconf_with_custom_loader(temp_dir, secrets_file): class TestFreshVarsGitLabScenario (line 56) | class TestFreshVarsGitLabScenario: method setup_method (line 66) | def setup_method(self): method teardown_method (line 71) | def teardown_method(self): method create_secrets_toml (line 78) | def create_secrets_toml(self, personal_access_token="initial_token", s... method test_gitlab_personal_access_token_reload (line 92) | def test_gitlab_personal_access_token_reload(self): method test_gitlab_multiple_fields_reload (line 125) | def test_gitlab_multiple_fields_reload(self): class TestFreshVarsCustomLoaderIntegration (line 163) | class TestFreshVarsCustomLoaderIntegration: method setup_method (line 171) | def setup_method(self): method teardown_method (line 176) | def teardown_method(self): method create_secrets_toml (line 183) | def create_secrets_toml(self, personal_access_token="initial_token", s... method test_fresh_vars_without_core_loaders (line 191) | def test_fresh_vars_without_core_loaders(self): method test_custom_loader_respects_fresh_vars (line 228) | def test_custom_loader_respects_fresh_vars(self): class TestFreshVarsBasicFunctionality (line 275) | class TestFreshVarsBasicFunctionality: method setup_method (line 283) | def setup_method(self): method teardown_method (line 288) | def teardown_method(self): method create_secrets_toml (line 295) | def create_secrets_toml(self, personal_access_token="initial_token"): method test_gitlab_credentials_not_cached_when_fresh (line 302) | def test_gitlab_credentials_not_cached_when_fresh(self): method test_fresh_vars_works_with_default_loaders (line 348) | def test_fresh_vars_works_with_default_loaders(self): FILE: tests/unittest/test_get_max_tokens.py class TestGetMaxTokens (line 7) | class TestGetMaxTokens: method test_model_max_tokens (line 10) | def test_model_max_tokens(self, monkeypatch): method test_gpt54_model_max_tokens (line 26) | def test_gpt54_model_max_tokens(self, monkeypatch, model): method test_model_has_custom (line 39) | def test_model_has_custom(self, monkeypatch): method test_gpt_codex_models_max_tokens (line 59) | def test_gpt_codex_models_max_tokens(self, monkeypatch, model): method test_model_not_max_tokens_and_not_has_custom (line 73) | def test_model_not_max_tokens_and_not_has_custom(self, monkeypatch): method test_model_max_tokens_with__limit (line 88) | def test_model_max_tokens_with__limit(self, monkeypatch): method test_gemini_3_and_3_1_pro_preview (line 111) | def test_gemini_3_and_3_1_pro_preview(self, monkeypatch, model): method test_claude_opus_4_6_model_max_tokens (line 132) | def test_claude_opus_4_6_model_max_tokens(self, monkeypatch, model): method test_claude_sonnet_4_6_model_max_tokens (line 158) | def test_claude_sonnet_4_6_model_max_tokens(self, monkeypatch, model): FILE: tests/unittest/test_gitea_provider.py class TestGiteaProvider (line 5) | class TestGiteaProvider: method test_gitea_provider_auth_header (line 8) | def test_gitea_provider_auth_header(self, mock_api_client_cls, mock_ge... FILE: tests/unittest/test_github_action_output.py class TestGitHubOutput (line 7) | class TestGitHubOutput: method test_github_action_output_enabled (line 8) | def test_github_action_output_enabled(self, monkeypatch, tmp_path): method test_github_action_output_disabled (line 25) | def test_github_action_output_disabled(self, monkeypatch, tmp_path): method test_github_action_output_notset (line 35) | def test_github_action_output_notset(self, monkeypatch, tmp_path): method test_github_action_output_error_case (line 45) | def test_github_action_output_error_case(self, monkeypatch, tmp_path): FILE: tests/unittest/test_gitlab_provider.py class TestGitLabProvider (line 11) | class TestGitLabProvider: method mock_gitlab_client (line 15) | def mock_gitlab_client(self): method mock_project (line 20) | def mock_project(self): method gitlab_provider (line 25) | def gitlab_provider(self, mock_gitlab_client, mock_project): method test_get_pr_file_content_success (line 40) | def test_get_pr_file_content_success(self, gitlab_provider, mock_proje... method test_get_pr_file_content_with_bytes (line 51) | def test_get_pr_file_content_with_bytes(self, gitlab_provider, mock_pr... method test_get_pr_file_content_file_not_found (line 61) | def test_get_pr_file_content_file_not_found(self, gitlab_provider, moc... method test_get_pr_file_content_other_exception (line 69) | def test_get_pr_file_content_other_exception(self, gitlab_provider, mo... method test_create_or_update_pr_file_create_new (line 76) | def test_create_or_update_pr_file_create_new(self, gitlab_provider, mo... method test_create_or_update_pr_file_update_existing (line 96) | def test_create_or_update_pr_file_update_existing(self, gitlab_provide... method test_create_or_update_pr_file_update_exception (line 112) | def test_create_or_update_pr_file_update_exception(self, gitlab_provid... method test_has_create_or_update_pr_file_method (line 120) | def test_has_create_or_update_pr_file_method(self, gitlab_provider): method test_method_signature_compatibility (line 124) | def test_method_signature_compatibility(self, gitlab_provider): method test_content_encoding_handling (line 141) | def test_content_encoding_handling(self, gitlab_provider, mock_project... method test_get_gitmodules_map_parsing (line 150) | def test_get_gitmodules_map_parsing(self, gitlab_provider, mock_project): method test_project_by_path_requires_exact_match (line 173) | def test_project_by_path_requires_exact_match(self, gitlab_provider): method test_compare_submodule_cached (line 185) | def test_compare_submodule_cached(self, gitlab_provider): FILE: tests/unittest/test_gitlab_webhook_port.py function test_start_uses_port_env (line 8) | def test_start_uses_port_env(monkeypatch): function test_start_invalid_port_env (line 19) | def test_start_invalid_port_env(monkeypatch): function test_start_default_port (line 29) | def test_start_default_port(monkeypatch): function test_start_invalid_port_range (line 39) | def test_start_invalid_port_range(monkeypatch): FILE: tests/unittest/test_handle_patch_deletions.py class TestHandlePatchDeletions (line 36) | class TestHandlePatchDeletions: method test_handle_patch_deletions_happy_path_new_file_content_exists (line 38) | def test_handle_patch_deletions_happy_path_new_file_content_exists(self): method test_handle_patch_deletions_edge_case_new_file_content_empty (line 47) | def test_handle_patch_deletions_edge_case_new_file_content_empty(self): method test_handle_patch_deletions_edge_case_patch_and_patch_new_are_equal (line 56) | def test_handle_patch_deletions_edge_case_patch_and_patch_new_are_equa... method test_handle_patch_deletions_edge_case_patch_and_patch_new_are_not_equal (line 65) | def test_handle_patch_deletions_edge_case_patch_and_patch_new_are_not_... FILE: tests/unittest/test_ignore_repositories.py function make_bitbucket_payload (line 9) | def make_bitbucket_payload(full_name): function make_github_body (line 24) | def make_github_body(full_name): function make_gitlab_body (line 31) | def make_gitlab_body(full_name): class TestIgnoreRepositories (line 43) | class TestIgnoreRepositories: method setup_method (line 44) | def setup_method(self): method test_should_ignore_matching_repository (line 48) | def test_should_ignore_matching_repository(self, provider_name, provid... method test_should_not_ignore_non_matching_repository (line 60) | def test_should_not_ignore_non_matching_repository(self, provider_name... method test_should_not_ignore_when_config_empty (line 72) | def test_should_not_ignore_when_config_empty(self, provider_name, prov... FILE: tests/unittest/test_language_handler.py class TestSortFilesByMainLanguages (line 38) | class TestSortFilesByMainLanguages: method test_happy_path_sort_files_by_main_languages (line 40) | def test_happy_path_sort_files_by_main_languages(self): method test_edge_case_empty_languages (line 58) | def test_edge_case_empty_languages(self): method test_edge_case_empty_files (line 68) | def test_edge_case_empty_files(self): method test_edge_case_languages_with_no_extensions (line 77) | def test_edge_case_languages_with_no_extensions(self): method test_edge_case_files_with_bad_extensions_only (line 94) | def test_edge_case_files_with_bad_extensions_only(self): method test_general_behaviour_sort_files_by_main_languages (line 105) | def test_general_behaviour_sort_files_by_main_languages(self): FILE: tests/unittest/test_litellm_reasoning_effort.py function create_mock_settings (line 9) | def create_mock_settings(reasoning_effort_value): function create_mock_acompletion_response (line 27) | def create_mock_acompletion_response(): function mock_logger (line 38) | def mock_logger(): class TestLiteLLMReasoningEffort (line 46) | class TestLiteLLMReasoningEffort: method test_gpt5_valid_reasoning_effort_none (line 63) | async def test_gpt5_valid_reasoning_effort_none(self, monkeypatch, moc... method test_gpt5_valid_reasoning_effort_low (line 89) | async def test_gpt5_valid_reasoning_effort_low(self, monkeypatch, mock... method test_gpt5_valid_reasoning_effort_medium (line 110) | async def test_gpt5_valid_reasoning_effort_medium(self, monkeypatch, m... method test_gpt5_valid_reasoning_effort_high (line 131) | async def test_gpt5_valid_reasoning_effort_high(self, monkeypatch, moc... method test_gpt5_valid_reasoning_effort_xhigh (line 152) | async def test_gpt5_valid_reasoning_effort_xhigh(self, monkeypatch, mo... method test_gpt5_valid_reasoning_effort_minimal (line 173) | async def test_gpt5_valid_reasoning_effort_minimal(self, monkeypatch, ... method test_gpt5_invalid_reasoning_effort_with_warning (line 196) | async def test_gpt5_invalid_reasoning_effort_with_warning(self, monkey... method test_gpt5_invalid_reasoning_effort_thinking_model (line 225) | async def test_gpt5_invalid_reasoning_effort_thinking_model(self, monk... method test_gpt5_none_config_defaults_to_medium (line 251) | async def test_gpt5_none_config_defaults_to_medium(self, monkeypatch, ... method test_gpt5_none_config_thinking_model_defaults_to_medium (line 277) | async def test_gpt5_none_config_thinking_model_defaults_to_medium(self... method test_gpt5_model_detection_various_versions (line 305) | async def test_gpt5_model_detection_various_versions(self, monkeypatch... method test_non_gpt5_model_no_thinking_kwargs (line 337) | async def test_non_gpt5_model_no_thinking_kwargs(self, monkeypatch, mo... method test_gpt5_suffix_removal (line 360) | async def test_gpt5_suffix_removal(self, monkeypatch, mock_logger): method test_gpt5_thinking_suffix_default_medium (line 382) | async def test_gpt5_thinking_suffix_default_medium(self, monkeypatch, ... method test_gpt5_regular_suffix_default_medium (line 402) | async def test_gpt5_regular_suffix_default_medium(self, monkeypatch, m... method test_gpt5_thinking_suffix_config_overrides_default (line 422) | async def test_gpt5_thinking_suffix_config_overrides_default(self, mon... method test_gpt5_info_logging_configured_value (line 445) | async def test_gpt5_info_logging_configured_value(self, monkeypatch, m... method test_gpt5_info_logging_default_value (line 464) | async def test_gpt5_info_logging_default_value(self, monkeypatch, mock... method test_gpt5_warning_only_for_invalid_non_none (line 483) | async def test_gpt5_warning_only_for_invalid_non_none(self, monkeypatc... method test_thinking_kwargs_gpt5_structure (line 525) | async def test_thinking_kwargs_gpt5_structure(self, monkeypatch, mock_... method test_thinking_kwargs_not_created_for_non_gpt5 (line 550) | async def test_thinking_kwargs_not_created_for_non_gpt5(self, monkeypa... method test_empty_string_reasoning_effort (line 574) | async def test_empty_string_reasoning_effort(self, monkeypatch, mock_l... method test_case_sensitive_reasoning_effort (line 595) | async def test_case_sensitive_reasoning_effort(self, monkeypatch, mock... method test_whitespace_reasoning_effort (line 616) | async def test_whitespace_reasoning_effort(self, monkeypatch, mock_log... method test_gpt5_prefix_match_only (line 637) | async def test_gpt5_prefix_match_only(self, monkeypatch, mock_logger): FILE: tests/unittest/test_load_yaml.py class TestLoadYaml (line 11) | class TestLoadYaml: method test_load_valid_yaml (line 13) | def test_load_valid_yaml(self): method test_load_invalid_yaml1 (line 18) | def test_load_invalid_yaml1(self): method test_load_invalid_yaml2 (line 40) | def test_load_invalid_yaml2(self): FILE: tests/unittest/test_parse_code_suggestion.py class TestParseCodeSuggestion (line 37) | class TestParseCodeSuggestion: method test_empty_dict (line 39) | def test_empty_dict(self): method test_non_string_before_or_after (line 46) | def test_non_string_before_or_after(self): method test_no_code_example_key (line 57) | def test_no_code_example_key(self): method test_with_code_example_key (line 68) | def test_with_code_example_key(self): FILE: tests/unittest/test_pr_update_changelog.py class TestPRUpdateChangelog (line 8) | class TestPRUpdateChangelog: method mock_git_provider (line 12) | def mock_git_provider(self): method mock_ai_handler (line 25) | def mock_ai_handler(self): method changelog_tool (line 32) | def changelog_tool(self, mock_git_provider, mock_ai_handler): method test_get_changelog_file_with_existing_content (line 48) | def test_get_changelog_file_with_existing_content(self, changelog_tool... method test_get_changelog_file_with_no_existing_content (line 61) | def test_get_changelog_file_with_no_existing_content(self, changelog_t... method test_get_changelog_file_with_bytes_content (line 73) | def test_get_changelog_file_with_bytes_content(self, changelog_tool, m... method test_get_changelog_file_with_exception (line 86) | def test_get_changelog_file_with_exception(self, changelog_tool, mock_... method test_prepare_changelog_update_with_existing_content (line 98) | def test_prepare_changelog_update_with_existing_content(self, changelo... method test_prepare_changelog_update_without_existing_content (line 113) | def test_prepare_changelog_update_without_existing_content(self, chang... method test_prepare_changelog_update_no_commit (line 127) | def test_prepare_changelog_update_no_commit(self, changelog_tool): method test_run_without_push_support (line 142) | async def test_run_without_push_support(self, changelog_tool, mock_git... method test_run_with_push_support (line 160) | async def test_run_with_push_support(self, changelog_tool, mock_git_pr... method test_push_changelog_update (line 186) | def test_push_changelog_update(self, changelog_tool, mock_git_provider): method test_gitlab_provider_method_detection (line 210) | def test_gitlab_provider_method_detection(self, changelog_tool, mock_g... method test_changelog_order_preservation (line 235) | def test_changelog_order_preservation(self, changelog_tool, existing_c... FILE: tests/unittest/test_secret_provider_factory.py class TestSecretProviderFactory (line 8) | class TestSecretProviderFactory: method test_get_secret_provider_none_when_not_configured (line 10) | def test_get_secret_provider_none_when_not_configured(self): method test_get_secret_provider_google_cloud_storage (line 19) | def test_get_secret_provider_google_cloud_storage(self): method test_get_secret_provider_aws_secrets_manager (line 34) | def test_get_secret_provider_aws_secrets_manager(self): method test_get_secret_provider_unknown_provider (line 49) | def test_get_secret_provider_unknown_provider(self): method test_get_secret_provider_initialization_error (line 59) | def test_get_secret_provider_initialization_error(self): FILE: tests/unittest/test_similar_issue_non_github.py function test_similar_issue_non_github_publishes_message (line 7) | async def test_similar_issue_non_github_publishes_message(monkeypatch): function test_similar_issue_non_github_no_publish (line 38) | async def test_similar_issue_non_github_no_publish(monkeypatch): FILE: tests/unittest/test_try_fix_yaml.py class TestTryFixYaml (line 6) | class TestTryFixYaml: method test_valid_yaml (line 9) | def test_valid_yaml(self): method test_add_relevant_line (line 15) | def test_add_relevant_line(self): method test_extract_snippet (line 21) | def test_extract_snippet(self): method test_empty_yaml_fixed (line 35) | def test_empty_yaml_fixed(self): method test_no_initial_yaml (line 41) | def test_no_initial_yaml(self): method test_with_initial_yaml (line 63) | def test_with_initial_yaml(self): method test_with_brackets_yaml_content (line 86) | def test_with_brackets_yaml_content(self): method test_tab_indent_yaml (line 104) | def test_tab_indent_yaml(self): method test_leading_plus_mark_code (line 121) | def test_leading_plus_mark_code(self): method test_inconsistent_indentation_in_block_scalar_yaml (line 142) | def test_inconsistent_indentation_in_block_scalar_yaml(self): method test_inconsistent_and_insufficient_indentation_in_block_scalar_yaml (line 182) | def test_inconsistent_and_insufficient_indentation_in_block_scalar_yam... method test_wrong_indentation_code_block_scalar (line 220) | def test_wrong_indentation_code_block_scalar(self):