• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

akvo / rtmis / #1342

25 Apr 2024 10:35AM UTC coverage: 79.909% (-0.06%) from 79.964%
#1342

push

coveralls-python

dedenbangkit
[#1396] Modify k8s deadline and backoff

2583 of 3410 branches covered (75.75%)

Branch coverage included in aggregate %.

6175 of 7550 relevant lines covered (81.79%)

0.82 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

67.89
backend/utils/export_form.py
1
import os
1✔
2
import pathlib
1✔
3

4
import pandas as pd
1✔
5

6
from api.v1.v1_forms.models import Forms, Questions
1✔
7

8

9
meta_columns = ["id", "created_at", "created_by", "updated_at",
1✔
10
                "updated_by", "datapoint_name", "administration",
11
                "geolocation", "submission_type"]
12

13

14
def get_definition(form: Forms):
1✔
15
    questions = (
1✔
16
        Questions.objects.filter(form=form)
17
        .order_by("question_group__order", "order")
18
        .all()
19
    )
20
    framed = []
1✔
21
    for i, q in enumerate([qs.to_definition() for qs in questions]):
1✔
22
        rule = ""
1✔
23
        dependency = ""
1✔
24
        if q["rule"]:
1!
25
            rule = []
×
26
            for r in q["rule"]:
×
27
                rtext = f"{r}: " + str(q["rule"][r])
×
28
                rule.append(rtext)
×
29
            rule = " ".join(rule)
×
30
        if q["dependency"]:
1!
31
            dependency = []
×
32
            for d in q["dependency"]:
×
33
                did = Questions.objects.get(pk=d["id"]).name
×
34
                if d.get("options"):
×
35
                    options = "|".join(d["options"])
×
36
                    dtext = f"{did}: " + options
×
37
                    dependency.append(dtext)
×
38
                if d.get("min"):
×
39
                    dtext = f"{did}: higher than {d['min']}"
×
40
                    dependency.append(dtext)
×
41
                if d.get("max"):
×
42
                    dtext = f"{did}: lower than {d['max']}"
×
43
                    dependency.append(dtext)
×
44
            dependency = "\n".join(dependency)
×
45
        if q["options"]:
1✔
46
            for o in q["options"]:
1✔
47
                framed.append(
1✔
48
                    {
49
                        "qg_id": q["qg_id"],
50
                        "order": q["order"],
51
                        "id": q["id"],
52
                        "name": q["name"],
53
                        "label": q["label"],
54
                        "type": q["type"],
55
                        "option": o["value"],
56
                        "option_label": o["label"],
57
                        "required": "YES" if q["required"] else "NO",
58
                        "rule": rule,
59
                        "dependency": dependency,
60
                        "indexer": i + 1,
61
                    }
62
                )
63
        else:
64
            framed.append(
1✔
65
                {
66
                    "qg_id": q["qg_id"],
67
                    "order": q["order"],
68
                    "id": q["id"],
69
                    "name": q["name"],
70
                    "label": q["label"],
71
                    "type": q["type"],
72
                    "option": None,
73
                    "option_label": None,
74
                    "required": "YES" if q["required"] else "NO",
75
                    "rule": rule,
76
                    "dependency": dependency,
77
                    "indexer": i + 1,
78
                }
79
            )
80
    return framed
1✔
81

82

83
def generate_definition_sheet(form: Forms, writer: pd.ExcelWriter):
1✔
84
    definitions = get_definition(form=form)
1✔
85
    df = pd.DataFrame(definitions)
1✔
86
    question_columns = [
1✔
87
        "name",
88
        "label",
89
        "type",
90
        "required",
91
        "rule",
92
        "dependency",
93
    ]
94
    df_questions = df[question_columns]
1✔
95
    df_questions = df_questions.drop_duplicates()
1✔
96
    df_questions.to_excel(writer, sheet_name="questions", index=False)
1✔
97
    df_options = df[["name", "option", "option_label"]]
1✔
98
    df_options = df_options.dropna(subset=["option"])
1✔
99
    df_options = df_options.drop_duplicates()
1✔
100
    df_options = df_options.rename(
1✔
101
        columns={
102
            "name": "question",
103
            "option": "option",
104
            "option_label": "label",
105
        }
106
    )
107
    df_options.to_excel(writer, sheet_name="options", index=False)
1✔
108

109

110
def rearrange_definition_columns(col_names: list):
1✔
111
    col_question = list(filter(lambda x: x not in meta_columns, col_names))
1✔
112
    if len(col_question) == len(col_names):
1!
113
        return col_question
×
114
    col_names = meta_columns + col_question
1✔
115
    return col_names
1✔
116

117

118
def generate_excel(form: Forms):
1✔
119
    questions = questions = (
1✔
120
        Questions.objects.filter(form=form)
121
        .order_by("question_group__order", "order")
122
        .all()
123
    )
124
    data = pd.DataFrame(
1✔
125
        columns=[q.name for q in questions] + meta_columns,
126
        index=[0]
127
    )
128
    cols = list(data)
1✔
129
    col_names = rearrange_definition_columns(cols)
1✔
130
    data = data[col_names]
1✔
131
    form_name = form.name
1✔
132
    filename = f"{form.id}-{form_name}"
1✔
133
    directory = "tmp"
1✔
134
    pathlib.Path(directory).mkdir(parents=True, exist_ok=True)
1✔
135
    filepath = f"./{directory}/{filename}.xlsx"
1✔
136
    if os.path.exists(filepath):
1!
137
        os.remove(filepath)
×
138
    writer = pd.ExcelWriter(filepath, engine="xlsxwriter")
1✔
139
    data.to_excel(
1✔
140
        writer, sheet_name="data", startrow=1, header=False, index=False
141
    )
142
    workbook = writer.book
1✔
143
    worksheet = writer.sheets["data"]
1✔
144
    header_format = workbook.add_format(
1✔
145
        {"bold": True, "text_wrap": True, "valign": "top", "border": 1}
146
    )
147
    for col_num, value in enumerate(data.columns.values):
1✔
148
        worksheet.write(0, col_num, value, header_format)
1✔
149
    generate_definition_sheet(form=form, writer=writer)
1✔
150
    writer.save()
1✔
151
    return filepath
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc