1e509ee18Sopenharmony_ci#!/usr/bin/env python3 2e509ee18Sopenharmony_ci# -*- coding: utf-8 -*- 3e509ee18Sopenharmony_ci""" 4e509ee18Sopenharmony_ciCopyright (c) 2024 Huawei Device Co., Ltd. 5e509ee18Sopenharmony_ciLicensed under the Apache License, Version 2.0 (the "License"); 6e509ee18Sopenharmony_ciyou may not use this file except in compliance with the License. 7e509ee18Sopenharmony_ciYou may obtain a copy of the License at 8e509ee18Sopenharmony_ci 9e509ee18Sopenharmony_ci http://www.apache.org/licenses/LICENSE-2.0 10e509ee18Sopenharmony_ci 11e509ee18Sopenharmony_ciUnless required by applicable law or agreed to in writing, software 12e509ee18Sopenharmony_cidistributed under the License is distributed on an "AS IS" BASIS, 13e509ee18Sopenharmony_ciWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e509ee18Sopenharmony_ciSee the License for the specific language governing permissions and 15e509ee18Sopenharmony_cilimitations under the License. 16e509ee18Sopenharmony_ci 17e509ee18Sopenharmony_ciDescription: Python CDP Debugger. 18e509ee18Sopenharmony_ci""" 19e509ee18Sopenharmony_ci 20e509ee18Sopenharmony_cifrom dataclasses import dataclass, field 21e509ee18Sopenharmony_cifrom enum import Enum 22e509ee18Sopenharmony_cifrom typing import Optional, List 23e509ee18Sopenharmony_ci 24e509ee18Sopenharmony_ci 25e509ee18Sopenharmony_ci@dataclass 26e509ee18Sopenharmony_ciclass DropFrameParams: 27e509ee18Sopenharmony_ci dropped_depth: int = 1 28e509ee18Sopenharmony_ci 29e509ee18Sopenharmony_ci 30e509ee18Sopenharmony_ci@dataclass 31e509ee18Sopenharmony_ciclass ReplyNativeCallingParams: 32e509ee18Sopenharmony_ci user_code: bool = True 33e509ee18Sopenharmony_ci 34e509ee18Sopenharmony_ci 35e509ee18Sopenharmony_ci@dataclass 36e509ee18Sopenharmony_ciclass SetMixedDebugEnabledParams: 37e509ee18Sopenharmony_ci enabled: bool 38e509ee18Sopenharmony_ci mixed_stack_enabled: bool 39e509ee18Sopenharmony_ci 40e509ee18Sopenharmony_ci 41e509ee18Sopenharmony_ci@dataclass 42e509ee18Sopenharmony_ciclass SmartStepIntoParams: 43e509ee18Sopenharmony_ci url: str 44e509ee18Sopenharmony_ci line_number: int 45e509ee18Sopenharmony_ci 46e509ee18Sopenharmony_ci 47e509ee18Sopenharmony_ci@dataclass 48e509ee18Sopenharmony_ciclass PauseOnExceptionsState(Enum): 49e509ee18Sopenharmony_ci ALL = 'all' 50e509ee18Sopenharmony_ci NONE = 'none' 51e509ee18Sopenharmony_ci CAUGHT = 'caught' 52e509ee18Sopenharmony_ci UNCAUGHT = 'uncaught' 53e509ee18Sopenharmony_ci 54e509ee18Sopenharmony_ci 55e509ee18Sopenharmony_ci@dataclass 56e509ee18Sopenharmony_ciclass EvaluateOnCallFrameParams: 57e509ee18Sopenharmony_ci expression: str 58e509ee18Sopenharmony_ci call_frame_id: int = 0 59e509ee18Sopenharmony_ci object_group: str = "console" 60e509ee18Sopenharmony_ci include_command_line_api: bool = True 61e509ee18Sopenharmony_ci silent: bool = True 62e509ee18Sopenharmony_ci 63e509ee18Sopenharmony_ci 64e509ee18Sopenharmony_ci@dataclass 65e509ee18Sopenharmony_ciclass BreakLocationUrl: 66e509ee18Sopenharmony_ci url: str 67e509ee18Sopenharmony_ci line_number: int 68e509ee18Sopenharmony_ci column_number: Optional[int] = 0 69e509ee18Sopenharmony_ci condition: Optional[str] = None 70e509ee18Sopenharmony_ci 71e509ee18Sopenharmony_ci def to_json(self): 72e509ee18Sopenharmony_ci json = {'url': self.url, 73e509ee18Sopenharmony_ci 'lineNumber': self.line_number, 74e509ee18Sopenharmony_ci 'columnNumber': self.column_number} 75e509ee18Sopenharmony_ci if self.condition is not None: 76e509ee18Sopenharmony_ci json['condition'] = self.condition 77e509ee18Sopenharmony_ci return json 78e509ee18Sopenharmony_ci 79e509ee18Sopenharmony_ci 80e509ee18Sopenharmony_ci@dataclass 81e509ee18Sopenharmony_ciclass RemoveBreakpointsUrl: 82e509ee18Sopenharmony_ci url: str = "" 83e509ee18Sopenharmony_ci 84e509ee18Sopenharmony_ci 85e509ee18Sopenharmony_ci@dataclass 86e509ee18Sopenharmony_ciclass SetBreakpointsLocations: 87e509ee18Sopenharmony_ci locations: list = field(default_factory=list) 88e509ee18Sopenharmony_ci 89e509ee18Sopenharmony_ci 90e509ee18Sopenharmony_cidef enable(): 91e509ee18Sopenharmony_ci command = {'method': 'Debugger.enable'} 92e509ee18Sopenharmony_ci return command 93e509ee18Sopenharmony_ci 94e509ee18Sopenharmony_ci 95e509ee18Sopenharmony_cidef resume(): 96e509ee18Sopenharmony_ci command = {'method': 'Debugger.resume'} 97e509ee18Sopenharmony_ci return command 98e509ee18Sopenharmony_ci 99e509ee18Sopenharmony_ci 100e509ee18Sopenharmony_cidef remove_breakpoints_by_url(params: RemoveBreakpointsUrl): 101e509ee18Sopenharmony_ci command = {'method': 'Debugger.removeBreakpointsByUrl', 102e509ee18Sopenharmony_ci 'params': {'url': params.url}} 103e509ee18Sopenharmony_ci return command 104e509ee18Sopenharmony_ci 105e509ee18Sopenharmony_ci 106e509ee18Sopenharmony_cidef get_possible_and_set_breakpoint_by_url(params: SetBreakpointsLocations): 107e509ee18Sopenharmony_ci locations = [] 108e509ee18Sopenharmony_ci for location in params.locations: 109e509ee18Sopenharmony_ci locations.append(location.to_json()) 110e509ee18Sopenharmony_ci command = {'method': 'Debugger.getPossibleAndSetBreakpointByUrl', 111e509ee18Sopenharmony_ci 'params': {'locations': locations}} 112e509ee18Sopenharmony_ci return command 113e509ee18Sopenharmony_ci 114e509ee18Sopenharmony_ci 115e509ee18Sopenharmony_cidef step_over(): 116e509ee18Sopenharmony_ci command = {'method': 'Debugger.stepOver'} 117e509ee18Sopenharmony_ci return command 118e509ee18Sopenharmony_ci 119e509ee18Sopenharmony_ci 120e509ee18Sopenharmony_cidef step_into(): 121e509ee18Sopenharmony_ci command = {'method': 'Debugger.stepInto'} 122e509ee18Sopenharmony_ci return command 123e509ee18Sopenharmony_ci 124e509ee18Sopenharmony_ci 125e509ee18Sopenharmony_cidef step_out(): 126e509ee18Sopenharmony_ci command = {'method': 'Debugger.stepOut'} 127e509ee18Sopenharmony_ci return command 128e509ee18Sopenharmony_ci 129e509ee18Sopenharmony_ci 130e509ee18Sopenharmony_cidef disable(): 131e509ee18Sopenharmony_ci command = {'method': 'Debugger.disable'} 132e509ee18Sopenharmony_ci return command 133e509ee18Sopenharmony_ci 134e509ee18Sopenharmony_ci 135e509ee18Sopenharmony_cidef set_pause_on_exceptions(params: PauseOnExceptionsState): 136e509ee18Sopenharmony_ci command = {'method': 'Debugger.setPauseOnExceptions', 137e509ee18Sopenharmony_ci 'params': {'state': params.value}} 138e509ee18Sopenharmony_ci return command 139e509ee18Sopenharmony_ci 140e509ee18Sopenharmony_ci 141e509ee18Sopenharmony_cidef evaluate_on_call_frame(params: EvaluateOnCallFrameParams): 142e509ee18Sopenharmony_ci command = {'method': 'Debugger.evaluateOnCallFrame', 143e509ee18Sopenharmony_ci 'params': { 144e509ee18Sopenharmony_ci 'callFrameId': str(params.call_frame_id), 145e509ee18Sopenharmony_ci 'expression': params.expression, 146e509ee18Sopenharmony_ci 'includeCommandLineApi': params.include_command_line_api, 147e509ee18Sopenharmony_ci 'objectGroup': params.object_group, 148e509ee18Sopenharmony_ci 'silent': params.silent}} 149e509ee18Sopenharmony_ci return command 150e509ee18Sopenharmony_ci 151e509ee18Sopenharmony_ci 152e509ee18Sopenharmony_cidef pause(): 153e509ee18Sopenharmony_ci command = {'method': 'Debugger.pause'} 154e509ee18Sopenharmony_ci return command 155e509ee18Sopenharmony_ci 156e509ee18Sopenharmony_ci 157e509ee18Sopenharmony_cidef set_mixed_debug_enabled(params: SetMixedDebugEnabledParams): 158e509ee18Sopenharmony_ci command = {'method': 'Debugger.setMixedDebugEnabled', 159e509ee18Sopenharmony_ci 'params': {'enabled': params.enabled, 'mixedStackEnabled': params.mixed_stack_enabled}} 160e509ee18Sopenharmony_ci return command 161e509ee18Sopenharmony_ci 162e509ee18Sopenharmony_ci 163e509ee18Sopenharmony_cidef reply_native_calling(params: ReplyNativeCallingParams): 164e509ee18Sopenharmony_ci command = {'method': 'Debugger.replyNativeCalling', 165e509ee18Sopenharmony_ci 'params': {'userCode': params.user_code}} 166e509ee18Sopenharmony_ci return command 167e509ee18Sopenharmony_ci 168e509ee18Sopenharmony_ci 169e509ee18Sopenharmony_cidef drop_frame(params: DropFrameParams): 170e509ee18Sopenharmony_ci command = {'method': 'Debugger.dropFrame', 171e509ee18Sopenharmony_ci 'params': {'droppedDepth': params.dropped_depth}} 172e509ee18Sopenharmony_ci return command 173e509ee18Sopenharmony_ci 174e509ee18Sopenharmony_ci 175e509ee18Sopenharmony_cidef smart_step_into(params: SmartStepIntoParams): 176e509ee18Sopenharmony_ci command = {'method': 'Debugger.smartStepInto', 177e509ee18Sopenharmony_ci 'params': {'url': params.url, 'lineNumber': params.line_number}} 178e509ee18Sopenharmony_ci return command