OpenGeodeWeb-Back 6.12.0rc1__tar.gz → 6.12.0rc2__tar.gz

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 (114) hide show
  1. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/PKG-INFO +1 -1
  2. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/pyproject.toml +1 -1
  3. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/OpenGeodeWeb_Back.egg-info/PKG-INFO +1 -1
  4. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/app.py +39 -0
  5. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/LICENSE +0 -0
  6. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/README.md +0 -0
  7. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/requirements.txt +0 -0
  8. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/setup.cfg +0 -0
  9. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt +0 -0
  10. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/OpenGeodeWeb_Back.egg-info/dependency_links.txt +0 -0
  11. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/OpenGeodeWeb_Back.egg-info/entry_points.txt +0 -0
  12. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/OpenGeodeWeb_Back.egg-info/requires.txt +0 -0
  13. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/OpenGeodeWeb_Back.egg-info/top_level.txt +0 -0
  14. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/__init__.py +0 -0
  15. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/app_config.py +0 -0
  16. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_functions.py +0 -0
  17. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/__init__.py +0 -0
  18. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_brep.py +0 -0
  19. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_cross_section.py +0 -0
  20. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_edged_curve2d.py +0 -0
  21. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_edged_curve3d.py +0 -0
  22. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_graph.py +0 -0
  23. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_grid2d.py +0 -0
  24. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_grid3d.py +0 -0
  25. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +0 -0
  26. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_hybrid_solid3d.py +0 -0
  27. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_implicit_cross_section.py +0 -0
  28. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_implicit_structural_model.py +0 -0
  29. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_light_regular_grid2d.py +0 -0
  30. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_light_regular_grid3d.py +0 -0
  31. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_mesh.py +0 -0
  32. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_model.py +0 -0
  33. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_object.py +0 -0
  34. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_point_set2d.py +0 -0
  35. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_point_set3d.py +0 -0
  36. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_polygonal_surface2d.py +0 -0
  37. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_polygonal_surface3d.py +0 -0
  38. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_polyhedral_solid3d.py +0 -0
  39. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_raster_image2d.py +0 -0
  40. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_raster_image3d.py +0 -0
  41. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_regular_grid2d.py +0 -0
  42. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_regular_grid3d.py +0 -0
  43. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_section.py +0 -0
  44. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_solid_mesh3d.py +0 -0
  45. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_structural_model.py +0 -0
  46. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_surface_mesh2d.py +0 -0
  47. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_surface_mesh3d.py +0 -0
  48. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_tetrahedral_solid3d.py +0 -0
  49. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_triangulated_surface2d.py +0 -0
  50. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_triangulated_surface3d.py +0 -0
  51. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/geode_objects/geode_vertex_set.py +0 -0
  52. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/py.typed +0 -0
  53. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/blueprint_routes.py +0 -0
  54. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/create/blueprint_create.py +0 -0
  55. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/create/schemas/__init__.py +0 -0
  56. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/create/schemas/edged_curve.json +0 -0
  57. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/create/schemas/edged_curve.py +0 -0
  58. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/create/schemas/point_set.json +0 -0
  59. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/create/schemas/point_set.py +0 -0
  60. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/create/schemas/polygonal_surface.json +0 -0
  61. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/create/schemas/polygonal_surface.py +0 -0
  62. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/__init__.py +0 -0
  63. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/allowed_files.json +0 -0
  64. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/allowed_files.py +0 -0
  65. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/allowed_objects.json +0 -0
  66. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/allowed_objects.py +0 -0
  67. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/cell_attribute_names.json +0 -0
  68. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/cell_attribute_names.py +0 -0
  69. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/edge_attribute_names.json +0 -0
  70. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/edge_attribute_names.py +0 -0
  71. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/export_project.json +0 -0
  72. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/export_project.py +0 -0
  73. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/geode_object_inheritance.json +0 -0
  74. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/geode_object_inheritance.py +0 -0
  75. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +0 -0
  76. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py +0 -0
  77. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +0 -0
  78. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py +0 -0
  79. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/import_project.json +0 -0
  80. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/import_project.py +0 -0
  81. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/kill.json +0 -0
  82. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/kill.py +0 -0
  83. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/missing_files.json +0 -0
  84. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/missing_files.py +0 -0
  85. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.json +0 -0
  86. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.py +0 -0
  87. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.json +0 -0
  88. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.py +0 -0
  89. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.json +0 -0
  90. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.py +0 -0
  91. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.json +0 -0
  92. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.py +0 -0
  93. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/ping.json +0 -0
  94. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/ping.py +0 -0
  95. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +0 -0
  96. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.py +0 -0
  97. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json +0 -0
  98. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py +0 -0
  99. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/save_viewable_file.json +0 -0
  100. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/save_viewable_file.py +0 -0
  101. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/texture_coordinates.json +0 -0
  102. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/texture_coordinates.py +0 -0
  103. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/upload_file.json +0 -0
  104. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/upload_file.py +0 -0
  105. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/validate.json +0 -0
  106. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/validate.py +0 -0
  107. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +0 -0
  108. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.py +0 -0
  109. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/test_utils.py +0 -0
  110. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/src/opengeodeweb_back/utils_functions.py +0 -0
  111. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/tests/test_create_routes.py +0 -0
  112. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/tests/test_geode_functions.py +0 -0
  113. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/tests/test_routes.py +0 -0
  114. {opengeodeweb_back-6.12.0rc1 → opengeodeweb_back-6.12.0rc2}/tests/test_utils_functions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 6.12.0rc1
3
+ Version: 6.12.0rc2
4
4
  Summary: OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
5
5
  Author-email: Geode-solutions <team-web@geode-solutions.com>
6
6
  Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Back
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "OpenGeodeWeb-Back"
7
- version = "6.12.0-rc.1"
7
+ version = "6.12.0-rc.2"
8
8
  dynamic = ["dependencies"]
9
9
  authors = [{ name = "Geode-solutions", email = "team-web@geode-solutions.com" }]
10
10
  description = "OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 6.12.0rc1
3
+ Version: 6.12.0rc2
4
4
  Summary: OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
5
5
  Author-email: Geode-solutions <team-web@geode-solutions.com>
6
6
  Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Back
@@ -14,6 +14,11 @@ from opengeodeweb_back.routes import blueprint_routes
14
14
  from opengeodeweb_back.routes.create import blueprint_create
15
15
  from opengeodeweb_microservice.database import connection
16
16
 
17
+ import queue
18
+ import threading
19
+ import json
20
+ from typing import Any, Dict, Generator, Tuple
21
+
17
22
 
18
23
  def create_app(name: str) -> flask.Flask:
19
24
  app = flask.Flask(name)
@@ -29,6 +34,36 @@ def create_app(name: str) -> flask.Flask:
29
34
  utils_functions.before_request(flask.current_app)
30
35
  return None
31
36
 
37
+ def wants_event_stream() -> bool:
38
+ accept = flask.request.headers.get("Accept", "")
39
+ return "text/event-stream" in accept
40
+
41
+ _event_queue: queue.Queue[tuple[str, dict[str, Any]]] = queue.Queue()
42
+ _lock = threading.Lock()
43
+
44
+ def publish_event(event: str, data: dict[str, Any]) -> None:
45
+ _event_queue.put((event, data))
46
+
47
+ def stream_events() -> Generator[str, None, None]:
48
+ while True:
49
+ event, data = _event_queue.get()
50
+ yield f"event: {event}\ndata: {json.dumps(data)}\n\n"
51
+
52
+ @app.after_request
53
+ def after_request(response: flask.Response) -> flask.Response:
54
+ endpoint = flask.request.endpoint
55
+ if endpoint == "events" or endpoint == None:
56
+ return response
57
+
58
+ if wants_event_stream():
59
+ payload: dict[str, Any]
60
+ try:
61
+ payload = response.get_json()
62
+ except Exception:
63
+ payload = {"status": response.status_code}
64
+ publish_event(endpoint, payload)
65
+ return response
66
+
32
67
  @app.teardown_request
33
68
  def teardown_request(exception: BaseException | None) -> None:
34
69
  utils_functions.teardown_request(flask.current_app, exception)
@@ -42,6 +77,10 @@ def create_app(name: str) -> flask.Flask:
42
77
  print("\033[91mError:\033[0m \033[91m" + str(exception) + "\033[0m", flush=True)
43
78
  return flask.make_response({"description": str(exception)}, 500)
44
79
 
80
+ @app.route("/events")
81
+ def events() -> flask.Response:
82
+ return flask.Response(stream_events(), mimetype="text/event-stream")
83
+
45
84
  @app.route(
46
85
  "/error",
47
86
  methods=["POST"],