Package translate :: Package storage :: Module zip
[hide private]
[frames] | no frames]

Source Code for Module translate.storage.zip

 1  #!/usr/bin/env python 
 2  # -*- coding: utf-8 -*- 
 3  #  
 4  # Copyright 2007 Zuza Software Foundation 
 5  #  
 6  # This file is part of translate. 
 7  # 
 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 
10  # the Free Software Foundation; either version 2 of the License, or 
11  # (at your option) any later version. 
12  #  
13  # translate is distributed in the hope that it will be useful, 
14  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
16  # GNU General Public License for more details. 
17  # 
18  # You should have received a copy of the GNU General Public License 
19  # along with translate; if not, write to the Free Software 
20  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
21   
22  """This module provides functionality to work with zip files.""" 
23   
24  # Perhaps all methods should work with a wildcard to limit searches in some 
25  # way (examples: *.po, base.xlf, pootle-terminology.tbx) 
26   
27  #TODO: consider also providing directories as we currently provide files 
28   
29  #TODO: refactor with existing zip code (xpi.py, etc.) 
30   
31  from translate.storage import factory 
32  from translate.storage import directory 
33  from translate.misc import wStringIO 
34  from os import path 
35  from zipfile import ZipFile 
36   
37 -class ZIPFile(directory.Directory):
38 """This class represents a ZIP file like a directory."""
39 - def __init__(self, filename=None):
40 self.filename = filename 41 self.filedata = []
42
43 - def unit_iter(self):
44 """Iterator over all the units in all the files in this zip file.""" 45 for dirname, filename in self.file_iter(): 46 strfile = wStringIO.StringIO(self.archive.read(path.join(dirname, filename))) 47 strfile.filename = filename 48 store = factory.getobject(strfile) 49 #TODO: don't regenerate all the storage objects 50 for unit in store.unit_iter(): 51 yield unit
52
53 - def scanfiles(self):
54 """Populate the internal file data.""" 55 self.filedata = [] 56 self.archive = ZipFile(self.filename) 57 for completename in self.archive.namelist(): 58 dir, name = path.split(completename) 59 self.filedata.append((dir, name))
60