diff --git a/generateDS.py b/generateDS.py index d0549916e63060f2fa1b03edf11d8bc2250a64cf..74b86916a2d8449bcd3f89e3d11c2f8ec93fc47b 100755 --- a/generateDS.py +++ b/generateDS.py @@ -257,6 +257,14 @@ Namespacedef = '' NoNameSpaceDefs = False CleanupNameList = [(re.compile('[-:.]'), '_')] PythonIdentifierRegex = re.compile('^[_A-Za-z][_A-Za-z0-9]*$') +UppercaseEnums = True +NameSeparationRegexList = [ + re.compile("(.)([A-Z][a-z]+)"), + re.compile("(.)([0-9]+)"), + re.compile("([0-9])([a-zA-Z])"), + re.compile("([a-z])([A-Z])") + ] +NonAlphaNumRegex = re.compile(r"\W+") NamespacesDict = {} SchemaNamespaceDict = {} @@ -6675,7 +6683,17 @@ def generateFromTree(wrt, prefix, elements, processed): def generateSimpleTypes(wrt, prefix, simpleTypeDict): + global UppercaseEnums + def value2Uppercase(value): + if UppercaseEnums: + # This will turn a string 'fooBar123' to 'foo_Bar_123' + for regex in NameSeparationRegexList: + value = regex.sub(r"\1_\2", value) + value = value.upper() + value = NonAlphaNumRegex.sub("", value) + return value def validateIdentifier(name): + name = value2Uppercase(name) validPythonIdentifier = True if not PythonIdentifierRegex.match(name): # it may start with a digit diff --git a/tests/extensions1_sup.py b/tests/extensions1_sup.py index b2d7979434fb2874f24c0cde2c5e06b72cc45812..cd73247b9020dadc20d0afb7aca0d2cce3cd2ed1 100644 --- a/tests/extensions1_sup.py +++ b/tests/extensions1_sup.py @@ -727,18 +727,18 @@ def _cast(typ, value): class RelationType(object): - down='down' - add='add' + DOWN='down' + ADD='add' class RelationType2(object): - up='up' - subtract='subtract' + UP='up' + SUBTRACT='subtract' class RelationType3(object): - right='right' - divide='divide' + RIGHT='right' + DIVIDE='divide' class SpecialDate(GeneratedsSuper): diff --git a/tests/out1_sup.py b/tests/out1_sup.py index b8648cec4df9ed7cd385fad833af956fa343a455..da58adfbde587467d82641d27f6cce1a4fd6cc8f 100644 --- a/tests/out1_sup.py +++ b/tests/out1_sup.py @@ -727,10 +727,10 @@ def _cast(typ, value): class ArrayTypes(object): - float_='float' - int='int' - Name='Name' - token='token' + FLOAT='float' + INT='int' + NAME='Name' + TOKEN='token' class people(GeneratedsSuper): diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py index 4d56ba5fda0842ea92c2e024abfd6e43185be5fd..74bb82039d230658d01cdcea4ff2dc28c6365b33 100644 --- a/tests/people_procincl1_sup.py +++ b/tests/people_procincl1_sup.py @@ -727,10 +727,10 @@ def _cast(typ, value): class ArrayTypes(object): - float_='float' - int='int' - Name='Name' - token='token' + FLOAT='float' + INT='int' + NAME='Name' + TOKEN='token' class people(GeneratedsSuper): diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py index ab064c5279e30951282fbd416cf02bb0c51c5d64..1cd690f177a765d93ad87bc827a9e9cb3ef6df92 100644 --- a/tests/prefix_classname1_sup.py +++ b/tests/prefix_classname1_sup.py @@ -727,10 +727,10 @@ def _cast(typ, value): class ArrayTypes(object): - float_='float' - int='int' - Name='Name' - token='token' + FLOAT='float' + INT='int' + NAME='Name' + TOKEN='token' class tomato_people(GeneratedsSuper): diff --git a/tests/simpletype_memberspecs1_sup.py b/tests/simpletype_memberspecs1_sup.py index bdd6a08c9b006991cf8f24e425f3640fa16bc81a..487cd67ecdcbe03316a4b63ea79385fa1faa6e76 100644 --- a/tests/simpletype_memberspecs1_sup.py +++ b/tests/simpletype_memberspecs1_sup.py @@ -727,18 +727,18 @@ def _cast(typ, value): class RelationType(object): - down='down' - add='add' + DOWN='down' + ADD='add' class RelationType2(object): - down='down' - add='add' + DOWN='down' + ADD='add' class RelationType3(object): - down='down' - add='add' + DOWN='down' + ADD='add' class SpecialDate(GeneratedsSuper): diff --git a/tests/test.py b/tests/test.py index fcbe202cea8e8bd58efd8ed2d7cff94d1526dc33..780132f33df31d692c9b70f7a0a956e83e2c3763 100755 --- a/tests/test.py +++ b/tests/test.py @@ -933,7 +933,7 @@ class GenTest(unittest.TestCase): diffs = list(diffs) if diffs: diffs = ''.join(diffs[2:12]) - self.fail("Files differed:\n{}".format(diffs)) + self.fail("Files '{}' and '{}' differed:\n{}".format(left, right, diffs)) def remove(self, filename): if False: diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py index 30ec5a223b63934c12e05e268f2af3ef4735b3d1..fe95d814742fd135c91fd7a544b1a0f3573ec933 100644 --- a/tests/to_etree1_sup.py +++ b/tests/to_etree1_sup.py @@ -729,10 +729,10 @@ def _cast(typ, value): class ArrayTypes(object): - float_='float' - int='int' - Name='Name' - token='token' + FLOAT='float' + INT='int' + NAME='Name' + TOKEN='token' class peopleType(GeneratedsSuper): diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py index 2103a485440d163175b7e2c2e8d078dd0dea11d7..3243bb4e03dfa1bef13b22c1b0611d2a3b1d633a 100644 --- a/tests/validate_simpletypes1_sup.py +++ b/tests/validate_simpletypes1_sup.py @@ -727,10 +727,10 @@ def _cast(typ, value): class token_enum_st(object): - float_='float' - int='int' - Name='Name' - token='token' + FLOAT='float' + INT='int' + NAME='Name' + TOKEN='token' class containerType(GeneratedsSuper): diff --git a/tests/validate_simpletypes2_sup.py b/tests/validate_simpletypes2_sup.py index a4e7540e979a880afd0aae506f9864361e1b1c5c..b9a98fdf118d2aa5d011093ccee88a13eb923926 100644 --- a/tests/validate_simpletypes2_sup.py +++ b/tests/validate_simpletypes2_sup.py @@ -727,10 +727,10 @@ def _cast(typ, value): class token_enum_st(object): - float_='float' - int='int' - Name='Name' - token='token' + FLOAT='float' + INT='int' + NAME='Name' + TOKEN='token' class containerType(GeneratedsSuper):