BreakingBytes / simkit

Model Simulation Framework
http://breakingbytes.github.io/simkit/
BSD 3-Clause "New" or "Revised" License
27 stars 16 forks source link

Datalayer args #50

Closed mikofski closed 8 years ago

mikofski commented 8 years ago
mikofski commented 8 years ago

Move data layer arg proposed changes from untracked layers.py files to a new issue.

Summary of untracked files on disk:

layers-data-layers-args-A.py is similar to layers-data-layers-args-B.py but has proposed changes for rel_path

--- Carousel\carousel\core\layers-data-layers-args-B.py
+++ Carousel\carousel\core\layers-data-layers-args-A.py
@@ -73,12 +73,12 @@
         # get layer class definition from the module
         self.classes[src_cls] = getattr(mod, src_cls)

-    def load(self, relpath=None):
+    def load(self, alt_path=None):
         """
         Load the layer from the model data. This method must be implemented by
         each layer.

-        :param relpath: alternate path if specified path is missing or ``None``
+        :param alt_path: alternate path if specified path is missing or ``None``
         :raises: :exc:`~exceptions.NotImplementedError`
         """
         raise NotImplementedError('load')
@@ -149,7 +149,7 @@
         # add a place holder for the data source object when it's constructed
         self.data_obj[data_source] = None

-    def open(self, data_source, filename, path=None, rel_path=None):
+    def _open(self, data_source, *args, **kwargs):
         """
         Open filename to get data for data_source.

@@ -160,13 +160,15 @@
         :type filename: str
         :param path: Path of file containting data. [../data]
         :type path: str
-        :param rel_path: relative path to model file
-        """
-        # default path for data is in ../data
+        :param alt_path: relative path to model file
+        """
+        # args include filename, path and alt_path for data sources with
+        # file readers
+        if self.classes[data_source].data_reader.is_file_reader:
+            filename, path, alt_path = args[:3]
         if not path:
-            path = rel_path
-        else:
-            path = os.path.join(rel_path, path)
+            # no path given use default path relative to model file
+            path = alt_path
         # only update layer info if it is missing!
         if data_source not in self.layer:
             # update path and filename to this layer of the model
@@ -185,14 +187,16 @@
         meta = [getattr(data_src_obj, m) for m in self.data._meta_names]
         self.data.register(data_src_obj.data, *meta)

-    def load(self, rel_path=None):
+    def load(self, path=None):
         """
         Add data_sources to layer and open files with data for the data_source.
+
+        :param path: optional path to use if specified path is missing or None
         """
         for k, v in self.layer.iteritems():
             self.add(k, v['module'], v.get('package'))
             if v.get('filename'):
-                self.open(k, v['filename'], v.get('path'), rel_path)
+                self._open(k, v['filename'], v.get('path', path))

     def edit(self, data_src, value):
         """
@@ -318,6 +322,9 @@
         self.outputs = OutputRegistry()
         # layers are initialized by the model

+    def open(self, output, module, package=None):
+        self.add(output, module, package=package)
+
     def add(self, output, module, package=None):
         """
         Add output to
@@ -330,9 +337,6 @@
         meta = [getattr(out_src_obj, m) for m in self.outputs._meta_names]
         self.outputs.register(out_src_obj.outputs, *meta)

-    def open(self, output, module, package=None):
-        self.add(output, module, package=package)
-
     def load(self, _=None):
         """
         Add output_source to layer.
@@ -356,15 +360,15 @@
         """
         super(Simulations, self).add(sim, module, package)

-    def open(self, sim_src, filename, path=None, rel_path=None):
+    def open(self, sim_src, filename, path=None, alt_path=None):
         # default path for data is in ../simulations
         if not path:
-            path = rel_path
+            path = alt_path
         else:
-            path = os.path.join(rel_path, path)
+            path = os.path.join(alt_path, path)
         filename = os.path.join(path, filename)
         # call constructor of sim source with filename argument
-        self.sim_obj[sim_src] = self.sim_src[sim_src](filename)
+        self.sim_obj[sim_src] = self.classes[sim_src](filename)
         # register simulations in registry, the only reason to register an item
         # is make sure it doesn't overwrite other items
         sim_src_obj = self.sim_obj[sim_src]
@@ -372,10 +376,10 @@
                 self.simulations._meta_names]
         self.simulations.register({sim_src: sim_src_obj}, *meta)

-    def load(self, rel_path=None):
+    def load(self, alt_path=None):
         """
         Add sim_src to layer.
         """
         for k, v in self.layer.iteritems():
             self.add(k, v['module'], v.get('package'))
-            self.open(k, v['filename'], v.get('path'), rel_path)
+            self.open(k, v['filename'], v.get('path'), alt_path)
$ git diff 9771d87b45d9c460aef45c72e9d628085f7d1930:carousel/core/layers.py carousel/core/layers-data-layers-args-B.py

layers-data-layers-args-B.py is same as 9771d87b45d9c460aef45c72e9d628085f7d1930

$ git diff 79c37f6d3cd79c683c0bc7da21f8a54741ff8efd:carousel/core/layers.py  carousel/core/layers-79c37f6d3cd79c683c0bc7da21f8a54741ff8efd.py

layers-79c37f6d3cd79c683c0bc7da21f8a54741ff8efd.py is same as 79c37f6d3cd79c683c0bc7da21f8a54741ff8efd