]> Savannah Git Hosting - gnulib.git/commitdiff
filesystem: fast modules iteration
authorDmitry Selyutin <ghostmansd@gmail.com>
Sat, 26 Aug 2017 19:58:26 +0000 (22:58 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Sat, 26 Aug 2017 19:58:26 +0000 (22:58 +0300)
pygnulib/filesystem.py

index 2fe67db65d305cee621c5aca0b5ea0bbec5ad9c6..d6d41bdeaa35dadd8e8a0c8faf9dc5a0f11217f6 100644 (file)
@@ -2,13 +2,15 @@
 # encoding: UTF-8
 
 
-import os
 
+import os
 
 from .config import Config
+from .module import Module
 from .module import FileModule
 
 
+
 class FileSystem:
     """gnulib generic virtual file system"""
     _SUBST_ = {
@@ -81,18 +83,18 @@ class GitFileSystem(FileSystem):
             raise FileNotFoundError(root)
         if not os.path.isdir(os.path.join(root, ".git")):
             raise TypeError("%r is not a gnulib repository")
-        super(GitFileSystem, self).__init__(root, config)
+        super().__init__(root, config)
 
 
-    def module(self, name):
+    def module(self, name, full=True):
         """instantiate gnulib module by its name"""
         if name in GitFileSystem._EXCLUDE_:
-            raise KeyError("module does not exist")
+            raise ValueError("illegal module name")
         path = os.path.join(self["modules"], name)
-        return FileModule(path, name=name)
+        return FileModule(path, name=name) if full else Module(name)
 
 
-    def modules(self):
+    def modules(self, full=True):
         """iterate over all available modules"""
         prefix = self["modules"]
         for root, _, files in os.walk(prefix):
@@ -108,4 +110,4 @@ class GitFileSystem(FileSystem):
             for name in names:
                 path = os.path.join(root, name)
                 name = path[len(prefix) + 1:]
-                yield FileModule(path, name=name)
+                yield self.module(name, full)