Skip to content
This repository has been archived by the owner on Feb 9, 2021. It is now read-only.

Commit

Permalink
Merge 947e77d into ba6d211
Browse files Browse the repository at this point in the history
  • Loading branch information
jmwright committed Feb 8, 2018
2 parents ba6d211 + 947e77d commit 7188446
Showing 1 changed file with 26 additions and 7 deletions.
33 changes: 26 additions & 7 deletions cadquery/cqgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ def build(self, build_parameters=None, build_options=None):
.build()

c = compile(self.ast_tree, CQSCRIPT, 'exec')

exec (c, env)
result.set_debug(collector.debugObjects )
result.set_success_result(collector.outputObjects)
Expand All @@ -130,6 +131,7 @@ def set_param_values(self, params):
raise InvalidParameterError("Cannot set value '%s': not a parameter of the model." % k)

p = model_parameters[k]

p.set_value(v)


Expand All @@ -139,8 +141,8 @@ class ShapeResult(object):
"""
def __init__(self):
self.shape = None
self.options = None
self.options = None

class BuildResult(object):
"""
The result of executing a CadQuery script.
Expand Down Expand Up @@ -253,7 +255,6 @@ def create(ast_node, var_name, var_type, default_value, valid_values=None, desc=
return p

def set_value(self, new_value):

if len(self.valid_values) > 0 and new_value not in self.valid_values:
raise InvalidParameterError(
"Cannot set value '{0:s}' for parameter '{1:s}': not a valid value. Valid values are {2:s} "
Expand All @@ -277,9 +278,15 @@ def set_value(self, new_value):
self.ast_node.s = str(new_value)
elif self.varType == BooleanParameterType:
if new_value:
self.ast_node.id = 'True'
if hasattr(ast, 'NameConstant'):
self.ast_node.value = True
else:
self.ast_node.id = 'True'
else:
self.ast_node.id = 'False'
if hasattr(ast, 'NameConstant'):
self.ast_node.value = False
else:
self.ast_node.id = 'False'
else:
raise ValueError("Unknown Type of var: ", str(self.varType))

Expand Down Expand Up @@ -449,13 +456,20 @@ def handle_assignment(self, var_name, value_node):
elif type(value_node) == ast.Str:
self.cqModel.add_script_parameter(
InputParameter.create(value_node, var_name, StringParameterType, value_node.s))
elif type(value_node == ast.Name):
elif type(value_node) == ast.Name:
if value_node.id == 'True':
self.cqModel.add_script_parameter(
InputParameter.create(value_node, var_name, BooleanParameterType, True))
elif value_node.id == 'False':
self.cqModel.add_script_parameter(
InputParameter.create(value_node, var_name, BooleanParameterType, False))
elif hasattr(ast, 'NameConstant') and type(value_node) == ast.NameConstant:
if value_node.value == True:
self.cqModel.add_script_parameter(
InputParameter.create(value_node, var_name, BooleanParameterType, True))
else:
self.cqModel.add_script_parameter(
InputParameter.create(value_node, var_name, BooleanParameterType, False))
except:
print("Unable to handle assignment for variable '%s'" % var_name)
pass
Expand All @@ -469,7 +483,12 @@ def visit_Assign(self, node):
if isinstance(left_side,ast.Attribute):
return

if type(node.value) in [ast.Num, ast.Str, ast.Name]:
# Handle the NamedConstant type that is only present in Python 3
astTypes = [ast.Num, ast.Str, ast.Name]
if hasattr(ast, 'NameConstant'):
astTypes.append(ast.NameConstant)

if type(node.value) in astTypes:
self.handle_assignment(left_side.id, node.value)
elif type(node.value) == ast.Tuple:
# we have a multi-value assignment
Expand Down

0 comments on commit 7188446

Please sign in to comment.