PKLyS6[´GF++tracdown/__init__.py# TracDown module from tracdown import * PK&€68wŠ*%  tracdown/tracdown.pyc;ò 0ÚEc@smdklZdkTdklZlZdklZdkl Z dk Z dk Z de fd„ƒYZ dS((sutil(s*(sadd_stylesheetsINavigationContributor(sIRequestHandler(sMarkupNs FilePlugincBsftZdZeeeƒdZd„Zd„Zd„Z e d„Z e d„Z d„Z d„ZRS( s&A plugin to display released downloadss,

()

Name Size Date
cCsdSdS(Ns downloads((sselfsreq((s5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pysget_active_navigation_item9sccs'ddtd|iiiƒƒfVdS(Nsmainnavs downloadssDownloads(sMarkupsselfsenvshrefs downloads(sselfsreq((s5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pysget_navigation_items;scCs1dk}|id|iƒ}|odSndS(Ns/downloads(.*)$i(sresmatchsreqs path_info(sselfsreqsresmatch((s5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pys match_request>s cCsžg}ti|ƒ}|o6|iƒ|djp |djo|iƒqRnxA|D]9}ti i ti i ||ƒƒo|i |ƒqYqYW|SdS(Nsrevsreverse( sfilessosslistdirsrootsnamesssortsordersreversesfilespathsisdirsjoinsappend(sselfsrootssortsordersfilessnamessfile((s5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pyslistcategoriesDs "csg}titiiˆˆƒƒ}|o?|djo$|i‡‡d†ƒ|i ƒqj|iƒnx|D]}|i |ƒqqW|SdS(NsagecsJtiitiiˆˆ|gƒƒtiitiiˆˆ|gƒƒS(N( sosspathsgetmtimessepsjoinsrootscategorysxsy(sxsy(scategorysroot(s5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pysVs( sfilessosslistdirspathsjoinsrootscategorysnamesssortsordersreversesfilesappend(sselfsrootscategoryssortsordersnamessfilesfiles((srootscategorys5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pys listfilesQs cCs/tii|ƒ}tidti|ƒƒSdS(Ns%x %X(sosspathsgetmtimesthetimestimesstrftimes localtime(sselfspathsthetime((s5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pys timestamp_sc Cs'|iiddƒpd|id<|iiddƒpd|id<|iiiƒ|id<|iiddƒd} |iiddƒd} |iidd ƒd j}|iidd ƒ}|iidd ƒ} |i | |d |ƒ}g}xó|D]ë}g}xœ|i| ||d | ƒD]} | |d| }tii| || ƒ} |ihd| <d|i| ƒ<dtitii| ƒƒ<d|<ƒq#W|ihd|<d|itii| |ƒƒ<d|<ƒqûW||id<|ii|iƒ}t |dƒ|t!fSdS(Nsdownloadstitles Downloadssnightlysfiles.baseLinkspaths/surlssortstruescategory-orders file-ordersordersnamestimessizesfilessfiles.categoriesscommon/css/browser.css("sselfsconfigsgetsreqshdfsenvshrefs cruisecontrolspathsbaseurlssortscatordersorderslistcategoriess categoriesslistscategorysfiless listfilessfilesurlsossjoinsfilenamesappends timestampsutils pretty_sizesgetsizesparsesfile_csstemplatesadd_stylesheetsNone(sselfsreqssortscategorysfilesstemplatesurlslistscatordersbaseurlsfilenamesfilespathsorders categories((s5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pysprocess_requestcs.##SD  (s__name__s __module__s__doc__s implementssINavigationContributorsIRequestHandlersfile_cssget_active_navigation_itemsget_navigation_itemss match_requestsNoneslistcategoriess listfiless timestampsprocess_request(((s5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pys FilePlugin s  +     (stracsutils trac.corestrac.web.chromesadd_stylesheetsINavigationContributors trac.web.mainsIRequestHandlers trac.utilsMarkupsosstimes Components FilePlugin(sINavigationContributors FilePluginsIRequestHandlersadd_stylesheetsutilstimesossMarkup((s5build/bdist.darwin-8.0.1-x86/egg/tracdown/tracdown.pys?s   PKLyS6,ç=þþtracdown/tracdown.pyfrom trac import util from trac.core import * from trac.web.chrome import add_stylesheet, INavigationContributor from trac.web.main import IRequestHandler from trac.util import Markup import os, time class FilePlugin(Component): """A plugin to display released downloads""" implements(INavigationContributor, IRequestHandler) file_cs = """

()

Name Size Date
""" # file_cs # INavigationContributor methods def get_active_navigation_item(self, req): return 'downloads' def get_navigation_items(self, req): yield 'mainnav', 'downloads', Markup('Downloads' % self.env.href.downloads()) # IRequestHandler methods def match_request(self, req): import re match = re.match(r'/downloads(.*)$', req.path_info) if match: return 1 def listcategories(self, root, sort, order=None): files = [] names = os.listdir(root) if (sort): names.sort() if (order == "rev" or order == "reverse"): names.reverse() for file in names: if os.path.isdir(os.path.join(root, file)): files.append(file) return files def listfiles(self, root, category, sort, order=None): files = [] names = os.listdir(os.path.join(root, category)) if (sort): if (order == "age"): names.sort(lambda x, y: os.path.getmtime(os.sep.join([root, category, x])) - os.path.getmtime(os.sep.join([root, category, y]))) names.reverse() else: names.sort() for file in names: files.append(file) return files def timestamp(self, path): thetime = os.path.getmtime(path) return time.strftime('%x %X', time.localtime(thetime)) def process_request(self, req): req.hdf['title'] = self.config.get('download', 'title') or "Downloads" req.hdf['nightly'] = self.config.get('download', 'nightly') or "nightly" req.hdf['files.baseLink'] = self.env.href.cruisecontrol() path = self.config.get('download', 'path') + '/' baseurl = self.config.get('download', 'url') + '/' sort = self.config.get('download', 'sort') == 'true' catorder = self.config.get('download', 'category-order') order = self.config.get('download', 'file-order') categories = self.listcategories(path, sort, order=catorder) list = [] for category in categories: files = [] for file in self.listfiles(path, category, sort, order=order): url = baseurl + category + '/' + file filename = os.path.join(path, category, file) files.append({'name': file, 'time': self.timestamp(filename), 'size': util.pretty_size(os.path.getsize(filename)), 'url': url}) list.append({'name': category, 'time': self.timestamp(os.path.join(path, category)), 'files': files}) req.hdf['files.categories'] = list template = req.hdf.parse(self.file_cs) add_stylesheet(req, 'common/css/browser.css') return template, None PK&€68Eפ`¤¤tracdown/__init__.pyc;ò 0ÚEc@s dkTdS((s*N(stracdown(((s5build/bdist.darwin-8.0.1-x86/egg/tracdown/__init__.pys?sPKLyS6ÍpC EGG-INFO/trac_plugin.txttracdown PK(€68“×2EGG-INFO/zip-safe PK$€68€¨•®ÕÕEGG-INFO/SOURCES.txtsetup.py TracDown.egg-info/PKG-INFO TracDown.egg-info/SOURCES.txt TracDown.egg-info/dependency_links.txt TracDown.egg-info/top_level.txt TracDown.egg-info/trac_plugin.txt tracdown/__init__.py tracdown/tracdown.py PK$€68“×2EGG-INFO/dependency_links.txt PK#€68LÝQèÖÖEGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: TracDown Version: 0.0.1 Summary: A plugin to list released downloads Home-page: UNKNOWN Author: Andrew Williams Author-email: UNKNOWN License: GPL Description: UNKNOWN Platform: UNKNOWN PK$€68ÍpC EGG-INFO/top_level.txttracdown PKLyS6[´GF++¤tracdown/__init__.pyPK&€68wŠ*%  ¤]tracdown/tracdown.pycPKLyS6,ç=þþ¤0tracdown/tracdown.pyPK&€68Eפ`¤¤¤`*tracdown/__init__.pycPKLyS6ÍpC ¤7+EGG-INFO/trac_plugin.txtPK(€68“×2¤v+EGG-INFO/zip-safePK$€68€¨•®ÕÕ¤¦+EGG-INFO/SOURCES.txtPK$€68“×2¤­,EGG-INFO/dependency_links.txtPK#€68LÝQèÖÖ¤é,EGG-INFO/PKG-INFOPK$€68ÍpC ¤î-EGG-INFO/top_level.txtPK Ÿ+.