;ò = ÄDc@sydkZdkiZdkTdkiZdkiZdk i Z de fd„ƒYZ de i fd„ƒYZeZdS(N(s*sFreshmeatExceptioncBstZRS(N(s__name__s __module__(((s./Freshmeat/plugin.pysFreshmeatException'ss FreshmeatcBs8tZdZeZd„Zd„ZeedgƒZRS(saAdd the help for "@plugin help Freshmeat" here This should describe *how* to use this plugin.cOs[y&tt|ƒi|||||ŽWn.t i i j o}|i t|ƒƒnXdS(N(ssupers Freshmeatsselfs callCommandscommandsircsmsgsargsskwargssutilsswebsErrorseserrorsstr(sselfscommandsircsmsgsargsskwargsse((s./Freshmeat/plugin.pys callCommand.s&csdi|iƒƒ}d|}yÆtii|ƒ}|idƒo#|it dƒd}t |‚nt i i i|ƒ‰‡d†} | dƒ}| dƒ} | dƒ} | d ƒ}| d ƒ} |id || | || fƒWn(t j o}|it|ƒƒnXd S( sN Returns Freshmeat data about a given project. ss(http://www.freshmeat.net/projects-xml/%ssErrorics+ˆi|ƒd}t|idiƒSdS(Ni(sdomsgetElementsByTagNamesnamesnodesstrs childNodessdata(snamesnode(sdom(s./Freshmeat/plugin.pysgetNodeAssprojectname_fullslatest_release_versionsvitality_percentspopularity_percents date_updateds\%s, last updated %s, with a vitality percent of %s and a popularity of %s, is in version %s.N(sjoinsprojectssplitsurlsutilsswebsgetUrlstexts startswithsNonesFreshmeatExceptionsxmlsdomsminidoms parseStringsgetNodesversionsvitalitys popularitys lastupdatedsircsreplyseserrorsstr(sselfsircsmsgsargssprojects popularitysesurlstextsvitalitysversions lastupdatedsdomsgetNode((sdoms./Freshmeat/plugin.pys freshmeat4s$        $stext(s__name__s __module__s__doc__sTruesthreadeds callCommands freshmeatswrap(((s./Freshmeat/plugin.pys Freshmeat*s   (sxml.dom.minidomsxmls supybot.utilssutilsssupybot.commandsssupybot.pluginsspluginsssupybot.ircutilssircutilsssupybot.callbackss callbackss ExceptionsFreshmeatExceptionsPlugins FreshmeatsClass(sxmlsutilssClasss callbacksspluginss FreshmeatsFreshmeatExceptionsircutils((s./Freshmeat/plugin.pys?s     '