Changeset 3088 in products


Ignore:
Timestamp:
Mar 30, 2011 7:08:50 PM (13 years ago)
Author:
mylan
Message:

Added drafts of statystics by size view

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  
    5858        /> 
    5959 
     60    <browser:page 
     61        name="size_stats" 
     62        for="*" 
     63        permission="zope2.ViewManagementScreens" 
     64        class=".views.SizeByPath" 
     65        template="size_stats.pt" 
     66        /> 
     67 
    6068    <browser:resource 
    6169        name="stats_style.css" 
  • quintagroup.analytics/branches/update_mt/quintagroup/analytics/browser/views.py

    r3029 r3088  
     1from pprint import pprint 
    12from Acquisition import aq_base 
    23from zope.component import getUtility, getMultiAdapter, queryMultiAdapter 
     
    1011from plone.portlets.interfaces import IPortletAssignmentMapping 
    1112from plone.portlets.interfaces import ILocalPortletAssignmentManager 
     13 
    1214try: 
    1315    from plone.portlets.interfaces import IPortletAssignmentSettings 
     
    527529        #exprs.sort() 
    528530        return exprs 
     531 
     532def 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 
     540class 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.