diff --git a/libervia/backend/bridge/bridge_constructor/constructors/pb/constructor.py b/libervia/backend/bridge/bridge_constructor/constructors/pb/constructor.py index 4eb5126a..94d4b237 100644 --- a/libervia/backend/bridge/bridge_constructor/constructors/pb/constructor.py +++ b/libervia/backend/bridge/bridge_constructor/constructors/pb/constructor.py @@ -44,6 +44,11 @@ class pbConstructor(base_constructor.Constructor): {debug}d = self.root.callRemote("{name}"{args_comma}{args_no_def}) d.addErrback(self._errback) return d.asFuture(asyncio.get_event_loop())\n""", + "twisted_methods": """\ + def {name}(self{args_comma}{args}): + {debug}d = self.root.callRemote("{name}"{args_comma}{args_no_def}) + d.addErrback(self._errback) + return d\n""", } def core_completion_signal(self, completion, function, default, arg_doc, async_): diff --git a/libervia/backend/bridge/bridge_constructor/constructors/pb/pb_frontend_template.py b/libervia/backend/bridge/bridge_constructor/constructors/pb/pb_frontend_template.py index 8ee56bc6..967411c0 100644 --- a/libervia/backend/bridge/bridge_constructor/constructors/pb/pb_frontend_template.py +++ b/libervia/backend/bridge/bridge_constructor/constructors/pb/pb_frontend_template.py @@ -206,3 +206,34 @@ class AIOBridge(bridge): ##ASYNC_METHODS_PART## + + +class TwistedBridge(bridge): + + def __init__(self): + self.signals_handler = SignalsHandler() + + async def post_init(self): + """Post-initialization hook. + + Actually no post init is needed, but the "__getattr__" return "partial" for + unknown methods, and this causes "dynamic_import.load_and_init_bridge" to fail. + """ + pass + + def _errback(self, failure_): + """Convert Failure to BridgeException""" + raise BridgeException( + name=failure_.type.decode("utf-8"), message=str(failure_.value) + ) + + def call(self, name, *args, **kwargs): + d = self.root.callRemote(name, *args, *kwargs) + d.addErrback(self._errback) + return d + + def bridge_connect(self): + return super().bridge_connect(callback=None, errback=None) + + +##TWISTED_METHODS_PART## diff --git a/libervia/frontends/bridge/pb.py b/libervia/frontends/bridge/pb.py index 770cb345..fad121dc 100644 --- a/libervia/frontends/bridge/pb.py +++ b/libervia/frontends/bridge/pb.py @@ -1534,3 +1534,486 @@ class AIOBridge(bridge): d = self.root.callRemote("version_get") d.addErrback(self._errback) return d.asFuture(asyncio.get_event_loop()) + + +class TwistedBridge(bridge): + + def __init__(self): + self.signals_handler = SignalsHandler() + + async def post_init(self): + """Post-initialization hook. + + Actually no post init is needed, but the "__getattr__" return "partial" for + unknown methods, and this causes "dynamic_import.load_and_init_bridge" to fail. + """ + pass + + def _errback(self, failure_): + """Convert Failure to BridgeException""" + raise BridgeException( + name=failure_.type.decode("utf-8"), message=str(failure_.value) + ) + + def call(self, name, *args, **kwargs): + d = self.root.callRemote(name, *args, *kwargs) + d.addErrback(self._errback) + return d + + def bridge_connect(self): + return super().bridge_connect(callback=None, errback=None) + + def action_launch(self, callback_id, data, profile_key="@DEFAULT@"): + d = self.root.callRemote("action_launch", callback_id, data, profile_key) + d.addErrback(self._errback) + return d + + def actions_get(self, profile_key="@DEFAULT@"): + d = self.root.callRemote("actions_get", profile_key) + d.addErrback(self._errback) + return d + + def config_get(self, section, name): + d = self.root.callRemote("config_get", section, name) + d.addErrback(self._errback) + return d + + def connect(self, profile_key="@DEFAULT@", password="", options={}): + d = self.root.callRemote("connect", profile_key, password, options) + d.addErrback(self._errback) + return d + + def contact_add(self, entity_jid, profile_key="@DEFAULT@"): + d = self.root.callRemote("contact_add", entity_jid, profile_key) + d.addErrback(self._errback) + return d + + def contact_del(self, entity_jid, profile_key="@DEFAULT@"): + d = self.root.callRemote("contact_del", entity_jid, profile_key) + d.addErrback(self._errback) + return d + + def contact_get(self, arg_0, profile_key="@DEFAULT@"): + d = self.root.callRemote("contact_get", arg_0, profile_key) + d.addErrback(self._errback) + return d + + def contact_update(self, entity_jid, name, groups, profile_key="@DEFAULT@"): + d = self.root.callRemote("contact_update", entity_jid, name, groups, profile_key) + d.addErrback(self._errback) + return d + + def contacts_get(self, profile_key="@DEFAULT@"): + d = self.root.callRemote("contacts_get", profile_key) + d.addErrback(self._errback) + return d + + def contacts_get_from_group(self, group, profile_key="@DEFAULT@"): + d = self.root.callRemote("contacts_get_from_group", group, profile_key) + d.addErrback(self._errback) + return d + + def devices_infos_get(self, bare_jid, profile_key): + d = self.root.callRemote("devices_infos_get", bare_jid, profile_key) + d.addErrback(self._errback) + return d + + def disco_find_by_features( + self, + namespaces, + identities, + bare_jid=False, + service=True, + roster=True, + own_jid=True, + local_device=False, + profile_key="@DEFAULT@", + ): + d = self.root.callRemote( + "disco_find_by_features", + namespaces, + identities, + bare_jid, + service, + roster, + own_jid, + local_device, + profile_key, + ) + d.addErrback(self._errback) + return d + + def disco_infos(self, entity_jid, node="", use_cache=True, profile_key="@DEFAULT@"): + d = self.root.callRemote("disco_infos", entity_jid, node, use_cache, profile_key) + d.addErrback(self._errback) + return d + + def disco_items(self, entity_jid, node="", use_cache=True, profile_key="@DEFAULT@"): + d = self.root.callRemote("disco_items", entity_jid, node, use_cache, profile_key) + d.addErrback(self._errback) + return d + + def disconnect(self, profile_key="@DEFAULT@"): + d = self.root.callRemote("disconnect", profile_key) + d.addErrback(self._errback) + return d + + def encryption_namespace_get(self, arg_0): + d = self.root.callRemote("encryption_namespace_get", arg_0) + d.addErrback(self._errback) + return d + + def encryption_plugins_get(self): + d = self.root.callRemote("encryption_plugins_get") + d.addErrback(self._errback) + return d + + def encryption_trust_ui_get(self, to_jid, namespace, profile_key): + d = self.root.callRemote( + "encryption_trust_ui_get", to_jid, namespace, profile_key + ) + d.addErrback(self._errback) + return d + + def entities_data_get(self, jids, keys, profile): + d = self.root.callRemote("entities_data_get", jids, keys, profile) + d.addErrback(self._errback) + return d + + def entity_data_get(self, jid, keys, profile): + d = self.root.callRemote("entity_data_get", jid, keys, profile) + d.addErrback(self._errback) + return d + + def features_get(self, profile_key): + d = self.root.callRemote("features_get", profile_key) + d.addErrback(self._errback) + return d + + def history_get( + self, from_jid, to_jid, limit, between=True, filters="", profile="@NONE@" + ): + d = self.root.callRemote( + "history_get", from_jid, to_jid, limit, between, filters, profile + ) + d.addErrback(self._errback) + return d + + def image_check(self, arg_0): + d = self.root.callRemote("image_check", arg_0) + d.addErrback(self._errback) + return d + + def image_convert(self, source, dest, arg_2, extra): + d = self.root.callRemote("image_convert", source, dest, arg_2, extra) + d.addErrback(self._errback) + return d + + def image_generate_preview(self, image_path, profile_key): + d = self.root.callRemote("image_generate_preview", image_path, profile_key) + d.addErrback(self._errback) + return d + + def image_resize(self, image_path, width, height): + d = self.root.callRemote("image_resize", image_path, width, height) + d.addErrback(self._errback) + return d + + def init_pre_script(self): + d = self.root.callRemote("init_pre_script") + d.addErrback(self._errback) + return d + + def is_connected(self, profile_key="@DEFAULT@"): + d = self.root.callRemote("is_connected", profile_key) + d.addErrback(self._errback) + return d + + def main_resource_get(self, contact_jid, profile_key="@DEFAULT@"): + d = self.root.callRemote("main_resource_get", contact_jid, profile_key) + d.addErrback(self._errback) + return d + + def menu_help_get(self, menu_id, language): + d = self.root.callRemote("menu_help_get", menu_id, language) + d.addErrback(self._errback) + return d + + def menu_launch(self, menu_type, path, data, security_limit, profile_key): + d = self.root.callRemote( + "menu_launch", menu_type, path, data, security_limit, profile_key + ) + d.addErrback(self._errback) + return d + + def menus_get(self, language, security_limit): + d = self.root.callRemote("menus_get", language, security_limit) + d.addErrback(self._errback) + return d + + def message_encryption_get(self, to_jid, profile_key): + d = self.root.callRemote("message_encryption_get", to_jid, profile_key) + d.addErrback(self._errback) + return d + + def message_encryption_start( + self, to_jid, namespace="", replace=False, profile_key="@NONE@" + ): + d = self.root.callRemote( + "message_encryption_start", to_jid, namespace, replace, profile_key + ) + d.addErrback(self._errback) + return d + + def message_encryption_stop(self, to_jid, profile_key): + d = self.root.callRemote("message_encryption_stop", to_jid, profile_key) + d.addErrback(self._errback) + return d + + def message_send( + self, + to_jid, + message, + subject={}, + mess_type="auto", + extra={}, + profile_key="@NONE@", + ): + d = self.root.callRemote( + "message_send", to_jid, message, subject, mess_type, extra, profile_key + ) + d.addErrback(self._errback) + return d + + def namespaces_get(self): + d = self.root.callRemote("namespaces_get") + d.addErrback(self._errback) + return d + + def notification_add( + self, + type_, + body_plain, + body_rich, + title, + is_global, + requires_action, + arg_6, + priority, + expire_at, + extra, + ): + d = self.root.callRemote( + "notification_add", + type_, + body_plain, + body_rich, + title, + is_global, + requires_action, + arg_6, + priority, + expire_at, + extra, + ) + d.addErrback(self._errback) + return d + + def notification_delete(self, id_, is_global, profile_key): + d = self.root.callRemote("notification_delete", id_, is_global, profile_key) + d.addErrback(self._errback) + return d + + def notifications_expired_clean(self, limit_timestamp, profile_key): + d = self.root.callRemote( + "notifications_expired_clean", limit_timestamp, profile_key + ) + d.addErrback(self._errback) + return d + + def notifications_get(self, filters, profile_key): + d = self.root.callRemote("notifications_get", filters, profile_key) + d.addErrback(self._errback) + return d + + def param_get_a(self, name, category, attribute="value", profile_key="@DEFAULT@"): + d = self.root.callRemote("param_get_a", name, category, attribute, profile_key) + d.addErrback(self._errback) + return d + + def param_get_a_async( + self, + name, + category, + attribute="value", + security_limit=-1, + profile_key="@DEFAULT@", + ): + d = self.root.callRemote( + "param_get_a_async", name, category, attribute, security_limit, profile_key + ) + d.addErrback(self._errback) + return d + + def param_set( + self, name, value, category, security_limit=-1, profile_key="@DEFAULT@" + ): + d = self.root.callRemote( + "param_set", name, value, category, security_limit, profile_key + ) + d.addErrback(self._errback) + return d + + def param_ui_get(self, security_limit=-1, app="", extra="", profile_key="@DEFAULT@"): + d = self.root.callRemote("param_ui_get", security_limit, app, extra, profile_key) + d.addErrback(self._errback) + return d + + def params_categories_get(self): + d = self.root.callRemote("params_categories_get") + d.addErrback(self._errback) + return d + + def params_register_app(self, xml, security_limit=-1, app=""): + d = self.root.callRemote("params_register_app", xml, security_limit, app) + d.addErrback(self._errback) + return d + + def params_template_load(self, filename): + d = self.root.callRemote("params_template_load", filename) + d.addErrback(self._errback) + return d + + def params_template_save(self, filename): + d = self.root.callRemote("params_template_save", filename) + d.addErrback(self._errback) + return d + + def params_values_from_category_get_async( + self, category, security_limit=-1, app="", extra="", profile_key="@DEFAULT@" + ): + d = self.root.callRemote( + "params_values_from_category_get_async", + category, + security_limit, + app, + extra, + profile_key, + ) + d.addErrback(self._errback) + return d + + def presence_set(self, to_jid="", show="", statuses={}, profile_key="@DEFAULT@"): + d = self.root.callRemote("presence_set", to_jid, show, statuses, profile_key) + d.addErrback(self._errback) + return d + + def presence_statuses_get(self, profile_key="@DEFAULT@"): + d = self.root.callRemote("presence_statuses_get", profile_key) + d.addErrback(self._errback) + return d + + def private_data_delete(self, namespace, key, arg_2): + d = self.root.callRemote("private_data_delete", namespace, key, arg_2) + d.addErrback(self._errback) + return d + + def private_data_get(self, namespace, key, profile_key): + d = self.root.callRemote("private_data_get", namespace, key, profile_key) + d.addErrback(self._errback) + return d + + def private_data_set(self, namespace, key, data, profile_key): + d = self.root.callRemote("private_data_set", namespace, key, data, profile_key) + d.addErrback(self._errback) + return d + + def profile_create(self, profile, password="", component=""): + d = self.root.callRemote("profile_create", profile, password, component) + d.addErrback(self._errback) + return d + + def profile_delete_async(self, profile): + d = self.root.callRemote("profile_delete_async", profile) + d.addErrback(self._errback) + return d + + def profile_is_session_started(self, profile_key="@DEFAULT@"): + d = self.root.callRemote("profile_is_session_started", profile_key) + d.addErrback(self._errback) + return d + + def profile_name_get(self, profile_key="@DEFAULT@"): + d = self.root.callRemote("profile_name_get", profile_key) + d.addErrback(self._errback) + return d + + def profile_set_default(self, profile): + d = self.root.callRemote("profile_set_default", profile) + d.addErrback(self._errback) + return d + + def profile_start_session(self, password="", profile_key="@DEFAULT@"): + d = self.root.callRemote("profile_start_session", password, profile_key) + d.addErrback(self._errback) + return d + + def profiles_list_get(self, clients=True, components=False): + d = self.root.callRemote("profiles_list_get", clients, components) + d.addErrback(self._errback) + return d + + def progress_get(self, id, profile): + d = self.root.callRemote("progress_get", id, profile) + d.addErrback(self._errback) + return d + + def progress_get_all(self, profile): + d = self.root.callRemote("progress_get_all", profile) + d.addErrback(self._errback) + return d + + def progress_get_all_metadata(self, profile): + d = self.root.callRemote("progress_get_all_metadata", profile) + d.addErrback(self._errback) + return d + + def ready_get(self): + d = self.root.callRemote("ready_get") + d.addErrback(self._errback) + return d + + def roster_resync(self, profile_key="@DEFAULT@"): + d = self.root.callRemote("roster_resync", profile_key) + d.addErrback(self._errback) + return d + + def session_infos_get(self, profile_key): + d = self.root.callRemote("session_infos_get", profile_key) + d.addErrback(self._errback) + return d + + def sub_waiting_get(self, profile_key="@DEFAULT@"): + d = self.root.callRemote("sub_waiting_get", profile_key) + d.addErrback(self._errback) + return d + + def subscription(self, sub_type, entity, profile_key="@DEFAULT@"): + d = self.root.callRemote("subscription", sub_type, entity, profile_key) + d.addErrback(self._errback) + return d + + def tor_infos_get(self, extra, profile_key): + d = self.root.callRemote("tor_infos_get", extra, profile_key) + d.addErrback(self._errback) + return d + + def tor_mode_get(self, profile_key): + d = self.root.callRemote("tor_mode_get", profile_key) + d.addErrback(self._errback) + return d + + def version_get(self): + d = self.root.callRemote("version_get") + d.addErrback(self._errback) + return d