Passed
Pull Request — master (#317)
by Jaspar
01:25
created

gvmtools.script_utils   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 66
Duplicated Lines 19.7 %

Importance

Changes 0
Metric Value
eloc 24
dl 13
loc 66
rs 10
c 0
b 0
f 0
wmc 8

3 Functions

Rating   Name   Duplication   Size   Complexity  
A create_xml_tree() 13 18 4
A error_and_exit() 0 8 1
A yes_or_no() 0 13 3

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
# -*- coding: utf-8 -*-
2
# Copyright (C) 2018-2020 Greenbone Networks GmbH
3
#
4
# SPDX-License-Identifier: GPL-3.0-or-later
5
#
6
# This program is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19
from sys import stderr
20
from lxml import etree
21
22
23
def yes_or_no(question):
24
    """Asks the user to proceed or not in a gvmtools script
25
26
    Arguments:
27
        question (str): The condition the user should answer
28
    """
29
    reply = str(input(question + ' (y/n): ')).lower().strip()
30
    if reply[0] == ('y'):
31
        return True
32
    if reply[0] == ('n'):
33
        return False
34
    else:
35
        return yes_or_no("Please enter 'y' or 'n'")
36
37
38
def error_and_exit(msg):
39
    """Prints an error message and quits the gvmtools script
40
41
    Arguments:
42
        msg (str): The error message, that will be printed
43
    """
44
    print("\nError: {}\n".format(msg), file=stderr)
45
    quit(1)
46
47
48 View Code Duplication
def create_xml_tree(xml_doc):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
49
    """Creates an XML tree that can be read by an gvmtools script
50
51
    Arguments:
52
        xml_doc (str): Path to the xml document
53
    """
54
    try:
55
        xml_tree = etree.parse(xml_doc)
56
        xml_tree = xml_tree.getroot()
57
    except IOError as err:
58
        error_and_exit("Failed to read xml_file: {} (exit)".format(str(err)))
59
    except etree.Error as err:
60
        error_and_exit("Failed to parse xml_file: {} (exit)".format(str(err)))
61
62
    if len(xml_tree) == 0:
63
        error_and_exit("XML file is empty (exit)")
64
65
    return xml_tree
66