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

# Source Code for Module translate.storage.directory

     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 directories."""
    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  from translate.storage import factory
    30  from os import path
    31
    32 -class Directory:
    33      """This class represents a directory."""
    34 -    def __init__(self, dir=None):
    35          self.dir = dir
    36          self.filedata = []
    37
    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
    44
    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()]
    49
    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
    57
    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()]
    61
    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))
    69
    70          path.walk(self.dir, addfile, None)
    71