Annotation of kupuMPIWG/plone/scanner.py, revision 1.1.1.1

1.1       dwinter     1: import os, re
                      2: 
                      3: IDPATTERN = re.compile(r'\$\Id[^$]*\$')
                      4: JSPATTERN = re.compile(r'(?:string:\$\{portal_url\}/([^."]+.js)")|(?:\<link href="([^."]*.css)")')
                      5: KWS = 'kupu_wysiwyg_support'
                      6: ROOT = os.path.dirname(os.path.dirname(__file__))
                      7: 
                      8: def matchFiles(extension, root, paths):
                      9:     for dirname in paths:
                     10:         dirname = os.path.join(root, dirname)
                     11:         files = os.listdir(dirname)
                     12:         for f in files:
                     13:             if f.endswith(extension):
                     14:                 yield f, os.path.join(dirname, f)
                     15: 
                     16: def getFileData(path):
                     17:     fh = open(path, 'rU')
                     18:     try:
                     19:         return fh.read()
                     20:     finally:
                     21:         fh.close()
                     22: 
                     23: def getKWS(root):
                     24:     return os.path.join(root, 'plone', 'kupu_plone_layer', KWS+'.html')
                     25: 
                     26: def scanFile(path):
                     27:     '''Scan a single file returning all the Id strings it contains'''
                     28:     ids = IDPATTERN.findall(getFileData(path))
                     29:     return ids
                     30: 
                     31:     
                     32: def scanKWS(root=ROOT):
                     33:     try:
                     34:         wysiwyg = scanFile(getKWS(root))
                     35:     except:
                     36:         return KWS, "cannot open template: run make"
                     37: 
                     38:     wysiwyg = dict.fromkeys(wysiwyg)
                     39: 
                     40:     for fname, path in matchFiles('.kupu', root, ('default', 'plone')):
                     41:         for id in scanFile(path):
                     42:             if id in wysiwyg:
                     43:                 del wysiwyg[id]
                     44:     if wysiwyg:
                     45:         return KWS, "template appears to be out of date: run make"
                     46:     return KWS, ''
                     47: 
                     48: def scanIds(root=ROOT):
                     49:     status = {}
                     50:     wanted = {}
                     51:     for groups in JSPATTERN.findall(getFileData(getKWS(root))):
                     52:         for group in groups:
                     53:             if group:
                     54:                 wanted[group] = None
                     55: 
                     56:     wanted = dict([ (name, None)
                     57:         for groups in JSPATTERN.findall(getFileData(getKWS(root)))
                     58:             for name in groups if name])
                     59: 
                     60:     for fname, path in matchFiles('.js', root, ('common', os.path.join('plone', 'kupu_plone_layer'))):
                     61:         if fname in wanted:
                     62:             for id in scanFile(path):
                     63:                 status[fname] = id
                     64:     res = status.items()
                     65:     res.sort()
                     66:     return res
                     67: 
                     68: if __name__=='__main__':
                     69:     print scanKWS('..')
                     70:     print scanIds('..')

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>