Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(100)

Delta Between Two Patch Sets: translate/storage/base.py

Issue 65: xliff2po & po2xliff should handle context SVN Base: https://translate.svn.sourceforge.net/svnroot/translate/src/trunk/
Left Patch Set: Added "id's" to context-group names Created 1 year, 4 months ago
Right Patch Set: A more complete patch, supporting CPO and pypo Created 1 year, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: View regular side by side diff
Right: View regular side by side diff
LEFTRIGHT
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 # 3 #
4 # Copyright 2006-2008 Zuza Software Foundation 4 # Copyright 2006-2008 Zuza Software Foundation
5 # 5 #
6 # This file is part of translate. 6 # This file is part of translate.
7 # 7 #
8 # translate is free software; you can redistribute it and/or modify 8 # translate is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by 9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or 10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version. 11 # (at your option) any later version.
12 # 12 #
13 # translate is distributed in the hope that it will be useful, 13 # translate is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details. 16 # GNU General Public License for more details.
17 # 17 #
18 # You should have received a copy of the GNU General Public License 18 # You should have received a copy of the GNU General Public License
19 # along with translate; if not, write to the Free Software 19 # along with translate; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 21
22 """Base classes for storage interfaces. 22 """Base classes for storage interfaces.
23 23
24 @organization: Zuza Software Foundation 24 @organization: Zuza Software Foundation
25 @copyright: 2006-2007 Zuza Software Foundation 25 @copyright: 2006-2007 Zuza Software Foundation
26 @license: U{GPL <http://www.fsf.org/licensing/licenses/gpl.html>} 26 @license: U{GPL <http://www.fsf.org/licensing/licenses/gpl.html>}
27 """ 27 """
28 28
29 try: 29 try:
30 import cPickle as pickle 30 import cPickle as pickle
31 except: 31 except:
32 import pickle 32 import pickle
33 from exceptions import NotImplementedError 33 from exceptions import NotImplementedError
34 34
35 def force_override(method, baseclass): 35 def force_override(method, baseclass):
36 """Forces derived classes to override method.""" 36 """Forces derived classes to override method."""
37 37
38 if type(method.im_self) == type(baseclass): 38 if type(method.im_self) == type(baseclass):
39 # then this is a classmethod and im_self is the actual class 39 # then this is a classmethod and im_self is the actual class
40 actualclass = method.im_self 40 actualclass = method.im_self
41 else: 41 else:
42 actualclass = method.im_class 42 actualclass = method.im_class
43 if actualclass != baseclass: 43 if actualclass != baseclass:
44 raise NotImplementedError("%s does not reimplement %s as required by %s" % (actualclass.__name__, method.__name__, baseclass.__name__)) 44 raise NotImplementedError("%s does not reimplement %s as required by %s" % (actualclass.__name__, method.__name__, baseclass.__name__))
45 45
46 class ParseError(Exception): 46 class ParseError(Exception):
47 pass 47 pass
48 48
49 class TranslationUnit(object): 49 class TranslationUnit(object):
50 """Base class for translation units. 50 """Base class for translation units.
(...skipping 413 matching lines...) Show 10 above Show 10 below
464 return newstore 464 return newstore
465 parsestring = classmethod(parsestring) 465 parsestring = classmethod(parsestring)
466 466
467 def parse(self, data): 467 def parse(self, data):
468 """parser to process the given source string""" 468 """parser to process the given source string"""
469 self.units = pickle.loads(data).units 469 self.units = pickle.loads(data).units
470 470
471 def savefile(self, storefile): 471 def savefile(self, storefile):
472 """Writes the string representation to the given file (or filename).""" 472 """Writes the string representation to the given file (or filename)."""
473 if isinstance(storefile, basestring): 473 if isinstance(storefile, basestring):
474 storefile = open(storefile, "w") 474 storefile = open(storefile, "w")
475 self.fileobj = storefile 475 self.fileobj = storefile
476 self._assignname() 476 self._assignname()
477 storestring = str(self) 477 storestring = str(self)
478 storefile.write(storestring) 478 storefile.write(storestring)
479 storefile.close() 479 storefile.close()
480 480
481 def save(self): 481 def save(self):
482 """Save to the file that data was originally read from, if available.""" 482 """Save to the file that data was originally read from, if available."""
483 fileobj = getattr(self, "fileobj", None) 483 fileobj = getattr(self, "fileobj", None)
484 if not fileobj: 484 if not fileobj:
485 filename = getattr(self, "filename", None) 485 filename = getattr(self, "filename", None)
486 if filename: 486 if filename:
487 fileobj = file(filename, "w") 487 fileobj = file(filename, "w")
488 else: 488 else:
489 fileobj.close() 489 fileobj.close()
490 filename = getattr(fileobj, "name", getattr(fileobj, "filename", Non e)) 490 filename = getattr(fileobj, "name", getattr(fileobj, "filename", Non e))
491 if not filename: 491 if not filename:
492 raise ValueError("No file or filename to save to") 492 raise ValueError("No file or filename to save to")
493 fileobj = fileobj.__class__(filename, "w") 493 fileobj = fileobj.__class__(filename, "w")
494 self.savefile(fileobj) 494 self.savefile(fileobj)
495 495
496 def parsefile(cls, storefile): 496 def parsefile(cls, storefile):
497 """Reads the given file (or opens the given filename) and parses back to an object.""" 497 """Reads the given file (or opens the given filename) and parses back to an object."""
498 498
499 if isinstance(storefile, basestring): 499 if isinstance(storefile, basestring):
500 storefile = open(storefile, "r") 500 storefile = open(storefile, "r")
501 mode = getattr(storefile, "mode", "r") 501 mode = getattr(storefile, "mode", "r")
502 #For some reason GzipFile returns 1, so we have to test for that here 502 #For some reason GzipFile returns 1, so we have to test for that here
503 if mode == 1 or "r" in mode: 503 if mode == 1 or "r" in mode:
504 storestring = storefile.read() 504 storestring = storefile.read()
505 storefile.close() 505 storefile.close()
506 else: 506 else:
507 storestring = "" 507 storestring = ""
508 newstore = cls.parsestring(storestring) 508 newstore = cls.parsestring(storestring)
509 newstore.fileobj = storefile 509 newstore.fileobj = storefile
510 newstore._assignname() 510 newstore._assignname()
511 return newstore 511 return newstore
512 parsefile = classmethod(parsefile) 512 parsefile = classmethod(parsefile)
513 513
LEFTRIGHT

Powered by Google App Engine
This is Rietveld r159