Completed
Push — master ( 0b9edb...ab2b1a )
by Mathieu
10s
created

smartdispatch.Queue.__init__()   F

Complexity

Conditions 13

Size

Total Lines 38

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 13
dl 0
loc 38
rs 2.7716

How to fix   Complexity   

Complexity

Complex classes like smartdispatch.Queue.__init__() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
from smartdispatch import get_available_queues
2
3
4
class Queue(object):
5
    def __init__(self, name, cluster_name, walltime=None, nb_cores_per_node=None, nb_gpus_per_node=None, mem_per_node=None, modules=None):
6
        self.name = name
7
        self.cluster_name = cluster_name
8
9
        self.walltime = walltime
10
        self.nb_cores_per_node = nb_cores_per_node
11
        self.nb_gpus_per_node = nb_gpus_per_node
12
        self.mem_per_node = mem_per_node
13
        self.modules = modules if modules is not None else []
14
15
        available_queues = get_available_queues(self.cluster_name)
16
        if self.name in available_queues:
17
            queue_infos = available_queues[self.name]
18
19
            if self.walltime is None:
20
                self.walltime = queue_infos['max_walltime']
21
            if self.nb_cores_per_node is None:
22
                self.nb_cores_per_node = queue_infos['cores']
23
            if self.nb_gpus_per_node is None:
24
                self.nb_gpus_per_node = queue_infos.get('gpus', 0)
25
            if self.mem_per_node is None:
26
                self.mem_per_node = queue_infos['ram']
27
28
            # Add default modules to load for this queue if any.
29
            self.modules = queue_infos.get('modules', []) + self.modules
30
31
        # Make sure Queue instance is in a valid state.
32
        if self.walltime is None:
33
            raise ValueError("Walltime must be provided on this queue!")
34
35
        if self.nb_cores_per_node is None or self.nb_cores_per_node <= 0:
36
            raise ValueError("Queues must have at least one core!")
37
38
        if self.nb_gpus_per_node is None:
39
            self.nb_gpus_per_node = 0  # Means, there are no gpus on those queue nodes
40
41
        if self.mem_per_node is None or self.mem_per_node <= 0:
42
            raise ValueError("Queues must have at least some memory!")
43