Creation of Tool from a templateAttrs dictionary.

This commit is contained in:
Markus Lampert
2017-09-13 11:43:42 -07:00
committed by wmayer
parent 324dfdd341
commit c705bcb0f1
2 changed files with 32 additions and 11 deletions

View File

@@ -70,9 +70,18 @@ int ToolPy::PyInit(PyObject* args, PyObject* kwd)
static char *kwlist[] = {"name", "tooltype", "material", "diameter", "lengthOffset", "flatRadius", "cornerRadius", "cuttingEdgeAngle", "cuttingEdgeHeight" ,NULL};
if (!PyArg_ParseTupleAndKeywords(args, kwd, "|sssOOOOOO", kwlist,
&name, &type, &mat, &dia, &len, &fla, &cor, &ang, &hei ))
return -1;
PyObject *dict = 0;
if (!kwd && PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) {
PyObject *arg = PyTuple_New(0);
if (!PyArg_ParseTupleAndKeywords(arg, dict, "|sssOOOOOO", kwlist, &name, &type, &mat, &dia, &len, &fla, &cor, &ang, &hei)) {
return -1;
}
} else {
PyErr_Clear();
if (!PyArg_ParseTupleAndKeywords(args, kwd, "|sssOOOOOO", kwlist, &name, &type, &mat, &dia, &len, &fla, &cor, &ang, &hei)) {
return -1;
}
}
getToolPtr()->Name = name;
std::string typeStr(type);
@@ -291,7 +300,6 @@ PyObject* ToolPy::copy(PyObject * args)
PyObject* ToolPy::setFromTemplate(PyObject * args)
{
char *pstr = 0;
PyObject *dict = 0;
if (PyArg_ParseTuple(args, "s", &pstr)) {
// embed actual string in dummy tag so XMLReader can consume that on construction
std::ostringstream os;
@@ -301,13 +309,10 @@ PyObject* ToolPy::setFromTemplate(PyObject * args)
getToolPtr()->Restore(reader);
Py_Return ;
}
if (PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict)) {
PyErr_Clear(); // it's not a string, need to clear that exception
PyObject *arg = PyTuple_New(0);
if (!PyInit(arg, dict)) {
Py_Return ;
}
PyErr_Clear();
if (!PyInit(args, 0)) {
Py_Return ;
}
PyErr_SetString(PyExc_TypeError, "argument must be a string or dictionary");

View File

@@ -83,3 +83,19 @@ class TestPathTool(PathTestBase):
self.assertEqual(t0.CuttingEdgeAngle, t1.CuttingEdgeAngle)
self.assertEqual(t0.CuttingEdgeHeight, t1.CuttingEdgeHeight)
def test02(self):
'''Verify template dictionary construction'''
t0 = self.test00()
t1 = Path.Tool(t0.templateAttrs())
self.assertEqual(t0.Name, t1.Name)
self.assertEqual(t0.ToolType, t1.ToolType)
self.assertEqual(t0.Material, t1.Material)
self.assertEqual(t0.Diameter, t1.Diameter)
self.assertEqual(t0.LengthOffset, t1.LengthOffset)
self.assertEqual(t0.FlatRadius, t1.FlatRadius)
self.assertEqual(t0.CornerRadius, t1.CornerRadius)
self.assertEqual(t0.CuttingEdgeAngle, t1.CuttingEdgeAngle)
self.assertEqual(t0.CuttingEdgeHeight, t1.CuttingEdgeHeight)