Mercurial > hg > decoupage
diff decoupage/formatters.py @ 0:fa2005f769eb
adding decoupage from http://my-svn.assembla.com/svn/arbez/decoupage r355
author | k0s <k0scist@gmail.com> |
---|---|
date | Mon, 07 Sep 2009 13:40:22 -0400 |
parents | |
children | 93ab6d1968bd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/decoupage/formatters.py Mon Sep 07 13:40:22 2009 -0400 @@ -0,0 +1,95 @@ +from fnmatch import fnmatch + +class FormatterBase(object): + """ + abstract base class if you want to use __init__ methods + in the form of + 'arg1, arg2, arg3, kw1=foo, kw2=bar, kw3=baz + """ + + defaults = {} + + def __init__(self, string): + args = [ i.strip() for i in string.split(',') ] + for index, arg in enumerate(args): + if '=' in arg: + break + else: + self.args = args + return + self.args = args[:index] + self.kw = dict([i.split('=', 1) for i in args[index:]]) + for key, default in defaults.items(): + if key not in self.kw: + self.kw[key] = default + +class Ignore(object): + """ignore files of a certain pattern""" + + + def __init__(self, ignore): + self.match = [ i.strip() for i in ignore.split(',') + if i.strip() ] + + def __call__(self, request, data): + _files = [] + for f in data['files']: + for pattern in self.match: + if fnmatch(f['name'], pattern): + break + else: + _files.append(f) + data['files'] = _files + + +class All(object): + """ + only pass files of a certain pattern; + the inverse of ignore + """ + + def __init__(self, pattern): + self.match = [ i.strip() for i in pattern.split(',') + if i.strip() ] + + + def __call__(self, request, data): + _files = [] + for f in data['files']: + if self.match: + for pattern in self.match: + if fnmatch(f['name'], pattern): + _files.append(f) + break + else: + # use only files where the description is not None + if f['description'] is not None: + _files.append(f) + data['files'] = _files + + +class FilenameDescription(FormatterBase): + + def __call__(self, request, data): + for f in data['files']: + if f['description'] is None: + description = f['name'] + if 'strip' in self.args: + description = description.rsplit('.', 1)[0] + f['description'] = description + + +class TitleDescription(FormatterBase): + defaults = { 'separator': ':' } + + def __call__(self, request, data): + for f in data['files']: + if f['description'] and self.separator in f['description']: + title, description = f['description'].split(self.separator, 1) + f['title'] = title + f['description'] = description + else: + f['title'] = f['description'] + f['description'] = None + +