Changeset 3088 in products
- Timestamp:
- Mar 30, 2011 7:08:50 PM (13 years ago)
- Location:
- quintagroup.analytics/branches/update_mt/quintagroup/analytics/browser
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
quintagroup.analytics/branches/update_mt/quintagroup/analytics/browser/configure.zcml
r3028 r3088 58 58 /> 59 59 60 <browser:page 61 name="size_stats" 62 for="*" 63 permission="zope2.ViewManagementScreens" 64 class=".views.SizeByPath" 65 template="size_stats.pt" 66 /> 67 60 68 <browser:resource 61 69 name="stats_style.css" -
quintagroup.analytics/branches/update_mt/quintagroup/analytics/browser/views.py
r3029 r3088 1 from pprint import pprint 1 2 from Acquisition import aq_base 2 3 from zope.component import getUtility, getMultiAdapter, queryMultiAdapter … … 10 11 from plone.portlets.interfaces import IPortletAssignmentMapping 11 12 from plone.portlets.interfaces import ILocalPortletAssignmentManager 13 12 14 try: 13 15 from plone.portlets.interfaces import IPortletAssignmentSettings … … 527 529 #exprs.sort() 528 530 return exprs 531 532 def human_format(num): 533 magnitude = 0 534 while num >= 1024: 535 magnitude += 1 536 num /= 1024.0 537 # add more suffixes if you need them 538 return '%.2f %sB' % (num, ['', 'K', 'M', 'G', 'T', 'P'][magnitude]) 539 540 class SizeByPath(BrowserView): 541 def __init__(self, context, request): 542 self.context = context 543 self.request = request 544 self.cat = getToolByName(self.context, 'portal_catalog') 545 self.purl = getToolByName(self.context, 'portal_url') 546 self.total = None 547 self.DEBUG = True 548 bpath = self.request.form.get('basepath') 549 self.basepath = bpath and "/"+bpath.strip("/") or "" 550 551 # def _getInfo(self, k, path, size): 552 # obpath = "%s/%s" % (path, k) 553 # return {'path': obpath, 554 # 'href': "%s/%s" % (self.purl(), obpath), 555 # 'size': size, 556 # 'human_size': "%d b" % size} 557 558 def _walk(self, obj, path): 559 560 def getSize(brain): 561 return float(brain.getObjSize.split()[0])*( 562 brain.getObjSize.endswith('kB') and 1024 \ 563 or brain.getObjSize.endswith('MB') and 1024*1024 \ 564 or 1) 565 566 brains = self.cat(path=path, Language="all") 567 result = {} 568 for b in brains: 569 bpath = b.getPath()[len(path):] 570 p1 = len(bpath)>1 and bpath.split('/')[1] or '' 571 if not p1: 572 continue 573 data = result.setdefault(p1, {'size': 0, 'brain': None}) 574 data['size'] += getSize(b) 575 if b.getPath() == "%s/%s" % (path, p1): 576 data['brain'] = b 577 result[p1] = data 578 579 self.total = human_format(sum([d['size'] for d in result.values()])) 580 581 sresult = [(d['size'], d['brain']) for k,d in result.items() if d['brain']] 582 sresult.sort(key=lambda i:i[0], reverse=True) 583 584 sortedres = [] 585 burl = "%s/%s" % (self.purl(), self.basepath) 586 banalyse_url_tmpl = "%s/@@size_stats?basepath=%s/%%s&submit=Search" % ( 587 self.purl(), self.basepath) 588 for size, b in sresult: 589 isFolder = b.getObject().isPrincipiaFolderish 590 oid = b.getId or b.id 591 sortedres.append({'id': oid, 592 'path': "%s/%s" % (self.basepath, oid), 593 'href': "%s/%s" % (burl, oid), 594 'human_size': human_format(size), 595 'analyse_url': isFolder and banalyse_url_tmpl % oid or "",}) 596 return sortedres 597 598 def getSizeStats(self): 599 if self.request.get("submit", None) is None: 600 return [] 601 602 portal = self.purl.getPortalObject() 603 path = "/%s%s" % (portal.getId(), self.basepath) 604 605 infos = [] 606 for i in self._walk(self.context, path): 607 if self.DEBUG or i['size'] > 1: 608 infos.append(i) 609 610 return infos
Note: See TracChangeset
for help on using the changeset viewer.