X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Ftoolbox.py;h=92cfeff0ff9821ce96d43930c27e74d084202ee1;hb=58d050c9563dda95204c17b87ad10464a8863dd7;hp=4601f3feb332d777cc44d49b17c317da845e57b4;hpb=9c052e10a8ea601905c4476dd9e452e757f1341f;p=doneit diff --git a/src/toolbox.py b/src/toolbox.py index 4601f3f..92cfeff 100644 --- a/src/toolbox.py +++ b/src/toolbox.py @@ -1,10 +1,15 @@ import sys import StringIO import urllib +import urlparse from xml.dom import minidom import datetime +class NonExistent(object): + pass + + class Optional(object): """ Taglines: @@ -40,9 +45,6 @@ class Optional(object): 'Blacksheep' """ - class NonExistent(object): - pass - def __init__(self, value = NonExistent): self._value = value @@ -50,10 +52,10 @@ class Optional(object): self._value = value def clear(self): - self._value = self.NonExistent + self._value = NonExistent def is_good(self): - return self._value is not self.NonExistent + return self._value is not NonExistent def get_nothrow(self, default = None): return self._value if self.is_good() else default @@ -75,6 +77,27 @@ class Optional(object): id(self), self.get_nothrow("Nothing") ) + def __not__(self): + return not self.is_good() + + def __eq__(self, rhs): + return self._value == rhs._value + + def __ne__(self, rhs): + return self._value != rhs._value + + def __lt__(self, rhs): + return self._value < rhs._value + + def __le__(self, rhs): + return self._value <= rhs._value + + def __gt__(self, rhs): + return self._value > rhs._value + + def __ge__(self, rhs): + return self._value >= rhs._value + def open_anything(source, alternative=None): """URI, filename, or string --> stream @@ -134,6 +157,36 @@ def load_xml(source, alternative=None): return xmldoc +def abbreviate(text, expectedLen): + singleLine = " ".join(text.split("\n")) + lineLen = len(singleLine) + if lineLen <= expectedLen: + return singleLine + + abbrev = "..." + + leftLen = expectedLen // 2 - 1 + rightLen = max(expectedLen - leftLen - len(abbrev) + 1, 1) + + abbrevText = singleLine[0:leftLen] + abbrev + singleLine[-rightLen:-1] + assert len(abbrevText) <= expectedLen, "Too long: '%s'" % abbrevText + return abbrevText + + +def abbreviate_url(url, domainLength, pathLength): + urlParts = urlparse.urlparse(url) + + netloc = urlParts.netloc + path = urlParts.path + + pathLength += max(domainLength - len(netloc), 0) + domainLength += max(pathLength - len(path), 0) + + netloc = abbreviate(netloc, domainLength) + path = abbreviate(path, pathLength) + return netloc + path + + def is_same_year(targetDate, todaysDate = datetime.datetime.today()): return targetDate.year == todaysDate.year