') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); feat: Add GENERICSYSTEMEVENT support to RealTimeEvent enum and RealTimeEventListener by Alex-Nalin · Pull Request #384 · finos/symphony-bdk-python · GitHub
Skip to content

feat: Add GENERICSYSTEMEVENT support to RealTimeEvent enum and RealTimeEventListener - #384

Open
Alex-Nalin wants to merge 2 commits into
finos:mainfrom
Alex-Nalin:feat/genericsystemevent-support
Open

feat: Add GENERICSYSTEMEVENT support to RealTimeEvent enum and RealTimeEventListener#384
Alex-Nalin wants to merge 2 commits into
finos:mainfrom
Alex-Nalin:feat/genericsystemevent-support

Conversation

@Alex-Nalin

Copy link
Copy Markdown

Closes#383

What

Adds native dispatch support for GENERICSYSTEMEVENT events received via the Symphony datahose.

Why

BDK 2.11.2 silently drops GENERICSYSTEMEVENT with "Received event with an
unknown type" because the event is not registered in the RealTimeEvent enum.
Bot developers who subscribe to this event type via datahose.eventTypes cannot handle it at all without monkey-patching the BDK internals.

Changes

  • abstract_datafeed_loop.py: add GENERICSYSTEMEVENT to RealTimeEvent enum
  • real_time_event_listener.py: add on_generic_system_event no-op + import

The generated models (V4GenericSystemEvent, V4Payload.generic_system_event) already exist — no gen/ changes required.

Testing

Verified end-to-end by subscribing to GENERICSYSTEMEVENT via
POST /agent/v5/events/read and confirming on_generic_system_event is called on the listener with the correct V4GenericSystemEvent payload. Use test_handle_generic_system_event

Example/Sample code

An example specifically for handling GENERICSYSTEMEVENT can be found https://github.com/finos/symphony-bdk-python/tree/main/examples/datafeed/datahose_generic_system_event.py

…meEventListener
Closesfinos#383
## What
Adds native dispatch support for `GENERICSYSTEMEVENT` events received via the Symphony datahose.
## Why
BDK 2.11.2 silently drops `GENERICSYSTEMEVENT` with "Received event with an
unknown type" because the event is not registered in the `RealTimeEvent` enum.
Bot developers who subscribe to this event type via `datahose.eventTypes` cannot handle it at all without monkey-patching the BDK internals.
## Changes
- `abstract_datafeed_loop.py`: add `GENERICSYSTEMEVENT` to `RealTimeEvent` enum
- `real_time_event_listener.py`: add `on_generic_system_event` no-op + import
The generated models (`V4GenericSystemEvent`, `V4Payload.generic_system_event`) already exist — no gen/ changes required.
## Testing
Verified end-to-end by subscribing to `GENERICSYSTEMEVENT` via
`POST /agent/v5/events/read` and confirming `on_generic_system_event` is called on the listener with the correct `V4GenericSystemEvent` payload.
…meEventListener
Closesfinos#383
## What
Adds native dispatch support for `GENERICSYSTEMEVENT` events received via the Symphony datahose.
## Why
BDK 2.11.2 silently drops `GENERICSYSTEMEVENT` with "Received event with an
unknown type" because the event is not registered in the `RealTimeEvent` enum.
Bot developers who subscribe to this event type via `datahose.eventTypes` cannot handle it at all without monkey-patching the BDK internals.
## Changes
- `abstract_datafeed_loop.py`: add `GENERICSYSTEMEVENT` to `RealTimeEvent` enum
- `real_time_event_listener.py`: add `on_generic_system_event` no-op + import
The generated models (`V4GenericSystemEvent`, `V4Payload.generic_system_event`) already exist — no gen/ changes required.
## Testing
Verified end-to-end by subscribing to `GENERICSYSTEMEVENT` via
`POST /agent/v5/events/read` and confirming `on_generic_system_event` is called on the listener with the correct `V4GenericSystemEvent` payload. Use test_handle_generic_system_event
## Example/Sample code
An example specifically for handling `GENERICSYSTEMEVENT` can be found https://github.com/finos/symphony-bdk-python/tree/main/examples/datafeed/datahose_generic_system_event.py
@linux-foundation-easycla

Copy link
Copy Markdown

CLA Not Signed

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add GENERICSYSTEMEVENT support to RealTimeEventListener and RealTimeEvent enum

1 participant

@Alex-Nalin