Materials: External Modules Part 1
Refactored code to support local and external material sources This is the first PR in a series to support external modules. External modules allow materials to be stored in external data sources such as databases or web services. No new functionality is introduced in this PR, rather it is a refactoring of code that will allow for changes to be introduced in future PRs. Minor performance improvements have also been made in the model and material managers. The Python API has been enhanced for many data types to allow for modification within Python.
This commit is contained in:
committed by
Chris Hennes
parent
3c4977a2d4
commit
00c57a9d08
@@ -118,3 +118,220 @@ class ModelTestCases(unittest.TestCase):
|
||||
self.assertIn("URL", dir(prop))
|
||||
self.assertIn("Units", dir(prop))
|
||||
self.assertEqual(prop.Name, "Density")
|
||||
|
||||
def testTestModelCompleteness(self):
|
||||
""" Test that the Test model has been loaded correctly """
|
||||
model = self.ModelManager.getModel(self.uuids.TestModel)
|
||||
self.assertIsNotNone(model)
|
||||
self.assertEqual(model.Name, "Test Model")
|
||||
self.assertEqual(model.UUID, "34d0583d-f999-49ba-99e6-aa40bd5c3a6b")
|
||||
self.assertIn("TestString", model.Properties)
|
||||
self.assertEqual(len(model.Properties), 17)
|
||||
prop = model.Properties["TestString"]
|
||||
self.assertIn("Description", dir(prop))
|
||||
self.assertIn("Name", dir(prop))
|
||||
self.assertIn("Type", dir(prop))
|
||||
self.assertIn("URL", dir(prop))
|
||||
self.assertIn("Units", dir(prop))
|
||||
self.assertEqual(prop.Name, "TestString")
|
||||
self.assertEqual(prop.Type, "String")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A String")
|
||||
prop = model.Properties["TestURL"]
|
||||
self.assertEqual(prop.Name, "TestURL")
|
||||
self.assertEqual(prop.Type, "URL")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A URL")
|
||||
prop = model.Properties["TestList"]
|
||||
self.assertEqual(prop.Name, "TestList")
|
||||
self.assertEqual(prop.Type, "List")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A List")
|
||||
prop = model.Properties["TestFileList"]
|
||||
self.assertEqual(prop.Name, "TestFileList")
|
||||
self.assertEqual(prop.Type, "FileList")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A List of file paths")
|
||||
prop = model.Properties["TestImageList"]
|
||||
self.assertEqual(prop.Name, "TestImageList")
|
||||
self.assertEqual(prop.Type, "ImageList")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A List of embedded images")
|
||||
prop = model.Properties["TestInteger"]
|
||||
self.assertEqual(prop.Name, "TestInteger")
|
||||
self.assertEqual(prop.Type, "Integer")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A Integer")
|
||||
prop = model.Properties["TestFloat"]
|
||||
self.assertEqual(prop.Name, "TestFloat")
|
||||
self.assertEqual(prop.Type, "Float")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A Float")
|
||||
prop = model.Properties["TestBoolean"]
|
||||
self.assertEqual(prop.Name, "TestBoolean")
|
||||
self.assertEqual(prop.Type, "Boolean")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A Boolean")
|
||||
prop = model.Properties["TestColor"]
|
||||
self.assertEqual(prop.Name, "TestColor")
|
||||
self.assertEqual(prop.Type, "Color")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A Color")
|
||||
prop = model.Properties["TestFile"]
|
||||
self.assertEqual(prop.Name, "TestFile")
|
||||
self.assertEqual(prop.Type, "File")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A File")
|
||||
prop = model.Properties["TestSVG"]
|
||||
self.assertEqual(prop.Name, "TestSVG")
|
||||
self.assertEqual(prop.Type, "SVG")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "An SVG")
|
||||
prop = model.Properties["TestImage"]
|
||||
self.assertEqual(prop.Name, "TestImage")
|
||||
self.assertEqual(prop.Type, "Image")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "An Image")
|
||||
prop = model.Properties["TestQuantity"]
|
||||
self.assertEqual(prop.Name, "TestQuantity")
|
||||
self.assertEqual(prop.Type, "Quantity")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "kg/m^3")
|
||||
self.assertEqual(prop.Description, "A Quantity")
|
||||
prop = model.Properties["TestMultiLineString"]
|
||||
self.assertEqual(prop.Name, "TestMultiLineString")
|
||||
self.assertEqual(prop.Type, "MultiLineString")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "A string that spans multiple lines")
|
||||
|
||||
prop = model.Properties["TestArray2D"]
|
||||
self.assertEqual(prop.Name, "TestArray2D")
|
||||
self.assertEqual(prop.Type, "2DArray")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "2 Dimensional array showing density with temperature\n")
|
||||
self.assertEqual(len(prop.Columns), 2)
|
||||
col = prop.Columns[0]
|
||||
self.assertIn("Description", dir(col))
|
||||
self.assertIn("Name", dir(col))
|
||||
self.assertIn("Type", dir(col))
|
||||
self.assertIn("URL", dir(col))
|
||||
self.assertIn("Units", dir(col))
|
||||
self.assertEqual(col.Name, "Temperature")
|
||||
self.assertEqual(col.Type, "Quantity")
|
||||
self.assertEqual(col.URL, "")
|
||||
self.assertEqual(col.Units, "C")
|
||||
self.assertEqual(col.Description, "Temperature")
|
||||
col = prop.Columns[1]
|
||||
self.assertEqual(col.Name, "Density")
|
||||
self.assertEqual(col.Type, "Quantity")
|
||||
self.assertEqual(col.URL, "https://en.wikipedia.org/wiki/Density")
|
||||
self.assertEqual(col.Units, "kg/m^3")
|
||||
self.assertEqual(col.Description, "Density in [FreeCAD Density unit]")
|
||||
|
||||
prop = model.Properties["TestArray2D3Column"]
|
||||
self.assertEqual(prop.Name, "TestArray2D3Column")
|
||||
self.assertEqual(prop.Type, "2DArray")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "2 Dimensional array showing density and initial yield stress with temperature\n")
|
||||
self.assertEqual(len(prop.Columns), 3)
|
||||
col = prop.Columns[0]
|
||||
self.assertEqual(col.Name, "Temperature")
|
||||
self.assertEqual(col.Type, "Quantity")
|
||||
self.assertEqual(col.URL, "")
|
||||
self.assertEqual(col.Units, "C")
|
||||
self.assertEqual(col.Description, "Temperature")
|
||||
col = prop.Columns[1]
|
||||
self.assertEqual(col.Name, "Density")
|
||||
self.assertEqual(col.Type, "Quantity")
|
||||
self.assertEqual(col.URL, "https://en.wikipedia.org/wiki/Density")
|
||||
self.assertEqual(col.Units, "kg/m^3")
|
||||
self.assertEqual(col.Description, "Density in [FreeCAD Density unit]")
|
||||
col = prop.Columns[2]
|
||||
self.assertEqual(col.Name, "InitialYieldStress")
|
||||
self.assertEqual(col.Type, "Quantity")
|
||||
self.assertEqual(col.URL, "")
|
||||
self.assertEqual(col.Units, "kPa")
|
||||
self.assertEqual(col.Description, "Saturation stress for Voce isotropic hardening [FreeCAD Pressure unit]\n")
|
||||
|
||||
prop = model.Properties["TestArray3D"]
|
||||
self.assertEqual(prop.Name, "TestArray3D")
|
||||
self.assertEqual(prop.Type, "3DArray")
|
||||
self.assertEqual(prop.URL, "")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "3 Dimensional array showing stress and strain as a function of temperature\n")
|
||||
self.assertEqual(len(prop.Columns), 3)
|
||||
col = prop.Columns[0]
|
||||
self.assertEqual(col.Name, "Temperature")
|
||||
self.assertEqual(col.Type, "Quantity")
|
||||
self.assertEqual(col.URL, "")
|
||||
self.assertEqual(col.Units, "C")
|
||||
self.assertEqual(col.Description, "Temperature")
|
||||
col = prop.Columns[1]
|
||||
self.assertEqual(col.Name, "Stress")
|
||||
self.assertEqual(col.Type, "Quantity")
|
||||
self.assertEqual(col.URL, "")
|
||||
self.assertEqual(col.Units, "MPa")
|
||||
self.assertEqual(col.Description, "Stress")
|
||||
col = prop.Columns[2]
|
||||
self.assertEqual(col.Name, "Strain")
|
||||
self.assertEqual(col.Type, "Quantity")
|
||||
self.assertEqual(col.URL, "")
|
||||
self.assertEqual(col.Units, "MPa")
|
||||
self.assertEqual(col.Description, "Strain")
|
||||
|
||||
def testModelInheritance(self):
|
||||
""" Test that the inherited models have been loaded correctly """
|
||||
model = self.ModelManager.getModel(self.uuids.LinearElastic)
|
||||
self.assertIsNotNone(model)
|
||||
self.assertEqual(model.Name, "Linear Elastic")
|
||||
self.assertEqual(model.UUID, "7b561d1d-fb9b-44f6-9da9-56a4f74d7536")
|
||||
self.assertIn("Density", model.Properties)
|
||||
prop = model.Properties["Density"]
|
||||
self.assertEqual(prop.Name, "Density")
|
||||
self.assertEqual(prop.Type, "Quantity")
|
||||
self.assertEqual(prop.URL, "https://en.wikipedia.org/wiki/Density")
|
||||
self.assertEqual(prop.Units, "kg/m^3")
|
||||
self.assertEqual(prop.Description, "Density in [FreeCAD Density unit]")
|
||||
prop = model.Properties["BulkModulus"]
|
||||
self.assertEqual(prop.Name, "BulkModulus")
|
||||
self.assertEqual(prop.DisplayName, "Bulk Modulus")
|
||||
self.assertEqual(prop.Type, "Quantity")
|
||||
self.assertEqual(prop.URL, "https://en.wikipedia.org/wiki/Bulk_modulus")
|
||||
self.assertEqual(prop.Units, "kPa")
|
||||
self.assertEqual(prop.Description, "Bulk modulus in [FreeCAD Pressure unit]")
|
||||
prop = model.Properties["PoissonRatio"]
|
||||
self.assertEqual(prop.Name, "PoissonRatio")
|
||||
self.assertEqual(prop.DisplayName, "Poisson Ratio")
|
||||
self.assertEqual(prop.Type, "Float")
|
||||
self.assertEqual(prop.URL, "https://en.wikipedia.org/wiki/Poisson%27s_ratio")
|
||||
self.assertEqual(prop.Units, "")
|
||||
self.assertEqual(prop.Description, "Poisson's ratio [unitless]")
|
||||
prop = model.Properties["ShearModulus"]
|
||||
self.assertEqual(prop.Name, "ShearModulus")
|
||||
self.assertEqual(prop.DisplayName, "Shear Modulus")
|
||||
self.assertEqual(prop.Type, "Quantity")
|
||||
self.assertEqual(prop.URL, "https://en.wikipedia.org/wiki/Shear_modulus")
|
||||
self.assertEqual(prop.Units, "kPa")
|
||||
self.assertEqual(prop.Description, "Shear modulus in [FreeCAD Pressure unit]")
|
||||
prop = model.Properties["YoungsModulus"]
|
||||
self.assertEqual(prop.Name, "YoungsModulus")
|
||||
self.assertEqual(prop.DisplayName, "Young's Modulus")
|
||||
self.assertEqual(prop.Type, "Quantity")
|
||||
self.assertEqual(prop.URL, "https://en.wikipedia.org/wiki/Young%27s_modulus")
|
||||
self.assertEqual(prop.Units, "kPa")
|
||||
self.assertEqual(prop.Description, "Young's modulus (or E-Module) in [FreeCAD Pressure unit]")
|
||||
Reference in New Issue
Block a user