added debug function to cqgi
This commit is contained in:
parent
e0e14a133d
commit
65480d4bf1
|
@ -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):
|
||||
"""
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue
Block a user