Mercurial > libervia-backend
comparison sat/plugins/plugin_misc_text_syntaxes.py @ 3620:f568f304c982
plugin text syntaxes: remove side effect on init:
When text syntaxes was initialised, `syntaxes` dict was filled, but it was a class
attribute. As a result, re-initialising it (which may happen for tests, and maybe in the
future dynamically), was not starting with an empty dict, but with an already-filled one,
resulting in conflicts.
This patch fixes it by moving `syntaxes` to an instance attribute.
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 02 Aug 2021 21:52:17 +0200 |
parents | be6d91572633 |
children | 09f5ac48ffe3 |
comparison
equal
deleted
inserted
replaced
3619:32181a45d54b | 3620:f568f304c982 |
---|---|
154 OPT_HIDDEN = "HIDDEN" | 154 OPT_HIDDEN = "HIDDEN" |
155 OPT_NO_THREAD = "NO_THREAD" | 155 OPT_NO_THREAD = "NO_THREAD" |
156 SYNTAX_XHTML = _SYNTAX_XHTML | 156 SYNTAX_XHTML = _SYNTAX_XHTML |
157 SYNTAX_MARKDOWN = "markdown" | 157 SYNTAX_MARKDOWN = "markdown" |
158 SYNTAX_TEXT = "text" | 158 SYNTAX_TEXT = "text" |
159 syntaxes = {} | |
160 # default_syntax must be lower case | 159 # default_syntax must be lower case |
161 default_syntax = SYNTAX_XHTML | 160 default_syntax = SYNTAX_XHTML |
162 | 161 |
163 params = """ | |
164 <params> | |
165 <individual> | |
166 <category name="%(category_name)s" label="%(category_label)s"> | |
167 <param name="%(name)s" label="%(label)s" type="list" security="0"> | |
168 %(options)s | |
169 </param> | |
170 </category> | |
171 </individual> | |
172 </params> | |
173 """ | |
174 | |
175 params_data = { | |
176 "category_name": CATEGORY, | |
177 "category_label": _(CATEGORY), | |
178 "name": NAME, | |
179 "label": _(NAME), | |
180 "syntaxes": syntaxes, | |
181 } | |
182 | 162 |
183 def __init__(self, host): | 163 def __init__(self, host): |
184 log.info(_("Text syntaxes plugin initialization")) | 164 log.info(_("Text syntaxes plugin initialization")) |
185 self.host = host | 165 self.host = host |
166 self.syntaxes = {} | |
167 | |
168 self.params = """ | |
169 <params> | |
170 <individual> | |
171 <category name="%(category_name)s" label="%(category_label)s"> | |
172 <param name="%(name)s" label="%(label)s" type="list" security="0"> | |
173 %(options)s | |
174 </param> | |
175 </category> | |
176 </individual> | |
177 </params> | |
178 """ | |
179 | |
180 self.params_data = { | |
181 "category_name": CATEGORY, | |
182 "category_label": _(CATEGORY), | |
183 "name": NAME, | |
184 "label": _(NAME), | |
185 "syntaxes": self.syntaxes, | |
186 } | |
187 | |
186 self.addSyntax( | 188 self.addSyntax( |
187 self.SYNTAX_XHTML, | 189 self.SYNTAX_XHTML, |
188 lambda xhtml: defer.succeed(xhtml), | 190 lambda xhtml: defer.succeed(xhtml), |
189 lambda xhtml: defer.succeed(xhtml), | 191 lambda xhtml: defer.succeed(xhtml), |
190 TextSyntaxes.OPT_NO_THREAD, | 192 TextSyntaxes.OPT_NO_THREAD, |
251 if xml_tools.cleanXHTML is None: | 253 if xml_tools.cleanXHTML is None: |
252 log.debug("Installing cleaning method") | 254 log.debug("Installing cleaning method") |
253 xml_tools.cleanXHTML = self.cleanXHTML | 255 xml_tools.cleanXHTML = self.cleanXHTML |
254 | 256 |
255 def _updateParamOptions(self): | 257 def _updateParamOptions(self): |
256 data_synt = TextSyntaxes.syntaxes | 258 data_synt = self.syntaxes |
257 default_synt = TextSyntaxes.default_syntax | 259 default_synt = TextSyntaxes.default_syntax |
258 syntaxes = [] | 260 syntaxes = [] |
259 | 261 |
260 for syntax in list(data_synt.keys()): | 262 for syntax in list(data_synt.keys()): |
261 flags = data_synt[syntax]["flags"] | 263 flags = data_synt[syntax]["flags"] |
267 | 269 |
268 for syntax in syntaxes: | 270 for syntax in syntaxes: |
269 selected = 'selected="true"' if syntax == default_synt else "" | 271 selected = 'selected="true"' if syntax == default_synt else "" |
270 options.append('<option value="%s" %s/>' % (syntax, selected)) | 272 options.append('<option value="%s" %s/>' % (syntax, selected)) |
271 | 273 |
272 TextSyntaxes.params_data["options"] = "\n".join(options) | 274 self.params_data["options"] = "\n".join(options) |
273 self.host.memory.updateParams(TextSyntaxes.params % TextSyntaxes.params_data) | 275 self.host.memory.updateParams(self.params % self.params_data) |
274 | 276 |
275 def getCurrentSyntax(self, profile): | 277 def getCurrentSyntax(self, profile): |
276 """ Return the selected syntax for the given profile | 278 """ Return the selected syntax for the given profile |
277 | 279 |
278 @param profile: %(doc_profile)s | 280 @param profile: %(doc_profile)s |
370 syntax_from = syntax_from.lower().strip() | 372 syntax_from = syntax_from.lower().strip() |
371 if syntax_to == _SYNTAX_CURRENT: | 373 if syntax_to == _SYNTAX_CURRENT: |
372 syntax_to = self.getCurrentSyntax(profile) | 374 syntax_to = self.getCurrentSyntax(profile) |
373 else: | 375 else: |
374 syntax_to = syntax_to.lower().strip() | 376 syntax_to = syntax_to.lower().strip() |
375 syntaxes = TextSyntaxes.syntaxes | 377 syntaxes = self.syntaxes |
376 if syntax_from not in syntaxes: | 378 if syntax_from not in syntaxes: |
377 raise exceptions.NotFound(syntax_from) | 379 raise exceptions.NotFound(syntax_from) |
378 if syntax_to not in syntaxes: | 380 if syntax_to not in syntaxes: |
379 raise exceptions.NotFound(syntax_to) | 381 raise exceptions.NotFound(syntax_to) |
380 d = None | 382 d = None |
415 "{} and {} are mutually exclusive".format( | 417 "{} and {} are mutually exclusive".format( |
416 TextSyntaxes.OPT_HIDDEN, TextSyntaxes.OPT_DEFAULT | 418 TextSyntaxes.OPT_HIDDEN, TextSyntaxes.OPT_DEFAULT |
417 ) | 419 ) |
418 ) | 420 ) |
419 | 421 |
420 syntaxes = TextSyntaxes.syntaxes | 422 syntaxes = self.syntaxes |
421 key = name.lower().strip() | 423 key = name.lower().strip() |
422 if key in syntaxes: | 424 if key in syntaxes: |
423 raise exceptions.ConflictError( | 425 raise exceptions.ConflictError( |
424 "This syntax key already exists: {}".format(key) | 426 "This syntax key already exists: {}".format(key) |
425 ) | 427 ) |