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 @@ +__all__ = ['OfflineImap'] + +__productname__ = 'OfflineIMAP' +__version__ = "6.3.1" +__copyright__ = "Copyright (C) 2002 - 2010 John Goerzen" +__author__ = "John Goerzen" +__author_email__= "john@complete.org" +__description__ = "Disconnected Universal IMAP Mail Synchronization/Reader Support" +__bigcopyright__ = """%(__productname__)s %(__version__)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://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 - -__all__ = ['ui', 'folder', 'repository', 'mbnames', 'threadutil', 'init'] - - 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@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 - -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" )