Launchpad automatic translations update.
[odoo/odoo.git] / bin / tools / osutil.py
1 # -*- coding: utf-8 -*-
2 ##############################################################################
3 #    
4 #    OpenERP, Open Source Management Solution
5 #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
6 #
7 #    This program is free software: you can redistribute it and/or modify
8 #    it under the terms of the GNU Affero General Public License as
9 #    published by the Free Software Foundation, either version 3 of the
10 #    License, or (at your option) any later version.
11 #
12 #    This program is distributed in the hope that it will be useful,
13 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #    GNU Affero General Public License for more details.
16 #
17 #    You should have received a copy of the GNU Affero General Public License
18 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
19 #
20 ##############################################################################
21
22 """
23 Some functions related to the os and os.path module
24 """
25
26 import os
27 from os.path import join as opj
28
29 def listdir(dir, recursive=False):
30         """Allow to recursively get the file listing"""
31         dir = os.path.normpath(dir)
32         if not recursive:
33                 return os.listdir(dir)
34
35         res = []
36         for root, dirs, files in walksymlinks(dir):
37                 root = root[len(dir)+1:]
38                 res.extend([opj(root, f) for f in files])
39         return res
40
41 def walksymlinks(top, topdown=True, onerror=None):
42     """
43     same as os.walk but follow symlinks
44     attention: all symlinks are walked before all normals directories
45     """
46     for dirpath, dirnames, filenames in os.walk(top, topdown, onerror):
47         if topdown:
48             yield dirpath, dirnames, filenames
49
50         symlinks = filter(lambda dirname: os.path.islink(os.path.join(dirpath, dirname)), dirnames)
51         for s in symlinks:
52             for x in walksymlinks(os.path.join(dirpath, s), topdown, onerror):
53                 yield x
54
55         if not topdown:
56             yield dirpath, dirnames, filenames
57
58
59
60 if __name__ == '__main__':
61         from pprint import pprint as pp
62         pp(listdir('../report', True))