def testParse3(self): self.assertTrue(Version.parse("1.2.3 beta") == Version(1, 2, 3, status=StatusSet.BETA)) self.assertTrue(Version.parse(" 1.2.3 dev") == Version(1, 2, 3, status=StatusSet.DEV)) self.assertTrue(Version.parse("1.2.3 release ") == Version(1, 2, 3, status=StatusSet.RELEASE)) self.assertTrue(Version.parse("1.2.3") == Version(1, 2, 3, status=StatusSet.RELEASE))
def filterUpdatedApps(currentVersionsDict, latestAppInfoDict): """ Return dictionary with the AppInfo for updated apps only. currentVersionsDict - dictionary with apps versions. Key - plugin name or special id, value - version number string. latestAppInfoDict - dictionary with AppInfo instances. Key - plugin name or special id, value - instance of the AppInfo. """ updatedPlugins = {} for app_name, version_str in currentVersionsDict.items(): if app_name not in latestAppInfoDict: continue latestAppInfo = latestAppInfoDict[app_name] try: currentPluginVersion = Version.parse(version_str) except ValueError: continue latestVersion = latestAppInfo.currentVersion if (latestVersion is not None and latestVersion > currentPluginVersion): updatedPlugins[app_name] = latestAppInfo return updatedPlugins
def test_changelog_single_03(self): version_1 = VersionInfo(Version.parse(u'1.2.3 beta')) changelog = [version_1] appinfo = AppInfo(self._appname, self._author, changelog) generator = SiteChangelogGenerator(appinfo) changelog = generator.make() right_result = u'''!!!! 1.2.3 beta''' self.assertEqual(changelog, right_result)
def test_changelog_versions_02(self): changes_1 = [u'Первая версия.'] version_1 = VersionInfo(Version(1, 0), changes=changes_1) changes_2 = [u'Исправление ошибок.', u'Добавлена новая возможность.'] version_2 = VersionInfo(Version(1, 1), changes=changes_2) changelog = [version_2, version_1] appinfo = AppInfo(self._appname, self._author, changelog) generator = SiteChangelogGenerator(appinfo) changelog = generator.make() right_result = u'''!!!! 1.1 * Исправление ошибок. * Добавлена новая возможность. !!!! 1.0 * Первая версия.''' self.assertEqual(changelog, right_result, changelog)
def test_changelog_single_changes_01(self): changes = [u'Первая версия.'] version_1 = VersionInfo(Version(1, 0), changes=changes) changelog = [version_1] appinfo = AppInfo(self._appname, self._author, changelog) generator = SiteChangelogGenerator(appinfo) changelog = generator.make() right_result = u'''!!!! 1.0 * Первая версия.''' self.assertEqual(changelog, right_result)
def test_fromXmlChangeLog_versions_simple(): xmlChangeLog = XmlChangeLog() version_1 = XmlChangeLogVersionInfo(number='1.0', status='dev', date=None) version_2 = XmlChangeLogVersionInfo(number='2.0', status='beta', date=None) xmlChangeLog.versions.append(version_1) xmlChangeLog.versions.append(version_2) language = '' changelog = ChangeLogFactory.fromXmlChangeLog(xmlChangeLog, language) assert len(changelog.versions) == 2 assert changelog.versions[0].version == Version(1, 0, status=StatusSet.DEV) assert changelog.versions[0].downloads == [] assert changelog.versions[0].changes == [] assert changelog.versions[1].version == Version(2, 0, status=StatusSet.BETA) assert changelog.versions[1].downloads == [] assert changelog.versions[1].changes == []
def testVersionList_1(self): from updatenotifier.versionlist import VersionList self.loader.load( [u"../plugins/updatenotifier", u"../plugins/testdebug"]) self.assertEqual(len(self.loader), 2) verlist = VersionList(self.loader) # Без обновления все версии равны None self.assertTrue(verlist.getPluginVersion(u"Debug Plugin") == None) self.assertTrue(verlist.getPluginVersion(u"UpdateNotifier") == None) self.assertTrue(verlist.stableVersion == None) self.assertTrue(verlist.unstableVersion == None) verlist.updateVersions() self.assertTrue( verlist.getPluginVersion(u"Debug Plugin") == Version(0, 6)) self.assertTrue(verlist.stableVersion == Version(1, 8, 1))
def test_changelog_single_changes_date(self): changes = [u'Исправление ошибок.', u'Добавлена новая возможность.'] version_1 = VersionInfo(Version(1, 0), date_str=u'1 мая 2016', changes=changes) changelog = [version_1] appinfo = AppInfo(self._appname, self._author, changelog) generator = SiteChangelogGenerator(appinfo) changelog = generator.make() right_result = u'''!!!! 1.0 (1 мая 2016) * Исправление ошибок. * Добавлена новая возможность.''' self.assertEqual(changelog, right_result)
def _getVersionFromPage(self, url, versionname, status=""): """ url - ссылка, откуда получается номер версии versionname - название версии (stable, unstable и т.п.) """ if url is None: return None text = self._loadPage(url) versions = extractVersion(text) if versionname not in versions: return None return Version.parse(versions[versionname] + " " + status)
def getCurrentVersion(): fname = "version.txt" path = os.path.join(outwiker.core.system.getCurrentDir(), fname) try: with open(path) as fp: lines = fp.readlines() except IOError: MessageBox( _(u"Can't open file %s") % fname, _(u"Error"), wx.ICON_ERROR | wx.OK) return version_str = "%s.%s %s" % (lines[0].strip(), lines[1].strip(), lines[2].strip()) try: version = Version.parse(version_str) except ValueError: MessageBox(_(u"Can't parse version"), _(u"Error"), wx.ICON_ERROR | wx.OK) version = Version(0, 0) return version
def _getVersionFromPage (self, url, versionname, status=""): """ url - ссылка, откуда получается номер версии versionname - название версии (stable, unstable и т.п.) """ if url == None: return None text = self._loadPage (url) versions = extractVersion (text) if versionname not in versions: return None return Version.parse (versions[versionname] + " " + status)
def test_changes_03(self): text = '''<?xml version="1.1" encoding="UTF-8" ?> <info> <data lang="ru"> <changelog> <version number="1.2"> <change>Изменение 1</change> <change>Изменение 2</change> <change>Изменение 3</change> </version> <version number="1.3"> <change>Изменение 4</change> <change>Изменение 5</change> </version> </changelog> </data> </info>''' result = XmlVersionParser(['ru']).parse(text) self.assertEqual(len(result.versionsList), 2) self.assertEqual(result.versionsList[0].version, Version(1, 3)) self.assertEqual(result.versionsList[0].date_str, '') self.assertEqual(result.versionsList[0].hidden, False) self.assertEqual(len(result.versionsList[0].changes), 2) self.assertEqual(result.versionsList[0].changes[0], 'Изменение 4') self.assertEqual(result.versionsList[0].changes[1], 'Изменение 5') self.assertEqual(result.versionsList[1].version, Version(1, 2)) self.assertEqual(result.versionsList[1].date_str, '') self.assertEqual(result.versionsList[1].hidden, False) self.assertEqual(len(result.versionsList[1].changes), 3) self.assertEqual(result.versionsList[1].changes[0], 'Изменение 1') self.assertEqual(result.versionsList[1].changes[1], 'Изменение 2') self.assertEqual(result.versionsList[1].changes[2], 'Изменение 3')
def testParse3(self): self.assertTrue( Version.parse("1.2.3 beta") == Version( 1, 2, 3, status=StatusSet.BETA)) self.assertTrue( Version.parse(" 1.2.3 dev") == Version( 1, 2, 3, status=StatusSet.DEV)) self.assertTrue( Version.parse("1.2.3 stable ") == Version( 1, 2, 3, status=StatusSet.STABLE))
def test_fromXmlChangeLog_versions_invalid_number(): xmlChangeLog = XmlChangeLog() version_1 = XmlChangeLogVersionInfo(number='xxx') version_2 = XmlChangeLogVersionInfo(number='1.0', status='dev', date=None) xmlChangeLog.versions.append(version_1) xmlChangeLog.versions.append(version_2) language = '' changelog = ChangeLogFactory.fromXmlChangeLog(xmlChangeLog, language) assert len(changelog.versions) == 1 assert changelog.versions[0].version == Version(1, 0, status=StatusSet.DEV) assert changelog.versions[0].downloads == [] assert changelog.versions[0].changes == []
def test_changelog_mix_2(): versions = [ VersionInfo(Version(2, 1), None, [], []), VersionInfo(Version(1, 1), None, [], []), VersionInfo(Version(1, 0), None, [], []), VersionInfo(Version(3, 0), None, [], []), VersionInfo(Version(2, 0), None, [], []), ] changelog = ChangeLog(versions) assert changelog.latestVersion.version == Version(3, 0)
def test_filter_empty_05(self): from updatenotifier.updatecontroller import UpdateController plugin = self.loader['UpdateNotifier'] controller = UpdateController(self.application, plugin) latestVersion = Version(1, 0) latestVersionInfo = VersionInfo(latestVersion) currentVersionsDict = {'test_02': '1.0'} latestVersionsDict = { 'test_01': AppInfo('test', None, versionsList=[latestVersionInfo]), } result = controller.filterUpdatedApps(currentVersionsDict, latestVersionsDict) self.assertEqual(result, {})
def test_changes_01(self): text = u'''<?xml version="1.1" encoding="UTF-8" ?> <info> <data lang="ru"> <changelog> <version number="1.2"> <change>Изменение 1</change> </version> </changelog> </data> </info>''' result = XmlVersionParser([u'ru']).parse(text) self.assertEqual(len (result.versionsList), 1) self.assertEqual(result.versionsList[0].version, Version(1, 2)) self.assertEqual(result.versionsList[0].date_str, u'') self.assertEqual(result.versionsList[0].hidden, False) self.assertEqual(len (result.versionsList[0].changes), 1) self.assertEqual(result.versionsList[0].changes[0], u'Изменение 1')
def test_fromString_lang_ru_RU(): appinfo = AppInfoFactory.fromString(xmlexample, language='ru_RU') assert appinfo.app_name == 'Имя приложения' assert appinfo.website == 'http://jenyay.net/ru/' assert appinfo.description == 'Описание' assert appinfo.authors[0].name == 'Джон' assert appinfo.authors[0].email == '*****@*****.**' assert appinfo.authors[0].website == 'http://example.com/ru' assert appinfo.authors[1].name == 'Андрей' assert appinfo.authors[1].email == '*****@*****.**' assert appinfo.authors[1].website == 'http://example.com/andrey/ru' assert appinfo.version == Version(2, 0, status=StatusSet.DEV) assert appinfo.requirements.os_list == ['Windows', 'Linux'] assert appinfo.requirements.api_list == [(2, 222), (3, 333)]
def test_fromString_lang_default(): appinfo = AppInfoFactory.fromString(xmlexample, language='jp') assert appinfo.app_name == 'Application name' assert appinfo.website == 'http://jenyay.net/en/' assert appinfo.description == 'Description' assert appinfo.authors[0].name == 'John' assert appinfo.authors[0].email == '*****@*****.**' assert appinfo.authors[0].website == 'http://example.com' assert appinfo.authors[1].name == 'Andrey' assert appinfo.authors[1].email == '*****@*****.**' assert appinfo.authors[1].website == 'http://example.com/andrey' assert appinfo.version == Version(2, 0, status=StatusSet.DEV) assert appinfo.requirements.os_list == ['Windows', 'Linux'] assert appinfo.requirements.api_list == [(2, 222), (3, 333)]
def test_filter_empty_04(self): from updatenotifier.updatecontroller import UpdateController pluginPath = self.loader[u'UpdateNotifier'].pluginPath controller = UpdateController(Application, pluginPath) latestVersion = Version(1, 0) latestVersionInfo = VersionInfo(latestVersion) currentVersionsDict = {} latestVersionsDict = { u'test_01': AppInfo(u'test', None, versionsList=[latestVersionInfo]), } result = controller.filterUpdatedApps(currentVersionsDict, latestVersionsDict) self.assertEqual(result, {})
def test_downloads_01(self): text = '''<?xml version="1.1" encoding="UTF-8" ?> <info> <data lang="ru"> <changelog> <version number="1.0"> <download>http://example.com/1.0/</download> </version> </changelog> </data> </info>''' result = XmlVersionParser(['ru']).parse(text) self.assertEqual(len(result.versionsList), 1) self.assertEqual(result.versionsList[0].version, Version(1, 0)) self.assertEqual(result.versionsList[0].date_str, '') self.assertEqual(result.versionsList[0].hidden, False) self.assertEqual(len(result.versionsList[0].changes), 0) self.assertEqual(result.versionsList[0].downloads, {'all': 'http://example.com/1.0/'})
def test_changelog_02(self): changes_1 = [u'Изменение 1'] version_1 = VersionInfo(Version(1, 2, 3, 100), changes=changes_1) maintainer = u'Ivan Petrov' maintainer_email = u'*****@*****.**' changelog = [version_1] date_str = u'13.06.2016' appinfo = AppInfo(self._appname, None, changelog) generator = DebChangelogGenerator(appinfo, maintainer, maintainer_email) result = generator.make(self._distrib, date_str) result_right = u'''outwiker (1.2.3+100~distribname) distribname; urgency=medium * Изменение 1 -- Ivan Petrov <*****@*****.**> 13.06.2016''' self.assertEqual(result, result_right)
def test_downloads_02(self): text = u'''<?xml version="1.1" encoding="UTF-8" ?> <info> <data lang="ru"> <changelog> <version number="1.0"> <download os="windows">http://example.com/1.0/windows/</download> <download os="unix">http://example.com/1.0/unix/</download> </version> </changelog> </data> </info>''' result = XmlVersionParser([u'ru']).parse(text) self.assertEqual(len (result.versionsList), 1) self.assertEqual(result.versionsList[0].version, Version(1, 0)) self.assertEqual(result.versionsList[0].date_str, u'') self.assertEqual(result.versionsList[0].hidden, False) self.assertEqual(len (result.versionsList[0].changes), 0) self.assertEqual(result.versionsList[0].downloads, {u'windows': u'http://example.com/1.0/windows/', u'unix': u'http://example.com/1.0/unix/' })
def getCurrentVersion (): fname = "version.txt" path = os.path.join (outwiker.core.system.getCurrentDir(), fname) try: with open (path) as fp: lines = fp.readlines() except IOError: MessageBox (_(u"Can't open file %s") % fname, _(u"Error"), wx.ICON_ERROR | wx.OK) return version_str = "%s.%s %s" % (lines[0].strip(), lines[1].strip(), lines[2].strip()) try: version = Version.parse (version_str) except ValueError: MessageBox (_(u"Can't parse version"), _(u"Error"), wx.ICON_ERROR | wx.OK) version = Version(0, 0) return version
def getUpdatedPlugins(self, verList): """ Возвращает список плагинов, которые обновились """ updatedPlugins = [] for plugin in self._application.plugins: pluginVersion = verList.getPluginVersion(plugin.name) try: currentPluginVersion = Version.parse(plugin.version) except ValueError: continue try: verList.getPluginUrl(plugin.name) except KeyError: continue if (pluginVersion is not None and pluginVersion > currentPluginVersion): updatedPlugins.append(plugin) return updatedPlugins
def test_filter_09(self): from updatenotifier.updatecontroller import UpdateController pluginPath = self.loader[u'UpdateNotifier'].pluginPath controller = UpdateController(Application, pluginPath) latestVersion = Version(1, 1) latestVersionInfo = VersionInfo(latestVersion) currentVersionsDict = {u'test_01': u'1.0', u'test_02': u'2.0', } latestVersionsDict = { u'test_01': AppInfo(u'test', None, versionsList=[latestVersionInfo]), } result = controller.filterUpdatedApps(currentVersionsDict, latestVersionsDict) self.assertEqual(len(result), 1) self.assertEqual(result[u'test_01'].appname, u'test')
def getUpdatedPlugins (self, verList): """ Возвращает список плагинов, которые обновились """ updatedPlugins = [] for plugin in self._application.plugins: pluginVersion = verList.getPluginVersion (plugin.name) try: currentPluginVersion = Version.parse (plugin.version) except ValueError: continue try: pluginUrl = verList.getPluginUrl (plugin.name) except KeyError: continue if (pluginVersion != None and pluginVersion > currentPluginVersion): updatedPlugins.append (plugin) return updatedPlugins
# -*- coding: UTF-8 -*- import os.path from outwiker.core.pluginbase import Plugin from outwiker.core.commands import getCurrentVersion from outwiker.core.version import Version, StatusSet from outwiker.core.system import getOS __version__ = u"1.0.2" if getCurrentVersion() < Version (1, 8, 0, 731, status=StatusSet.DEV): print ("ChangeUID plugin. OutWiker version requirement: 1.8.0.731") else: from .i18n import set_ from .controller import Controller class PluginTableOfContents (Plugin): def __init__ (self, application): """ application - экземпляр класса core.application.ApplicationParams """ Plugin.__init__ (self, application) self.__controller = Controller(self, application) @property def application (self): return self._application
fname = "version.txt" path = os.path.join (outwiker.core.system.getCurrentDir(), fname) try: with open (path) as fp: lines = fp.readlines() except IOError, e: MessageBox (_(u"Can't open file %s") % fname, _(u"Error"), wx.ICON_ERROR | wx.OK) return version_str = "%s.%s %s" % (lines[0].strip(), lines[1].strip(), lines[2].strip()) try: version = Version.parse (version_str) except ValueError: MessageBox (_(u"Can't parse version"), _(u"Error"), wx.ICON_ERROR | wx.OK) version = Version(0, 0) return version @testreadonly def renamePage (page, newtitle): if not testPageTitle (newtitle): return try:
import os.path from outwiker.core.pluginbase import Plugin from outwiker.core.system import getOS from outwiker.core.commands import getCurrentVersion from outwiker.core.version import Version, StatusSet from .controller import Controller __version__ = u"1.1.5" # Для работы этого плагина требуется OutWiker 1.6.0.632 if getCurrentVersion() < Version (1, 6, 0, 632, status=StatusSet.DEV): print ("Thumblist plugin. OutWiker version requirement: 1.6.0.632") else: class PluginThumbGallery (Plugin): """ Плагин, добавляющий обработку команды (:thumblist:) и (:thumbgallery:) в википарсер """ def __init__ (self, application): """ application - экземпляр класса core.application.ApplicationParams """ Plugin.__init__ (self, application) self._controller = Controller (application) @property
def testParse3 (self): self.assertTrue (Version.parse ("1.2.3 beta") == Version (1, 2, 3, status=StatusSet.BETA)) self.assertTrue (Version.parse (" 1.2.3 dev") == Version (1, 2, 3, status=StatusSet.DEV)) self.assertTrue (Version.parse ("1.2.3 stable ") == Version (1, 2, 3, status=StatusSet.STABLE))
# -*- coding: UTF-8 -*- from outwiker.core.pluginbase import Plugin from outwiker.core.commands import getCurrentVersion from outwiker.core.version import Version, StatusSet if getCurrentVersion() < Version(1, 8, 0, 733, status=StatusSet.BETA): print("TestPage plugin. OutWiker version requirement: 1.8.0.733") else: from .controller import Controller class PluginLatexPage(Plugin): def __init__(self, application): """ application - экземпляр класса core.application.ApplicationParams """ Plugin.__init__(self, application) self.__controller = Controller(self, application) @property def application(self): return self._application ################################################### # Свойства и методы, которые необходимо определить ################################################### @property def name(self): return u"LatexPage"
def testCompareNotEqual(self): self.assertTrue(Version(1) != Version(2)) self.assertTrue(Version(1, 2, 3) != Version(1, 2, 4)) self.assertTrue( Version(1, 2, 3, status=StatusSet.BETA) != Version( 1, 2, 3, status=StatusSet.ALPHA))
# -*- coding: UTF-8 -*- import os.path from outwiker.core.pluginbase import Plugin from outwiker.core.system import getOS from outwiker.core.commands import getCurrentVersion from outwiker.core.version import Version, StatusSet from .lightboxcommand import LightboxCommand __version__ = u"1.1.2" # Для работы этого плагина требуется OutWiker 1.7.0.653 и выше if getCurrentVersion() < Version(1, 7, 0, 653, status=StatusSet.DEV): print("Lightbox plugin. OutWiker version requirement: 1.7.0.653") else: class PluginLightbox(Plugin): """ Плагин, добавляющий обработку команды (:lightbox:) в википарсер """ def __init__(self, application): """ application - экземпляр класса core.application.ApplicationParams """ Plugin.__init__(self, application) self.LIGHTBOX_TOOL_ID = u"PLUGIN_LIGHTBOX_TOOL_ID" def __onWikiParserPrepare(self, parser): parser.addCommand(LightboxCommand(parser))
Плагин для открытия файлов заметок с помощью внешних программ, а также для создания ссылок на викистраницах, при клике на которые запускаются внешние программы. """ import os.path from outwiker.core.commands import getCurrentVersion from outwiker.core.version import Version from outwiker.core.pluginbase import Plugin from outwiker.core.system import getOS __version__ = u"1.3.3" if getCurrentVersion() < Version (1, 8, 0): print ("ExternalTools plugin. OutWiker version requirement: 1.8.0") else: from controller import Controller from i18n import set_ class PluginExternalTools (Plugin): def __init__ (self, application): """ application - instance of core.application.ApplicationParams """ Plugin.__init__ (self, application) self.__controller = Controller (self) @property
# -*- coding: UTF-8 -*- import os.path from outwiker.core.pluginbase import Plugin from outwiker.core.commands import getCurrentVersion from outwiker.core.version import Version __version__ = u"1.0" if getCurrentVersion() < Version(1, 8, 0, 742): print("ReadingMode. OutWiker version requirement: 1.8.0.742") else: from outwiker.core.system import getOS from controller import Controller from .i18n import set_ class PluginReadingMode(Plugin): """ ReadingMode Plugin """ def __init__(self, application): super(PluginReadingMode, self).__init__(application) self._controller = Controller(application) @property def name(self): return u"ReadingMode" @property def description(self):
# -*- coding: UTF-8 -*- import os.path import logging from outwiker.core.pluginbase import Plugin from outwiker.core.commands import getCurrentVersion from outwiker.core.version import Version, StatusSet from outwiker.core.system import getOS from .i18n import set_ __version__ = u'1.0.1' if getCurrentVersion() < Version(1, 9, 0, 781, status=StatusSet.DEV): logging.warning(u"WebPage plugin. OutWiker version requirement: 1.9.0.781") else: from .controller import Controller class PluginWebPage(Plugin): def __init__(self, application): """ application - instance of the core.application.ApplicationParams class """ super(PluginWebPage, self).__init__(application) self.__controller = Controller(self, self._application) @property def application(self): return self._application
def testParse2(self): self.assertTrue(Version.parse("1.2.3") == Version(1, 2, 3), str(Version.parse("1.2.3")))
# -*- coding: UTF-8 -*- import os.path import logging from outwiker.core.pluginbase import Plugin from outwiker.core.commands import getCurrentVersion from outwiker.core.version import Version, StatusSet from outwiker.core.system import getOS if getCurrentVersion() < Version(2, 0, 0, 812, status=StatusSet.DEV): logging.warning("TexEquation plugin. OutWiker version requirement: 1.9.0.777") else: from .i18n import set_ from .controller import Controller class PluginTexEquation(Plugin): def __init__(self, application): """ application - экземпляр класса core.application.ApplicationParams """ super(PluginTexEquation, self).__init__(application) self.__controller = Controller(self, application) @property def application(self): return self._application ################################################### # Свойства и методы, которые необходимо определить
def testParse1(self): self.assertTrue(Version.parse("1") == Version(1))