[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.
|