Maciej Fijalkowski avatar Maciej Fijalkowski committed a4a9091

Add a storage mechanizm for codes

Comments (0)

Files changed (2)

 for all loops and bridges, so http requests can refer to them by name
 """
 
+import os
 from loops import Function, Bytecode
+from module_finder import gather_all_code_objs
 
 class LoopStorage(object):
-    def __init__(self):
+    def __init__(self, extrapath=None):
         self.loops = None
         self.functions = {}
+        self.codes = {}
+        self.extrapath = extrapath
+
+    def load_code(self, fname):
+        try:
+            return self.codes[fname]
+        except KeyError:
+            if os.path.isabs(fname):
+                res = gather_all_code_objs(fname)
+            else:
+                if self.extrapath is None:
+                    raise IOError("Cannot find %s" % fname)
+                res = gather_all_code_objs(os.path.join(self.extrapath, fname))
+            self.codes[fname] = res
+            return res
 
     def reconnect_loops(self, loops):
         """ Re-connect loops in a way that entry bridges are filtered out

test/test_storage.py

+
+import py
+from storage import LoopStorage
+
+def test_load_codes():
+    tmppath = py.test.ensuretemp('load_codes')
+    tmppath.join("x.py").write("def f(): pass") # one code
+    s = LoopStorage(str(tmppath))
+    assert s.load_code(str(tmppath.join('x.py'))) == s.load_code('x.py')
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.