Mercurial > libervia-backend
diff sat_frontends/jp/cmd_pubsub.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 | 570254d5a798 |
children | 4b842c1fb686 |
line wrap: on
line diff
--- a/sat_frontends/jp/cmd_pubsub.py Fri Apr 07 15:18:39 2023 +0200 +++ b/sat_frontends/jp/cmd_pubsub.py Sat Apr 08 13:54:42 2023 +0200 @@ -70,15 +70,15 @@ help=_("data key to filter"), ) - def removePrefix(self, key): + def remove_prefix(self, key): return key[7:] if key.startswith("pubsub#") else key - def filterKey(self, key): + def filter_key(self, key): return any((key == k or key == "pubsub#" + k) for k in self.args.keys) async def start(self): try: - config_dict = await self.host.bridge.psNodeConfigurationGet( + config_dict = await self.host.bridge.ps_node_configuration_get( self.args.service, self.args.node, self.profile, @@ -97,9 +97,9 @@ self.disp(f"Internal error: {e}", error=True) self.host.quit(C.EXIT_INTERNAL_ERROR) else: - key_filter = (lambda k: True) if not self.args.keys else self.filterKey + key_filter = (lambda k: True) if not self.args.keys else self.filter_key config_dict = { - self.removePrefix(k): v for k, v in config_dict.items() if key_filter(k) + self.remove_prefix(k): v for k, v in config_dict.items() if key_filter(k) } await self.output(config_dict) self.host.quit() @@ -150,7 +150,7 @@ async def start(self): options = self.get_config_options(self.args) try: - node_id = await self.host.bridge.psNodeCreate( + node_id = await self.host.bridge.ps_node_create( self.args.service, self.args.node, options, @@ -198,10 +198,10 @@ "Are you sure to delete node [{node}] on service " "[{service}]? This will delete ALL items from it!" ).format(node=self.args.node, service=self.args.service) - await self.host.confirmOrQuit(message, _("node purge cancelled")) + await self.host.confirm_or_quit(message, _("node purge cancelled")) try: - await self.host.bridge.psNodePurge( + await self.host.bridge.ps_node_purge( self.args.service, self.args.node, self.profile, @@ -243,10 +243,10 @@ message = _( "Are you sure to delete node [{node}] on " "service [{service}]?" ).format(node=self.args.node, service=self.args.service) - await self.host.confirmOrQuit(message, _("node deletion cancelled")) + await self.host.confirm_or_quit(message, _("node deletion cancelled")) try: - await self.host.bridge.psNodeDelete( + await self.host.bridge.ps_node_delete( self.args.service, self.args.node, self.profile, @@ -290,7 +290,7 @@ help=_('don\'t prepend "pubsub#" prefix to field names'), ) - def getKeyName(self, k): + def get_key_name(self, k): if self.args.full_prefix or k.startswith("pubsub#"): return k else: @@ -298,10 +298,10 @@ async def start(self): try: - await self.host.bridge.psNodeConfigurationSet( + await self.host.bridge.ps_node_configuration_set( self.args.service, self.args.node, - {self.getKeyName(k): v for k, v in self.args.fields}, + {self.get_key_name(k): v for k, v in self.args.fields}, self.profile, ) except Exception as e: @@ -339,7 +339,7 @@ async def start(self): try: - element, etree = xml_tools.etreeParse( + element, etree = xml_tools.etree_parse( self, self.args.import_file, reraise=True ) except Exception as e: @@ -350,7 +350,7 @@ # so we wrap them here and try again self.args.import_file.seek(0) xml_buf = "<import>" + self.args.import_file.read() + "</import>" - element, etree = xml_tools.etreeParse(self, xml_buf) + element, etree = xml_tools.etree_parse(self, xml_buf) # we reverse element as we expect to have most recently published element first # TODO: make this more explicit and add an option @@ -366,7 +366,7 @@ items = [etree.tostring(i, encoding="unicode") for i in element] if self.args.admin: - method = self.host.bridge.psAdminItemsSend + method = self.host.bridge.ps_admin_items_send else: self.disp( _( @@ -374,7 +374,7 @@ "be changed" ) ) - method = self.host.bridge.psItemsSend + method = self.host.bridge.ps_items_send try: items_ids = await method( @@ -416,7 +416,7 @@ async def start(self): try: - affiliations = await self.host.bridge.psNodeAffiliationsGet( + affiliations = await self.host.bridge.ps_node_affiliations_get( self.args.service, self.args.node, self.profile, @@ -458,7 +458,7 @@ async def start(self): affiliations = dict(self.args.affiliations) try: - await self.host.bridge.psNodeAffiliationsSet( + await self.host.bridge.ps_node_affiliations_set( self.args.service, self.args.node, affiliations, @@ -505,9 +505,9 @@ async def start(self): if self.args.public: - method = self.host.bridge.psPublicNodeSubscriptionsGet + method = self.host.bridge.ps_public_node_subscriptions_get else: - method = self.host.bridge.psNodeSubscriptionsGet + method = self.host.bridge.ps_node_subscriptions_get try: subscriptions = await method( self.args.service, @@ -575,7 +575,7 @@ async def start(self): try: - self.host.bridge.psNodeSubscriptionsSet( + self.host.bridge.ps_node_subscriptions_set( self.args.service, self.args.node, self.args.subscriptions, @@ -618,7 +618,7 @@ async def start(self): try: - await self.host.bridge.psSchemaSet( + await self.host.bridge.ps_schema_set( self.args.service, self.args.node, self.args.schema, @@ -653,7 +653,7 @@ async def publish(self, schema): try: - await self.host.bridge.psSchemaSet( + await self.host.bridge.ps_schema_set( self.args.service, self.args.node, schema, @@ -666,7 +666,7 @@ self.disp(_("schema has been set"), 1) self.host.quit() - async def psSchemaGetCb(self, schema): + async def ps_schema_get_cb(self, schema): try: from lxml import etree except ImportError: @@ -676,7 +676,7 @@ error=True, ) self.host.quit(1) - content_file_obj, content_file_path = self.getTmpFile() + content_file_obj, content_file_path = self.get_tmp_file() schema = schema.strip() if schema: parser = etree.XMLParser(remove_blank_text=True) @@ -685,13 +685,13 @@ etree.tostring(schema_elt, encoding="utf-8", pretty_print=True) ) content_file_obj.seek(0) - await self.runEditor( + await self.run_editor( "pubsub_schema_editor_args", content_file_path, content_file_obj ) async def start(self): try: - schema = await self.host.bridge.psSchemaGet( + schema = await self.host.bridge.ps_schema_get( self.args.service, self.args.node, self.profile, @@ -703,7 +703,7 @@ self.disp(f"can't edit schema: {e}", error=True) self.host.quit(C.EXIT_BRIDGE_ERRBACK) - await self.psSchemaGetCb(schema) + await self.ps_schema_get_cb(schema) class NodeSchemaGet(base.CommandBase): @@ -724,7 +724,7 @@ async def start(self): try: - schema = await self.host.bridge.psSchemaGet( + schema = await self.host.bridge.ps_schema_get( self.args.service, self.args.node, self.profile, @@ -794,13 +794,13 @@ async def start(self): try: ps_result = data_format.deserialise( - await self.host.bridge.psCacheGet( + await self.host.bridge.ps_cache_get( self.args.service, self.args.node, self.args.max, self.args.items, self.args.sub_id, - self.getPubsubExtra(), + self.get_pubsub_extra(), self.profile, ) ) @@ -839,7 +839,7 @@ async def start(self): try: - await self.host.bridge.psCacheSync( + await self.host.bridge.ps_cache_sync( self.args.service, self.args.node, self.profile, @@ -910,7 +910,7 @@ async def start(self): if not self.args.force: - await self.host.confirmOrQuit( + await self.host.confirm_or_quit( _( "Are you sure to purge items from cache? You'll have to bypass cache " "or resynchronise nodes to access deleted items again." @@ -926,7 +926,7 @@ if value is not None: purge_data[key] = value try: - await self.host.bridge.psCachePurge( + await self.host.bridge.ps_cache_purge( data_format.serialise( purge_data ) @@ -956,7 +956,7 @@ async def start(self): if not self.args.force: - await self.host.confirmOrQuit( + await self.host.confirm_or_quit( _( "Are you sure to reset cache? All nodes and items will be removed " "from it, then it will be progressively refilled as if it were new. " @@ -965,7 +965,7 @@ _("Pubsub cache reset has been cancelled.") ) try: - await self.host.bridge.psCacheReset() + await self.host.bridge.ps_cache_reset() except Exception as e: self.disp(f"Internal error: {e}", error=True) self.host.quit(C.EXIT_INTERNAL_ERROR) @@ -1147,7 +1147,7 @@ self.args.keys.append("item_payload") try: found_items = data_format.deserialise( - await self.host.bridge.psCacheSearch( + await self.host.bridge.ps_cache_search( data_format.serialise(query) ), type_check=list, @@ -1249,8 +1249,8 @@ ) async def start(self): - element, etree = xml_tools.etreeParse(self, sys.stdin) - element = xml_tools.getPayload(self, element) + element, etree = xml_tools.etree_parse(self, sys.stdin) + element = xml_tools.get_payload(self, element) payload = etree.tostring(element, encoding="unicode") extra = {} if self.args.encrypt: @@ -1264,7 +1264,7 @@ extra["publish_options"] = publish_options try: - published_id = await self.host.bridge.psItemSend( + published_id = await self.host.bridge.ps_item_send( self.args.service, self.args.node, payload, @@ -1318,13 +1318,13 @@ extra["decrypt"] = False try: ps_result = data_format.deserialise( - await self.host.bridge.psItemsGet( + await self.host.bridge.ps_items_get( self.args.service, self.args.node, self.args.max, self.args.items, self.args.sub_id, - self.getPubsubExtra(extra), + self.get_pubsub_extra(extra), self.profile, ) ) @@ -1373,9 +1373,9 @@ message = _("Are you sure to delete item {item_id} ?").format( item_id=self.args.item ) - await self.host.confirmOrQuit(message, _("item deletion cancelled")) + await self.host.confirm_or_quit(message, _("item deletion cancelled")) try: - await self.host.bridge.psItemRetract( + await self.host.bridge.ps_item_retract( self.args.service, self.args.node, self.args.item, @@ -1432,7 +1432,7 @@ extra["encrypted_for"] = {"targets": self.args.encrypt_for} if self.args.sign: extra["signed"] = True - published_id = await self.host.bridge.psItemSend( + published_id = await self.host.bridge.ps_item_send( self.pubsub_service, self.pubsub_node, content, @@ -1445,7 +1445,7 @@ else: self.disp("Item published") - async def getItemData(self, service, node, item): + async def get_item_data(self, service, node, item): try: from lxml import etree except ImportError: @@ -1457,7 +1457,7 @@ self.host.quit(1) items = [item] if item else [] ps_result = data_format.deserialise( - await self.host.bridge.psItemsGet( + await self.host.bridge.ps_items_get( service, node, 1, items, "", data_format.serialise({}), self.profile ) ) @@ -1479,8 +1479,8 @@ self.pubsub_item, content_file_path, content_file_obj, - ) = await self.getItemPath() - await self.runEditor("pubsub_editor_args", content_file_path, content_file_obj) + ) = await self.get_item_path() + await self.run_editor("pubsub_editor_args", content_file_path, content_file_obj) self.host.quit() @@ -1500,7 +1500,7 @@ async def start(self): try: - await self.host.bridge.psItemRename( + await self.host.bridge.ps_item_rename( self.args.service, self.args.node, self.args.item, @@ -1537,7 +1537,7 @@ async def start(self): options = {} if self.args.public: - namespaces = await self.host.bridge.namespacesGet() + namespaces = await self.host.bridge.namespaces_get() try: ns_pps = namespaces["pps"] except KeyError: @@ -1549,7 +1549,7 @@ else: options[f"{{{ns_pps}}}public"] = True try: - sub_id = await self.host.bridge.psSubscribe( + sub_id = await self.host.bridge.ps_subscribe( self.args.service, self.args.node, data_format.serialise(options), @@ -1584,7 +1584,7 @@ async def start(self): try: - await self.host.bridge.psUnsubscribe( + await self.host.bridge.ps_unsubscribe( self.args.service, self.args.node, self.profile, @@ -1617,9 +1617,9 @@ async def start(self): if self.args.public: - method = self.host.bridge.psPublicSubscriptionsGet + method = self.host.bridge.ps_public_subscriptions_get else: - method = self.host.bridge.psSubscriptionsGet + method = self.host.bridge.ps_subscriptions_get try: subscriptions = data_format.deserialise( await method( @@ -1653,7 +1653,7 @@ async def start(self): try: - affiliations = await self.host.bridge.psAffiliationsGet( + affiliations = await self.host.bridge.ps_affiliations_get( self.args.service, self.args.node, self.profile, @@ -1692,14 +1692,14 @@ async def start(self): service = self.args.service or await self.host.get_profile_jid() if self.args.item: - anchor = uri.buildXMPPUri( + anchor = uri.build_xmpp_uri( "pubsub", path=service, node=self.args.node, item=self.args.item ) else: - anchor = uri.buildXMPPUri("pubsub", path=service, node=self.args.node) + anchor = uri.build_xmpp_uri("pubsub", path=service, node=self.args.node) try: - await self.host.bridge.referenceSend( + await self.host.bridge.reference_send( self.args.recipient, anchor, self.args.type, @@ -1899,17 +1899,17 @@ ) self.parser.add_argument("command", nargs=argparse.REMAINDER) - async def getItems(self, depth, service, node, items): + async def get_items(self, depth, service, node, items): self.to_get += 1 try: ps_result = data_format.deserialise( - await self.host.bridge.psItemsGet( + await self.host.bridge.ps_items_get( service, node, self.args.node_max, items, "", - self.getPubsubExtra(), + self.get_pubsub_extra(), self.profile, ) ) @@ -1922,7 +1922,7 @@ else: await self.search(ps_result, depth) - def _checkPubsubURL(self, match, found_nodes): + def _check_pubsub_url(self, match, found_nodes): """check that the matched URL is an xmpp: one @param found_nodes(list[unicode]): found_nodes @@ -1931,7 +1931,7 @@ url = match.group(0) if url.startswith("xmpp"): try: - url_data = uri.parseXMPPUri(url) + url_data = uri.parse_xmpp_uri(url) except ValueError: return if url_data["type"] == "pubsub": @@ -1940,13 +1940,13 @@ found_node["item"] = url_data["item"] found_nodes.append(found_node) - async def getSubNodes(self, item, depth): - """look for pubsub URIs in item, and getItems on the linked nodes""" + async def get_sub_nodes(self, item, depth): + """look for pubsub URIs in item, and get_items on the linked nodes""" found_nodes = [] - checkURI = partial(self._checkPubsubURL, found_nodes=found_nodes) + checkURI = partial(self._check_pubsub_url, found_nodes=found_nodes) strings.RE_URL.sub(checkURI, item) for data in found_nodes: - await self.getItems( + await self.get_items( depth + 1, data["service"], data["node"], @@ -2061,7 +2061,7 @@ return True, item - async def doItemAction(self, item, metadata): + async def do_item_action(self, item, metadata): """called when item has been kepts and the action need to be done @param item(unicode): accepted item @@ -2114,23 +2114,23 @@ ) async def search(self, ps_result, depth): - """callback of getItems + """callback of get_items this method filters items, get sub nodes if needed, do the requested action, and exit the command when everything is done - @param items_data(tuple): result of getItems + @param items_data(tuple): result of get_items @param depth(int): current depth level 0 for first node, 1 for first children, and so on """ for item in ps_result["items"]: if depth < self.args.max_depth: - await self.getSubNodes(item, depth) + await self.get_sub_nodes(item, depth) keep, item = self.filter(item) if not keep: continue - await self.doItemAction(item, ps_result) + await self.do_item_action(item, ps_result) - # we check if we got all getItems results + # we check if we got all get_items results self.to_get -= 1 if self.to_get == 0: # yes, we can quit @@ -2160,7 +2160,7 @@ self.args.namespace = dict( self.args.namespace + [("pubsub", "http://jabber.org/protocol/pubsub")] ) - await self.getItems(0, self.args.service, self.args.node, self.args.items) + await self.get_items(0, self.args.service, self.args.node, self.args.items) class Transform(base.CommandBase): @@ -2208,7 +2208,7 @@ ), ) - async def psItemsSendCb(self, item_ids, metadata): + async def ps_items_send_cb(self, item_ids, metadata): if item_ids: self.disp( _("items published with ids {item_ids}").format( @@ -2218,15 +2218,15 @@ else: self.disp(_("items published")) if self.args.all: - return await self.handleNextPage(metadata) + return await self.handle_next_page(metadata) else: self.host.quit() - async def handleNextPage(self, metadata): + async def handle_next_page(self, metadata): """Retrieve new page through RSM or quit if we're in the last page use to handle --all option - @param metadata(dict): metadata as returned by psItemsGet + @param metadata(dict): metadata as returned by ps_items_get """ try: last = metadata["rsm"]["last"] @@ -2255,11 +2255,11 @@ ) ) - extra = self.getPubsubExtra() + extra = self.get_pubsub_extra() extra["rsm_after"] = last try: ps_result = await data_format.deserialise( - self.host.bridge.psItemsGet( + self.host.bridge.ps_items_get( self.args.service, self.args.node, self.args.rsm_max, @@ -2273,9 +2273,9 @@ self.disp(f"can't retrieve items: {e}", error=True) self.host.quit(C.EXIT_BRIDGE_ERRBACK) else: - await self.psItemsGetCb(ps_result) + await self.ps_items_get_cb(ps_result) - async def psItemsGetCb(self, ps_result): + async def ps_items_get_cb(self, ps_result): encoding = "utf-8" new_items = [] @@ -2283,7 +2283,7 @@ if self.check_duplicates: # this is used when we are not ordering by creation # to avoid infinite loop - item_elt, __ = xml_tools.etreeParse(self, item) + item_elt, __ = xml_tools.etree_parse(self, item) item_id = item_elt.get("id") if item_id in self.items_ids: self.disp( @@ -2322,12 +2322,12 @@ self.disp(cmd_std_err, error=True) cmd_std_out = cmd_std_out.decode(encoding).strip() if cmd_std_out == "DELETE": - item_elt, __ = xml_tools.etreeParse(self, item) + item_elt, __ = xml_tools.etree_parse(self, item) item_id = item_elt.get("id") self.disp(_("Deleting item {item_id}").format(item_id=item_id)) if self.args.apply: try: - await self.host.bridge.psItemRetract( + await self.host.bridge.ps_item_retract( self.args.service, self.args.node, item_id, @@ -2339,11 +2339,11 @@ self.host.quit(C.EXIT_BRIDGE_ERRBACK) continue elif cmd_std_out == "SKIP": - item_elt, __ = xml_tools.etreeParse(self, item) + item_elt, __ = xml_tools.etree_parse(self, item) item_id = item_elt.get("id") self.disp(_("Skipping item {item_id}").format(item_id=item_id)) continue - element, etree = xml_tools.etreeParse(self, cmd_std_out) + element, etree = xml_tools.etree_parse(self, cmd_std_out) # at this point command has been run and we have a etree.Element object if element.tag not in ("item", "{http://jabber.org/protocol/pubsub}item"): @@ -2367,13 +2367,13 @@ if not self.args.apply: # on dry run we have nothing to wait for, we can quit if self.args.all: - return await self.handleNextPage(ps_result) + return await self.handle_next_page(ps_result) self.host.quit() else: if self.args.admin: - bridge_method = self.host.bridge.psAdminItemsSend + bridge_method = self.host.bridge.ps_admin_items_send else: - bridge_method = self.host.bridge.psItemsSend + bridge_method = self.host.bridge.ps_items_send try: ps_items_send_result = await bridge_method( @@ -2387,7 +2387,7 @@ self.disp(f"can't send item: {e}", error=True) self.host.quit(C.EXIT_BRIDGE_ERRBACK) else: - await self.psItemsSendCb(ps_items_send_result, metadata=ps_result) + await self.ps_items_send_cb(ps_items_send_result, metadata=ps_result) async def start(self): if self.args.all and self.args.order_by != C.ORDER_BY_CREATION: @@ -2409,13 +2409,13 @@ try: ps_result = data_format.deserialise( - await self.host.bridge.psItemsGet( + await self.host.bridge.ps_items_get( self.args.service, self.args.node, self.args.max, self.args.items, "", - self.getPubsubExtra(), + self.get_pubsub_extra(), self.profile, ) ) @@ -2423,7 +2423,7 @@ self.disp(f"can't retrieve items: {e}", error=True) self.host.quit(C.EXIT_BRIDGE_ERRBACK) else: - await self.psItemsGetCb(ps_result) + await self.ps_items_get_cb(ps_result) class Uri(base.CommandBase): @@ -2457,13 +2457,13 @@ key = "path" if value: uri_args[key] = value - self.disp(uri.buildXMPPUri("pubsub", **uri_args)) + self.disp(uri.build_xmpp_uri("pubsub", **uri_args)) self.host.quit() async def start(self): if not self.args.service: try: - jid_ = await self.host.bridge.asyncGetParamA( + jid_ = await self.host.bridge.param_get_a_async( "JabberID", "Connection", profile_key=self.args.profile ) except Exception as e: @@ -2500,7 +2500,7 @@ async def start(self): try: - attached_data, __ = await self.host.bridge.psAttachmentsGet( + attached_data, __ = await self.host.bridge.ps_attachments_get( self.args.service, self.args.node, self.args.item, @@ -2587,7 +2587,7 @@ self.parser.error(_("At leat one attachment must be specified.")) try: - await self.host.bridge.psAttachmentsSet( + await self.host.bridge.ps_attachments_set( data_format.serialise(attachments_data), self.profile, ) @@ -2635,7 +2635,7 @@ } } try: - await self.host.bridge.psAttachmentsSet( + await self.host.bridge.ps_attachments_set( data_format.serialise(attachments_data), self.profile, ) @@ -2667,7 +2667,7 @@ async def start(self): try: - ret_s = await self.host.bridge.psSignatureCheck( + ret_s = await self.host.bridge.ps_signature_check( self.args.service, self.args.node, self.args.item, @@ -2718,7 +2718,7 @@ async def start(self): try: - await self.host.bridge.psSecretShare( + await self.host.bridge.ps_secret_share( self.args.recipient, self.args.service, self.args.node, @@ -2757,7 +2757,7 @@ async def start(self): try: - await self.host.bridge.psSecretRevoke( + await self.host.bridge.ps_secret_revoke( self.args.service, self.args.node, self.args.secret_id, @@ -2793,7 +2793,7 @@ async def start(self): try: - await self.host.bridge.psSecretRotate( + await self.host.bridge.ps_secret_rotate( self.args.service, self.args.node, self.args.recipients, @@ -2824,7 +2824,7 @@ async def start(self): try: - secrets = data_format.deserialise(await self.host.bridge.psSecretsList( + secrets = data_format.deserialise(await self.host.bridge.ps_secrets_list( self.args.service, self.args.node, self.profile, @@ -2885,7 +2885,7 @@ ) @staticmethod - def checkArgs(self): + def check_args(self): if self.args.type == "python_file": self.args.hook_arg = os.path.abspath(self.args.hook_arg) if not os.path.isfile(self.args.hook_arg): @@ -2894,9 +2894,9 @@ ) async def start(self): - self.checkArgs(self) + self.check_args(self) try: - await self.host.bridge.psHookAdd( + await self.host.bridge.ps_hook_add( self.args.service, self.args.node, self.args.type, @@ -2941,9 +2941,9 @@ ) async def start(self): - HookCreate.checkArgs(self) + HookCreate.check_args(self) try: - nb_deleted = await self.host.bridge.psHookRemove( + nb_deleted = await self.host.bridge.ps_hook_remove( self.args.service, self.args.node, self.args.type, @@ -2975,7 +2975,7 @@ async def start(self): try: - data = await self.host.bridge.psHookList( + data = await self.host.bridge.ps_hook_list( self.profile, ) except Exception as e: