dsp-tools 0.9.13__py3-none-any.whl → 18.3.0.post13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. dsp_tools/__init__.py +5 -0
  2. dsp_tools/cli/args.py +47 -0
  3. dsp_tools/cli/call_action.py +85 -0
  4. dsp_tools/cli/call_action_files_only.py +101 -0
  5. dsp_tools/cli/call_action_with_network.py +207 -0
  6. dsp_tools/cli/create_parsers.py +479 -0
  7. dsp_tools/cli/entry_point.py +322 -0
  8. dsp_tools/cli/utils.py +87 -0
  9. dsp_tools/clients/CLAUDE.md +420 -0
  10. dsp_tools/clients/authentication_client.py +14 -0
  11. dsp_tools/clients/authentication_client_live.py +66 -0
  12. dsp_tools/clients/connection.py +35 -0
  13. dsp_tools/clients/connection_live.py +233 -0
  14. dsp_tools/clients/fuseki_metrics.py +60 -0
  15. dsp_tools/clients/group_user_clients.py +35 -0
  16. dsp_tools/clients/group_user_clients_live.py +181 -0
  17. dsp_tools/clients/legal_info_client.py +23 -0
  18. dsp_tools/clients/legal_info_client_live.py +132 -0
  19. dsp_tools/clients/list_client.py +49 -0
  20. dsp_tools/clients/list_client_live.py +166 -0
  21. dsp_tools/clients/metadata_client.py +24 -0
  22. dsp_tools/clients/metadata_client_live.py +47 -0
  23. dsp_tools/clients/ontology_clients.py +49 -0
  24. dsp_tools/clients/ontology_create_client_live.py +166 -0
  25. dsp_tools/clients/ontology_get_client_live.py +80 -0
  26. dsp_tools/clients/permissions_client.py +68 -0
  27. dsp_tools/clients/project_client.py +16 -0
  28. dsp_tools/clients/project_client_live.py +66 -0
  29. dsp_tools/commands/create/communicate_problems.py +24 -0
  30. dsp_tools/commands/create/create.py +134 -0
  31. dsp_tools/commands/create/create_on_server/cardinalities.py +111 -0
  32. dsp_tools/commands/create/create_on_server/classes.py +99 -0
  33. dsp_tools/commands/create/create_on_server/complete_ontologies.py +116 -0
  34. dsp_tools/commands/create/create_on_server/default_permissions.py +134 -0
  35. dsp_tools/commands/create/create_on_server/group_users.py +165 -0
  36. dsp_tools/commands/create/create_on_server/lists.py +163 -0
  37. dsp_tools/commands/create/create_on_server/mappers.py +12 -0
  38. dsp_tools/commands/create/create_on_server/onto_utils.py +74 -0
  39. dsp_tools/commands/create/create_on_server/ontology.py +52 -0
  40. dsp_tools/commands/create/create_on_server/project.py +68 -0
  41. dsp_tools/commands/create/create_on_server/properties.py +119 -0
  42. dsp_tools/commands/create/exceptions.py +29 -0
  43. dsp_tools/commands/create/lists_only.py +66 -0
  44. dsp_tools/commands/create/models/create_problems.py +87 -0
  45. dsp_tools/commands/create/models/parsed_ontology.py +88 -0
  46. dsp_tools/commands/create/models/parsed_project.py +81 -0
  47. dsp_tools/commands/create/models/rdf_ontology.py +12 -0
  48. dsp_tools/commands/create/models/server_project_info.py +100 -0
  49. dsp_tools/commands/create/parsing/parse_lists.py +45 -0
  50. dsp_tools/commands/create/parsing/parse_ontology.py +243 -0
  51. dsp_tools/commands/create/parsing/parse_project.py +149 -0
  52. dsp_tools/commands/create/parsing/parsing_utils.py +40 -0
  53. dsp_tools/commands/create/project_validate.py +595 -0
  54. dsp_tools/commands/create/serialisation/ontology.py +119 -0
  55. dsp_tools/commands/create/serialisation/project.py +44 -0
  56. dsp_tools/commands/excel2json/CLAUDE.md +101 -0
  57. dsp_tools/commands/excel2json/json_header.py +321 -0
  58. dsp_tools/commands/excel2json/lists/__init__.py +0 -0
  59. dsp_tools/commands/excel2json/lists/compliance_checks.py +292 -0
  60. dsp_tools/commands/excel2json/lists/make_lists.py +247 -0
  61. dsp_tools/commands/excel2json/lists/models/__init__.py +0 -0
  62. dsp_tools/commands/excel2json/lists/models/deserialise.py +30 -0
  63. dsp_tools/commands/excel2json/lists/models/input_error.py +216 -0
  64. dsp_tools/commands/excel2json/lists/models/serialise.py +57 -0
  65. dsp_tools/commands/excel2json/lists/utils.py +81 -0
  66. dsp_tools/commands/excel2json/models/__init__.py +0 -0
  67. dsp_tools/commands/excel2json/models/input_error.py +416 -0
  68. dsp_tools/commands/excel2json/models/json_header.py +175 -0
  69. dsp_tools/commands/excel2json/models/list_node_name.py +16 -0
  70. dsp_tools/commands/excel2json/models/ontology.py +76 -0
  71. dsp_tools/commands/excel2json/old_lists.py +328 -0
  72. dsp_tools/commands/excel2json/project.py +280 -0
  73. dsp_tools/commands/excel2json/properties.py +370 -0
  74. dsp_tools/commands/excel2json/resources.py +336 -0
  75. dsp_tools/commands/excel2json/utils.py +352 -0
  76. dsp_tools/commands/excel2xml/__init__.py +7 -0
  77. dsp_tools/commands/excel2xml/excel2xml_cli.py +523 -0
  78. dsp_tools/commands/excel2xml/excel2xml_lib.py +1953 -0
  79. dsp_tools/commands/excel2xml/propertyelement.py +47 -0
  80. dsp_tools/commands/get/__init__.py +0 -0
  81. dsp_tools/commands/get/get.py +166 -0
  82. dsp_tools/commands/get/get_permissions.py +257 -0
  83. dsp_tools/commands/get/get_permissions_legacy.py +89 -0
  84. dsp_tools/commands/get/legacy_models/__init__.py +0 -0
  85. dsp_tools/commands/get/legacy_models/context.py +318 -0
  86. dsp_tools/commands/get/legacy_models/group.py +241 -0
  87. dsp_tools/commands/get/legacy_models/helpers.py +47 -0
  88. dsp_tools/commands/get/legacy_models/listnode.py +390 -0
  89. dsp_tools/commands/get/legacy_models/model.py +12 -0
  90. dsp_tools/commands/get/legacy_models/ontology.py +324 -0
  91. dsp_tools/commands/get/legacy_models/project.py +366 -0
  92. dsp_tools/commands/get/legacy_models/propertyclass.py +417 -0
  93. dsp_tools/commands/get/legacy_models/resourceclass.py +676 -0
  94. dsp_tools/commands/get/legacy_models/user.py +438 -0
  95. dsp_tools/commands/get/models/__init__.py +0 -0
  96. dsp_tools/commands/get/models/permissions_models.py +10 -0
  97. dsp_tools/commands/id2iri.py +258 -0
  98. dsp_tools/commands/ingest_xmlupload/__init__.py +0 -0
  99. dsp_tools/commands/ingest_xmlupload/bulk_ingest_client.py +178 -0
  100. dsp_tools/commands/ingest_xmlupload/create_resources/__init__.py +0 -0
  101. dsp_tools/commands/ingest_xmlupload/create_resources/apply_ingest_id.py +69 -0
  102. dsp_tools/commands/ingest_xmlupload/create_resources/upload_xml.py +166 -0
  103. dsp_tools/commands/ingest_xmlupload/create_resources/user_information.py +121 -0
  104. dsp_tools/commands/ingest_xmlupload/ingest_files/__init__.py +0 -0
  105. dsp_tools/commands/ingest_xmlupload/ingest_files/ingest_files.py +64 -0
  106. dsp_tools/commands/ingest_xmlupload/upload_files/__init__.py +0 -0
  107. dsp_tools/commands/ingest_xmlupload/upload_files/filechecker.py +20 -0
  108. dsp_tools/commands/ingest_xmlupload/upload_files/input_error.py +57 -0
  109. dsp_tools/commands/ingest_xmlupload/upload_files/upload_failures.py +66 -0
  110. dsp_tools/commands/ingest_xmlupload/upload_files/upload_files.py +67 -0
  111. dsp_tools/commands/resume_xmlupload/__init__.py +0 -0
  112. dsp_tools/commands/resume_xmlupload/resume_xmlupload.py +96 -0
  113. dsp_tools/commands/start_stack.py +428 -0
  114. dsp_tools/commands/update_legal/CLAUDE.md +344 -0
  115. dsp_tools/commands/update_legal/__init__.py +0 -0
  116. dsp_tools/commands/update_legal/core.py +182 -0
  117. dsp_tools/commands/update_legal/csv_operations.py +135 -0
  118. dsp_tools/commands/update_legal/models.py +87 -0
  119. dsp_tools/commands/update_legal/xml_operations.py +247 -0
  120. dsp_tools/commands/validate_data/CLAUDE.md +159 -0
  121. dsp_tools/commands/validate_data/__init__.py +0 -0
  122. dsp_tools/commands/validate_data/constants.py +59 -0
  123. dsp_tools/commands/validate_data/mappers.py +143 -0
  124. dsp_tools/commands/validate_data/models/__init__.py +0 -0
  125. dsp_tools/commands/validate_data/models/api_responses.py +45 -0
  126. dsp_tools/commands/validate_data/models/input_problems.py +119 -0
  127. dsp_tools/commands/validate_data/models/rdf_like_data.py +117 -0
  128. dsp_tools/commands/validate_data/models/validation.py +106 -0
  129. dsp_tools/commands/validate_data/prepare_data/__init__.py +0 -0
  130. dsp_tools/commands/validate_data/prepare_data/get_rdf_like_data.py +296 -0
  131. dsp_tools/commands/validate_data/prepare_data/make_data_graph.py +91 -0
  132. dsp_tools/commands/validate_data/prepare_data/prepare_data.py +184 -0
  133. dsp_tools/commands/validate_data/process_validation_report/__init__.py +0 -0
  134. dsp_tools/commands/validate_data/process_validation_report/get_user_validation_message.py +358 -0
  135. dsp_tools/commands/validate_data/process_validation_report/query_validation_result.py +507 -0
  136. dsp_tools/commands/validate_data/process_validation_report/reformat_validation_results.py +150 -0
  137. dsp_tools/commands/validate_data/shacl_cli_validator.py +70 -0
  138. dsp_tools/commands/validate_data/sparql/__init__.py +0 -0
  139. dsp_tools/commands/validate_data/sparql/cardinality_shacl.py +209 -0
  140. dsp_tools/commands/validate_data/sparql/construct_shacl.py +92 -0
  141. dsp_tools/commands/validate_data/sparql/legal_info_shacl.py +36 -0
  142. dsp_tools/commands/validate_data/sparql/value_shacl.py +357 -0
  143. dsp_tools/commands/validate_data/utils.py +59 -0
  144. dsp_tools/commands/validate_data/validate_data.py +283 -0
  145. dsp_tools/commands/validate_data/validation/__init__.py +0 -0
  146. dsp_tools/commands/validate_data/validation/check_duplicate_files.py +55 -0
  147. dsp_tools/commands/validate_data/validation/check_for_unknown_classes.py +67 -0
  148. dsp_tools/commands/validate_data/validation/get_validation_report.py +94 -0
  149. dsp_tools/commands/validate_data/validation/validate_ontology.py +107 -0
  150. dsp_tools/commands/xmlupload/CLAUDE.md +292 -0
  151. dsp_tools/commands/xmlupload/__init__.py +0 -0
  152. dsp_tools/commands/xmlupload/iri_resolver.py +21 -0
  153. dsp_tools/commands/xmlupload/make_rdf_graph/__init__.py +0 -0
  154. dsp_tools/commands/xmlupload/make_rdf_graph/constants.py +63 -0
  155. dsp_tools/commands/xmlupload/make_rdf_graph/jsonld_utils.py +44 -0
  156. dsp_tools/commands/xmlupload/make_rdf_graph/make_file_value.py +77 -0
  157. dsp_tools/commands/xmlupload/make_rdf_graph/make_resource_and_values.py +114 -0
  158. dsp_tools/commands/xmlupload/make_rdf_graph/make_values.py +262 -0
  159. dsp_tools/commands/xmlupload/models/__init__.py +0 -0
  160. dsp_tools/commands/xmlupload/models/bitstream_info.py +18 -0
  161. dsp_tools/commands/xmlupload/models/formatted_text_value.py +10 -0
  162. dsp_tools/commands/xmlupload/models/ingest.py +143 -0
  163. dsp_tools/commands/xmlupload/models/input_problems.py +58 -0
  164. dsp_tools/commands/xmlupload/models/lookup_models.py +21 -0
  165. dsp_tools/commands/xmlupload/models/permission.py +45 -0
  166. dsp_tools/commands/xmlupload/models/permissions_parsed.py +93 -0
  167. dsp_tools/commands/xmlupload/models/processed/__init__.py +0 -0
  168. dsp_tools/commands/xmlupload/models/processed/file_values.py +29 -0
  169. dsp_tools/commands/xmlupload/models/processed/res.py +27 -0
  170. dsp_tools/commands/xmlupload/models/processed/values.py +101 -0
  171. dsp_tools/commands/xmlupload/models/rdf_models.py +26 -0
  172. dsp_tools/commands/xmlupload/models/upload_clients.py +14 -0
  173. dsp_tools/commands/xmlupload/models/upload_state.py +20 -0
  174. dsp_tools/commands/xmlupload/prepare_xml_input/__init__.py +0 -0
  175. dsp_tools/commands/xmlupload/prepare_xml_input/ark2iri.py +55 -0
  176. dsp_tools/commands/xmlupload/prepare_xml_input/get_processed_resources.py +252 -0
  177. dsp_tools/commands/xmlupload/prepare_xml_input/iiif_uri_validator.py +50 -0
  178. dsp_tools/commands/xmlupload/prepare_xml_input/list_client.py +120 -0
  179. dsp_tools/commands/xmlupload/prepare_xml_input/prepare_xml_input.py +67 -0
  180. dsp_tools/commands/xmlupload/prepare_xml_input/read_validate_xml_file.py +58 -0
  181. dsp_tools/commands/xmlupload/prepare_xml_input/transform_input_values.py +118 -0
  182. dsp_tools/commands/xmlupload/resource_create_client.py +25 -0
  183. dsp_tools/commands/xmlupload/richtext_id2iri.py +37 -0
  184. dsp_tools/commands/xmlupload/stash/__init__.py +0 -0
  185. dsp_tools/commands/xmlupload/stash/analyse_circular_reference_graph.py +236 -0
  186. dsp_tools/commands/xmlupload/stash/create_info_for_graph.py +53 -0
  187. dsp_tools/commands/xmlupload/stash/graph_models.py +87 -0
  188. dsp_tools/commands/xmlupload/stash/stash_circular_references.py +68 -0
  189. dsp_tools/commands/xmlupload/stash/stash_models.py +109 -0
  190. dsp_tools/commands/xmlupload/stash/upload_stashed_resptr_props.py +106 -0
  191. dsp_tools/commands/xmlupload/stash/upload_stashed_xml_texts.py +196 -0
  192. dsp_tools/commands/xmlupload/upload_config.py +76 -0
  193. dsp_tools/commands/xmlupload/write_diagnostic_info.py +27 -0
  194. dsp_tools/commands/xmlupload/xmlupload.py +516 -0
  195. dsp_tools/config/__init__.py +0 -0
  196. dsp_tools/config/logger_config.py +69 -0
  197. dsp_tools/config/warnings_config.py +32 -0
  198. dsp_tools/error/__init__.py +0 -0
  199. dsp_tools/error/custom_warnings.py +39 -0
  200. dsp_tools/error/exceptions.py +204 -0
  201. dsp_tools/error/problems.py +10 -0
  202. dsp_tools/error/xmllib_errors.py +20 -0
  203. dsp_tools/error/xmllib_warnings.py +54 -0
  204. dsp_tools/error/xmllib_warnings_util.py +159 -0
  205. dsp_tools/error/xsd_validation_error_msg.py +19 -0
  206. dsp_tools/legacy_models/__init__.py +0 -0
  207. dsp_tools/legacy_models/datetimestamp.py +81 -0
  208. dsp_tools/legacy_models/langstring.py +253 -0
  209. dsp_tools/legacy_models/projectContext.py +49 -0
  210. dsp_tools/py.typed +0 -0
  211. dsp_tools/resources/schema/data.xsd +648 -0
  212. dsp_tools/resources/schema/lists-only.json +72 -0
  213. dsp_tools/resources/schema/project.json +1258 -0
  214. dsp_tools/resources/schema/properties-only.json +874 -0
  215. dsp_tools/resources/schema/resources-only.json +140 -0
  216. dsp_tools/resources/start-stack/docker-compose.override-host.j2 +11 -0
  217. dsp_tools/resources/start-stack/docker-compose.override.yml +11 -0
  218. dsp_tools/resources/start-stack/docker-compose.yml +88 -0
  219. dsp_tools/resources/start-stack/dsp-app-config.json +45 -0
  220. dsp_tools/resources/start-stack/dsp-app-config.override-host.j2 +26 -0
  221. dsp_tools/resources/validate_data/api-shapes-resource-cardinalities.ttl +191 -0
  222. dsp_tools/resources/validate_data/api-shapes.ttl +804 -0
  223. dsp_tools/resources/validate_data/shacl-cli-image.yml +4 -0
  224. dsp_tools/resources/validate_data/validate-ontology.ttl +99 -0
  225. dsp_tools/utils/__init__.py +0 -0
  226. dsp_tools/utils/ansi_colors.py +32 -0
  227. dsp_tools/utils/data_formats/__init__.py +0 -0
  228. dsp_tools/utils/data_formats/date_util.py +166 -0
  229. dsp_tools/utils/data_formats/iri_util.py +30 -0
  230. dsp_tools/utils/data_formats/shared.py +81 -0
  231. dsp_tools/utils/data_formats/uri_util.py +76 -0
  232. dsp_tools/utils/fuseki_bloating.py +63 -0
  233. dsp_tools/utils/json_parsing.py +22 -0
  234. dsp_tools/utils/rdf_constants.py +42 -0
  235. dsp_tools/utils/rdflib_utils.py +10 -0
  236. dsp_tools/utils/replace_id_with_iri.py +66 -0
  237. dsp_tools/utils/request_utils.py +238 -0
  238. dsp_tools/utils/xml_parsing/__init__.py +0 -0
  239. dsp_tools/utils/xml_parsing/get_lookups.py +32 -0
  240. dsp_tools/utils/xml_parsing/get_parsed_resources.py +325 -0
  241. dsp_tools/utils/xml_parsing/models/__init__.py +0 -0
  242. dsp_tools/utils/xml_parsing/models/parsed_resource.py +76 -0
  243. dsp_tools/utils/xml_parsing/parse_clean_validate_xml.py +137 -0
  244. dsp_tools/xmllib/CLAUDE.md +302 -0
  245. dsp_tools/xmllib/__init__.py +49 -0
  246. dsp_tools/xmllib/general_functions.py +877 -0
  247. dsp_tools/xmllib/internal/__init__.py +0 -0
  248. dsp_tools/xmllib/internal/checkers.py +162 -0
  249. dsp_tools/xmllib/internal/circumvent_circular_imports.py +36 -0
  250. dsp_tools/xmllib/internal/constants.py +46 -0
  251. dsp_tools/xmllib/internal/input_converters.py +155 -0
  252. dsp_tools/xmllib/internal/serialise_file_value.py +57 -0
  253. dsp_tools/xmllib/internal/serialise_resource.py +177 -0
  254. dsp_tools/xmllib/internal/serialise_values.py +152 -0
  255. dsp_tools/xmllib/internal/type_aliases.py +11 -0
  256. dsp_tools/xmllib/models/__init__.py +0 -0
  257. dsp_tools/xmllib/models/config_options.py +28 -0
  258. dsp_tools/xmllib/models/date_formats.py +48 -0
  259. dsp_tools/xmllib/models/dsp_base_resources.py +1542 -0
  260. dsp_tools/xmllib/models/internal/__init__.py +0 -0
  261. dsp_tools/xmllib/models/internal/file_values.py +172 -0
  262. dsp_tools/xmllib/models/internal/geometry.py +162 -0
  263. dsp_tools/xmllib/models/internal/migration_metadata.py +55 -0
  264. dsp_tools/xmllib/models/internal/serialise_permissions.py +66 -0
  265. dsp_tools/xmllib/models/internal/values.py +342 -0
  266. dsp_tools/xmllib/models/licenses/__init__.py +0 -0
  267. dsp_tools/xmllib/models/licenses/other.py +59 -0
  268. dsp_tools/xmllib/models/licenses/recommended.py +107 -0
  269. dsp_tools/xmllib/models/permissions.py +41 -0
  270. dsp_tools/xmllib/models/res.py +1782 -0
  271. dsp_tools/xmllib/models/root.py +348 -0
  272. dsp_tools/xmllib/value_checkers.py +434 -0
  273. dsp_tools/xmllib/value_converters.py +777 -0
  274. dsp_tools-18.3.0.post13.dist-info/METADATA +90 -0
  275. dsp_tools-18.3.0.post13.dist-info/RECORD +286 -0
  276. dsp_tools-18.3.0.post13.dist-info/WHEEL +4 -0
  277. dsp_tools-18.3.0.post13.dist-info/entry_points.txt +3 -0
  278. dsp_tools-0.9.13.dist-info/LICENSE +0 -674
  279. dsp_tools-0.9.13.dist-info/METADATA +0 -144
  280. dsp_tools-0.9.13.dist-info/RECORD +0 -71
  281. dsp_tools-0.9.13.dist-info/WHEEL +0 -5
  282. dsp_tools-0.9.13.dist-info/entry_points.txt +0 -3
  283. dsp_tools-0.9.13.dist-info/top_level.txt +0 -1
  284. dsplib/models/connection.py +0 -272
  285. dsplib/models/group.py +0 -296
  286. dsplib/models/helpers.py +0 -505
  287. dsplib/models/langstring.py +0 -277
  288. dsplib/models/listnode.py +0 -578
  289. dsplib/models/model.py +0 -20
  290. dsplib/models/ontology.py +0 -448
  291. dsplib/models/permission.py +0 -112
  292. dsplib/models/project.py +0 -547
  293. dsplib/models/propertyclass.py +0 -505
  294. dsplib/models/resource.py +0 -366
  295. dsplib/models/resourceclass.py +0 -810
  296. dsplib/models/sipi.py +0 -30
  297. dsplib/models/user.py +0 -731
  298. dsplib/models/value.py +0 -1000
  299. dsplib/utils/knora-data-schema.xsd +0 -454
  300. dsplib/utils/knora-schema-lists.json +0 -83
  301. dsplib/utils/knora-schema.json +0 -434
  302. dsplib/utils/onto_commons.py +0 -24
  303. dsplib/utils/onto_create_lists.py +0 -73
  304. dsplib/utils/onto_create_ontology.py +0 -442
  305. dsplib/utils/onto_get.py +0 -58
  306. dsplib/utils/onto_validate.py +0 -33
  307. dsplib/utils/xml_upload.py +0 -539
  308. dsplib/widgets/doublepassword.py +0 -80
  309. knora/MLS-import-libraries.py +0 -84
  310. knora/dsp_tools.py +0 -96
  311. knora/dsplib/models/connection.py +0 -272
  312. knora/dsplib/models/group.py +0 -296
  313. knora/dsplib/models/helpers.py +0 -506
  314. knora/dsplib/models/langstring.py +0 -277
  315. knora/dsplib/models/listnode.py +0 -578
  316. knora/dsplib/models/model.py +0 -20
  317. knora/dsplib/models/ontology.py +0 -448
  318. knora/dsplib/models/permission.py +0 -112
  319. knora/dsplib/models/project.py +0 -583
  320. knora/dsplib/models/propertyclass.py +0 -505
  321. knora/dsplib/models/resource.py +0 -416
  322. knora/dsplib/models/resourceclass.py +0 -811
  323. knora/dsplib/models/sipi.py +0 -35
  324. knora/dsplib/models/user.py +0 -731
  325. knora/dsplib/models/value.py +0 -1000
  326. knora/dsplib/utils/knora-data-schema.xsd +0 -464
  327. knora/dsplib/utils/knora-schema-lists.json +0 -83
  328. knora/dsplib/utils/knora-schema.json +0 -444
  329. knora/dsplib/utils/onto_commons.py +0 -24
  330. knora/dsplib/utils/onto_create_lists.py +0 -73
  331. knora/dsplib/utils/onto_create_ontology.py +0 -451
  332. knora/dsplib/utils/onto_get.py +0 -58
  333. knora/dsplib/utils/onto_validate.py +0 -33
  334. knora/dsplib/utils/xml_upload.py +0 -540
  335. knora/dsplib/widgets/doublepassword.py +0 -80
  336. knora/knora.py +0 -2108
  337. knora/test.py +0 -99
  338. knora/testit.py +0 -76
  339. knora/xml2knora.py +0 -633
  340. {dsplib → dsp_tools/cli}/__init__.py +0 -0
  341. {dsplib/models → dsp_tools/clients}/__init__.py +0 -0
  342. {dsplib/utils → dsp_tools/commands}/__init__.py +0 -0
  343. {dsplib/widgets → dsp_tools/commands/create}/__init__.py +0 -0
  344. {knora → dsp_tools/commands/create/create_on_server}/__init__.py +0 -0
  345. {knora/dsplib → dsp_tools/commands/create/models}/__init__.py +0 -0
  346. {knora/dsplib/models → dsp_tools/commands/create/parsing}/__init__.py +0 -0
  347. {knora/dsplib/utils → dsp_tools/commands/create/serialisation}/__init__.py +0 -0
  348. {knora/dsplib/widgets → dsp_tools/commands/excel2json}/__init__.py +0 -0
dsplib/models/value.py DELETED
@@ -1,1000 +0,0 @@
1
- import json
2
- import re
3
-
4
- from pystrict import strict
5
- from typing import List, Set, Dict, Tuple, Optional, Any, Union, Type
6
- from rfc3987 import parse
7
- from pprint import pprint
8
-
9
- from .group import Group
10
- from .helpers import IriTest, Actions, BaseError, Cardinality
11
- from .langstring import LangString
12
- from .connection import Connection
13
- from .permission import PermissionValue, PermissionsIterator, Permissions
14
-
15
- from .listnode import ListNode
16
-
17
-
18
- @strict
19
- class KnoraStandoffXml:
20
- """Used to handle XML strings for standoff markup"""
21
-
22
- __iriregexp = re.compile(r'IRI:[^:]*:IRI')
23
- __xmlstr: str
24
-
25
- def __init__(self, xmlstr: str) -> str:
26
- self.__xmlstr = str(xmlstr)
27
-
28
- def __str__(self) -> str:
29
- return self.__xmlstr
30
-
31
- def getXml(self) -> str:
32
- return self.__xmlstr
33
-
34
- def findall(self) -> Union[List[str], None]:
35
- return self.__iriregexp.findall(self.__xmlstr)
36
-
37
- def replace(self, fromStr: str, toStr: str) -> None:
38
- self.__xmlstr = self.__xmlstr.replace(fromStr, toStr)
39
-
40
-
41
- @strict
42
- class Value:
43
- _iri: Union[str, None]
44
- _comment: Union[str, None]
45
- _permissions: Union[Permissions, None]
46
- _upermission: Union[PermissionValue, None]
47
- _ark_url: Union[str, None]
48
- _vark_url: Union[str, None]
49
-
50
- def __init__(self,
51
- iri: Optional[str] = None,
52
- groups: Optional[Group] = None,
53
- comment: Optional[LangString] = None,
54
- permissions: Optional[Permissions] = None,
55
- upermission: Optional[PermissionValue] = None,
56
- ark_url: Optional[str] = None,
57
- vark_url: Optional[str] = None):
58
- self._iri = iri
59
- self._comment = comment
60
- self._permissions = permissions
61
- self._upermission = upermission
62
- self._ark_url = ark_url
63
- self._vark_url = vark_url
64
-
65
- def __str__(self):
66
- if self._iri:
67
- tmpstr = "(iri: " + self._iri
68
- else:
69
- tmpstr = ('(iri: -')
70
- if self._permissions:
71
- tmpstr = ", permissions: " + str(self._permissions)
72
- if self._comment:
73
- tmpstr += ", comment: " + self._comment
74
- tmpstr += ")"
75
- return tmpstr
76
-
77
-
78
- @property
79
- def iri(self) -> str:
80
- return self.iri
81
-
82
- @property
83
- def ark_url(self) -> str:
84
- return self._ark_url
85
-
86
- @property
87
- def vark_url(self) -> str:
88
- return self._vark_url
89
-
90
- @property
91
- def permissions(self) -> str:
92
- return self._permissions
93
-
94
- @property
95
- def upermission(self) -> str:
96
- return self._upermission
97
-
98
- @property
99
- def comment(self):
100
- return self._comment
101
-
102
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
103
- tmp = {}
104
- if action == Actions.Create:
105
- if self._permissions is not None:
106
- tmp["knora-api:hasPermissions"] = self.permissions.toJsonLdObj()
107
-
108
- if self._comment is not None:
109
- tmp["knora-api:valueHasComment"] = str(self._comment)
110
- else:
111
- pass
112
- return tmp
113
-
114
- @staticmethod
115
- def get_typed_value(key: str, jsonld_obj: Any) -> Union[str, float]:
116
- try:
117
- tmp = jsonld_obj[key]
118
- if tmp.get("@type") == "xsd:decimal":
119
- result = float(tmp["@value"])
120
- elif tmp.get("@type") == "xsd:integer":
121
- result = int(tmp["@value"])
122
- elif tmp.get("@type") == "xsd:boolean":
123
- result = bool(tmp["@value"])
124
- elif tmp.get("@type") == "xsd:anyURI":
125
- result = str(tmp["@value"])
126
- elif tmp.get("@type") == "xsd:dateTimeStamp":
127
- result = str(tmp["@value"])
128
- elif tmp.get("@id") is not None:
129
- result = tmp["@id"]
130
- else:
131
- raise BaseError("Invalid data type in JSON-LD: \"{}\"!".format(tmp["@type"]))
132
- return result
133
- except KeyError as kerr:
134
- raise BaseError("Error in JSON-LD returned!")
135
-
136
- @staticmethod
137
- def getFromJsonLd(jsonld_obj) -> Dict[str, Union[str, float]]:
138
-
139
- return {
140
- 'iri': jsonld_obj.get("@id"),
141
- 'comment': jsonld_obj.get("knora-api:valueHasComment"),
142
- 'ark_url': Value.get_typed_value("knora-api:arkUrl", jsonld_obj),
143
- 'vark_url': Value.get_typed_value("knora-api:versionArkUrl", jsonld_obj),
144
- 'permissions': Permissions.fromString(jsonld_obj.get("knora-api:hasPermissions")),
145
- 'upermission': PermissionValue[jsonld_obj.get("knora-api:userHasPermission", jsonld_obj)]
146
- }
147
-
148
-
149
- @strict
150
- class TextValue(Value):
151
- _value: Union[str, KnoraStandoffXml]
152
- _mapping: str
153
-
154
- def __init__(self,
155
- value: Union[str, KnoraStandoffXml],
156
- mapping: Optional[str] = None,
157
- comment: Optional[LangString] = None,
158
- permissions: Optional[Permissions] = None,
159
- upermission: Optional[PermissionValue] = None,
160
- iri: Optional[str] = None,
161
- ark_url: Optional[str] = None,
162
- vark_url: Optional[str] = None):
163
- self._value = value
164
- self._mapping = mapping
165
- super().__init__(iri=iri,
166
- comment=comment,
167
- permissions=permissions,
168
- upermission=upermission,
169
- ark_url=ark_url,
170
- vark_url=vark_url)
171
-
172
- @property
173
- def value(self) -> str:
174
- return self._value
175
-
176
- @property
177
- def mapping(self) -> str:
178
- return self._mapping
179
-
180
- @classmethod
181
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
182
- tmp = Value.getFromJsonLd(jsonld_obj)
183
-
184
- if jsonld_obj.get("knora-api:textValueAsXml") is not None:
185
- tmp['mapping'] = jsonld_obj.get("knora-api:textValueHasMapping")
186
- tmp['value'] = jsonld_obj.get("knora-api:textValueAsXml")
187
- else:
188
- tmp['mapping'] = None
189
- tmp['value'] = jsonld_obj.get("knora-api:valueAsString")
190
- return cls(**tmp)
191
-
192
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
193
- tmp = super().toJsonLdObj(action)
194
- if action == Actions.Create:
195
- tmp['@type'] = 'knora-api:TextValue'
196
- if isinstance(self._value, KnoraStandoffXml):
197
- tmp['knora-api:textValueAsXml'] = self._value
198
- tmp['knora-api:textValueHasMapping'] = {
199
- '@id': 'http://rdfh.ch/standoff/mappings/StandardMapping' if self._mapping is None else self._mapping
200
- }
201
- else:
202
- tmp['knora-api:valueAsString'] = str(self._value)
203
- else:
204
- pass
205
- return tmp
206
-
207
- def __str__(self) -> str:
208
- return str(self._value)
209
-
210
-
211
- @strict
212
- class ColorValue(Value):
213
- _value: str
214
-
215
- def __init__(self,
216
- value: str,
217
- comment: Optional[LangString] = None,
218
- permissions: Optional[Permissions] = None,
219
- upermission: Optional[PermissionValue] = None,
220
- iri: Optional[str] = None,
221
- ark_url: Optional[str] = None,
222
- vark_url: Optional[str] = None):
223
- #
224
- # a color value as used in HTML (e.g. "#aaccff"
225
- #
226
- m = re.match('^#(?:[0-9a-fA-F]{3}){1,2}$', str(value))
227
- if not m:
228
- raise BaseError("Invalid ColorValue format! " + str(value))
229
- self._value = str(value)
230
- super().__init__(iri=iri,
231
- comment=comment,
232
- permissions=permissions,
233
- upermission=upermission,
234
- ark_url=ark_url,
235
- vark_url=vark_url)
236
-
237
- @property
238
- def value(self) -> str:
239
- return self._value
240
-
241
- @classmethod
242
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
243
- tmp = Value.getFromJsonLd(jsonld_obj)
244
- tmp['value'] = jsonld_obj.get("knora-api:colorValueAsColor")
245
- return cls(**tmp)
246
-
247
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
248
- tmp = super().toJsonLdObj(action)
249
- if action == Actions.Create:
250
- tmp['@type'] = "knora-api:ColorValue"
251
- tmp['knora-api:colorValueAsColor'] = self._value
252
- else:
253
- pass
254
- return tmp
255
-
256
- def __str__(self) -> str:
257
- return self._value + ' ' + super().__str__()
258
-
259
-
260
- @strict
261
- class DateValue(Value):
262
- _calendar: str
263
- _e1: str
264
- _y1: int
265
- _m1: int
266
- _d1: int
267
- _e2: str
268
- _y2: int
269
- _m2: int
270
- _d2: int
271
-
272
- def __init__(self,
273
- value: str,
274
- comment: Optional[LangString] = None,
275
- permissions: Optional[Permissions] = None,
276
- upermission: Optional[PermissionValue] = None,
277
- iri: Optional[str] = None,
278
- ark_url: Optional[str] = None,
279
- vark_url: Optional[str] = None):
280
- #
281
- # A knora date value
282
- #
283
- m = re.match(
284
- '(GREGORIAN:|JULIAN:)?(CE:|BCE:)?(\\d{4})?(-\\d{1,2})?(-\\d{1,2})?(:CE|:BCE)?(:\\d{4})?(-\\d{1,2})?(-\\d{1,2})?',
285
- str(value))
286
- if not m:
287
- raise BaseError("Invalid date format: \"{}\"!".format(str(value)))
288
- dp = m.groups()
289
- self._calendar = 'GREGORIAN' if dp[0] is None else dp[0].strip('-: ')
290
- self._e1 = 'CE' if dp[1] is None else dp[1].strip('-: ')
291
- self._y1 = None if dp[2] is None else int(dp[2].strip('-: '))
292
- self._m1 = None if dp[3] is None else int(dp[3].strip('-: '))
293
- self._d1 = None if dp[4] is None else int(dp[4].strip('-: '))
294
- self._e2 = 'CE' if dp[5] is None else dp[5].strip('-: ')
295
- self._y2 = None if dp[6] is None else int(dp[6].strip('-: '))
296
- self._m2 = None if dp[7] is None else int(dp[7].strip('-: '))
297
- self._d2 = None if dp[8] is None else int(dp[8].strip('-: '))
298
- if self._y1 is None:
299
- raise BaseError("Invalid date format! " + str(value))
300
- if self._y2 is not None:
301
- date1 = self._y1 * 10000
302
- if self._m1 is not None:
303
- date1 += self._m1 * 100
304
- if self._d1 is not None:
305
- date1 += self._d1
306
- date2 = self._y2 * 10000
307
- if self._m2 is not None:
308
- date2 += self._m2 * 100
309
- if self._d2 is not None:
310
- date2 += self._d2
311
- if date1 > date2:
312
- self._y1, self._y2 = self._y2, self._y1
313
- self._m1, self._m2 = self._m2, self._m1
314
- self._d1, self._d2 = self._d2, self._d1
315
- super().__init__(iri=iri,
316
- comment=comment,
317
- permissions=permissions,
318
- upermission=upermission,
319
- ark_url=ark_url,
320
- vark_url=vark_url)
321
-
322
- @property
323
- def value(self) -> str:
324
- return self._value
325
-
326
- @classmethod
327
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
328
- tmp = Value.getFromJsonLd(jsonld_obj)
329
-
330
- datestr = ""
331
- datestr += jsonld_obj.get("knora-api:dateValueHasCalendar") + ":" \
332
- if jsonld_obj.get("knora-api:dateValueHasCalendar") is not None else ""
333
- datestr += jsonld_obj.get("knora-api:dateValueHasStartEra") + ":" \
334
- if jsonld_obj.get("knora-api:dateValueHasStartEra") is not None else ""
335
- datestr += str(jsonld_obj.get("knora-api:dateValueHasStartYear")) \
336
- if jsonld_obj.get("knora-api:dateValueHasStartYear") is not None else ""
337
- datestr += "-" + str(jsonld_obj.get("knora-api:dateValueHasStartMonth")) \
338
- if jsonld_obj.get("knora-api:dateValueHasStartMonth") is not None else ""
339
- datestr += "-" + str(jsonld_obj.get("knora-api:dateValueHasStartDay")) \
340
- if jsonld_obj.get("knora-api:dateValueHasStartDay") is not None else ""
341
- datestr += ":" + jsonld_obj.get("knora-api:dateValueHasEndEra") \
342
- if jsonld_obj.get("knora-api:dateValueHasEndEra") is not None else ""
343
- datestr += ":" + str(jsonld_obj.get("knora-api:dateValueHasEndYear")) \
344
- if jsonld_obj.get("knora-api:dateValueHasEndYear") is not None else ""
345
- datestr += "-" + str(jsonld_obj.get("knora-api:dateValueHasEndMonth")) \
346
- if jsonld_obj.get("knora-api:dateValueHasEndMonth") is not None else ""
347
- datestr += "-" + str(jsonld_obj.get("knora-api:dateValueHasEndDay")) \
348
- if jsonld_obj.get("knora-api:dateValueHasEndDay") is not None else ""
349
- tmp['value'] = datestr
350
- return cls(**tmp)
351
-
352
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
353
- tmp = super().toJsonLdObj(action)
354
- if action == Actions.Create:
355
- tmp['@type'] = "knora-api:DateValue"
356
- tmp["knora-api:dateValueHasCalendar"] = self._calendar
357
- tmp["knora-api:dateValueHasStartEra"] = self._e1
358
- tmp["knora-api:dateValueHasStartYear"] = self._y1
359
- if self._m1 is not None:
360
- tmp["knora-api:dateValueHasStartMonth"] = self._m1
361
- if self._d1 is not None:
362
- tmp["knora-api:dateValueHasStartDay"] = self._d1
363
- tmp["knora-api:dateValueHasEndEra"] = self._e2
364
- if self._y2 is not None:
365
- tmp["knora-api:dateValueHasEndYear"] = self._y2
366
- else:
367
- tmp["knora-api:dateValueHasEndYear"] = self._y1
368
- if self._m2 is not None:
369
- tmp["knora-api:dateValueHasEndMonth"] = self._m2
370
- if self._d2 is not None:
371
- tmp["knora-api:dateValueHasEndDay"] = self._d2
372
- else:
373
- pass
374
- return tmp
375
-
376
- def __str__(self):
377
- datestr = ''
378
- if self._calendar:
379
- datestr += self._calendar + ':'
380
- if self._e1:
381
- datestr += self._e1 + ':'
382
- if self._y1:
383
- datestr += str(self._y1) + '-'
384
- if self._m1:
385
- datestr += str(self._m1) + '-'
386
- if self._d1:
387
- datestr += str(self._d1)
388
- if self._e2:
389
- datestr += ':' + str(self._e2)
390
- if self._y2:
391
- datestr += ':' + str(self._y2)
392
- if self._m2:
393
- datestr += '-' + str(self._m2)
394
- if self._d2:
395
- datestr += '-' + str(self._d2)
396
- return datestr + ' ' + super().__str__()
397
-
398
-
399
- @strict
400
- class DecimalValue(Value):
401
- _value: float
402
-
403
- def __init__(self,
404
- value: Union[float, int, str],
405
- comment: Optional[LangString] = None,
406
- permissions: Optional[Permissions] = None,
407
- upermission: Optional[PermissionValue] = None,
408
- iri: Optional[str] = None,
409
- ark_url: Optional[str] = None,
410
- vark_url: Optional[str] = None):
411
- self._value = value
412
- if isinstance(value, str):
413
- m = re.match('^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$', value)
414
- if m:
415
- self._value = float(value)
416
- else:
417
- raise BaseError("String does not represent decimal/float number! \"" + value + "\"")
418
- elif isinstance(value, float):
419
- self._value = value
420
- elif isinstance(value, int):
421
- self._value = float(value)
422
- else:
423
- raise BaseError("String does not represent decimal/float number! \"" + value + "\"")
424
- super().__init__(iri=iri,
425
- comment=comment,
426
- permissions=permissions,
427
- upermission=upermission,
428
- ark_url=ark_url,
429
- vark_url=vark_url)
430
-
431
- @property
432
- def value(self) -> float:
433
- return self._value
434
-
435
- @classmethod
436
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
437
- tmp = Value.getFromJsonLd(jsonld_obj)
438
- tmp['value'] = Value.get_typed_value("knora-api:decimalValueAsDecimal", jsonld_obj)
439
- return cls(**tmp)
440
-
441
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
442
- tmp = super().toJsonLdObj(action)
443
- if action == Actions.Create:
444
- tmp['@type'] = "knora-api:DecimalValue"
445
- tmp['knora-api:decimalValueAsDecimal'] = {
446
- '@type': 'xsd:decimal',
447
- '@value': str(self._value)
448
- }
449
- else:
450
- pass
451
- return tmp
452
-
453
- def __str__(self) -> str:
454
- return str(self._value) + ' ' + super().__str__()
455
-
456
-
457
- @strict
458
- class GeomValue(Value):
459
- _value: str
460
-
461
- def __init__(self,
462
- value: str,
463
- comment: Optional[LangString] = None,
464
- permissions: Optional[Permissions] = None,
465
- upermission: Optional[PermissionValue] = None,
466
- iri: Optional[str] = None,
467
- ark_url: Optional[str] = None,
468
- vark_url: Optional[str] = None):
469
- self._value = str(value)
470
- super().__init__(iri=iri,
471
- comment=comment,
472
- permissions=permissions,
473
- upermission=upermission,
474
- ark_url=ark_url,
475
- vark_url=vark_url)
476
-
477
- @property
478
- def value(self) -> str:
479
- return self._value
480
-
481
- @classmethod
482
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
483
- tmp = Value.getFromJsonLd(jsonld_obj)
484
- tmp['value'] = jsonld_obj.get('knora-api:geometryValueAsGeometry')
485
- return cls(**tmp)
486
-
487
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
488
- tmp = super().toJsonLdObj(action)
489
- if action == Actions.Create:
490
- tmp['@type'] = "knora-api:GeomValue"
491
- tmp['knora-api:geometryValueAsGeometry'] = self._value
492
- else:
493
- pass
494
- return tmp
495
-
496
- def __str__(self) -> str:
497
- return self._value + ' ' + super().__str__()
498
-
499
- @strict
500
- class GeonameValue(Value):
501
- _value: str
502
-
503
- def __init__(self,
504
- value: str,
505
- comment: Optional[LangString] = None,
506
- permissions: Optional[Permissions] = None,
507
- upermission: Optional[PermissionValue] = None,
508
- iri: Optional[str] = None,
509
- ark_url: Optional[str] = None,
510
- vark_url: Optional[str] = None):
511
- self._value = str(value)
512
- super().__init__(iri=iri,
513
- comment=comment,
514
- permissions=permissions,
515
- upermission=upermission,
516
- ark_url=ark_url,
517
- vark_url=vark_url)
518
-
519
- @property
520
- def value(self) -> str:
521
- return self._value
522
-
523
- @classmethod
524
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
525
- tmp = Value.getFromJsonLd(jsonld_obj)
526
- tmp['value'] = jsonld_obj.get('knora-api:geonameValueAsGeonameCode')
527
- return cls(**tmp)
528
-
529
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
530
- tmp = super().toJsonLdObj(action)
531
- if action == Actions.Create:
532
- tmp['@type'] = "knora-api:GeonameValue"
533
- tmp['knora-api:geonameValueAsGeonameCode'] = self._value
534
- else:
535
- pass
536
- return tmp
537
-
538
- def __str__(self) -> str:
539
- return self._value + ' ' + super().__str__()
540
-
541
-
542
- @strict
543
- class IntValue(Value):
544
- _value: int
545
-
546
- def __init__(self,
547
- value: Union[int, str],
548
- comment: Optional[LangString] = None,
549
- permissions: Optional[Permissions] = None,
550
- upermission: Optional[PermissionValue] = None,
551
- iri: Optional[str] = None,
552
- ark_url: Optional[str] = None,
553
- vark_url: Optional[str] = None):
554
- if isinstance(value, str):
555
- m = re.match('^[-+]?[0-9]+$', value)
556
- if m and m.span()[1] == len(str(value)):
557
- self._value = int(value)
558
- else:
559
- raise BaseError("String does not represent integer number! \"" + value + "\"")
560
- elif isinstance(value, int):
561
- self._value = value
562
- super().__init__(iri=iri,
563
- comment=comment,
564
- permissions=permissions,
565
- upermission=upermission,
566
- ark_url=ark_url,
567
- vark_url=vark_url)
568
-
569
- @property
570
- def value(self) -> int:
571
- return self._value
572
-
573
- @classmethod
574
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
575
- tmp = Value.getFromJsonLd(jsonld_obj)
576
- tmp['value'] = jsonld_obj.get("knora-api:intValueAsInt")
577
- return cls(**tmp)
578
-
579
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
580
- tmp = super().toJsonLdObj(action)
581
- if action == Actions.Create:
582
- tmp['@type'] = "knora-api:IntValue"
583
- tmp['knora-api:intValueAsInt'] = self._value
584
- else:
585
- pass
586
- return tmp
587
-
588
- def __str__(self) -> str:
589
- return str(self._value) + ' ' + super().__str__()
590
-
591
- @strict
592
- class BooleanValue(Value):
593
- _value: bool
594
-
595
- def __init__(self,
596
- value: Union[bool, int, str],
597
- comment: Optional[LangString] = None,
598
- permissions: Optional[Permissions] = None,
599
- upermission: Optional[PermissionValue] = None,
600
- iri: Optional[str] = None,
601
- ark_url: Optional[str] = None,
602
- vark_url: Optional[str] = None):
603
- if type(value) is bool:
604
- self._value = value
605
-
606
- elif type(value) is str:
607
- if value.upper() == 'TRUE':
608
- self._value = True
609
- elif value.upper() == 'FALSE':
610
- self._value = False
611
- else:
612
- raise BaseError("Invalid boolean format! " + str(value))
613
- elif type(value) is int:
614
- self._value = False if value == 0 else True
615
- super().__init__(iri=iri,
616
- comment=comment,
617
- permissions=permissions,
618
- upermission=upermission,
619
- ark_url=ark_url,
620
- vark_url=vark_url)
621
-
622
- @property
623
- def value(self) -> bool:
624
- return self._value
625
-
626
- @classmethod
627
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
628
- tmp = Value.getFromJsonLd(jsonld_obj)
629
- tmp['value'] = jsonld_obj.get("knora-api:booleanValueAsBoolean")
630
- return cls(**tmp)
631
-
632
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
633
- tmp = super().toJsonLdObj(action)
634
- if action == Actions.Create:
635
- tmp['@type'] = "knora-api:BooleanValue"
636
- tmp['knora-api:booleanValueAsBoolean'] = self._value
637
- else:
638
- pass
639
- return tmp
640
-
641
- def __str__(self) -> str:
642
- return str(self._value) + ' ' + super().__str__()
643
-
644
-
645
- @strict
646
- class UriValue(Value):
647
- _value: str
648
-
649
- def __init__(self,
650
- value: str,
651
- comment: Optional[LangString] = None,
652
- permissions: Optional[Permissions] = None,
653
- upermission: Optional[PermissionValue] = None,
654
- iri: Optional[str] = None,
655
- ark_url: Optional[str] = None,
656
- vark_url: Optional[str] = None):
657
- m = re.match("^(http)s?://([\\w\\.\\-~]+)?(:\\d{,6})?(/[\\w\\-~]+)*(#[\\w\\-~]*)?", str(value))
658
- if m:
659
- self._value = str(value)
660
- else:
661
- raise BaseError("Invalid IRI/URI! \"" + value + "\"")
662
- super().__init__(iri=iri,
663
- comment=comment,
664
- permissions=permissions,
665
- upermission=upermission,
666
- ark_url=ark_url,
667
- vark_url=vark_url)
668
-
669
- @property
670
- def value(self) -> str:
671
- return self._value
672
-
673
- @classmethod
674
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
675
- tmp = Value.getFromJsonLd(jsonld_obj)
676
- tmp['value'] = Value.get_typed_value("knora-api:uriValueAsUri", jsonld_obj)
677
- return cls(**tmp)
678
-
679
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
680
- tmp = super().toJsonLdObj(action)
681
- if action == Actions.Create:
682
- tmp['@type'] = "knora-api:UriValue"
683
- tmp['knora-api:uriValueAsUri'] = {
684
- "@type": "xsd:anyURI",
685
- "@value": self._value
686
- }
687
- else:
688
- pass
689
- return tmp
690
-
691
- def __str__(self) -> str:
692
- return self._value + ' ' + super().__str__()
693
-
694
-
695
- @strict
696
- class TimeValue(Value):
697
- _value: str
698
-
699
- @property
700
- def value(self) -> str:
701
- return self._value
702
-
703
- def __init__(self,
704
- value: str,
705
- comment: Optional[LangString] = None,
706
- permissions: Optional[Permissions] = None,
707
- upermission: Optional[PermissionValue] = None,
708
- iri: Optional[str] = None,
709
- ark_url: Optional[str] = None,
710
- vark_url: Optional[str] = None):
711
- m = re.match("^([+-])?(\\d{4}-[0-1]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d)(.\\d+)?(Z|[+-][0-2]\\d:[0-5]\\d)$",
712
- str(value))
713
- if m:
714
- self._value = str(value)
715
- else:
716
- raise BaseError("Invalid time value! \"" + value + "\"")
717
- super().__init__(iri=iri,
718
- comment=comment,
719
- permissions=permissions,
720
- upermission=upermission,
721
- ark_url=ark_url,
722
- vark_url=vark_url)
723
-
724
- @property
725
- def value(self) -> str:
726
- return self._value
727
-
728
- @classmethod
729
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
730
- tmp = Value.getFromJsonLd(jsonld_obj)
731
- tmp['value'] = Value.get_typed_value("knora-api:timeValueAsTimeStamp", jsonld_obj)
732
- return cls(**tmp)
733
-
734
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
735
- tmp = super().toJsonLdObj(action)
736
- if action == Actions.Create:
737
- tmp['@type'] = "knora-api:TimeValue"
738
- tmp['knora-api:timeValueAsTimeStamp'] = {
739
- "@type": "xsd:dateTimeStamp",
740
- "@value": self._value
741
- }
742
- else:
743
- pass
744
- return tmp
745
-
746
- def __str__(self) -> str:
747
- return self._value + ' ' + super().__str__()
748
-
749
-
750
- @strict
751
- class IntervalValue(Value):
752
- _iv_start: str
753
- _iv_end: str
754
-
755
- def __init__(self,
756
- value: Optional[str] = None,
757
- iv_start: Optional[float] = None,
758
- iv_end: Optional[float] = None,
759
- comment: Optional[LangString] = None,
760
- permissions: Optional[Permissions] = None,
761
- upermission: Optional[PermissionValue] = None,
762
- iri: Optional[str] = None,
763
- ark_url: Optional[str] = None,
764
- vark_url: Optional[str] = None):
765
- if value is not None:
766
- startval, endval = value.split(':')
767
- self._iv_start = float(startval)
768
- self._iv_end = float(endval)
769
- else:
770
- if iv_start is None or iv_end is None:
771
- raise BaseError("\"value\" or \"iv_start\" and \"iv_end\" must be given to constructor!")
772
- self._iv_start = iv_start
773
- self._iv_end = iv_end
774
- super().__init__(iri=iri,
775
- comment=comment,
776
- permissions=permissions,
777
- upermission=upermission,
778
- ark_url=ark_url,
779
- vark_url=vark_url)
780
-
781
- @property
782
- def value(self) -> str:
783
- return str(self._iv_start) + ':' + str(self._iv_end)
784
-
785
- @property
786
- def iv_start(self) -> float:
787
- return self._iv_start
788
-
789
- @property
790
- def iv_end(self) -> float:
791
- return self._iv_end
792
-
793
- @classmethod
794
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
795
- tmp = Value.getFromJsonLd(jsonld_obj)
796
- start = Value.get_typed_value("knora-api:intervalValueHasStart", jsonld_obj)
797
- end = Value.get_typed_value("knora-api:intervalValueHasEnd", jsonld_obj)
798
- tmp['value'] = str(start) + ":" + str(end)
799
- return cls(**tmp)
800
-
801
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
802
- tmp = super().toJsonLdObj(action)
803
- if action == Actions.Create:
804
- tmp['@type'] = "knora-api:IntervalValue"
805
- tmp["knora-api:intervalValueHasStart"] = {
806
- "@type": "xsd:decimal",
807
- "@value": str(self._iv_start)
808
- }
809
- tmp["knora-api:intervalValueHasEnd"] = {
810
- "@type": "xsd:decimal",
811
- "@value": str(self._iv_end)
812
- }
813
- else:
814
- pass
815
- return tmp
816
-
817
- def __str__(self) -> str:
818
- interval = str(self._iv_start) + ':' + str(self._iv_end)
819
- return interval + ' ' + super().__str__()
820
-
821
-
822
- @strict
823
- class ListValue(Value):
824
- _value: str
825
-
826
- def __init__(self,
827
- value: str,
828
- lists: List[ListNode] = None,
829
- comment: Optional[LangString] = None,
830
- permissions: Optional[Permissions] = None,
831
- upermission: Optional[PermissionValue] = None,
832
- iri: Optional[str] = None,
833
- ark_url: Optional[str] = None,
834
- vark_url: Optional[str] = None):
835
-
836
- def find_listnode(nodes: List[ListNode], name: str) -> Union[str, None]:
837
- for node in nodes:
838
- if node.name == name:
839
- return node.id
840
- else:
841
- if node.children is not None:
842
- node_id = find_listnode(node.children, name)
843
- if node_id is not None:
844
- return node_id
845
- return None
846
-
847
- if IriTest.test(str(value)):
848
- self._value = str(value)
849
- else:
850
- tmp = str(value).split(':')
851
- if len(tmp) > 1:
852
- if tmp[0]:
853
- listname = tmp[0]
854
- nodename = tmp[1]
855
- else:
856
- raise BaseError("Invalid list node: \"" + str(value) + "\" !")
857
- else:
858
- raise BaseError("Invalid list node: \"" + str(value) + "\" !")
859
- if lists is None:
860
- raise BaseError("Lists from ResourceInstanceFactory must be provided!")
861
- node_iri = None
862
- for list in lists:
863
- if list.name == listname:
864
- node_iri = find_listnode(list.children, nodename)
865
- if node_iri is not None:
866
- self._value = node_iri
867
- else:
868
- raise BaseError("Listnode \"{}\" not found".format(value))
869
- super().__init__(iri=iri,
870
- comment=comment,
871
- permissions=permissions,
872
- upermission=upermission,
873
- ark_url=ark_url,
874
- vark_url=vark_url)
875
-
876
- def print(self, offset: int = 0):
877
- blank = ' '
878
- print(f'{blank:>{offset}}{self._value}')
879
-
880
- @property
881
- def value(self) -> str:
882
- return self._value
883
-
884
- @classmethod
885
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
886
- tmp = Value.getFromJsonLd(jsonld_obj)
887
- tmp['value'] = Value.get_typed_value("knora-api:listValueAsListNode", jsonld_obj)
888
- return cls(**tmp)
889
-
890
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
891
- tmp = super().toJsonLdObj(action)
892
- if action == Actions.Create:
893
- tmp['@type'] = "knora-api:ListValue"
894
- tmp['knora-api:listValueAsListNode'] = {
895
- '@id': self._value
896
- }
897
- else:
898
- pass
899
- return tmp
900
-
901
- def __str__(self) -> str:
902
- return self._value + ' ' + super().__str__()
903
-
904
-
905
- @strict
906
- class LinkValue(Value):
907
- _value: str
908
- _restype: str
909
- _reslabel: str
910
-
911
- def __init__(self,
912
- value: str,
913
- restype: Optional[str] = None,
914
- reslabel: Optional[str] = None,
915
- comment: Optional[LangString] = None,
916
- permissions: Optional[Permissions] = None,
917
- upermission: Optional[PermissionValue] = None,
918
- iri: Optional[str] = None,
919
- ark_url: Optional[str] = None,
920
- vark_url: Optional[str] = None):
921
- m = re.match("^(http)s?://([\\w\\.\\-~]+)?(:\\d{,6})?(/[\\w\\-~]+)*(#[\\w\\-~]*)?", str(value))
922
- if m:
923
- self._value = str(value)
924
- else:
925
- raise BaseError("Target of link is not a IRI: \"" + str(value) + "\"")
926
- self._restype = restype
927
- self._reslabel = reslabel
928
- super().__init__(iri=iri,
929
- comment=comment,
930
- permissions=permissions,
931
- upermission=upermission,
932
- ark_url=ark_url,
933
- vark_url=vark_url)
934
-
935
- @property
936
- def value(self) -> str:
937
- return self._value
938
-
939
- @property
940
- def restype(self) -> str:
941
- return self._restype
942
-
943
- @property
944
- def reslabel(self) -> str:
945
- return self._reslabel
946
-
947
- @classmethod
948
- def fromJsonLdObj(cls, jsonld_obj: Any) -> Dict[str, Any]:
949
- tmp = Value.getFromJsonLd(jsonld_obj)
950
- linked_resource = jsonld_obj.get("knora-api:linkValueHasTarget")
951
- if linked_resource is not None:
952
- tmp['value'] = linked_resource['@id']
953
- tmp['restype'] = linked_resource["@type"]
954
- tmp['reslabel'] = linked_resource["rdfs:label"]
955
- return cls(**tmp)
956
-
957
- def toJsonLdObj(self, action: Actions) -> Dict[str, Any]:
958
- tmp = super().toJsonLdObj(action)
959
- if action == Actions.Create:
960
- tmp['@type'] = "knora-api:LinkValue"
961
- tmp['knora-api:linkValueHasTargetIri'] = {
962
- '@id': self._value
963
- }
964
- else:
965
- pass
966
- return tmp
967
-
968
- def __str__(self) -> str:
969
- return self._value + ' ' + super().__str__()
970
-
971
-
972
- def fromJsonLdObj(jsonld_obj: str) -> Value:
973
- switcher = {
974
- 'knora-api:TextValue': TextValue,
975
- 'knora-api:ColorValue': ColorValue,
976
- 'knora-api:DateValue': DateValue,
977
- 'knora-api:DecimalValue': DecimalValue,
978
- 'knora-api:GeomValue': GeomValue,
979
- 'knora-api:GeonameValue': GeonameValue,
980
- 'knora-api:IntValue': IntValue,
981
- 'knora-api:BooleanValue': BooleanValue,
982
- 'knora-api:UriValue': UriValue,
983
- 'knora-api:TimeValue': TimeValue,
984
- 'knora-api:IntervalValue': IntervalValue,
985
- 'knora-api:ListValue': ListValue,
986
- 'knora-api:LinkValue': LinkValue,
987
- }
988
- return switcher[jsonld_obj.get('@type')].fromJsonLdObj(jsonld_obj)
989
-
990
-
991
- def make_value(value: Value,
992
- comment: Optional[str] = None,
993
- permissions: Optional[Permissions] = None):
994
- res = {}
995
- res['value'] = value
996
- if comment:
997
- res['comment'] = comment
998
- if permissions:
999
- res['permissions'] = permissions
1000
- return res