') + ')', '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
You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes#383
What
Adds native dispatch support for
GENERICSYSTEMEVENTevents received via the Symphony datahose.Why
BDK 2.11.2 silently drops
GENERICSYSTEMEVENTwith "Received event with anunknown type" because the event is not registered in the
RealTimeEventenum.Bot developers who subscribe to this event type via
datahose.eventTypescannot handle it at all without monkey-patching the BDK internals.Changes
abstract_datafeed_loop.py: addGENERICSYSTEMEVENTtoRealTimeEventenumreal_time_event_listener.py: addon_generic_system_eventno-op + importThe generated models (
V4GenericSystemEvent,V4Payload.generic_system_event) already exist — no gen/ changes required.Testing
Verified end-to-end by subscribing to
GENERICSYSTEMEVENTviaPOST /agent/v5/events/readand confirmingon_generic_system_eventis called on the listener with the correctV4GenericSystemEventpayload. Use test_handle_generic_system_eventExample/Sample code
An example specifically for handling
GENERICSYSTEMEVENTcan be found https://github.com/finos/symphony-bdk-python/tree/main/examples/datafeed/datahose_generic_system_event.py