Annotation of kupu/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>