Skip to content

OdkForm

ODKForm

ODKForm()

Bases: object

Support for parsing an XLS Form, currently a work in progress...

Source code in osm_fieldwork/ODKForm.py
32
33
34
35
36
37
38
39
def __init__(self):
    """Returns:
    (ODKForm): An instance of this object.
    """
    self.fields = dict()
    self.nodesets = dict()
    self.groups = dict()
    self.ignore = ("label", "@appearance", "hint", "upload")

parseSelect

parseSelect(select)

Parse a select statement in XML.

Parameters:

Name Type Description Default
select dict

The select in XML:

required

Returns:

Type Description
dict

The data from the select

Source code in osm_fieldwork/ODKForm.py
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
def parseSelect(
    self,
    select: dict,
):
    """Parse a select statement in XML.

    Args:
        select (dict): The select in XML:

    Returns:
        (dict): The data from the select
    """
    print("parseSelect %r" % type(select))
    newsel = dict()
    if "item" in select:
        data = self.parseItems(select["item"])
        ref = os.path.basename(select["@ref"])
        for key in data:
            if key in self.ignore:
                continue
            newsel[ref] = data
        print("\tQQQQQ %r" % (newsel))
    return newsel

parseItems

parseItems(items)

Parse the items in a select list.

Parameters:

Name Type Description Default
items list

The select items list in XML:

required

Returns:

Type Description
dict

The data from the list of items

Source code in osm_fieldwork/ODKForm.py
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
def parseItems(
    self,
    items: list,
):
    """Parse the items in a select list.

    Args:
        items (list): The select items list in XML:

    Returns:
        (dict): The data from the list of items
    """
    print("\tparseItems: %r: %r" % (type(items), items))
    newitems = list()
    # if type(items) == OrderedDict:
    #     data = list()
    #     data.append(items)
    # else:
    #     data = items

    for values in items:
        newitems.append(values["value"])

        # if type(values) == str:
        #     continue

    #     val = values['label']['@ref'].replace("/data/", "")
    #     tmp = val.split('/')
    #     group = tmp[0].replace("jr:itext(\'", "")
    #     fields = len(tmp)
    #     if fields > 2:
    #         subgroup = tmp[1]
    #         label = tmp[2].replace(":label\')", "")
    #     else:
    #         subgroup = None
    #         label = tmp[1].replace(":label\')", "")
    #     # print("VALUES: %r / %r / %r" % (group, subgroup, label))
    #     if subgroup not in newdata:
    #         newdata[subgroup] = list()
    #     #newdata[subgroup].append(label)
    #     newitems.append(label)
    # return group, subgroup, newitems
    return newitems

parseGroup

parseGroup(group)

Convert the XML of a group into a data structure.

Parameters:

Name Type Description Default
group dict

The group data

required
Source code in osm_fieldwork/ODKForm.py
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
def parseGroup(
    self,
    group: dict(),
):
    """Convert the XML of a group into a data structure.

    Args:
        group (dict): The group data
    """
    print("\tparseGroup %r" % (type(group)))
    if type(group) == list:
        for _val in group:
            for k in group:
                print("\nZZZZ1 %r" % (k))
    else:  # it's a list
        for keyword, data in group.items():
            # FIXME: for now,. ignore media files
            if keyword in self.ignore:
                continue
            print("WWW3 %r, %r" % (keyword, type(data)))
            # pat = re.compile('select[0-9]*')
            # if pat.match(keyword):
            if keyword[0:6] == "select":
                print("WWW4 select")
                self.parseSelect(data)

Last update: September 5, 2024