From 9cba1e4d0819f959ccff0901152da100bf1948e4 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 29 Apr 2012 17:55:41 +0000 Subject: [PATCH] PluginDownloader: Add @info command. --- plugins/PluginDownloader/messages.pot | 32 ++++++++++---- plugins/PluginDownloader/plugin.py | 62 ++++++++++++++++++++++----- 2 files changed, 76 insertions(+), 18 deletions(-) diff --git a/plugins/PluginDownloader/messages.pot b/plugins/PluginDownloader/messages.pot index f76b858db..016729934 100644 --- a/plugins/PluginDownloader/messages.pot +++ b/plugins/PluginDownloader/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2012-04-29 19:20+EEST\n" +"POT-Creation-Date: 2012-04-29 17:55+UTC\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,7 +15,7 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: plugin.py:245 +#: plugin.py:260 #, docstring msgid "" "This plugin allows you to install unofficial plugins from\n" @@ -25,7 +25,7 @@ msgid "" " just run command \"install \"." msgstr "" -#: plugin.py:253 +#: plugin.py:268 #, docstring msgid "" "[]\n" @@ -35,19 +35,19 @@ msgid "" " repositories." msgstr "" -#: plugin.py:261 plugin.py:272 +#: plugin.py:276 plugin.py:287 msgid ", " msgstr "" -#: plugin.py:263 plugin.py:282 +#: plugin.py:278 plugin.py:297 plugin.py:322 msgid "This repository does not exist or is not known by this bot." msgstr "" -#: plugin.py:270 +#: plugin.py:285 msgid "No plugin found in this repository." msgstr "" -#: plugin.py:277 +#: plugin.py:292 #, docstring msgid "" " \n" @@ -55,7 +55,23 @@ msgid "" " Downloads and installs the from the ." msgstr "" -#: plugin.py:287 +#: plugin.py:302 plugin.py:327 msgid "This plugin does not exist in this repository." msgstr "" +#: plugin.py:317 +#, docstring +msgid "" +" \n" +"\n" +" Displays informations on the in the ." +msgstr "" + +#: plugin.py:331 +msgid "No README found for this plugin" +msgstr "" + +#: plugin.py:334 +msgid "This plugin has no description." +msgstr "" + diff --git a/plugins/PluginDownloader/plugin.py b/plugins/PluginDownloader/plugin.py index 546e53a23..89db121cd 100644 --- a/plugins/PluginDownloader/plugin.py +++ b/plugins/PluginDownloader/plugin.py @@ -130,19 +130,24 @@ class GithubRepository(GitRepository): # Remember we pop(0)ed the path return None + def _download(self, plugin): + try: + fileObject = urllib2.urlopen(self._downloadUrl) + fileObject2 = StringIO() + fileObject2.write(fileObject.read()) + fileObject.close() + fileObject2.seek(0) + return tarfile.open(fileobj=fileObject2, mode='r:gz') + finally: + del fileObject def install(self, plugin): + archive = self._download(plugin) + prefix = archive.getnames()[0] + dirname = ''.join((self._path, plugin)) directories = conf.supybot.directories.plugins() directory = self._getWritableDirectoryFromList(directories) assert directory is not None - dirname = ''.join((self._path, plugin)) - fileObject = urllib2.urlopen(self._downloadUrl) - fileObject2 = StringIO() - fileObject2.write(fileObject.read()) - fileObject.close() - fileObject2.seek(0) - archive = tarfile.open(fileobj=fileObject2, mode='r:gz') - prefix = archive.getnames()[0] try: assert archive.getmember(prefix + dirname).isdir() @@ -161,8 +166,18 @@ class GithubRepository(GitRepository): open(newFileName, 'a').write(extractedFile.read()) finally: archive.close() - fileObject2.close() - del archive, fileObject, fileObject2 + del archive + + def getInfo(self, plugin): + archive = self._download(plugin) + prefix = archive.getnames()[0] + dirname = ''.join((self._path, plugin)) + print repr(prefix + dirname + '/README.txt') + for file in archive.getmembers(): + print repr(file) + if file.name == prefix + dirname + '/README.txt': + extractedFile = archive.extractfile(file) + return extractedFile.read() def _getWritableDirectoryFromList(self, directories): for directory in directories: @@ -297,6 +312,33 @@ class PluginDownloader(callbacks.Plugin): install = wrap(install, ['owner', 'something', 'something']) + @internationalizeDocstring + def info(self, irc, msg, args, repository, plugin): + """ + + Displays informations on the in the .""" + global repositories + if repository not in repositories: + irc.error(_( + 'This repository does not exist or is not known by ' + 'this bot.' + )) + elif plugin not in repositories[repository].getPluginList(): + irc.error(_('This plugin does not exist in this repository.')) + else: + info = repositories[repository].getInfo(plugin) + if info is None: + irc.error(_('No README found for this plugin')) + else: + if info.startswith('Insert a description of your plugin here'): + irc.error(_('This plugin has no description.')) + else: + info = info.split('\n\n')[0] + for line in info.split('\n'): + if line != '': + irc.reply(line) + info = wrap(info, ['something', optional('something')]) + PluginDownloader = internationalizeDocstring(PluginDownloader) Class = PluginDownloader