-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path__init__.py
More file actions
269 lines (251 loc) · 8.99 KB
/
__init__.py
File metadata and controls
269 lines (251 loc) · 8.99 KB
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
"""
OpenCut Route Blueprints
All Flask route handlers organized by domain.
"""
from collections import defaultdict
class RouteCollisionError(RuntimeError):
"""Raised when multiple endpoints claim the same method/path pair."""
def find_route_collisions(app):
"""Return duplicate Flask route registrations keyed by ``(path, methods)``."""
collisions = defaultdict(list)
for rule in app.url_map.iter_rules():
methods = tuple(sorted(m for m in rule.methods if m not in {"HEAD", "OPTIONS"}))
collisions[(rule.rule, methods)].append(rule.endpoint)
return {
(path, methods): endpoints
for (path, methods), endpoints in collisions.items()
if len(endpoints) > 1
}
def assert_no_route_collisions(app) -> None:
"""Fail fast when two Flask endpoints own the same method/path pair."""
duplicates = find_route_collisions(app)
if not duplicates:
return
lines = [
f"{path} {methods}: {', '.join(endpoints)}"
for (path, methods), endpoints in sorted(duplicates.items())
]
raise RouteCollisionError(
"Duplicate route registrations detected:\n" + "\n".join(lines)
)
def get_core_blueprints():
"""Return the ordered tuple of built-in OpenCut blueprints."""
from .ai_content_routes import ai_content_bp
from .ai_editing_routes import ai_editing_bp
from .ai_intelligence_routes import ai_intel_bp
from .analysis_routes import analysis_bp
from .architecture_routes import architecture_bp
from .audio import audio_bp
from .audio_advanced_routes import audio_adv_bp
from .audio_expansion_routes import audio_expand_bp
from .audio_post_routes import audio_post_bp
from .audio_production_routes import audio_prod_bp
from .batch_data_routes import batch_data_bp
from .body_transfer_routes import body_transfer_bp
from .captions import captions_bp
from .cloud_distrib_routes import cloud_distrib_bp
from .collab_review_routes import collab_review_bp
from .color_mam_routes import color_mam_bp
from .composition_dubbing_routes import composition_dubbing_bp
from .content_gen_routes import content_gen_bp
from .content_routes import content_bp
from .context import context_bp
from .creative_routes import creative_bp
from .deliverables import deliverables_bp
from .delivery_master_routes import delivery_master_bp
from .delivery_routes import delivery_bp
from .dev_scripting_routes import dev_scripting_bp
from .documentary_routes import documentary_bp
from .editing_workflow_routes import editing_wf_bp
from .education_routes import education_bp
from .encoding_routes import encoding_bp
from .engagement_content_routes import engagement_content_bp
from .enhanced_media_routes import enhanced_media_bp
from .enhancement_routes import enhancement_bp
from .format_routes import format_bp
from .gaming_routes import gaming_bp
from .generative_routes import generative_bp
from .hw_routes import hw_bp
from .infrastructure_routes import infra_bp
from .integration_routes import integration_bp
from .jobs_routes import jobs_bp
from .journal import journal_bp
from .motion_design_routes import motion_design_bp
from .motion_gen_routes import motion_gen_bp
from .multiview_repurpose_routes import multiview_repurpose_bp
from .music_safety_routes import music_safety_bp
from .next_gen_ai_routes import next_gen_ai_bp
from .nlp import nlp_bp
from .object_intel_routes import object_intel_bp
from .overlay_routes import overlay_bp
from .pipeline_intel_routes import pipeline_intel_bp
from .platform_infra_routes import platform_infra_bp
from .platform_ux_routes import platform_ux_bp
from .plugins import plugins_bp
from .preproduction_proxy_routes import preproduction_proxy_bp
from .preview_realtime_routes import preview_realtime_bp
from .privacy_spectral_routes import privacy_spectral_bp
from .processing_routes import processing_bp
from .production_routes import production_bp
from .professional_routes import professional_bp
from .qc_routes import qc_bp
from .remote_realtime_routes import remote_realtime_bp
from .repair_gen_routes import repair_gen_bp
from .search import search_bp
from .settings import settings_bp
from .solver_agent_routes import solver_agent_bp
from .sound_music_routes import sound_music_bp
from .subtitle_pro_routes import subtitle_pro_bp
from .subtitle_routes import subtitle_bp
from .system import system_bp
from .timeline import timeline_bp
from .timeline_auto_routes import timeline_auto_bp
from .timeline_intel_routes import timeline_intel_bp
from .tools_routes import tools_bp
from .transcript_edit_routes import transcript_edit_bp
from .utility_routes import utility_bp
from .ux_intelligence_routes import ux_intel_bp
from .vfx_advanced_routes import vfx_advanced_bp
from .video_ai import video_ai_bp
from .video_core import video_core_bp
from .video_editing import video_editing_bp
from .video_effects_routes import video_effects_bp
from .video_fx import video_fx_bp
from .video_processing_routes import video_proc_bp
from .video_specialty import video_specialty_bp
from .video_vfx_routes import video_vfx_bp
from .voice_speech_routes import voice_speech_bp
from .vr_lens_routes import vr_lens_bp
from .wave_a_routes import wave_a_bp
from .wave_b_routes import wave_b_bp
from .wave_c_routes import wave_c_bp
from .wave_d_routes import wave_d_bp
from .wave_e_routes import wave_e_bp
from .wave_f_routes import wave_f_bp
from .wave_g_routes import wave_g_bp
from .wave_h_routes import wave_h_bp
from .wave_k_routes import wave_k_bp
from .wave_l_routes import wave_l_bp
from .workflow import workflow_bp
from .workflow_dev_routes import workflow_dev_bp
from .workflow_routes import workflow_auto_bp
return (
ai_content_bp,
ai_editing_bp,
ai_intel_bp,
analysis_bp,
architecture_bp,
audio_bp,
audio_adv_bp,
audio_expand_bp,
audio_post_bp,
audio_prod_bp,
batch_data_bp,
body_transfer_bp,
captions_bp,
cloud_distrib_bp,
collab_review_bp,
color_mam_bp,
composition_dubbing_bp,
content_gen_bp,
content_bp,
context_bp,
creative_bp,
deliverables_bp,
delivery_master_bp,
delivery_bp,
dev_scripting_bp,
documentary_bp,
editing_wf_bp,
education_bp,
encoding_bp,
engagement_content_bp,
enhanced_media_bp,
enhancement_bp,
format_bp,
gaming_bp,
generative_bp,
hw_bp,
infra_bp,
integration_bp,
jobs_bp,
journal_bp,
motion_design_bp,
motion_gen_bp,
multiview_repurpose_bp,
music_safety_bp,
next_gen_ai_bp,
nlp_bp,
object_intel_bp,
overlay_bp,
pipeline_intel_bp,
platform_infra_bp,
platform_ux_bp,
plugins_bp,
preproduction_proxy_bp,
preview_realtime_bp,
privacy_spectral_bp,
processing_bp,
production_bp,
professional_bp,
qc_bp,
remote_realtime_bp,
repair_gen_bp,
search_bp,
settings_bp,
solver_agent_bp,
sound_music_bp,
subtitle_pro_bp,
subtitle_bp,
system_bp,
timeline_bp,
timeline_auto_bp,
timeline_intel_bp,
tools_bp,
transcript_edit_bp,
utility_bp,
ux_intel_bp,
vfx_advanced_bp,
video_ai_bp,
video_core_bp,
video_editing_bp,
video_effects_bp,
video_fx_bp,
video_proc_bp,
video_specialty_bp,
video_vfx_bp,
voice_speech_bp,
vr_lens_bp,
wave_a_bp,
wave_b_bp,
wave_c_bp,
wave_d_bp,
wave_e_bp,
wave_f_bp,
wave_g_bp,
wave_h_bp,
wave_k_bp,
wave_l_bp,
workflow_bp,
workflow_dev_bp,
workflow_auto_bp,
)
def register_blueprints(app):
"""Register all route Blueprints with the Flask app.
Built-in route registration is explicit and ordered so startup behavior is
deterministic and easy to audit. ``motion_design_bp`` is registered twice:
once in the core list (bare ``/motion/*`` routes) and once manually with
``url_prefix="/api"`` to preserve the legacy ``/api/motion/*`` surface for
older panel builds.
"""
blueprints = get_core_blueprints()
for bp in blueprints:
app.register_blueprint(bp)
# Preserve the long-standing /api/motion/* surface alongside the current
# bare /motion/* routes so older panel builds and tests do not break.
motion_design_bp = next(bp for bp in blueprints if bp.name == "motion_design")
app.register_blueprint(
motion_design_bp,
url_prefix="/api",
name="motion_design_api",
)