fix git support for v1.5.3 (or higher) by setting "--work-tree"
[translate_toolkit.git] / storage / directory.py
blobabce82b06e997ed1ef2208a08de6fde2887564dc
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #
4 # Copyright 2007 Zuza Software Foundation
5 #
6 # This file is part of translate.
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.
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.
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
22 """This module provides functionality to work with directories."""
24 # Perhaps all methods should work with a wildcard to limit searches in some
25 # way (examples: *.po, base.xlf, pootle-terminology.tbx)
27 #TODO: consider also providing directories as we currently provide files
29 from translate.storage import factory
30 from os import path
32 class Directory:
33 """This class represents a directory."""
34 def __init__(self, dir=None):
35 self.dir = dir
36 self.filedata = []
38 def file_iter(self):
39 """Iterator over (dir, filename) for all files in this directory."""
40 if not self.filedata:
41 self.scanfiles()
42 for filetuple in self.filedata:
43 yield filetuple
45 def getfiles(self):
46 """Returns a list of (dir, filename) tuples for all the file names in
47 this directory."""
48 return [filetuple for filetuple in self.file_iter()]
50 def unit_iter(self):
51 """Iterator over all the units in all the files in this directory."""
52 for dirname, filename in self.file_iter():
53 store = factory.getobject(path.join(dirname, filename))
54 #TODO: don't regenerate all the storage objects
55 for unit in store.unit_iter():
56 yield unit
58 def getunits(self):
59 """List of all the units in all the files in this directory."""
60 return [unit for unit in self.unit_iter()]
62 def scanfiles(self):
63 """Populate the internal file data."""
64 self.filedata = []
65 def addfile(arg, dirname, fnames):
66 for fname in fnames:
67 if path.isfile(path.join(dirname, fname)):
68 self.filedata.append((dirname, fname))
70 path.walk(self.dir, addfile, None)