Skip to content

Commit

Permalink
adding back deleted functionality: executing components, option passing
Browse files Browse the repository at this point in the history
  • Loading branch information
jonrkarr committed Apr 19, 2018
1 parent 6297500 commit 890aae2
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 16 deletions.
44 changes: 39 additions & 5 deletions tests/test_core.py
Expand Up @@ -10,26 +10,60 @@
import wc_model_gen
import unittest
import wc_kb
import wc_lang


class TestModelGenerator(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.knowledge_base = wc_kb.KnowledgeBase()
def setUp(self):
self.knowledge_base = wc_kb.KnowledgeBase()

def test_ModelGenerator_constructor(self):
generator = wc_model_gen.ModelGenerator(self.knowledge_base)

self.assertEqual(generator.knowledge_base, self.knowledge_base)
self.assertEqual(generator.version, '0.0.1')
self.assertEqual(generator.components, ())
self.assertEqual(generator.options, {})

def test_ModelGenerator_run(self):
generator = wc_model_gen.ModelGenerator(self.knowledge_base)
generator = wc_model_gen.ModelGenerator(self.knowledge_base, options={
'id': 'test_model',
})
model = generator.run()

self.assertEqual(model.id, 'test_model')
self.assertEqual(model.version, None)

def test_ModelGenerator_run_with_components(self):
class TestComponentGenerator1(wc_model_gen.ModelComponentGenerator):
def run(self):
self.model.compartments.create(id=self.options['compartment_id'])

class TestComponentGenerator2(wc_model_gen.ModelComponentGenerator):
def run(self):
self.model.compartments.create(name=self.options['compartment_name'])

components = (
TestComponentGenerator1,
TestComponentGenerator2,
)
options = {
'id': 'test_model',
'version': '0.0.1',
'component': {
'TestComponentGenerator1': {
'compartment_id': 'c'
},
'TestComponentGenerator2': {
'compartment_name': 'm'
},
},
}
gen = wc_model_gen.ModelGenerator(self.knowledge_base, components=components, options=options)
model = gen.run()

self.assertEqual(model.id, 'test_model')
self.assertIsInstance(model.compartments.get_one(id='c'), wc_lang.Compartment)
self.assertIsInstance(model.compartments.get_one(name='m'), wc_lang.Compartment)

def test_ModelComponentGenerator_constructor(self):
generator = wc_model_gen.ModelGenerator(self.knowledge_base)
Expand Down
26 changes: 15 additions & 11 deletions wc_model_gen/core.py
Expand Up @@ -22,12 +22,9 @@ class ModelGenerator(object):
optional arguments to the methods
"""

DEFAULT_MODEL_COMPONENTS = () # todo: run default components
DEFAULT_MODEL_GENERATOR_VERSION = '0.0.1'
DEFAULT_MODEL_VERSION = '0.0.1'
DEFAULT_MODEL_ID = 'test_model'
DEFAULT_COMPONENTS = () # todo: run default components

def __init__(self, knowledge_base, components=None, options=None, version=None):
def __init__(self, knowledge_base, components=None, options=None):
"""
Args:
component_generators (:obj:`tuple` of :obj:`ModelComponentGenerator`): model component generators
Expand All @@ -36,8 +33,7 @@ def __init__(self, knowledge_base, components=None, options=None, version=None):
"""

self.knowledge_base = knowledge_base
self.components = components or self.DEFAULT_MODEL_COMPONENTS
self.version = version or self.DEFAULT_MODEL_GENERATOR_VERSION
self.components = components or self.DEFAULT_COMPONENTS
self.options = options or {}

def run(self, id=None, version=None):
Expand All @@ -48,11 +44,17 @@ def run(self, id=None, version=None):
Returns:
:obj:`wc_lang.Model`: model
"""

model = wc_lang.Model()
model.id = id or self.DEFAULT_MODEL_ID
model.version = version or self.DEFAULT_MODEL_VERSION
model.id = self.options.get('id', None)
model.version = self.options.get('version', None)

# run component generators
component_options = self.options.get('component', {})
for component in self.components:
options = component_options.get(component.__name__, {})
component(self.knowledge_base, model, options=options).run()

# return model
return model


Expand All @@ -64,14 +66,16 @@ class ModelComponentGenerator(six.with_metaclass(abc.ABCMeta, object)):
model (:obj:`wc_lang.Model`): model
"""

def __init__(self, knowledge_base, model):
def __init__(self, knowledge_base, model, options=None):
"""
Args:
knowledge_base (:obj:`wc_kb.KnowledgeBase`): knowledge base
model (:obj:`wc_lang.Model`): model
model (:obj:`dict`, optional): options
"""
self.knowledge_base = knowledge_base
self.model = model
self.options = options

@abc.abstractmethod
def run(self):
Expand Down

0 comments on commit 890aae2

Please sign in to comment.