Completed
Pull Request — master (#406)
by Edward
01:59
created

get_methods()   C

Complexity

Conditions 8

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 8
dl 0
loc 16
rs 6.6666
1
#!/usr/bin/env python
2
3
import inspect
4
import yaml
5
import re
6
import digitalocean
7
8
9
def get_methods(module):
10
    functions = {}
11
    pattern = re.compile('[^_].*')
12
    for member in dir(module):
13
        foo = getattr(module, member)
14
        if inspect.ismethod(foo):
15
            if pattern.match(member):
16
                functions[member] = {}
17
                argspec = inspect.getargspec(foo)
18
                if argspec.defaults is not None:
19
                    functions[member] = dict(zip(argspec.args[-len(argspec.defaults):],
20
                                                 argspec.defaults))
21
                    for arg in argspec.args:
22
                        if arg not in functions[member] and arg is not 'self':
23
                            functions[member][arg] = 'required'
24
    return functions
25
26
27
def generate_meta(actions, pack):
28
29
    for action in actions:
30
        parameters = {}
31
        action_meta = {
32
            "name": "",
33
            "parameters": {
34
                "action": {
35
                    "type": "string",
36
                    "immutable": True,
37
                    "default": action
38
                }
39
            },
40
            "runner_type": "run-python",
41
            "description": "",
42
            "enabled": True,
43
            "entry_point": "do.py"
44
        }
45
46
        action_meta["name"] = "%s" % action
47
        for parameter in actions[action]:
48
            parameters[parameter] = {"type": "string"}
49
            if isinstance(actions[action][parameter], bool):
50
                parameters[parameter]['type'] = "boolean"
51
            if actions[action][parameter] is not None:
52
                if actions[action][parameter] == 'required':
53
                    parameters[parameter]['required'] = True
54
                else:
55
                    parameters[parameter]['default'] = actions[action][parameter]
56
        action_meta['parameters'].update(parameters)
57
        filename = pack + "/actions/" + action + ".yaml"
58
        fh = open(filename, 'w')
59
        fh.write(yaml.dump(action_meta, default_flow_style=False))
60
        fh.close()
61
62
actions = get_methods(digitalocean.Manager)
63
64
generate_meta(actions, 'digitalocean')
65