Mercurial > libervia-backend
diff sat_frontends/jp/base.py @ 4037:524856bd7b19
massive refactoring to switch from camelCase to snake_case:
historically, Libervia (SàT before) was using camelCase as allowed by PEP8 when using a
pre-PEP8 code, to use the same coding style as in Twisted.
However, snake_case is more readable and it's better to follow PEP8 best practices, so it
has been decided to move on full snake_case. Because Libervia has a huge codebase, this
ended with a ugly mix of camelCase and snake_case.
To fix that, this patch does a big refactoring by renaming every function and method
(including bridge) that are not coming from Twisted or Wokkel, to use fully snake_case.
This is a massive change, and may result in some bugs.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 08 Apr 2023 13:54:42 +0200 |
parents | 6939594ba77e |
children | 2594e1951cf7 |
line wrap: on
line diff
--- a/sat_frontends/jp/base.py Fri Apr 07 15:18:39 2023 +0200 +++ b/sat_frontends/jp/base.py Sat Apr 08 13:54:42 2023 +0200 @@ -46,7 +46,7 @@ from sat.tools.common.ansi import ANSI as A from sat.core import exceptions import sat_frontends.jp -from sat_frontends.jp.loops import QuitException, getJPLoop +from sat_frontends.jp.loops import QuitException, get_jp_loop from sat_frontends.jp.constants import Const as C from sat_frontends.bridge.bridge_frontend import BridgeException from sat_frontends.tools import misc @@ -55,9 +55,9 @@ ## bridge handling # we get bridge name from conf and initialise the right class accordingly -main_config = config.parseMainConf() -bridge_name = config.getConfig(main_config, '', 'bridge', 'dbus') -JPLoop = getJPLoop(bridge_name) +main_config = config.parse_main_conf() +bridge_name = config.config_get(main_config, '', 'bridge', 'dbus') +JPLoop = get_jp_loop(bridge_name) try: @@ -118,7 +118,7 @@ def get_config(self, name, section=C.CONFIG_SECTION, default=None): """Retrieve a setting value from sat.conf""" - return config.getConfig(self.sat_conf, section, name, default=default) + return config.config_get(self.sat_conf, section, name, default=default) def guess_background(self): # cf. https://unix.stackexchange.com/a/245568 (thanks!) @@ -204,7 +204,7 @@ C.A_DIRECTORY = A.BOLD + A.FG_MAGENTA C.A_FILE = A.FG_BLACK - def _bridgeConnected(self): + def _bridge_connected(self): self.parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, description=DESCRIPTION) self._make_parents() @@ -231,7 +231,7 @@ async def set_progress_id(self, progress_id): # because we use async, we need an explicit setter self._progress_id = progress_id - await self.replayCache('progress_ids_cache') + await self.replay_cache('progress_ids_cache') @property def watch_progress(self): @@ -254,7 +254,7 @@ except AttributeError: return 0 - async def replayCache(self, cache_attribute): + async def replay_cache(self, cache_attribute): """Replay cached signals @param cache_attribute(str): name of the attribute containing the cache @@ -294,14 +294,14 @@ if inspect.isawaitable(ret): await ret - def addOnQuitCallback(self, callback, *args, **kwargs): + def add_on_quit_callback(self, callback, *args, **kwargs): """Add a callback which will be called on quit command @param callback(callback): method to call """ self._onQuitCallbacks.append((callback, args, kwargs)) - def getOutputChoices(self, output_type): + def get_output_choices(self, output_type): """Return valid output filters for output_type @param output_type: True for default, @@ -612,7 +612,7 @@ url = self.get_xmpp_uri_from_http(url) try: - uri_data = uri.parseXMPPUri(url) + uri_data = uri.parse_xmpp_uri(url) except ValueError: self.parser.error(_('invalid XMPP URL: {url}').format(url=url)) else: @@ -694,7 +694,7 @@ async def main(self, args, namespace): try: - await self.bridge.bridgeConnect() + await self.bridge.bridge_connect() except Exception as e: if isinstance(e, exceptions.BridgeExceptionNoService): print( @@ -711,9 +711,9 @@ ) self.quit(C.EXIT_BRIDGE_ERROR, raise_exc=False) return - await self.bridge.getReady() - self.version = await self.bridge.getVersion() - self._bridgeConnected() + await self.bridge.ready_get() + self.version = await self.bridge.version_get() + self._bridge_connected() self.import_plugins() try: self.args = self.parser.parse_args(args, namespace=None) @@ -756,14 +756,14 @@ res = await self.ainput(f"{message} (y/N)? ") return res in ("y", "Y") - async def confirmOrQuit(self, message, cancel_message=_("action cancelled by user")): + async def confirm_or_quit(self, message, cancel_message=_("action cancelled by user")): """Request user to confirm action, and quit if he doesn't""" confirmed = await self.confirm(message) if not confirmed: self.disp(cancel_message) self.quit(C.EXIT_USER_CANCELLED) - def quitFromSignal(self, exit_code=0): + def quit_from_signal(self, exit_code=0): r"""Same as self.quit, but from a signal handler /!\: return must be used after calling this method ! @@ -805,7 +805,7 @@ nodes2jid = {} try: - contacts = await self.bridge.getContacts(self.profile) + contacts = await self.bridge.contacts_get(self.profile) except BridgeException as e: if e.classname == "AttributeError": # we may get an AttributeError if we use a component profile @@ -872,7 +872,7 @@ self.disp('') return pwd - async def connectOrPrompt(self, method, err_msg=None): + async def connect_or_prompt(self, method, err_msg=None): """Try to connect/start profile session and prompt for password if needed @param method(callable): bridge method to either connect or start profile session @@ -907,7 +907,7 @@ """ # FIXME: need better exit codes - self.profile = await self.bridge.profileNameGet(self.args.profile) + self.profile = await self.bridge.profile_name_get(self.args.profile) if not self.profile: log.error( @@ -922,12 +922,12 @@ pass else: if start_session: - await self.connectOrPrompt( - lambda pwd: self.bridge.profileStartSession(pwd, self.profile), + await self.connect_or_prompt( + lambda pwd: self.bridge.profile_start_session(pwd, self.profile), err_msg="Can't start {profile}'s session: {e}" ) return - elif not await self.bridge.profileIsSessionStarted(self.profile): + elif not await self.bridge.profile_is_session_started(self.profile): if not self.args.connect: self.disp(_( "Session for [{profile}] is not started, please start it " @@ -945,13 +945,13 @@ # creation/deletion) return elif self.args.connect is True: # if connection is asked, we connect the profile - await self.connectOrPrompt( + await self.connect_or_prompt( lambda pwd: self.bridge.connect(self.profile, pwd, {}), err_msg = 'Can\'t connect profile "{profile!s}": {e}' ) return else: - if not await self.bridge.isConnected(self.profile): + if not await self.bridge.is_connected(self.profile): log.error( _("Profile [{profile}] is not connected, please connect it " "before using jp, or use --connect option") @@ -966,14 +966,14 @@ _jid = JID(param_jid) if not _jid.resource: #if the resource is not given, we try to add the main resource - main_resource = await self.bridge.getMainResource(param_jid, self.profile) + main_resource = await self.bridge.main_resource_get(param_jid, self.profile) if main_resource: return f"{_jid.bare}/{main_resource}" return param_jid async def get_profile_jid(self): """Retrieve current profile bare JID if possible""" - full_jid = await self.bridge.asyncGetParamA( + full_jid = await self.bridge.param_get_a_async( "JabberID", "Connection", profile_key=self.profile ) return full_jid.rsplit("/", 1)[0] @@ -1054,7 +1054,7 @@ assert use_output in C.OUTPUT_TYPES self._output_type = use_output output_parent = argparse.ArgumentParser(add_help=False) - choices = set(self.host.getOutputChoices(use_output)) + choices = set(self.host.get_output_choices(use_output)) choices.update(extra_outputs) if not choices: raise exceptions.InternalError( @@ -1125,14 +1125,14 @@ async def set_progress_id(self, progress_id): return await self.host.set_progress_id(progress_id) - async def progressStartedHandler(self, uid, metadata, profile): + async def progress_started_handler(self, uid, metadata, profile): if profile != self.profile: return if self.progress_id is None: # the progress started message can be received before the id - # so we keep progressStarted signals in cache to replay they + # so we keep progress_started signals in cache to replay they # when the progress_id is received - cache_data = (self.progressStartedHandler, uid, metadata, profile) + cache_data = (self.progress_started_handler, uid, metadata, profile) try: cache = self.host.progress_ids_cache except AttributeError: @@ -1140,14 +1140,14 @@ cache.append(cache_data) else: if self.host.watch_progress and uid == self.progress_id: - await self.onProgressStarted(metadata) + await self.on_progress_started(metadata) while True: await asyncio.sleep(PROGRESS_DELAY) - cont = await self.progressUpdate() + cont = await self.progress_update() if not cont: break - async def progressFinishedHandler(self, uid, metadata, profile): + async def progress_finished_handler(self, uid, metadata, profile): if profile != self.profile: return if uid == self.progress_id: @@ -1155,26 +1155,26 @@ self.host.pbar.finish() except AttributeError: pass - await self.onProgressFinished(metadata) + await self.on_progress_finished(metadata) if self.host.quit_on_progress_end: - self.host.quitFromSignal() + self.host.quit_from_signal() - async def progressErrorHandler(self, uid, message, profile): + async def progress_error_handler(self, uid, message, profile): if profile != self.profile: return if uid == self.progress_id: if self.args.progress: self.disp('') # progress is not finished, so we skip a line if self.host.quit_on_progress_end: - await self.onProgressError(message) - self.host.quitFromSignal(C.EXIT_ERROR) + await self.on_progress_error(message) + self.host.quit_from_signal(C.EXIT_ERROR) - async def progressUpdate(self): + async def progress_update(self): """This method is continualy called to update the progress bar @return (bool): False to stop being called """ - data = await self.host.bridge.progressGet(self.progress_id, self.profile) + data = await self.host.bridge.progress_get(self.progress_id, self.profile) if data: try: size = data['size'] @@ -1214,38 +1214,38 @@ elif self.host.pbar is not None: return False - await self.onProgressUpdate(data) + await self.on_progress_update(data) return True - async def onProgressStarted(self, metadata): + async def on_progress_started(self, metadata): """Called when progress has just started can be overidden by a command - @param metadata(dict): metadata as sent by bridge.progressStarted + @param metadata(dict): metadata as sent by bridge.progress_started """ self.disp(_("Operation started"), 2) - async def onProgressUpdate(self, metadata): + async def on_progress_update(self, metadata): """Method called on each progress updata can be overidden by a command to handle progress metadata - @para metadata(dict): metadata as returned by bridge.progressGet + @para metadata(dict): metadata as returned by bridge.progress_get """ pass - async def onProgressFinished(self, metadata): + async def on_progress_finished(self, metadata): """Called when progress has just finished can be overidden by a command - @param metadata(dict): metadata as sent by bridge.progressFinished + @param metadata(dict): metadata as sent by bridge.progress_finished """ self.disp(_("Operation successfully finished"), 2) - async def onProgressError(self, e): + async def on_progress_error(self, e): """Called when a progress failed - @param error_msg(unicode): error message as sent by bridge.progressError + @param error_msg(unicode): error message as sent by bridge.progress_error """ self.disp(_("Error while doing operation: {e}").format(e=e), error=True) @@ -1260,7 +1260,7 @@ _('trying to use output when use_output has not been set')) return self.host.output(output_type, self.args.output, self.extra_outputs, data) - def getPubsubExtra(self, extra: Optional[dict] = None) -> str: + def get_pubsub_extra(self, extra: Optional[dict] = None) -> str: """Helper method to compute extra data from pubsub arguments @param extra: base extra dict, or None to generate a new one @@ -1328,7 +1328,7 @@ for cls in subcommands: cls(self) - def overridePubsubFlags(self, new_flags: Set[str]) -> None: + def override_pubsub_flags(self, new_flags: Set[str]) -> None: """Replace pubsub_flags given in __init__ useful when a command is extending an other command (e.g. blog command which does @@ -1356,11 +1356,11 @@ # we need to register the following signal even if we don't display the # progress bar self.host.bridge.register_signal( - "progressStarted", self.progressStartedHandler) + "progress_started", self.progress_started_handler) self.host.bridge.register_signal( - "progressFinished", self.progressFinishedHandler) + "progress_finished", self.progress_finished_handler) self.host.bridge.register_signal( - "progressError", self.progressErrorHandler) + "progress_error", self.progress_error_handler) if self.need_connect is not None: await self.host.connect_profile() @@ -1387,7 +1387,7 @@ def __init__(self, *args, **kwargs): super(CommandAnswering, self).__init__(*args, **kwargs) - async def onActionNew(self, action_data, action_id, security_limit, profile): + async def on_action_new(self, action_data, action_id, security_limit, profile): if profile != self.profile: return try: @@ -1398,7 +1398,7 @@ except KeyError: pass else: - self.onXMLUI(xml_ui) + self.on_xmlui(xml_ui) else: try: callback = self.action_callbacks[action_type] @@ -1407,7 +1407,7 @@ else: await callback(action_data, action_id, security_limit, profile) - def onXMLUI(self, xml_ui): + def on_xmlui(self, xml_ui): """Display a dialog received from the backend. @param xml_ui (unicode): dialog XML representation @@ -1422,7 +1422,7 @@ async def start_answering(self): """Auto reply to confirmation requests""" - self.host.bridge.register_signal("actionNew", self.onActionNew) - actions = await self.host.bridge.actionsGet(self.profile) + self.host.bridge.register_signal("action_new", self.on_action_new) + actions = await self.host.bridge.actions_get(self.profile) for action_data, action_id, security_limit in actions: - await self.onActionNew(action_data, action_id, security_limit, self.profile) + await self.on_action_new(action_data, action_id, security_limit, self.profile)