added debug function to cqgi

This commit is contained in:
Dave Cowden 2016-04-03 21:01:36 -04:00
parent e0e14a133d
commit 65480d4bf1
2 changed files with 46 additions and 3 deletions

View File

@ -95,10 +95,13 @@ class CQModel(object):
self.set_param_values(build_parameters)
collector = ScriptCallback()
env = EnvironmentBuilder().with_real_builtins().with_cadquery_objects() \
.add_entry("build_object", collector.build_object).build()
.add_entry("build_object", collector.build_object) \
.add_entry("debug", collector.debug) \
.build()
c = compile(self.ast_tree, CQSCRIPT, 'exec')
exec (c, env)
result.set_debug(collector.debugObjects )
if collector.has_results():
result.set_success_result(collector.outputObjects)
else:
@ -139,6 +142,7 @@ class BuildResult(object):
def __init__(self):
self.buildTime = None
self.results = []
self.debugObjects = []
self.first_result = None
self.success = False
self.exception = None
@ -147,6 +151,9 @@ class BuildResult(object):
self.exception = ex
self.success = False
def set_debug(self, debugObjects):
self.debugObjects = debugObjects
def set_success_result(self, results):
self.results = results
self.first_result = self.results[0]
@ -270,9 +277,9 @@ class ScriptCallback(object):
the build_object() method is exposed to CQ scripts, to allow them
to return objects to the execution environment
"""
def __init__(self):
self.outputObjects = []
self.debugObjects = []
def build_object(self, shape):
"""
@ -281,6 +288,12 @@ class ScriptCallback(object):
"""
self.outputObjects.append(shape)
def debug(self,obj,args={}):
"""
Debug print/output an object, with optional arguments.
"""
self.debugObjects.append(DebugObject(obj,args))
def describe_parameter(self,var, valid_values, short_desc):
"""
Not yet implemented: allows a script to document
@ -297,7 +310,15 @@ class ScriptCallback(object):
def has_results(self):
return len(self.outputObjects) > 0
class DebugObject(object):
"""
Represents a request to debug an object
Object is the type of object we want to debug
args are parameters for use during debuging ( for example, color, tranparency )
"""
def __init__(self,object,args):
self.args = args
self.object = object
class InvalidParameterError(Exception):
"""

View File

@ -23,6 +23,18 @@ TESTSCRIPT = textwrap.dedent(
"""
)
TEST_DEBUG_SCRIPT = textwrap.dedent(
"""
height=2.0
width=3.0
(a,b) = (1.0,1.0)
foo="bar"
debug(foo, { "color": 'yellow' } )
result = "%s|%s|%s|%s" % ( str(height) , str(width) , foo , str(a) )
build_object(result)
debug(height )
"""
)
class TestCQGI(BaseTest):
def test_parser(self):
@ -31,6 +43,16 @@ class TestCQGI(BaseTest):
self.assertEquals(set(metadata.parameters.keys()), {'height', 'width', 'a', 'b', 'foo'})
def test_build_with_debug(self):
model = cqgi.CQModel(TEST_DEBUG_SCRIPT)
result = model.build()
debugItems = result.debugObjects
self.assertTrue(len(debugItems) == 2)
self.assertTrue( debugItems[0].object == "bar" )
self.assertTrue( debugItems[0].args == { "color":'yellow' } )
self.assertTrue( debugItems[1].object == 2.0 )
self.assertTrue( debugItems[1].args == {} )
def test_build_with_empty_params(self):
model = cqgi.CQModel(TESTSCRIPT)
result = model.build()