Anonymous avatar Anonymous committed d143fdf

builtins: using utils.cacheit in BuiltinModule

Comments (0)

Files changed (1)

rope/base/builtins.py

 import inspect
 
 import rope.base.evaluate
-from rope.base import pynames, pyobjects, arguments
+from rope.base import pynames, pyobjects, arguments, utils
 
 
 class BuiltinModule(pyobjects.AbstractModule):
         super(BuiltinModule, self).__init__()
         self.name = name
         self.initial = initial
-        self.attributes = None
 
     parent = None
 
     def get_attributes(self):
-        if self.attributes is None:
-            self._calculate_attributes()
         return self.attributes
 
     def get_doc(self):
     def get_name(self):
         return self.name
 
-    def _calculate_attributes(self):
-        self.attributes = {}
-        if self.module is not None:
-            self.attributes = _object_attributes(self.module, self)
-        self.attributes.update(self.initial)
+    @property
+    @utils.cacheit
+    def attributes(self):
+        result = _object_attributes(self.module, self)
+        result.update(self.initial)
+        return result
 
-    _loaded = False
-    _module = None
     @property
+    @utils.cacheit
     def module(self):
-        if not self._loaded:
-            self._loaded = True
-            try:
-                self._module = __import__(self.name)
-            except ImportError:
-                self._module = None
-        return self._module
+        try:
+            return __import__(self.name)
+        except ImportError:
+            return
 
 
 class _BuiltinElement(object):
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.