changeset 68:4094bee13154

quick cleanup
author Jeff Hammel <jhammel@mozilla.com>
date Fri, 03 Aug 2012 23:46:29 -0700
parents fdb77c57bd22
children 9fac58348520
files decoupage/formatters.py
diffstat 1 files changed, 18 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/decoupage/formatters.py
+++ b/decoupage/formatters.py
@@ -4,23 +4,23 @@ import random
 import sys
 from fnmatch import fnmatch
 from pkg_resources import iter_entry_points
 
 ### abstract base classes for formatters
 
 class FormatterBase(object):
     """
-    abstract base class if you want to use __init__ methods 
-    in the form of 
+    abstract base class if you want to use __init__ methods
+    in the form of
     'arg1, arg2, arg3, kw1=foo, kw2=bar, kw3=baz
     """
 
     defaults = {} # default values for attrs to be set on the instance
-    
+
     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
             for key, default in self.defaults.items():
@@ -32,17 +32,17 @@ class FormatterBase(object):
             value = self.kw.pop(key, default)
             setattr(self, key, value)
 
 
 ### formatters
 
 class Ignore(object):
     """
-    ignore files of a glob patterns.  
+    ignore files of a glob patterns.
     These files will not be linked to in the template.
     e.g. /ignore = .* *.pdf  # don't list dotfiles and PDFs
     """
 
     def __init__(self, ignore):
         self.match = ignore.split()
 
     def __call__(self, request, data):
@@ -53,52 +53,53 @@ class Ignore(object):
                     break
             else:
                 _files.append(f)
         data['files'] = _files
 
 
 class All(object):
     """
-    only pass files of a certain pattern; 
+    only pass files of a certain pattern;
     the inverse of ignore
     calling all with no arguments means only files with descriptions are used
     """
-    
+
     def __init__(self, pattern):
         self.match = pattern.split()
 
     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 Sort(FormatterBase):
     """
-    determines how to sort the files in a directory; 
+    determines how to sort the files in a directory;
     right now only by case-insensitive alphabetically
     * reverse : reverse the order of the sorting
     """
     defaults = {'order': 'name'}
-    
+
     def __init__(self, pattern):
         FormatterBase.__init__(self, pattern)
         self.orders = {'name': self.name,
                        'random': self.random,
                        }
-    
+        # TODO: date
+
     def __call__(self, request, data):
 
         sort = self.orders.get(request.GET.get('order', self.order), self.name)
         data['files'] = sort(data['files'])
 
         if 'reverse' in self.args:
             data['files'] = list(reversed(data['files']))
 
@@ -116,17 +117,17 @@ class Order(object):
     """
     def __init__(self, pattern):
         if '=' in pattern:
             key, value = pattern.split('=', 1)
             assert key == 'file'
             self.file = value
         else:
             self.order = [i.strip() for i in pattern.split(',')]
-    
+
     def __call__(self, request, data):
 
         if self.file:
             raise NotImplementedError
 
         files = []
         file_hash = dict([(i['name'], i) for i in data['files']])
         for f in self.order:
@@ -157,26 +158,26 @@ class FilenameDescription(FormatterBase)
                         description = ' '.join([(i in self.lesser_words) and i or i.title()
                                                 for i in description.split(separator)])
                         description = description[0].upper() + description[1:]
                 f['description'] = description
 
 
 class TitleDescription(FormatterBase):
     """
-    splits a description into a title and a description via a separator in 
-    the description.  The template will now have an additional variable, 
+    splits a description into a title and a description via a separator in
+    the description.  The template will now have an additional variable,
     'title', per file
     Arguments:
     * separator: what separator to use (':' by default)
     """
     # XXX what about setting the page title?
 
     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)
                 title = title.strip()
                 description = description.strip()
                 if not title:
                     title = f['name']
@@ -186,17 +187,17 @@ class TitleDescription(FormatterBase):
                 f['title'] = f['description']
                 f['description'] = None
 
 class Links(FormatterBase):
     """
     allow list of links per item:
     foo.html = description of foo; [PDF]=foo.pdf; [TXT]=foo.txt
     """
-    
+
     defaults = { 'separator': ';' }
 
     def __call__(self, request, data):
         for f in data['files']:
             if f['description'] and self.separator in f['description']:
                 f['description'], links = f['description'].split(self.separator, 1)
                 links = links.split(self.separator)
                 assert min(['=' in link for link in links])
@@ -208,17 +209,17 @@ class Links(FormatterBase):
 class Up(object):
     """
     provides an up link to the path above:
     /up = ..
     """
 
     def __init__(self, arg):
         self.up = arg.strip()
-    
+
     def __call__(self, request, data):
         path = request.path_info
         if (path != '/') and self.up:
             data['files'].insert(0, {'path': '..',
                                      'type': 'directory',
                                      'name': path.rsplit('/', 1)[0] + '/',
                                      'description': self.up})
 
@@ -249,17 +250,17 @@ class Favicon(object):
 class Include(object):
     """include a file at the top of the body"""
 
     def __init__(self, arg):
         self.include = arg
     def __call__(self, request, data):
         data['include'] = self.include
 
-        
+
 def formatters():
     formatters = {}
     for entry_point in iter_entry_points('decoupage.formatters'):
         try:
             formatter = entry_point.load()
         except:
             continue
         formatters[entry_point.name] = formatter