comparison sat/plugins/plugin_misc_merge_requests.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 a0666f17f300
children
comparison
equal deleted inserted replaced
4036:c4464d7ae97b 4037:524856bd7b19
67 67
68 def __init__(self, host): 68 def __init__(self, host):
69 log.info(_("Merge requests plugin initialization")) 69 log.info(_("Merge requests plugin initialization"))
70 self.host = host 70 self.host = host
71 self._s = self.host.plugins["XEP-0346"] 71 self._s = self.host.plugins["XEP-0346"]
72 self.namespace = self._s.getSubmittedNS(APP_NS_MERGE_REQUESTS) 72 self.namespace = self._s.get_submitted_ns(APP_NS_MERGE_REQUESTS)
73 host.registerNamespace('merge_requests', self.namespace) 73 host.register_namespace('merge_requests', self.namespace)
74 self._p = self.host.plugins["XEP-0060"] 74 self._p = self.host.plugins["XEP-0060"]
75 self._t = self.host.plugins["LISTS"] 75 self._t = self.host.plugins["LISTS"]
76 self._handlers = {} 76 self._handlers = {}
77 self._handlers_list = [] # handlers sorted by priority 77 self._handlers_list = [] # handlers sorted by priority
78 self._type_handlers = {} # data type => handler map 78 self._type_handlers = {} # data type => handler map
79 host.bridge.addMethod("mergeRequestsGet", ".plugin", 79 host.bridge.add_method("merge_requests_get", ".plugin",
80 in_sign='ssiassss', out_sign='s', 80 in_sign='ssiassss', out_sign='s',
81 method=self._get, 81 method=self._get,
82 async_=True 82 async_=True
83 ) 83 )
84 host.bridge.addMethod("mergeRequestSet", ".plugin", 84 host.bridge.add_method("merge_request_set", ".plugin",
85 in_sign='ssssa{sas}ssss', out_sign='s', 85 in_sign='ssssa{sas}ssss', out_sign='s',
86 method=self._set, 86 method=self._set,
87 async_=True) 87 async_=True)
88 host.bridge.addMethod("mergeRequestsSchemaGet", ".plugin", 88 host.bridge.add_method("merge_requests_schema_get", ".plugin",
89 in_sign='sss', out_sign='s', 89 in_sign='sss', out_sign='s',
90 method=lambda service, nodeIdentifier, profile_key: 90 method=lambda service, nodeIdentifier, profile_key:
91 self._s._getUISchema(service, 91 self._s._get_ui_schema(service,
92 nodeIdentifier, 92 nodeIdentifier,
93 default_node=self.namespace, 93 default_node=self.namespace,
94 profile_key=profile_key), 94 profile_key=profile_key),
95 async_=True) 95 async_=True)
96 host.bridge.addMethod("mergeRequestParseData", ".plugin", 96 host.bridge.add_method("merge_request_parse_data", ".plugin",
97 in_sign='ss', out_sign='aa{ss}', 97 in_sign='ss', out_sign='aa{ss}',
98 method=self._parseData, 98 method=self._parse_data,
99 async_=True) 99 async_=True)
100 host.bridge.addMethod("mergeRequestsImport", ".plugin", 100 host.bridge.add_method("merge_requests_import", ".plugin",
101 in_sign='ssssa{ss}s', out_sign='', 101 in_sign='ssssa{ss}s', out_sign='',
102 method=self._import, 102 method=self._import,
103 async_=True 103 async_=True
104 ) 104 )
105 105
139 continue 139 continue
140 self._type_handlers[data_type] = self._handlers[name] 140 self._type_handlers[data_type] = self._handlers[name]
141 141
142 def serialise(self, get_data): 142 def serialise(self, get_data):
143 tickets_xmlui, metadata, items_patches = get_data 143 tickets_xmlui, metadata, items_patches = get_data
144 tickets_xmlui_s, metadata = self._p.transItemsData((tickets_xmlui, metadata)) 144 tickets_xmlui_s, metadata = self._p.trans_items_data((tickets_xmlui, metadata))
145 return data_format.serialise({ 145 return data_format.serialise({
146 "items": tickets_xmlui_s, 146 "items": tickets_xmlui_s,
147 "metadata": metadata, 147 "metadata": metadata,
148 "items_patches": items_patches, 148 "items_patches": items_patches,
149 }) 149 })
150 150
151 def _get(self, service='', node='', max_items=10, item_ids=None, sub_id=None, 151 def _get(self, service='', node='', max_items=10, item_ids=None, sub_id=None,
152 extra="", profile_key=C.PROF_KEY_NONE): 152 extra="", profile_key=C.PROF_KEY_NONE):
153 extra = data_format.deserialise(extra) 153 extra = data_format.deserialise(extra)
154 client, service, node, max_items, extra, sub_id = self._s.prepareBridgeGet( 154 client, service, node, max_items, extra, sub_id = self._s.prepare_bridge_get(
155 service, node, max_items, sub_id, extra, profile_key) 155 service, node, max_items, sub_id, extra, profile_key)
156 d = self.get(client, service, node or None, max_items, item_ids, sub_id or None, 156 d = self.get(client, service, node or None, max_items, item_ids, sub_id or None,
157 extra.rsm_request, extra.extra) 157 extra.rsm_request, extra.extra)
158 d.addCallback(self.serialise) 158 d.addCallback(self.serialise)
159 return d 159 return d
176 if extra is None: 176 if extra is None:
177 extra = {} 177 extra = {}
178 # XXX: Q&D way to get list for labels when displaying them, but text when we 178 # XXX: Q&D way to get list for labels when displaying them, but text when we
179 # have to modify them 179 # have to modify them
180 if C.bool(extra.get('labels_as_list', C.BOOL_FALSE)): 180 if C.bool(extra.get('labels_as_list', C.BOOL_FALSE)):
181 filters = {'labels': self._s.textbox2ListFilter} 181 filters = {'labels': self._s.textbox_2_list_filter}
182 else: 182 else:
183 filters = {} 183 filters = {}
184 tickets_xmlui, metadata = yield defer.ensureDeferred( 184 tickets_xmlui, metadata = yield defer.ensureDeferred(
185 self._s.getDataFormItems( 185 self._s.get_data_form_items(
186 client, 186 client,
187 service, 187 service,
188 node, 188 node,
189 max_items=max_items, 189 max_items=max_items,
190 item_ids=item_ids, 190 item_ids=item_ids,
197 parsed_patches = [] 197 parsed_patches = []
198 if extra.get('parse', False): 198 if extra.get('parse', False):
199 for ticket in tickets_xmlui: 199 for ticket in tickets_xmlui:
200 request_type = ticket.named_widgets[FIELD_DATA_TYPE].value 200 request_type = ticket.named_widgets[FIELD_DATA_TYPE].value
201 request_data = ticket.named_widgets[FIELD_DATA].value 201 request_data = ticket.named_widgets[FIELD_DATA].value
202 parsed_data = yield self.parseData(request_type, request_data) 202 parsed_data = yield self.parse_data(request_type, request_data)
203 parsed_patches.append(parsed_data) 203 parsed_patches.append(parsed_data)
204 defer.returnValue((tickets_xmlui, metadata, parsed_patches)) 204 defer.returnValue((tickets_xmlui, metadata, parsed_patches))
205 205
206 def _set(self, service, node, repository, method, values, schema=None, item_id=None, 206 def _set(self, service, node, repository, method, values, schema=None, item_id=None,
207 extra="", profile_key=C.PROF_KEY_NONE): 207 extra="", profile_key=C.PROF_KEY_NONE):
208 client, service, node, schema, item_id, extra = self._s.prepareBridgeSet( 208 client, service, node, schema, item_id, extra = self._s.prepare_bridge_set(
209 service, node, schema, item_id, extra, profile_key) 209 service, node, schema, item_id, extra, profile_key)
210 d = defer.ensureDeferred( 210 d = defer.ensureDeferred(
211 self.set( 211 self.set(
212 client, service, node, repository, method, values, schema, 212 client, service, node, repository, method, values, schema,
213 item_id or None, extra, deserialise=True 213 item_id or None, extra, deserialise=True
288 288
289 item_id = await self._t.set(client, service, node, values, schema, item_id, extra, 289 item_id = await self._t.set(client, service, node, values, schema, item_id, extra,
290 deserialise, form_ns=APP_NS_MERGE_REQUESTS) 290 deserialise, form_ns=APP_NS_MERGE_REQUESTS)
291 return item_id 291 return item_id
292 292
293 def _parseData(self, data_type, data): 293 def _parse_data(self, data_type, data):
294 d = self.parseData(data_type, data) 294 d = self.parse_data(data_type, data)
295 d.addCallback(lambda parsed_patches: 295 d.addCallback(lambda parsed_patches:
296 {key: str(value) for key, value in parsed_patches.items()}) 296 {key: str(value) for key, value in parsed_patches.items()})
297 return d 297 return d
298 298
299 def parseData(self, data_type, data): 299 def parse_data(self, data_type, data):
300 """Parse a merge request data according to type 300 """Parse a merge request data according to type
301 301
302 @param data_type(unicode): type of the data to parse 302 @param data_type(unicode): type of the data to parse
303 @param data(unicode): data to parse 303 @param data(unicode): data to parse
304 @return(list[dict[unicode, unicode]]): parsed data 304 @return(list[dict[unicode, unicode]]): parsed data
312 .format(type=data_type)) 312 .format(type=data_type))
313 return defer.maybeDeferred(handler.handler.parse, data, data_type) 313 return defer.maybeDeferred(handler.handler.parse, data, data_type)
314 314
315 def _import(self, repository, item_id, service=None, node=None, extra=None, 315 def _import(self, repository, item_id, service=None, node=None, extra=None,
316 profile_key=C.PROF_KEY_NONE): 316 profile_key=C.PROF_KEY_NONE):
317 client = self.host.getClient(profile_key) 317 client = self.host.get_client(profile_key)
318 service = jid.JID(service) if service else None 318 service = jid.JID(service) if service else None
319 d = self.import_request(client, repository, item_id, service, node or None, 319 d = self.import_request(client, repository, item_id, service, node or None,
320 extra=extra or None) 320 extra=extra or None)
321 return d 321 return d
322 322
323 @defer.inlineCallbacks 323 @defer.inlineCallbacks
324 def import_request(self, client, repository, item, service=None, node=None, 324 def import_request(self, client, repository, item, service=None, node=None,
325 extra=None): 325 extra=None):
326 """Import a merge request in specified directory 326 """import a merge request in specified directory
327 327
328 @param repository(unicode): path to the repository where the code stands 328 @param repository(unicode): path to the repository where the code stands
329 """ 329 """
330 if not node: 330 if not node:
331 node = self.namespace 331 node = self.namespace
332 tickets_xmlui, metadata = yield defer.ensureDeferred( 332 tickets_xmlui, metadata = yield defer.ensureDeferred(
333 self._s.getDataFormItems( 333 self._s.get_data_form_items(
334 client, 334 client,
335 service, 335 service,
336 node, 336 node,
337 max_items=1, 337 max_items=1,
338 item_ids=[item], 338 item_ids=[item],