Skip to content

Handle Data


Handle data module for the Flask server.

This module provides functions to interact with the MongoDB database and retrieve data related to video annotations.

Functions:

Name Description
get_graphs

Retrieves all graphs associated with the given video ID.

check_graphs

Checks if there are any graphs associated with the given video ID and email.

get_definitions_fragments

Retrieves definitions for the specified email, video ID, and fragments.

check_graphs(video_id, email)

Checks if there are any graphs associated with the given video ID and email.

Parameters:

Name Type Description Default
video_id str

The ID of the video.

required
email str

The email address associated with the graphs.

required

Returns:

Type Description
list

A list of dictionaries containing annotator ID and video ID.

Source code in apps/augmentator/src/flask-server/handle_data.py
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
def check_graphs(video_id, email):
    """
    Checks if there are any graphs associated with the given video ID and email.

    Parameters
    ----------
    video_id : str
        The ID of the video.
    email : str
        The email address associated with the graphs.

    Returns
    -------
    list
        A list of dictionaries containing annotator ID and video ID.
    """
    db = data.load_db()
    collection = db.graphs
    q = collection.find({"video_id":video_id,"email":email})
    res = []
    for graph in q:
        res.append({"annotator_id": graph["annotator_id"], "video_id": video_id})
    return res

get_definitions_fragments(email, video_id, fragments)

Retrieves definitions for the specified email, video ID, and fragments.

Parameters:

Name Type Description Default
email str

The email address associated with the definitions.

required
video_id str

The ID of the video.

required
fragments list

A list of fragments with start and end times.

required

Returns:

Type Description
list

A list of definitions for the specified fragments.

Source code in apps/augmentator/src/flask-server/handle_data.py
 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
108
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
def get_definitions_fragments(email, video_id, fragments):
    """
    Retrieves definitions for the specified email, video ID, and fragments.

    Parameters
    ----------
    email : str
        The email address associated with the definitions.
    video_id : str
        The ID of the video.
    fragments : list
        A list of fragments with start and end times.

    Returns
    -------
    list
        A list of definitions for the specified fragments.
    """
    db = data.load_db()
    collection = db.graphs
    print(email, video_id)
    defs = []



    pipeline = [
        {"$unwind": "$graph.@graph"},
        {
            "$match":
                {
                    "video_id": str(video_id),
                    "email": str(email),
                    "graph.@graph.type": "oa:annotation",
                    "graph.@graph.motivation": "describing",
                    "graph.@graph.skos:note": "Definition",


                }

        },

        {"$project":
            {
                "concept": "$graph.@graph.body",
                "start": "$graph.@graph.target.selector.startSelector.value",
                "end": "$graph.@graph.target.selector.endSelector.value",
                "_id": 0
            }
        },

        {"$sort": {"start": 1}}

    ]

    aggregation = collection.aggregate(pipeline)
    definitions = list(aggregation)



    for d in definitions:
        d["concept"] = d["concept"].replace("edu:", "").replace("_", " ") 
        d["end"] = d["end"].replace("^^xsd:dateTime","")
        d["start"] = d["start"].replace("^^xsd:dateTime", "")



    if fragments is not None:
        for f in fragments:

            start_time = f['start']
            end_time = f['end']

            concepts = ""
            added = []

            for d in definitions:   
                if d["start"] < end_time and d["start"] > start_time and d["concept"] not in added:
                    concepts += d["concept"] + ","
                    added.append(d["concept"])


            defs.append(concepts[0:-1])


    return defs

get_graphs(video_id)

Retrieves all graphs associated with the given video ID.

Parameters:

Name Type Description Default
video_id str

The ID of the video.

required

Returns:

Type Description
list

A list of dictionaries containing annotator ID and video ID.

Source code in apps/augmentator/src/flask-server/handle_data.py
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def get_graphs(video_id):
    """
    Retrieves all graphs associated with the given video ID.

    Parameters
    ----------
    video_id : str
        The ID of the video.

    Returns
    -------
    list
        A list of dictionaries containing annotator ID and video ID.
    """
    db = data.load_db()
    collection = db.graphs
    q = collection.find({"video_id":video_id})
    res = []
    for graph in q:
        res.append({"annotator_id": graph["annotator_id"], "video_id": video_id})
    return res