Coverage for heritrace / utils / datatypes.py: 100%
6 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-07-02 10:16 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-07-02 10:16 +0000
1# SPDX-FileCopyrightText: 2025 Arcangelo Massari <arcangelo.massari@unibo.it>
2#
3# SPDX-License-Identifier: ISC
5from flask_babel import gettext
6from rdflib import XSD
8from heritrace.utils.datatypes_validation import (
9 validate_base64_binary,
10 validate_boolean,
11 validate_byte,
12 validate_date,
13 validate_date_time,
14 validate_date_time_stamp,
15 validate_day_time_duration,
16 validate_decimal,
17 validate_double,
18 validate_duration,
19 validate_entities,
20 validate_entity,
21 validate_float,
22 validate_g_year,
23 validate_g_year_month,
24 validate_hex_binary,
25 validate_hour,
26 validate_id,
27 validate_idref,
28 validate_idrefs,
29 validate_integer,
30 validate_long,
31 validate_minute,
32 validate_name,
33 validate_ncname,
34 validate_negative_integer,
35 validate_nmtoken,
36 validate_nmtokens,
37 validate_non_negative_integer,
38 validate_non_positive_integer,
39 validate_normalized_string,
40 validate_notation,
41 validate_positive_integer,
42 validate_qname,
43 validate_second,
44 validate_short,
45 validate_string,
46 validate_time,
47 validate_timezone_offset,
48 validate_unsigned_byte,
49 validate_unsigned_int,
50 validate_unsigned_long,
51 validate_unsigned_short,
52 validate_url,
53 validate_year_month_duration,
54)
57def get_datatype_options() -> list[dict[str, str]]:
58 return [
59 {"label": gettext("Text (string)"), "uri": str(XSD.string)},
60 {"label": gettext("Web address (URL)"), "uri": str(XSD.anyURI)},
61 {"label": gettext("Whole number (integer)"), "uri": str(XSD.integer)},
62 {"label": gettext("True or False (boolean)"), "uri": str(XSD.boolean)},
63 {"label": gettext("Date (YYYY-MM-DD)"), "uri": str(XSD.date)},
64 {"label": gettext("Decimal number"), "uri": str(XSD.decimal)},
65 {
66 "label": gettext("Date and Time (YYYY-MM-DDThh:mm:ss)"),
67 "uri": str(XSD.dateTime),
68 },
69 {"label": gettext("Year (YYYY)"), "uri": str(XSD.gYear)},
70 {"label": gettext("Floating point number"), "uri": str(XSD.float)},
71 {"label": gettext("Time (hh:mm:ss)"), "uri": str(XSD.time)},
72 {
73 "label": gettext("Normalized text (no line breaks)"),
74 "uri": str(XSD.normalizedString),
75 },
76 {"label": gettext("Language code (e.g., en, it)"), "uri": str(XSD.language)},
77 {
78 "label": gettext("Double precision floating point number"),
79 "uri": str(XSD.double),
80 },
81 {"label": gettext("Tokenized text (single word)"), "uri": str(XSD.token)},
82 {
83 "label": gettext("Non-negative integer (0 or positive)"),
84 "uri": str(XSD.nonNegativeInteger),
85 },
86 {
87 "label": gettext("Positive integer (greater than 0)"),
88 "uri": str(XSD.positiveInteger),
89 },
90 {
91 "label": gettext("Non-positive integer (0 or negative)"),
92 "uri": str(XSD.nonPositiveInteger),
93 },
94 {"label": gettext("Negative integer"), "uri": str(XSD.negativeInteger)},
95 {"label": gettext("Long integer"), "uri": str(XSD.long)},
96 {"label": gettext("Short integer"), "uri": str(XSD.short)},
97 {"label": gettext("Byte-sized integer"), "uri": str(XSD.byte)},
98 {"label": gettext("Unsigned integer"), "uri": str(XSD.unsignedInt)},
99 {"label": gettext("Unsigned long integer"), "uri": str(XSD.unsignedLong)},
100 {"label": gettext("Unsigned short integer"), "uri": str(XSD.unsignedShort)},
101 {"label": gettext("Unsigned byte"), "uri": str(XSD.unsignedByte)},
102 {"label": gettext("Month (MM)"), "uri": str(XSD.gMonth)},
103 {"label": gettext("Day of the month (DD)"), "uri": str(XSD.gDay)},
104 {
105 "label": gettext("Duration (e.g., P1Y2M3DT4H5M6S)"),
106 "uri": str(XSD.duration),
107 },
108 {"label": gettext("Hexadecimal binary"), "uri": str(XSD.hexBinary)},
109 {"label": gettext("Base64 encoded binary"), "uri": str(XSD.base64Binary)},
110 ]
113DATATYPE_MAPPING = [
114 [XSD.string, validate_string, "text"],
115 [XSD.normalizedString, validate_normalized_string, "text"],
116 [XSD.integer, validate_integer, "number"],
117 [XSD.int, validate_integer, "number"],
118 [XSD.positiveInteger, validate_positive_integer, "number"],
119 [XSD.negativeInteger, validate_negative_integer, "number"],
120 [XSD.nonNegativeInteger, validate_non_negative_integer, "number"],
121 [XSD.nonPositiveInteger, validate_non_positive_integer, "number"],
122 [XSD.byte, validate_byte, "number"],
123 [XSD.short, validate_short, "number"],
124 [XSD.long, validate_long, "number"],
125 [XSD.unsignedByte, validate_unsigned_byte, "number"],
126 [XSD.unsignedShort, validate_unsigned_short, "number"],
127 [XSD.unsignedLong, validate_unsigned_long, "number"],
128 [XSD.unsignedInt, validate_unsigned_int, "number"],
129 [XSD.float, validate_float, "number"],
130 [XSD.double, validate_double, "number"],
131 [XSD.decimal, validate_decimal, "number"],
132 [XSD.duration, validate_duration, "text"],
133 [XSD.dayTimeDuration, validate_day_time_duration, "text"],
134 [XSD.yearMonthDuration, validate_year_month_duration, "text"],
135 [XSD.dateTime, validate_date_time, "datetime-local"],
136 [XSD.dateTimeStamp, validate_date_time_stamp, "datetime-local"],
137 [XSD.gYear, validate_g_year, "number"],
138 [XSD.gYearMonth, validate_g_year_month, "month"],
139 [XSD.date, validate_date, "date"],
140 [XSD.time, validate_time, "time"],
141 [XSD.hour, validate_hour, "time"],
142 [XSD.timezoneOffset, validate_timezone_offset, "time"],
143 [XSD.minute, validate_minute, "time"],
144 [XSD.second, validate_second, "time"],
145 [XSD.boolean, validate_boolean, "checkbox"],
146 [XSD.hexBinary, validate_hex_binary, "password"],
147 [XSD.base64Binary, validate_base64_binary, "password"],
148 [XSD.anyURI, validate_url, "url"],
149 [XSD.QName, validate_qname, "text"],
150 [XSD.ENTITIES, validate_entities, "text"],
151 [XSD.ENTITY, validate_entity, "text"],
152 [XSD.ID, validate_id, "text"],
153 [XSD.IDREF, validate_idref, "text"],
154 [XSD.IDREFS, validate_idrefs, "text"],
155 [XSD.NCName, validate_ncname, "text"],
156 [XSD.NMTOKEN, validate_nmtoken, "text"],
157 [XSD.NMTOKENS, validate_nmtokens, "text"],
158 [XSD.NOTATION, validate_notation, "text"],
159 [XSD.Name, validate_name, "text"],
160]