Packages: add @search
parent
b67bc8d0c9
commit
adb5abc376
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
|
import re
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
|
@ -269,6 +270,47 @@ class Packages(callbacks.Plugin):
|
||||||
for x,y in needUpdate.items()]))
|
for x,y in needUpdate.items()]))
|
||||||
checkupdates = wrap(checkupdates, ['owner', optional('httpUrl')])
|
checkupdates = wrap(checkupdates, ['owner', optional('httpUrl')])
|
||||||
|
|
||||||
|
def search(self, irc, msg, args, repo, optlist):
|
||||||
|
# Parse the arguments
|
||||||
|
if repo is None:
|
||||||
|
repo = 'http://packages.supybot.fr.cr/'
|
||||||
|
def glob2matcher(glob):
|
||||||
|
glob = utils.python.glob2re(glob)
|
||||||
|
return re.compile(glob).match
|
||||||
|
matchers = {}
|
||||||
|
for key, value in optlist:
|
||||||
|
if value != None:
|
||||||
|
matchers.update({key: glob2matcher(value)})
|
||||||
|
|
||||||
|
# Get server's index
|
||||||
|
try:
|
||||||
|
index = json.load(utils.web.getUrlFd(repo))
|
||||||
|
except ValueError:
|
||||||
|
irc.error(_('Server\'s JSON is bad formed.'))
|
||||||
|
return
|
||||||
|
|
||||||
|
# Crawl packages index
|
||||||
|
results = []
|
||||||
|
for package in index['packages']:
|
||||||
|
ok = True
|
||||||
|
for key, matcher in matchers.items():
|
||||||
|
if key in package and not matcher(str(package[key])):
|
||||||
|
# If the packages index doesn't have this key, we consider
|
||||||
|
# the key matched.
|
||||||
|
ok = False
|
||||||
|
break
|
||||||
|
if ok:
|
||||||
|
results.append(package)
|
||||||
|
|
||||||
|
# Display results
|
||||||
|
reply = ['%s (%s)' % (x['name'],x['version']) for x in results]
|
||||||
|
reply.sort()
|
||||||
|
irc.reply(', '.join(reply))
|
||||||
|
options = ['name', 'version', 'author', 'description']
|
||||||
|
search = wrap(search, [optional('httpUrl'),
|
||||||
|
getopts(dict([(x,'glob') for x in options]))])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue