| 480 | } |
| 481 | |
| 482 | std::shared_ptr<std::vector<LibraryObject>> |
| 483 | ExternalManager::libraryMaterials(const QString& libraryName) |
| 484 | { |
| 485 | auto materialList = std::make_shared<std::vector<LibraryObject>>(); |
| 486 | |
| 487 | connect(); |
| 488 | |
| 489 | Base::PyGILStateLocker lock; |
| 490 | try { |
| 491 | if (_managerObject.hasAttr("libraryMaterials")) { |
| 492 | Py::Callable libraries(_managerObject.getAttr("libraryMaterials")); |
| 493 | Py::Tuple args(1); |
| 494 | args.setItem(0, Py::String(libraryName.toStdString())); |
| 495 | Py::List list(libraries.apply(args)); |
| 496 | for (auto library : list) { |
| 497 | auto entry = Py::Object(library); |
| 498 | if (!checkMaterialLibraryObjectType(entry)) { |
| 499 | throw InvalidMaterial(); |
| 500 | } |
| 501 | |
| 502 | materialList->push_back(materialLibraryObjectTypeFromObject(entry)); |
| 503 | } |
| 504 | } |
| 505 | else { |
| 506 | Base::Console().log("\tlibraryMaterials() not found\n"); |
| 507 | throw ConnectionError(); |
| 508 | } |
| 509 | } |
| 510 | catch (Py::Exception& e) { |
| 511 | Base::PyException e1; // extract the Python error text |
| 512 | throw LibraryNotFound(e1.what()); |
| 513 | } |
| 514 | |
| 515 | return materialList; |
| 516 | } |
| 517 | |
| 518 | std::shared_ptr<std::vector<LibraryObject>> |
| 519 | ExternalManager::libraryMaterials(const QString& libraryName, |
no test coverage detected