[Pymoul-svn] SF.net SVN: pymoul: [54] pymoul/trunk
Status: Alpha
Brought to you by:
tiran
From: <ti...@us...> - 2007-01-20 20:00:57
|
Revision: 54 http://pymoul.svn.sourceforge.net/pymoul/?rev=54&view=rev Author: tiran Date: 2007-01-20 12:00:57 -0800 (Sat, 20 Jan 2007) Log Message: ----------- Removed stupid tabs Modified Paths: -------------- pymoul/trunk/GPL.txt pymoul/trunk/src/moul/file/kiimage.py pymoul/trunk/src/moul/file/localization.py pymoul/trunk/src/moul/file/tests/test_kiimage.py Modified: pymoul/trunk/GPL.txt =================================================================== --- pymoul/trunk/GPL.txt 2007-01-20 16:32:00 UTC (rev 53) +++ pymoul/trunk/GPL.txt 2007-01-20 20:00:57 UTC (rev 54) @@ -1,12 +1,12 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -56,7 +56,7 @@ The precise terms and conditions for copying, distribution and modification follow. - GNU GENERAL PUBLIC LICENSE + GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains @@ -255,7 +255,7 @@ of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - NO WARRANTY + NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN @@ -277,9 +277,9 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS + END OF TERMS AND CONDITIONS - Appendix: How to Apply These Terms to Your New Programs + Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it Modified: pymoul/trunk/src/moul/file/kiimage.py =================================================================== --- pymoul/trunk/src/moul/file/kiimage.py 2007-01-20 16:32:00 UTC (rev 53) +++ pymoul/trunk/src/moul/file/kiimage.py 2007-01-20 20:00:57 UTC (rev 54) @@ -27,6 +27,9 @@ JPEG_HEADER = "\377\330\377" +class KiImageError(ValueError): + pass + class KiImage(object): """Ki image handler @@ -36,15 +39,15 @@ def __init__(self, fd_name): if isinstance(fd_name, basestring): - name = fd_name - fd = open(fd_name, 'rb') + name = fd_name + fd = open(fd_name, 'rb') else: - name = getattr(fd_name, 'name', '<UNKNOWN>') - fd = fd_name - + name = getattr(fd_name, 'name', '<UNKNOWN>') + fd = fd_name + self._filename = name self._fd = fd - self._size = None + self._size = None def close(self): if self._fd: @@ -53,7 +56,7 @@ def getSize(self): if self._size is not None: - return self._size + return self._size fd = self._fd opos = fd.tell() size = 0 @@ -62,15 +65,15 @@ size = fd.tell() finally: fd.seek(opos) - self._size = size + self._size = size return size def moulHeaderToSize(self, header=None): # XXX use struct if header is None: - fd = self._fd - fd.seek(0) - header = fd.read(4) + fd = self._fd + fd.seek(0) + header = fd.read(4) size = 0 for i, l in enumerate(header): size += ord(l) << 8*i @@ -79,7 +82,7 @@ def sizeToMoulHeader(self, size=None): # XXX use struct if size is None: - size = self.getSize() + 4 # XXX +4 ? + size = self.getSize() leading = 4* [None] for i in (3,2,1,0): l = size >> 8*i @@ -113,18 +116,19 @@ def removeMoulHeader(self): if not self.isMoulImage(): - raise ValueError('Image has no MOUL header') + raise KiImageError('Image has no MOUL header') out = tempfile.TemporaryFile() fd = self._fd fd.seek(4) out.write(fd.read()) + out.seek(0) return out def addMoulHeader(self): if self.isMoulImage(): - raise ValueError('Image has already a MOUL header') + raise KiImageError('Image has already a MOUL header') if not self.isJpeg(): - raise ValueError('File is not a JPEG') + raise KiImageError('File is not a JPEG') out = tempfile.TemporaryFile() header = self.sizeToMoulHeader() fd = self._fd @@ -132,4 +136,5 @@ out.write(header) fd.seek(0) out.write(fd.read()) + out.seek(0) return out Modified: pymoul/trunk/src/moul/file/localization.py =================================================================== --- pymoul/trunk/src/moul/file/localization.py 2007-01-20 16:32:00 UTC (rev 53) +++ pymoul/trunk/src/moul/file/localization.py 2007-01-20 20:00:57 UTC (rev 54) @@ -36,12 +36,22 @@ from moul.config import getMoulDir from moul.log import LOG +def _add(d, key, value): + lst = d.setdefault(key, []) + lst.append(value) + class TranslationRegistry(dict): """Registry for Translation objects""" + __slot__ = ('_bylanguage', '_byage', '_byset', '_byelement') + def __new__(cls, *args, **kwargs): - inst = dict.__new__(cls, *args, **kwargs) - return inst + self = dict.__new__(cls, *args, **kwargs) + self._bylanguage = {} + self._byage = {} + self._byset = {} + self._byelement = {} + return self def register(self, translation): key = translation.key() @@ -50,6 +60,10 @@ (translation.fname, str(key))) LOG.error("TranslationRegistry: %s" % msg) raise KeyError(msg) + _add(self._bylanguage, translation.language, key) + _add(self._byage, translation.age, key) + _add(self._byset, translation.set, key) + _add(self._byelement, translation.element, key) self[key] = translation def __setitem__(self, key, translation): @@ -59,24 +73,34 @@ translationRegistry = TranslationRegistry() registerTranslation = translationRegistry.register -class Translation(object): - """Translation object""" +class Translation(unicode): + """Translation object - def __init__(self, age, set, element, language, content, fname=''): + >>> Translation(u"earth", u"journal", u"mybook", u"english", u"text", "file") + u'text' + """ + __slots__ = ('_age', '_set', '_element', '_language', '_fname') + + def __new__(cls, age, set, element, language, content, fname=''): + self = unicode.__new__(cls, content) for attr in age, set, element, language: assert attr - self.age = age - self.set = set - self.element = element - self.language = language - self.content = content - - self.fname = fname + self._age = age + self._set = set + self._element = element + self._language = language LOG.debug("New translation file(%s): %s" % (fname, self.key)) + return self def key(self): - return (self.age, self.set, self.element, self.language) + return (self._age, self._set, self._element, self._language) + @property + def language(self): return self._language + + @property + def age(self): return self._age + def __str__(self): return self.content Modified: pymoul/trunk/src/moul/file/tests/test_kiimage.py =================================================================== --- pymoul/trunk/src/moul/file/tests/test_kiimage.py 2007-01-20 16:32:00 UTC (rev 53) +++ pymoul/trunk/src/moul/file/tests/test_kiimage.py 2007-01-20 20:00:57 UTC (rev 54) @@ -27,6 +27,8 @@ from doctest import DocTestSuite from moul.file.kiimage import KiImage +from moul.file.kiimage import KiImageError +from moul.file.kiimage import JPEG_HEADER base = os.path.dirname(__file__) kiimg = os.path.join(base, 'avatar.jpg') @@ -36,7 +38,7 @@ def setUp(self): self._ki = open(kiimg, 'rb') - self._clean = open(kiclean, 'rb') + self._clean = open(kiclean, 'rb') def tearDown(self): self._ki.close() @@ -44,23 +46,44 @@ def test_openname(self): k = KiImage(kiimg) - self.failUnless(k.isMoulImage()) - self.failIf(k.isJpeg()) - - k = KiImage(kiclean) - self.failIf(k.isMoulImage()) - self.failUnless(k.isJpeg()) + self.failUnless(k.verifyMoulHeader()) + self.failUnless(k.isMoulImage()) + self.failIf(k.isJpeg()) + + k = KiImage(kiclean) + self.failIf(k.verifyMoulHeader()) + self.failIf(k.isMoulImage()) + self.failUnless(k.isJpeg()) def test_openfd(self): k = KiImage(self._ki) - self.failUnless(k.isMoulImage()) - self.failIf(k.isJpeg()) - - k = KiImage(self._clean) - self.failIf(k.isMoulImage()) - self.failUnless(k.isJpeg()) + self.failUnless(k.verifyMoulHeader()) + self.failUnless(k.isMoulImage()) + self.failIf(k.isJpeg()) + + k = KiImage(self._clean) + self.failIf(k.verifyMoulHeader()) + self.failIf(k.isMoulImage()) + self.failUnless(k.isJpeg()) - + def test_removeheader(self): + k = KiImage(self._ki) + fd = k.removeMoulHeader() + data = fd.read() + cleandata = self._clean.read() + self.failUnlessEqual(len(data), len(cleandata)) + self.failUnlessEqual(data, cleandata, + "file mismatch %r:%r" % (data[:8], cleandata[:8])) + + def test_addheader(self): + k = KiImage(self._clean) + fd = k.addMoulHeader() + data = fd.read() + kidata = self._ki.read() + self.failUnlessEqual(len(data), len(kidata)) + self.failUnlessEqual(data, kidata, + "file mismatch %r:%r" % (data[:8], kidata[:8])) + def test_suite(): return unittest.TestSuite(( unittest.makeSuite(KiImageTest), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |