From 8396f4cf7f942ae1fcffd34fea7f0aef3dff0ef4 Mon Sep 17 00:00:00 2001 From: Marc Anton Dahmen Date: Mon, 27 Sep 2021 17:58:45 +0200 Subject: [PATCH] feat(parameter): add storage type utils --- revitron/parameter.py | 61 +++++++++++++++++++++++++++++++++++++++++ tests/test_parameter.py | 12 ++++++++ 2 files changed, 73 insertions(+) diff --git a/revitron/parameter.py b/revitron/parameter.py index 729eeb3..e634234 100644 --- a/revitron/parameter.py +++ b/revitron/parameter.py @@ -331,6 +331,67 @@ def bind(category, paramName, paramType='Text', typeBinding=False): return True + @staticmethod + def getStorageType(name): + """ + Get the storage type of a parameter definition by name. + + Args: + name (string): The parameter name + + Returns: + string: The storage type + """ + from revitron import DOC + try: + parameter = ParameterUtils._findDefinition(name) + return parameter.StorageType + except: + try: + return DOC.TypeOfStorage[ParameterUtils._findBip(name)] + except: + return None + + @staticmethod + def _findDefinition(name): + """ + Find a custom parameter in a document. + + Args: + name (string): The parameter name + + Returns: + object: The parameter object + """ + from revitron import DOC + it = DOC.ParameterBindings.ForwardIterator() + while it.MoveNext(): + if it.Key.Name == name: + return it.Key + return None + + @staticmethod + def _findBip(name): + """ + Find a built-in parameter by name. + + Args: + name (string): The parameter name + + Returns: + object: The built-in parameter + """ + from revitron import DB + for item in dir(DB.BuiltInParameter): + try: + bip = getattr(DB.BuiltInParameter, item) + if DB.LabelUtils.GetLabelFor(bip) == name: + return bip + except: + pass + return None + + class ParameterNameList: """ A helper class for listing all parameter names in the active document. diff --git a/tests/test_parameter.py b/tests/test_parameter.py index 6f135ef..106df32 100644 --- a/tests/test_parameter.py +++ b/tests/test_parameter.py @@ -120,5 +120,17 @@ def testParameterTemplate(self): ).render() ) + def testParameterStorageTypes(self): + + self.assertEquals( + str(revitron.ParameterUtils.getStorageType('Comments')), + 'String' + ) + self.assertEquals(str(revitron.ParameterUtils.getStorageType('Area')), 'Double') + self.assertEquals( + str(revitron.ParameterUtils.getStorageType('Number')), + 'Integer' + ) + utils.run(ParameterTests) \ No newline at end of file