[PATCHv2] Define version constants etc in __init__.py

Sebastian Spaeth Sebastian at SSpaeth.de
Wed Dec 22 11:35:41 GMT 2010


Move central constant definitions into __init__.py.  This does away
with version.py which contained nothing else and __init__.py is where
things like __VERSION__ are usually defined.

This commit also changes code to use offlineimap.__version__ rather
than offlineimap.version.__version__ as was before. Cleaned up some
duplicate or unneeded imports while touching those, formatting import
statements per PEP8 (one import per row).

Signed-off-by: Sebastian Spaeth <Sebastian at SSpaeth.de>
---
This addresses Nicolas' comments, fixes the wrong Homepage URL I had embarassingly left over and
 offlineimap/__init__.py    |   22 ++++++++++++++++++++--
 offlineimap/folder/IMAP.py |   16 +++++++++-------
 offlineimap/init.py        |    7 +++++--
 offlineimap/ui/Curses.py   |   26 ++++++++++++++------------
 offlineimap/ui/UIBase.py   |    6 +++---
 offlineimap/version.py     |   35 -----------------------------------
 setup.py                   |   12 ++++++------
 7 files changed, 57 insertions(+), 67 deletions(-)
 delete mode 100644 offlineimap/version.py

diff --git a/offlineimap/__init__.py b/offlineimap/__init__.py
index c36246c..aa7c317 100644
--- a/offlineimap/__init__.py
+++ b/offlineimap/__init__.py
@@ -1,5 +1,23 @@
-from offlineimap.init import OfflineImap
+__all__ = ['OfflineImap']
+
+__productname__ = 'OfflineIMAP'
+__version__     = "6.3.1"
+__copyright__   = "Copyright (C) 2002 - 2010 John Goerzen"
+__author__      = "John Goerzen"
+__author_email__= "john at complete.org"
+__description__ = "Disconnected Universal IMAP Mail Synchronization/Reader Support"
+__bigcopyright__ = """%(__productname__)s %(__version__)s
+%(__copyright__)s <%(__author_email__)s>""" % locals()
 
-__all__ = ['ui', 'folder', 'repository', 'mbnames', 'threadutil', 'init']
+banner = __bigcopyright__ + """
 
+This software comes with ABSOLUTELY NO WARRANTY; see the file
+COPYING for details.  This is free software, and you are welcome
+to distribute it under the conditions laid out in COPYING."""
 
+__homepage__ = "http://github.com/nicolas33/offlineimap"
+__license__  = "Licensed under the GNU GPL v2+ (v2 or any later version)."
+
+# put this last, so we don't run into circular dependencies using 
+# e.g. offlineimap.__version__.
+from offlineimap.init import OfflineImap
diff --git a/offlineimap/folder/IMAP.py b/offlineimap/folder/IMAP.py
index 927c5f4..e536b66 100644
--- a/offlineimap/folder/IMAP.py
+++ b/offlineimap/folder/IMAP.py
@@ -16,16 +16,18 @@
 #    along with this program; if not, write to the Free Software
 #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
-from Base import BaseFolder
 import imaplib
-from offlineimap import imaputil, imaplibutil
-from offlineimap.ui import UIBase
-from offlineimap.version import versionstr
-import rfc822, time, string, random, binascii, re
+import rfc822
+import string
+import random
+import binascii
+import re
 from StringIO import StringIO
 from copy import copy
 import time
-
+from Base import BaseFolder
+from offlineimap import imaputil, imaplibutil, __version__
+from offlineimap.ui import UIBase
 
 class IMAPFolder(BaseFolder):
     def __init__(self, imapserver, name, visiblename, accountname, repository):
@@ -226,7 +228,7 @@ class IMAPFolder(BaseFolder):
         headervalue += binascii.hexlify(self.getname())
         headervalue += '-%d-' % long(time.time())
         headervalue += str(self.randomgenerator.random()).replace('.', '')
-        headervalue += '-v' + versionstr
+        headervalue += '-v' + offlineimap.__version__
         return (headername, headervalue)
 
     def savemessage_addheader(self, content, headername, headervalue):
diff --git a/offlineimap/init.py b/offlineimap/init.py
index 4a7c67a..30a31ae 100644
--- a/offlineimap/init.py
+++ b/offlineimap/init.py
@@ -59,7 +59,10 @@ class OfflineImap:
     def run(self):
         """Parse the commandline and invoke everything"""
 
-        parser = OptionParser()
+        parser = OptionParser(version=offlineimap.banner,
+                              description="%s.\n\n%s" % 
+                              (offlineimap.__copyright__,
+                               offlineimap.__license__))
         parser.add_option("-1",
                   action="store_true", dest="singlethreading",
                   default=False,
@@ -90,7 +93,7 @@ class OfflineImap:
         parser.add_option("-c", dest="configfile", metavar="FILE",
                   default="~/.offlineimaprc",
                   help="Specifies a configuration file to use in lieu of "
-                       "the default, ~/.offlineimaprc.")
+                       "%default.")
 
         parser.add_option("-d", dest="debugtype", metavar="type1,[type2...]",
                   help=
diff --git a/offlineimap/ui/Curses.py b/offlineimap/ui/Curses.py
index 285d3af..9e58a95 100644
--- a/offlineimap/ui/Curses.py
+++ b/offlineimap/ui/Curses.py
@@ -16,21 +16,23 @@
 #    along with this program; if not, write to the Free Software
 #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
+from threading import Lock, Event
+import time
+import sys
+import os
+import signal
+import curses, curses.panel, curses.textpad, curses.wrapper
 from Blinkenlights import BlinkenBase
 from UIBase import UIBase
-from threading import *
-import thread, time, sys, os, signal, time
-from offlineimap import version, threadutil
-from offlineimap.threadutil import MultiLock
+import offlineimap
 
-import curses, curses.panel, curses.textpad, curses.wrapper
 
 acctkeys = '1234567890abcdefghijklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-=;/.,'
 
 class CursesUtil:
     def __init__(self):
         self.pairlock = Lock()
-        self.iolock = MultiLock()
+        self.iolock = offlineimap.threadutil.MultiLock()
         self.start()
 
     def initpairs(self):
@@ -251,7 +253,7 @@ class InputHandler:
         s.startthread()
 
     def startthread(s):
-        s.thread = threadutil.ExitNotifyThread(target = s.bgreaderloop,
+        s.thread = offlineimap.threadutil.ExitNotifyThread(target = s.bgreaderloop,
                                                name = "InputHandler loop")
         s.thread.setDaemon(1)
         s.thread.start()
@@ -321,7 +323,7 @@ class Blinkenlights(BlinkenBase, UIBase):
         s.setupwindows()
         s.inputhandler = InputHandler(s.c)
         s.gettf().setcolor('red')
-        s._msg(version.banner)
+        s._msg(offlineimap.banner)
         s.inputhandler.set_bgchar(s.keypress)
         signal.signal(signal.SIGWINCH, s.resizehandler)
         s.resizelock = Lock()
@@ -454,10 +456,10 @@ class Blinkenlights(BlinkenBase, UIBase):
         else:
             color = curses.A_REVERSE
         s.bannerwindow.bkgd(' ', color) # Fill background with that color
-        s.bannerwindow.addstr("%s %s" % (version.productname,
-                                         version.versionstr))
-        s.bannerwindow.addstr(0, s.bannerwindow.getmaxyx()[1] - len(version.copyright) - 1,
-                              version.copyright)
+        s.bannerwindow.addstr("%s %s" % (offlineimap.__productname__,
+                                         offlineimap.__version__))
+        s.bannerwindow.addstr(0, s.bannerwindow.getmaxyx()[1] - len(offlineimap.__copyright__) - 1,
+                              offlineimap.__copyright__)
         
         s.bannerwindow.noutrefresh()
 
diff --git a/offlineimap/ui/UIBase.py b/offlineimap/ui/UIBase.py
index bb927c0..26db6b2 100644
--- a/offlineimap/ui/UIBase.py
+++ b/offlineimap/ui/UIBase.py
@@ -61,8 +61,8 @@ class UIBase:
     def setlogfd(s, logfd):
         s.logfile = logfd
         logfd.write("This is %s %s\n" % \
-                    (offlineimap.version.productname,
-                     offlineimap.version.versionstr))
+                    (offlineimap.__productname__,
+                     offlineimap.__version__))
         logfd.write("Python: %s\n" % sys.version)
         logfd.write("Platform: %s\n" % sys.platform)
         logfd.write("Args: %s\n" % sys.argv)
@@ -174,7 +174,7 @@ class UIBase:
         where the UI should do its setup -- TK, for instance, would
         create the application window here."""
         if s.verbose >= 0:
-            s._msg(offlineimap.version.banner)
+            s._msg(offlineimap.banner)
 
     def connecting(s, hostname, port):
         if s.verbose < 0:
diff --git a/offlineimap/version.py b/offlineimap/version.py
deleted file mode 100644
index 046cb1e..0000000
--- a/offlineimap/version.py
+++ /dev/null
@@ -1,35 +0,0 @@
-productname = 'OfflineIMAP'
-versionstr = "6.3.1"
-
-versionlist = versionstr.split(".")
-major = versionlist[0]
-minor = versionlist[1]
-patch = versionlist[2]
-copyright = "Copyright (C) 2002 - 2009 John Goerzen"
-author = "John Goerzen"
-author_email = "jgoerzen at complete.org"
-description = "Disconnected Universal IMAP Mail Synchronization/Reader Support"
-bigcopyright = """%(productname)s %(versionstr)s
-%(copyright)s <%(author_email)s>""" % locals()
-
-banner = bigcopyright + """
-This software comes with ABSOLUTELY NO WARRANTY; see the file
-COPYING for details.  This is free software, and you are welcome
-to distribute it under the conditions laid out in COPYING."""
-
-homepage = "http://software.complete.org/offlineimap/"
-license = """Copyright (C) 2002 - 2009 John Goerzen <jgoerzen at complete.org>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA"""
diff --git a/setup.py b/setup.py
index 92fb1fd..f76a834 100644
--- a/setup.py
+++ b/setup.py
@@ -27,15 +27,15 @@ from distutils.core import setup
 import offlineimap.version
 
 setup(name = "offlineimap",
-      version = offlineimap.version.versionstr,
-      description = offlineimap.version.description,
-      author = offlineimap.version.author,
-      author_email = offlineimap.version.author_email,
-      url = offlineimap.version.homepage,
+      version = offlineimap.__version__,
+      description = offlineimap.__description__,
+      author = offlineimap.__author__,
+      author_email = offlineimap.__author_email__,
+      url = offlineimap.__homepage__,
       packages = ['offlineimap', 'offlineimap.folder',
                   'offlineimap.repository', 'offlineimap.ui'],
       scripts = ['bin/offlineimap'],
-      license = offlineimap.version.copyright + \
+      license = offlineimap.__copyright__ + \
                 ", Licensed under the GPL version 2"
 )
 
-- 
1.7.1





More information about the OfflineIMAP-project mailing list