[gnue] r9827 - trunk/gnue-common/src/setup

[email protected]
Newsgroups gmane.comp.cms.gnue.cvs
Message-ID <[email protected]>
Author: johannes
Date: 2007-11-22 04:00:10 -0600 (Thu, 22 Nov 2007)
New Revision: 9827

Modified:
   trunk/gnue-common/src/setup/ChangeLog.py
Log:
PEP8


Modified: trunk/gnue-common/src/setup/ChangeLog.py
===================================================================
--- trunk/gnue-common/src/setup/ChangeLog.py	2007-11-22 08:48:49 UTC (rev 9826)
+++ trunk/gnue-common/src/setup/ChangeLog.py	2007-11-22 10:00:10 UTC (rev 9827)
@@ -20,125 +20,194 @@
 # Copyright 2001-2007 Free Software Foundation
 #
 # $Id$
+"""
+Build a ChangeLog file based on the log information from subversion
+"""
 
-SVNCMD='svn log -v --xml'
-
 import xml.parsers.expat
-import tempfile, os, sys, string
+import tempfile
+import os
+import sys
 
-# -----------------------------------------------------------------------------
+
+__all__ = ['Parser', 'build']
+
+SVNCMD = 'svn log -v --xml'
+
+# =============================================================================
 # The Parser
-# -----------------------------------------------------------------------------
+# =============================================================================
 
 class Parser:
-    def __init__ (self, input, output):
+    """
+    An EXPAT parser for the XML log information from SubVersion.
+    """
 
-        self.out = output
-        self.package = os.path.basename (os.getcwd ())
+    # -------------------------------------------------------------------------
+    # Constructor
+    # -------------------------------------------------------------------------
 
-        p = xml.parsers.expat.ParserCreate ()
+    def __init__(self, infile, outfile):
 
-        p.StartElementHandler = self.start_element
-        p.EndElementHandler = self.end_element
-        p.CharacterDataHandler = self.char_data
+        self.out = outfile
+        self.package = os.path.basename(os.getcwd())
 
-        p.ParseFile (input)
+        parser = xml.parsers.expat.ParserCreate()
 
+        parser.StartElementHandler = self.start_element
+        parser.EndElementHandler = self.end_element
+        parser.CharacterDataHandler = self.char_data
+
         self.paths = []
         self.revision = ''
+        self.date = ''
+        self.author = ''
+        self.text = ''
 
-    # 3 handler functions
-    def start_element (self, name, attrs):
+        parser.ParseFile(infile)
+
+
+    # -------------------------------------------------------------------------
+    # Start of an XML element
+    # -------------------------------------------------------------------------
+
+    def start_element(self, name, attrs):
+        """
+        Called for the start of every element.
+
+        @param name: Name of the element started
+        @type name: string
+        @param attrs: a dictionary mapping attribute names to their values
+        @type attrs: dictionary
+        """
+
         self.text = ''
+
         if name == 'logentry':
-            self.revision = string.ljust (attrs ['revision'], 5)
+            self.revision = attrs['revision'].ljust(5)
+
         elif name == 'paths':
             self.paths = []
 
-    def end_element (self, name):
+
+    # -------------------------------------------------------------------------
+    # End of an XML element
+    # -------------------------------------------------------------------------
+
+    def end_element(self, name):
+        """
+        Called for the end of every element
+
+        @param name: name of the element ended
+        @type name: string
+        """
+
         if name == 'logentry':
-            self.out.write ('\n')
+            self.out.write('\n')
+
         elif name == 'author':
             self.author = self.text
+
         elif name == 'path':
-            p = string.split (self.text, '/', 3)
-            if len (p) == 4:
-                if p [2] == self.package:
-                    self.paths.append (p [3])
+            parts = self.text.split('/', 3)
+            if len(parts) == 4:
+                if parts[2] == self.package:
+                    self.paths.append(parts[3])
+
         elif name == 'msg':
-            self.out.write ('%s  Rev %s  %s\n\n' % \
+            self.out.write('%s  Rev %s  %s\n\n' % \
                             (self.date, self.revision, self.author))
-            text = '%s: %s' % (string.join (self.paths, ', '), self.text)
-            self.out.write ('\t* %s' % linewrap (text))
+            text = '%s: %s' % (', '.join(self.paths), self.text)
+            self.out.write('\t* %s' % linewrap(text))
+
         elif name == 'date':
             self.date = self.text[:10] + ' ' + self.text[11:19]
 
+
+    # -------------------------------------------------------------------------
+    # Contents of an XML element
+    # -------------------------------------------------------------------------
+
     def char_data(self, data):
+        """
+        Called for character data including normal character data, CDATA marked
+        content and ignorable whitespace.
+
+        @param data: the data being processed
+        @type data: string
+        """
         self.text += data.encode('ascii','replace')
 
+
 # -----------------------------------------------------------------------------
 # Helper function to wrap long lines
 # -----------------------------------------------------------------------------
 
-def linewrap (message, maxWidth=69, indent = '\t  '):
+def linewrap(message, max_width=69, indent = '\t  '):
+    """
+    Fold the given message so it fits into a ChangeLog entry
 
+    @param message: the message to be folded
+    @param max_width: the maximum width of a line
+    @param indent: the indentation of each line
+
+    @returns: folded message
+    """
+
     text = ''
 
-    temptext = string.strip (str (message))
-    temptext = temptext.replace ('\n\n', '\r')
-    temptext = temptext.replace ('\n', ' ')
+    temptext = str(message).strip()
+    temptext = temptext.replace('\n\n', '\r')
+    temptext = temptext.replace('\n', ' ')
 
-    buff = string.split (temptext, '\r')
+    buff = temptext.split('\r')
 
     for strings in buff:
-        while len (strings) > maxWidth:
+        while len(strings) > max_width:
 
-            index = string.rfind (strings, ' ', 0, maxWidth)
+            index = strings.rfind(' ', 0, max_width)
 
             if index > 0:
-                line = strings [:index]
+                line = strings[:index]
             else:
-                line = strings [:maxWidth]
-                index = maxWidth - 1
+                line = strings[:max_width]
+                index = max_width - 1
 
             if text != '':
                 text += indent
             text += '%s\n' % line
-            strings = strings [index+1:]
-            strings = strings.strip ()
+            strings = strings[index+1:]
+            strings = strings.strip()
 
         line = strings
         if text != '':
             text += indent
         text += '%s\n' % line
-        first = 0
+
     return text
 
+
 # -----------------------------------------------------------------------------
 # Build the ChangeLog file
 # -----------------------------------------------------------------------------
 
-def build ():
-    filename = tempfile.mktemp ('xml')
-    if os.system (SVNCMD + '> %s' % filename):
+def build():
+    """
+    Create the ChangeLog file
+    """
+    filename = tempfile.mktemp('xml')
+    if os.system(SVNCMD + '> %s' % filename):
         print 'Unable to retrieve svn log'
-        sys.exit (1)
+        sys.exit(1)
 
-    inp = open (filename)
-    out = open ('ChangeLog' ,'w')
+    inp = open(filename)
+    out = open('ChangeLog' ,'w')
 
     try:
-        Parser (inp, out)
-    except:
-        try:
-            inp.close ()
-            out.close ()
-            os.unlink (filename)
-        except:
-            pass
-        raise
+        Parser(inp, out)
 
-    # Clean up input/output files
-    inp.close ()
-    out.close ()
-    os.unlink (filename)
+    finally:
+        inp.close()
+        out.close()
+
+        os.unlink(filename)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.