forked from oppia/oppia
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdomain.py
140 lines (103 loc) · 3.69 KB
/
domain.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
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
# coding: utf-8
#
# Copyright 2014 The Oppia Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Domain objects used within multiple extensions."""
from __future__ import annotations
from typing import Any, Dict, List, Optional, TypedDict, Union
class VertexDict(TypedDict):
"""Type for the dictionary representation of graph's vertices."""
x: float
y: float
label: str
class EdgeDict(TypedDict):
"""Type for the dictionary representation of graph's edges."""
src: int
dst: int
weight: int
class GraphDict(TypedDict):
"""Type for the dictionary representation of graph."""
vertices: List[VertexDict]
edges: List[EdgeDict]
isLabeled: bool
isDirected: bool
isWeighted: bool
class RegionDict(TypedDict):
"""Type representing the dictionary for region's area."""
regionType: str
area: List[List[float]]
class LabeledRegionDict(TypedDict):
"""Type representing the dictionary for image's labeled region."""
label: str
region: RegionDict
class ImageAndRegionDict(TypedDict):
"""Dictionary representation of imageAndRegions customization arg value."""
imagePath: str
labeledRegions: List[LabeledRegionDict]
class CustomizationArgSubtitledUnicodeDefaultDict(TypedDict):
"""Type for the dictionary representation of CustomizationArgSpec's
SubtitledUnicode default_value.
"""
content_id: Optional[str]
unicode_str: str
class CustomizationArgSubtitledHtmlDefaultDict(TypedDict):
"""Type for the dictionary representation of CustomizationArgSpec's
SubtitledHtml default_value.
"""
content_id: Optional[str]
html: str
AllowedDefaultValueTypes = Union[
str,
float,
GraphDict,
ImageAndRegionDict,
CustomizationArgSubtitledUnicodeDefaultDict,
List[CustomizationArgSubtitledHtmlDefaultDict],
None
]
class CustomizationArgSpecsDict(TypedDict):
"""Dictionary representing the CustomizationArgSpec object."""
name: str
description: str
# Here we use type Any because values in schema dictionary can be of type
# str, List, Dict, nested Dict and other types too.
schema: Dict[str, Any]
default_value: AllowedDefaultValueTypes
class CustomizationArgSpec:
"""Value object for a customization arg specification."""
# Here we use type Any because the argument 'schema' can accept schema
# dictionaries and values in schema dictionaries can be of type str, List,
# Dict, nested Dict and other types too.
def __init__(
self,
name: str,
description: str,
schema: Dict[str, Any],
default_value: AllowedDefaultValueTypes
) -> None:
self.name = name
self.description = description
self.schema = schema
self.default_value = default_value
def to_dict(self) -> CustomizationArgSpecsDict:
"""Returns a dict representing this CustomizationArgSpec domain object.
Returns:
dict. A dict, mapping all fields of CustomizationArgSpec instance.
"""
return {
'name': self.name,
'description': self.description,
'schema': self.schema,
'default_value': self.default_value
}