| Conditions | 9 |
| Total Lines | 71 |
| Code Lines | 35 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | # -*- coding: utf-8 -*- |
||
| 138 | def start_scan(self, scan_id=None, parallel='1', target=None, |
||
| 139 | ports=None, **kwargs): |
||
| 140 | """Start a new scan. |
||
| 141 | |||
| 142 | Args: |
||
| 143 | scan_id (uuid): Identifier for a running scan. |
||
| 144 | kwargs (dict): A dict with scanner parameters, targets and a |
||
| 145 | VT selection. |
||
| 146 | |||
| 147 | Returns: |
||
| 148 | str: Response from server. |
||
| 149 | |||
| 150 | |||
| 151 | kwargs example: |
||
| 152 | {'scanner_parameters': {'scan_param1': 'scan_param1_value', |
||
| 153 | 'scan_param2': 'scan_param2_value'}, |
||
| 154 | 'targets': [{'hosts': 'localhost', |
||
| 155 | 'ports': '80,43'}, |
||
| 156 | {'hosts': '192.168.0.0/24', |
||
| 157 | 'ports': '22'}, |
||
| 158 | 'credentials': {'smb': {'password': 'pass', |
||
| 159 | 'port': 'port', |
||
| 160 | 'type': 'type', |
||
| 161 | 'username': 'username'}}, |
||
| 162 | ], |
||
| 163 | 'vt_selection': {'vt1': {}, |
||
| 164 | 'vt2': {'value_id': 'value'}, |
||
| 165 | 'vt_groups': ['family=debian', 'family=general']} |
||
| 166 | } |
||
| 167 | |||
| 168 | """ |
||
| 169 | cmd = XmlCommand('start_scan') |
||
| 170 | if scan_id: |
||
| 171 | cmd.set_attribute('scan_id', scan_id) |
||
| 172 | cmd.set_attribute('parallel', parallel) |
||
| 173 | |||
| 174 | # Add <scanner_params> even if it is empty, since it is mandatory |
||
| 175 | _xmlscanparams = cmd.add_element('scanner_params') |
||
| 176 | scanner_params = kwargs.get('scanner_params') |
||
| 177 | if scanner_params: |
||
| 178 | _xmlscanparams.set_attributes(scanner_params) |
||
| 179 | |||
| 180 | targets = kwargs.get('targets') |
||
| 181 | if targets: |
||
| 182 | _xmltargets = cmd.add_element('targets') |
||
| 183 | for target in targets: |
||
| 184 | _xmltarget = _xmltargets.add_element('target') |
||
| 185 | hosts = target.get('hosts') |
||
| 186 | ports = target.get('ports') |
||
| 187 | credentials = target.get('credentials') |
||
| 188 | _xmltarget.add_element('hosts', hosts) |
||
| 189 | _xmltarget.add_element('ports', ports) |
||
| 190 | if credentials: |
||
| 191 | _xmlcredentials = _xmltarget.add_element('credentials') |
||
| 192 | _xmlcredentials = (create_credentials_element( |
||
| 193 | _xmlcredentials, credentials)) |
||
| 194 | # Check target as attribute for legacy mode compatibility. Deprecated. |
||
| 195 | elif target: |
||
| 196 | cmd.set_attribute('target', target) |
||
| 197 | if ports: |
||
| 198 | cmd.set_attribute('ports', ports) |
||
| 199 | else: |
||
| 200 | raise ValueError('start_scan requires a target') |
||
| 201 | |||
| 202 | _xmlvtselection = cmd.add_element('vt_selection') |
||
| 203 | vt_selection = kwargs.get('vt_selection') |
||
| 204 | if vt_selection: |
||
| 205 | _xmlvtselection = create_vt_selection_element( |
||
| 206 | _xmlvtselection, vt_selection) |
||
| 207 | |||
| 208 | return self.send_command(cmd.to_string()) |
||
| 209 | |||
| 223 |