diff --git a/composer/layout/browser/standard.pt b/composer/layout/browser/standard.pt index 5799b5c..54bf7c1 100644 --- a/composer/layout/browser/standard.pt +++ b/composer/layout/browser/standard.pt @@ -5,7 +5,7 @@ + tal:content="options/title|view/page/headTitle|view/title|default"> Powered by Zope 3 diff --git a/util/jeep.py b/util/jeep.py index f545561..a4fa305 100644 --- a/util/jeep.py +++ b/util/jeep.py @@ -30,7 +30,7 @@ class Jeep(object): _attributes = ('_sequence',) - def __init__(self, seq=[]): + def __init__(self, seq=[], **kw): if isinstance(seq, Jeep): self._sequence = list(seq.keys()) for key, value in seq.items(): @@ -44,6 +44,8 @@ class Jeep(object): object.__setattr__(self, attr, value) else: self.append(item) + for k, v in kw.items(): + self[k] = v def __len__(self): return len(self._sequence) diff --git a/util/tests.py b/util/tests.py index 5fd3764..75b23df 100755 --- a/util/tests.py +++ b/util/tests.py @@ -28,6 +28,7 @@ def test_suite(): doctest.DocFileSuite('json.txt', optionflags=flags), doctest.DocFileSuite('jeep.txt', optionflags=flags), doctest.DocFileSuite('randomname.txt', optionflags=flags), + doctest.DocFileSuite('version.txt', optionflags=flags), )) if __name__ == '__main__': diff --git a/util/version.py b/util/version.py new file mode 100644 index 0000000..b08eedc --- /dev/null +++ b/util/version.py @@ -0,0 +1,94 @@ +# +# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# +# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Collect version information from different packages. +""" + +revision = '$Id$' +version = '0.4' +package = 'cybertools.util.version' + + +from cybertools.util.jeep import Jeep +from cybertools.util.property import lzprop + + +undefined = object() +dummyRevision = '$Id$' + + +class Versions(dict): + + def add(self, packageName=None, versionString=None, rev=None): + packageName = packageName or package + versionString = versionString or version + self[packageName] = Version(packageName, versionString, rev) + + def __getitem__(self, key): + return self.get(key) + + def get(self, key, default=undefined): + if default is undefined: + default = Version(key, '0.0', dummyRevision) + return super(Versions, self).get(key, default) + + +versions = Versions() + + +class Version(object): + """ Provides the version of a package in various formats. + """ + + def __init__(self, package, versionString, rev=None): + self.package = package + self.versionString = versionString or version + self.revision = rev or revision + + @lzprop + def revparts(self): + return self.revision.split()[2:5] + + @lzprop + def parts(self): + revnum, revdate, revtime = self.revparts + return Jeep(version=self.versionTuple, + revnum=revnum, + revdate=revdate, + revtime=revtime, + revdatetime = ' '.join((revdate, revtime)), + ) + + @lzprop + def versionTuple(self): + return tuple(self.versionString.split('.')) + + @lzprop + def short(self): + return self.versionString + + @lzprop + def long(self): + return '%s-%s' % (self.versionString, self.parts.revnum) + + def __str__(self): + return self.long + + def __repr__(self): + return '%s %s' % (self.package, self.long) diff --git a/util/version.txt b/util/version.txt new file mode 100644 index 0000000..f176426 --- /dev/null +++ b/util/version.txt @@ -0,0 +1,23 @@ +=================================================== +Collect Version Information from Different Packages +=================================================== + +$Id$ + + >>> from cybertools.util.version import versions + + >>> versions.add() + + >>> v = versions.get('cybertools.util.version') + >>> v + cybertools.util.version 0.4-3005 + >>> print v + 0.4-3005 + >>> v.short + '0.4' + + >>> v = versions.get('foo') + >>> v + foo 0.0-0000 + >>> print v + 0.0-0000