Completed
Pull Request — master (#571)
by Anthony
02:19
created

FormatCSVAction.run()   B

Complexity

Conditions 5

Size

Total Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 5
c 1
b 0
f 1
dl 0
loc 19
rs 8.5454
1
import csv
2
from StringIO import StringIO
3
4
from st2actions.runners.pythonrunner import Action
5
from st2common.exceptions.action import InvalidActionParameterException
6
7
__all__ = [
8
    'FormatCSVAction'
9
]
10
11
12
class FormatCSVAction(Action):
13
    def run(self, data, delimiter=',', quote_char='"'):
14
        if len(data) == 0:
15
            raise InvalidActionParameterException("data has no rows")
16
        if not isinstance(data, list):
17
            raise InvalidActionParameterException("data must be a list")
18
        if not isinstance(data[0], dict):
19
            raise InvalidActionParameterException("data must be a list of dict")
20
21
        fieldnames = data[0].keys()
22
        sh = StringIO()
23
        writer = csv.DictWriter(sh, fieldnames=fieldnames)
24
25
        writer.writeheader()
26
        for row in data:
27
            writer.writerow(row)
28
29
        out = sh.get_value()
30
        sh.close()
31
        return out
32