def ShowDialog(self, selectedText, template, template_path): self._recentSnippetPath = template_path dirname = os.path.dirname(template_path) self._selectedText = selectedText self._parser = SnippetParser(template, dirname, self._application) variables_list = self._parser.getVariables() # Get non builtin variables variables = sorted([var for var in variables_list if not var.startswith('__')]) self.dialog.hideVarPanel() self.dialog.setSnippetText(template) [*map(lambda var: self.dialog.addStringVariable(var), variables)] shortTemplateName = self._getShortTemplateName(template_path) self.dialog.templateFileName = shortTemplateName self.dialog.wikiCommandChecked = False # Show dialog if user must enter variable's values self._updateResult() if (self._application.selectedPage is not None and self._application.selectedPage.getTypeString() == u'wiki'): self.dialog.setWikiCommandSetVisible(True) else: self.dialog.setWikiCommandSetVisible(False) self.dialog.setFocusToFirstVariable() self.dialog.Show()
def test_unicode_02(self): from snippets.snippetparser import SnippetParser template = 'Переменная = {{переменная}}' right_result = 'Переменная = ' selectedText = '' page = self.testPage vars = {} parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_unicode_01(self): from snippets.snippetparser import SnippetParser page = self.testPage template = 'Переменная = {{переменная}}' selectedText = '' vars = {'переменная': 'Проверка 123'} right_result = 'Переменная = Проверка 123' parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_01(self): from snippets.snippetparser import SnippetParser page = self.testPage template = u'{{__title}}' selectedText = u'' vars = {} right_result = page.title parser = SnippetParser(template, self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_pageid(self): from snippets.snippetparser import SnippetParser page = self.testPage template = '{{__pageid}}' selectedText = '' vars = {} right_result = self.application.pageUidDepot.createUid(page) parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_type(self): from snippets.snippetparser import SnippetParser page = self.testPage template = '{{__type}}' selectedText = '' vars = {} right_result = 'wiki' parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_06(self): from snippets.snippetparser import SnippetParser page = self.testPage template = u'{{__pageid}}' selectedText = u'' vars = {} right_result = self._application.pageUidDepot.createUid(page) parser = SnippetParser(template, self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_folder(self): from snippets.snippetparser import SnippetParser page = self.testPage template = u'{{__folder}}' selectedText = u'' vars = {} right_result = page.path parser = SnippetParser(template, u'.', self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_tags_02(self): from snippets.snippetparser import SnippetParser page = self.testPage page.tags = ['проверка', 'test', 'тест'] template = '{% for tag in __tags %}{{tag}}---{% endfor %}' selectedText = '' vars = {} right_result = 'test---проверка---тест---' parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_tags_03_empty(self): from snippets.snippetparser import SnippetParser page = self.testPage page.tags = [] template = u'{{__tags}}' selectedText = u'' vars = {} right_result = u'' parser = SnippetParser(template, u'.', self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_tags_02(self): from snippets.snippetparser import SnippetParser page = self.testPage page.tags = [u'проверка', u'test', u'тест'] template = u'{% for tag in __tags %}{{tag}}---{% endfor %}' selectedText = u'' vars = {} right_result = u'test---проверка---тест---' parser = SnippetParser(template, u'.', self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_tags_01(self): from snippets.snippetparser import SnippetParser page = self.testPage page.tags = ['проверка', 'test', 'тест'] template = '{{__tags}}' selectedText = '' vars = {} right_result = 'test, проверка, тест' parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_04(self): from snippets.snippetparser import SnippetParser page = self.testPage template = u'{{__attach}}' selectedText = u'' vars = {} right_result = Attachment(page).getAttachPath(False) parser = SnippetParser(template, self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result) self.assertTrue(os.path.exists(right_result))
def test_global_var_attach(self): from snippets.snippetparser import SnippetParser page = self.testPage template = '{{__attach}}' selectedText = '' vars = {} right_result = Attachment(page).getAttachPath(False) parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result) self.assertTrue(os.path.exists(right_result))
def _parseSnippet(self, snippet_text, current_dir, params_dict, selected_text=u''): snippet_parser = SnippetParser(snippet_text, current_dir, self._application) try: result = snippet_parser.process(selected_text, self.parser.page, **params_dict) except SnippetException as e: text = _(u'Snippet error: \n') + e.message return self._format_error(text) return self.parser.parseWikiMarkup(result)
def test_global_var_crdate(self): from snippets.snippetparser import SnippetParser date = datetime(2016, 12, 9, 14, 0) page = self.testPage page.creationdatetime = date template = u'{{__crdate}}' selectedText = u'' vars = {} right_result = unicode(date) parser = SnippetParser(template, u'.', self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_crdate(self): from snippets.snippetparser import SnippetParser date = datetime(2016, 12, 9, 14, 0) page = self.testPage page.creationdatetime = date template = '{{__crdate}}' selectedText = '' vars = {} right_result = str(date) parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_eddate(self): from snippets.snippetparser import SnippetParser date = datetime(2016, 12, 9, 14, 23) page = self.testPage page.datetime = date template = u'{{__eddate}}' selectedText = u'' vars = {} right_result = unicode(date) parser = SnippetParser(template, u'.', self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_vars_01(self): from snippets.snippetparser import SnippetParser template = u'{{varname}}' selectedText = u'' vars = {u'varname': u'Проверка 123'} right_result = u'Проверка 123' right_variables = {u'varname'} page = self.testPage parser = SnippetParser(template, self._application) result = parser.process(selectedText, page, **vars) variables = parser.getVariables() self.assertEqual(result, right_result) self.assertEqual(variables, right_variables)
def test_empty(self): from snippets.snippetparser import SnippetParser template = u'' selectedText = u'' vars = {} right_result = u'' right_variables = set() page = self.testPage parser = SnippetParser(template, self._application) result = parser.process(selectedText, page, **vars) variables = parser.getVariables() self.assertEqual(result, right_result) self.assertEqual(variables, right_variables)
def ShowDialog(self, selectedText, template): if self._application.selectedPage is None: return if self._dialog is None: self._dialog = VariablesDialog(self._application.mainWindow, self._application) self._dialog.ok_button.Bind(wx.EVT_BUTTON, handler=self._onOk) self._dialog.Bind(EVT_VAR_CHANGE, handler=self._onVarChange) self._selectedText = selectedText self._parser = SnippetParser(template, self._application) # Get non builtin variables variables = sorted([var for var in self._parser.getVariables() if not var.startswith('__')]) self._dialog.setSnippetText(template) map(lambda var: self._dialog.addStringVariable(var), variables) # Show dialog if user must enter variable's values if variables: self._updateResult() self._dialog.Show() else: self._finishDialog()
def test_error_02(self): from snippets.snippetparser import SnippetParser, SnippetException template = u'Переменная = {{переменная}}' parser = SnippetParser(template, u'.', self._application) self.assertRaises(SnippetException, parser.getVariables)
def test_vars_01(self): from snippets.snippetparser import SnippetParser template = '{{varname}}' selectedText = '' vars = {'varname': 'Проверка 123'} right_result = 'Проверка 123' right_variables = {'varname'} page = self.testPage parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) variables = parser.getVariables() self.assertEqual(result, right_result) self.assertEqual(variables, right_variables)
def test_empty(self): from snippets.snippetparser import SnippetParser template = '' selectedText = '' vars = {} right_result = '' right_variables = set() page = self.testPage parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) variables = parser.getVariables() self.assertEqual(result, right_result) self.assertEqual(variables, right_variables)
def _parseSnippet(self, snippet_text, current_dir, params_dict, selected_text=u''): snippet_parser = SnippetParser(snippet_text, current_dir, self._application) try: result = snippet_parser.process(selected_text, self.parser.page, **params_dict) except SnippetException as e: text = _(u'Snippet error: \n') + str(e) return self._format_error(text) return self.parser.parseWikiMarkup(result)
def test_global_var_childlist_01(self): from snippets.snippetparser import SnippetParser page = self.testPage WikiPageFactory().create(page, "Страница 1", []) WikiPageFactory().create(page, "Страница 2", []) WikiPageFactory().create(page, "Страница 3", []) template = '{{__childlist}}' selectedText = '' vars = {} right_result = 'Страница 1, Страница 2, Страница 3' parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_childlist_01(self): from snippets.snippetparser import SnippetParser page = self.testPage WikiPageFactory().create(page, u"Страница 1", []) WikiPageFactory().create(page, u"Страница 2", []) WikiPageFactory().create(page, u"Страница 3", []) template = u'{{__childlist}}' selectedText = u'' vars = {} right_result = u'Страница 1, Страница 2, Страница 3' parser = SnippetParser(template, u'.', self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_include_01(self): from snippets.snippetparser import SnippetParser template = '{{varname}} {% include "included" %}' selectedText = '' vars = { 'varname': 'Проверка 123', 'var_inc': 'Абырвалг', } right_result = 'Проверка 123 Включенный шаблон Абырвалг' right_variables = {'varname', 'var_inc'} page = self.testPage parser = SnippetParser(template, 'testdata/snippets', self.application) result = parser.process(selectedText, page, **vars) variables = parser.getVariables() self.assertEqual(result, right_result) self.assertEqual(variables, right_variables)
def test_vars_02(self): from snippets.snippetparser import SnippetParser template = u'{{varname}}' selectedText = u'' vars = { u'varname': u'Проверка 123', u'varname_2': u'Абырвалг', } right_result = u'Проверка 123' right_variables = {u'varname'} page = self.testPage parser = SnippetParser(template, u'.', self._application) result = parser.process(selectedText, page, **vars) variables = parser.getVariables() self.assertEqual(result, right_result) self.assertEqual(variables, right_variables)
def _onSnippetEditIdle(self, event): if not self._snippetChanged: return path = self._getSelectedItemData().path if os.path.isdir(path): return snippet_text = self._dialog.currentSnippet parser = SnippetParser(snippet_text, os.path.dirname(path), self._application) try: parser.getVariables() except SnippetException as e: self._dialog.setError(e.message) else: self._dialog.setError(_(u'No snippet errors')) self._snippetChanged = False
def test_error_01(self): from snippets.snippetparser import SnippetParser, SnippetException template = u'Переменная = {{переменная}}' selectedText = u'' vars = {u'переменная': u'Проверка 123'} page = self.testPage parser = SnippetParser(template, u'.', self._application) self.assertRaises(SnippetException, parser.process, selectedText, page, **vars)
def test_global_var_attachilist(self): from snippets.snippetparser import SnippetParser fnames = ['ccc.png', 'aaa.tmp', 'zzz.doc'] page = self.testPage attachdir = Attachment(page).getAttachPath(True) for fname in fnames: fullpath = os.path.join(attachdir, fname) with open(fullpath, 'w'): pass page = self.testPage template = '{{__attachlist}}' selectedText = '' vars = {} right_result = 'aaa.tmp, ccc.png, zzz.doc' parser = SnippetParser(template, '.', self.application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_include_01(self): from snippets.snippetparser import SnippetParser template = u'{{varname}} {% include "included" %}' selectedText = u'' vars = { u'varname': u'Проверка 123', u'var_inc': u'Абырвалг', } right_result = u'Проверка 123 Включенный шаблон Абырвалг' right_variables = {u'varname', u'var_inc'} page = self.testPage parser = SnippetParser(template, u'../test/snippets', self._application) result = parser.process(selectedText, page, **vars) variables = parser.getVariables() self.assertEqual(result, right_result) self.assertEqual(variables, right_variables)
def test_global_var_attachilist(self): from snippets.snippetparser import SnippetParser fnames = [u'ccc.png', u'aaa.tmp', u'zzz.doc'] page = self.testPage attachdir = Attachment(page).getAttachPath(True) for fname in fnames: fullpath = os.path.join(attachdir, fname) with open(fullpath, 'w'): pass page = self.testPage template = u'{{__attachlist}}' selectedText = u'' vars = {} right_result = u'aaa.tmp, ccc.png, zzz.doc' parser = SnippetParser(template, u'.', self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
def test_global_var_childlist_02(self): from snippets.snippetparser import SnippetParser page = self.testPage subpage1 = WikiPageFactory().create(page, u"Страница 1", []) subpage2 = WikiPageFactory().create(page, u"Страница 2", []) subpage3 = WikiPageFactory().create(page, u"Страница 3", []) subpage2.order = 1 subpage3.order = 4 subpage1.order = 10 template = u'{{__childlist}}' selectedText = u'' vars = {} right_result = u'Страница 2, Страница 3, Страница 1' parser = SnippetParser(template, u'.', self._application) result = parser.process(selectedText, page, **vars) self.assertEqual(result, right_result)
class VariablesDialogController(object): ''' Controller to manage VariablesDialog. ''' def __init__(self, application): self._application = application self.onFinishDialog = Event() self._dialog = None self._parser = None self._selectedText = u'' def ShowDialog(self, selectedText, template): if self._application.selectedPage is None: return if self._dialog is None: self._dialog = VariablesDialog(self._application.mainWindow, self._application) self._dialog.ok_button.Bind(wx.EVT_BUTTON, handler=self._onOk) self._dialog.Bind(EVT_VAR_CHANGE, handler=self._onVarChange) self._selectedText = selectedText self._parser = SnippetParser(template, self._application) # Get non builtin variables variables = sorted([var for var in self._parser.getVariables() if not var.startswith('__')]) self._dialog.setSnippetText(template) map(lambda var: self._dialog.addStringVariable(var), variables) # Show dialog if user must enter variable's values if variables: self._updateResult() self._dialog.Show() else: self._finishDialog() def destroy(self): self.onFinishDialog.clear() if self._dialog is not None: self._dialog.ok_button.Unbind(wx.EVT_BUTTON, handler=self._onOk) self._dialog.Unbind(EVT_VAR_CHANGE, handle=self._onVarChange) self._dialog.Close() self._dialog = None def _finishDialog(self): if self._application.selectedPage is not None: text = self._dialog.getResult() self.onFinishDialog(FinishDialogParams(text)) self._dialog.Close() self._dialog = None def _onOk(self, event): self._finishDialog() def _onVarChange(self, event): self._updateResult() def _updateResult(self): variables = self._dialog.getVarDict() text = self._parser.process(self._selectedText, self._application.selectedPage, **variables) self._dialog.setResult(text)
class VariablesDialogController(object): ''' Controller to manage VariablesDialog. ''' def __init__(self, application): self._application = application self.onFinishDialogEvent = Event() self._parser = None self._selectedText = u'' self._config = SnippetsConfig(self._application.config) self._recentSnippetPath = None self._dialog = VariablesDialog(self._application.mainWindow) self._dialog.ok_button.Bind(wx.EVT_BUTTON, handler=self._onOk) self._dialog.Bind(EVT_VAR_CHANGE, handler=self._onVarChange) self._dialog.SetClientSize((self._config.variablesDialogWidth, self._config.variablesDialogHeight)) @property def dialog(self): return self._dialog def ShowDialog(self, selectedText, template, template_path): self._recentSnippetPath = template_path dirname = os.path.dirname(template_path) self._selectedText = selectedText self._parser = SnippetParser(template, dirname, self._application) variables_list = self._parser.getVariables() # Get non builtin variables variables = sorted([var for var in variables_list if not var.startswith('__')]) self.dialog.hideVarPanel() self.dialog.setSnippetText(template) [*map(lambda var: self.dialog.addStringVariable(var), variables)] shortTemplateName = self._getShortTemplateName(template_path) self.dialog.templateFileName = shortTemplateName self.dialog.wikiCommandChecked = False # Show dialog if user must enter variable's values self._updateResult() if (self._application.selectedPage is not None and self._application.selectedPage.getTypeString() == u'wiki'): self.dialog.setWikiCommandSetVisible(True) else: self.dialog.setWikiCommandSetVisible(False) self.dialog.setFocusToFirstVariable() self.dialog.Show() def _getShortTemplateName(self, template_fname): ''' Convert full template path to short path ''' snippets_dir = getSnippetsDir() shortTemplateName = template_fname if shortTemplateName.startswith(snippets_dir): shortTemplateName = shortTemplateName[len(snippets_dir) + 1:] shortTemplateName = shortTemplateName.replace(u'\\', u'/') return shortTemplateName def destroy(self): self.onFinishDialogEvent.clear() self.dialog.ok_button.Unbind(wx.EVT_BUTTON, handler=self._onOk) self.dialog.Unbind(EVT_VAR_CHANGE, handler=self._onVarChange) self.dialog.Close() self.dialog.Destroy() def FinishDialog(self): try: w, h = self._dialog.GetClientSize() self._config.variablesDialogWidth = w self._config.variablesDialogHeight = h self._config.recentSnippet = self._recentSnippetPath except EnvironmentError: pass text = self.GetResult() self.onFinishDialogEvent(FinishDialogParams(text)) self.dialog.Close() def CloseDialog(self): self.dialog.Close() def GetResult(self): if not self.dialog.wikiCommandChecked: return self.dialog.getResult() else: return self._makeWikiCommand(self.dialog.getVarDict(), self.dialog.templateFileName) def _makeWikiCommand(self, vardict, template_name): vars_str = u'' for varname in sorted(vardict.keys()): value = vardict[varname] if u'"' not in value: vars_str += u' {name}="{value}"'.format(name=varname, value=vardict[varname]) else: vars_str += u" {name}='{value}'".format(name=varname, value=vardict[varname]) result = u'(:snip file="{template}"{vars}:)(:snipend:)'.format( template=template_name, vars=vars_str) return result def _onOk(self, event): self.FinishDialog() def _onVarChange(self, event): self._updateResult() def _updateResult(self): variables = self.dialog.getVarDict() text = self._parser.process(self._selectedText, self._application.selectedPage, **variables) self.dialog.setResult(text)