Completed
Pull Request — master (#406)
by Edward
02:04
created

get_methods()   C

Complexity

Conditions 8

Size

Total Lines 15

Duplication

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