Mercurial > hg > decoupage
annotate decoupage/formatters.py @ 53:9c15bde43ae6
dont capitalize unimportant words
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Thu, 04 Nov 2010 18:51:30 -0700 |
parents | 8002dcdb8e82 |
children | ac1dc088e37e |
rev | line source |
---|---|
9
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
1 #!/usr/bin/env python |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
2 |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
3 import sys |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
4 from fnmatch import fnmatch |
9
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
5 from pkg_resources import iter_entry_points |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
6 |
1
93ab6d1968bd
adding comments about what this file contains
jhammel@jhammel-laptop
parents:
0
diff
changeset
|
7 ### abstract base classes for formatters |
93ab6d1968bd
adding comments about what this file contains
jhammel@jhammel-laptop
parents:
0
diff
changeset
|
8 |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
9 class FormatterBase(object): |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
10 """ |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
11 abstract base class if you want to use __init__ methods |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
12 in the form of |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
13 'arg1, arg2, arg3, kw1=foo, kw2=bar, kw3=baz |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
14 """ |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
15 |
10 | 16 defaults = {} # default values for attrs to be set on the instance |
17 | |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
18 def __init__(self, string): |
10 | 19 args = [ i.strip() for i in string.split(',')] |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
20 for index, arg in enumerate(args): |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
21 if '=' in arg: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
22 break |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
23 else: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
24 self.args = args |
10 | 25 for key, default in self.defaults.items(): |
26 setattr(self, key, default) | |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
27 return |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
28 self.args = args[:index] |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
29 self.kw = dict([i.split('=', 1) for i in args[index:]]) |
10 | 30 for key, default in self.defaults.items(): |
31 value = self.kw.pop(key, default) | |
32 setattr(self, key, value) | |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
33 |
1
93ab6d1968bd
adding comments about what this file contains
jhammel@jhammel-laptop
parents:
0
diff
changeset
|
34 |
93ab6d1968bd
adding comments about what this file contains
jhammel@jhammel-laptop
parents:
0
diff
changeset
|
35 ### formatters |
93ab6d1968bd
adding comments about what this file contains
jhammel@jhammel-laptop
parents:
0
diff
changeset
|
36 |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
37 class Ignore(object): |
27 | 38 """ |
28 | 39 ignore files of a glob patterns. |
40 These files will not be linked to in the template. | |
27 | 41 e.g. /ignore = .* *.pdf # don't list dotfiles and PDFs |
42 """ | |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
43 |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
44 def __init__(self, ignore): |
12
9f91acf9874c
* split on space in formatters to be consist with everything else
k0s <k0scist@gmail.com>
parents:
10
diff
changeset
|
45 self.match = ignore.split() |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
46 |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
47 def __call__(self, request, data): |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
48 _files = [] |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
49 for f in data['files']: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
50 for pattern in self.match: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
51 if fnmatch(f['name'], pattern): |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
52 break |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
53 else: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
54 _files.append(f) |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
55 data['files'] = _files |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
56 |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
57 |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
58 class All(object): |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
59 """ |
9
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
60 only pass files of a certain pattern; |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
61 the inverse of ignore |
12
9f91acf9874c
* split on space in formatters to be consist with everything else
k0s <k0scist@gmail.com>
parents:
10
diff
changeset
|
62 calling all with no arguments means only files with descriptions are used |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
63 """ |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
64 |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
65 def __init__(self, pattern): |
12
9f91acf9874c
* split on space in formatters to be consist with everything else
k0s <k0scist@gmail.com>
parents:
10
diff
changeset
|
66 self.match = pattern.split() |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
67 |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
68 def __call__(self, request, data): |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
69 _files = [] |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
70 for f in data['files']: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
71 if self.match: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
72 for pattern in self.match: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
73 if fnmatch(f['name'], pattern): |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
74 _files.append(f) |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
75 break |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
76 else: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
77 # use only files where the description is not None |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
78 if f['description'] is not None: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
79 _files.append(f) |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
80 data['files'] = _files |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
81 |
22 | 82 class Sort(object): |
27 | 83 """ |
84 determines how to sort the files in a directory; | |
85 right now only by case-insensitive alphabetically | |
28 | 86 * reverse : reverse the order of the sorting |
27 | 87 """ |
22 | 88 def __init__(self, pattern): |
89 self.args = [i.strip() for i in pattern.split(',')] | |
90 | |
91 def __call__(self, request, data): | |
92 | |
93 data['files'] = sorted(data['files'], key=lambda x: x['name'].lower()) | |
94 | |
95 if 'reverse' in self.args: | |
23
d1b1019d9254
unfold the list out of the reverseiterator which otherwise gets consumed and funky
egj@socialplanning.org
parents:
22
diff
changeset
|
96 data['files'] = list(reversed(data['files'])) |
22 | 97 |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
98 |
45
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
99 class Order(object): |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
100 """ |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
101 put the files in a particular order |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
102 """ |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
103 def __init__(self, pattern): |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
104 if '=' in pattern: |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
105 key, value = pattern.split('=', 1) |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
106 assert key == 'file' |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
107 self.file = value |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
108 else: |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
109 self.order = [i.strip() for i in pattern.split(',')] |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
110 |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
111 def __call__(self, request, data): |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
112 |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
113 if self.file: |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
114 raise NotImplementedError |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
115 |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
116 files = [] |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
117 file_hash = dict([(i['name'], i) for i in data['files']]) |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
118 for f in self.order: |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
119 files.append(file_hash.get(f, None)) |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
120 files = [ i for i in files if i is not None ] |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
121 |
650e1b62a628
add order formatter (untested)
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
122 |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
123 class FilenameDescription(FormatterBase): |
28 | 124 """ |
125 obtain the description from the filename | |
126 the file extension (if any) will be dropped and | |
127 spaces will be substituted for underscores | |
128 """ | |
129 # TODO : deal with CamelCaseFilenames | |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
130 |
51
8002dcdb8e82
add "-" to list of FilenameDescription separators
Jeff Hammel <jhammel@mozilla.com>
parents:
45
diff
changeset
|
131 separators = ['_', '-'] # space substitute separators |
53
9c15bde43ae6
dont capitalize unimportant words
Jeff Hammel <jhammel@mozilla.com>
parents:
51
diff
changeset
|
132 lesser_words = [ 'or', 'a', 'the', 'on', 'of' ] # unimportant words |
51
8002dcdb8e82
add "-" to list of FilenameDescription separators
Jeff Hammel <jhammel@mozilla.com>
parents:
45
diff
changeset
|
133 |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
134 def __call__(self, request, data): |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
135 for f in data['files']: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
136 if f['description'] is None: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
137 description = f['name'] |
28 | 138 if '.' in description: |
139 description = description.rsplit('.', 1)[0] | |
17
eab191e0b9b3
meaningful descriptions from filenames
k0s <k0scist@gmail.com>
parents:
16
diff
changeset
|
140 decription = description.strip('_') |
51
8002dcdb8e82
add "-" to list of FilenameDescription separators
Jeff Hammel <jhammel@mozilla.com>
parents:
45
diff
changeset
|
141 for separator in self.separators: |
8002dcdb8e82
add "-" to list of FilenameDescription separators
Jeff Hammel <jhammel@mozilla.com>
parents:
45
diff
changeset
|
142 if separator in description: |
53
9c15bde43ae6
dont capitalize unimportant words
Jeff Hammel <jhammel@mozilla.com>
parents:
51
diff
changeset
|
143 description = ' '.join([(i in self.lesser_words) and i or i.title() |
9c15bde43ae6
dont capitalize unimportant words
Jeff Hammel <jhammel@mozilla.com>
parents:
51
diff
changeset
|
144 for i in description.split(separator)]) |
9c15bde43ae6
dont capitalize unimportant words
Jeff Hammel <jhammel@mozilla.com>
parents:
51
diff
changeset
|
145 description = description[0].upper() + description[1:] |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
146 f['description'] = description |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
147 |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
148 |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
149 class TitleDescription(FormatterBase): |
28 | 150 """ |
151 splits a description into a title and a description via a separator in | |
152 the description. The template will now have an additional variable, | |
153 'title', per file | |
154 Arguments: | |
155 * separator: what separator to use (':' by default) | |
156 """ | |
157 # XXX what about setting the page title? | |
9
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
158 |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
159 defaults = { 'separator': ':' } |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
160 |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
161 def __call__(self, request, data): |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
162 for f in data['files']: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
163 if f['description'] and self.separator in f['description']: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
164 title, description = f['description'].split(self.separator, 1) |
39
677e2fe1239c
using a blank title will have the title be the filename
Jeff Hammel <jhammel@mozilla.com>
parents:
35
diff
changeset
|
165 title = title.strip() |
677e2fe1239c
using a blank title will have the title be the filename
Jeff Hammel <jhammel@mozilla.com>
parents:
35
diff
changeset
|
166 description = description.strip() |
677e2fe1239c
using a blank title will have the title be the filename
Jeff Hammel <jhammel@mozilla.com>
parents:
35
diff
changeset
|
167 if not title: |
677e2fe1239c
using a blank title will have the title be the filename
Jeff Hammel <jhammel@mozilla.com>
parents:
35
diff
changeset
|
168 title = f['name'] |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
169 f['title'] = title |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
170 f['description'] = description |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
171 else: |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
172 f['title'] = f['description'] |
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
173 f['description'] = None |
10 | 174 |
32
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
175 class Links(FormatterBase): |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
176 """ |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
177 allow list of links per item: |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
178 foo.html = description of foo; [PDF]=foo.pdf; [TXT]=foo.txt |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
179 """ |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
180 |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
181 defaults = { 'separator': ';' } |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
182 |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
183 def __call__(self, request, data): |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
184 for f in data['files']: |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
185 if f['description'] and self.separator in f['description']: |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
186 f['description'], links = f['description'].split(self.separator, 1) |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
187 links = links.split(self.separator) |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
188 assert min(['=' in link for link in links]) |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
189 links = [ link.split('=', 1) for link in links ] |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
190 f['links'] = [ { 'text': text, 'link': link } |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
191 for text, link in links ] |
983c13e1b71f
included a links formatter; restructure index template
k0s <k0scist@gmail.com>
parents:
24
diff
changeset
|
192 |
35
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
193 |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
194 class Up(object): |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
195 """ |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
196 provides an up link to the path above: |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
197 /up = .. |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
198 """ |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
199 |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
200 def __init__(self, arg): |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
201 self.up = arg.strip() |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
202 |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
203 def __call__(self, request, data): |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
204 path = request.path_info |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
205 if (path != '/') and self.up: |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
206 data['files'].insert(0, {'path': '..', |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
207 'name': path.rsplit('/', 1)[0] + '/', |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
208 'description': self.up}) |
20e3d138dc98
better way of doing up; this breaks old behaviour so incrementing version
k0s <k0scist@gmail.com>
parents:
34
diff
changeset
|
209 |
16
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
210 class CSS(object): |
28 | 211 """specify CSS used (whitespace separated list)""" |
16
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
212 |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
213 def __init__(self, arg): |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
214 self.css = arg.split() |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
215 def __call__(self, request, data): |
24 | 216 data['css'] = self.css |
16
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
217 |
33
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
218 class JavaScript(object): |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
219 """specify JS for the page""" |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
220 |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
221 def __init__(self, arg): |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
222 self.scripts = arg.split() |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
223 def __call__(self, request, data): |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
224 data['scripts'] = self.scripts |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
225 |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
226 class Favicon(object): |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
227 """specify favicons for the page""" |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
228 |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
229 def __init__(self, icon): |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
230 self.icon = icon |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
231 def __call__(self, request, data): |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
232 data['icon'] = self.icon |
e384d4569ac3
include components necessary to make decoupage feel almost like a framework
k0s <k0scist@gmail.com>
parents:
32
diff
changeset
|
233 |
16
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
234 class Include(object): |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
235 """include a file at the top of the body""" |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
236 |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
237 def __init__(self, arg): |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
238 self.include = arg |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
239 def __call__(self, request, data): |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
240 data['include'] = self.include |
985b3a7e0e88
add formatters to include css and genshi templates
k0s <k0scist@gmail.com>
parents:
12
diff
changeset
|
241 |
0
fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
242 |
9
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
243 def formatters(): |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
244 formatters = {} |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
245 for entry_point in iter_entry_points('decoupage.formatters'): |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
246 try: |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
247 formatter = entry_point.load() |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
248 except: |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
249 continue |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
250 formatters[entry_point.name] = formatter |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
251 return formatters |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
252 |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
253 def main(args=sys.argv[1:]): |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
254 for name, formatter in formatters().items(): |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
255 print '%s%s' % (name, formatter.__doc__ and ': ' + formatter.__doc__ or '') |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
256 |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
257 if __name__ == '__main__': |
ec2d0d850b83
add ability to print formatters with decoupage-formatters console_script
k0s <k0scist@gmail.com>
parents:
1
diff
changeset
|
258 main() |